v4l2src: set top field first for interlaced buffers if v4l2 exports it
authorJanne Grunau <janne.grunau@collabora.co.uk>
Thu, 4 Nov 2010 18:31:45 +0000 (19:31 +0100)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Sat, 4 Dec 2010 16:42:21 +0000 (16:42 +0000)
https://bugzilla.gnome.org/show_bug.cgi?id=634393

sys/v4l2/gstv4l2bufferpool.c

index c13bb1e..b8c61ba 100644 (file)
@@ -30,6 +30,8 @@
 #include <string.h>
 #include <unistd.h>
 
+#include "gst/video/video.h"
+
 #include <gstv4l2bufferpool.h>
 #include "gstv4l2src.h"
 #include "gstv4l2sink.h"
@@ -545,6 +547,12 @@ gst_v4l2_buffer_pool_dqbuf (GstV4l2BufferPool * pool)
 
     GST_V4L2_BUFFER_POOL_UNLOCK (pool);
 
+    /* set top/bottom field first if v4l2_buffer has the information */
+    if (buffer.field == V4L2_FIELD_INTERLACED_TB)
+      GST_BUFFER_FLAG_SET (pool_buffer, GST_VIDEO_BUFFER_TFF);
+    if (buffer.field == V4L2_FIELD_INTERLACED_BT)
+      GST_BUFFER_FLAG_UNSET (pool_buffer, GST_VIDEO_BUFFER_TFF);
+
     /* this can change at every frame, esp. with jpeg */
     GST_BUFFER_SIZE (pool_buffer) = buffer.bytesused;