]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
media: uvcvideo: Add support for P010 pixel format
authorOliver Collyer <ovcollyer@mac.com>
Fri, 26 Dec 2025 06:57:18 +0000 (06:57 +0000)
committerHans Verkuil <hverkuil+cisco@kernel.org>
Wed, 25 Mar 2026 08:40:28 +0000 (09:40 +0100)
Add support for the P010 (10-bit Y/UV 4:2:0) pixel format to the
uvcvideo driver. This format is exposed by USB capture devices such as
the Magewell USB Capture HDMI 4K Pro when capturing HDR10 content.

P010 stores 10-bit Y and interleaved UV samples in 16-bit little-endian
words, with data in the upper 10 bits and zeros in the lower 6 bits.
This requires 2 bytes per sample, so bytesperline is wWidth * 2.

V4L2_PIX_FMT_P010 was added to the V4L2 core in commit 5374d8fb75f3
("media: Add P010 video format").

Based on the community DKMS patch from awawa-dev/P010_for_V4L2.

Link: https://github.com/awawa-dev/P010_for_V4L2
Signed-off-by: Oliver Collyer <ovcollyer@mac.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Link: https://patch.msgid.link/20251226065718.95504-1-ovcollyer@mac.com
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
drivers/media/common/uvc.c
drivers/media/usb/uvc/uvc_v4l2.c
include/linux/usb/uvc.h

index 1ad4604474accdf952dee372961f2f9ea7359da5..0107cedd031e4215f500524c969a970706cbde3f 100644 (file)
@@ -40,6 +40,10 @@ static const struct uvc_format_desc uvc_fmts[] = {
                .guid           = UVC_GUID_FORMAT_M420,
                .fcc            = V4L2_PIX_FMT_M420,
        },
+       {
+               .guid           = UVC_GUID_FORMAT_P010,
+               .fcc            = V4L2_PIX_FMT_P010,
+       },
        {
                .guid           = UVC_GUID_FORMAT_UYVY,
                .fcc            = V4L2_PIX_FMT_UYVY,
index d5860661c115980339e0dbbc802e8c2bb33b47c5..cda1697204eaf9bb2f146e1ce58578c771d92067 100644 (file)
@@ -230,6 +230,9 @@ static u32 uvc_v4l2_get_bytesperline(const struct uvc_format *format,
        case V4L2_PIX_FMT_M420:
                return frame->wWidth;
 
+       case V4L2_PIX_FMT_P010:
+               return frame->wWidth * 2;
+
        default:
                return format->bpp * frame->wWidth / 8;
        }
index ea92ac623a454c7cfa21a47deed7c48c6d3e077d..05bfebab42b6758e02f80e81709f76c0906bdac0 100644 (file)
 #define UVC_GUID_FORMAT_M420 \
        { 'M',  '4',  '2',  '0', 0x00, 0x00, 0x10, 0x00, \
         0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
+#define UVC_GUID_FORMAT_P010 \
+       { 'P',  '0',  '1',  '0', 0x00, 0x00, 0x10, 0x00, \
+        0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
 
 #define UVC_GUID_FORMAT_H264 \
        { 'H',  '2',  '6',  '4', 0x00, 0x00, 0x10, 0x00, \