summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOgnyan Tonchev <ognyan@axis.com>2014-09-17 12:17:27 +0200
committerSebastian Dröge <sebastian@centricular.com>2014-09-19 09:37:46 +0300
commitfdcdcbafd2cc5614689fe78f0c2071820d45d40b (patch)
tree4f44cb4339a5cf13ed655867831903ef614042e1
parentd6ec4cec8acffaac7c2d417ee67bd111d6f15523 (diff)
downloadgstreamer-plugins-base-fdcdcbafd2cc5614689fe78f0c2071820d45d40b.tar.gz
audiodecoder: extend flush_events test to check for event leaks
https://bugzilla.gnome.org/show_bug.cgi?id=736788
-rw-r--r--tests/check/libs/audiodecoder.c75
1 files changed, 59 insertions, 16 deletions
diff --git a/tests/check/libs/audiodecoder.c b/tests/check/libs/audiodecoder.c
index 8f77a18fd..99d4e9e4d 100644
--- a/tests/check/libs/audiodecoder.c
+++ b/tests/check/libs/audiodecoder.c
@@ -420,12 +420,14 @@ GST_START_TEST (audiodecoder_delayed_negotiation_with_gap_event)
GST_END_TEST;
-GST_START_TEST (audiodecoder_flush_events)
+static void
+_audiodecoder_flush_events (gboolean send_buffers)
{
GstSegment segment;
GstBuffer *buffer;
guint64 i;
GList *events_iter;
+ GstMessage *msg;
setup_audiodecodertester ();
@@ -439,20 +441,34 @@ GST_START_TEST (audiodecoder_flush_events)
gst_segment_init (&segment, GST_FORMAT_TIME);
fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment)));
- /* push buffers, the data is actually a number so we can track them */
- for (i = 0; i < NUM_BUFFERS; i++) {
- if (i % 10 == 0) {
- GstTagList *tags;
+ if (send_buffers) {
+ /* push buffers, the data is actually a number so we can track them */
+ for (i = 0; i < NUM_BUFFERS; i++) {
+ if (i % 10 == 0) {
+ GstTagList *tags;
- tags = gst_tag_list_new (GST_TAG_TRACK_NUMBER, i, NULL);
- fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_tag (tags)));
- } else {
- buffer = create_test_buffer (i);
+ tags = gst_tag_list_new (GST_TAG_TRACK_NUMBER, i, NULL);
+ fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_tag (tags)));
+ } else {
+ buffer = create_test_buffer (i);
- fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK);
+ fail_unless (gst_pad_push (mysrcpad, buffer) == GST_FLOW_OK);
+ }
}
+ } else {
+ /* push sticky event */
+ GstTagList *tags;
+ tags = gst_tag_list_new (GST_TAG_TRACK_NUMBER, 0, NULL);
+ fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_tag (tags)));
}
+ msg =
+ gst_message_new_element (GST_OBJECT (mysrcpad),
+ gst_structure_new_empty ("test"));
+ fail_unless (gst_pad_push_event (mysrcpad,
+ gst_event_new_sink_message ("test", msg)));
+ gst_message_unref (msg);
+
fail_unless (gst_pad_push_event (mysrcpad, gst_event_new_eos ()));
events_iter = events;
@@ -462,14 +478,27 @@ GST_START_TEST (audiodecoder_flush_events)
fail_unless (GST_EVENT_TYPE (sstart) == GST_EVENT_STREAM_START);
events_iter = g_list_next (events_iter);
}
- {
- GstEvent *caps_event = events_iter->data;
- fail_unless (GST_EVENT_TYPE (caps_event) == GST_EVENT_CAPS);
- events_iter = g_list_next (events_iter);
+ if (send_buffers) {
+ {
+ GstEvent *caps_event = events_iter->data;
+ fail_unless (GST_EVENT_TYPE (caps_event) == GST_EVENT_CAPS);
+ events_iter = g_list_next (events_iter);
+ }
+ {
+ GstEvent *segment_event = events_iter->data;
+ fail_unless (GST_EVENT_TYPE (segment_event) == GST_EVENT_SEGMENT);
+ events_iter = g_list_next (events_iter);
+ }
+ for (int i=0; i< NUM_BUFFERS / 10; i++)
+ {
+ GstEvent *tag_event = events_iter->data;
+ fail_unless (GST_EVENT_TYPE (tag_event) == GST_EVENT_TAG);
+ events_iter = g_list_next (events_iter);
+ }
}
{
- GstEvent *segment_event = events_iter->data;
- fail_unless (GST_EVENT_TYPE (segment_event) == GST_EVENT_SEGMENT);
+ GstEvent *eos_event = events_iter->data;
+ fail_unless (GST_EVENT_TYPE (eos_event) == GST_EVENT_EOS);
events_iter = g_list_next (events_iter);
}
@@ -518,9 +547,22 @@ GST_START_TEST (audiodecoder_flush_events)
g_list_free_full (buffers, (GDestroyNotify) gst_buffer_unref);
buffers = NULL;
+ gst_element_set_state (dec, GST_STATE_NULL);
cleanup_audiodecodertest ();
}
+GST_START_TEST (audiodecoder_flush_events_no_buffers)
+{
+ _audiodecoder_flush_events (FALSE);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (audiodecoder_flush_events)
+{
+ _audiodecoder_flush_events (TRUE);
+}
+
GST_END_TEST;
@@ -652,6 +694,7 @@ gst_audiodecoder_suite (void)
suite_add_tcase (s, tc);
tcase_add_test (tc, audiodecoder_playback);
+ tcase_add_test (tc, audiodecoder_flush_events_no_buffers);
tcase_add_test (tc, audiodecoder_flush_events);
tcase_add_test (tc, audiodecoder_negotiation_with_buffer);
tcase_add_test (tc, audiodecoder_negotiation_with_gap_event);