baseparse: properly track upstream timestamps
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Tue, 11 Jan 2011 14:24:02 +0000 (15:24 +0100)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Fri, 8 Apr 2011 17:07:14 +0000 (18:07 +0100)
... rather than with a delay.

gst/audioparsers/gstbaseparse.c

index a0319d8..ee62f10 100644 (file)
@@ -2106,6 +2106,14 @@ gst_base_parse_chain (GstPad * pad, GstBuffer * buffer)
       break;
     }
 
+    /* move along with upstream timestamp (if any),
+     * but interpolate in between */
+    timestamp = gst_adapter_prev_timestamp (parse->adapter, NULL);
+    if (GST_CLOCK_TIME_IS_VALID (timestamp) &&
+        (parse->priv->prev_ts != timestamp)) {
+      parse->priv->prev_ts = parse->priv->next_ts = timestamp;
+    }
+
     /* FIXME: Would it be more efficient to make a subbuffer instead? */
     outbuf = gst_adapter_take_buffer (parse->adapter, fsize);
     outbuf = gst_buffer_make_metadata_writable (outbuf);
@@ -2114,14 +2122,7 @@ gst_base_parse_chain (GstPad * pad, GstBuffer * buffer)
     GST_BUFFER_OFFSET (outbuf) = parse->priv->offset;
     parse->priv->offset += fsize;
     GST_BUFFER_TIMESTAMP (outbuf) = GST_CLOCK_TIME_NONE;
-
-    /* move along with upstream timestamp (if any),
-     * but interpolate in between */
-    timestamp = gst_adapter_prev_timestamp (parse->adapter, NULL);
-    if (GST_CLOCK_TIME_IS_VALID (timestamp) &&
-        (parse->priv->prev_ts != timestamp)) {
-      parse->priv->prev_ts = parse->priv->next_ts = timestamp;
-    }
+    GST_BUFFER_DURATION (outbuf) = GST_CLOCK_TIME_NONE;
 
     frame->buffer = outbuf;
     ret = gst_base_parse_handle_and_push_frame (parse, bclass, frame);