From nobody Wed Aug 12 17:01:15 2026 X-Original-To: dev-commits-src-all@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 4hKvs84Gkfz6nd57 for ; Wed, 12 Aug 2026 17:01:16 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hKvs76QzSz3bWp for ; Wed, 12 Aug 2026 17:01:15 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1786554075; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=p/Hj5o9wiInA31u3utOzdSnLkqRb4LsNU2SvPLUhIkw=; b=v4x3t4FFoGHjhmKZv8s25RhHncl3TykYOTWj4fp3GPLaD2g39gFHCBrPfVUv4bT78rJpIo gzNYCYu9fb6uDTRlIMyYCOhE5Ati0XOUU6BIYJEwZnqeoavS2cfMg6rTFdJhxi5RPK0fwq ASDBuqaQmj0JZnLu6UUTF4AlBxybN1pb3jxt075VFjOS15Ma2sg/oYPqf7weNUJQy0sPJ6 JwT9K8YnOdky2wymB5Hhl7UHNj0qIxuS9wuU3vGMosYN4U953N+f8eftrQ7f3DRnHcGDA7 MrjpsCkToU5MopZM9zo32XIHziS9cL0lOsw3YWPO/EJT/QcUZunQPof879GkhQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1786554075; a=rsa-sha256; cv=none; b=tw8Y2Am47CTM/HqiTfLium67ZO4ABq6EKFAkQrQMRf2hRj1IkgfMS8/YdisFinYzC7XJiL 6M7izoJoRK6gbPBUki90+gRb5JEkSnsQ/4JijooJeFEZ6RuSKoA3xB2ogEmMTTJeHNsmUo COJFnmIwkv4agtZyDcVSUSxpYNbsGGYeB0On08DeTekYAY1HuzJQM+KfC73x5usxq4rR7O bA1Z6wdRgPZTx2Uu4WEk/6hYonBaAfWY83D10q9G4cFLd3IOza1XMEIwoTorqfM/h+dGIO 1F9S+ap3lG0dg3xtInjOYinY451SgylIvyoZ0Vk0gLua1bkKXfiRq3lbftq+jg== 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=1786554075; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=p/Hj5o9wiInA31u3utOzdSnLkqRb4LsNU2SvPLUhIkw=; b=CJx54anj6Gwz14Unq6sni0HwRVFqBEqF/xhWnSfRZYQ0gRlQvjvBnqqVFL3K8Nd4J3GrW1 uv761lT+jKQcgZLlcior+I+bhhgvtu2W75t2Mivhngck/4uGEADqAefKO62cW4NVw6Gzm1 5lsEtr/xAw3nOy3J3HjFe1pnat1BTHml3OS7wFFAGZQt8X8xEEqpbOLiATyBjLNpdupV55 DRN9KpVwsQfoGYaG+a65Nuhp4A1ZwuzGW8kK4fyRyPv4svrv0noeNqqrfvJqfIdKdzAYcS e2h/V+azbbFZewGfXQnBr/Hzf4R3RhXVImJDSk3CiAwIq1WxQ+yAcsIxtNJcCg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hKvs751dmzbB2 for ; Wed, 12 Aug 2026 17:01:15 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 47e23 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 12 Aug 2026 17:01:15 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Abdelkader Boudih From: Adrian Chadd Subject: git: a8c126b6903e - main - video: add V4L2 compat symbols for ffmpeg/opencv List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@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: adrian X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: a8c126b6903e83a10a726019d3d347b20bfc86e3 Auto-Submitted: auto-generated Date: Wed, 12 Aug 2026 17:01:15 +0000 Message-Id: <6a7ca6db.47e23.20efd083@gitrepo.freebsd.org> The branch main has been updated by adrian: URL: https://cgit.FreeBSD.org/src/commit/?id=a8c126b6903e83a10a726019d3d347b20bfc86e3 commit a8c126b6903e83a10a726019d3d347b20bfc86e3 Author: Abdelkader Boudih AuthorDate: 2026-08-12 16:52:04 +0000 Commit: Adrian Chadd CommitDate: 2026-08-12 16:52:12 +0000 video: add V4L2 compat symbols for ffmpeg/opencv Adds v4l2_std_id, struct v4l2_standard/v4l2_plane, VIDIOC_G_STD/S_STD/ ENUMSTD, V4L2_STD_NTSC*, the MPLANE capability flag, multiplanar types (VIDEO_MAX_PLANES, v4l2_plane_pix_format, v4l2_pix_format_mplane, V4L2_TYPE_IS_MULTIPLANAR), V4L2_PIX_FMT_JPEG/YUV411P/SN9C10X, and the MPEG control class (V4L2_CID_MPEG_BASE, V4L2_CID_MPEG_VIDEO_B_FRAMES). video(4) capture devices are digital-only and never expose these, but ffmpeg's libavdevice/v4l2.c and opencv's cap_v4l.cpp both reference them unconditionally. Fixes their build against sys/videoio.h. PR: 297454 Reviewed by: manu, adrian Differential Revision: https://reviews.freebsd.org/D58793 --- sys/sys/videoio.h | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 101 insertions(+), 3 deletions(-) diff --git a/sys/sys/videoio.h b/sys/sys/videoio.h index bcf7ccaf8cb2..775ff68d699a 100644 --- a/sys/sys/videoio.h +++ b/sys/sys/videoio.h @@ -43,6 +43,8 @@ #include #include +typedef u_int64_t v4l2_std_id; + /* * Four-character-code (FOURCC) */ @@ -193,12 +195,46 @@ struct v4l2_pix_format { u_int32_t xfer_func; /* enum v4l2_xfer_func */ }; +/* + * Multi-planar capture (VIDIOC_*_MPLANE) + */ +#define VIDEO_MAX_PLANES 8 + +struct v4l2_plane_pix_format { + u_int32_t sizeimage; + u_int32_t bytesperline; + u_int16_t reserved[6]; +} __packed; + +struct v4l2_pix_format_mplane { + u_int32_t width; + u_int32_t height; + u_int32_t pixelformat; + u_int32_t field; + u_int32_t colorspace; + struct v4l2_plane_pix_format plane_fmt[VIDEO_MAX_PLANES]; + u_int8_t num_planes; + u_int8_t flags; + union { + u_int8_t ycbcr_enc; + u_int8_t hsv_enc; + }; + u_int8_t quantization; + u_int8_t xfer_func; + u_int8_t reserved[7]; +} __packed; + +#define V4L2_TYPE_IS_MULTIPLANAR(type) \ + ((type) == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE || \ + (type) == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE) + struct v4l2_format { u_int32_t type; union { - struct v4l2_pix_format pix; - void *_align; - u_int8_t raw_data[200]; + struct v4l2_pix_format pix; + struct v4l2_pix_format_mplane pix_mp; + void *_align; + u_int8_t raw_data[200]; } fmt; }; @@ -237,6 +273,7 @@ struct v4l2_buffer { union { u_int32_t offset; unsigned long userptr; + struct v4l2_plane *planes; int32_t fd; } m; u_int32_t length; @@ -286,6 +323,27 @@ struct v4l2_input { u_int32_t reserved[3]; }; +struct v4l2_standard { + u_int32_t index; + v4l2_std_id id; + u_int8_t name[24]; + struct v4l2_fract frameperiod; + u_int32_t framelines; + u_int32_t reserved[4]; +}; + +struct v4l2_plane { + u_int32_t bytesused; + u_int32_t length; + union { + u_int32_t mem_offset; + unsigned long userptr; + int32_t fd; + } m; + u_int32_t data_offset; + u_int32_t reserved[11]; +}; + struct v4l2_control { u_int32_t id; int32_t value; @@ -365,11 +423,21 @@ struct v4l2_frmivalenum { #define V4L2_PIX_FMT_M420 v4l2_fourcc('M', '4', '2', '0') #define V4L2_PIX_FMT_YVU420 v4l2_fourcc('Y', 'V', '1', '2') #define V4L2_PIX_FMT_YUV420 v4l2_fourcc('Y', 'U', '1', '2') +#define V4L2_PIX_FMT_YUV410 v4l2_fourcc('Y', 'U', 'V', '9') +#define V4L2_PIX_FMT_YVU410 v4l2_fourcc('Y', 'V', 'U', '9') +#define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P') /* Compressed formats */ #define V4L2_PIX_FMT_MJPEG v4l2_fourcc('M', 'J', 'P', 'G') +#define V4L2_PIX_FMT_JPEG v4l2_fourcc('J', 'P', 'E', 'G') #define V4L2_PIX_FMT_H264 v4l2_fourcc('H', '2', '6', '4') #define V4L2_PIX_FMT_HEVC v4l2_fourcc('H', 'E', 'V', 'C') +#define V4L2_PIX_FMT_MPEG4 v4l2_fourcc('M', 'P', 'G', '4') +#define V4L2_PIX_FMT_CPIA1 v4l2_fourcc('C', 'P', 'I', 'A') + +/* YUV411 planar and vendor webcam formats */ +#define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4', '1', '1', 'P') +#define V4L2_PIX_FMT_SN9C10X v4l2_fourcc('S', '9', '1', '0') /* Grey formats */ #define V4L2_PIX_FMT_GREY v4l2_fourcc('G', 'R', 'E', 'Y') @@ -379,9 +447,17 @@ struct v4l2_frmivalenum { /* RGB formats */ #define V4L2_PIX_FMT_RGB24 v4l2_fourcc('R', 'G', 'B', '3') +#define V4L2_PIX_FMT_RGB555 v4l2_fourcc('R', 'G', 'B', 'O') +#define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R', 'G', 'B', 'Q') #define V4L2_PIX_FMT_RGB565 v4l2_fourcc('R', 'G', 'B', 'P') +#define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R', 'G', 'B', 'R') #define V4L2_PIX_FMT_BGR24 v4l2_fourcc('B', 'G', 'R', '3') +#define V4L2_PIX_FMT_BGR32 v4l2_fourcc('B', 'G', 'R', '4') +#define V4L2_PIX_FMT_RGB32 v4l2_fourcc('R', 'G', 'B', '4') #define V4L2_PIX_FMT_XBGR32 v4l2_fourcc('X', 'R', '2', '4') +#define V4L2_PIX_FMT_ABGR32 v4l2_fourcc('A', 'R', '2', '4') +#define V4L2_PIX_FMT_ARGB32 v4l2_fourcc('B', 'A', '2', '4') +#define V4L2_PIX_FMT_XRGB32 v4l2_fourcc('B', 'X', '2', '4') /* Bayer formats */ #define V4L2_PIX_FMT_SBGGR8 v4l2_fourcc('B', 'A', '8', '1') @@ -401,6 +477,7 @@ struct v4l2_frmivalenum { * Capability flags */ #define V4L2_CAP_VIDEO_CAPTURE 0x00000001 +#define V4L2_CAP_VIDEO_CAPTURE_MPLANE 0x00001000 #define V4L2_CAP_STREAMING 0x04000000 #define V4L2_CAP_EXT_PIX_FORMAT 0x00200000 #define V4L2_CAP_READWRITE 0x01000000 @@ -424,6 +501,7 @@ struct v4l2_frmivalenum { * Format flags */ #define V4L2_FMT_FLAG_COMPRESSED 0x0001 +#define V4L2_FMT_FLAG_EMULATED 0x0002 /* * Buffer capabilities @@ -435,11 +513,28 @@ struct v4l2_frmivalenum { */ #define V4L2_INPUT_TYPE_CAMERA 2 +/* + * Analog TV standards + */ +#define V4L2_STD_NTSC_M ((v4l2_std_id)0x00001000) +#define V4L2_STD_NTSC_M_JP ((v4l2_std_id)0x00002000) +#define V4L2_STD_NTSC_443 ((v4l2_std_id)0x00004000) +#define V4L2_STD_NTSC_M_KR ((v4l2_std_id)0x00008000) +#define V4L2_STD_NTSC (V4L2_STD_NTSC_M | V4L2_STD_NTSC_M_JP | \ + V4L2_STD_NTSC_443 | V4L2_STD_NTSC_M_KR) + /* * Control IDs */ #define V4L2_CTRL_CLASS_USER 0x00980000 +#define V4L2_CTRL_CLASS_MPEG 0x00990000 #define V4L2_CID_BASE (V4L2_CTRL_CLASS_USER | 0x900) + +/* + * MPEG/codec control class + */ +#define V4L2_CID_MPEG_BASE (V4L2_CTRL_CLASS_MPEG | 0x900) +#define V4L2_CID_MPEG_VIDEO_B_FRAMES (V4L2_CID_MPEG_BASE+14) #define V4L2_CID_BRIGHTNESS (V4L2_CID_BASE + 0) #define V4L2_CID_CONTRAST (V4L2_CID_BASE + 1) #define V4L2_CID_SATURATION (V4L2_CID_BASE + 2) @@ -483,6 +578,9 @@ struct v4l2_frmivalenum { #define VIDIOC_STREAMOFF _IOW('V', 19, int) #define VIDIOC_G_PARM _IOWR('V', 21, struct v4l2_streamparm) #define VIDIOC_S_PARM _IOWR('V', 22, struct v4l2_streamparm) +#define VIDIOC_G_STD _IOR('V', 23, v4l2_std_id) +#define VIDIOC_S_STD _IOW('V', 24, v4l2_std_id) +#define VIDIOC_ENUMSTD _IOWR('V', 25, struct v4l2_standard) #define VIDIOC_ENUMINPUT _IOWR('V', 26, struct v4l2_input) #define VIDIOC_G_CTRL _IOWR('V', 27, struct v4l2_control) #define VIDIOC_S_CTRL _IOWR('V', 28, struct v4l2_control)