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;
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;
qtdemux->streams[n]->sent_eos = FALSE;
qtdemux->streams[n]->segment_seqnum = 0;
qtdemux->streams[n]->time_position = 0;
+ qtdemux->streams[n]->accumulated_base = 0;
}
}
}
stream->n_samples = 0;
stream->time_position = 0;
stream->segment_index = -1;
+ stream->accumulated_base = 0;
}
static void
/* 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,