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')

Reply via email to