The branch main has been updated by bapt: URL: https://cgit.FreeBSD.org/src/commit/?id=8bc06ffbbd80533eda0784d2a6f5a1476f9d550c
commit 8bc06ffbbd80533eda0784d2a6f5a1476f9d550c Author: Baptiste Daroussin <[email protected]> AuthorDate: 2026-05-18 20:17:34 +0000 Commit: Baptiste Daroussin <[email protected]> CommitDate: 2026-06-16 11:21:03 +0000 uvideo: add missing formats to be in par with webcamd's uvcvideo --- sys/dev/usb/video/uvideo.c | 19 +++++++++++++++++++ sys/dev/usb/video/uvideo.h | 24 ++++++++++++++++++++++++ sys/dev/usb/video/uvideo_v4l2.h | 6 ++++++ 3 files changed, 49 insertions(+) diff --git a/sys/dev/usb/video/uvideo.c b/sys/dev/usb/video/uvideo.c index 52998fbc9b40..b35561ff6a24 100644 --- a/sys/dev/usb/video/uvideo.c +++ b/sys/dev/usb/video/uvideo.c @@ -493,12 +493,18 @@ static const struct { uint32_t pixelformat; } uvideo_map_fmts[] = { { UVIDEO_FORMAT_GUID_YUY2, V4L2_PIX_FMT_YUYV }, + { UVIDEO_FORMAT_GUID_NV12, V4L2_PIX_FMT_NV12 }, + { UVIDEO_FORMAT_GUID_NV21, V4L2_PIX_FMT_NV21 }, { UVIDEO_FORMAT_GUID_YV12, V4L2_PIX_FMT_YVU420 }, { UVIDEO_FORMAT_GUID_I420, V4L2_PIX_FMT_YUV420 }, + { UVIDEO_FORMAT_GUID_M420, V4L2_PIX_FMT_M420 }, + { UVIDEO_FORMAT_GUID_UYVY, V4L2_PIX_FMT_UYVY }, { UVIDEO_FORMAT_GUID_Y800, V4L2_PIX_FMT_GREY }, { UVIDEO_FORMAT_GUID_Y8, V4L2_PIX_FMT_GREY }, { UVIDEO_FORMAT_GUID_D3DFMT_L8, V4L2_PIX_FMT_GREY }, { UVIDEO_FORMAT_GUID_KSMEDIA_L8_IR, V4L2_PIX_FMT_GREY }, + { UVIDEO_FORMAT_GUID_Y12, V4L2_PIX_FMT_Y12 }, + { UVIDEO_FORMAT_GUID_Y16, V4L2_PIX_FMT_Y16 }, { UVIDEO_FORMAT_GUID_BY8, V4L2_PIX_FMT_SBGGR8 }, { UVIDEO_FORMAT_GUID_BA81, V4L2_PIX_FMT_SBGGR8 }, { UVIDEO_FORMAT_GUID_GBRG, V4L2_PIX_FMT_SGBRG8 }, @@ -2939,9 +2945,16 @@ static const struct { } uvideo_fmt_names[] = { { V4L2_PIX_FMT_MJPEG, "Motion-JPEG", V4L2_FMT_FLAG_COMPRESSED }, { V4L2_PIX_FMT_YUYV, "YUYV 4:2:2", 0 }, + { V4L2_PIX_FMT_UYVY, "UYVY 4:2:2", 0 }, + { V4L2_PIX_FMT_NV12, "Y/UV 4:2:0", 0 }, + { V4L2_PIX_FMT_NV21, "Y/VU 4:2:0", 0 }, { V4L2_PIX_FMT_YVU420, "Planar YVU 4:2:0", 0 }, { V4L2_PIX_FMT_YUV420, "Planar YUV 4:2:0", 0 }, + { V4L2_PIX_FMT_M420, "M420 YUV 4:2:0", 0 }, { V4L2_PIX_FMT_GREY, "8-bit Greyscale", 0 }, + { V4L2_PIX_FMT_Y10, "10-bit Greyscale", 0 }, + { V4L2_PIX_FMT_Y12, "12-bit Greyscale", 0 }, + { V4L2_PIX_FMT_Y16, "16-bit Greyscale", 0 }, { V4L2_PIX_FMT_RGB565, "16-bit RGB 5-6-5", 0 }, { V4L2_PIX_FMT_BGR24, "24-bit BGR 8-8-8", 0 }, { V4L2_PIX_FMT_XBGR32, "32-bit BGRX 8-8-8-8", 0 }, @@ -2951,6 +2964,12 @@ static const struct { { V4L2_PIX_FMT_SGBRG8, "8-bit Bayer GBGB/RGRG", 0 }, { V4L2_PIX_FMT_SGRBG8, "8-bit Bayer GRGR/BGBG", 0 }, { V4L2_PIX_FMT_SRGGB8, "8-bit Bayer RGRG/GBGB", 0 }, + { V4L2_PIX_FMT_SBGGR16, "16-bit Bayer BGBG/GRGR", 0 }, + { V4L2_PIX_FMT_SGBRG16, "16-bit Bayer GBGB/RGRG", 0 }, + { V4L2_PIX_FMT_SGRBG16, "16-bit Bayer GRGR/BGBG", 0 }, + { V4L2_PIX_FMT_SRGGB16, "16-bit Bayer RGRG/GBGB", 0 }, + { V4L2_PIX_FMT_SRGGB10P, "10-bit Bayer RGRG/GBGB Packed", 0 }, + { V4L2_PIX_FMT_Z16, "16-bit Depth", 0 }, { 0, NULL, 0 } }; diff --git a/sys/dev/usb/video/uvideo.h b/sys/dev/usb/video/uvideo.h index 00e5118a65ae..fc811c5d65fa 100644 --- a/sys/dev/usb/video/uvideo.h +++ b/sys/dev/usb/video/uvideo.h @@ -312,6 +312,14 @@ struct usb_video_probe_commit { 'Y', 'U', 'Y', '2', 0x00, 0x00, 0x10, 0x00, \ 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } +#define UVIDEO_FORMAT_GUID_NV12 { \ + 'N', 'V', '1', '2', 0x00, 0x00, 0x10, 0x00, \ + 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } + +#define UVIDEO_FORMAT_GUID_NV21 { \ + 'N', 'V', '2', '1', 0x00, 0x00, 0x10, 0x00, \ + 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } + #define UVIDEO_FORMAT_GUID_YV12 { \ 'Y', 'V', '1', '2', 0x00, 0x00, 0x10, 0x00, \ 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } @@ -320,6 +328,14 @@ struct usb_video_probe_commit { 'I', '4', '2', '0', 0x00, 0x00, 0x10, 0x00, \ 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } +#define UVIDEO_FORMAT_GUID_M420 { \ + 'M', '4', '2', '0', 0x00, 0x00, 0x10, 0x00, \ + 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } + +#define UVIDEO_FORMAT_GUID_UYVY { \ + 'U', 'Y', 'V', 'Y', 0x00, 0x00, 0x10, 0x00, \ + 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } + #define UVIDEO_FORMAT_GUID_Y800 { \ 'Y', '8', '0', '0', 0x00, 0x00, 0x10, 0x00, \ 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } @@ -336,6 +352,14 @@ struct usb_video_probe_commit { 0x32, 0x00, 0x00, 0x00, 0x02, 0x00, 0x10, 0x00, \ 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } +#define UVIDEO_FORMAT_GUID_Y12 { \ + 'Y', '1', '2', ' ', 0x00, 0x00, 0x10, 0x00, \ + 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } + +#define UVIDEO_FORMAT_GUID_Y16 { \ + 'Y', '1', '6', ' ', 0x00, 0x00, 0x10, 0x00, \ + 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } + #define UVIDEO_FORMAT_GUID_BY8 { \ 'B', 'Y', '8', ' ', 0x00, 0x00, 0x10, 0x00, \ 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71 } diff --git a/sys/dev/usb/video/uvideo_v4l2.h b/sys/dev/usb/video/uvideo_v4l2.h index 6192ada9fbb6..7e0aa2eda097 100644 --- a/sys/dev/usb/video/uvideo_v4l2.h +++ b/sys/dev/usb/video/uvideo_v4l2.h @@ -364,6 +364,10 @@ struct v4l2_frmivalenum { /* Luminance+Chrominance formats */ #define V4L2_PIX_FMT_YUYV v4l2_fourcc('Y', 'U', 'Y', 'V') +#define V4L2_PIX_FMT_UYVY v4l2_fourcc('U', 'Y', 'V', 'Y') +#define V4L2_PIX_FMT_NV12 v4l2_fourcc('N', 'V', '1', '2') +#define V4L2_PIX_FMT_NV21 v4l2_fourcc('N', 'V', '2', '1') +#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') @@ -375,6 +379,8 @@ struct v4l2_frmivalenum { /* Grey formats */ #define V4L2_PIX_FMT_GREY v4l2_fourcc('G', 'R', 'E', 'Y') #define V4L2_PIX_FMT_Y10 v4l2_fourcc('Y', '1', '0', ' ') +#define V4L2_PIX_FMT_Y12 v4l2_fourcc('Y', '1', '2', ' ') +#define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ') /* RGB formats */ #define V4L2_PIX_FMT_RGB565 v4l2_fourcc('R', 'G', 'B', 'P')
