From nobody Thu Aug 27 19:05:06 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4hW9v65KZmz6qScL for ; Thu, 27 Aug 2026 19:05:06 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hW9v64WsWz3Vy7 for ; Thu, 27 Aug 2026 19:05:06 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1787857506; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=L7WuRSdvhHuPvAGwjSyd4PWwbbe78BCWTlsHq43Iuhg=; b=AknAj3qCsPQOsThy5lCz8t6C8KLlZSEuqGLX32SG6O5ujWTqZ/Mp0KGdotAeadT37QR7Z9 bjuJe3eIDMr9+ErDkBspx739ggQVUOQOxd5gXQqEzz/7qYsnMfhyOCYWjNDnztsEe9gJi/ e1RBzYBTgsGKOSFV2BPv9U7gjegVRHNwC73p86cfQVsJ2Ujj8zi5nfJDUuVOEeo/Un4vbD Dun00XddHVclSBIOZTYS/HFpX3xm0C9AfaElhvr80WcDdRa1JYysKZByhwT8mw8mIFWkb2 s2Uw1gHH/19fUSqI6DP9Jtb7e/Nr9Yw/PfDBdClZ5KEu6R0xtyJkw9w1V/u3rA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1787857506; a=rsa-sha256; cv=none; b=ATwTkLwrPjm20oJIGVzqRmwUI9aGssLhQinrgN7AcWzwEhIhRY1uW0GLvDz31oQFG7Yrbu hPxP7X0M+SFbCETA5tt7zsuW5Pxc7f5cGhhKRxL279om0irmB8+HKtoeS7a6YBscaZZ5lB F/m7dCurM7YnHn9LFlXY6HIwou9Xx5xEy9i4gCpcV43gAVc0b3RLh0nav2ydU76MysRcFS 3oakqfYS5fg/FlqnODLD6TzL0ZfWMpo3Fl7QPql72nK5Gv190NJhz7PHBE3SAJqnT7fgl2 4lF1UUnYW0VXaJJSF6yJ3DC04YiP5L6Kbo4mKAAEsHeLgp47qOR/wEaLRYJd+w== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1787857506; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=L7WuRSdvhHuPvAGwjSyd4PWwbbe78BCWTlsHq43Iuhg=; b=xqaHtR8stqFBXLd8DpjSzUtNnbK0mzbuMUCk4VePp2xeGGgofDJb8KdiSu4Dv9ZUXwKEmP fgncTKFu94TgJR4/OSY3dm1/iepEA7kuKDw5H1l68qhX67zgmm9QAhkVQro0A6KcQtOquP lIAunGZqVrzx9ySw9Cg29dsP+CYdkQqpbTJxtIrSDvtQgLVimhKoJb9H1cAX0ZQbG22ULD XBZJUkTuINuLJ7AkGxorulAA57ZDMaelc2XRurAtzIqRnisi69DS1LQuah875ksghtr8gJ nAJBCCsevXPJgkkCeFd61E6VhQLMmy5WdZK/Xu3iXN+SISWCe9JW9xJj5zatvQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hW9v63THyzd1s for ; Thu, 27 Aug 2026 19:05:06 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 26dfa by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 27 Aug 2026 19:05:06 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Abdelkader Boudih Subject: git: d5016a820414 - main - video: add V4L2 cropping, control menu and overlay symbols List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: seuros X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: d5016a82041402844ce3701f6255958fa21d4f21 Auto-Submitted: auto-generated Date: Thu, 27 Aug 2026 19:05:06 +0000 Message-Id: <6a908a62.26dfa.3a3d63e1@gitrepo.freebsd.org> The branch main has been updated by seuros: URL: https://cgit.FreeBSD.org/src/commit/?id=d5016a82041402844ce3701f6255958fa21d4f21 commit d5016a82041402844ce3701f6255958fa21d4f21 Author: Abdelkader Boudih AuthorDate: 2026-08-27 17:31:29 +0000 Commit: Abdelkader Boudih 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");