This is an automated email from the ASF dual-hosted git repository.

acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit f024816239d07154bfecb2cb1cd3784e7d3a9eeb
Author: yangyalei <[email protected]>
AuthorDate: Wed Nov 19 15:05:47 2025 +0800

    nuttx/v4l2: add v4l2 standard defines for libcamera
    
    Add standard V4L2 defines needed by libcamera. V4L2_CID_AUTOGAIN and
    V4L2_CID_GAIN get their own user control IDs, USER_CID(20) and
    USER_CID(21).
    
    Signed-off-by: yangyalei <[email protected]>
---
 include/sys/video_controls.h |   2 +
 include/sys/videoio.h        | 130 ++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 131 insertions(+), 1 deletion(-)

diff --git a/include/sys/video_controls.h b/include/sys/video_controls.h
index 2ea7f272258..c05888d092e 100644
--- a/include/sys/video_controls.h
+++ b/include/sys/video_controls.h
@@ -58,6 +58,8 @@
 #define V4L2_CID_GAMMA                USER_CID(7)    /* Gamma value adjustment 
*/
 #define V4L2_CID_GAMMA_CURVE          USER_CID(8)    /* Gamma curve adjustment 
*/
 #define V4L2_CID_EXPOSURE             USER_CID(9)    /* Exposure value */
+#define V4L2_CID_AUTOGAIN             USER_CID(20)   /* Auto gain */
+#define V4L2_CID_GAIN                 USER_CID(21)   /* Gain value */
 
 /* Mirror horizontally(VIDEO) */
 
diff --git a/include/sys/videoio.h b/include/sys/videoio.h
index 13ea3c8cdd8..d2c2e125ae9 100644
--- a/include/sys/videoio.h
+++ b/include/sys/videoio.h
@@ -73,9 +73,15 @@ extern "C"
 #define V4L2_PIX_FMT_BGR32    v4l2_fourcc('B', 'G', 'R', '4')
 #define V4L2_PIX_FMT_ABGR32   v4l2_fourcc('A', 'R', '2', '4')
 #define V4L2_PIX_FMT_XBGR32   v4l2_fourcc('X', 'R', '2', '4')
+#define V4L2_PIX_FMT_BGRA32   v4l2_fourcc('R', 'A', '2', '4')
+#define V4L2_PIX_FMT_BGRX32   v4l2_fourcc('R', 'X', '2', '4')
 #define V4L2_PIX_FMT_RGB32    v4l2_fourcc('R', 'G', 'B', '4')
+#define V4L2_PIX_FMT_RGBA32   v4l2_fourcc('A', 'B', '2', '4')
+#define V4L2_PIX_FMT_RGBX32   v4l2_fourcc('X', 'B', '2', '4')
 #define V4L2_PIX_FMT_ARGB32   v4l2_fourcc('B', 'A', '2', '4')
 #define V4L2_PIX_FMT_XRGB32   v4l2_fourcc('B', 'X', '2', '4')
+#define V4L2_PIX_FMT_BGR48    v4l2_fourcc('B', 'G', 'R', '6')
+#define V4L2_PIX_FMT_RGB48    v4l2_fourcc('R', 'G', 'B', '6')
 
 /* Grey formats */
 
@@ -90,6 +96,10 @@ extern "C"
 /* Grey bit-packed formats */
 
 #define V4L2_PIX_FMT_Y10BPACK v4l2_fourcc('Y', '1', '0', 'B')
+#define V4L2_PIX_FMT_Y10P     v4l2_fourcc('Y', '1', '0', 'P')
+#define V4L2_PIX_FMT_IPU3_Y10 v4l2_fourcc('i', 'p', '3', 'y')
+#define V4L2_PIX_FMT_Y12P     v4l2_fourcc('Y', '1', '2', 'P')
+#define V4L2_PIX_FMT_Y14P     v4l2_fourcc('Y', '1', '4', 'P')
 
 /* Palette formats */
 
@@ -110,7 +120,14 @@ extern "C"
 #define V4L2_PIX_FMT_YUV444   v4l2_fourcc('Y', '4', '4', '4')
 #define V4L2_PIX_FMT_YUV555   v4l2_fourcc('Y', 'U', 'V', 'O')
 #define V4L2_PIX_FMT_YUV565   v4l2_fourcc('Y', 'U', 'V', 'P')
+#define V4L2_PIX_FMT_YUV24    v4l2_fourcc('Y', 'U', 'V', '3')
 #define V4L2_PIX_FMT_YUV32    v4l2_fourcc('Y', 'U', 'V', '4')
+#define V4L2_PIX_FMT_AYUV32   v4l2_fourcc('A', 'Y', 'U', 'V')
+#define V4L2_PIX_FMT_XYUV32   v4l2_fourcc('X', 'Y', 'U', 'V')
+#define V4L2_PIX_FMT_VUYA32   v4l2_fourcc('V', 'U', 'Y', 'A')
+#define V4L2_PIX_FMT_VUYX32   v4l2_fourcc('V', 'U', 'Y', 'X')
+#define V4L2_PIX_FMT_YUVA32   v4l2_fourcc('Y', 'U', 'V', 'A')
+#define V4L2_PIX_FMT_YUVX32   v4l2_fourcc('Y', 'U', 'V', 'X')
 #define V4L2_PIX_FMT_HI240    v4l2_fourcc('H', 'I', '2', '4')
 #define V4L2_PIX_FMT_HM12     v4l2_fourcc('H', 'M', '1', '2')
 #define V4L2_PIX_FMT_M420     v4l2_fourcc('M', '4', '2', '0')
@@ -191,11 +208,53 @@ extern "C"
 #define V4L2_PIX_FMT_SGRBG16      v4l2_fourcc('G', 'R', '1', '6')
 #define V4L2_PIX_FMT_SRGGB16      v4l2_fourcc('R', 'G', '1', '6')
 
+/* 12bit raw bayer packed, 6 bytes for every 4 pixels */
+
+#define V4L2_PIX_FMT_SBGGR12P     v4l2_fourcc('p', 'B', 'C', 'C')
+#define V4L2_PIX_FMT_SGBRG12P     v4l2_fourcc('p', 'G', 'C', 'C')
+#define V4L2_PIX_FMT_SGRBG12P     v4l2_fourcc('p', 'g', 'C', 'C')
+#define V4L2_PIX_FMT_SRGGB12P     v4l2_fourcc('p', 'R', 'C', 'C')
+#define V4L2_PIX_FMT_SBGGR14      v4l2_fourcc('B', 'G', '1', '4')
+#define V4L2_PIX_FMT_SGBRG14      v4l2_fourcc('G', 'B', '1', '4')
+#define V4L2_PIX_FMT_SGRBG14      v4l2_fourcc('G', 'R', '1', '4')
+#define V4L2_PIX_FMT_SRGGB14      v4l2_fourcc('R', 'G', '1', '4')
+
+/* 14bit raw bayer packed, 7 bytes for every 4 pixels */
+
+#define V4L2_PIX_FMT_SBGGR14P     v4l2_fourcc('p', 'B', 'E', 'E')
+#define V4L2_PIX_FMT_SGBRG14P     v4l2_fourcc('p', 'G', 'E', 'E')
+#define V4L2_PIX_FMT_SGRBG14P     v4l2_fourcc('p', 'g', 'E', 'E')
+#define V4L2_PIX_FMT_SRGGB14P     v4l2_fourcc('p', 'R', 'E', 'E')
+#define V4L2_PIX_FMT_SBGGR16      v4l2_fourcc('B', 'Y', 'R', '2')
+#define V4L2_PIX_FMT_SGBRG16      v4l2_fourcc('G', 'B', '1', '6')
+#define V4L2_PIX_FMT_SGRBG16      v4l2_fourcc('G', 'R', '1', '6')
+#define V4L2_PIX_FMT_SRGGB16      v4l2_fourcc('R', 'G', '1', '6')
+
 /* HSV formats */
 
 #define V4L2_PIX_FMT_HSV24    v4l2_fourcc('H', 'S', 'V', '3')
 #define V4L2_PIX_FMT_HSV32    v4l2_fourcc('H', 'S', 'V', '4')
 
+/* 10bit raw packed, 32 bytes for every 25 pixels, last LSB 6 bits unused */
+
+#define V4L2_PIX_FMT_IPU3_SBGGR10  v4l2_fourcc('i', 'p', '3', 'b')
+#define V4L2_PIX_FMT_IPU3_SGBRG10  v4l2_fourcc('i', 'p', '3', 'g')
+#define V4L2_PIX_FMT_IPU3_SGRBG10  v4l2_fourcc('i', 'p', '3', 'G')
+#define V4L2_PIX_FMT_IPU3_SRGGB10  v4l2_fourcc('i', 'p', '3', 'r')
+
+/* Raspberry Pi PiSP compressed formats. */
+
+#define V4L2_PIX_FMT_PISP_COMP1_RGGB  v4l2_fourcc('P', 'C', '1', 'R')
+#define V4L2_PIX_FMT_PISP_COMP1_GRBG  v4l2_fourcc('P', 'C', '1', 'G')
+#define V4L2_PIX_FMT_PISP_COMP1_GBRG  v4l2_fourcc('P', 'C', '1', 'g')
+#define V4L2_PIX_FMT_PISP_COMP1_BGGR  v4l2_fourcc('P', 'C', '1', 'B')
+#define V4L2_PIX_FMT_PISP_COMP1_MONO  v4l2_fourcc('P', 'C', '1', 'M')
+#define V4L2_PIX_FMT_PISP_COMP2_RGGB  v4l2_fourcc('P', 'C', '2', 'R')
+#define V4L2_PIX_FMT_PISP_COMP2_GRBG  v4l2_fourcc('P', 'C', '2', 'G')
+#define V4L2_PIX_FMT_PISP_COMP2_GBRG  v4l2_fourcc('P', 'C', '2', 'g')
+#define V4L2_PIX_FMT_PISP_COMP2_BGGR  v4l2_fourcc('P', 'C', '2', 'B')
+#define V4L2_PIX_FMT_PISP_COMP2_MONO  v4l2_fourcc('P', 'C', '2', 'M')
+
 /* Compressed formats */
 
 #define V4L2_PIX_FMT_MJPEG    v4l2_fourcc('M', 'J', 'P', 'G')
@@ -229,10 +288,33 @@ extern "C"
 
 #define V4L2_PIX_FMT_SUBIMG_RGB565 v4l2_fourcc('S', 'R', 'G', 'B')
 
+/* Line-based metadata formats */
+
+#define V4L2_META_FMT_GENERIC_8         v4l2_fourcc('M', 'E', 'T', '8')
+#define V4L2_META_FMT_GENERIC_CSI2_10   v4l2_fourcc('M', 'C', '1', 'A')
+#define V4L2_META_FMT_GENERIC_CSI2_12   v4l2_fourcc('M', 'C', '1', 'C')
+#define V4L2_META_FMT_GENERIC_CSI2_14   v4l2_fourcc('M', 'C', '1', 'E')
+#define V4L2_META_FMT_GENERIC_CSI2_16   v4l2_fourcc('M', 'C', '1', 'G')
+#define V4L2_META_FMT_GENERIC_CSI2_20   v4l2_fourcc('M', 'C', '1', 'K')
+#define V4L2_META_FMT_GENERIC_CSI2_24   v4l2_fourcc('M', 'C', '1', 'O')
+
+/* Flags */
+
+#define V4L2_PIX_FMT_FLAG_PREMUL_ALPHA 0x00000001
+#define V4L2_PIX_FMT_FLAG_SET_CSC      0x00000002
+
 /* MAX length of v4l2_fmtdesc description string */
 
 #define V4L2_FMT_DSC_MAX       (32)
 
+#define V4L2_CTRL_ID_MASK           (0x0fffffff)
+#define V4L2_CTRL_ID2CLASS(id)      ((id) & 0x0fff0000UL)
+#define V4L2_CTRL_ID2WHICH(id)      ((id) & 0x0fff0000UL)
+#define V4L2_CTRL_DRIVER_PRIV(id)   (((id) & 0xffff) >= 0x1000)
+#define V4L2_CTRL_WHICH_CUR_VAL     0
+#define V4L2_CTRL_WHICH_DEF_VAL     0x0f000000
+#define V4L2_CTRL_WHICH_REQUEST_VAL 0x0f010000
+
 /* MAX length of v4l2_query_ext_ctrl dims array */
 
 #define V4L2_CTRL_MAX_DIMS     (4)
@@ -418,10 +500,13 @@ enum v4l2_capabilities
   V4L2_CAP_SDR_CAPTURE            = 0x00100000,  /* Is a SDR capture device */
   V4L2_CAP_EXT_PIX_FORMAT         = 0x00200000,  /* Supports the extended 
pixel format */
   V4L2_CAP_SDR_OUTPUT             = 0x00400000,  /* Is a SDR output device */
+  V4L2_CAP_META_CAPTURE           = 0x00800000,  /* Is a metadata capture 
device */
   V4L2_CAP_READWRITE              = 0x01000000,  /* Read/write systemcalls */
   V4L2_CAP_ASYNCIO                = 0x02000000,  /* Async I/O */
   V4L2_CAP_STREAMING              = 0x04000000,  /* Streaming I/O ioctls */
+  V4L2_CAP_META_OUTPUT            = 0x08000000,  /* Is a metadata output 
device */
   V4L2_CAP_TOUCH                  = 0x10000000,  /* Is a touch device */
+  V4L2_CAP_IO_MC                  = 0x20000000,  /* Is input/output controlled 
by the media controller */
   V4L2_CAP_DEVICE_CAPS            = 0x80000000,  /* Sets device capabilities 
field */
 };
 
@@ -826,6 +911,7 @@ struct v4l2_fmtdesc
   uint32_t flags;
   char     description[V4L2_FMT_DSC_MAX];   /* Description string */
   uint32_t pixelformat;                     /* Format fourcc      */
+  uint32_t mbus_code;                       /* Media bus code    */
 };
 
 enum v4l2_fmt_flag
@@ -981,6 +1067,15 @@ struct v4l2_pix_format_mplane
   uint8_t                      reserved[7];
 };
 
+struct v4l2_meta_format
+{
+    uint32_t                   dataformat;
+    uint32_t                   buffersize;
+    uint32_t                   width;
+    uint32_t                   height;
+    uint32_t                   bytesperline;
+};
+
 struct v4l2_format
 {
   uint32_t  type;                         /* enum #v4l2_buf_type. */
@@ -988,6 +1083,7 @@ struct v4l2_format
   {
     struct v4l2_pix_format        pix;    /* Image format */
     struct v4l2_pix_format_mplane pix_mp; /* 
V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE */
+    struct v4l2_meta_format       meta;   /* V4L2_BUF_TYPE_META_CAPTURE */
   } fmt;
 };
 
@@ -1207,6 +1303,34 @@ struct v4l2_querymenu
   };
 };
 
+/* Control flags */
+
+#define V4L2_CTRL_FLAG_DISABLED         0x0001
+#define V4L2_CTRL_FLAG_GRABBED          0x0002
+#define V4L2_CTRL_FLAG_READ_ONLY        0x0004
+#define V4L2_CTRL_FLAG_UPDATE           0x0008
+#define V4L2_CTRL_FLAG_INACTIVE         0x0010
+#define V4L2_CTRL_FLAG_SLIDER           0x0020
+#define V4L2_CTRL_FLAG_WRITE_ONLY       0x0040
+#define V4L2_CTRL_FLAG_VOLATILE         0x0080
+#define V4L2_CTRL_FLAG_HAS_PAYLOAD      0x0100
+#define V4L2_CTRL_FLAG_EXECUTE_ON_WRITE 0x0200
+#define V4L2_CTRL_FLAG_MODIFY_LAYOUT    0x0400
+#define V4L2_CTRL_FLAG_DYNAMIC_ARRAY    0x0800
+
+/*  Query flags, to be ORed with the control ID */
+
+#define V4L2_CTRL_FLAG_NEXT_CTRL        0x80000000
+#define V4L2_CTRL_FLAG_NEXT_COMPOUND    0x40000000
+
+/*  User-class control IDs defined by V4L2 */
+
+#define V4L2_CID_MAX_CTRLS              1024
+
+/*  IDs reserved for driver specific controls */
+
+#define V4L2_CID_PRIVATE_BASE           0x08000000
+
 struct v4l2_input
 {
   uint32_t      index;       /*  Which input */
@@ -1597,10 +1721,14 @@ struct v4l2_decoder_cmd
 
 #define VIDIOC_DQEVENT                _VIDIOC(0x0059)
 
-/* Subscribe or unsubscribe event */
+/* Subscribe event */
 
 #define VIDIOC_SUBSCRIBE_EVENT        _VIDIOC(0x005a)
 
+/* Unsubscribe event */
+
+#define VIDIOC_UNSUBSCRIBE_EVENT      _VIDIOC(0x005b)
+
 /* Get clip
  * Address pointing to struct v4l2_selection
  */

Reply via email to