From bf272edaf34d93296fc28ef330cb7ff3b1859b4c Mon Sep 17 00:00:00 2001 From: Thiago Santos Date: Tue, 5 Jan 2016 09:01:10 -0300 Subject: [PATCH] adaptivedemux: correctly track segment.position in reverse playback For reverse, set position to segment.stop when starting and also don't set the position to fragment end timestamp when it finishes, just leave it at the fragment start. --- gst-libs/gst/adaptivedemux/gstadaptivedemux.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/gst-libs/gst/adaptivedemux/gstadaptivedemux.c b/gst-libs/gst/adaptivedemux/gstadaptivedemux.c index cb5e4a1..5912fa8 100644 --- a/gst-libs/gst/adaptivedemux/gstadaptivedemux.c +++ b/gst-libs/gst/adaptivedemux/gstadaptivedemux.c @@ -1298,7 +1298,10 @@ gst_adaptive_demux_src_event (GstPad * pad, GstObject * parent, offset = gst_adaptive_demux_stream_get_presentation_offset (demux, stream); stream->segment.start += offset - period_start; - stream->segment.position = stream->segment.start; + if (demux->segment.rate > 1) + stream->segment.position = stream->segment.start; + else + stream->segment.position = stream->segment.stop; seg_evt = gst_event_new_segment (&stream->segment); gst_event_set_seqnum (seg_evt, demux->priv->segment_seqnum); gst_event_replace (&stream->pending_segment, seg_evt); @@ -3080,7 +3083,8 @@ gst_adaptive_demux_stream_advance_fragment_unlocked (GstAdaptiveDemux * demux, GST_TYPE_CLOCK_TIME, stream->download_total_time * GST_USECOND, NULL))); - if (GST_CLOCK_TIME_IS_VALID (duration)) { + /* Don't update to the end of the segment if in reverse playback */ + if (GST_CLOCK_TIME_IS_VALID (duration) && demux->segment.rate > 1) { GstClockTime offset = gst_adaptive_demux_stream_get_presentation_offset (demux, stream); GstClockTime period_start = -- 2.7.4