interlace: Fix buffer timestamp and duration
authorRobert Swain <robert.swain@collabora.co.uk>
Mon, 22 Nov 2010 14:26:06 +0000 (15:26 +0100)
committerRobert Swain <robert.swain@collabora.co.uk>
Wed, 24 Nov 2010 11:09:16 +0000 (12:09 +0100)
The field rate is twice the frame rate of the src pad and so the duration of
one output buffer is src_fps_d / (2 * src_fps_n).

gst/interlace/gstinterlace.c

index d8b7f2e..c6181ec 100644 (file)
@@ -327,13 +327,14 @@ static void
 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);
+      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);
+      interlace->src_fps_n * 2);
   /* increment the buffer timestamp by duration for the next buffer */
   gst_buffer_set_caps (buf, interlace->srccaps);