qtmux: use timestamps for muxing
authorThiago Santos <thiago.sousa.santos@collabora.co.uk>
Tue, 24 Nov 2009 19:16:56 +0000 (16:16 -0300)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Tue, 12 Apr 2011 19:32:14 +0000 (20:32 +0100)
Try to use timestamps even when the stream has out of order
timestamps, only fall back to durations when we detect an
out of order buffer. Improves sync between streams.

gst/quicktime/gstqtmux.c

index c5a818e0950768acf2b9fa4bc583bc4ef8cd4600..f7aeeb50ec0ebd43add97ec8ce80c5a7c2df1521 100644 (file)
@@ -1304,11 +1304,12 @@ gst_qt_mux_add_buffer (GstQTMux * qtmux, GstQTPad * pad, GstBuffer * buf)
 
   /* fall back to duration if:
    * - last bufer
 
   /* fall back to duration if:
    * - last bufer
-   * - this format has out of order buffers (e.g. MPEG-4),
+   * - the buffers are out of order,
    * - lack of valid time forces fall back */
    * - lack of valid time forces fall back */
-  if (buf == NULL || pad->is_out_of_order ||
+  if (buf == NULL ||
       !GST_BUFFER_TIMESTAMP_IS_VALID (last_buf) ||
       !GST_BUFFER_TIMESTAMP_IS_VALID (last_buf) ||
-      !GST_BUFFER_TIMESTAMP_IS_VALID (buf)) {
+      !GST_BUFFER_TIMESTAMP_IS_VALID (buf) ||
+      GST_BUFFER_TIMESTAMP (buf) < GST_BUFFER_TIMESTAMP (last_buf)) {
     if (!GST_BUFFER_DURATION_IS_VALID (last_buf)) {
       /* be forgiving for some possibly last upstream flushed buffer */
       if (buf)
     if (!GST_BUFFER_DURATION_IS_VALID (last_buf)) {
       /* be forgiving for some possibly last upstream flushed buffer */
       if (buf)