tests: baseparse: add test for reverse playback on passthrough
authorThiago Santos <ts.santos@sisa.samsung.com>
Mon, 13 Jan 2014 11:37:37 +0000 (08:37 -0300)
committerThiago Santos <ts.santos@sisa.samsung.com>
Mon, 13 Jan 2014 12:28:04 +0000 (09:28 -0300)
Baseparse stores buffers for reverse playback to push on the next
DISCONT, the issue was that it wouldn't ever check for a discont
on passthrough mode as it skips all real parsing. This test
was create to verify this issue and prevent it from happening again

https://bugzilla.gnome.org/show_bug.cgi?id=721941

tests/check/libs/baseparse.c

index b3344fe4fec93e218f0d6b918d5c62435c394334..42b260bfb363421f04639f028f0f93bce34d704c 100644 (file)
@@ -184,15 +184,13 @@ send_startup_events (void)
 }
 
 static void
-run_parser_playback_test (GList * input, gint expected_output)
+run_parser_playback_test (GList * input, gint expected_output, gdouble rate)
 {
   GstBuffer *buffer;
   guint64 i;
   GList *iter;
   GstSegment segment;
 
-  setup_parsertester ();
-
   gst_pad_set_active (mysrcpad, TRUE);
   gst_element_set_state (parsetest, GST_STATE_PLAYING);
   gst_pad_set_active (mysinkpad, TRUE);
@@ -201,6 +199,7 @@ run_parser_playback_test (GList * input, gint expected_output)
 
   /* push a new segment */
   gst_segment_init (&segment, GST_FORMAT_TIME);
+  segment.rate = rate;
   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 */
@@ -249,17 +248,46 @@ GST_START_TEST (parser_playback)
   gint i;
   GstBuffer *buffer;
 
+  setup_parsertester ();
+
   /* push buffers, the data is actually a number so we can track them */
   for (i = 0; i < 3; i++) {
     buffer = create_test_buffer (i);
     input = g_list_append (input, buffer);
   }
 
-  run_parser_playback_test (input, 3);
+  run_parser_playback_test (input, 3, 1.0);
 }
 
 GST_END_TEST;
 
+
+/* Check https://bugzilla.gnome.org/show_bug.cgi?id=721941 */
+GST_START_TEST (parser_reverse_playback_on_passthrough)
+{
+  GList *input = NULL;
+  gint i;
+  GstBuffer *buffer;
+
+  setup_parsertester ();
+
+  gst_base_parse_set_passthrough (GST_BASE_PARSE (parsetest), TRUE);
+
+  /* push buffers, the data is actually a number so we can track them */
+  for (i = 0; i < 6; i++) {
+    buffer = create_test_buffer (i);
+    if (i > 0)
+      GST_BUFFER_FLAG_SET (buffer, GST_BUFFER_FLAG_DELTA_UNIT);
+    input = g_list_append (input, buffer);
+  }
+  GST_BUFFER_FLAG_SET (g_list_nth (input, 3)->data, GST_BUFFER_FLAG_DISCONT);
+
+  run_parser_playback_test (input, 6, -1.0);
+}
+
+GST_END_TEST;
+
+
 static Suite *
 gst_baseparse_suite (void)
 {
@@ -268,6 +296,7 @@ gst_baseparse_suite (void)
 
   suite_add_tcase (s, tc);
   tcase_add_test (tc, parser_playback);
+  tcase_add_test (tc, parser_reverse_playback_on_passthrough);
 
   return s;
 }