baseparse: correctly handle non-flush seek
authorJulien Isorce <jisorce@oblong.com>
Thu, 26 Jan 2017 16:51:21 +0000 (16:51 +0000)
committerJulien Isorce <jisorce@oblong.com>
Thu, 26 Jan 2017 16:51:21 +0000 (16:51 +0000)
Otherwise when seeking/looping to the start when reaching the end,
the sink waits for the duration of the stream. So the user hears
nothing for the duration of the stream before it actually loop again.
See example attached to the bug for that.

Existing test:
gst-plugins-good/tests/icles/test-segment-seeks foo.flac
Without the patch the user hears a crack/cut at each seek.

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

libs/gst/base/gstbaseparse.c

index 34b40eb..2751239 100644 (file)
@@ -4644,10 +4644,6 @@ gst_base_parse_handle_seek (GstBaseParse * parse, GstEvent * event)
       gst_pad_push_event (parse->srcpad, gst_event_ref (fevent));
       gst_pad_push_event (parse->sinkpad, fevent);
       gst_base_parse_clear_queues (parse);
-    } else {
-      /* keep track of our position */
-      seeksegment.base = gst_segment_to_running_time (&seeksegment,
-          seeksegment.format, parse->segment.position);
     }
 
     memcpy (&parse->segment, &seeksegment, sizeof (GstSegment));