* [PATCH v3 0/5] [PATCH v3] usb: uvc: improve header files and function use
@ 2023-01-26 23:14 Michael Grzeschik
2023-01-26 23:14 ` [PATCH v3 1/5] media: uvcvideo: Add GUID for BGRA/X 8:8:8:8 Michael Grzeschik
` (5 more replies)
0 siblings, 6 replies; 8+ messages in thread
From: Michael Grzeschik @ 2023-01-26 23:14 UTC (permalink / raw)
To: laurent.pinchart
Cc: gregkh, mchehab, hverkuil-cisco, linux-usb, linux-media, kernel
This series is improving the use of the uvc_format_desc
in v4l2-uvc.h and also reuses the declarative strings from
v4l_fill_fmtdesc.
This series applies on
git://git.kernel.org/pub/scm/linux/kernel/git/pinchartl/linux.git media-uvc-next-20230115
which has been merged in the Linux media tree for v6.3 (as shown by
https://git.linuxtv.org/media_stage.git/commit/?id=82adfe34694c98f1115a7b75cff6af9c4a35dba9).
v1 -> v3: dropped 4/5 ("media: v4l2: move v4l_fill_fmtdesc to common v4l2_fill_fmtdesc function")
Marek Vasut (1):
media: uvcvideo: Add GUID for BGRA/X 8:8:8:8
Michael Grzeschik (4):
usb: uvc: move media/v4l2-uvc.h to usb/uvc.h
usb: uvc: move uvc_fmts and uvc_format_by_guid to own compile unit
usb: uvc: make uvc_format_desc table const
usb: uvc: use v4l2_fill_fmtdesc instead of open coded format name
drivers/media/common/Kconfig | 3 +
drivers/media/common/Makefile | 1 +
drivers/media/common/uvc.c | 183 +++++++++++++++
drivers/media/usb/uvc/Kconfig | 1 +
drivers/media/usb/uvc/uvc_ctrl.c | 2 +-
drivers/media/usb/uvc/uvc_driver.c | 4 +-
drivers/usb/gadget/Kconfig | 1 +
drivers/usb/gadget/function/uvc_v4l2.c | 16 +-
include/{media/v4l2-uvc.h => linux/usb/uvc.h} | 209 +-----------------
9 files changed, 201 insertions(+), 219 deletions(-)
create mode 100644 drivers/media/common/uvc.c
rename include/{media/v4l2-uvc.h => linux/usb/uvc.h} (59%)
--
2.30.2
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v3 1/5] media: uvcvideo: Add GUID for BGRA/X 8:8:8:8
2023-01-26 23:14 [PATCH v3 0/5] [PATCH v3] usb: uvc: improve header files and function use Michael Grzeschik
@ 2023-01-26 23:14 ` Michael Grzeschik
2023-01-26 23:14 ` [PATCH v3 2/5] usb: uvc: move media/v4l2-uvc.h to usb/uvc.h Michael Grzeschik
` (4 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Michael Grzeschik @ 2023-01-26 23:14 UTC (permalink / raw)
To: laurent.pinchart
Cc: gregkh, mchehab, hverkuil-cisco, linux-usb, linux-media, kernel,
Marek Vasut, Ricardo Ribalda
From: Marek Vasut <marex@denx.de>
The Cypress EZUSB FX3 UVC example can be configured to report pixel
format "e436eb7e-524f-11ce-9f53-0020af0ba770". This is its GUID for
BGRA/X 8:8:8:8.
The UVC 1.5 spec [1] only defines GUIDs for YUY2, NV12, M420 and I420.
This seems to be an extension documented in the Microsoft Windows Media
Format SDK[2]. This Media Format SDK defines this GUID as corresponding
to `MEDIASUBTYPE_RGB32`, which is confirmed by [4] as `MEDIASUBTYPE_ARGB32`
has different GUID.
Note that in my case, the FX3 UVC can output either channel order,
BGR or RGB or any other mix for that matter. Since Linux commit
1b8dc32286a1a ("[media] uvcvideo: Add GUID for BGR 8:8:8")
defined a GUID for `MEDIASUBTYPE_RGB24` channel order as BGR, keep
this change consistent and define `MEDIASUBTYPE_RGB32` as BGR as well.
Document [3] also indicates the channel order is BGR.
[1] https://www.usb.org/document-library/video-class-v15-document-set
[2] https://learn.microsoft.com/en-us/windows/win32/wmformat/media-type-identifiers
[3] https://learn.microsoft.com/en-us/windows/win32/directshow/uncompressed-rgb-video-subtypes
[4] https://gix.github.io/media-types/
Signed-off-by: Marek Vasut <marex@denx.de>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Ricardo Ribalda <ricardo@ribalda.com>
Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
---
v1 -> v3: - added to the series
include/media/v4l2-uvc.h | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/include/media/v4l2-uvc.h b/include/media/v4l2-uvc.h
index f83e31661333bb..b010a36fc1d951 100644
--- a/include/media/v4l2-uvc.h
+++ b/include/media/v4l2-uvc.h
@@ -99,6 +99,9 @@
#define UVC_GUID_FORMAT_BGR3 \
{ 0x7d, 0xeb, 0x36, 0xe4, 0x4f, 0x52, 0xce, 0x11, \
0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}
+#define UVC_GUID_FORMAT_BGR4 \
+ { 0x7e, 0xeb, 0x36, 0xe4, 0x4f, 0x52, 0xce, 0x11, \
+ 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70}
#define UVC_GUID_FORMAT_M420 \
{ 'M', '4', '2', '0', 0x00, 0x00, 0x10, 0x00, \
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
@@ -266,6 +269,11 @@ static struct uvc_format_desc uvc_fmts[] = {
.guid = UVC_GUID_FORMAT_BGR3,
.fcc = V4L2_PIX_FMT_BGR24,
},
+ {
+ .name = "BGRA/X 8:8:8:8 (BGR4)",
+ .guid = UVC_GUID_FORMAT_BGR4,
+ .fcc = V4L2_PIX_FMT_XBGR32,
+ },
{
.name = "H.264",
.guid = UVC_GUID_FORMAT_H264,
--
2.30.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v3 2/5] usb: uvc: move media/v4l2-uvc.h to usb/uvc.h
2023-01-26 23:14 [PATCH v3 0/5] [PATCH v3] usb: uvc: improve header files and function use Michael Grzeschik
2023-01-26 23:14 ` [PATCH v3 1/5] media: uvcvideo: Add GUID for BGRA/X 8:8:8:8 Michael Grzeschik
@ 2023-01-26 23:14 ` Michael Grzeschik
2023-01-26 23:14 ` [PATCH v3 3/5] usb: uvc: move uvc_fmts and uvc_format_by_guid to own compile unit Michael Grzeschik
` (3 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Michael Grzeschik @ 2023-01-26 23:14 UTC (permalink / raw)
To: laurent.pinchart
Cc: gregkh, mchehab, hverkuil-cisco, linux-usb, linux-media, kernel,
Daniel Scally
Since the headerfile is only used in usb devices it is better
placed with the other usb files.
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Tested-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
---
v1 -> v2: - added reviewed and tested tags
v2 -> v3: - no changes
drivers/media/usb/uvc/uvc_ctrl.c | 2 +-
drivers/media/usb/uvc/uvc_driver.c | 2 +-
drivers/usb/gadget/function/uvc_v4l2.c | 2 +-
include/{media/v4l2-uvc.h => linux/usb/uvc.h} | 0
4 files changed, 3 insertions(+), 3 deletions(-)
rename include/{media/v4l2-uvc.h => linux/usb/uvc.h} (100%)
diff --git a/drivers/media/usb/uvc/uvc_ctrl.c b/drivers/media/usb/uvc/uvc_ctrl.c
index c3aeba3fe31b12..5e9d3da862dd86 100644
--- a/drivers/media/usb/uvc/uvc_ctrl.c
+++ b/drivers/media/usb/uvc/uvc_ctrl.c
@@ -14,13 +14,13 @@
#include <linux/slab.h>
#include <linux/uaccess.h>
#include <linux/usb.h>
+#include <linux/usb/uvc.h>
#include <linux/videodev2.h>
#include <linux/vmalloc.h>
#include <linux/wait.h>
#include <linux/workqueue.h>
#include <linux/atomic.h>
#include <media/v4l2-ctrls.h>
-#include <media/v4l2-uvc.h>
#include "uvcvideo.h"
diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
index 11f3d716b5bf6a..edf8c4a201a8ab 100644
--- a/drivers/media/usb/uvc/uvc_driver.c
+++ b/drivers/media/usb/uvc/uvc_driver.c
@@ -14,6 +14,7 @@
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/usb.h>
+#include <linux/usb/uvc.h>
#include <linux/videodev2.h>
#include <linux/vmalloc.h>
#include <linux/wait.h>
@@ -21,7 +22,6 @@
#include <media/v4l2-common.h>
#include <media/v4l2-ioctl.h>
-#include <media/v4l2-uvc.h>
#include "uvcvideo.h"
diff --git a/drivers/usb/gadget/function/uvc_v4l2.c b/drivers/usb/gadget/function/uvc_v4l2.c
index a189b08bba800d..7435df0cf2a847 100644
--- a/drivers/usb/gadget/function/uvc_v4l2.c
+++ b/drivers/usb/gadget/function/uvc_v4l2.c
@@ -11,6 +11,7 @@
#include <linux/kernel.h>
#include <linux/list.h>
#include <linux/usb/g_uvc.h>
+#include <linux/usb/uvc.h>
#include <linux/videodev2.h>
#include <linux/vmalloc.h>
#include <linux/wait.h>
@@ -18,7 +19,6 @@
#include <media/v4l2-dev.h>
#include <media/v4l2-event.h>
#include <media/v4l2-ioctl.h>
-#include <media/v4l2-uvc.h>
#include "f_uvc.h"
#include "uvc.h"
diff --git a/include/media/v4l2-uvc.h b/include/linux/usb/uvc.h
similarity index 100%
rename from include/media/v4l2-uvc.h
rename to include/linux/usb/uvc.h
--
2.30.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v3 3/5] usb: uvc: move uvc_fmts and uvc_format_by_guid to own compile unit
2023-01-26 23:14 [PATCH v3 0/5] [PATCH v3] usb: uvc: improve header files and function use Michael Grzeschik
2023-01-26 23:14 ` [PATCH v3 1/5] media: uvcvideo: Add GUID for BGRA/X 8:8:8:8 Michael Grzeschik
2023-01-26 23:14 ` [PATCH v3 2/5] usb: uvc: move media/v4l2-uvc.h to usb/uvc.h Michael Grzeschik
@ 2023-01-26 23:14 ` Michael Grzeschik
2023-01-26 23:14 ` [PATCH v3 4/5] usb: uvc: make uvc_format_desc table const Michael Grzeschik
` (2 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Michael Grzeschik @ 2023-01-26 23:14 UTC (permalink / raw)
To: laurent.pinchart
Cc: gregkh, mchehab, hverkuil-cisco, linux-usb, linux-media, kernel,
Daniel Scally
The media driver USB_VIDEO_CLASS and USB_F_UVC are using the same
function uvc_format_by_guid. Since the function is inline, every user
will get a copy of the used uvc_fmts array and the function. This patch
moves the code to an own compile unit and add this dependency as
UVC_COMMON to both users.
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Tested-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
---
v1 -> v2: - added reviewed and tested tags
- added string.h and kernel.h
v2 -> v3: - no changes
drivers/media/common/Kconfig | 3 +
drivers/media/common/Makefile | 1 +
drivers/media/common/uvc.c | 221 ++++++++++++++++++++++++++++++++++
drivers/media/usb/uvc/Kconfig | 1 +
drivers/usb/gadget/Kconfig | 1 +
include/linux/usb/uvc.h | 210 +-------------------------------
6 files changed, 228 insertions(+), 209 deletions(-)
create mode 100644 drivers/media/common/uvc.c
diff --git a/drivers/media/common/Kconfig b/drivers/media/common/Kconfig
index 852b7d92fbdd93..b1bc58da27fcdd 100644
--- a/drivers/media/common/Kconfig
+++ b/drivers/media/common/Kconfig
@@ -14,6 +14,9 @@ config TTPCI_EEPROM
tristate
depends on I2C
+config UVC_COMMON
+ tristate
+
config VIDEO_CX2341X
tristate
diff --git a/drivers/media/common/Makefile b/drivers/media/common/Makefile
index d78a0df154783a..3f17d696feb24c 100644
--- a/drivers/media/common/Makefile
+++ b/drivers/media/common/Makefile
@@ -5,5 +5,6 @@ obj-y += b2c2/ siano/ v4l2-tpg/ videobuf2/
# (e. g. LC_ALL=C sort Makefile)
obj-$(CONFIG_CYPRESS_FIRMWARE) += cypress_firmware.o
obj-$(CONFIG_TTPCI_EEPROM) += ttpci-eeprom.o
+obj-$(CONFIG_UVC_COMMON) += uvc.o
obj-$(CONFIG_VIDEO_CX2341X) += cx2341x.o
obj-$(CONFIG_VIDEO_TVEEPROM) += tveeprom.o
diff --git a/drivers/media/common/uvc.c b/drivers/media/common/uvc.c
new file mode 100644
index 00000000000000..bb96d9e26d8019
--- /dev/null
+++ b/drivers/media/common/uvc.c
@@ -0,0 +1,221 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/string.h>
+#include <linux/types.h>
+#include <linux/usb/uvc.h>
+#include <linux/videodev2.h>
+
+/* ------------------------------------------------------------------------
+ * Video formats
+ */
+
+static struct uvc_format_desc uvc_fmts[] = {
+ {
+ .name = "YUV 4:2:2 (YUYV)",
+ .guid = UVC_GUID_FORMAT_YUY2,
+ .fcc = V4L2_PIX_FMT_YUYV,
+ },
+ {
+ .name = "YUV 4:2:2 (YUYV)",
+ .guid = UVC_GUID_FORMAT_YUY2_ISIGHT,
+ .fcc = V4L2_PIX_FMT_YUYV,
+ },
+ {
+ .name = "YUV 4:2:0 (NV12)",
+ .guid = UVC_GUID_FORMAT_NV12,
+ .fcc = V4L2_PIX_FMT_NV12,
+ },
+ {
+ .name = "MJPEG",
+ .guid = UVC_GUID_FORMAT_MJPEG,
+ .fcc = V4L2_PIX_FMT_MJPEG,
+ },
+ {
+ .name = "YVU 4:2:0 (YV12)",
+ .guid = UVC_GUID_FORMAT_YV12,
+ .fcc = V4L2_PIX_FMT_YVU420,
+ },
+ {
+ .name = "YUV 4:2:0 (I420)",
+ .guid = UVC_GUID_FORMAT_I420,
+ .fcc = V4L2_PIX_FMT_YUV420,
+ },
+ {
+ .name = "YUV 4:2:0 (M420)",
+ .guid = UVC_GUID_FORMAT_M420,
+ .fcc = V4L2_PIX_FMT_M420,
+ },
+ {
+ .name = "YUV 4:2:2 (UYVY)",
+ .guid = UVC_GUID_FORMAT_UYVY,
+ .fcc = V4L2_PIX_FMT_UYVY,
+ },
+ {
+ .name = "Greyscale 8-bit (Y800)",
+ .guid = UVC_GUID_FORMAT_Y800,
+ .fcc = V4L2_PIX_FMT_GREY,
+ },
+ {
+ .name = "Greyscale 8-bit (Y8 )",
+ .guid = UVC_GUID_FORMAT_Y8,
+ .fcc = V4L2_PIX_FMT_GREY,
+ },
+ {
+ .name = "Greyscale 8-bit (D3DFMT_L8)",
+ .guid = UVC_GUID_FORMAT_D3DFMT_L8,
+ .fcc = V4L2_PIX_FMT_GREY,
+ },
+ {
+ .name = "IR 8-bit (L8_IR)",
+ .guid = UVC_GUID_FORMAT_KSMEDIA_L8_IR,
+ .fcc = V4L2_PIX_FMT_GREY,
+ },
+ {
+ .name = "Greyscale 10-bit (Y10 )",
+ .guid = UVC_GUID_FORMAT_Y10,
+ .fcc = V4L2_PIX_FMT_Y10,
+ },
+ {
+ .name = "Greyscale 12-bit (Y12 )",
+ .guid = UVC_GUID_FORMAT_Y12,
+ .fcc = V4L2_PIX_FMT_Y12,
+ },
+ {
+ .name = "Greyscale 16-bit (Y16 )",
+ .guid = UVC_GUID_FORMAT_Y16,
+ .fcc = V4L2_PIX_FMT_Y16,
+ },
+ {
+ .name = "BGGR Bayer (BY8 )",
+ .guid = UVC_GUID_FORMAT_BY8,
+ .fcc = V4L2_PIX_FMT_SBGGR8,
+ },
+ {
+ .name = "BGGR Bayer (BA81)",
+ .guid = UVC_GUID_FORMAT_BA81,
+ .fcc = V4L2_PIX_FMT_SBGGR8,
+ },
+ {
+ .name = "GBRG Bayer (GBRG)",
+ .guid = UVC_GUID_FORMAT_GBRG,
+ .fcc = V4L2_PIX_FMT_SGBRG8,
+ },
+ {
+ .name = "GRBG Bayer (GRBG)",
+ .guid = UVC_GUID_FORMAT_GRBG,
+ .fcc = V4L2_PIX_FMT_SGRBG8,
+ },
+ {
+ .name = "RGGB Bayer (RGGB)",
+ .guid = UVC_GUID_FORMAT_RGGB,
+ .fcc = V4L2_PIX_FMT_SRGGB8,
+ },
+ {
+ .name = "RGB565",
+ .guid = UVC_GUID_FORMAT_RGBP,
+ .fcc = V4L2_PIX_FMT_RGB565,
+ },
+ {
+ .name = "BGR 8:8:8 (BGR3)",
+ .guid = UVC_GUID_FORMAT_BGR3,
+ .fcc = V4L2_PIX_FMT_BGR24,
+ },
+ {
+ .name = "BGRA/X 8:8:8:8 (BGR4)",
+ .guid = UVC_GUID_FORMAT_BGR4,
+ .fcc = V4L2_PIX_FMT_XBGR32,
+ },
+ {
+ .name = "H.264",
+ .guid = UVC_GUID_FORMAT_H264,
+ .fcc = V4L2_PIX_FMT_H264,
+ },
+ {
+ .name = "H.265",
+ .guid = UVC_GUID_FORMAT_H265,
+ .fcc = V4L2_PIX_FMT_HEVC,
+ },
+ {
+ .name = "Greyscale 8 L/R (Y8I)",
+ .guid = UVC_GUID_FORMAT_Y8I,
+ .fcc = V4L2_PIX_FMT_Y8I,
+ },
+ {
+ .name = "Greyscale 12 L/R (Y12I)",
+ .guid = UVC_GUID_FORMAT_Y12I,
+ .fcc = V4L2_PIX_FMT_Y12I,
+ },
+ {
+ .name = "Depth data 16-bit (Z16)",
+ .guid = UVC_GUID_FORMAT_Z16,
+ .fcc = V4L2_PIX_FMT_Z16,
+ },
+ {
+ .name = "Bayer 10-bit (SRGGB10P)",
+ .guid = UVC_GUID_FORMAT_RW10,
+ .fcc = V4L2_PIX_FMT_SRGGB10P,
+ },
+ {
+ .name = "Bayer 16-bit (SBGGR16)",
+ .guid = UVC_GUID_FORMAT_BG16,
+ .fcc = V4L2_PIX_FMT_SBGGR16,
+ },
+ {
+ .name = "Bayer 16-bit (SGBRG16)",
+ .guid = UVC_GUID_FORMAT_GB16,
+ .fcc = V4L2_PIX_FMT_SGBRG16,
+ },
+ {
+ .name = "Bayer 16-bit (SRGGB16)",
+ .guid = UVC_GUID_FORMAT_RG16,
+ .fcc = V4L2_PIX_FMT_SRGGB16,
+ },
+ {
+ .name = "Bayer 16-bit (SGRBG16)",
+ .guid = UVC_GUID_FORMAT_GR16,
+ .fcc = V4L2_PIX_FMT_SGRBG16,
+ },
+ {
+ .name = "Depth data 16-bit (Z16)",
+ .guid = UVC_GUID_FORMAT_INVZ,
+ .fcc = V4L2_PIX_FMT_Z16,
+ },
+ {
+ .name = "Greyscale 10-bit (Y10 )",
+ .guid = UVC_GUID_FORMAT_INVI,
+ .fcc = V4L2_PIX_FMT_Y10,
+ },
+ {
+ .name = "IR:Depth 26-bit (INZI)",
+ .guid = UVC_GUID_FORMAT_INZI,
+ .fcc = V4L2_PIX_FMT_INZI,
+ },
+ {
+ .name = "4-bit Depth Confidence (Packed)",
+ .guid = UVC_GUID_FORMAT_CNF4,
+ .fcc = V4L2_PIX_FMT_CNF4,
+ },
+ {
+ .name = "HEVC",
+ .guid = UVC_GUID_FORMAT_HEVC,
+ .fcc = V4L2_PIX_FMT_HEVC,
+ },
+};
+
+struct uvc_format_desc *uvc_format_by_guid(const u8 guid[16])
+{
+ unsigned int len = ARRAY_SIZE(uvc_fmts);
+ unsigned int i;
+
+ for (i = 0; i < len; ++i) {
+ if (memcmp(guid, uvc_fmts[i].guid, 16) == 0)
+ return &uvc_fmts[i];
+ }
+
+ return NULL;
+}
+EXPORT_SYMBOL_GPL(uvc_format_by_guid);
+
+MODULE_LICENSE("GPL");
diff --git a/drivers/media/usb/uvc/Kconfig b/drivers/media/usb/uvc/Kconfig
index ca51ee8e45f39c..579532272fd6d7 100644
--- a/drivers/media/usb/uvc/Kconfig
+++ b/drivers/media/usb/uvc/Kconfig
@@ -3,6 +3,7 @@ config USB_VIDEO_CLASS
tristate "USB Video Class (UVC)"
depends on VIDEO_DEV
select VIDEOBUF2_VMALLOC
+ select UVC_COMMON
help
Support for the USB Video Class (UVC). Currently only video
input devices, such as webcams, are supported.
diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig
index 4fa2ddf322b48d..336db8f92afa6a 100644
--- a/drivers/usb/gadget/Kconfig
+++ b/drivers/usb/gadget/Kconfig
@@ -203,6 +203,7 @@ config USB_F_UAC2
config USB_F_UVC
tristate
+ select UVC_COMMON
config USB_F_MIDI
tristate
diff --git a/include/linux/usb/uvc.h b/include/linux/usb/uvc.h
index b010a36fc1d951..8cebb46602a118 100644
--- a/include/linux/usb/uvc.h
+++ b/include/linux/usb/uvc.h
@@ -148,220 +148,12 @@
{ 'H', 'E', 'V', 'C', 0x00, 0x00, 0x10, 0x00, \
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
-/* ------------------------------------------------------------------------
- * Video formats
- */
-
struct uvc_format_desc {
char *name;
u8 guid[16];
u32 fcc;
};
-static struct uvc_format_desc uvc_fmts[] = {
- {
- .name = "YUV 4:2:2 (YUYV)",
- .guid = UVC_GUID_FORMAT_YUY2,
- .fcc = V4L2_PIX_FMT_YUYV,
- },
- {
- .name = "YUV 4:2:2 (YUYV)",
- .guid = UVC_GUID_FORMAT_YUY2_ISIGHT,
- .fcc = V4L2_PIX_FMT_YUYV,
- },
- {
- .name = "YUV 4:2:0 (NV12)",
- .guid = UVC_GUID_FORMAT_NV12,
- .fcc = V4L2_PIX_FMT_NV12,
- },
- {
- .name = "MJPEG",
- .guid = UVC_GUID_FORMAT_MJPEG,
- .fcc = V4L2_PIX_FMT_MJPEG,
- },
- {
- .name = "YVU 4:2:0 (YV12)",
- .guid = UVC_GUID_FORMAT_YV12,
- .fcc = V4L2_PIX_FMT_YVU420,
- },
- {
- .name = "YUV 4:2:0 (I420)",
- .guid = UVC_GUID_FORMAT_I420,
- .fcc = V4L2_PIX_FMT_YUV420,
- },
- {
- .name = "YUV 4:2:0 (M420)",
- .guid = UVC_GUID_FORMAT_M420,
- .fcc = V4L2_PIX_FMT_M420,
- },
- {
- .name = "YUV 4:2:2 (UYVY)",
- .guid = UVC_GUID_FORMAT_UYVY,
- .fcc = V4L2_PIX_FMT_UYVY,
- },
- {
- .name = "Greyscale 8-bit (Y800)",
- .guid = UVC_GUID_FORMAT_Y800,
- .fcc = V4L2_PIX_FMT_GREY,
- },
- {
- .name = "Greyscale 8-bit (Y8 )",
- .guid = UVC_GUID_FORMAT_Y8,
- .fcc = V4L2_PIX_FMT_GREY,
- },
- {
- .name = "Greyscale 8-bit (D3DFMT_L8)",
- .guid = UVC_GUID_FORMAT_D3DFMT_L8,
- .fcc = V4L2_PIX_FMT_GREY,
- },
- {
- .name = "IR 8-bit (L8_IR)",
- .guid = UVC_GUID_FORMAT_KSMEDIA_L8_IR,
- .fcc = V4L2_PIX_FMT_GREY,
- },
- {
- .name = "Greyscale 10-bit (Y10 )",
- .guid = UVC_GUID_FORMAT_Y10,
- .fcc = V4L2_PIX_FMT_Y10,
- },
- {
- .name = "Greyscale 12-bit (Y12 )",
- .guid = UVC_GUID_FORMAT_Y12,
- .fcc = V4L2_PIX_FMT_Y12,
- },
- {
- .name = "Greyscale 16-bit (Y16 )",
- .guid = UVC_GUID_FORMAT_Y16,
- .fcc = V4L2_PIX_FMT_Y16,
- },
- {
- .name = "BGGR Bayer (BY8 )",
- .guid = UVC_GUID_FORMAT_BY8,
- .fcc = V4L2_PIX_FMT_SBGGR8,
- },
- {
- .name = "BGGR Bayer (BA81)",
- .guid = UVC_GUID_FORMAT_BA81,
- .fcc = V4L2_PIX_FMT_SBGGR8,
- },
- {
- .name = "GBRG Bayer (GBRG)",
- .guid = UVC_GUID_FORMAT_GBRG,
- .fcc = V4L2_PIX_FMT_SGBRG8,
- },
- {
- .name = "GRBG Bayer (GRBG)",
- .guid = UVC_GUID_FORMAT_GRBG,
- .fcc = V4L2_PIX_FMT_SGRBG8,
- },
- {
- .name = "RGGB Bayer (RGGB)",
- .guid = UVC_GUID_FORMAT_RGGB,
- .fcc = V4L2_PIX_FMT_SRGGB8,
- },
- {
- .name = "RGB565",
- .guid = UVC_GUID_FORMAT_RGBP,
- .fcc = V4L2_PIX_FMT_RGB565,
- },
- {
- .name = "BGR 8:8:8 (BGR3)",
- .guid = UVC_GUID_FORMAT_BGR3,
- .fcc = V4L2_PIX_FMT_BGR24,
- },
- {
- .name = "BGRA/X 8:8:8:8 (BGR4)",
- .guid = UVC_GUID_FORMAT_BGR4,
- .fcc = V4L2_PIX_FMT_XBGR32,
- },
- {
- .name = "H.264",
- .guid = UVC_GUID_FORMAT_H264,
- .fcc = V4L2_PIX_FMT_H264,
- },
- {
- .name = "H.265",
- .guid = UVC_GUID_FORMAT_H265,
- .fcc = V4L2_PIX_FMT_HEVC,
- },
- {
- .name = "Greyscale 8 L/R (Y8I)",
- .guid = UVC_GUID_FORMAT_Y8I,
- .fcc = V4L2_PIX_FMT_Y8I,
- },
- {
- .name = "Greyscale 12 L/R (Y12I)",
- .guid = UVC_GUID_FORMAT_Y12I,
- .fcc = V4L2_PIX_FMT_Y12I,
- },
- {
- .name = "Depth data 16-bit (Z16)",
- .guid = UVC_GUID_FORMAT_Z16,
- .fcc = V4L2_PIX_FMT_Z16,
- },
- {
- .name = "Bayer 10-bit (SRGGB10P)",
- .guid = UVC_GUID_FORMAT_RW10,
- .fcc = V4L2_PIX_FMT_SRGGB10P,
- },
- {
- .name = "Bayer 16-bit (SBGGR16)",
- .guid = UVC_GUID_FORMAT_BG16,
- .fcc = V4L2_PIX_FMT_SBGGR16,
- },
- {
- .name = "Bayer 16-bit (SGBRG16)",
- .guid = UVC_GUID_FORMAT_GB16,
- .fcc = V4L2_PIX_FMT_SGBRG16,
- },
- {
- .name = "Bayer 16-bit (SRGGB16)",
- .guid = UVC_GUID_FORMAT_RG16,
- .fcc = V4L2_PIX_FMT_SRGGB16,
- },
- {
- .name = "Bayer 16-bit (SGRBG16)",
- .guid = UVC_GUID_FORMAT_GR16,
- .fcc = V4L2_PIX_FMT_SGRBG16,
- },
- {
- .name = "Depth data 16-bit (Z16)",
- .guid = UVC_GUID_FORMAT_INVZ,
- .fcc = V4L2_PIX_FMT_Z16,
- },
- {
- .name = "Greyscale 10-bit (Y10 )",
- .guid = UVC_GUID_FORMAT_INVI,
- .fcc = V4L2_PIX_FMT_Y10,
- },
- {
- .name = "IR:Depth 26-bit (INZI)",
- .guid = UVC_GUID_FORMAT_INZI,
- .fcc = V4L2_PIX_FMT_INZI,
- },
- {
- .name = "4-bit Depth Confidence (Packed)",
- .guid = UVC_GUID_FORMAT_CNF4,
- .fcc = V4L2_PIX_FMT_CNF4,
- },
- {
- .name = "HEVC",
- .guid = UVC_GUID_FORMAT_HEVC,
- .fcc = V4L2_PIX_FMT_HEVC,
- },
-};
-
-static inline struct uvc_format_desc *uvc_format_by_guid(const u8 guid[16])
-{
- unsigned int len = ARRAY_SIZE(uvc_fmts);
- unsigned int i;
-
- for (i = 0; i < len; ++i) {
- if (memcmp(guid, uvc_fmts[i].guid, 16) == 0)
- return &uvc_fmts[i];
- }
-
- return NULL;
-}
+struct uvc_format_desc *uvc_format_by_guid(const u8 guid[16]);
#endif /* __LINUX_V4L2_UVC_H */
--
2.30.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v3 4/5] usb: uvc: make uvc_format_desc table const
2023-01-26 23:14 [PATCH v3 0/5] [PATCH v3] usb: uvc: improve header files and function use Michael Grzeschik
` (2 preceding siblings ...)
2023-01-26 23:14 ` [PATCH v3 3/5] usb: uvc: move uvc_fmts and uvc_format_by_guid to own compile unit Michael Grzeschik
@ 2023-01-26 23:14 ` Michael Grzeschik
2023-01-26 23:14 ` [PATCH v3 5/5] usb: uvc: use v4l2_fill_fmtdesc instead of open coded format name Michael Grzeschik
2023-01-31 8:41 ` [PATCH v3 0/5] [PATCH v3] usb: uvc: improve header files and function use Greg KH
5 siblings, 0 replies; 8+ messages in thread
From: Michael Grzeschik @ 2023-01-26 23:14 UTC (permalink / raw)
To: laurent.pinchart
Cc: gregkh, mchehab, hverkuil-cisco, linux-usb, linux-media, kernel,
Daniel Scally
Since the uvc_fmts array can not be modified we declare it const and
change every user of the uvc_format_by_guid function aswell.
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Tested-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
---
v1 -> v2: - added reviewed and tested tags
v2 -> v3: - no changes
drivers/media/common/uvc.c | 4 ++--
drivers/media/usb/uvc/uvc_driver.c | 2 +-
drivers/usb/gadget/function/uvc_v4l2.c | 8 ++++----
include/linux/usb/uvc.h | 2 +-
4 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/drivers/media/common/uvc.c b/drivers/media/common/uvc.c
index bb96d9e26d8019..2b4df3e8f48aa6 100644
--- a/drivers/media/common/uvc.c
+++ b/drivers/media/common/uvc.c
@@ -11,7 +11,7 @@
* Video formats
*/
-static struct uvc_format_desc uvc_fmts[] = {
+static const struct uvc_format_desc uvc_fmts[] = {
{
.name = "YUV 4:2:2 (YUYV)",
.guid = UVC_GUID_FORMAT_YUY2,
@@ -204,7 +204,7 @@ static struct uvc_format_desc uvc_fmts[] = {
},
};
-struct uvc_format_desc *uvc_format_by_guid(const u8 guid[16])
+const struct uvc_format_desc *uvc_format_by_guid(const u8 guid[16])
{
unsigned int len = ARRAY_SIZE(uvc_fmts);
unsigned int i;
diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
index edf8c4a201a8ab..7aefa76a42b316 100644
--- a/drivers/media/usb/uvc/uvc_driver.c
+++ b/drivers/media/usb/uvc/uvc_driver.c
@@ -225,7 +225,7 @@ static int uvc_parse_format(struct uvc_device *dev,
{
struct usb_interface *intf = streaming->intf;
struct usb_host_interface *alts = intf->cur_altsetting;
- struct uvc_format_desc *fmtdesc;
+ const struct uvc_format_desc *fmtdesc;
struct uvc_frame *frame;
const unsigned char *start = buffer;
unsigned int width_multiplier = 1;
diff --git a/drivers/usb/gadget/function/uvc_v4l2.c b/drivers/usb/gadget/function/uvc_v4l2.c
index 7435df0cf2a847..21e573e628f4e7 100644
--- a/drivers/usb/gadget/function/uvc_v4l2.c
+++ b/drivers/usb/gadget/function/uvc_v4l2.c
@@ -27,10 +27,10 @@
#include "uvc_v4l2.h"
#include "uvc_configfs.h"
-static struct uvc_format_desc *to_uvc_format(struct uvcg_format *uformat)
+static const struct uvc_format_desc *to_uvc_format(struct uvcg_format *uformat)
{
char guid[16] = UVC_GUID_FORMAT_MJPEG;
- struct uvc_format_desc *format;
+ const struct uvc_format_desc *format;
struct uvcg_uncompressed *unc;
if (uformat->type == UVCG_UNCOMPRESSED) {
@@ -119,7 +119,7 @@ static struct uvcg_format *find_format_by_pix(struct uvc_device *uvc,
struct uvcg_format *uformat = NULL;
list_for_each_entry(format, &uvc->header->formats, entry) {
- struct uvc_format_desc *fmtdesc = to_uvc_format(format->fmt);
+ const struct uvc_format_desc *fmtdesc = to_uvc_format(format->fmt);
if (fmtdesc->fcc == pixelformat) {
uformat = format->fmt;
@@ -364,7 +364,7 @@ uvc_v4l2_enum_format(struct file *file, void *fh, struct v4l2_fmtdesc *f)
{
struct video_device *vdev = video_devdata(file);
struct uvc_device *uvc = video_get_drvdata(vdev);
- struct uvc_format_desc *fmtdesc;
+ const struct uvc_format_desc *fmtdesc;
struct uvcg_format *uformat;
if (f->index >= uvc->header->num_fmt)
diff --git a/include/linux/usb/uvc.h b/include/linux/usb/uvc.h
index 8cebb46602a118..b0210c5c5406b3 100644
--- a/include/linux/usb/uvc.h
+++ b/include/linux/usb/uvc.h
@@ -154,6 +154,6 @@ struct uvc_format_desc {
u32 fcc;
};
-struct uvc_format_desc *uvc_format_by_guid(const u8 guid[16]);
+const struct uvc_format_desc *uvc_format_by_guid(const u8 guid[16]);
#endif /* __LINUX_V4L2_UVC_H */
--
2.30.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v3 5/5] usb: uvc: use v4l2_fill_fmtdesc instead of open coded format name
2023-01-26 23:14 [PATCH v3 0/5] [PATCH v3] usb: uvc: improve header files and function use Michael Grzeschik
` (3 preceding siblings ...)
2023-01-26 23:14 ` [PATCH v3 4/5] usb: uvc: make uvc_format_desc table const Michael Grzeschik
@ 2023-01-26 23:14 ` Michael Grzeschik
2023-01-26 23:26 ` Laurent Pinchart
2023-01-31 8:41 ` [PATCH v3 0/5] [PATCH v3] usb: uvc: improve header files and function use Greg KH
5 siblings, 1 reply; 8+ messages in thread
From: Michael Grzeschik @ 2023-01-26 23:14 UTC (permalink / raw)
To: laurent.pinchart
Cc: gregkh, mchehab, hverkuil-cisco, linux-usb, linux-media, kernel,
Daniel Scally
Since v4l2_fill_fmtdesc will be called in the ioctl v4l_enum_fmt anyway.
We can set the format description and compressed flag from v4l_fill_fmtdesc
and can remove the extra name field in uvc_format_desc.
Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
Tested-by: Daniel Scally <dan.scally@ideasonboard.com>
Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
---
v1 -> v2: - added reviewed and tested tags
v2 -> v3: - removed corresponding code in uvc_driver
- using call from v4l_enum_fmt in uvc_v4l2.c
drivers/media/common/uvc.c | 38 --------------------------
drivers/usb/gadget/function/uvc_v4l2.c | 6 ----
include/linux/usb/uvc.h | 1 -
3 files changed, 45 deletions(-)
diff --git a/drivers/media/common/uvc.c b/drivers/media/common/uvc.c
index 2b4df3e8f48aa6..9c0ba7a6c185b1 100644
--- a/drivers/media/common/uvc.c
+++ b/drivers/media/common/uvc.c
@@ -13,192 +13,154 @@
static const struct uvc_format_desc uvc_fmts[] = {
{
- .name = "YUV 4:2:2 (YUYV)",
.guid = UVC_GUID_FORMAT_YUY2,
.fcc = V4L2_PIX_FMT_YUYV,
},
{
- .name = "YUV 4:2:2 (YUYV)",
.guid = UVC_GUID_FORMAT_YUY2_ISIGHT,
.fcc = V4L2_PIX_FMT_YUYV,
},
{
- .name = "YUV 4:2:0 (NV12)",
.guid = UVC_GUID_FORMAT_NV12,
.fcc = V4L2_PIX_FMT_NV12,
},
{
- .name = "MJPEG",
.guid = UVC_GUID_FORMAT_MJPEG,
.fcc = V4L2_PIX_FMT_MJPEG,
},
{
- .name = "YVU 4:2:0 (YV12)",
.guid = UVC_GUID_FORMAT_YV12,
.fcc = V4L2_PIX_FMT_YVU420,
},
{
- .name = "YUV 4:2:0 (I420)",
.guid = UVC_GUID_FORMAT_I420,
.fcc = V4L2_PIX_FMT_YUV420,
},
{
- .name = "YUV 4:2:0 (M420)",
.guid = UVC_GUID_FORMAT_M420,
.fcc = V4L2_PIX_FMT_M420,
},
{
- .name = "YUV 4:2:2 (UYVY)",
.guid = UVC_GUID_FORMAT_UYVY,
.fcc = V4L2_PIX_FMT_UYVY,
},
{
- .name = "Greyscale 8-bit (Y800)",
.guid = UVC_GUID_FORMAT_Y800,
.fcc = V4L2_PIX_FMT_GREY,
},
{
- .name = "Greyscale 8-bit (Y8 )",
.guid = UVC_GUID_FORMAT_Y8,
.fcc = V4L2_PIX_FMT_GREY,
},
{
- .name = "Greyscale 8-bit (D3DFMT_L8)",
.guid = UVC_GUID_FORMAT_D3DFMT_L8,
.fcc = V4L2_PIX_FMT_GREY,
},
{
- .name = "IR 8-bit (L8_IR)",
.guid = UVC_GUID_FORMAT_KSMEDIA_L8_IR,
.fcc = V4L2_PIX_FMT_GREY,
},
{
- .name = "Greyscale 10-bit (Y10 )",
.guid = UVC_GUID_FORMAT_Y10,
.fcc = V4L2_PIX_FMT_Y10,
},
{
- .name = "Greyscale 12-bit (Y12 )",
.guid = UVC_GUID_FORMAT_Y12,
.fcc = V4L2_PIX_FMT_Y12,
},
{
- .name = "Greyscale 16-bit (Y16 )",
.guid = UVC_GUID_FORMAT_Y16,
.fcc = V4L2_PIX_FMT_Y16,
},
{
- .name = "BGGR Bayer (BY8 )",
.guid = UVC_GUID_FORMAT_BY8,
.fcc = V4L2_PIX_FMT_SBGGR8,
},
{
- .name = "BGGR Bayer (BA81)",
.guid = UVC_GUID_FORMAT_BA81,
.fcc = V4L2_PIX_FMT_SBGGR8,
},
{
- .name = "GBRG Bayer (GBRG)",
.guid = UVC_GUID_FORMAT_GBRG,
.fcc = V4L2_PIX_FMT_SGBRG8,
},
{
- .name = "GRBG Bayer (GRBG)",
.guid = UVC_GUID_FORMAT_GRBG,
.fcc = V4L2_PIX_FMT_SGRBG8,
},
{
- .name = "RGGB Bayer (RGGB)",
.guid = UVC_GUID_FORMAT_RGGB,
.fcc = V4L2_PIX_FMT_SRGGB8,
},
{
- .name = "RGB565",
.guid = UVC_GUID_FORMAT_RGBP,
.fcc = V4L2_PIX_FMT_RGB565,
},
{
- .name = "BGR 8:8:8 (BGR3)",
.guid = UVC_GUID_FORMAT_BGR3,
.fcc = V4L2_PIX_FMT_BGR24,
},
{
- .name = "BGRA/X 8:8:8:8 (BGR4)",
.guid = UVC_GUID_FORMAT_BGR4,
.fcc = V4L2_PIX_FMT_XBGR32,
},
{
- .name = "H.264",
.guid = UVC_GUID_FORMAT_H264,
.fcc = V4L2_PIX_FMT_H264,
},
{
- .name = "H.265",
.guid = UVC_GUID_FORMAT_H265,
.fcc = V4L2_PIX_FMT_HEVC,
},
{
- .name = "Greyscale 8 L/R (Y8I)",
.guid = UVC_GUID_FORMAT_Y8I,
.fcc = V4L2_PIX_FMT_Y8I,
},
{
- .name = "Greyscale 12 L/R (Y12I)",
.guid = UVC_GUID_FORMAT_Y12I,
.fcc = V4L2_PIX_FMT_Y12I,
},
{
- .name = "Depth data 16-bit (Z16)",
.guid = UVC_GUID_FORMAT_Z16,
.fcc = V4L2_PIX_FMT_Z16,
},
{
- .name = "Bayer 10-bit (SRGGB10P)",
.guid = UVC_GUID_FORMAT_RW10,
.fcc = V4L2_PIX_FMT_SRGGB10P,
},
{
- .name = "Bayer 16-bit (SBGGR16)",
.guid = UVC_GUID_FORMAT_BG16,
.fcc = V4L2_PIX_FMT_SBGGR16,
},
{
- .name = "Bayer 16-bit (SGBRG16)",
.guid = UVC_GUID_FORMAT_GB16,
.fcc = V4L2_PIX_FMT_SGBRG16,
},
{
- .name = "Bayer 16-bit (SRGGB16)",
.guid = UVC_GUID_FORMAT_RG16,
.fcc = V4L2_PIX_FMT_SRGGB16,
},
{
- .name = "Bayer 16-bit (SGRBG16)",
.guid = UVC_GUID_FORMAT_GR16,
.fcc = V4L2_PIX_FMT_SGRBG16,
},
{
- .name = "Depth data 16-bit (Z16)",
.guid = UVC_GUID_FORMAT_INVZ,
.fcc = V4L2_PIX_FMT_Z16,
},
{
- .name = "Greyscale 10-bit (Y10 )",
.guid = UVC_GUID_FORMAT_INVI,
.fcc = V4L2_PIX_FMT_Y10,
},
{
- .name = "IR:Depth 26-bit (INZI)",
.guid = UVC_GUID_FORMAT_INZI,
.fcc = V4L2_PIX_FMT_INZI,
},
{
- .name = "4-bit Depth Confidence (Packed)",
.guid = UVC_GUID_FORMAT_CNF4,
.fcc = V4L2_PIX_FMT_CNF4,
},
{
- .name = "HEVC",
.guid = UVC_GUID_FORMAT_HEVC,
.fcc = V4L2_PIX_FMT_HEVC,
},
diff --git a/drivers/usb/gadget/function/uvc_v4l2.c b/drivers/usb/gadget/function/uvc_v4l2.c
index 21e573e628f4e7..3f0a9795c0d45d 100644
--- a/drivers/usb/gadget/function/uvc_v4l2.c
+++ b/drivers/usb/gadget/function/uvc_v4l2.c
@@ -374,15 +374,9 @@ uvc_v4l2_enum_format(struct file *file, void *fh, struct v4l2_fmtdesc *f)
if (!uformat)
return -EINVAL;
- if (uformat->type != UVCG_UNCOMPRESSED)
- f->flags |= V4L2_FMT_FLAG_COMPRESSED;
-
fmtdesc = to_uvc_format(uformat);
f->pixelformat = fmtdesc->fcc;
- strscpy(f->description, fmtdesc->name, sizeof(f->description));
- f->description[strlen(fmtdesc->name) - 1] = 0;
-
return 0;
}
diff --git a/include/linux/usb/uvc.h b/include/linux/usb/uvc.h
index b0210c5c5406b3..88d96095bcb163 100644
--- a/include/linux/usb/uvc.h
+++ b/include/linux/usb/uvc.h
@@ -149,7 +149,6 @@
0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
struct uvc_format_desc {
- char *name;
u8 guid[16];
u32 fcc;
};
--
2.30.2
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v3 5/5] usb: uvc: use v4l2_fill_fmtdesc instead of open coded format name
2023-01-26 23:14 ` [PATCH v3 5/5] usb: uvc: use v4l2_fill_fmtdesc instead of open coded format name Michael Grzeschik
@ 2023-01-26 23:26 ` Laurent Pinchart
0 siblings, 0 replies; 8+ messages in thread
From: Laurent Pinchart @ 2023-01-26 23:26 UTC (permalink / raw)
To: Michael Grzeschik
Cc: gregkh, mchehab, hverkuil-cisco, linux-usb, linux-media, kernel,
Daniel Scally
Hi Michael,
Thank you for the patch.
On Fri, Jan 27, 2023 at 12:14:56AM +0100, Michael Grzeschik wrote:
> Since v4l2_fill_fmtdesc will be called in the ioctl v4l_enum_fmt anyway.
> We can set the format description and compressed flag from v4l_fill_fmtdesc
> and can remove the extra name field in uvc_format_desc.
>
> Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
> Tested-by: Daniel Scally <dan.scally@ideasonboard.com>
> Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
Happy to see the name field being dropped.
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> ---
> v1 -> v2: - added reviewed and tested tags
> v2 -> v3: - removed corresponding code in uvc_driver
> - using call from v4l_enum_fmt in uvc_v4l2.c
>
> drivers/media/common/uvc.c | 38 --------------------------
> drivers/usb/gadget/function/uvc_v4l2.c | 6 ----
> include/linux/usb/uvc.h | 1 -
> 3 files changed, 45 deletions(-)
>
> diff --git a/drivers/media/common/uvc.c b/drivers/media/common/uvc.c
> index 2b4df3e8f48aa6..9c0ba7a6c185b1 100644
> --- a/drivers/media/common/uvc.c
> +++ b/drivers/media/common/uvc.c
> @@ -13,192 +13,154 @@
>
> static const struct uvc_format_desc uvc_fmts[] = {
> {
> - .name = "YUV 4:2:2 (YUYV)",
> .guid = UVC_GUID_FORMAT_YUY2,
> .fcc = V4L2_PIX_FMT_YUYV,
> },
> {
> - .name = "YUV 4:2:2 (YUYV)",
> .guid = UVC_GUID_FORMAT_YUY2_ISIGHT,
> .fcc = V4L2_PIX_FMT_YUYV,
> },
> {
> - .name = "YUV 4:2:0 (NV12)",
> .guid = UVC_GUID_FORMAT_NV12,
> .fcc = V4L2_PIX_FMT_NV12,
> },
> {
> - .name = "MJPEG",
> .guid = UVC_GUID_FORMAT_MJPEG,
> .fcc = V4L2_PIX_FMT_MJPEG,
> },
> {
> - .name = "YVU 4:2:0 (YV12)",
> .guid = UVC_GUID_FORMAT_YV12,
> .fcc = V4L2_PIX_FMT_YVU420,
> },
> {
> - .name = "YUV 4:2:0 (I420)",
> .guid = UVC_GUID_FORMAT_I420,
> .fcc = V4L2_PIX_FMT_YUV420,
> },
> {
> - .name = "YUV 4:2:0 (M420)",
> .guid = UVC_GUID_FORMAT_M420,
> .fcc = V4L2_PIX_FMT_M420,
> },
> {
> - .name = "YUV 4:2:2 (UYVY)",
> .guid = UVC_GUID_FORMAT_UYVY,
> .fcc = V4L2_PIX_FMT_UYVY,
> },
> {
> - .name = "Greyscale 8-bit (Y800)",
> .guid = UVC_GUID_FORMAT_Y800,
> .fcc = V4L2_PIX_FMT_GREY,
> },
> {
> - .name = "Greyscale 8-bit (Y8 )",
> .guid = UVC_GUID_FORMAT_Y8,
> .fcc = V4L2_PIX_FMT_GREY,
> },
> {
> - .name = "Greyscale 8-bit (D3DFMT_L8)",
> .guid = UVC_GUID_FORMAT_D3DFMT_L8,
> .fcc = V4L2_PIX_FMT_GREY,
> },
> {
> - .name = "IR 8-bit (L8_IR)",
> .guid = UVC_GUID_FORMAT_KSMEDIA_L8_IR,
> .fcc = V4L2_PIX_FMT_GREY,
> },
> {
> - .name = "Greyscale 10-bit (Y10 )",
> .guid = UVC_GUID_FORMAT_Y10,
> .fcc = V4L2_PIX_FMT_Y10,
> },
> {
> - .name = "Greyscale 12-bit (Y12 )",
> .guid = UVC_GUID_FORMAT_Y12,
> .fcc = V4L2_PIX_FMT_Y12,
> },
> {
> - .name = "Greyscale 16-bit (Y16 )",
> .guid = UVC_GUID_FORMAT_Y16,
> .fcc = V4L2_PIX_FMT_Y16,
> },
> {
> - .name = "BGGR Bayer (BY8 )",
> .guid = UVC_GUID_FORMAT_BY8,
> .fcc = V4L2_PIX_FMT_SBGGR8,
> },
> {
> - .name = "BGGR Bayer (BA81)",
> .guid = UVC_GUID_FORMAT_BA81,
> .fcc = V4L2_PIX_FMT_SBGGR8,
> },
> {
> - .name = "GBRG Bayer (GBRG)",
> .guid = UVC_GUID_FORMAT_GBRG,
> .fcc = V4L2_PIX_FMT_SGBRG8,
> },
> {
> - .name = "GRBG Bayer (GRBG)",
> .guid = UVC_GUID_FORMAT_GRBG,
> .fcc = V4L2_PIX_FMT_SGRBG8,
> },
> {
> - .name = "RGGB Bayer (RGGB)",
> .guid = UVC_GUID_FORMAT_RGGB,
> .fcc = V4L2_PIX_FMT_SRGGB8,
> },
> {
> - .name = "RGB565",
> .guid = UVC_GUID_FORMAT_RGBP,
> .fcc = V4L2_PIX_FMT_RGB565,
> },
> {
> - .name = "BGR 8:8:8 (BGR3)",
> .guid = UVC_GUID_FORMAT_BGR3,
> .fcc = V4L2_PIX_FMT_BGR24,
> },
> {
> - .name = "BGRA/X 8:8:8:8 (BGR4)",
> .guid = UVC_GUID_FORMAT_BGR4,
> .fcc = V4L2_PIX_FMT_XBGR32,
> },
> {
> - .name = "H.264",
> .guid = UVC_GUID_FORMAT_H264,
> .fcc = V4L2_PIX_FMT_H264,
> },
> {
> - .name = "H.265",
> .guid = UVC_GUID_FORMAT_H265,
> .fcc = V4L2_PIX_FMT_HEVC,
> },
> {
> - .name = "Greyscale 8 L/R (Y8I)",
> .guid = UVC_GUID_FORMAT_Y8I,
> .fcc = V4L2_PIX_FMT_Y8I,
> },
> {
> - .name = "Greyscale 12 L/R (Y12I)",
> .guid = UVC_GUID_FORMAT_Y12I,
> .fcc = V4L2_PIX_FMT_Y12I,
> },
> {
> - .name = "Depth data 16-bit (Z16)",
> .guid = UVC_GUID_FORMAT_Z16,
> .fcc = V4L2_PIX_FMT_Z16,
> },
> {
> - .name = "Bayer 10-bit (SRGGB10P)",
> .guid = UVC_GUID_FORMAT_RW10,
> .fcc = V4L2_PIX_FMT_SRGGB10P,
> },
> {
> - .name = "Bayer 16-bit (SBGGR16)",
> .guid = UVC_GUID_FORMAT_BG16,
> .fcc = V4L2_PIX_FMT_SBGGR16,
> },
> {
> - .name = "Bayer 16-bit (SGBRG16)",
> .guid = UVC_GUID_FORMAT_GB16,
> .fcc = V4L2_PIX_FMT_SGBRG16,
> },
> {
> - .name = "Bayer 16-bit (SRGGB16)",
> .guid = UVC_GUID_FORMAT_RG16,
> .fcc = V4L2_PIX_FMT_SRGGB16,
> },
> {
> - .name = "Bayer 16-bit (SGRBG16)",
> .guid = UVC_GUID_FORMAT_GR16,
> .fcc = V4L2_PIX_FMT_SGRBG16,
> },
> {
> - .name = "Depth data 16-bit (Z16)",
> .guid = UVC_GUID_FORMAT_INVZ,
> .fcc = V4L2_PIX_FMT_Z16,
> },
> {
> - .name = "Greyscale 10-bit (Y10 )",
> .guid = UVC_GUID_FORMAT_INVI,
> .fcc = V4L2_PIX_FMT_Y10,
> },
> {
> - .name = "IR:Depth 26-bit (INZI)",
> .guid = UVC_GUID_FORMAT_INZI,
> .fcc = V4L2_PIX_FMT_INZI,
> },
> {
> - .name = "4-bit Depth Confidence (Packed)",
> .guid = UVC_GUID_FORMAT_CNF4,
> .fcc = V4L2_PIX_FMT_CNF4,
> },
> {
> - .name = "HEVC",
> .guid = UVC_GUID_FORMAT_HEVC,
> .fcc = V4L2_PIX_FMT_HEVC,
> },
> diff --git a/drivers/usb/gadget/function/uvc_v4l2.c b/drivers/usb/gadget/function/uvc_v4l2.c
> index 21e573e628f4e7..3f0a9795c0d45d 100644
> --- a/drivers/usb/gadget/function/uvc_v4l2.c
> +++ b/drivers/usb/gadget/function/uvc_v4l2.c
> @@ -374,15 +374,9 @@ uvc_v4l2_enum_format(struct file *file, void *fh, struct v4l2_fmtdesc *f)
> if (!uformat)
> return -EINVAL;
>
> - if (uformat->type != UVCG_UNCOMPRESSED)
> - f->flags |= V4L2_FMT_FLAG_COMPRESSED;
> -
> fmtdesc = to_uvc_format(uformat);
> f->pixelformat = fmtdesc->fcc;
>
> - strscpy(f->description, fmtdesc->name, sizeof(f->description));
> - f->description[strlen(fmtdesc->name) - 1] = 0;
> -
> return 0;
> }
>
> diff --git a/include/linux/usb/uvc.h b/include/linux/usb/uvc.h
> index b0210c5c5406b3..88d96095bcb163 100644
> --- a/include/linux/usb/uvc.h
> +++ b/include/linux/usb/uvc.h
> @@ -149,7 +149,6 @@
> 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}
>
> struct uvc_format_desc {
> - char *name;
> u8 guid[16];
> u32 fcc;
> };
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v3 0/5] [PATCH v3] usb: uvc: improve header files and function use
2023-01-26 23:14 [PATCH v3 0/5] [PATCH v3] usb: uvc: improve header files and function use Michael Grzeschik
` (4 preceding siblings ...)
2023-01-26 23:14 ` [PATCH v3 5/5] usb: uvc: use v4l2_fill_fmtdesc instead of open coded format name Michael Grzeschik
@ 2023-01-31 8:41 ` Greg KH
5 siblings, 0 replies; 8+ messages in thread
From: Greg KH @ 2023-01-31 8:41 UTC (permalink / raw)
To: Michael Grzeschik
Cc: laurent.pinchart, mchehab, hverkuil-cisco, linux-usb, linux-media,
kernel
On Fri, Jan 27, 2023 at 12:14:51AM +0100, Michael Grzeschik wrote:
> This series is improving the use of the uvc_format_desc
> in v4l2-uvc.h and also reuses the declarative strings from
> v4l_fill_fmtdesc.
>
> This series applies on
>
> git://git.kernel.org/pub/scm/linux/kernel/git/pinchartl/linux.git media-uvc-next-20230115
>
> which has been merged in the Linux media tree for v6.3 (as shown by
> https://git.linuxtv.org/media_stage.git/commit/?id=82adfe34694c98f1115a7b75cff6af9c4a35dba9).
I've merged that git tag into my usb-next branch and taken this series
as well. Thanks for sticking with this, and sorry for the complexity in
getting it merged properly.
greg k-h
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-01-31 8:46 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-01-26 23:14 [PATCH v3 0/5] [PATCH v3] usb: uvc: improve header files and function use Michael Grzeschik
2023-01-26 23:14 ` [PATCH v3 1/5] media: uvcvideo: Add GUID for BGRA/X 8:8:8:8 Michael Grzeschik
2023-01-26 23:14 ` [PATCH v3 2/5] usb: uvc: move media/v4l2-uvc.h to usb/uvc.h Michael Grzeschik
2023-01-26 23:14 ` [PATCH v3 3/5] usb: uvc: move uvc_fmts and uvc_format_by_guid to own compile unit Michael Grzeschik
2023-01-26 23:14 ` [PATCH v3 4/5] usb: uvc: make uvc_format_desc table const Michael Grzeschik
2023-01-26 23:14 ` [PATCH v3 5/5] usb: uvc: use v4l2_fill_fmtdesc instead of open coded format name Michael Grzeschik
2023-01-26 23:26 ` Laurent Pinchart
2023-01-31 8:41 ` [PATCH v3 0/5] [PATCH v3] usb: uvc: improve header files and function use Greg KH
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).