guint64 media_time;
QtDemuxSegment *segment;
guint32 rate_int;
+#ifdef GST_UPSTREAM
+ GstClockTime media_start = GST_CLOCK_TIME_NONE;
+#endif
media_time = QT_UINT32 (buffer + 20 + i * 12);
duration = QT_UINT32 (buffer + 16 + i * 12);
+#ifdef GST_UPSTREAM
+ if (media_time != G_MAXUINT32)
+ media_start = QTSTREAMTIME_TO_GSTTIME (stream, media_time);
+#endif
+
segment = &stream->segments[count++];
/* time and duration expressed in global timescale */
segment->time = stime;
/* add non scaled values so we don't cause roundoff errors */
+#ifdef GST_UPSTREAM
+ if (duration || media_start == GST_CLOCK_TIME_NONE) {
+ time += duration;
+ stime = QTTIME_TO_GSTTIME (qtdemux, time);
+ segment->duration = stime - segment->time;
+ } else {
+ /* zero duration does not imply media_start == media_stop
+ * but, only specify media_start.*/
+ stime = QTTIME_TO_GSTTIME (qtdemux, qtdemux->duration);
+ if (GST_CLOCK_TIME_IS_VALID (stime) && media_time != G_MAXUINT32
+ && stime >= media_start) {
+ segment->duration = stime - media_start;
+ } else {
+ segment->duration = GST_CLOCK_TIME_NONE;
+ }
+ }
+#else
time += duration;
stime = QTTIME_TO_GSTTIME (qtdemux, time);
+#endif
segment->stop_time = stime;
+
+#ifndef GST_UPSTREAM
segment->duration = stime - segment->time;
+#endif
segment->trak_media_start = media_time;
/* media_time expressed in stream timescale */
if (media_time != G_MAXUINT32) {
+#ifdef GST_UPSTREAM
+ segment->media_start = media_start;
+#else
segment->media_start = QTSTREAMTIME_TO_GSTTIME (stream, media_time);
+#endif
segment->media_stop = segment->media_start + segment->duration;
} else {
segment->media_start = GST_CLOCK_TIME_NONE;