X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=tests%2Fcheck%2Felements%2Frtpssrcdemux.c;h=179d68e4fb37f66c747da6770fbf4e94b4356897;hb=f97aed4af53bccf44cd44ea6576e821b56a7756d;hp=a8b093b1cf87d265a3105f4534c0cfcf924c8389;hpb=608a9dc177512300ba95ac0ec5c44dac03418894;p=platform%2Fupstream%2Fgst-plugins-good.git diff --git a/tests/check/elements/rtpssrcdemux.c b/tests/check/elements/rtpssrcdemux.c index a8b093b..179d68e 100644 --- a/tests/check/elements/rtpssrcdemux.c +++ b/tests/check/elements/rtpssrcdemux.c @@ -174,6 +174,72 @@ GST_START_TEST (test_event_forwarding) GST_END_TEST; +typedef struct +{ + gint ready; + GMutex mutex; + GCond cond; +} LockTestContext; + +static void +new_ssrc_pad_cb (GstElement * element, guint ssrc, GstPad * pad, + LockTestContext * ctx) +{ + g_message ("Signalling ready"); + g_atomic_int_set (&ctx->ready, 1); + + g_message ("Waiting no more ready"); + while (g_atomic_int_get (&ctx->ready)) + g_usleep (G_USEC_PER_SEC / 100); + + g_mutex_lock (&ctx->mutex); + g_mutex_unlock (&ctx->mutex); +} + +static gpointer +push_buffer_func (gpointer user_data) +{ + GstHarness *h = user_data; + gst_harness_push (h, create_buffer (0, 0xdeadbeef)); + return NULL; +} + +GST_START_TEST (test_oob_event_locking) +{ + GstHarness *h = gst_harness_new_with_padnames ("rtpssrcdemux", "sink", NULL); + LockTestContext ctx = { FALSE, }; + GThread *thread; + + g_mutex_init (&ctx.mutex); + g_cond_init (&ctx.cond); + + gst_harness_set_src_caps_str (h, "application/x-rtp"); + g_signal_connect (h->element, + "new-ssrc-pad", G_CALLBACK (new_ssrc_pad_cb), &ctx); + + thread = g_thread_new ("streaming-thread", push_buffer_func, h); + + g_mutex_lock (&ctx.mutex); + + g_message ("Waiting for ready"); + while (!g_atomic_int_get (&ctx.ready)) + g_usleep (G_USEC_PER_SEC / 100); + g_message ("Signal no more ready"); + g_atomic_int_set (&ctx.ready, 0); + + gst_harness_push_event (h, + gst_event_new_custom (GST_EVENT_CUSTOM_DOWNSTREAM_OOB, NULL)); + + g_mutex_unlock (&ctx.mutex); + + g_thread_join (thread); + g_mutex_clear (&ctx.mutex); + g_cond_clear (&ctx.cond); + gst_harness_teardown (h); +} + +GST_END_TEST; + static Suite * rtpssrcdemux_suite (void) { @@ -182,6 +248,7 @@ rtpssrcdemux_suite (void) suite_add_tcase (s, tc_chain); tcase_add_test (tc_chain, test_event_forwarding); + tcase_add_test (tc_chain, test_oob_event_locking); return s; }