qtdemux: reset pending segment if we are already pushing one
authorThiago Santos <thiagoss@osg.samsung.com>
Mon, 7 Mar 2016 13:28:06 +0000 (10:28 -0300)
committerThiago Santos <thiagoss@osg.samsung.com>
Mon, 7 Mar 2016 18:26:13 +0000 (15:26 -0300)
When upstream is running in bytes in push-mode, qtdemux will
convert seeks from time to bytes and send it upstream. Upstream
element will perform a byte seek and send a byte segment to qtdemux
that will convert it to time and push it downstream.

There is, however, the pending_segment variable that stores a new
segment event to be pushed before the next data. When handling seeks
as mentioned above this variable was being ignored and, if it contained
some segment event, it would override the one resulting from the seek.
This would restore a previous segment and would cause the seek segment
to be discarded downstream.

This patch fixes this issue by unrefing any pending segment as the
seek from upstream should contain the latest one that should be
used, as requested by the application.

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

gst/isomp4/qtdemux.c

index 1085e20..48f7f7a 100644 (file)
@@ -2105,6 +2105,8 @@ gst_qtdemux_handle_sink_event (GstPad * sinkpad, GstObject * parent,
       GST_DEBUG_OBJECT (demux, "Pushing newseg %" GST_SEGMENT_FORMAT, &segment);
       segment_event = gst_event_new_segment (&segment);
       gst_event_set_seqnum (segment_event, gst_event_get_seqnum (event));
+      /* erase any previously set segment */
+      gst_event_replace (&demux->pending_newsegment, NULL);
       gst_qtdemux_push_event (demux, segment_event);
 
       /* clear leftover in current segment, if any */