v4l2: Directly map V4L2 formats to DRM formats
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Thu, 15 Aug 2024 13:54:26 +0000 (09:54 -0400)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Wed, 18 Dec 2024 23:34:08 +0000 (23:34 +0000)
As in the long term not all V4L2 formats will have a libgstvideo
implementation, add a dedicated DRM fourcc map. This will be used
to enable memory:DMABuf caps features.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7633>

subprojects/gst-plugins-good/sys/v4l2/gstv4l2object.c

index 9b64f42f431d8be26aa07a8c2c11964f1aa2e676..2274249b36958c02d33936c417fd610250018d80 100644 (file)
@@ -35,6 +35,7 @@
 #endif
 
 #include "ext/videodev2.h"
+#include "ext/drm_fourcc.h"
 #include "gstv4l2object.h"
 #include "gstv4l2tuner.h"
 #include "gstv4l2colorbalance.h"
@@ -81,146 +82,160 @@ typedef struct
 {
   guint32 v4l2_format;
   GstVideoFormat gst_format;
+  guint32 drm_fourcc;
+  guint64 drm_modifier;
   GstV4L2FormatFlags flags;
 } GstV4L2FormatDesc;
 
+
+#define MAP_FMT(v4l2_format, gst_fmt) \
+  V4L2_PIX_FMT_##v4l2_format, GST_VIDEO_FORMAT_##gst_fmt
+
+#define MAP_DRM(drm_fmt, drm_mod) \
+  DRM_FORMAT_##drm_fmt, DRM_FORMAT_MOD_##drm_mod
+
+#define MAP_DRM_BE(drm_fmt, drm_mod) \
+  DRM_FORMAT_##drm_fmt | DRM_FORMAT_BIG_ENDIAN, DRM_FORMAT_MOD_##drm_mod
+
+#define MAP_ENC_FMT(v4l2_format, gst_fmt) \
+  V4L2_PIX_FMT_##v4l2_format, GST_VIDEO_FORMAT_##gst_fmt, DRM_FORMAT_INVALID, DRM_FORMAT_MOD_INVALID
+
 /* *INDENT-OFF* */
-#define MAP_FMT(v4l2_format, gst_fmt) V4L2_PIX_FMT_##v4l2_format, GST_VIDEO_FORMAT_##gst_fmt
 static const GstV4L2FormatDesc gst_v4l2_formats[] = {
   /* RGB formats */
-  {MAP_FMT (RGB332, UNKNOWN),   GST_V4L2_RAW},
-  {MAP_FMT (ARGB555, UNKNOWN),  GST_V4L2_RAW},
-  {MAP_FMT (XRGB555, RGB15),    GST_V4L2_RAW},
-  {MAP_FMT (XRGB555X, RGB15),   GST_V4L2_RAW},
-  {MAP_FMT (ARGB555X, UNKNOWN), GST_V4L2_RAW},
-  {MAP_FMT (RGB565, RGB16),     GST_V4L2_RAW},
-  {MAP_FMT (RGB565X, UNKNOWN),  GST_V4L2_RAW},
-  {MAP_FMT (BGR666, UNKNOWN),   GST_V4L2_RAW},
-  {MAP_FMT (BGR24, BGR),        GST_V4L2_RAW},
-  {MAP_FMT (RGB24, RGB),        GST_V4L2_RAW},
-  {MAP_FMT (ABGR32, BGRA),      GST_V4L2_RAW},
-  {MAP_FMT (XBGR32, BGRx),      GST_V4L2_RAW},
-  {MAP_FMT (BGRA32, ABGR),      GST_V4L2_RAW},
-  {MAP_FMT (BGRX32, xBGR),      GST_V4L2_RAW},
-  {MAP_FMT (RGBA32, RGBA),      GST_V4L2_RAW},
-  {MAP_FMT (RGBX32, RGBx),      GST_V4L2_RAW},
-  {MAP_FMT (ARGB32, ARGB),      GST_V4L2_RAW},
-  {MAP_FMT (XRGB32, xRGB),      GST_V4L2_RAW},
+  {MAP_FMT (RGB332, UNKNOWN),   MAP_DRM (RGB332,   LINEAR),     GST_V4L2_RAW},
+  {MAP_FMT (ARGB555, UNKNOWN),  MAP_DRM (ARGB1555, LINEAR),     GST_V4L2_RAW},
+  {MAP_FMT (XRGB555, RGB15),    MAP_DRM (XRGB1555, LINEAR),     GST_V4L2_RAW},
+  {MAP_FMT (XRGB555X,UNKNOWN),  MAP_DRM_BE (XRGB1555, LINEAR),  GST_V4L2_RAW},
+  {MAP_FMT (ARGB555X, UNKNOWN), MAP_DRM_BE (ARGB1555, LINEAR),  GST_V4L2_RAW},
+  {MAP_FMT (RGB565, RGB16),     MAP_DRM (RGB565, LINEAR),       GST_V4L2_RAW},
+  {MAP_FMT (RGB565X,UNKNOWN),   MAP_DRM_BE (RGB565, LINEAR),    GST_V4L2_RAW},
+  {MAP_FMT (BGR666, UNKNOWN),   MAP_DRM (INVALID, INVALID),     GST_V4L2_RAW},
+  {MAP_FMT (BGR24, BGR),        MAP_DRM (RGB888, LINEAR),       GST_V4L2_RAW},
+  {MAP_FMT (RGB24, RGB),        MAP_DRM (BGR888, LINEAR),       GST_V4L2_RAW},
+  {MAP_FMT (ABGR32, BGRA),      MAP_DRM (ARGB8888, LINEAR),     GST_V4L2_RAW},
+  {MAP_FMT (XBGR32, BGRx),      MAP_DRM (XRGB8888, LINEAR),     GST_V4L2_RAW},
+  {MAP_FMT (BGRA32, ABGR),      MAP_DRM (RGBA8888, LINEAR),     GST_V4L2_RAW},
+  {MAP_FMT (BGRX32, xBGR),      MAP_DRM (RGBX8888, LINEAR),     GST_V4L2_RAW},
+  {MAP_FMT (RGBA32, RGBA),      MAP_DRM (ABGR8888, LINEAR),     GST_V4L2_RAW},
+  {MAP_FMT (RGBX32, RGBx),      MAP_DRM (XBGR8888, LINEAR),     GST_V4L2_RAW},
+  {MAP_FMT (ARGB32, ARGB),      MAP_DRM (BGRA8888, LINEAR),     GST_V4L2_RAW},
+  {MAP_FMT (XRGB32, xRGB),      MAP_DRM (BGRX8888, LINEAR),     GST_V4L2_RAW},
 
   /* Deprecated Packed RGB Image Formats (alpha ambiguity) */
-  {MAP_FMT (RGB444, UNKNOWN), GST_V4L2_RAW},
-  {MAP_FMT (RGB555, RGB15),   GST_V4L2_RAW},
-  {MAP_FMT (RGB555X, BGR15),  GST_V4L2_RAW},
-  {MAP_FMT (BGR32, BGRx),     GST_V4L2_RAW},
-  {MAP_FMT (BGR32, BGRA),     GST_V4L2_RAW},
-  {MAP_FMT (RGB32, xRGB),     GST_V4L2_RAW},
-  {MAP_FMT (RGB32, ARGB),     GST_V4L2_RAW},
+  {MAP_FMT (RGB444, UNKNOWN), MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
+  {MAP_FMT (RGB555, RGB15),   MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
+  {MAP_FMT (RGB555X, BGR15),  MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
+  {MAP_FMT (BGR32, BGRx),     MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
+  {MAP_FMT (BGR32, BGRA),     MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
+  {MAP_FMT (RGB32, xRGB),     MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
+  {MAP_FMT (RGB32, ARGB),     MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
 
   /* Grey formats */
-  {MAP_FMT (GREY, GRAY8),       GST_V4L2_RAW},
-  {MAP_FMT (Y4, UNKNOWN),       GST_V4L2_RAW},
-  {MAP_FMT (Y6, UNKNOWN),       GST_V4L2_RAW},
-  {MAP_FMT (Y10, UNKNOWN),      GST_V4L2_RAW},
-  {MAP_FMT (Y12, UNKNOWN),      GST_V4L2_RAW},
-  {MAP_FMT (Y16, GRAY16_LE),    GST_V4L2_RAW},
-  {MAP_FMT (Y16_BE, GRAY16_BE), GST_V4L2_RAW},
-  {MAP_FMT (Y10BPACK, UNKNOWN), GST_V4L2_RAW},
+  {MAP_FMT (GREY, GRAY8),       MAP_DRM (R8, LINEAR),       GST_V4L2_RAW},
+  {MAP_FMT (Y4, UNKNOWN),       MAP_DRM (R4, LINEAR),       GST_V4L2_RAW},
+  {MAP_FMT (Y6, UNKNOWN),       MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
+  {MAP_FMT (Y10, UNKNOWN),      MAP_DRM (R10, LINEAR),      GST_V4L2_RAW},
+  {MAP_FMT (Y12, UNKNOWN),      MAP_DRM (R12, LINEAR),      GST_V4L2_RAW},
+  {MAP_FMT (Y16, GRAY16_LE),    MAP_DRM (R16, LINEAR),      GST_V4L2_RAW},
+  {MAP_FMT (Y16_BE, GRAY16_BE), MAP_DRM_BE (R16, LINEAR),   GST_V4L2_RAW},
+  {MAP_FMT (Y10BPACK, UNKNOWN), MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
 
   /* Palette formats */
-  {MAP_FMT (PAL8, UNKNOWN),   GST_V4L2_RAW},
+  {MAP_FMT (PAL8, UNKNOWN), MAP_DRM (INVALID, INVALID),   GST_V4L2_RAW},
 
   /* Chrominance formats */
-  {MAP_FMT (UV8, UNKNOWN),    GST_V4L2_RAW},
+  {MAP_FMT (UV8, UNKNOWN), MAP_DRM (GR88, LINEAR),    GST_V4L2_RAW},
 
   /* Luminance+Chrominance formats */
-  {MAP_FMT (YVU410, YVU9),    GST_V4L2_RAW},
-  {MAP_FMT (YVU420M, YV12),   GST_V4L2_RAW},
-  {MAP_FMT (YVU420, YV12),    GST_V4L2_RAW},
-  {MAP_FMT (YUYV, YUY2),      GST_V4L2_RAW},
-  {MAP_FMT (YYUV, UNKNOWN),   GST_V4L2_RAW},
-  {MAP_FMT (YVYU, YVYU),      GST_V4L2_RAW},
-  {MAP_FMT (UYVY, UYVY),      GST_V4L2_RAW},
-  {MAP_FMT (VYUY, UNKNOWN),   GST_V4L2_RAW},
-  {MAP_FMT (YUV422M, Y42B),   GST_V4L2_RAW},
-  {MAP_FMT (YUV422P, Y42B),   GST_V4L2_RAW},
-  {MAP_FMT (YUV411P, Y41B),   GST_V4L2_RAW},
-  {MAP_FMT (Y41P, UNKNOWN),   GST_V4L2_RAW},
-  {MAP_FMT (YUV444, UNKNOWN), GST_V4L2_RAW},
-  {MAP_FMT (YUV555, UNKNOWN), GST_V4L2_RAW},
-  {MAP_FMT (YUV565, UNKNOWN), GST_V4L2_RAW},
-  {MAP_FMT (YUV32, UNKNOWN),  GST_V4L2_RAW},
-  {MAP_FMT (YUV410, YUV9),    GST_V4L2_RAW},
-  {MAP_FMT (YUV420M, I420),   GST_V4L2_RAW},
-  {MAP_FMT (YUV420, I420),    GST_V4L2_RAW},
-  {MAP_FMT (HI240, UNKNOWN),  GST_V4L2_RAW},
-  {MAP_FMT (M420, UNKNOWN),   GST_V4L2_RAW},
+  {MAP_FMT (YUV410, YUV9),    MAP_DRM (YUV410, LINEAR),   GST_V4L2_RAW},
+  {MAP_FMT (YVU410, YVU9),    MAP_DRM (YVU410, LINEAR),   GST_V4L2_RAW},
+  {MAP_FMT (YUV420M, I420),   MAP_DRM (YUV420, LINEAR),   GST_V4L2_RAW},
+  {MAP_FMT (YUV420, I420),    MAP_DRM (YUV420, LINEAR),   GST_V4L2_RAW},
+  {MAP_FMT (YVU420M, YV12),   MAP_DRM (YVU420, LINEAR),   GST_V4L2_RAW},
+  {MAP_FMT (YVU420, YV12),    MAP_DRM (YVU420, LINEAR),   GST_V4L2_RAW},
+  {MAP_FMT (YUYV, YUY2),      MAP_DRM (YUYV, LINEAR),     GST_V4L2_RAW},
+  {MAP_FMT (YYUV, UNKNOWN),   MAP_DRM (YVYU, LINEAR),     GST_V4L2_RAW},
+  {MAP_FMT (YVYU, YVYU),      MAP_DRM (YVYU, LINEAR),     GST_V4L2_RAW},
+  {MAP_FMT (UYVY, UYVY),      MAP_DRM (UYVY, LINEAR),     GST_V4L2_RAW},
+  {MAP_FMT (VYUY, UNKNOWN),   MAP_DRM (VYUY, LINEAR),     GST_V4L2_RAW},
+  {MAP_FMT (YUV422M, Y42B),   MAP_DRM (YUV422, LINEAR),   GST_V4L2_RAW},
+  {MAP_FMT (YUV422P, Y42B),   MAP_DRM (YUV422, LINEAR),   GST_V4L2_RAW},
+  {MAP_FMT (YUV411P, Y41B),   MAP_DRM (YUV411, LINEAR),   GST_V4L2_RAW},
+  {MAP_FMT (Y41P, UNKNOWN),   MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
+  {MAP_FMT (YUV444, UNKNOWN), MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
+  {MAP_FMT (YUV555, UNKNOWN), MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
+  {MAP_FMT (YUV565, UNKNOWN), MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
+  {MAP_FMT (YUV32, UNKNOWN),  MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
+  {MAP_FMT (HI240, UNKNOWN),  MAP_DRM (INVALID, INVALID), GST_V4L2_RAW},
+  {MAP_FMT (M420, UNKNOWN),   MAP_DRM (INVALID, INVALID),  GST_V4L2_RAW},
 
   /* two planes -- one Y,         one Cr + Cb interleaved  */
-  {MAP_FMT (NV12M, NV12),                       GST_V4L2_RAW},
-  {MAP_FMT (NV12, NV12),                        GST_V4L2_RAW},
-  {MAP_FMT (NV12MT, NV12_64Z32),                GST_V4L2_RAW},
-  {MAP_FMT (NV12MT_16X16, UNKNOWN),             GST_V4L2_RAW},
-  {MAP_FMT (NV12_16L16, UNKNOWN),               GST_V4L2_RAW},
-  {MAP_FMT (NV12M_8L128, NV12_8L128),           GST_V4L2_RAW},
-  {MAP_FMT (NV12M_10BE_8L128, NV12_10BE_8L128), GST_V4L2_RAW},
-  {MAP_FMT (NV21M, NV21),                       GST_V4L2_RAW},
-  {MAP_FMT (NV21, NV21),                        GST_V4L2_RAW},
-  {MAP_FMT (NV16M, NV16),                       GST_V4L2_RAW},
-  {MAP_FMT (NV16, NV16),                        GST_V4L2_RAW},
-  {MAP_FMT (NV61M, NV61),                       GST_V4L2_RAW},
-  {MAP_FMT (NV61, NV61),                        GST_V4L2_RAW},
-  {MAP_FMT (NV24, NV24),                        GST_V4L2_RAW},
-  {MAP_FMT (NV42, UNKNOWN),                     GST_V4L2_RAW},
-  {MAP_FMT (MM21, NV12_16L32S),                 GST_V4L2_RAW},
+  {MAP_FMT (NV12M, NV12),                       MAP_DRM (NV12, LINEAR),             GST_V4L2_RAW},
+  {MAP_FMT (NV12, NV12),                        MAP_DRM (NV12, LINEAR),             GST_V4L2_RAW},
+  {MAP_FMT (NV12MT, NV12_64Z32),                MAP_DRM (NV12, SAMSUNG_64_32_TILE), GST_V4L2_RAW},
+  {MAP_FMT (NV12MT_16X16, UNKNOWN),             MAP_DRM (NV12, SAMSUNG_16_16_TILE), GST_V4L2_RAW},
+  {MAP_FMT (NV12_16L16, UNKNOWN),               MAP_DRM (NV12, SAMSUNG_16_16_TILE), GST_V4L2_RAW},
+  {MAP_FMT (NV12M_8L128, NV12_8L128),           MAP_DRM (INVALID, INVALID),         GST_V4L2_RAW},
+  {MAP_FMT (NV12M_10BE_8L128, NV12_10BE_8L128), MAP_DRM (INVALID, INVALID),         GST_V4L2_RAW},
+  {MAP_FMT (NV21M, NV21),                       MAP_DRM (NV21, LINEAR),             GST_V4L2_RAW},
+  {MAP_FMT (NV21, NV21),                        MAP_DRM (NV21, LINEAR),             GST_V4L2_RAW},
+  {MAP_FMT (NV16M, NV16),                       MAP_DRM (NV16, LINEAR),             GST_V4L2_RAW},
+  {MAP_FMT (NV16, NV16),                        MAP_DRM (NV16, LINEAR),             GST_V4L2_RAW},
+  {MAP_FMT (NV61M, NV61),                       MAP_DRM (NV61, LINEAR),             GST_V4L2_RAW},
+  {MAP_FMT (NV61, NV61),                        MAP_DRM (NV61, LINEAR),             GST_V4L2_RAW},
+  {MAP_FMT (NV24, NV24),                        MAP_DRM (NV24, LINEAR),             GST_V4L2_RAW},
+  {MAP_FMT (NV42, UNKNOWN),                     MAP_DRM (NV42, LINEAR),             GST_V4L2_RAW},
+  {MAP_FMT (MM21, NV12_16L32S),                 MAP_DRM (INVALID, INVALID),         GST_V4L2_RAW},
 
   /* Bayer formats - see http://www.siliconimaging.com/RGB%20Bayer.htm */
-  {MAP_FMT (SBGGR8, ENCODED),   GST_V4L2_BAYER},
-  {MAP_FMT (SGBRG8, ENCODED),   GST_V4L2_BAYER},
-  {MAP_FMT (SGRBG8, ENCODED),   GST_V4L2_BAYER},
-  {MAP_FMT (SRGGB8, ENCODED),   GST_V4L2_BAYER},
-  {MAP_FMT (SBGGR10, ENCODED),  GST_V4L2_BAYER},
-  {MAP_FMT (SGBRG10, ENCODED),  GST_V4L2_BAYER},
-  {MAP_FMT (SGRBG10, ENCODED),  GST_V4L2_BAYER},
-  {MAP_FMT (SRGGB10, ENCODED),  GST_V4L2_BAYER},
-  {MAP_FMT (SBGGR12, ENCODED),  GST_V4L2_BAYER},
-  {MAP_FMT (SGBRG12, ENCODED),  GST_V4L2_BAYER},
-  {MAP_FMT (SGRBG12, ENCODED),  GST_V4L2_BAYER},
-  {MAP_FMT (SRGGB12, ENCODED),  GST_V4L2_BAYER},
-  {MAP_FMT (SBGGR14, ENCODED),  GST_V4L2_BAYER},
-  {MAP_FMT (SGBRG14, ENCODED),  GST_V4L2_BAYER},
-  {MAP_FMT (SGRBG14, ENCODED),  GST_V4L2_BAYER},
-  {MAP_FMT (SRGGB14, ENCODED),  GST_V4L2_BAYER},
-  {MAP_FMT (SBGGR16, ENCODED),  GST_V4L2_BAYER},
-  {MAP_FMT (SGBRG16, ENCODED),  GST_V4L2_BAYER},
-  {MAP_FMT (SGRBG16, ENCODED),  GST_V4L2_BAYER},
-  {MAP_FMT (SRGGB16, ENCODED),  GST_V4L2_BAYER},
+  {MAP_ENC_FMT (SBGGR8,  ENCODED),   GST_V4L2_BAYER},
+  {MAP_ENC_FMT (SGBRG8,  ENCODED),   GST_V4L2_BAYER},
+  {MAP_ENC_FMT (SGRBG8,  ENCODED),   GST_V4L2_BAYER},
+  {MAP_ENC_FMT (SRGGB8,  ENCODED),   GST_V4L2_BAYER},
+  {MAP_ENC_FMT (SBGGR10, ENCODED),  GST_V4L2_BAYER},
+  {MAP_ENC_FMT (SGBRG10, ENCODED),  GST_V4L2_BAYER},
+  {MAP_ENC_FMT (SGRBG10, ENCODED),  GST_V4L2_BAYER},
+  {MAP_ENC_FMT (SRGGB10, ENCODED),  GST_V4L2_BAYER},
+  {MAP_ENC_FMT (SBGGR12, ENCODED),  GST_V4L2_BAYER},
+  {MAP_ENC_FMT (SGBRG12, ENCODED),  GST_V4L2_BAYER},
+  {MAP_ENC_FMT (SGRBG12, ENCODED),  GST_V4L2_BAYER},
+  {MAP_ENC_FMT (SRGGB12, ENCODED),  GST_V4L2_BAYER},
+  {MAP_ENC_FMT (SBGGR14, ENCODED),  GST_V4L2_BAYER},
+  {MAP_ENC_FMT (SGBRG14, ENCODED),  GST_V4L2_BAYER},
+  {MAP_ENC_FMT (SGRBG14, ENCODED),  GST_V4L2_BAYER},
+  {MAP_ENC_FMT (SRGGB14, ENCODED),  GST_V4L2_BAYER},
+  {MAP_ENC_FMT (SBGGR16, ENCODED),  GST_V4L2_BAYER},
+  {MAP_ENC_FMT (SGBRG16, ENCODED),  GST_V4L2_BAYER},
+  {MAP_ENC_FMT (SGRBG16, ENCODED),  GST_V4L2_BAYER},
+  {MAP_ENC_FMT (SRGGB16, ENCODED),  GST_V4L2_BAYER},
 
   /* compressed formats */
-  {MAP_FMT (MJPEG, ENCODED),        GST_V4L2_CODEC},
-  {MAP_FMT (JPEG, ENCODED),         GST_V4L2_CODEC},
-  {MAP_FMT (PJPG, ENCODED),         GST_V4L2_CODEC},
-  {MAP_FMT (DV, ENCODED),           GST_V4L2_TRANSPORT},
-  {MAP_FMT (MPEG, ENCODED),         GST_V4L2_TRANSPORT},
-  {MAP_FMT (FWHT, ENCODED),         GST_V4L2_CODEC},
-  {MAP_FMT (H264, ENCODED),         GST_V4L2_CODEC},
-  {MAP_FMT (H264_NO_SC, ENCODED),   GST_V4L2_CODEC},
-  {MAP_FMT (H264_MVC, ENCODED),     GST_V4L2_CODEC},
-  {MAP_FMT (HEVC, ENCODED),         GST_V4L2_CODEC},
-  {MAP_FMT (H263, ENCODED),         GST_V4L2_CODEC},
-  {MAP_FMT (MPEG1, ENCODED),        GST_V4L2_CODEC},
-  {MAP_FMT (MPEG2, ENCODED),        GST_V4L2_CODEC},
-  {MAP_FMT (MPEG4, ENCODED),        GST_V4L2_CODEC},
-  {MAP_FMT (XVID, ENCODED),         GST_V4L2_CODEC},
-  {MAP_FMT (VC1_ANNEX_G, ENCODED),  GST_V4L2_CODEC},
-  {MAP_FMT (VC1_ANNEX_L, ENCODED),  GST_V4L2_CODEC},
-  {MAP_FMT (VP8, ENCODED),          GST_V4L2_CODEC | GST_V4L2_NO_PARSE},
-  {MAP_FMT (VP9, ENCODED),          GST_V4L2_CODEC | GST_V4L2_NO_PARSE},
+  {MAP_ENC_FMT (MJPEG, ENCODED),        GST_V4L2_CODEC},
+  {MAP_ENC_FMT (JPEG, ENCODED),         GST_V4L2_CODEC},
+  {MAP_ENC_FMT (PJPG, ENCODED),         GST_V4L2_CODEC},
+  {MAP_ENC_FMT (DV, ENCODED),           GST_V4L2_TRANSPORT},
+  {MAP_ENC_FMT (MPEG, ENCODED),         GST_V4L2_TRANSPORT},
+  {MAP_ENC_FMT (FWHT, ENCODED),         GST_V4L2_CODEC},
+  {MAP_ENC_FMT (H264, ENCODED),         GST_V4L2_CODEC},
+  {MAP_ENC_FMT (H264_NO_SC, ENCODED),   GST_V4L2_CODEC},
+  {MAP_ENC_FMT (H264_MVC, ENCODED),     GST_V4L2_CODEC},
+  {MAP_ENC_FMT (HEVC, ENCODED),         GST_V4L2_CODEC},
+  {MAP_ENC_FMT (H263, ENCODED),         GST_V4L2_CODEC},
+  {MAP_ENC_FMT (MPEG1, ENCODED),        GST_V4L2_CODEC},
+  {MAP_ENC_FMT (MPEG2, ENCODED),        GST_V4L2_CODEC},
+  {MAP_ENC_FMT (MPEG4, ENCODED),        GST_V4L2_CODEC},
+  {MAP_ENC_FMT (XVID, ENCODED),         GST_V4L2_CODEC},
+  {MAP_ENC_FMT (VC1_ANNEX_G, ENCODED),  GST_V4L2_CODEC},
+  {MAP_ENC_FMT (VC1_ANNEX_L, ENCODED),  GST_V4L2_CODEC},
+  {MAP_ENC_FMT (VP8, ENCODED),          GST_V4L2_CODEC | GST_V4L2_NO_PARSE},
+  {MAP_ENC_FMT (VP9, ENCODED),          GST_V4L2_CODEC | GST_V4L2_NO_PARSE},
 
   /*  Vendor-specific formats   */
-  {MAP_FMT (WNVA, ENCODED),     GST_V4L2_CODEC | GST_V4L2_RESOLUTION_AND_RATE},
-  {MAP_FMT (SN9C10X, ENCODED),  GST_V4L2_CODEC | GST_V4L2_RESOLUTION_AND_RATE},
-  {MAP_FMT (PWC1, ENCODED),     GST_V4L2_CODEC | GST_V4L2_RESOLUTION_AND_RATE},
-  {MAP_FMT (PWC2, ENCODED),     GST_V4L2_CODEC | GST_V4L2_RESOLUTION_AND_RATE},
+  {MAP_ENC_FMT (WNVA, ENCODED),     GST_V4L2_CODEC | GST_V4L2_RESOLUTION_AND_RATE},
+  {MAP_ENC_FMT (SN9C10X, ENCODED),  GST_V4L2_CODEC | GST_V4L2_RESOLUTION_AND_RATE},
+  {MAP_ENC_FMT (PWC1, ENCODED),     GST_V4L2_CODEC | GST_V4L2_RESOLUTION_AND_RATE},
+  {MAP_ENC_FMT (PWC2, ENCODED),     GST_V4L2_CODEC | GST_V4L2_RESOLUTION_AND_RATE},
 };
 #undef MAP_FMT
 /* *INDENT-ON* */