qtdemux: reset segment on flush stop
authorArnaud Vrac <avrac@freebox.fr>
Mon, 15 Jul 2013 14:24:07 +0000 (16:24 +0200)
committerSebastian Dröge <slomo@circular-chaos.org>
Tue, 16 Jul 2013 08:47:20 +0000 (10:47 +0200)
cca2f555d14 introduces a regression, where the demux segment is not
reset on flush stop, so the next upstream segment event will calculate
an invalid base time on the new segment to be sent downstream.

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

gst/isomp4/qtdemux.c

index 46bfb56..0d351eb 100644 (file)
@@ -1803,7 +1803,6 @@ gst_qtdemux_reset (GstQTDemux * qtdemux, gboolean hard)
     qtdemux->element_index = NULL;
 #endif
     qtdemux->major_brand = 0;
-    gst_segment_init (&qtdemux->segment, GST_FORMAT_TIME);
     if (qtdemux->pending_newsegment)
       gst_object_unref (qtdemux->pending_newsegment);
     qtdemux->pending_newsegment = NULL;
@@ -1821,6 +1820,7 @@ gst_qtdemux_reset (GstQTDemux * qtdemux, gboolean hard)
   }
   qtdemux->offset = 0;
   gst_adapter_clear (qtdemux->adapter);
+  gst_segment_init (&qtdemux->segment, GST_FORMAT_TIME);
 
   if (hard) {
     for (n = 0; n < qtdemux->n_streams; n++) {
@@ -1970,7 +1970,11 @@ gst_qtdemux_handle_sink_event (GstPad * sinkpad, GstObject * parent,
     }
     case GST_EVENT_FLUSH_STOP:
     {
+      guint64 dur;
+
+      dur = demux->segment.duration;
       gst_qtdemux_reset (demux, FALSE);
+      demux->segment.duration = dur;
       break;
     }
     case GST_EVENT_EOS: