mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-18 22:36:33 +00:00
qtdemux: accumulate previous edts entries into segment.base
Allows playing edts editted files with proper synchronization of
streams. This patch fixes the regression introduced by
bf95f93c01
that was added to fix
segment seeks handling.
Having the accumulated_base separated from the main segment.base
allows handling both segment seeks and edts editted files.
https://bugzilla.gnome.org/show_bug.cgi?id=751361
This commit is contained in:
parent
aef61c2251
commit
eceb2ccc73
1 changed files with 10 additions and 2 deletions
|
@ -304,6 +304,7 @@ struct _QtDemuxStream
|
|||
guint32 segment_index;
|
||||
guint32 sample_index;
|
||||
GstClockTime time_position; /* in gst time */
|
||||
guint64 accumulated_base;
|
||||
|
||||
/* the Gst segment we are processing out, used for clipping */
|
||||
GstSegment segment;
|
||||
|
@ -1428,6 +1429,7 @@ gst_qtdemux_perform_seek (GstQTDemux * qtdemux, GstSegment * segment,
|
|||
QtDemuxStream *stream = qtdemux->streams[n];
|
||||
|
||||
stream->time_position = desired_offset;
|
||||
stream->accumulated_base = 0;
|
||||
stream->sample_index = -1;
|
||||
stream->offset_in_sample = 0;
|
||||
stream->segment_index = -1;
|
||||
|
@ -1921,6 +1923,7 @@ gst_qtdemux_reset (GstQTDemux * qtdemux, gboolean hard)
|
|||
qtdemux->streams[n]->sent_eos = FALSE;
|
||||
qtdemux->streams[n]->segment_seqnum = 0;
|
||||
qtdemux->streams[n]->time_position = 0;
|
||||
qtdemux->streams[n]->accumulated_base = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2182,6 +2185,7 @@ gst_qtdemux_stream_flush_samples_data (GstQTDemux * qtdemux,
|
|||
stream->n_samples = 0;
|
||||
stream->time_position = 0;
|
||||
stream->segment_index = -1;
|
||||
stream->accumulated_base = 0;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -3747,10 +3751,14 @@ gst_qtdemux_activate_segment (GstQTDemux * qtdemux, QtDemuxStream * stream,
|
|||
/* Copy flags from main segment */
|
||||
stream->segment.flags = qtdemux->segment.flags;
|
||||
|
||||
/* update the segment values used for clipping */
|
||||
/* accumulate previous segments */
|
||||
if (GST_CLOCK_TIME_IS_VALID (stream->segment.stop))
|
||||
stream->accumulated_base += (stream->segment.stop - stream->segment.start) /
|
||||
ABS (stream->segment.rate);
|
||||
|
||||
/* update the segment values used for clipping */
|
||||
stream->segment.offset = qtdemux->segment.offset;
|
||||
stream->segment.base = qtdemux->segment.base;
|
||||
stream->segment.base = qtdemux->segment.base + stream->accumulated_base;
|
||||
stream->segment.applied_rate = qtdemux->segment.applied_rate;
|
||||
stream->segment.rate = rate;
|
||||
stream->segment.start = start + QTSTREAMTIME_TO_GSTTIME (stream,
|
||||
|
|
Loading…
Reference in a new issue