matroskademux: perform proper KEY_UNIT seek also in push mode
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Tue, 24 Jul 2012 14:41:51 +0000 (16:41 +0200)
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Tue, 24 Jul 2012 19:15:49 +0000 (21:15 +0200)
Conflicts:

gst/matroska/matroska-demux.c

gst/matroska/matroska-demux.c

index fe8e450..31c508c 100644 (file)
@@ -2022,18 +2022,8 @@ gst_matroska_demux_handle_seek_event (GstMatroskaDemux * demux,
     goto next;
   }
 
-  if (demux->streaming) {
-    GST_OBJECT_LOCK (demux);
-    /* now update the real segment info */
-    GST_DEBUG_OBJECT (demux, "Committing new seek segment");
-    memcpy (&demux->common.segment, &seeksegment, sizeof (GstSegment));
-    GST_OBJECT_UNLOCK (demux);
-    /* need to seek to cluster start to pick up cluster time */
-    /* upstream takes care of flushing and all that
-     * ... and segment event handling takes care of the rest */
-    return perform_seek_to_offset (demux, rate,
-        entry->pos + demux->common.ebml_segment_start);
-  }
+  if (demux->streaming)
+    goto finish;
 
 next:
   if (flush) {
@@ -2075,6 +2065,7 @@ next:
     }
   }
 
+finish:
   if (keyunit) {
     GST_DEBUG_OBJECT (demux, "seek to key unit, adjusting segment start from %"
         GST_TIME_FORMAT " to %" GST_TIME_FORMAT,
@@ -2084,6 +2075,19 @@ next:
     seeksegment.time = seeksegment.start - demux->stream_start_time;
   }
 
+  if (demux->streaming) {
+    GST_OBJECT_LOCK (demux);
+    /* now update the real segment info */
+    GST_DEBUG_OBJECT (demux, "Committing new seek segment");
+    memcpy (&demux->common.segment, &seeksegment, sizeof (GstSegment));
+    GST_OBJECT_UNLOCK (demux);
+    /* need to seek to cluster start to pick up cluster time */
+    /* upstream takes care of flushing and all that
+     * ... and newsegment event handling takes care of the rest */
+    return perform_seek_to_offset (demux, rate,
+        entry->pos + demux->common.ebml_segment_start);
+  }
+
 exit:
   if (flush) {
     GST_DEBUG_OBJECT (demux, "Stopping flush");