dvdec: Add interlacing info to caps and buffers
authorDavid Schleef <ds@schleef.org>
Thu, 26 Feb 2009 03:58:29 +0000 (19:58 -0800)
committerDavid Schleef <ds@schleef.org>
Thu, 26 Feb 2009 04:01:36 +0000 (20:01 -0800)
ext/dv/gstdvdec.c
ext/dv/gstdvdec.h

index ade9796..fad43be 100644 (file)
@@ -43,6 +43,7 @@
 #endif
 #include <string.h>
 #include <math.h>
+#include <gst/video/video.h>
 
 #include "gstdvdec.h"
 
@@ -328,7 +329,7 @@ gst_dvdec_src_negotiate (GstDVDec * dvdec)
       "framerate", GST_TYPE_FRACTION, dvdec->framerate_numerator,
       dvdec->framerate_denominator,
       "pixel-aspect-ratio", GST_TYPE_FRACTION, dvdec->par_x,
-      dvdec->par_y, NULL);
+      dvdec->par_y, "interlaced", G_TYPE_BOOLEAN, dvdec->interlaced, NULL);
 
   gst_pad_set_caps (dvdec->srcpad, othercaps);
   gst_caps_unref (othercaps);
@@ -434,6 +435,7 @@ gst_dvdec_chain (GstPad * pad, GstBuffer * buf)
 
   dvdec->height = (dvdec->PAL ? PAL_HEIGHT : NTSC_HEIGHT);
 
+  dvdec->interlaced = !dv_is_progressive (dvdec->decoder);
 
   /* negotiate if not done yet */
   if (!dvdec->src_negotiated) {
@@ -466,6 +468,12 @@ gst_dvdec_chain (GstPad * pad, GstBuffer * buf)
   dv_decode_full_frame (dvdec->decoder, inframe,
       e_dv_color_yuv, outframe_ptrs, outframe_pitches);
 
+  if (dvdec->PAL) {
+    GST_BUFFER_FLAG_UNSET (outbuf, GST_VIDEO_BUFFER_TFF);
+  } else {
+    GST_BUFFER_FLAG_SET (outbuf, GST_VIDEO_BUFFER_TFF);
+  }
+
   GST_BUFFER_OFFSET (outbuf) = GST_BUFFER_OFFSET (buf);
   GST_BUFFER_OFFSET_END (outbuf) = GST_BUFFER_OFFSET_END (buf);
   GST_BUFFER_TIMESTAMP (outbuf) = cstart;
index 5f166a1..de8481d 100644 (file)
@@ -57,6 +57,7 @@ struct _GstDVDec {
   gint           quality;
 
   gboolean       PAL;
+  gboolean       interlaced;
   gboolean       wide;
   gint           frame_len;