summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim.muller@collabora.co.uk>2012-07-05 15:14:33 +0100
committerTim-Philipp Müller <tim.muller@collabora.co.uk>2012-07-05 15:14:33 +0100
commit91d97d31e23baf3ef3da437ca328445c36a2cbf1 (patch)
tree79f5608a83d769b02050c68cc1932c2e613f5717 /tests
parentaeafc3a09384e5fb07ea1fd7c9812331e0fe2815 (diff)
tests: fix rgvolume unit test event handling
Must flush after EOS before sending more buffers or another EOS event, or the event or buffer will be rejected. Also send a SEGMENT event at the start of each stream for good measure.
Diffstat (limited to 'tests')
-rw-r--r--tests/check/elements/rgvolume.c54
1 files changed, 53 insertions, 1 deletions
diff --git a/tests/check/elements/rgvolume.c b/tests/check/elements/rgvolume.c
index 25c6fac68..39b8c90e6 100644
--- a/tests/check/elements/rgvolume.c
+++ b/tests/check/elements/rgvolume.c
@@ -25,7 +25,7 @@
#include <math.h>
-GList *events = NULL;
+static GList *events = NULL;
/* For ease of programming we use globals to keep refs for our floating src and
* sink pads we create; otherwise we always have to do get_pad, get_peer, and
@@ -164,6 +164,43 @@ set_null_state (GstElement * element)
}
static void
+clear_last_event (GstEventType type)
+{
+ GList *last = g_list_last (events);
+
+ fail_unless (last != NULL);
+ fail_unless_equals_int (GST_EVENT_TYPE (last->data), type);
+ gst_event_unref (GST_EVENT (last->data));
+ events = g_list_delete_link (events, last);
+}
+
+static void
+send_flush_events (GstElement * element)
+{
+ gboolean res;
+
+ res = gst_pad_push_event (mysrcpad, gst_event_new_flush_start ());
+ fail_unless (res, "flush-start even not handled");
+ clear_last_event (GST_EVENT_FLUSH_START);
+
+ res = gst_pad_push_event (mysrcpad, gst_event_new_flush_stop (TRUE));
+ fail_unless (res, "flush-stop event not handled");
+ clear_last_event (GST_EVENT_FLUSH_STOP);
+}
+
+static void
+send_segment_event (GstElement * element)
+{
+ GstSegment segment;
+ gboolean res;
+
+ gst_segment_init (&segment, GST_FORMAT_TIME);
+ res = gst_pad_push_event (mysrcpad, gst_event_new_segment (&segment));
+ fail_unless (res, "SEGMENT event not handled");
+ clear_last_event (GST_EVENT_SEGMENT);
+}
+
+static void
send_eos_event (GstElement * element)
{
GstEvent *event = gst_event_new_eos ();
@@ -399,6 +436,9 @@ GST_START_TEST (test_simple)
g_object_set (element, "album-mode", TRUE, NULL);
+ send_flush_events (element);
+ send_segment_event (element);
+
tag_list = gst_tag_list_new_empty ();
gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
GST_TAG_TRACK_GAIN, -3.45, GST_TAG_TRACK_PEAK, 1.0,
@@ -442,6 +482,8 @@ GST_START_TEST (test_fallback_gain)
send_eos_event (element);
/* Now a track completely missing tags. */
+ send_flush_events (element);
+ send_segment_event (element);
fail_unless_gain (element, -9.00); /* pre-amp + fallback-gain */
@@ -453,6 +495,8 @@ GST_START_TEST (test_fallback_gain)
/* Verify that result gain is set to +0.00 with pre-amp + fallback-gain >
* +0.00 and no headroom. */
+ send_flush_events (element);
+ send_segment_event (element);
g_object_set (element, "fallback-gain", +12.00, "headroom", +0.00, NULL);
fail_unless_target_gain (element, +6.00); /* pre-amp + fallback-gain */
@@ -540,6 +584,9 @@ GST_START_TEST (test_headroom)
fail_unless_result_gain (element, +0.00);
send_eos_event (element);
+ send_flush_events (element);
+ send_segment_event (element);
+
g_object_set (element, "headroom", +2.00, NULL);
tag_list = gst_tag_list_new_empty ();
gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
@@ -551,6 +598,9 @@ GST_START_TEST (test_headroom)
fail_unless_result_gain (element, 5.2589816238303335);
send_eos_event (element);
+ send_flush_events (element);
+ send_segment_event (element);
+
g_object_set (element, "album-mode", TRUE, NULL);
tag_list = gst_tag_list_new_empty ();
gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,
@@ -591,6 +641,8 @@ GST_START_TEST (test_reference_level)
g_object_set (element, "album-mode", TRUE, NULL);
/* Same as above, but with album gain. */
+ send_flush_events (element);
+ send_segment_event (element);
tag_list = gst_tag_list_new_empty ();
gst_tag_list_add (tag_list, GST_TAG_MERGE_REPLACE,