interlace: avoid dividing by zero on unkbown framerate
authorVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Fri, 6 Jan 2012 10:39:07 +0000 (10:39 +0000)
committerVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Fri, 6 Jan 2012 10:54:11 +0000 (10:54 +0000)
If the framerate is unknown, we cannot generate meaningful
buffer timestamps/durations, so set them to _NONE instead of
calculating something wrong and dividing by 0.

gst/interlace/gstinterlace.c

index 0e86f85..1665ed7 100644 (file)
@@ -328,13 +328,19 @@ gst_interlace_decorate_buffer (GstInterlace * interlace, GstBuffer * buf,
     int n_fields)
 {
   /* field duration = src_fps_d / (2 * src_fps_n) */
-  GST_BUFFER_TIMESTAMP (buf) = interlace->timebase +
-      gst_util_uint64_scale (GST_SECOND,
-      interlace->src_fps_d * interlace->fields_since_timebase,
-      interlace->src_fps_n * 2);
-  GST_BUFFER_DURATION (buf) =
-      gst_util_uint64_scale (GST_SECOND, interlace->src_fps_d * n_fields,
-      interlace->src_fps_n * 2);
+  if (interlace->src_fps_n == 0) {
+    /* If we don't know the fps, we can't generate timestamps/durations */
+    GST_BUFFER_TIMESTAMP (buf) = GST_CLOCK_TIME_NONE;
+    GST_BUFFER_DURATION (buf) = GST_CLOCK_TIME_NONE;
+  } else {
+    GST_BUFFER_TIMESTAMP (buf) = interlace->timebase +
+        gst_util_uint64_scale (GST_SECOND,
+        interlace->src_fps_d * interlace->fields_since_timebase,
+        interlace->src_fps_n * 2);
+    GST_BUFFER_DURATION (buf) =
+        gst_util_uint64_scale (GST_SECOND, interlace->src_fps_d * n_fields,
+        interlace->src_fps_n * 2);
+  }
   /* increment the buffer timestamp by duration for the next buffer */
   gst_buffer_set_caps (buf, interlace->srccaps);