From d1b91c755c44f3bc4c28d3b17efc110e49ac2b10 Mon Sep 17 00:00:00 2001 From: Thiago Santos Date: Fri, 12 Apr 2013 10:21:11 -0300 Subject: [PATCH] qtdemux: avoid storing non-time newsegments to push later This can confuse downstream when they get a byte segment after receiving the natural time segment from qtdemux that it sends when starting to push buffers. This is specially the case with parsers that try to convert the position from byte to time format and might miss the correct position for playback to start. --- gst/isomp4/qtdemux.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/gst/isomp4/qtdemux.c b/gst/isomp4/qtdemux.c index dd1c6b9267..9265d418f1 100644 --- a/gst/isomp4/qtdemux.c +++ b/gst/isomp4/qtdemux.c @@ -1829,9 +1829,14 @@ gst_qtdemux_handle_sink_event (GstPad * sinkpad, GstObject * parent, GST_DEBUG_OBJECT (demux, "received newsegment %" GST_SEGMENT_FORMAT, &segment); - GST_DEBUG_OBJECT (demux, "new pending_newsegment"); - gst_event_replace (&demux->pending_newsegment, event); - demux->upstream_newsegment = TRUE; + if (segment.format == GST_FORMAT_TIME) { + GST_DEBUG_OBJECT (demux, "new pending_newsegment"); + gst_event_replace (&demux->pending_newsegment, event); + demux->upstream_newsegment = TRUE; + } else { + GST_DEBUG_OBJECT (demux, "Not storing upstream newsegment, " + "not in time format"); + } /* chain will send initial newsegment after pads have been added */ if (demux->state != QTDEMUX_STATE_MOVIE || !demux->n_streams) {