qtmux: Revert commits that set DTS and duration on buffers unconditionally
authorSebastian Dröge <sebastian@centricular.com>
Tue, 22 Nov 2016 13:59:19 +0000 (15:59 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Wed, 23 Nov 2016 16:17:06 +0000 (18:17 +0200)
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

gst/isomp4/gstqtmux.c

index 61362d9..bfeaf66 100644 (file)
@@ -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) {