qtdemux: Accumulate segments for edit lists before activating the next segment
authorSebastian Dröge <sebastian@centricular.com>
Wed, 23 Sep 2015 18:59:00 +0000 (20:59 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Thu, 24 Sep 2015 07:33:33 +0000 (09:33 +0200)
eceb2ccc739092d964d78945e19c2ecedbd214e2 broke segment seeks by always
accumulating segments manually when activating a segment. This is only
needed when handling edit lists, not when activating a segment because of a
seek. Do the accumulation when switching edit list segments instead.

This fixes segment seeks again, while keeping edit lists playback working.

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

gst/isomp4/qtdemux.c

index 8393959..1de62df 100644 (file)
@@ -4192,11 +4192,6 @@ gst_qtdemux_activate_segment (GstQTDemux * qtdemux, QtDemuxStream * stream,
   /* Copy flags from main segment */
   stream->segment.flags = qtdemux->segment.flags;
 
-  /* 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->accumulated_base;
@@ -4480,6 +4475,13 @@ next_segment:
       stream->time_position = segment->stop_time;
     }
     /* make sure we select a new segment */
+
+    /* 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);
+
     stream->segment_index = -1;
   }
 }