mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-31 19:42:26 +00:00
tests: fakesink: test notify::last-message and deep-notify::last-message
deep-notify::last-message seems to cause some problems, so disable for now. https://bugzilla.gnome.org/show_bug.cgi?id=681642
This commit is contained in:
parent
91f537edf2
commit
0c80c41ade
1 changed files with 175 additions and 0 deletions
|
@ -991,6 +991,179 @@ GST_START_TEST (test_notify_race)
|
|||
|
||||
GST_END_TEST;
|
||||
|
||||
static void
|
||||
last_message_cb (GObject * obj, GParamSpec * pspec, gpointer user_data)
|
||||
{
|
||||
gint *p_counter = user_data;
|
||||
gchar *s, *end, *last_msg = NULL;
|
||||
guint64 offset, count;
|
||||
|
||||
g_object_get (obj, "last-message", &last_msg, NULL);
|
||||
fail_unless (last_msg != NULL);
|
||||
|
||||
if (!strstr (last_msg, "chain"))
|
||||
return;
|
||||
|
||||
GST_LOG_OBJECT (obj, "%s", last_msg);
|
||||
|
||||
s = strstr (last_msg, "offset: ");
|
||||
fail_unless (s != NULL);
|
||||
|
||||
s += strlen ("offset: ");
|
||||
|
||||
offset = g_ascii_strtoull (s, &end, 10);
|
||||
fail_unless (offset < G_MAXUINT64);
|
||||
fail_if (end == s);
|
||||
|
||||
count = *p_counter;
|
||||
|
||||
fail_unless_equals_int (count, offset);
|
||||
|
||||
*p_counter = count + 1;
|
||||
|
||||
g_free (last_msg);
|
||||
}
|
||||
|
||||
#define NUM_BUFFERS 500
|
||||
|
||||
GST_START_TEST (test_last_message_notify)
|
||||
{
|
||||
GstElement *pipe, *src, *tee, *q1, *q2, *sink1, *sink2;
|
||||
gint counter1 = 0;
|
||||
gint counter2 = 0;
|
||||
GstMessage *m;
|
||||
|
||||
pipe = gst_pipeline_new ("pipeline");
|
||||
src = gst_element_factory_make ("fakesrc", NULL);
|
||||
gst_util_set_object_arg (G_OBJECT (src), "sizetype", "fixed");
|
||||
g_object_set (src, "num-buffers", NUM_BUFFERS, "sizemax", 1, NULL);
|
||||
|
||||
tee = gst_element_factory_make ("tee", NULL);
|
||||
|
||||
q1 = gst_element_factory_make ("queue", NULL);
|
||||
sink1 = gst_element_factory_make ("fakesink", NULL);
|
||||
g_object_set (sink1, "silent", FALSE, NULL);
|
||||
|
||||
q2 = gst_element_factory_make ("queue", NULL);
|
||||
sink2 = gst_element_factory_make ("fakesink", NULL);
|
||||
g_object_set (sink2, "silent", FALSE, NULL);
|
||||
|
||||
gst_bin_add_many (GST_BIN (pipe), src, tee, q1, q2, sink1, sink2, NULL);
|
||||
fail_unless (gst_element_link_many (src, tee, NULL));
|
||||
fail_unless (gst_element_link_many (tee, q1, sink1, NULL));
|
||||
fail_unless (gst_element_link_many (tee, q2, sink2, NULL));
|
||||
|
||||
g_signal_connect (sink1, "notify::last-message",
|
||||
G_CALLBACK (last_message_cb), &counter1);
|
||||
g_signal_connect (sink2, "notify::last-message",
|
||||
G_CALLBACK (last_message_cb), &counter2);
|
||||
|
||||
GST_DEBUG ("Setting pipeline to PLAYING");
|
||||
fail_unless_equals_int (gst_element_set_state (pipe, GST_STATE_PLAYING),
|
||||
GST_STATE_CHANGE_ASYNC);
|
||||
|
||||
m = gst_bus_timed_pop_filtered (GST_ELEMENT_BUS (pipe), -1, GST_MESSAGE_EOS);
|
||||
gst_message_unref (m);
|
||||
|
||||
fail_unless_equals_int (gst_element_set_state (pipe, GST_STATE_NULL),
|
||||
GST_STATE_CHANGE_SUCCESS);
|
||||
|
||||
fail_unless_equals_int (counter1, NUM_BUFFERS);
|
||||
fail_unless_equals_int (counter2, NUM_BUFFERS);
|
||||
}
|
||||
|
||||
GST_END_TEST;
|
||||
|
||||
static void
|
||||
deep_notify_last_message_cb (GstObject * obj, GstObject * prop_obj,
|
||||
GParamSpec * pspec, gpointer user_data)
|
||||
{
|
||||
gint *counter_array = user_data;
|
||||
gint *p_counter;
|
||||
gchar *s, *end, *last_msg = NULL;
|
||||
guint64 offset, count;
|
||||
|
||||
if (strcmp (GST_OBJECT_NAME (prop_obj), "fakesink0") == 0)
|
||||
p_counter = counter_array;
|
||||
else if (strcmp (GST_OBJECT_NAME (prop_obj), "fakesink1") == 0)
|
||||
p_counter = counter_array + 1;
|
||||
else
|
||||
g_assert_not_reached ();
|
||||
|
||||
g_object_get (prop_obj, "last-message", &last_msg, NULL);
|
||||
fail_unless (last_msg != NULL);
|
||||
|
||||
if (!strstr (last_msg, "chain"))
|
||||
return;
|
||||
|
||||
GST_LOG_OBJECT (prop_obj, "%s", last_msg);
|
||||
|
||||
s = strstr (last_msg, "offset: ");
|
||||
fail_unless (s != NULL);
|
||||
|
||||
s += strlen ("offset: ");
|
||||
|
||||
offset = g_ascii_strtoull (s, &end, 10);
|
||||
fail_unless (offset < G_MAXUINT64);
|
||||
fail_if (end == s);
|
||||
|
||||
count = *p_counter;
|
||||
|
||||
// fail_unless_equals_int (count, offset);
|
||||
|
||||
*p_counter = count + 1;
|
||||
|
||||
g_free (last_msg);
|
||||
}
|
||||
|
||||
GST_START_TEST (test_last_message_deep_notify)
|
||||
{
|
||||
GstElement *pipe, *src, *tee, *q1, *q2, *sink1, *sink2;
|
||||
gint counter[2] = { 0, 0 };
|
||||
GstMessage *m;
|
||||
|
||||
pipe = gst_pipeline_new ("pipeline");
|
||||
src = gst_element_factory_make ("fakesrc", NULL);
|
||||
gst_util_set_object_arg (G_OBJECT (src), "sizetype", "fixed");
|
||||
g_object_set (src, "num-buffers", NUM_BUFFERS, "sizemax", 1, NULL);
|
||||
|
||||
tee = gst_element_factory_make ("tee", NULL);
|
||||
|
||||
q1 = gst_element_factory_make ("queue", NULL);
|
||||
sink1 = gst_element_factory_make ("fakesink", NULL);
|
||||
g_object_set (sink1, "silent", FALSE, NULL);
|
||||
|
||||
q2 = gst_element_factory_make ("queue", NULL);
|
||||
sink2 = gst_element_factory_make ("fakesink", NULL);
|
||||
g_object_set (sink2, "silent", FALSE, NULL);
|
||||
|
||||
gst_bin_add_many (GST_BIN (pipe), src, tee, q1, q2, sink1, sink2, NULL);
|
||||
fail_unless (gst_element_link_many (src, tee, NULL));
|
||||
fail_unless (gst_element_link_many (tee, q1, sink1, NULL));
|
||||
fail_unless (gst_element_link_many (tee, q2, sink2, NULL));
|
||||
|
||||
g_signal_connect (pipe, "deep-notify::last-message",
|
||||
G_CALLBACK (deep_notify_last_message_cb), counter);
|
||||
|
||||
GST_DEBUG ("Setting pipeline to PLAYING");
|
||||
fail_unless_equals_int (gst_element_set_state (pipe, GST_STATE_PLAYING),
|
||||
GST_STATE_CHANGE_ASYNC);
|
||||
|
||||
m = gst_bus_timed_pop_filtered (GST_ELEMENT_BUS (pipe), -1, GST_MESSAGE_EOS);
|
||||
gst_message_unref (m);
|
||||
|
||||
fail_unless_equals_int (gst_element_set_state (pipe, GST_STATE_NULL),
|
||||
GST_STATE_CHANGE_SUCCESS);
|
||||
|
||||
GST_ERROR ("sink1: %d, sink2: %d, total: %d", counter[0], counter[1],
|
||||
counter[0] + counter[1]);
|
||||
|
||||
fail_unless_equals_int (counter[0], NUM_BUFFERS);
|
||||
fail_unless_equals_int (counter[1], NUM_BUFFERS);
|
||||
}
|
||||
|
||||
GST_END_TEST;
|
||||
|
||||
static Suite *
|
||||
fakesink_suite (void)
|
||||
{
|
||||
|
@ -1006,6 +1179,8 @@ fakesink_suite (void)
|
|||
tcase_add_test (tc_chain, test_eos2);
|
||||
tcase_add_test (tc_chain, test_position);
|
||||
tcase_add_test (tc_chain, test_notify_race);
|
||||
tcase_add_test (tc_chain, test_last_message_notify);
|
||||
tcase_skip_broken_test (tc_chain, test_last_message_deep_notify);
|
||||
|
||||
return s;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue