Linux-Rockchip Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/2] Enumerate all pixels formats
@ 2024-07-09 16:17 Benjamin Gaignard
  2024-07-09 16:17 ` [PATCH v3 1/2] media: videodev2: Add flags to unconditionnaly enumerate " Benjamin Gaignard
  2024-07-09 16:17 ` [PATCH v3 2/2] media: verisilicon: Use V4L2_FMT_FLAG_ENUM_ALL_FORMATS flag Benjamin Gaignard
  0 siblings, 2 replies; 11+ messages in thread
From: Benjamin Gaignard @ 2024-07-09 16:17 UTC (permalink / raw)
  To: mchehab, ezequiel, hverkuil-cisco
  Cc: linux-media, linux-kernel, linux-rockchip, kernel,
	Benjamin Gaignard

The goal of this series is to let userland applications enumerate
all the supported pixels formats of a stateless decoder without
setting all the possible codec-dependent control.
That offer a simplest solution for applications to discover
supported pixels formats and possibly let them doing smarter
choice between stateless decoders.

An example of how it can be used in GStreamer to discover the
supported pixels formats for stateless decoder is available here:
https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer/-/commits/v4l2codecs_enum_all_supported_formats?ref_type=heads

changes in version 3:
- Add a flag to inform userspace application that driver
  as take care of the flag.

changes in version 2:
- Clarify documentation.
- Only keep V4L2_FMT_FLAG_ALL_FORMATS flag in ioctl.

Benjamin
 
Benjamin Gaignard (2):
  media: videodev2: Add flags to unconditionnaly enumerate pixels
    formats
  media: verisilicon: Use V4L2_FMT_FLAG_ENUM_ALL_FORMATS flag

 .../media/v4l/dev-stateless-decoder.rst          |  6 ++++++
 .../userspace-api/media/v4l/vidioc-enum-fmt.rst  | 10 ++++++++++
 .../media/videodev2.h.rst.exceptions             |  2 ++
 drivers/media/platform/verisilicon/hantro_v4l2.c | 16 +++++++++++++---
 drivers/media/v4l2-core/v4l2-ioctl.c             |  3 +++
 include/uapi/linux/videodev2.h                   |  2 ++
 6 files changed, 36 insertions(+), 3 deletions(-)

-- 
2.43.0


_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v3 1/2] media: videodev2: Add flags to unconditionnaly enumerate pixels formats
  2024-07-09 16:17 [PATCH v3 0/2] Enumerate all pixels formats Benjamin Gaignard
@ 2024-07-09 16:17 ` Benjamin Gaignard
  2024-07-10 12:40   ` Sebastian Fricke
  2024-07-09 16:17 ` [PATCH v3 2/2] media: verisilicon: Use V4L2_FMT_FLAG_ENUM_ALL_FORMATS flag Benjamin Gaignard
  1 sibling, 1 reply; 11+ messages in thread
From: Benjamin Gaignard @ 2024-07-09 16:17 UTC (permalink / raw)
  To: mchehab, ezequiel, hverkuil-cisco
  Cc: linux-media, linux-kernel, linux-rockchip, kernel,
	Benjamin Gaignard

Add new flags to allow enumerate all pixels formats when
calling VIDIOC_ENUM_FMT ioctl.
When this V4L2_FMT_FLAG_ENUM_ALL_FORMATS flag is set drivers must
ignore the configuration and return the hardware supported pixel
formats for the specified queue.
To distinguish this partical enumeration case V4L2_FMT_FLAG_ALL_FORMATS
flag must be set be drivers so user space applications can know that
drivers support this feature.
This will permit to discover which pixels formats are supported
without setting codec-specific information so userland can more easily
knows if the driver suit well to what it needs.
The main target are stateless decoders so update the documentation
about how use this flag.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
changes in version 3:
- Add a flag to inform userspace application that driver
  as take care of the flag.

 .../userspace-api/media/v4l/dev-stateless-decoder.rst  |  6 ++++++
 .../userspace-api/media/v4l/vidioc-enum-fmt.rst        | 10 ++++++++++
 .../userspace-api/media/videodev2.h.rst.exceptions     |  2 ++
 drivers/media/v4l2-core/v4l2-ioctl.c                   |  3 +++
 include/uapi/linux/videodev2.h                         |  2 ++
 5 files changed, 23 insertions(+)

diff --git a/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst b/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst
index 35ed05f2695e..de006a7fd02a 100644
--- a/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst
+++ b/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst
@@ -58,6 +58,12 @@ Querying capabilities
      default values for these controls being used, and a returned set of formats
      that may not be usable for the media the client is trying to decode.
 
+   * If ``V4L2_FMT_FLAG_ENUM_ALL_FORMATS`` flag is set the driver must enumerate
+     all the supported formats without taking care of codec-dependent controls
+     set on ``OUTPUT`` queue. To indicate that the driver has take care of this
+     flag it must set ``V4L2_FMT_FLAG_ALL_FORMATS`` flag when it enumerates the
+     format.
+
 3. The client may use :c:func:`VIDIOC_ENUM_FRAMESIZES` to detect supported
    resolutions for a given format, passing desired pixel format in
    :c:type:`v4l2_frmsizeenum`'s ``pixel_format``.
diff --git a/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst b/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst
index 3adb3d205531..510d2a6700aa 100644
--- a/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst
+++ b/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst
@@ -234,6 +234,16 @@ the ``mbus_code`` field is handled differently:
 	valid. The buffer consists of ``height`` lines, each having ``width``
 	Data Units of data and the offset (in bytes) between the beginning of
 	each two consecutive lines is ``bytesperline``.
+    * - ``V4L2_FMT_FLAG_ENUM_ALL_FORMATS``
+      - 0x0400
+      - Set by userland application to enumerate all possible pixels formats
+        without taking care of any configuration done on OUTPUT or CAPTURE
+        queues.
+    * - ``V4L2_FMT_FLAG_ALL_FORMATS``
+      - 0x0800
+      - Set by driver to indicated that format has been enumerated because
+        :ref:`V4L2_FMT_FLAG_ENUM_ALL_FORMATS <v4l2-pix-fmt-flag-set-csc>` has
+        been set by userland application.
 
 Return Value
 ============
diff --git a/Documentation/userspace-api/media/videodev2.h.rst.exceptions b/Documentation/userspace-api/media/videodev2.h.rst.exceptions
index bdc628e8c1d6..7a3a1e9dc055 100644
--- a/Documentation/userspace-api/media/videodev2.h.rst.exceptions
+++ b/Documentation/userspace-api/media/videodev2.h.rst.exceptions
@@ -216,6 +216,8 @@ replace define V4L2_FMT_FLAG_CSC_YCBCR_ENC fmtdesc-flags
 replace define V4L2_FMT_FLAG_CSC_HSV_ENC fmtdesc-flags
 replace define V4L2_FMT_FLAG_CSC_QUANTIZATION fmtdesc-flags
 replace define V4L2_FMT_FLAG_META_LINE_BASED fmtdesc-flags
+replace define V4L2_FMT_FLAG_ENUM_ALL_FORMATS fmtdesc-flags
+replace define V4L2_FMT_FLAG_ALL_FORMATS fmtdesc-flags
 
 # V4L2 timecode types
 replace define V4L2_TC_TYPE_24FPS timecode-type
diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
index 4c76d17b4629..5785a98b6ba2 100644
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
@@ -1569,6 +1569,7 @@ static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
 	int ret = check_fmt(file, p->type);
 	u32 mbus_code;
 	u32 cap_mask;
+	u32 flags;
 
 	if (ret)
 		return ret;
@@ -1578,8 +1579,10 @@ static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
 		p->mbus_code = 0;
 
 	mbus_code = p->mbus_code;
+	flags = p->flags & V4L2_FMT_FLAG_ENUM_ALL_FORMATS;
 	memset_after(p, 0, type);
 	p->mbus_code = mbus_code;
+	p->flags = flags;
 
 	switch (p->type) {
 	case V4L2_BUF_TYPE_VIDEO_CAPTURE:
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index fe6b67e83751..b6a5da79ba21 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -886,6 +886,8 @@ struct v4l2_fmtdesc {
 #define V4L2_FMT_FLAG_CSC_HSV_ENC		V4L2_FMT_FLAG_CSC_YCBCR_ENC
 #define V4L2_FMT_FLAG_CSC_QUANTIZATION		0x0100
 #define V4L2_FMT_FLAG_META_LINE_BASED		0x0200
+#define V4L2_FMT_FLAG_ENUM_ALL_FORMATS		0x0400
+#define V4L2_FMT_FLAG_ALL_FORMATS		0x0800
 
 	/* Frame Size and frame rate enumeration */
 /*
-- 
2.43.0


_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v3 2/2] media: verisilicon: Use V4L2_FMT_FLAG_ENUM_ALL_FORMATS flag
  2024-07-09 16:17 [PATCH v3 0/2] Enumerate all pixels formats Benjamin Gaignard
  2024-07-09 16:17 ` [PATCH v3 1/2] media: videodev2: Add flags to unconditionnaly enumerate " Benjamin Gaignard
@ 2024-07-09 16:17 ` Benjamin Gaignard
  1 sibling, 0 replies; 11+ messages in thread
From: Benjamin Gaignard @ 2024-07-09 16:17 UTC (permalink / raw)
  To: mchehab, ezequiel, hverkuil-cisco
  Cc: linux-media, linux-kernel, linux-rockchip, kernel,
	Benjamin Gaignard

If V4L2_FMT_FLAG_ENUM_ALL_FORMATS flag has been set when calling
VIDIOC_ENUM_FMT ignore depth match and returns all the
hardware supported pixels formats. In this case all set
V4L2_FMT_FLAG_ALL_FORMATS when returning the pixels formats.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
 drivers/media/platform/verisilicon/hantro_v4l2.c | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/drivers/media/platform/verisilicon/hantro_v4l2.c b/drivers/media/platform/verisilicon/hantro_v4l2.c
index df6f2536263b..b995ad31cddc 100644
--- a/drivers/media/platform/verisilicon/hantro_v4l2.c
+++ b/drivers/media/platform/verisilicon/hantro_v4l2.c
@@ -201,7 +201,13 @@ static int vidioc_enum_fmt(struct file *file, void *priv,
 	struct hantro_ctx *ctx = fh_to_ctx(priv);
 	const struct hantro_fmt *fmt, *formats;
 	unsigned int num_fmts, i, j = 0;
-	bool skip_mode_none;
+	bool skip_mode_none, ignore_depth_match;
+
+	/*
+	 * If V4L2_FMT_FLAG_ALL_FORMATS flag is set, we want to enumerate all
+	 * hardware supported pixels formats
+	 */
+	ignore_depth_match = !!(f->flags & V4L2_FMT_FLAG_ENUM_ALL_FORMATS);
 
 	/*
 	 * When dealing with an encoder:
@@ -222,10 +228,12 @@ static int vidioc_enum_fmt(struct file *file, void *priv,
 
 		if (skip_mode_none == mode_none)
 			continue;
-		if (!hantro_check_depth_match(fmt, ctx->bit_depth))
+		if (!hantro_check_depth_match(fmt, ctx->bit_depth) && !ignore_depth_match)
 			continue;
 		if (j == f->index) {
 			f->pixelformat = fmt->fourcc;
+			if (ignore_depth_match)
+				f->flags |= V4L2_FMT_FLAG_ALL_FORMATS;
 			return 0;
 		}
 		++j;
@@ -242,10 +250,12 @@ static int vidioc_enum_fmt(struct file *file, void *priv,
 	for (i = 0; i < num_fmts; i++) {
 		fmt = &formats[i];
 
-		if (!hantro_check_depth_match(fmt, ctx->bit_depth))
+		if (!hantro_check_depth_match(fmt, ctx->bit_depth) && !ignore_depth_match)
 			continue;
 		if (j == f->index) {
 			f->pixelformat = fmt->fourcc;
+			if (ignore_depth_match)
+				f->flags |= V4L2_FMT_FLAG_ALL_FORMATS;
 			return 0;
 		}
 		++j;
-- 
2.43.0


_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 1/2] media: videodev2: Add flags to unconditionnaly enumerate pixels formats
  2024-07-09 16:17 ` [PATCH v3 1/2] media: videodev2: Add flags to unconditionnaly enumerate " Benjamin Gaignard
@ 2024-07-10 12:40   ` Sebastian Fricke
  2024-07-10 12:55     ` Sebastian Fricke
  0 siblings, 1 reply; 11+ messages in thread
From: Sebastian Fricke @ 2024-07-10 12:40 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: mchehab, ezequiel, hverkuil-cisco, linux-media, linux-kernel,
	linux-rockchip, kernel

Hey Benjamin,

On 09.07.2024 18:17, Benjamin Gaignard wrote:
>Add new flags to allow enumerate all pixels formats when

s/enumerate all pixels formats/enumeration of pixel formats,/

>calling VIDIOC_ENUM_FMT ioctl.
>When this V4L2_FMT_FLAG_ENUM_ALL_FORMATS flag is set drivers must
>ignore the configuration and return the hardware supported pixel
>formats for the specified queue.
>To distinguish this partical enumeration case V4L2_FMT_FLAG_ALL_FORMATS

s/partical/partiuclar/

>flag must be set be drivers so user space applications can know that

s/be/by the/

>drivers support this feature.

s/so user space applications can know that drivers support this feature./
   , to highlight support for this feature to user space applications.

>This will permit to discover which pixels formats are supported

s/pixels/pixel/

>without setting codec-specific information so userland can more easily
>knows if the driver suit well to what it needs.

s/knows/know/
s/suit well to what it needs/suits its needs well/

>The main target are stateless decoders so update the documentation
>about how use this flag.

s/how/how to/

>
>Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
>---
>changes in version 3:
>- Add a flag to inform userspace application that driver
>  as take care of the flag.
>
> .../userspace-api/media/v4l/dev-stateless-decoder.rst  |  6 ++++++
> .../userspace-api/media/v4l/vidioc-enum-fmt.rst        | 10 ++++++++++
> .../userspace-api/media/videodev2.h.rst.exceptions     |  2 ++
> drivers/media/v4l2-core/v4l2-ioctl.c                   |  3 +++
> include/uapi/linux/videodev2.h                         |  2 ++
> 5 files changed, 23 insertions(+)
>
>diff --git a/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst b/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst
>index 35ed05f2695e..de006a7fd02a 100644
>--- a/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst
>+++ b/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst
>@@ -58,6 +58,12 @@ Querying capabilities
>      default values for these controls being used, and a returned set of formats
>      that may not be usable for the media the client is trying to decode.
>
>+   * If ``V4L2_FMT_FLAG_ENUM_ALL_FORMATS`` flag is set the driver must enumerate

s/If/If the/

>+     all the supported formats without taking care of codec-dependent controls
>+     set on ``OUTPUT`` queue. To indicate that the driver has take care of this

s/set on/set on the/
s/has take/has taken/

>+     flag it must set ``V4L2_FMT_FLAG_ALL_FORMATS`` flag when it enumerates the

s/set/set the/
s/when it enumerates/for each format, while enumerating/
(to highlight that every enumerated format must carry the flag)

>+     format.

s/format/formats/

>+
> 3. The client may use :c:func:`VIDIOC_ENUM_FRAMESIZES` to detect supported
>    resolutions for a given format, passing desired pixel format in
>    :c:type:`v4l2_frmsizeenum`'s ``pixel_format``.
>diff --git a/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst b/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst
>index 3adb3d205531..510d2a6700aa 100644
>--- a/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst
>+++ b/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst
>@@ -234,6 +234,16 @@ the ``mbus_code`` field is handled differently:
> 	valid. The buffer consists of ``height`` lines, each having ``width``
> 	Data Units of data and the offset (in bytes) between the beginning of
> 	each two consecutive lines is ``bytesperline``.
>+    * - ``V4L2_FMT_FLAG_ENUM_ALL_FORMATS``
>+      - 0x0400
>+      - Set by userland application to enumerate all possible pixels formats

s/application/applications/
s/pixels/pixel/

>+        without taking care of any configuration done on OUTPUT or CAPTURE
>+        queues.

s/any configuration done on OUTPUT or CAPTURE queues/
   any OUTPUT or CAPTURE queue configuration/

>+    * - ``V4L2_FMT_FLAG_ALL_FORMATS``
>+      - 0x0800
>+      - Set by driver to indicated that format has been enumerated because

s/driver to indicated that format has/
   the driver to indicate, that formats have/

>+        :ref:`V4L2_FMT_FLAG_ENUM_ALL_FORMATS <v4l2-pix-fmt-flag-set-csc>` has
>+        been set by userland application.

s/by/by the/

Regards,
Sebastian

>
> Return Value
> ============
>diff --git a/Documentation/userspace-api/media/videodev2.h.rst.exceptions b/Documentation/userspace-api/media/videodev2.h.rst.exceptions
>index bdc628e8c1d6..7a3a1e9dc055 100644
>--- a/Documentation/userspace-api/media/videodev2.h.rst.exceptions
>+++ b/Documentation/userspace-api/media/videodev2.h.rst.exceptions
>@@ -216,6 +216,8 @@ replace define V4L2_FMT_FLAG_CSC_YCBCR_ENC fmtdesc-flags
> replace define V4L2_FMT_FLAG_CSC_HSV_ENC fmtdesc-flags
> replace define V4L2_FMT_FLAG_CSC_QUANTIZATION fmtdesc-flags
> replace define V4L2_FMT_FLAG_META_LINE_BASED fmtdesc-flags
>+replace define V4L2_FMT_FLAG_ENUM_ALL_FORMATS fmtdesc-flags
>+replace define V4L2_FMT_FLAG_ALL_FORMATS fmtdesc-flags
>
> # V4L2 timecode types
> replace define V4L2_TC_TYPE_24FPS timecode-type
>diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
>index 4c76d17b4629..5785a98b6ba2 100644
>--- a/drivers/media/v4l2-core/v4l2-ioctl.c
>+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
>@@ -1569,6 +1569,7 @@ static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
> 	int ret = check_fmt(file, p->type);
> 	u32 mbus_code;
> 	u32 cap_mask;
>+	u32 flags;
>
> 	if (ret)
> 		return ret;
>@@ -1578,8 +1579,10 @@ static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
> 		p->mbus_code = 0;
>
> 	mbus_code = p->mbus_code;
>+	flags = p->flags & V4L2_FMT_FLAG_ENUM_ALL_FORMATS;
> 	memset_after(p, 0, type);
> 	p->mbus_code = mbus_code;
>+	p->flags = flags;
>
> 	switch (p->type) {
> 	case V4L2_BUF_TYPE_VIDEO_CAPTURE:
>diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
>index fe6b67e83751..b6a5da79ba21 100644
>--- a/include/uapi/linux/videodev2.h
>+++ b/include/uapi/linux/videodev2.h
>@@ -886,6 +886,8 @@ struct v4l2_fmtdesc {
> #define V4L2_FMT_FLAG_CSC_HSV_ENC		V4L2_FMT_FLAG_CSC_YCBCR_ENC
> #define V4L2_FMT_FLAG_CSC_QUANTIZATION		0x0100
> #define V4L2_FMT_FLAG_META_LINE_BASED		0x0200
>+#define V4L2_FMT_FLAG_ENUM_ALL_FORMATS		0x0400
>+#define V4L2_FMT_FLAG_ALL_FORMATS		0x0800
>
> 	/* Frame Size and frame rate enumeration */
> /*
>-- 
>2.43.0
>
>_______________________________________________
>Kernel mailing list -- kernel@mailman.collabora.com
>To unsubscribe send an email to kernel-leave@mailman.collabora.com
>This list is managed by https://mailman.collabora.com

_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 1/2] media: videodev2: Add flags to unconditionnaly enumerate pixels formats
  2024-07-10 12:40   ` Sebastian Fricke
@ 2024-07-10 12:55     ` Sebastian Fricke
  0 siblings, 0 replies; 11+ messages in thread
From: Sebastian Fricke @ 2024-07-10 12:55 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: mchehab, ezequiel, hverkuil-cisco, linux-media, linux-kernel,
	linux-rockchip, kernel

Hey,

also this didn't reach patchwork because the mail address of the media
mailing list is wrong: linux-media@vger.kernel.or,

Regards,
Sebastian

On 10.07.2024 14:40, Sebastian Fricke wrote:
>Hey Benjamin,
>
>On 09.07.2024 18:17, Benjamin Gaignard wrote:
>>Add new flags to allow enumerate all pixels formats when
>
>s/enumerate all pixels formats/enumeration of pixel formats,/
>
>>calling VIDIOC_ENUM_FMT ioctl.
>>When this V4L2_FMT_FLAG_ENUM_ALL_FORMATS flag is set drivers must
>>ignore the configuration and return the hardware supported pixel
>>formats for the specified queue.
>>To distinguish this partical enumeration case V4L2_FMT_FLAG_ALL_FORMATS
>
>s/partical/partiuclar/
>
>>flag must be set be drivers so user space applications can know that
>
>s/be/by the/
>
>>drivers support this feature.
>
>s/so user space applications can know that drivers support this feature./
>  , to highlight support for this feature to user space applications.
>
>>This will permit to discover which pixels formats are supported
>
>s/pixels/pixel/
>
>>without setting codec-specific information so userland can more easily
>>knows if the driver suit well to what it needs.
>
>s/knows/know/
>s/suit well to what it needs/suits its needs well/
>
>>The main target are stateless decoders so update the documentation
>>about how use this flag.
>
>s/how/how to/
>
>>
>>Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
>>---
>>changes in version 3:
>>- Add a flag to inform userspace application that driver
>> as take care of the flag.
>>
>>.../userspace-api/media/v4l/dev-stateless-decoder.rst  |  6 ++++++
>>.../userspace-api/media/v4l/vidioc-enum-fmt.rst        | 10 ++++++++++
>>.../userspace-api/media/videodev2.h.rst.exceptions     |  2 ++
>>drivers/media/v4l2-core/v4l2-ioctl.c                   |  3 +++
>>include/uapi/linux/videodev2.h                         |  2 ++
>>5 files changed, 23 insertions(+)
>>
>>diff --git a/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst b/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst
>>index 35ed05f2695e..de006a7fd02a 100644
>>--- a/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst
>>+++ b/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst
>>@@ -58,6 +58,12 @@ Querying capabilities
>>     default values for these controls being used, and a returned set of formats
>>     that may not be usable for the media the client is trying to decode.
>>
>>+   * If ``V4L2_FMT_FLAG_ENUM_ALL_FORMATS`` flag is set the driver must enumerate
>
>s/If/If the/
>
>>+     all the supported formats without taking care of codec-dependent controls
>>+     set on ``OUTPUT`` queue. To indicate that the driver has take care of this
>
>s/set on/set on the/
>s/has take/has taken/
>
>>+     flag it must set ``V4L2_FMT_FLAG_ALL_FORMATS`` flag when it enumerates the
>
>s/set/set the/
>s/when it enumerates/for each format, while enumerating/
>(to highlight that every enumerated format must carry the flag)
>
>>+     format.
>
>s/format/formats/
>
>>+
>>3. The client may use :c:func:`VIDIOC_ENUM_FRAMESIZES` to detect supported
>>   resolutions for a given format, passing desired pixel format in
>>   :c:type:`v4l2_frmsizeenum`'s ``pixel_format``.
>>diff --git a/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst b/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst
>>index 3adb3d205531..510d2a6700aa 100644
>>--- a/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst
>>+++ b/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst
>>@@ -234,6 +234,16 @@ the ``mbus_code`` field is handled differently:
>>	valid. The buffer consists of ``height`` lines, each having ``width``
>>	Data Units of data and the offset (in bytes) between the beginning of
>>	each two consecutive lines is ``bytesperline``.
>>+    * - ``V4L2_FMT_FLAG_ENUM_ALL_FORMATS``
>>+      - 0x0400
>>+      - Set by userland application to enumerate all possible pixels formats
>
>s/application/applications/
>s/pixels/pixel/
>
>>+        without taking care of any configuration done on OUTPUT or CAPTURE
>>+        queues.
>
>s/any configuration done on OUTPUT or CAPTURE queues/
>  any OUTPUT or CAPTURE queue configuration/
>
>>+    * - ``V4L2_FMT_FLAG_ALL_FORMATS``
>>+      - 0x0800
>>+      - Set by driver to indicated that format has been enumerated because
>
>s/driver to indicated that format has/
>  the driver to indicate, that formats have/
>
>>+        :ref:`V4L2_FMT_FLAG_ENUM_ALL_FORMATS <v4l2-pix-fmt-flag-set-csc>` has
>>+        been set by userland application.
>
>s/by/by the/
>
>Regards,
>Sebastian
>
>>
>>Return Value
>>============
>>diff --git a/Documentation/userspace-api/media/videodev2.h.rst.exceptions b/Documentation/userspace-api/media/videodev2.h.rst.exceptions
>>index bdc628e8c1d6..7a3a1e9dc055 100644
>>--- a/Documentation/userspace-api/media/videodev2.h.rst.exceptions
>>+++ b/Documentation/userspace-api/media/videodev2.h.rst.exceptions
>>@@ -216,6 +216,8 @@ replace define V4L2_FMT_FLAG_CSC_YCBCR_ENC fmtdesc-flags
>>replace define V4L2_FMT_FLAG_CSC_HSV_ENC fmtdesc-flags
>>replace define V4L2_FMT_FLAG_CSC_QUANTIZATION fmtdesc-flags
>>replace define V4L2_FMT_FLAG_META_LINE_BASED fmtdesc-flags
>>+replace define V4L2_FMT_FLAG_ENUM_ALL_FORMATS fmtdesc-flags
>>+replace define V4L2_FMT_FLAG_ALL_FORMATS fmtdesc-flags
>>
>># V4L2 timecode types
>>replace define V4L2_TC_TYPE_24FPS timecode-type
>>diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
>>index 4c76d17b4629..5785a98b6ba2 100644
>>--- a/drivers/media/v4l2-core/v4l2-ioctl.c
>>+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
>>@@ -1569,6 +1569,7 @@ static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
>>	int ret = check_fmt(file, p->type);
>>	u32 mbus_code;
>>	u32 cap_mask;
>>+	u32 flags;
>>
>>	if (ret)
>>		return ret;
>>@@ -1578,8 +1579,10 @@ static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
>>		p->mbus_code = 0;
>>
>>	mbus_code = p->mbus_code;
>>+	flags = p->flags & V4L2_FMT_FLAG_ENUM_ALL_FORMATS;
>>	memset_after(p, 0, type);
>>	p->mbus_code = mbus_code;
>>+	p->flags = flags;
>>
>>	switch (p->type) {
>>	case V4L2_BUF_TYPE_VIDEO_CAPTURE:
>>diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
>>index fe6b67e83751..b6a5da79ba21 100644
>>--- a/include/uapi/linux/videodev2.h
>>+++ b/include/uapi/linux/videodev2.h
>>@@ -886,6 +886,8 @@ struct v4l2_fmtdesc {
>>#define V4L2_FMT_FLAG_CSC_HSV_ENC		V4L2_FMT_FLAG_CSC_YCBCR_ENC
>>#define V4L2_FMT_FLAG_CSC_QUANTIZATION		0x0100
>>#define V4L2_FMT_FLAG_META_LINE_BASED		0x0200
>>+#define V4L2_FMT_FLAG_ENUM_ALL_FORMATS		0x0400
>>+#define V4L2_FMT_FLAG_ALL_FORMATS		0x0800
>>
>>	/* Frame Size and frame rate enumeration */
>>/*
>>-- 
>>2.43.0
>>
>>_______________________________________________
>>Kernel mailing list -- kernel@mailman.collabora.com
>>To unsubscribe send an email to kernel-leave@mailman.collabora.com
>>This list is managed by https://mailman.collabora.com

_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v3 1/2] media: videodev2: Add flags to unconditionnaly enumerate pixels formats
  2024-07-12 10:29 [PATCH v3 0/2] Enumerate all pixels formats Benjamin Gaignard
@ 2024-07-12 10:29 ` Benjamin Gaignard
  2024-07-12 16:31   ` Jacopo Mondi
  2024-07-15 14:23   ` Markus Elfring
  0 siblings, 2 replies; 11+ messages in thread
From: Benjamin Gaignard @ 2024-07-12 10:29 UTC (permalink / raw)
  To: mchehab, ezequiel, hverkuil-cisco
  Cc: linux-media, linux-kernel, linux-rockchip, kernel,
	Benjamin Gaignard

Add new flags to enumerate all pixels formats when calling VIDIOC_ENUM_FMT ioctl.
When this V4L2_FMT_FLAG_ENUM_ALL_FORMATS flag is set drivers must
ignore the configuration and return the hardware supported pixel
formats for the specified queue.
To distinguish this particular enumeration case V4L2_FMT_FLAG_ALL_FORMATS
flag must be set by the drivers to highlight support of this feature
to user space applications.
This will permit to discover which pixel formats are supported
without setting codec-specific information so userland can more easily
know if the driver suits its needs well.
The main target are stateless decoders so update the documentation
about how to use this flag.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
changes in version 3:
- Add a flag to inform userspace application that driver
  as take care of the flag.

 .../userspace-api/media/v4l/dev-stateless-decoder.rst    | 6 ++++++
 .../userspace-api/media/v4l/vidioc-enum-fmt.rst          | 9 +++++++++
 .../userspace-api/media/videodev2.h.rst.exceptions       | 2 ++
 drivers/media/v4l2-core/v4l2-ioctl.c                     | 3 +++
 include/uapi/linux/videodev2.h                           | 2 ++
 5 files changed, 22 insertions(+)

diff --git a/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst b/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst
index 35ed05f2695e..b0b657de910d 100644
--- a/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst
+++ b/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst
@@ -58,6 +58,12 @@ Querying capabilities
      default values for these controls being used, and a returned set of formats
      that may not be usable for the media the client is trying to decode.
 
+   * If the ``V4L2_FMT_FLAG_ENUM_ALL_FORMATS`` flag is set the driver must enumerate
+     all the supported formats without taking care of codec-dependent controls
+     set on the ``OUTPUT`` queue. To indicate that the driver has take care of this
+     flag it must set ``V4L2_FMT_FLAG_ALL_FORMATS`` flag for each format while
+     enumerating.
+
 3. The client may use :c:func:`VIDIOC_ENUM_FRAMESIZES` to detect supported
    resolutions for a given format, passing desired pixel format in
    :c:type:`v4l2_frmsizeenum`'s ``pixel_format``.
diff --git a/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst b/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst
index 3adb3d205531..0399e0fc09b3 100644
--- a/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst
+++ b/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst
@@ -234,6 +234,15 @@ the ``mbus_code`` field is handled differently:
 	valid. The buffer consists of ``height`` lines, each having ``width``
 	Data Units of data and the offset (in bytes) between the beginning of
 	each two consecutive lines is ``bytesperline``.
+    * - ``V4L2_FMT_FLAG_ENUM_ALL_FORMATS``
+      - 0x0400
+      - Set by userland applications to enumerate all possible pixel formats
+        without taking care of any OUTPUT or CAPTURE queue configuration.
+    * - ``V4L2_FMT_FLAG_ALL_FORMATS``
+      - 0x0800
+      - Set by the driver to indicated that format have been enumerated because
+        :ref:`V4L2_FMT_FLAG_ENUM_ALL_FORMATS <v4l2-pix-fmt-flag-set-csc>` has
+        been set by the userland application.
 
 Return Value
 ============
diff --git a/Documentation/userspace-api/media/videodev2.h.rst.exceptions b/Documentation/userspace-api/media/videodev2.h.rst.exceptions
index bdc628e8c1d6..7a3a1e9dc055 100644
--- a/Documentation/userspace-api/media/videodev2.h.rst.exceptions
+++ b/Documentation/userspace-api/media/videodev2.h.rst.exceptions
@@ -216,6 +216,8 @@ replace define V4L2_FMT_FLAG_CSC_YCBCR_ENC fmtdesc-flags
 replace define V4L2_FMT_FLAG_CSC_HSV_ENC fmtdesc-flags
 replace define V4L2_FMT_FLAG_CSC_QUANTIZATION fmtdesc-flags
 replace define V4L2_FMT_FLAG_META_LINE_BASED fmtdesc-flags
+replace define V4L2_FMT_FLAG_ENUM_ALL_FORMATS fmtdesc-flags
+replace define V4L2_FMT_FLAG_ALL_FORMATS fmtdesc-flags
 
 # V4L2 timecode types
 replace define V4L2_TC_TYPE_24FPS timecode-type
diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
index 4c76d17b4629..5785a98b6ba2 100644
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
@@ -1569,6 +1569,7 @@ static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
 	int ret = check_fmt(file, p->type);
 	u32 mbus_code;
 	u32 cap_mask;
+	u32 flags;
 
 	if (ret)
 		return ret;
@@ -1578,8 +1579,10 @@ static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
 		p->mbus_code = 0;
 
 	mbus_code = p->mbus_code;
+	flags = p->flags & V4L2_FMT_FLAG_ENUM_ALL_FORMATS;
 	memset_after(p, 0, type);
 	p->mbus_code = mbus_code;
+	p->flags = flags;
 
 	switch (p->type) {
 	case V4L2_BUF_TYPE_VIDEO_CAPTURE:
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index fe6b67e83751..b6a5da79ba21 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -886,6 +886,8 @@ struct v4l2_fmtdesc {
 #define V4L2_FMT_FLAG_CSC_HSV_ENC		V4L2_FMT_FLAG_CSC_YCBCR_ENC
 #define V4L2_FMT_FLAG_CSC_QUANTIZATION		0x0100
 #define V4L2_FMT_FLAG_META_LINE_BASED		0x0200
+#define V4L2_FMT_FLAG_ENUM_ALL_FORMATS		0x0400
+#define V4L2_FMT_FLAG_ALL_FORMATS		0x0800
 
 	/* Frame Size and frame rate enumeration */
 /*
-- 
2.43.0


_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 1/2] media: videodev2: Add flags to unconditionnaly enumerate pixels formats
  2024-07-12 10:29 ` [PATCH v3 1/2] media: videodev2: Add flags to unconditionnaly enumerate " Benjamin Gaignard
@ 2024-07-12 16:31   ` Jacopo Mondi
  2024-07-15  6:09     ` Benjamin Gaignard
  2024-07-15 14:23   ` Markus Elfring
  1 sibling, 1 reply; 11+ messages in thread
From: Jacopo Mondi @ 2024-07-12 16:31 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: mchehab, ezequiel, hverkuil-cisco, linux-media, linux-kernel,
	linux-rockchip, kernel

Hi Benjamin

On Fri, Jul 12, 2024 at 12:29:59PM GMT, Benjamin Gaignard wrote:
> Add new flags to enumerate all pixels formats when calling VIDIOC_ENUM_FMT ioctl.
> When this V4L2_FMT_FLAG_ENUM_ALL_FORMATS flag is set drivers must
> ignore the configuration and return the hardware supported pixel
> formats for the specified queue.
> To distinguish this particular enumeration case V4L2_FMT_FLAG_ALL_FORMATS
> flag must be set by the drivers to highlight support of this feature
> to user space applications.
> This will permit to discover which pixel formats are supported
> without setting codec-specific information so userland can more easily
> know if the driver suits its needs well.
> The main target are stateless decoders so update the documentation
> about how to use this flag.
>
> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
> ---
> changes in version 3:
> - Add a flag to inform userspace application that driver
>   as take care of the flag.
>
>  .../userspace-api/media/v4l/dev-stateless-decoder.rst    | 6 ++++++
>  .../userspace-api/media/v4l/vidioc-enum-fmt.rst          | 9 +++++++++
>  .../userspace-api/media/videodev2.h.rst.exceptions       | 2 ++
>  drivers/media/v4l2-core/v4l2-ioctl.c                     | 3 +++
>  include/uapi/linux/videodev2.h                           | 2 ++
>  5 files changed, 22 insertions(+)
>
> diff --git a/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst b/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst
> index 35ed05f2695e..b0b657de910d 100644
> --- a/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst
> +++ b/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst
> @@ -58,6 +58,12 @@ Querying capabilities
>       default values for these controls being used, and a returned set of formats
>       that may not be usable for the media the client is trying to decode.
>
> +   * If the ``V4L2_FMT_FLAG_ENUM_ALL_FORMATS`` flag is set the driver must enumerate
> +     all the supported formats without taking care of codec-dependent controls
> +     set on the ``OUTPUT`` queue. To indicate that the driver has take care of this
> +     flag it must set ``V4L2_FMT_FLAG_ALL_FORMATS`` flag for each format while
> +     enumerating.
> +
>  3. The client may use :c:func:`VIDIOC_ENUM_FRAMESIZES` to detect supported
>     resolutions for a given format, passing desired pixel format in
>     :c:type:`v4l2_frmsizeenum`'s ``pixel_format``.
> diff --git a/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst b/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst
> index 3adb3d205531..0399e0fc09b3 100644
> --- a/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst
> +++ b/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst
> @@ -234,6 +234,15 @@ the ``mbus_code`` field is handled differently:
>  	valid. The buffer consists of ``height`` lines, each having ``width``
>  	Data Units of data and the offset (in bytes) between the beginning of
>  	each two consecutive lines is ``bytesperline``.
> +    * - ``V4L2_FMT_FLAG_ENUM_ALL_FORMATS``
> +      - 0x0400
> +      - Set by userland applications to enumerate all possible pixel formats
> +        without taking care of any OUTPUT or CAPTURE queue configuration.

This seems to be only relevant for codecs and m2m devices.

For 'regular' capture (and I presume output) devices isn't the default
behaviour to enumerate all pixel formats, and userspace can decide to
restrict them by providing a media bus code (if the device reports the
V4L2_CAP_IO_MC capability)


> +    * - ``V4L2_FMT_FLAG_ALL_FORMATS``
> +      - 0x0800
> +      - Set by the driver to indicated that format have been enumerated because
> +        :ref:`V4L2_FMT_FLAG_ENUM_ALL_FORMATS <v4l2-pix-fmt-flag-set-csc>` has
> +        been set by the userland application.
>
>  Return Value
>  ============
> diff --git a/Documentation/userspace-api/media/videodev2.h.rst.exceptions b/Documentation/userspace-api/media/videodev2.h.rst.exceptions
> index bdc628e8c1d6..7a3a1e9dc055 100644
> --- a/Documentation/userspace-api/media/videodev2.h.rst.exceptions
> +++ b/Documentation/userspace-api/media/videodev2.h.rst.exceptions
> @@ -216,6 +216,8 @@ replace define V4L2_FMT_FLAG_CSC_YCBCR_ENC fmtdesc-flags
>  replace define V4L2_FMT_FLAG_CSC_HSV_ENC fmtdesc-flags
>  replace define V4L2_FMT_FLAG_CSC_QUANTIZATION fmtdesc-flags
>  replace define V4L2_FMT_FLAG_META_LINE_BASED fmtdesc-flags
> +replace define V4L2_FMT_FLAG_ENUM_ALL_FORMATS fmtdesc-flags
> +replace define V4L2_FMT_FLAG_ALL_FORMATS fmtdesc-flags
>
>  # V4L2 timecode types
>  replace define V4L2_TC_TYPE_24FPS timecode-type
> diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
> index 4c76d17b4629..5785a98b6ba2 100644
> --- a/drivers/media/v4l2-core/v4l2-ioctl.c
> +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
> @@ -1569,6 +1569,7 @@ static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
>  	int ret = check_fmt(file, p->type);
>  	u32 mbus_code;
>  	u32 cap_mask;
> +	u32 flags;
>
>  	if (ret)
>  		return ret;
> @@ -1578,8 +1579,10 @@ static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
>  		p->mbus_code = 0;
>
>  	mbus_code = p->mbus_code;
> +	flags = p->flags & V4L2_FMT_FLAG_ENUM_ALL_FORMATS;
>  	memset_after(p, 0, type);
>  	p->mbus_code = mbus_code;
> +	p->flags = flags;
>
>  	switch (p->type) {
>  	case V4L2_BUF_TYPE_VIDEO_CAPTURE:
> diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
> index fe6b67e83751..b6a5da79ba21 100644
> --- a/include/uapi/linux/videodev2.h
> +++ b/include/uapi/linux/videodev2.h
> @@ -886,6 +886,8 @@ struct v4l2_fmtdesc {
>  #define V4L2_FMT_FLAG_CSC_HSV_ENC		V4L2_FMT_FLAG_CSC_YCBCR_ENC
>  #define V4L2_FMT_FLAG_CSC_QUANTIZATION		0x0100
>  #define V4L2_FMT_FLAG_META_LINE_BASED		0x0200
> +#define V4L2_FMT_FLAG_ENUM_ALL_FORMATS		0x0400
> +#define V4L2_FMT_FLAG_ALL_FORMATS		0x0800
>
>  	/* Frame Size and frame rate enumeration */
>  /*
> --
> 2.43.0
>
>

_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 1/2] media: videodev2: Add flags to unconditionnaly enumerate pixels formats
  2024-07-12 16:31   ` Jacopo Mondi
@ 2024-07-15  6:09     ` Benjamin Gaignard
  2024-07-15 13:37       ` Jacopo Mondi
  0 siblings, 1 reply; 11+ messages in thread
From: Benjamin Gaignard @ 2024-07-15  6:09 UTC (permalink / raw)
  To: Jacopo Mondi
  Cc: mchehab, ezequiel, hverkuil-cisco, linux-media, linux-kernel,
	linux-rockchip, kernel


Le 12/07/2024 à 18:31, Jacopo Mondi a écrit :
> Hi Benjamin
>
> On Fri, Jul 12, 2024 at 12:29:59PM GMT, Benjamin Gaignard wrote:
>> Add new flags to enumerate all pixels formats when calling VIDIOC_ENUM_FMT ioctl.
>> When this V4L2_FMT_FLAG_ENUM_ALL_FORMATS flag is set drivers must
>> ignore the configuration and return the hardware supported pixel
>> formats for the specified queue.
>> To distinguish this particular enumeration case V4L2_FMT_FLAG_ALL_FORMATS
>> flag must be set by the drivers to highlight support of this feature
>> to user space applications.
>> This will permit to discover which pixel formats are supported
>> without setting codec-specific information so userland can more easily
>> know if the driver suits its needs well.
>> The main target are stateless decoders so update the documentation
>> about how to use this flag.
>>
>> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
>> ---
>> changes in version 3:
>> - Add a flag to inform userspace application that driver
>>    as take care of the flag.
>>
>>   .../userspace-api/media/v4l/dev-stateless-decoder.rst    | 6 ++++++
>>   .../userspace-api/media/v4l/vidioc-enum-fmt.rst          | 9 +++++++++
>>   .../userspace-api/media/videodev2.h.rst.exceptions       | 2 ++
>>   drivers/media/v4l2-core/v4l2-ioctl.c                     | 3 +++
>>   include/uapi/linux/videodev2.h                           | 2 ++
>>   5 files changed, 22 insertions(+)
>>
>> diff --git a/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst b/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst
>> index 35ed05f2695e..b0b657de910d 100644
>> --- a/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst
>> +++ b/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst
>> @@ -58,6 +58,12 @@ Querying capabilities
>>        default values for these controls being used, and a returned set of formats
>>        that may not be usable for the media the client is trying to decode.
>>
>> +   * If the ``V4L2_FMT_FLAG_ENUM_ALL_FORMATS`` flag is set the driver must enumerate
>> +     all the supported formats without taking care of codec-dependent controls
>> +     set on the ``OUTPUT`` queue. To indicate that the driver has take care of this
>> +     flag it must set ``V4L2_FMT_FLAG_ALL_FORMATS`` flag for each format while
>> +     enumerating.
>> +
>>   3. The client may use :c:func:`VIDIOC_ENUM_FRAMESIZES` to detect supported
>>      resolutions for a given format, passing desired pixel format in
>>      :c:type:`v4l2_frmsizeenum`'s ``pixel_format``.
>> diff --git a/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst b/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst
>> index 3adb3d205531..0399e0fc09b3 100644
>> --- a/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst
>> +++ b/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst
>> @@ -234,6 +234,15 @@ the ``mbus_code`` field is handled differently:
>>   	valid. The buffer consists of ``height`` lines, each having ``width``
>>   	Data Units of data and the offset (in bytes) between the beginning of
>>   	each two consecutive lines is ``bytesperline``.
>> +    * - ``V4L2_FMT_FLAG_ENUM_ALL_FORMATS``
>> +      - 0x0400
>> +      - Set by userland applications to enumerate all possible pixel formats
>> +        without taking care of any OUTPUT or CAPTURE queue configuration.
> This seems to be only relevant for codecs and m2m devices.
>
> For 'regular' capture (and I presume output) devices isn't the default
> behaviour to enumerate all pixel formats, and userspace can decide to
> restrict them by providing a media bus code (if the device reports the
> V4L2_CAP_IO_MC capability)

Yes is targeting codecs because they have two queues.
When device have only one queue, like 'regular' capture devices,
pixel enumeration doesn't have to take care of the other queue
configuration because it doesn't exist.

>
>
>> +    * - ``V4L2_FMT_FLAG_ALL_FORMATS``
>> +      - 0x0800
>> +      - Set by the driver to indicated that format have been enumerated because
>> +        :ref:`V4L2_FMT_FLAG_ENUM_ALL_FORMATS <v4l2-pix-fmt-flag-set-csc>` has
>> +        been set by the userland application.
>>
>>   Return Value
>>   ============
>> diff --git a/Documentation/userspace-api/media/videodev2.h.rst.exceptions b/Documentation/userspace-api/media/videodev2.h.rst.exceptions
>> index bdc628e8c1d6..7a3a1e9dc055 100644
>> --- a/Documentation/userspace-api/media/videodev2.h.rst.exceptions
>> +++ b/Documentation/userspace-api/media/videodev2.h.rst.exceptions
>> @@ -216,6 +216,8 @@ replace define V4L2_FMT_FLAG_CSC_YCBCR_ENC fmtdesc-flags
>>   replace define V4L2_FMT_FLAG_CSC_HSV_ENC fmtdesc-flags
>>   replace define V4L2_FMT_FLAG_CSC_QUANTIZATION fmtdesc-flags
>>   replace define V4L2_FMT_FLAG_META_LINE_BASED fmtdesc-flags
>> +replace define V4L2_FMT_FLAG_ENUM_ALL_FORMATS fmtdesc-flags
>> +replace define V4L2_FMT_FLAG_ALL_FORMATS fmtdesc-flags
>>
>>   # V4L2 timecode types
>>   replace define V4L2_TC_TYPE_24FPS timecode-type
>> diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
>> index 4c76d17b4629..5785a98b6ba2 100644
>> --- a/drivers/media/v4l2-core/v4l2-ioctl.c
>> +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
>> @@ -1569,6 +1569,7 @@ static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
>>   	int ret = check_fmt(file, p->type);
>>   	u32 mbus_code;
>>   	u32 cap_mask;
>> +	u32 flags;
>>
>>   	if (ret)
>>   		return ret;
>> @@ -1578,8 +1579,10 @@ static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
>>   		p->mbus_code = 0;
>>
>>   	mbus_code = p->mbus_code;
>> +	flags = p->flags & V4L2_FMT_FLAG_ENUM_ALL_FORMATS;
>>   	memset_after(p, 0, type);
>>   	p->mbus_code = mbus_code;
>> +	p->flags = flags;
>>
>>   	switch (p->type) {
>>   	case V4L2_BUF_TYPE_VIDEO_CAPTURE:
>> diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
>> index fe6b67e83751..b6a5da79ba21 100644
>> --- a/include/uapi/linux/videodev2.h
>> +++ b/include/uapi/linux/videodev2.h
>> @@ -886,6 +886,8 @@ struct v4l2_fmtdesc {
>>   #define V4L2_FMT_FLAG_CSC_HSV_ENC		V4L2_FMT_FLAG_CSC_YCBCR_ENC
>>   #define V4L2_FMT_FLAG_CSC_QUANTIZATION		0x0100
>>   #define V4L2_FMT_FLAG_META_LINE_BASED		0x0200
>> +#define V4L2_FMT_FLAG_ENUM_ALL_FORMATS		0x0400
>> +#define V4L2_FMT_FLAG_ALL_FORMATS		0x0800
>>
>>   	/* Frame Size and frame rate enumeration */
>>   /*
>> --
>> 2.43.0
>>
>>

_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 1/2] media: videodev2: Add flags to unconditionnaly enumerate pixels formats
  2024-07-15  6:09     ` Benjamin Gaignard
@ 2024-07-15 13:37       ` Jacopo Mondi
  2024-07-15 13:47         ` Benjamin Gaignard
  0 siblings, 1 reply; 11+ messages in thread
From: Jacopo Mondi @ 2024-07-15 13:37 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: Jacopo Mondi, mchehab, ezequiel, hverkuil-cisco, linux-media,
	linux-kernel, linux-rockchip, kernel

Hi Benjamin

On Mon, Jul 15, 2024 at 08:09:55AM GMT, Benjamin Gaignard wrote:
>
> Le 12/07/2024 à 18:31, Jacopo Mondi a écrit :
> > Hi Benjamin
> >
> > On Fri, Jul 12, 2024 at 12:29:59PM GMT, Benjamin Gaignard wrote:
> > > Add new flags to enumerate all pixels formats when calling VIDIOC_ENUM_FMT ioctl.
> > > When this V4L2_FMT_FLAG_ENUM_ALL_FORMATS flag is set drivers must
> > > ignore the configuration and return the hardware supported pixel
> > > formats for the specified queue.
> > > To distinguish this particular enumeration case V4L2_FMT_FLAG_ALL_FORMATS
> > > flag must be set by the drivers to highlight support of this feature
> > > to user space applications.
> > > This will permit to discover which pixel formats are supported
> > > without setting codec-specific information so userland can more easily
> > > know if the driver suits its needs well.
> > > The main target are stateless decoders so update the documentation
> > > about how to use this flag.
> > >
> > > Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
> > > ---
> > > changes in version 3:
> > > - Add a flag to inform userspace application that driver
> > >    as take care of the flag.
> > >
> > >   .../userspace-api/media/v4l/dev-stateless-decoder.rst    | 6 ++++++
> > >   .../userspace-api/media/v4l/vidioc-enum-fmt.rst          | 9 +++++++++
> > >   .../userspace-api/media/videodev2.h.rst.exceptions       | 2 ++
> > >   drivers/media/v4l2-core/v4l2-ioctl.c                     | 3 +++
> > >   include/uapi/linux/videodev2.h                           | 2 ++
> > >   5 files changed, 22 insertions(+)
> > >
> > > diff --git a/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst b/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst
> > > index 35ed05f2695e..b0b657de910d 100644
> > > --- a/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst
> > > +++ b/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst
> > > @@ -58,6 +58,12 @@ Querying capabilities
> > >        default values for these controls being used, and a returned set of formats
> > >        that may not be usable for the media the client is trying to decode.
> > >
> > > +   * If the ``V4L2_FMT_FLAG_ENUM_ALL_FORMATS`` flag is set the driver must enumerate
> > > +     all the supported formats without taking care of codec-dependent controls
> > > +     set on the ``OUTPUT`` queue. To indicate that the driver has take care of this
> > > +     flag it must set ``V4L2_FMT_FLAG_ALL_FORMATS`` flag for each format while
> > > +     enumerating.
> > > +
> > >   3. The client may use :c:func:`VIDIOC_ENUM_FRAMESIZES` to detect supported
> > >      resolutions for a given format, passing desired pixel format in
> > >      :c:type:`v4l2_frmsizeenum`'s ``pixel_format``.
> > > diff --git a/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst b/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst
> > > index 3adb3d205531..0399e0fc09b3 100644
> > > --- a/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst
> > > +++ b/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst
> > > @@ -234,6 +234,15 @@ the ``mbus_code`` field is handled differently:
> > >   	valid. The buffer consists of ``height`` lines, each having ``width``
> > >   	Data Units of data and the offset (in bytes) between the beginning of
> > >   	each two consecutive lines is ``bytesperline``.
> > > +    * - ``V4L2_FMT_FLAG_ENUM_ALL_FORMATS``
> > > +      - 0x0400
> > > +      - Set by userland applications to enumerate all possible pixel formats
> > > +        without taking care of any OUTPUT or CAPTURE queue configuration.
> > This seems to be only relevant for codecs and m2m devices.
> >
> > For 'regular' capture (and I presume output) devices isn't the default
> > behaviour to enumerate all pixel formats, and userspace can decide to
> > restrict them by providing a media bus code (if the device reports the
> > V4L2_CAP_IO_MC capability)
>
> Yes is targeting codecs because they have two queues.

Well, m2m devices in general then

> When device have only one queue, like 'regular' capture devices,
> pixel enumeration doesn't have to take care of the other queue
> configuration because it doesn't exist.
>

This probably needs to be captured in the description here ?
We already have flags which apply only to some device types, and
that's specified in the flag description

    * - ``V4L2_FMT_FLAG_CSC_QUANTIZATION``
      - 0x0100
      - The driver allows the application to try to change the default
	quantization. This flag is relevant only for capture devices.

> >
> >
> > > +    * - ``V4L2_FMT_FLAG_ALL_FORMATS``
> > > +      - 0x0800
> > > +      - Set by the driver to indicated that format have been enumerated because
> > > +        :ref:`V4L2_FMT_FLAG_ENUM_ALL_FORMATS <v4l2-pix-fmt-flag-set-csc>` has
> > > +        been set by the userland application.
> > >
> > >   Return Value
> > >   ============
> > > diff --git a/Documentation/userspace-api/media/videodev2.h.rst.exceptions b/Documentation/userspace-api/media/videodev2.h.rst.exceptions
> > > index bdc628e8c1d6..7a3a1e9dc055 100644
> > > --- a/Documentation/userspace-api/media/videodev2.h.rst.exceptions
> > > +++ b/Documentation/userspace-api/media/videodev2.h.rst.exceptions
> > > @@ -216,6 +216,8 @@ replace define V4L2_FMT_FLAG_CSC_YCBCR_ENC fmtdesc-flags
> > >   replace define V4L2_FMT_FLAG_CSC_HSV_ENC fmtdesc-flags
> > >   replace define V4L2_FMT_FLAG_CSC_QUANTIZATION fmtdesc-flags
> > >   replace define V4L2_FMT_FLAG_META_LINE_BASED fmtdesc-flags
> > > +replace define V4L2_FMT_FLAG_ENUM_ALL_FORMATS fmtdesc-flags
> > > +replace define V4L2_FMT_FLAG_ALL_FORMATS fmtdesc-flags
> > >
> > >   # V4L2 timecode types
> > >   replace define V4L2_TC_TYPE_24FPS timecode-type
> > > diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
> > > index 4c76d17b4629..5785a98b6ba2 100644
> > > --- a/drivers/media/v4l2-core/v4l2-ioctl.c
> > > +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
> > > @@ -1569,6 +1569,7 @@ static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
> > >   	int ret = check_fmt(file, p->type);
> > >   	u32 mbus_code;
> > >   	u32 cap_mask;
> > > +	u32 flags;
> > >
> > >   	if (ret)
> > >   		return ret;
> > > @@ -1578,8 +1579,10 @@ static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
> > >   		p->mbus_code = 0;
> > >
> > >   	mbus_code = p->mbus_code;
> > > +	flags = p->flags & V4L2_FMT_FLAG_ENUM_ALL_FORMATS;
> > >   	memset_after(p, 0, type);
> > >   	p->mbus_code = mbus_code;
> > > +	p->flags = flags;
> > >
> > >   	switch (p->type) {
> > >   	case V4L2_BUF_TYPE_VIDEO_CAPTURE:
> > > diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
> > > index fe6b67e83751..b6a5da79ba21 100644
> > > --- a/include/uapi/linux/videodev2.h
> > > +++ b/include/uapi/linux/videodev2.h
> > > @@ -886,6 +886,8 @@ struct v4l2_fmtdesc {
> > >   #define V4L2_FMT_FLAG_CSC_HSV_ENC		V4L2_FMT_FLAG_CSC_YCBCR_ENC
> > >   #define V4L2_FMT_FLAG_CSC_QUANTIZATION		0x0100
> > >   #define V4L2_FMT_FLAG_META_LINE_BASED		0x0200
> > > +#define V4L2_FMT_FLAG_ENUM_ALL_FORMATS		0x0400
> > > +#define V4L2_FMT_FLAG_ALL_FORMATS		0x0800
> > >
> > >   	/* Frame Size and frame rate enumeration */
> > >   /*
> > > --
> > > 2.43.0
> > >
> > >
>

_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 1/2] media: videodev2: Add flags to unconditionnaly enumerate pixels formats
  2024-07-15 13:37       ` Jacopo Mondi
@ 2024-07-15 13:47         ` Benjamin Gaignard
  0 siblings, 0 replies; 11+ messages in thread
From: Benjamin Gaignard @ 2024-07-15 13:47 UTC (permalink / raw)
  To: Jacopo Mondi
  Cc: mchehab, ezequiel, hverkuil-cisco, linux-media, linux-kernel,
	linux-rockchip, kernel


Le 15/07/2024 à 15:37, Jacopo Mondi a écrit :
> Hi Benjamin
>
> On Mon, Jul 15, 2024 at 08:09:55AM GMT, Benjamin Gaignard wrote:
>> Le 12/07/2024 à 18:31, Jacopo Mondi a écrit :
>>> Hi Benjamin
>>>
>>> On Fri, Jul 12, 2024 at 12:29:59PM GMT, Benjamin Gaignard wrote:
>>>> Add new flags to enumerate all pixels formats when calling VIDIOC_ENUM_FMT ioctl.
>>>> When this V4L2_FMT_FLAG_ENUM_ALL_FORMATS flag is set drivers must
>>>> ignore the configuration and return the hardware supported pixel
>>>> formats for the specified queue.
>>>> To distinguish this particular enumeration case V4L2_FMT_FLAG_ALL_FORMATS
>>>> flag must be set by the drivers to highlight support of this feature
>>>> to user space applications.
>>>> This will permit to discover which pixel formats are supported
>>>> without setting codec-specific information so userland can more easily
>>>> know if the driver suits its needs well.
>>>> The main target are stateless decoders so update the documentation
>>>> about how to use this flag.
>>>>
>>>> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
>>>> ---
>>>> changes in version 3:
>>>> - Add a flag to inform userspace application that driver
>>>>     as take care of the flag.
>>>>
>>>>    .../userspace-api/media/v4l/dev-stateless-decoder.rst    | 6 ++++++
>>>>    .../userspace-api/media/v4l/vidioc-enum-fmt.rst          | 9 +++++++++
>>>>    .../userspace-api/media/videodev2.h.rst.exceptions       | 2 ++
>>>>    drivers/media/v4l2-core/v4l2-ioctl.c                     | 3 +++
>>>>    include/uapi/linux/videodev2.h                           | 2 ++
>>>>    5 files changed, 22 insertions(+)
>>>>
>>>> diff --git a/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst b/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst
>>>> index 35ed05f2695e..b0b657de910d 100644
>>>> --- a/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst
>>>> +++ b/Documentation/userspace-api/media/v4l/dev-stateless-decoder.rst
>>>> @@ -58,6 +58,12 @@ Querying capabilities
>>>>         default values for these controls being used, and a returned set of formats
>>>>         that may not be usable for the media the client is trying to decode.
>>>>
>>>> +   * If the ``V4L2_FMT_FLAG_ENUM_ALL_FORMATS`` flag is set the driver must enumerate
>>>> +     all the supported formats without taking care of codec-dependent controls
>>>> +     set on the ``OUTPUT`` queue. To indicate that the driver has take care of this
>>>> +     flag it must set ``V4L2_FMT_FLAG_ALL_FORMATS`` flag for each format while
>>>> +     enumerating.
>>>> +
>>>>    3. The client may use :c:func:`VIDIOC_ENUM_FRAMESIZES` to detect supported
>>>>       resolutions for a given format, passing desired pixel format in
>>>>       :c:type:`v4l2_frmsizeenum`'s ``pixel_format``.
>>>> diff --git a/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst b/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst
>>>> index 3adb3d205531..0399e0fc09b3 100644
>>>> --- a/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst
>>>> +++ b/Documentation/userspace-api/media/v4l/vidioc-enum-fmt.rst
>>>> @@ -234,6 +234,15 @@ the ``mbus_code`` field is handled differently:
>>>>    	valid. The buffer consists of ``height`` lines, each having ``width``
>>>>    	Data Units of data and the offset (in bytes) between the beginning of
>>>>    	each two consecutive lines is ``bytesperline``.
>>>> +    * - ``V4L2_FMT_FLAG_ENUM_ALL_FORMATS``
>>>> +      - 0x0400
>>>> +      - Set by userland applications to enumerate all possible pixel formats
>>>> +        without taking care of any OUTPUT or CAPTURE queue configuration.
>>> This seems to be only relevant for codecs and m2m devices.
>>>
>>> For 'regular' capture (and I presume output) devices isn't the default
>>> behaviour to enumerate all pixel formats, and userspace can decide to
>>> restrict them by providing a media bus code (if the device reports the
>>> V4L2_CAP_IO_MC capability)
>> Yes is targeting codecs because they have two queues.
> Well, m2m devices in general then
>
>> When device have only one queue, like 'regular' capture devices,
>> pixel enumeration doesn't have to take care of the other queue
>> configuration because it doesn't exist.
>>
> This probably needs to be captured in the description here ?
> We already have flags which apply only to some device types, and
> that's specified in the flag description
>
>      * - ``V4L2_FMT_FLAG_CSC_QUANTIZATION``
>        - 0x0100
>        - The driver allows the application to try to change the default
> 	quantization. This flag is relevant only for capture devices.

That makes sense I will update the flags description in the next version.

Thanks,
Benjamin

>
>>>
>>>> +    * - ``V4L2_FMT_FLAG_ALL_FORMATS``
>>>> +      - 0x0800
>>>> +      - Set by the driver to indicated that format have been enumerated because
>>>> +        :ref:`V4L2_FMT_FLAG_ENUM_ALL_FORMATS <v4l2-pix-fmt-flag-set-csc>` has
>>>> +        been set by the userland application.
>>>>
>>>>    Return Value
>>>>    ============
>>>> diff --git a/Documentation/userspace-api/media/videodev2.h.rst.exceptions b/Documentation/userspace-api/media/videodev2.h.rst.exceptions
>>>> index bdc628e8c1d6..7a3a1e9dc055 100644
>>>> --- a/Documentation/userspace-api/media/videodev2.h.rst.exceptions
>>>> +++ b/Documentation/userspace-api/media/videodev2.h.rst.exceptions
>>>> @@ -216,6 +216,8 @@ replace define V4L2_FMT_FLAG_CSC_YCBCR_ENC fmtdesc-flags
>>>>    replace define V4L2_FMT_FLAG_CSC_HSV_ENC fmtdesc-flags
>>>>    replace define V4L2_FMT_FLAG_CSC_QUANTIZATION fmtdesc-flags
>>>>    replace define V4L2_FMT_FLAG_META_LINE_BASED fmtdesc-flags
>>>> +replace define V4L2_FMT_FLAG_ENUM_ALL_FORMATS fmtdesc-flags
>>>> +replace define V4L2_FMT_FLAG_ALL_FORMATS fmtdesc-flags
>>>>
>>>>    # V4L2 timecode types
>>>>    replace define V4L2_TC_TYPE_24FPS timecode-type
>>>> diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
>>>> index 4c76d17b4629..5785a98b6ba2 100644
>>>> --- a/drivers/media/v4l2-core/v4l2-ioctl.c
>>>> +++ b/drivers/media/v4l2-core/v4l2-ioctl.c
>>>> @@ -1569,6 +1569,7 @@ static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
>>>>    	int ret = check_fmt(file, p->type);
>>>>    	u32 mbus_code;
>>>>    	u32 cap_mask;
>>>> +	u32 flags;
>>>>
>>>>    	if (ret)
>>>>    		return ret;
>>>> @@ -1578,8 +1579,10 @@ static int v4l_enum_fmt(const struct v4l2_ioctl_ops *ops,
>>>>    		p->mbus_code = 0;
>>>>
>>>>    	mbus_code = p->mbus_code;
>>>> +	flags = p->flags & V4L2_FMT_FLAG_ENUM_ALL_FORMATS;
>>>>    	memset_after(p, 0, type);
>>>>    	p->mbus_code = mbus_code;
>>>> +	p->flags = flags;
>>>>
>>>>    	switch (p->type) {
>>>>    	case V4L2_BUF_TYPE_VIDEO_CAPTURE:
>>>> diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
>>>> index fe6b67e83751..b6a5da79ba21 100644
>>>> --- a/include/uapi/linux/videodev2.h
>>>> +++ b/include/uapi/linux/videodev2.h
>>>> @@ -886,6 +886,8 @@ struct v4l2_fmtdesc {
>>>>    #define V4L2_FMT_FLAG_CSC_HSV_ENC		V4L2_FMT_FLAG_CSC_YCBCR_ENC
>>>>    #define V4L2_FMT_FLAG_CSC_QUANTIZATION		0x0100
>>>>    #define V4L2_FMT_FLAG_META_LINE_BASED		0x0200
>>>> +#define V4L2_FMT_FLAG_ENUM_ALL_FORMATS		0x0400
>>>> +#define V4L2_FMT_FLAG_ALL_FORMATS		0x0800
>>>>
>>>>    	/* Frame Size and frame rate enumeration */
>>>>    /*
>>>> --
>>>> 2.43.0
>>>>
>>>>

_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v3 1/2] media: videodev2: Add flags to unconditionnaly enumerate pixels formats
  2024-07-12 10:29 ` [PATCH v3 1/2] media: videodev2: Add flags to unconditionnaly enumerate " Benjamin Gaignard
  2024-07-12 16:31   ` Jacopo Mondi
@ 2024-07-15 14:23   ` Markus Elfring
  1 sibling, 0 replies; 11+ messages in thread
From: Markus Elfring @ 2024-07-15 14:23 UTC (permalink / raw)
  To: Benjamin Gaignard, linux-media, linux-rockchip, kernel,
	Ezequiel Garcia, Hans Verkuil, Mauro Carvalho Chehab
  Cc: LKML

> Add new flags to enumerate all pixels formats when calling VIDIOC_ENUM_FMT ioctl.
…

Will the word “unconditionally” be more appropriate for the next summary phrase?

Regards,
Markus

_______________________________________________
Linux-rockchip mailing list
Linux-rockchip@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-rockchip

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2024-07-15 14:23 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-07-09 16:17 [PATCH v3 0/2] Enumerate all pixels formats Benjamin Gaignard
2024-07-09 16:17 ` [PATCH v3 1/2] media: videodev2: Add flags to unconditionnaly enumerate " Benjamin Gaignard
2024-07-10 12:40   ` Sebastian Fricke
2024-07-10 12:55     ` Sebastian Fricke
2024-07-09 16:17 ` [PATCH v3 2/2] media: verisilicon: Use V4L2_FMT_FLAG_ENUM_ALL_FORMATS flag Benjamin Gaignard
  -- strict thread matches above, loose matches on Subject: below --
2024-07-12 10:29 [PATCH v3 0/2] Enumerate all pixels formats Benjamin Gaignard
2024-07-12 10:29 ` [PATCH v3 1/2] media: videodev2: Add flags to unconditionnaly enumerate " Benjamin Gaignard
2024-07-12 16:31   ` Jacopo Mondi
2024-07-15  6:09     ` Benjamin Gaignard
2024-07-15 13:37       ` Jacopo Mondi
2024-07-15 13:47         ` Benjamin Gaignard
2024-07-15 14:23   ` Markus Elfring

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox