From: Sebastian Dröge Date: Tue, 22 Nov 2016 13:59:19 +0000 (+0200) Subject: qtmux: Revert commits that set DTS and duration on buffers unconditionally X-Git-Tag: 1.12.2~315 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=351f2fca0a39cad58436ab83ae76ea6439de11e8;p=platform%2Fupstream%2Fgst-plugins-good.git qtmux: Revert commits that set DTS and duration on buffers unconditionally 39f7e52266fde3b3c035e22cbcbb2bb1fa207b17 was setting the buffer duration to 0 if is not valid, under the assumption that this is "the last" buffer and no others are coming next. This is wrong, last_buf is the previous buffer and not the very last one. 4e3c13c87c258c9c95e2217d32ab314d12b5fffc was setting DTS to 0 if there was none. This will set DTS to 0 for all e.g. audio streams, completely messing up calculations if streams don't start at 0. https://bugzilla.gnome.org/show_bug.cgi?id=774840 --- diff --git a/gst/isomp4/gstqtmux.c b/gst/isomp4/gstqtmux.c index 61362d9..bfeaf66 100644 --- a/gst/isomp4/gstqtmux.c +++ b/gst/isomp4/gstqtmux.c @@ -3184,35 +3184,8 @@ gst_qt_mux_add_buffer (GstQTMux * qtmux, GstQTPad * pad, GstBuffer * buf) last_buf = pad->last_buf; - /* DTS delta is used to calculate sample duration. - * If buffer has missing DTS, we take either segment start or - * previous buffer end time, whichever is later. - * This must only be done for non sparse streams, sparse streams - * can have gaps between buffers (which is handled later by adding - * extra empty buffer with duration that fills the gap). */ - if (!pad->sparse && buf && !GST_BUFFER_DTS_IS_VALID (buf)) { - GstClockTime last_buf_duration = last_buf - && GST_BUFFER_DURATION_IS_VALID (last_buf) ? - GST_BUFFER_DURATION (last_buf) : 0; - - buf = gst_buffer_make_writable (buf); - GST_BUFFER_DTS (buf) = 0; /* running-time 0 */ - - if (last_buf - && (GST_BUFFER_DTS (last_buf) + last_buf_duration) > - GST_BUFFER_DTS (buf)) { - GST_BUFFER_DTS (buf) = GST_BUFFER_DTS (last_buf) + last_buf_duration; - } - } - ret = gst_qt_mux_check_and_update_timecode (qtmux, pad, buf, ret); - if (last_buf && !buf && !GST_BUFFER_DURATION_IS_VALID (last_buf)) { - /* this is last buffer; there is no next buffer so we need valid number as duration */ - last_buf = gst_buffer_make_writable (last_buf); - GST_BUFFER_DURATION (last_buf) = 0; - } - if (last_buf == NULL) { #ifndef GST_DISABLE_GST_DEBUG if (buf == NULL) { @@ -3227,8 +3200,9 @@ gst_qt_mux_add_buffer (GstQTMux * qtmux, GstQTPad * pad, GstBuffer * buf) #endif pad->last_buf = buf; goto exit; - } else + } else { gst_buffer_ref (last_buf); + } /* if this is the first buffer, store the timestamp */ if (G_UNLIKELY (pad->first_ts == GST_CLOCK_TIME_NONE) && last_buf) {