interlaced: set both DTS and PTS
authorWim Taymans <wim.taymans@collabora.co.uk>
Mon, 25 Mar 2013 09:10:28 +0000 (10:10 +0100)
committerWim Taymans <wim.taymans@collabora.co.uk>
Mon, 25 Mar 2013 09:50:35 +0000 (10:50 +0100)
Handle both dts and pts on output buffers.

gst/interlace/gstinterlace.c

index ee49518065d578ed11c368823804792593b207ee..21da9dc59817a3da25a370726252f4904221b8f1 100644 (file)
@@ -309,13 +309,15 @@ gst_interlace_decorate_buffer (GstInterlace * interlace, GstBuffer * buf,
   /* field duration = src_fps_d / (2 * src_fps_n) */
   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_DTS (buf) = GST_CLOCK_TIME_NONE;
+    GST_BUFFER_PTS (buf) = GST_CLOCK_TIME_NONE;
     GST_BUFFER_DURATION (buf) = GST_CLOCK_TIME_NONE;
   } else {
-    GST_BUFFER_TIMESTAMP (buf) = interlace->timebase +
+    GST_BUFFER_DTS (buf) = interlace->timebase +
         gst_util_uint64_scale (GST_SECOND,
         interlace->src_fps_d * interlace->fields_since_timebase,
         interlace->src_fps_n * 2);
+    GST_BUFFER_PTS (buf) = GST_BUFFER_DTS (buf);
     GST_BUFFER_DURATION (buf) =
         gst_util_uint64_scale (GST_SECOND, interlace->src_fps_d * n_fields,
         interlace->src_fps_n * 2);
@@ -626,12 +628,11 @@ gst_interlace_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
   gint num_fields = 0;
   int current_fields;
   const PulldownFormat *format;
+  GstClockTime timestamp;
 
-  GST_DEBUG ("Received buffer at %u:%02u:%02u:%09u",
-      (guint) (GST_BUFFER_TIMESTAMP (buffer) / (GST_SECOND * 60 * 60)),
-      (guint) ((GST_BUFFER_TIMESTAMP (buffer) / (GST_SECOND * 60)) % 60),
-      (guint) ((GST_BUFFER_TIMESTAMP (buffer) / GST_SECOND) % 60),
-      (guint) (GST_BUFFER_TIMESTAMP (buffer) % GST_SECOND));
+  timestamp = GST_BUFFER_TIMESTAMP (buffer);
+
+  GST_DEBUG ("Received buffer at %" GST_TIME_FORMAT, GST_TIME_ARGS (timestamp));
 
   GST_DEBUG ("duration %" GST_TIME_FORMAT " flags %04x %s %s %s",
       GST_TIME_ARGS (GST_BUFFER_DURATION (buffer)),
@@ -659,15 +660,15 @@ gst_interlace_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
 
   if (interlace->timebase == GST_CLOCK_TIME_NONE) {
     /* get the initial ts */
-    interlace->timebase = GST_BUFFER_TIMESTAMP (buffer);
+    interlace->timebase = timestamp;
   }
 
   format = &formats[interlace->pattern];
 
   if (interlace->stored_fields == 0
       && interlace->phase_index == interlace->pattern_offset
-      && GST_CLOCK_TIME_IS_VALID (GST_BUFFER_TIMESTAMP (buffer))) {
-    interlace->timebase = GST_BUFFER_TIMESTAMP (buffer);
+      && GST_CLOCK_TIME_IS_VALID (timestamp)) {
+    interlace->timebase = timestamp;
     interlace->fields_since_timebase = 0;
   }