From: Wim Taymans Date: Sun, 10 Mar 2013 03:15:06 +0000 (+0100) Subject: qtdemux: don't send so many segment events X-Git-Tag: 1.19.3~509^2~5856 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=544d926732a613cfcf89648f5bb004d9598a8dd6;p=platform%2Fupstream%2Fgstreamer.git qtdemux: don't send so many segment events Only send one segment event in the beginning of the stream, not after each moov and moof atom. Conflicts: gst/isomp4/qtdemux.c --- diff --git a/gst/isomp4/qtdemux.c b/gst/isomp4/qtdemux.c index 382c8cc..3363e1c 100644 --- a/gst/isomp4/qtdemux.c +++ b/gst/isomp4/qtdemux.c @@ -1829,6 +1829,7 @@ 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; @@ -2654,24 +2655,14 @@ qtdemux_parse_moof (GstQTDemux * qtdemux, const guint8 * buffer, guint length, qtdemux_parse_tfdt (qtdemux, &tfdt_data, &decode_time); + /* FIXME, we can use decode_time to interpolate timestamps + * in case the input timestamps are missing */ decode_time_ts = gst_util_uint64_scale (decode_time, GST_SECOND, stream->timescale); GST_DEBUG_OBJECT (qtdemux, "decode time %" G_GUINT64_FORMAT " (%" GST_TIME_FORMAT ")", decode_time, GST_TIME_ARGS (decode_time_ts)); - - /* If there is a new segment pending, update the time/position. - * Don't replace if the pending newsegment is from upstream */ - if (qtdemux->pending_newsegment && !qtdemux->upstream_newsegment) { - GstSegment segment; - - gst_segment_init (&segment, GST_FORMAT_TIME); - gst_event_replace (&qtdemux->pending_newsegment, - gst_event_new_segment (&segment)); - /* ref added when replaced, release the original _new one */ - gst_event_unref (qtdemux->pending_newsegment); - } } if (G_UNLIKELY (!stream)) { @@ -4553,13 +4544,13 @@ gst_qtdemux_chain (GstPad * sinkpad, GstObject * parent, GstBuffer * inbuf) if (demux->got_moov && demux->fragmented) { GST_DEBUG_OBJECT (demux, "Got a second moov, clean up data from old one"); + } else { + /* prepare newsegment to send when streaming actually starts */ + if (!demux->pending_newsegment) + demux->pending_newsegment = + gst_event_new_segment (&demux->segment); } - /* prepare newsegment to send when streaming actually starts */ - if (!demux->pending_newsegment) - demux->pending_newsegment = - gst_event_new_segment (&demux->segment); - qtdemux_parse_moov (demux, data, demux->neededbytes); qtdemux_node_dump (demux, demux->moov_node); qtdemux_parse_tree (demux); @@ -4597,6 +4588,7 @@ gst_qtdemux_chain (GstPad * sinkpad, GstObject * parent, GstBuffer * inbuf) if (!demux->pending_newsegment) { GstSegment segment; gst_segment_init (&segment, GST_FORMAT_TIME); + GST_DEBUG_OBJECT (demux, "new pending_newsegment"); demux->pending_newsegment = gst_event_new_segment (&segment); } qtdemux_expose_streams (demux);