Commit 2ab4019a authored by Ricardo Ribalda's avatar Ricardo Ribalda Committed by Hans Verkuil
Browse files

media: uvcvideo: Introduce V4L2_META_FMT_UVC_MSXU_1_5

The UVC driver provides two metadata types V4L2_META_FMT_UVC, and
V4L2_META_FMT_D4XX. The only difference between the two of them is that
V4L2_META_FMT_UVC only copies PTS, SCR, size and flags, and
V4L2_META_FMT_D4XX copies the whole metadata section.

Now we only enable V4L2_META_FMT_D4XX for the Intel D4xx family of
devices, but it is useful to have the whole metadata payload for any
device where vendors include other metadata, such as the one described by
Microsoft:
https://learn.microsoft.com/en-us/windows-hardware/drivers/stream/mf-capture-metadata



This patch introduces a new format V4L2_META_FMT_UVC_MSXU_1_5, that is
identical to V4L2_META_FMT_D4XX.

Let the user enable this format with a quirk for now. This way they can
test if their devices provide useful metadata without rebuilding the
kernel. They can later contribute patches to auto-quirk their devices.
We will also work in methods to auto-detect devices compatible with this
new metadata format.

Suggested-by: default avatarHans de Goede <hdegoede@redhat.com>
Reviewed-by: default avatarHans de Goede <hansg@kernel.org>
Signed-off-by: default avatarRicardo Ribalda <ribalda@chromium.org>
Link: https://lore.kernel.org/r/20250707-uvc-meta-v8-4-ed17f8b1218b@chromium.org


Signed-off-by: default avatarHans de Goede <hansg@kernel.org>
Signed-off-by: default avatarHans Verkuil <hverkuil@xs4all.nl>
parent 0bb51c88
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ These formats are used for the :ref:`metadata` interface only.
    metafmt-pisp-fe
    metafmt-rkisp1
    metafmt-uvc
    metafmt-uvc-msxu-1-5
    metafmt-vivid
    metafmt-vsp1-hgo
    metafmt-vsp1-hgt
+23 −0
Original line number Diff line number Diff line
.. SPDX-License-Identifier: GFDL-1.1-no-invariants-or-later

.. _v4l2-meta-fmt-uvc-msxu-1-5:

***********************************
V4L2_META_FMT_UVC_MSXU_1_5 ('UVCM')
***********************************

Microsoft(R)'s UVC Payload Metadata.


Description
===========

V4L2_META_FMT_UVC_MSXU_1_5 buffers follow the metadata buffer layout of
V4L2_META_FMT_UVC with the only difference that it includes all the UVC
metadata in the `buffer[]` field, not just the first 2-12 bytes.

The metadata format follows the specification from Microsoft(R) [1].

.. _1:

[1] https://docs.microsoft.com/en-us/windows-hardware/drivers/stream/uvc-extensions-1-5
+1 −0
Original line number Diff line number Diff line
@@ -25837,6 +25837,7 @@ S: Maintained
W:	http://www.ideasonboard.org/uvc/
T:	git git://linuxtv.org/media.git
F:	Documentation/userspace-api/media/drivers/uvcvideo.rst
F:	Documentation/userspace-api/media/v4l/metafmt-uvc-msxu-1-5.rst
F:	Documentation/userspace-api/media/v4l/metafmt-uvc.rst
F:	drivers/media/common/uvc.c
F:	drivers/media/usb/uvc/
+4 −0
Original line number Diff line number Diff line
@@ -189,6 +189,10 @@ void uvc_meta_init(struct uvc_device *dev)
	    !WARN_ON(dev->info->meta_format == V4L2_META_FMT_UVC))
		dev->meta_formats[i++] = dev->info->meta_format;

	if (dev->quirks & UVC_QUIRK_MSXU_META &&
	    !WARN_ON(dev->info->meta_format == V4L2_META_FMT_UVC_MSXU_1_5))
		dev->meta_formats[i++] = V4L2_META_FMT_UVC_MSXU_1_5;

	 /* IMPORTANT: for new meta-formats update UVC_MAX_META_DATA_FORMATS. */
	dev->meta_formats[i++] = 0;
}
+1 −0
Original line number Diff line number Diff line
@@ -77,6 +77,7 @@
#define UVC_QUIRK_DISABLE_AUTOSUSPEND	0x00008000
#define UVC_QUIRK_INVALID_DEVICE_SOF	0x00010000
#define UVC_QUIRK_MJPEG_NO_EOF		0x00020000
#define UVC_QUIRK_MSXU_META		0x00040000

/* Format flags */
#define UVC_FMT_FLAG_COMPRESSED		0x00000001
Loading