[vlc-commits] v4l2: update and sort the codec table
Rémi Denis-Courmont
git at videolan.org
Fri Mar 23 22:01:20 CET 2012
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Fri Mar 23 22:51:34 2012 +0200| [4c16bb9f49017f115675cbba8c6874db05955573] | committer: Rémi Denis-Courmont
v4l2: update and sort the codec table
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=4c16bb9f49017f115675cbba8c6874db05955573
---
modules/access/v4l2/demux.c | 122 ++++++++++++++++++++++++++++++++-----------
1 files changed, 91 insertions(+), 31 deletions(-)
diff --git a/modules/access/v4l2/demux.c b/modules/access/v4l2/demux.c
index 792d4a9..ab76680 100644
--- a/modules/access/v4l2/demux.c
+++ b/modules/access/v4l2/demux.c
@@ -106,42 +106,102 @@ typedef struct
uint32_t blue;
} vlc_v4l2_fmt_t;
+/* NOTE: Currently vlc_v4l2_fmt_rank() assumes format are sorted in order of
+ * decreasing preference. */
static const vlc_v4l2_fmt_t v4l2_fmts[] =
{
- /* Raw data types */
- { V4L2_PIX_FMT_GREY, VLC_CODEC_GREY, 0, 0, 0 },
- { V4L2_PIX_FMT_HI240, VLC_FOURCC('I','2','4','0'), 0, 0, 0 },
- { V4L2_PIX_FMT_RGB555, VLC_CODEC_RGB15, 0x001f,0x03e0,0x7c00 },
- { V4L2_PIX_FMT_RGB565, VLC_CODEC_RGB16, 0x001f,0x07e0,0xf800 },
- /* Won't work since we don't know how to handle such gmask values
- * correctly
- { V4L2_PIX_FMT_RGB555X, VLC_CODEC_RGB15, 0x007c,0xe003,0x1f00 },
- { V4L2_PIX_FMT_RGB565X, VLC_CODEC_RGB16, 0x00f8,0xe007,0x1f00 },
- */
- { V4L2_PIX_FMT_BGR24, VLC_CODEC_RGB24, 0xff0000,0xff00,0xff },
- { V4L2_PIX_FMT_RGB24, VLC_CODEC_RGB24, 0xff,0xff00,0xff0000 },
- { V4L2_PIX_FMT_BGR32, VLC_CODEC_RGB32, 0xff0000,0xff00,0xff },
- { V4L2_PIX_FMT_RGB32, VLC_CODEC_RGB32, 0xff,0xff00,0xff0000 },
- { V4L2_PIX_FMT_YUYV, VLC_CODEC_YUYV, 0, 0, 0 },
- { V4L2_PIX_FMT_UYVY, VLC_CODEC_UYVY, 0, 0, 0 },
- { V4L2_PIX_FMT_Y41P, VLC_FOURCC('I','4','1','N'), 0, 0, 0 },
- { V4L2_PIX_FMT_YUV422P, VLC_CODEC_I422, 0, 0, 0 },
- { V4L2_PIX_FMT_YVU420, VLC_CODEC_YV12, 0, 0, 0 },
- { V4L2_PIX_FMT_YUV411P, VLC_CODEC_I411, 0, 0, 0 },
- { V4L2_PIX_FMT_YUV410, VLC_CODEC_I410, 0, 0, 0 },
-
- /* Raw data types, not in V4L2 spec but still in videodev2.h and supported
- * by VLC */
- { V4L2_PIX_FMT_YUV420, VLC_CODEC_I420, 0, 0, 0 },
- /* FIXME { V4L2_PIX_FMT_RGB444, VLC_CODEC_RGB32 }, */
+ /* Planar YUV 4:2:0 */
+ { V4L2_PIX_FMT_YUV420, VLC_CODEC_I420, 0, 0, 0 },
+ { V4L2_PIX_FMT_YVU420, VLC_CODEC_YV12, 0, 0, 0 },
+ { V4L2_PIX_FMT_YUV422P, VLC_CODEC_I422, 0, 0, 0 },
+ /* Packed YUV 4:2:2 */
+ { V4L2_PIX_FMT_YUYV, VLC_CODEC_YUYV, 0, 0, 0 },
+ { V4L2_PIX_FMT_UYVY, VLC_CODEC_UYVY, 0, 0, 0 },
+ { V4L2_PIX_FMT_YVYU, VLC_CODEC_YVYU, 0, 0, 0 },
+ { V4L2_PIX_FMT_VYUY, VLC_CODEC_VYUY, 0, 0, 0 },
+
+ { V4L2_PIX_FMT_YUV411P, VLC_CODEC_I411, 0, 0, 0 },
+
+ { V4L2_PIX_FMT_YUV410, VLC_CODEC_I410, 0, 0, 0 },
+// { V4L2_PIX_FMT_YVU410 },
+
+// { V4L2_PIX_FMT_NV24, },
+// { V4L2_PIX_FMT_NV42, },
+// { V4L2_PIX_FMT_NV16, VLC_CODEC_NV16, 0, 0, 0 },
+// { V4L2_PIX_FMT_NV61, VLC_CODEC_NV61, 0, 0, 0 },
+ { V4L2_PIX_FMT_NV12, VLC_CODEC_NV12, 0, 0, 0 },
+ { V4L2_PIX_FMT_NV21, VLC_CODEC_NV21, 0, 0, 0 },
+
+ /* V4L2-documented but VLC-unsupported misc. YUV formats */
+// { V4L2_PIX_FMT_Y41P },
+// { V4L2_PIX_FMT_NV12MT, },
+// { V4L2_PIX_FMT_M420, },
+
+ /* Packed RGB */
+#ifdef WORDS_BIGENDIAN
+ { V4L2_PIX_FMT_RGB32, VLC_CODEC_RGB32, 0xFF00, 0xFF0000, 0xFF000000 },
+ { V4L2_PIX_FMT_BGR32, VLC_CODEC_RGB32, 0xFF000000, 0xFF0000, 0xFF00 },
+ { V4L2_PIX_FMT_RGB24, VLC_CODEC_RGB24, 0xFF0000, 0x00FF00, 0x0000FF },
+ { V4L2_PIX_FMT_BGR24, VLC_CODEC_RGB24, 0x0000FF, 0x00FF00, 0xFF0000 },
+// { V4L2_PIX_FMT_BGR666, },
+// { V4L2_PIX_FMT_RGB565, },
+ { V4L2_PIX_FMT_RGB565X, VLC_CODEC_RGB16, 0x001F, 0x07E0, 0xF800 },
+// { V4L2_PIX_FMT_RGB555, },
+ { V4L2_PIX_FMT_RGB555X, VLC_CODEC_RGB15, 0x001F, 0x03E0, 0x7C00 },
+// { V4L2_PIX_FMT_RGB444, VLC_CODEC_RGB12, 0x000F, 0xF000, 0x0F00 },
+#else
+ { V4L2_PIX_FMT_RGB32, VLC_CODEC_RGB32, 0x0000FF, 0x00FF00, 0xFF0000 },
+ { V4L2_PIX_FMT_BGR32, VLC_CODEC_RGB32, 0xFF0000, 0x00FF00, 0x0000FF },
+ { V4L2_PIX_FMT_RGB24, VLC_CODEC_RGB24, 0x0000FF, 0x00FF00, 0xFF0000 },
+ { V4L2_PIX_FMT_BGR24, VLC_CODEC_RGB24, 0xFF0000, 0x00FF00, 0x0000FF },
+// { V4L2_PIX_FMT_BGR666, },
+ { V4L2_PIX_FMT_RGB565, VLC_CODEC_RGB16, 0x001F, 0x07E0, 0xF800 },
+// { V4L2_PIX_FMT_RGB565X, },
+ { V4L2_PIX_FMT_RGB555, VLC_CODEC_RGB15, 0x001F, 0x03E0, 0x7C00 },
+// { V4L2_PIX_FMT_RGB555X, },
+// { V4L2_PIX_FMT_RGB444, VLC_CODEC_RGB12, 0x0F00, 0x00F0, 0x000F },
+#endif
+// { V4L2_PIX_FMT_RGB332, VLC_CODEC_RGB8, 0xC0, 0x38, 0x07 },
+
+ /* Bayer (sub-sampled RGB). Not supported. */
+// { V4L2_PIX_FMT_SBGGR16, }
+// { V4L2_PIX_FMT_SRGGB12, }
+// { V4L2_PIX_FMT_SGRBG12, }
+// { V4L2_PIX_FMT_SGBRG12, }
+// { V4L2_PIX_FMT_SBGGR12, }
+// { V4L2_PIX_FMT_SRGGB10, }
+// { V4L2_PIX_FMT_SGRBG10, }
+// { V4L2_PIX_FMT_SGBRG10, }
+// { V4L2_PIX_FMT_SBGGR10, }
+// { V4L2_PIX_FMT_SBGGR8, }
+// { V4L2_PIX_FMT_SGBRG8, }
+// { V4L2_PIX_FMT_SGRBG8, }
+// { V4L2_PIX_FMT_SRGGB8, }
/* Compressed data types */
+ { V4L2_PIX_FMT_JPEG, VLC_CODEC_MJPG, 0, 0, 0 },
+ { V4L2_PIX_FMT_H264, VLC_CODEC_H264, 0, 0, 0 },
+ /* FIXME: fill p_extra for avc1... */
+// { V4L2_PIX_FMT_H264_NO_SC, VLC_FOURCC('a','v','c','1'), 0, 0, 0 }
+ { V4L2_PIX_FMT_MPEG4, VLC_CODEC_MP4V, 0, 0, 0 },
+ { V4L2_PIX_FMT_XVID, VLC_CODEC_MP4V, 0, 0, 0 },
+ { V4L2_PIX_FMT_H263, VLC_CODEC_H263, 0, 0, 0 },
+ { V4L2_PIX_FMT_MPEG2, VLC_CODEC_MPGV, 0, 0, 0 },
+ { V4L2_PIX_FMT_MPEG1, VLC_CODEC_MPGV, 0, 0, 0 },
+ { V4L2_PIX_FMT_VC1_ANNEX_G, VLC_CODEC_VC1, 0, 0, 0 },
+ { V4L2_PIX_FMT_VC1_ANNEX_L, VLC_CODEC_VC1, 0, 0, 0 },
+ //V4L2_PIX_FMT_MPEG -> use access
+
+ /* Reserved formats */
{ V4L2_PIX_FMT_MJPEG, VLC_CODEC_MJPG, 0, 0, 0 },
- { V4L2_PIX_FMT_JPEG, VLC_CODEC_JPEG, 0, 0, 0 },
-#if 0
- { V4L2_PIX_FMT_DV, VLC_FOURCC('?','?','?','?') },
- { V4L2_PIX_FMT_MPEG, VLC_FOURCC('?','?','?','?') },
-#endif
+ //V4L2_PIX_FMT_DV -> use access
+
+ /* Grey scale */
+// { V4L2_PIX_FMT_Y16, },
+// { V4L2_PIX_FMT_Y12, },
+// { V4L2_PIX_FMT_Y10, },
+// { V4L2_PIX_FMT_Y10BPACK, },
+ { V4L2_PIX_FMT_GREY, VLC_CODEC_GREY, 0, 0, 0 },
};
static const vlc_v4l2_fmt_t *vlc_from_v4l2_fourcc (uint32_t fourcc)
More information about the vlc-commits
mailing list