media: v4l: Set line based metadata flag in V4L2 core
authorSakari Ailus <sakari.ailus@linux.intel.com>
Tue, 23 Apr 2024 07:39:47 +0000 (10:39 +0300)
committerHans Verkuil <hverkuil-cisco@xs4all.nl>
Mon, 29 Apr 2024 12:56:36 +0000 (14:56 +0200)
Set (and unset) the V4L2_FMT_FLAG_META_LINE_BASED flag in struct
v4l2_fmtdesc based on the format after returning the driver callback for
enumerating formats. This way the drivers don't need to care about the
flag.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
drivers/media/v4l2-core/v4l2-ioctl.c
include/uapi/linux/videodev2.h

index 2cfc9106857aec82cd5b40f727530bedae2ef83f..5e928e2a2beb1d60457a4ad7c6d43293297a788f 100644 (file)
@@ -1538,6 +1538,22 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
                }
        }
 
+       if (fmt->type == V4L2_BUF_TYPE_META_CAPTURE) {
+               switch (fmt->pixelformat) {
+               case V4L2_META_FMT_GENERIC_8:
+               case V4L2_META_FMT_GENERIC_CSI2_10:
+               case V4L2_META_FMT_GENERIC_CSI2_12:
+               case V4L2_META_FMT_GENERIC_CSI2_14:
+               case V4L2_META_FMT_GENERIC_CSI2_16:
+               case V4L2_META_FMT_GENERIC_CSI2_20:
+               case V4L2_META_FMT_GENERIC_CSI2_24:
+                       fmt->flags |= V4L2_FMT_FLAG_META_LINE_BASED;
+                       break;
+               default:
+                       fmt->flags &= ~V4L2_FMT_FLAG_META_LINE_BASED;
+               }
+       }
+
        if (descr)
                WARN_ON(strscpy(fmt->description, descr, sz) < 0);
        fmt->flags |= flags;
index 647ce3419bd88460bd7d34df478cf105dffffa58..d944db7ae1ede89433fbef403a5e9a86427d4ecc 100644 (file)
@@ -839,6 +839,10 @@ struct v4l2_pix_format {
 #define V4L2_META_FMT_RK_ISP1_PARAMS   v4l2_fourcc('R', 'K', '1', 'P') /* Rockchip ISP1 3A Parameters */
 #define V4L2_META_FMT_RK_ISP1_STAT_3A  v4l2_fourcc('R', 'K', '1', 'S') /* Rockchip ISP1 3A Statistics */
 
+/*
+ * Line-based metadata formats. Remember to update v4l_fill_fmtdesc() when
+ * adding new ones!
+ */
 #define V4L2_META_FMT_GENERIC_8                v4l2_fourcc('M', 'E', 'T', '8') /* Generic 8-bit metadata */
 #define V4L2_META_FMT_GENERIC_CSI2_10  v4l2_fourcc('M', 'C', '1', 'A') /* 10-bit CSI-2 packed 8-bit metadata */
 #define V4L2_META_FMT_GENERIC_CSI2_12  v4l2_fourcc('M', 'C', '1', 'C') /* 12-bit CSI-2 packed 8-bit metadata */