diff options
author | Josep Torra <n770galaxy@gmail.com> | 2018-09-28 13:23:38 +0200 |
---|---|---|
committer | Josep Torra <n770galaxy@gmail.com> | 2018-10-09 15:17:32 +0200 |
commit | d62d3760fb8d0f7bd37c467c0b66b16561375115 (patch) | |
tree | 34732739da7662802bb91b7947f0c41f8a6fcdbf | |
parent | 84bcd148488fd19dc1c3e0f777c10b497722b8b6 (diff) |
tests: shm: add an end to end test for live reception
Add a unit test to exchange data between two pipelines with shmsrc
acting as a live source.
https://bugzilla.gnome.org/show_bug.cgi?id=797203
-rw-r--r-- | tests/check/elements/shm.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/tests/check/elements/shm.c b/tests/check/elements/shm.c index f67e9ee02..31169ddfb 100644 --- a/tests/check/elements/shm.c +++ b/tests/check/elements/shm.c @@ -169,6 +169,64 @@ GST_START_TEST (test_shm_alloc) GST_END_TEST; +GST_START_TEST (test_shm_live) +{ + GstElement *producer, *consumer; + GstElement *src, *sink; + gchar *socket_path = NULL; + GstStateChangeReturn state_res; + + src = gst_element_factory_make ("fakesrc", NULL); + g_object_set (src, "sizetype", 2, NULL); + + sink = gst_element_factory_make ("shmsink", NULL); + g_object_set (sink, "socket-path", "shm-unit-test", "wait-for-connection", + FALSE, NULL); + + producer = gst_pipeline_new ("producer-pipeline"); + gst_bin_add_many (GST_BIN (producer), src, sink, NULL); + fail_unless (gst_element_link (src, sink)); + + state_res = gst_element_set_state (producer, GST_STATE_PLAYING); + fail_unless (state_res != GST_STATE_CHANGE_FAILURE); + + g_object_get (sink, "socket-path", &socket_path, NULL); + fail_unless (socket_path != NULL); + + src = gst_element_factory_make ("shmsrc", NULL); + sink = gst_element_factory_make ("fakesink", NULL); + g_object_set (src, "is-live", TRUE, NULL); + g_object_set (sink, "async", FALSE, "enable-last-sample", FALSE, NULL); + + consumer = gst_pipeline_new ("consumer-pipeline"); + gst_bin_add_many (GST_BIN (consumer), src, sink, NULL); + fail_unless (gst_element_link (src, sink)); + + g_object_set (src, "socket-path", socket_path, NULL); + + state_res = gst_element_set_state (consumer, GST_STATE_PLAYING); + fail_unless (state_res != GST_STATE_CHANGE_FAILURE); + + /* wait for preroll */ + state_res = gst_element_get_state (consumer, NULL, NULL, GST_CLOCK_TIME_NONE); + fail_unless (state_res == GST_STATE_CHANGE_SUCCESS); + + g_usleep (10000); + + state_res = gst_element_set_state (consumer, GST_STATE_NULL); + fail_unless (state_res != GST_STATE_CHANGE_FAILURE); + + state_res = gst_element_set_state (producer, GST_STATE_NULL); + fail_unless (state_res != GST_STATE_CHANGE_FAILURE); + + gst_object_unref (consumer); + gst_object_unref (producer); + + g_free (socket_path); +} + +GST_END_TEST; + static Suite * shm_suite (void) { @@ -181,6 +239,10 @@ shm_suite (void) tcase_add_test (tc, test_shm_alloc); suite_add_tcase (s, tc); + tc = tcase_create ("shm2"); + tcase_add_test (tc, test_shm_live); + suite_add_tcase (s, tc); + return s; } |