Skip to content
Snippets Groups Projects
Commit 19eca381 authored by Sebastian Dröge's avatar Sebastian Dröge :tea:
Browse files

basesink: Add test for checking that EOS always comes after the state change to PLAYING

https://bugzilla.gnome.org/show_bug.cgi?id=727949
parent 40c8208a
No related branches found
No related tags found
No related merge requests found
......@@ -168,6 +168,80 @@ GST_START_TEST (basesink_test_gap)
GST_END_TEST;
static gpointer
send_eos_event (gpointer data)
{
GstPad *pad = data;
GstEvent *ev;
GstSegment segment;
ev = gst_event_new_stream_start ("test");
fail_unless (gst_pad_send_event (pad, ev));
gst_segment_init (&segment, GST_FORMAT_TIME);
ev = gst_event_new_segment (&segment);
fail_unless (gst_pad_send_event (pad, ev));
ev = gst_event_new_eos ();
gst_pad_send_event (pad, ev);
return NULL;
}
GST_START_TEST (basesink_test_eos_after_playing)
{
GstElement *pipeline, *sink;
GstPad *pad;
GstBus *bus;
GstMessage *msg;
GThread *thread;
gboolean reached_playing = FALSE;
sink = gst_element_factory_make ("fakesink", "sink");
g_object_set (sink, "sync", TRUE, NULL);
pipeline = gst_pipeline_new (NULL);
gst_bin_add (GST_BIN (pipeline), sink);
pad = gst_element_get_static_pad (sink, "sink");
bus = gst_element_get_bus (pipeline);
gst_element_set_state (pipeline, GST_STATE_PAUSED);
thread = g_thread_new ("push-thread", send_eos_event, pad);
while ((msg = gst_bus_timed_pop (bus, -1))) {
if (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_STATE_CHANGED
&& GST_MESSAGE_SRC (msg) == GST_OBJECT (pipeline)) {
GstState new_state;
gst_message_parse_state_changed (msg, NULL, &new_state, NULL);
if (new_state == GST_STATE_PLAYING)
reached_playing = TRUE;
} else if (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_ASYNC_DONE) {
gst_element_set_state (pipeline, GST_STATE_PLAYING);
} else if (GST_MESSAGE_TYPE (msg) == GST_MESSAGE_EOS) {
fail_unless (reached_playing);
gst_element_set_state (pipeline, GST_STATE_NULL);
gst_message_unref (msg);
break;
}
gst_message_unref (msg);
}
g_thread_join (thread);
gst_object_unref (pad);
gst_object_unref (bus);
gst_object_unref (pipeline);
GST_INFO ("stopped");
}
GST_END_TEST;
static Suite *
gst_basesrc_suite (void)
{
......@@ -178,6 +252,7 @@ gst_basesrc_suite (void)
tcase_add_test (tc, basesink_last_sample_enabled);
tcase_add_test (tc, basesink_last_sample_disabled);
tcase_add_test (tc, basesink_test_gap);
tcase_add_test (tc, basesink_test_eos_after_playing);
return s;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment