diff --git a/gst/matroska/matroska-demux.c b/gst/matroska/matroska-demux.c index fe8e45075c..31c508c838 100644 --- a/gst/matroska/matroska-demux.c +++ b/gst/matroska/matroska-demux.c @@ -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");