dvdec: Don't set bogus timestamp/duration
authorEdward Hervey <bilboed@bilboed.com>
Fri, 11 Apr 2014 09:54:12 +0000 (11:54 +0200)
committerEdward Hervey <bilboed@bilboed.com>
Fri, 11 Apr 2014 09:54:12 +0000 (11:54 +0200)
This will happen if we have an incoming stream with a non-TIME segment

Could be improved later to figure out proper pts/duration.

CID #1199702
CID #1199703

ext/dv/gstdvdec.c

index ea2ea41..7faeaa5 100644 (file)
@@ -421,7 +421,7 @@ gst_dvdec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
   GstBuffer *outbuf;
   GstFlowReturn ret = GST_FLOW_OK;
   guint length;
-  guint64 cstart, cstop;
+  guint64 cstart = GST_CLOCK_TIME_NONE, cstop = GST_CLOCK_TIME_NONE;
   gboolean PAL, wide;
 
   dvdec = GST_DVDEC (parent);
@@ -518,8 +518,15 @@ gst_dvdec_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
 
   GST_BUFFER_OFFSET (outbuf) = GST_BUFFER_OFFSET (buf);
   GST_BUFFER_OFFSET_END (outbuf) = GST_BUFFER_OFFSET_END (buf);
-  GST_BUFFER_TIMESTAMP (outbuf) = cstart;
-  GST_BUFFER_DURATION (outbuf) = cstop - cstart;
+
+  /* FIXME : Compute values when using non-TIME segments,
+   * but for the moment make sure we at least don't set bogus values
+   */
+  if (GST_CLOCK_TIME_IS_VALID (cstart)) {
+    GST_BUFFER_TIMESTAMP (outbuf) = cstart;
+    if (GST_CLOCK_TIME_IS_VALID (cstop))
+      GST_BUFFER_DURATION (outbuf) = cstop - cstart;
+  }
 
   ret = gst_pad_push (dvdec->srcpad, outbuf);