diff --git a/tests/check/elements/audiomixer.c b/tests/check/elements/audiomixer.c index b56a3887e5..85299ff25b 100644 --- a/tests/check/elements/audiomixer.c +++ b/tests/check/elements/audiomixer.c @@ -891,36 +891,17 @@ GST_END_TEST; static GstBuffer *handoff_buffer = NULL; -static gboolean -_quit (GMainLoop * ml) -{ - g_main_loop_quit (ml); - - return G_SOURCE_REMOVE; -} static void handoff_buffer_cb (GstElement * fakesink, GstBuffer * buffer, GstPad * pad, - GstClockTime * wanted_end) + gpointer user_data) { GST_DEBUG ("got buffer -- SIZE: %" G_GSIZE_FORMAT - " -- %p DURATION is %" GST_TIME_FORMAT " -- WANTED END %" GST_TIME_FORMAT, + " -- %p DURATION is %" GST_TIME_FORMAT, gst_buffer_get_size (buffer), buffer, - GST_TIME_ARGS (GST_BUFFER_PTS (buffer) + GST_BUFFER_DURATION (buffer)), - GST_TIME_ARGS (*wanted_end)); + GST_TIME_ARGS (GST_BUFFER_PTS (buffer) + GST_BUFFER_DURATION (buffer))); gst_buffer_replace (&handoff_buffer, buffer); - - - /* Buffers we push in will be 'cut' into different smaller buffers, - * we make sure that the last chunck was pushes before we concider the buffer - * we pushed as being done */ - if (main_loop && *wanted_end - && *wanted_end <= - GST_BUFFER_PTS (buffer) + GST_BUFFER_DURATION (buffer)) { - *wanted_end = 0; - g_idle_add ((GSourceFunc) _quit, main_loop); - } } /* check if clipping works as expected */ @@ -936,14 +917,10 @@ GST_START_TEST (test_clip) GstEvent *event; GstBuffer *buffer; GstCaps *caps; - GMainLoop *local_mainloop; - GstClockTime wanted_end = 0; + GstQuery *drain = gst_query_new_drain (); GST_INFO ("preparing test"); - local_mainloop = g_main_loop_new (NULL, FALSE); - main_loop = NULL; - /* build pipeline */ bin = gst_pipeline_new ("pipeline"); bus = gst_element_get_bus (bin); @@ -957,8 +934,7 @@ GST_START_TEST (test_clip) audiomixer = gst_element_factory_make ("audiomixer", "audiomixer"); sink = gst_element_factory_make ("fakesink", "sink"); g_object_set (sink, "signal-handoffs", TRUE, NULL); - g_signal_connect (sink, "handoff", (GCallback) handoff_buffer_cb, - &wanted_end); + g_signal_connect (sink, "handoff", (GCallback) handoff_buffer_cb, NULL); gst_bin_add_many (GST_BIN (bin), audiomixer, sink, NULL); res = gst_element_link (audiomixer, sink); @@ -999,16 +975,13 @@ GST_START_TEST (test_clip) buffer, GST_TIME_ARGS (GST_BUFFER_PTS (buffer) + GST_BUFFER_DURATION (buffer))); ret = gst_pad_chain (sinkpad, buffer); - main_loop = local_mainloop; + ck_assert_int_eq (ret, GST_FLOW_OK); /* The aggregation is done in a dedicated thread, so we can't - * not know when it is actually going to happen, so we just add\ - * a 100 ms timeout to be able to then check that the aggregation - * did happen as we do not have much other choice. + * not know when it is actually going to happen, so we use a DRAIN query + * to wait for it to complete. */ - g_timeout_add (100, (GSourceFunc) _quit, main_loop); - g_main_loop_run (main_loop); - ck_assert_int_eq (ret, GST_FLOW_OK); + gst_pad_query (sinkpad, drain); fail_unless (handoff_buffer == NULL); /* should be partially clipped */ @@ -1016,15 +989,14 @@ GST_START_TEST (test_clip) GST_BUFFER_TIMESTAMP (buffer) = 900 * GST_MSECOND; GST_BUFFER_DURATION (buffer) = 250 * GST_MSECOND; - wanted_end = 135 * GST_MSECOND; GST_DEBUG ("pushing buffer %p START %" GST_TIME_FORMAT " -- DURATION is %" GST_TIME_FORMAT, buffer, GST_TIME_ARGS (GST_BUFFER_PTS (buffer)), GST_TIME_ARGS (GST_BUFFER_DURATION (buffer))); - main_loop = local_mainloop; ret = gst_pad_chain (sinkpad, buffer); ck_assert_int_eq (ret, GST_FLOW_OK); - g_main_loop_run (main_loop); + gst_pad_query (sinkpad, drain); + fail_unless (handoff_buffer != NULL); gst_buffer_replace (&handoff_buffer, NULL); @@ -1033,18 +1005,18 @@ GST_START_TEST (test_clip) GST_BUFFER_TIMESTAMP (buffer) = 1 * GST_SECOND; GST_BUFFER_DURATION (buffer) = 250 * GST_MSECOND; - wanted_end = 390 * GST_MSECOND; GST_DEBUG ("pushing buffer %p END is %" GST_TIME_FORMAT, buffer, GST_TIME_ARGS (GST_BUFFER_PTS (buffer) + GST_BUFFER_DURATION (buffer))); ret = gst_pad_chain (sinkpad, buffer); ck_assert_int_eq (ret, GST_FLOW_OK); - g_main_loop_run (main_loop); + gst_pad_query (sinkpad, drain); fail_unless (handoff_buffer != NULL); gst_buffer_replace (&handoff_buffer, NULL); fail_unless (handoff_buffer == NULL); /* should be clipped and ok */ + buffer = gst_buffer_new_and_alloc (44100); GST_BUFFER_TIMESTAMP (buffer) = 2 * GST_SECOND; GST_BUFFER_DURATION (buffer) = 250 * GST_MSECOND; @@ -1052,9 +1024,8 @@ GST_START_TEST (test_clip) buffer, GST_TIME_ARGS (GST_BUFFER_PTS (buffer) + GST_BUFFER_DURATION (buffer))); ret = gst_pad_chain (sinkpad, buffer); - g_timeout_add (100, (GSourceFunc) _quit, main_loop); - g_main_loop_run (main_loop); ck_assert_int_eq (ret, GST_FLOW_OK); + gst_pad_query (sinkpad, drain); fail_unless (handoff_buffer == NULL); gst_element_release_request_pad (audiomixer, sinkpad); @@ -1063,6 +1034,7 @@ GST_START_TEST (test_clip) gst_bus_remove_signal_watch (bus); gst_object_unref (bus); gst_object_unref (bin); + gst_query_unref (drain); } GST_END_TEST;