mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-23 15:48:23 +00:00
qtmux: Revert commits that set DTS and duration on buffers unconditionally
39f7e52266
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.4e3c13c87c
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
This commit is contained in:
parent
9acc0b5d0e
commit
351f2fca0a
1 changed files with 2 additions and 28 deletions
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue