git: 8bc06ffbbd80 - main - uvideo: add missing formats to be in par with webcamd's uvcvideo
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 16 Jun 2026 11:23:05 UTC
The branch main has been updated by bapt:
URL: https://cgit.FreeBSD.org/src/commit/?id=8bc06ffbbd80533eda0784d2a6f5a1476f9d550c
commit 8bc06ffbbd80533eda0784d2a6f5a1476f9d550c
Author: Baptiste Daroussin <bapt@FreeBSD.org>
AuthorDate: 2026-05-18 20:17:34 +0000
Commit: Baptiste Daroussin <bapt@FreeBSD.org>
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')