The branch main has been updated by seuros:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=d5016a82041402844ce3701f6255958fa21d4f21

commit d5016a82041402844ce3701f6255958fa21d4f21
Author:     Abdelkader Boudih <[email protected]>
AuthorDate: 2026-08-27 17:31:29 +0000
Commit:     Abdelkader Boudih <[email protected]>
CommitDate: 2026-08-27 19:04:47 +0000

    video: add V4L2 cropping, control menu and overlay symbols
    
    Adds missing structs symbols for V4L2.
    
    video(4) capture devices do not crop, expose menu controls or support
    overlay, and return ENOTTY for the new ioctls.
    Applications enumerate these unconditionally and degrade gracefully
    at run time, but fail to build when the declarations are missing.
    
    Reviewed by:    adrian
    Differential Revision:  https://reviews.freebsd.org/D59203
---
 sys/sys/videoio.h | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 73 insertions(+)

diff --git a/sys/sys/videoio.h b/sys/sys/videoio.h
index 775ff68d699a..714a95fa5810 100644
--- a/sys/sys/videoio.h
+++ b/sys/sys/videoio.h
@@ -165,6 +165,13 @@ struct v4l2_fract {
        u_int32_t   denominator;
 };
 
+struct v4l2_rect {
+       int32_t         left;
+       int32_t         top;
+       u_int32_t       width;
+       u_int32_t       height;
+};
+
 struct v4l2_capability {
        u_int8_t        driver[16];
        u_int8_t        card[32];
@@ -228,11 +235,27 @@ struct v4l2_pix_format_mplane {
        ((type) == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE ||        \
         (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)
 
+struct v4l2_clip {
+       struct v4l2_rect        c;
+       struct v4l2_clip        *next;
+};
+
+struct v4l2_window {
+       struct v4l2_rect        w;
+       u_int32_t               field;
+       u_int32_t               chromakey;
+       struct v4l2_clip        *clips;
+       u_int32_t               clipcount;
+       void                    *bitmap;
+       u_int8_t                global_alpha;
+};
+
 struct v4l2_format {
        u_int32_t       type;
        union {
                struct v4l2_pix_format          pix;
                struct v4l2_pix_format_mplane   pix_mp;
+               struct v4l2_window              win;
                void                            *_align;
                u_int8_t                        raw_data[200];
        } fmt;
@@ -361,6 +384,28 @@ struct v4l2_queryctrl {
        u_int32_t       reserved[2];
 };
 
+struct v4l2_querymenu {
+       u_int32_t       id;
+       u_int32_t       index;
+       union {
+               u_int8_t        name[32];
+               int64_t         value;
+       };
+       u_int32_t       reserved;
+} __packed;
+
+struct v4l2_cropcap {
+       u_int32_t               type;
+       struct v4l2_rect        bounds;
+       struct v4l2_rect        defrect;
+       struct v4l2_fract       pixelaspect;
+};
+
+struct v4l2_crop {
+       u_int32_t               type;
+       struct v4l2_rect        c;
+};
+
 struct v4l2_frmsize_discrete {
        u_int32_t       width;          /* Frame width [pixel] */
        u_int32_t       height;         /* Frame height [pixel] */
@@ -511,6 +556,7 @@ struct v4l2_frmivalenum {
 /*
  *  Input types
  */
+#define V4L2_INPUT_TYPE_TUNER          1
 #define V4L2_INPUT_TYPE_CAMERA         2
 
 /*
@@ -544,11 +590,14 @@ struct v4l2_frmivalenum {
 #define V4L2_CID_BLUE_BALANCE          (V4L2_CID_BASE + 15)
 #define V4L2_CID_GAMMA                 (V4L2_CID_BASE + 16)
 #define V4L2_CID_GAIN                  (V4L2_CID_BASE + 19)
+#define V4L2_CID_HFLIP                 (V4L2_CID_BASE + 20)
+#define V4L2_CID_VFLIP                 (V4L2_CID_BASE + 21)
 #define V4L2_CID_POWER_LINE_FREQUENCY  (V4L2_CID_BASE + 24)
 #define V4L2_CID_HUE_AUTO              (V4L2_CID_BASE + 25)
 #define V4L2_CID_WHITE_BALANCE_TEMPERATURE (V4L2_CID_BASE + 26)
 #define V4L2_CID_SHARPNESS             (V4L2_CID_BASE + 27)
 #define V4L2_CID_BACKLIGHT_COMPENSATION        (V4L2_CID_BASE + 28)
+#define V4L2_CID_LASTP1                        (V4L2_CID_BASE + 44)
 
 #define V4L2_CID_CAMERA_CLASS_BASE     0x009a0000
 #define V4L2_CID_EXPOSURE_AUTO         (V4L2_CID_CAMERA_CLASS_BASE + 1)
@@ -563,6 +612,23 @@ struct v4l2_frmivalenum {
 #define V4L2_CID_ZOOM_CONTINUOUS       (V4L2_CID_CAMERA_CLASS_BASE + 15)
 #define V4L2_CID_PRIVACY               (V4L2_CID_CAMERA_CLASS_BASE + 16)
 
+/*
+ *  IDs reserved for driver specific controls
+ */
+#define V4L2_CID_PRIVATE_BASE          0x08000000
+
+/*
+ *  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
+
 /*
  *  V4L2 ioctl definitions
  */
@@ -585,8 +651,12 @@ struct v4l2_frmivalenum {
 #define VIDIOC_G_CTRL          _IOWR('V', 27, struct v4l2_control)
 #define VIDIOC_S_CTRL          _IOWR('V', 28, struct v4l2_control)
 #define VIDIOC_QUERYCTRL       _IOWR('V', 36, struct v4l2_queryctrl)
+#define VIDIOC_QUERYMENU       _IOWR('V', 37, struct v4l2_querymenu)
 #define VIDIOC_G_INPUT         _IOR('V', 38, int)
 #define VIDIOC_S_INPUT         _IOWR('V', 39, int)
+#define VIDIOC_CROPCAP         _IOWR('V', 58, struct v4l2_cropcap)
+#define VIDIOC_G_CROP          _IOWR('V', 59, struct v4l2_crop)
+#define VIDIOC_S_CROP          _IOW('V', 60, struct v4l2_crop)
 #define VIDIOC_G_PRIORITY      _IOR('V', 67, u_int32_t)
 #define VIDIOC_S_PRIORITY      _IOW('V', 68, u_int32_t)
 #define VIDIOC_TRY_FMT         _IOWR('V', 64, struct v4l2_format)
@@ -597,6 +667,9 @@ _Static_assert(sizeof(struct v4l2_pix_format) == 48, 
"v4l2_pix_format layout");
 _Static_assert(sizeof(struct v4l2_capability) == 104, "v4l2_capability 
layout");
 _Static_assert(sizeof(struct v4l2_requestbuffers) == 20,
     "v4l2_requestbuffers layout");
+_Static_assert(sizeof(struct v4l2_querymenu) == 44, "v4l2_querymenu layout");
+_Static_assert(sizeof(struct v4l2_cropcap) == 44, "v4l2_cropcap layout");
+_Static_assert(sizeof(struct v4l2_crop) == 20, "v4l2_crop layout");
 #ifdef __LP64__
 _Static_assert(__offsetof(struct v4l2_format, fmt) == 8, "v4l2_format layout");
 _Static_assert(sizeof(struct v4l2_format) == 208, "v4l2_format layout");

Reply via email to