All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 00/15] Move HEVC stateless controls out of staging
@ 2022-02-28 14:08 ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Benjamin Gaignard

This series aims to make HEVC uapi stable and usable for hardware
decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
and 2 out of the tree drivers (rkvdec and RPI).

After the remarks done on version 2, I have completely reworked to patches 
split so changelogs are meaningless. I have also drop "RFC" from the
titles.

Version 4:
- Add num_entry_point_offsets field in  struct v4l2_ctrl_hevc_slice_params
- Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
- Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
- Fix space/tab issue in kernel-doc
- Add patch to change data_bit_offset definition
- Fix hantro-media SPDX license
- put controls under stateless section in v4l2-ctrls-defs.c

At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.

Benjamin


Benjamin Gaignard (12):
  media: uapi: HEVC: Add missing fields in HEVC controls
  media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
    prefix
  media: uapi: HEVC: Add document uAPI structure
  media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS as a
    dynamic array
  media: uapi: Move parsed HEVC pixel format out of staging
  media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS control
  media: uapi: Move the HEVC stateless control type out of staging
  media: controls: Log HEVC stateless control in .std_log
  media: uapi: Create a dedicated header for Hantro control
  media: uapi: HEVC: fix padding in v4l2 control structures
  media: uapi: Change data_bit_offset definition
  media: uapi: move HEVC stateless controls out of staging

Hans Verkuil (3):
  videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
  v4l2-ctrls: add support for dynamically allocated arrays.
  vivid: add dynamic array test control

 .../userspace-api/media/drivers/hantro.rst    |   5 -
 .../media/v4l/ext-ctrls-codec-stateless.rst   | 833 ++++++++++++++++++
 .../media/v4l/ext-ctrls-codec.rst             | 780 ----------------
 .../media/v4l/pixfmt-compressed.rst           |   7 +-
 .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
 .../media/v4l/vidioc-queryctrl.rst            |   8 +
 .../media/videodev2.h.rst.exceptions          |   5 +
 .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
 drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
 drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
 drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
 drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
 drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
 drivers/staging/media/hantro/hantro_drv.c     |  27 +-
 drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
 drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
 .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
 .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
 include/media/hevc-ctrls.h                    | 250 ------
 include/media/v4l2-ctrls.h                    |  48 +-
 include/uapi/linux/hantro-media.h             |  19 +
 include/uapi/linux/v4l2-controls.h            | 439 +++++++++
 include/uapi/linux/videodev2.h                |  13 +
 23 files changed, 1697 insertions(+), 1170 deletions(-)
 delete mode 100644 include/media/hevc-ctrls.h
 create mode 100644 include/uapi/linux/hantro-media.h

-- 
2.32.0


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

* [PATCH v4 00/15] Move HEVC stateless controls out of staging
@ 2022-02-28 14:08 ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Benjamin Gaignard

This series aims to make HEVC uapi stable and usable for hardware
decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
and 2 out of the tree drivers (rkvdec and RPI).

After the remarks done on version 2, I have completely reworked to patches 
split so changelogs are meaningless. I have also drop "RFC" from the
titles.

Version 4:
- Add num_entry_point_offsets field in  struct v4l2_ctrl_hevc_slice_params
- Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
- Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
- Fix space/tab issue in kernel-doc
- Add patch to change data_bit_offset definition
- Fix hantro-media SPDX license
- put controls under stateless section in v4l2-ctrls-defs.c

At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.

Benjamin


Benjamin Gaignard (12):
  media: uapi: HEVC: Add missing fields in HEVC controls
  media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
    prefix
  media: uapi: HEVC: Add document uAPI structure
  media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS as a
    dynamic array
  media: uapi: Move parsed HEVC pixel format out of staging
  media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS control
  media: uapi: Move the HEVC stateless control type out of staging
  media: controls: Log HEVC stateless control in .std_log
  media: uapi: Create a dedicated header for Hantro control
  media: uapi: HEVC: fix padding in v4l2 control structures
  media: uapi: Change data_bit_offset definition
  media: uapi: move HEVC stateless controls out of staging

Hans Verkuil (3):
  videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
  v4l2-ctrls: add support for dynamically allocated arrays.
  vivid: add dynamic array test control

 .../userspace-api/media/drivers/hantro.rst    |   5 -
 .../media/v4l/ext-ctrls-codec-stateless.rst   | 833 ++++++++++++++++++
 .../media/v4l/ext-ctrls-codec.rst             | 780 ----------------
 .../media/v4l/pixfmt-compressed.rst           |   7 +-
 .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
 .../media/v4l/vidioc-queryctrl.rst            |   8 +
 .../media/videodev2.h.rst.exceptions          |   5 +
 .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
 drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
 drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
 drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
 drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
 drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
 drivers/staging/media/hantro/hantro_drv.c     |  27 +-
 drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
 drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
 .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
 .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
 include/media/hevc-ctrls.h                    | 250 ------
 include/media/v4l2-ctrls.h                    |  48 +-
 include/uapi/linux/hantro-media.h             |  19 +
 include/uapi/linux/v4l2-controls.h            | 439 +++++++++
 include/uapi/linux/videodev2.h                |  13 +
 23 files changed, 1697 insertions(+), 1170 deletions(-)
 delete mode 100644 include/media/hevc-ctrls.h
 create mode 100644 include/uapi/linux/hantro-media.h

-- 
2.32.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH v4 01/15] videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
  2022-02-28 14:08 ` Benjamin Gaignard
@ 2022-02-28 14:08   ` Benjamin Gaignard
  -1 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Hans Verkuil

From: Hans Verkuil <hverkuil-cisco@xs4all.nl>

Add a new flag that indicates that this control is a dynamically sized
array. Also document this flag.

Currently dynamically sized arrays are limited to one dimensional arrays,
but that might change in the future if there is a need for it.

The initial use-case of dynamic arrays are stateless codecs. A frame
can be divided in many slices, so you want to provide an array containing
slice information for each slice. Typically the number of slices is small,
but the standard allow for hundreds or thousands of slices. Dynamic arrays
are a good solution since sizing the array for the worst case would waste
substantial amounts of memory.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
---
 .../userspace-api/media/v4l/vidioc-queryctrl.rst          | 8 ++++++++
 include/uapi/linux/videodev2.h                            | 1 +
 2 files changed, 9 insertions(+)

diff --git a/Documentation/userspace-api/media/v4l/vidioc-queryctrl.rst b/Documentation/userspace-api/media/v4l/vidioc-queryctrl.rst
index 88f630252d98..a20dfa2a933b 100644
--- a/Documentation/userspace-api/media/v4l/vidioc-queryctrl.rst
+++ b/Documentation/userspace-api/media/v4l/vidioc-queryctrl.rst
@@ -625,6 +625,14 @@ See also the examples in :ref:`control`.
 	``V4L2_CTRL_FLAG_GRABBED`` flag when buffers are allocated or
 	streaming is in progress since most drivers do not support changing
 	the format in that case.
+    * - ``V4L2_CTRL_FLAG_DYNAMIC_ARRAY``
+      - 0x0800
+      - This control is a dynamically sized 1-dimensional array. It
+        behaves the same as a regular array, except that the number
+	of elements as reported by the ``elems`` field is between 1 and
+	``dims[0]``. So setting the control with a differently sized
+	array will change the ``elems`` field when the control is
+	queried afterwards.
 
 Return Value
 ============
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index df8b9c486ba1..e27c8eae78c9 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -1884,6 +1884,7 @@ struct v4l2_querymenu {
 #define V4L2_CTRL_FLAG_HAS_PAYLOAD	0x0100
 #define V4L2_CTRL_FLAG_EXECUTE_ON_WRITE	0x0200
 #define V4L2_CTRL_FLAG_MODIFY_LAYOUT	0x0400
+#define V4L2_CTRL_FLAG_DYNAMIC_ARRAY	0x0800
 
 /*  Query flags, to be ORed with the control ID */
 #define V4L2_CTRL_FLAG_NEXT_CTRL	0x80000000
-- 
2.32.0


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

* [PATCH v4 01/15] videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
@ 2022-02-28 14:08   ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Hans Verkuil

From: Hans Verkuil <hverkuil-cisco@xs4all.nl>

Add a new flag that indicates that this control is a dynamically sized
array. Also document this flag.

Currently dynamically sized arrays are limited to one dimensional arrays,
but that might change in the future if there is a need for it.

The initial use-case of dynamic arrays are stateless codecs. A frame
can be divided in many slices, so you want to provide an array containing
slice information for each slice. Typically the number of slices is small,
but the standard allow for hundreds or thousands of slices. Dynamic arrays
are a good solution since sizing the array for the worst case would waste
substantial amounts of memory.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
---
 .../userspace-api/media/v4l/vidioc-queryctrl.rst          | 8 ++++++++
 include/uapi/linux/videodev2.h                            | 1 +
 2 files changed, 9 insertions(+)

diff --git a/Documentation/userspace-api/media/v4l/vidioc-queryctrl.rst b/Documentation/userspace-api/media/v4l/vidioc-queryctrl.rst
index 88f630252d98..a20dfa2a933b 100644
--- a/Documentation/userspace-api/media/v4l/vidioc-queryctrl.rst
+++ b/Documentation/userspace-api/media/v4l/vidioc-queryctrl.rst
@@ -625,6 +625,14 @@ See also the examples in :ref:`control`.
 	``V4L2_CTRL_FLAG_GRABBED`` flag when buffers are allocated or
 	streaming is in progress since most drivers do not support changing
 	the format in that case.
+    * - ``V4L2_CTRL_FLAG_DYNAMIC_ARRAY``
+      - 0x0800
+      - This control is a dynamically sized 1-dimensional array. It
+        behaves the same as a regular array, except that the number
+	of elements as reported by the ``elems`` field is between 1 and
+	``dims[0]``. So setting the control with a differently sized
+	array will change the ``elems`` field when the control is
+	queried afterwards.
 
 Return Value
 ============
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index df8b9c486ba1..e27c8eae78c9 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -1884,6 +1884,7 @@ struct v4l2_querymenu {
 #define V4L2_CTRL_FLAG_HAS_PAYLOAD	0x0100
 #define V4L2_CTRL_FLAG_EXECUTE_ON_WRITE	0x0200
 #define V4L2_CTRL_FLAG_MODIFY_LAYOUT	0x0400
+#define V4L2_CTRL_FLAG_DYNAMIC_ARRAY	0x0800
 
 /*  Query flags, to be ORed with the control ID */
 #define V4L2_CTRL_FLAG_NEXT_CTRL	0x80000000
-- 
2.32.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH v4 02/15] v4l2-ctrls: add support for dynamically allocated arrays.
  2022-02-28 14:08 ` Benjamin Gaignard
@ 2022-02-28 14:08   ` Benjamin Gaignard
  -1 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Hans Verkuil

From: Hans Verkuil <hverkuil-cisco@xs4all.nl>

Implement support for dynamically allocated arrays.

Most of the changes concern keeping track of the number of elements
of the array and the number of elements allocated for the array and
reallocating memory if needed.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
---
 drivers/media/v4l2-core/v4l2-ctrls-api.c     | 103 ++++++++---
 drivers/media/v4l2-core/v4l2-ctrls-core.c    | 182 +++++++++++++++----
 drivers/media/v4l2-core/v4l2-ctrls-priv.h    |   3 +-
 drivers/media/v4l2-core/v4l2-ctrls-request.c |  13 +-
 include/media/v4l2-ctrls.h                   |  42 ++++-
 5 files changed, 272 insertions(+), 71 deletions(-)

diff --git a/drivers/media/v4l2-core/v4l2-ctrls-api.c b/drivers/media/v4l2-core/v4l2-ctrls-api.c
index db9baa0bd05f..50d012ba3c02 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-api.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-api.c
@@ -97,29 +97,47 @@ static int def_to_user(struct v4l2_ext_control *c, struct v4l2_ctrl *ctrl)
 	return ptr_to_user(c, ctrl, ctrl->p_new);
 }
 
-/* Helper function: copy the caller-provider value to the given control value */
-static int user_to_ptr(struct v4l2_ext_control *c,
-		       struct v4l2_ctrl *ctrl,
-		       union v4l2_ctrl_ptr ptr)
+/* Helper function: copy the caller-provider value as the new control value */
+static int user_to_new(struct v4l2_ext_control *c, struct v4l2_ctrl *ctrl)
 {
 	int ret;
 	u32 size;
 
-	ctrl->is_new = 1;
+	ctrl->is_new = 0;
+	if (ctrl->is_dyn_array &&
+	    c->size > ctrl->p_dyn_alloc_elems * ctrl->elem_size) {
+		void *old = ctrl->p_dyn;
+		void *tmp = kvzalloc(2 * c->size, GFP_KERNEL);
+
+		if (!tmp)
+			return -ENOMEM;
+		memcpy(tmp, ctrl->p_new.p, ctrl->elems * ctrl->elem_size);
+		memcpy(tmp + c->size, ctrl->p_cur.p, ctrl->elems * ctrl->elem_size);
+		ctrl->p_new.p = tmp;
+		ctrl->p_cur.p = tmp + c->size;
+		ctrl->p_dyn = tmp;
+		ctrl->p_dyn_alloc_elems = c->size / ctrl->elem_size;
+		kvfree(old);
+	}
+
 	if (ctrl->is_ptr && !ctrl->is_string) {
+		unsigned int elems = c->size / ctrl->elem_size;
 		unsigned int idx;
 
-		ret = copy_from_user(ptr.p, c->ptr, c->size) ? -EFAULT : 0;
-		if (ret || !ctrl->is_array)
-			return ret;
-		for (idx = c->size / ctrl->elem_size; idx < ctrl->elems; idx++)
-			ctrl->type_ops->init(ctrl, idx, ptr);
+		if (copy_from_user(ctrl->p_new.p, c->ptr, c->size))
+			return -EFAULT;
+		ctrl->is_new = 1;
+		if (ctrl->is_dyn_array)
+			ctrl->new_elems = elems;
+		else if (ctrl->is_array)
+			for (idx = elems; idx < ctrl->elems; idx++)
+				ctrl->type_ops->init(ctrl, idx, ctrl->p_new);
 		return 0;
 	}
 
 	switch (ctrl->type) {
 	case V4L2_CTRL_TYPE_INTEGER64:
-		*ptr.p_s64 = c->value64;
+		*ctrl->p_new.p_s64 = c->value64;
 		break;
 	case V4L2_CTRL_TYPE_STRING:
 		size = c->size;
@@ -127,32 +145,27 @@ static int user_to_ptr(struct v4l2_ext_control *c,
 			return -ERANGE;
 		if (size > ctrl->maximum + 1)
 			size = ctrl->maximum + 1;
-		ret = copy_from_user(ptr.p_char, c->string, size) ? -EFAULT : 0;
+		ret = copy_from_user(ctrl->p_new.p_char, c->string, size) ? -EFAULT : 0;
 		if (!ret) {
-			char last = ptr.p_char[size - 1];
+			char last = ctrl->p_new.p_char[size - 1];
 
-			ptr.p_char[size - 1] = 0;
+			ctrl->p_new.p_char[size - 1] = 0;
 			/*
 			 * If the string was longer than ctrl->maximum,
 			 * then return an error.
 			 */
-			if (strlen(ptr.p_char) == ctrl->maximum && last)
+			if (strlen(ctrl->p_new.p_char) == ctrl->maximum && last)
 				return -ERANGE;
 		}
 		return ret;
 	default:
-		*ptr.p_s32 = c->value;
+		*ctrl->p_new.p_s32 = c->value;
 		break;
 	}
+	ctrl->is_new = 1;
 	return 0;
 }
 
-/* Helper function: copy the caller-provider value as the new control value */
-static int user_to_new(struct v4l2_ext_control *c, struct v4l2_ctrl *ctrl)
-{
-	return user_to_ptr(c, ctrl, ctrl->p_new);
-}
-
 /*
  * VIDIOC_G/TRY/S_EXT_CTRLS implementation
  */
@@ -254,7 +267,31 @@ static int prepare_ext_ctrls(struct v4l2_ctrl_handler *hdl,
 			have_clusters = true;
 		if (ctrl->cluster[0] != ctrl)
 			ref = find_ref_lock(hdl, ctrl->cluster[0]->id);
-		if (ctrl->is_ptr && !ctrl->is_string) {
+		if (ctrl->is_dyn_array) {
+			unsigned int max_size = ctrl->dims[0] * ctrl->elem_size;
+			unsigned int tot_size = ctrl->elem_size;
+
+			if (cs->which == V4L2_CTRL_WHICH_REQUEST_VAL)
+				tot_size *= ref->p_req_elems;
+			else
+				tot_size *= ctrl->elems;
+
+			c->size = ctrl->elem_size * (c->size / ctrl->elem_size);
+			if (get) {
+				if (c->size < tot_size) {
+					c->size = tot_size;
+					return -ENOSPC;
+				}
+				c->size = tot_size;
+			} else {
+				if (c->size > max_size) {
+					c->size = max_size;
+					return -ENOSPC;
+				}
+				if (!c->size)
+					return -EFAULT;
+			}
+		} else if (ctrl->is_ptr && !ctrl->is_string) {
 			unsigned int tot_size = ctrl->elems * ctrl->elem_size;
 
 			if (c->size < tot_size) {
@@ -346,7 +383,7 @@ static int class_check(struct v4l2_ctrl_handler *hdl, u32 which)
  *
  * Note that v4l2_g_ext_ctrls_common() with 'which' set to
  * V4L2_CTRL_WHICH_REQUEST_VAL is only called if the request was
- * completed, and in that case valid_p_req is true for all controls.
+ * completed, and in that case p_req_valid is true for all controls.
  */
 int v4l2_g_ext_ctrls_common(struct v4l2_ctrl_handler *hdl,
 			    struct v4l2_ext_controls *cs,
@@ -430,7 +467,9 @@ int v4l2_g_ext_ctrls_common(struct v4l2_ctrl_handler *hdl,
 
 			if (is_default)
 				ret = def_to_user(cs->controls + idx, ref->ctrl);
-			else if (is_request && ref->valid_p_req)
+			else if (is_request && ref->p_req_dyn_enomem)
+				ret = -ENOMEM;
+			else if (is_request && ref->p_req_valid)
 				ret = req_to_user(cs->controls + idx, ref);
 			else if (is_volatile)
 				ret = new_to_user(cs->controls + idx, ref->ctrl);
@@ -457,6 +496,17 @@ int v4l2_g_ext_ctrls(struct v4l2_ctrl_handler *hdl, struct video_device *vdev,
 }
 EXPORT_SYMBOL(v4l2_g_ext_ctrls);
 
+/* Validate a new control */
+static int validate_new(const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr p_new)
+{
+	unsigned int idx;
+	int err = 0;
+
+	for (idx = 0; !err && idx < ctrl->new_elems; idx++)
+		err = ctrl->type_ops->validate(ctrl, idx, p_new);
+	return err;
+}
+
 /* Validate controls. */
 static int validate_ctrls(struct v4l2_ext_controls *cs,
 			  struct v4l2_ctrl_helper *helpers,
@@ -872,6 +922,9 @@ int __v4l2_ctrl_s_ctrl_compound(struct v4l2_ctrl *ctrl,
 	/* It's a driver bug if this happens. */
 	if (WARN_ON(ctrl->type != type))
 		return -EINVAL;
+	/* Setting dynamic arrays is not (yet?) supported. */
+	if (WARN_ON(ctrl->is_dyn_array))
+		return -EINVAL;
 	memcpy(ctrl->p_new.p, p, ctrl->elems * ctrl->elem_size);
 	return set_ctrl(NULL, ctrl, 0);
 }
diff --git a/drivers/media/v4l2-core/v4l2-ctrls-core.c b/drivers/media/v4l2-core/v4l2-ctrls-core.c
index 85c2d3f39d96..2d24cb8d3926 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-core.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-core.c
@@ -973,11 +973,12 @@ EXPORT_SYMBOL(v4l2_ctrl_notify);
 
 /* Copy the one value to another. */
 static void ptr_to_ptr(struct v4l2_ctrl *ctrl,
-		       union v4l2_ctrl_ptr from, union v4l2_ctrl_ptr to)
+		       union v4l2_ctrl_ptr from, union v4l2_ctrl_ptr to,
+		       unsigned int elems)
 {
 	if (ctrl == NULL)
 		return;
-	memcpy(to.p, from.p_const, ctrl->elems * ctrl->elem_size);
+	memcpy(to.p, from.p_const, elems * ctrl->elem_size);
 }
 
 /* Copy the new value to the current value. */
@@ -990,8 +991,11 @@ void new_to_cur(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 ch_flags)
 
 	/* has_changed is set by cluster_changed */
 	changed = ctrl->has_changed;
-	if (changed)
-		ptr_to_ptr(ctrl, ctrl->p_new, ctrl->p_cur);
+	if (changed) {
+		if (ctrl->is_dyn_array)
+			ctrl->elems = ctrl->new_elems;
+		ptr_to_ptr(ctrl, ctrl->p_new, ctrl->p_cur, ctrl->elems);
+	}
 
 	if (ch_flags & V4L2_EVENT_CTRL_CH_FLAGS) {
 		/* Note: CH_FLAGS is only set for auto clusters. */
@@ -1021,36 +1025,122 @@ void cur_to_new(struct v4l2_ctrl *ctrl)
 {
 	if (ctrl == NULL)
 		return;
-	ptr_to_ptr(ctrl, ctrl->p_cur, ctrl->p_new);
+	if (ctrl->is_dyn_array)
+		ctrl->new_elems = ctrl->elems;
+	ptr_to_ptr(ctrl, ctrl->p_cur, ctrl->p_new, ctrl->new_elems);
+}
+
+static bool req_alloc_dyn_array(struct v4l2_ctrl_ref *ref, u32 elems)
+{
+	void *tmp;
+
+	if (elems < ref->p_req_dyn_alloc_elems)
+		return true;
+
+	tmp = kvmalloc(elems * ref->ctrl->elem_size, GFP_KERNEL);
+
+	if (!tmp) {
+		ref->p_req_dyn_enomem = true;
+		return false;
+	}
+	ref->p_req_dyn_enomem = false;
+	kvfree(ref->p_req.p);
+	ref->p_req.p = tmp;
+	ref->p_req_dyn_alloc_elems = elems;
+	return true;
 }
 
 /* Copy the new value to the request value */
 void new_to_req(struct v4l2_ctrl_ref *ref)
 {
+	struct v4l2_ctrl *ctrl;
+
 	if (!ref)
 		return;
-	ptr_to_ptr(ref->ctrl, ref->ctrl->p_new, ref->p_req);
-	ref->valid_p_req = true;
+
+	ctrl = ref->ctrl;
+	if (ctrl->is_dyn_array && !req_alloc_dyn_array(ref, ctrl->new_elems))
+		return;
+
+	ref->p_req_elems = ctrl->new_elems;
+	ptr_to_ptr(ctrl, ctrl->p_new, ref->p_req, ref->p_req_elems);
+	ref->p_req_valid = true;
 }
 
 /* Copy the current value to the request value */
 void cur_to_req(struct v4l2_ctrl_ref *ref)
 {
+	struct v4l2_ctrl *ctrl;
+
 	if (!ref)
 		return;
-	ptr_to_ptr(ref->ctrl, ref->ctrl->p_cur, ref->p_req);
-	ref->valid_p_req = true;
+
+	ctrl = ref->ctrl;
+	if (ctrl->is_dyn_array && !req_alloc_dyn_array(ref, ctrl->elems))
+		return;
+
+	ref->p_req_elems = ctrl->elems;
+	ptr_to_ptr(ctrl, ctrl->p_cur, ref->p_req, ctrl->elems);
+	ref->p_req_valid = true;
 }
 
 /* Copy the request value to the new value */
-void req_to_new(struct v4l2_ctrl_ref *ref)
+int req_to_new(struct v4l2_ctrl_ref *ref)
 {
+	struct v4l2_ctrl *ctrl;
+
 	if (!ref)
-		return;
-	if (ref->valid_p_req)
-		ptr_to_ptr(ref->ctrl, ref->p_req, ref->ctrl->p_new);
-	else
-		ptr_to_ptr(ref->ctrl, ref->ctrl->p_cur, ref->ctrl->p_new);
+		return 0;
+
+	ctrl = ref->ctrl;
+
+	/*
+	 * This control was never set in the request, so just use the current
+	 * value.
+	 */
+	if (!ref->p_req_valid) {
+		if (ctrl->is_dyn_array)
+			ctrl->new_elems = ctrl->elems;
+		ptr_to_ptr(ctrl, ctrl->p_cur, ctrl->p_new, ctrl->new_elems);
+		return 0;
+	}
+
+	/* Not a dynamic array, so just copy the request value */
+	if (!ctrl->is_dyn_array) {
+		ptr_to_ptr(ctrl, ref->p_req, ctrl->p_new, ctrl->new_elems);
+		return 0;
+	}
+
+	/* Sanity check, should never happen */
+	if (WARN_ON(!ref->p_req_dyn_alloc_elems))
+		return -ENOMEM;
+
+	/*
+	 * Check if the number of elements in the request is more than the
+	 * elements in ctrl->p_dyn. If so, attempt to realloc ctrl->p_dyn.
+	 * Note that p_dyn is allocated with twice the number of elements
+	 * in the dynamic array since it has to store both the current and
+	 * new value of such a control.
+	 */
+	if (ref->p_req_elems > ctrl->p_dyn_alloc_elems) {
+		unsigned int sz = ref->p_req_elems * ctrl->elem_size;
+		void *old = ctrl->p_dyn;
+		void *tmp = kvzalloc(2 * sz, GFP_KERNEL);
+
+		if (!tmp)
+			return -ENOMEM;
+		memcpy(tmp, ctrl->p_new.p, ctrl->elems * ctrl->elem_size);
+		memcpy(tmp + sz, ctrl->p_cur.p, ctrl->elems * ctrl->elem_size);
+		ctrl->p_new.p = tmp;
+		ctrl->p_cur.p = tmp + sz;
+		ctrl->p_dyn = tmp;
+		ctrl->p_dyn_alloc_elems = ref->p_req_elems;
+		kvfree(old);
+	}
+
+	ctrl->new_elems = ref->p_req_elems;
+	ptr_to_ptr(ctrl, ref->p_req, ctrl->p_new, ctrl->new_elems);
+	return 0;
 }
 
 /* Control range checking */
@@ -1092,17 +1182,6 @@ int check_range(enum v4l2_ctrl_type type,
 	}
 }
 
-/* Validate a new control */
-int validate_new(const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr p_new)
-{
-	unsigned idx;
-	int err = 0;
-
-	for (idx = 0; !err && idx < ctrl->elems; idx++)
-		err = ctrl->type_ops->validate(ctrl, idx, p_new);
-	return err;
-}
-
 /* Set the handler's error code if it wasn't set earlier already */
 static inline int handler_set_err(struct v4l2_ctrl_handler *hdl, int err)
 {
@@ -1147,6 +1226,8 @@ void v4l2_ctrl_handler_free(struct v4l2_ctrl_handler *hdl)
 	/* Free all nodes */
 	list_for_each_entry_safe(ref, next_ref, &hdl->ctrl_refs, node) {
 		list_del(&ref->node);
+		if (ref->p_req_dyn_alloc_elems)
+			kvfree(ref->p_req.p);
 		kfree(ref);
 	}
 	/* Free all controls owned by the handler */
@@ -1154,6 +1235,7 @@ void v4l2_ctrl_handler_free(struct v4l2_ctrl_handler *hdl)
 		list_del(&ctrl->node);
 		list_for_each_entry_safe(sev, next_sev, &ctrl->ev_subs, node)
 			list_del(&sev->node);
+		kvfree(ctrl->p_dyn);
 		kvfree(ctrl);
 	}
 	kvfree(hdl->buckets);
@@ -1269,7 +1351,7 @@ int handler_new_ref(struct v4l2_ctrl_handler *hdl,
 	if (hdl->error)
 		return hdl->error;
 
-	if (allocate_req)
+	if (allocate_req && !ctrl->is_dyn_array)
 		size_extra_req = ctrl->elems * ctrl->elem_size;
 	new_ref = kzalloc(sizeof(*new_ref) + size_extra_req, GFP_KERNEL);
 	if (!new_ref)
@@ -1443,7 +1525,6 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
 			elem_size = sizeof(s32);
 		break;
 	}
-	tot_ctrl_size = elem_size * elems;
 
 	/* Sanity checks */
 	if (id == 0 || name == NULL || !elem_size ||
@@ -1464,17 +1545,33 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
 		handler_set_err(hdl, -EINVAL);
 		return NULL;
 	}
+	if (flags & V4L2_CTRL_FLAG_DYNAMIC_ARRAY) {
+		/*
+		 * For now only support this for one-dimensional arrays only.
+		 *
+		 * This can be relaxed in the future, but this will
+		 * require more effort.
+		 */
+		if (nr_of_dims != 1) {
+			handler_set_err(hdl, -EINVAL);
+			return NULL;
+		}
+		/* Start with just 1 element */
+		elems = 1;
+	}
 
+	tot_ctrl_size = elem_size * elems;
 	sz_extra = 0;
 	if (type == V4L2_CTRL_TYPE_BUTTON)
 		flags |= V4L2_CTRL_FLAG_WRITE_ONLY |
 			V4L2_CTRL_FLAG_EXECUTE_ON_WRITE;
 	else if (type == V4L2_CTRL_TYPE_CTRL_CLASS)
 		flags |= V4L2_CTRL_FLAG_READ_ONLY;
-	else if (type == V4L2_CTRL_TYPE_INTEGER64 ||
-		 type == V4L2_CTRL_TYPE_STRING ||
-		 type >= V4L2_CTRL_COMPOUND_TYPES ||
-		 is_array)
+	else if (!(flags & V4L2_CTRL_FLAG_DYNAMIC_ARRAY) &&
+		 (type == V4L2_CTRL_TYPE_INTEGER64 ||
+		  type == V4L2_CTRL_TYPE_STRING ||
+		  type >= V4L2_CTRL_COMPOUND_TYPES ||
+		  is_array))
 		sz_extra += 2 * tot_ctrl_size;
 
 	if (type >= V4L2_CTRL_COMPOUND_TYPES && p_def.p_const)
@@ -1503,7 +1600,9 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
 	ctrl->is_ptr = is_array || type >= V4L2_CTRL_COMPOUND_TYPES || ctrl->is_string;
 	ctrl->is_int = !ctrl->is_ptr && type != V4L2_CTRL_TYPE_INTEGER64;
 	ctrl->is_array = is_array;
+	ctrl->is_dyn_array = !!(flags & V4L2_CTRL_FLAG_DYNAMIC_ARRAY);
 	ctrl->elems = elems;
+	ctrl->new_elems = elems;
 	ctrl->nr_of_dims = nr_of_dims;
 	if (nr_of_dims)
 		memcpy(ctrl->dims, dims, nr_of_dims * sizeof(dims[0]));
@@ -1516,6 +1615,16 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
 	ctrl->cur.val = ctrl->val = def;
 	data = &ctrl[1];
 
+	if (ctrl->is_dyn_array) {
+		ctrl->p_dyn_alloc_elems = elems;
+		ctrl->p_dyn = kvzalloc(2 * elems * elem_size, GFP_KERNEL);
+		if (!ctrl->p_dyn) {
+			kvfree(ctrl);
+			return NULL;
+		}
+		data = ctrl->p_dyn;
+	}
+
 	if (!ctrl->is_int) {
 		ctrl->p_new.p = data;
 		ctrl->p_cur.p = data + tot_ctrl_size;
@@ -1525,7 +1634,10 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
 	}
 
 	if (type >= V4L2_CTRL_COMPOUND_TYPES && p_def.p_const) {
-		ctrl->p_def.p = ctrl->p_cur.p + tot_ctrl_size;
+		if (ctrl->is_dyn_array)
+			ctrl->p_def.p = &ctrl[1];
+		else
+			ctrl->p_def.p = ctrl->p_cur.p + tot_ctrl_size;
 		memcpy(ctrl->p_def.p, p_def.p_const, elem_size);
 	}
 
@@ -1535,6 +1647,7 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
 	}
 
 	if (handler_new_ref(hdl, ctrl, NULL, false, false)) {
+		kvfree(ctrl->p_dyn);
 		kvfree(ctrl);
 		return NULL;
 	}
@@ -1872,6 +1985,9 @@ static int cluster_changed(struct v4l2_ctrl *master)
 			continue;
 		}
 
+		if (ctrl->elems != ctrl->new_elems)
+			ctrl_changed = true;
+
 		for (idx = 0; !ctrl_changed && idx < ctrl->elems; idx++)
 			ctrl_changed = !ctrl->type_ops->equal(ctrl, idx,
 				ctrl->p_cur, ctrl->p_new);
diff --git a/drivers/media/v4l2-core/v4l2-ctrls-priv.h b/drivers/media/v4l2-core/v4l2-ctrls-priv.h
index d4bf2c716f97..aba6176fab6c 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-priv.h
+++ b/drivers/media/v4l2-core/v4l2-ctrls-priv.h
@@ -57,10 +57,9 @@ void cur_to_new(struct v4l2_ctrl *ctrl);
 void cur_to_req(struct v4l2_ctrl_ref *ref);
 void new_to_cur(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 ch_flags);
 void new_to_req(struct v4l2_ctrl_ref *ref);
-void req_to_new(struct v4l2_ctrl_ref *ref);
+int req_to_new(struct v4l2_ctrl_ref *ref);
 void send_initial_event(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl);
 void send_event(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 changes);
-int validate_new(const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr p_new);
 int handler_new_ref(struct v4l2_ctrl_handler *hdl,
 		    struct v4l2_ctrl *ctrl,
 		    struct v4l2_ctrl_ref **ctrl_ref,
diff --git a/drivers/media/v4l2-core/v4l2-ctrls-request.c b/drivers/media/v4l2-core/v4l2-ctrls-request.c
index 7d098f287fd9..c637049d7a2b 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-request.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-request.c
@@ -143,7 +143,7 @@ v4l2_ctrl_request_hdl_ctrl_find(struct v4l2_ctrl_handler *hdl, u32 id)
 {
 	struct v4l2_ctrl_ref *ref = find_ref_lock(hdl, id);
 
-	return (ref && ref->valid_p_req) ? ref->ctrl : NULL;
+	return (ref && ref->p_req_valid) ? ref->ctrl : NULL;
 }
 EXPORT_SYMBOL_GPL(v4l2_ctrl_request_hdl_ctrl_find);
 
@@ -373,7 +373,7 @@ void v4l2_ctrl_request_complete(struct media_request *req,
 			v4l2_ctrl_unlock(master);
 			continue;
 		}
-		if (ref->valid_p_req)
+		if (ref->p_req_valid)
 			continue;
 
 		/* Copy the current control value into the request */
@@ -442,7 +442,7 @@ int v4l2_ctrl_request_setup(struct media_request *req,
 				struct v4l2_ctrl_ref *r =
 					find_ref(hdl, master->cluster[i]->id);
 
-				if (r->valid_p_req) {
+				if (r->p_req_valid) {
 					have_new_data = true;
 					break;
 				}
@@ -458,7 +458,11 @@ int v4l2_ctrl_request_setup(struct media_request *req,
 				struct v4l2_ctrl_ref *r =
 					find_ref(hdl, master->cluster[i]->id);
 
-				req_to_new(r);
+				ret = req_to_new(r);
+				if (ret) {
+					v4l2_ctrl_unlock(master);
+					goto error;
+				}
 				master->cluster[i]->is_new = 1;
 				r->req_done = true;
 			}
@@ -490,6 +494,7 @@ int v4l2_ctrl_request_setup(struct media_request *req,
 			break;
 	}
 
+error:
 	media_request_object_put(obj);
 	return ret;
 }
diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h
index b3ce438f1329..f4105de8a8d2 100644
--- a/include/media/v4l2-ctrls.h
+++ b/include/media/v4l2-ctrls.h
@@ -185,6 +185,8 @@ typedef void (*v4l2_ctrl_notify_fnc)(struct v4l2_ctrl *ctrl, void *priv);
  *		and/or has type %V4L2_CTRL_TYPE_STRING. In other words, &struct
  *		v4l2_ext_control uses field p to point to the data.
  * @is_array: If set, then this control contains an N-dimensional array.
+ * @is_dyn_array: If set, then this control contains a dynamically sized 1-dimensional array.
+ *		If this is set, then @is_array is also set.
  * @has_volatiles: If set, then one or more members of the cluster are volatile.
  *		Drivers should never touch this flag.
  * @call_notify: If set, then call the handler's notify function whenever the
@@ -205,6 +207,9 @@ typedef void (*v4l2_ctrl_notify_fnc)(struct v4l2_ctrl *ctrl, void *priv);
  * @step:	The control's step value for non-menu controls.
  * @elems:	The number of elements in the N-dimensional array.
  * @elem_size:	The size in bytes of the control.
+ * @new_elems:	The number of elements in p_new. This is the same as @elems,
+ *		except for dynamic arrays. In that case it is in the range of
+ *		1 to @p_dyn_alloc_elems.
  * @dims:	The size of each dimension.
  * @nr_of_dims:The number of dimensions in @dims.
  * @menu_skip_mask: The control's skip mask for menu controls. This makes it
@@ -223,15 +228,21 @@ typedef void (*v4l2_ctrl_notify_fnc)(struct v4l2_ctrl *ctrl, void *priv);
  *		:math:`ceil(\frac{maximum - minimum}{step}) + 1`.
  *		Used only if the @type is %V4L2_CTRL_TYPE_INTEGER_MENU.
  * @flags:	The control's flags.
- * @cur:	Structure to store the current value.
- * @cur.val:	The control's current value, if the @type is represented via
- *		a u32 integer (see &enum v4l2_ctrl_type).
- * @val:	The control's new s32 value.
  * @priv:	The control's private pointer. For use by the driver. It is
  *		untouched by the control framework. Note that this pointer is
  *		not freed when the control is deleted. Should this be needed
  *		then a new internal bitfield can be added to tell the framework
  *		to free this pointer.
+ * @p_dyn:	Pointer to the dynamically allocated array. Only valid if
+ *		@is_dyn_array is true.
+ * @p_dyn_alloc_elems: The number of elements in the dynamically allocated
+ *		array for both the cur and new values. So @p_dyn is actually
+ *		sized for 2 * @p_dyn_alloc_elems * @elem_size. Only valid if
+ *		@is_dyn_array is true.
+ * @cur:	Structure to store the current value.
+ * @cur.val:	The control's current value, if the @type is represented via
+ *		a u32 integer (see &enum v4l2_ctrl_type).
+ * @val:	The control's new s32 value.
  * @p_def:	The control's default value represented via a union which
  *		provides a standard way of accessing control types
  *		through a pointer (for compound controls only).
@@ -260,6 +271,7 @@ struct v4l2_ctrl {
 	unsigned int is_string:1;
 	unsigned int is_ptr:1;
 	unsigned int is_array:1;
+	unsigned int is_dyn_array:1;
 	unsigned int has_volatiles:1;
 	unsigned int call_notify:1;
 	unsigned int manual_mode_value:8;
@@ -272,6 +284,7 @@ struct v4l2_ctrl {
 	s64 minimum, maximum, default_value;
 	u32 elems;
 	u32 elem_size;
+	u32 new_elems;
 	u32 dims[V4L2_CTRL_MAX_DIMS];
 	u32 nr_of_dims;
 	union {
@@ -284,6 +297,8 @@ struct v4l2_ctrl {
 	};
 	unsigned long flags;
 	void *priv;
+	void *p_dyn;
+	u32 p_dyn_alloc_elems;
 	s32 val;
 	struct {
 		s32 val;
@@ -309,12 +324,22 @@ struct v4l2_ctrl {
  *		the control has been applied. This prevents applying controls
  *		from a cluster with multiple controls twice (when the first
  *		control of a cluster is applied, they all are).
- * @valid_p_req: If set, then p_req contains the control value for the request.
+ * @p_req_valid: If set, then p_req contains the control value for the request.
+ * @p_req_dyn_enomem: If set, then p_req is invalid since allocating space for
+ *		a dynamic array failed. Attempting to read this value shall
+ *		result in ENOMEM. Only valid if ctrl->is_dyn_array is true.
+ * @p_req_dyn_alloc_elems: The number of elements allocated for the dynamic
+ *		array. Only valid if @p_req_valid and ctrl->is_dyn_array are
+ *		true.
+ * @p_req_elems: The number of elements in @p_req. This is the same as
+ *		ctrl->elems, except for dynamic arrays. In that case it is in
+ *		the range of 1 to @p_req_dyn_alloc_elems. Only valid if
+ *		@p_req_valid is true.
  * @p_req:	If the control handler containing this control reference
  *		is bound to a media request, then this points to the
  *		value of the control that must be applied when the request
  *		is executed, or to the value of the control at the time
- *		that the request was completed. If @valid_p_req is false,
+ *		that the request was completed. If @p_req_valid is false,
  *		then this control was never set for this request and the
  *		control will not be updated when this request is applied.
  *
@@ -329,7 +354,10 @@ struct v4l2_ctrl_ref {
 	struct v4l2_ctrl_helper *helper;
 	bool from_other_dev;
 	bool req_done;
-	bool valid_p_req;
+	bool p_req_valid;
+	bool p_req_dyn_enomem;
+	u32 p_req_dyn_alloc_elems;
+	u32 p_req_elems;
 	union v4l2_ctrl_ptr p_req;
 };
 
-- 
2.32.0


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

* [PATCH v4 02/15] v4l2-ctrls: add support for dynamically allocated arrays.
@ 2022-02-28 14:08   ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Hans Verkuil

From: Hans Verkuil <hverkuil-cisco@xs4all.nl>

Implement support for dynamically allocated arrays.

Most of the changes concern keeping track of the number of elements
of the array and the number of elements allocated for the array and
reallocating memory if needed.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
---
 drivers/media/v4l2-core/v4l2-ctrls-api.c     | 103 ++++++++---
 drivers/media/v4l2-core/v4l2-ctrls-core.c    | 182 +++++++++++++++----
 drivers/media/v4l2-core/v4l2-ctrls-priv.h    |   3 +-
 drivers/media/v4l2-core/v4l2-ctrls-request.c |  13 +-
 include/media/v4l2-ctrls.h                   |  42 ++++-
 5 files changed, 272 insertions(+), 71 deletions(-)

diff --git a/drivers/media/v4l2-core/v4l2-ctrls-api.c b/drivers/media/v4l2-core/v4l2-ctrls-api.c
index db9baa0bd05f..50d012ba3c02 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-api.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-api.c
@@ -97,29 +97,47 @@ static int def_to_user(struct v4l2_ext_control *c, struct v4l2_ctrl *ctrl)
 	return ptr_to_user(c, ctrl, ctrl->p_new);
 }
 
-/* Helper function: copy the caller-provider value to the given control value */
-static int user_to_ptr(struct v4l2_ext_control *c,
-		       struct v4l2_ctrl *ctrl,
-		       union v4l2_ctrl_ptr ptr)
+/* Helper function: copy the caller-provider value as the new control value */
+static int user_to_new(struct v4l2_ext_control *c, struct v4l2_ctrl *ctrl)
 {
 	int ret;
 	u32 size;
 
-	ctrl->is_new = 1;
+	ctrl->is_new = 0;
+	if (ctrl->is_dyn_array &&
+	    c->size > ctrl->p_dyn_alloc_elems * ctrl->elem_size) {
+		void *old = ctrl->p_dyn;
+		void *tmp = kvzalloc(2 * c->size, GFP_KERNEL);
+
+		if (!tmp)
+			return -ENOMEM;
+		memcpy(tmp, ctrl->p_new.p, ctrl->elems * ctrl->elem_size);
+		memcpy(tmp + c->size, ctrl->p_cur.p, ctrl->elems * ctrl->elem_size);
+		ctrl->p_new.p = tmp;
+		ctrl->p_cur.p = tmp + c->size;
+		ctrl->p_dyn = tmp;
+		ctrl->p_dyn_alloc_elems = c->size / ctrl->elem_size;
+		kvfree(old);
+	}
+
 	if (ctrl->is_ptr && !ctrl->is_string) {
+		unsigned int elems = c->size / ctrl->elem_size;
 		unsigned int idx;
 
-		ret = copy_from_user(ptr.p, c->ptr, c->size) ? -EFAULT : 0;
-		if (ret || !ctrl->is_array)
-			return ret;
-		for (idx = c->size / ctrl->elem_size; idx < ctrl->elems; idx++)
-			ctrl->type_ops->init(ctrl, idx, ptr);
+		if (copy_from_user(ctrl->p_new.p, c->ptr, c->size))
+			return -EFAULT;
+		ctrl->is_new = 1;
+		if (ctrl->is_dyn_array)
+			ctrl->new_elems = elems;
+		else if (ctrl->is_array)
+			for (idx = elems; idx < ctrl->elems; idx++)
+				ctrl->type_ops->init(ctrl, idx, ctrl->p_new);
 		return 0;
 	}
 
 	switch (ctrl->type) {
 	case V4L2_CTRL_TYPE_INTEGER64:
-		*ptr.p_s64 = c->value64;
+		*ctrl->p_new.p_s64 = c->value64;
 		break;
 	case V4L2_CTRL_TYPE_STRING:
 		size = c->size;
@@ -127,32 +145,27 @@ static int user_to_ptr(struct v4l2_ext_control *c,
 			return -ERANGE;
 		if (size > ctrl->maximum + 1)
 			size = ctrl->maximum + 1;
-		ret = copy_from_user(ptr.p_char, c->string, size) ? -EFAULT : 0;
+		ret = copy_from_user(ctrl->p_new.p_char, c->string, size) ? -EFAULT : 0;
 		if (!ret) {
-			char last = ptr.p_char[size - 1];
+			char last = ctrl->p_new.p_char[size - 1];
 
-			ptr.p_char[size - 1] = 0;
+			ctrl->p_new.p_char[size - 1] = 0;
 			/*
 			 * If the string was longer than ctrl->maximum,
 			 * then return an error.
 			 */
-			if (strlen(ptr.p_char) == ctrl->maximum && last)
+			if (strlen(ctrl->p_new.p_char) == ctrl->maximum && last)
 				return -ERANGE;
 		}
 		return ret;
 	default:
-		*ptr.p_s32 = c->value;
+		*ctrl->p_new.p_s32 = c->value;
 		break;
 	}
+	ctrl->is_new = 1;
 	return 0;
 }
 
-/* Helper function: copy the caller-provider value as the new control value */
-static int user_to_new(struct v4l2_ext_control *c, struct v4l2_ctrl *ctrl)
-{
-	return user_to_ptr(c, ctrl, ctrl->p_new);
-}
-
 /*
  * VIDIOC_G/TRY/S_EXT_CTRLS implementation
  */
@@ -254,7 +267,31 @@ static int prepare_ext_ctrls(struct v4l2_ctrl_handler *hdl,
 			have_clusters = true;
 		if (ctrl->cluster[0] != ctrl)
 			ref = find_ref_lock(hdl, ctrl->cluster[0]->id);
-		if (ctrl->is_ptr && !ctrl->is_string) {
+		if (ctrl->is_dyn_array) {
+			unsigned int max_size = ctrl->dims[0] * ctrl->elem_size;
+			unsigned int tot_size = ctrl->elem_size;
+
+			if (cs->which == V4L2_CTRL_WHICH_REQUEST_VAL)
+				tot_size *= ref->p_req_elems;
+			else
+				tot_size *= ctrl->elems;
+
+			c->size = ctrl->elem_size * (c->size / ctrl->elem_size);
+			if (get) {
+				if (c->size < tot_size) {
+					c->size = tot_size;
+					return -ENOSPC;
+				}
+				c->size = tot_size;
+			} else {
+				if (c->size > max_size) {
+					c->size = max_size;
+					return -ENOSPC;
+				}
+				if (!c->size)
+					return -EFAULT;
+			}
+		} else if (ctrl->is_ptr && !ctrl->is_string) {
 			unsigned int tot_size = ctrl->elems * ctrl->elem_size;
 
 			if (c->size < tot_size) {
@@ -346,7 +383,7 @@ static int class_check(struct v4l2_ctrl_handler *hdl, u32 which)
  *
  * Note that v4l2_g_ext_ctrls_common() with 'which' set to
  * V4L2_CTRL_WHICH_REQUEST_VAL is only called if the request was
- * completed, and in that case valid_p_req is true for all controls.
+ * completed, and in that case p_req_valid is true for all controls.
  */
 int v4l2_g_ext_ctrls_common(struct v4l2_ctrl_handler *hdl,
 			    struct v4l2_ext_controls *cs,
@@ -430,7 +467,9 @@ int v4l2_g_ext_ctrls_common(struct v4l2_ctrl_handler *hdl,
 
 			if (is_default)
 				ret = def_to_user(cs->controls + idx, ref->ctrl);
-			else if (is_request && ref->valid_p_req)
+			else if (is_request && ref->p_req_dyn_enomem)
+				ret = -ENOMEM;
+			else if (is_request && ref->p_req_valid)
 				ret = req_to_user(cs->controls + idx, ref);
 			else if (is_volatile)
 				ret = new_to_user(cs->controls + idx, ref->ctrl);
@@ -457,6 +496,17 @@ int v4l2_g_ext_ctrls(struct v4l2_ctrl_handler *hdl, struct video_device *vdev,
 }
 EXPORT_SYMBOL(v4l2_g_ext_ctrls);
 
+/* Validate a new control */
+static int validate_new(const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr p_new)
+{
+	unsigned int idx;
+	int err = 0;
+
+	for (idx = 0; !err && idx < ctrl->new_elems; idx++)
+		err = ctrl->type_ops->validate(ctrl, idx, p_new);
+	return err;
+}
+
 /* Validate controls. */
 static int validate_ctrls(struct v4l2_ext_controls *cs,
 			  struct v4l2_ctrl_helper *helpers,
@@ -872,6 +922,9 @@ int __v4l2_ctrl_s_ctrl_compound(struct v4l2_ctrl *ctrl,
 	/* It's a driver bug if this happens. */
 	if (WARN_ON(ctrl->type != type))
 		return -EINVAL;
+	/* Setting dynamic arrays is not (yet?) supported. */
+	if (WARN_ON(ctrl->is_dyn_array))
+		return -EINVAL;
 	memcpy(ctrl->p_new.p, p, ctrl->elems * ctrl->elem_size);
 	return set_ctrl(NULL, ctrl, 0);
 }
diff --git a/drivers/media/v4l2-core/v4l2-ctrls-core.c b/drivers/media/v4l2-core/v4l2-ctrls-core.c
index 85c2d3f39d96..2d24cb8d3926 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-core.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-core.c
@@ -973,11 +973,12 @@ EXPORT_SYMBOL(v4l2_ctrl_notify);
 
 /* Copy the one value to another. */
 static void ptr_to_ptr(struct v4l2_ctrl *ctrl,
-		       union v4l2_ctrl_ptr from, union v4l2_ctrl_ptr to)
+		       union v4l2_ctrl_ptr from, union v4l2_ctrl_ptr to,
+		       unsigned int elems)
 {
 	if (ctrl == NULL)
 		return;
-	memcpy(to.p, from.p_const, ctrl->elems * ctrl->elem_size);
+	memcpy(to.p, from.p_const, elems * ctrl->elem_size);
 }
 
 /* Copy the new value to the current value. */
@@ -990,8 +991,11 @@ void new_to_cur(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 ch_flags)
 
 	/* has_changed is set by cluster_changed */
 	changed = ctrl->has_changed;
-	if (changed)
-		ptr_to_ptr(ctrl, ctrl->p_new, ctrl->p_cur);
+	if (changed) {
+		if (ctrl->is_dyn_array)
+			ctrl->elems = ctrl->new_elems;
+		ptr_to_ptr(ctrl, ctrl->p_new, ctrl->p_cur, ctrl->elems);
+	}
 
 	if (ch_flags & V4L2_EVENT_CTRL_CH_FLAGS) {
 		/* Note: CH_FLAGS is only set for auto clusters. */
@@ -1021,36 +1025,122 @@ void cur_to_new(struct v4l2_ctrl *ctrl)
 {
 	if (ctrl == NULL)
 		return;
-	ptr_to_ptr(ctrl, ctrl->p_cur, ctrl->p_new);
+	if (ctrl->is_dyn_array)
+		ctrl->new_elems = ctrl->elems;
+	ptr_to_ptr(ctrl, ctrl->p_cur, ctrl->p_new, ctrl->new_elems);
+}
+
+static bool req_alloc_dyn_array(struct v4l2_ctrl_ref *ref, u32 elems)
+{
+	void *tmp;
+
+	if (elems < ref->p_req_dyn_alloc_elems)
+		return true;
+
+	tmp = kvmalloc(elems * ref->ctrl->elem_size, GFP_KERNEL);
+
+	if (!tmp) {
+		ref->p_req_dyn_enomem = true;
+		return false;
+	}
+	ref->p_req_dyn_enomem = false;
+	kvfree(ref->p_req.p);
+	ref->p_req.p = tmp;
+	ref->p_req_dyn_alloc_elems = elems;
+	return true;
 }
 
 /* Copy the new value to the request value */
 void new_to_req(struct v4l2_ctrl_ref *ref)
 {
+	struct v4l2_ctrl *ctrl;
+
 	if (!ref)
 		return;
-	ptr_to_ptr(ref->ctrl, ref->ctrl->p_new, ref->p_req);
-	ref->valid_p_req = true;
+
+	ctrl = ref->ctrl;
+	if (ctrl->is_dyn_array && !req_alloc_dyn_array(ref, ctrl->new_elems))
+		return;
+
+	ref->p_req_elems = ctrl->new_elems;
+	ptr_to_ptr(ctrl, ctrl->p_new, ref->p_req, ref->p_req_elems);
+	ref->p_req_valid = true;
 }
 
 /* Copy the current value to the request value */
 void cur_to_req(struct v4l2_ctrl_ref *ref)
 {
+	struct v4l2_ctrl *ctrl;
+
 	if (!ref)
 		return;
-	ptr_to_ptr(ref->ctrl, ref->ctrl->p_cur, ref->p_req);
-	ref->valid_p_req = true;
+
+	ctrl = ref->ctrl;
+	if (ctrl->is_dyn_array && !req_alloc_dyn_array(ref, ctrl->elems))
+		return;
+
+	ref->p_req_elems = ctrl->elems;
+	ptr_to_ptr(ctrl, ctrl->p_cur, ref->p_req, ctrl->elems);
+	ref->p_req_valid = true;
 }
 
 /* Copy the request value to the new value */
-void req_to_new(struct v4l2_ctrl_ref *ref)
+int req_to_new(struct v4l2_ctrl_ref *ref)
 {
+	struct v4l2_ctrl *ctrl;
+
 	if (!ref)
-		return;
-	if (ref->valid_p_req)
-		ptr_to_ptr(ref->ctrl, ref->p_req, ref->ctrl->p_new);
-	else
-		ptr_to_ptr(ref->ctrl, ref->ctrl->p_cur, ref->ctrl->p_new);
+		return 0;
+
+	ctrl = ref->ctrl;
+
+	/*
+	 * This control was never set in the request, so just use the current
+	 * value.
+	 */
+	if (!ref->p_req_valid) {
+		if (ctrl->is_dyn_array)
+			ctrl->new_elems = ctrl->elems;
+		ptr_to_ptr(ctrl, ctrl->p_cur, ctrl->p_new, ctrl->new_elems);
+		return 0;
+	}
+
+	/* Not a dynamic array, so just copy the request value */
+	if (!ctrl->is_dyn_array) {
+		ptr_to_ptr(ctrl, ref->p_req, ctrl->p_new, ctrl->new_elems);
+		return 0;
+	}
+
+	/* Sanity check, should never happen */
+	if (WARN_ON(!ref->p_req_dyn_alloc_elems))
+		return -ENOMEM;
+
+	/*
+	 * Check if the number of elements in the request is more than the
+	 * elements in ctrl->p_dyn. If so, attempt to realloc ctrl->p_dyn.
+	 * Note that p_dyn is allocated with twice the number of elements
+	 * in the dynamic array since it has to store both the current and
+	 * new value of such a control.
+	 */
+	if (ref->p_req_elems > ctrl->p_dyn_alloc_elems) {
+		unsigned int sz = ref->p_req_elems * ctrl->elem_size;
+		void *old = ctrl->p_dyn;
+		void *tmp = kvzalloc(2 * sz, GFP_KERNEL);
+
+		if (!tmp)
+			return -ENOMEM;
+		memcpy(tmp, ctrl->p_new.p, ctrl->elems * ctrl->elem_size);
+		memcpy(tmp + sz, ctrl->p_cur.p, ctrl->elems * ctrl->elem_size);
+		ctrl->p_new.p = tmp;
+		ctrl->p_cur.p = tmp + sz;
+		ctrl->p_dyn = tmp;
+		ctrl->p_dyn_alloc_elems = ref->p_req_elems;
+		kvfree(old);
+	}
+
+	ctrl->new_elems = ref->p_req_elems;
+	ptr_to_ptr(ctrl, ref->p_req, ctrl->p_new, ctrl->new_elems);
+	return 0;
 }
 
 /* Control range checking */
@@ -1092,17 +1182,6 @@ int check_range(enum v4l2_ctrl_type type,
 	}
 }
 
-/* Validate a new control */
-int validate_new(const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr p_new)
-{
-	unsigned idx;
-	int err = 0;
-
-	for (idx = 0; !err && idx < ctrl->elems; idx++)
-		err = ctrl->type_ops->validate(ctrl, idx, p_new);
-	return err;
-}
-
 /* Set the handler's error code if it wasn't set earlier already */
 static inline int handler_set_err(struct v4l2_ctrl_handler *hdl, int err)
 {
@@ -1147,6 +1226,8 @@ void v4l2_ctrl_handler_free(struct v4l2_ctrl_handler *hdl)
 	/* Free all nodes */
 	list_for_each_entry_safe(ref, next_ref, &hdl->ctrl_refs, node) {
 		list_del(&ref->node);
+		if (ref->p_req_dyn_alloc_elems)
+			kvfree(ref->p_req.p);
 		kfree(ref);
 	}
 	/* Free all controls owned by the handler */
@@ -1154,6 +1235,7 @@ void v4l2_ctrl_handler_free(struct v4l2_ctrl_handler *hdl)
 		list_del(&ctrl->node);
 		list_for_each_entry_safe(sev, next_sev, &ctrl->ev_subs, node)
 			list_del(&sev->node);
+		kvfree(ctrl->p_dyn);
 		kvfree(ctrl);
 	}
 	kvfree(hdl->buckets);
@@ -1269,7 +1351,7 @@ int handler_new_ref(struct v4l2_ctrl_handler *hdl,
 	if (hdl->error)
 		return hdl->error;
 
-	if (allocate_req)
+	if (allocate_req && !ctrl->is_dyn_array)
 		size_extra_req = ctrl->elems * ctrl->elem_size;
 	new_ref = kzalloc(sizeof(*new_ref) + size_extra_req, GFP_KERNEL);
 	if (!new_ref)
@@ -1443,7 +1525,6 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
 			elem_size = sizeof(s32);
 		break;
 	}
-	tot_ctrl_size = elem_size * elems;
 
 	/* Sanity checks */
 	if (id == 0 || name == NULL || !elem_size ||
@@ -1464,17 +1545,33 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
 		handler_set_err(hdl, -EINVAL);
 		return NULL;
 	}
+	if (flags & V4L2_CTRL_FLAG_DYNAMIC_ARRAY) {
+		/*
+		 * For now only support this for one-dimensional arrays only.
+		 *
+		 * This can be relaxed in the future, but this will
+		 * require more effort.
+		 */
+		if (nr_of_dims != 1) {
+			handler_set_err(hdl, -EINVAL);
+			return NULL;
+		}
+		/* Start with just 1 element */
+		elems = 1;
+	}
 
+	tot_ctrl_size = elem_size * elems;
 	sz_extra = 0;
 	if (type == V4L2_CTRL_TYPE_BUTTON)
 		flags |= V4L2_CTRL_FLAG_WRITE_ONLY |
 			V4L2_CTRL_FLAG_EXECUTE_ON_WRITE;
 	else if (type == V4L2_CTRL_TYPE_CTRL_CLASS)
 		flags |= V4L2_CTRL_FLAG_READ_ONLY;
-	else if (type == V4L2_CTRL_TYPE_INTEGER64 ||
-		 type == V4L2_CTRL_TYPE_STRING ||
-		 type >= V4L2_CTRL_COMPOUND_TYPES ||
-		 is_array)
+	else if (!(flags & V4L2_CTRL_FLAG_DYNAMIC_ARRAY) &&
+		 (type == V4L2_CTRL_TYPE_INTEGER64 ||
+		  type == V4L2_CTRL_TYPE_STRING ||
+		  type >= V4L2_CTRL_COMPOUND_TYPES ||
+		  is_array))
 		sz_extra += 2 * tot_ctrl_size;
 
 	if (type >= V4L2_CTRL_COMPOUND_TYPES && p_def.p_const)
@@ -1503,7 +1600,9 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
 	ctrl->is_ptr = is_array || type >= V4L2_CTRL_COMPOUND_TYPES || ctrl->is_string;
 	ctrl->is_int = !ctrl->is_ptr && type != V4L2_CTRL_TYPE_INTEGER64;
 	ctrl->is_array = is_array;
+	ctrl->is_dyn_array = !!(flags & V4L2_CTRL_FLAG_DYNAMIC_ARRAY);
 	ctrl->elems = elems;
+	ctrl->new_elems = elems;
 	ctrl->nr_of_dims = nr_of_dims;
 	if (nr_of_dims)
 		memcpy(ctrl->dims, dims, nr_of_dims * sizeof(dims[0]));
@@ -1516,6 +1615,16 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
 	ctrl->cur.val = ctrl->val = def;
 	data = &ctrl[1];
 
+	if (ctrl->is_dyn_array) {
+		ctrl->p_dyn_alloc_elems = elems;
+		ctrl->p_dyn = kvzalloc(2 * elems * elem_size, GFP_KERNEL);
+		if (!ctrl->p_dyn) {
+			kvfree(ctrl);
+			return NULL;
+		}
+		data = ctrl->p_dyn;
+	}
+
 	if (!ctrl->is_int) {
 		ctrl->p_new.p = data;
 		ctrl->p_cur.p = data + tot_ctrl_size;
@@ -1525,7 +1634,10 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
 	}
 
 	if (type >= V4L2_CTRL_COMPOUND_TYPES && p_def.p_const) {
-		ctrl->p_def.p = ctrl->p_cur.p + tot_ctrl_size;
+		if (ctrl->is_dyn_array)
+			ctrl->p_def.p = &ctrl[1];
+		else
+			ctrl->p_def.p = ctrl->p_cur.p + tot_ctrl_size;
 		memcpy(ctrl->p_def.p, p_def.p_const, elem_size);
 	}
 
@@ -1535,6 +1647,7 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
 	}
 
 	if (handler_new_ref(hdl, ctrl, NULL, false, false)) {
+		kvfree(ctrl->p_dyn);
 		kvfree(ctrl);
 		return NULL;
 	}
@@ -1872,6 +1985,9 @@ static int cluster_changed(struct v4l2_ctrl *master)
 			continue;
 		}
 
+		if (ctrl->elems != ctrl->new_elems)
+			ctrl_changed = true;
+
 		for (idx = 0; !ctrl_changed && idx < ctrl->elems; idx++)
 			ctrl_changed = !ctrl->type_ops->equal(ctrl, idx,
 				ctrl->p_cur, ctrl->p_new);
diff --git a/drivers/media/v4l2-core/v4l2-ctrls-priv.h b/drivers/media/v4l2-core/v4l2-ctrls-priv.h
index d4bf2c716f97..aba6176fab6c 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-priv.h
+++ b/drivers/media/v4l2-core/v4l2-ctrls-priv.h
@@ -57,10 +57,9 @@ void cur_to_new(struct v4l2_ctrl *ctrl);
 void cur_to_req(struct v4l2_ctrl_ref *ref);
 void new_to_cur(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 ch_flags);
 void new_to_req(struct v4l2_ctrl_ref *ref);
-void req_to_new(struct v4l2_ctrl_ref *ref);
+int req_to_new(struct v4l2_ctrl_ref *ref);
 void send_initial_event(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl);
 void send_event(struct v4l2_fh *fh, struct v4l2_ctrl *ctrl, u32 changes);
-int validate_new(const struct v4l2_ctrl *ctrl, union v4l2_ctrl_ptr p_new);
 int handler_new_ref(struct v4l2_ctrl_handler *hdl,
 		    struct v4l2_ctrl *ctrl,
 		    struct v4l2_ctrl_ref **ctrl_ref,
diff --git a/drivers/media/v4l2-core/v4l2-ctrls-request.c b/drivers/media/v4l2-core/v4l2-ctrls-request.c
index 7d098f287fd9..c637049d7a2b 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-request.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-request.c
@@ -143,7 +143,7 @@ v4l2_ctrl_request_hdl_ctrl_find(struct v4l2_ctrl_handler *hdl, u32 id)
 {
 	struct v4l2_ctrl_ref *ref = find_ref_lock(hdl, id);
 
-	return (ref && ref->valid_p_req) ? ref->ctrl : NULL;
+	return (ref && ref->p_req_valid) ? ref->ctrl : NULL;
 }
 EXPORT_SYMBOL_GPL(v4l2_ctrl_request_hdl_ctrl_find);
 
@@ -373,7 +373,7 @@ void v4l2_ctrl_request_complete(struct media_request *req,
 			v4l2_ctrl_unlock(master);
 			continue;
 		}
-		if (ref->valid_p_req)
+		if (ref->p_req_valid)
 			continue;
 
 		/* Copy the current control value into the request */
@@ -442,7 +442,7 @@ int v4l2_ctrl_request_setup(struct media_request *req,
 				struct v4l2_ctrl_ref *r =
 					find_ref(hdl, master->cluster[i]->id);
 
-				if (r->valid_p_req) {
+				if (r->p_req_valid) {
 					have_new_data = true;
 					break;
 				}
@@ -458,7 +458,11 @@ int v4l2_ctrl_request_setup(struct media_request *req,
 				struct v4l2_ctrl_ref *r =
 					find_ref(hdl, master->cluster[i]->id);
 
-				req_to_new(r);
+				ret = req_to_new(r);
+				if (ret) {
+					v4l2_ctrl_unlock(master);
+					goto error;
+				}
 				master->cluster[i]->is_new = 1;
 				r->req_done = true;
 			}
@@ -490,6 +494,7 @@ int v4l2_ctrl_request_setup(struct media_request *req,
 			break;
 	}
 
+error:
 	media_request_object_put(obj);
 	return ret;
 }
diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h
index b3ce438f1329..f4105de8a8d2 100644
--- a/include/media/v4l2-ctrls.h
+++ b/include/media/v4l2-ctrls.h
@@ -185,6 +185,8 @@ typedef void (*v4l2_ctrl_notify_fnc)(struct v4l2_ctrl *ctrl, void *priv);
  *		and/or has type %V4L2_CTRL_TYPE_STRING. In other words, &struct
  *		v4l2_ext_control uses field p to point to the data.
  * @is_array: If set, then this control contains an N-dimensional array.
+ * @is_dyn_array: If set, then this control contains a dynamically sized 1-dimensional array.
+ *		If this is set, then @is_array is also set.
  * @has_volatiles: If set, then one or more members of the cluster are volatile.
  *		Drivers should never touch this flag.
  * @call_notify: If set, then call the handler's notify function whenever the
@@ -205,6 +207,9 @@ typedef void (*v4l2_ctrl_notify_fnc)(struct v4l2_ctrl *ctrl, void *priv);
  * @step:	The control's step value for non-menu controls.
  * @elems:	The number of elements in the N-dimensional array.
  * @elem_size:	The size in bytes of the control.
+ * @new_elems:	The number of elements in p_new. This is the same as @elems,
+ *		except for dynamic arrays. In that case it is in the range of
+ *		1 to @p_dyn_alloc_elems.
  * @dims:	The size of each dimension.
  * @nr_of_dims:The number of dimensions in @dims.
  * @menu_skip_mask: The control's skip mask for menu controls. This makes it
@@ -223,15 +228,21 @@ typedef void (*v4l2_ctrl_notify_fnc)(struct v4l2_ctrl *ctrl, void *priv);
  *		:math:`ceil(\frac{maximum - minimum}{step}) + 1`.
  *		Used only if the @type is %V4L2_CTRL_TYPE_INTEGER_MENU.
  * @flags:	The control's flags.
- * @cur:	Structure to store the current value.
- * @cur.val:	The control's current value, if the @type is represented via
- *		a u32 integer (see &enum v4l2_ctrl_type).
- * @val:	The control's new s32 value.
  * @priv:	The control's private pointer. For use by the driver. It is
  *		untouched by the control framework. Note that this pointer is
  *		not freed when the control is deleted. Should this be needed
  *		then a new internal bitfield can be added to tell the framework
  *		to free this pointer.
+ * @p_dyn:	Pointer to the dynamically allocated array. Only valid if
+ *		@is_dyn_array is true.
+ * @p_dyn_alloc_elems: The number of elements in the dynamically allocated
+ *		array for both the cur and new values. So @p_dyn is actually
+ *		sized for 2 * @p_dyn_alloc_elems * @elem_size. Only valid if
+ *		@is_dyn_array is true.
+ * @cur:	Structure to store the current value.
+ * @cur.val:	The control's current value, if the @type is represented via
+ *		a u32 integer (see &enum v4l2_ctrl_type).
+ * @val:	The control's new s32 value.
  * @p_def:	The control's default value represented via a union which
  *		provides a standard way of accessing control types
  *		through a pointer (for compound controls only).
@@ -260,6 +271,7 @@ struct v4l2_ctrl {
 	unsigned int is_string:1;
 	unsigned int is_ptr:1;
 	unsigned int is_array:1;
+	unsigned int is_dyn_array:1;
 	unsigned int has_volatiles:1;
 	unsigned int call_notify:1;
 	unsigned int manual_mode_value:8;
@@ -272,6 +284,7 @@ struct v4l2_ctrl {
 	s64 minimum, maximum, default_value;
 	u32 elems;
 	u32 elem_size;
+	u32 new_elems;
 	u32 dims[V4L2_CTRL_MAX_DIMS];
 	u32 nr_of_dims;
 	union {
@@ -284,6 +297,8 @@ struct v4l2_ctrl {
 	};
 	unsigned long flags;
 	void *priv;
+	void *p_dyn;
+	u32 p_dyn_alloc_elems;
 	s32 val;
 	struct {
 		s32 val;
@@ -309,12 +324,22 @@ struct v4l2_ctrl {
  *		the control has been applied. This prevents applying controls
  *		from a cluster with multiple controls twice (when the first
  *		control of a cluster is applied, they all are).
- * @valid_p_req: If set, then p_req contains the control value for the request.
+ * @p_req_valid: If set, then p_req contains the control value for the request.
+ * @p_req_dyn_enomem: If set, then p_req is invalid since allocating space for
+ *		a dynamic array failed. Attempting to read this value shall
+ *		result in ENOMEM. Only valid if ctrl->is_dyn_array is true.
+ * @p_req_dyn_alloc_elems: The number of elements allocated for the dynamic
+ *		array. Only valid if @p_req_valid and ctrl->is_dyn_array are
+ *		true.
+ * @p_req_elems: The number of elements in @p_req. This is the same as
+ *		ctrl->elems, except for dynamic arrays. In that case it is in
+ *		the range of 1 to @p_req_dyn_alloc_elems. Only valid if
+ *		@p_req_valid is true.
  * @p_req:	If the control handler containing this control reference
  *		is bound to a media request, then this points to the
  *		value of the control that must be applied when the request
  *		is executed, or to the value of the control at the time
- *		that the request was completed. If @valid_p_req is false,
+ *		that the request was completed. If @p_req_valid is false,
  *		then this control was never set for this request and the
  *		control will not be updated when this request is applied.
  *
@@ -329,7 +354,10 @@ struct v4l2_ctrl_ref {
 	struct v4l2_ctrl_helper *helper;
 	bool from_other_dev;
 	bool req_done;
-	bool valid_p_req;
+	bool p_req_valid;
+	bool p_req_dyn_enomem;
+	u32 p_req_dyn_alloc_elems;
+	u32 p_req_elems;
 	union v4l2_ctrl_ptr p_req;
 };
 
-- 
2.32.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH v4 03/15] vivid: add dynamic array test control
  2022-02-28 14:08 ` Benjamin Gaignard
@ 2022-02-28 14:08   ` Benjamin Gaignard
  -1 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Hans Verkuil

From: Hans Verkuil <hverkuil-cisco@xs4all.nl>

Add a dynamic array test control to help test support for this
feature.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
---
 drivers/media/test-drivers/vivid/vivid-ctrls.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/drivers/media/test-drivers/vivid/vivid-ctrls.c b/drivers/media/test-drivers/vivid/vivid-ctrls.c
index e7516dc1227b..7267892dc18a 100644
--- a/drivers/media/test-drivers/vivid/vivid-ctrls.c
+++ b/drivers/media/test-drivers/vivid/vivid-ctrls.c
@@ -34,6 +34,7 @@
 #define VIVID_CID_U8_4D_ARRAY		(VIVID_CID_CUSTOM_BASE + 10)
 #define VIVID_CID_AREA			(VIVID_CID_CUSTOM_BASE + 11)
 #define VIVID_CID_RO_INTEGER		(VIVID_CID_CUSTOM_BASE + 12)
+#define VIVID_CID_U32_DYN_ARRAY		(VIVID_CID_CUSTOM_BASE + 13)
 
 #define VIVID_CID_VIVID_BASE		(0x00f00000 | 0xf000)
 #define VIVID_CID_VIVID_CLASS		(0x00f00000 | 1)
@@ -189,6 +190,19 @@ static const struct v4l2_ctrl_config vivid_ctrl_u32_array = {
 	.dims = { 1 },
 };
 
+static const struct v4l2_ctrl_config vivid_ctrl_u32_dyn_array = {
+	.ops = &vivid_user_gen_ctrl_ops,
+	.id = VIVID_CID_U32_DYN_ARRAY,
+	.name = "U32 Dynamic Array",
+	.type = V4L2_CTRL_TYPE_U32,
+	.flags = V4L2_CTRL_FLAG_DYNAMIC_ARRAY,
+	.def = 50,
+	.min = 10,
+	.max = 90,
+	.step = 1,
+	.dims = { 100 },
+};
+
 static const struct v4l2_ctrl_config vivid_ctrl_u16_matrix = {
 	.ops = &vivid_user_gen_ctrl_ops,
 	.id = VIVID_CID_U16_MATRIX,
@@ -1612,6 +1626,7 @@ int vivid_create_controls(struct vivid_dev *dev, bool show_ccs_cap,
 	dev->ro_int32 = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_ro_int32, NULL);
 	v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_area, NULL);
 	v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_u32_array, NULL);
+	v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_u32_dyn_array, NULL);
 	v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_u16_matrix, NULL);
 	v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_u8_4d_array, NULL);
 
-- 
2.32.0


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

* [PATCH v4 03/15] vivid: add dynamic array test control
@ 2022-02-28 14:08   ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Hans Verkuil

From: Hans Verkuil <hverkuil-cisco@xs4all.nl>

Add a dynamic array test control to help test support for this
feature.

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
---
 drivers/media/test-drivers/vivid/vivid-ctrls.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/drivers/media/test-drivers/vivid/vivid-ctrls.c b/drivers/media/test-drivers/vivid/vivid-ctrls.c
index e7516dc1227b..7267892dc18a 100644
--- a/drivers/media/test-drivers/vivid/vivid-ctrls.c
+++ b/drivers/media/test-drivers/vivid/vivid-ctrls.c
@@ -34,6 +34,7 @@
 #define VIVID_CID_U8_4D_ARRAY		(VIVID_CID_CUSTOM_BASE + 10)
 #define VIVID_CID_AREA			(VIVID_CID_CUSTOM_BASE + 11)
 #define VIVID_CID_RO_INTEGER		(VIVID_CID_CUSTOM_BASE + 12)
+#define VIVID_CID_U32_DYN_ARRAY		(VIVID_CID_CUSTOM_BASE + 13)
 
 #define VIVID_CID_VIVID_BASE		(0x00f00000 | 0xf000)
 #define VIVID_CID_VIVID_CLASS		(0x00f00000 | 1)
@@ -189,6 +190,19 @@ static const struct v4l2_ctrl_config vivid_ctrl_u32_array = {
 	.dims = { 1 },
 };
 
+static const struct v4l2_ctrl_config vivid_ctrl_u32_dyn_array = {
+	.ops = &vivid_user_gen_ctrl_ops,
+	.id = VIVID_CID_U32_DYN_ARRAY,
+	.name = "U32 Dynamic Array",
+	.type = V4L2_CTRL_TYPE_U32,
+	.flags = V4L2_CTRL_FLAG_DYNAMIC_ARRAY,
+	.def = 50,
+	.min = 10,
+	.max = 90,
+	.step = 1,
+	.dims = { 100 },
+};
+
 static const struct v4l2_ctrl_config vivid_ctrl_u16_matrix = {
 	.ops = &vivid_user_gen_ctrl_ops,
 	.id = VIVID_CID_U16_MATRIX,
@@ -1612,6 +1626,7 @@ int vivid_create_controls(struct vivid_dev *dev, bool show_ccs_cap,
 	dev->ro_int32 = v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_ro_int32, NULL);
 	v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_area, NULL);
 	v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_u32_array, NULL);
+	v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_u32_dyn_array, NULL);
 	v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_u16_matrix, NULL);
 	v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_u8_4d_array, NULL);
 
-- 
2.32.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH v4 04/15] media: uapi: HEVC: Add missing fields in HEVC controls
  2022-02-28 14:08 ` Benjamin Gaignard
@ 2022-02-28 14:08   ` Benjamin Gaignard
  -1 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Benjamin Gaignard

Complete the HEVC controls with missing fields from H.265 specifications.
Even if these fields aren't used by the current mainlined drivers
they will be need for (at least) rkvdec driver.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
 .../media/v4l/ext-ctrls-codec.rst             | 22 +++++++++++++++++++
 include/media/hevc-ctrls.h                    |  6 ++++-
 2 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
index 4cd7c541fc30..d096cb75993a 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
@@ -2661,6 +2661,16 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
     :stub-columns: 0
     :widths:       1 1 2
 
+    * - __u8
+      - ``video_parameter_set_id``
+      - Specifies the value of the vps_video_parameter_set_id of the active VPS
+        as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
+        of H.265 specifications.
+    * - __u8
+      - ``seq_parameter_set_id``
+      - Provides an identifier for the SPS for reference by other syntax elements
+        as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
+        of H.265 specifications.
     * - __u16
       - ``pic_width_in_luma_samples``
       -
@@ -2800,6 +2810,9 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
     :stub-columns: 0
     :widths:       1 1 2
 
+    * - __u8
+      - ``pic_parameter_set_id``
+      - Identifies the PPS for reference by other syntax elements.
     * - __u8
       - ``num_extra_slice_header_bits``
       -
@@ -3026,6 +3039,15 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
     * - __u8
       - ``ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
       - The list of L1 reference elements as indices in the DPB.
+    * - __u16
+      - ``short_term_ref_pic_set_size``
+      - Specifies the number of st_ref_pic_set( ) syntax structures included in the SPS.
+        The value of num_short_term_ref_pic_sets shall be in the range of 0 to 64, inclusive.
+    * - __u16
+      - ``long_term_ref_pic_set_size``
+      - Specifies the number of candidate long-term reference pictures that are specified
+        in the SPS. The value of num_long_term_ref_pics_sps shall be in the range
+        of 0 to 32, inclusive.
     * - __u8
       - ``padding``
       - Applications and drivers must set this to zero.
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
index 01ccda48d8c5..a329e086a89a 100644
--- a/include/media/hevc-ctrls.h
+++ b/include/media/hevc-ctrls.h
@@ -58,6 +58,8 @@ enum v4l2_mpeg_video_hevc_start_code {
 /* The controls are not stable at the moment and will likely be reworked. */
 struct v4l2_ctrl_hevc_sps {
 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Sequence parameter set */
+	__u8	video_parameter_set_id;
+	__u8	seq_parameter_set_id;
 	__u16	pic_width_in_luma_samples;
 	__u16	pic_height_in_luma_samples;
 	__u8	bit_depth_luma_minus8;
@@ -108,6 +110,7 @@ struct v4l2_ctrl_hevc_sps {
 
 struct v4l2_ctrl_hevc_pps {
 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture parameter set */
+	__u8	pic_parameter_set_id;
 	__u8	num_extra_slice_header_bits;
 	__u8	num_ref_idx_l0_default_active_minus1;
 	__u8	num_ref_idx_l1_default_active_minus1;
@@ -199,7 +202,8 @@ struct v4l2_ctrl_hevc_slice_params {
 	__u32	slice_segment_addr;
 	__u8	ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
 	__u8	ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
-
+	__u16	short_term_ref_pic_set_size;
+	__u16	long_term_ref_pic_set_size;
 	__u8	padding;
 
 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction parameter */
-- 
2.32.0


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

* [PATCH v4 04/15] media: uapi: HEVC: Add missing fields in HEVC controls
@ 2022-02-28 14:08   ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Benjamin Gaignard

Complete the HEVC controls with missing fields from H.265 specifications.
Even if these fields aren't used by the current mainlined drivers
they will be need for (at least) rkvdec driver.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
 .../media/v4l/ext-ctrls-codec.rst             | 22 +++++++++++++++++++
 include/media/hevc-ctrls.h                    |  6 ++++-
 2 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
index 4cd7c541fc30..d096cb75993a 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
@@ -2661,6 +2661,16 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
     :stub-columns: 0
     :widths:       1 1 2
 
+    * - __u8
+      - ``video_parameter_set_id``
+      - Specifies the value of the vps_video_parameter_set_id of the active VPS
+        as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
+        of H.265 specifications.
+    * - __u8
+      - ``seq_parameter_set_id``
+      - Provides an identifier for the SPS for reference by other syntax elements
+        as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
+        of H.265 specifications.
     * - __u16
       - ``pic_width_in_luma_samples``
       -
@@ -2800,6 +2810,9 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
     :stub-columns: 0
     :widths:       1 1 2
 
+    * - __u8
+      - ``pic_parameter_set_id``
+      - Identifies the PPS for reference by other syntax elements.
     * - __u8
       - ``num_extra_slice_header_bits``
       -
@@ -3026,6 +3039,15 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
     * - __u8
       - ``ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
       - The list of L1 reference elements as indices in the DPB.
+    * - __u16
+      - ``short_term_ref_pic_set_size``
+      - Specifies the number of st_ref_pic_set( ) syntax structures included in the SPS.
+        The value of num_short_term_ref_pic_sets shall be in the range of 0 to 64, inclusive.
+    * - __u16
+      - ``long_term_ref_pic_set_size``
+      - Specifies the number of candidate long-term reference pictures that are specified
+        in the SPS. The value of num_long_term_ref_pics_sps shall be in the range
+        of 0 to 32, inclusive.
     * - __u8
       - ``padding``
       - Applications and drivers must set this to zero.
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
index 01ccda48d8c5..a329e086a89a 100644
--- a/include/media/hevc-ctrls.h
+++ b/include/media/hevc-ctrls.h
@@ -58,6 +58,8 @@ enum v4l2_mpeg_video_hevc_start_code {
 /* The controls are not stable at the moment and will likely be reworked. */
 struct v4l2_ctrl_hevc_sps {
 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Sequence parameter set */
+	__u8	video_parameter_set_id;
+	__u8	seq_parameter_set_id;
 	__u16	pic_width_in_luma_samples;
 	__u16	pic_height_in_luma_samples;
 	__u8	bit_depth_luma_minus8;
@@ -108,6 +110,7 @@ struct v4l2_ctrl_hevc_sps {
 
 struct v4l2_ctrl_hevc_pps {
 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture parameter set */
+	__u8	pic_parameter_set_id;
 	__u8	num_extra_slice_header_bits;
 	__u8	num_ref_idx_l0_default_active_minus1;
 	__u8	num_ref_idx_l1_default_active_minus1;
@@ -199,7 +202,8 @@ struct v4l2_ctrl_hevc_slice_params {
 	__u32	slice_segment_addr;
 	__u8	ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
 	__u8	ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
-
+	__u16	short_term_ref_pic_set_size;
+	__u16	long_term_ref_pic_set_size;
 	__u8	padding;
 
 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction parameter */
-- 
2.32.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH v4 05/15] media: uapi: HEVC: Rename HEVC stateless controls with STATELESS prefix
  2022-02-28 14:08 ` Benjamin Gaignard
@ 2022-02-28 14:08   ` Benjamin Gaignard
  -1 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Benjamin Gaignard

Change HEVC  stateless controls names to V4L2_CID_STATELESS_HEVC instead
of V4L2_CID_MPEG_VIDEO_HEVC be coherent with v4l2 naming convention.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
version 4:
- put controls under stateless section in v4l2-ctrls-defs.c

 .../media/v4l/ext-ctrls-codec.rst             | 26 +++++++--------
 drivers/media/v4l2-core/v4l2-ctrls-defs.c     | 32 +++++++++----------
 drivers/staging/media/hantro/hantro_drv.c     | 26 +++++++--------
 drivers/staging/media/hantro/hantro_hevc.c    |  8 ++---
 drivers/staging/media/sunxi/cedrus/cedrus.c   | 24 +++++++-------
 .../staging/media/sunxi/cedrus/cedrus_dec.c   | 10 +++---
 include/media/hevc-ctrls.h                    | 26 +++++++--------
 7 files changed, 76 insertions(+), 76 deletions(-)

diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
index d096cb75993a..acf49420e56d 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
@@ -2639,7 +2639,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
 
 .. _v4l2-mpeg-hevc:
 
-``V4L2_CID_MPEG_VIDEO_HEVC_SPS (struct)``
+``V4L2_CID_STATELESS_HEVC_SPS (struct)``
     Specifies the Sequence Parameter Set fields (as extracted from the
     bitstream) for the associated HEVC slice data.
     These bitstream parameters are defined according to :ref:`hevc`.
@@ -2792,7 +2792,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
 
     \normalsize
 
-``V4L2_CID_MPEG_VIDEO_HEVC_PPS (struct)``
+``V4L2_CID_STATELESS_HEVC_PPS (struct)``
     Specifies the Picture Parameter Set fields (as extracted from the
     bitstream) for the associated HEVC slice data.
     These bitstream parameters are defined according to :ref:`hevc`.
@@ -2945,7 +2945,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
 
     \normalsize
 
-``V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS (struct)``
+``V4L2_CID_STATELESS_HEVC_SLICE_PARAMS (struct)``
     Specifies various slice-specific parameters, especially from the NAL unit
     header, general slice segment header and weighted prediction parameter
     parts of the bitstream.
@@ -3110,7 +3110,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
 
     \normalsize
 
-``V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX (struct)``
+``V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (struct)``
     Specifies the HEVC scaling matrix parameters used for the scaling process
     for transform coefficients.
     These matrix and parameters are defined according to :ref:`hevc`.
@@ -3260,7 +3260,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
 
     \normalsize
 
-``V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE (enum)``
+``V4L2_CID_STATELESS_HEVC_DECODE_MODE (enum)``
     Specifies the decoding mode to use. Currently exposes slice-based and
     frame-based decoding but new modes might be added later on.
     This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
@@ -3275,7 +3275,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
        This menu control is not yet part of the public kernel API and
        it is expected to change.
 
-.. c:type:: v4l2_mpeg_video_hevc_decode_mode
+.. c:type:: v4l2_stateless_hevc_decode_mode
 
 .. raw:: latex
 
@@ -3288,11 +3288,11 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
     :stub-columns: 0
     :widths:       1 1 2
 
-    * - ``V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_SLICE_BASED``
+    * - ``V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED``
       - 0
       - Decoding is done at the slice granularity.
         The OUTPUT buffer must contain a single slice.
-    * - ``V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED``
+    * - ``V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED``
       - 1
       - Decoding is done at the frame granularity.
         The OUTPUT buffer must contain all slices needed to decode the
@@ -3302,7 +3302,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
 
     \normalsize
 
-``V4L2_CID_MPEG_VIDEO_HEVC_START_CODE (enum)``
+``V4L2_CID_STATELESS_HEVC_START_CODE (enum)``
     Specifies the HEVC slice start code expected for each slice.
     This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
     pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE
@@ -3316,7 +3316,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
        This menu control is not yet part of the public kernel API and
        it is expected to change.
 
-.. c:type:: v4l2_mpeg_video_hevc_start_code
+.. c:type:: v4l2_stateless_hevc_start_code
 
 .. tabularcolumns:: |p{9.2cm}|p{0.6cm}|p{7.5cm}|
 
@@ -3325,13 +3325,13 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
     :stub-columns: 0
     :widths:       1 1 2
 
-    * - ``V4L2_MPEG_VIDEO_HEVC_START_CODE_NONE``
+    * - ``V4L2_STATELESS_HEVC_START_CODE_NONE``
       - 0
       - Selecting this value specifies that HEVC slices are passed
         to the driver without any start code. The bitstream data should be
         according to :ref:`hevc` 7.3.1.1 General NAL unit syntax, hence
         contains emulation prevention bytes when required.
-    * - ``V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B``
+    * - ``V4L2_STATELESS_HEVC_START_CODE_ANNEX_B``
       - 1
       - Selecting this value specifies that HEVC slices are expected
         to be prefixed by Annex B start codes. According to :ref:`hevc`
@@ -3364,7 +3364,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
     This provides a bitmask which consists of bits [0, LTR_COUNT-1].
     This is applicable to the H264 and HEVC encoders.
 
-``V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS (struct)``
+``V4L2_CID_STATELESS_HEVC_DECODE_PARAMS (struct)``
     Specifies various decode parameters, especially the references picture order
     count (POC) for all the lists (short, long, before, current, after) and the
     number of entries for each of them.
diff --git a/drivers/media/v4l2-core/v4l2-ctrls-defs.c b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
index 54ca4e6b820b..4b68cbe23309 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-defs.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
@@ -699,9 +699,9 @@ const char * const *v4l2_ctrl_get_menu(u32 id)
 		return hevc_tier;
 	case V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE:
 		return hevc_loop_filter_mode;
-	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE:
+	case V4L2_CID_STATELESS_HEVC_DECODE_MODE:
 		return hevc_decode_mode;
-	case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE:
+	case V4L2_CID_STATELESS_HEVC_START_CODE:
 		return hevc_start_code;
 	case V4L2_CID_CAMERA_ORIENTATION:
 		return camera_orientation;
@@ -995,13 +995,6 @@ const char *v4l2_ctrl_get_name(u32 id)
 	case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD:	return "HEVC Size of Length Field";
 	case V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES:	return "Reference Frames for a P-Frame";
 	case V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR:		return "Prepend SPS and PPS to IDR";
-	case V4L2_CID_MPEG_VIDEO_HEVC_SPS:			return "HEVC Sequence Parameter Set";
-	case V4L2_CID_MPEG_VIDEO_HEVC_PPS:			return "HEVC Picture Parameter Set";
-	case V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS:		return "HEVC Slice Parameters";
-	case V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX:		return "HEVC Scaling Matrix";
-	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS:		return "HEVC Decode Parameters";
-	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE:		return "HEVC Decode Mode";
-	case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE:		return "HEVC Start Code";
 
 	/* CAMERA controls */
 	/* Keep the order of the 'case's the same as in v4l2-controls.h! */
@@ -1180,6 +1173,13 @@ const char *v4l2_ctrl_get_name(u32 id)
 	case V4L2_CID_STATELESS_MPEG2_QUANTISATION:		return "MPEG-2 Quantisation Matrices";
 	case V4L2_CID_STATELESS_VP9_COMPRESSED_HDR:	return "VP9 Probabilities Updates";
 	case V4L2_CID_STATELESS_VP9_FRAME:			return "VP9 Frame Decode Parameters";
+	case V4L2_CID_STATELESS_HEVC_SPS:			return "HEVC Sequence Parameter Set";
+	case V4L2_CID_STATELESS_HEVC_PPS:			return "HEVC Picture Parameter Set";
+	case V4L2_CID_STATELESS_HEVC_SLICE_PARAMS:		return "HEVC Slice Parameters";
+	case V4L2_CID_STATELESS_HEVC_SCALING_MATRIX:		return "HEVC Scaling Matrix";
+	case V4L2_CID_STATELESS_HEVC_DECODE_PARAMS:		return "HEVC Decode Parameters";
+	case V4L2_CID_STATELESS_HEVC_DECODE_MODE:		return "HEVC Decode Mode";
+	case V4L2_CID_STATELESS_HEVC_START_CODE:		return "HEVC Start Code";
 
 	/* Colorimetry controls */
 	/* Keep the order of the 'case's the same as in v4l2-controls.h! */
@@ -1355,8 +1355,8 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
 	case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD:
 	case V4L2_CID_MPEG_VIDEO_HEVC_TIER:
 	case V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE:
-	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE:
-	case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE:
+	case V4L2_CID_STATELESS_HEVC_DECODE_MODE:
+	case V4L2_CID_STATELESS_HEVC_START_CODE:
 	case V4L2_CID_STATELESS_H264_DECODE_MODE:
 	case V4L2_CID_STATELESS_H264_START_CODE:
 	case V4L2_CID_CAMERA_ORIENTATION:
@@ -1493,19 +1493,19 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
 	case V4L2_CID_STATELESS_VP8_FRAME:
 		*type = V4L2_CTRL_TYPE_VP8_FRAME;
 		break;
-	case V4L2_CID_MPEG_VIDEO_HEVC_SPS:
+	case V4L2_CID_STATELESS_HEVC_SPS:
 		*type = V4L2_CTRL_TYPE_HEVC_SPS;
 		break;
-	case V4L2_CID_MPEG_VIDEO_HEVC_PPS:
+	case V4L2_CID_STATELESS_HEVC_PPS:
 		*type = V4L2_CTRL_TYPE_HEVC_PPS;
 		break;
-	case V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS:
+	case V4L2_CID_STATELESS_HEVC_SLICE_PARAMS:
 		*type = V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS;
 		break;
-	case V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX:
+	case V4L2_CID_STATELESS_HEVC_SCALING_MATRIX:
 		*type = V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX;
 		break;
-	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS:
+	case V4L2_CID_STATELESS_HEVC_DECODE_PARAMS:
 		*type = V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS;
 		break;
 	case V4L2_CID_STATELESS_VP9_COMPRESSED_HDR:
diff --git a/drivers/staging/media/hantro/hantro_drv.c b/drivers/staging/media/hantro/hantro_drv.c
index dc768884cb79..6f58c259d8fc 100644
--- a/drivers/staging/media/hantro/hantro_drv.c
+++ b/drivers/staging/media/hantro/hantro_drv.c
@@ -255,7 +255,7 @@ static int hantro_try_ctrl(struct v4l2_ctrl *ctrl)
 		if (sps->bit_depth_luma_minus8 != 0)
 			/* Only 8-bit is supported */
 			return -EINVAL;
-	} else if (ctrl->id == V4L2_CID_MPEG_VIDEO_HEVC_SPS) {
+	} else if (ctrl->id == V4L2_CID_STATELESS_HEVC_SPS) {
 		const struct v4l2_ctrl_hevc_sps *sps = ctrl->p_new.p_hevc_sps;
 
 		if (sps->bit_depth_luma_minus8 != sps->bit_depth_chroma_minus8)
@@ -428,18 +428,18 @@ static const struct hantro_ctrl controls[] = {
 	}, {
 		.codec = HANTRO_HEVC_DECODER,
 		.cfg = {
-			.id = V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE,
-			.min = V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED,
-			.max = V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED,
-			.def = V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED,
+			.id = V4L2_CID_STATELESS_HEVC_DECODE_MODE,
+			.min = V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
+			.max = V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
+			.def = V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
 		},
 	}, {
 		.codec = HANTRO_HEVC_DECODER,
 		.cfg = {
-			.id = V4L2_CID_MPEG_VIDEO_HEVC_START_CODE,
-			.min = V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B,
-			.max = V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B,
-			.def = V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B,
+			.id = V4L2_CID_STATELESS_HEVC_START_CODE,
+			.min = V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
+			.max = V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
+			.def = V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
 		},
 	}, {
 		.codec = HANTRO_HEVC_DECODER,
@@ -459,23 +459,23 @@ static const struct hantro_ctrl controls[] = {
 	}, {
 		.codec = HANTRO_HEVC_DECODER,
 		.cfg = {
-			.id = V4L2_CID_MPEG_VIDEO_HEVC_SPS,
+			.id = V4L2_CID_STATELESS_HEVC_SPS,
 			.ops = &hantro_ctrl_ops,
 		},
 	}, {
 		.codec = HANTRO_HEVC_DECODER,
 		.cfg = {
-			.id = V4L2_CID_MPEG_VIDEO_HEVC_PPS,
+			.id = V4L2_CID_STATELESS_HEVC_PPS,
 		},
 	}, {
 		.codec = HANTRO_HEVC_DECODER,
 		.cfg = {
-			.id = V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS,
+			.id = V4L2_CID_STATELESS_HEVC_DECODE_PARAMS,
 		},
 	}, {
 		.codec = HANTRO_HEVC_DECODER,
 		.cfg = {
-			.id = V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX,
+			.id = V4L2_CID_STATELESS_HEVC_SCALING_MATRIX,
 		},
 	}, {
 		.codec = HANTRO_HEVC_DECODER,
diff --git a/drivers/staging/media/hantro/hantro_hevc.c b/drivers/staging/media/hantro/hantro_hevc.c
index b49a41d7ae91..b6ec86d03d91 100644
--- a/drivers/staging/media/hantro/hantro_hevc.c
+++ b/drivers/staging/media/hantro/hantro_hevc.c
@@ -201,22 +201,22 @@ int hantro_hevc_dec_prepare_run(struct hantro_ctx *ctx)
 	hantro_start_prepare_run(ctx);
 
 	ctrls->decode_params =
-		hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS);
+		hantro_get_ctrl(ctx, V4L2_CID_STATELESS_HEVC_DECODE_PARAMS);
 	if (WARN_ON(!ctrls->decode_params))
 		return -EINVAL;
 
 	ctrls->scaling =
-		hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX);
+		hantro_get_ctrl(ctx, V4L2_CID_STATELESS_HEVC_SCALING_MATRIX);
 	if (WARN_ON(!ctrls->scaling))
 		return -EINVAL;
 
 	ctrls->sps =
-		hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_HEVC_SPS);
+		hantro_get_ctrl(ctx, V4L2_CID_STATELESS_HEVC_SPS);
 	if (WARN_ON(!ctrls->sps))
 		return -EINVAL;
 
 	ctrls->pps =
-		hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_HEVC_PPS);
+		hantro_get_ctrl(ctx, V4L2_CID_STATELESS_HEVC_PPS);
 	if (WARN_ON(!ctrls->pps))
 		return -EINVAL;
 
diff --git a/drivers/staging/media/sunxi/cedrus/cedrus.c b/drivers/staging/media/sunxi/cedrus/cedrus.c
index 4a4b714b0f26..e0428163f82c 100644
--- a/drivers/staging/media/sunxi/cedrus/cedrus.c
+++ b/drivers/staging/media/sunxi/cedrus/cedrus.c
@@ -42,7 +42,7 @@ static int cedrus_try_ctrl(struct v4l2_ctrl *ctrl)
 		if (sps->bit_depth_luma_minus8 != 0)
 			/* Only 8-bit is supported */
 			return -EINVAL;
-	} else if (ctrl->id == V4L2_CID_MPEG_VIDEO_HEVC_SPS) {
+	} else if (ctrl->id == V4L2_CID_STATELESS_HEVC_SPS) {
 		const struct v4l2_ctrl_hevc_sps *sps = ctrl->p_new.p_hevc_sps;
 		struct cedrus_ctx *ctx = container_of(ctrl->handler, struct cedrus_ctx, hdl);
 
@@ -164,42 +164,42 @@ static const struct cedrus_control cedrus_controls[] = {
 	},
 	{
 		.cfg = {
-			.id	= V4L2_CID_MPEG_VIDEO_HEVC_SPS,
+			.id	= V4L2_CID_STATELESS_HEVC_SPS,
 			.ops	= &cedrus_ctrl_ops,
 		},
 		.codec		= CEDRUS_CODEC_H265,
 	},
 	{
 		.cfg = {
-			.id	= V4L2_CID_MPEG_VIDEO_HEVC_PPS,
+			.id	= V4L2_CID_STATELESS_HEVC_PPS,
 		},
 		.codec		= CEDRUS_CODEC_H265,
 	},
 	{
 		.cfg = {
-			.id	= V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS,
+			.id	= V4L2_CID_STATELESS_HEVC_SLICE_PARAMS,
 		},
 		.codec		= CEDRUS_CODEC_H265,
 	},
 	{
 		.cfg = {
-			.id	= V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX,
+			.id	= V4L2_CID_STATELESS_HEVC_SCALING_MATRIX,
 		},
 		.codec		= CEDRUS_CODEC_H265,
 	},
 	{
 		.cfg = {
-			.id	= V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE,
-			.max	= V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_SLICE_BASED,
-			.def	= V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_SLICE_BASED,
+			.id	= V4L2_CID_STATELESS_HEVC_DECODE_MODE,
+			.max	= V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
+			.def	= V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
 		},
 		.codec		= CEDRUS_CODEC_H265,
 	},
 	{
 		.cfg = {
-			.id	= V4L2_CID_MPEG_VIDEO_HEVC_START_CODE,
-			.max	= V4L2_MPEG_VIDEO_HEVC_START_CODE_NONE,
-			.def	= V4L2_MPEG_VIDEO_HEVC_START_CODE_NONE,
+			.id	= V4L2_CID_STATELESS_HEVC_START_CODE,
+			.max	= V4L2_STATELESS_HEVC_START_CODE_NONE,
+			.def	= V4L2_STATELESS_HEVC_START_CODE_NONE,
 		},
 		.codec		= CEDRUS_CODEC_H265,
 	},
@@ -211,7 +211,7 @@ static const struct cedrus_control cedrus_controls[] = {
 	},
 	{
 		.cfg = {
-			.id = V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS,
+			.id = V4L2_CID_STATELESS_HEVC_DECODE_PARAMS,
 		},
 		.codec		= CEDRUS_CODEC_H265,
 	},
diff --git a/drivers/staging/media/sunxi/cedrus/cedrus_dec.c b/drivers/staging/media/sunxi/cedrus/cedrus_dec.c
index a16c1422558f..f6be4ae72ee2 100644
--- a/drivers/staging/media/sunxi/cedrus/cedrus_dec.c
+++ b/drivers/staging/media/sunxi/cedrus/cedrus_dec.c
@@ -65,15 +65,15 @@ void cedrus_device_run(void *priv)
 
 	case V4L2_PIX_FMT_HEVC_SLICE:
 		run.h265.sps = cedrus_find_control_data(ctx,
-			V4L2_CID_MPEG_VIDEO_HEVC_SPS);
+			V4L2_CID_STATELESS_HEVC_SPS);
 		run.h265.pps = cedrus_find_control_data(ctx,
-			V4L2_CID_MPEG_VIDEO_HEVC_PPS);
+			V4L2_CID_STATELESS_HEVC_PPS);
 		run.h265.slice_params = cedrus_find_control_data(ctx,
-			V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS);
+			V4L2_CID_STATELESS_HEVC_SLICE_PARAMS);
 		run.h265.decode_params = cedrus_find_control_data(ctx,
-			V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS);
+			V4L2_CID_STATELESS_HEVC_DECODE_PARAMS);
 		run.h265.scaling_matrix = cedrus_find_control_data(ctx,
-			V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX);
+			V4L2_CID_STATELESS_HEVC_SCALING_MATRIX);
 		break;
 
 	case V4L2_PIX_FMT_VP8_FRAME:
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
index a329e086a89a..b3540167df9e 100644
--- a/include/media/hevc-ctrls.h
+++ b/include/media/hevc-ctrls.h
@@ -16,13 +16,13 @@
 /* The pixel format isn't stable at the moment and will likely be renamed. */
 #define V4L2_PIX_FMT_HEVC_SLICE v4l2_fourcc('S', '2', '6', '5') /* HEVC parsed slices */
 
-#define V4L2_CID_MPEG_VIDEO_HEVC_SPS		(V4L2_CID_CODEC_BASE + 1008)
-#define V4L2_CID_MPEG_VIDEO_HEVC_PPS		(V4L2_CID_CODEC_BASE + 1009)
-#define V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS	(V4L2_CID_CODEC_BASE + 1010)
-#define V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX	(V4L2_CID_CODEC_BASE + 1011)
-#define V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS	(V4L2_CID_CODEC_BASE + 1012)
-#define V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE	(V4L2_CID_CODEC_BASE + 1015)
-#define V4L2_CID_MPEG_VIDEO_HEVC_START_CODE	(V4L2_CID_CODEC_BASE + 1016)
+#define V4L2_CID_STATELESS_HEVC_SPS		(V4L2_CID_CODEC_BASE + 1008)
+#define V4L2_CID_STATELESS_HEVC_PPS		(V4L2_CID_CODEC_BASE + 1009)
+#define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS	(V4L2_CID_CODEC_BASE + 1010)
+#define V4L2_CID_STATELESS_HEVC_SCALING_MATRIX	(V4L2_CID_CODEC_BASE + 1011)
+#define V4L2_CID_STATELESS_HEVC_DECODE_PARAMS	(V4L2_CID_CODEC_BASE + 1012)
+#define V4L2_CID_STATELESS_HEVC_DECODE_MODE	(V4L2_CID_CODEC_BASE + 1015)
+#define V4L2_CID_STATELESS_HEVC_START_CODE	(V4L2_CID_CODEC_BASE + 1016)
 
 /* enum v4l2_ctrl_type type values */
 #define V4L2_CTRL_TYPE_HEVC_SPS 0x0120
@@ -31,14 +31,14 @@
 #define V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX 0x0123
 #define V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS 0x0124
 
-enum v4l2_mpeg_video_hevc_decode_mode {
-	V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_SLICE_BASED,
-	V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED,
+enum v4l2_stateless_hevc_decode_mode {
+	V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
+	V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
 };
 
-enum v4l2_mpeg_video_hevc_start_code {
-	V4L2_MPEG_VIDEO_HEVC_START_CODE_NONE,
-	V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B,
+enum v4l2_stateless_hevc_start_code {
+	V4L2_STATELESS_HEVC_START_CODE_NONE,
+	V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
 };
 
 #define V4L2_HEVC_SLICE_TYPE_B	0
-- 
2.32.0


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

* [PATCH v4 05/15] media: uapi: HEVC: Rename HEVC stateless controls with STATELESS prefix
@ 2022-02-28 14:08   ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Benjamin Gaignard

Change HEVC  stateless controls names to V4L2_CID_STATELESS_HEVC instead
of V4L2_CID_MPEG_VIDEO_HEVC be coherent with v4l2 naming convention.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
version 4:
- put controls under stateless section in v4l2-ctrls-defs.c

 .../media/v4l/ext-ctrls-codec.rst             | 26 +++++++--------
 drivers/media/v4l2-core/v4l2-ctrls-defs.c     | 32 +++++++++----------
 drivers/staging/media/hantro/hantro_drv.c     | 26 +++++++--------
 drivers/staging/media/hantro/hantro_hevc.c    |  8 ++---
 drivers/staging/media/sunxi/cedrus/cedrus.c   | 24 +++++++-------
 .../staging/media/sunxi/cedrus/cedrus_dec.c   | 10 +++---
 include/media/hevc-ctrls.h                    | 26 +++++++--------
 7 files changed, 76 insertions(+), 76 deletions(-)

diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
index d096cb75993a..acf49420e56d 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
@@ -2639,7 +2639,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
 
 .. _v4l2-mpeg-hevc:
 
-``V4L2_CID_MPEG_VIDEO_HEVC_SPS (struct)``
+``V4L2_CID_STATELESS_HEVC_SPS (struct)``
     Specifies the Sequence Parameter Set fields (as extracted from the
     bitstream) for the associated HEVC slice data.
     These bitstream parameters are defined according to :ref:`hevc`.
@@ -2792,7 +2792,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
 
     \normalsize
 
-``V4L2_CID_MPEG_VIDEO_HEVC_PPS (struct)``
+``V4L2_CID_STATELESS_HEVC_PPS (struct)``
     Specifies the Picture Parameter Set fields (as extracted from the
     bitstream) for the associated HEVC slice data.
     These bitstream parameters are defined according to :ref:`hevc`.
@@ -2945,7 +2945,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
 
     \normalsize
 
-``V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS (struct)``
+``V4L2_CID_STATELESS_HEVC_SLICE_PARAMS (struct)``
     Specifies various slice-specific parameters, especially from the NAL unit
     header, general slice segment header and weighted prediction parameter
     parts of the bitstream.
@@ -3110,7 +3110,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
 
     \normalsize
 
-``V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX (struct)``
+``V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (struct)``
     Specifies the HEVC scaling matrix parameters used for the scaling process
     for transform coefficients.
     These matrix and parameters are defined according to :ref:`hevc`.
@@ -3260,7 +3260,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
 
     \normalsize
 
-``V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE (enum)``
+``V4L2_CID_STATELESS_HEVC_DECODE_MODE (enum)``
     Specifies the decoding mode to use. Currently exposes slice-based and
     frame-based decoding but new modes might be added later on.
     This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
@@ -3275,7 +3275,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
        This menu control is not yet part of the public kernel API and
        it is expected to change.
 
-.. c:type:: v4l2_mpeg_video_hevc_decode_mode
+.. c:type:: v4l2_stateless_hevc_decode_mode
 
 .. raw:: latex
 
@@ -3288,11 +3288,11 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
     :stub-columns: 0
     :widths:       1 1 2
 
-    * - ``V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_SLICE_BASED``
+    * - ``V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED``
       - 0
       - Decoding is done at the slice granularity.
         The OUTPUT buffer must contain a single slice.
-    * - ``V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED``
+    * - ``V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED``
       - 1
       - Decoding is done at the frame granularity.
         The OUTPUT buffer must contain all slices needed to decode the
@@ -3302,7 +3302,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
 
     \normalsize
 
-``V4L2_CID_MPEG_VIDEO_HEVC_START_CODE (enum)``
+``V4L2_CID_STATELESS_HEVC_START_CODE (enum)``
     Specifies the HEVC slice start code expected for each slice.
     This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
     pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE
@@ -3316,7 +3316,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
        This menu control is not yet part of the public kernel API and
        it is expected to change.
 
-.. c:type:: v4l2_mpeg_video_hevc_start_code
+.. c:type:: v4l2_stateless_hevc_start_code
 
 .. tabularcolumns:: |p{9.2cm}|p{0.6cm}|p{7.5cm}|
 
@@ -3325,13 +3325,13 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
     :stub-columns: 0
     :widths:       1 1 2
 
-    * - ``V4L2_MPEG_VIDEO_HEVC_START_CODE_NONE``
+    * - ``V4L2_STATELESS_HEVC_START_CODE_NONE``
       - 0
       - Selecting this value specifies that HEVC slices are passed
         to the driver without any start code. The bitstream data should be
         according to :ref:`hevc` 7.3.1.1 General NAL unit syntax, hence
         contains emulation prevention bytes when required.
-    * - ``V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B``
+    * - ``V4L2_STATELESS_HEVC_START_CODE_ANNEX_B``
       - 1
       - Selecting this value specifies that HEVC slices are expected
         to be prefixed by Annex B start codes. According to :ref:`hevc`
@@ -3364,7 +3364,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
     This provides a bitmask which consists of bits [0, LTR_COUNT-1].
     This is applicable to the H264 and HEVC encoders.
 
-``V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS (struct)``
+``V4L2_CID_STATELESS_HEVC_DECODE_PARAMS (struct)``
     Specifies various decode parameters, especially the references picture order
     count (POC) for all the lists (short, long, before, current, after) and the
     number of entries for each of them.
diff --git a/drivers/media/v4l2-core/v4l2-ctrls-defs.c b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
index 54ca4e6b820b..4b68cbe23309 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-defs.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
@@ -699,9 +699,9 @@ const char * const *v4l2_ctrl_get_menu(u32 id)
 		return hevc_tier;
 	case V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE:
 		return hevc_loop_filter_mode;
-	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE:
+	case V4L2_CID_STATELESS_HEVC_DECODE_MODE:
 		return hevc_decode_mode;
-	case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE:
+	case V4L2_CID_STATELESS_HEVC_START_CODE:
 		return hevc_start_code;
 	case V4L2_CID_CAMERA_ORIENTATION:
 		return camera_orientation;
@@ -995,13 +995,6 @@ const char *v4l2_ctrl_get_name(u32 id)
 	case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD:	return "HEVC Size of Length Field";
 	case V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES:	return "Reference Frames for a P-Frame";
 	case V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR:		return "Prepend SPS and PPS to IDR";
-	case V4L2_CID_MPEG_VIDEO_HEVC_SPS:			return "HEVC Sequence Parameter Set";
-	case V4L2_CID_MPEG_VIDEO_HEVC_PPS:			return "HEVC Picture Parameter Set";
-	case V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS:		return "HEVC Slice Parameters";
-	case V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX:		return "HEVC Scaling Matrix";
-	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS:		return "HEVC Decode Parameters";
-	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE:		return "HEVC Decode Mode";
-	case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE:		return "HEVC Start Code";
 
 	/* CAMERA controls */
 	/* Keep the order of the 'case's the same as in v4l2-controls.h! */
@@ -1180,6 +1173,13 @@ const char *v4l2_ctrl_get_name(u32 id)
 	case V4L2_CID_STATELESS_MPEG2_QUANTISATION:		return "MPEG-2 Quantisation Matrices";
 	case V4L2_CID_STATELESS_VP9_COMPRESSED_HDR:	return "VP9 Probabilities Updates";
 	case V4L2_CID_STATELESS_VP9_FRAME:			return "VP9 Frame Decode Parameters";
+	case V4L2_CID_STATELESS_HEVC_SPS:			return "HEVC Sequence Parameter Set";
+	case V4L2_CID_STATELESS_HEVC_PPS:			return "HEVC Picture Parameter Set";
+	case V4L2_CID_STATELESS_HEVC_SLICE_PARAMS:		return "HEVC Slice Parameters";
+	case V4L2_CID_STATELESS_HEVC_SCALING_MATRIX:		return "HEVC Scaling Matrix";
+	case V4L2_CID_STATELESS_HEVC_DECODE_PARAMS:		return "HEVC Decode Parameters";
+	case V4L2_CID_STATELESS_HEVC_DECODE_MODE:		return "HEVC Decode Mode";
+	case V4L2_CID_STATELESS_HEVC_START_CODE:		return "HEVC Start Code";
 
 	/* Colorimetry controls */
 	/* Keep the order of the 'case's the same as in v4l2-controls.h! */
@@ -1355,8 +1355,8 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
 	case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD:
 	case V4L2_CID_MPEG_VIDEO_HEVC_TIER:
 	case V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE:
-	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE:
-	case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE:
+	case V4L2_CID_STATELESS_HEVC_DECODE_MODE:
+	case V4L2_CID_STATELESS_HEVC_START_CODE:
 	case V4L2_CID_STATELESS_H264_DECODE_MODE:
 	case V4L2_CID_STATELESS_H264_START_CODE:
 	case V4L2_CID_CAMERA_ORIENTATION:
@@ -1493,19 +1493,19 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
 	case V4L2_CID_STATELESS_VP8_FRAME:
 		*type = V4L2_CTRL_TYPE_VP8_FRAME;
 		break;
-	case V4L2_CID_MPEG_VIDEO_HEVC_SPS:
+	case V4L2_CID_STATELESS_HEVC_SPS:
 		*type = V4L2_CTRL_TYPE_HEVC_SPS;
 		break;
-	case V4L2_CID_MPEG_VIDEO_HEVC_PPS:
+	case V4L2_CID_STATELESS_HEVC_PPS:
 		*type = V4L2_CTRL_TYPE_HEVC_PPS;
 		break;
-	case V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS:
+	case V4L2_CID_STATELESS_HEVC_SLICE_PARAMS:
 		*type = V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS;
 		break;
-	case V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX:
+	case V4L2_CID_STATELESS_HEVC_SCALING_MATRIX:
 		*type = V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX;
 		break;
-	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS:
+	case V4L2_CID_STATELESS_HEVC_DECODE_PARAMS:
 		*type = V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS;
 		break;
 	case V4L2_CID_STATELESS_VP9_COMPRESSED_HDR:
diff --git a/drivers/staging/media/hantro/hantro_drv.c b/drivers/staging/media/hantro/hantro_drv.c
index dc768884cb79..6f58c259d8fc 100644
--- a/drivers/staging/media/hantro/hantro_drv.c
+++ b/drivers/staging/media/hantro/hantro_drv.c
@@ -255,7 +255,7 @@ static int hantro_try_ctrl(struct v4l2_ctrl *ctrl)
 		if (sps->bit_depth_luma_minus8 != 0)
 			/* Only 8-bit is supported */
 			return -EINVAL;
-	} else if (ctrl->id == V4L2_CID_MPEG_VIDEO_HEVC_SPS) {
+	} else if (ctrl->id == V4L2_CID_STATELESS_HEVC_SPS) {
 		const struct v4l2_ctrl_hevc_sps *sps = ctrl->p_new.p_hevc_sps;
 
 		if (sps->bit_depth_luma_minus8 != sps->bit_depth_chroma_minus8)
@@ -428,18 +428,18 @@ static const struct hantro_ctrl controls[] = {
 	}, {
 		.codec = HANTRO_HEVC_DECODER,
 		.cfg = {
-			.id = V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE,
-			.min = V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED,
-			.max = V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED,
-			.def = V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED,
+			.id = V4L2_CID_STATELESS_HEVC_DECODE_MODE,
+			.min = V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
+			.max = V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
+			.def = V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
 		},
 	}, {
 		.codec = HANTRO_HEVC_DECODER,
 		.cfg = {
-			.id = V4L2_CID_MPEG_VIDEO_HEVC_START_CODE,
-			.min = V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B,
-			.max = V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B,
-			.def = V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B,
+			.id = V4L2_CID_STATELESS_HEVC_START_CODE,
+			.min = V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
+			.max = V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
+			.def = V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
 		},
 	}, {
 		.codec = HANTRO_HEVC_DECODER,
@@ -459,23 +459,23 @@ static const struct hantro_ctrl controls[] = {
 	}, {
 		.codec = HANTRO_HEVC_DECODER,
 		.cfg = {
-			.id = V4L2_CID_MPEG_VIDEO_HEVC_SPS,
+			.id = V4L2_CID_STATELESS_HEVC_SPS,
 			.ops = &hantro_ctrl_ops,
 		},
 	}, {
 		.codec = HANTRO_HEVC_DECODER,
 		.cfg = {
-			.id = V4L2_CID_MPEG_VIDEO_HEVC_PPS,
+			.id = V4L2_CID_STATELESS_HEVC_PPS,
 		},
 	}, {
 		.codec = HANTRO_HEVC_DECODER,
 		.cfg = {
-			.id = V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS,
+			.id = V4L2_CID_STATELESS_HEVC_DECODE_PARAMS,
 		},
 	}, {
 		.codec = HANTRO_HEVC_DECODER,
 		.cfg = {
-			.id = V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX,
+			.id = V4L2_CID_STATELESS_HEVC_SCALING_MATRIX,
 		},
 	}, {
 		.codec = HANTRO_HEVC_DECODER,
diff --git a/drivers/staging/media/hantro/hantro_hevc.c b/drivers/staging/media/hantro/hantro_hevc.c
index b49a41d7ae91..b6ec86d03d91 100644
--- a/drivers/staging/media/hantro/hantro_hevc.c
+++ b/drivers/staging/media/hantro/hantro_hevc.c
@@ -201,22 +201,22 @@ int hantro_hevc_dec_prepare_run(struct hantro_ctx *ctx)
 	hantro_start_prepare_run(ctx);
 
 	ctrls->decode_params =
-		hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS);
+		hantro_get_ctrl(ctx, V4L2_CID_STATELESS_HEVC_DECODE_PARAMS);
 	if (WARN_ON(!ctrls->decode_params))
 		return -EINVAL;
 
 	ctrls->scaling =
-		hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX);
+		hantro_get_ctrl(ctx, V4L2_CID_STATELESS_HEVC_SCALING_MATRIX);
 	if (WARN_ON(!ctrls->scaling))
 		return -EINVAL;
 
 	ctrls->sps =
-		hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_HEVC_SPS);
+		hantro_get_ctrl(ctx, V4L2_CID_STATELESS_HEVC_SPS);
 	if (WARN_ON(!ctrls->sps))
 		return -EINVAL;
 
 	ctrls->pps =
-		hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_HEVC_PPS);
+		hantro_get_ctrl(ctx, V4L2_CID_STATELESS_HEVC_PPS);
 	if (WARN_ON(!ctrls->pps))
 		return -EINVAL;
 
diff --git a/drivers/staging/media/sunxi/cedrus/cedrus.c b/drivers/staging/media/sunxi/cedrus/cedrus.c
index 4a4b714b0f26..e0428163f82c 100644
--- a/drivers/staging/media/sunxi/cedrus/cedrus.c
+++ b/drivers/staging/media/sunxi/cedrus/cedrus.c
@@ -42,7 +42,7 @@ static int cedrus_try_ctrl(struct v4l2_ctrl *ctrl)
 		if (sps->bit_depth_luma_minus8 != 0)
 			/* Only 8-bit is supported */
 			return -EINVAL;
-	} else if (ctrl->id == V4L2_CID_MPEG_VIDEO_HEVC_SPS) {
+	} else if (ctrl->id == V4L2_CID_STATELESS_HEVC_SPS) {
 		const struct v4l2_ctrl_hevc_sps *sps = ctrl->p_new.p_hevc_sps;
 		struct cedrus_ctx *ctx = container_of(ctrl->handler, struct cedrus_ctx, hdl);
 
@@ -164,42 +164,42 @@ static const struct cedrus_control cedrus_controls[] = {
 	},
 	{
 		.cfg = {
-			.id	= V4L2_CID_MPEG_VIDEO_HEVC_SPS,
+			.id	= V4L2_CID_STATELESS_HEVC_SPS,
 			.ops	= &cedrus_ctrl_ops,
 		},
 		.codec		= CEDRUS_CODEC_H265,
 	},
 	{
 		.cfg = {
-			.id	= V4L2_CID_MPEG_VIDEO_HEVC_PPS,
+			.id	= V4L2_CID_STATELESS_HEVC_PPS,
 		},
 		.codec		= CEDRUS_CODEC_H265,
 	},
 	{
 		.cfg = {
-			.id	= V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS,
+			.id	= V4L2_CID_STATELESS_HEVC_SLICE_PARAMS,
 		},
 		.codec		= CEDRUS_CODEC_H265,
 	},
 	{
 		.cfg = {
-			.id	= V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX,
+			.id	= V4L2_CID_STATELESS_HEVC_SCALING_MATRIX,
 		},
 		.codec		= CEDRUS_CODEC_H265,
 	},
 	{
 		.cfg = {
-			.id	= V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE,
-			.max	= V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_SLICE_BASED,
-			.def	= V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_SLICE_BASED,
+			.id	= V4L2_CID_STATELESS_HEVC_DECODE_MODE,
+			.max	= V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
+			.def	= V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
 		},
 		.codec		= CEDRUS_CODEC_H265,
 	},
 	{
 		.cfg = {
-			.id	= V4L2_CID_MPEG_VIDEO_HEVC_START_CODE,
-			.max	= V4L2_MPEG_VIDEO_HEVC_START_CODE_NONE,
-			.def	= V4L2_MPEG_VIDEO_HEVC_START_CODE_NONE,
+			.id	= V4L2_CID_STATELESS_HEVC_START_CODE,
+			.max	= V4L2_STATELESS_HEVC_START_CODE_NONE,
+			.def	= V4L2_STATELESS_HEVC_START_CODE_NONE,
 		},
 		.codec		= CEDRUS_CODEC_H265,
 	},
@@ -211,7 +211,7 @@ static const struct cedrus_control cedrus_controls[] = {
 	},
 	{
 		.cfg = {
-			.id = V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS,
+			.id = V4L2_CID_STATELESS_HEVC_DECODE_PARAMS,
 		},
 		.codec		= CEDRUS_CODEC_H265,
 	},
diff --git a/drivers/staging/media/sunxi/cedrus/cedrus_dec.c b/drivers/staging/media/sunxi/cedrus/cedrus_dec.c
index a16c1422558f..f6be4ae72ee2 100644
--- a/drivers/staging/media/sunxi/cedrus/cedrus_dec.c
+++ b/drivers/staging/media/sunxi/cedrus/cedrus_dec.c
@@ -65,15 +65,15 @@ void cedrus_device_run(void *priv)
 
 	case V4L2_PIX_FMT_HEVC_SLICE:
 		run.h265.sps = cedrus_find_control_data(ctx,
-			V4L2_CID_MPEG_VIDEO_HEVC_SPS);
+			V4L2_CID_STATELESS_HEVC_SPS);
 		run.h265.pps = cedrus_find_control_data(ctx,
-			V4L2_CID_MPEG_VIDEO_HEVC_PPS);
+			V4L2_CID_STATELESS_HEVC_PPS);
 		run.h265.slice_params = cedrus_find_control_data(ctx,
-			V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS);
+			V4L2_CID_STATELESS_HEVC_SLICE_PARAMS);
 		run.h265.decode_params = cedrus_find_control_data(ctx,
-			V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS);
+			V4L2_CID_STATELESS_HEVC_DECODE_PARAMS);
 		run.h265.scaling_matrix = cedrus_find_control_data(ctx,
-			V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX);
+			V4L2_CID_STATELESS_HEVC_SCALING_MATRIX);
 		break;
 
 	case V4L2_PIX_FMT_VP8_FRAME:
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
index a329e086a89a..b3540167df9e 100644
--- a/include/media/hevc-ctrls.h
+++ b/include/media/hevc-ctrls.h
@@ -16,13 +16,13 @@
 /* The pixel format isn't stable at the moment and will likely be renamed. */
 #define V4L2_PIX_FMT_HEVC_SLICE v4l2_fourcc('S', '2', '6', '5') /* HEVC parsed slices */
 
-#define V4L2_CID_MPEG_VIDEO_HEVC_SPS		(V4L2_CID_CODEC_BASE + 1008)
-#define V4L2_CID_MPEG_VIDEO_HEVC_PPS		(V4L2_CID_CODEC_BASE + 1009)
-#define V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS	(V4L2_CID_CODEC_BASE + 1010)
-#define V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX	(V4L2_CID_CODEC_BASE + 1011)
-#define V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS	(V4L2_CID_CODEC_BASE + 1012)
-#define V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE	(V4L2_CID_CODEC_BASE + 1015)
-#define V4L2_CID_MPEG_VIDEO_HEVC_START_CODE	(V4L2_CID_CODEC_BASE + 1016)
+#define V4L2_CID_STATELESS_HEVC_SPS		(V4L2_CID_CODEC_BASE + 1008)
+#define V4L2_CID_STATELESS_HEVC_PPS		(V4L2_CID_CODEC_BASE + 1009)
+#define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS	(V4L2_CID_CODEC_BASE + 1010)
+#define V4L2_CID_STATELESS_HEVC_SCALING_MATRIX	(V4L2_CID_CODEC_BASE + 1011)
+#define V4L2_CID_STATELESS_HEVC_DECODE_PARAMS	(V4L2_CID_CODEC_BASE + 1012)
+#define V4L2_CID_STATELESS_HEVC_DECODE_MODE	(V4L2_CID_CODEC_BASE + 1015)
+#define V4L2_CID_STATELESS_HEVC_START_CODE	(V4L2_CID_CODEC_BASE + 1016)
 
 /* enum v4l2_ctrl_type type values */
 #define V4L2_CTRL_TYPE_HEVC_SPS 0x0120
@@ -31,14 +31,14 @@
 #define V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX 0x0123
 #define V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS 0x0124
 
-enum v4l2_mpeg_video_hevc_decode_mode {
-	V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_SLICE_BASED,
-	V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED,
+enum v4l2_stateless_hevc_decode_mode {
+	V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
+	V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
 };
 
-enum v4l2_mpeg_video_hevc_start_code {
-	V4L2_MPEG_VIDEO_HEVC_START_CODE_NONE,
-	V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B,
+enum v4l2_stateless_hevc_start_code {
+	V4L2_STATELESS_HEVC_START_CODE_NONE,
+	V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
 };
 
 #define V4L2_HEVC_SLICE_TYPE_B	0
-- 
2.32.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH v4 06/15] media: uapi: HEVC: Add document uAPI structure
  2022-02-28 14:08 ` Benjamin Gaignard
@ 2022-02-28 14:08   ` Benjamin Gaignard
  -1 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Benjamin Gaignard

Add kernel-doc documentation for all the HEVC structures.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
Version 4:
- Fix space/tab issue in kernel-doc

 .../media/v4l/ext-ctrls-codec.rst             | 156 +++++++------
 include/media/hevc-ctrls.h                    | 217 +++++++++++++++++-
 2 files changed, 304 insertions(+), 69 deletions(-)

diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
index acf49420e56d..ac13a3eb85c2 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
@@ -2673,70 +2673,76 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
         of H.265 specifications.
     * - __u16
       - ``pic_width_in_luma_samples``
-      -
+      - Specifies the width of each decoded picture in units of luma samples.
     * - __u16
       - ``pic_height_in_luma_samples``
-      -
+      - Specifies the height of each decoded picture in units of luma samples.
     * - __u8
       - ``bit_depth_luma_minus8``
-      -
+      - Specifies the bit depth of the samples of the luma array.
     * - __u8
       - ``bit_depth_chroma_minus8``
-      -
+      - Specifies the bit depth of the samples of the chroma arrays.
     * - __u8
       - ``log2_max_pic_order_cnt_lsb_minus4``
-      -
+      - Specifies the value of the variable MaxPicOrderCntLsb.
     * - __u8
       - ``sps_max_dec_pic_buffering_minus1``
-      -
+      - Plus 1 specifies the maximum required size of the decoded picture buffer for
+        the CVS
     * - __u8
       - ``sps_max_num_reorder_pics``
-      -
+      - Indicates the maximum allowed number of pictures.
     * - __u8
       - ``sps_max_latency_increase_plus1``
-      -
+      - Not equal to 0 is used to compute the value of SpsMaxLatencyPictures[i].
     * - __u8
       - ``log2_min_luma_coding_block_size_minus3``
-      -
+      - Plus 3 specifies the minimum luma coding block size.
     * - __u8
       - ``log2_diff_max_min_luma_coding_block_size``
-      -
+      - Specifies the difference between the maximum and minimum luma coding block size.
     * - __u8
       - ``log2_min_luma_transform_block_size_minus2``
-      -
+      - Plus 2 specifies the minimum luma transform block size.
     * - __u8
       - ``log2_diff_max_min_luma_transform_block_size``
-      -
+      - Specifies the difference between the maximum and minimum luma transform block size.
     * - __u8
       - ``max_transform_hierarchy_depth_inter``
-      -
+      - Specifies the maximum hierarchy depth for transform units of coding units coded
+        in inter prediction mode.
     * - __u8
       - ``max_transform_hierarchy_depth_intra``
-      -
+      - Specifies the maximum hierarchy depth for transform units of coding units coded in
+        intra prediction mode.
     * - __u8
       - ``pcm_sample_bit_depth_luma_minus1``
-      -
+      - Specifies the number of bits used to represent each of PCM sample values of the
+        luma component.
     * - __u8
       - ``pcm_sample_bit_depth_chroma_minus1``
-      -
+      - Specifies the number of bits used to represent each of PCM sample values of
+        the chroma components.
     * - __u8
       - ``log2_min_pcm_luma_coding_block_size_minus3``
-      -
+      - Plus 3 specifies the minimum size of coding blocks.
     * - __u8
       - ``log2_diff_max_min_pcm_luma_coding_block_size``
-      -
+      - Specifies the difference between the maximum and minimum size of coding blocks.
     * - __u8
       - ``num_short_term_ref_pic_sets``
-      -
+      - Specifies the number of st_ref_pic_set() syntax structures included in the SPS.
     * - __u8
       - ``num_long_term_ref_pics_sps``
-      -
+      - Specifies the number of candidate long-term reference pictures that are
+        specified in the SPS.
     * - __u8
       - ``chroma_format_idc``
-      -
+      - Specifies the chroma sampling.
     * - __u8
       - ``sps_max_sub_layers_minus1``
-      -
+      - plus 1 specifies the maximum number of temporal sub-layers.
     * - __u64
       - ``flags``
       - See :ref:`Sequence Parameter Set Flags <hevc_sps_flags>`
@@ -2815,7 +2821,8 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
       - Identifies the PPS for reference by other syntax elements.
     * - __u8
       - ``num_extra_slice_header_bits``
-      -
+      - Specifies the number of extra slice header bits that are present
+        in the slice header RBSP for coded pictures referring to the PPS.
     * - __u8
       - ``num_ref_idx_l0_default_active_minus1``
       - Specifies the inferred value of num_ref_idx_l0_active_minus1
@@ -2824,37 +2831,42 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
       - Specifies the inferred value of num_ref_idx_l1_active_minus1
     * - __s8
       - ``init_qp_minus26``
-      -
+      - Plus 26 specifies the initial value of SliceQp Y for each slice
+        referring to the PPS.
     * - __u8
       - ``diff_cu_qp_delta_depth``
-      -
+      - Specifies the difference between the luma coding tree block size
+        and the minimum luma coding block size of coding units that
+        convey cu_qp_delta_abs and cu_qp_delta_sign_flag.
     * - __s8
       - ``pps_cb_qp_offset``
-      -
+      - Specify the offsets to the luma quantization parameter Cb.
     * - __s8
       - ``pps_cr_qp_offset``
-      -
+      - Specify the offsets to the luma quantization parameter Cr.
     * - __u8
       - ``num_tile_columns_minus1``
-      -
+      - Plus 1 specifies the number of tile columns partitioning the picture.
     * - __u8
       - ``num_tile_rows_minus1``
-      -
+      - Plus 1 specifies the number of tile rows partitioning the picture.
     * - __u8
       - ``column_width_minus1[20]``
-      -
+      - Plus 1 specifies the width of the i-th tile column in units of
+        coding tree blocks.
     * - __u8
       - ``row_height_minus1[22]``
-      -
+      - Plus 1 specifies the height of the i-th tile row in units of coding
+        tree blocks.
     * - __s8
       - ``pps_beta_offset_div2``
-      -
+      - Specify the default deblocking parameter offsets for beta divided by 2.
     * - __s8
       - ``pps_tc_offset_div2``
-      -
+      - Specify the default deblocking parameter offsets for tC divided by 2.
     * - __u8
       - ``log2_parallel_merge_level_minus2``
-      -
+      - Plus 2 specifies the value of the variable Log2ParMrgLevel.
     * - __u8
       - ``padding[4]``
       - Applications and drivers must set this to zero.
@@ -2976,10 +2988,10 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
       - Offset (in bits) to the video data in the current slice data.
     * - __u8
       - ``nal_unit_type``
-      -
+      - Specifies the coding type of the slice (B, P or I).
     * - __u8
       - ``nuh_temporal_id_plus1``
-      -
+      - Minus 1 specifies a temporal identifier for the NAL unit.
     * - __u8
       - ``slice_type``
       -
@@ -2987,52 +2999,56 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
 	V4L2_HEVC_SLICE_TYPE_B).
     * - __u8
       - ``colour_plane_id``
-      -
+      - Specifies the colour plane associated with the current slice.
     * - __u16
       - ``slice_pic_order_cnt``
-      -
+      - Specifies the picture order count.
     * - __u8
       - ``num_ref_idx_l0_active_minus1``
-      -
+      - Specifies the maximum reference index for reference picture list 0
+        that may be used to decode the slice.
     * - __u8
       - ``num_ref_idx_l1_active_minus1``
-      -
+      - Specifies the maximum reference index for reference picture list 1
+        that may be used to decode the slice.
     * - __u8
       - ``collocated_ref_idx``
-      -
+      - Specifies the reference index of the collocated picture used for
+        temporal motion vector prediction.
     * - __u8
       - ``five_minus_max_num_merge_cand``
-      -
+      - Specifies the maximum number of merging motion vector prediction
+        candidates supported in the slice subtracted from 5.
     * - __s8
       - ``slice_qp_delta``
-      -
+      - Specifies the initial value of QpY to be used for the coding blocks in the slice.
     * - __s8
       - ``slice_cb_qp_offset``
-      -
+      - Specifies a difference to be added to the value of pps_cb_qp_offset.
     * - __s8
       - ``slice_cr_qp_offset``
-      -
+      - Specifies a difference to be added to the value of pps_cr_qp_offset.
     * - __s8
       - ``slice_act_y_qp_offset``
-      -
+      - screen content extension parameters
     * - __s8
       - ``slice_act_cb_qp_offset``
-      -
+      - screen content extension parameters
     * - __s8
       - ``slice_act_cr_qp_offset``
-      -
+      - screen content extension parameters
     * - __s8
       - ``slice_beta_offset_div2``
-      -
+      - Specify the deblocking parameter offsets for beta divided by 2.
     * - __s8
       - ``slice_tc_offset_div2``
-      -
+      - Specify the deblocking parameter offsets for tC divided by 2.
     * - __u8
       - ``pic_struct``
-      -
+      - Indicates whether a picture should be displayed as a frame or as one or more fields.
     * - __u32
       - ``slice_segment_addr``
-      -
+      - Specifies the address of the first coding tree block in the slice segment.
     * - __u8
       - ``ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
       - The list of L0 reference elements as indices in the DPB.
@@ -3222,36 +3238,44 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
     :stub-columns: 0
     :widths:       1 1 2
 
-    * - __u8
-      - ``luma_log2_weight_denom``
-      -
-    * - __s8
-      - ``delta_chroma_log2_weight_denom``
-      -
     * - __s8
       - ``delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
-      -
+      - The difference of the weighting factor applied to the luma
+        prediction value for list 0.
     * - __s8
       - ``luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
-      -
+      - The additive offset applied to the luma prediction value for list 0.
     * - __s8
       - ``delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
-      -
+      - The difference of the weighting factor applied to the chroma
+        prediction value for list 0.
     * - __s8
       - ``chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
-      -
+      - The difference of the additive offset applied to the chroma
+        prediction values for list 0.
     * - __s8
       - ``delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
-      -
+      - The difference of the weighting factor applied to the luma
+        prediction value for list 1.
     * - __s8
       - ``luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
-      -
+      - The additive offset applied to the luma prediction value for list 1.
     * - __s8
       - ``delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
-      -
+      - The difference of the weighting factor applied to the chroma
+        prediction value for list 1.
     * - __s8
       - ``chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
-      -
+      - The difference of the additive offset applied to the chroma
+        prediction values for list 1.
+    * - __u8
+      - ``luma_log2_weight_denom``
+      - The base 2 logarithm of the denominator for all luma weighting
+        factors.
+    * - __s8
+      - ``delta_chroma_log2_weight_denom``
+      - The difference of the base 2 logarithm of the denominator for
+        all chroma weighting factors.
     * - __u8
       - ``padding[6]``
       - Applications and drivers must set this to zero.
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
index b3540167df9e..149384ca4c84 100644
--- a/include/media/hevc-ctrls.h
+++ b/include/media/hevc-ctrls.h
@@ -55,9 +55,68 @@ enum v4l2_stateless_hevc_start_code {
 #define V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED		(1ULL << 7)
 #define V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED	(1ULL << 8)
 
-/* The controls are not stable at the moment and will likely be reworked. */
+/**
+ * struct v4l2_ctrl_hevc_sps - ITU-T Rec. H.265: Sequence parameter set
+ *
+ * @video_parameter_set_id: specifies the value of the
+ *			    vps_video_parameter_set_id of the active VPS
+ * @seq_parameter_set_id: provides an identifier for the SPS for
+ *			  reference by other syntax elements
+ * @pic_width_in_luma_samples: specifies the width of each decoded picture
+ *			       in units of luma samples
+ * @pic_height_in_luma_samples: specifies the height of each decoded picture
+ *				in units of luma samples
+ * @bit_depth_luma_minus8: specifies the bit depth of the samples of the
+ *			   luma array
+ * @bit_depth_chroma_minus8: specifies the bit depth of the samples of the
+ *			     chroma arrays
+ * @log2_max_pic_order_cnt_lsb_minus4: specifies the value of the variable
+ *				       MaxPicOrderCntLsb
+ * @sps_max_dec_pic_buffering_minus1: plus 1 specifies the maximum required
+ *				      size of the decoded picture buffer for
+ *				      the CVS
+ * @sps_max_num_reorder_pics: indicates the maximum allowed number of pictures
+ * @sps_max_latency_increase_plus1: not equal to 0 is used to compute the
+ *				    value of SpsMaxLatencyPictures[i]
+ * @log2_min_luma_coding_block_size_minus3: plus 3 specifies the minimum
+ *					    luma coding block size
+ * @log2_diff_max_min_luma_coding_block_size: specifies the difference between
+ *					      the maximum and minimum luma
+ *					      coding block size
+ * @log2_min_luma_transform_block_size_minus2: plus 2 specifies the minimum luma
+ *					       transform block size
+ * @log2_diff_max_min_luma_transform_block_size: specifies the difference between
+ *						 the maximum and minimum luma
+ *						 transform block size
+ * @max_transform_hierarchy_depth_inter: specifies the maximum hierarchy
+ *					 depth for transform units of
+ *					 coding units coded in inter
+ *					 prediction mode
+ * @max_transform_hierarchy_depth_intra: specifies the maximum hierarchy
+ *					 depth for transform units of
+ *					 coding units coded in intra
+ *					 prediction mode
+ * @pcm_sample_bit_depth_luma_minus1: specifies the number of bits used to
+ *				      represent each of PCM sample values of the
+ *				      luma component
+ * @pcm_sample_bit_depth_chroma_minus1: specifies the number of bits used to
+ *					represent each of PCM sample values of
+ *					the chroma components
+ * @log2_min_pcm_luma_coding_block_size_minus3: plus 3 specifies the minimum size
+ *						of coding blocks
+ * @log2_diff_max_min_pcm_luma_coding_block_size: specifies the difference between
+ *						  the maximum and minimum size of
+ *						  coding blocks
+ * @num_short_term_ref_pic_sets: speciefies the number of st_ref_pic_set()
+ *				 syntax structures included in the SPS
+ * @num_long_term_ref_pics_sps:	specifies the number of candidate long-term
+ *				reference pictures that are specified in the SPS
+ * @chroma_format_idc: specifies the chroma sampling
+ * @sps_max_sub_layers_minus1: plus 1 specifies the maximum number of temporal
+ *			       sub-layers
+ * @flags: see V4L2_HEVC_SPS_FLAG_{}
+ */
 struct v4l2_ctrl_hevc_sps {
-	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Sequence parameter set */
 	__u8	video_parameter_set_id;
 	__u8	seq_parameter_set_id;
 	__u16	pic_width_in_luma_samples;
@@ -108,8 +167,43 @@ struct v4l2_ctrl_hevc_sps {
 #define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT	(1ULL << 19)
 #define V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING			(1ULL << 20)
 
+/**
+ * struct v4l2_ctrl_hevc_pps - ITU-T Rec. H.265: Picture parameter set
+ *
+ * @pic_parameter_set_id: identifies the PPS for reference by other
+ *			  syntax elements
+ * @num_extra_slice_header_bits: specifies the number of extra slice header
+ *				 bits that are present in the slice header RBSP
+ *				 for coded pictures referring to the PPS.
+ * @num_ref_idx_l0_default_active_minus1: specifies the inferred value of
+ *					  num_ref_idx_l0_active_minus1
+ * @num_ref_idx_l1_default_active_minus1: specifies the inferred value of
+ *					  num_ref_idx_l1_active_minus1
+ * @init_qp_minus26: plus 26 specifies the initial value of SliceQp Y for
+ *		     each slice referring to the PPS
+ * @diff_cu_qp_delta_depth: specifies the difference between the luma coding
+ *			    tree block size and the minimum luma coding block
+ *			    size of coding units that convey cu_qp_delta_abs
+ *			    and cu_qp_delta_sign_flag
+ * @pps_cb_qp_offset: specify the offsets to the luma quantization parameter Cb
+ * @pps_cr_qp_offset: specify the offsets to the luma quantization parameter Cr
+ * @num_tile_columns_minus1: plus 1 specifies the number of tile columns
+ *			     partitioning the picture
+ * @num_tile_rows_minus1: plus 1 specifies the number of tile rows partitioning
+ *			  the picture
+ * @column_width_minus1: plus 1 specifies the width of the i-th tile column in
+ *			 units of coding tree blocks
+ * @row_height_minus1: plus 1 specifies the height of the i-th tile row in
+ *		       units of coding tree blocks
+ * @pps_beta_offset_div2: specify the default deblocking parameter offsets for
+ *			  beta divided by 2
+ * @pps_tc_offset_div2: specify the default deblocking parameter offsets for tC
+ *			divided by 2
+ * @log2_parallel_merge_level_minus2: plus 2 specifies the value of the variable
+ *				      Log2ParMrgLevel
+ * @flags: see V4L2_HEVC_PPS_FLAG_{}
+ */
 struct v4l2_ctrl_hevc_pps {
-	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture parameter set */
 	__u8	pic_parameter_set_id;
 	__u8	num_extra_slice_header_bits;
 	__u8	num_ref_idx_l0_default_active_minus1;
@@ -134,6 +228,14 @@ struct v4l2_ctrl_hevc_pps {
 
 #define V4L2_HEVC_DPB_ENTRIES_NUM_MAX		16
 
+/**
+ * struct v4l2_hevc_dpb_entry - HEVC decoded picture buffer entry
+ *
+ * @timestamp: timestamp of the V4L2 capture buffer to use as reference.
+ * @flags: long term flag for the reference frame
+ * @field_pic: whether the reference is a field picture or a frame.
+ * @pic_order_cnt: the picture order count of the reference.
+ */
 struct v4l2_hevc_dpb_entry {
 	__u64	timestamp;
 	__u8	flags;
@@ -142,6 +244,31 @@ struct v4l2_hevc_dpb_entry {
 	__u8	padding[2];
 };
 
+/**
+ * struct v4l2_hevc_pred_weight_table - HEVC weighted prediction parameters
+ *
+ * @delta_luma_weight_l0: the difference of the weighting factor applied
+ *			  to the luma prediction value for list 0
+ * @luma_offset_l0: the additive offset applied to the luma prediction value
+ *		    for list 0
+ * @delta_chroma_weight_l0: the difference of the weighting factor applied
+ *			    to the chroma prediction values for list 0
+ * @chroma_offset_l0: the difference of the additive offset applied to
+ *		      the chroma prediction values for list 0
+ * @delta_luma_weight_l1: the difference of the weighting factor applied
+ *			  to the luma prediction value for list 1
+ * @luma_offset_l1: the additive offset applied to the luma prediction value
+ *		    for list 1
+ * @delta_chroma_weight_l1: the difference of the weighting factor applied
+ *			    to the chroma prediction values for list 1
+ * @chroma_offset_l1: the difference of the additive offset applied to
+ *		      the chroma prediction values for list 1
+ * @luma_log2_weight_denom: the base 2 logarithm of the denominator for
+ *			    all luma weighting factors
+ * @delta_chroma_log2_weight_denom: the difference of the base 2 logarithm
+ *				    of the denominator for all chroma
+ *				    weighting factors
+ */
 struct v4l2_hevc_pred_weight_table {
 	__s8	delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
 	__s8	luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
@@ -170,6 +297,50 @@ struct v4l2_hevc_pred_weight_table {
 #define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 8)
 #define V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT	(1ULL << 9)
 
+/**
+ * v4l2_ctrl_hevc_slice_params - HEVC slice parameters
+ *
+ * @bit_size: size (in bits) of the current slice data
+ * @data_bit_offset: offset (in bits) to the video data in the current slice data
+ * @nal_unit_type: specifies the coding type of the slice (B, P or I)
+ * @nuh_temporal_id_plus1: minus 1 specifies a temporal identifier for the NAL unit
+ * @slice_type: see V4L2_HEVC_SLICE_TYPE_{}
+ * @colour_plane_id: specifies the colour plane associated with the current slice
+ * @slice_pic_order_cnt: specifies the picture order count
+ * @num_ref_idx_l0_active_minus1: specifies the maximum reference index for
+ *				  reference picture list 0 that may be used to decode
+ *				  the slice
+ * @num_ref_idx_l1_active_minus1: specifies the maximum reference index for
+ *				  reference picture list 1 that may be used to decode
+ *				  the slice
+ * @collocated_ref_idx: specifies the reference index of the collocated picture used
+ *			for temporal motion vector prediction
+ * @five_minus_max_num_merge_cand: specifies the maximum number of merging
+ *				   motion vector prediction candidates supported in
+ *				   the slice subtracted from 5
+ * @slice_qp_delta: specifies the initial value of QpY to be used for the coding
+ *		    blocks in the slice
+ * @slice_cb_qp_offset: specifies a difference to be added to the value of pps_cb_qp_offset
+ * @slice_cr_qp_offset: specifies a difference to be added to the value of pps_cr_qp_offset
+ * @slice_act_y_qp_offset: screen content extension parameters
+ * @slice_act_cb_qp_offset: screen content extension parameters
+ * @slice_act_cr_qp_offset: screen content extension parameters
+ * @slice_beta_offset_div2: specify the deblocking parameter offsets for beta divided by 2
+ * @slice_tc_offset_div2: specify the deblocking parameter offsets for tC divided by 2
+ * @pic_struct: indicates whether a picture should be displayed as a frame or as one or
+ *		more fields
+ * @slice_segment_addr: specifies the address of the first coding tree block in
+ *			the slice segment
+ * @ref_idx_l0: the list of L0 reference elements as indices in the DPB
+ * @ref_idx_l1: the list of L1 reference elements as indices in the DPB
+ * @short_term_ref_pic_set_size: specifies the number of st_ref_pic_set()
+ *				 syntax structures included in the SPS
+ * @long_term_ref_pic_set_size: specifies the number of candidate long-term
+ *				reference pictures that are specified in the SPS
+ * @pred_weight_table: the prediction weight coefficients for inter-picture
+ *		       prediction
+ * @flags: see V4L2_HEVC_SLICE_PARAMS_FLAG_{}
+ */
 struct v4l2_ctrl_hevc_slice_params {
 	__u32	bit_size;
 	__u32	data_bit_offset;
@@ -216,6 +387,24 @@ struct v4l2_ctrl_hevc_slice_params {
 #define V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC		0x2
 #define V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR  0x4
 
+/**
+ * struct v4l2_ctrl_hevc_decode_params - HEVC decode parameters
+ *
+ * @pic_order_cnt_val: picture order count
+ * @num_active_dpb_entries: the number of entries in dpb
+ * @dpb: the decoded picture buffer, for meta-data about reference frames
+ * @num_poc_st_curr_before: the number of reference pictures in the short-term
+ *			    set that come before the current frame
+ * @num_poc_st_curr_after: the number of reference pictures in the short-term
+ *			   set that come after the current frame
+ * @num_poc_lt_curr: the number of reference pictures in the long-term set
+ * @poc_st_curr_before: provides the index of the short term before references
+ *			in DPB array
+ * @poc_st_curr_after: provides the index of the short term after references
+ *		       in DPB array
+ * @poc_lt_curr: provides the index of the long term references in DPB array
+ * @flags: see V4L2_HEVC_DECODE_PARAM_FLAG_{}
+ */
 struct v4l2_ctrl_hevc_decode_params {
 	__s32	pic_order_cnt_val;
 	__u8	num_active_dpb_entries;
@@ -229,6 +418,28 @@ struct v4l2_ctrl_hevc_decode_params {
 	__u64	flags;
 };
 
+/**
+ * struct v4l2_ctrl_hevc_scaling_matrix - HEVC scaling lists parameters
+ *
+ * @scaling_list_4x4: scaling list is used for the scaling process for
+ *		      transform coefficients. The values on each scaling
+ *		      list are expected in raster scan order
+ * @scaling_list_8x8: scaling list is used for the scaling process for
+ *		      transform coefficients. The values on each scaling
+ *		      list are expected in raster scan order
+ * @scaling_list_16x16: scaling list is used for the scaling process for
+ *			transform coefficients. The values on each scaling
+ *			list are expected in raster scan order
+ * @scaling_list_32x32:	scaling list is used for the scaling process for
+ *			transform coefficients. The values on each scaling
+ *			list are expected in raster scan order
+ * @scaling_list_dc_coef_16x16: scaling list is used for the scaling process
+ *				for transform coefficients. The values on each
+ *				scaling list are expected in raster scan order.
+ * @scaling_list_dc_coef_32x32:	scaling list is used for the scaling process
+ *				for transform coefficients. The values on each
+ *				scaling list are expected in raster scan order.
+ */
 struct v4l2_ctrl_hevc_scaling_matrix {
 	__u8	scaling_list_4x4[6][16];
 	__u8	scaling_list_8x8[6][64];
-- 
2.32.0


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

* [PATCH v4 06/15] media: uapi: HEVC: Add document uAPI structure
@ 2022-02-28 14:08   ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Benjamin Gaignard

Add kernel-doc documentation for all the HEVC structures.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
Version 4:
- Fix space/tab issue in kernel-doc

 .../media/v4l/ext-ctrls-codec.rst             | 156 +++++++------
 include/media/hevc-ctrls.h                    | 217 +++++++++++++++++-
 2 files changed, 304 insertions(+), 69 deletions(-)

diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
index acf49420e56d..ac13a3eb85c2 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
@@ -2673,70 +2673,76 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
         of H.265 specifications.
     * - __u16
       - ``pic_width_in_luma_samples``
-      -
+      - Specifies the width of each decoded picture in units of luma samples.
     * - __u16
       - ``pic_height_in_luma_samples``
-      -
+      - Specifies the height of each decoded picture in units of luma samples.
     * - __u8
       - ``bit_depth_luma_minus8``
-      -
+      - Specifies the bit depth of the samples of the luma array.
     * - __u8
       - ``bit_depth_chroma_minus8``
-      -
+      - Specifies the bit depth of the samples of the chroma arrays.
     * - __u8
       - ``log2_max_pic_order_cnt_lsb_minus4``
-      -
+      - Specifies the value of the variable MaxPicOrderCntLsb.
     * - __u8
       - ``sps_max_dec_pic_buffering_minus1``
-      -
+      - Plus 1 specifies the maximum required size of the decoded picture buffer for
+        the CVS
     * - __u8
       - ``sps_max_num_reorder_pics``
-      -
+      - Indicates the maximum allowed number of pictures.
     * - __u8
       - ``sps_max_latency_increase_plus1``
-      -
+      - Not equal to 0 is used to compute the value of SpsMaxLatencyPictures[i].
     * - __u8
       - ``log2_min_luma_coding_block_size_minus3``
-      -
+      - Plus 3 specifies the minimum luma coding block size.
     * - __u8
       - ``log2_diff_max_min_luma_coding_block_size``
-      -
+      - Specifies the difference between the maximum and minimum luma coding block size.
     * - __u8
       - ``log2_min_luma_transform_block_size_minus2``
-      -
+      - Plus 2 specifies the minimum luma transform block size.
     * - __u8
       - ``log2_diff_max_min_luma_transform_block_size``
-      -
+      - Specifies the difference between the maximum and minimum luma transform block size.
     * - __u8
       - ``max_transform_hierarchy_depth_inter``
-      -
+      - Specifies the maximum hierarchy depth for transform units of coding units coded
+        in inter prediction mode.
     * - __u8
       - ``max_transform_hierarchy_depth_intra``
-      -
+      - Specifies the maximum hierarchy depth for transform units of coding units coded in
+        intra prediction mode.
     * - __u8
       - ``pcm_sample_bit_depth_luma_minus1``
-      -
+      - Specifies the number of bits used to represent each of PCM sample values of the
+        luma component.
     * - __u8
       - ``pcm_sample_bit_depth_chroma_minus1``
-      -
+      - Specifies the number of bits used to represent each of PCM sample values of
+        the chroma components.
     * - __u8
       - ``log2_min_pcm_luma_coding_block_size_minus3``
-      -
+      - Plus 3 specifies the minimum size of coding blocks.
     * - __u8
       - ``log2_diff_max_min_pcm_luma_coding_block_size``
-      -
+      - Specifies the difference between the maximum and minimum size of coding blocks.
     * - __u8
       - ``num_short_term_ref_pic_sets``
-      -
+      - Specifies the number of st_ref_pic_set() syntax structures included in the SPS.
     * - __u8
       - ``num_long_term_ref_pics_sps``
-      -
+      - Specifies the number of candidate long-term reference pictures that are
+        specified in the SPS.
     * - __u8
       - ``chroma_format_idc``
-      -
+      - Specifies the chroma sampling.
     * - __u8
       - ``sps_max_sub_layers_minus1``
-      -
+      - plus 1 specifies the maximum number of temporal sub-layers.
     * - __u64
       - ``flags``
       - See :ref:`Sequence Parameter Set Flags <hevc_sps_flags>`
@@ -2815,7 +2821,8 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
       - Identifies the PPS for reference by other syntax elements.
     * - __u8
       - ``num_extra_slice_header_bits``
-      -
+      - Specifies the number of extra slice header bits that are present
+        in the slice header RBSP for coded pictures referring to the PPS.
     * - __u8
       - ``num_ref_idx_l0_default_active_minus1``
       - Specifies the inferred value of num_ref_idx_l0_active_minus1
@@ -2824,37 +2831,42 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
       - Specifies the inferred value of num_ref_idx_l1_active_minus1
     * - __s8
       - ``init_qp_minus26``
-      -
+      - Plus 26 specifies the initial value of SliceQp Y for each slice
+        referring to the PPS.
     * - __u8
       - ``diff_cu_qp_delta_depth``
-      -
+      - Specifies the difference between the luma coding tree block size
+        and the minimum luma coding block size of coding units that
+        convey cu_qp_delta_abs and cu_qp_delta_sign_flag.
     * - __s8
       - ``pps_cb_qp_offset``
-      -
+      - Specify the offsets to the luma quantization parameter Cb.
     * - __s8
       - ``pps_cr_qp_offset``
-      -
+      - Specify the offsets to the luma quantization parameter Cr.
     * - __u8
       - ``num_tile_columns_minus1``
-      -
+      - Plus 1 specifies the number of tile columns partitioning the picture.
     * - __u8
       - ``num_tile_rows_minus1``
-      -
+      - Plus 1 specifies the number of tile rows partitioning the picture.
     * - __u8
       - ``column_width_minus1[20]``
-      -
+      - Plus 1 specifies the width of the i-th tile column in units of
+        coding tree blocks.
     * - __u8
       - ``row_height_minus1[22]``
-      -
+      - Plus 1 specifies the height of the i-th tile row in units of coding
+        tree blocks.
     * - __s8
       - ``pps_beta_offset_div2``
-      -
+      - Specify the default deblocking parameter offsets for beta divided by 2.
     * - __s8
       - ``pps_tc_offset_div2``
-      -
+      - Specify the default deblocking parameter offsets for tC divided by 2.
     * - __u8
       - ``log2_parallel_merge_level_minus2``
-      -
+      - Plus 2 specifies the value of the variable Log2ParMrgLevel.
     * - __u8
       - ``padding[4]``
       - Applications and drivers must set this to zero.
@@ -2976,10 +2988,10 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
       - Offset (in bits) to the video data in the current slice data.
     * - __u8
       - ``nal_unit_type``
-      -
+      - Specifies the coding type of the slice (B, P or I).
     * - __u8
       - ``nuh_temporal_id_plus1``
-      -
+      - Minus 1 specifies a temporal identifier for the NAL unit.
     * - __u8
       - ``slice_type``
       -
@@ -2987,52 +2999,56 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
 	V4L2_HEVC_SLICE_TYPE_B).
     * - __u8
       - ``colour_plane_id``
-      -
+      - Specifies the colour plane associated with the current slice.
     * - __u16
       - ``slice_pic_order_cnt``
-      -
+      - Specifies the picture order count.
     * - __u8
       - ``num_ref_idx_l0_active_minus1``
-      -
+      - Specifies the maximum reference index for reference picture list 0
+        that may be used to decode the slice.
     * - __u8
       - ``num_ref_idx_l1_active_minus1``
-      -
+      - Specifies the maximum reference index for reference picture list 1
+        that may be used to decode the slice.
     * - __u8
       - ``collocated_ref_idx``
-      -
+      - Specifies the reference index of the collocated picture used for
+        temporal motion vector prediction.
     * - __u8
       - ``five_minus_max_num_merge_cand``
-      -
+      - Specifies the maximum number of merging motion vector prediction
+        candidates supported in the slice subtracted from 5.
     * - __s8
       - ``slice_qp_delta``
-      -
+      - Specifies the initial value of QpY to be used for the coding blocks in the slice.
     * - __s8
       - ``slice_cb_qp_offset``
-      -
+      - Specifies a difference to be added to the value of pps_cb_qp_offset.
     * - __s8
       - ``slice_cr_qp_offset``
-      -
+      - Specifies a difference to be added to the value of pps_cr_qp_offset.
     * - __s8
       - ``slice_act_y_qp_offset``
-      -
+      - screen content extension parameters
     * - __s8
       - ``slice_act_cb_qp_offset``
-      -
+      - screen content extension parameters
     * - __s8
       - ``slice_act_cr_qp_offset``
-      -
+      - screen content extension parameters
     * - __s8
       - ``slice_beta_offset_div2``
-      -
+      - Specify the deblocking parameter offsets for beta divided by 2.
     * - __s8
       - ``slice_tc_offset_div2``
-      -
+      - Specify the deblocking parameter offsets for tC divided by 2.
     * - __u8
       - ``pic_struct``
-      -
+      - Indicates whether a picture should be displayed as a frame or as one or more fields.
     * - __u32
       - ``slice_segment_addr``
-      -
+      - Specifies the address of the first coding tree block in the slice segment.
     * - __u8
       - ``ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
       - The list of L0 reference elements as indices in the DPB.
@@ -3222,36 +3238,44 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
     :stub-columns: 0
     :widths:       1 1 2
 
-    * - __u8
-      - ``luma_log2_weight_denom``
-      -
-    * - __s8
-      - ``delta_chroma_log2_weight_denom``
-      -
     * - __s8
       - ``delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
-      -
+      - The difference of the weighting factor applied to the luma
+        prediction value for list 0.
     * - __s8
       - ``luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
-      -
+      - The additive offset applied to the luma prediction value for list 0.
     * - __s8
       - ``delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
-      -
+      - The difference of the weighting factor applied to the chroma
+        prediction value for list 0.
     * - __s8
       - ``chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
-      -
+      - The difference of the additive offset applied to the chroma
+        prediction values for list 0.
     * - __s8
       - ``delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
-      -
+      - The difference of the weighting factor applied to the luma
+        prediction value for list 1.
     * - __s8
       - ``luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
-      -
+      - The additive offset applied to the luma prediction value for list 1.
     * - __s8
       - ``delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
-      -
+      - The difference of the weighting factor applied to the chroma
+        prediction value for list 1.
     * - __s8
       - ``chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
-      -
+      - The difference of the additive offset applied to the chroma
+        prediction values for list 1.
+    * - __u8
+      - ``luma_log2_weight_denom``
+      - The base 2 logarithm of the denominator for all luma weighting
+        factors.
+    * - __s8
+      - ``delta_chroma_log2_weight_denom``
+      - The difference of the base 2 logarithm of the denominator for
+        all chroma weighting factors.
     * - __u8
       - ``padding[6]``
       - Applications and drivers must set this to zero.
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
index b3540167df9e..149384ca4c84 100644
--- a/include/media/hevc-ctrls.h
+++ b/include/media/hevc-ctrls.h
@@ -55,9 +55,68 @@ enum v4l2_stateless_hevc_start_code {
 #define V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED		(1ULL << 7)
 #define V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED	(1ULL << 8)
 
-/* The controls are not stable at the moment and will likely be reworked. */
+/**
+ * struct v4l2_ctrl_hevc_sps - ITU-T Rec. H.265: Sequence parameter set
+ *
+ * @video_parameter_set_id: specifies the value of the
+ *			    vps_video_parameter_set_id of the active VPS
+ * @seq_parameter_set_id: provides an identifier for the SPS for
+ *			  reference by other syntax elements
+ * @pic_width_in_luma_samples: specifies the width of each decoded picture
+ *			       in units of luma samples
+ * @pic_height_in_luma_samples: specifies the height of each decoded picture
+ *				in units of luma samples
+ * @bit_depth_luma_minus8: specifies the bit depth of the samples of the
+ *			   luma array
+ * @bit_depth_chroma_minus8: specifies the bit depth of the samples of the
+ *			     chroma arrays
+ * @log2_max_pic_order_cnt_lsb_minus4: specifies the value of the variable
+ *				       MaxPicOrderCntLsb
+ * @sps_max_dec_pic_buffering_minus1: plus 1 specifies the maximum required
+ *				      size of the decoded picture buffer for
+ *				      the CVS
+ * @sps_max_num_reorder_pics: indicates the maximum allowed number of pictures
+ * @sps_max_latency_increase_plus1: not equal to 0 is used to compute the
+ *				    value of SpsMaxLatencyPictures[i]
+ * @log2_min_luma_coding_block_size_minus3: plus 3 specifies the minimum
+ *					    luma coding block size
+ * @log2_diff_max_min_luma_coding_block_size: specifies the difference between
+ *					      the maximum and minimum luma
+ *					      coding block size
+ * @log2_min_luma_transform_block_size_minus2: plus 2 specifies the minimum luma
+ *					       transform block size
+ * @log2_diff_max_min_luma_transform_block_size: specifies the difference between
+ *						 the maximum and minimum luma
+ *						 transform block size
+ * @max_transform_hierarchy_depth_inter: specifies the maximum hierarchy
+ *					 depth for transform units of
+ *					 coding units coded in inter
+ *					 prediction mode
+ * @max_transform_hierarchy_depth_intra: specifies the maximum hierarchy
+ *					 depth for transform units of
+ *					 coding units coded in intra
+ *					 prediction mode
+ * @pcm_sample_bit_depth_luma_minus1: specifies the number of bits used to
+ *				      represent each of PCM sample values of the
+ *				      luma component
+ * @pcm_sample_bit_depth_chroma_minus1: specifies the number of bits used to
+ *					represent each of PCM sample values of
+ *					the chroma components
+ * @log2_min_pcm_luma_coding_block_size_minus3: plus 3 specifies the minimum size
+ *						of coding blocks
+ * @log2_diff_max_min_pcm_luma_coding_block_size: specifies the difference between
+ *						  the maximum and minimum size of
+ *						  coding blocks
+ * @num_short_term_ref_pic_sets: speciefies the number of st_ref_pic_set()
+ *				 syntax structures included in the SPS
+ * @num_long_term_ref_pics_sps:	specifies the number of candidate long-term
+ *				reference pictures that are specified in the SPS
+ * @chroma_format_idc: specifies the chroma sampling
+ * @sps_max_sub_layers_minus1: plus 1 specifies the maximum number of temporal
+ *			       sub-layers
+ * @flags: see V4L2_HEVC_SPS_FLAG_{}
+ */
 struct v4l2_ctrl_hevc_sps {
-	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Sequence parameter set */
 	__u8	video_parameter_set_id;
 	__u8	seq_parameter_set_id;
 	__u16	pic_width_in_luma_samples;
@@ -108,8 +167,43 @@ struct v4l2_ctrl_hevc_sps {
 #define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT	(1ULL << 19)
 #define V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING			(1ULL << 20)
 
+/**
+ * struct v4l2_ctrl_hevc_pps - ITU-T Rec. H.265: Picture parameter set
+ *
+ * @pic_parameter_set_id: identifies the PPS for reference by other
+ *			  syntax elements
+ * @num_extra_slice_header_bits: specifies the number of extra slice header
+ *				 bits that are present in the slice header RBSP
+ *				 for coded pictures referring to the PPS.
+ * @num_ref_idx_l0_default_active_minus1: specifies the inferred value of
+ *					  num_ref_idx_l0_active_minus1
+ * @num_ref_idx_l1_default_active_minus1: specifies the inferred value of
+ *					  num_ref_idx_l1_active_minus1
+ * @init_qp_minus26: plus 26 specifies the initial value of SliceQp Y for
+ *		     each slice referring to the PPS
+ * @diff_cu_qp_delta_depth: specifies the difference between the luma coding
+ *			    tree block size and the minimum luma coding block
+ *			    size of coding units that convey cu_qp_delta_abs
+ *			    and cu_qp_delta_sign_flag
+ * @pps_cb_qp_offset: specify the offsets to the luma quantization parameter Cb
+ * @pps_cr_qp_offset: specify the offsets to the luma quantization parameter Cr
+ * @num_tile_columns_minus1: plus 1 specifies the number of tile columns
+ *			     partitioning the picture
+ * @num_tile_rows_minus1: plus 1 specifies the number of tile rows partitioning
+ *			  the picture
+ * @column_width_minus1: plus 1 specifies the width of the i-th tile column in
+ *			 units of coding tree blocks
+ * @row_height_minus1: plus 1 specifies the height of the i-th tile row in
+ *		       units of coding tree blocks
+ * @pps_beta_offset_div2: specify the default deblocking parameter offsets for
+ *			  beta divided by 2
+ * @pps_tc_offset_div2: specify the default deblocking parameter offsets for tC
+ *			divided by 2
+ * @log2_parallel_merge_level_minus2: plus 2 specifies the value of the variable
+ *				      Log2ParMrgLevel
+ * @flags: see V4L2_HEVC_PPS_FLAG_{}
+ */
 struct v4l2_ctrl_hevc_pps {
-	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture parameter set */
 	__u8	pic_parameter_set_id;
 	__u8	num_extra_slice_header_bits;
 	__u8	num_ref_idx_l0_default_active_minus1;
@@ -134,6 +228,14 @@ struct v4l2_ctrl_hevc_pps {
 
 #define V4L2_HEVC_DPB_ENTRIES_NUM_MAX		16
 
+/**
+ * struct v4l2_hevc_dpb_entry - HEVC decoded picture buffer entry
+ *
+ * @timestamp: timestamp of the V4L2 capture buffer to use as reference.
+ * @flags: long term flag for the reference frame
+ * @field_pic: whether the reference is a field picture or a frame.
+ * @pic_order_cnt: the picture order count of the reference.
+ */
 struct v4l2_hevc_dpb_entry {
 	__u64	timestamp;
 	__u8	flags;
@@ -142,6 +244,31 @@ struct v4l2_hevc_dpb_entry {
 	__u8	padding[2];
 };
 
+/**
+ * struct v4l2_hevc_pred_weight_table - HEVC weighted prediction parameters
+ *
+ * @delta_luma_weight_l0: the difference of the weighting factor applied
+ *			  to the luma prediction value for list 0
+ * @luma_offset_l0: the additive offset applied to the luma prediction value
+ *		    for list 0
+ * @delta_chroma_weight_l0: the difference of the weighting factor applied
+ *			    to the chroma prediction values for list 0
+ * @chroma_offset_l0: the difference of the additive offset applied to
+ *		      the chroma prediction values for list 0
+ * @delta_luma_weight_l1: the difference of the weighting factor applied
+ *			  to the luma prediction value for list 1
+ * @luma_offset_l1: the additive offset applied to the luma prediction value
+ *		    for list 1
+ * @delta_chroma_weight_l1: the difference of the weighting factor applied
+ *			    to the chroma prediction values for list 1
+ * @chroma_offset_l1: the difference of the additive offset applied to
+ *		      the chroma prediction values for list 1
+ * @luma_log2_weight_denom: the base 2 logarithm of the denominator for
+ *			    all luma weighting factors
+ * @delta_chroma_log2_weight_denom: the difference of the base 2 logarithm
+ *				    of the denominator for all chroma
+ *				    weighting factors
+ */
 struct v4l2_hevc_pred_weight_table {
 	__s8	delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
 	__s8	luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
@@ -170,6 +297,50 @@ struct v4l2_hevc_pred_weight_table {
 #define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 8)
 #define V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT	(1ULL << 9)
 
+/**
+ * v4l2_ctrl_hevc_slice_params - HEVC slice parameters
+ *
+ * @bit_size: size (in bits) of the current slice data
+ * @data_bit_offset: offset (in bits) to the video data in the current slice data
+ * @nal_unit_type: specifies the coding type of the slice (B, P or I)
+ * @nuh_temporal_id_plus1: minus 1 specifies a temporal identifier for the NAL unit
+ * @slice_type: see V4L2_HEVC_SLICE_TYPE_{}
+ * @colour_plane_id: specifies the colour plane associated with the current slice
+ * @slice_pic_order_cnt: specifies the picture order count
+ * @num_ref_idx_l0_active_minus1: specifies the maximum reference index for
+ *				  reference picture list 0 that may be used to decode
+ *				  the slice
+ * @num_ref_idx_l1_active_minus1: specifies the maximum reference index for
+ *				  reference picture list 1 that may be used to decode
+ *				  the slice
+ * @collocated_ref_idx: specifies the reference index of the collocated picture used
+ *			for temporal motion vector prediction
+ * @five_minus_max_num_merge_cand: specifies the maximum number of merging
+ *				   motion vector prediction candidates supported in
+ *				   the slice subtracted from 5
+ * @slice_qp_delta: specifies the initial value of QpY to be used for the coding
+ *		    blocks in the slice
+ * @slice_cb_qp_offset: specifies a difference to be added to the value of pps_cb_qp_offset
+ * @slice_cr_qp_offset: specifies a difference to be added to the value of pps_cr_qp_offset
+ * @slice_act_y_qp_offset: screen content extension parameters
+ * @slice_act_cb_qp_offset: screen content extension parameters
+ * @slice_act_cr_qp_offset: screen content extension parameters
+ * @slice_beta_offset_div2: specify the deblocking parameter offsets for beta divided by 2
+ * @slice_tc_offset_div2: specify the deblocking parameter offsets for tC divided by 2
+ * @pic_struct: indicates whether a picture should be displayed as a frame or as one or
+ *		more fields
+ * @slice_segment_addr: specifies the address of the first coding tree block in
+ *			the slice segment
+ * @ref_idx_l0: the list of L0 reference elements as indices in the DPB
+ * @ref_idx_l1: the list of L1 reference elements as indices in the DPB
+ * @short_term_ref_pic_set_size: specifies the number of st_ref_pic_set()
+ *				 syntax structures included in the SPS
+ * @long_term_ref_pic_set_size: specifies the number of candidate long-term
+ *				reference pictures that are specified in the SPS
+ * @pred_weight_table: the prediction weight coefficients for inter-picture
+ *		       prediction
+ * @flags: see V4L2_HEVC_SLICE_PARAMS_FLAG_{}
+ */
 struct v4l2_ctrl_hevc_slice_params {
 	__u32	bit_size;
 	__u32	data_bit_offset;
@@ -216,6 +387,24 @@ struct v4l2_ctrl_hevc_slice_params {
 #define V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC		0x2
 #define V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR  0x4
 
+/**
+ * struct v4l2_ctrl_hevc_decode_params - HEVC decode parameters
+ *
+ * @pic_order_cnt_val: picture order count
+ * @num_active_dpb_entries: the number of entries in dpb
+ * @dpb: the decoded picture buffer, for meta-data about reference frames
+ * @num_poc_st_curr_before: the number of reference pictures in the short-term
+ *			    set that come before the current frame
+ * @num_poc_st_curr_after: the number of reference pictures in the short-term
+ *			   set that come after the current frame
+ * @num_poc_lt_curr: the number of reference pictures in the long-term set
+ * @poc_st_curr_before: provides the index of the short term before references
+ *			in DPB array
+ * @poc_st_curr_after: provides the index of the short term after references
+ *		       in DPB array
+ * @poc_lt_curr: provides the index of the long term references in DPB array
+ * @flags: see V4L2_HEVC_DECODE_PARAM_FLAG_{}
+ */
 struct v4l2_ctrl_hevc_decode_params {
 	__s32	pic_order_cnt_val;
 	__u8	num_active_dpb_entries;
@@ -229,6 +418,28 @@ struct v4l2_ctrl_hevc_decode_params {
 	__u64	flags;
 };
 
+/**
+ * struct v4l2_ctrl_hevc_scaling_matrix - HEVC scaling lists parameters
+ *
+ * @scaling_list_4x4: scaling list is used for the scaling process for
+ *		      transform coefficients. The values on each scaling
+ *		      list are expected in raster scan order
+ * @scaling_list_8x8: scaling list is used for the scaling process for
+ *		      transform coefficients. The values on each scaling
+ *		      list are expected in raster scan order
+ * @scaling_list_16x16: scaling list is used for the scaling process for
+ *			transform coefficients. The values on each scaling
+ *			list are expected in raster scan order
+ * @scaling_list_32x32:	scaling list is used for the scaling process for
+ *			transform coefficients. The values on each scaling
+ *			list are expected in raster scan order
+ * @scaling_list_dc_coef_16x16: scaling list is used for the scaling process
+ *				for transform coefficients. The values on each
+ *				scaling list are expected in raster scan order.
+ * @scaling_list_dc_coef_32x32:	scaling list is used for the scaling process
+ *				for transform coefficients. The values on each
+ *				scaling list are expected in raster scan order.
+ */
 struct v4l2_ctrl_hevc_scaling_matrix {
 	__u8	scaling_list_4x4[6][16];
 	__u8	scaling_list_8x8[6][64];
-- 
2.32.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH v4 07/15] media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS as a dynamic array
  2022-02-28 14:08 ` Benjamin Gaignard
@ 2022-02-28 14:08   ` Benjamin Gaignard
  -1 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Benjamin Gaignard

Make explicit that V4L2_CID_STATELESS_HEVC_SLICE_PARAMS control is
a dynamic array control type.
Some drivers may be able to receive multiple slices in one control
to improve decoding performance.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
 Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst | 2 ++
 include/media/hevc-ctrls.h                                | 3 +++
 2 files changed, 5 insertions(+)

diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
index ac13a3eb85c2..91c80964f82f 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
@@ -2964,6 +2964,8 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
     These bitstream parameters are defined according to :ref:`hevc`.
     They are described in section 7.4.7 "General slice segment header
     semantics" of the specification.
+    This control is a dynamically sized 1-dimensional array,
+    V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
 
 .. c:type:: v4l2_ctrl_hevc_slice_params
 
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
index 149384ca4c84..a22720f5a33b 100644
--- a/include/media/hevc-ctrls.h
+++ b/include/media/hevc-ctrls.h
@@ -300,6 +300,9 @@ struct v4l2_hevc_pred_weight_table {
 /**
  * v4l2_ctrl_hevc_slice_params - HEVC slice parameters
  *
+ * This control is a dynamically sized 1-dimensional array,
+ * V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
+ *
  * @bit_size: size (in bits) of the current slice data
  * @data_bit_offset: offset (in bits) to the video data in the current slice data
  * @nal_unit_type: specifies the coding type of the slice (B, P or I)
-- 
2.32.0


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

* [PATCH v4 07/15] media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS as a dynamic array
@ 2022-02-28 14:08   ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Benjamin Gaignard

Make explicit that V4L2_CID_STATELESS_HEVC_SLICE_PARAMS control is
a dynamic array control type.
Some drivers may be able to receive multiple slices in one control
to improve decoding performance.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
 Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst | 2 ++
 include/media/hevc-ctrls.h                                | 3 +++
 2 files changed, 5 insertions(+)

diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
index ac13a3eb85c2..91c80964f82f 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
@@ -2964,6 +2964,8 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
     These bitstream parameters are defined according to :ref:`hevc`.
     They are described in section 7.4.7 "General slice segment header
     semantics" of the specification.
+    This control is a dynamically sized 1-dimensional array,
+    V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
 
 .. c:type:: v4l2_ctrl_hevc_slice_params
 
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
index 149384ca4c84..a22720f5a33b 100644
--- a/include/media/hevc-ctrls.h
+++ b/include/media/hevc-ctrls.h
@@ -300,6 +300,9 @@ struct v4l2_hevc_pred_weight_table {
 /**
  * v4l2_ctrl_hevc_slice_params - HEVC slice parameters
  *
+ * This control is a dynamically sized 1-dimensional array,
+ * V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
+ *
  * @bit_size: size (in bits) of the current slice data
  * @data_bit_offset: offset (in bits) to the video data in the current slice data
  * @nal_unit_type: specifies the coding type of the slice (B, P or I)
-- 
2.32.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH v4 08/15] media: uapi: Move parsed HEVC pixel format out of staging
  2022-02-28 14:08 ` Benjamin Gaignard
@ 2022-02-28 14:08   ` Benjamin Gaignard
  -1 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Benjamin Gaignard

Move HEVC pixel format since we are ready to stabilize the uAPI

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
 Documentation/userspace-api/media/v4l/pixfmt-compressed.rst | 5 -----
 include/media/hevc-ctrls.h                                  | 3 ---
 include/uapi/linux/videodev2.h                              | 1 +
 3 files changed, 1 insertion(+), 8 deletions(-)

diff --git a/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst b/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
index 967fc803ef94..c352d91a73d8 100644
--- a/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
+++ b/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
@@ -215,11 +215,6 @@ Compressed Formats
 	See the :ref:`associated Codec Control IDs <v4l2-mpeg-hevc>`.
 	Buffers associated with this pixel format must contain the appropriate
 	number of macroblocks to decode a full corresponding frame.
-
-	.. note::
-
-	   This format is not yet part of the public kernel API and it
-	   is expected to change.
     * .. _V4L2-PIX-FMT-FWHT:
 
       - ``V4L2_PIX_FMT_FWHT``
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
index a22720f5a33b..6b5849ca247b 100644
--- a/include/media/hevc-ctrls.h
+++ b/include/media/hevc-ctrls.h
@@ -13,9 +13,6 @@
 
 #include <linux/videodev2.h>
 
-/* The pixel format isn't stable at the moment and will likely be renamed. */
-#define V4L2_PIX_FMT_HEVC_SLICE v4l2_fourcc('S', '2', '6', '5') /* HEVC parsed slices */
-
 #define V4L2_CID_STATELESS_HEVC_SPS		(V4L2_CID_CODEC_BASE + 1008)
 #define V4L2_CID_STATELESS_HEVC_PPS		(V4L2_CID_CODEC_BASE + 1009)
 #define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS	(V4L2_CID_CODEC_BASE + 1010)
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index e27c8eae78c9..959a849388f5 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -708,6 +708,7 @@ struct v4l2_pix_format {
 #define V4L2_PIX_FMT_FWHT     v4l2_fourcc('F', 'W', 'H', 'T') /* Fast Walsh Hadamard Transform (vicodec) */
 #define V4L2_PIX_FMT_FWHT_STATELESS     v4l2_fourcc('S', 'F', 'W', 'H') /* Stateless FWHT (vicodec) */
 #define V4L2_PIX_FMT_H264_SLICE v4l2_fourcc('S', '2', '6', '4') /* H264 parsed slices */
+#define V4L2_PIX_FMT_HEVC_SLICE v4l2_fourcc('S', '2', '6', '5') /* HEVC parsed slices */
 
 /*  Vendor-specific formats   */
 #define V4L2_PIX_FMT_CPIA1    v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */
-- 
2.32.0


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

* [PATCH v4 08/15] media: uapi: Move parsed HEVC pixel format out of staging
@ 2022-02-28 14:08   ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Benjamin Gaignard

Move HEVC pixel format since we are ready to stabilize the uAPI

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
 Documentation/userspace-api/media/v4l/pixfmt-compressed.rst | 5 -----
 include/media/hevc-ctrls.h                                  | 3 ---
 include/uapi/linux/videodev2.h                              | 1 +
 3 files changed, 1 insertion(+), 8 deletions(-)

diff --git a/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst b/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
index 967fc803ef94..c352d91a73d8 100644
--- a/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
+++ b/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
@@ -215,11 +215,6 @@ Compressed Formats
 	See the :ref:`associated Codec Control IDs <v4l2-mpeg-hevc>`.
 	Buffers associated with this pixel format must contain the appropriate
 	number of macroblocks to decode a full corresponding frame.
-
-	.. note::
-
-	   This format is not yet part of the public kernel API and it
-	   is expected to change.
     * .. _V4L2-PIX-FMT-FWHT:
 
       - ``V4L2_PIX_FMT_FWHT``
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
index a22720f5a33b..6b5849ca247b 100644
--- a/include/media/hevc-ctrls.h
+++ b/include/media/hevc-ctrls.h
@@ -13,9 +13,6 @@
 
 #include <linux/videodev2.h>
 
-/* The pixel format isn't stable at the moment and will likely be renamed. */
-#define V4L2_PIX_FMT_HEVC_SLICE v4l2_fourcc('S', '2', '6', '5') /* HEVC parsed slices */
-
 #define V4L2_CID_STATELESS_HEVC_SPS		(V4L2_CID_CODEC_BASE + 1008)
 #define V4L2_CID_STATELESS_HEVC_PPS		(V4L2_CID_CODEC_BASE + 1009)
 #define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS	(V4L2_CID_CODEC_BASE + 1010)
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index e27c8eae78c9..959a849388f5 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -708,6 +708,7 @@ struct v4l2_pix_format {
 #define V4L2_PIX_FMT_FWHT     v4l2_fourcc('F', 'W', 'H', 'T') /* Fast Walsh Hadamard Transform (vicodec) */
 #define V4L2_PIX_FMT_FWHT_STATELESS     v4l2_fourcc('S', 'F', 'W', 'H') /* Stateless FWHT (vicodec) */
 #define V4L2_PIX_FMT_H264_SLICE v4l2_fourcc('S', '2', '6', '4') /* H264 parsed slices */
+#define V4L2_PIX_FMT_HEVC_SLICE v4l2_fourcc('S', '2', '6', '5') /* HEVC parsed slices */
 
 /*  Vendor-specific formats   */
 #define V4L2_PIX_FMT_CPIA1    v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */
-- 
2.32.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH v4 09/15] media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS control
  2022-02-28 14:08 ` Benjamin Gaignard
@ 2022-02-28 14:08   ` Benjamin Gaignard
  -1 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Benjamin Gaignard

The number of 'entry point offset' could be very variable.
Rather than use a large static array define a v4l2 dynamic array
of U32 (V4L2_CTRL_TYPE_U32).
The number of entry point offsets is reported by the elems field
and in struct v4l2_ctrl_hevc_slice_params.num_entry_point_offsets
field.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
Version 4:
- Add num_entry_point_offsets field in  struct v4l2_ctrl_hevc_slice_params
- Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
- Initialize control

 .../userspace-api/media/v4l/ext-ctrls-codec.rst       | 11 +++++++++++
 drivers/media/v4l2-core/v4l2-ctrls-defs.c             |  5 +++++
 include/media/hevc-ctrls.h                            |  5 ++++-
 3 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
index 91c80964f82f..b2993ac5a041 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
@@ -2988,6 +2988,9 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
     * - __u32
       - ``data_bit_offset``
       - Offset (in bits) to the video data in the current slice data.
+    * - __u32
+      - ``num_entry_point_offsets``
+      - Specifies the number of entry point offset syntax elements in the slice header.
     * - __u8
       - ``nal_unit_type``
       - Specifies the coding type of the slice (B, P or I).
@@ -3128,6 +3131,14 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
 
     \normalsize
 
+``V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (integer)``
+    Specifies entry point offsets in bytes.
+    This control is a dynamically sized array. The number of entry point
+    offsets is reported by the ``elems`` field.
+    This bitstream parameter is defined according to :ref:`hevc`.
+    They are described in section 7.4.7.1 "General slice segment header
+    semantics" of the specification.
+
 ``V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (struct)``
     Specifies the HEVC scaling matrix parameters used for the scaling process
     for transform coefficients.
diff --git a/drivers/media/v4l2-core/v4l2-ctrls-defs.c b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
index 4b68cbe23309..48d385b776b1 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-defs.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
@@ -1180,6 +1180,7 @@ const char *v4l2_ctrl_get_name(u32 id)
 	case V4L2_CID_STATELESS_HEVC_DECODE_PARAMS:		return "HEVC Decode Parameters";
 	case V4L2_CID_STATELESS_HEVC_DECODE_MODE:		return "HEVC Decode Mode";
 	case V4L2_CID_STATELESS_HEVC_START_CODE:		return "HEVC Start Code";
+	case V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS:	return "HEVC Entry Point Offsets";
 
 	/* Colorimetry controls */
 	/* Keep the order of the 'case's the same as in v4l2-controls.h! */
@@ -1508,6 +1509,10 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
 	case V4L2_CID_STATELESS_HEVC_DECODE_PARAMS:
 		*type = V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS;
 		break;
+	case V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS:
+		*type = V4L2_CTRL_TYPE_U32;
+		*flags |= V4L2_CTRL_FLAG_DYNAMIC_ARRAY;
+		break;
 	case V4L2_CID_STATELESS_VP9_COMPRESSED_HDR:
 		*type = V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR;
 		break;
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
index 6b5849ca247b..1ec29e79cc55 100644
--- a/include/media/hevc-ctrls.h
+++ b/include/media/hevc-ctrls.h
@@ -20,6 +20,7 @@
 #define V4L2_CID_STATELESS_HEVC_DECODE_PARAMS	(V4L2_CID_CODEC_BASE + 1012)
 #define V4L2_CID_STATELESS_HEVC_DECODE_MODE	(V4L2_CID_CODEC_BASE + 1015)
 #define V4L2_CID_STATELESS_HEVC_START_CODE	(V4L2_CID_CODEC_BASE + 1016)
+#define V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (V4L2_CID_CODEC_BASE + 1017)
 
 /* enum v4l2_ctrl_type type values */
 #define V4L2_CTRL_TYPE_HEVC_SPS 0x0120
@@ -302,6 +303,8 @@ struct v4l2_hevc_pred_weight_table {
  *
  * @bit_size: size (in bits) of the current slice data
  * @data_bit_offset: offset (in bits) to the video data in the current slice data
+ * @num_entry_point_offsets: specifies the number of entry point offset syntax
+ *			     elements in the slice header.
  * @nal_unit_type: specifies the coding type of the slice (B, P or I)
  * @nuh_temporal_id_plus1: minus 1 specifies a temporal identifier for the NAL unit
  * @slice_type: see V4L2_HEVC_SLICE_TYPE_{}
@@ -344,7 +347,7 @@ struct v4l2_hevc_pred_weight_table {
 struct v4l2_ctrl_hevc_slice_params {
 	__u32	bit_size;
 	__u32	data_bit_offset;
-
+	__u32	num_entry_point_offsets;
 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: NAL unit header */
 	__u8	nal_unit_type;
 	__u8	nuh_temporal_id_plus1;
-- 
2.32.0


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

* [PATCH v4 09/15] media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS control
@ 2022-02-28 14:08   ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Benjamin Gaignard

The number of 'entry point offset' could be very variable.
Rather than use a large static array define a v4l2 dynamic array
of U32 (V4L2_CTRL_TYPE_U32).
The number of entry point offsets is reported by the elems field
and in struct v4l2_ctrl_hevc_slice_params.num_entry_point_offsets
field.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
Version 4:
- Add num_entry_point_offsets field in  struct v4l2_ctrl_hevc_slice_params
- Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
- Initialize control

 .../userspace-api/media/v4l/ext-ctrls-codec.rst       | 11 +++++++++++
 drivers/media/v4l2-core/v4l2-ctrls-defs.c             |  5 +++++
 include/media/hevc-ctrls.h                            |  5 ++++-
 3 files changed, 20 insertions(+), 1 deletion(-)

diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
index 91c80964f82f..b2993ac5a041 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
@@ -2988,6 +2988,9 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
     * - __u32
       - ``data_bit_offset``
       - Offset (in bits) to the video data in the current slice data.
+    * - __u32
+      - ``num_entry_point_offsets``
+      - Specifies the number of entry point offset syntax elements in the slice header.
     * - __u8
       - ``nal_unit_type``
       - Specifies the coding type of the slice (B, P or I).
@@ -3128,6 +3131,14 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
 
     \normalsize
 
+``V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (integer)``
+    Specifies entry point offsets in bytes.
+    This control is a dynamically sized array. The number of entry point
+    offsets is reported by the ``elems`` field.
+    This bitstream parameter is defined according to :ref:`hevc`.
+    They are described in section 7.4.7.1 "General slice segment header
+    semantics" of the specification.
+
 ``V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (struct)``
     Specifies the HEVC scaling matrix parameters used for the scaling process
     for transform coefficients.
diff --git a/drivers/media/v4l2-core/v4l2-ctrls-defs.c b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
index 4b68cbe23309..48d385b776b1 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-defs.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
@@ -1180,6 +1180,7 @@ const char *v4l2_ctrl_get_name(u32 id)
 	case V4L2_CID_STATELESS_HEVC_DECODE_PARAMS:		return "HEVC Decode Parameters";
 	case V4L2_CID_STATELESS_HEVC_DECODE_MODE:		return "HEVC Decode Mode";
 	case V4L2_CID_STATELESS_HEVC_START_CODE:		return "HEVC Start Code";
+	case V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS:	return "HEVC Entry Point Offsets";
 
 	/* Colorimetry controls */
 	/* Keep the order of the 'case's the same as in v4l2-controls.h! */
@@ -1508,6 +1509,10 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
 	case V4L2_CID_STATELESS_HEVC_DECODE_PARAMS:
 		*type = V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS;
 		break;
+	case V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS:
+		*type = V4L2_CTRL_TYPE_U32;
+		*flags |= V4L2_CTRL_FLAG_DYNAMIC_ARRAY;
+		break;
 	case V4L2_CID_STATELESS_VP9_COMPRESSED_HDR:
 		*type = V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR;
 		break;
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
index 6b5849ca247b..1ec29e79cc55 100644
--- a/include/media/hevc-ctrls.h
+++ b/include/media/hevc-ctrls.h
@@ -20,6 +20,7 @@
 #define V4L2_CID_STATELESS_HEVC_DECODE_PARAMS	(V4L2_CID_CODEC_BASE + 1012)
 #define V4L2_CID_STATELESS_HEVC_DECODE_MODE	(V4L2_CID_CODEC_BASE + 1015)
 #define V4L2_CID_STATELESS_HEVC_START_CODE	(V4L2_CID_CODEC_BASE + 1016)
+#define V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (V4L2_CID_CODEC_BASE + 1017)
 
 /* enum v4l2_ctrl_type type values */
 #define V4L2_CTRL_TYPE_HEVC_SPS 0x0120
@@ -302,6 +303,8 @@ struct v4l2_hevc_pred_weight_table {
  *
  * @bit_size: size (in bits) of the current slice data
  * @data_bit_offset: offset (in bits) to the video data in the current slice data
+ * @num_entry_point_offsets: specifies the number of entry point offset syntax
+ *			     elements in the slice header.
  * @nal_unit_type: specifies the coding type of the slice (B, P or I)
  * @nuh_temporal_id_plus1: minus 1 specifies a temporal identifier for the NAL unit
  * @slice_type: see V4L2_HEVC_SLICE_TYPE_{}
@@ -344,7 +347,7 @@ struct v4l2_hevc_pred_weight_table {
 struct v4l2_ctrl_hevc_slice_params {
 	__u32	bit_size;
 	__u32	data_bit_offset;
-
+	__u32	num_entry_point_offsets;
 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: NAL unit header */
 	__u8	nal_unit_type;
 	__u8	nuh_temporal_id_plus1;
-- 
2.32.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH v4 10/15] media: uapi: Move the HEVC stateless control type out of staging
  2022-02-28 14:08 ` Benjamin Gaignard
@ 2022-02-28 14:08   ` Benjamin Gaignard
  -1 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Benjamin Gaignard

Move the HEVC stateless controls types out of staging,
and re-number them.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
 .../userspace-api/media/videodev2.h.rst.exceptions         | 5 +++++
 include/media/hevc-ctrls.h                                 | 7 -------
 include/uapi/linux/videodev2.h                             | 6 ++++++
 3 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/Documentation/userspace-api/media/videodev2.h.rst.exceptions b/Documentation/userspace-api/media/videodev2.h.rst.exceptions
index 9cbb7a0c354a..ee34f13e8142 100644
--- a/Documentation/userspace-api/media/videodev2.h.rst.exceptions
+++ b/Documentation/userspace-api/media/videodev2.h.rst.exceptions
@@ -153,6 +153,11 @@ replace symbol V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR :c:type:`v4l2_ctrl_type`
 replace symbol V4L2_CTRL_TYPE_VP9_FRAME :c:type:`v4l2_ctrl_type`
 replace symbol V4L2_CTRL_TYPE_HDR10_CLL_INFO :c:type:`v4l2_ctrl_type`
 replace symbol V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY :c:type:`v4l2_ctrl_type`
+replace symbol V4L2_CTRL_TYPE_HEVC_SPS :c:type:`v4l2_ctrl_type`
+replace symbol V4L2_CTRL_TYPE_HEVC_PPS :c:type:`v4l2_ctrl_type`
+replace symbol V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS :c:type:`v4l2_ctrl_type`
+replace symbol V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX :c:type:`v4l2_ctrl_type`
+replace symbol V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS :c:type:`v4l2_ctrl_type`
 
 # V4L2 capability defines
 replace define V4L2_CAP_VIDEO_CAPTURE device-capabilities
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
index 1ec29e79cc55..235a3aaebc2b 100644
--- a/include/media/hevc-ctrls.h
+++ b/include/media/hevc-ctrls.h
@@ -22,13 +22,6 @@
 #define V4L2_CID_STATELESS_HEVC_START_CODE	(V4L2_CID_CODEC_BASE + 1016)
 #define V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (V4L2_CID_CODEC_BASE + 1017)
 
-/* enum v4l2_ctrl_type type values */
-#define V4L2_CTRL_TYPE_HEVC_SPS 0x0120
-#define V4L2_CTRL_TYPE_HEVC_PPS 0x0121
-#define V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS 0x0122
-#define V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX 0x0123
-#define V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS 0x0124
-
 enum v4l2_stateless_hevc_decode_mode {
 	V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
 	V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index 959a849388f5..9af1c2460148 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -1830,6 +1830,12 @@ enum v4l2_ctrl_type {
 
 	V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR	= 0x0260,
 	V4L2_CTRL_TYPE_VP9_FRAME		= 0x0261,
+
+	V4L2_CTRL_TYPE_HEVC_SPS			= 0x0270,
+	V4L2_CTRL_TYPE_HEVC_PPS			= 0x0271,
+	V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS	= 0x0272,
+	V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX	= 0x0273,
+	V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS	= 0x0274,
 };
 
 /*  Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
-- 
2.32.0


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

* [PATCH v4 10/15] media: uapi: Move the HEVC stateless control type out of staging
@ 2022-02-28 14:08   ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Benjamin Gaignard

Move the HEVC stateless controls types out of staging,
and re-number them.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
 .../userspace-api/media/videodev2.h.rst.exceptions         | 5 +++++
 include/media/hevc-ctrls.h                                 | 7 -------
 include/uapi/linux/videodev2.h                             | 6 ++++++
 3 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/Documentation/userspace-api/media/videodev2.h.rst.exceptions b/Documentation/userspace-api/media/videodev2.h.rst.exceptions
index 9cbb7a0c354a..ee34f13e8142 100644
--- a/Documentation/userspace-api/media/videodev2.h.rst.exceptions
+++ b/Documentation/userspace-api/media/videodev2.h.rst.exceptions
@@ -153,6 +153,11 @@ replace symbol V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR :c:type:`v4l2_ctrl_type`
 replace symbol V4L2_CTRL_TYPE_VP9_FRAME :c:type:`v4l2_ctrl_type`
 replace symbol V4L2_CTRL_TYPE_HDR10_CLL_INFO :c:type:`v4l2_ctrl_type`
 replace symbol V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY :c:type:`v4l2_ctrl_type`
+replace symbol V4L2_CTRL_TYPE_HEVC_SPS :c:type:`v4l2_ctrl_type`
+replace symbol V4L2_CTRL_TYPE_HEVC_PPS :c:type:`v4l2_ctrl_type`
+replace symbol V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS :c:type:`v4l2_ctrl_type`
+replace symbol V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX :c:type:`v4l2_ctrl_type`
+replace symbol V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS :c:type:`v4l2_ctrl_type`
 
 # V4L2 capability defines
 replace define V4L2_CAP_VIDEO_CAPTURE device-capabilities
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
index 1ec29e79cc55..235a3aaebc2b 100644
--- a/include/media/hevc-ctrls.h
+++ b/include/media/hevc-ctrls.h
@@ -22,13 +22,6 @@
 #define V4L2_CID_STATELESS_HEVC_START_CODE	(V4L2_CID_CODEC_BASE + 1016)
 #define V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (V4L2_CID_CODEC_BASE + 1017)
 
-/* enum v4l2_ctrl_type type values */
-#define V4L2_CTRL_TYPE_HEVC_SPS 0x0120
-#define V4L2_CTRL_TYPE_HEVC_PPS 0x0121
-#define V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS 0x0122
-#define V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX 0x0123
-#define V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS 0x0124
-
 enum v4l2_stateless_hevc_decode_mode {
 	V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
 	V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index 959a849388f5..9af1c2460148 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -1830,6 +1830,12 @@ enum v4l2_ctrl_type {
 
 	V4L2_CTRL_TYPE_VP9_COMPRESSED_HDR	= 0x0260,
 	V4L2_CTRL_TYPE_VP9_FRAME		= 0x0261,
+
+	V4L2_CTRL_TYPE_HEVC_SPS			= 0x0270,
+	V4L2_CTRL_TYPE_HEVC_PPS			= 0x0271,
+	V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS	= 0x0272,
+	V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX	= 0x0273,
+	V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS	= 0x0274,
 };
 
 /*  Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
-- 
2.32.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH v4 11/15] media: controls: Log HEVC stateless control in .std_log
  2022-02-28 14:08 ` Benjamin Gaignard
@ 2022-02-28 14:08   ` Benjamin Gaignard
  -1 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Benjamin Gaignard

Simply print the type of the control.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
 drivers/media/v4l2-core/v4l2-ctrls-core.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/drivers/media/v4l2-core/v4l2-ctrls-core.c b/drivers/media/v4l2-core/v4l2-ctrls-core.c
index 2d24cb8d3926..694de414f545 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-core.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-core.c
@@ -289,6 +289,21 @@ static void std_log(const struct v4l2_ctrl *ctrl)
 	case V4L2_CTRL_TYPE_VP9_FRAME:
 		pr_cont("VP9_FRAME");
 		break;
+	case V4L2_CTRL_TYPE_HEVC_SPS:
+		pr_cont("HEVC_SPS");
+		break;
+	case V4L2_CTRL_TYPE_HEVC_PPS:
+		pr_cont("HEVC_PPS");
+		break;
+	case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
+		pr_cont("HEVC_SLICE_PARAMS");
+		break;
+	case V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX:
+		pr_cont("HEVC_SCALING_MATRIX");
+		break;
+	case V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS:
+		pr_cont("HEVC_DECODE_PARAMS");
+		break;
 	default:
 		pr_cont("unknown type %d", ctrl->type);
 		break;
-- 
2.32.0


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

* [PATCH v4 11/15] media: controls: Log HEVC stateless control in .std_log
@ 2022-02-28 14:08   ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Benjamin Gaignard

Simply print the type of the control.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
 drivers/media/v4l2-core/v4l2-ctrls-core.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/drivers/media/v4l2-core/v4l2-ctrls-core.c b/drivers/media/v4l2-core/v4l2-ctrls-core.c
index 2d24cb8d3926..694de414f545 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-core.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-core.c
@@ -289,6 +289,21 @@ static void std_log(const struct v4l2_ctrl *ctrl)
 	case V4L2_CTRL_TYPE_VP9_FRAME:
 		pr_cont("VP9_FRAME");
 		break;
+	case V4L2_CTRL_TYPE_HEVC_SPS:
+		pr_cont("HEVC_SPS");
+		break;
+	case V4L2_CTRL_TYPE_HEVC_PPS:
+		pr_cont("HEVC_PPS");
+		break;
+	case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
+		pr_cont("HEVC_SLICE_PARAMS");
+		break;
+	case V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX:
+		pr_cont("HEVC_SCALING_MATRIX");
+		break;
+	case V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS:
+		pr_cont("HEVC_DECODE_PARAMS");
+		break;
 	default:
 		pr_cont("unknown type %d", ctrl->type);
 		break;
-- 
2.32.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH v4 12/15] media: uapi: Create a dedicated header for Hantro control
  2022-02-28 14:08 ` Benjamin Gaignard
@ 2022-02-28 14:08   ` Benjamin Gaignard
  -1 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Benjamin Gaignard

Hantro hardware needs a dedicated v4l2 control to perform HEVC
decoding. Move it to a dedicated header file to prepare HEVC
uAPI un-staging.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
version 4:
- Fix hantro-media SPDX license

 .../userspace-api/media/drivers/hantro.rst    |  5 -----
 drivers/staging/media/hantro/hantro_drv.c     |  1 +
 include/media/hevc-ctrls.h                    | 13 -------------
 include/uapi/linux/hantro-media.h             | 19 +++++++++++++++++++
 include/uapi/linux/v4l2-controls.h            |  5 +++++
 5 files changed, 25 insertions(+), 18 deletions(-)
 create mode 100644 include/uapi/linux/hantro-media.h

diff --git a/Documentation/userspace-api/media/drivers/hantro.rst b/Documentation/userspace-api/media/drivers/hantro.rst
index cd9754b4e005..78dcd2a44a03 100644
--- a/Documentation/userspace-api/media/drivers/hantro.rst
+++ b/Documentation/userspace-api/media/drivers/hantro.rst
@@ -12,8 +12,3 @@ The Hantro video decoder driver implements the following driver-specific control
     to before syntax element "slice_temporal_mvp_enabled_flag".
     If IDR, the skipped bits are just "pic_output_flag"
     (separate_colour_plane_flag is not supported).
-
-.. note::
-
-        This control is not yet part of the public kernel API and
-        it is expected to change.
diff --git a/drivers/staging/media/hantro/hantro_drv.c b/drivers/staging/media/hantro/hantro_drv.c
index 6f58c259d8fc..783a92a38c8e 100644
--- a/drivers/staging/media/hantro/hantro_drv.c
+++ b/drivers/staging/media/hantro/hantro_drv.c
@@ -11,6 +11,7 @@
  */
 
 #include <linux/clk.h>
+#include <linux/hantro-media.h>
 #include <linux/module.h>
 #include <linux/of.h>
 #include <linux/platform_device.h>
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
index 235a3aaebc2b..c4c88a2073ce 100644
--- a/include/media/hevc-ctrls.h
+++ b/include/media/hevc-ctrls.h
@@ -445,17 +445,4 @@ struct v4l2_ctrl_hevc_scaling_matrix {
 	__u8	scaling_list_dc_coef_32x32[2];
 };
 
-/*  MPEG-class control IDs specific to the Hantro driver as defined by V4L2 */
-#define V4L2_CID_CODEC_HANTRO_BASE				(V4L2_CTRL_CLASS_CODEC | 0x1200)
-/*
- * V4L2_CID_HANTRO_HEVC_SLICE_HEADER_SKIP -
- * the number of data (in bits) to skip in the
- * slice segment header.
- * If non-IDR, the bits to be skipped go from syntax element "pic_output_flag"
- * to before syntax element "slice_temporal_mvp_enabled_flag".
- * If IDR, the skipped bits are just "pic_output_flag"
- * (separate_colour_plane_flag is not supported).
- */
-#define V4L2_CID_HANTRO_HEVC_SLICE_HEADER_SKIP	(V4L2_CID_CODEC_HANTRO_BASE + 0)
-
 #endif
diff --git a/include/uapi/linux/hantro-media.h b/include/uapi/linux/hantro-media.h
new file mode 100644
index 000000000000..d0d48fd7de9c
--- /dev/null
+++ b/include/uapi/linux/hantro-media.h
@@ -0,0 +1,19 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+
+#ifndef __UAPI_HANTRO_MEDIA_H__
+#define __UAPI_HANTRO_MEDIA_H__
+
+#include <linux/v4l2-controls.h>
+
+/*
+ * V4L2_CID_HANTRO_HEVC_SLICE_HEADER_SKIP -
+ * the number of data (in bits) to skip in the
+ * slice segment header.
+ * If non-IDR, the bits to be skipped go from syntax element "pic_output_flag"
+ * to before syntax element "slice_temporal_mvp_enabled_flag".
+ * If IDR, the skipped bits are just "pic_output_flag"
+ * (separate_colour_plane_flag is not supported).
+ */
+#define V4L2_CID_HANTRO_HEVC_SLICE_HEADER_SKIP	(V4L2_CID_USER_HANTRO_BASE + 0)
+
+#endif /* __UAPI_HANTRO_MEDIA_H__ */
diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
index c8e0f84d204d..d56a1c7fb91d 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -218,6 +218,11 @@ enum v4l2_colorfx {
  * We reserve 16 controls for this driver.
  */
 #define V4L2_CID_USER_ALLEGRO_BASE		(V4L2_CID_USER_BASE + 0x1170)
+/*
+ * The base for Hantro driver controls.
+ * We reserve 128 controls for this driver.
+ */
+#define V4L2_CID_USER_HANTRO_BASE		(V4L2_CID_USER_BASE + 0x1180)
 
 /* MPEG-class control IDs */
 /* The MPEG controls are applicable to all codec controls
-- 
2.32.0


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

* [PATCH v4 12/15] media: uapi: Create a dedicated header for Hantro control
@ 2022-02-28 14:08   ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Benjamin Gaignard

Hantro hardware needs a dedicated v4l2 control to perform HEVC
decoding. Move it to a dedicated header file to prepare HEVC
uAPI un-staging.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
version 4:
- Fix hantro-media SPDX license

 .../userspace-api/media/drivers/hantro.rst    |  5 -----
 drivers/staging/media/hantro/hantro_drv.c     |  1 +
 include/media/hevc-ctrls.h                    | 13 -------------
 include/uapi/linux/hantro-media.h             | 19 +++++++++++++++++++
 include/uapi/linux/v4l2-controls.h            |  5 +++++
 5 files changed, 25 insertions(+), 18 deletions(-)
 create mode 100644 include/uapi/linux/hantro-media.h

diff --git a/Documentation/userspace-api/media/drivers/hantro.rst b/Documentation/userspace-api/media/drivers/hantro.rst
index cd9754b4e005..78dcd2a44a03 100644
--- a/Documentation/userspace-api/media/drivers/hantro.rst
+++ b/Documentation/userspace-api/media/drivers/hantro.rst
@@ -12,8 +12,3 @@ The Hantro video decoder driver implements the following driver-specific control
     to before syntax element "slice_temporal_mvp_enabled_flag".
     If IDR, the skipped bits are just "pic_output_flag"
     (separate_colour_plane_flag is not supported).
-
-.. note::
-
-        This control is not yet part of the public kernel API and
-        it is expected to change.
diff --git a/drivers/staging/media/hantro/hantro_drv.c b/drivers/staging/media/hantro/hantro_drv.c
index 6f58c259d8fc..783a92a38c8e 100644
--- a/drivers/staging/media/hantro/hantro_drv.c
+++ b/drivers/staging/media/hantro/hantro_drv.c
@@ -11,6 +11,7 @@
  */
 
 #include <linux/clk.h>
+#include <linux/hantro-media.h>
 #include <linux/module.h>
 #include <linux/of.h>
 #include <linux/platform_device.h>
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
index 235a3aaebc2b..c4c88a2073ce 100644
--- a/include/media/hevc-ctrls.h
+++ b/include/media/hevc-ctrls.h
@@ -445,17 +445,4 @@ struct v4l2_ctrl_hevc_scaling_matrix {
 	__u8	scaling_list_dc_coef_32x32[2];
 };
 
-/*  MPEG-class control IDs specific to the Hantro driver as defined by V4L2 */
-#define V4L2_CID_CODEC_HANTRO_BASE				(V4L2_CTRL_CLASS_CODEC | 0x1200)
-/*
- * V4L2_CID_HANTRO_HEVC_SLICE_HEADER_SKIP -
- * the number of data (in bits) to skip in the
- * slice segment header.
- * If non-IDR, the bits to be skipped go from syntax element "pic_output_flag"
- * to before syntax element "slice_temporal_mvp_enabled_flag".
- * If IDR, the skipped bits are just "pic_output_flag"
- * (separate_colour_plane_flag is not supported).
- */
-#define V4L2_CID_HANTRO_HEVC_SLICE_HEADER_SKIP	(V4L2_CID_CODEC_HANTRO_BASE + 0)
-
 #endif
diff --git a/include/uapi/linux/hantro-media.h b/include/uapi/linux/hantro-media.h
new file mode 100644
index 000000000000..d0d48fd7de9c
--- /dev/null
+++ b/include/uapi/linux/hantro-media.h
@@ -0,0 +1,19 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+
+#ifndef __UAPI_HANTRO_MEDIA_H__
+#define __UAPI_HANTRO_MEDIA_H__
+
+#include <linux/v4l2-controls.h>
+
+/*
+ * V4L2_CID_HANTRO_HEVC_SLICE_HEADER_SKIP -
+ * the number of data (in bits) to skip in the
+ * slice segment header.
+ * If non-IDR, the bits to be skipped go from syntax element "pic_output_flag"
+ * to before syntax element "slice_temporal_mvp_enabled_flag".
+ * If IDR, the skipped bits are just "pic_output_flag"
+ * (separate_colour_plane_flag is not supported).
+ */
+#define V4L2_CID_HANTRO_HEVC_SLICE_HEADER_SKIP	(V4L2_CID_USER_HANTRO_BASE + 0)
+
+#endif /* __UAPI_HANTRO_MEDIA_H__ */
diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
index c8e0f84d204d..d56a1c7fb91d 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -218,6 +218,11 @@ enum v4l2_colorfx {
  * We reserve 16 controls for this driver.
  */
 #define V4L2_CID_USER_ALLEGRO_BASE		(V4L2_CID_USER_BASE + 0x1170)
+/*
+ * The base for Hantro driver controls.
+ * We reserve 128 controls for this driver.
+ */
+#define V4L2_CID_USER_HANTRO_BASE		(V4L2_CID_USER_BASE + 0x1180)
 
 /* MPEG-class control IDs */
 /* The MPEG controls are applicable to all codec controls
-- 
2.32.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH v4 13/15] media: uapi: HEVC: fix padding in v4l2 control structures
  2022-02-28 14:08 ` Benjamin Gaignard
@ 2022-02-28 14:08   ` Benjamin Gaignard
  -1 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Benjamin Gaignard

Fix padding where needed to remove holes and stay align on cache boundaries

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
 .../userspace-api/media/v4l/ext-ctrls-codec.rst   |  6 +++---
 drivers/media/v4l2-core/v4l2-ctrls-core.c         |  1 -
 include/media/hevc-ctrls.h                        | 15 +++++++++------
 3 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
index b2993ac5a041..1aa2a7399e76 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
@@ -3425,9 +3425,6 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
     * - __u8
       - ``num_active_dpb_entries``
       - The number of entries in ``dpb``.
-    * - struct :c:type:`v4l2_hevc_dpb_entry`
-      - ``dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
-      - The decoded picture buffer, for meta-data about reference frames.
     * - __u8
       - ``num_poc_st_curr_before``
       - The number of reference pictures in the short-term set that come before
@@ -3451,6 +3448,9 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
       - ``poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
       - PocLtCurr as described in section 8.3.2 "Decoding process for reference
         picture set": provides the index of the long term references in DPB array.
+    * - struct :c:type:`v4l2_hevc_dpb_entry`
+      - ``dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+      - The decoded picture buffer, for meta-data about reference frames.
     * - __u64
       - ``flags``
       - See :ref:`Decode Parameters Flags <hevc_decode_params_flags>`
diff --git a/drivers/media/v4l2-core/v4l2-ctrls-core.c b/drivers/media/v4l2-core/v4l2-ctrls-core.c
index 694de414f545..eb1de4f699d0 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-core.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-core.c
@@ -819,7 +819,6 @@ static int std_validate_compound(const struct v4l2_ctrl *ctrl, u32 idx,
 	case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
 		p_hevc_slice_params = p;
 
-		zero_padding(p_hevc_slice_params->pred_weight_table);
 		zero_padding(*p_hevc_slice_params);
 		break;
 
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
index c4c88a2073ce..c50205083573 100644
--- a/include/media/hevc-ctrls.h
+++ b/include/media/hevc-ctrls.h
@@ -133,7 +133,9 @@ struct v4l2_ctrl_hevc_sps {
 	__u8	chroma_format_idc;
 	__u8	sps_max_sub_layers_minus1;
 
+	__u8	padding[6];
 	__u64	flags;
+	__u8	reserved[24];
 };
 
 #define V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT_ENABLED	(1ULL << 0)
@@ -210,9 +212,10 @@ struct v4l2_ctrl_hevc_pps {
 	__s8	pps_beta_offset_div2;
 	__s8	pps_tc_offset_div2;
 	__u8	log2_parallel_merge_level_minus2;
+	__u8	padding[9];
 
-	__u8	padding[4];
 	__u64	flags;
+	__u8	reserved[56];
 };
 
 #define V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE	0x01
@@ -271,8 +274,6 @@ struct v4l2_hevc_pred_weight_table {
 	__s8	delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
 	__s8	chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
 
-	__u8	padding[6];
-
 	__u8	luma_log2_weight_denom;
 	__s8	delta_chroma_log2_weight_denom;
 };
@@ -365,18 +366,20 @@ struct v4l2_ctrl_hevc_slice_params {
 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture timing SEI message */
 	__u8	pic_struct;
 
+	__u8	reserved;
 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
 	__u32	slice_segment_addr;
 	__u8	ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
 	__u8	ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
 	__u16	short_term_ref_pic_set_size;
 	__u16	long_term_ref_pic_set_size;
-	__u8	padding;
 
 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction parameter */
 	struct v4l2_hevc_pred_weight_table pred_weight_table;
 
+	__u8	reserved1[6];
 	__u64	flags;
+	__u8	padding[40];
 };
 
 #define V4L2_HEVC_DECODE_PARAM_FLAG_IRAP_PIC		0x1
@@ -388,7 +391,6 @@ struct v4l2_ctrl_hevc_slice_params {
  *
  * @pic_order_cnt_val: picture order count
  * @num_active_dpb_entries: the number of entries in dpb
- * @dpb: the decoded picture buffer, for meta-data about reference frames
  * @num_poc_st_curr_before: the number of reference pictures in the short-term
  *			    set that come before the current frame
  * @num_poc_st_curr_after: the number of reference pictures in the short-term
@@ -399,18 +401,19 @@ struct v4l2_ctrl_hevc_slice_params {
  * @poc_st_curr_after: provides the index of the short term after references
  *		       in DPB array
  * @poc_lt_curr: provides the index of the long term references in DPB array
+ * @dpb: the decoded picture buffer, for meta-data about reference frames
  * @flags: see V4L2_HEVC_DECODE_PARAM_FLAG_{}
  */
 struct v4l2_ctrl_hevc_decode_params {
 	__s32	pic_order_cnt_val;
 	__u8	num_active_dpb_entries;
-	struct	v4l2_hevc_dpb_entry dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
 	__u8	num_poc_st_curr_before;
 	__u8	num_poc_st_curr_after;
 	__u8	num_poc_lt_curr;
 	__u8	poc_st_curr_before[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
 	__u8	poc_st_curr_after[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
 	__u8	poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+	struct	v4l2_hevc_dpb_entry dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
 	__u64	flags;
 };
 
-- 
2.32.0


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

* [PATCH v4 13/15] media: uapi: HEVC: fix padding in v4l2 control structures
@ 2022-02-28 14:08   ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Benjamin Gaignard

Fix padding where needed to remove holes and stay align on cache boundaries

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
 .../userspace-api/media/v4l/ext-ctrls-codec.rst   |  6 +++---
 drivers/media/v4l2-core/v4l2-ctrls-core.c         |  1 -
 include/media/hevc-ctrls.h                        | 15 +++++++++------
 3 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
index b2993ac5a041..1aa2a7399e76 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
@@ -3425,9 +3425,6 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
     * - __u8
       - ``num_active_dpb_entries``
       - The number of entries in ``dpb``.
-    * - struct :c:type:`v4l2_hevc_dpb_entry`
-      - ``dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
-      - The decoded picture buffer, for meta-data about reference frames.
     * - __u8
       - ``num_poc_st_curr_before``
       - The number of reference pictures in the short-term set that come before
@@ -3451,6 +3448,9 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
       - ``poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
       - PocLtCurr as described in section 8.3.2 "Decoding process for reference
         picture set": provides the index of the long term references in DPB array.
+    * - struct :c:type:`v4l2_hevc_dpb_entry`
+      - ``dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+      - The decoded picture buffer, for meta-data about reference frames.
     * - __u64
       - ``flags``
       - See :ref:`Decode Parameters Flags <hevc_decode_params_flags>`
diff --git a/drivers/media/v4l2-core/v4l2-ctrls-core.c b/drivers/media/v4l2-core/v4l2-ctrls-core.c
index 694de414f545..eb1de4f699d0 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls-core.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls-core.c
@@ -819,7 +819,6 @@ static int std_validate_compound(const struct v4l2_ctrl *ctrl, u32 idx,
 	case V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS:
 		p_hevc_slice_params = p;
 
-		zero_padding(p_hevc_slice_params->pred_weight_table);
 		zero_padding(*p_hevc_slice_params);
 		break;
 
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
index c4c88a2073ce..c50205083573 100644
--- a/include/media/hevc-ctrls.h
+++ b/include/media/hevc-ctrls.h
@@ -133,7 +133,9 @@ struct v4l2_ctrl_hevc_sps {
 	__u8	chroma_format_idc;
 	__u8	sps_max_sub_layers_minus1;
 
+	__u8	padding[6];
 	__u64	flags;
+	__u8	reserved[24];
 };
 
 #define V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT_ENABLED	(1ULL << 0)
@@ -210,9 +212,10 @@ struct v4l2_ctrl_hevc_pps {
 	__s8	pps_beta_offset_div2;
 	__s8	pps_tc_offset_div2;
 	__u8	log2_parallel_merge_level_minus2;
+	__u8	padding[9];
 
-	__u8	padding[4];
 	__u64	flags;
+	__u8	reserved[56];
 };
 
 #define V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE	0x01
@@ -271,8 +274,6 @@ struct v4l2_hevc_pred_weight_table {
 	__s8	delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
 	__s8	chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
 
-	__u8	padding[6];
-
 	__u8	luma_log2_weight_denom;
 	__s8	delta_chroma_log2_weight_denom;
 };
@@ -365,18 +366,20 @@ struct v4l2_ctrl_hevc_slice_params {
 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture timing SEI message */
 	__u8	pic_struct;
 
+	__u8	reserved;
 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
 	__u32	slice_segment_addr;
 	__u8	ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
 	__u8	ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
 	__u16	short_term_ref_pic_set_size;
 	__u16	long_term_ref_pic_set_size;
-	__u8	padding;
 
 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction parameter */
 	struct v4l2_hevc_pred_weight_table pred_weight_table;
 
+	__u8	reserved1[6];
 	__u64	flags;
+	__u8	padding[40];
 };
 
 #define V4L2_HEVC_DECODE_PARAM_FLAG_IRAP_PIC		0x1
@@ -388,7 +391,6 @@ struct v4l2_ctrl_hevc_slice_params {
  *
  * @pic_order_cnt_val: picture order count
  * @num_active_dpb_entries: the number of entries in dpb
- * @dpb: the decoded picture buffer, for meta-data about reference frames
  * @num_poc_st_curr_before: the number of reference pictures in the short-term
  *			    set that come before the current frame
  * @num_poc_st_curr_after: the number of reference pictures in the short-term
@@ -399,18 +401,19 @@ struct v4l2_ctrl_hevc_slice_params {
  * @poc_st_curr_after: provides the index of the short term after references
  *		       in DPB array
  * @poc_lt_curr: provides the index of the long term references in DPB array
+ * @dpb: the decoded picture buffer, for meta-data about reference frames
  * @flags: see V4L2_HEVC_DECODE_PARAM_FLAG_{}
  */
 struct v4l2_ctrl_hevc_decode_params {
 	__s32	pic_order_cnt_val;
 	__u8	num_active_dpb_entries;
-	struct	v4l2_hevc_dpb_entry dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
 	__u8	num_poc_st_curr_before;
 	__u8	num_poc_st_curr_after;
 	__u8	num_poc_lt_curr;
 	__u8	poc_st_curr_before[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
 	__u8	poc_st_curr_after[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
 	__u8	poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+	struct	v4l2_hevc_dpb_entry dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
 	__u64	flags;
 };
 
-- 
2.32.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH v4 14/15] media: uapi: Change data_bit_offset definition
  2022-02-28 14:08 ` Benjamin Gaignard
@ 2022-02-28 14:08   ` Benjamin Gaignard
  -1 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Benjamin Gaignard

'F.7.3.6.1 General slice segment header syntax' section of HEVC
specification describes that a slice header always end byte aligned,
therefore we only need to provide the data offset in byte.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
 Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst | 4 ++--
 drivers/staging/media/sunxi/cedrus/cedrus_h265.c          | 2 +-
 include/media/hevc-ctrls.h                                | 4 ++--
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
index 1aa2a7399e76..c8602c1e706e 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
@@ -2986,8 +2986,8 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
       - ``bit_size``
       - Size (in bits) of the current slice data.
     * - __u32
-      - ``data_bit_offset``
-      - Offset (in bits) to the video data in the current slice data.
+      - ``data_byte_offset``
+      - Offset (in bytes) to the video data in the current slice data.
     * - __u32
       - ``num_entry_point_offsets``
       - Specifies the number of entry point offset syntax elements in the slice header.
diff --git a/drivers/staging/media/sunxi/cedrus/cedrus_h265.c b/drivers/staging/media/sunxi/cedrus/cedrus_h265.c
index 8ab2d9c6f048..3e43b7cc2f57 100644
--- a/drivers/staging/media/sunxi/cedrus/cedrus_h265.c
+++ b/drivers/staging/media/sunxi/cedrus/cedrus_h265.c
@@ -405,7 +405,7 @@ static void cedrus_h265_setup(struct cedrus_ctx *ctx,
 	/* Initialize bitstream access. */
 	cedrus_write(dev, VE_DEC_H265_TRIGGER, VE_DEC_H265_TRIGGER_INIT_SWDEC);
 
-	cedrus_h265_skip_bits(dev, slice_params->data_bit_offset);
+	cedrus_h265_skip_bits(dev, slice_params->data_byte_offset / 8);
 
 	/* Bitstream parameters. */
 
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
index c50205083573..51bdf38ea0c3 100644
--- a/include/media/hevc-ctrls.h
+++ b/include/media/hevc-ctrls.h
@@ -296,7 +296,7 @@ struct v4l2_hevc_pred_weight_table {
  * V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
  *
  * @bit_size: size (in bits) of the current slice data
- * @data_bit_offset: offset (in bits) to the video data in the current slice data
+ * @data_byte_offset: offset (in bytes) to the video data in the current slice data
  * @num_entry_point_offsets: specifies the number of entry point offset syntax
  *			     elements in the slice header.
  * @nal_unit_type: specifies the coding type of the slice (B, P or I)
@@ -340,7 +340,7 @@ struct v4l2_hevc_pred_weight_table {
  */
 struct v4l2_ctrl_hevc_slice_params {
 	__u32	bit_size;
-	__u32	data_bit_offset;
+	__u32	data_byte_offset;
 	__u32	num_entry_point_offsets;
 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: NAL unit header */
 	__u8	nal_unit_type;
-- 
2.32.0


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

* [PATCH v4 14/15] media: uapi: Change data_bit_offset definition
@ 2022-02-28 14:08   ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Benjamin Gaignard

'F.7.3.6.1 General slice segment header syntax' section of HEVC
specification describes that a slice header always end byte aligned,
therefore we only need to provide the data offset in byte.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
 Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst | 4 ++--
 drivers/staging/media/sunxi/cedrus/cedrus_h265.c          | 2 +-
 include/media/hevc-ctrls.h                                | 4 ++--
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
index 1aa2a7399e76..c8602c1e706e 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
@@ -2986,8 +2986,8 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
       - ``bit_size``
       - Size (in bits) of the current slice data.
     * - __u32
-      - ``data_bit_offset``
-      - Offset (in bits) to the video data in the current slice data.
+      - ``data_byte_offset``
+      - Offset (in bytes) to the video data in the current slice data.
     * - __u32
       - ``num_entry_point_offsets``
       - Specifies the number of entry point offset syntax elements in the slice header.
diff --git a/drivers/staging/media/sunxi/cedrus/cedrus_h265.c b/drivers/staging/media/sunxi/cedrus/cedrus_h265.c
index 8ab2d9c6f048..3e43b7cc2f57 100644
--- a/drivers/staging/media/sunxi/cedrus/cedrus_h265.c
+++ b/drivers/staging/media/sunxi/cedrus/cedrus_h265.c
@@ -405,7 +405,7 @@ static void cedrus_h265_setup(struct cedrus_ctx *ctx,
 	/* Initialize bitstream access. */
 	cedrus_write(dev, VE_DEC_H265_TRIGGER, VE_DEC_H265_TRIGGER_INIT_SWDEC);
 
-	cedrus_h265_skip_bits(dev, slice_params->data_bit_offset);
+	cedrus_h265_skip_bits(dev, slice_params->data_byte_offset / 8);
 
 	/* Bitstream parameters. */
 
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
index c50205083573..51bdf38ea0c3 100644
--- a/include/media/hevc-ctrls.h
+++ b/include/media/hevc-ctrls.h
@@ -296,7 +296,7 @@ struct v4l2_hevc_pred_weight_table {
  * V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
  *
  * @bit_size: size (in bits) of the current slice data
- * @data_bit_offset: offset (in bits) to the video data in the current slice data
+ * @data_byte_offset: offset (in bytes) to the video data in the current slice data
  * @num_entry_point_offsets: specifies the number of entry point offset syntax
  *			     elements in the slice header.
  * @nal_unit_type: specifies the coding type of the slice (B, P or I)
@@ -340,7 +340,7 @@ struct v4l2_hevc_pred_weight_table {
  */
 struct v4l2_ctrl_hevc_slice_params {
 	__u32	bit_size;
-	__u32	data_bit_offset;
+	__u32	data_byte_offset;
 	__u32	num_entry_point_offsets;
 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: NAL unit header */
 	__u8	nal_unit_type;
-- 
2.32.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH v4 15/15] media: uapi: move HEVC stateless controls out of staging
  2022-02-28 14:08 ` Benjamin Gaignard
                   ` (14 preceding siblings ...)
  (?)
@ 2022-02-28 14:08 ` Benjamin Gaignard
  -1 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-02-28 14:08 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc, Benjamin Gaignard

HEVC uAPI is used by 2 mainline drivers (Hantro, Cedrus)
and at least 2 out-of-tree drivers (rkvdec, RPi).
The uAPI has reviewed so it is time to make it 'public' by
un-staging it.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
 .../media/v4l/ext-ctrls-codec-stateless.rst   | 833 +++++++++++++++++
 .../media/v4l/ext-ctrls-codec.rst             | 839 ------------------
 .../media/v4l/pixfmt-compressed.rst           |   2 +-
 .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
 include/media/hevc-ctrls.h                    | 451 ----------
 include/media/v4l2-ctrls.h                    |   6 -
 include/uapi/linux/v4l2-controls.h            | 434 +++++++++
 include/uapi/linux/videodev2.h                |   5 +
 8 files changed, 1293 insertions(+), 1297 deletions(-)
 delete mode 100644 include/media/hevc-ctrls.h

diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst
index cc080c4257d0..90984a33aa26 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst
@@ -2031,3 +2031,836 @@ This structure contains all loop filter related parameters. See sections
       - 0x2
       - When set, the bitstream contains additional syntax elements that
         specify which mode and reference frame deltas are to be updated.
+
+.. _v4l2-codec-stateless-hevc:
+
+``V4L2_CID_STATELESS_HEVC_SPS (struct)``
+    Specifies the Sequence Parameter Set fields (as extracted from the
+    bitstream) for the associated HEVC slice data.
+    These bitstream parameters are defined according to :ref:`hevc`.
+    They are described in section 7.4.3.2 "Sequence parameter set RBSP
+    semantics" of the specification.
+
+.. c:type:: v4l2_ctrl_hevc_sps
+
+.. raw:: latex
+
+    \small
+
+.. tabularcolumns:: |p{1.2cm}|p{9.2cm}|p{6.9cm}|
+
+.. cssclass:: longtable
+
+.. flat-table:: struct v4l2_ctrl_hevc_sps
+    :header-rows:  0
+    :stub-columns: 0
+    :widths:       1 1 2
+
+    * - __u8
+      - ``video_parameter_set_id``
+      - Specifies the value of the vps_video_parameter_set_id of the active VPS
+        as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
+        of H.265 specifications.
+    * - __u8
+      - ``seq_parameter_set_id``
+      - Provides an identifier for the SPS for reference by other syntax elements
+        as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
+        of H.265 specifications.
+    * - __u16
+      - ``pic_width_in_luma_samples``
+      - Specifies the width of each decoded picture in units of luma samples.
+    * - __u16
+      - ``pic_height_in_luma_samples``
+      - Specifies the height of each decoded picture in units of luma samples.
+    * - __u8
+      - ``bit_depth_luma_minus8``
+      - Specifies the bit depth of the samples of the luma array.
+    * - __u8
+      - ``bit_depth_chroma_minus8``
+      - Specifies the bit depth of the samples of the chroma arrays.
+    * - __u8
+      - ``log2_max_pic_order_cnt_lsb_minus4``
+      - Specifies the value of the variable MaxPicOrderCntLsb.
+    * - __u8
+      - ``sps_max_dec_pic_buffering_minus1``
+      - Plus 1 specifies the maximum required size of the decoded picture buffer for
+        the CVS
+    * - __u8
+      - ``sps_max_num_reorder_pics``
+      - Indicates the maximum allowed number of pictures.
+    * - __u8
+      - ``sps_max_latency_increase_plus1``
+      - Not equal to 0 is used to compute the value of SpsMaxLatencyPictures[i].
+    * - __u8
+      - ``log2_min_luma_coding_block_size_minus3``
+      - Plus 3 specifies the minimum luma coding block size.
+    * - __u8
+      - ``log2_diff_max_min_luma_coding_block_size``
+      - Specifies the difference between the maximum and minimum luma coding block size.
+    * - __u8
+      - ``log2_min_luma_transform_block_size_minus2``
+      - Plus 2 specifies the minimum luma transform block size.
+    * - __u8
+      - ``log2_diff_max_min_luma_transform_block_size``
+      - Specifies the difference between the maximum and minimum luma transform block size.
+    * - __u8
+      - ``max_transform_hierarchy_depth_inter``
+      - Specifies the maximum hierarchy depth for transform units of coding units coded
+        in inter prediction mode.
+    * - __u8
+      - ``max_transform_hierarchy_depth_intra``
+      - Specifies the maximum hierarchy depth for transform units of coding units coded in
+        intra prediction mode.
+    * - __u8
+      - ``pcm_sample_bit_depth_luma_minus1``
+      - Specifies the number of bits used to represent each of PCM sample values of the
+        luma component.
+    * - __u8
+      - ``pcm_sample_bit_depth_chroma_minus1``
+      - Specifies the number of bits used to represent each of PCM sample values of
+        the chroma components.
+    * - __u8
+      - ``log2_min_pcm_luma_coding_block_size_minus3``
+      - Plus 3 specifies the minimum size of coding blocks.
+    * - __u8
+      - ``log2_diff_max_min_pcm_luma_coding_block_size``
+      - Specifies the difference between the maximum and minimum size of coding blocks.
+    * - __u8
+      - ``num_short_term_ref_pic_sets``
+      - Specifies the number of st_ref_pic_set() syntax structures included in the SPS.
+    * - __u8
+      - ``num_long_term_ref_pics_sps``
+      - Specifies the number of candidate long-term reference pictures that are
+        specified in the SPS.
+    * - __u8
+      - ``chroma_format_idc``
+      - Specifies the chroma sampling.
+    * - __u8
+      - ``sps_max_sub_layers_minus1``
+      - plus 1 specifies the maximum number of temporal sub-layers.
+    * - __u64
+      - ``flags``
+      - See :ref:`Sequence Parameter Set Flags <hevc_sps_flags>`
+
+.. raw:: latex
+
+    \normalsize
+
+.. _hevc_sps_flags:
+
+``Sequence Parameter Set Flags``
+
+.. raw:: latex
+
+    \small
+
+.. cssclass:: longtable
+
+.. flat-table::
+    :header-rows:  0
+    :stub-columns: 0
+    :widths:       1 1 2
+
+    * - ``V4L2_HEVC_SPS_FLAG_SEPARATE_COLOUR_PLANE``
+      - 0x00000001
+      -
+    * - ``V4L2_HEVC_SPS_FLAG_SCALING_LIST_ENABLED``
+      - 0x00000002
+      -
+    * - ``V4L2_HEVC_SPS_FLAG_AMP_ENABLED``
+      - 0x00000004
+      -
+    * - ``V4L2_HEVC_SPS_FLAG_SAMPLE_ADAPTIVE_OFFSET``
+      - 0x00000008
+      -
+    * - ``V4L2_HEVC_SPS_FLAG_PCM_ENABLED``
+      - 0x00000010
+      -
+    * - ``V4L2_HEVC_SPS_FLAG_PCM_LOOP_FILTER_DISABLED``
+      - 0x00000020
+      -
+    * - ``V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT``
+      - 0x00000040
+      -
+    * - ``V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED``
+      - 0x00000080
+      -
+    * - ``V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED``
+      - 0x00000100
+      -
+
+.. raw:: latex
+
+    \normalsize
+
+``V4L2_CID_STATELESS_HEVC_PPS (struct)``
+    Specifies the Picture Parameter Set fields (as extracted from the
+    bitstream) for the associated HEVC slice data.
+    These bitstream parameters are defined according to :ref:`hevc`.
+    They are described in section 7.4.3.3 "Picture parameter set RBSP
+    semantics" of the specification.
+
+.. c:type:: v4l2_ctrl_hevc_pps
+
+.. tabularcolumns:: |p{1.2cm}|p{8.6cm}|p{7.5cm}|
+
+.. cssclass:: longtable
+
+.. flat-table:: struct v4l2_ctrl_hevc_pps
+    :header-rows:  0
+    :stub-columns: 0
+    :widths:       1 1 2
+
+    * - __u8
+      - ``pic_parameter_set_id``
+      - Identifies the PPS for reference by other syntax elements.
+    * - __u8
+      - ``num_extra_slice_header_bits``
+      - Specifies the number of extra slice header bits that are present
+        in the slice header RBSP for coded pictures referring to the PPS.
+    * - __u8
+      - ``num_ref_idx_l0_default_active_minus1``
+      - Specifies the inferred value of num_ref_idx_l0_active_minus1
+    * - __u8
+      - ``num_ref_idx_l1_default_active_minus1``
+      - Specifies the inferred value of num_ref_idx_l1_active_minus1
+    * - __s8
+      - ``init_qp_minus26``
+      - Plus 26 specifies the initial value of SliceQp Y for each slice
+        referring to the PPS.
+    * - __u8
+      - ``diff_cu_qp_delta_depth``
+      - Specifies the difference between the luma coding tree block size
+        and the minimum luma coding block size of coding units that
+        convey cu_qp_delta_abs and cu_qp_delta_sign_flag.
+    * - __s8
+      - ``pps_cb_qp_offset``
+      - Specify the offsets to the luma quantization parameter Cb.
+    * - __s8
+      - ``pps_cr_qp_offset``
+      - Specify the offsets to the luma quantization parameter Cr.
+    * - __u8
+      - ``num_tile_columns_minus1``
+      - Plus 1 specifies the number of tile columns partitioning the picture.
+    * - __u8
+      - ``num_tile_rows_minus1``
+      - Plus 1 specifies the number of tile rows partitioning the picture.
+    * - __u8
+      - ``column_width_minus1[20]``
+      - Plus 1 specifies the width of the i-th tile column in units of
+        coding tree blocks.
+    * - __u8
+      - ``row_height_minus1[22]``
+      - Plus 1 specifies the height of the i-th tile row in units of coding
+        tree blocks.
+    * - __s8
+      - ``pps_beta_offset_div2``
+      - Specify the default deblocking parameter offsets for beta divided by 2.
+    * - __s8
+      - ``pps_tc_offset_div2``
+      - Specify the default deblocking parameter offsets for tC divided by 2.
+    * - __u8
+      - ``log2_parallel_merge_level_minus2``
+      - Plus 2 specifies the value of the variable Log2ParMrgLevel.
+    * - __u8
+      - ``padding[4]``
+      - Applications and drivers must set this to zero.
+    * - __u64
+      - ``flags``
+      - See :ref:`Picture Parameter Set Flags <hevc_pps_flags>`
+
+.. _hevc_pps_flags:
+
+``Picture Parameter Set Flags``
+
+.. raw:: latex
+
+    \small
+
+.. flat-table::
+    :header-rows:  0
+    :stub-columns: 0
+    :widths:       1 1 2
+
+    * - ``V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT_ENABLED``
+      - 0x00000001
+      -
+    * - ``V4L2_HEVC_PPS_FLAG_OUTPUT_FLAG_PRESENT``
+      - 0x00000002
+      -
+    * - ``V4L2_HEVC_PPS_FLAG_SIGN_DATA_HIDING_ENABLED``
+      - 0x00000004
+      -
+    * - ``V4L2_HEVC_PPS_FLAG_CABAC_INIT_PRESENT``
+      - 0x00000008
+      -
+    * - ``V4L2_HEVC_PPS_FLAG_CONSTRAINED_INTRA_PRED``
+      - 0x00000010
+      -
+    * - ``V4L2_HEVC_PPS_FLAG_TRANSFORM_SKIP_ENABLED``
+      - 0x00000020
+      -
+    * - ``V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED``
+      - 0x00000040
+      -
+    * - ``V4L2_HEVC_PPS_FLAG_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT``
+      - 0x00000080
+      -
+    * - ``V4L2_HEVC_PPS_FLAG_WEIGHTED_PRED``
+      - 0x00000100
+      -
+    * - ``V4L2_HEVC_PPS_FLAG_WEIGHTED_BIPRED``
+      - 0x00000200
+      -
+    * - ``V4L2_HEVC_PPS_FLAG_TRANSQUANT_BYPASS_ENABLED``
+      - 0x00000400
+      -
+    * - ``V4L2_HEVC_PPS_FLAG_TILES_ENABLED``
+      - 0x00000800
+      -
+    * - ``V4L2_HEVC_PPS_FLAG_ENTROPY_CODING_SYNC_ENABLED``
+      - 0x00001000
+      -
+    * - ``V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED``
+      - 0x00002000
+      -
+    * - ``V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED``
+      - 0x00004000
+      -
+    * - ``V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_OVERRIDE_ENABLED``
+      - 0x00008000
+      -
+    * - ``V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER``
+      - 0x00010000
+      -
+    * - ``V4L2_HEVC_PPS_FLAG_LISTS_MODIFICATION_PRESENT``
+      - 0x00020000
+      -
+    * - ``V4L2_HEVC_PPS_FLAG_SLICE_SEGMENT_HEADER_EXTENSION_PRESENT``
+      - 0x00040000
+      -
+    * - ``V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT``
+      - 0x00080000
+      - Specifies the presence of deblocking filter control syntax elements in
+        the PPS
+    * - ``V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING``
+      - 0x00100000
+      - Specifies that tile column boundaries and likewise tile row boundaries
+        are distributed uniformly across the picture
+
+.. raw:: latex
+
+    \normalsize
+
+``V4L2_CID_STATELESS_HEVC_SLICE_PARAMS (struct)``
+    Specifies various slice-specific parameters, especially from the NAL unit
+    header, general slice segment header and weighted prediction parameter
+    parts of the bitstream.
+    These bitstream parameters are defined according to :ref:`hevc`.
+    They are described in section 7.4.7 "General slice segment header
+    semantics" of the specification.
+    This control is a dynamically sized 1-dimensional array,
+    V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
+
+.. c:type:: v4l2_ctrl_hevc_slice_params
+
+.. raw:: latex
+
+    \scriptsize
+
+.. tabularcolumns:: |p{5.4cm}|p{6.8cm}|p{5.1cm}|
+
+.. cssclass:: longtable
+
+.. flat-table:: struct v4l2_ctrl_hevc_slice_params
+    :header-rows:  0
+    :stub-columns: 0
+    :widths:       1 1 2
+
+    * - __u32
+      - ``bit_size``
+      - Size (in bits) of the current slice data.
+    * - __u32
+      - ``data_byte_offset``
+      - Offset (in byte) to the video data in the current slice data.
+    * - __u32
+      - ``num_entry_point_offsets``
+      - Specifies the number of entry point offset syntax elements in the slice header.
+    * - __u8
+      - ``nal_unit_type``
+      - Specifies the coding type of the slice (B, P or I).
+    * - __u8
+      - ``nuh_temporal_id_plus1``
+      - Minus 1 specifies a temporal identifier for the NAL unit.
+    * - __u8
+      - ``slice_type``
+      -
+	(V4L2_HEVC_SLICE_TYPE_I, V4L2_HEVC_SLICE_TYPE_P or
+	V4L2_HEVC_SLICE_TYPE_B).
+    * - __u8
+      - ``colour_plane_id``
+      - Specifies the colour plane associated with the current slice.
+    * - __u16
+      - ``slice_pic_order_cnt``
+      - Specifies the picture order count.
+    * - __u8
+      - ``num_ref_idx_l0_active_minus1``
+      - Specifies the maximum reference index for reference picture list 0
+        that may be used to decode the slice.
+    * - __u8
+      - ``num_ref_idx_l1_active_minus1``
+      - Specifies the maximum reference index for reference picture list 1
+        that may be used to decode the slice.
+    * - __u8
+      - ``collocated_ref_idx``
+      - Specifies the reference index of the collocated picture used for
+        temporal motion vector prediction.
+    * - __u8
+      - ``five_minus_max_num_merge_cand``
+      - Specifies the maximum number of merging motion vector prediction
+        candidates supported in the slice subtracted from 5.
+    * - __s8
+      - ``slice_qp_delta``
+      - Specifies the initial value of QpY to be used for the coding blocks in the slice.
+    * - __s8
+      - ``slice_cb_qp_offset``
+      - Specifies a difference to be added to the value of pps_cb_qp_offset.
+    * - __s8
+      - ``slice_cr_qp_offset``
+      - Specifies a difference to be added to the value of pps_cr_qp_offset.
+    * - __s8
+      - ``slice_act_y_qp_offset``
+      - screen content extension parameters
+    * - __s8
+      - ``slice_act_cb_qp_offset``
+      - screen content extension parameters
+    * - __s8
+      - ``slice_act_cr_qp_offset``
+      - screen content extension parameters
+    * - __s8
+      - ``slice_beta_offset_div2``
+      - Specify the deblocking parameter offsets for beta divided by 2.
+    * - __s8
+      - ``slice_tc_offset_div2``
+      - Specify the deblocking parameter offsets for tC divided by 2.
+    * - __u8
+      - ``pic_struct``
+      - Indicates whether a picture should be displayed as a frame or as one or more fields.
+    * - __u32
+      - ``slice_segment_addr``
+      - Specifies the address of the first coding tree block in the slice segment.
+    * - __u8
+      - ``ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+      - The list of L0 reference elements as indices in the DPB.
+    * - __u8
+      - ``ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+      - The list of L1 reference elements as indices in the DPB.
+    * - __u16
+      - ``short_term_ref_pic_set_size``
+      - Specifies the number of st_ref_pic_set( ) syntax structures included in the SPS.
+        The value of num_short_term_ref_pic_sets shall be in the range of 0 to 64, inclusive.
+    * - __u16
+      - ``long_term_ref_pic_set_size``
+      - Specifies the number of candidate long-term reference pictures that are specified
+        in the SPS. The value of num_long_term_ref_pics_sps shall be in the range
+        of 0 to 32, inclusive.
+    * - __u8
+      - ``padding``
+      - Applications and drivers must set this to zero.
+    * - struct :c:type:`v4l2_hevc_pred_weight_table`
+      - ``pred_weight_table``
+      - The prediction weight coefficients for inter-picture prediction.
+    * - __u64
+      - ``flags``
+      - See :ref:`Slice Parameters Flags <hevc_slice_params_flags>`
+
+.. raw:: latex
+
+    \normalsize
+
+.. _hevc_slice_params_flags:
+
+``Slice Parameters Flags``
+
+.. raw:: latex
+
+    \scriptsize
+
+.. flat-table::
+    :header-rows:  0
+    :stub-columns: 0
+    :widths:       1 1 2
+
+    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_LUMA``
+      - 0x00000001
+      -
+    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_CHROMA``
+      - 0x00000002
+      -
+    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_TEMPORAL_MVP_ENABLED``
+      - 0x00000004
+      -
+    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_MVD_L1_ZERO``
+      - 0x00000008
+      -
+    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_CABAC_INIT``
+      - 0x00000010
+      -
+    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_COLLOCATED_FROM_L0``
+      - 0x00000020
+      -
+    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_USE_INTEGER_MV``
+      - 0x00000040
+      -
+    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED``
+      - 0x00000080
+      -
+    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED``
+      - 0x00000100
+      -
+    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT``
+      - 0x00000200
+      -
+
+.. raw:: latex
+
+    \normalsize
+
+``V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (integer)``
+    Specifies entry point offsets in bytes.
+    This control is a dynamically sized array. The number of entry point
+    offsets is reported by the ``elems`` field.
+    This bitstream parameter is defined according to :ref:`hevc`.
+    They are described in section 7.4.7.1 "General slice segment header
+    semantics" of the specification.
+
+``V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (struct)``
+    Specifies the HEVC scaling matrix parameters used for the scaling process
+    for transform coefficients.
+    These matrix and parameters are defined according to :ref:`hevc`.
+    They are described in section 7.4.5 "Scaling list data semantics" of
+    the specification.
+
+.. c:type:: v4l2_ctrl_hevc_scaling_matrix
+
+.. raw:: latex
+
+    \scriptsize
+
+.. tabularcolumns:: |p{5.4cm}|p{6.8cm}|p{5.1cm}|
+
+.. cssclass:: longtable
+
+.. flat-table:: struct v4l2_ctrl_hevc_scaling_matrix
+    :header-rows:  0
+    :stub-columns: 0
+    :widths:       1 1 2
+
+    * - __u8
+      - ``scaling_list_4x4[6][16]``
+      - Scaling list is used for the scaling process for transform
+        coefficients. The values on each scaling list are expected
+        in raster scan order.
+    * - __u8
+      - ``scaling_list_8x8[6][64]``
+      - Scaling list is used for the scaling process for transform
+        coefficients. The values on each scaling list are expected
+        in raster scan order.
+    * - __u8
+      - ``scaling_list_16x16[6][64]``
+      - Scaling list is used for the scaling process for transform
+        coefficients. The values on each scaling list are expected
+        in raster scan order.
+    * - __u8
+      - ``scaling_list_32x32[2][64]``
+      - Scaling list is used for the scaling process for transform
+        coefficients. The values on each scaling list are expected
+        in raster scan order.
+    * - __u8
+      - ``scaling_list_dc_coef_16x16[6]``
+      - Scaling list is used for the scaling process for transform
+        coefficients. The values on each scaling list are expected
+        in raster scan order.
+    * - __u8
+      - ``scaling_list_dc_coef_32x32[2]``
+      - Scaling list is used for the scaling process for transform
+        coefficients. The values on each scaling list are expected
+        in raster scan order.
+
+.. raw:: latex
+
+    \normalsize
+
+.. c:type:: v4l2_hevc_dpb_entry
+
+.. raw:: latex
+
+    \small
+
+.. tabularcolumns:: |p{1.0cm}|p{4.2cm}|p{12.1cm}|
+
+.. flat-table:: struct v4l2_hevc_dpb_entry
+    :header-rows:  0
+    :stub-columns: 0
+    :widths:       1 1 2
+
+    * - __u64
+      - ``timestamp``
+      - Timestamp of the V4L2 capture buffer to use as reference, used
+        with B-coded and P-coded frames. The timestamp refers to the
+	``timestamp`` field in struct :c:type:`v4l2_buffer`. Use the
+	:c:func:`v4l2_timeval_to_ns()` function to convert the struct
+	:c:type:`timeval` in struct :c:type:`v4l2_buffer` to a __u64.
+    * - __u8
+      - ``flags``
+      - Long term flag for the reference frame
+        (V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE). The flag is set as
+        described in the ITU HEVC specification chapter "8.3.2 Decoding
+        process for reference picture set".
+    * - __u8
+      - ``field_pic``
+      - Whether the reference is a field picture or a frame.
+    * - __u16
+      - ``pic_order_cnt[2]``
+      - The picture order count of the reference. Only the first element of the
+        array is used for frame pictures, while the first element identifies the
+        top field and the second the bottom field in field-coded pictures.
+    * - __u8
+      - ``padding[2]``
+      - Applications and drivers must set this to zero.
+
+.. raw:: latex
+
+    \normalsize
+
+.. c:type:: v4l2_hevc_pred_weight_table
+
+.. raw:: latex
+
+    \footnotesize
+
+.. tabularcolumns:: |p{0.8cm}|p{10.6cm}|p{5.9cm}|
+
+.. flat-table:: struct v4l2_hevc_pred_weight_table
+    :header-rows:  0
+    :stub-columns: 0
+    :widths:       1 1 2
+
+    * - __s8
+      - ``delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+      - The difference of the weighting factor applied to the luma
+        prediction value for list 0.
+    * - __s8
+      - ``luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+      - The additive offset applied to the luma prediction value for list 0.
+    * - __s8
+      - ``delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
+      - The difference of the weighting factor applied to the chroma
+        prediction value for list 0.
+    * - __s8
+      - ``chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
+      - The difference of the additive offset applied to the chroma
+        prediction values for list 0.
+    * - __s8
+      - ``delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+      - The difference of the weighting factor applied to the luma
+        prediction value for list 1.
+    * - __s8
+      - ``luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+      - The additive offset applied to the luma prediction value for list 1.
+    * - __s8
+      - ``delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
+      - The difference of the weighting factor applied to the chroma
+        prediction value for list 1.
+    * - __s8
+      - ``chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
+      - The difference of the additive offset applied to the chroma
+        prediction values for list 1.
+    * - __u8
+      - ``luma_log2_weight_denom``
+      - The base 2 logarithm of the denominator for all luma weighting
+        factors.
+    * - __s8
+      - ``delta_chroma_log2_weight_denom``
+      - The difference of the base 2 logarithm of the denominator for
+        all chroma weighting factors.
+    * - __u8
+      - ``padding[6]``
+      - Applications and drivers must set this to zero.
+
+.. raw:: latex
+
+    \normalsize
+
+``V4L2_CID_STATELESS_HEVC_DECODE_MODE (enum)``
+    Specifies the decoding mode to use. Currently exposes slice-based and
+    frame-based decoding but new modes might be added later on.
+    This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
+    pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE
+    are required to set this control in order to specify the decoding mode
+    that is expected for the buffer.
+    Drivers may expose a single or multiple decoding modes, depending
+    on what they can support.
+
+.. c:type:: v4l2_stateless_hevc_decode_mode
+
+.. raw:: latex
+
+    \small
+
+.. tabularcolumns:: |p{9.4cm}|p{0.6cm}|p{7.3cm}|
+
+.. flat-table::
+    :header-rows:  0
+    :stub-columns: 0
+    :widths:       1 1 2
+
+    * - ``V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED``
+      - 0
+      - Decoding is done at the slice granularity.
+        The OUTPUT buffer must contain a single slice.
+    * - ``V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED``
+      - 1
+      - Decoding is done at the frame granularity.
+        The OUTPUT buffer must contain all slices needed to decode the
+        frame. The OUTPUT buffer must also contain both fields.
+
+.. raw:: latex
+
+    \normalsize
+
+``V4L2_CID_STATELESS_HEVC_START_CODE (enum)``
+    Specifies the HEVC slice start code expected for each slice.
+    This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
+    pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE
+    are required to set this control in order to specify the start code
+    that is expected for the buffer.
+    Drivers may expose a single or multiple start codes, depending
+    on what they can support.
+
+.. c:type:: v4l2_stateless_hevc_start_code
+
+.. tabularcolumns:: |p{9.2cm}|p{0.6cm}|p{7.5cm}|
+
+.. flat-table::
+    :header-rows:  0
+    :stub-columns: 0
+    :widths:       1 1 2
+
+    * - ``V4L2_STATELESS_HEVC_START_CODE_NONE``
+      - 0
+      - Selecting this value specifies that HEVC slices are passed
+        to the driver without any start code. The bitstream data should be
+        according to :ref:`hevc` 7.3.1.1 General NAL unit syntax, hence
+        contains emulation prevention bytes when required.
+    * - ``V4L2_STATELESS_HEVC_START_CODE_ANNEX_B``
+      - 1
+      - Selecting this value specifies that HEVC slices are expected
+        to be prefixed by Annex B start codes. According to :ref:`hevc`
+        valid start codes can be 3-bytes 0x000001 or 4-bytes 0x00000001.
+
+.. raw:: latex
+
+    \normalsize
+
+``V4L2_CID_MPEG_VIDEO_BASELAYER_PRIORITY_ID (integer)``
+    Specifies a priority identifier for the NAL unit, which will be applied to
+    the base layer. By default this value is set to 0 for the base layer,
+    and the next layer will have the priority ID assigned as 1, 2, 3 and so on.
+    The video encoder can't decide the priority id to be applied to a layer,
+    so this has to come from client.
+    This is applicable to H264 and valid Range is from 0 to 63.
+    Source Rec. ITU-T H.264 (06/2019); G.7.4.1.1, G.8.8.1.
+
+``V4L2_CID_MPEG_VIDEO_LTR_COUNT (integer)``
+    Specifies the maximum number of Long Term Reference (LTR) frames at any
+    given time that the encoder can keep.
+    This is applicable to the H264 and HEVC encoders.
+
+``V4L2_CID_MPEG_VIDEO_FRAME_LTR_INDEX (integer)``
+    After setting this control the frame that will be queued next
+    will be marked as a Long Term Reference (LTR) frame
+    and given this LTR index which ranges from 0 to LTR_COUNT-1.
+    This is applicable to the H264 and HEVC encoders.
+    Source Rec. ITU-T H.264 (06/2019); Table 7.9
+
+``V4L2_CID_MPEG_VIDEO_USE_LTR_FRAMES (bitmask)``
+    Specifies the Long Term Reference (LTR) frame(s) to be used for
+    encoding the next frame queued after setting this control.
+    This provides a bitmask which consists of bits [0, LTR_COUNT-1].
+    This is applicable to the H264 and HEVC encoders.
+
+``V4L2_CID_STATELESS_HEVC_DECODE_PARAMS (struct)``
+    Specifies various decode parameters, especially the references picture order
+    count (POC) for all the lists (short, long, before, current, after) and the
+    number of entries for each of them.
+    These parameters are defined according to :ref:`hevc`.
+    They are described in section 8.3 "Slice decoding process" of the
+    specification.
+
+.. c:type:: v4l2_ctrl_hevc_decode_params
+
+.. cssclass:: longtable
+
+.. flat-table:: struct v4l2_ctrl_hevc_decode_params
+    :header-rows:  0
+    :stub-columns: 0
+    :widths:       1 1 2
+
+    * - __s32
+      - ``pic_order_cnt_val``
+      - PicOrderCntVal as described in section 8.3.1 "Decoding process
+        for picture order count" of the specification.
+    * - __u8
+      - ``num_active_dpb_entries``
+      - The number of entries in ``dpb``.
+    * - __u8
+      - ``num_poc_st_curr_before``
+      - The number of reference pictures in the short-term set that come before
+        the current frame.
+    * - __u8
+      - ``num_poc_st_curr_after``
+      - The number of reference pictures in the short-term set that come after
+        the current frame.
+    * - __u8
+      - ``num_poc_lt_curr``
+      - The number of reference pictures in the long-term set.
+    * - __u8
+      - ``poc_st_curr_before[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+      - PocStCurrBefore as described in section 8.3.2 "Decoding process for reference
+        picture set": provides the index of the short term before references in DPB array.
+    * - __u8
+      - ``poc_st_curr_after[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+      - PocStCurrAfter as described in section 8.3.2 "Decoding process for reference
+        picture set": provides the index of the short term after references in DPB array.
+    * - __u8
+      - ``poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+      - PocLtCurr as described in section 8.3.2 "Decoding process for reference
+        picture set": provides the index of the long term references in DPB array.
+    * - struct :c:type:`v4l2_hevc_dpb_entry`
+      - ``dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
+      - The decoded picture buffer, for meta-data about reference frames.
+    * - __u64
+      - ``flags``
+      - See :ref:`Decode Parameters Flags <hevc_decode_params_flags>`
+
+.. _hevc_decode_params_flags:
+
+``Decode Parameters Flags``
+
+.. cssclass:: longtable
+
+.. flat-table::
+    :header-rows:  0
+    :stub-columns: 0
+    :widths:       1 1 2
+
+    * - ``V4L2_HEVC_DECODE_PARAM_FLAG_IRAP_PIC``
+      - 0x00000001
+      -
+    * - ``V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC``
+      - 0x00000002
+      -
+    * - ``V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR``
+      - 0x00000004
+      -
diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
index c8602c1e706e..25d6a79dd04b 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
@@ -2636,842 +2636,3 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
     Indicates whether to generate SPS and PPS at every IDR. Setting it to 0
     disables generating SPS and PPS at every IDR. Setting it to one enables
     generating SPS and PPS at every IDR.
-
-.. _v4l2-mpeg-hevc:
-
-``V4L2_CID_STATELESS_HEVC_SPS (struct)``
-    Specifies the Sequence Parameter Set fields (as extracted from the
-    bitstream) for the associated HEVC slice data.
-    These bitstream parameters are defined according to :ref:`hevc`.
-    They are described in section 7.4.3.2 "Sequence parameter set RBSP
-    semantics" of the specification.
-
-.. c:type:: v4l2_ctrl_hevc_sps
-
-.. raw:: latex
-
-    \small
-
-.. tabularcolumns:: |p{1.2cm}|p{9.2cm}|p{6.9cm}|
-
-.. cssclass:: longtable
-
-.. flat-table:: struct v4l2_ctrl_hevc_sps
-    :header-rows:  0
-    :stub-columns: 0
-    :widths:       1 1 2
-
-    * - __u8
-      - ``video_parameter_set_id``
-      - Specifies the value of the vps_video_parameter_set_id of the active VPS
-        as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
-        of H.265 specifications.
-    * - __u8
-      - ``seq_parameter_set_id``
-      - Provides an identifier for the SPS for reference by other syntax elements
-        as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
-        of H.265 specifications.
-    * - __u16
-      - ``pic_width_in_luma_samples``
-      - Specifies the width of each decoded picture in units of luma samples.
-    * - __u16
-      - ``pic_height_in_luma_samples``
-      - Specifies the height of each decoded picture in units of luma samples.
-    * - __u8
-      - ``bit_depth_luma_minus8``
-      - Specifies the bit depth of the samples of the luma array.
-    * - __u8
-      - ``bit_depth_chroma_minus8``
-      - Specifies the bit depth of the samples of the chroma arrays.
-    * - __u8
-      - ``log2_max_pic_order_cnt_lsb_minus4``
-      - Specifies the value of the variable MaxPicOrderCntLsb.
-    * - __u8
-      - ``sps_max_dec_pic_buffering_minus1``
-      - Plus 1 specifies the maximum required size of the decoded picture buffer for
-        the CVS
-    * - __u8
-      - ``sps_max_num_reorder_pics``
-      - Indicates the maximum allowed number of pictures.
-    * - __u8
-      - ``sps_max_latency_increase_plus1``
-      - Not equal to 0 is used to compute the value of SpsMaxLatencyPictures[i].
-    * - __u8
-      - ``log2_min_luma_coding_block_size_minus3``
-      - Plus 3 specifies the minimum luma coding block size.
-    * - __u8
-      - ``log2_diff_max_min_luma_coding_block_size``
-      - Specifies the difference between the maximum and minimum luma coding block size.
-    * - __u8
-      - ``log2_min_luma_transform_block_size_minus2``
-      - Plus 2 specifies the minimum luma transform block size.
-    * - __u8
-      - ``log2_diff_max_min_luma_transform_block_size``
-      - Specifies the difference between the maximum and minimum luma transform block size.
-    * - __u8
-      - ``max_transform_hierarchy_depth_inter``
-      - Specifies the maximum hierarchy depth for transform units of coding units coded
-        in inter prediction mode.
-    * - __u8
-      - ``max_transform_hierarchy_depth_intra``
-      - Specifies the maximum hierarchy depth for transform units of coding units coded in
-        intra prediction mode.
-    * - __u8
-      - ``pcm_sample_bit_depth_luma_minus1``
-      - Specifies the number of bits used to represent each of PCM sample values of the
-        luma component.
-    * - __u8
-      - ``pcm_sample_bit_depth_chroma_minus1``
-      - Specifies the number of bits used to represent each of PCM sample values of
-        the chroma components.
-    * - __u8
-      - ``log2_min_pcm_luma_coding_block_size_minus3``
-      - Plus 3 specifies the minimum size of coding blocks.
-    * - __u8
-      - ``log2_diff_max_min_pcm_luma_coding_block_size``
-      - Specifies the difference between the maximum and minimum size of coding blocks.
-    * - __u8
-      - ``num_short_term_ref_pic_sets``
-      - Specifies the number of st_ref_pic_set() syntax structures included in the SPS.
-    * - __u8
-      - ``num_long_term_ref_pics_sps``
-      - Specifies the number of candidate long-term reference pictures that are
-        specified in the SPS.
-    * - __u8
-      - ``chroma_format_idc``
-      - Specifies the chroma sampling.
-    * - __u8
-      - ``sps_max_sub_layers_minus1``
-      - plus 1 specifies the maximum number of temporal sub-layers.
-    * - __u64
-      - ``flags``
-      - See :ref:`Sequence Parameter Set Flags <hevc_sps_flags>`
-
-.. raw:: latex
-
-    \normalsize
-
-.. _hevc_sps_flags:
-
-``Sequence Parameter Set Flags``
-
-.. raw:: latex
-
-    \small
-
-.. cssclass:: longtable
-
-.. flat-table::
-    :header-rows:  0
-    :stub-columns: 0
-    :widths:       1 1 2
-
-    * - ``V4L2_HEVC_SPS_FLAG_SEPARATE_COLOUR_PLANE``
-      - 0x00000001
-      -
-    * - ``V4L2_HEVC_SPS_FLAG_SCALING_LIST_ENABLED``
-      - 0x00000002
-      -
-    * - ``V4L2_HEVC_SPS_FLAG_AMP_ENABLED``
-      - 0x00000004
-      -
-    * - ``V4L2_HEVC_SPS_FLAG_SAMPLE_ADAPTIVE_OFFSET``
-      - 0x00000008
-      -
-    * - ``V4L2_HEVC_SPS_FLAG_PCM_ENABLED``
-      - 0x00000010
-      -
-    * - ``V4L2_HEVC_SPS_FLAG_PCM_LOOP_FILTER_DISABLED``
-      - 0x00000020
-      -
-    * - ``V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT``
-      - 0x00000040
-      -
-    * - ``V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED``
-      - 0x00000080
-      -
-    * - ``V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED``
-      - 0x00000100
-      -
-
-.. raw:: latex
-
-    \normalsize
-
-``V4L2_CID_STATELESS_HEVC_PPS (struct)``
-    Specifies the Picture Parameter Set fields (as extracted from the
-    bitstream) for the associated HEVC slice data.
-    These bitstream parameters are defined according to :ref:`hevc`.
-    They are described in section 7.4.3.3 "Picture parameter set RBSP
-    semantics" of the specification.
-
-.. c:type:: v4l2_ctrl_hevc_pps
-
-.. tabularcolumns:: |p{1.2cm}|p{8.6cm}|p{7.5cm}|
-
-.. cssclass:: longtable
-
-.. flat-table:: struct v4l2_ctrl_hevc_pps
-    :header-rows:  0
-    :stub-columns: 0
-    :widths:       1 1 2
-
-    * - __u8
-      - ``pic_parameter_set_id``
-      - Identifies the PPS for reference by other syntax elements.
-    * - __u8
-      - ``num_extra_slice_header_bits``
-      - Specifies the number of extra slice header bits that are present
-        in the slice header RBSP for coded pictures referring to the PPS.
-    * - __u8
-      - ``num_ref_idx_l0_default_active_minus1``
-      - Specifies the inferred value of num_ref_idx_l0_active_minus1
-    * - __u8
-      - ``num_ref_idx_l1_default_active_minus1``
-      - Specifies the inferred value of num_ref_idx_l1_active_minus1
-    * - __s8
-      - ``init_qp_minus26``
-      - Plus 26 specifies the initial value of SliceQp Y for each slice
-        referring to the PPS.
-    * - __u8
-      - ``diff_cu_qp_delta_depth``
-      - Specifies the difference between the luma coding tree block size
-        and the minimum luma coding block size of coding units that
-        convey cu_qp_delta_abs and cu_qp_delta_sign_flag.
-    * - __s8
-      - ``pps_cb_qp_offset``
-      - Specify the offsets to the luma quantization parameter Cb.
-    * - __s8
-      - ``pps_cr_qp_offset``
-      - Specify the offsets to the luma quantization parameter Cr.
-    * - __u8
-      - ``num_tile_columns_minus1``
-      - Plus 1 specifies the number of tile columns partitioning the picture.
-    * - __u8
-      - ``num_tile_rows_minus1``
-      - Plus 1 specifies the number of tile rows partitioning the picture.
-    * - __u8
-      - ``column_width_minus1[20]``
-      - Plus 1 specifies the width of the i-th tile column in units of
-        coding tree blocks.
-    * - __u8
-      - ``row_height_minus1[22]``
-      - Plus 1 specifies the height of the i-th tile row in units of coding
-        tree blocks.
-    * - __s8
-      - ``pps_beta_offset_div2``
-      - Specify the default deblocking parameter offsets for beta divided by 2.
-    * - __s8
-      - ``pps_tc_offset_div2``
-      - Specify the default deblocking parameter offsets for tC divided by 2.
-    * - __u8
-      - ``log2_parallel_merge_level_minus2``
-      - Plus 2 specifies the value of the variable Log2ParMrgLevel.
-    * - __u8
-      - ``padding[4]``
-      - Applications and drivers must set this to zero.
-    * - __u64
-      - ``flags``
-      - See :ref:`Picture Parameter Set Flags <hevc_pps_flags>`
-
-.. _hevc_pps_flags:
-
-``Picture Parameter Set Flags``
-
-.. raw:: latex
-
-    \small
-
-.. flat-table::
-    :header-rows:  0
-    :stub-columns: 0
-    :widths:       1 1 2
-
-    * - ``V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT_ENABLED``
-      - 0x00000001
-      -
-    * - ``V4L2_HEVC_PPS_FLAG_OUTPUT_FLAG_PRESENT``
-      - 0x00000002
-      -
-    * - ``V4L2_HEVC_PPS_FLAG_SIGN_DATA_HIDING_ENABLED``
-      - 0x00000004
-      -
-    * - ``V4L2_HEVC_PPS_FLAG_CABAC_INIT_PRESENT``
-      - 0x00000008
-      -
-    * - ``V4L2_HEVC_PPS_FLAG_CONSTRAINED_INTRA_PRED``
-      - 0x00000010
-      -
-    * - ``V4L2_HEVC_PPS_FLAG_TRANSFORM_SKIP_ENABLED``
-      - 0x00000020
-      -
-    * - ``V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED``
-      - 0x00000040
-      -
-    * - ``V4L2_HEVC_PPS_FLAG_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT``
-      - 0x00000080
-      -
-    * - ``V4L2_HEVC_PPS_FLAG_WEIGHTED_PRED``
-      - 0x00000100
-      -
-    * - ``V4L2_HEVC_PPS_FLAG_WEIGHTED_BIPRED``
-      - 0x00000200
-      -
-    * - ``V4L2_HEVC_PPS_FLAG_TRANSQUANT_BYPASS_ENABLED``
-      - 0x00000400
-      -
-    * - ``V4L2_HEVC_PPS_FLAG_TILES_ENABLED``
-      - 0x00000800
-      -
-    * - ``V4L2_HEVC_PPS_FLAG_ENTROPY_CODING_SYNC_ENABLED``
-      - 0x00001000
-      -
-    * - ``V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED``
-      - 0x00002000
-      -
-    * - ``V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED``
-      - 0x00004000
-      -
-    * - ``V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_OVERRIDE_ENABLED``
-      - 0x00008000
-      -
-    * - ``V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER``
-      - 0x00010000
-      -
-    * - ``V4L2_HEVC_PPS_FLAG_LISTS_MODIFICATION_PRESENT``
-      - 0x00020000
-      -
-    * - ``V4L2_HEVC_PPS_FLAG_SLICE_SEGMENT_HEADER_EXTENSION_PRESENT``
-      - 0x00040000
-      -
-    * - ``V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT``
-      - 0x00080000
-      - Specifies the presence of deblocking filter control syntax elements in
-        the PPS
-    * - ``V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING``
-      - 0x00100000
-      - Specifies that tile column boundaries and likewise tile row boundaries
-        are distributed uniformly across the picture
-
-.. raw:: latex
-
-    \normalsize
-
-``V4L2_CID_STATELESS_HEVC_SLICE_PARAMS (struct)``
-    Specifies various slice-specific parameters, especially from the NAL unit
-    header, general slice segment header and weighted prediction parameter
-    parts of the bitstream.
-    These bitstream parameters are defined according to :ref:`hevc`.
-    They are described in section 7.4.7 "General slice segment header
-    semantics" of the specification.
-    This control is a dynamically sized 1-dimensional array,
-    V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
-
-.. c:type:: v4l2_ctrl_hevc_slice_params
-
-.. raw:: latex
-
-    \scriptsize
-
-.. tabularcolumns:: |p{5.4cm}|p{6.8cm}|p{5.1cm}|
-
-.. cssclass:: longtable
-
-.. flat-table:: struct v4l2_ctrl_hevc_slice_params
-    :header-rows:  0
-    :stub-columns: 0
-    :widths:       1 1 2
-
-    * - __u32
-      - ``bit_size``
-      - Size (in bits) of the current slice data.
-    * - __u32
-      - ``data_byte_offset``
-      - Offset (in bytes) to the video data in the current slice data.
-    * - __u32
-      - ``num_entry_point_offsets``
-      - Specifies the number of entry point offset syntax elements in the slice header.
-    * - __u8
-      - ``nal_unit_type``
-      - Specifies the coding type of the slice (B, P or I).
-    * - __u8
-      - ``nuh_temporal_id_plus1``
-      - Minus 1 specifies a temporal identifier for the NAL unit.
-    * - __u8
-      - ``slice_type``
-      -
-	(V4L2_HEVC_SLICE_TYPE_I, V4L2_HEVC_SLICE_TYPE_P or
-	V4L2_HEVC_SLICE_TYPE_B).
-    * - __u8
-      - ``colour_plane_id``
-      - Specifies the colour plane associated with the current slice.
-    * - __u16
-      - ``slice_pic_order_cnt``
-      - Specifies the picture order count.
-    * - __u8
-      - ``num_ref_idx_l0_active_minus1``
-      - Specifies the maximum reference index for reference picture list 0
-        that may be used to decode the slice.
-    * - __u8
-      - ``num_ref_idx_l1_active_minus1``
-      - Specifies the maximum reference index for reference picture list 1
-        that may be used to decode the slice.
-    * - __u8
-      - ``collocated_ref_idx``
-      - Specifies the reference index of the collocated picture used for
-        temporal motion vector prediction.
-    * - __u8
-      - ``five_minus_max_num_merge_cand``
-      - Specifies the maximum number of merging motion vector prediction
-        candidates supported in the slice subtracted from 5.
-    * - __s8
-      - ``slice_qp_delta``
-      - Specifies the initial value of QpY to be used for the coding blocks in the slice.
-    * - __s8
-      - ``slice_cb_qp_offset``
-      - Specifies a difference to be added to the value of pps_cb_qp_offset.
-    * - __s8
-      - ``slice_cr_qp_offset``
-      - Specifies a difference to be added to the value of pps_cr_qp_offset.
-    * - __s8
-      - ``slice_act_y_qp_offset``
-      - screen content extension parameters
-    * - __s8
-      - ``slice_act_cb_qp_offset``
-      - screen content extension parameters
-    * - __s8
-      - ``slice_act_cr_qp_offset``
-      - screen content extension parameters
-    * - __s8
-      - ``slice_beta_offset_div2``
-      - Specify the deblocking parameter offsets for beta divided by 2.
-    * - __s8
-      - ``slice_tc_offset_div2``
-      - Specify the deblocking parameter offsets for tC divided by 2.
-    * - __u8
-      - ``pic_struct``
-      - Indicates whether a picture should be displayed as a frame or as one or more fields.
-    * - __u32
-      - ``slice_segment_addr``
-      - Specifies the address of the first coding tree block in the slice segment.
-    * - __u8
-      - ``ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
-      - The list of L0 reference elements as indices in the DPB.
-    * - __u8
-      - ``ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
-      - The list of L1 reference elements as indices in the DPB.
-    * - __u16
-      - ``short_term_ref_pic_set_size``
-      - Specifies the number of st_ref_pic_set( ) syntax structures included in the SPS.
-        The value of num_short_term_ref_pic_sets shall be in the range of 0 to 64, inclusive.
-    * - __u16
-      - ``long_term_ref_pic_set_size``
-      - Specifies the number of candidate long-term reference pictures that are specified
-        in the SPS. The value of num_long_term_ref_pics_sps shall be in the range
-        of 0 to 32, inclusive.
-    * - __u8
-      - ``padding``
-      - Applications and drivers must set this to zero.
-    * - struct :c:type:`v4l2_hevc_pred_weight_table`
-      - ``pred_weight_table``
-      - The prediction weight coefficients for inter-picture prediction.
-    * - __u64
-      - ``flags``
-      - See :ref:`Slice Parameters Flags <hevc_slice_params_flags>`
-
-.. raw:: latex
-
-    \normalsize
-
-.. _hevc_slice_params_flags:
-
-``Slice Parameters Flags``
-
-.. raw:: latex
-
-    \scriptsize
-
-.. flat-table::
-    :header-rows:  0
-    :stub-columns: 0
-    :widths:       1 1 2
-
-    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_LUMA``
-      - 0x00000001
-      -
-    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_CHROMA``
-      - 0x00000002
-      -
-    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_TEMPORAL_MVP_ENABLED``
-      - 0x00000004
-      -
-    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_MVD_L1_ZERO``
-      - 0x00000008
-      -
-    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_CABAC_INIT``
-      - 0x00000010
-      -
-    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_COLLOCATED_FROM_L0``
-      - 0x00000020
-      -
-    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_USE_INTEGER_MV``
-      - 0x00000040
-      -
-    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED``
-      - 0x00000080
-      -
-    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED``
-      - 0x00000100
-      -
-    * - ``V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT``
-      - 0x00000200
-      -
-
-.. raw:: latex
-
-    \normalsize
-
-``V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (integer)``
-    Specifies entry point offsets in bytes.
-    This control is a dynamically sized array. The number of entry point
-    offsets is reported by the ``elems`` field.
-    This bitstream parameter is defined according to :ref:`hevc`.
-    They are described in section 7.4.7.1 "General slice segment header
-    semantics" of the specification.
-
-``V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (struct)``
-    Specifies the HEVC scaling matrix parameters used for the scaling process
-    for transform coefficients.
-    These matrix and parameters are defined according to :ref:`hevc`.
-    They are described in section 7.4.5 "Scaling list data semantics" of
-    the specification.
-
-.. c:type:: v4l2_ctrl_hevc_scaling_matrix
-
-.. raw:: latex
-
-    \scriptsize
-
-.. tabularcolumns:: |p{5.4cm}|p{6.8cm}|p{5.1cm}|
-
-.. cssclass:: longtable
-
-.. flat-table:: struct v4l2_ctrl_hevc_scaling_matrix
-    :header-rows:  0
-    :stub-columns: 0
-    :widths:       1 1 2
-
-    * - __u8
-      - ``scaling_list_4x4[6][16]``
-      - Scaling list is used for the scaling process for transform
-        coefficients. The values on each scaling list are expected
-        in raster scan order.
-    * - __u8
-      - ``scaling_list_8x8[6][64]``
-      - Scaling list is used for the scaling process for transform
-        coefficients. The values on each scaling list are expected
-        in raster scan order.
-    * - __u8
-      - ``scaling_list_16x16[6][64]``
-      - Scaling list is used for the scaling process for transform
-        coefficients. The values on each scaling list are expected
-        in raster scan order.
-    * - __u8
-      - ``scaling_list_32x32[2][64]``
-      - Scaling list is used for the scaling process for transform
-        coefficients. The values on each scaling list are expected
-        in raster scan order.
-    * - __u8
-      - ``scaling_list_dc_coef_16x16[6]``
-      - Scaling list is used for the scaling process for transform
-        coefficients. The values on each scaling list are expected
-        in raster scan order.
-    * - __u8
-      - ``scaling_list_dc_coef_32x32[2]``
-      - Scaling list is used for the scaling process for transform
-        coefficients. The values on each scaling list are expected
-        in raster scan order.
-
-.. raw:: latex
-
-    \normalsize
-
-.. c:type:: v4l2_hevc_dpb_entry
-
-.. raw:: latex
-
-    \small
-
-.. tabularcolumns:: |p{1.0cm}|p{4.2cm}|p{12.1cm}|
-
-.. flat-table:: struct v4l2_hevc_dpb_entry
-    :header-rows:  0
-    :stub-columns: 0
-    :widths:       1 1 2
-
-    * - __u64
-      - ``timestamp``
-      - Timestamp of the V4L2 capture buffer to use as reference, used
-        with B-coded and P-coded frames. The timestamp refers to the
-	``timestamp`` field in struct :c:type:`v4l2_buffer`. Use the
-	:c:func:`v4l2_timeval_to_ns()` function to convert the struct
-	:c:type:`timeval` in struct :c:type:`v4l2_buffer` to a __u64.
-    * - __u8
-      - ``flags``
-      - Long term flag for the reference frame
-        (V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE). The flag is set as
-        described in the ITU HEVC specification chapter "8.3.2 Decoding
-        process for reference picture set".
-    * - __u8
-      - ``field_pic``
-      - Whether the reference is a field picture or a frame.
-    * - __u16
-      - ``pic_order_cnt[2]``
-      - The picture order count of the reference. Only the first element of the
-        array is used for frame pictures, while the first element identifies the
-        top field and the second the bottom field in field-coded pictures.
-    * - __u8
-      - ``padding[2]``
-      - Applications and drivers must set this to zero.
-
-.. raw:: latex
-
-    \normalsize
-
-.. c:type:: v4l2_hevc_pred_weight_table
-
-.. raw:: latex
-
-    \footnotesize
-
-.. tabularcolumns:: |p{0.8cm}|p{10.6cm}|p{5.9cm}|
-
-.. flat-table:: struct v4l2_hevc_pred_weight_table
-    :header-rows:  0
-    :stub-columns: 0
-    :widths:       1 1 2
-
-    * - __s8
-      - ``delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
-      - The difference of the weighting factor applied to the luma
-        prediction value for list 0.
-    * - __s8
-      - ``luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
-      - The additive offset applied to the luma prediction value for list 0.
-    * - __s8
-      - ``delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
-      - The difference of the weighting factor applied to the chroma
-        prediction value for list 0.
-    * - __s8
-      - ``chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
-      - The difference of the additive offset applied to the chroma
-        prediction values for list 0.
-    * - __s8
-      - ``delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
-      - The difference of the weighting factor applied to the luma
-        prediction value for list 1.
-    * - __s8
-      - ``luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
-      - The additive offset applied to the luma prediction value for list 1.
-    * - __s8
-      - ``delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
-      - The difference of the weighting factor applied to the chroma
-        prediction value for list 1.
-    * - __s8
-      - ``chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
-      - The difference of the additive offset applied to the chroma
-        prediction values for list 1.
-    * - __u8
-      - ``luma_log2_weight_denom``
-      - The base 2 logarithm of the denominator for all luma weighting
-        factors.
-    * - __s8
-      - ``delta_chroma_log2_weight_denom``
-      - The difference of the base 2 logarithm of the denominator for
-        all chroma weighting factors.
-    * - __u8
-      - ``padding[6]``
-      - Applications and drivers must set this to zero.
-
-.. raw:: latex
-
-    \normalsize
-
-``V4L2_CID_STATELESS_HEVC_DECODE_MODE (enum)``
-    Specifies the decoding mode to use. Currently exposes slice-based and
-    frame-based decoding but new modes might be added later on.
-    This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
-    pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE
-    are required to set this control in order to specify the decoding mode
-    that is expected for the buffer.
-    Drivers may expose a single or multiple decoding modes, depending
-    on what they can support.
-
-    .. note::
-
-       This menu control is not yet part of the public kernel API and
-       it is expected to change.
-
-.. c:type:: v4l2_stateless_hevc_decode_mode
-
-.. raw:: latex
-
-    \small
-
-.. tabularcolumns:: |p{9.4cm}|p{0.6cm}|p{7.3cm}|
-
-.. flat-table::
-    :header-rows:  0
-    :stub-columns: 0
-    :widths:       1 1 2
-
-    * - ``V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED``
-      - 0
-      - Decoding is done at the slice granularity.
-        The OUTPUT buffer must contain a single slice.
-    * - ``V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED``
-      - 1
-      - Decoding is done at the frame granularity.
-        The OUTPUT buffer must contain all slices needed to decode the
-        frame. The OUTPUT buffer must also contain both fields.
-
-.. raw:: latex
-
-    \normalsize
-
-``V4L2_CID_STATELESS_HEVC_START_CODE (enum)``
-    Specifies the HEVC slice start code expected for each slice.
-    This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
-    pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE
-    are required to set this control in order to specify the start code
-    that is expected for the buffer.
-    Drivers may expose a single or multiple start codes, depending
-    on what they can support.
-
-    .. note::
-
-       This menu control is not yet part of the public kernel API and
-       it is expected to change.
-
-.. c:type:: v4l2_stateless_hevc_start_code
-
-.. tabularcolumns:: |p{9.2cm}|p{0.6cm}|p{7.5cm}|
-
-.. flat-table::
-    :header-rows:  0
-    :stub-columns: 0
-    :widths:       1 1 2
-
-    * - ``V4L2_STATELESS_HEVC_START_CODE_NONE``
-      - 0
-      - Selecting this value specifies that HEVC slices are passed
-        to the driver without any start code. The bitstream data should be
-        according to :ref:`hevc` 7.3.1.1 General NAL unit syntax, hence
-        contains emulation prevention bytes when required.
-    * - ``V4L2_STATELESS_HEVC_START_CODE_ANNEX_B``
-      - 1
-      - Selecting this value specifies that HEVC slices are expected
-        to be prefixed by Annex B start codes. According to :ref:`hevc`
-        valid start codes can be 3-bytes 0x000001 or 4-bytes 0x00000001.
-
-``V4L2_CID_MPEG_VIDEO_BASELAYER_PRIORITY_ID (integer)``
-    Specifies a priority identifier for the NAL unit, which will be applied to
-    the base layer. By default this value is set to 0 for the base layer,
-    and the next layer will have the priority ID assigned as 1, 2, 3 and so on.
-    The video encoder can't decide the priority id to be applied to a layer,
-    so this has to come from client.
-    This is applicable to H264 and valid Range is from 0 to 63.
-    Source Rec. ITU-T H.264 (06/2019); G.7.4.1.1, G.8.8.1.
-
-``V4L2_CID_MPEG_VIDEO_LTR_COUNT (integer)``
-    Specifies the maximum number of Long Term Reference (LTR) frames at any
-    given time that the encoder can keep.
-    This is applicable to the H264 and HEVC encoders.
-
-``V4L2_CID_MPEG_VIDEO_FRAME_LTR_INDEX (integer)``
-    After setting this control the frame that will be queued next
-    will be marked as a Long Term Reference (LTR) frame
-    and given this LTR index which ranges from 0 to LTR_COUNT-1.
-    This is applicable to the H264 and HEVC encoders.
-    Source Rec. ITU-T H.264 (06/2019); Table 7.9
-
-``V4L2_CID_MPEG_VIDEO_USE_LTR_FRAMES (bitmask)``
-    Specifies the Long Term Reference (LTR) frame(s) to be used for
-    encoding the next frame queued after setting this control.
-    This provides a bitmask which consists of bits [0, LTR_COUNT-1].
-    This is applicable to the H264 and HEVC encoders.
-
-``V4L2_CID_STATELESS_HEVC_DECODE_PARAMS (struct)``
-    Specifies various decode parameters, especially the references picture order
-    count (POC) for all the lists (short, long, before, current, after) and the
-    number of entries for each of them.
-    These parameters are defined according to :ref:`hevc`.
-    They are described in section 8.3 "Slice decoding process" of the
-    specification.
-
-.. c:type:: v4l2_ctrl_hevc_decode_params
-
-.. cssclass:: longtable
-
-.. flat-table:: struct v4l2_ctrl_hevc_decode_params
-    :header-rows:  0
-    :stub-columns: 0
-    :widths:       1 1 2
-
-    * - __s32
-      - ``pic_order_cnt_val``
-      - PicOrderCntVal as described in section 8.3.1 "Decoding process
-        for picture order count" of the specification.
-    * - __u8
-      - ``num_active_dpb_entries``
-      - The number of entries in ``dpb``.
-    * - __u8
-      - ``num_poc_st_curr_before``
-      - The number of reference pictures in the short-term set that come before
-        the current frame.
-    * - __u8
-      - ``num_poc_st_curr_after``
-      - The number of reference pictures in the short-term set that come after
-        the current frame.
-    * - __u8
-      - ``num_poc_lt_curr``
-      - The number of reference pictures in the long-term set.
-    * - __u8
-      - ``poc_st_curr_before[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
-      - PocStCurrBefore as described in section 8.3.2 "Decoding process for reference
-        picture set": provides the index of the short term before references in DPB array.
-    * - __u8
-      - ``poc_st_curr_after[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
-      - PocStCurrAfter as described in section 8.3.2 "Decoding process for reference
-        picture set": provides the index of the short term after references in DPB array.
-    * - __u8
-      - ``poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
-      - PocLtCurr as described in section 8.3.2 "Decoding process for reference
-        picture set": provides the index of the long term references in DPB array.
-    * - struct :c:type:`v4l2_hevc_dpb_entry`
-      - ``dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
-      - The decoded picture buffer, for meta-data about reference frames.
-    * - __u64
-      - ``flags``
-      - See :ref:`Decode Parameters Flags <hevc_decode_params_flags>`
-
-.. _hevc_decode_params_flags:
-
-``Decode Parameters Flags``
-
-.. cssclass:: longtable
-
-.. flat-table::
-    :header-rows:  0
-    :stub-columns: 0
-    :widths:       1 1 2
-
-    * - ``V4L2_HEVC_DECODE_PARAM_FLAG_IRAP_PIC``
-      - 0x00000001
-      -
-    * - ``V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC``
-      - 0x00000002
-      -
-    * - ``V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR``
-      - 0x00000004
-      -
diff --git a/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst b/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
index c352d91a73d8..506dd3c98884 100644
--- a/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
+++ b/Documentation/userspace-api/media/v4l/pixfmt-compressed.rst
@@ -212,7 +212,7 @@ Compressed Formats
         ``V4L2_CID_MPEG_VIDEO_HEVC_SPS``,
         ``V4L2_CID_MPEG_VIDEO_HEVC_PPS``, and
         ``V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS``.
-	See the :ref:`associated Codec Control IDs <v4l2-mpeg-hevc>`.
+	See the :ref:`associated Codec Control IDs <v4l2-codec-stateless-hevc>`.
 	Buffers associated with this pixel format must contain the appropriate
 	number of macroblocks to decode a full corresponding frame.
     * .. _V4L2-PIX-FMT-FWHT:
diff --git a/Documentation/userspace-api/media/v4l/vidioc-g-ext-ctrls.rst b/Documentation/userspace-api/media/v4l/vidioc-g-ext-ctrls.rst
index 29971a45a2d4..892cfeb8b988 100644
--- a/Documentation/userspace-api/media/v4l/vidioc-g-ext-ctrls.rst
+++ b/Documentation/userspace-api/media/v4l/vidioc-g-ext-ctrls.rst
@@ -249,6 +249,26 @@ still cause this situation.
       - ``p_hdr10_mastering``
       - A pointer to a struct :c:type:`v4l2_ctrl_hdr10_mastering_display`. Valid if this control is
         of type ``V4L2_CTRL_TYPE_HDR10_MASTERING_DISPLAY``.
+    * - struct :c:type:`v4l2_ctrl_hevc_sps` *
+      - ``p_hevc_sps``
+      - A pointer to a struct :c:type:`v4l2_ctrl_hevc_sps`. Valid if this
+        control is of type ``V4L2_CTRL_TYPE_HEVC_SPS``.
+    * - struct :c:type:`v4l2_ctrl_hevc_pps` *
+      - ``p_hevc_pps``
+      - A pointer to a struct :c:type:`v4l2_ctrl_hevc_pps`. Valid if this
+        control is of type ``V4L2_CTRL_TYPE_HEVC_PPS``.
+    * - struct :c:type:`v4l2_ctrl_hevc_slice_params` *
+      - ``p_hevc_slice_params``
+      - A pointer to a struct :c:type:`v4l2_ctrl_hevc_slice_params`. Valid if this
+        control is of type ``V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS``.
+    * - struct :c:type:`v4l2_ctrl_hevc_scaling_matrix` *
+      - ``p_hevc_scaling_matrix``
+      - A pointer to a struct :c:type:`v4l2_ctrl_hevc_scaling_matrix`. Valid if this
+        control is of type ``V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX``.
+    * - struct :c:type:`v4l2_ctrl_hevc_decode_params` *
+      - ``p_hevc_decode_params``
+      - A pointer to a struct :c:type:`v4l2_ctrl_hevc_decode_params`. Valid if this
+        control is of type ``V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS``.
     * - void *
       - ``ptr``
       - A pointer to a compound type which can be an N-dimensional array
diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
deleted file mode 100644
index 51bdf38ea0c3..000000000000
--- a/include/media/hevc-ctrls.h
+++ /dev/null
@@ -1,451 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/*
- * These are the HEVC state controls for use with stateless HEVC
- * codec drivers.
- *
- * It turns out that these structs are not stable yet and will undergo
- * more changes. So keep them private until they are stable and ready to
- * become part of the official public API.
- */
-
-#ifndef _HEVC_CTRLS_H_
-#define _HEVC_CTRLS_H_
-
-#include <linux/videodev2.h>
-
-#define V4L2_CID_STATELESS_HEVC_SPS		(V4L2_CID_CODEC_BASE + 1008)
-#define V4L2_CID_STATELESS_HEVC_PPS		(V4L2_CID_CODEC_BASE + 1009)
-#define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS	(V4L2_CID_CODEC_BASE + 1010)
-#define V4L2_CID_STATELESS_HEVC_SCALING_MATRIX	(V4L2_CID_CODEC_BASE + 1011)
-#define V4L2_CID_STATELESS_HEVC_DECODE_PARAMS	(V4L2_CID_CODEC_BASE + 1012)
-#define V4L2_CID_STATELESS_HEVC_DECODE_MODE	(V4L2_CID_CODEC_BASE + 1015)
-#define V4L2_CID_STATELESS_HEVC_START_CODE	(V4L2_CID_CODEC_BASE + 1016)
-#define V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (V4L2_CID_CODEC_BASE + 1017)
-
-enum v4l2_stateless_hevc_decode_mode {
-	V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
-	V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
-};
-
-enum v4l2_stateless_hevc_start_code {
-	V4L2_STATELESS_HEVC_START_CODE_NONE,
-	V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
-};
-
-#define V4L2_HEVC_SLICE_TYPE_B	0
-#define V4L2_HEVC_SLICE_TYPE_P	1
-#define V4L2_HEVC_SLICE_TYPE_I	2
-
-#define V4L2_HEVC_SPS_FLAG_SEPARATE_COLOUR_PLANE		(1ULL << 0)
-#define V4L2_HEVC_SPS_FLAG_SCALING_LIST_ENABLED			(1ULL << 1)
-#define V4L2_HEVC_SPS_FLAG_AMP_ENABLED				(1ULL << 2)
-#define V4L2_HEVC_SPS_FLAG_SAMPLE_ADAPTIVE_OFFSET		(1ULL << 3)
-#define V4L2_HEVC_SPS_FLAG_PCM_ENABLED				(1ULL << 4)
-#define V4L2_HEVC_SPS_FLAG_PCM_LOOP_FILTER_DISABLED		(1ULL << 5)
-#define V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT		(1ULL << 6)
-#define V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED		(1ULL << 7)
-#define V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED	(1ULL << 8)
-
-/**
- * struct v4l2_ctrl_hevc_sps - ITU-T Rec. H.265: Sequence parameter set
- *
- * @video_parameter_set_id: specifies the value of the
- *			    vps_video_parameter_set_id of the active VPS
- * @seq_parameter_set_id: provides an identifier for the SPS for
- *			  reference by other syntax elements
- * @pic_width_in_luma_samples: specifies the width of each decoded picture
- *			       in units of luma samples
- * @pic_height_in_luma_samples: specifies the height of each decoded picture
- *				in units of luma samples
- * @bit_depth_luma_minus8: specifies the bit depth of the samples of the
- *			   luma array
- * @bit_depth_chroma_minus8: specifies the bit depth of the samples of the
- *			     chroma arrays
- * @log2_max_pic_order_cnt_lsb_minus4: specifies the value of the variable
- *				       MaxPicOrderCntLsb
- * @sps_max_dec_pic_buffering_minus1: plus 1 specifies the maximum required
- *				      size of the decoded picture buffer for
- *				      the CVS
- * @sps_max_num_reorder_pics: indicates the maximum allowed number of pictures
- * @sps_max_latency_increase_plus1: not equal to 0 is used to compute the
- *				    value of SpsMaxLatencyPictures[i]
- * @log2_min_luma_coding_block_size_minus3: plus 3 specifies the minimum
- *					    luma coding block size
- * @log2_diff_max_min_luma_coding_block_size: specifies the difference between
- *					      the maximum and minimum luma
- *					      coding block size
- * @log2_min_luma_transform_block_size_minus2: plus 2 specifies the minimum luma
- *					       transform block size
- * @log2_diff_max_min_luma_transform_block_size: specifies the difference between
- *						 the maximum and minimum luma
- *						 transform block size
- * @max_transform_hierarchy_depth_inter: specifies the maximum hierarchy
- *					 depth for transform units of
- *					 coding units coded in inter
- *					 prediction mode
- * @max_transform_hierarchy_depth_intra: specifies the maximum hierarchy
- *					 depth for transform units of
- *					 coding units coded in intra
- *					 prediction mode
- * @pcm_sample_bit_depth_luma_minus1: specifies the number of bits used to
- *				      represent each of PCM sample values of the
- *				      luma component
- * @pcm_sample_bit_depth_chroma_minus1: specifies the number of bits used to
- *					represent each of PCM sample values of
- *					the chroma components
- * @log2_min_pcm_luma_coding_block_size_minus3: plus 3 specifies the minimum size
- *						of coding blocks
- * @log2_diff_max_min_pcm_luma_coding_block_size: specifies the difference between
- *						  the maximum and minimum size of
- *						  coding blocks
- * @num_short_term_ref_pic_sets: speciefies the number of st_ref_pic_set()
- *				 syntax structures included in the SPS
- * @num_long_term_ref_pics_sps:	specifies the number of candidate long-term
- *				reference pictures that are specified in the SPS
- * @chroma_format_idc: specifies the chroma sampling
- * @sps_max_sub_layers_minus1: plus 1 specifies the maximum number of temporal
- *			       sub-layers
- * @flags: see V4L2_HEVC_SPS_FLAG_{}
- */
-struct v4l2_ctrl_hevc_sps {
-	__u8	video_parameter_set_id;
-	__u8	seq_parameter_set_id;
-	__u16	pic_width_in_luma_samples;
-	__u16	pic_height_in_luma_samples;
-	__u8	bit_depth_luma_minus8;
-	__u8	bit_depth_chroma_minus8;
-	__u8	log2_max_pic_order_cnt_lsb_minus4;
-	__u8	sps_max_dec_pic_buffering_minus1;
-	__u8	sps_max_num_reorder_pics;
-	__u8	sps_max_latency_increase_plus1;
-	__u8	log2_min_luma_coding_block_size_minus3;
-	__u8	log2_diff_max_min_luma_coding_block_size;
-	__u8	log2_min_luma_transform_block_size_minus2;
-	__u8	log2_diff_max_min_luma_transform_block_size;
-	__u8	max_transform_hierarchy_depth_inter;
-	__u8	max_transform_hierarchy_depth_intra;
-	__u8	pcm_sample_bit_depth_luma_minus1;
-	__u8	pcm_sample_bit_depth_chroma_minus1;
-	__u8	log2_min_pcm_luma_coding_block_size_minus3;
-	__u8	log2_diff_max_min_pcm_luma_coding_block_size;
-	__u8	num_short_term_ref_pic_sets;
-	__u8	num_long_term_ref_pics_sps;
-	__u8	chroma_format_idc;
-	__u8	sps_max_sub_layers_minus1;
-
-	__u8	padding[6];
-	__u64	flags;
-	__u8	reserved[24];
-};
-
-#define V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT_ENABLED	(1ULL << 0)
-#define V4L2_HEVC_PPS_FLAG_OUTPUT_FLAG_PRESENT			(1ULL << 1)
-#define V4L2_HEVC_PPS_FLAG_SIGN_DATA_HIDING_ENABLED		(1ULL << 2)
-#define V4L2_HEVC_PPS_FLAG_CABAC_INIT_PRESENT			(1ULL << 3)
-#define V4L2_HEVC_PPS_FLAG_CONSTRAINED_INTRA_PRED		(1ULL << 4)
-#define V4L2_HEVC_PPS_FLAG_TRANSFORM_SKIP_ENABLED		(1ULL << 5)
-#define V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED			(1ULL << 6)
-#define V4L2_HEVC_PPS_FLAG_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT	(1ULL << 7)
-#define V4L2_HEVC_PPS_FLAG_WEIGHTED_PRED			(1ULL << 8)
-#define V4L2_HEVC_PPS_FLAG_WEIGHTED_BIPRED			(1ULL << 9)
-#define V4L2_HEVC_PPS_FLAG_TRANSQUANT_BYPASS_ENABLED		(1ULL << 10)
-#define V4L2_HEVC_PPS_FLAG_TILES_ENABLED			(1ULL << 11)
-#define V4L2_HEVC_PPS_FLAG_ENTROPY_CODING_SYNC_ENABLED		(1ULL << 12)
-#define V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED	(1ULL << 13)
-#define V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 14)
-#define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_OVERRIDE_ENABLED	(1ULL << 15)
-#define V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER	(1ULL << 16)
-#define V4L2_HEVC_PPS_FLAG_LISTS_MODIFICATION_PRESENT		(1ULL << 17)
-#define V4L2_HEVC_PPS_FLAG_SLICE_SEGMENT_HEADER_EXTENSION_PRESENT (1ULL << 18)
-#define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT	(1ULL << 19)
-#define V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING			(1ULL << 20)
-
-/**
- * struct v4l2_ctrl_hevc_pps - ITU-T Rec. H.265: Picture parameter set
- *
- * @pic_parameter_set_id: identifies the PPS for reference by other
- *			  syntax elements
- * @num_extra_slice_header_bits: specifies the number of extra slice header
- *				 bits that are present in the slice header RBSP
- *				 for coded pictures referring to the PPS.
- * @num_ref_idx_l0_default_active_minus1: specifies the inferred value of
- *					  num_ref_idx_l0_active_minus1
- * @num_ref_idx_l1_default_active_minus1: specifies the inferred value of
- *					  num_ref_idx_l1_active_minus1
- * @init_qp_minus26: plus 26 specifies the initial value of SliceQp Y for
- *		     each slice referring to the PPS
- * @diff_cu_qp_delta_depth: specifies the difference between the luma coding
- *			    tree block size and the minimum luma coding block
- *			    size of coding units that convey cu_qp_delta_abs
- *			    and cu_qp_delta_sign_flag
- * @pps_cb_qp_offset: specify the offsets to the luma quantization parameter Cb
- * @pps_cr_qp_offset: specify the offsets to the luma quantization parameter Cr
- * @num_tile_columns_minus1: plus 1 specifies the number of tile columns
- *			     partitioning the picture
- * @num_tile_rows_minus1: plus 1 specifies the number of tile rows partitioning
- *			  the picture
- * @column_width_minus1: plus 1 specifies the width of the i-th tile column in
- *			 units of coding tree blocks
- * @row_height_minus1: plus 1 specifies the height of the i-th tile row in
- *		       units of coding tree blocks
- * @pps_beta_offset_div2: specify the default deblocking parameter offsets for
- *			  beta divided by 2
- * @pps_tc_offset_div2: specify the default deblocking parameter offsets for tC
- *			divided by 2
- * @log2_parallel_merge_level_minus2: plus 2 specifies the value of the variable
- *				      Log2ParMrgLevel
- * @flags: see V4L2_HEVC_PPS_FLAG_{}
- */
-struct v4l2_ctrl_hevc_pps {
-	__u8	pic_parameter_set_id;
-	__u8	num_extra_slice_header_bits;
-	__u8	num_ref_idx_l0_default_active_minus1;
-	__u8	num_ref_idx_l1_default_active_minus1;
-	__s8	init_qp_minus26;
-	__u8	diff_cu_qp_delta_depth;
-	__s8	pps_cb_qp_offset;
-	__s8	pps_cr_qp_offset;
-	__u8	num_tile_columns_minus1;
-	__u8	num_tile_rows_minus1;
-	__u8	column_width_minus1[20];
-	__u8	row_height_minus1[22];
-	__s8	pps_beta_offset_div2;
-	__s8	pps_tc_offset_div2;
-	__u8	log2_parallel_merge_level_minus2;
-	__u8	padding[9];
-
-	__u64	flags;
-	__u8	reserved[56];
-};
-
-#define V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE	0x01
-
-#define V4L2_HEVC_DPB_ENTRIES_NUM_MAX		16
-
-/**
- * struct v4l2_hevc_dpb_entry - HEVC decoded picture buffer entry
- *
- * @timestamp: timestamp of the V4L2 capture buffer to use as reference.
- * @flags: long term flag for the reference frame
- * @field_pic: whether the reference is a field picture or a frame.
- * @pic_order_cnt: the picture order count of the reference.
- */
-struct v4l2_hevc_dpb_entry {
-	__u64	timestamp;
-	__u8	flags;
-	__u8	field_pic;
-	__u16	pic_order_cnt[2];
-	__u8	padding[2];
-};
-
-/**
- * struct v4l2_hevc_pred_weight_table - HEVC weighted prediction parameters
- *
- * @delta_luma_weight_l0: the difference of the weighting factor applied
- *			  to the luma prediction value for list 0
- * @luma_offset_l0: the additive offset applied to the luma prediction value
- *		    for list 0
- * @delta_chroma_weight_l0: the difference of the weighting factor applied
- *			    to the chroma prediction values for list 0
- * @chroma_offset_l0: the difference of the additive offset applied to
- *		      the chroma prediction values for list 0
- * @delta_luma_weight_l1: the difference of the weighting factor applied
- *			  to the luma prediction value for list 1
- * @luma_offset_l1: the additive offset applied to the luma prediction value
- *		    for list 1
- * @delta_chroma_weight_l1: the difference of the weighting factor applied
- *			    to the chroma prediction values for list 1
- * @chroma_offset_l1: the difference of the additive offset applied to
- *		      the chroma prediction values for list 1
- * @luma_log2_weight_denom: the base 2 logarithm of the denominator for
- *			    all luma weighting factors
- * @delta_chroma_log2_weight_denom: the difference of the base 2 logarithm
- *				    of the denominator for all chroma
- *				    weighting factors
- */
-struct v4l2_hevc_pred_weight_table {
-	__s8	delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
-	__s8	luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
-	__s8	delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
-	__s8	chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
-
-	__s8	delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
-	__s8	luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
-	__s8	delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
-	__s8	chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
-
-	__u8	luma_log2_weight_denom;
-	__s8	delta_chroma_log2_weight_denom;
-};
-
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_LUMA		(1ULL << 0)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_CHROMA		(1ULL << 1)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_TEMPORAL_MVP_ENABLED	(1ULL << 2)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_MVD_L1_ZERO			(1ULL << 3)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_CABAC_INIT			(1ULL << 4)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_COLLOCATED_FROM_L0		(1ULL << 5)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_USE_INTEGER_MV		(1ULL << 6)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED (1ULL << 7)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 8)
-#define V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT	(1ULL << 9)
-
-/**
- * v4l2_ctrl_hevc_slice_params - HEVC slice parameters
- *
- * This control is a dynamically sized 1-dimensional array,
- * V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
- *
- * @bit_size: size (in bits) of the current slice data
- * @data_byte_offset: offset (in bytes) to the video data in the current slice data
- * @num_entry_point_offsets: specifies the number of entry point offset syntax
- *			     elements in the slice header.
- * @nal_unit_type: specifies the coding type of the slice (B, P or I)
- * @nuh_temporal_id_plus1: minus 1 specifies a temporal identifier for the NAL unit
- * @slice_type: see V4L2_HEVC_SLICE_TYPE_{}
- * @colour_plane_id: specifies the colour plane associated with the current slice
- * @slice_pic_order_cnt: specifies the picture order count
- * @num_ref_idx_l0_active_minus1: specifies the maximum reference index for
- *				  reference picture list 0 that may be used to decode
- *				  the slice
- * @num_ref_idx_l1_active_minus1: specifies the maximum reference index for
- *				  reference picture list 1 that may be used to decode
- *				  the slice
- * @collocated_ref_idx: specifies the reference index of the collocated picture used
- *			for temporal motion vector prediction
- * @five_minus_max_num_merge_cand: specifies the maximum number of merging
- *				   motion vector prediction candidates supported in
- *				   the slice subtracted from 5
- * @slice_qp_delta: specifies the initial value of QpY to be used for the coding
- *		    blocks in the slice
- * @slice_cb_qp_offset: specifies a difference to be added to the value of pps_cb_qp_offset
- * @slice_cr_qp_offset: specifies a difference to be added to the value of pps_cr_qp_offset
- * @slice_act_y_qp_offset: screen content extension parameters
- * @slice_act_cb_qp_offset: screen content extension parameters
- * @slice_act_cr_qp_offset: screen content extension parameters
- * @slice_beta_offset_div2: specify the deblocking parameter offsets for beta divided by 2
- * @slice_tc_offset_div2: specify the deblocking parameter offsets for tC divided by 2
- * @pic_struct: indicates whether a picture should be displayed as a frame or as one or
- *		more fields
- * @slice_segment_addr: specifies the address of the first coding tree block in
- *			the slice segment
- * @ref_idx_l0: the list of L0 reference elements as indices in the DPB
- * @ref_idx_l1: the list of L1 reference elements as indices in the DPB
- * @short_term_ref_pic_set_size: specifies the number of st_ref_pic_set()
- *				 syntax structures included in the SPS
- * @long_term_ref_pic_set_size: specifies the number of candidate long-term
- *				reference pictures that are specified in the SPS
- * @pred_weight_table: the prediction weight coefficients for inter-picture
- *		       prediction
- * @flags: see V4L2_HEVC_SLICE_PARAMS_FLAG_{}
- */
-struct v4l2_ctrl_hevc_slice_params {
-	__u32	bit_size;
-	__u32	data_byte_offset;
-	__u32	num_entry_point_offsets;
-	/* ISO/IEC 23008-2, ITU-T Rec. H.265: NAL unit header */
-	__u8	nal_unit_type;
-	__u8	nuh_temporal_id_plus1;
-
-	/* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
-	__u8	slice_type;
-	__u8	colour_plane_id;
-	__u16	slice_pic_order_cnt;
-	__u8	num_ref_idx_l0_active_minus1;
-	__u8	num_ref_idx_l1_active_minus1;
-	__u8	collocated_ref_idx;
-	__u8	five_minus_max_num_merge_cand;
-	__s8	slice_qp_delta;
-	__s8	slice_cb_qp_offset;
-	__s8	slice_cr_qp_offset;
-	__s8	slice_act_y_qp_offset;
-	__s8	slice_act_cb_qp_offset;
-	__s8	slice_act_cr_qp_offset;
-	__s8	slice_beta_offset_div2;
-	__s8	slice_tc_offset_div2;
-
-	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture timing SEI message */
-	__u8	pic_struct;
-
-	__u8	reserved;
-	/* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
-	__u32	slice_segment_addr;
-	__u8	ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
-	__u8	ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
-	__u16	short_term_ref_pic_set_size;
-	__u16	long_term_ref_pic_set_size;
-
-	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction parameter */
-	struct v4l2_hevc_pred_weight_table pred_weight_table;
-
-	__u8	reserved1[6];
-	__u64	flags;
-	__u8	padding[40];
-};
-
-#define V4L2_HEVC_DECODE_PARAM_FLAG_IRAP_PIC		0x1
-#define V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC		0x2
-#define V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR  0x4
-
-/**
- * struct v4l2_ctrl_hevc_decode_params - HEVC decode parameters
- *
- * @pic_order_cnt_val: picture order count
- * @num_active_dpb_entries: the number of entries in dpb
- * @num_poc_st_curr_before: the number of reference pictures in the short-term
- *			    set that come before the current frame
- * @num_poc_st_curr_after: the number of reference pictures in the short-term
- *			   set that come after the current frame
- * @num_poc_lt_curr: the number of reference pictures in the long-term set
- * @poc_st_curr_before: provides the index of the short term before references
- *			in DPB array
- * @poc_st_curr_after: provides the index of the short term after references
- *		       in DPB array
- * @poc_lt_curr: provides the index of the long term references in DPB array
- * @dpb: the decoded picture buffer, for meta-data about reference frames
- * @flags: see V4L2_HEVC_DECODE_PARAM_FLAG_{}
- */
-struct v4l2_ctrl_hevc_decode_params {
-	__s32	pic_order_cnt_val;
-	__u8	num_active_dpb_entries;
-	__u8	num_poc_st_curr_before;
-	__u8	num_poc_st_curr_after;
-	__u8	num_poc_lt_curr;
-	__u8	poc_st_curr_before[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
-	__u8	poc_st_curr_after[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
-	__u8	poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
-	struct	v4l2_hevc_dpb_entry dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
-	__u64	flags;
-};
-
-/**
- * struct v4l2_ctrl_hevc_scaling_matrix - HEVC scaling lists parameters
- *
- * @scaling_list_4x4: scaling list is used for the scaling process for
- *		      transform coefficients. The values on each scaling
- *		      list are expected in raster scan order
- * @scaling_list_8x8: scaling list is used for the scaling process for
- *		      transform coefficients. The values on each scaling
- *		      list are expected in raster scan order
- * @scaling_list_16x16: scaling list is used for the scaling process for
- *			transform coefficients. The values on each scaling
- *			list are expected in raster scan order
- * @scaling_list_32x32:	scaling list is used for the scaling process for
- *			transform coefficients. The values on each scaling
- *			list are expected in raster scan order
- * @scaling_list_dc_coef_16x16: scaling list is used for the scaling process
- *				for transform coefficients. The values on each
- *				scaling list are expected in raster scan order.
- * @scaling_list_dc_coef_32x32:	scaling list is used for the scaling process
- *				for transform coefficients. The values on each
- *				scaling list are expected in raster scan order.
- */
-struct v4l2_ctrl_hevc_scaling_matrix {
-	__u8	scaling_list_4x4[6][16];
-	__u8	scaling_list_8x8[6][64];
-	__u8	scaling_list_16x16[6][64];
-	__u8	scaling_list_32x32[2][64];
-	__u8	scaling_list_dc_coef_16x16[6];
-	__u8	scaling_list_dc_coef_32x32[2];
-};
-
-#endif
diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h
index f4105de8a8d2..00828a4f9404 100644
--- a/include/media/v4l2-ctrls.h
+++ b/include/media/v4l2-ctrls.h
@@ -13,12 +13,6 @@
 #include <linux/videodev2.h>
 #include <media/media-request.h>
 
-/*
- * Include the stateless codec compound control definitions.
- * This will move to the public headers once this API is fully stable.
- */
-#include <media/hevc-ctrls.h>
-
 /* forward references */
 struct file;
 struct poll_table_struct;
diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
index d56a1c7fb91d..56890a39d889 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -1989,6 +1989,440 @@ struct v4l2_ctrl_mpeg2_quantisation {
 	__u8	chroma_non_intra_quantiser_matrix[64];
 };
 
+#define V4L2_CID_STATELESS_HEVC_SPS		(V4L2_CID_CODEC_STATELESS_BASE + 400)
+#define V4L2_CID_STATELESS_HEVC_PPS		(V4L2_CID_CODEC_STATELESS_BASE + 401)
+#define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS	(V4L2_CID_CODEC_STATELESS_BASE + 402)
+#define V4L2_CID_STATELESS_HEVC_SCALING_MATRIX	(V4L2_CID_CODEC_STATELESS_BASE + 403)
+#define V4L2_CID_STATELESS_HEVC_DECODE_PARAMS	(V4L2_CID_CODEC_STATELESS_BASE + 404)
+#define V4L2_CID_STATELESS_HEVC_DECODE_MODE	(V4L2_CID_CODEC_STATELESS_BASE + 405)
+#define V4L2_CID_STATELESS_HEVC_START_CODE	(V4L2_CID_CODEC_STATELESS_BASE + 406)
+#define V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS (V4L2_CID_CODEC_STATELESS_BASE + 407)
+
+enum v4l2_stateless_hevc_decode_mode {
+	V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
+	V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
+};
+
+enum v4l2_stateless_hevc_start_code {
+	V4L2_STATELESS_HEVC_START_CODE_NONE,
+	V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
+};
+
+#define V4L2_HEVC_SLICE_TYPE_B	0
+#define V4L2_HEVC_SLICE_TYPE_P	1
+#define V4L2_HEVC_SLICE_TYPE_I	2
+
+#define V4L2_HEVC_SPS_FLAG_SEPARATE_COLOUR_PLANE		(1ULL << 0)
+#define V4L2_HEVC_SPS_FLAG_SCALING_LIST_ENABLED			(1ULL << 1)
+#define V4L2_HEVC_SPS_FLAG_AMP_ENABLED				(1ULL << 2)
+#define V4L2_HEVC_SPS_FLAG_SAMPLE_ADAPTIVE_OFFSET		(1ULL << 3)
+#define V4L2_HEVC_SPS_FLAG_PCM_ENABLED				(1ULL << 4)
+#define V4L2_HEVC_SPS_FLAG_PCM_LOOP_FILTER_DISABLED		(1ULL << 5)
+#define V4L2_HEVC_SPS_FLAG_LONG_TERM_REF_PICS_PRESENT		(1ULL << 6)
+#define V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED		(1ULL << 7)
+#define V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED	(1ULL << 8)
+
+/**
+ * struct v4l2_ctrl_hevc_sps - ITU-T Rec. H.265: Sequence parameter set
+ *
+ * @video_parameter_set_id: specifies the value of the
+ *			vps_video_parameter_set_id of the active VPS
+ * @seq_parameter_set_id: provides an identifier for the SPS for
+ *			  reference by other syntax elements
+ * @pic_width_in_luma_samples:	specifies the width of each decoded picture
+ *				in units of luma samples
+ * @pic_height_in_luma_samples: specifies the height of each decoded picture
+ *				in units of luma samples
+ * @bit_depth_luma_minus8: specifies the bit depth of the samples of the
+ *			   luma array
+ * @bit_depth_chroma_minus8: specifies the bit depth of the samples of the
+ *			     chroma arrays
+ * @log2_max_pic_order_cnt_lsb_minus4: specifies the value of the variable
+ *				       MaxPicOrderCntLsb
+ * @sps_max_dec_pic_buffering_minus1: plus 1 specifies the maximum required
+ *				      size of the decoded picture buffer for
+ *				      the CVS
+ * @sps_max_num_reorder_pics: indicates the maximum allowed number of pictures
+ * @sps_max_latency_increase_plus1: not equal to 0 is used to compute the
+ *				    value of SpsMaxLatencyPictures[i]
+ * @log2_min_luma_coding_block_size_minus3: plus 3 specifies the minimum
+ *					    luma coding block size
+ * @log2_diff_max_min_luma_coding_block_size: specifies the difference between
+ *					      the maximum and minimum luma
+ *					      coding block size
+ * @log2_min_luma_transform_block_size_minus2: plus 2 specifies the minimum luma
+ *					       transform block size
+ * @log2_diff_max_min_luma_transform_block_size: specifies the difference between
+ *						 the maximum and minimum luma
+ *						 transform block size
+ * @max_transform_hierarchy_depth_inter: specifies the maximum hierarchy
+ *					 depth for transform units of
+ *					 coding units coded in inter
+ *					 prediction mode
+ * @max_transform_hierarchy_depth_intra: specifies the maximum hierarchy
+ *					 depth for transform units of
+ *					 coding units coded in intra
+ *					 prediction mode
+ * @pcm_sample_bit_depth_luma_minus1: specifies the number of bits used to
+ *				      represent each of PCM sample values of the
+ *				      luma component
+ * @pcm_sample_bit_depth_chroma_minus1: specifies the number of bits used to
+ *					represent each of PCM sample values of
+ *					the chroma components
+ * @log2_min_pcm_luma_coding_block_size_minus3: plus 3 specifies the minimum size
+ *						of coding blocks
+ * @log2_diff_max_min_pcm_luma_coding_block_size: specifies the difference between
+ *						  the maximum and minimum size of
+ *						  coding blocks
+ * @num_short_term_ref_pic_sets: specifies the number of st_ref_pic_set()
+ *				 syntax structures included in the SPS
+ * @num_long_term_ref_pics_sps: specifies the number of candidate long-term
+ *				reference pictures that are specified in the SPS
+ * @chroma_format_idc: specifies the chroma sampling
+ * @sps_max_sub_layers_minus1: plus 1 specifies the maximum number of temporal
+ *			       sub-layers
+ * @flags: see V4L2_HEVC_SPS_FLAG_{}
+ */
+struct v4l2_ctrl_hevc_sps {
+	__u8	video_parameter_set_id;
+	__u8	seq_parameter_set_id;
+	__u16	pic_width_in_luma_samples;
+	__u16	pic_height_in_luma_samples;
+	__u8	bit_depth_luma_minus8;
+	__u8	bit_depth_chroma_minus8;
+	__u8	log2_max_pic_order_cnt_lsb_minus4;
+	__u8	sps_max_dec_pic_buffering_minus1;
+	__u8	sps_max_num_reorder_pics;
+	__u8	sps_max_latency_increase_plus1;
+	__u8	log2_min_luma_coding_block_size_minus3;
+	__u8	log2_diff_max_min_luma_coding_block_size;
+	__u8	log2_min_luma_transform_block_size_minus2;
+	__u8	log2_diff_max_min_luma_transform_block_size;
+	__u8	max_transform_hierarchy_depth_inter;
+	__u8	max_transform_hierarchy_depth_intra;
+	__u8	pcm_sample_bit_depth_luma_minus1;
+	__u8	pcm_sample_bit_depth_chroma_minus1;
+	__u8	log2_min_pcm_luma_coding_block_size_minus3;
+	__u8	log2_diff_max_min_pcm_luma_coding_block_size;
+	__u8	num_short_term_ref_pic_sets;
+	__u8	num_long_term_ref_pics_sps;
+	__u8	chroma_format_idc;
+	__u8	sps_max_sub_layers_minus1;
+
+	__u8	padding[6];
+	__u64	flags;
+	__u8	reserved[24];
+};
+
+#define V4L2_HEVC_PPS_FLAG_DEPENDENT_SLICE_SEGMENT_ENABLED	(1ULL << 0)
+#define V4L2_HEVC_PPS_FLAG_OUTPUT_FLAG_PRESENT			(1ULL << 1)
+#define V4L2_HEVC_PPS_FLAG_SIGN_DATA_HIDING_ENABLED		(1ULL << 2)
+#define V4L2_HEVC_PPS_FLAG_CABAC_INIT_PRESENT			(1ULL << 3)
+#define V4L2_HEVC_PPS_FLAG_CONSTRAINED_INTRA_PRED		(1ULL << 4)
+#define V4L2_HEVC_PPS_FLAG_TRANSFORM_SKIP_ENABLED		(1ULL << 5)
+#define V4L2_HEVC_PPS_FLAG_CU_QP_DELTA_ENABLED			(1ULL << 6)
+#define V4L2_HEVC_PPS_FLAG_PPS_SLICE_CHROMA_QP_OFFSETS_PRESENT	(1ULL << 7)
+#define V4L2_HEVC_PPS_FLAG_WEIGHTED_PRED			(1ULL << 8)
+#define V4L2_HEVC_PPS_FLAG_WEIGHTED_BIPRED			(1ULL << 9)
+#define V4L2_HEVC_PPS_FLAG_TRANSQUANT_BYPASS_ENABLED		(1ULL << 10)
+#define V4L2_HEVC_PPS_FLAG_TILES_ENABLED			(1ULL << 11)
+#define V4L2_HEVC_PPS_FLAG_ENTROPY_CODING_SYNC_ENABLED		(1ULL << 12)
+#define V4L2_HEVC_PPS_FLAG_LOOP_FILTER_ACROSS_TILES_ENABLED	(1ULL << 13)
+#define V4L2_HEVC_PPS_FLAG_PPS_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 14)
+#define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_OVERRIDE_ENABLED	(1ULL << 15)
+#define V4L2_HEVC_PPS_FLAG_PPS_DISABLE_DEBLOCKING_FILTER	(1ULL << 16)
+#define V4L2_HEVC_PPS_FLAG_LISTS_MODIFICATION_PRESENT		(1ULL << 17)
+#define V4L2_HEVC_PPS_FLAG_SLICE_SEGMENT_HEADER_EXTENSION_PRESENT (1ULL << 18)
+#define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT	(1ULL << 19)
+#define V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING			(1ULL << 20)
+
+/**
+ * struct v4l2_ctrl_hevc_pps - ITU-T Rec. H.265: Picture parameter set
+ *
+ * @pic_parameter_set_id: identifies the PPS for reference by other
+ *			  syntax elements
+ * @num_extra_slice_header_bits: specifies the number of extra slice header
+ *				 bits that are present in the slice header RBSP
+ *				 for coded pictures referring to the PPS.
+ * @num_ref_idx_l0_default_active_minus1: specifies the inferred value of
+ *					  num_ref_idx_l0_active_minus1
+ * @num_ref_idx_l1_default_active_minus1: specifies the inferred value of
+ *					  num_ref_idx_l1_active_minus1
+ * @init_qp_minus26: plus 26 specifies the initial value of SliceQp Y for
+ *		     each slice referring to the PPS
+ * @diff_cu_qp_delta_depth: specifies the difference between the luma coding
+ *			    tree block size and the minimum luma coding block
+ *			    size of coding units that convey cu_qp_delta_abs
+ *			    and cu_qp_delta_sign_flag
+ * @pps_cb_qp_offset: specify the offsets to the luma quantization parameter Cb
+ * @pps_cr_qp_offset: specify the offsets to the luma quantization parameter Cr
+ * @num_tile_columns_minus1: plus 1 specifies the number of tile columns
+ *			     partitioning the picture
+ * @num_tile_rows_minus1: plus 1 specifies the number of tile rows partitioning
+ *			  the picture
+ * @column_width_minus1: plus 1 specifies the width of the i-th tile column in
+ *			 units of coding tree blocks
+ * @row_height_minus1: plus 1 specifies the height of the i-th tile row in
+ *		       units of coding tree blocks
+ * @pps_beta_offset_div2: specify the default deblocking parameter offsets for
+ *			  beta divided by 2
+ * @pps_tc_offset_div2: specify the default deblocking parameter offsets for tC
+ *			divided by 2
+ * @log2_parallel_merge_level_minus2: plus 2 specifies the value of the variable
+ *				      Log2ParMrgLevel
+ * @flags: see V4L2_HEVC_PPS_FLAG_{}
+ */
+struct v4l2_ctrl_hevc_pps {
+	__u8	pic_parameter_set_id;
+	__u8	num_extra_slice_header_bits;
+	__u8	num_ref_idx_l0_default_active_minus1;
+	__u8	num_ref_idx_l1_default_active_minus1;
+	__s8	init_qp_minus26;
+	__u8	diff_cu_qp_delta_depth;
+	__s8	pps_cb_qp_offset;
+	__s8	pps_cr_qp_offset;
+	__u8	num_tile_columns_minus1;
+	__u8	num_tile_rows_minus1;
+	__u8	column_width_minus1[20];
+	__u8	row_height_minus1[22];
+	__s8	pps_beta_offset_div2;
+	__s8	pps_tc_offset_div2;
+	__u8	log2_parallel_merge_level_minus2;
+	__u8	padding[9];
+
+	__u64	flags;
+	__u8	reserved[56];
+};
+
+#define V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE	0x01
+
+#define V4L2_HEVC_DPB_ENTRIES_NUM_MAX		16
+
+/**
+ * struct v4l2_hevc_dpb_entry - HEVC decoded picture buffer entry
+ *
+ * @timestamp: timestamp of the V4L2 capture buffer to use as reference.
+ * @flags: long term flag for the reference frame
+ * @field_pic: whether the reference is a field picture or a frame.
+ * @pic_order_cnt: the picture order count of the reference.
+ */
+struct v4l2_hevc_dpb_entry {
+	__u64	timestamp;
+	__u8	flags;
+	__u8	field_pic;
+	__u16	pic_order_cnt[2];
+	__u8	padding[2];
+};
+
+/**
+ * struct v4l2_hevc_pred_weight_table - HEVC weighted prediction parameters
+ *
+ * @delta_luma_weight_l0: the difference of the weighting factor applied
+ *			  to the luma prediction value for list 0
+ * @luma_offset_l0: the additive offset applied to the luma prediction value
+ *		    for list 0
+ * @delta_chroma_weight_l0: the difference of the weighting factor applied
+ *			    to the chroma prediction values for list 0
+ * @chroma_offset_l0: the difference of the additive offset applied to
+ *		      the chroma prediction values for list 0
+ * @delta_luma_weight_l1: the difference of the weighting factor applied
+ *			  to the luma prediction value for list 1
+ * @luma_offset_l1: the additive offset applied to the luma prediction value
+ *		    for list 1
+ * @delta_chroma_weight_l1: the difference of the weighting factor applied
+ *			    to the chroma prediction values for list 1
+ * @chroma_offset_l1: the difference of the additive offset applied to
+ *		      the chroma prediction values for list 1
+ * @luma_log2_weight_denom: the base 2 logarithm of the denominator for
+ *			    all luma weighting factors
+ * @delta_chroma_log2_weight_denom: the difference of the base 2 logarithm
+ *				    of the denominator for all chroma
+ *				    weighting factors
+ */
+struct v4l2_hevc_pred_weight_table {
+	__s8	delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+	__s8	luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+	__s8	delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
+	__s8	chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
+
+	__s8	delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+	__s8	luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+	__s8	delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
+	__s8	chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2];
+
+	__u8	luma_log2_weight_denom;
+	__s8	delta_chroma_log2_weight_denom;
+};
+
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_LUMA		(1ULL << 0)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_SAO_CHROMA		(1ULL << 1)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_TEMPORAL_MVP_ENABLED	(1ULL << 2)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_MVD_L1_ZERO			(1ULL << 3)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_CABAC_INIT			(1ULL << 4)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_COLLOCATED_FROM_L0		(1ULL << 5)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_USE_INTEGER_MV		(1ULL << 6)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_DEBLOCKING_FILTER_DISABLED (1ULL << 7)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 8)
+#define V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT	(1ULL << 9)
+
+/**
+ * v4l2_ctrl_hevc_slice_params - HEVC slice parameters
+ *
+ * This control is a dynamically sized 1-dimensional array,
+ * V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
+ *
+ * @bit_size: size (in bits) of the current slice data
+ * @data_byte_offset: offset (in bytes) to the video data in the current slice data
+ * @num_entry_point_offsets: specifies the number of entry point offset syntax
+ *			     elements in the slice header.
+ * @nal_unit_type: specifies the coding type of the slice (B, P or I)
+ * @nuh_temporal_id_plus1: minus 1 specifies a temporal identifier for the NAL unit
+ * @slice_type: see V4L2_HEVC_SLICE_TYPE_{}
+ * @colour_plane_id: specifies the colour plane associated with the current slice
+ * @slice_pic_order_cnt: specifies the picture order count
+ * @num_ref_idx_l0_active_minus1: specifies the maximum reference index for reference
+ *				  picture list 0 that may be used to decode the slice
+ * @num_ref_idx_l1_active_minus1: specifies the maximum reference index for reference
+ *				  picture list 1 that may be used to decode the slice
+ * @collocated_ref_idx: specifies the reference index of the collocated picture used
+ *			for temporal motion vector prediction
+ * @five_minus_max_num_merge_cand: specifies the maximum number of merging
+ *				   motion vector prediction candidates supported in
+ *				   the slice subtracted from 5
+ * @slice_qp_delta: specifies the initial value of QpY to be used for the coding
+ *		    blocks in the slice
+ * @slice_cb_qp_offset: specifies a difference to be added to the value of pps_cb_qp_offset
+ * @slice_cr_qp_offset: specifies a difference to be added to the value of pps_cr_qp_offset
+ * @slice_act_y_qp_offset: screen content extension parameters
+ * @slice_act_cb_qp_offset: screen content extension parameters
+ * @slice_act_cr_qp_offset: screen content extension parameters
+ * @slice_beta_offset_div2: specify the deblocking parameter offsets for beta divided by 2
+ * @slice_tc_offset_div2: specify the deblocking parameter offsets for tC divided by 2
+ * @pic_struct: indicates whether a picture should be displayed as a frame or as one or
+ *		more fields
+ * @slice_segment_addr: specifies the address of the first coding tree block in
+ *			the slice segment
+ * @ref_idx_l0: the list of L0 reference elements as indices in the DPB
+ * @ref_idx_l1: the list of L1 reference elements as indices in the DPB
+ * @short_term_ref_pic_set_size: specifies the number of st_ref_pic_set()
+ *				 syntax structures included in the SPS
+ * @long_term_ref_pic_set_size: specifies the number of candidate long-term
+ *				reference pictures that are specified in the SPS
+ * @pred_weight_table: the prediction weight coefficients for inter-picture
+ *		       prediction
+ * @flags: see V4L2_HEVC_SLICE_PARAMS_FLAG_{}
+ */
+struct v4l2_ctrl_hevc_slice_params {
+	__u32	bit_size;
+	__u32	data_byte_offset;
+	__u32	num_entry_point_offsets;
+
+	/* ISO/IEC 23008-2, ITU-T Rec. H.265: NAL unit header */
+	__u8	nal_unit_type;
+	__u8	nuh_temporal_id_plus1;
+
+	/* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
+	__u8	slice_type;
+	__u8	colour_plane_id;
+	__u16	slice_pic_order_cnt;
+	__u8	num_ref_idx_l0_active_minus1;
+	__u8	num_ref_idx_l1_active_minus1;
+	__u8	collocated_ref_idx;
+	__u8	five_minus_max_num_merge_cand;
+	__s8	slice_qp_delta;
+	__s8	slice_cb_qp_offset;
+	__s8	slice_cr_qp_offset;
+	__s8	slice_act_y_qp_offset;
+	__s8	slice_act_cb_qp_offset;
+	__s8	slice_act_cr_qp_offset;
+	__s8	slice_beta_offset_div2;
+	__s8	slice_tc_offset_div2;
+
+	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture timing SEI message */
+	__u8	pic_struct;
+
+	__u8	reserved;
+	/* ISO/IEC 23008-2, ITU-T Rec. H.265: General slice segment header */
+	__u32	slice_segment_addr;
+	__u8	ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+	__u8	ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+	__u16	short_term_ref_pic_set_size;
+	__u16	long_term_ref_pic_set_size;
+
+	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction parameter */
+	struct v4l2_hevc_pred_weight_table pred_weight_table;
+
+	__u8	reserved1[6];
+	__u64	flags;
+	__u8	padding[40];
+};
+
+#define V4L2_HEVC_DECODE_PARAM_FLAG_IRAP_PIC		0x1
+#define V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC		0x2
+#define V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR  0x4
+
+/**
+ * struct v4l2_ctrl_hevc_decode_params - HEVC decode parameters
+ *
+ * @pic_order_cnt_val: picture order count
+ * @num_active_dpb_entries: the number of entries in dpb
+ * @num_poc_st_curr_before: the number of reference pictures in the short-term
+ *			    set that come before the current frame
+ * @num_poc_st_curr_after: the number of reference pictures in the short-term
+ *			   set that come after the current frame
+ * @num_poc_lt_curr: the number of reference pictures in the long-term set
+ * @poc_st_curr_before: provides the index of the short term before references
+ *			in DPB array
+ * @poc_st_curr_after: provides the index of the short term after references
+ *		       in DPB array
+ * @poc_lt_curr: provides the index of the long term references in DPB array
+ * @dpb: the decoded picture buffer, for meta-data about reference frames
+ * @flags: see V4L2_HEVC_DECODE_PARAM_FLAG_{}
+ */
+struct v4l2_ctrl_hevc_decode_params {
+	__s32	pic_order_cnt_val;
+	__u8	num_active_dpb_entries;
+	__u8	num_poc_st_curr_before;
+	__u8	num_poc_st_curr_after;
+	__u8	num_poc_lt_curr;
+	__u8	poc_st_curr_before[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+	__u8	poc_st_curr_after[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+	__u8	poc_lt_curr[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+	struct	v4l2_hevc_dpb_entry dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
+	__u64	flags;
+};
+
+/**
+ * struct v4l2_ctrl_hevc_scaling_matrix - HEVC scaling lists parameters
+ *
+ * @scaling_list_4x4: scaling list is used for the scaling process for
+ *		      transform coefficients. The values on each scaling
+ *		      list are expected in raster scan order
+ * @scaling_list_8x8: scaling list is used for the scaling process for
+ *		      transform coefficients. The values on each scaling
+ *		      list are expected in raster scan order
+ * @scaling_list_16x16:	scaling list is used for the scaling process for
+ *			transform coefficients. The values on each scaling
+ *			list are expected in raster scan order
+ * @scaling_list_32x32:	scaling list is used for the scaling process for
+ *			transform coefficients. The values on each scaling
+ *			list are expected in raster scan order
+ * @scaling_list_dc_coef_16x16:	scaling list is used for the scaling process
+ *				for transform coefficients. The values on each
+ *				scaling list are expected in raster scan order.
+ * @scaling_list_dc_coef_32x32:	scaling list is used for the scaling process
+ *				for transform coefficients. The values on each
+ *				scaling list are expected in raster scan order.
+ */
+struct v4l2_ctrl_hevc_scaling_matrix {
+	__u8	scaling_list_4x4[6][16];
+	__u8	scaling_list_8x8[6][64];
+	__u8	scaling_list_16x16[6][64];
+	__u8	scaling_list_32x32[2][64];
+	__u8	scaling_list_dc_coef_16x16[6];
+	__u8	scaling_list_dc_coef_32x32[2];
+};
+
 #define V4L2_CID_COLORIMETRY_CLASS_BASE	(V4L2_CTRL_CLASS_COLORIMETRY | 0x900)
 #define V4L2_CID_COLORIMETRY_CLASS	(V4L2_CTRL_CLASS_COLORIMETRY | 1)
 
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index 9af1c2460148..392ab517d256 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -1763,6 +1763,11 @@ struct v4l2_ext_control {
 		struct v4l2_ctrl_mpeg2_quantisation __user *p_mpeg2_quantisation;
 		struct v4l2_ctrl_vp9_compressed_hdr __user *p_vp9_compressed_hdr_probs;
 		struct v4l2_ctrl_vp9_frame __user *p_vp9_frame;
+		struct v4l2_ctrl_hevc_sps __user *p_hevc_sps;
+		struct v4l2_ctrl_hevc_pps __user *p_hevc_pps;
+		struct v4l2_ctrl_hevc_slice_params __user *p_hevc_slice_params;
+		struct v4l2_ctrl_hevc_scaling_matrix __user *p_hevc_scaling_matrix;
+		struct v4l2_ctrl_hevc_decode_params __user *p_hevc_decode_params;
 		void __user *ptr;
 	};
 } __attribute__ ((packed));
-- 
2.32.0


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

* Re: [PATCH v4 04/15] media: uapi: HEVC: Add missing fields in HEVC controls
  2022-02-28 14:08   ` Benjamin Gaignard
@ 2022-02-28 16:57     ` Sebastian Fricke
  -1 siblings, 0 replies; 81+ messages in thread
From: Sebastian Fricke @ 2022-02-28 16:57 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas, linux-media, linux-kernel,
	linux-staging, linux-arm-kernel, linux-sunxi, kernel, knaerzche,
	jc

Hey Benjamin,

On 28.02.2022 15:08, Benjamin Gaignard wrote:
>Complete the HEVC controls with missing fields from H.265 specifications.
>Even if these fields aren't used by the current mainlined drivers
>they will be need for (at least) rkvdec driver.
>
>Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
>---
> .../media/v4l/ext-ctrls-codec.rst             | 22 +++++++++++++++++++
> include/media/hevc-ctrls.h                    |  6 ++++-
> 2 files changed, 27 insertions(+), 1 deletion(-)
>
>diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>index 4cd7c541fc30..d096cb75993a 100644
>--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>@@ -2661,6 +2661,16 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>     :stub-columns: 0
>     :widths:       1 1 2
>
>+    * - __u8
>+      - ``video_parameter_set_id``
>+      - Specifies the value of the vps_video_parameter_set_id of the active VPS
>+        as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
>+        of H.265 specifications.
>+    * - __u8
>+      - ``seq_parameter_set_id``
>+      - Provides an identifier for the SPS for reference by other syntax elements
>+        as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
>+        of H.265 specifications.
>     * - __u16
>       - ``pic_width_in_luma_samples``
>       -
>@@ -2800,6 +2810,9 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>     :stub-columns: 0
>     :widths:       1 1 2
>
>+    * - __u8
>+      - ``pic_parameter_set_id``
>+      - Identifies the PPS for reference by other syntax elements.
>     * - __u8
>       - ``num_extra_slice_header_bits``
>       -
>@@ -3026,6 +3039,15 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>     * - __u8
>       - ``ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>       - The list of L1 reference elements as indices in the DPB.
>+    * - __u16
>+      - ``short_term_ref_pic_set_size``
>+      - Specifies the number of st_ref_pic_set( ) syntax structures included in the SPS.
>+        The value of num_short_term_ref_pic_sets shall be in the range of 0 to 64, inclusive.
>+    * - __u16
>+      - ``long_term_ref_pic_set_size``
>+      - Specifies the number of candidate long-term reference pictures that are specified
>+        in the SPS. The value of num_long_term_ref_pics_sps shall be in the range
>+        of 0 to 32, inclusive.
>     * - __u8

I would like to argue that the names for these fields are not optimal.

The are quite similar to the ones from the specification:
`num_short_term_ref_pic_sets` & `num_long_term_ref_pics_sps`, while
they actually do something different. (Which means that descriptions for
the fields are sadly incorrect as well)

Looking at the code from the H265 parser in GStreamer:
```
       READ_UINT8 (&nr, slice->short_term_ref_pic_set_sps_flag, 1);
       if (!slice->short_term_ref_pic_set_sps_flag) {
         guint pos = nal_reader_get_pos (&nr);
         if (!gst_h265_parser_parse_short_term_ref_pic_sets
             (&slice->short_term_ref_pic_sets, &nr,
                 sps->num_short_term_ref_pic_sets, sps))
           goto error;

         slice->short_term_ref_pic_set_size = nal_reader_get_pos (&nr) - pos;
```

We can see that the `short_term_ref_pic_set_size` is calculated by
gettting the difference between the nal_reader position before calling
`gst_h265_parser_parse_short_term_ref_pic_sets` and the position of the
nal reader afterwards.
The variable `num_short_term_ref_pic_sets` is used as part of the short
term reference picture set parsing process, but it is not directly
related to `short_term_ref_pic_set_size` (otherwise a direct
transformation of `num_short_term_ref_pic_sets` ->
`short_term_ref_pic_set_size` would have been way easier)

Further when I look at a patch from Alex Bee for RKVDEC that uses these
fields (actually the only user) (https://github.com/LibreELEC/LibreELEC.tv/blob/master/projects/Rockchip/patches/linux/default/linux-2000-v4l2-wip-rkvdec-hevc.patch#L3007)
I can see that he describes them as bit offsets.

So, to avoid confusion, I would argue that we should rename these
(They are not part of the specification anyway)

s/short_term_ref_pic_set_size/short_term_ref_pic_set_bit_offset/
s/long_term_ref_pic_set_size/long_term_ref_pic_set_bit_offset/

These names describe the purpose and the content a bit better and avoid
confusion with existing values.

Additonally, I noticed that calculating the bit offset for the long term
is a bit tricky. I wasn't able to find a direct reference in
'non-vendor' code.

The process for parsing the short term reference picture set is depicted with a lot of detail in
the specification, but I wasn't able to find the something equivalent for the long term
reference picture set.

Having a switft look into mpp, I can see at:
https://github.com/JeffyCN/rockchip_mirrors/blob/mpp/mpp/hal/rkdec/h265d/hal_h265d_com.c#L512

That they do roughly the same short term is simply the read bits by the
BitReader - the read bits before the operation on the short term
reference picture set. (so very similar to what the h265 parser does in
GStreamer)
The bit offset for long term is equal to short term unless the
`long_term_ref_pics_present_flag` is set. In which case, we perform some
operations on the long term reference picture set and add the amount of
used bits to the bit offset.

Greetings,
Sebastian

>       - ``padding``
>       - Applications and drivers must set this to zero.
>diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
>index 01ccda48d8c5..a329e086a89a 100644
>--- a/include/media/hevc-ctrls.h
>+++ b/include/media/hevc-ctrls.h
>@@ -58,6 +58,8 @@ enum v4l2_mpeg_video_hevc_start_code {
> /* The controls are not stable at the moment and will likely be reworked. */
> struct v4l2_ctrl_hevc_sps {
> 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Sequence parameter set */
>+	__u8	video_parameter_set_id;
>+	__u8	seq_parameter_set_id;
> 	__u16	pic_width_in_luma_samples;
> 	__u16	pic_height_in_luma_samples;
> 	__u8	bit_depth_luma_minus8;
>@@ -108,6 +110,7 @@ struct v4l2_ctrl_hevc_sps {
>
> struct v4l2_ctrl_hevc_pps {
> 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture parameter set */
>+	__u8	pic_parameter_set_id;
> 	__u8	num_extra_slice_header_bits;
> 	__u8	num_ref_idx_l0_default_active_minus1;
> 	__u8	num_ref_idx_l1_default_active_minus1;
>@@ -199,7 +202,8 @@ struct v4l2_ctrl_hevc_slice_params {
> 	__u32	slice_segment_addr;
> 	__u8	ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
> 	__u8	ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>-
>+	__u16	short_term_ref_pic_set_size;
>+	__u16	long_term_ref_pic_set_size;
> 	__u8	padding;
>
> 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction parameter */
>-- 
>2.32.0
>

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

* Re: [PATCH v4 04/15] media: uapi: HEVC: Add missing fields in HEVC controls
@ 2022-02-28 16:57     ` Sebastian Fricke
  0 siblings, 0 replies; 81+ messages in thread
From: Sebastian Fricke @ 2022-02-28 16:57 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas, linux-media, linux-kernel,
	linux-staging, linux-arm-kernel, linux-sunxi, kernel, knaerzche,
	jc

Hey Benjamin,

On 28.02.2022 15:08, Benjamin Gaignard wrote:
>Complete the HEVC controls with missing fields from H.265 specifications.
>Even if these fields aren't used by the current mainlined drivers
>they will be need for (at least) rkvdec driver.
>
>Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
>---
> .../media/v4l/ext-ctrls-codec.rst             | 22 +++++++++++++++++++
> include/media/hevc-ctrls.h                    |  6 ++++-
> 2 files changed, 27 insertions(+), 1 deletion(-)
>
>diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>index 4cd7c541fc30..d096cb75993a 100644
>--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>@@ -2661,6 +2661,16 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>     :stub-columns: 0
>     :widths:       1 1 2
>
>+    * - __u8
>+      - ``video_parameter_set_id``
>+      - Specifies the value of the vps_video_parameter_set_id of the active VPS
>+        as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
>+        of H.265 specifications.
>+    * - __u8
>+      - ``seq_parameter_set_id``
>+      - Provides an identifier for the SPS for reference by other syntax elements
>+        as descibed in section "7.4.3.2.1 General sequence parameter set RBSP semantics"
>+        of H.265 specifications.
>     * - __u16
>       - ``pic_width_in_luma_samples``
>       -
>@@ -2800,6 +2810,9 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>     :stub-columns: 0
>     :widths:       1 1 2
>
>+    * - __u8
>+      - ``pic_parameter_set_id``
>+      - Identifies the PPS for reference by other syntax elements.
>     * - __u8
>       - ``num_extra_slice_header_bits``
>       -
>@@ -3026,6 +3039,15 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>     * - __u8
>       - ``ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>       - The list of L1 reference elements as indices in the DPB.
>+    * - __u16
>+      - ``short_term_ref_pic_set_size``
>+      - Specifies the number of st_ref_pic_set( ) syntax structures included in the SPS.
>+        The value of num_short_term_ref_pic_sets shall be in the range of 0 to 64, inclusive.
>+    * - __u16
>+      - ``long_term_ref_pic_set_size``
>+      - Specifies the number of candidate long-term reference pictures that are specified
>+        in the SPS. The value of num_long_term_ref_pics_sps shall be in the range
>+        of 0 to 32, inclusive.
>     * - __u8

I would like to argue that the names for these fields are not optimal.

The are quite similar to the ones from the specification:
`num_short_term_ref_pic_sets` & `num_long_term_ref_pics_sps`, while
they actually do something different. (Which means that descriptions for
the fields are sadly incorrect as well)

Looking at the code from the H265 parser in GStreamer:
```
       READ_UINT8 (&nr, slice->short_term_ref_pic_set_sps_flag, 1);
       if (!slice->short_term_ref_pic_set_sps_flag) {
         guint pos = nal_reader_get_pos (&nr);
         if (!gst_h265_parser_parse_short_term_ref_pic_sets
             (&slice->short_term_ref_pic_sets, &nr,
                 sps->num_short_term_ref_pic_sets, sps))
           goto error;

         slice->short_term_ref_pic_set_size = nal_reader_get_pos (&nr) - pos;
```

We can see that the `short_term_ref_pic_set_size` is calculated by
gettting the difference between the nal_reader position before calling
`gst_h265_parser_parse_short_term_ref_pic_sets` and the position of the
nal reader afterwards.
The variable `num_short_term_ref_pic_sets` is used as part of the short
term reference picture set parsing process, but it is not directly
related to `short_term_ref_pic_set_size` (otherwise a direct
transformation of `num_short_term_ref_pic_sets` ->
`short_term_ref_pic_set_size` would have been way easier)

Further when I look at a patch from Alex Bee for RKVDEC that uses these
fields (actually the only user) (https://github.com/LibreELEC/LibreELEC.tv/blob/master/projects/Rockchip/patches/linux/default/linux-2000-v4l2-wip-rkvdec-hevc.patch#L3007)
I can see that he describes them as bit offsets.

So, to avoid confusion, I would argue that we should rename these
(They are not part of the specification anyway)

s/short_term_ref_pic_set_size/short_term_ref_pic_set_bit_offset/
s/long_term_ref_pic_set_size/long_term_ref_pic_set_bit_offset/

These names describe the purpose and the content a bit better and avoid
confusion with existing values.

Additonally, I noticed that calculating the bit offset for the long term
is a bit tricky. I wasn't able to find a direct reference in
'non-vendor' code.

The process for parsing the short term reference picture set is depicted with a lot of detail in
the specification, but I wasn't able to find the something equivalent for the long term
reference picture set.

Having a switft look into mpp, I can see at:
https://github.com/JeffyCN/rockchip_mirrors/blob/mpp/mpp/hal/rkdec/h265d/hal_h265d_com.c#L512

That they do roughly the same short term is simply the read bits by the
BitReader - the read bits before the operation on the short term
reference picture set. (so very similar to what the h265 parser does in
GStreamer)
The bit offset for long term is equal to short term unless the
`long_term_ref_pics_present_flag` is set. In which case, we perform some
operations on the long term reference picture set and add the amount of
used bits to the bit offset.

Greetings,
Sebastian

>       - ``padding``
>       - Applications and drivers must set this to zero.
>diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
>index 01ccda48d8c5..a329e086a89a 100644
>--- a/include/media/hevc-ctrls.h
>+++ b/include/media/hevc-ctrls.h
>@@ -58,6 +58,8 @@ enum v4l2_mpeg_video_hevc_start_code {
> /* The controls are not stable at the moment and will likely be reworked. */
> struct v4l2_ctrl_hevc_sps {
> 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Sequence parameter set */
>+	__u8	video_parameter_set_id;
>+	__u8	seq_parameter_set_id;
> 	__u16	pic_width_in_luma_samples;
> 	__u16	pic_height_in_luma_samples;
> 	__u8	bit_depth_luma_minus8;
>@@ -108,6 +110,7 @@ struct v4l2_ctrl_hevc_sps {
>
> struct v4l2_ctrl_hevc_pps {
> 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture parameter set */
>+	__u8	pic_parameter_set_id;
> 	__u8	num_extra_slice_header_bits;
> 	__u8	num_ref_idx_l0_default_active_minus1;
> 	__u8	num_ref_idx_l1_default_active_minus1;
>@@ -199,7 +202,8 @@ struct v4l2_ctrl_hevc_slice_params {
> 	__u32	slice_segment_addr;
> 	__u8	ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
> 	__u8	ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>-
>+	__u16	short_term_ref_pic_set_size;
>+	__u16	long_term_ref_pic_set_size;
> 	__u8	padding;
>
> 	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction parameter */
>-- 
>2.32.0
>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 04/15] media: uapi: HEVC: Add missing fields in HEVC controls
  2022-02-28 16:57     ` Sebastian Fricke
@ 2022-03-01 10:36       ` Benjamin Gaignard
  -1 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-03-01 10:36 UTC (permalink / raw)
  To: Sebastian Fricke
  Cc: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas, linux-media, linux-kernel,
	linux-staging, linux-arm-kernel, linux-sunxi, kernel, knaerzche,
	jc


Le 28/02/2022 à 17:57, Sebastian Fricke a écrit :
> Hey Benjamin,
>
> On 28.02.2022 15:08, Benjamin Gaignard wrote:
>> Complete the HEVC controls with missing fields from H.265 
>> specifications.
>> Even if these fields aren't used by the current mainlined drivers
>> they will be need for (at least) rkvdec driver.
>>
>> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
>> ---
>> .../media/v4l/ext-ctrls-codec.rst             | 22 +++++++++++++++++++
>> include/media/hevc-ctrls.h                    |  6 ++++-
>> 2 files changed, 27 insertions(+), 1 deletion(-)
>>
>> diff --git 
>> a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst 
>> b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>> index 4cd7c541fc30..d096cb75993a 100644
>> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>> @@ -2661,6 +2661,16 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>>     :stub-columns: 0
>>     :widths:       1 1 2
>>
>> +    * - __u8
>> +      - ``video_parameter_set_id``
>> +      - Specifies the value of the vps_video_parameter_set_id of the 
>> active VPS
>> +        as descibed in section "7.4.3.2.1 General sequence parameter 
>> set RBSP semantics"
>> +        of H.265 specifications.
>> +    * - __u8
>> +      - ``seq_parameter_set_id``
>> +      - Provides an identifier for the SPS for reference by other 
>> syntax elements
>> +        as descibed in section "7.4.3.2.1 General sequence parameter 
>> set RBSP semantics"
>> +        of H.265 specifications.
>>     * - __u16
>>       - ``pic_width_in_luma_samples``
>>       -
>> @@ -2800,6 +2810,9 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>>     :stub-columns: 0
>>     :widths:       1 1 2
>>
>> +    * - __u8
>> +      - ``pic_parameter_set_id``
>> +      - Identifies the PPS for reference by other syntax elements.
>>     * - __u8
>>       - ``num_extra_slice_header_bits``
>>       -
>> @@ -3026,6 +3039,15 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>>     * - __u8
>>       - ``ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>>       - The list of L1 reference elements as indices in the DPB.
>> +    * - __u16
>> +      - ``short_term_ref_pic_set_size``
>> +      - Specifies the number of st_ref_pic_set( ) syntax structures 
>> included in the SPS.
>> +        The value of num_short_term_ref_pic_sets shall be in the 
>> range of 0 to 64, inclusive.
>> +    * - __u16
>> +      - ``long_term_ref_pic_set_size``
>> +      - Specifies the number of candidate long-term reference 
>> pictures that are specified
>> +        in the SPS. The value of num_long_term_ref_pics_sps shall be 
>> in the range
>> +        of 0 to 32, inclusive.
>>     * - __u8
>
> I would like to argue that the names for these fields are not optimal.
>
> The are quite similar to the ones from the specification:
> `num_short_term_ref_pic_sets` & `num_long_term_ref_pics_sps`, while
> they actually do something different. (Which means that descriptions for
> the fields are sadly incorrect as well)
>
> Looking at the code from the H265 parser in GStreamer:
> ```
>       READ_UINT8 (&nr, slice->short_term_ref_pic_set_sps_flag, 1);
>       if (!slice->short_term_ref_pic_set_sps_flag) {
>         guint pos = nal_reader_get_pos (&nr);
>         if (!gst_h265_parser_parse_short_term_ref_pic_sets
>             (&slice->short_term_ref_pic_sets, &nr,
>                 sps->num_short_term_ref_pic_sets, sps))
>           goto error;
>
>         slice->short_term_ref_pic_set_size = nal_reader_get_pos (&nr) 
> - pos;
> ```
>
> We can see that the `short_term_ref_pic_set_size` is calculated by
> gettting the difference between the nal_reader position before calling
> `gst_h265_parser_parse_short_term_ref_pic_sets` and the position of the
> nal reader afterwards.
> The variable `num_short_term_ref_pic_sets` is used as part of the short
> term reference picture set parsing process, but it is not directly
> related to `short_term_ref_pic_set_size` (otherwise a direct
> transformation of `num_short_term_ref_pic_sets` ->
> `short_term_ref_pic_set_size` would have been way easier)
>
> Further when I look at a patch from Alex Bee for RKVDEC that uses these
> fields (actually the only user) 
> (https://github.com/LibreELEC/LibreELEC.tv/blob/master/projects/Rockchip/patches/linux/default/linux-2000-v4l2-wip-rkvdec-hevc.patch#L3007)
> I can see that he describes them as bit offsets.
>
> So, to avoid confusion, I would argue that we should rename these
> (They are not part of the specification anyway)
>
> s/short_term_ref_pic_set_size/short_term_ref_pic_set_bit_offset/
> s/long_term_ref_pic_set_size/long_term_ref_pic_set_bit_offset/
>
> These names describe the purpose and the content a bit better and avoid
> confusion with existing values.
>
> Additonally, I noticed that calculating the bit offset for the long term
> is a bit tricky. I wasn't able to find a direct reference in
> 'non-vendor' code.
>
> The process for parsing the short term reference picture set is 
> depicted with a lot of detail in
> the specification, but I wasn't able to find the something equivalent 
> for the long term
> reference picture set.
>
> Having a switft look into mpp, I can see at:
> https://github.com/JeffyCN/rockchip_mirrors/blob/mpp/mpp/hal/rkdec/h265d/hal_h265d_com.c#L512 
>
>
> That they do roughly the same short term is simply the read bits by the
> BitReader - the read bits before the operation on the short term
> reference picture set. (so very similar to what the h265 parser does in
> GStreamer)
> The bit offset for long term is equal to short term unless the
> `long_term_ref_pics_present_flag` is set. In which case, we perform some
> operations on the long term reference picture set and add the amount of
> used bits to the bit offset.

I think the names are correct, these fields provides the size of short and long term ref picture.

It isn't an offset as you explain your self it is the diff between end and start of reference picture in the bitstream.

The documentation is incorrect, I will fix it in the next version like this:
* @short_term_ref_pic_set_size: specifies the size of short-term reference
*				 pictures included in the SPS
* @long_term_ref_pic_set_size: specifies the size of long-term reference
*				picture include in the SPS

Thanks,
Benjamin

>
> Greetings,
> Sebastian
>
>>       - ``padding``
>>       - Applications and drivers must set this to zero.
>> diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
>> index 01ccda48d8c5..a329e086a89a 100644
>> --- a/include/media/hevc-ctrls.h
>> +++ b/include/media/hevc-ctrls.h
>> @@ -58,6 +58,8 @@ enum v4l2_mpeg_video_hevc_start_code {
>> /* The controls are not stable at the moment and will likely be 
>> reworked. */
>> struct v4l2_ctrl_hevc_sps {
>>     /* ISO/IEC 23008-2, ITU-T Rec. H.265: Sequence parameter set */
>> +    __u8    video_parameter_set_id;
>> +    __u8    seq_parameter_set_id;
>>     __u16    pic_width_in_luma_samples;
>>     __u16    pic_height_in_luma_samples;
>>     __u8    bit_depth_luma_minus8;
>> @@ -108,6 +110,7 @@ struct v4l2_ctrl_hevc_sps {
>>
>> struct v4l2_ctrl_hevc_pps {
>>     /* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture parameter set */
>> +    __u8    pic_parameter_set_id;
>>     __u8    num_extra_slice_header_bits;
>>     __u8    num_ref_idx_l0_default_active_minus1;
>>     __u8    num_ref_idx_l1_default_active_minus1;
>> @@ -199,7 +202,8 @@ struct v4l2_ctrl_hevc_slice_params {
>>     __u32    slice_segment_addr;
>>     __u8    ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>>     __u8    ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>> -
>> +    __u16    short_term_ref_pic_set_size;
>> +    __u16    long_term_ref_pic_set_size;
>>     __u8    padding;
>>
>>     /* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction 
>> parameter */
>> -- 
>> 2.32.0
>>
>

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

* Re: [PATCH v4 04/15] media: uapi: HEVC: Add missing fields in HEVC controls
@ 2022-03-01 10:36       ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-03-01 10:36 UTC (permalink / raw)
  To: Sebastian Fricke
  Cc: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas, linux-media, linux-kernel,
	linux-staging, linux-arm-kernel, linux-sunxi, kernel, knaerzche,
	jc


Le 28/02/2022 à 17:57, Sebastian Fricke a écrit :
> Hey Benjamin,
>
> On 28.02.2022 15:08, Benjamin Gaignard wrote:
>> Complete the HEVC controls with missing fields from H.265 
>> specifications.
>> Even if these fields aren't used by the current mainlined drivers
>> they will be need for (at least) rkvdec driver.
>>
>> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
>> ---
>> .../media/v4l/ext-ctrls-codec.rst             | 22 +++++++++++++++++++
>> include/media/hevc-ctrls.h                    |  6 ++++-
>> 2 files changed, 27 insertions(+), 1 deletion(-)
>>
>> diff --git 
>> a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst 
>> b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>> index 4cd7c541fc30..d096cb75993a 100644
>> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>> @@ -2661,6 +2661,16 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>>     :stub-columns: 0
>>     :widths:       1 1 2
>>
>> +    * - __u8
>> +      - ``video_parameter_set_id``
>> +      - Specifies the value of the vps_video_parameter_set_id of the 
>> active VPS
>> +        as descibed in section "7.4.3.2.1 General sequence parameter 
>> set RBSP semantics"
>> +        of H.265 specifications.
>> +    * - __u8
>> +      - ``seq_parameter_set_id``
>> +      - Provides an identifier for the SPS for reference by other 
>> syntax elements
>> +        as descibed in section "7.4.3.2.1 General sequence parameter 
>> set RBSP semantics"
>> +        of H.265 specifications.
>>     * - __u16
>>       - ``pic_width_in_luma_samples``
>>       -
>> @@ -2800,6 +2810,9 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>>     :stub-columns: 0
>>     :widths:       1 1 2
>>
>> +    * - __u8
>> +      - ``pic_parameter_set_id``
>> +      - Identifies the PPS for reference by other syntax elements.
>>     * - __u8
>>       - ``num_extra_slice_header_bits``
>>       -
>> @@ -3026,6 +3039,15 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>>     * - __u8
>>       - ``ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>>       - The list of L1 reference elements as indices in the DPB.
>> +    * - __u16
>> +      - ``short_term_ref_pic_set_size``
>> +      - Specifies the number of st_ref_pic_set( ) syntax structures 
>> included in the SPS.
>> +        The value of num_short_term_ref_pic_sets shall be in the 
>> range of 0 to 64, inclusive.
>> +    * - __u16
>> +      - ``long_term_ref_pic_set_size``
>> +      - Specifies the number of candidate long-term reference 
>> pictures that are specified
>> +        in the SPS. The value of num_long_term_ref_pics_sps shall be 
>> in the range
>> +        of 0 to 32, inclusive.
>>     * - __u8
>
> I would like to argue that the names for these fields are not optimal.
>
> The are quite similar to the ones from the specification:
> `num_short_term_ref_pic_sets` & `num_long_term_ref_pics_sps`, while
> they actually do something different. (Which means that descriptions for
> the fields are sadly incorrect as well)
>
> Looking at the code from the H265 parser in GStreamer:
> ```
>       READ_UINT8 (&nr, slice->short_term_ref_pic_set_sps_flag, 1);
>       if (!slice->short_term_ref_pic_set_sps_flag) {
>         guint pos = nal_reader_get_pos (&nr);
>         if (!gst_h265_parser_parse_short_term_ref_pic_sets
>             (&slice->short_term_ref_pic_sets, &nr,
>                 sps->num_short_term_ref_pic_sets, sps))
>           goto error;
>
>         slice->short_term_ref_pic_set_size = nal_reader_get_pos (&nr) 
> - pos;
> ```
>
> We can see that the `short_term_ref_pic_set_size` is calculated by
> gettting the difference between the nal_reader position before calling
> `gst_h265_parser_parse_short_term_ref_pic_sets` and the position of the
> nal reader afterwards.
> The variable `num_short_term_ref_pic_sets` is used as part of the short
> term reference picture set parsing process, but it is not directly
> related to `short_term_ref_pic_set_size` (otherwise a direct
> transformation of `num_short_term_ref_pic_sets` ->
> `short_term_ref_pic_set_size` would have been way easier)
>
> Further when I look at a patch from Alex Bee for RKVDEC that uses these
> fields (actually the only user) 
> (https://github.com/LibreELEC/LibreELEC.tv/blob/master/projects/Rockchip/patches/linux/default/linux-2000-v4l2-wip-rkvdec-hevc.patch#L3007)
> I can see that he describes them as bit offsets.
>
> So, to avoid confusion, I would argue that we should rename these
> (They are not part of the specification anyway)
>
> s/short_term_ref_pic_set_size/short_term_ref_pic_set_bit_offset/
> s/long_term_ref_pic_set_size/long_term_ref_pic_set_bit_offset/
>
> These names describe the purpose and the content a bit better and avoid
> confusion with existing values.
>
> Additonally, I noticed that calculating the bit offset for the long term
> is a bit tricky. I wasn't able to find a direct reference in
> 'non-vendor' code.
>
> The process for parsing the short term reference picture set is 
> depicted with a lot of detail in
> the specification, but I wasn't able to find the something equivalent 
> for the long term
> reference picture set.
>
> Having a switft look into mpp, I can see at:
> https://github.com/JeffyCN/rockchip_mirrors/blob/mpp/mpp/hal/rkdec/h265d/hal_h265d_com.c#L512 
>
>
> That they do roughly the same short term is simply the read bits by the
> BitReader - the read bits before the operation on the short term
> reference picture set. (so very similar to what the h265 parser does in
> GStreamer)
> The bit offset for long term is equal to short term unless the
> `long_term_ref_pics_present_flag` is set. In which case, we perform some
> operations on the long term reference picture set and add the amount of
> used bits to the bit offset.

I think the names are correct, these fields provides the size of short and long term ref picture.

It isn't an offset as you explain your self it is the diff between end and start of reference picture in the bitstream.

The documentation is incorrect, I will fix it in the next version like this:
* @short_term_ref_pic_set_size: specifies the size of short-term reference
*				 pictures included in the SPS
* @long_term_ref_pic_set_size: specifies the size of long-term reference
*				picture include in the SPS

Thanks,
Benjamin

>
> Greetings,
> Sebastian
>
>>       - ``padding``
>>       - Applications and drivers must set this to zero.
>> diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
>> index 01ccda48d8c5..a329e086a89a 100644
>> --- a/include/media/hevc-ctrls.h
>> +++ b/include/media/hevc-ctrls.h
>> @@ -58,6 +58,8 @@ enum v4l2_mpeg_video_hevc_start_code {
>> /* The controls are not stable at the moment and will likely be 
>> reworked. */
>> struct v4l2_ctrl_hevc_sps {
>>     /* ISO/IEC 23008-2, ITU-T Rec. H.265: Sequence parameter set */
>> +    __u8    video_parameter_set_id;
>> +    __u8    seq_parameter_set_id;
>>     __u16    pic_width_in_luma_samples;
>>     __u16    pic_height_in_luma_samples;
>>     __u8    bit_depth_luma_minus8;
>> @@ -108,6 +110,7 @@ struct v4l2_ctrl_hevc_sps {
>>
>> struct v4l2_ctrl_hevc_pps {
>>     /* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture parameter set */
>> +    __u8    pic_parameter_set_id;
>>     __u8    num_extra_slice_header_bits;
>>     __u8    num_ref_idx_l0_default_active_minus1;
>>     __u8    num_ref_idx_l1_default_active_minus1;
>> @@ -199,7 +202,8 @@ struct v4l2_ctrl_hevc_slice_params {
>>     __u32    slice_segment_addr;
>>     __u8    ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>>     __u8    ref_idx_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>> -
>> +    __u16    short_term_ref_pic_set_size;
>> +    __u16    long_term_ref_pic_set_size;
>>     __u8    padding;
>>
>>     /* ISO/IEC 23008-2, ITU-T Rec. H.265: Weighted prediction 
>> parameter */
>> -- 
>> 2.32.0
>>
>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
  2022-02-28 14:08 ` Benjamin Gaignard
@ 2022-03-30  7:09   ` Benjamin Gaignard
  -1 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-03-30  7:09 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc


Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
> This series aims to make HEVC uapi stable and usable for hardware
> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
> and 2 out of the tree drivers (rkvdec and RPI).
>
> After the remarks done on version 2, I have completely reworked to patches
> split so changelogs are meaningless. I have also drop "RFC" from the
> titles.
>
> Version 4:
> - Add num_entry_point_offsets field in  struct v4l2_ctrl_hevc_slice_params
> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> - Fix space/tab issue in kernel-doc
> - Add patch to change data_bit_offset definition
> - Fix hantro-media SPDX license
> - put controls under stateless section in v4l2-ctrls-defs.c
>
> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.

Dear reviewers,

This series is waiting for your feedback,

Thanks,
Benjamin

>
> Benjamin
>
>
> Benjamin Gaignard (12):
>    media: uapi: HEVC: Add missing fields in HEVC controls
>    media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
>      prefix
>    media: uapi: HEVC: Add document uAPI structure
>    media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS as a
>      dynamic array
>    media: uapi: Move parsed HEVC pixel format out of staging
>    media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS control
>    media: uapi: Move the HEVC stateless control type out of staging
>    media: controls: Log HEVC stateless control in .std_log
>    media: uapi: Create a dedicated header for Hantro control
>    media: uapi: HEVC: fix padding in v4l2 control structures
>    media: uapi: Change data_bit_offset definition
>    media: uapi: move HEVC stateless controls out of staging
>
> Hans Verkuil (3):
>    videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
>    v4l2-ctrls: add support for dynamically allocated arrays.
>    vivid: add dynamic array test control
>
>   .../userspace-api/media/drivers/hantro.rst    |   5 -
>   .../media/v4l/ext-ctrls-codec-stateless.rst   | 833 ++++++++++++++++++
>   .../media/v4l/ext-ctrls-codec.rst             | 780 ----------------
>   .../media/v4l/pixfmt-compressed.rst           |   7 +-
>   .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
>   .../media/v4l/vidioc-queryctrl.rst            |   8 +
>   .../media/videodev2.h.rst.exceptions          |   5 +
>   .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
>   drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
>   drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
>   drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
>   drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
>   drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
>   drivers/staging/media/hantro/hantro_drv.c     |  27 +-
>   drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
>   drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
>   .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
>   .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
>   include/media/hevc-ctrls.h                    | 250 ------
>   include/media/v4l2-ctrls.h                    |  48 +-
>   include/uapi/linux/hantro-media.h             |  19 +
>   include/uapi/linux/v4l2-controls.h            | 439 +++++++++
>   include/uapi/linux/videodev2.h                |  13 +
>   23 files changed, 1697 insertions(+), 1170 deletions(-)
>   delete mode 100644 include/media/hevc-ctrls.h
>   create mode 100644 include/uapi/linux/hantro-media.h
>

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
@ 2022-03-30  7:09   ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-03-30  7:09 UTC (permalink / raw)
  To: mchehab, ezequiel, p.zabel, gregkh, mripard, paul.kocialkowski,
	wens, jernej.skrabec, jonas, nicolas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc


Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
> This series aims to make HEVC uapi stable and usable for hardware
> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
> and 2 out of the tree drivers (rkvdec and RPI).
>
> After the remarks done on version 2, I have completely reworked to patches
> split so changelogs are meaningless. I have also drop "RFC" from the
> titles.
>
> Version 4:
> - Add num_entry_point_offsets field in  struct v4l2_ctrl_hevc_slice_params
> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> - Fix space/tab issue in kernel-doc
> - Add patch to change data_bit_offset definition
> - Fix hantro-media SPDX license
> - put controls under stateless section in v4l2-ctrls-defs.c
>
> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.

Dear reviewers,

This series is waiting for your feedback,

Thanks,
Benjamin

>
> Benjamin
>
>
> Benjamin Gaignard (12):
>    media: uapi: HEVC: Add missing fields in HEVC controls
>    media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
>      prefix
>    media: uapi: HEVC: Add document uAPI structure
>    media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS as a
>      dynamic array
>    media: uapi: Move parsed HEVC pixel format out of staging
>    media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS control
>    media: uapi: Move the HEVC stateless control type out of staging
>    media: controls: Log HEVC stateless control in .std_log
>    media: uapi: Create a dedicated header for Hantro control
>    media: uapi: HEVC: fix padding in v4l2 control structures
>    media: uapi: Change data_bit_offset definition
>    media: uapi: move HEVC stateless controls out of staging
>
> Hans Verkuil (3):
>    videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
>    v4l2-ctrls: add support for dynamically allocated arrays.
>    vivid: add dynamic array test control
>
>   .../userspace-api/media/drivers/hantro.rst    |   5 -
>   .../media/v4l/ext-ctrls-codec-stateless.rst   | 833 ++++++++++++++++++
>   .../media/v4l/ext-ctrls-codec.rst             | 780 ----------------
>   .../media/v4l/pixfmt-compressed.rst           |   7 +-
>   .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
>   .../media/v4l/vidioc-queryctrl.rst            |   8 +
>   .../media/videodev2.h.rst.exceptions          |   5 +
>   .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
>   drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
>   drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
>   drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
>   drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
>   drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
>   drivers/staging/media/hantro/hantro_drv.c     |  27 +-
>   drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
>   drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
>   .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
>   .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
>   include/media/hevc-ctrls.h                    | 250 ------
>   include/media/v4l2-ctrls.h                    |  48 +-
>   include/uapi/linux/hantro-media.h             |  19 +
>   include/uapi/linux/v4l2-controls.h            | 439 +++++++++
>   include/uapi/linux/videodev2.h                |  13 +
>   23 files changed, 1697 insertions(+), 1170 deletions(-)
>   delete mode 100644 include/media/hevc-ctrls.h
>   create mode 100644 include/uapi/linux/hantro-media.h
>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
  2022-03-30  7:09   ` Benjamin Gaignard
@ 2022-03-30 18:52     ` Adam Ford
  -1 siblings, 0 replies; 81+ messages in thread
From: Adam Ford @ 2022-03-30 18:52 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc

On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
<benjamin.gaignard@collabora.com> wrote:
>
>
> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
> > This series aims to make HEVC uapi stable and usable for hardware
> > decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
> > and 2 out of the tree drivers (rkvdec and RPI).
> >
> > After the remarks done on version 2, I have completely reworked to patches
> > split so changelogs are meaningless. I have also drop "RFC" from the
> > titles.
> >
> > Version 4:
> > - Add num_entry_point_offsets field in  struct v4l2_ctrl_hevc_slice_params
> > - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
> > - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> > - Fix space/tab issue in kernel-doc
> > - Add patch to change data_bit_offset definition
> > - Fix hantro-media SPDX license
> > - put controls under stateless section in v4l2-ctrls-defs.c
> >
> > At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
>
> Dear reviewers,
>
> This series is waiting for your feedback,

I tried several times with the suggested repos for both the kernel and
g-streamer without success getting Fluster to pass any tests on the
imx8mq.  I can try again but I likely won't get to it until this
weekend.  If I can get it working, I'll test both the 8mq and 8mm.

adam
>
> Thanks,
> Benjamin
>
> >
> > Benjamin
> >
> >
> > Benjamin Gaignard (12):
> >    media: uapi: HEVC: Add missing fields in HEVC controls
> >    media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
> >      prefix
> >    media: uapi: HEVC: Add document uAPI structure
> >    media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS as a
> >      dynamic array
> >    media: uapi: Move parsed HEVC pixel format out of staging
> >    media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS control
> >    media: uapi: Move the HEVC stateless control type out of staging
> >    media: controls: Log HEVC stateless control in .std_log
> >    media: uapi: Create a dedicated header for Hantro control
> >    media: uapi: HEVC: fix padding in v4l2 control structures
> >    media: uapi: Change data_bit_offset definition
> >    media: uapi: move HEVC stateless controls out of staging
> >
> > Hans Verkuil (3):
> >    videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
> >    v4l2-ctrls: add support for dynamically allocated arrays.
> >    vivid: add dynamic array test control
> >
> >   .../userspace-api/media/drivers/hantro.rst    |   5 -
> >   .../media/v4l/ext-ctrls-codec-stateless.rst   | 833 ++++++++++++++++++
> >   .../media/v4l/ext-ctrls-codec.rst             | 780 ----------------
> >   .../media/v4l/pixfmt-compressed.rst           |   7 +-
> >   .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
> >   .../media/v4l/vidioc-queryctrl.rst            |   8 +
> >   .../media/videodev2.h.rst.exceptions          |   5 +
> >   .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
> >   drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
> >   drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
> >   drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
> >   drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
> >   drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
> >   drivers/staging/media/hantro/hantro_drv.c     |  27 +-
> >   drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
> >   drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
> >   .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
> >   .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
> >   include/media/hevc-ctrls.h                    | 250 ------
> >   include/media/v4l2-ctrls.h                    |  48 +-
> >   include/uapi/linux/hantro-media.h             |  19 +
> >   include/uapi/linux/v4l2-controls.h            | 439 +++++++++
> >   include/uapi/linux/videodev2.h                |  13 +
> >   23 files changed, 1697 insertions(+), 1170 deletions(-)
> >   delete mode 100644 include/media/hevc-ctrls.h
> >   create mode 100644 include/uapi/linux/hantro-media.h
> >

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
@ 2022-03-30 18:52     ` Adam Ford
  0 siblings, 0 replies; 81+ messages in thread
From: Adam Ford @ 2022-03-30 18:52 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc

On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
<benjamin.gaignard@collabora.com> wrote:
>
>
> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
> > This series aims to make HEVC uapi stable and usable for hardware
> > decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
> > and 2 out of the tree drivers (rkvdec and RPI).
> >
> > After the remarks done on version 2, I have completely reworked to patches
> > split so changelogs are meaningless. I have also drop "RFC" from the
> > titles.
> >
> > Version 4:
> > - Add num_entry_point_offsets field in  struct v4l2_ctrl_hevc_slice_params
> > - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
> > - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> > - Fix space/tab issue in kernel-doc
> > - Add patch to change data_bit_offset definition
> > - Fix hantro-media SPDX license
> > - put controls under stateless section in v4l2-ctrls-defs.c
> >
> > At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
>
> Dear reviewers,
>
> This series is waiting for your feedback,

I tried several times with the suggested repos for both the kernel and
g-streamer without success getting Fluster to pass any tests on the
imx8mq.  I can try again but I likely won't get to it until this
weekend.  If I can get it working, I'll test both the 8mq and 8mm.

adam
>
> Thanks,
> Benjamin
>
> >
> > Benjamin
> >
> >
> > Benjamin Gaignard (12):
> >    media: uapi: HEVC: Add missing fields in HEVC controls
> >    media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
> >      prefix
> >    media: uapi: HEVC: Add document uAPI structure
> >    media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS as a
> >      dynamic array
> >    media: uapi: Move parsed HEVC pixel format out of staging
> >    media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS control
> >    media: uapi: Move the HEVC stateless control type out of staging
> >    media: controls: Log HEVC stateless control in .std_log
> >    media: uapi: Create a dedicated header for Hantro control
> >    media: uapi: HEVC: fix padding in v4l2 control structures
> >    media: uapi: Change data_bit_offset definition
> >    media: uapi: move HEVC stateless controls out of staging
> >
> > Hans Verkuil (3):
> >    videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
> >    v4l2-ctrls: add support for dynamically allocated arrays.
> >    vivid: add dynamic array test control
> >
> >   .../userspace-api/media/drivers/hantro.rst    |   5 -
> >   .../media/v4l/ext-ctrls-codec-stateless.rst   | 833 ++++++++++++++++++
> >   .../media/v4l/ext-ctrls-codec.rst             | 780 ----------------
> >   .../media/v4l/pixfmt-compressed.rst           |   7 +-
> >   .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
> >   .../media/v4l/vidioc-queryctrl.rst            |   8 +
> >   .../media/videodev2.h.rst.exceptions          |   5 +
> >   .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
> >   drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
> >   drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
> >   drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
> >   drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
> >   drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
> >   drivers/staging/media/hantro/hantro_drv.c     |  27 +-
> >   drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
> >   drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
> >   .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
> >   .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
> >   include/media/hevc-ctrls.h                    | 250 ------
> >   include/media/v4l2-ctrls.h                    |  48 +-
> >   include/uapi/linux/hantro-media.h             |  19 +
> >   include/uapi/linux/v4l2-controls.h            | 439 +++++++++
> >   include/uapi/linux/videodev2.h                |  13 +
> >   23 files changed, 1697 insertions(+), 1170 deletions(-)
> >   delete mode 100644 include/media/hevc-ctrls.h
> >   create mode 100644 include/uapi/linux/hantro-media.h
> >

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
  2022-03-30 18:52     ` Adam Ford
@ 2022-03-31  6:53       ` Benjamin Gaignard
  -1 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-03-31  6:53 UTC (permalink / raw)
  To: Adam Ford
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc


Le 30/03/2022 à 20:52, Adam Ford a écrit :
> On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
> <benjamin.gaignard@collabora.com> wrote:
>>
>> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
>>> This series aims to make HEVC uapi stable and usable for hardware
>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
>>> and 2 out of the tree drivers (rkvdec and RPI).
>>>
>>> After the remarks done on version 2, I have completely reworked to patches
>>> split so changelogs are meaningless. I have also drop "RFC" from the
>>> titles.
>>>
>>> Version 4:
>>> - Add num_entry_point_offsets field in  struct v4l2_ctrl_hevc_slice_params
>>> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
>>> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
>>> - Fix space/tab issue in kernel-doc
>>> - Add patch to change data_bit_offset definition
>>> - Fix hantro-media SPDX license
>>> - put controls under stateless section in v4l2-ctrls-defs.c
>>>
>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
>> Dear reviewers,
>>
>> This series is waiting for your feedback,
> I tried several times with the suggested repos for both the kernel and
> g-streamer without success getting Fluster to pass any tests on the
> imx8mq.  I can try again but I likely won't get to it until this
> weekend.  If I can get it working, I'll test both the 8mq and 8mm.

Thanks a lot for that.

Benjamin

>
> adam
>> Thanks,
>> Benjamin
>>
>>> Benjamin
>>>
>>>
>>> Benjamin Gaignard (12):
>>>     media: uapi: HEVC: Add missing fields in HEVC controls
>>>     media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
>>>       prefix
>>>     media: uapi: HEVC: Add document uAPI structure
>>>     media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS as a
>>>       dynamic array
>>>     media: uapi: Move parsed HEVC pixel format out of staging
>>>     media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS control
>>>     media: uapi: Move the HEVC stateless control type out of staging
>>>     media: controls: Log HEVC stateless control in .std_log
>>>     media: uapi: Create a dedicated header for Hantro control
>>>     media: uapi: HEVC: fix padding in v4l2 control structures
>>>     media: uapi: Change data_bit_offset definition
>>>     media: uapi: move HEVC stateless controls out of staging
>>>
>>> Hans Verkuil (3):
>>>     videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
>>>     v4l2-ctrls: add support for dynamically allocated arrays.
>>>     vivid: add dynamic array test control
>>>
>>>    .../userspace-api/media/drivers/hantro.rst    |   5 -
>>>    .../media/v4l/ext-ctrls-codec-stateless.rst   | 833 ++++++++++++++++++
>>>    .../media/v4l/ext-ctrls-codec.rst             | 780 ----------------
>>>    .../media/v4l/pixfmt-compressed.rst           |   7 +-
>>>    .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
>>>    .../media/v4l/vidioc-queryctrl.rst            |   8 +
>>>    .../media/videodev2.h.rst.exceptions          |   5 +
>>>    .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
>>>    drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
>>>    drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
>>>    drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
>>>    drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
>>>    drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
>>>    drivers/staging/media/hantro/hantro_drv.c     |  27 +-
>>>    drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
>>>    drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
>>>    .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
>>>    .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
>>>    include/media/hevc-ctrls.h                    | 250 ------
>>>    include/media/v4l2-ctrls.h                    |  48 +-
>>>    include/uapi/linux/hantro-media.h             |  19 +
>>>    include/uapi/linux/v4l2-controls.h            | 439 +++++++++
>>>    include/uapi/linux/videodev2.h                |  13 +
>>>    23 files changed, 1697 insertions(+), 1170 deletions(-)
>>>    delete mode 100644 include/media/hevc-ctrls.h
>>>    create mode 100644 include/uapi/linux/hantro-media.h
>>>

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
@ 2022-03-31  6:53       ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-03-31  6:53 UTC (permalink / raw)
  To: Adam Ford
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc


Le 30/03/2022 à 20:52, Adam Ford a écrit :
> On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
> <benjamin.gaignard@collabora.com> wrote:
>>
>> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
>>> This series aims to make HEVC uapi stable and usable for hardware
>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
>>> and 2 out of the tree drivers (rkvdec and RPI).
>>>
>>> After the remarks done on version 2, I have completely reworked to patches
>>> split so changelogs are meaningless. I have also drop "RFC" from the
>>> titles.
>>>
>>> Version 4:
>>> - Add num_entry_point_offsets field in  struct v4l2_ctrl_hevc_slice_params
>>> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
>>> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
>>> - Fix space/tab issue in kernel-doc
>>> - Add patch to change data_bit_offset definition
>>> - Fix hantro-media SPDX license
>>> - put controls under stateless section in v4l2-ctrls-defs.c
>>>
>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
>> Dear reviewers,
>>
>> This series is waiting for your feedback,
> I tried several times with the suggested repos for both the kernel and
> g-streamer without success getting Fluster to pass any tests on the
> imx8mq.  I can try again but I likely won't get to it until this
> weekend.  If I can get it working, I'll test both the 8mq and 8mm.

Thanks a lot for that.

Benjamin

>
> adam
>> Thanks,
>> Benjamin
>>
>>> Benjamin
>>>
>>>
>>> Benjamin Gaignard (12):
>>>     media: uapi: HEVC: Add missing fields in HEVC controls
>>>     media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
>>>       prefix
>>>     media: uapi: HEVC: Add document uAPI structure
>>>     media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS as a
>>>       dynamic array
>>>     media: uapi: Move parsed HEVC pixel format out of staging
>>>     media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS control
>>>     media: uapi: Move the HEVC stateless control type out of staging
>>>     media: controls: Log HEVC stateless control in .std_log
>>>     media: uapi: Create a dedicated header for Hantro control
>>>     media: uapi: HEVC: fix padding in v4l2 control structures
>>>     media: uapi: Change data_bit_offset definition
>>>     media: uapi: move HEVC stateless controls out of staging
>>>
>>> Hans Verkuil (3):
>>>     videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
>>>     v4l2-ctrls: add support for dynamically allocated arrays.
>>>     vivid: add dynamic array test control
>>>
>>>    .../userspace-api/media/drivers/hantro.rst    |   5 -
>>>    .../media/v4l/ext-ctrls-codec-stateless.rst   | 833 ++++++++++++++++++
>>>    .../media/v4l/ext-ctrls-codec.rst             | 780 ----------------
>>>    .../media/v4l/pixfmt-compressed.rst           |   7 +-
>>>    .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
>>>    .../media/v4l/vidioc-queryctrl.rst            |   8 +
>>>    .../media/videodev2.h.rst.exceptions          |   5 +
>>>    .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
>>>    drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
>>>    drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
>>>    drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
>>>    drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
>>>    drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
>>>    drivers/staging/media/hantro/hantro_drv.c     |  27 +-
>>>    drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
>>>    drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
>>>    .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
>>>    .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
>>>    include/media/hevc-ctrls.h                    | 250 ------
>>>    include/media/v4l2-ctrls.h                    |  48 +-
>>>    include/uapi/linux/hantro-media.h             |  19 +
>>>    include/uapi/linux/v4l2-controls.h            | 439 +++++++++
>>>    include/uapi/linux/videodev2.h                |  13 +
>>>    23 files changed, 1697 insertions(+), 1170 deletions(-)
>>>    delete mode 100644 include/media/hevc-ctrls.h
>>>    create mode 100644 include/uapi/linux/hantro-media.h
>>>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
  2022-03-31  6:53       ` Benjamin Gaignard
@ 2022-04-01 13:18         ` Benjamin Gaignard
  -1 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-04-01 13:18 UTC (permalink / raw)
  To: Adam Ford
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc


Le 31/03/2022 à 08:53, Benjamin Gaignard a écrit :
>
> Le 30/03/2022 à 20:52, Adam Ford a écrit :
>> On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
>> <benjamin.gaignard@collabora.com> wrote:
>>>
>>> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
>>>> This series aims to make HEVC uapi stable and usable for hardware
>>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
>>>> and 2 out of the tree drivers (rkvdec and RPI).
>>>>
>>>> After the remarks done on version 2, I have completely reworked to 
>>>> patches
>>>> split so changelogs are meaningless. I have also drop "RFC" from the
>>>> titles.
>>>>
>>>> Version 4:
>>>> - Add num_entry_point_offsets field in  struct 
>>>> v4l2_ctrl_hevc_slice_params
>>>> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
>>>> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
>>>> - Fix space/tab issue in kernel-doc
>>>> - Add patch to change data_bit_offset definition
>>>> - Fix hantro-media SPDX license
>>>> - put controls under stateless section in v4l2-ctrls-defs.c
>>>>
>>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
>>> Dear reviewers,
>>>
>>> This series is waiting for your feedback,
>> I tried several times with the suggested repos for both the kernel and
>> g-streamer without success getting Fluster to pass any tests on the
>> imx8mq.  I can try again but I likely won't get to it until this
>> weekend.  If I can get it working, I'll test both the 8mq and 8mm.
>
> Thanks a lot for that.
>
> Benjamin

Adam,

You may need to check if h265parse and v4l2slh265dec are available on your board.

fluster check if v4l2slh265dec is working fine with this command line:

gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink

so if one of them is missing it won't work.

Regards,
Benjamin

>
>>
>> adam
>>> Thanks,
>>> Benjamin
>>>
>>>> Benjamin
>>>>
>>>>
>>>> Benjamin Gaignard (12):
>>>>     media: uapi: HEVC: Add missing fields in HEVC controls
>>>>     media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
>>>>       prefix
>>>>     media: uapi: HEVC: Add document uAPI structure
>>>>     media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS 
>>>> as a
>>>>       dynamic array
>>>>     media: uapi: Move parsed HEVC pixel format out of staging
>>>>     media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS 
>>>> control
>>>>     media: uapi: Move the HEVC stateless control type out of staging
>>>>     media: controls: Log HEVC stateless control in .std_log
>>>>     media: uapi: Create a dedicated header for Hantro control
>>>>     media: uapi: HEVC: fix padding in v4l2 control structures
>>>>     media: uapi: Change data_bit_offset definition
>>>>     media: uapi: move HEVC stateless controls out of staging
>>>>
>>>> Hans Verkuil (3):
>>>>     videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
>>>>     v4l2-ctrls: add support for dynamically allocated arrays.
>>>>     vivid: add dynamic array test control
>>>>
>>>>    .../userspace-api/media/drivers/hantro.rst    |   5 -
>>>>    .../media/v4l/ext-ctrls-codec-stateless.rst   | 833 
>>>> ++++++++++++++++++
>>>>    .../media/v4l/ext-ctrls-codec.rst             | 780 
>>>> ----------------
>>>>    .../media/v4l/pixfmt-compressed.rst           |   7 +-
>>>>    .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
>>>>    .../media/v4l/vidioc-queryctrl.rst            |   8 +
>>>>    .../media/videodev2.h.rst.exceptions          |   5 +
>>>>    .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
>>>>    drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
>>>>    drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
>>>>    drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
>>>>    drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
>>>>    drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
>>>>    drivers/staging/media/hantro/hantro_drv.c     |  27 +-
>>>>    drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
>>>>    drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
>>>>    .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
>>>>    .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
>>>>    include/media/hevc-ctrls.h                    | 250 ------
>>>>    include/media/v4l2-ctrls.h                    |  48 +-
>>>>    include/uapi/linux/hantro-media.h             |  19 +
>>>>    include/uapi/linux/v4l2-controls.h            | 439 +++++++++
>>>>    include/uapi/linux/videodev2.h                |  13 +
>>>>    23 files changed, 1697 insertions(+), 1170 deletions(-)
>>>>    delete mode 100644 include/media/hevc-ctrls.h
>>>>    create mode 100644 include/uapi/linux/hantro-media.h
>>>>

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
@ 2022-04-01 13:18         ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-04-01 13:18 UTC (permalink / raw)
  To: Adam Ford
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc


Le 31/03/2022 à 08:53, Benjamin Gaignard a écrit :
>
> Le 30/03/2022 à 20:52, Adam Ford a écrit :
>> On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
>> <benjamin.gaignard@collabora.com> wrote:
>>>
>>> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
>>>> This series aims to make HEVC uapi stable and usable for hardware
>>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
>>>> and 2 out of the tree drivers (rkvdec and RPI).
>>>>
>>>> After the remarks done on version 2, I have completely reworked to 
>>>> patches
>>>> split so changelogs are meaningless. I have also drop "RFC" from the
>>>> titles.
>>>>
>>>> Version 4:
>>>> - Add num_entry_point_offsets field in  struct 
>>>> v4l2_ctrl_hevc_slice_params
>>>> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
>>>> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
>>>> - Fix space/tab issue in kernel-doc
>>>> - Add patch to change data_bit_offset definition
>>>> - Fix hantro-media SPDX license
>>>> - put controls under stateless section in v4l2-ctrls-defs.c
>>>>
>>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
>>> Dear reviewers,
>>>
>>> This series is waiting for your feedback,
>> I tried several times with the suggested repos for both the kernel and
>> g-streamer without success getting Fluster to pass any tests on the
>> imx8mq.  I can try again but I likely won't get to it until this
>> weekend.  If I can get it working, I'll test both the 8mq and 8mm.
>
> Thanks a lot for that.
>
> Benjamin

Adam,

You may need to check if h265parse and v4l2slh265dec are available on your board.

fluster check if v4l2slh265dec is working fine with this command line:

gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink

so if one of them is missing it won't work.

Regards,
Benjamin

>
>>
>> adam
>>> Thanks,
>>> Benjamin
>>>
>>>> Benjamin
>>>>
>>>>
>>>> Benjamin Gaignard (12):
>>>>     media: uapi: HEVC: Add missing fields in HEVC controls
>>>>     media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
>>>>       prefix
>>>>     media: uapi: HEVC: Add document uAPI structure
>>>>     media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS 
>>>> as a
>>>>       dynamic array
>>>>     media: uapi: Move parsed HEVC pixel format out of staging
>>>>     media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS 
>>>> control
>>>>     media: uapi: Move the HEVC stateless control type out of staging
>>>>     media: controls: Log HEVC stateless control in .std_log
>>>>     media: uapi: Create a dedicated header for Hantro control
>>>>     media: uapi: HEVC: fix padding in v4l2 control structures
>>>>     media: uapi: Change data_bit_offset definition
>>>>     media: uapi: move HEVC stateless controls out of staging
>>>>
>>>> Hans Verkuil (3):
>>>>     videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
>>>>     v4l2-ctrls: add support for dynamically allocated arrays.
>>>>     vivid: add dynamic array test control
>>>>
>>>>    .../userspace-api/media/drivers/hantro.rst    |   5 -
>>>>    .../media/v4l/ext-ctrls-codec-stateless.rst   | 833 
>>>> ++++++++++++++++++
>>>>    .../media/v4l/ext-ctrls-codec.rst             | 780 
>>>> ----------------
>>>>    .../media/v4l/pixfmt-compressed.rst           |   7 +-
>>>>    .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
>>>>    .../media/v4l/vidioc-queryctrl.rst            |   8 +
>>>>    .../media/videodev2.h.rst.exceptions          |   5 +
>>>>    .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
>>>>    drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
>>>>    drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
>>>>    drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
>>>>    drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
>>>>    drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
>>>>    drivers/staging/media/hantro/hantro_drv.c     |  27 +-
>>>>    drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
>>>>    drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
>>>>    .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
>>>>    .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
>>>>    include/media/hevc-ctrls.h                    | 250 ------
>>>>    include/media/v4l2-ctrls.h                    |  48 +-
>>>>    include/uapi/linux/hantro-media.h             |  19 +
>>>>    include/uapi/linux/v4l2-controls.h            | 439 +++++++++
>>>>    include/uapi/linux/videodev2.h                |  13 +
>>>>    23 files changed, 1697 insertions(+), 1170 deletions(-)
>>>>    delete mode 100644 include/media/hevc-ctrls.h
>>>>    create mode 100644 include/uapi/linux/hantro-media.h
>>>>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
  2022-04-01 13:18         ` Benjamin Gaignard
@ 2022-04-02 16:22           ` Adam Ford
  -1 siblings, 0 replies; 81+ messages in thread
From: Adam Ford @ 2022-04-02 16:22 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc

On Fri, Apr 1, 2022 at 8:18 AM Benjamin Gaignard
<benjamin.gaignard@collabora.com> wrote:
>
>
> Le 31/03/2022 à 08:53, Benjamin Gaignard a écrit :
> >
> > Le 30/03/2022 à 20:52, Adam Ford a écrit :
> >> On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
> >> <benjamin.gaignard@collabora.com> wrote:
> >>>
> >>> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
> >>>> This series aims to make HEVC uapi stable and usable for hardware
> >>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
> >>>> and 2 out of the tree drivers (rkvdec and RPI).
> >>>>
> >>>> After the remarks done on version 2, I have completely reworked to
> >>>> patches
> >>>> split so changelogs are meaningless. I have also drop "RFC" from the
> >>>> titles.
> >>>>
> >>>> Version 4:
> >>>> - Add num_entry_point_offsets field in  struct
> >>>> v4l2_ctrl_hevc_slice_params
> >>>> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
> >>>> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> >>>> - Fix space/tab issue in kernel-doc
> >>>> - Add patch to change data_bit_offset definition
> >>>> - Fix hantro-media SPDX license
> >>>> - put controls under stateless section in v4l2-ctrls-defs.c
> >>>>
> >>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
> >>> Dear reviewers,
> >>>
> >>> This series is waiting for your feedback,
> >> I tried several times with the suggested repos for both the kernel and
> >> g-streamer without success getting Fluster to pass any tests on the
> >> imx8mq.  I can try again but I likely won't get to it until this
> >> weekend.  If I can get it working, I'll test both the 8mq and 8mm.
> >
> > Thanks a lot for that.
> >
> > Benjamin
>
> Adam,
>
> You may need to check if h265parse and v4l2slh265dec are available on your board.

I ran gst-inspect to see what showed up with 265 in the name.

# gst-inspect-1.0 |grep 265
libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
rtp:  rtph265depay: RTP H265 depayloader
rtp:  rtph265pay: RTP H265 payloader
typefindfunctions: video/x-h265: h265, x265, 265
v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
videoparsersbad:  h265parse: H.265 parser

It appears I have both h265parse and v4l2slh265dec.

>
> fluster check if v4l2slh265dec is working fine with this command line:
>
> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
>
> so if one of them is missing it won't work.

gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
Setting pipeline to PAUSED ...
0:00:00.098389938   526 0xaaaaf9d86ac0 ERROR     v4l2codecs-decoder
gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
VIDIOC_G_EXT_CTRLS failed: Invalid argument
ERROR: from element
/GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
report framing and start code method.
Additional debug info:
../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
gst_v4l2_codec_h265_dec_open ():
/GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
gst_v4l2_decoder_get_controls() failed: Invalid argument
ERROR: pipeline doesn't want to preroll.
ERROR: from element
/GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
initialize supporting library.
Additional debug info:
../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
gst_video_decoder_change_state ():
/GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
Failed to open decoder
ERROR: pipeline doesn't want to preroll.
Failed to set pipeline to PAUSED.
Setting pipeline to NULL ...
Freeing pipeline ...

Does this mean I have a wrong version of the kernel and/or incomplete patches?

adam
>
> Regards,
> Benjamin
>
> >
> >>
> >> adam
> >>> Thanks,
> >>> Benjamin
> >>>
> >>>> Benjamin
> >>>>
> >>>>
> >>>> Benjamin Gaignard (12):
> >>>>     media: uapi: HEVC: Add missing fields in HEVC controls
> >>>>     media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
> >>>>       prefix
> >>>>     media: uapi: HEVC: Add document uAPI structure
> >>>>     media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS
> >>>> as a
> >>>>       dynamic array
> >>>>     media: uapi: Move parsed HEVC pixel format out of staging
> >>>>     media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> >>>> control
> >>>>     media: uapi: Move the HEVC stateless control type out of staging
> >>>>     media: controls: Log HEVC stateless control in .std_log
> >>>>     media: uapi: Create a dedicated header for Hantro control
> >>>>     media: uapi: HEVC: fix padding in v4l2 control structures
> >>>>     media: uapi: Change data_bit_offset definition
> >>>>     media: uapi: move HEVC stateless controls out of staging
> >>>>
> >>>> Hans Verkuil (3):
> >>>>     videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
> >>>>     v4l2-ctrls: add support for dynamically allocated arrays.
> >>>>     vivid: add dynamic array test control
> >>>>
> >>>>    .../userspace-api/media/drivers/hantro.rst    |   5 -
> >>>>    .../media/v4l/ext-ctrls-codec-stateless.rst   | 833
> >>>> ++++++++++++++++++
> >>>>    .../media/v4l/ext-ctrls-codec.rst             | 780
> >>>> ----------------
> >>>>    .../media/v4l/pixfmt-compressed.rst           |   7 +-
> >>>>    .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
> >>>>    .../media/v4l/vidioc-queryctrl.rst            |   8 +
> >>>>    .../media/videodev2.h.rst.exceptions          |   5 +
> >>>>    .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
> >>>>    drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
> >>>>    drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
> >>>>    drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
> >>>>    drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
> >>>>    drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
> >>>>    drivers/staging/media/hantro/hantro_drv.c     |  27 +-
> >>>>    drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
> >>>>    drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
> >>>>    .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
> >>>>    .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
> >>>>    include/media/hevc-ctrls.h                    | 250 ------
> >>>>    include/media/v4l2-ctrls.h                    |  48 +-
> >>>>    include/uapi/linux/hantro-media.h             |  19 +
> >>>>    include/uapi/linux/v4l2-controls.h            | 439 +++++++++
> >>>>    include/uapi/linux/videodev2.h                |  13 +
> >>>>    23 files changed, 1697 insertions(+), 1170 deletions(-)
> >>>>    delete mode 100644 include/media/hevc-ctrls.h
> >>>>    create mode 100644 include/uapi/linux/hantro-media.h
> >>>>

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
@ 2022-04-02 16:22           ` Adam Ford
  0 siblings, 0 replies; 81+ messages in thread
From: Adam Ford @ 2022-04-02 16:22 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc

On Fri, Apr 1, 2022 at 8:18 AM Benjamin Gaignard
<benjamin.gaignard@collabora.com> wrote:
>
>
> Le 31/03/2022 à 08:53, Benjamin Gaignard a écrit :
> >
> > Le 30/03/2022 à 20:52, Adam Ford a écrit :
> >> On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
> >> <benjamin.gaignard@collabora.com> wrote:
> >>>
> >>> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
> >>>> This series aims to make HEVC uapi stable and usable for hardware
> >>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
> >>>> and 2 out of the tree drivers (rkvdec and RPI).
> >>>>
> >>>> After the remarks done on version 2, I have completely reworked to
> >>>> patches
> >>>> split so changelogs are meaningless. I have also drop "RFC" from the
> >>>> titles.
> >>>>
> >>>> Version 4:
> >>>> - Add num_entry_point_offsets field in  struct
> >>>> v4l2_ctrl_hevc_slice_params
> >>>> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
> >>>> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> >>>> - Fix space/tab issue in kernel-doc
> >>>> - Add patch to change data_bit_offset definition
> >>>> - Fix hantro-media SPDX license
> >>>> - put controls under stateless section in v4l2-ctrls-defs.c
> >>>>
> >>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
> >>> Dear reviewers,
> >>>
> >>> This series is waiting for your feedback,
> >> I tried several times with the suggested repos for both the kernel and
> >> g-streamer without success getting Fluster to pass any tests on the
> >> imx8mq.  I can try again but I likely won't get to it until this
> >> weekend.  If I can get it working, I'll test both the 8mq and 8mm.
> >
> > Thanks a lot for that.
> >
> > Benjamin
>
> Adam,
>
> You may need to check if h265parse and v4l2slh265dec are available on your board.

I ran gst-inspect to see what showed up with 265 in the name.

# gst-inspect-1.0 |grep 265
libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
rtp:  rtph265depay: RTP H265 depayloader
rtp:  rtph265pay: RTP H265 payloader
typefindfunctions: video/x-h265: h265, x265, 265
v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
videoparsersbad:  h265parse: H.265 parser

It appears I have both h265parse and v4l2slh265dec.

>
> fluster check if v4l2slh265dec is working fine with this command line:
>
> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
>
> so if one of them is missing it won't work.

gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
Setting pipeline to PAUSED ...
0:00:00.098389938   526 0xaaaaf9d86ac0 ERROR     v4l2codecs-decoder
gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
VIDIOC_G_EXT_CTRLS failed: Invalid argument
ERROR: from element
/GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
report framing and start code method.
Additional debug info:
../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
gst_v4l2_codec_h265_dec_open ():
/GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
gst_v4l2_decoder_get_controls() failed: Invalid argument
ERROR: pipeline doesn't want to preroll.
ERROR: from element
/GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
initialize supporting library.
Additional debug info:
../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
gst_video_decoder_change_state ():
/GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
Failed to open decoder
ERROR: pipeline doesn't want to preroll.
Failed to set pipeline to PAUSED.
Setting pipeline to NULL ...
Freeing pipeline ...

Does this mean I have a wrong version of the kernel and/or incomplete patches?

adam
>
> Regards,
> Benjamin
>
> >
> >>
> >> adam
> >>> Thanks,
> >>> Benjamin
> >>>
> >>>> Benjamin
> >>>>
> >>>>
> >>>> Benjamin Gaignard (12):
> >>>>     media: uapi: HEVC: Add missing fields in HEVC controls
> >>>>     media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
> >>>>       prefix
> >>>>     media: uapi: HEVC: Add document uAPI structure
> >>>>     media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS
> >>>> as a
> >>>>       dynamic array
> >>>>     media: uapi: Move parsed HEVC pixel format out of staging
> >>>>     media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> >>>> control
> >>>>     media: uapi: Move the HEVC stateless control type out of staging
> >>>>     media: controls: Log HEVC stateless control in .std_log
> >>>>     media: uapi: Create a dedicated header for Hantro control
> >>>>     media: uapi: HEVC: fix padding in v4l2 control structures
> >>>>     media: uapi: Change data_bit_offset definition
> >>>>     media: uapi: move HEVC stateless controls out of staging
> >>>>
> >>>> Hans Verkuil (3):
> >>>>     videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
> >>>>     v4l2-ctrls: add support for dynamically allocated arrays.
> >>>>     vivid: add dynamic array test control
> >>>>
> >>>>    .../userspace-api/media/drivers/hantro.rst    |   5 -
> >>>>    .../media/v4l/ext-ctrls-codec-stateless.rst   | 833
> >>>> ++++++++++++++++++
> >>>>    .../media/v4l/ext-ctrls-codec.rst             | 780
> >>>> ----------------
> >>>>    .../media/v4l/pixfmt-compressed.rst           |   7 +-
> >>>>    .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
> >>>>    .../media/v4l/vidioc-queryctrl.rst            |   8 +
> >>>>    .../media/videodev2.h.rst.exceptions          |   5 +
> >>>>    .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
> >>>>    drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
> >>>>    drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
> >>>>    drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
> >>>>    drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
> >>>>    drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
> >>>>    drivers/staging/media/hantro/hantro_drv.c     |  27 +-
> >>>>    drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
> >>>>    drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
> >>>>    .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
> >>>>    .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
> >>>>    include/media/hevc-ctrls.h                    | 250 ------
> >>>>    include/media/v4l2-ctrls.h                    |  48 +-
> >>>>    include/uapi/linux/hantro-media.h             |  19 +
> >>>>    include/uapi/linux/v4l2-controls.h            | 439 +++++++++
> >>>>    include/uapi/linux/videodev2.h                |  13 +
> >>>>    23 files changed, 1697 insertions(+), 1170 deletions(-)
> >>>>    delete mode 100644 include/media/hevc-ctrls.h
> >>>>    create mode 100644 include/uapi/linux/hantro-media.h
> >>>>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
  2022-04-02 16:22           ` Adam Ford
@ 2022-04-02 16:59             ` Adam Ford
  -1 siblings, 0 replies; 81+ messages in thread
From: Adam Ford @ 2022-04-02 16:59 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc

On Sat, Apr 2, 2022 at 11:22 AM Adam Ford <aford173@gmail.com> wrote:
>
> On Fri, Apr 1, 2022 at 8:18 AM Benjamin Gaignard
> <benjamin.gaignard@collabora.com> wrote:
> >
> >
> > Le 31/03/2022 à 08:53, Benjamin Gaignard a écrit :
> > >
> > > Le 30/03/2022 à 20:52, Adam Ford a écrit :
> > >> On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
> > >> <benjamin.gaignard@collabora.com> wrote:
> > >>>
> > >>> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
> > >>>> This series aims to make HEVC uapi stable and usable for hardware
> > >>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
> > >>>> and 2 out of the tree drivers (rkvdec and RPI).
> > >>>>
> > >>>> After the remarks done on version 2, I have completely reworked to
> > >>>> patches
> > >>>> split so changelogs are meaningless. I have also drop "RFC" from the
> > >>>> titles.
> > >>>>
> > >>>> Version 4:
> > >>>> - Add num_entry_point_offsets field in  struct
> > >>>> v4l2_ctrl_hevc_slice_params
> > >>>> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
> > >>>> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> > >>>> - Fix space/tab issue in kernel-doc
> > >>>> - Add patch to change data_bit_offset definition
> > >>>> - Fix hantro-media SPDX license
> > >>>> - put controls under stateless section in v4l2-ctrls-defs.c
> > >>>>
> > >>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
> > >>> Dear reviewers,
> > >>>
> > >>> This series is waiting for your feedback,
> > >> I tried several times with the suggested repos for both the kernel and
> > >> g-streamer without success getting Fluster to pass any tests on the
> > >> imx8mq.  I can try again but I likely won't get to it until this
> > >> weekend.  If I can get it working, I'll test both the 8mq and 8mm.
> > >
> > > Thanks a lot for that.
> > >
> > > Benjamin
> >
> > Adam,
> >
> > You may need to check if h265parse and v4l2slh265dec are available on your board.
>
> I ran gst-inspect to see what showed up with 265 in the name.
>
> # gst-inspect-1.0 |grep 265
> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
> rtp:  rtph265depay: RTP H265 depayloader
> rtp:  rtph265pay: RTP H265 payloader
> typefindfunctions: video/x-h265: h265, x265, 265
> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
> videoparsersbad:  h265parse: H.265 parser
>
> It appears I have both h265parse and v4l2slh265dec.
>
> >
> > fluster check if v4l2slh265dec is working fine with this command line:
> >
> > gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
> >
> > so if one of them is missing it won't work.
>
> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
> Setting pipeline to PAUSED ...
> 0:00:00.098389938   526 0xaaaaf9d86ac0 ERROR     v4l2codecs-decoder
> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
> VIDIOC_G_EXT_CTRLS failed: Invalid argument
> ERROR: from element
> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
> report framing and start code method.
> Additional debug info:
> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
> gst_v4l2_codec_h265_dec_open ():
> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> gst_v4l2_decoder_get_controls() failed: Invalid argument
> ERROR: pipeline doesn't want to preroll.
> ERROR: from element
> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
> initialize supporting library.
> Additional debug info:
> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
> gst_video_decoder_change_state ():
> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> Failed to open decoder
> ERROR: pipeline doesn't want to preroll.
> Failed to set pipeline to PAUSED.
> Setting pipeline to NULL ...
> Freeing pipeline ...
>
> Does this mean I have a wrong version of the kernel and/or incomplete patches?

I double checked the branches.

Kernel:
https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
branch:  origin/HEVC_UAPI_V4

Gstreamer:
https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15


I am still not able to run h.265/HEVC tests.

adam
>
> adam
> >
> > Regards,
> > Benjamin
> >
> > >
> > >>
> > >> adam
> > >>> Thanks,
> > >>> Benjamin
> > >>>
> > >>>> Benjamin
> > >>>>
> > >>>>
> > >>>> Benjamin Gaignard (12):
> > >>>>     media: uapi: HEVC: Add missing fields in HEVC controls
> > >>>>     media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
> > >>>>       prefix
> > >>>>     media: uapi: HEVC: Add document uAPI structure
> > >>>>     media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS
> > >>>> as a
> > >>>>       dynamic array
> > >>>>     media: uapi: Move parsed HEVC pixel format out of staging
> > >>>>     media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> > >>>> control
> > >>>>     media: uapi: Move the HEVC stateless control type out of staging
> > >>>>     media: controls: Log HEVC stateless control in .std_log
> > >>>>     media: uapi: Create a dedicated header for Hantro control
> > >>>>     media: uapi: HEVC: fix padding in v4l2 control structures
> > >>>>     media: uapi: Change data_bit_offset definition
> > >>>>     media: uapi: move HEVC stateless controls out of staging
> > >>>>
> > >>>> Hans Verkuil (3):
> > >>>>     videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
> > >>>>     v4l2-ctrls: add support for dynamically allocated arrays.
> > >>>>     vivid: add dynamic array test control
> > >>>>
> > >>>>    .../userspace-api/media/drivers/hantro.rst    |   5 -
> > >>>>    .../media/v4l/ext-ctrls-codec-stateless.rst   | 833
> > >>>> ++++++++++++++++++
> > >>>>    .../media/v4l/ext-ctrls-codec.rst             | 780
> > >>>> ----------------
> > >>>>    .../media/v4l/pixfmt-compressed.rst           |   7 +-
> > >>>>    .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
> > >>>>    .../media/v4l/vidioc-queryctrl.rst            |   8 +
> > >>>>    .../media/videodev2.h.rst.exceptions          |   5 +
> > >>>>    .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
> > >>>>    drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
> > >>>>    drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
> > >>>>    drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
> > >>>>    drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
> > >>>>    drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
> > >>>>    drivers/staging/media/hantro/hantro_drv.c     |  27 +-
> > >>>>    drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
> > >>>>    drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
> > >>>>    .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
> > >>>>    .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
> > >>>>    include/media/hevc-ctrls.h                    | 250 ------
> > >>>>    include/media/v4l2-ctrls.h                    |  48 +-
> > >>>>    include/uapi/linux/hantro-media.h             |  19 +
> > >>>>    include/uapi/linux/v4l2-controls.h            | 439 +++++++++
> > >>>>    include/uapi/linux/videodev2.h                |  13 +
> > >>>>    23 files changed, 1697 insertions(+), 1170 deletions(-)
> > >>>>    delete mode 100644 include/media/hevc-ctrls.h
> > >>>>    create mode 100644 include/uapi/linux/hantro-media.h
> > >>>>

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
@ 2022-04-02 16:59             ` Adam Ford
  0 siblings, 0 replies; 81+ messages in thread
From: Adam Ford @ 2022-04-02 16:59 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc

On Sat, Apr 2, 2022 at 11:22 AM Adam Ford <aford173@gmail.com> wrote:
>
> On Fri, Apr 1, 2022 at 8:18 AM Benjamin Gaignard
> <benjamin.gaignard@collabora.com> wrote:
> >
> >
> > Le 31/03/2022 à 08:53, Benjamin Gaignard a écrit :
> > >
> > > Le 30/03/2022 à 20:52, Adam Ford a écrit :
> > >> On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
> > >> <benjamin.gaignard@collabora.com> wrote:
> > >>>
> > >>> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
> > >>>> This series aims to make HEVC uapi stable and usable for hardware
> > >>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
> > >>>> and 2 out of the tree drivers (rkvdec and RPI).
> > >>>>
> > >>>> After the remarks done on version 2, I have completely reworked to
> > >>>> patches
> > >>>> split so changelogs are meaningless. I have also drop "RFC" from the
> > >>>> titles.
> > >>>>
> > >>>> Version 4:
> > >>>> - Add num_entry_point_offsets field in  struct
> > >>>> v4l2_ctrl_hevc_slice_params
> > >>>> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
> > >>>> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> > >>>> - Fix space/tab issue in kernel-doc
> > >>>> - Add patch to change data_bit_offset definition
> > >>>> - Fix hantro-media SPDX license
> > >>>> - put controls under stateless section in v4l2-ctrls-defs.c
> > >>>>
> > >>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
> > >>> Dear reviewers,
> > >>>
> > >>> This series is waiting for your feedback,
> > >> I tried several times with the suggested repos for both the kernel and
> > >> g-streamer without success getting Fluster to pass any tests on the
> > >> imx8mq.  I can try again but I likely won't get to it until this
> > >> weekend.  If I can get it working, I'll test both the 8mq and 8mm.
> > >
> > > Thanks a lot for that.
> > >
> > > Benjamin
> >
> > Adam,
> >
> > You may need to check if h265parse and v4l2slh265dec are available on your board.
>
> I ran gst-inspect to see what showed up with 265 in the name.
>
> # gst-inspect-1.0 |grep 265
> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
> rtp:  rtph265depay: RTP H265 depayloader
> rtp:  rtph265pay: RTP H265 payloader
> typefindfunctions: video/x-h265: h265, x265, 265
> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
> videoparsersbad:  h265parse: H.265 parser
>
> It appears I have both h265parse and v4l2slh265dec.
>
> >
> > fluster check if v4l2slh265dec is working fine with this command line:
> >
> > gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
> >
> > so if one of them is missing it won't work.
>
> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
> Setting pipeline to PAUSED ...
> 0:00:00.098389938   526 0xaaaaf9d86ac0 ERROR     v4l2codecs-decoder
> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
> VIDIOC_G_EXT_CTRLS failed: Invalid argument
> ERROR: from element
> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
> report framing and start code method.
> Additional debug info:
> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
> gst_v4l2_codec_h265_dec_open ():
> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> gst_v4l2_decoder_get_controls() failed: Invalid argument
> ERROR: pipeline doesn't want to preroll.
> ERROR: from element
> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
> initialize supporting library.
> Additional debug info:
> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
> gst_video_decoder_change_state ():
> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> Failed to open decoder
> ERROR: pipeline doesn't want to preroll.
> Failed to set pipeline to PAUSED.
> Setting pipeline to NULL ...
> Freeing pipeline ...
>
> Does this mean I have a wrong version of the kernel and/or incomplete patches?

I double checked the branches.

Kernel:
https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
branch:  origin/HEVC_UAPI_V4

Gstreamer:
https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15


I am still not able to run h.265/HEVC tests.

adam
>
> adam
> >
> > Regards,
> > Benjamin
> >
> > >
> > >>
> > >> adam
> > >>> Thanks,
> > >>> Benjamin
> > >>>
> > >>>> Benjamin
> > >>>>
> > >>>>
> > >>>> Benjamin Gaignard (12):
> > >>>>     media: uapi: HEVC: Add missing fields in HEVC controls
> > >>>>     media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
> > >>>>       prefix
> > >>>>     media: uapi: HEVC: Add document uAPI structure
> > >>>>     media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS
> > >>>> as a
> > >>>>       dynamic array
> > >>>>     media: uapi: Move parsed HEVC pixel format out of staging
> > >>>>     media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> > >>>> control
> > >>>>     media: uapi: Move the HEVC stateless control type out of staging
> > >>>>     media: controls: Log HEVC stateless control in .std_log
> > >>>>     media: uapi: Create a dedicated header for Hantro control
> > >>>>     media: uapi: HEVC: fix padding in v4l2 control structures
> > >>>>     media: uapi: Change data_bit_offset definition
> > >>>>     media: uapi: move HEVC stateless controls out of staging
> > >>>>
> > >>>> Hans Verkuil (3):
> > >>>>     videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
> > >>>>     v4l2-ctrls: add support for dynamically allocated arrays.
> > >>>>     vivid: add dynamic array test control
> > >>>>
> > >>>>    .../userspace-api/media/drivers/hantro.rst    |   5 -
> > >>>>    .../media/v4l/ext-ctrls-codec-stateless.rst   | 833
> > >>>> ++++++++++++++++++
> > >>>>    .../media/v4l/ext-ctrls-codec.rst             | 780
> > >>>> ----------------
> > >>>>    .../media/v4l/pixfmt-compressed.rst           |   7 +-
> > >>>>    .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
> > >>>>    .../media/v4l/vidioc-queryctrl.rst            |   8 +
> > >>>>    .../media/videodev2.h.rst.exceptions          |   5 +
> > >>>>    .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
> > >>>>    drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
> > >>>>    drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
> > >>>>    drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
> > >>>>    drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
> > >>>>    drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
> > >>>>    drivers/staging/media/hantro/hantro_drv.c     |  27 +-
> > >>>>    drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
> > >>>>    drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
> > >>>>    .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
> > >>>>    .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
> > >>>>    include/media/hevc-ctrls.h                    | 250 ------
> > >>>>    include/media/v4l2-ctrls.h                    |  48 +-
> > >>>>    include/uapi/linux/hantro-media.h             |  19 +
> > >>>>    include/uapi/linux/v4l2-controls.h            | 439 +++++++++
> > >>>>    include/uapi/linux/videodev2.h                |  13 +
> > >>>>    23 files changed, 1697 insertions(+), 1170 deletions(-)
> > >>>>    delete mode 100644 include/media/hevc-ctrls.h
> > >>>>    create mode 100644 include/uapi/linux/hantro-media.h
> > >>>>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
  2022-04-02 16:59             ` Adam Ford
@ 2022-04-04 15:56               ` Benjamin Gaignard
  -1 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-04-04 15:56 UTC (permalink / raw)
  To: Adam Ford
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc


Le 02/04/2022 à 18:59, Adam Ford a écrit :
> On Sat, Apr 2, 2022 at 11:22 AM Adam Ford <aford173@gmail.com> wrote:
>> On Fri, Apr 1, 2022 at 8:18 AM Benjamin Gaignard
>> <benjamin.gaignard@collabora.com> wrote:
>>>
>>> Le 31/03/2022 à 08:53, Benjamin Gaignard a écrit :
>>>> Le 30/03/2022 à 20:52, Adam Ford a écrit :
>>>>> On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
>>>>> <benjamin.gaignard@collabora.com> wrote:
>>>>>> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
>>>>>>> This series aims to make HEVC uapi stable and usable for hardware
>>>>>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
>>>>>>> and 2 out of the tree drivers (rkvdec and RPI).
>>>>>>>
>>>>>>> After the remarks done on version 2, I have completely reworked to
>>>>>>> patches
>>>>>>> split so changelogs are meaningless. I have also drop "RFC" from the
>>>>>>> titles.
>>>>>>>
>>>>>>> Version 4:
>>>>>>> - Add num_entry_point_offsets field in  struct
>>>>>>> v4l2_ctrl_hevc_slice_params
>>>>>>> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
>>>>>>> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
>>>>>>> - Fix space/tab issue in kernel-doc
>>>>>>> - Add patch to change data_bit_offset definition
>>>>>>> - Fix hantro-media SPDX license
>>>>>>> - put controls under stateless section in v4l2-ctrls-defs.c
>>>>>>>
>>>>>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
>>>>>> Dear reviewers,
>>>>>>
>>>>>> This series is waiting for your feedback,
>>>>> I tried several times with the suggested repos for both the kernel and
>>>>> g-streamer without success getting Fluster to pass any tests on the
>>>>> imx8mq.  I can try again but I likely won't get to it until this
>>>>> weekend.  If I can get it working, I'll test both the 8mq and 8mm.
>>>> Thanks a lot for that.
>>>>
>>>> Benjamin
>>> Adam,
>>>
>>> You may need to check if h265parse and v4l2slh265dec are available on your board.
>> I ran gst-inspect to see what showed up with 265 in the name.
>>
>> # gst-inspect-1.0 |grep 265
>> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
>> rtp:  rtph265depay: RTP H265 depayloader
>> rtp:  rtph265pay: RTP H265 payloader
>> typefindfunctions: video/x-h265: h265, x265, 265
>> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
>> videoparsersbad:  h265parse: H.265 parser
>>
>> It appears I have both h265parse and v4l2slh265dec.
>>
>>> fluster check if v4l2slh265dec is working fine with this command line:
>>>
>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
>>>
>>> so if one of them is missing it won't work.
>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
>> Setting pipeline to PAUSED ...
>> 0:00:00.098389938   526 0xaaaaf9d86ac0 ERROR     v4l2codecs-decoder
>> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
>> VIDIOC_G_EXT_CTRLS failed: Invalid argument
>> ERROR: from element
>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
>> report framing and start code method.
>> Additional debug info:
>> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
>> gst_v4l2_codec_h265_dec_open ():
>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>> gst_v4l2_decoder_get_controls() failed: Invalid argument
>> ERROR: pipeline doesn't want to preroll.
>> ERROR: from element
>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
>> initialize supporting library.
>> Additional debug info:
>> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
>> gst_video_decoder_change_state ():
>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>> Failed to open decoder
>> ERROR: pipeline doesn't want to preroll.
>> Failed to set pipeline to PAUSED.
>> Setting pipeline to NULL ...
>> Freeing pipeline ...
>>
>> Does this mean I have a wrong version of the kernel and/or incomplete patches?
> I double checked the branches.
>
> Kernel:
> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
> branch:  origin/HEVC_UAPI_V4
>
> Gstreamer:
> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15
>
>
> I am still not able to run h.265/HEVC tests.

Hello Adam,

I have updated the following branches with the versions I have used today:

Kernel:
https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
branch: origin/HEVC_UAPI_V5 only one change in documentation vs version 4 but rebased in v5.18-rc1

Gstreamer:
https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15 updated on the latest GST main branch

I hope this will work fine this time.

Benjamin

>
> adam
>> adam
>>> Regards,
>>> Benjamin
>>>
>>>>> adam
>>>>>> Thanks,
>>>>>> Benjamin
>>>>>>
>>>>>>> Benjamin
>>>>>>>
>>>>>>>
>>>>>>> Benjamin Gaignard (12):
>>>>>>>      media: uapi: HEVC: Add missing fields in HEVC controls
>>>>>>>      media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
>>>>>>>        prefix
>>>>>>>      media: uapi: HEVC: Add document uAPI structure
>>>>>>>      media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS
>>>>>>> as a
>>>>>>>        dynamic array
>>>>>>>      media: uapi: Move parsed HEVC pixel format out of staging
>>>>>>>      media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
>>>>>>> control
>>>>>>>      media: uapi: Move the HEVC stateless control type out of staging
>>>>>>>      media: controls: Log HEVC stateless control in .std_log
>>>>>>>      media: uapi: Create a dedicated header for Hantro control
>>>>>>>      media: uapi: HEVC: fix padding in v4l2 control structures
>>>>>>>      media: uapi: Change data_bit_offset definition
>>>>>>>      media: uapi: move HEVC stateless controls out of staging
>>>>>>>
>>>>>>> Hans Verkuil (3):
>>>>>>>      videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
>>>>>>>      v4l2-ctrls: add support for dynamically allocated arrays.
>>>>>>>      vivid: add dynamic array test control
>>>>>>>
>>>>>>>     .../userspace-api/media/drivers/hantro.rst    |   5 -
>>>>>>>     .../media/v4l/ext-ctrls-codec-stateless.rst   | 833
>>>>>>> ++++++++++++++++++
>>>>>>>     .../media/v4l/ext-ctrls-codec.rst             | 780
>>>>>>> ----------------
>>>>>>>     .../media/v4l/pixfmt-compressed.rst           |   7 +-
>>>>>>>     .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
>>>>>>>     .../media/v4l/vidioc-queryctrl.rst            |   8 +
>>>>>>>     .../media/videodev2.h.rst.exceptions          |   5 +
>>>>>>>     .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
>>>>>>>     drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
>>>>>>>     drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
>>>>>>>     drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
>>>>>>>     drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
>>>>>>>     drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
>>>>>>>     drivers/staging/media/hantro/hantro_drv.c     |  27 +-
>>>>>>>     drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
>>>>>>>     drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
>>>>>>>     .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
>>>>>>>     .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
>>>>>>>     include/media/hevc-ctrls.h                    | 250 ------
>>>>>>>     include/media/v4l2-ctrls.h                    |  48 +-
>>>>>>>     include/uapi/linux/hantro-media.h             |  19 +
>>>>>>>     include/uapi/linux/v4l2-controls.h            | 439 +++++++++
>>>>>>>     include/uapi/linux/videodev2.h                |  13 +
>>>>>>>     23 files changed, 1697 insertions(+), 1170 deletions(-)
>>>>>>>     delete mode 100644 include/media/hevc-ctrls.h
>>>>>>>     create mode 100644 include/uapi/linux/hantro-media.h
>>>>>>>

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
@ 2022-04-04 15:56               ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-04-04 15:56 UTC (permalink / raw)
  To: Adam Ford
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc


Le 02/04/2022 à 18:59, Adam Ford a écrit :
> On Sat, Apr 2, 2022 at 11:22 AM Adam Ford <aford173@gmail.com> wrote:
>> On Fri, Apr 1, 2022 at 8:18 AM Benjamin Gaignard
>> <benjamin.gaignard@collabora.com> wrote:
>>>
>>> Le 31/03/2022 à 08:53, Benjamin Gaignard a écrit :
>>>> Le 30/03/2022 à 20:52, Adam Ford a écrit :
>>>>> On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
>>>>> <benjamin.gaignard@collabora.com> wrote:
>>>>>> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
>>>>>>> This series aims to make HEVC uapi stable and usable for hardware
>>>>>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
>>>>>>> and 2 out of the tree drivers (rkvdec and RPI).
>>>>>>>
>>>>>>> After the remarks done on version 2, I have completely reworked to
>>>>>>> patches
>>>>>>> split so changelogs are meaningless. I have also drop "RFC" from the
>>>>>>> titles.
>>>>>>>
>>>>>>> Version 4:
>>>>>>> - Add num_entry_point_offsets field in  struct
>>>>>>> v4l2_ctrl_hevc_slice_params
>>>>>>> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
>>>>>>> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
>>>>>>> - Fix space/tab issue in kernel-doc
>>>>>>> - Add patch to change data_bit_offset definition
>>>>>>> - Fix hantro-media SPDX license
>>>>>>> - put controls under stateless section in v4l2-ctrls-defs.c
>>>>>>>
>>>>>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
>>>>>> Dear reviewers,
>>>>>>
>>>>>> This series is waiting for your feedback,
>>>>> I tried several times with the suggested repos for both the kernel and
>>>>> g-streamer without success getting Fluster to pass any tests on the
>>>>> imx8mq.  I can try again but I likely won't get to it until this
>>>>> weekend.  If I can get it working, I'll test both the 8mq and 8mm.
>>>> Thanks a lot for that.
>>>>
>>>> Benjamin
>>> Adam,
>>>
>>> You may need to check if h265parse and v4l2slh265dec are available on your board.
>> I ran gst-inspect to see what showed up with 265 in the name.
>>
>> # gst-inspect-1.0 |grep 265
>> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
>> rtp:  rtph265depay: RTP H265 depayloader
>> rtp:  rtph265pay: RTP H265 payloader
>> typefindfunctions: video/x-h265: h265, x265, 265
>> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
>> videoparsersbad:  h265parse: H.265 parser
>>
>> It appears I have both h265parse and v4l2slh265dec.
>>
>>> fluster check if v4l2slh265dec is working fine with this command line:
>>>
>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
>>>
>>> so if one of them is missing it won't work.
>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
>> Setting pipeline to PAUSED ...
>> 0:00:00.098389938   526 0xaaaaf9d86ac0 ERROR     v4l2codecs-decoder
>> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
>> VIDIOC_G_EXT_CTRLS failed: Invalid argument
>> ERROR: from element
>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
>> report framing and start code method.
>> Additional debug info:
>> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
>> gst_v4l2_codec_h265_dec_open ():
>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>> gst_v4l2_decoder_get_controls() failed: Invalid argument
>> ERROR: pipeline doesn't want to preroll.
>> ERROR: from element
>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
>> initialize supporting library.
>> Additional debug info:
>> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
>> gst_video_decoder_change_state ():
>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>> Failed to open decoder
>> ERROR: pipeline doesn't want to preroll.
>> Failed to set pipeline to PAUSED.
>> Setting pipeline to NULL ...
>> Freeing pipeline ...
>>
>> Does this mean I have a wrong version of the kernel and/or incomplete patches?
> I double checked the branches.
>
> Kernel:
> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
> branch:  origin/HEVC_UAPI_V4
>
> Gstreamer:
> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15
>
>
> I am still not able to run h.265/HEVC tests.

Hello Adam,

I have updated the following branches with the versions I have used today:

Kernel:
https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
branch: origin/HEVC_UAPI_V5 only one change in documentation vs version 4 but rebased in v5.18-rc1

Gstreamer:
https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15 updated on the latest GST main branch

I hope this will work fine this time.

Benjamin

>
> adam
>> adam
>>> Regards,
>>> Benjamin
>>>
>>>>> adam
>>>>>> Thanks,
>>>>>> Benjamin
>>>>>>
>>>>>>> Benjamin
>>>>>>>
>>>>>>>
>>>>>>> Benjamin Gaignard (12):
>>>>>>>      media: uapi: HEVC: Add missing fields in HEVC controls
>>>>>>>      media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
>>>>>>>        prefix
>>>>>>>      media: uapi: HEVC: Add document uAPI structure
>>>>>>>      media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS
>>>>>>> as a
>>>>>>>        dynamic array
>>>>>>>      media: uapi: Move parsed HEVC pixel format out of staging
>>>>>>>      media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
>>>>>>> control
>>>>>>>      media: uapi: Move the HEVC stateless control type out of staging
>>>>>>>      media: controls: Log HEVC stateless control in .std_log
>>>>>>>      media: uapi: Create a dedicated header for Hantro control
>>>>>>>      media: uapi: HEVC: fix padding in v4l2 control structures
>>>>>>>      media: uapi: Change data_bit_offset definition
>>>>>>>      media: uapi: move HEVC stateless controls out of staging
>>>>>>>
>>>>>>> Hans Verkuil (3):
>>>>>>>      videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
>>>>>>>      v4l2-ctrls: add support for dynamically allocated arrays.
>>>>>>>      vivid: add dynamic array test control
>>>>>>>
>>>>>>>     .../userspace-api/media/drivers/hantro.rst    |   5 -
>>>>>>>     .../media/v4l/ext-ctrls-codec-stateless.rst   | 833
>>>>>>> ++++++++++++++++++
>>>>>>>     .../media/v4l/ext-ctrls-codec.rst             | 780
>>>>>>> ----------------
>>>>>>>     .../media/v4l/pixfmt-compressed.rst           |   7 +-
>>>>>>>     .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
>>>>>>>     .../media/v4l/vidioc-queryctrl.rst            |   8 +
>>>>>>>     .../media/videodev2.h.rst.exceptions          |   5 +
>>>>>>>     .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
>>>>>>>     drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
>>>>>>>     drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
>>>>>>>     drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
>>>>>>>     drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
>>>>>>>     drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
>>>>>>>     drivers/staging/media/hantro/hantro_drv.c     |  27 +-
>>>>>>>     drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
>>>>>>>     drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
>>>>>>>     .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
>>>>>>>     .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
>>>>>>>     include/media/hevc-ctrls.h                    | 250 ------
>>>>>>>     include/media/v4l2-ctrls.h                    |  48 +-
>>>>>>>     include/uapi/linux/hantro-media.h             |  19 +
>>>>>>>     include/uapi/linux/v4l2-controls.h            | 439 +++++++++
>>>>>>>     include/uapi/linux/videodev2.h                |  13 +
>>>>>>>     23 files changed, 1697 insertions(+), 1170 deletions(-)
>>>>>>>     delete mode 100644 include/media/hevc-ctrls.h
>>>>>>>     create mode 100644 include/uapi/linux/hantro-media.h
>>>>>>>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 05/15] media: uapi: HEVC: Rename HEVC stateless controls with STATELESS prefix
  2022-02-28 14:08   ` Benjamin Gaignard
@ 2022-04-04 15:56     ` Nicolas Dufresne
  -1 siblings, 0 replies; 81+ messages in thread
From: Nicolas Dufresne @ 2022-04-04 15:56 UTC (permalink / raw)
  To: Benjamin Gaignard, mchehab, ezequiel, p.zabel, gregkh, mripard,
	paul.kocialkowski, wens, jernej.skrabec, jonas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc

Le lundi 28 février 2022 à 15:08 +0100, Benjamin Gaignard a écrit :
> Change HEVC  stateless controls names to V4L2_CID_STATELESS_HEVC instead
> of V4L2_CID_MPEG_VIDEO_HEVC be coherent with v4l2 naming convention.
> 
> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>

Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>

> ---
> version 4:
> - put controls under stateless section in v4l2-ctrls-defs.c
> 
>  .../media/v4l/ext-ctrls-codec.rst             | 26 +++++++--------
>  drivers/media/v4l2-core/v4l2-ctrls-defs.c     | 32 +++++++++----------
>  drivers/staging/media/hantro/hantro_drv.c     | 26 +++++++--------
>  drivers/staging/media/hantro/hantro_hevc.c    |  8 ++---
>  drivers/staging/media/sunxi/cedrus/cedrus.c   | 24 +++++++-------
>  .../staging/media/sunxi/cedrus/cedrus_dec.c   | 10 +++---
>  include/media/hevc-ctrls.h                    | 26 +++++++--------
>  7 files changed, 76 insertions(+), 76 deletions(-)
> 
> diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> index d096cb75993a..acf49420e56d 100644
> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> @@ -2639,7 +2639,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>  
>  .. _v4l2-mpeg-hevc:
>  
> -``V4L2_CID_MPEG_VIDEO_HEVC_SPS (struct)``
> +``V4L2_CID_STATELESS_HEVC_SPS (struct)``
>      Specifies the Sequence Parameter Set fields (as extracted from the
>      bitstream) for the associated HEVC slice data.
>      These bitstream parameters are defined according to :ref:`hevc`.
> @@ -2792,7 +2792,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>  
>      \normalsize
>  
> -``V4L2_CID_MPEG_VIDEO_HEVC_PPS (struct)``
> +``V4L2_CID_STATELESS_HEVC_PPS (struct)``
>      Specifies the Picture Parameter Set fields (as extracted from the
>      bitstream) for the associated HEVC slice data.
>      These bitstream parameters are defined according to :ref:`hevc`.
> @@ -2945,7 +2945,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>  
>      \normalsize
>  
> -``V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS (struct)``
> +``V4L2_CID_STATELESS_HEVC_SLICE_PARAMS (struct)``
>      Specifies various slice-specific parameters, especially from the NAL unit
>      header, general slice segment header and weighted prediction parameter
>      parts of the bitstream.
> @@ -3110,7 +3110,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>  
>      \normalsize
>  
> -``V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX (struct)``
> +``V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (struct)``
>      Specifies the HEVC scaling matrix parameters used for the scaling process
>      for transform coefficients.
>      These matrix and parameters are defined according to :ref:`hevc`.
> @@ -3260,7 +3260,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>  
>      \normalsize
>  
> -``V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE (enum)``
> +``V4L2_CID_STATELESS_HEVC_DECODE_MODE (enum)``
>      Specifies the decoding mode to use. Currently exposes slice-based and
>      frame-based decoding but new modes might be added later on.
>      This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
> @@ -3275,7 +3275,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>         This menu control is not yet part of the public kernel API and
>         it is expected to change.
>  
> -.. c:type:: v4l2_mpeg_video_hevc_decode_mode
> +.. c:type:: v4l2_stateless_hevc_decode_mode
>  
>  .. raw:: latex
>  
> @@ -3288,11 +3288,11 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>      :stub-columns: 0
>      :widths:       1 1 2
>  
> -    * - ``V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_SLICE_BASED``
> +    * - ``V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED``
>        - 0
>        - Decoding is done at the slice granularity.
>          The OUTPUT buffer must contain a single slice.
> -    * - ``V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED``
> +    * - ``V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED``
>        - 1
>        - Decoding is done at the frame granularity.
>          The OUTPUT buffer must contain all slices needed to decode the
> @@ -3302,7 +3302,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>  
>      \normalsize
>  
> -``V4L2_CID_MPEG_VIDEO_HEVC_START_CODE (enum)``
> +``V4L2_CID_STATELESS_HEVC_START_CODE (enum)``
>      Specifies the HEVC slice start code expected for each slice.
>      This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
>      pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE
> @@ -3316,7 +3316,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>         This menu control is not yet part of the public kernel API and
>         it is expected to change.
>  
> -.. c:type:: v4l2_mpeg_video_hevc_start_code
> +.. c:type:: v4l2_stateless_hevc_start_code
>  
>  .. tabularcolumns:: |p{9.2cm}|p{0.6cm}|p{7.5cm}|
>  
> @@ -3325,13 +3325,13 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>      :stub-columns: 0
>      :widths:       1 1 2
>  
> -    * - ``V4L2_MPEG_VIDEO_HEVC_START_CODE_NONE``
> +    * - ``V4L2_STATELESS_HEVC_START_CODE_NONE``
>        - 0
>        - Selecting this value specifies that HEVC slices are passed
>          to the driver without any start code. The bitstream data should be
>          according to :ref:`hevc` 7.3.1.1 General NAL unit syntax, hence
>          contains emulation prevention bytes when required.
> -    * - ``V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B``
> +    * - ``V4L2_STATELESS_HEVC_START_CODE_ANNEX_B``
>        - 1
>        - Selecting this value specifies that HEVC slices are expected
>          to be prefixed by Annex B start codes. According to :ref:`hevc`
> @@ -3364,7 +3364,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>      This provides a bitmask which consists of bits [0, LTR_COUNT-1].
>      This is applicable to the H264 and HEVC encoders.
>  
> -``V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS (struct)``
> +``V4L2_CID_STATELESS_HEVC_DECODE_PARAMS (struct)``
>      Specifies various decode parameters, especially the references picture order
>      count (POC) for all the lists (short, long, before, current, after) and the
>      number of entries for each of them.
> diff --git a/drivers/media/v4l2-core/v4l2-ctrls-defs.c b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
> index 54ca4e6b820b..4b68cbe23309 100644
> --- a/drivers/media/v4l2-core/v4l2-ctrls-defs.c
> +++ b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
> @@ -699,9 +699,9 @@ const char * const *v4l2_ctrl_get_menu(u32 id)
>  		return hevc_tier;
>  	case V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE:
>  		return hevc_loop_filter_mode;
> -	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE:
> +	case V4L2_CID_STATELESS_HEVC_DECODE_MODE:
>  		return hevc_decode_mode;
> -	case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE:
> +	case V4L2_CID_STATELESS_HEVC_START_CODE:
>  		return hevc_start_code;
>  	case V4L2_CID_CAMERA_ORIENTATION:
>  		return camera_orientation;
> @@ -995,13 +995,6 @@ const char *v4l2_ctrl_get_name(u32 id)
>  	case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD:	return "HEVC Size of Length Field";
>  	case V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES:	return "Reference Frames for a P-Frame";
>  	case V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR:		return "Prepend SPS and PPS to IDR";
> -	case V4L2_CID_MPEG_VIDEO_HEVC_SPS:			return "HEVC Sequence Parameter Set";
> -	case V4L2_CID_MPEG_VIDEO_HEVC_PPS:			return "HEVC Picture Parameter Set";
> -	case V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS:		return "HEVC Slice Parameters";
> -	case V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX:		return "HEVC Scaling Matrix";
> -	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS:		return "HEVC Decode Parameters";
> -	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE:		return "HEVC Decode Mode";
> -	case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE:		return "HEVC Start Code";
>  
>  	/* CAMERA controls */
>  	/* Keep the order of the 'case's the same as in v4l2-controls.h! */
> @@ -1180,6 +1173,13 @@ const char *v4l2_ctrl_get_name(u32 id)
>  	case V4L2_CID_STATELESS_MPEG2_QUANTISATION:		return "MPEG-2 Quantisation Matrices";
>  	case V4L2_CID_STATELESS_VP9_COMPRESSED_HDR:	return "VP9 Probabilities Updates";
>  	case V4L2_CID_STATELESS_VP9_FRAME:			return "VP9 Frame Decode Parameters";
> +	case V4L2_CID_STATELESS_HEVC_SPS:			return "HEVC Sequence Parameter Set";
> +	case V4L2_CID_STATELESS_HEVC_PPS:			return "HEVC Picture Parameter Set";
> +	case V4L2_CID_STATELESS_HEVC_SLICE_PARAMS:		return "HEVC Slice Parameters";
> +	case V4L2_CID_STATELESS_HEVC_SCALING_MATRIX:		return "HEVC Scaling Matrix";
> +	case V4L2_CID_STATELESS_HEVC_DECODE_PARAMS:		return "HEVC Decode Parameters";
> +	case V4L2_CID_STATELESS_HEVC_DECODE_MODE:		return "HEVC Decode Mode";
> +	case V4L2_CID_STATELESS_HEVC_START_CODE:		return "HEVC Start Code";
>  
>  	/* Colorimetry controls */
>  	/* Keep the order of the 'case's the same as in v4l2-controls.h! */
> @@ -1355,8 +1355,8 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
>  	case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD:
>  	case V4L2_CID_MPEG_VIDEO_HEVC_TIER:
>  	case V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE:
> -	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE:
> -	case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE:
> +	case V4L2_CID_STATELESS_HEVC_DECODE_MODE:
> +	case V4L2_CID_STATELESS_HEVC_START_CODE:
>  	case V4L2_CID_STATELESS_H264_DECODE_MODE:
>  	case V4L2_CID_STATELESS_H264_START_CODE:
>  	case V4L2_CID_CAMERA_ORIENTATION:
> @@ -1493,19 +1493,19 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
>  	case V4L2_CID_STATELESS_VP8_FRAME:
>  		*type = V4L2_CTRL_TYPE_VP8_FRAME;
>  		break;
> -	case V4L2_CID_MPEG_VIDEO_HEVC_SPS:
> +	case V4L2_CID_STATELESS_HEVC_SPS:
>  		*type = V4L2_CTRL_TYPE_HEVC_SPS;
>  		break;
> -	case V4L2_CID_MPEG_VIDEO_HEVC_PPS:
> +	case V4L2_CID_STATELESS_HEVC_PPS:
>  		*type = V4L2_CTRL_TYPE_HEVC_PPS;
>  		break;
> -	case V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS:
> +	case V4L2_CID_STATELESS_HEVC_SLICE_PARAMS:
>  		*type = V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS;
>  		break;
> -	case V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX:
> +	case V4L2_CID_STATELESS_HEVC_SCALING_MATRIX:
>  		*type = V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX;
>  		break;
> -	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS:
> +	case V4L2_CID_STATELESS_HEVC_DECODE_PARAMS:
>  		*type = V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS;
>  		break;
>  	case V4L2_CID_STATELESS_VP9_COMPRESSED_HDR:
> diff --git a/drivers/staging/media/hantro/hantro_drv.c b/drivers/staging/media/hantro/hantro_drv.c
> index dc768884cb79..6f58c259d8fc 100644
> --- a/drivers/staging/media/hantro/hantro_drv.c
> +++ b/drivers/staging/media/hantro/hantro_drv.c
> @@ -255,7 +255,7 @@ static int hantro_try_ctrl(struct v4l2_ctrl *ctrl)
>  		if (sps->bit_depth_luma_minus8 != 0)
>  			/* Only 8-bit is supported */
>  			return -EINVAL;
> -	} else if (ctrl->id == V4L2_CID_MPEG_VIDEO_HEVC_SPS) {
> +	} else if (ctrl->id == V4L2_CID_STATELESS_HEVC_SPS) {
>  		const struct v4l2_ctrl_hevc_sps *sps = ctrl->p_new.p_hevc_sps;
>  
>  		if (sps->bit_depth_luma_minus8 != sps->bit_depth_chroma_minus8)
> @@ -428,18 +428,18 @@ static const struct hantro_ctrl controls[] = {
>  	}, {
>  		.codec = HANTRO_HEVC_DECODER,
>  		.cfg = {
> -			.id = V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE,
> -			.min = V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED,
> -			.max = V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED,
> -			.def = V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED,
> +			.id = V4L2_CID_STATELESS_HEVC_DECODE_MODE,
> +			.min = V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
> +			.max = V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
> +			.def = V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
>  		},
>  	}, {
>  		.codec = HANTRO_HEVC_DECODER,
>  		.cfg = {
> -			.id = V4L2_CID_MPEG_VIDEO_HEVC_START_CODE,
> -			.min = V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B,
> -			.max = V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B,
> -			.def = V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B,
> +			.id = V4L2_CID_STATELESS_HEVC_START_CODE,
> +			.min = V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
> +			.max = V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
> +			.def = V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
>  		},
>  	}, {
>  		.codec = HANTRO_HEVC_DECODER,
> @@ -459,23 +459,23 @@ static const struct hantro_ctrl controls[] = {
>  	}, {
>  		.codec = HANTRO_HEVC_DECODER,
>  		.cfg = {
> -			.id = V4L2_CID_MPEG_VIDEO_HEVC_SPS,
> +			.id = V4L2_CID_STATELESS_HEVC_SPS,
>  			.ops = &hantro_ctrl_ops,
>  		},
>  	}, {
>  		.codec = HANTRO_HEVC_DECODER,
>  		.cfg = {
> -			.id = V4L2_CID_MPEG_VIDEO_HEVC_PPS,
> +			.id = V4L2_CID_STATELESS_HEVC_PPS,
>  		},
>  	}, {
>  		.codec = HANTRO_HEVC_DECODER,
>  		.cfg = {
> -			.id = V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS,
> +			.id = V4L2_CID_STATELESS_HEVC_DECODE_PARAMS,
>  		},
>  	}, {
>  		.codec = HANTRO_HEVC_DECODER,
>  		.cfg = {
> -			.id = V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX,
> +			.id = V4L2_CID_STATELESS_HEVC_SCALING_MATRIX,
>  		},
>  	}, {
>  		.codec = HANTRO_HEVC_DECODER,
> diff --git a/drivers/staging/media/hantro/hantro_hevc.c b/drivers/staging/media/hantro/hantro_hevc.c
> index b49a41d7ae91..b6ec86d03d91 100644
> --- a/drivers/staging/media/hantro/hantro_hevc.c
> +++ b/drivers/staging/media/hantro/hantro_hevc.c
> @@ -201,22 +201,22 @@ int hantro_hevc_dec_prepare_run(struct hantro_ctx *ctx)
>  	hantro_start_prepare_run(ctx);
>  
>  	ctrls->decode_params =
> -		hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS);
> +		hantro_get_ctrl(ctx, V4L2_CID_STATELESS_HEVC_DECODE_PARAMS);
>  	if (WARN_ON(!ctrls->decode_params))
>  		return -EINVAL;
>  
>  	ctrls->scaling =
> -		hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX);
> +		hantro_get_ctrl(ctx, V4L2_CID_STATELESS_HEVC_SCALING_MATRIX);
>  	if (WARN_ON(!ctrls->scaling))
>  		return -EINVAL;
>  
>  	ctrls->sps =
> -		hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_HEVC_SPS);
> +		hantro_get_ctrl(ctx, V4L2_CID_STATELESS_HEVC_SPS);
>  	if (WARN_ON(!ctrls->sps))
>  		return -EINVAL;
>  
>  	ctrls->pps =
> -		hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_HEVC_PPS);
> +		hantro_get_ctrl(ctx, V4L2_CID_STATELESS_HEVC_PPS);
>  	if (WARN_ON(!ctrls->pps))
>  		return -EINVAL;
>  
> diff --git a/drivers/staging/media/sunxi/cedrus/cedrus.c b/drivers/staging/media/sunxi/cedrus/cedrus.c
> index 4a4b714b0f26..e0428163f82c 100644
> --- a/drivers/staging/media/sunxi/cedrus/cedrus.c
> +++ b/drivers/staging/media/sunxi/cedrus/cedrus.c
> @@ -42,7 +42,7 @@ static int cedrus_try_ctrl(struct v4l2_ctrl *ctrl)
>  		if (sps->bit_depth_luma_minus8 != 0)
>  			/* Only 8-bit is supported */
>  			return -EINVAL;
> -	} else if (ctrl->id == V4L2_CID_MPEG_VIDEO_HEVC_SPS) {
> +	} else if (ctrl->id == V4L2_CID_STATELESS_HEVC_SPS) {
>  		const struct v4l2_ctrl_hevc_sps *sps = ctrl->p_new.p_hevc_sps;
>  		struct cedrus_ctx *ctx = container_of(ctrl->handler, struct cedrus_ctx, hdl);
>  
> @@ -164,42 +164,42 @@ static const struct cedrus_control cedrus_controls[] = {
>  	},
>  	{
>  		.cfg = {
> -			.id	= V4L2_CID_MPEG_VIDEO_HEVC_SPS,
> +			.id	= V4L2_CID_STATELESS_HEVC_SPS,
>  			.ops	= &cedrus_ctrl_ops,
>  		},
>  		.codec		= CEDRUS_CODEC_H265,
>  	},
>  	{
>  		.cfg = {
> -			.id	= V4L2_CID_MPEG_VIDEO_HEVC_PPS,
> +			.id	= V4L2_CID_STATELESS_HEVC_PPS,
>  		},
>  		.codec		= CEDRUS_CODEC_H265,
>  	},
>  	{
>  		.cfg = {
> -			.id	= V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS,
> +			.id	= V4L2_CID_STATELESS_HEVC_SLICE_PARAMS,
>  		},
>  		.codec		= CEDRUS_CODEC_H265,
>  	},
>  	{
>  		.cfg = {
> -			.id	= V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX,
> +			.id	= V4L2_CID_STATELESS_HEVC_SCALING_MATRIX,
>  		},
>  		.codec		= CEDRUS_CODEC_H265,
>  	},
>  	{
>  		.cfg = {
> -			.id	= V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE,
> -			.max	= V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_SLICE_BASED,
> -			.def	= V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_SLICE_BASED,
> +			.id	= V4L2_CID_STATELESS_HEVC_DECODE_MODE,
> +			.max	= V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
> +			.def	= V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
>  		},
>  		.codec		= CEDRUS_CODEC_H265,
>  	},
>  	{
>  		.cfg = {
> -			.id	= V4L2_CID_MPEG_VIDEO_HEVC_START_CODE,
> -			.max	= V4L2_MPEG_VIDEO_HEVC_START_CODE_NONE,
> -			.def	= V4L2_MPEG_VIDEO_HEVC_START_CODE_NONE,
> +			.id	= V4L2_CID_STATELESS_HEVC_START_CODE,
> +			.max	= V4L2_STATELESS_HEVC_START_CODE_NONE,
> +			.def	= V4L2_STATELESS_HEVC_START_CODE_NONE,
>  		},
>  		.codec		= CEDRUS_CODEC_H265,
>  	},
> @@ -211,7 +211,7 @@ static const struct cedrus_control cedrus_controls[] = {
>  	},
>  	{
>  		.cfg = {
> -			.id = V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS,
> +			.id = V4L2_CID_STATELESS_HEVC_DECODE_PARAMS,
>  		},
>  		.codec		= CEDRUS_CODEC_H265,
>  	},
> diff --git a/drivers/staging/media/sunxi/cedrus/cedrus_dec.c b/drivers/staging/media/sunxi/cedrus/cedrus_dec.c
> index a16c1422558f..f6be4ae72ee2 100644
> --- a/drivers/staging/media/sunxi/cedrus/cedrus_dec.c
> +++ b/drivers/staging/media/sunxi/cedrus/cedrus_dec.c
> @@ -65,15 +65,15 @@ void cedrus_device_run(void *priv)
>  
>  	case V4L2_PIX_FMT_HEVC_SLICE:
>  		run.h265.sps = cedrus_find_control_data(ctx,
> -			V4L2_CID_MPEG_VIDEO_HEVC_SPS);
> +			V4L2_CID_STATELESS_HEVC_SPS);
>  		run.h265.pps = cedrus_find_control_data(ctx,
> -			V4L2_CID_MPEG_VIDEO_HEVC_PPS);
> +			V4L2_CID_STATELESS_HEVC_PPS);
>  		run.h265.slice_params = cedrus_find_control_data(ctx,
> -			V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS);
> +			V4L2_CID_STATELESS_HEVC_SLICE_PARAMS);
>  		run.h265.decode_params = cedrus_find_control_data(ctx,
> -			V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS);
> +			V4L2_CID_STATELESS_HEVC_DECODE_PARAMS);
>  		run.h265.scaling_matrix = cedrus_find_control_data(ctx,
> -			V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX);
> +			V4L2_CID_STATELESS_HEVC_SCALING_MATRIX);
>  		break;
>  
>  	case V4L2_PIX_FMT_VP8_FRAME:
> diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
> index a329e086a89a..b3540167df9e 100644
> --- a/include/media/hevc-ctrls.h
> +++ b/include/media/hevc-ctrls.h
> @@ -16,13 +16,13 @@
>  /* The pixel format isn't stable at the moment and will likely be renamed. */
>  #define V4L2_PIX_FMT_HEVC_SLICE v4l2_fourcc('S', '2', '6', '5') /* HEVC parsed slices */
>  
> -#define V4L2_CID_MPEG_VIDEO_HEVC_SPS		(V4L2_CID_CODEC_BASE + 1008)
> -#define V4L2_CID_MPEG_VIDEO_HEVC_PPS		(V4L2_CID_CODEC_BASE + 1009)
> -#define V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS	(V4L2_CID_CODEC_BASE + 1010)
> -#define V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX	(V4L2_CID_CODEC_BASE + 1011)
> -#define V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS	(V4L2_CID_CODEC_BASE + 1012)
> -#define V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE	(V4L2_CID_CODEC_BASE + 1015)
> -#define V4L2_CID_MPEG_VIDEO_HEVC_START_CODE	(V4L2_CID_CODEC_BASE + 1016)
> +#define V4L2_CID_STATELESS_HEVC_SPS		(V4L2_CID_CODEC_BASE + 1008)
> +#define V4L2_CID_STATELESS_HEVC_PPS		(V4L2_CID_CODEC_BASE + 1009)
> +#define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS	(V4L2_CID_CODEC_BASE + 1010)
> +#define V4L2_CID_STATELESS_HEVC_SCALING_MATRIX	(V4L2_CID_CODEC_BASE + 1011)
> +#define V4L2_CID_STATELESS_HEVC_DECODE_PARAMS	(V4L2_CID_CODEC_BASE + 1012)
> +#define V4L2_CID_STATELESS_HEVC_DECODE_MODE	(V4L2_CID_CODEC_BASE + 1015)
> +#define V4L2_CID_STATELESS_HEVC_START_CODE	(V4L2_CID_CODEC_BASE + 1016)
>  
>  /* enum v4l2_ctrl_type type values */
>  #define V4L2_CTRL_TYPE_HEVC_SPS 0x0120
> @@ -31,14 +31,14 @@
>  #define V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX 0x0123
>  #define V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS 0x0124
>  
> -enum v4l2_mpeg_video_hevc_decode_mode {
> -	V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_SLICE_BASED,
> -	V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED,
> +enum v4l2_stateless_hevc_decode_mode {
> +	V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
> +	V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
>  };
>  
> -enum v4l2_mpeg_video_hevc_start_code {
> -	V4L2_MPEG_VIDEO_HEVC_START_CODE_NONE,
> -	V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B,
> +enum v4l2_stateless_hevc_start_code {
> +	V4L2_STATELESS_HEVC_START_CODE_NONE,
> +	V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
>  };
>  
>  #define V4L2_HEVC_SLICE_TYPE_B	0


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

* Re: [PATCH v4 05/15] media: uapi: HEVC: Rename HEVC stateless controls with STATELESS prefix
@ 2022-04-04 15:56     ` Nicolas Dufresne
  0 siblings, 0 replies; 81+ messages in thread
From: Nicolas Dufresne @ 2022-04-04 15:56 UTC (permalink / raw)
  To: Benjamin Gaignard, mchehab, ezequiel, p.zabel, gregkh, mripard,
	paul.kocialkowski, wens, jernej.skrabec, jonas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc

Le lundi 28 février 2022 à 15:08 +0100, Benjamin Gaignard a écrit :
> Change HEVC  stateless controls names to V4L2_CID_STATELESS_HEVC instead
> of V4L2_CID_MPEG_VIDEO_HEVC be coherent with v4l2 naming convention.
> 
> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>

Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>

> ---
> version 4:
> - put controls under stateless section in v4l2-ctrls-defs.c
> 
>  .../media/v4l/ext-ctrls-codec.rst             | 26 +++++++--------
>  drivers/media/v4l2-core/v4l2-ctrls-defs.c     | 32 +++++++++----------
>  drivers/staging/media/hantro/hantro_drv.c     | 26 +++++++--------
>  drivers/staging/media/hantro/hantro_hevc.c    |  8 ++---
>  drivers/staging/media/sunxi/cedrus/cedrus.c   | 24 +++++++-------
>  .../staging/media/sunxi/cedrus/cedrus_dec.c   | 10 +++---
>  include/media/hevc-ctrls.h                    | 26 +++++++--------
>  7 files changed, 76 insertions(+), 76 deletions(-)
> 
> diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> index d096cb75993a..acf49420e56d 100644
> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> @@ -2639,7 +2639,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>  
>  .. _v4l2-mpeg-hevc:
>  
> -``V4L2_CID_MPEG_VIDEO_HEVC_SPS (struct)``
> +``V4L2_CID_STATELESS_HEVC_SPS (struct)``
>      Specifies the Sequence Parameter Set fields (as extracted from the
>      bitstream) for the associated HEVC slice data.
>      These bitstream parameters are defined according to :ref:`hevc`.
> @@ -2792,7 +2792,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>  
>      \normalsize
>  
> -``V4L2_CID_MPEG_VIDEO_HEVC_PPS (struct)``
> +``V4L2_CID_STATELESS_HEVC_PPS (struct)``
>      Specifies the Picture Parameter Set fields (as extracted from the
>      bitstream) for the associated HEVC slice data.
>      These bitstream parameters are defined according to :ref:`hevc`.
> @@ -2945,7 +2945,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>  
>      \normalsize
>  
> -``V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS (struct)``
> +``V4L2_CID_STATELESS_HEVC_SLICE_PARAMS (struct)``
>      Specifies various slice-specific parameters, especially from the NAL unit
>      header, general slice segment header and weighted prediction parameter
>      parts of the bitstream.
> @@ -3110,7 +3110,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>  
>      \normalsize
>  
> -``V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX (struct)``
> +``V4L2_CID_STATELESS_HEVC_SCALING_MATRIX (struct)``
>      Specifies the HEVC scaling matrix parameters used for the scaling process
>      for transform coefficients.
>      These matrix and parameters are defined according to :ref:`hevc`.
> @@ -3260,7 +3260,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>  
>      \normalsize
>  
> -``V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE (enum)``
> +``V4L2_CID_STATELESS_HEVC_DECODE_MODE (enum)``
>      Specifies the decoding mode to use. Currently exposes slice-based and
>      frame-based decoding but new modes might be added later on.
>      This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
> @@ -3275,7 +3275,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>         This menu control is not yet part of the public kernel API and
>         it is expected to change.
>  
> -.. c:type:: v4l2_mpeg_video_hevc_decode_mode
> +.. c:type:: v4l2_stateless_hevc_decode_mode
>  
>  .. raw:: latex
>  
> @@ -3288,11 +3288,11 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>      :stub-columns: 0
>      :widths:       1 1 2
>  
> -    * - ``V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_SLICE_BASED``
> +    * - ``V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED``
>        - 0
>        - Decoding is done at the slice granularity.
>          The OUTPUT buffer must contain a single slice.
> -    * - ``V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED``
> +    * - ``V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED``
>        - 1
>        - Decoding is done at the frame granularity.
>          The OUTPUT buffer must contain all slices needed to decode the
> @@ -3302,7 +3302,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>  
>      \normalsize
>  
> -``V4L2_CID_MPEG_VIDEO_HEVC_START_CODE (enum)``
> +``V4L2_CID_STATELESS_HEVC_START_CODE (enum)``
>      Specifies the HEVC slice start code expected for each slice.
>      This control is used as a modifier for V4L2_PIX_FMT_HEVC_SLICE
>      pixel format. Applications that support V4L2_PIX_FMT_HEVC_SLICE
> @@ -3316,7 +3316,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>         This menu control is not yet part of the public kernel API and
>         it is expected to change.
>  
> -.. c:type:: v4l2_mpeg_video_hevc_start_code
> +.. c:type:: v4l2_stateless_hevc_start_code
>  
>  .. tabularcolumns:: |p{9.2cm}|p{0.6cm}|p{7.5cm}|
>  
> @@ -3325,13 +3325,13 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>      :stub-columns: 0
>      :widths:       1 1 2
>  
> -    * - ``V4L2_MPEG_VIDEO_HEVC_START_CODE_NONE``
> +    * - ``V4L2_STATELESS_HEVC_START_CODE_NONE``
>        - 0
>        - Selecting this value specifies that HEVC slices are passed
>          to the driver without any start code. The bitstream data should be
>          according to :ref:`hevc` 7.3.1.1 General NAL unit syntax, hence
>          contains emulation prevention bytes when required.
> -    * - ``V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B``
> +    * - ``V4L2_STATELESS_HEVC_START_CODE_ANNEX_B``
>        - 1
>        - Selecting this value specifies that HEVC slices are expected
>          to be prefixed by Annex B start codes. According to :ref:`hevc`
> @@ -3364,7 +3364,7 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>      This provides a bitmask which consists of bits [0, LTR_COUNT-1].
>      This is applicable to the H264 and HEVC encoders.
>  
> -``V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS (struct)``
> +``V4L2_CID_STATELESS_HEVC_DECODE_PARAMS (struct)``
>      Specifies various decode parameters, especially the references picture order
>      count (POC) for all the lists (short, long, before, current, after) and the
>      number of entries for each of them.
> diff --git a/drivers/media/v4l2-core/v4l2-ctrls-defs.c b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
> index 54ca4e6b820b..4b68cbe23309 100644
> --- a/drivers/media/v4l2-core/v4l2-ctrls-defs.c
> +++ b/drivers/media/v4l2-core/v4l2-ctrls-defs.c
> @@ -699,9 +699,9 @@ const char * const *v4l2_ctrl_get_menu(u32 id)
>  		return hevc_tier;
>  	case V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE:
>  		return hevc_loop_filter_mode;
> -	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE:
> +	case V4L2_CID_STATELESS_HEVC_DECODE_MODE:
>  		return hevc_decode_mode;
> -	case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE:
> +	case V4L2_CID_STATELESS_HEVC_START_CODE:
>  		return hevc_start_code;
>  	case V4L2_CID_CAMERA_ORIENTATION:
>  		return camera_orientation;
> @@ -995,13 +995,6 @@ const char *v4l2_ctrl_get_name(u32 id)
>  	case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD:	return "HEVC Size of Length Field";
>  	case V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES:	return "Reference Frames for a P-Frame";
>  	case V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR:		return "Prepend SPS and PPS to IDR";
> -	case V4L2_CID_MPEG_VIDEO_HEVC_SPS:			return "HEVC Sequence Parameter Set";
> -	case V4L2_CID_MPEG_VIDEO_HEVC_PPS:			return "HEVC Picture Parameter Set";
> -	case V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS:		return "HEVC Slice Parameters";
> -	case V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX:		return "HEVC Scaling Matrix";
> -	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS:		return "HEVC Decode Parameters";
> -	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE:		return "HEVC Decode Mode";
> -	case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE:		return "HEVC Start Code";
>  
>  	/* CAMERA controls */
>  	/* Keep the order of the 'case's the same as in v4l2-controls.h! */
> @@ -1180,6 +1173,13 @@ const char *v4l2_ctrl_get_name(u32 id)
>  	case V4L2_CID_STATELESS_MPEG2_QUANTISATION:		return "MPEG-2 Quantisation Matrices";
>  	case V4L2_CID_STATELESS_VP9_COMPRESSED_HDR:	return "VP9 Probabilities Updates";
>  	case V4L2_CID_STATELESS_VP9_FRAME:			return "VP9 Frame Decode Parameters";
> +	case V4L2_CID_STATELESS_HEVC_SPS:			return "HEVC Sequence Parameter Set";
> +	case V4L2_CID_STATELESS_HEVC_PPS:			return "HEVC Picture Parameter Set";
> +	case V4L2_CID_STATELESS_HEVC_SLICE_PARAMS:		return "HEVC Slice Parameters";
> +	case V4L2_CID_STATELESS_HEVC_SCALING_MATRIX:		return "HEVC Scaling Matrix";
> +	case V4L2_CID_STATELESS_HEVC_DECODE_PARAMS:		return "HEVC Decode Parameters";
> +	case V4L2_CID_STATELESS_HEVC_DECODE_MODE:		return "HEVC Decode Mode";
> +	case V4L2_CID_STATELESS_HEVC_START_CODE:		return "HEVC Start Code";
>  
>  	/* Colorimetry controls */
>  	/* Keep the order of the 'case's the same as in v4l2-controls.h! */
> @@ -1355,8 +1355,8 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
>  	case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD:
>  	case V4L2_CID_MPEG_VIDEO_HEVC_TIER:
>  	case V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE:
> -	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE:
> -	case V4L2_CID_MPEG_VIDEO_HEVC_START_CODE:
> +	case V4L2_CID_STATELESS_HEVC_DECODE_MODE:
> +	case V4L2_CID_STATELESS_HEVC_START_CODE:
>  	case V4L2_CID_STATELESS_H264_DECODE_MODE:
>  	case V4L2_CID_STATELESS_H264_START_CODE:
>  	case V4L2_CID_CAMERA_ORIENTATION:
> @@ -1493,19 +1493,19 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
>  	case V4L2_CID_STATELESS_VP8_FRAME:
>  		*type = V4L2_CTRL_TYPE_VP8_FRAME;
>  		break;
> -	case V4L2_CID_MPEG_VIDEO_HEVC_SPS:
> +	case V4L2_CID_STATELESS_HEVC_SPS:
>  		*type = V4L2_CTRL_TYPE_HEVC_SPS;
>  		break;
> -	case V4L2_CID_MPEG_VIDEO_HEVC_PPS:
> +	case V4L2_CID_STATELESS_HEVC_PPS:
>  		*type = V4L2_CTRL_TYPE_HEVC_PPS;
>  		break;
> -	case V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS:
> +	case V4L2_CID_STATELESS_HEVC_SLICE_PARAMS:
>  		*type = V4L2_CTRL_TYPE_HEVC_SLICE_PARAMS;
>  		break;
> -	case V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX:
> +	case V4L2_CID_STATELESS_HEVC_SCALING_MATRIX:
>  		*type = V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX;
>  		break;
> -	case V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS:
> +	case V4L2_CID_STATELESS_HEVC_DECODE_PARAMS:
>  		*type = V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS;
>  		break;
>  	case V4L2_CID_STATELESS_VP9_COMPRESSED_HDR:
> diff --git a/drivers/staging/media/hantro/hantro_drv.c b/drivers/staging/media/hantro/hantro_drv.c
> index dc768884cb79..6f58c259d8fc 100644
> --- a/drivers/staging/media/hantro/hantro_drv.c
> +++ b/drivers/staging/media/hantro/hantro_drv.c
> @@ -255,7 +255,7 @@ static int hantro_try_ctrl(struct v4l2_ctrl *ctrl)
>  		if (sps->bit_depth_luma_minus8 != 0)
>  			/* Only 8-bit is supported */
>  			return -EINVAL;
> -	} else if (ctrl->id == V4L2_CID_MPEG_VIDEO_HEVC_SPS) {
> +	} else if (ctrl->id == V4L2_CID_STATELESS_HEVC_SPS) {
>  		const struct v4l2_ctrl_hevc_sps *sps = ctrl->p_new.p_hevc_sps;
>  
>  		if (sps->bit_depth_luma_minus8 != sps->bit_depth_chroma_minus8)
> @@ -428,18 +428,18 @@ static const struct hantro_ctrl controls[] = {
>  	}, {
>  		.codec = HANTRO_HEVC_DECODER,
>  		.cfg = {
> -			.id = V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE,
> -			.min = V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED,
> -			.max = V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED,
> -			.def = V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED,
> +			.id = V4L2_CID_STATELESS_HEVC_DECODE_MODE,
> +			.min = V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
> +			.max = V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
> +			.def = V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
>  		},
>  	}, {
>  		.codec = HANTRO_HEVC_DECODER,
>  		.cfg = {
> -			.id = V4L2_CID_MPEG_VIDEO_HEVC_START_CODE,
> -			.min = V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B,
> -			.max = V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B,
> -			.def = V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B,
> +			.id = V4L2_CID_STATELESS_HEVC_START_CODE,
> +			.min = V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
> +			.max = V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
> +			.def = V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
>  		},
>  	}, {
>  		.codec = HANTRO_HEVC_DECODER,
> @@ -459,23 +459,23 @@ static const struct hantro_ctrl controls[] = {
>  	}, {
>  		.codec = HANTRO_HEVC_DECODER,
>  		.cfg = {
> -			.id = V4L2_CID_MPEG_VIDEO_HEVC_SPS,
> +			.id = V4L2_CID_STATELESS_HEVC_SPS,
>  			.ops = &hantro_ctrl_ops,
>  		},
>  	}, {
>  		.codec = HANTRO_HEVC_DECODER,
>  		.cfg = {
> -			.id = V4L2_CID_MPEG_VIDEO_HEVC_PPS,
> +			.id = V4L2_CID_STATELESS_HEVC_PPS,
>  		},
>  	}, {
>  		.codec = HANTRO_HEVC_DECODER,
>  		.cfg = {
> -			.id = V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS,
> +			.id = V4L2_CID_STATELESS_HEVC_DECODE_PARAMS,
>  		},
>  	}, {
>  		.codec = HANTRO_HEVC_DECODER,
>  		.cfg = {
> -			.id = V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX,
> +			.id = V4L2_CID_STATELESS_HEVC_SCALING_MATRIX,
>  		},
>  	}, {
>  		.codec = HANTRO_HEVC_DECODER,
> diff --git a/drivers/staging/media/hantro/hantro_hevc.c b/drivers/staging/media/hantro/hantro_hevc.c
> index b49a41d7ae91..b6ec86d03d91 100644
> --- a/drivers/staging/media/hantro/hantro_hevc.c
> +++ b/drivers/staging/media/hantro/hantro_hevc.c
> @@ -201,22 +201,22 @@ int hantro_hevc_dec_prepare_run(struct hantro_ctx *ctx)
>  	hantro_start_prepare_run(ctx);
>  
>  	ctrls->decode_params =
> -		hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS);
> +		hantro_get_ctrl(ctx, V4L2_CID_STATELESS_HEVC_DECODE_PARAMS);
>  	if (WARN_ON(!ctrls->decode_params))
>  		return -EINVAL;
>  
>  	ctrls->scaling =
> -		hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX);
> +		hantro_get_ctrl(ctx, V4L2_CID_STATELESS_HEVC_SCALING_MATRIX);
>  	if (WARN_ON(!ctrls->scaling))
>  		return -EINVAL;
>  
>  	ctrls->sps =
> -		hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_HEVC_SPS);
> +		hantro_get_ctrl(ctx, V4L2_CID_STATELESS_HEVC_SPS);
>  	if (WARN_ON(!ctrls->sps))
>  		return -EINVAL;
>  
>  	ctrls->pps =
> -		hantro_get_ctrl(ctx, V4L2_CID_MPEG_VIDEO_HEVC_PPS);
> +		hantro_get_ctrl(ctx, V4L2_CID_STATELESS_HEVC_PPS);
>  	if (WARN_ON(!ctrls->pps))
>  		return -EINVAL;
>  
> diff --git a/drivers/staging/media/sunxi/cedrus/cedrus.c b/drivers/staging/media/sunxi/cedrus/cedrus.c
> index 4a4b714b0f26..e0428163f82c 100644
> --- a/drivers/staging/media/sunxi/cedrus/cedrus.c
> +++ b/drivers/staging/media/sunxi/cedrus/cedrus.c
> @@ -42,7 +42,7 @@ static int cedrus_try_ctrl(struct v4l2_ctrl *ctrl)
>  		if (sps->bit_depth_luma_minus8 != 0)
>  			/* Only 8-bit is supported */
>  			return -EINVAL;
> -	} else if (ctrl->id == V4L2_CID_MPEG_VIDEO_HEVC_SPS) {
> +	} else if (ctrl->id == V4L2_CID_STATELESS_HEVC_SPS) {
>  		const struct v4l2_ctrl_hevc_sps *sps = ctrl->p_new.p_hevc_sps;
>  		struct cedrus_ctx *ctx = container_of(ctrl->handler, struct cedrus_ctx, hdl);
>  
> @@ -164,42 +164,42 @@ static const struct cedrus_control cedrus_controls[] = {
>  	},
>  	{
>  		.cfg = {
> -			.id	= V4L2_CID_MPEG_VIDEO_HEVC_SPS,
> +			.id	= V4L2_CID_STATELESS_HEVC_SPS,
>  			.ops	= &cedrus_ctrl_ops,
>  		},
>  		.codec		= CEDRUS_CODEC_H265,
>  	},
>  	{
>  		.cfg = {
> -			.id	= V4L2_CID_MPEG_VIDEO_HEVC_PPS,
> +			.id	= V4L2_CID_STATELESS_HEVC_PPS,
>  		},
>  		.codec		= CEDRUS_CODEC_H265,
>  	},
>  	{
>  		.cfg = {
> -			.id	= V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS,
> +			.id	= V4L2_CID_STATELESS_HEVC_SLICE_PARAMS,
>  		},
>  		.codec		= CEDRUS_CODEC_H265,
>  	},
>  	{
>  		.cfg = {
> -			.id	= V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX,
> +			.id	= V4L2_CID_STATELESS_HEVC_SCALING_MATRIX,
>  		},
>  		.codec		= CEDRUS_CODEC_H265,
>  	},
>  	{
>  		.cfg = {
> -			.id	= V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE,
> -			.max	= V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_SLICE_BASED,
> -			.def	= V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_SLICE_BASED,
> +			.id	= V4L2_CID_STATELESS_HEVC_DECODE_MODE,
> +			.max	= V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
> +			.def	= V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
>  		},
>  		.codec		= CEDRUS_CODEC_H265,
>  	},
>  	{
>  		.cfg = {
> -			.id	= V4L2_CID_MPEG_VIDEO_HEVC_START_CODE,
> -			.max	= V4L2_MPEG_VIDEO_HEVC_START_CODE_NONE,
> -			.def	= V4L2_MPEG_VIDEO_HEVC_START_CODE_NONE,
> +			.id	= V4L2_CID_STATELESS_HEVC_START_CODE,
> +			.max	= V4L2_STATELESS_HEVC_START_CODE_NONE,
> +			.def	= V4L2_STATELESS_HEVC_START_CODE_NONE,
>  		},
>  		.codec		= CEDRUS_CODEC_H265,
>  	},
> @@ -211,7 +211,7 @@ static const struct cedrus_control cedrus_controls[] = {
>  	},
>  	{
>  		.cfg = {
> -			.id = V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS,
> +			.id = V4L2_CID_STATELESS_HEVC_DECODE_PARAMS,
>  		},
>  		.codec		= CEDRUS_CODEC_H265,
>  	},
> diff --git a/drivers/staging/media/sunxi/cedrus/cedrus_dec.c b/drivers/staging/media/sunxi/cedrus/cedrus_dec.c
> index a16c1422558f..f6be4ae72ee2 100644
> --- a/drivers/staging/media/sunxi/cedrus/cedrus_dec.c
> +++ b/drivers/staging/media/sunxi/cedrus/cedrus_dec.c
> @@ -65,15 +65,15 @@ void cedrus_device_run(void *priv)
>  
>  	case V4L2_PIX_FMT_HEVC_SLICE:
>  		run.h265.sps = cedrus_find_control_data(ctx,
> -			V4L2_CID_MPEG_VIDEO_HEVC_SPS);
> +			V4L2_CID_STATELESS_HEVC_SPS);
>  		run.h265.pps = cedrus_find_control_data(ctx,
> -			V4L2_CID_MPEG_VIDEO_HEVC_PPS);
> +			V4L2_CID_STATELESS_HEVC_PPS);
>  		run.h265.slice_params = cedrus_find_control_data(ctx,
> -			V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS);
> +			V4L2_CID_STATELESS_HEVC_SLICE_PARAMS);
>  		run.h265.decode_params = cedrus_find_control_data(ctx,
> -			V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS);
> +			V4L2_CID_STATELESS_HEVC_DECODE_PARAMS);
>  		run.h265.scaling_matrix = cedrus_find_control_data(ctx,
> -			V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX);
> +			V4L2_CID_STATELESS_HEVC_SCALING_MATRIX);
>  		break;
>  
>  	case V4L2_PIX_FMT_VP8_FRAME:
> diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
> index a329e086a89a..b3540167df9e 100644
> --- a/include/media/hevc-ctrls.h
> +++ b/include/media/hevc-ctrls.h
> @@ -16,13 +16,13 @@
>  /* The pixel format isn't stable at the moment and will likely be renamed. */
>  #define V4L2_PIX_FMT_HEVC_SLICE v4l2_fourcc('S', '2', '6', '5') /* HEVC parsed slices */
>  
> -#define V4L2_CID_MPEG_VIDEO_HEVC_SPS		(V4L2_CID_CODEC_BASE + 1008)
> -#define V4L2_CID_MPEG_VIDEO_HEVC_PPS		(V4L2_CID_CODEC_BASE + 1009)
> -#define V4L2_CID_MPEG_VIDEO_HEVC_SLICE_PARAMS	(V4L2_CID_CODEC_BASE + 1010)
> -#define V4L2_CID_MPEG_VIDEO_HEVC_SCALING_MATRIX	(V4L2_CID_CODEC_BASE + 1011)
> -#define V4L2_CID_MPEG_VIDEO_HEVC_DECODE_PARAMS	(V4L2_CID_CODEC_BASE + 1012)
> -#define V4L2_CID_MPEG_VIDEO_HEVC_DECODE_MODE	(V4L2_CID_CODEC_BASE + 1015)
> -#define V4L2_CID_MPEG_VIDEO_HEVC_START_CODE	(V4L2_CID_CODEC_BASE + 1016)
> +#define V4L2_CID_STATELESS_HEVC_SPS		(V4L2_CID_CODEC_BASE + 1008)
> +#define V4L2_CID_STATELESS_HEVC_PPS		(V4L2_CID_CODEC_BASE + 1009)
> +#define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS	(V4L2_CID_CODEC_BASE + 1010)
> +#define V4L2_CID_STATELESS_HEVC_SCALING_MATRIX	(V4L2_CID_CODEC_BASE + 1011)
> +#define V4L2_CID_STATELESS_HEVC_DECODE_PARAMS	(V4L2_CID_CODEC_BASE + 1012)
> +#define V4L2_CID_STATELESS_HEVC_DECODE_MODE	(V4L2_CID_CODEC_BASE + 1015)
> +#define V4L2_CID_STATELESS_HEVC_START_CODE	(V4L2_CID_CODEC_BASE + 1016)
>  
>  /* enum v4l2_ctrl_type type values */
>  #define V4L2_CTRL_TYPE_HEVC_SPS 0x0120
> @@ -31,14 +31,14 @@
>  #define V4L2_CTRL_TYPE_HEVC_SCALING_MATRIX 0x0123
>  #define V4L2_CTRL_TYPE_HEVC_DECODE_PARAMS 0x0124
>  
> -enum v4l2_mpeg_video_hevc_decode_mode {
> -	V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_SLICE_BASED,
> -	V4L2_MPEG_VIDEO_HEVC_DECODE_MODE_FRAME_BASED,
> +enum v4l2_stateless_hevc_decode_mode {
> +	V4L2_STATELESS_HEVC_DECODE_MODE_SLICE_BASED,
> +	V4L2_STATELESS_HEVC_DECODE_MODE_FRAME_BASED,
>  };
>  
> -enum v4l2_mpeg_video_hevc_start_code {
> -	V4L2_MPEG_VIDEO_HEVC_START_CODE_NONE,
> -	V4L2_MPEG_VIDEO_HEVC_START_CODE_ANNEX_B,
> +enum v4l2_stateless_hevc_start_code {
> +	V4L2_STATELESS_HEVC_START_CODE_NONE,
> +	V4L2_STATELESS_HEVC_START_CODE_ANNEX_B,
>  };
>  
>  #define V4L2_HEVC_SLICE_TYPE_B	0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 06/15] media: uapi: HEVC: Add document uAPI structure
  2022-02-28 14:08   ` Benjamin Gaignard
@ 2022-04-04 16:20     ` Nicolas Dufresne
  -1 siblings, 0 replies; 81+ messages in thread
From: Nicolas Dufresne @ 2022-04-04 16:20 UTC (permalink / raw)
  To: Benjamin Gaignard, mchehab, ezequiel, p.zabel, gregkh, mripard,
	paul.kocialkowski, wens, jernej.skrabec, jonas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc

Le lundi 28 février 2022 à 15:08 +0100, Benjamin Gaignard a écrit :
> Add kernel-doc documentation for all the HEVC structures.
> 
> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
> ---
> Version 4:
> - Fix space/tab issue in kernel-doc
> 
>  .../media/v4l/ext-ctrls-codec.rst             | 156 +++++++------
>  include/media/hevc-ctrls.h                    | 217 +++++++++++++++++-
>  2 files changed, 304 insertions(+), 69 deletions(-)
> 
> diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> index acf49420e56d..ac13a3eb85c2 100644
> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> @@ -2673,70 +2673,76 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>          of H.265 specifications.
>      * - __u16
>        - ``pic_width_in_luma_samples``
> -      -
> +      - Specifies the width of each decoded picture in units of luma samples.
>      * - __u16
>        - ``pic_height_in_luma_samples``
> -      -
> +      - Specifies the height of each decoded picture in units of luma samples.
>      * - __u8
>        - ``bit_depth_luma_minus8``
> -      -
> +      - Specifies the bit depth of the samples of the luma array.
>      * - __u8
>        - ``bit_depth_chroma_minus8``
> -      -
> +      - Specifies the bit depth of the samples of the chroma arrays.
>      * - __u8
>        - ``log2_max_pic_order_cnt_lsb_minus4``
> -      -
> +      - Specifies the value of the variable MaxPicOrderCntLsb.
>      * - __u8
>        - ``sps_max_dec_pic_buffering_minus1``
> -      -
> +      - Plus 1 specifies the maximum required size of the decoded picture buffer for
> +        the CVS
>      * - __u8
>        - ``sps_max_num_reorder_pics``
> -      -
> +      - Indicates the maximum allowed number of pictures.
>      * - __u8
>        - ``sps_max_latency_increase_plus1``
> -      -
> +      - Not equal to 0 is used to compute the value of SpsMaxLatencyPictures[i].
>      * - __u8
>        - ``log2_min_luma_coding_block_size_minus3``
> -      -
> +      - Plus 3 specifies the minimum luma coding block size.
>      * - __u8
>        - ``log2_diff_max_min_luma_coding_block_size``
> -      -
> +      - Specifies the difference between the maximum and minimum luma coding block size.
>      * - __u8
>        - ``log2_min_luma_transform_block_size_minus2``
> -      -
> +      - Plus 2 specifies the minimum luma transform block size.
>      * - __u8
>        - ``log2_diff_max_min_luma_transform_block_size``
> -      -
> +      - Specifies the difference between the maximum and minimum luma transform block size.
>      * - __u8
>        - ``max_transform_hierarchy_depth_inter``
> -      -
> +      - Specifies the maximum hierarchy depth for transform units of coding units coded
> +        in inter prediction mode.
>      * - __u8
>        - ``max_transform_hierarchy_depth_intra``
> -      -
> +      - Specifies the maximum hierarchy depth for transform units of coding units coded in
> +        intra prediction mode.
>      * - __u8
>        - ``pcm_sample_bit_depth_luma_minus1``
> -      -
> +      - Specifies the number of bits used to represent each of PCM sample values of the
> +        luma component.
>      * - __u8
>        - ``pcm_sample_bit_depth_chroma_minus1``
> -      -
> +      - Specifies the number of bits used to represent each of PCM sample values of
> +        the chroma components.
>      * - __u8
>        - ``log2_min_pcm_luma_coding_block_size_minus3``
> -      -
> +      - Plus 3 specifies the minimum size of coding blocks.
>      * - __u8
>        - ``log2_diff_max_min_pcm_luma_coding_block_size``
> -      -
> +      - Specifies the difference between the maximum and minimum size of coding blocks.
>      * - __u8
>        - ``num_short_term_ref_pic_sets``
> -      -
> +      - Specifies the number of st_ref_pic_set() syntax structures included in the SPS.
>      * - __u8
>        - ``num_long_term_ref_pics_sps``
> -      -
> +      - Specifies the number of candidate long-term reference pictures that are
> +        specified in the SPS.
>      * - __u8
>        - ``chroma_format_idc``
> -      -
> +      - Specifies the chroma sampling.
>      * - __u8
>        - ``sps_max_sub_layers_minus1``
> -      -
> +      - plus 1 specifies the maximum number of temporal sub-layers.
>      * - __u64
>        - ``flags``
>        - See :ref:`Sequence Parameter Set Flags <hevc_sps_flags>`
> @@ -2815,7 +2821,8 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>        - Identifies the PPS for reference by other syntax elements.
>      * - __u8
>        - ``num_extra_slice_header_bits``
> -      -
> +      - Specifies the number of extra slice header bits that are present
> +        in the slice header RBSP for coded pictures referring to the PPS.
>      * - __u8
>        - ``num_ref_idx_l0_default_active_minus1``
>        - Specifies the inferred value of num_ref_idx_l0_active_minus1
> @@ -2824,37 +2831,42 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>        - Specifies the inferred value of num_ref_idx_l1_active_minus1
>      * - __s8
>        - ``init_qp_minus26``
> -      -
> +      - Plus 26 specifies the initial value of SliceQp Y for each slice
> +        referring to the PPS.
>      * - __u8
>        - ``diff_cu_qp_delta_depth``
> -      -
> +      - Specifies the difference between the luma coding tree block size
> +        and the minimum luma coding block size of coding units that
> +        convey cu_qp_delta_abs and cu_qp_delta_sign_flag.
>      * - __s8
>        - ``pps_cb_qp_offset``
> -      -
> +      - Specify the offsets to the luma quantization parameter Cb.
>      * - __s8
>        - ``pps_cr_qp_offset``
> -      -
> +      - Specify the offsets to the luma quantization parameter Cr.
>      * - __u8
>        - ``num_tile_columns_minus1``
> -      -
> +      - Plus 1 specifies the number of tile columns partitioning the picture.
>      * - __u8
>        - ``num_tile_rows_minus1``
> -      -
> +      - Plus 1 specifies the number of tile rows partitioning the picture.
>      * - __u8
>        - ``column_width_minus1[20]``
> -      -
> +      - Plus 1 specifies the width of the i-th tile column in units of
> +        coding tree blocks.
>      * - __u8
>        - ``row_height_minus1[22]``
> -      -
> +      - Plus 1 specifies the height of the i-th tile row in units of coding
> +        tree blocks.
>      * - __s8
>        - ``pps_beta_offset_div2``
> -      -
> +      - Specify the default deblocking parameter offsets for beta divided by 2.
>      * - __s8
>        - ``pps_tc_offset_div2``
> -      -
> +      - Specify the default deblocking parameter offsets for tC divided by 2.
>      * - __u8
>        - ``log2_parallel_merge_level_minus2``
> -      -
> +      - Plus 2 specifies the value of the variable Log2ParMrgLevel.
>      * - __u8
>        - ``padding[4]``
>        - Applications and drivers must set this to zero.
> @@ -2976,10 +2988,10 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>        - Offset (in bits) to the video data in the current slice data.
>      * - __u8
>        - ``nal_unit_type``
> -      -
> +      - Specifies the coding type of the slice (B, P or I).
>      * - __u8
>        - ``nuh_temporal_id_plus1``
> -      -
> +      - Minus 1 specifies a temporal identifier for the NAL unit.
>      * - __u8
>        - ``slice_type``
>        -
> @@ -2987,52 +2999,56 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>  	V4L2_HEVC_SLICE_TYPE_B).
>      * - __u8
>        - ``colour_plane_id``
> -      -
> +      - Specifies the colour plane associated with the current slice.
>      * - __u16
>        - ``slice_pic_order_cnt``
> -      -
> +      - Specifies the picture order count.
>      * - __u8
>        - ``num_ref_idx_l0_active_minus1``
> -      -
> +      - Specifies the maximum reference index for reference picture list 0
> +        that may be used to decode the slice.
>      * - __u8
>        - ``num_ref_idx_l1_active_minus1``
> -      -
> +      - Specifies the maximum reference index for reference picture list 1
> +        that may be used to decode the slice.
>      * - __u8
>        - ``collocated_ref_idx``
> -      -
> +      - Specifies the reference index of the collocated picture used for
> +        temporal motion vector prediction.
>      * - __u8
>        - ``five_minus_max_num_merge_cand``
> -      -
> +      - Specifies the maximum number of merging motion vector prediction
> +        candidates supported in the slice subtracted from 5.
>      * - __s8
>        - ``slice_qp_delta``
> -      -
> +      - Specifies the initial value of QpY to be used for the coding blocks in the slice.
>      * - __s8
>        - ``slice_cb_qp_offset``
> -      -
> +      - Specifies a difference to be added to the value of pps_cb_qp_offset.
>      * - __s8
>        - ``slice_cr_qp_offset``
> -      -
> +      - Specifies a difference to be added to the value of pps_cr_qp_offset.
>      * - __s8
>        - ``slice_act_y_qp_offset``
> -      -
> +      - screen content extension parameters
>      * - __s8
>        - ``slice_act_cb_qp_offset``
> -      -
> +      - screen content extension parameters
>      * - __s8
>        - ``slice_act_cr_qp_offset``
> -      -
> +      - screen content extension parameters
>      * - __s8
>        - ``slice_beta_offset_div2``
> -      -
> +      - Specify the deblocking parameter offsets for beta divided by 2.
>      * - __s8
>        - ``slice_tc_offset_div2``
> -      -
> +      - Specify the deblocking parameter offsets for tC divided by 2.
>      * - __u8
>        - ``pic_struct``
> -      -
> +      - Indicates whether a picture should be displayed as a frame or as one or more fields.
>      * - __u32
>        - ``slice_segment_addr``
> -      -
> +      - Specifies the address of the first coding tree block in the slice segment.
>      * - __u8
>        - ``ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>        - The list of L0 reference elements as indices in the DPB.
> @@ -3222,36 +3238,44 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>      :stub-columns: 0
>      :widths:       1 1 2
>  
> -    * - __u8
> -      - ``luma_log2_weight_denom``
> -      -
> -    * - __s8
> -      - ``delta_chroma_log2_weight_denom``
> -      -
>      * - __s8
>        - ``delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> -      -
> +      - The difference of the weighting factor applied to the luma
> +        prediction value for list 0.
>      * - __s8
>        - ``luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> -      -
> +      - The additive offset applied to the luma prediction value for list 0.
>      * - __s8
>        - ``delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
> -      -
> +      - The difference of the weighting factor applied to the chroma
> +        prediction value for list 0.
>      * - __s8
>        - ``chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
> -      -
> +      - The difference of the additive offset applied to the chroma
> +        prediction values for list 0.
>      * - __s8
>        - ``delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> -      -
> +      - The difference of the weighting factor applied to the luma
> +        prediction value for list 1.
>      * - __s8
>        - ``luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> -      -
> +      - The additive offset applied to the luma prediction value for list 1.
>      * - __s8
>        - ``delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
> -      -
> +      - The difference of the weighting factor applied to the chroma
> +        prediction value for list 1.
>      * - __s8
>        - ``chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
> -      -
> +      - The difference of the additive offset applied to the chroma
> +        prediction values for list 1.
> +    * - __u8
> +      - ``luma_log2_weight_denom``
> +      - The base 2 logarithm of the denominator for all luma weighting
> +        factors.
> +    * - __s8
> +      - ``delta_chroma_log2_weight_denom``
> +      - The difference of the base 2 logarithm of the denominator for
> +        all chroma weighting factors.
>      * - __u8
>        - ``padding[6]``
>        - Applications and drivers must set this to zero.
> diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
> index b3540167df9e..149384ca4c84 100644
> --- a/include/media/hevc-ctrls.h
> +++ b/include/media/hevc-ctrls.h
> @@ -55,9 +55,68 @@ enum v4l2_stateless_hevc_start_code {
>  #define V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED		(1ULL << 7)
>  #define V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED	(1ULL << 8)
>  
> -/* The controls are not stable at the moment and will likely be reworked. */
> +/**
> + * struct v4l2_ctrl_hevc_sps - ITU-T Rec. H.265: Sequence parameter set
> + *
> + * @video_parameter_set_id: specifies the value of the
> + *			    vps_video_parameter_set_id of the active VPS
> + * @seq_parameter_set_id: provides an identifier for the SPS for
> + *			  reference by other syntax elements
> + * @pic_width_in_luma_samples: specifies the width of each decoded picture
> + *			       in units of luma samples
> + * @pic_height_in_luma_samples: specifies the height of each decoded picture
> + *				in units of luma samples
> + * @bit_depth_luma_minus8: specifies the bit depth of the samples of the
> + *			   luma array
> + * @bit_depth_chroma_minus8: specifies the bit depth of the samples of the
> + *			     chroma arrays
> + * @log2_max_pic_order_cnt_lsb_minus4: specifies the value of the variable
> + *				       MaxPicOrderCntLsb
> + * @sps_max_dec_pic_buffering_minus1: plus 1 specifies the maximum required
> + *				      size of the decoded picture buffer for
> + *				      the CVS
> + * @sps_max_num_reorder_pics: indicates the maximum allowed number of pictures
> + * @sps_max_latency_increase_plus1: not equal to 0 is used to compute the
> + *				    value of SpsMaxLatencyPictures[i]
> + * @log2_min_luma_coding_block_size_minus3: plus 3 specifies the minimum
> + *					    luma coding block size
> + * @log2_diff_max_min_luma_coding_block_size: specifies the difference between
> + *					      the maximum and minimum luma
> + *					      coding block size
> + * @log2_min_luma_transform_block_size_minus2: plus 2 specifies the minimum luma
> + *					       transform block size
> + * @log2_diff_max_min_luma_transform_block_size: specifies the difference between
> + *						 the maximum and minimum luma
> + *						 transform block size
> + * @max_transform_hierarchy_depth_inter: specifies the maximum hierarchy
> + *					 depth for transform units of
> + *					 coding units coded in inter
> + *					 prediction mode
> + * @max_transform_hierarchy_depth_intra: specifies the maximum hierarchy
> + *					 depth for transform units of
> + *					 coding units coded in intra
> + *					 prediction mode
> + * @pcm_sample_bit_depth_luma_minus1: specifies the number of bits used to
> + *				      represent each of PCM sample values of the
> + *				      luma component
> + * @pcm_sample_bit_depth_chroma_minus1: specifies the number of bits used to
> + *					represent each of PCM sample values of
> + *					the chroma components
> + * @log2_min_pcm_luma_coding_block_size_minus3: plus 3 specifies the minimum size
> + *						of coding blocks
> + * @log2_diff_max_min_pcm_luma_coding_block_size: specifies the difference between
> + *						  the maximum and minimum size of
> + *						  coding blocks
> + * @num_short_term_ref_pic_sets: speciefies the number of st_ref_pic_set()
> + *				 syntax structures included in the SPS
> + * @num_long_term_ref_pics_sps:	specifies the number of candidate long-term
> + *				reference pictures that are specified in the SPS
> + * @chroma_format_idc: specifies the chroma sampling
> + * @sps_max_sub_layers_minus1: plus 1 specifies the maximum number of temporal
> + *			       sub-layers
> + * @flags: see V4L2_HEVC_SPS_FLAG_{}
> + */
>  struct v4l2_ctrl_hevc_sps {
> -	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Sequence parameter set */
>  	__u8	video_parameter_set_id;
>  	__u8	seq_parameter_set_id;
>  	__u16	pic_width_in_luma_samples;
> @@ -108,8 +167,43 @@ struct v4l2_ctrl_hevc_sps {
>  #define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT	(1ULL << 19)
>  #define V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING			(1ULL << 20)
>  
> +/**
> + * struct v4l2_ctrl_hevc_pps - ITU-T Rec. H.265: Picture parameter set
> + *
> + * @pic_parameter_set_id: identifies the PPS for reference by other
> + *			  syntax elements
> + * @num_extra_slice_header_bits: specifies the number of extra slice header
> + *				 bits that are present in the slice header RBSP
> + *				 for coded pictures referring to the PPS.
> + * @num_ref_idx_l0_default_active_minus1: specifies the inferred value of
> + *					  num_ref_idx_l0_active_minus1
> + * @num_ref_idx_l1_default_active_minus1: specifies the inferred value of
> + *					  num_ref_idx_l1_active_minus1
> + * @init_qp_minus26: plus 26 specifies the initial value of SliceQp Y for
> + *		     each slice referring to the PPS
> + * @diff_cu_qp_delta_depth: specifies the difference between the luma coding
> + *			    tree block size and the minimum luma coding block
> + *			    size of coding units that convey cu_qp_delta_abs
> + *			    and cu_qp_delta_sign_flag
> + * @pps_cb_qp_offset: specify the offsets to the luma quantization parameter Cb
> + * @pps_cr_qp_offset: specify the offsets to the luma quantization parameter Cr
> + * @num_tile_columns_minus1: plus 1 specifies the number of tile columns
> + *			     partitioning the picture
> + * @num_tile_rows_minus1: plus 1 specifies the number of tile rows partitioning
> + *			  the picture
> + * @column_width_minus1: plus 1 specifies the width of the i-th tile column in
> + *			 units of coding tree blocks
> + * @row_height_minus1: plus 1 specifies the height of the i-th tile row in
> + *		       units of coding tree blocks
> + * @pps_beta_offset_div2: specify the default deblocking parameter offsets for
> + *			  beta divided by 2
> + * @pps_tc_offset_div2: specify the default deblocking parameter offsets for tC
> + *			divided by 2
> + * @log2_parallel_merge_level_minus2: plus 2 specifies the value of the variable
> + *				      Log2ParMrgLevel
> + * @flags: see V4L2_HEVC_PPS_FLAG_{}
> + */
>  struct v4l2_ctrl_hevc_pps {
> -	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture parameter set */
>  	__u8	pic_parameter_set_id;
>  	__u8	num_extra_slice_header_bits;
>  	__u8	num_ref_idx_l0_default_active_minus1;
> @@ -134,6 +228,14 @@ struct v4l2_ctrl_hevc_pps {
>  
>  #define V4L2_HEVC_DPB_ENTRIES_NUM_MAX		16
>  
> +/**
> + * struct v4l2_hevc_dpb_entry - HEVC decoded picture buffer entry
> + *
> + * @timestamp: timestamp of the V4L2 capture buffer to use as reference.
> + * @flags: long term flag for the reference frame
> + * @field_pic: whether the reference is a field picture or a frame.
> + * @pic_order_cnt: the picture order count of the reference.

Unless I missed that change, there is two POC (its an array), but the doc does
not reflect this.

  __u16   pic_order_cnt[2];

In H.264, this has been split in two:

        __s32 top_field_order_cnt;
        __s32 bottom_field_order_cnt;

I'm also noticing the difference in number of bits. HEVC could have been
different, but the spec says:

   The value of PicOrderCntVal shall be in the range of −2^31 to 2^31 − 1,
   inclusive
   
Clarification needed if this isn't meant to be PicOrderCntVal but
pic_order_cnt_lsb. That being said, it looks like DXVA exposes that as a signed
integer (32 bit).

> + */
>  struct v4l2_hevc_dpb_entry {
>  	__u64	timestamp;
>  	__u8	flags;
> @@ -142,6 +244,31 @@ struct v4l2_hevc_dpb_entry {
>  	__u8	padding[2];
>  };
>  
> +/**
> + * struct v4l2_hevc_pred_weight_table - HEVC weighted prediction parameters
> + *
> + * @delta_luma_weight_l0: the difference of the weighting factor applied
> + *			  to the luma prediction value for list 0
> + * @luma_offset_l0: the additive offset applied to the luma prediction value
> + *		    for list 0
> + * @delta_chroma_weight_l0: the difference of the weighting factor applied
> + *			    to the chroma prediction values for list 0
> + * @chroma_offset_l0: the difference of the additive offset applied to
> + *		      the chroma prediction values for list 0
> + * @delta_luma_weight_l1: the difference of the weighting factor applied
> + *			  to the luma prediction value for list 1
> + * @luma_offset_l1: the additive offset applied to the luma prediction value
> + *		    for list 1
> + * @delta_chroma_weight_l1: the difference of the weighting factor applied
> + *			    to the chroma prediction values for list 1
> + * @chroma_offset_l1: the difference of the additive offset applied to
> + *		      the chroma prediction values for list 1
> + * @luma_log2_weight_denom: the base 2 logarithm of the denominator for
> + *			    all luma weighting factors
> + * @delta_chroma_log2_weight_denom: the difference of the base 2 logarithm
> + *				    of the denominator for all chroma
> + *				    weighting factors
> + */
>  struct v4l2_hevc_pred_weight_table {
>  	__s8	delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>  	__s8	luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
> @@ -170,6 +297,50 @@ struct v4l2_hevc_pred_weight_table {
>  #define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 8)
>  #define V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT	(1ULL << 9)
>  
> +/**
> + * v4l2_ctrl_hevc_slice_params - HEVC slice parameters
> + *
> + * @bit_size: size (in bits) of the current slice data
> + * @data_bit_offset: offset (in bits) to the video data in the current slice data
> + * @nal_unit_type: specifies the coding type of the slice (B, P or I)
> + * @nuh_temporal_id_plus1: minus 1 specifies a temporal identifier for the NAL unit
> + * @slice_type: see V4L2_HEVC_SLICE_TYPE_{}
> + * @colour_plane_id: specifies the colour plane associated with the current slice
> + * @slice_pic_order_cnt: specifies the picture order count
> + * @num_ref_idx_l0_active_minus1: specifies the maximum reference index for
> + *				  reference picture list 0 that may be used to decode
> + *				  the slice
> + * @num_ref_idx_l1_active_minus1: specifies the maximum reference index for
> + *				  reference picture list 1 that may be used to decode
> + *				  the slice
> + * @collocated_ref_idx: specifies the reference index of the collocated picture used
> + *			for temporal motion vector prediction
> + * @five_minus_max_num_merge_cand: specifies the maximum number of merging
> + *				   motion vector prediction candidates supported in
> + *				   the slice subtracted from 5
> + * @slice_qp_delta: specifies the initial value of QpY to be used for the coding
> + *		    blocks in the slice
> + * @slice_cb_qp_offset: specifies a difference to be added to the value of pps_cb_qp_offset
> + * @slice_cr_qp_offset: specifies a difference to be added to the value of pps_cr_qp_offset
> + * @slice_act_y_qp_offset: screen content extension parameters
> + * @slice_act_cb_qp_offset: screen content extension parameters
> + * @slice_act_cr_qp_offset: screen content extension parameters
> + * @slice_beta_offset_div2: specify the deblocking parameter offsets for beta divided by 2
> + * @slice_tc_offset_div2: specify the deblocking parameter offsets for tC divided by 2
> + * @pic_struct: indicates whether a picture should be displayed as a frame or as one or
> + *		more fields
> + * @slice_segment_addr: specifies the address of the first coding tree block in
> + *			the slice segment
> + * @ref_idx_l0: the list of L0 reference elements as indices in the DPB
> + * @ref_idx_l1: the list of L1 reference elements as indices in the DPB
> + * @short_term_ref_pic_set_size: specifies the number of st_ref_pic_set()
> + *				 syntax structures included in the SPS
> + * @long_term_ref_pic_set_size: specifies the number of candidate long-term
> + *				reference pictures that are specified in the SPS
> + * @pred_weight_table: the prediction weight coefficients for inter-picture
> + *		       prediction
> + * @flags: see V4L2_HEVC_SLICE_PARAMS_FLAG_{}
> + */
>  struct v4l2_ctrl_hevc_slice_params {
>  	__u32	bit_size;
>  	__u32	data_bit_offset;
> @@ -216,6 +387,24 @@ struct v4l2_ctrl_hevc_slice_params {
>  #define V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC		0x2
>  #define V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR  0x4
>  
> +/**
> + * struct v4l2_ctrl_hevc_decode_params - HEVC decode parameters
> + *
> + * @pic_order_cnt_val: picture order count
> + * @num_active_dpb_entries: the number of entries in dpb
> + * @dpb: the decoded picture buffer, for meta-data about reference frames
> + * @num_poc_st_curr_before: the number of reference pictures in the short-term
> + *			    set that come before the current frame
> + * @num_poc_st_curr_after: the number of reference pictures in the short-term
> + *			   set that come after the current frame
> + * @num_poc_lt_curr: the number of reference pictures in the long-term set
> + * @poc_st_curr_before: provides the index of the short term before references
> + *			in DPB array
> + * @poc_st_curr_after: provides the index of the short term after references
> + *		       in DPB array
> + * @poc_lt_curr: provides the index of the long term references in DPB array
> + * @flags: see V4L2_HEVC_DECODE_PARAM_FLAG_{}
> + */
>  struct v4l2_ctrl_hevc_decode_params {
>  	__s32	pic_order_cnt_val;
>  	__u8	num_active_dpb_entries;
> @@ -229,6 +418,28 @@ struct v4l2_ctrl_hevc_decode_params {
>  	__u64	flags;
>  };
>  
> +/**
> + * struct v4l2_ctrl_hevc_scaling_matrix - HEVC scaling lists parameters
> + *
> + * @scaling_list_4x4: scaling list is used for the scaling process for
> + *		      transform coefficients. The values on each scaling
> + *		      list are expected in raster scan order
> + * @scaling_list_8x8: scaling list is used for the scaling process for
> + *		      transform coefficients. The values on each scaling
> + *		      list are expected in raster scan order
> + * @scaling_list_16x16: scaling list is used for the scaling process for
> + *			transform coefficients. The values on each scaling
> + *			list are expected in raster scan order
> + * @scaling_list_32x32:	scaling list is used for the scaling process for
> + *			transform coefficients. The values on each scaling
> + *			list are expected in raster scan order
> + * @scaling_list_dc_coef_16x16: scaling list is used for the scaling process
> + *				for transform coefficients. The values on each
> + *				scaling list are expected in raster scan order.
> + * @scaling_list_dc_coef_32x32:	scaling list is used for the scaling process
> + *				for transform coefficients. The values on each
> + *				scaling list are expected in raster scan order.
> + */
>  struct v4l2_ctrl_hevc_scaling_matrix {
>  	__u8	scaling_list_4x4[6][16];
>  	__u8	scaling_list_8x8[6][64];


Looks good otherwise.

Nicolas


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

* Re: [PATCH v4 06/15] media: uapi: HEVC: Add document uAPI structure
@ 2022-04-04 16:20     ` Nicolas Dufresne
  0 siblings, 0 replies; 81+ messages in thread
From: Nicolas Dufresne @ 2022-04-04 16:20 UTC (permalink / raw)
  To: Benjamin Gaignard, mchehab, ezequiel, p.zabel, gregkh, mripard,
	paul.kocialkowski, wens, jernej.skrabec, jonas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc

Le lundi 28 février 2022 à 15:08 +0100, Benjamin Gaignard a écrit :
> Add kernel-doc documentation for all the HEVC structures.
> 
> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
> ---
> Version 4:
> - Fix space/tab issue in kernel-doc
> 
>  .../media/v4l/ext-ctrls-codec.rst             | 156 +++++++------
>  include/media/hevc-ctrls.h                    | 217 +++++++++++++++++-
>  2 files changed, 304 insertions(+), 69 deletions(-)
> 
> diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> index acf49420e56d..ac13a3eb85c2 100644
> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> @@ -2673,70 +2673,76 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>          of H.265 specifications.
>      * - __u16
>        - ``pic_width_in_luma_samples``
> -      -
> +      - Specifies the width of each decoded picture in units of luma samples.
>      * - __u16
>        - ``pic_height_in_luma_samples``
> -      -
> +      - Specifies the height of each decoded picture in units of luma samples.
>      * - __u8
>        - ``bit_depth_luma_minus8``
> -      -
> +      - Specifies the bit depth of the samples of the luma array.
>      * - __u8
>        - ``bit_depth_chroma_minus8``
> -      -
> +      - Specifies the bit depth of the samples of the chroma arrays.
>      * - __u8
>        - ``log2_max_pic_order_cnt_lsb_minus4``
> -      -
> +      - Specifies the value of the variable MaxPicOrderCntLsb.
>      * - __u8
>        - ``sps_max_dec_pic_buffering_minus1``
> -      -
> +      - Plus 1 specifies the maximum required size of the decoded picture buffer for
> +        the CVS
>      * - __u8
>        - ``sps_max_num_reorder_pics``
> -      -
> +      - Indicates the maximum allowed number of pictures.
>      * - __u8
>        - ``sps_max_latency_increase_plus1``
> -      -
> +      - Not equal to 0 is used to compute the value of SpsMaxLatencyPictures[i].
>      * - __u8
>        - ``log2_min_luma_coding_block_size_minus3``
> -      -
> +      - Plus 3 specifies the minimum luma coding block size.
>      * - __u8
>        - ``log2_diff_max_min_luma_coding_block_size``
> -      -
> +      - Specifies the difference between the maximum and minimum luma coding block size.
>      * - __u8
>        - ``log2_min_luma_transform_block_size_minus2``
> -      -
> +      - Plus 2 specifies the minimum luma transform block size.
>      * - __u8
>        - ``log2_diff_max_min_luma_transform_block_size``
> -      -
> +      - Specifies the difference between the maximum and minimum luma transform block size.
>      * - __u8
>        - ``max_transform_hierarchy_depth_inter``
> -      -
> +      - Specifies the maximum hierarchy depth for transform units of coding units coded
> +        in inter prediction mode.
>      * - __u8
>        - ``max_transform_hierarchy_depth_intra``
> -      -
> +      - Specifies the maximum hierarchy depth for transform units of coding units coded in
> +        intra prediction mode.
>      * - __u8
>        - ``pcm_sample_bit_depth_luma_minus1``
> -      -
> +      - Specifies the number of bits used to represent each of PCM sample values of the
> +        luma component.
>      * - __u8
>        - ``pcm_sample_bit_depth_chroma_minus1``
> -      -
> +      - Specifies the number of bits used to represent each of PCM sample values of
> +        the chroma components.
>      * - __u8
>        - ``log2_min_pcm_luma_coding_block_size_minus3``
> -      -
> +      - Plus 3 specifies the minimum size of coding blocks.
>      * - __u8
>        - ``log2_diff_max_min_pcm_luma_coding_block_size``
> -      -
> +      - Specifies the difference between the maximum and minimum size of coding blocks.
>      * - __u8
>        - ``num_short_term_ref_pic_sets``
> -      -
> +      - Specifies the number of st_ref_pic_set() syntax structures included in the SPS.
>      * - __u8
>        - ``num_long_term_ref_pics_sps``
> -      -
> +      - Specifies the number of candidate long-term reference pictures that are
> +        specified in the SPS.
>      * - __u8
>        - ``chroma_format_idc``
> -      -
> +      - Specifies the chroma sampling.
>      * - __u8
>        - ``sps_max_sub_layers_minus1``
> -      -
> +      - plus 1 specifies the maximum number of temporal sub-layers.
>      * - __u64
>        - ``flags``
>        - See :ref:`Sequence Parameter Set Flags <hevc_sps_flags>`
> @@ -2815,7 +2821,8 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>        - Identifies the PPS for reference by other syntax elements.
>      * - __u8
>        - ``num_extra_slice_header_bits``
> -      -
> +      - Specifies the number of extra slice header bits that are present
> +        in the slice header RBSP for coded pictures referring to the PPS.
>      * - __u8
>        - ``num_ref_idx_l0_default_active_minus1``
>        - Specifies the inferred value of num_ref_idx_l0_active_minus1
> @@ -2824,37 +2831,42 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>        - Specifies the inferred value of num_ref_idx_l1_active_minus1
>      * - __s8
>        - ``init_qp_minus26``
> -      -
> +      - Plus 26 specifies the initial value of SliceQp Y for each slice
> +        referring to the PPS.
>      * - __u8
>        - ``diff_cu_qp_delta_depth``
> -      -
> +      - Specifies the difference between the luma coding tree block size
> +        and the minimum luma coding block size of coding units that
> +        convey cu_qp_delta_abs and cu_qp_delta_sign_flag.
>      * - __s8
>        - ``pps_cb_qp_offset``
> -      -
> +      - Specify the offsets to the luma quantization parameter Cb.
>      * - __s8
>        - ``pps_cr_qp_offset``
> -      -
> +      - Specify the offsets to the luma quantization parameter Cr.
>      * - __u8
>        - ``num_tile_columns_minus1``
> -      -
> +      - Plus 1 specifies the number of tile columns partitioning the picture.
>      * - __u8
>        - ``num_tile_rows_minus1``
> -      -
> +      - Plus 1 specifies the number of tile rows partitioning the picture.
>      * - __u8
>        - ``column_width_minus1[20]``
> -      -
> +      - Plus 1 specifies the width of the i-th tile column in units of
> +        coding tree blocks.
>      * - __u8
>        - ``row_height_minus1[22]``
> -      -
> +      - Plus 1 specifies the height of the i-th tile row in units of coding
> +        tree blocks.
>      * - __s8
>        - ``pps_beta_offset_div2``
> -      -
> +      - Specify the default deblocking parameter offsets for beta divided by 2.
>      * - __s8
>        - ``pps_tc_offset_div2``
> -      -
> +      - Specify the default deblocking parameter offsets for tC divided by 2.
>      * - __u8
>        - ``log2_parallel_merge_level_minus2``
> -      -
> +      - Plus 2 specifies the value of the variable Log2ParMrgLevel.
>      * - __u8
>        - ``padding[4]``
>        - Applications and drivers must set this to zero.
> @@ -2976,10 +2988,10 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>        - Offset (in bits) to the video data in the current slice data.
>      * - __u8
>        - ``nal_unit_type``
> -      -
> +      - Specifies the coding type of the slice (B, P or I).
>      * - __u8
>        - ``nuh_temporal_id_plus1``
> -      -
> +      - Minus 1 specifies a temporal identifier for the NAL unit.
>      * - __u8
>        - ``slice_type``
>        -
> @@ -2987,52 +2999,56 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>  	V4L2_HEVC_SLICE_TYPE_B).
>      * - __u8
>        - ``colour_plane_id``
> -      -
> +      - Specifies the colour plane associated with the current slice.
>      * - __u16
>        - ``slice_pic_order_cnt``
> -      -
> +      - Specifies the picture order count.
>      * - __u8
>        - ``num_ref_idx_l0_active_minus1``
> -      -
> +      - Specifies the maximum reference index for reference picture list 0
> +        that may be used to decode the slice.
>      * - __u8
>        - ``num_ref_idx_l1_active_minus1``
> -      -
> +      - Specifies the maximum reference index for reference picture list 1
> +        that may be used to decode the slice.
>      * - __u8
>        - ``collocated_ref_idx``
> -      -
> +      - Specifies the reference index of the collocated picture used for
> +        temporal motion vector prediction.
>      * - __u8
>        - ``five_minus_max_num_merge_cand``
> -      -
> +      - Specifies the maximum number of merging motion vector prediction
> +        candidates supported in the slice subtracted from 5.
>      * - __s8
>        - ``slice_qp_delta``
> -      -
> +      - Specifies the initial value of QpY to be used for the coding blocks in the slice.
>      * - __s8
>        - ``slice_cb_qp_offset``
> -      -
> +      - Specifies a difference to be added to the value of pps_cb_qp_offset.
>      * - __s8
>        - ``slice_cr_qp_offset``
> -      -
> +      - Specifies a difference to be added to the value of pps_cr_qp_offset.
>      * - __s8
>        - ``slice_act_y_qp_offset``
> -      -
> +      - screen content extension parameters
>      * - __s8
>        - ``slice_act_cb_qp_offset``
> -      -
> +      - screen content extension parameters
>      * - __s8
>        - ``slice_act_cr_qp_offset``
> -      -
> +      - screen content extension parameters
>      * - __s8
>        - ``slice_beta_offset_div2``
> -      -
> +      - Specify the deblocking parameter offsets for beta divided by 2.
>      * - __s8
>        - ``slice_tc_offset_div2``
> -      -
> +      - Specify the deblocking parameter offsets for tC divided by 2.
>      * - __u8
>        - ``pic_struct``
> -      -
> +      - Indicates whether a picture should be displayed as a frame or as one or more fields.
>      * - __u32
>        - ``slice_segment_addr``
> -      -
> +      - Specifies the address of the first coding tree block in the slice segment.
>      * - __u8
>        - ``ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>        - The list of L0 reference elements as indices in the DPB.
> @@ -3222,36 +3238,44 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>      :stub-columns: 0
>      :widths:       1 1 2
>  
> -    * - __u8
> -      - ``luma_log2_weight_denom``
> -      -
> -    * - __s8
> -      - ``delta_chroma_log2_weight_denom``
> -      -
>      * - __s8
>        - ``delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> -      -
> +      - The difference of the weighting factor applied to the luma
> +        prediction value for list 0.
>      * - __s8
>        - ``luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> -      -
> +      - The additive offset applied to the luma prediction value for list 0.
>      * - __s8
>        - ``delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
> -      -
> +      - The difference of the weighting factor applied to the chroma
> +        prediction value for list 0.
>      * - __s8
>        - ``chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
> -      -
> +      - The difference of the additive offset applied to the chroma
> +        prediction values for list 0.
>      * - __s8
>        - ``delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> -      -
> +      - The difference of the weighting factor applied to the luma
> +        prediction value for list 1.
>      * - __s8
>        - ``luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
> -      -
> +      - The additive offset applied to the luma prediction value for list 1.
>      * - __s8
>        - ``delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
> -      -
> +      - The difference of the weighting factor applied to the chroma
> +        prediction value for list 1.
>      * - __s8
>        - ``chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
> -      -
> +      - The difference of the additive offset applied to the chroma
> +        prediction values for list 1.
> +    * - __u8
> +      - ``luma_log2_weight_denom``
> +      - The base 2 logarithm of the denominator for all luma weighting
> +        factors.
> +    * - __s8
> +      - ``delta_chroma_log2_weight_denom``
> +      - The difference of the base 2 logarithm of the denominator for
> +        all chroma weighting factors.
>      * - __u8
>        - ``padding[6]``
>        - Applications and drivers must set this to zero.
> diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
> index b3540167df9e..149384ca4c84 100644
> --- a/include/media/hevc-ctrls.h
> +++ b/include/media/hevc-ctrls.h
> @@ -55,9 +55,68 @@ enum v4l2_stateless_hevc_start_code {
>  #define V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED		(1ULL << 7)
>  #define V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED	(1ULL << 8)
>  
> -/* The controls are not stable at the moment and will likely be reworked. */
> +/**
> + * struct v4l2_ctrl_hevc_sps - ITU-T Rec. H.265: Sequence parameter set
> + *
> + * @video_parameter_set_id: specifies the value of the
> + *			    vps_video_parameter_set_id of the active VPS
> + * @seq_parameter_set_id: provides an identifier for the SPS for
> + *			  reference by other syntax elements
> + * @pic_width_in_luma_samples: specifies the width of each decoded picture
> + *			       in units of luma samples
> + * @pic_height_in_luma_samples: specifies the height of each decoded picture
> + *				in units of luma samples
> + * @bit_depth_luma_minus8: specifies the bit depth of the samples of the
> + *			   luma array
> + * @bit_depth_chroma_minus8: specifies the bit depth of the samples of the
> + *			     chroma arrays
> + * @log2_max_pic_order_cnt_lsb_minus4: specifies the value of the variable
> + *				       MaxPicOrderCntLsb
> + * @sps_max_dec_pic_buffering_minus1: plus 1 specifies the maximum required
> + *				      size of the decoded picture buffer for
> + *				      the CVS
> + * @sps_max_num_reorder_pics: indicates the maximum allowed number of pictures
> + * @sps_max_latency_increase_plus1: not equal to 0 is used to compute the
> + *				    value of SpsMaxLatencyPictures[i]
> + * @log2_min_luma_coding_block_size_minus3: plus 3 specifies the minimum
> + *					    luma coding block size
> + * @log2_diff_max_min_luma_coding_block_size: specifies the difference between
> + *					      the maximum and minimum luma
> + *					      coding block size
> + * @log2_min_luma_transform_block_size_minus2: plus 2 specifies the minimum luma
> + *					       transform block size
> + * @log2_diff_max_min_luma_transform_block_size: specifies the difference between
> + *						 the maximum and minimum luma
> + *						 transform block size
> + * @max_transform_hierarchy_depth_inter: specifies the maximum hierarchy
> + *					 depth for transform units of
> + *					 coding units coded in inter
> + *					 prediction mode
> + * @max_transform_hierarchy_depth_intra: specifies the maximum hierarchy
> + *					 depth for transform units of
> + *					 coding units coded in intra
> + *					 prediction mode
> + * @pcm_sample_bit_depth_luma_minus1: specifies the number of bits used to
> + *				      represent each of PCM sample values of the
> + *				      luma component
> + * @pcm_sample_bit_depth_chroma_minus1: specifies the number of bits used to
> + *					represent each of PCM sample values of
> + *					the chroma components
> + * @log2_min_pcm_luma_coding_block_size_minus3: plus 3 specifies the minimum size
> + *						of coding blocks
> + * @log2_diff_max_min_pcm_luma_coding_block_size: specifies the difference between
> + *						  the maximum and minimum size of
> + *						  coding blocks
> + * @num_short_term_ref_pic_sets: speciefies the number of st_ref_pic_set()
> + *				 syntax structures included in the SPS
> + * @num_long_term_ref_pics_sps:	specifies the number of candidate long-term
> + *				reference pictures that are specified in the SPS
> + * @chroma_format_idc: specifies the chroma sampling
> + * @sps_max_sub_layers_minus1: plus 1 specifies the maximum number of temporal
> + *			       sub-layers
> + * @flags: see V4L2_HEVC_SPS_FLAG_{}
> + */
>  struct v4l2_ctrl_hevc_sps {
> -	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Sequence parameter set */
>  	__u8	video_parameter_set_id;
>  	__u8	seq_parameter_set_id;
>  	__u16	pic_width_in_luma_samples;
> @@ -108,8 +167,43 @@ struct v4l2_ctrl_hevc_sps {
>  #define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT	(1ULL << 19)
>  #define V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING			(1ULL << 20)
>  
> +/**
> + * struct v4l2_ctrl_hevc_pps - ITU-T Rec. H.265: Picture parameter set
> + *
> + * @pic_parameter_set_id: identifies the PPS for reference by other
> + *			  syntax elements
> + * @num_extra_slice_header_bits: specifies the number of extra slice header
> + *				 bits that are present in the slice header RBSP
> + *				 for coded pictures referring to the PPS.
> + * @num_ref_idx_l0_default_active_minus1: specifies the inferred value of
> + *					  num_ref_idx_l0_active_minus1
> + * @num_ref_idx_l1_default_active_minus1: specifies the inferred value of
> + *					  num_ref_idx_l1_active_minus1
> + * @init_qp_minus26: plus 26 specifies the initial value of SliceQp Y for
> + *		     each slice referring to the PPS
> + * @diff_cu_qp_delta_depth: specifies the difference between the luma coding
> + *			    tree block size and the minimum luma coding block
> + *			    size of coding units that convey cu_qp_delta_abs
> + *			    and cu_qp_delta_sign_flag
> + * @pps_cb_qp_offset: specify the offsets to the luma quantization parameter Cb
> + * @pps_cr_qp_offset: specify the offsets to the luma quantization parameter Cr
> + * @num_tile_columns_minus1: plus 1 specifies the number of tile columns
> + *			     partitioning the picture
> + * @num_tile_rows_minus1: plus 1 specifies the number of tile rows partitioning
> + *			  the picture
> + * @column_width_minus1: plus 1 specifies the width of the i-th tile column in
> + *			 units of coding tree blocks
> + * @row_height_minus1: plus 1 specifies the height of the i-th tile row in
> + *		       units of coding tree blocks
> + * @pps_beta_offset_div2: specify the default deblocking parameter offsets for
> + *			  beta divided by 2
> + * @pps_tc_offset_div2: specify the default deblocking parameter offsets for tC
> + *			divided by 2
> + * @log2_parallel_merge_level_minus2: plus 2 specifies the value of the variable
> + *				      Log2ParMrgLevel
> + * @flags: see V4L2_HEVC_PPS_FLAG_{}
> + */
>  struct v4l2_ctrl_hevc_pps {
> -	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture parameter set */
>  	__u8	pic_parameter_set_id;
>  	__u8	num_extra_slice_header_bits;
>  	__u8	num_ref_idx_l0_default_active_minus1;
> @@ -134,6 +228,14 @@ struct v4l2_ctrl_hevc_pps {
>  
>  #define V4L2_HEVC_DPB_ENTRIES_NUM_MAX		16
>  
> +/**
> + * struct v4l2_hevc_dpb_entry - HEVC decoded picture buffer entry
> + *
> + * @timestamp: timestamp of the V4L2 capture buffer to use as reference.
> + * @flags: long term flag for the reference frame
> + * @field_pic: whether the reference is a field picture or a frame.
> + * @pic_order_cnt: the picture order count of the reference.

Unless I missed that change, there is two POC (its an array), but the doc does
not reflect this.

  __u16   pic_order_cnt[2];

In H.264, this has been split in two:

        __s32 top_field_order_cnt;
        __s32 bottom_field_order_cnt;

I'm also noticing the difference in number of bits. HEVC could have been
different, but the spec says:

   The value of PicOrderCntVal shall be in the range of −2^31 to 2^31 − 1,
   inclusive
   
Clarification needed if this isn't meant to be PicOrderCntVal but
pic_order_cnt_lsb. That being said, it looks like DXVA exposes that as a signed
integer (32 bit).

> + */
>  struct v4l2_hevc_dpb_entry {
>  	__u64	timestamp;
>  	__u8	flags;
> @@ -142,6 +244,31 @@ struct v4l2_hevc_dpb_entry {
>  	__u8	padding[2];
>  };
>  
> +/**
> + * struct v4l2_hevc_pred_weight_table - HEVC weighted prediction parameters
> + *
> + * @delta_luma_weight_l0: the difference of the weighting factor applied
> + *			  to the luma prediction value for list 0
> + * @luma_offset_l0: the additive offset applied to the luma prediction value
> + *		    for list 0
> + * @delta_chroma_weight_l0: the difference of the weighting factor applied
> + *			    to the chroma prediction values for list 0
> + * @chroma_offset_l0: the difference of the additive offset applied to
> + *		      the chroma prediction values for list 0
> + * @delta_luma_weight_l1: the difference of the weighting factor applied
> + *			  to the luma prediction value for list 1
> + * @luma_offset_l1: the additive offset applied to the luma prediction value
> + *		    for list 1
> + * @delta_chroma_weight_l1: the difference of the weighting factor applied
> + *			    to the chroma prediction values for list 1
> + * @chroma_offset_l1: the difference of the additive offset applied to
> + *		      the chroma prediction values for list 1
> + * @luma_log2_weight_denom: the base 2 logarithm of the denominator for
> + *			    all luma weighting factors
> + * @delta_chroma_log2_weight_denom: the difference of the base 2 logarithm
> + *				    of the denominator for all chroma
> + *				    weighting factors
> + */
>  struct v4l2_hevc_pred_weight_table {
>  	__s8	delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>  	__s8	luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
> @@ -170,6 +297,50 @@ struct v4l2_hevc_pred_weight_table {
>  #define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 8)
>  #define V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT	(1ULL << 9)
>  
> +/**
> + * v4l2_ctrl_hevc_slice_params - HEVC slice parameters
> + *
> + * @bit_size: size (in bits) of the current slice data
> + * @data_bit_offset: offset (in bits) to the video data in the current slice data
> + * @nal_unit_type: specifies the coding type of the slice (B, P or I)
> + * @nuh_temporal_id_plus1: minus 1 specifies a temporal identifier for the NAL unit
> + * @slice_type: see V4L2_HEVC_SLICE_TYPE_{}
> + * @colour_plane_id: specifies the colour plane associated with the current slice
> + * @slice_pic_order_cnt: specifies the picture order count
> + * @num_ref_idx_l0_active_minus1: specifies the maximum reference index for
> + *				  reference picture list 0 that may be used to decode
> + *				  the slice
> + * @num_ref_idx_l1_active_minus1: specifies the maximum reference index for
> + *				  reference picture list 1 that may be used to decode
> + *				  the slice
> + * @collocated_ref_idx: specifies the reference index of the collocated picture used
> + *			for temporal motion vector prediction
> + * @five_minus_max_num_merge_cand: specifies the maximum number of merging
> + *				   motion vector prediction candidates supported in
> + *				   the slice subtracted from 5
> + * @slice_qp_delta: specifies the initial value of QpY to be used for the coding
> + *		    blocks in the slice
> + * @slice_cb_qp_offset: specifies a difference to be added to the value of pps_cb_qp_offset
> + * @slice_cr_qp_offset: specifies a difference to be added to the value of pps_cr_qp_offset
> + * @slice_act_y_qp_offset: screen content extension parameters
> + * @slice_act_cb_qp_offset: screen content extension parameters
> + * @slice_act_cr_qp_offset: screen content extension parameters
> + * @slice_beta_offset_div2: specify the deblocking parameter offsets for beta divided by 2
> + * @slice_tc_offset_div2: specify the deblocking parameter offsets for tC divided by 2
> + * @pic_struct: indicates whether a picture should be displayed as a frame or as one or
> + *		more fields
> + * @slice_segment_addr: specifies the address of the first coding tree block in
> + *			the slice segment
> + * @ref_idx_l0: the list of L0 reference elements as indices in the DPB
> + * @ref_idx_l1: the list of L1 reference elements as indices in the DPB
> + * @short_term_ref_pic_set_size: specifies the number of st_ref_pic_set()
> + *				 syntax structures included in the SPS
> + * @long_term_ref_pic_set_size: specifies the number of candidate long-term
> + *				reference pictures that are specified in the SPS
> + * @pred_weight_table: the prediction weight coefficients for inter-picture
> + *		       prediction
> + * @flags: see V4L2_HEVC_SLICE_PARAMS_FLAG_{}
> + */
>  struct v4l2_ctrl_hevc_slice_params {
>  	__u32	bit_size;
>  	__u32	data_bit_offset;
> @@ -216,6 +387,24 @@ struct v4l2_ctrl_hevc_slice_params {
>  #define V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC		0x2
>  #define V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR  0x4
>  
> +/**
> + * struct v4l2_ctrl_hevc_decode_params - HEVC decode parameters
> + *
> + * @pic_order_cnt_val: picture order count
> + * @num_active_dpb_entries: the number of entries in dpb
> + * @dpb: the decoded picture buffer, for meta-data about reference frames
> + * @num_poc_st_curr_before: the number of reference pictures in the short-term
> + *			    set that come before the current frame
> + * @num_poc_st_curr_after: the number of reference pictures in the short-term
> + *			   set that come after the current frame
> + * @num_poc_lt_curr: the number of reference pictures in the long-term set
> + * @poc_st_curr_before: provides the index of the short term before references
> + *			in DPB array
> + * @poc_st_curr_after: provides the index of the short term after references
> + *		       in DPB array
> + * @poc_lt_curr: provides the index of the long term references in DPB array
> + * @flags: see V4L2_HEVC_DECODE_PARAM_FLAG_{}
> + */
>  struct v4l2_ctrl_hevc_decode_params {
>  	__s32	pic_order_cnt_val;
>  	__u8	num_active_dpb_entries;
> @@ -229,6 +418,28 @@ struct v4l2_ctrl_hevc_decode_params {
>  	__u64	flags;
>  };
>  
> +/**
> + * struct v4l2_ctrl_hevc_scaling_matrix - HEVC scaling lists parameters
> + *
> + * @scaling_list_4x4: scaling list is used for the scaling process for
> + *		      transform coefficients. The values on each scaling
> + *		      list are expected in raster scan order
> + * @scaling_list_8x8: scaling list is used for the scaling process for
> + *		      transform coefficients. The values on each scaling
> + *		      list are expected in raster scan order
> + * @scaling_list_16x16: scaling list is used for the scaling process for
> + *			transform coefficients. The values on each scaling
> + *			list are expected in raster scan order
> + * @scaling_list_32x32:	scaling list is used for the scaling process for
> + *			transform coefficients. The values on each scaling
> + *			list are expected in raster scan order
> + * @scaling_list_dc_coef_16x16: scaling list is used for the scaling process
> + *				for transform coefficients. The values on each
> + *				scaling list are expected in raster scan order.
> + * @scaling_list_dc_coef_32x32:	scaling list is used for the scaling process
> + *				for transform coefficients. The values on each
> + *				scaling list are expected in raster scan order.
> + */
>  struct v4l2_ctrl_hevc_scaling_matrix {
>  	__u8	scaling_list_4x4[6][16];
>  	__u8	scaling_list_8x8[6][64];


Looks good otherwise.

Nicolas


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 06/15] media: uapi: HEVC: Add document uAPI structure
  2022-04-04 16:20     ` Nicolas Dufresne
@ 2022-04-04 16:36       ` Benjamin Gaignard
  -1 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-04-04 16:36 UTC (permalink / raw)
  To: Nicolas Dufresne, mchehab, ezequiel, p.zabel, gregkh, mripard,
	paul.kocialkowski, wens, jernej.skrabec, jonas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc


Le 04/04/2022 à 18:20, Nicolas Dufresne a écrit :
> Le lundi 28 février 2022 à 15:08 +0100, Benjamin Gaignard a écrit :
>> Add kernel-doc documentation for all the HEVC structures.
>>
>> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
>> ---
>> Version 4:
>> - Fix space/tab issue in kernel-doc
>>
>>   .../media/v4l/ext-ctrls-codec.rst             | 156 +++++++------
>>   include/media/hevc-ctrls.h                    | 217 +++++++++++++++++-
>>   2 files changed, 304 insertions(+), 69 deletions(-)
>>
>> diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>> index acf49420e56d..ac13a3eb85c2 100644
>> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>> @@ -2673,70 +2673,76 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>>           of H.265 specifications.
>>       * - __u16
>>         - ``pic_width_in_luma_samples``
>> -      -
>> +      - Specifies the width of each decoded picture in units of luma samples.
>>       * - __u16
>>         - ``pic_height_in_luma_samples``
>> -      -
>> +      - Specifies the height of each decoded picture in units of luma samples.
>>       * - __u8
>>         - ``bit_depth_luma_minus8``
>> -      -
>> +      - Specifies the bit depth of the samples of the luma array.
>>       * - __u8
>>         - ``bit_depth_chroma_minus8``
>> -      -
>> +      - Specifies the bit depth of the samples of the chroma arrays.
>>       * - __u8
>>         - ``log2_max_pic_order_cnt_lsb_minus4``
>> -      -
>> +      - Specifies the value of the variable MaxPicOrderCntLsb.
>>       * - __u8
>>         - ``sps_max_dec_pic_buffering_minus1``
>> -      -
>> +      - Plus 1 specifies the maximum required size of the decoded picture buffer for
>> +        the CVS
>>       * - __u8
>>         - ``sps_max_num_reorder_pics``
>> -      -
>> +      - Indicates the maximum allowed number of pictures.
>>       * - __u8
>>         - ``sps_max_latency_increase_plus1``
>> -      -
>> +      - Not equal to 0 is used to compute the value of SpsMaxLatencyPictures[i].
>>       * - __u8
>>         - ``log2_min_luma_coding_block_size_minus3``
>> -      -
>> +      - Plus 3 specifies the minimum luma coding block size.
>>       * - __u8
>>         - ``log2_diff_max_min_luma_coding_block_size``
>> -      -
>> +      - Specifies the difference between the maximum and minimum luma coding block size.
>>       * - __u8
>>         - ``log2_min_luma_transform_block_size_minus2``
>> -      -
>> +      - Plus 2 specifies the minimum luma transform block size.
>>       * - __u8
>>         - ``log2_diff_max_min_luma_transform_block_size``
>> -      -
>> +      - Specifies the difference between the maximum and minimum luma transform block size.
>>       * - __u8
>>         - ``max_transform_hierarchy_depth_inter``
>> -      -
>> +      - Specifies the maximum hierarchy depth for transform units of coding units coded
>> +        in inter prediction mode.
>>       * - __u8
>>         - ``max_transform_hierarchy_depth_intra``
>> -      -
>> +      - Specifies the maximum hierarchy depth for transform units of coding units coded in
>> +        intra prediction mode.
>>       * - __u8
>>         - ``pcm_sample_bit_depth_luma_minus1``
>> -      -
>> +      - Specifies the number of bits used to represent each of PCM sample values of the
>> +        luma component.
>>       * - __u8
>>         - ``pcm_sample_bit_depth_chroma_minus1``
>> -      -
>> +      - Specifies the number of bits used to represent each of PCM sample values of
>> +        the chroma components.
>>       * - __u8
>>         - ``log2_min_pcm_luma_coding_block_size_minus3``
>> -      -
>> +      - Plus 3 specifies the minimum size of coding blocks.
>>       * - __u8
>>         - ``log2_diff_max_min_pcm_luma_coding_block_size``
>> -      -
>> +      - Specifies the difference between the maximum and minimum size of coding blocks.
>>       * - __u8
>>         - ``num_short_term_ref_pic_sets``
>> -      -
>> +      - Specifies the number of st_ref_pic_set() syntax structures included in the SPS.
>>       * - __u8
>>         - ``num_long_term_ref_pics_sps``
>> -      -
>> +      - Specifies the number of candidate long-term reference pictures that are
>> +        specified in the SPS.
>>       * - __u8
>>         - ``chroma_format_idc``
>> -      -
>> +      - Specifies the chroma sampling.
>>       * - __u8
>>         - ``sps_max_sub_layers_minus1``
>> -      -
>> +      - plus 1 specifies the maximum number of temporal sub-layers.
>>       * - __u64
>>         - ``flags``
>>         - See :ref:`Sequence Parameter Set Flags <hevc_sps_flags>`
>> @@ -2815,7 +2821,8 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>>         - Identifies the PPS for reference by other syntax elements.
>>       * - __u8
>>         - ``num_extra_slice_header_bits``
>> -      -
>> +      - Specifies the number of extra slice header bits that are present
>> +        in the slice header RBSP for coded pictures referring to the PPS.
>>       * - __u8
>>         - ``num_ref_idx_l0_default_active_minus1``
>>         - Specifies the inferred value of num_ref_idx_l0_active_minus1
>> @@ -2824,37 +2831,42 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>>         - Specifies the inferred value of num_ref_idx_l1_active_minus1
>>       * - __s8
>>         - ``init_qp_minus26``
>> -      -
>> +      - Plus 26 specifies the initial value of SliceQp Y for each slice
>> +        referring to the PPS.
>>       * - __u8
>>         - ``diff_cu_qp_delta_depth``
>> -      -
>> +      - Specifies the difference between the luma coding tree block size
>> +        and the minimum luma coding block size of coding units that
>> +        convey cu_qp_delta_abs and cu_qp_delta_sign_flag.
>>       * - __s8
>>         - ``pps_cb_qp_offset``
>> -      -
>> +      - Specify the offsets to the luma quantization parameter Cb.
>>       * - __s8
>>         - ``pps_cr_qp_offset``
>> -      -
>> +      - Specify the offsets to the luma quantization parameter Cr.
>>       * - __u8
>>         - ``num_tile_columns_minus1``
>> -      -
>> +      - Plus 1 specifies the number of tile columns partitioning the picture.
>>       * - __u8
>>         - ``num_tile_rows_minus1``
>> -      -
>> +      - Plus 1 specifies the number of tile rows partitioning the picture.
>>       * - __u8
>>         - ``column_width_minus1[20]``
>> -      -
>> +      - Plus 1 specifies the width of the i-th tile column in units of
>> +        coding tree blocks.
>>       * - __u8
>>         - ``row_height_minus1[22]``
>> -      -
>> +      - Plus 1 specifies the height of the i-th tile row in units of coding
>> +        tree blocks.
>>       * - __s8
>>         - ``pps_beta_offset_div2``
>> -      -
>> +      - Specify the default deblocking parameter offsets for beta divided by 2.
>>       * - __s8
>>         - ``pps_tc_offset_div2``
>> -      -
>> +      - Specify the default deblocking parameter offsets for tC divided by 2.
>>       * - __u8
>>         - ``log2_parallel_merge_level_minus2``
>> -      -
>> +      - Plus 2 specifies the value of the variable Log2ParMrgLevel.
>>       * - __u8
>>         - ``padding[4]``
>>         - Applications and drivers must set this to zero.
>> @@ -2976,10 +2988,10 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>>         - Offset (in bits) to the video data in the current slice data.
>>       * - __u8
>>         - ``nal_unit_type``
>> -      -
>> +      - Specifies the coding type of the slice (B, P or I).
>>       * - __u8
>>         - ``nuh_temporal_id_plus1``
>> -      -
>> +      - Minus 1 specifies a temporal identifier for the NAL unit.
>>       * - __u8
>>         - ``slice_type``
>>         -
>> @@ -2987,52 +2999,56 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>>   	V4L2_HEVC_SLICE_TYPE_B).
>>       * - __u8
>>         - ``colour_plane_id``
>> -      -
>> +      - Specifies the colour plane associated with the current slice.
>>       * - __u16
>>         - ``slice_pic_order_cnt``
>> -      -
>> +      - Specifies the picture order count.
>>       * - __u8
>>         - ``num_ref_idx_l0_active_minus1``
>> -      -
>> +      - Specifies the maximum reference index for reference picture list 0
>> +        that may be used to decode the slice.
>>       * - __u8
>>         - ``num_ref_idx_l1_active_minus1``
>> -      -
>> +      - Specifies the maximum reference index for reference picture list 1
>> +        that may be used to decode the slice.
>>       * - __u8
>>         - ``collocated_ref_idx``
>> -      -
>> +      - Specifies the reference index of the collocated picture used for
>> +        temporal motion vector prediction.
>>       * - __u8
>>         - ``five_minus_max_num_merge_cand``
>> -      -
>> +      - Specifies the maximum number of merging motion vector prediction
>> +        candidates supported in the slice subtracted from 5.
>>       * - __s8
>>         - ``slice_qp_delta``
>> -      -
>> +      - Specifies the initial value of QpY to be used for the coding blocks in the slice.
>>       * - __s8
>>         - ``slice_cb_qp_offset``
>> -      -
>> +      - Specifies a difference to be added to the value of pps_cb_qp_offset.
>>       * - __s8
>>         - ``slice_cr_qp_offset``
>> -      -
>> +      - Specifies a difference to be added to the value of pps_cr_qp_offset.
>>       * - __s8
>>         - ``slice_act_y_qp_offset``
>> -      -
>> +      - screen content extension parameters
>>       * - __s8
>>         - ``slice_act_cb_qp_offset``
>> -      -
>> +      - screen content extension parameters
>>       * - __s8
>>         - ``slice_act_cr_qp_offset``
>> -      -
>> +      - screen content extension parameters
>>       * - __s8
>>         - ``slice_beta_offset_div2``
>> -      -
>> +      - Specify the deblocking parameter offsets for beta divided by 2.
>>       * - __s8
>>         - ``slice_tc_offset_div2``
>> -      -
>> +      - Specify the deblocking parameter offsets for tC divided by 2.
>>       * - __u8
>>         - ``pic_struct``
>> -      -
>> +      - Indicates whether a picture should be displayed as a frame or as one or more fields.
>>       * - __u32
>>         - ``slice_segment_addr``
>> -      -
>> +      - Specifies the address of the first coding tree block in the slice segment.
>>       * - __u8
>>         - ``ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>>         - The list of L0 reference elements as indices in the DPB.
>> @@ -3222,36 +3238,44 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>>       :stub-columns: 0
>>       :widths:       1 1 2
>>   
>> -    * - __u8
>> -      - ``luma_log2_weight_denom``
>> -      -
>> -    * - __s8
>> -      - ``delta_chroma_log2_weight_denom``
>> -      -
>>       * - __s8
>>         - ``delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>> -      -
>> +      - The difference of the weighting factor applied to the luma
>> +        prediction value for list 0.
>>       * - __s8
>>         - ``luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>> -      -
>> +      - The additive offset applied to the luma prediction value for list 0.
>>       * - __s8
>>         - ``delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
>> -      -
>> +      - The difference of the weighting factor applied to the chroma
>> +        prediction value for list 0.
>>       * - __s8
>>         - ``chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
>> -      -
>> +      - The difference of the additive offset applied to the chroma
>> +        prediction values for list 0.
>>       * - __s8
>>         - ``delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>> -      -
>> +      - The difference of the weighting factor applied to the luma
>> +        prediction value for list 1.
>>       * - __s8
>>         - ``luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>> -      -
>> +      - The additive offset applied to the luma prediction value for list 1.
>>       * - __s8
>>         - ``delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
>> -      -
>> +      - The difference of the weighting factor applied to the chroma
>> +        prediction value for list 1.
>>       * - __s8
>>         - ``chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
>> -      -
>> +      - The difference of the additive offset applied to the chroma
>> +        prediction values for list 1.
>> +    * - __u8
>> +      - ``luma_log2_weight_denom``
>> +      - The base 2 logarithm of the denominator for all luma weighting
>> +        factors.
>> +    * - __s8
>> +      - ``delta_chroma_log2_weight_denom``
>> +      - The difference of the base 2 logarithm of the denominator for
>> +        all chroma weighting factors.
>>       * - __u8
>>         - ``padding[6]``
>>         - Applications and drivers must set this to zero.
>> diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
>> index b3540167df9e..149384ca4c84 100644
>> --- a/include/media/hevc-ctrls.h
>> +++ b/include/media/hevc-ctrls.h
>> @@ -55,9 +55,68 @@ enum v4l2_stateless_hevc_start_code {
>>   #define V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED		(1ULL << 7)
>>   #define V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED	(1ULL << 8)
>>   
>> -/* The controls are not stable at the moment and will likely be reworked. */
>> +/**
>> + * struct v4l2_ctrl_hevc_sps - ITU-T Rec. H.265: Sequence parameter set
>> + *
>> + * @video_parameter_set_id: specifies the value of the
>> + *			    vps_video_parameter_set_id of the active VPS
>> + * @seq_parameter_set_id: provides an identifier for the SPS for
>> + *			  reference by other syntax elements
>> + * @pic_width_in_luma_samples: specifies the width of each decoded picture
>> + *			       in units of luma samples
>> + * @pic_height_in_luma_samples: specifies the height of each decoded picture
>> + *				in units of luma samples
>> + * @bit_depth_luma_minus8: specifies the bit depth of the samples of the
>> + *			   luma array
>> + * @bit_depth_chroma_minus8: specifies the bit depth of the samples of the
>> + *			     chroma arrays
>> + * @log2_max_pic_order_cnt_lsb_minus4: specifies the value of the variable
>> + *				       MaxPicOrderCntLsb
>> + * @sps_max_dec_pic_buffering_minus1: plus 1 specifies the maximum required
>> + *				      size of the decoded picture buffer for
>> + *				      the CVS
>> + * @sps_max_num_reorder_pics: indicates the maximum allowed number of pictures
>> + * @sps_max_latency_increase_plus1: not equal to 0 is used to compute the
>> + *				    value of SpsMaxLatencyPictures[i]
>> + * @log2_min_luma_coding_block_size_minus3: plus 3 specifies the minimum
>> + *					    luma coding block size
>> + * @log2_diff_max_min_luma_coding_block_size: specifies the difference between
>> + *					      the maximum and minimum luma
>> + *					      coding block size
>> + * @log2_min_luma_transform_block_size_minus2: plus 2 specifies the minimum luma
>> + *					       transform block size
>> + * @log2_diff_max_min_luma_transform_block_size: specifies the difference between
>> + *						 the maximum and minimum luma
>> + *						 transform block size
>> + * @max_transform_hierarchy_depth_inter: specifies the maximum hierarchy
>> + *					 depth for transform units of
>> + *					 coding units coded in inter
>> + *					 prediction mode
>> + * @max_transform_hierarchy_depth_intra: specifies the maximum hierarchy
>> + *					 depth for transform units of
>> + *					 coding units coded in intra
>> + *					 prediction mode
>> + * @pcm_sample_bit_depth_luma_minus1: specifies the number of bits used to
>> + *				      represent each of PCM sample values of the
>> + *				      luma component
>> + * @pcm_sample_bit_depth_chroma_minus1: specifies the number of bits used to
>> + *					represent each of PCM sample values of
>> + *					the chroma components
>> + * @log2_min_pcm_luma_coding_block_size_minus3: plus 3 specifies the minimum size
>> + *						of coding blocks
>> + * @log2_diff_max_min_pcm_luma_coding_block_size: specifies the difference between
>> + *						  the maximum and minimum size of
>> + *						  coding blocks
>> + * @num_short_term_ref_pic_sets: speciefies the number of st_ref_pic_set()
>> + *				 syntax structures included in the SPS
>> + * @num_long_term_ref_pics_sps:	specifies the number of candidate long-term
>> + *				reference pictures that are specified in the SPS
>> + * @chroma_format_idc: specifies the chroma sampling
>> + * @sps_max_sub_layers_minus1: plus 1 specifies the maximum number of temporal
>> + *			       sub-layers
>> + * @flags: see V4L2_HEVC_SPS_FLAG_{}
>> + */
>>   struct v4l2_ctrl_hevc_sps {
>> -	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Sequence parameter set */
>>   	__u8	video_parameter_set_id;
>>   	__u8	seq_parameter_set_id;
>>   	__u16	pic_width_in_luma_samples;
>> @@ -108,8 +167,43 @@ struct v4l2_ctrl_hevc_sps {
>>   #define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT	(1ULL << 19)
>>   #define V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING			(1ULL << 20)
>>   
>> +/**
>> + * struct v4l2_ctrl_hevc_pps - ITU-T Rec. H.265: Picture parameter set
>> + *
>> + * @pic_parameter_set_id: identifies the PPS for reference by other
>> + *			  syntax elements
>> + * @num_extra_slice_header_bits: specifies the number of extra slice header
>> + *				 bits that are present in the slice header RBSP
>> + *				 for coded pictures referring to the PPS.
>> + * @num_ref_idx_l0_default_active_minus1: specifies the inferred value of
>> + *					  num_ref_idx_l0_active_minus1
>> + * @num_ref_idx_l1_default_active_minus1: specifies the inferred value of
>> + *					  num_ref_idx_l1_active_minus1
>> + * @init_qp_minus26: plus 26 specifies the initial value of SliceQp Y for
>> + *		     each slice referring to the PPS
>> + * @diff_cu_qp_delta_depth: specifies the difference between the luma coding
>> + *			    tree block size and the minimum luma coding block
>> + *			    size of coding units that convey cu_qp_delta_abs
>> + *			    and cu_qp_delta_sign_flag
>> + * @pps_cb_qp_offset: specify the offsets to the luma quantization parameter Cb
>> + * @pps_cr_qp_offset: specify the offsets to the luma quantization parameter Cr
>> + * @num_tile_columns_minus1: plus 1 specifies the number of tile columns
>> + *			     partitioning the picture
>> + * @num_tile_rows_minus1: plus 1 specifies the number of tile rows partitioning
>> + *			  the picture
>> + * @column_width_minus1: plus 1 specifies the width of the i-th tile column in
>> + *			 units of coding tree blocks
>> + * @row_height_minus1: plus 1 specifies the height of the i-th tile row in
>> + *		       units of coding tree blocks
>> + * @pps_beta_offset_div2: specify the default deblocking parameter offsets for
>> + *			  beta divided by 2
>> + * @pps_tc_offset_div2: specify the default deblocking parameter offsets for tC
>> + *			divided by 2
>> + * @log2_parallel_merge_level_minus2: plus 2 specifies the value of the variable
>> + *				      Log2ParMrgLevel
>> + * @flags: see V4L2_HEVC_PPS_FLAG_{}
>> + */
>>   struct v4l2_ctrl_hevc_pps {
>> -	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture parameter set */
>>   	__u8	pic_parameter_set_id;
>>   	__u8	num_extra_slice_header_bits;
>>   	__u8	num_ref_idx_l0_default_active_minus1;
>> @@ -134,6 +228,14 @@ struct v4l2_ctrl_hevc_pps {
>>   
>>   #define V4L2_HEVC_DPB_ENTRIES_NUM_MAX		16
>>   
>> +/**
>> + * struct v4l2_hevc_dpb_entry - HEVC decoded picture buffer entry
>> + *
>> + * @timestamp: timestamp of the V4L2 capture buffer to use as reference.
>> + * @flags: long term flag for the reference frame
>> + * @field_pic: whether the reference is a field picture or a frame.
>> + * @pic_order_cnt: the picture order count of the reference.
> Unless I missed that change, there is two POC (its an array), but the doc does
> not reflect this.
>
>    __u16   pic_order_cnt[2];
>
> In H.264, this has been split in two:
>
>          __s32 top_field_order_cnt;
>          __s32 bottom_field_order_cnt;
>
> I'm also noticing the difference in number of bits. HEVC could have been
> different, but the spec says:
>
>     The value of PicOrderCntVal shall be in the range of −2^31 to 2^31 − 1,
>     inclusive
>     
> Clarification needed if this isn't meant to be PicOrderCntVal but
> pic_order_cnt_lsb. That being said, it looks like DXVA exposes that as a signed
> integer (32 bit).

I will change __u16   pic_order_cnt[2] to __s32 PicOrderCntVal
to follow the spec naming that will be more clear like that.

Thanks,
Benjamin

>
>> + */
>>   struct v4l2_hevc_dpb_entry {
>>   	__u64	timestamp;
>>   	__u8	flags;
>> @@ -142,6 +244,31 @@ struct v4l2_hevc_dpb_entry {
>>   	__u8	padding[2];
>>   };
>>   
>> +/**
>> + * struct v4l2_hevc_pred_weight_table - HEVC weighted prediction parameters
>> + *
>> + * @delta_luma_weight_l0: the difference of the weighting factor applied
>> + *			  to the luma prediction value for list 0
>> + * @luma_offset_l0: the additive offset applied to the luma prediction value
>> + *		    for list 0
>> + * @delta_chroma_weight_l0: the difference of the weighting factor applied
>> + *			    to the chroma prediction values for list 0
>> + * @chroma_offset_l0: the difference of the additive offset applied to
>> + *		      the chroma prediction values for list 0
>> + * @delta_luma_weight_l1: the difference of the weighting factor applied
>> + *			  to the luma prediction value for list 1
>> + * @luma_offset_l1: the additive offset applied to the luma prediction value
>> + *		    for list 1
>> + * @delta_chroma_weight_l1: the difference of the weighting factor applied
>> + *			    to the chroma prediction values for list 1
>> + * @chroma_offset_l1: the difference of the additive offset applied to
>> + *		      the chroma prediction values for list 1
>> + * @luma_log2_weight_denom: the base 2 logarithm of the denominator for
>> + *			    all luma weighting factors
>> + * @delta_chroma_log2_weight_denom: the difference of the base 2 logarithm
>> + *				    of the denominator for all chroma
>> + *				    weighting factors
>> + */
>>   struct v4l2_hevc_pred_weight_table {
>>   	__s8	delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>>   	__s8	luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>> @@ -170,6 +297,50 @@ struct v4l2_hevc_pred_weight_table {
>>   #define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 8)
>>   #define V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT	(1ULL << 9)
>>   
>> +/**
>> + * v4l2_ctrl_hevc_slice_params - HEVC slice parameters
>> + *
>> + * @bit_size: size (in bits) of the current slice data
>> + * @data_bit_offset: offset (in bits) to the video data in the current slice data
>> + * @nal_unit_type: specifies the coding type of the slice (B, P or I)
>> + * @nuh_temporal_id_plus1: minus 1 specifies a temporal identifier for the NAL unit
>> + * @slice_type: see V4L2_HEVC_SLICE_TYPE_{}
>> + * @colour_plane_id: specifies the colour plane associated with the current slice
>> + * @slice_pic_order_cnt: specifies the picture order count
>> + * @num_ref_idx_l0_active_minus1: specifies the maximum reference index for
>> + *				  reference picture list 0 that may be used to decode
>> + *				  the slice
>> + * @num_ref_idx_l1_active_minus1: specifies the maximum reference index for
>> + *				  reference picture list 1 that may be used to decode
>> + *				  the slice
>> + * @collocated_ref_idx: specifies the reference index of the collocated picture used
>> + *			for temporal motion vector prediction
>> + * @five_minus_max_num_merge_cand: specifies the maximum number of merging
>> + *				   motion vector prediction candidates supported in
>> + *				   the slice subtracted from 5
>> + * @slice_qp_delta: specifies the initial value of QpY to be used for the coding
>> + *		    blocks in the slice
>> + * @slice_cb_qp_offset: specifies a difference to be added to the value of pps_cb_qp_offset
>> + * @slice_cr_qp_offset: specifies a difference to be added to the value of pps_cr_qp_offset
>> + * @slice_act_y_qp_offset: screen content extension parameters
>> + * @slice_act_cb_qp_offset: screen content extension parameters
>> + * @slice_act_cr_qp_offset: screen content extension parameters
>> + * @slice_beta_offset_div2: specify the deblocking parameter offsets for beta divided by 2
>> + * @slice_tc_offset_div2: specify the deblocking parameter offsets for tC divided by 2
>> + * @pic_struct: indicates whether a picture should be displayed as a frame or as one or
>> + *		more fields
>> + * @slice_segment_addr: specifies the address of the first coding tree block in
>> + *			the slice segment
>> + * @ref_idx_l0: the list of L0 reference elements as indices in the DPB
>> + * @ref_idx_l1: the list of L1 reference elements as indices in the DPB
>> + * @short_term_ref_pic_set_size: specifies the number of st_ref_pic_set()
>> + *				 syntax structures included in the SPS
>> + * @long_term_ref_pic_set_size: specifies the number of candidate long-term
>> + *				reference pictures that are specified in the SPS
>> + * @pred_weight_table: the prediction weight coefficients for inter-picture
>> + *		       prediction
>> + * @flags: see V4L2_HEVC_SLICE_PARAMS_FLAG_{}
>> + */
>>   struct v4l2_ctrl_hevc_slice_params {
>>   	__u32	bit_size;
>>   	__u32	data_bit_offset;
>> @@ -216,6 +387,24 @@ struct v4l2_ctrl_hevc_slice_params {
>>   #define V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC		0x2
>>   #define V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR  0x4
>>   
>> +/**
>> + * struct v4l2_ctrl_hevc_decode_params - HEVC decode parameters
>> + *
>> + * @pic_order_cnt_val: picture order count
>> + * @num_active_dpb_entries: the number of entries in dpb
>> + * @dpb: the decoded picture buffer, for meta-data about reference frames
>> + * @num_poc_st_curr_before: the number of reference pictures in the short-term
>> + *			    set that come before the current frame
>> + * @num_poc_st_curr_after: the number of reference pictures in the short-term
>> + *			   set that come after the current frame
>> + * @num_poc_lt_curr: the number of reference pictures in the long-term set
>> + * @poc_st_curr_before: provides the index of the short term before references
>> + *			in DPB array
>> + * @poc_st_curr_after: provides the index of the short term after references
>> + *		       in DPB array
>> + * @poc_lt_curr: provides the index of the long term references in DPB array
>> + * @flags: see V4L2_HEVC_DECODE_PARAM_FLAG_{}
>> + */
>>   struct v4l2_ctrl_hevc_decode_params {
>>   	__s32	pic_order_cnt_val;
>>   	__u8	num_active_dpb_entries;
>> @@ -229,6 +418,28 @@ struct v4l2_ctrl_hevc_decode_params {
>>   	__u64	flags;
>>   };
>>   
>> +/**
>> + * struct v4l2_ctrl_hevc_scaling_matrix - HEVC scaling lists parameters
>> + *
>> + * @scaling_list_4x4: scaling list is used for the scaling process for
>> + *		      transform coefficients. The values on each scaling
>> + *		      list are expected in raster scan order
>> + * @scaling_list_8x8: scaling list is used for the scaling process for
>> + *		      transform coefficients. The values on each scaling
>> + *		      list are expected in raster scan order
>> + * @scaling_list_16x16: scaling list is used for the scaling process for
>> + *			transform coefficients. The values on each scaling
>> + *			list are expected in raster scan order
>> + * @scaling_list_32x32:	scaling list is used for the scaling process for
>> + *			transform coefficients. The values on each scaling
>> + *			list are expected in raster scan order
>> + * @scaling_list_dc_coef_16x16: scaling list is used for the scaling process
>> + *				for transform coefficients. The values on each
>> + *				scaling list are expected in raster scan order.
>> + * @scaling_list_dc_coef_32x32:	scaling list is used for the scaling process
>> + *				for transform coefficients. The values on each
>> + *				scaling list are expected in raster scan order.
>> + */
>>   struct v4l2_ctrl_hevc_scaling_matrix {
>>   	__u8	scaling_list_4x4[6][16];
>>   	__u8	scaling_list_8x8[6][64];
>
> Looks good otherwise.
>
> Nicolas
>
>

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

* Re: [PATCH v4 06/15] media: uapi: HEVC: Add document uAPI structure
@ 2022-04-04 16:36       ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-04-04 16:36 UTC (permalink / raw)
  To: Nicolas Dufresne, mchehab, ezequiel, p.zabel, gregkh, mripard,
	paul.kocialkowski, wens, jernej.skrabec, jonas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc


Le 04/04/2022 à 18:20, Nicolas Dufresne a écrit :
> Le lundi 28 février 2022 à 15:08 +0100, Benjamin Gaignard a écrit :
>> Add kernel-doc documentation for all the HEVC structures.
>>
>> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
>> ---
>> Version 4:
>> - Fix space/tab issue in kernel-doc
>>
>>   .../media/v4l/ext-ctrls-codec.rst             | 156 +++++++------
>>   include/media/hevc-ctrls.h                    | 217 +++++++++++++++++-
>>   2 files changed, 304 insertions(+), 69 deletions(-)
>>
>> diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>> index acf49420e56d..ac13a3eb85c2 100644
>> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
>> @@ -2673,70 +2673,76 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>>           of H.265 specifications.
>>       * - __u16
>>         - ``pic_width_in_luma_samples``
>> -      -
>> +      - Specifies the width of each decoded picture in units of luma samples.
>>       * - __u16
>>         - ``pic_height_in_luma_samples``
>> -      -
>> +      - Specifies the height of each decoded picture in units of luma samples.
>>       * - __u8
>>         - ``bit_depth_luma_minus8``
>> -      -
>> +      - Specifies the bit depth of the samples of the luma array.
>>       * - __u8
>>         - ``bit_depth_chroma_minus8``
>> -      -
>> +      - Specifies the bit depth of the samples of the chroma arrays.
>>       * - __u8
>>         - ``log2_max_pic_order_cnt_lsb_minus4``
>> -      -
>> +      - Specifies the value of the variable MaxPicOrderCntLsb.
>>       * - __u8
>>         - ``sps_max_dec_pic_buffering_minus1``
>> -      -
>> +      - Plus 1 specifies the maximum required size of the decoded picture buffer for
>> +        the CVS
>>       * - __u8
>>         - ``sps_max_num_reorder_pics``
>> -      -
>> +      - Indicates the maximum allowed number of pictures.
>>       * - __u8
>>         - ``sps_max_latency_increase_plus1``
>> -      -
>> +      - Not equal to 0 is used to compute the value of SpsMaxLatencyPictures[i].
>>       * - __u8
>>         - ``log2_min_luma_coding_block_size_minus3``
>> -      -
>> +      - Plus 3 specifies the minimum luma coding block size.
>>       * - __u8
>>         - ``log2_diff_max_min_luma_coding_block_size``
>> -      -
>> +      - Specifies the difference between the maximum and minimum luma coding block size.
>>       * - __u8
>>         - ``log2_min_luma_transform_block_size_minus2``
>> -      -
>> +      - Plus 2 specifies the minimum luma transform block size.
>>       * - __u8
>>         - ``log2_diff_max_min_luma_transform_block_size``
>> -      -
>> +      - Specifies the difference between the maximum and minimum luma transform block size.
>>       * - __u8
>>         - ``max_transform_hierarchy_depth_inter``
>> -      -
>> +      - Specifies the maximum hierarchy depth for transform units of coding units coded
>> +        in inter prediction mode.
>>       * - __u8
>>         - ``max_transform_hierarchy_depth_intra``
>> -      -
>> +      - Specifies the maximum hierarchy depth for transform units of coding units coded in
>> +        intra prediction mode.
>>       * - __u8
>>         - ``pcm_sample_bit_depth_luma_minus1``
>> -      -
>> +      - Specifies the number of bits used to represent each of PCM sample values of the
>> +        luma component.
>>       * - __u8
>>         - ``pcm_sample_bit_depth_chroma_minus1``
>> -      -
>> +      - Specifies the number of bits used to represent each of PCM sample values of
>> +        the chroma components.
>>       * - __u8
>>         - ``log2_min_pcm_luma_coding_block_size_minus3``
>> -      -
>> +      - Plus 3 specifies the minimum size of coding blocks.
>>       * - __u8
>>         - ``log2_diff_max_min_pcm_luma_coding_block_size``
>> -      -
>> +      - Specifies the difference between the maximum and minimum size of coding blocks.
>>       * - __u8
>>         - ``num_short_term_ref_pic_sets``
>> -      -
>> +      - Specifies the number of st_ref_pic_set() syntax structures included in the SPS.
>>       * - __u8
>>         - ``num_long_term_ref_pics_sps``
>> -      -
>> +      - Specifies the number of candidate long-term reference pictures that are
>> +        specified in the SPS.
>>       * - __u8
>>         - ``chroma_format_idc``
>> -      -
>> +      - Specifies the chroma sampling.
>>       * - __u8
>>         - ``sps_max_sub_layers_minus1``
>> -      -
>> +      - plus 1 specifies the maximum number of temporal sub-layers.
>>       * - __u64
>>         - ``flags``
>>         - See :ref:`Sequence Parameter Set Flags <hevc_sps_flags>`
>> @@ -2815,7 +2821,8 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>>         - Identifies the PPS for reference by other syntax elements.
>>       * - __u8
>>         - ``num_extra_slice_header_bits``
>> -      -
>> +      - Specifies the number of extra slice header bits that are present
>> +        in the slice header RBSP for coded pictures referring to the PPS.
>>       * - __u8
>>         - ``num_ref_idx_l0_default_active_minus1``
>>         - Specifies the inferred value of num_ref_idx_l0_active_minus1
>> @@ -2824,37 +2831,42 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>>         - Specifies the inferred value of num_ref_idx_l1_active_minus1
>>       * - __s8
>>         - ``init_qp_minus26``
>> -      -
>> +      - Plus 26 specifies the initial value of SliceQp Y for each slice
>> +        referring to the PPS.
>>       * - __u8
>>         - ``diff_cu_qp_delta_depth``
>> -      -
>> +      - Specifies the difference between the luma coding tree block size
>> +        and the minimum luma coding block size of coding units that
>> +        convey cu_qp_delta_abs and cu_qp_delta_sign_flag.
>>       * - __s8
>>         - ``pps_cb_qp_offset``
>> -      -
>> +      - Specify the offsets to the luma quantization parameter Cb.
>>       * - __s8
>>         - ``pps_cr_qp_offset``
>> -      -
>> +      - Specify the offsets to the luma quantization parameter Cr.
>>       * - __u8
>>         - ``num_tile_columns_minus1``
>> -      -
>> +      - Plus 1 specifies the number of tile columns partitioning the picture.
>>       * - __u8
>>         - ``num_tile_rows_minus1``
>> -      -
>> +      - Plus 1 specifies the number of tile rows partitioning the picture.
>>       * - __u8
>>         - ``column_width_minus1[20]``
>> -      -
>> +      - Plus 1 specifies the width of the i-th tile column in units of
>> +        coding tree blocks.
>>       * - __u8
>>         - ``row_height_minus1[22]``
>> -      -
>> +      - Plus 1 specifies the height of the i-th tile row in units of coding
>> +        tree blocks.
>>       * - __s8
>>         - ``pps_beta_offset_div2``
>> -      -
>> +      - Specify the default deblocking parameter offsets for beta divided by 2.
>>       * - __s8
>>         - ``pps_tc_offset_div2``
>> -      -
>> +      - Specify the default deblocking parameter offsets for tC divided by 2.
>>       * - __u8
>>         - ``log2_parallel_merge_level_minus2``
>> -      -
>> +      - Plus 2 specifies the value of the variable Log2ParMrgLevel.
>>       * - __u8
>>         - ``padding[4]``
>>         - Applications and drivers must set this to zero.
>> @@ -2976,10 +2988,10 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>>         - Offset (in bits) to the video data in the current slice data.
>>       * - __u8
>>         - ``nal_unit_type``
>> -      -
>> +      - Specifies the coding type of the slice (B, P or I).
>>       * - __u8
>>         - ``nuh_temporal_id_plus1``
>> -      -
>> +      - Minus 1 specifies a temporal identifier for the NAL unit.
>>       * - __u8
>>         - ``slice_type``
>>         -
>> @@ -2987,52 +2999,56 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>>   	V4L2_HEVC_SLICE_TYPE_B).
>>       * - __u8
>>         - ``colour_plane_id``
>> -      -
>> +      - Specifies the colour plane associated with the current slice.
>>       * - __u16
>>         - ``slice_pic_order_cnt``
>> -      -
>> +      - Specifies the picture order count.
>>       * - __u8
>>         - ``num_ref_idx_l0_active_minus1``
>> -      -
>> +      - Specifies the maximum reference index for reference picture list 0
>> +        that may be used to decode the slice.
>>       * - __u8
>>         - ``num_ref_idx_l1_active_minus1``
>> -      -
>> +      - Specifies the maximum reference index for reference picture list 1
>> +        that may be used to decode the slice.
>>       * - __u8
>>         - ``collocated_ref_idx``
>> -      -
>> +      - Specifies the reference index of the collocated picture used for
>> +        temporal motion vector prediction.
>>       * - __u8
>>         - ``five_minus_max_num_merge_cand``
>> -      -
>> +      - Specifies the maximum number of merging motion vector prediction
>> +        candidates supported in the slice subtracted from 5.
>>       * - __s8
>>         - ``slice_qp_delta``
>> -      -
>> +      - Specifies the initial value of QpY to be used for the coding blocks in the slice.
>>       * - __s8
>>         - ``slice_cb_qp_offset``
>> -      -
>> +      - Specifies a difference to be added to the value of pps_cb_qp_offset.
>>       * - __s8
>>         - ``slice_cr_qp_offset``
>> -      -
>> +      - Specifies a difference to be added to the value of pps_cr_qp_offset.
>>       * - __s8
>>         - ``slice_act_y_qp_offset``
>> -      -
>> +      - screen content extension parameters
>>       * - __s8
>>         - ``slice_act_cb_qp_offset``
>> -      -
>> +      - screen content extension parameters
>>       * - __s8
>>         - ``slice_act_cr_qp_offset``
>> -      -
>> +      - screen content extension parameters
>>       * - __s8
>>         - ``slice_beta_offset_div2``
>> -      -
>> +      - Specify the deblocking parameter offsets for beta divided by 2.
>>       * - __s8
>>         - ``slice_tc_offset_div2``
>> -      -
>> +      - Specify the deblocking parameter offsets for tC divided by 2.
>>       * - __u8
>>         - ``pic_struct``
>> -      -
>> +      - Indicates whether a picture should be displayed as a frame or as one or more fields.
>>       * - __u32
>>         - ``slice_segment_addr``
>> -      -
>> +      - Specifies the address of the first coding tree block in the slice segment.
>>       * - __u8
>>         - ``ref_idx_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>>         - The list of L0 reference elements as indices in the DPB.
>> @@ -3222,36 +3238,44 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>>       :stub-columns: 0
>>       :widths:       1 1 2
>>   
>> -    * - __u8
>> -      - ``luma_log2_weight_denom``
>> -      -
>> -    * - __s8
>> -      - ``delta_chroma_log2_weight_denom``
>> -      -
>>       * - __s8
>>         - ``delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>> -      -
>> +      - The difference of the weighting factor applied to the luma
>> +        prediction value for list 0.
>>       * - __s8
>>         - ``luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>> -      -
>> +      - The additive offset applied to the luma prediction value for list 0.
>>       * - __s8
>>         - ``delta_chroma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
>> -      -
>> +      - The difference of the weighting factor applied to the chroma
>> +        prediction value for list 0.
>>       * - __s8
>>         - ``chroma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
>> -      -
>> +      - The difference of the additive offset applied to the chroma
>> +        prediction values for list 0.
>>       * - __s8
>>         - ``delta_luma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>> -      -
>> +      - The difference of the weighting factor applied to the luma
>> +        prediction value for list 1.
>>       * - __s8
>>         - ``luma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>> -      -
>> +      - The additive offset applied to the luma prediction value for list 1.
>>       * - __s8
>>         - ``delta_chroma_weight_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
>> -      -
>> +      - The difference of the weighting factor applied to the chroma
>> +        prediction value for list 1.
>>       * - __s8
>>         - ``chroma_offset_l1[V4L2_HEVC_DPB_ENTRIES_NUM_MAX][2]``
>> -      -
>> +      - The difference of the additive offset applied to the chroma
>> +        prediction values for list 1.
>> +    * - __u8
>> +      - ``luma_log2_weight_denom``
>> +      - The base 2 logarithm of the denominator for all luma weighting
>> +        factors.
>> +    * - __s8
>> +      - ``delta_chroma_log2_weight_denom``
>> +      - The difference of the base 2 logarithm of the denominator for
>> +        all chroma weighting factors.
>>       * - __u8
>>         - ``padding[6]``
>>         - Applications and drivers must set this to zero.
>> diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
>> index b3540167df9e..149384ca4c84 100644
>> --- a/include/media/hevc-ctrls.h
>> +++ b/include/media/hevc-ctrls.h
>> @@ -55,9 +55,68 @@ enum v4l2_stateless_hevc_start_code {
>>   #define V4L2_HEVC_SPS_FLAG_SPS_TEMPORAL_MVP_ENABLED		(1ULL << 7)
>>   #define V4L2_HEVC_SPS_FLAG_STRONG_INTRA_SMOOTHING_ENABLED	(1ULL << 8)
>>   
>> -/* The controls are not stable at the moment and will likely be reworked. */
>> +/**
>> + * struct v4l2_ctrl_hevc_sps - ITU-T Rec. H.265: Sequence parameter set
>> + *
>> + * @video_parameter_set_id: specifies the value of the
>> + *			    vps_video_parameter_set_id of the active VPS
>> + * @seq_parameter_set_id: provides an identifier for the SPS for
>> + *			  reference by other syntax elements
>> + * @pic_width_in_luma_samples: specifies the width of each decoded picture
>> + *			       in units of luma samples
>> + * @pic_height_in_luma_samples: specifies the height of each decoded picture
>> + *				in units of luma samples
>> + * @bit_depth_luma_minus8: specifies the bit depth of the samples of the
>> + *			   luma array
>> + * @bit_depth_chroma_minus8: specifies the bit depth of the samples of the
>> + *			     chroma arrays
>> + * @log2_max_pic_order_cnt_lsb_minus4: specifies the value of the variable
>> + *				       MaxPicOrderCntLsb
>> + * @sps_max_dec_pic_buffering_minus1: plus 1 specifies the maximum required
>> + *				      size of the decoded picture buffer for
>> + *				      the CVS
>> + * @sps_max_num_reorder_pics: indicates the maximum allowed number of pictures
>> + * @sps_max_latency_increase_plus1: not equal to 0 is used to compute the
>> + *				    value of SpsMaxLatencyPictures[i]
>> + * @log2_min_luma_coding_block_size_minus3: plus 3 specifies the minimum
>> + *					    luma coding block size
>> + * @log2_diff_max_min_luma_coding_block_size: specifies the difference between
>> + *					      the maximum and minimum luma
>> + *					      coding block size
>> + * @log2_min_luma_transform_block_size_minus2: plus 2 specifies the minimum luma
>> + *					       transform block size
>> + * @log2_diff_max_min_luma_transform_block_size: specifies the difference between
>> + *						 the maximum and minimum luma
>> + *						 transform block size
>> + * @max_transform_hierarchy_depth_inter: specifies the maximum hierarchy
>> + *					 depth for transform units of
>> + *					 coding units coded in inter
>> + *					 prediction mode
>> + * @max_transform_hierarchy_depth_intra: specifies the maximum hierarchy
>> + *					 depth for transform units of
>> + *					 coding units coded in intra
>> + *					 prediction mode
>> + * @pcm_sample_bit_depth_luma_minus1: specifies the number of bits used to
>> + *				      represent each of PCM sample values of the
>> + *				      luma component
>> + * @pcm_sample_bit_depth_chroma_minus1: specifies the number of bits used to
>> + *					represent each of PCM sample values of
>> + *					the chroma components
>> + * @log2_min_pcm_luma_coding_block_size_minus3: plus 3 specifies the minimum size
>> + *						of coding blocks
>> + * @log2_diff_max_min_pcm_luma_coding_block_size: specifies the difference between
>> + *						  the maximum and minimum size of
>> + *						  coding blocks
>> + * @num_short_term_ref_pic_sets: speciefies the number of st_ref_pic_set()
>> + *				 syntax structures included in the SPS
>> + * @num_long_term_ref_pics_sps:	specifies the number of candidate long-term
>> + *				reference pictures that are specified in the SPS
>> + * @chroma_format_idc: specifies the chroma sampling
>> + * @sps_max_sub_layers_minus1: plus 1 specifies the maximum number of temporal
>> + *			       sub-layers
>> + * @flags: see V4L2_HEVC_SPS_FLAG_{}
>> + */
>>   struct v4l2_ctrl_hevc_sps {
>> -	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Sequence parameter set */
>>   	__u8	video_parameter_set_id;
>>   	__u8	seq_parameter_set_id;
>>   	__u16	pic_width_in_luma_samples;
>> @@ -108,8 +167,43 @@ struct v4l2_ctrl_hevc_sps {
>>   #define V4L2_HEVC_PPS_FLAG_DEBLOCKING_FILTER_CONTROL_PRESENT	(1ULL << 19)
>>   #define V4L2_HEVC_PPS_FLAG_UNIFORM_SPACING			(1ULL << 20)
>>   
>> +/**
>> + * struct v4l2_ctrl_hevc_pps - ITU-T Rec. H.265: Picture parameter set
>> + *
>> + * @pic_parameter_set_id: identifies the PPS for reference by other
>> + *			  syntax elements
>> + * @num_extra_slice_header_bits: specifies the number of extra slice header
>> + *				 bits that are present in the slice header RBSP
>> + *				 for coded pictures referring to the PPS.
>> + * @num_ref_idx_l0_default_active_minus1: specifies the inferred value of
>> + *					  num_ref_idx_l0_active_minus1
>> + * @num_ref_idx_l1_default_active_minus1: specifies the inferred value of
>> + *					  num_ref_idx_l1_active_minus1
>> + * @init_qp_minus26: plus 26 specifies the initial value of SliceQp Y for
>> + *		     each slice referring to the PPS
>> + * @diff_cu_qp_delta_depth: specifies the difference between the luma coding
>> + *			    tree block size and the minimum luma coding block
>> + *			    size of coding units that convey cu_qp_delta_abs
>> + *			    and cu_qp_delta_sign_flag
>> + * @pps_cb_qp_offset: specify the offsets to the luma quantization parameter Cb
>> + * @pps_cr_qp_offset: specify the offsets to the luma quantization parameter Cr
>> + * @num_tile_columns_minus1: plus 1 specifies the number of tile columns
>> + *			     partitioning the picture
>> + * @num_tile_rows_minus1: plus 1 specifies the number of tile rows partitioning
>> + *			  the picture
>> + * @column_width_minus1: plus 1 specifies the width of the i-th tile column in
>> + *			 units of coding tree blocks
>> + * @row_height_minus1: plus 1 specifies the height of the i-th tile row in
>> + *		       units of coding tree blocks
>> + * @pps_beta_offset_div2: specify the default deblocking parameter offsets for
>> + *			  beta divided by 2
>> + * @pps_tc_offset_div2: specify the default deblocking parameter offsets for tC
>> + *			divided by 2
>> + * @log2_parallel_merge_level_minus2: plus 2 specifies the value of the variable
>> + *				      Log2ParMrgLevel
>> + * @flags: see V4L2_HEVC_PPS_FLAG_{}
>> + */
>>   struct v4l2_ctrl_hevc_pps {
>> -	/* ISO/IEC 23008-2, ITU-T Rec. H.265: Picture parameter set */
>>   	__u8	pic_parameter_set_id;
>>   	__u8	num_extra_slice_header_bits;
>>   	__u8	num_ref_idx_l0_default_active_minus1;
>> @@ -134,6 +228,14 @@ struct v4l2_ctrl_hevc_pps {
>>   
>>   #define V4L2_HEVC_DPB_ENTRIES_NUM_MAX		16
>>   
>> +/**
>> + * struct v4l2_hevc_dpb_entry - HEVC decoded picture buffer entry
>> + *
>> + * @timestamp: timestamp of the V4L2 capture buffer to use as reference.
>> + * @flags: long term flag for the reference frame
>> + * @field_pic: whether the reference is a field picture or a frame.
>> + * @pic_order_cnt: the picture order count of the reference.
> Unless I missed that change, there is two POC (its an array), but the doc does
> not reflect this.
>
>    __u16   pic_order_cnt[2];
>
> In H.264, this has been split in two:
>
>          __s32 top_field_order_cnt;
>          __s32 bottom_field_order_cnt;
>
> I'm also noticing the difference in number of bits. HEVC could have been
> different, but the spec says:
>
>     The value of PicOrderCntVal shall be in the range of −2^31 to 2^31 − 1,
>     inclusive
>     
> Clarification needed if this isn't meant to be PicOrderCntVal but
> pic_order_cnt_lsb. That being said, it looks like DXVA exposes that as a signed
> integer (32 bit).

I will change __u16   pic_order_cnt[2] to __s32 PicOrderCntVal
to follow the spec naming that will be more clear like that.

Thanks,
Benjamin

>
>> + */
>>   struct v4l2_hevc_dpb_entry {
>>   	__u64	timestamp;
>>   	__u8	flags;
>> @@ -142,6 +244,31 @@ struct v4l2_hevc_dpb_entry {
>>   	__u8	padding[2];
>>   };
>>   
>> +/**
>> + * struct v4l2_hevc_pred_weight_table - HEVC weighted prediction parameters
>> + *
>> + * @delta_luma_weight_l0: the difference of the weighting factor applied
>> + *			  to the luma prediction value for list 0
>> + * @luma_offset_l0: the additive offset applied to the luma prediction value
>> + *		    for list 0
>> + * @delta_chroma_weight_l0: the difference of the weighting factor applied
>> + *			    to the chroma prediction values for list 0
>> + * @chroma_offset_l0: the difference of the additive offset applied to
>> + *		      the chroma prediction values for list 0
>> + * @delta_luma_weight_l1: the difference of the weighting factor applied
>> + *			  to the luma prediction value for list 1
>> + * @luma_offset_l1: the additive offset applied to the luma prediction value
>> + *		    for list 1
>> + * @delta_chroma_weight_l1: the difference of the weighting factor applied
>> + *			    to the chroma prediction values for list 1
>> + * @chroma_offset_l1: the difference of the additive offset applied to
>> + *		      the chroma prediction values for list 1
>> + * @luma_log2_weight_denom: the base 2 logarithm of the denominator for
>> + *			    all luma weighting factors
>> + * @delta_chroma_log2_weight_denom: the difference of the base 2 logarithm
>> + *				    of the denominator for all chroma
>> + *				    weighting factors
>> + */
>>   struct v4l2_hevc_pred_weight_table {
>>   	__s8	delta_luma_weight_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>>   	__s8	luma_offset_l0[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>> @@ -170,6 +297,50 @@ struct v4l2_hevc_pred_weight_table {
>>   #define V4L2_HEVC_SLICE_PARAMS_FLAG_SLICE_LOOP_FILTER_ACROSS_SLICES_ENABLED (1ULL << 8)
>>   #define V4L2_HEVC_SLICE_PARAMS_FLAG_DEPENDENT_SLICE_SEGMENT	(1ULL << 9)
>>   
>> +/**
>> + * v4l2_ctrl_hevc_slice_params - HEVC slice parameters
>> + *
>> + * @bit_size: size (in bits) of the current slice data
>> + * @data_bit_offset: offset (in bits) to the video data in the current slice data
>> + * @nal_unit_type: specifies the coding type of the slice (B, P or I)
>> + * @nuh_temporal_id_plus1: minus 1 specifies a temporal identifier for the NAL unit
>> + * @slice_type: see V4L2_HEVC_SLICE_TYPE_{}
>> + * @colour_plane_id: specifies the colour plane associated with the current slice
>> + * @slice_pic_order_cnt: specifies the picture order count
>> + * @num_ref_idx_l0_active_minus1: specifies the maximum reference index for
>> + *				  reference picture list 0 that may be used to decode
>> + *				  the slice
>> + * @num_ref_idx_l1_active_minus1: specifies the maximum reference index for
>> + *				  reference picture list 1 that may be used to decode
>> + *				  the slice
>> + * @collocated_ref_idx: specifies the reference index of the collocated picture used
>> + *			for temporal motion vector prediction
>> + * @five_minus_max_num_merge_cand: specifies the maximum number of merging
>> + *				   motion vector prediction candidates supported in
>> + *				   the slice subtracted from 5
>> + * @slice_qp_delta: specifies the initial value of QpY to be used for the coding
>> + *		    blocks in the slice
>> + * @slice_cb_qp_offset: specifies a difference to be added to the value of pps_cb_qp_offset
>> + * @slice_cr_qp_offset: specifies a difference to be added to the value of pps_cr_qp_offset
>> + * @slice_act_y_qp_offset: screen content extension parameters
>> + * @slice_act_cb_qp_offset: screen content extension parameters
>> + * @slice_act_cr_qp_offset: screen content extension parameters
>> + * @slice_beta_offset_div2: specify the deblocking parameter offsets for beta divided by 2
>> + * @slice_tc_offset_div2: specify the deblocking parameter offsets for tC divided by 2
>> + * @pic_struct: indicates whether a picture should be displayed as a frame or as one or
>> + *		more fields
>> + * @slice_segment_addr: specifies the address of the first coding tree block in
>> + *			the slice segment
>> + * @ref_idx_l0: the list of L0 reference elements as indices in the DPB
>> + * @ref_idx_l1: the list of L1 reference elements as indices in the DPB
>> + * @short_term_ref_pic_set_size: specifies the number of st_ref_pic_set()
>> + *				 syntax structures included in the SPS
>> + * @long_term_ref_pic_set_size: specifies the number of candidate long-term
>> + *				reference pictures that are specified in the SPS
>> + * @pred_weight_table: the prediction weight coefficients for inter-picture
>> + *		       prediction
>> + * @flags: see V4L2_HEVC_SLICE_PARAMS_FLAG_{}
>> + */
>>   struct v4l2_ctrl_hevc_slice_params {
>>   	__u32	bit_size;
>>   	__u32	data_bit_offset;
>> @@ -216,6 +387,24 @@ struct v4l2_ctrl_hevc_slice_params {
>>   #define V4L2_HEVC_DECODE_PARAM_FLAG_IDR_PIC		0x2
>>   #define V4L2_HEVC_DECODE_PARAM_FLAG_NO_OUTPUT_OF_PRIOR  0x4
>>   
>> +/**
>> + * struct v4l2_ctrl_hevc_decode_params - HEVC decode parameters
>> + *
>> + * @pic_order_cnt_val: picture order count
>> + * @num_active_dpb_entries: the number of entries in dpb
>> + * @dpb: the decoded picture buffer, for meta-data about reference frames
>> + * @num_poc_st_curr_before: the number of reference pictures in the short-term
>> + *			    set that come before the current frame
>> + * @num_poc_st_curr_after: the number of reference pictures in the short-term
>> + *			   set that come after the current frame
>> + * @num_poc_lt_curr: the number of reference pictures in the long-term set
>> + * @poc_st_curr_before: provides the index of the short term before references
>> + *			in DPB array
>> + * @poc_st_curr_after: provides the index of the short term after references
>> + *		       in DPB array
>> + * @poc_lt_curr: provides the index of the long term references in DPB array
>> + * @flags: see V4L2_HEVC_DECODE_PARAM_FLAG_{}
>> + */
>>   struct v4l2_ctrl_hevc_decode_params {
>>   	__s32	pic_order_cnt_val;
>>   	__u8	num_active_dpb_entries;
>> @@ -229,6 +418,28 @@ struct v4l2_ctrl_hevc_decode_params {
>>   	__u64	flags;
>>   };
>>   
>> +/**
>> + * struct v4l2_ctrl_hevc_scaling_matrix - HEVC scaling lists parameters
>> + *
>> + * @scaling_list_4x4: scaling list is used for the scaling process for
>> + *		      transform coefficients. The values on each scaling
>> + *		      list are expected in raster scan order
>> + * @scaling_list_8x8: scaling list is used for the scaling process for
>> + *		      transform coefficients. The values on each scaling
>> + *		      list are expected in raster scan order
>> + * @scaling_list_16x16: scaling list is used for the scaling process for
>> + *			transform coefficients. The values on each scaling
>> + *			list are expected in raster scan order
>> + * @scaling_list_32x32:	scaling list is used for the scaling process for
>> + *			transform coefficients. The values on each scaling
>> + *			list are expected in raster scan order
>> + * @scaling_list_dc_coef_16x16: scaling list is used for the scaling process
>> + *				for transform coefficients. The values on each
>> + *				scaling list are expected in raster scan order.
>> + * @scaling_list_dc_coef_32x32:	scaling list is used for the scaling process
>> + *				for transform coefficients. The values on each
>> + *				scaling list are expected in raster scan order.
>> + */
>>   struct v4l2_ctrl_hevc_scaling_matrix {
>>   	__u8	scaling_list_4x4[6][16];
>>   	__u8	scaling_list_8x8[6][64];
>
> Looks good otherwise.
>
> Nicolas
>
>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
  2022-04-04 15:56               ` Benjamin Gaignard
@ 2022-04-05 21:27                 ` Adam Ford
  -1 siblings, 0 replies; 81+ messages in thread
From: Adam Ford @ 2022-04-05 21:27 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc

On Mon, Apr 4, 2022 at 10:56 AM Benjamin Gaignard
<benjamin.gaignard@collabora.com> wrote:
>
>
> Le 02/04/2022 à 18:59, Adam Ford a écrit :
> > On Sat, Apr 2, 2022 at 11:22 AM Adam Ford <aford173@gmail.com> wrote:
> >> On Fri, Apr 1, 2022 at 8:18 AM Benjamin Gaignard
> >> <benjamin.gaignard@collabora.com> wrote:
> >>>
> >>> Le 31/03/2022 à 08:53, Benjamin Gaignard a écrit :
> >>>> Le 30/03/2022 à 20:52, Adam Ford a écrit :
> >>>>> On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
> >>>>> <benjamin.gaignard@collabora.com> wrote:
> >>>>>> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
> >>>>>>> This series aims to make HEVC uapi stable and usable for hardware
> >>>>>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
> >>>>>>> and 2 out of the tree drivers (rkvdec and RPI).
> >>>>>>>
> >>>>>>> After the remarks done on version 2, I have completely reworked to
> >>>>>>> patches
> >>>>>>> split so changelogs are meaningless. I have also drop "RFC" from the
> >>>>>>> titles.
> >>>>>>>
> >>>>>>> Version 4:
> >>>>>>> - Add num_entry_point_offsets field in  struct
> >>>>>>> v4l2_ctrl_hevc_slice_params
> >>>>>>> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
> >>>>>>> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> >>>>>>> - Fix space/tab issue in kernel-doc
> >>>>>>> - Add patch to change data_bit_offset definition
> >>>>>>> - Fix hantro-media SPDX license
> >>>>>>> - put controls under stateless section in v4l2-ctrls-defs.c
> >>>>>>>
> >>>>>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
> >>>>>> Dear reviewers,
> >>>>>>
> >>>>>> This series is waiting for your feedback,
> >>>>> I tried several times with the suggested repos for both the kernel and
> >>>>> g-streamer without success getting Fluster to pass any tests on the
> >>>>> imx8mq.  I can try again but I likely won't get to it until this
> >>>>> weekend.  If I can get it working, I'll test both the 8mq and 8mm.
> >>>> Thanks a lot for that.
> >>>>
> >>>> Benjamin
> >>> Adam,
> >>>
> >>> You may need to check if h265parse and v4l2slh265dec are available on your board.
> >> I ran gst-inspect to see what showed up with 265 in the name.
> >>
> >> # gst-inspect-1.0 |grep 265
> >> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
> >> rtp:  rtph265depay: RTP H265 depayloader
> >> rtp:  rtph265pay: RTP H265 payloader
> >> typefindfunctions: video/x-h265: h265, x265, 265
> >> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
> >> videoparsersbad:  h265parse: H.265 parser
> >>
> >> It appears I have both h265parse and v4l2slh265dec.
> >>
> >>> fluster check if v4l2slh265dec is working fine with this command line:
> >>>
> >>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
> >>>
> >>> so if one of them is missing it won't work.
> >> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
> >> Setting pipeline to PAUSED ...
> >> 0:00:00.098389938   526 0xaaaaf9d86ac0 ERROR     v4l2codecs-decoder
> >> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
> >> VIDIOC_G_EXT_CTRLS failed: Invalid argument
> >> ERROR: from element
> >> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
> >> report framing and start code method.
> >> Additional debug info:
> >> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
> >> gst_v4l2_codec_h265_dec_open ():
> >> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> >> gst_v4l2_decoder_get_controls() failed: Invalid argument
> >> ERROR: pipeline doesn't want to preroll.
> >> ERROR: from element
> >> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
> >> initialize supporting library.
> >> Additional debug info:
> >> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
> >> gst_video_decoder_change_state ():
> >> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> >> Failed to open decoder
> >> ERROR: pipeline doesn't want to preroll.
> >> Failed to set pipeline to PAUSED.
> >> Setting pipeline to NULL ...
> >> Freeing pipeline ...
> >>
> >> Does this mean I have a wrong version of the kernel and/or incomplete patches?
> > I double checked the branches.
> >
> > Kernel:
> > https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
> > branch:  origin/HEVC_UAPI_V4
> >
> > Gstreamer:
> > https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
> > branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15
> >
> >
> > I am still not able to run h.265/HEVC tests.
>
> Hello Adam,
>
> I have updated the following branches with the versions I have used today:
>
> Kernel:
> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
> branch: origin/HEVC_UAPI_V5 only one change in documentation vs version 4 but rebased in v5.18-rc1
>
> Gstreamer:
> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15 updated on the latest GST main branch
>
> I hope this will work fine this time.

I wish I had better news for you:

dmesg shows the hantro driver is being loaded:

[   38.612243] hantro-vpu 38300000.video-codec: registered
nxp,imx8mq-vpu-g1-dec as /dev/video0
[   38.612618] hantro-vpu 38310000.video-codec: registered
nxp,imx8mq-vpu-g2-dec as /dev/video1

# gst-inspect-1.0 |grep 265
libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
rtp:  rtph265depay: RTP H265 depayloader
rtp:  rtph265pay: RTP H265 payloader
typefindfunctions: video/x-h265: h265, x265, 265
v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
videoparsersbad:  h265parse: H.265 parser

Fluster reports:
GStreamer-H.265-V4L2SL-Gst1.0: GStreamer H.265 V4L2SL decoder for
GStreamer 1.0... ❌

adam
>
> Benjamin
>
> >
> > adam
> >> adam
> >>> Regards,
> >>> Benjamin
> >>>
> >>>>> adam
> >>>>>> Thanks,
> >>>>>> Benjamin
> >>>>>>
> >>>>>>> Benjamin
> >>>>>>>
> >>>>>>>
> >>>>>>> Benjamin Gaignard (12):
> >>>>>>>      media: uapi: HEVC: Add missing fields in HEVC controls
> >>>>>>>      media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
> >>>>>>>        prefix
> >>>>>>>      media: uapi: HEVC: Add document uAPI structure
> >>>>>>>      media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS
> >>>>>>> as a
> >>>>>>>        dynamic array
> >>>>>>>      media: uapi: Move parsed HEVC pixel format out of staging
> >>>>>>>      media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> >>>>>>> control
> >>>>>>>      media: uapi: Move the HEVC stateless control type out of staging
> >>>>>>>      media: controls: Log HEVC stateless control in .std_log
> >>>>>>>      media: uapi: Create a dedicated header for Hantro control
> >>>>>>>      media: uapi: HEVC: fix padding in v4l2 control structures
> >>>>>>>      media: uapi: Change data_bit_offset definition
> >>>>>>>      media: uapi: move HEVC stateless controls out of staging
> >>>>>>>
> >>>>>>> Hans Verkuil (3):
> >>>>>>>      videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
> >>>>>>>      v4l2-ctrls: add support for dynamically allocated arrays.
> >>>>>>>      vivid: add dynamic array test control
> >>>>>>>
> >>>>>>>     .../userspace-api/media/drivers/hantro.rst    |   5 -
> >>>>>>>     .../media/v4l/ext-ctrls-codec-stateless.rst   | 833
> >>>>>>> ++++++++++++++++++
> >>>>>>>     .../media/v4l/ext-ctrls-codec.rst             | 780
> >>>>>>> ----------------
> >>>>>>>     .../media/v4l/pixfmt-compressed.rst           |   7 +-
> >>>>>>>     .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
> >>>>>>>     .../media/v4l/vidioc-queryctrl.rst            |   8 +
> >>>>>>>     .../media/videodev2.h.rst.exceptions          |   5 +
> >>>>>>>     .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
> >>>>>>>     drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
> >>>>>>>     drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
> >>>>>>>     drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
> >>>>>>>     drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
> >>>>>>>     drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
> >>>>>>>     drivers/staging/media/hantro/hantro_drv.c     |  27 +-
> >>>>>>>     drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
> >>>>>>>     drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
> >>>>>>>     .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
> >>>>>>>     .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
> >>>>>>>     include/media/hevc-ctrls.h                    | 250 ------
> >>>>>>>     include/media/v4l2-ctrls.h                    |  48 +-
> >>>>>>>     include/uapi/linux/hantro-media.h             |  19 +
> >>>>>>>     include/uapi/linux/v4l2-controls.h            | 439 +++++++++
> >>>>>>>     include/uapi/linux/videodev2.h                |  13 +
> >>>>>>>     23 files changed, 1697 insertions(+), 1170 deletions(-)
> >>>>>>>     delete mode 100644 include/media/hevc-ctrls.h
> >>>>>>>     create mode 100644 include/uapi/linux/hantro-media.h
> >>>>>>>

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
@ 2022-04-05 21:27                 ` Adam Ford
  0 siblings, 0 replies; 81+ messages in thread
From: Adam Ford @ 2022-04-05 21:27 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc

On Mon, Apr 4, 2022 at 10:56 AM Benjamin Gaignard
<benjamin.gaignard@collabora.com> wrote:
>
>
> Le 02/04/2022 à 18:59, Adam Ford a écrit :
> > On Sat, Apr 2, 2022 at 11:22 AM Adam Ford <aford173@gmail.com> wrote:
> >> On Fri, Apr 1, 2022 at 8:18 AM Benjamin Gaignard
> >> <benjamin.gaignard@collabora.com> wrote:
> >>>
> >>> Le 31/03/2022 à 08:53, Benjamin Gaignard a écrit :
> >>>> Le 30/03/2022 à 20:52, Adam Ford a écrit :
> >>>>> On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
> >>>>> <benjamin.gaignard@collabora.com> wrote:
> >>>>>> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
> >>>>>>> This series aims to make HEVC uapi stable and usable for hardware
> >>>>>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
> >>>>>>> and 2 out of the tree drivers (rkvdec and RPI).
> >>>>>>>
> >>>>>>> After the remarks done on version 2, I have completely reworked to
> >>>>>>> patches
> >>>>>>> split so changelogs are meaningless. I have also drop "RFC" from the
> >>>>>>> titles.
> >>>>>>>
> >>>>>>> Version 4:
> >>>>>>> - Add num_entry_point_offsets field in  struct
> >>>>>>> v4l2_ctrl_hevc_slice_params
> >>>>>>> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
> >>>>>>> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> >>>>>>> - Fix space/tab issue in kernel-doc
> >>>>>>> - Add patch to change data_bit_offset definition
> >>>>>>> - Fix hantro-media SPDX license
> >>>>>>> - put controls under stateless section in v4l2-ctrls-defs.c
> >>>>>>>
> >>>>>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
> >>>>>> Dear reviewers,
> >>>>>>
> >>>>>> This series is waiting for your feedback,
> >>>>> I tried several times with the suggested repos for both the kernel and
> >>>>> g-streamer without success getting Fluster to pass any tests on the
> >>>>> imx8mq.  I can try again but I likely won't get to it until this
> >>>>> weekend.  If I can get it working, I'll test both the 8mq and 8mm.
> >>>> Thanks a lot for that.
> >>>>
> >>>> Benjamin
> >>> Adam,
> >>>
> >>> You may need to check if h265parse and v4l2slh265dec are available on your board.
> >> I ran gst-inspect to see what showed up with 265 in the name.
> >>
> >> # gst-inspect-1.0 |grep 265
> >> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
> >> rtp:  rtph265depay: RTP H265 depayloader
> >> rtp:  rtph265pay: RTP H265 payloader
> >> typefindfunctions: video/x-h265: h265, x265, 265
> >> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
> >> videoparsersbad:  h265parse: H.265 parser
> >>
> >> It appears I have both h265parse and v4l2slh265dec.
> >>
> >>> fluster check if v4l2slh265dec is working fine with this command line:
> >>>
> >>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
> >>>
> >>> so if one of them is missing it won't work.
> >> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
> >> Setting pipeline to PAUSED ...
> >> 0:00:00.098389938   526 0xaaaaf9d86ac0 ERROR     v4l2codecs-decoder
> >> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
> >> VIDIOC_G_EXT_CTRLS failed: Invalid argument
> >> ERROR: from element
> >> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
> >> report framing and start code method.
> >> Additional debug info:
> >> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
> >> gst_v4l2_codec_h265_dec_open ():
> >> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> >> gst_v4l2_decoder_get_controls() failed: Invalid argument
> >> ERROR: pipeline doesn't want to preroll.
> >> ERROR: from element
> >> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
> >> initialize supporting library.
> >> Additional debug info:
> >> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
> >> gst_video_decoder_change_state ():
> >> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> >> Failed to open decoder
> >> ERROR: pipeline doesn't want to preroll.
> >> Failed to set pipeline to PAUSED.
> >> Setting pipeline to NULL ...
> >> Freeing pipeline ...
> >>
> >> Does this mean I have a wrong version of the kernel and/or incomplete patches?
> > I double checked the branches.
> >
> > Kernel:
> > https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
> > branch:  origin/HEVC_UAPI_V4
> >
> > Gstreamer:
> > https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
> > branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15
> >
> >
> > I am still not able to run h.265/HEVC tests.
>
> Hello Adam,
>
> I have updated the following branches with the versions I have used today:
>
> Kernel:
> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
> branch: origin/HEVC_UAPI_V5 only one change in documentation vs version 4 but rebased in v5.18-rc1
>
> Gstreamer:
> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15 updated on the latest GST main branch
>
> I hope this will work fine this time.

I wish I had better news for you:

dmesg shows the hantro driver is being loaded:

[   38.612243] hantro-vpu 38300000.video-codec: registered
nxp,imx8mq-vpu-g1-dec as /dev/video0
[   38.612618] hantro-vpu 38310000.video-codec: registered
nxp,imx8mq-vpu-g2-dec as /dev/video1

# gst-inspect-1.0 |grep 265
libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
rtp:  rtph265depay: RTP H265 depayloader
rtp:  rtph265pay: RTP H265 payloader
typefindfunctions: video/x-h265: h265, x265, 265
v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
videoparsersbad:  h265parse: H.265 parser

Fluster reports:
GStreamer-H.265-V4L2SL-Gst1.0: GStreamer H.265 V4L2SL decoder for
GStreamer 1.0... ❌

adam
>
> Benjamin
>
> >
> > adam
> >> adam
> >>> Regards,
> >>> Benjamin
> >>>
> >>>>> adam
> >>>>>> Thanks,
> >>>>>> Benjamin
> >>>>>>
> >>>>>>> Benjamin
> >>>>>>>
> >>>>>>>
> >>>>>>> Benjamin Gaignard (12):
> >>>>>>>      media: uapi: HEVC: Add missing fields in HEVC controls
> >>>>>>>      media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
> >>>>>>>        prefix
> >>>>>>>      media: uapi: HEVC: Add document uAPI structure
> >>>>>>>      media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS
> >>>>>>> as a
> >>>>>>>        dynamic array
> >>>>>>>      media: uapi: Move parsed HEVC pixel format out of staging
> >>>>>>>      media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> >>>>>>> control
> >>>>>>>      media: uapi: Move the HEVC stateless control type out of staging
> >>>>>>>      media: controls: Log HEVC stateless control in .std_log
> >>>>>>>      media: uapi: Create a dedicated header for Hantro control
> >>>>>>>      media: uapi: HEVC: fix padding in v4l2 control structures
> >>>>>>>      media: uapi: Change data_bit_offset definition
> >>>>>>>      media: uapi: move HEVC stateless controls out of staging
> >>>>>>>
> >>>>>>> Hans Verkuil (3):
> >>>>>>>      videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
> >>>>>>>      v4l2-ctrls: add support for dynamically allocated arrays.
> >>>>>>>      vivid: add dynamic array test control
> >>>>>>>
> >>>>>>>     .../userspace-api/media/drivers/hantro.rst    |   5 -
> >>>>>>>     .../media/v4l/ext-ctrls-codec-stateless.rst   | 833
> >>>>>>> ++++++++++++++++++
> >>>>>>>     .../media/v4l/ext-ctrls-codec.rst             | 780
> >>>>>>> ----------------
> >>>>>>>     .../media/v4l/pixfmt-compressed.rst           |   7 +-
> >>>>>>>     .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
> >>>>>>>     .../media/v4l/vidioc-queryctrl.rst            |   8 +
> >>>>>>>     .../media/videodev2.h.rst.exceptions          |   5 +
> >>>>>>>     .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
> >>>>>>>     drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
> >>>>>>>     drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
> >>>>>>>     drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
> >>>>>>>     drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
> >>>>>>>     drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
> >>>>>>>     drivers/staging/media/hantro/hantro_drv.c     |  27 +-
> >>>>>>>     drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
> >>>>>>>     drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
> >>>>>>>     .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
> >>>>>>>     .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
> >>>>>>>     include/media/hevc-ctrls.h                    | 250 ------
> >>>>>>>     include/media/v4l2-ctrls.h                    |  48 +-
> >>>>>>>     include/uapi/linux/hantro-media.h             |  19 +
> >>>>>>>     include/uapi/linux/v4l2-controls.h            | 439 +++++++++
> >>>>>>>     include/uapi/linux/videodev2.h                |  13 +
> >>>>>>>     23 files changed, 1697 insertions(+), 1170 deletions(-)
> >>>>>>>     delete mode 100644 include/media/hevc-ctrls.h
> >>>>>>>     create mode 100644 include/uapi/linux/hantro-media.h
> >>>>>>>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
  2022-04-05 21:27                 ` Adam Ford
@ 2022-04-06  6:56                   ` Benjamin Gaignard
  -1 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-04-06  6:56 UTC (permalink / raw)
  To: Adam Ford
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc


Le 05/04/2022 à 23:27, Adam Ford a écrit :
> On Mon, Apr 4, 2022 at 10:56 AM Benjamin Gaignard
> <benjamin.gaignard@collabora.com> wrote:
>>
>> Le 02/04/2022 à 18:59, Adam Ford a écrit :
>>> On Sat, Apr 2, 2022 at 11:22 AM Adam Ford <aford173@gmail.com> wrote:
>>>> On Fri, Apr 1, 2022 at 8:18 AM Benjamin Gaignard
>>>> <benjamin.gaignard@collabora.com> wrote:
>>>>> Le 31/03/2022 à 08:53, Benjamin Gaignard a écrit :
>>>>>> Le 30/03/2022 à 20:52, Adam Ford a écrit :
>>>>>>> On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
>>>>>>> <benjamin.gaignard@collabora.com> wrote:
>>>>>>>> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
>>>>>>>>> This series aims to make HEVC uapi stable and usable for hardware
>>>>>>>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
>>>>>>>>> and 2 out of the tree drivers (rkvdec and RPI).
>>>>>>>>>
>>>>>>>>> After the remarks done on version 2, I have completely reworked to
>>>>>>>>> patches
>>>>>>>>> split so changelogs are meaningless. I have also drop "RFC" from the
>>>>>>>>> titles.
>>>>>>>>>
>>>>>>>>> Version 4:
>>>>>>>>> - Add num_entry_point_offsets field in  struct
>>>>>>>>> v4l2_ctrl_hevc_slice_params
>>>>>>>>> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
>>>>>>>>> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
>>>>>>>>> - Fix space/tab issue in kernel-doc
>>>>>>>>> - Add patch to change data_bit_offset definition
>>>>>>>>> - Fix hantro-media SPDX license
>>>>>>>>> - put controls under stateless section in v4l2-ctrls-defs.c
>>>>>>>>>
>>>>>>>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
>>>>>>>> Dear reviewers,
>>>>>>>>
>>>>>>>> This series is waiting for your feedback,
>>>>>>> I tried several times with the suggested repos for both the kernel and
>>>>>>> g-streamer without success getting Fluster to pass any tests on the
>>>>>>> imx8mq.  I can try again but I likely won't get to it until this
>>>>>>> weekend.  If I can get it working, I'll test both the 8mq and 8mm.
>>>>>> Thanks a lot for that.
>>>>>>
>>>>>> Benjamin
>>>>> Adam,
>>>>>
>>>>> You may need to check if h265parse and v4l2slh265dec are available on your board.
>>>> I ran gst-inspect to see what showed up with 265 in the name.
>>>>
>>>> # gst-inspect-1.0 |grep 265
>>>> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
>>>> rtp:  rtph265depay: RTP H265 depayloader
>>>> rtp:  rtph265pay: RTP H265 payloader
>>>> typefindfunctions: video/x-h265: h265, x265, 265
>>>> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
>>>> videoparsersbad:  h265parse: H.265 parser
>>>>
>>>> It appears I have both h265parse and v4l2slh265dec.
>>>>
>>>>> fluster check if v4l2slh265dec is working fine with this command line:
>>>>>
>>>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
>>>>>
>>>>> so if one of them is missing it won't work.
>>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
>>>> Setting pipeline to PAUSED ...
>>>> 0:00:00.098389938   526 0xaaaaf9d86ac0 ERROR     v4l2codecs-decoder
>>>> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
>>>> VIDIOC_G_EXT_CTRLS failed: Invalid argument
>>>> ERROR: from element
>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
>>>> report framing and start code method.
>>>> Additional debug info:
>>>> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
>>>> gst_v4l2_codec_h265_dec_open ():
>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>>>> gst_v4l2_decoder_get_controls() failed: Invalid argument
>>>> ERROR: pipeline doesn't want to preroll.
>>>> ERROR: from element
>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
>>>> initialize supporting library.
>>>> Additional debug info:
>>>> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
>>>> gst_video_decoder_change_state ():
>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>>>> Failed to open decoder
>>>> ERROR: pipeline doesn't want to preroll.
>>>> Failed to set pipeline to PAUSED.
>>>> Setting pipeline to NULL ...
>>>> Freeing pipeline ...
>>>>
>>>> Does this mean I have a wrong version of the kernel and/or incomplete patches?
>>> I double checked the branches.
>>>
>>> Kernel:
>>> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
>>> branch:  origin/HEVC_UAPI_V4
>>>
>>> Gstreamer:
>>> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
>>> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15
>>>
>>>
>>> I am still not able to run h.265/HEVC tests.
>> Hello Adam,
>>
>> I have updated the following branches with the versions I have used today:
>>
>> Kernel:
>> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
>> branch: origin/HEVC_UAPI_V5 only one change in documentation vs version 4 but rebased in v5.18-rc1
>>
>> Gstreamer:
>> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
>> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15 updated on the latest GST main branch
>>
>> I hope this will work fine this time.
> I wish I had better news for you:
>
> dmesg shows the hantro driver is being loaded:
>
> [   38.612243] hantro-vpu 38300000.video-codec: registered
> nxp,imx8mq-vpu-g1-dec as /dev/video0
> [   38.612618] hantro-vpu 38310000.video-codec: registered
> nxp,imx8mq-vpu-g2-dec as /dev/video1
>
> # gst-inspect-1.0 |grep 265
> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
> rtp:  rtph265depay: RTP H265 depayloader
> rtp:  rtph265pay: RTP H265 payloader
> typefindfunctions: video/x-h265: h265, x265, 265
> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
> videoparsersbad:  h265parse: H.265 parser
>
> Fluster reports:
> GStreamer-H.265-V4L2SL-Gst1.0: GStreamer H.265 V4L2SL decoder for
> GStreamer 1.0... ❌

Still the same error about non supported control ?

Benjamin

> adam
>> Benjamin
>>
>>> adam
>>>> adam
>>>>> Regards,
>>>>> Benjamin
>>>>>
>>>>>>> adam
>>>>>>>> Thanks,
>>>>>>>> Benjamin
>>>>>>>>
>>>>>>>>> Benjamin
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Benjamin Gaignard (12):
>>>>>>>>>       media: uapi: HEVC: Add missing fields in HEVC controls
>>>>>>>>>       media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
>>>>>>>>>         prefix
>>>>>>>>>       media: uapi: HEVC: Add document uAPI structure
>>>>>>>>>       media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS
>>>>>>>>> as a
>>>>>>>>>         dynamic array
>>>>>>>>>       media: uapi: Move parsed HEVC pixel format out of staging
>>>>>>>>>       media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
>>>>>>>>> control
>>>>>>>>>       media: uapi: Move the HEVC stateless control type out of staging
>>>>>>>>>       media: controls: Log HEVC stateless control in .std_log
>>>>>>>>>       media: uapi: Create a dedicated header for Hantro control
>>>>>>>>>       media: uapi: HEVC: fix padding in v4l2 control structures
>>>>>>>>>       media: uapi: Change data_bit_offset definition
>>>>>>>>>       media: uapi: move HEVC stateless controls out of staging
>>>>>>>>>
>>>>>>>>> Hans Verkuil (3):
>>>>>>>>>       videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
>>>>>>>>>       v4l2-ctrls: add support for dynamically allocated arrays.
>>>>>>>>>       vivid: add dynamic array test control
>>>>>>>>>
>>>>>>>>>      .../userspace-api/media/drivers/hantro.rst    |   5 -
>>>>>>>>>      .../media/v4l/ext-ctrls-codec-stateless.rst   | 833
>>>>>>>>> ++++++++++++++++++
>>>>>>>>>      .../media/v4l/ext-ctrls-codec.rst             | 780
>>>>>>>>> ----------------
>>>>>>>>>      .../media/v4l/pixfmt-compressed.rst           |   7 +-
>>>>>>>>>      .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
>>>>>>>>>      .../media/v4l/vidioc-queryctrl.rst            |   8 +
>>>>>>>>>      .../media/videodev2.h.rst.exceptions          |   5 +
>>>>>>>>>      .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
>>>>>>>>>      drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
>>>>>>>>>      drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
>>>>>>>>>      drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
>>>>>>>>>      drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
>>>>>>>>>      drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
>>>>>>>>>      drivers/staging/media/hantro/hantro_drv.c     |  27 +-
>>>>>>>>>      drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
>>>>>>>>>      drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
>>>>>>>>>      .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
>>>>>>>>>      .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
>>>>>>>>>      include/media/hevc-ctrls.h                    | 250 ------
>>>>>>>>>      include/media/v4l2-ctrls.h                    |  48 +-
>>>>>>>>>      include/uapi/linux/hantro-media.h             |  19 +
>>>>>>>>>      include/uapi/linux/v4l2-controls.h            | 439 +++++++++
>>>>>>>>>      include/uapi/linux/videodev2.h                |  13 +
>>>>>>>>>      23 files changed, 1697 insertions(+), 1170 deletions(-)
>>>>>>>>>      delete mode 100644 include/media/hevc-ctrls.h
>>>>>>>>>      create mode 100644 include/uapi/linux/hantro-media.h
>>>>>>>>>

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
@ 2022-04-06  6:56                   ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-04-06  6:56 UTC (permalink / raw)
  To: Adam Ford
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc


Le 05/04/2022 à 23:27, Adam Ford a écrit :
> On Mon, Apr 4, 2022 at 10:56 AM Benjamin Gaignard
> <benjamin.gaignard@collabora.com> wrote:
>>
>> Le 02/04/2022 à 18:59, Adam Ford a écrit :
>>> On Sat, Apr 2, 2022 at 11:22 AM Adam Ford <aford173@gmail.com> wrote:
>>>> On Fri, Apr 1, 2022 at 8:18 AM Benjamin Gaignard
>>>> <benjamin.gaignard@collabora.com> wrote:
>>>>> Le 31/03/2022 à 08:53, Benjamin Gaignard a écrit :
>>>>>> Le 30/03/2022 à 20:52, Adam Ford a écrit :
>>>>>>> On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
>>>>>>> <benjamin.gaignard@collabora.com> wrote:
>>>>>>>> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
>>>>>>>>> This series aims to make HEVC uapi stable and usable for hardware
>>>>>>>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
>>>>>>>>> and 2 out of the tree drivers (rkvdec and RPI).
>>>>>>>>>
>>>>>>>>> After the remarks done on version 2, I have completely reworked to
>>>>>>>>> patches
>>>>>>>>> split so changelogs are meaningless. I have also drop "RFC" from the
>>>>>>>>> titles.
>>>>>>>>>
>>>>>>>>> Version 4:
>>>>>>>>> - Add num_entry_point_offsets field in  struct
>>>>>>>>> v4l2_ctrl_hevc_slice_params
>>>>>>>>> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
>>>>>>>>> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
>>>>>>>>> - Fix space/tab issue in kernel-doc
>>>>>>>>> - Add patch to change data_bit_offset definition
>>>>>>>>> - Fix hantro-media SPDX license
>>>>>>>>> - put controls under stateless section in v4l2-ctrls-defs.c
>>>>>>>>>
>>>>>>>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
>>>>>>>> Dear reviewers,
>>>>>>>>
>>>>>>>> This series is waiting for your feedback,
>>>>>>> I tried several times with the suggested repos for both the kernel and
>>>>>>> g-streamer without success getting Fluster to pass any tests on the
>>>>>>> imx8mq.  I can try again but I likely won't get to it until this
>>>>>>> weekend.  If I can get it working, I'll test both the 8mq and 8mm.
>>>>>> Thanks a lot for that.
>>>>>>
>>>>>> Benjamin
>>>>> Adam,
>>>>>
>>>>> You may need to check if h265parse and v4l2slh265dec are available on your board.
>>>> I ran gst-inspect to see what showed up with 265 in the name.
>>>>
>>>> # gst-inspect-1.0 |grep 265
>>>> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
>>>> rtp:  rtph265depay: RTP H265 depayloader
>>>> rtp:  rtph265pay: RTP H265 payloader
>>>> typefindfunctions: video/x-h265: h265, x265, 265
>>>> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
>>>> videoparsersbad:  h265parse: H.265 parser
>>>>
>>>> It appears I have both h265parse and v4l2slh265dec.
>>>>
>>>>> fluster check if v4l2slh265dec is working fine with this command line:
>>>>>
>>>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
>>>>>
>>>>> so if one of them is missing it won't work.
>>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
>>>> Setting pipeline to PAUSED ...
>>>> 0:00:00.098389938   526 0xaaaaf9d86ac0 ERROR     v4l2codecs-decoder
>>>> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
>>>> VIDIOC_G_EXT_CTRLS failed: Invalid argument
>>>> ERROR: from element
>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
>>>> report framing and start code method.
>>>> Additional debug info:
>>>> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
>>>> gst_v4l2_codec_h265_dec_open ():
>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>>>> gst_v4l2_decoder_get_controls() failed: Invalid argument
>>>> ERROR: pipeline doesn't want to preroll.
>>>> ERROR: from element
>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
>>>> initialize supporting library.
>>>> Additional debug info:
>>>> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
>>>> gst_video_decoder_change_state ():
>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>>>> Failed to open decoder
>>>> ERROR: pipeline doesn't want to preroll.
>>>> Failed to set pipeline to PAUSED.
>>>> Setting pipeline to NULL ...
>>>> Freeing pipeline ...
>>>>
>>>> Does this mean I have a wrong version of the kernel and/or incomplete patches?
>>> I double checked the branches.
>>>
>>> Kernel:
>>> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
>>> branch:  origin/HEVC_UAPI_V4
>>>
>>> Gstreamer:
>>> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
>>> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15
>>>
>>>
>>> I am still not able to run h.265/HEVC tests.
>> Hello Adam,
>>
>> I have updated the following branches with the versions I have used today:
>>
>> Kernel:
>> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
>> branch: origin/HEVC_UAPI_V5 only one change in documentation vs version 4 but rebased in v5.18-rc1
>>
>> Gstreamer:
>> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
>> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15 updated on the latest GST main branch
>>
>> I hope this will work fine this time.
> I wish I had better news for you:
>
> dmesg shows the hantro driver is being loaded:
>
> [   38.612243] hantro-vpu 38300000.video-codec: registered
> nxp,imx8mq-vpu-g1-dec as /dev/video0
> [   38.612618] hantro-vpu 38310000.video-codec: registered
> nxp,imx8mq-vpu-g2-dec as /dev/video1
>
> # gst-inspect-1.0 |grep 265
> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
> rtp:  rtph265depay: RTP H265 depayloader
> rtp:  rtph265pay: RTP H265 payloader
> typefindfunctions: video/x-h265: h265, x265, 265
> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
> videoparsersbad:  h265parse: H.265 parser
>
> Fluster reports:
> GStreamer-H.265-V4L2SL-Gst1.0: GStreamer H.265 V4L2SL decoder for
> GStreamer 1.0... ❌

Still the same error about non supported control ?

Benjamin

> adam
>> Benjamin
>>
>>> adam
>>>> adam
>>>>> Regards,
>>>>> Benjamin
>>>>>
>>>>>>> adam
>>>>>>>> Thanks,
>>>>>>>> Benjamin
>>>>>>>>
>>>>>>>>> Benjamin
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Benjamin Gaignard (12):
>>>>>>>>>       media: uapi: HEVC: Add missing fields in HEVC controls
>>>>>>>>>       media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
>>>>>>>>>         prefix
>>>>>>>>>       media: uapi: HEVC: Add document uAPI structure
>>>>>>>>>       media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS
>>>>>>>>> as a
>>>>>>>>>         dynamic array
>>>>>>>>>       media: uapi: Move parsed HEVC pixel format out of staging
>>>>>>>>>       media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
>>>>>>>>> control
>>>>>>>>>       media: uapi: Move the HEVC stateless control type out of staging
>>>>>>>>>       media: controls: Log HEVC stateless control in .std_log
>>>>>>>>>       media: uapi: Create a dedicated header for Hantro control
>>>>>>>>>       media: uapi: HEVC: fix padding in v4l2 control structures
>>>>>>>>>       media: uapi: Change data_bit_offset definition
>>>>>>>>>       media: uapi: move HEVC stateless controls out of staging
>>>>>>>>>
>>>>>>>>> Hans Verkuil (3):
>>>>>>>>>       videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
>>>>>>>>>       v4l2-ctrls: add support for dynamically allocated arrays.
>>>>>>>>>       vivid: add dynamic array test control
>>>>>>>>>
>>>>>>>>>      .../userspace-api/media/drivers/hantro.rst    |   5 -
>>>>>>>>>      .../media/v4l/ext-ctrls-codec-stateless.rst   | 833
>>>>>>>>> ++++++++++++++++++
>>>>>>>>>      .../media/v4l/ext-ctrls-codec.rst             | 780
>>>>>>>>> ----------------
>>>>>>>>>      .../media/v4l/pixfmt-compressed.rst           |   7 +-
>>>>>>>>>      .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
>>>>>>>>>      .../media/v4l/vidioc-queryctrl.rst            |   8 +
>>>>>>>>>      .../media/videodev2.h.rst.exceptions          |   5 +
>>>>>>>>>      .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
>>>>>>>>>      drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
>>>>>>>>>      drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
>>>>>>>>>      drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
>>>>>>>>>      drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
>>>>>>>>>      drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
>>>>>>>>>      drivers/staging/media/hantro/hantro_drv.c     |  27 +-
>>>>>>>>>      drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
>>>>>>>>>      drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
>>>>>>>>>      .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
>>>>>>>>>      .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
>>>>>>>>>      include/media/hevc-ctrls.h                    | 250 ------
>>>>>>>>>      include/media/v4l2-ctrls.h                    |  48 +-
>>>>>>>>>      include/uapi/linux/hantro-media.h             |  19 +
>>>>>>>>>      include/uapi/linux/v4l2-controls.h            | 439 +++++++++
>>>>>>>>>      include/uapi/linux/videodev2.h                |  13 +
>>>>>>>>>      23 files changed, 1697 insertions(+), 1170 deletions(-)
>>>>>>>>>      delete mode 100644 include/media/hevc-ctrls.h
>>>>>>>>>      create mode 100644 include/uapi/linux/hantro-media.h
>>>>>>>>>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
  2022-04-06  6:56                   ` Benjamin Gaignard
@ 2022-04-06 12:28                     ` Adam Ford
  -1 siblings, 0 replies; 81+ messages in thread
From: Adam Ford @ 2022-04-06 12:28 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc

On Wed, Apr 6, 2022 at 1:56 AM Benjamin Gaignard
<benjamin.gaignard@collabora.com> wrote:
>
>
> Le 05/04/2022 à 23:27, Adam Ford a écrit :
> > On Mon, Apr 4, 2022 at 10:56 AM Benjamin Gaignard
> > <benjamin.gaignard@collabora.com> wrote:
> >>
> >> Le 02/04/2022 à 18:59, Adam Ford a écrit :
> >>> On Sat, Apr 2, 2022 at 11:22 AM Adam Ford <aford173@gmail.com> wrote:
> >>>> On Fri, Apr 1, 2022 at 8:18 AM Benjamin Gaignard
> >>>> <benjamin.gaignard@collabora.com> wrote:
> >>>>> Le 31/03/2022 à 08:53, Benjamin Gaignard a écrit :
> >>>>>> Le 30/03/2022 à 20:52, Adam Ford a écrit :
> >>>>>>> On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
> >>>>>>> <benjamin.gaignard@collabora.com> wrote:
> >>>>>>>> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
> >>>>>>>>> This series aims to make HEVC uapi stable and usable for hardware
> >>>>>>>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
> >>>>>>>>> and 2 out of the tree drivers (rkvdec and RPI).
> >>>>>>>>>
> >>>>>>>>> After the remarks done on version 2, I have completely reworked to
> >>>>>>>>> patches
> >>>>>>>>> split so changelogs are meaningless. I have also drop "RFC" from the
> >>>>>>>>> titles.
> >>>>>>>>>
> >>>>>>>>> Version 4:
> >>>>>>>>> - Add num_entry_point_offsets field in  struct
> >>>>>>>>> v4l2_ctrl_hevc_slice_params
> >>>>>>>>> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
> >>>>>>>>> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> >>>>>>>>> - Fix space/tab issue in kernel-doc
> >>>>>>>>> - Add patch to change data_bit_offset definition
> >>>>>>>>> - Fix hantro-media SPDX license
> >>>>>>>>> - put controls under stateless section in v4l2-ctrls-defs.c
> >>>>>>>>>
> >>>>>>>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
> >>>>>>>> Dear reviewers,
> >>>>>>>>
> >>>>>>>> This series is waiting for your feedback,
> >>>>>>> I tried several times with the suggested repos for both the kernel and
> >>>>>>> g-streamer without success getting Fluster to pass any tests on the
> >>>>>>> imx8mq.  I can try again but I likely won't get to it until this
> >>>>>>> weekend.  If I can get it working, I'll test both the 8mq and 8mm.
> >>>>>> Thanks a lot for that.
> >>>>>>
> >>>>>> Benjamin
> >>>>> Adam,
> >>>>>
> >>>>> You may need to check if h265parse and v4l2slh265dec are available on your board.
> >>>> I ran gst-inspect to see what showed up with 265 in the name.
> >>>>
> >>>> # gst-inspect-1.0 |grep 265
> >>>> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
> >>>> rtp:  rtph265depay: RTP H265 depayloader
> >>>> rtp:  rtph265pay: RTP H265 payloader
> >>>> typefindfunctions: video/x-h265: h265, x265, 265
> >>>> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
> >>>> videoparsersbad:  h265parse: H.265 parser
> >>>>
> >>>> It appears I have both h265parse and v4l2slh265dec.
> >>>>
> >>>>> fluster check if v4l2slh265dec is working fine with this command line:
> >>>>>
> >>>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
> >>>>>
> >>>>> so if one of them is missing it won't work.
> >>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
> >>>> Setting pipeline to PAUSED ...
> >>>> 0:00:00.098389938   526 0xaaaaf9d86ac0 ERROR     v4l2codecs-decoder
> >>>> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
> >>>> VIDIOC_G_EXT_CTRLS failed: Invalid argument
> >>>> ERROR: from element
> >>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
> >>>> report framing and start code method.
> >>>> Additional debug info:
> >>>> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
> >>>> gst_v4l2_codec_h265_dec_open ():
> >>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> >>>> gst_v4l2_decoder_get_controls() failed: Invalid argument
> >>>> ERROR: pipeline doesn't want to preroll.
> >>>> ERROR: from element
> >>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
> >>>> initialize supporting library.
> >>>> Additional debug info:
> >>>> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
> >>>> gst_video_decoder_change_state ():
> >>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> >>>> Failed to open decoder
> >>>> ERROR: pipeline doesn't want to preroll.
> >>>> Failed to set pipeline to PAUSED.
> >>>> Setting pipeline to NULL ...
> >>>> Freeing pipeline ...
> >>>>
> >>>> Does this mean I have a wrong version of the kernel and/or incomplete patches?
> >>> I double checked the branches.
> >>>
> >>> Kernel:
> >>> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
> >>> branch:  origin/HEVC_UAPI_V4
> >>>
> >>> Gstreamer:
> >>> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
> >>> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15
> >>>
> >>>
> >>> I am still not able to run h.265/HEVC tests.
> >> Hello Adam,
> >>
> >> I have updated the following branches with the versions I have used today:
> >>
> >> Kernel:
> >> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
> >> branch: origin/HEVC_UAPI_V5 only one change in documentation vs version 4 but rebased in v5.18-rc1
> >>
> >> Gstreamer:
> >> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
> >> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15 updated on the latest GST main branch
> >>
> >> I hope this will work fine this time.
> > I wish I had better news for you:
> >
> > dmesg shows the hantro driver is being loaded:
> >
> > [   38.612243] hantro-vpu 38300000.video-codec: registered
> > nxp,imx8mq-vpu-g1-dec as /dev/video0
> > [   38.612618] hantro-vpu 38310000.video-codec: registered
> > nxp,imx8mq-vpu-g2-dec as /dev/video1
> >
> > # gst-inspect-1.0 |grep 265
> > libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
> > rtp:  rtph265depay: RTP H265 depayloader
> > rtp:  rtph265pay: RTP H265 payloader
> > typefindfunctions: video/x-h265: h265, x265, 265
> > v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
> > videoparsersbad:  h265parse: H.265 parser
> >
> > Fluster reports:
> > GStreamer-H.265-V4L2SL-Gst1.0: GStreamer H.265 V4L2SL decoder for
> > GStreamer 1.0... ❌
>
> Still the same error about non supported control ?

# gst-lagst-launch-1.0 appsrc num-buffers=0 ! h265parse !
v4l2slh265dec ! fakesink
Setting pipeline to PAUSED ...
0:00:01.704385508   420 0xaaaaec0a76c0 ERROR     v4l2codecs-decoder
gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
VIDIOC_G_EXT_CTRLS failed: Invalid argument
ERROR: from element
/GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
report framing and start code method.
Additional debug info:
../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
gst_v4l2_codec_h265_dec_open ():
/GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
gst_v4l2_decoder_get_controls() failed: Invalid argument
ERROR: pipeline doesn't want to preroll.
ERROR: from element
/GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
initialize supporting library.
Additional debug info:
../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
gst_video_decoder_change_state ():
/GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
Failed to open decoder
ERROR: pipeline doesn't want to preroll.
Failed to set pipeline to PAUSED.
Setting pipeline to NULL ...
Freeing pipeline ...


>
> Benjamin
>
> > adam
> >> Benjamin
> >>
> >>> adam
> >>>> adam
> >>>>> Regards,
> >>>>> Benjamin
> >>>>>
> >>>>>>> adam
> >>>>>>>> Thanks,
> >>>>>>>> Benjamin
> >>>>>>>>
> >>>>>>>>> Benjamin
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> Benjamin Gaignard (12):
> >>>>>>>>>       media: uapi: HEVC: Add missing fields in HEVC controls
> >>>>>>>>>       media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
> >>>>>>>>>         prefix
> >>>>>>>>>       media: uapi: HEVC: Add document uAPI structure
> >>>>>>>>>       media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS
> >>>>>>>>> as a
> >>>>>>>>>         dynamic array
> >>>>>>>>>       media: uapi: Move parsed HEVC pixel format out of staging
> >>>>>>>>>       media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> >>>>>>>>> control
> >>>>>>>>>       media: uapi: Move the HEVC stateless control type out of staging
> >>>>>>>>>       media: controls: Log HEVC stateless control in .std_log
> >>>>>>>>>       media: uapi: Create a dedicated header for Hantro control
> >>>>>>>>>       media: uapi: HEVC: fix padding in v4l2 control structures
> >>>>>>>>>       media: uapi: Change data_bit_offset definition
> >>>>>>>>>       media: uapi: move HEVC stateless controls out of staging
> >>>>>>>>>
> >>>>>>>>> Hans Verkuil (3):
> >>>>>>>>>       videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
> >>>>>>>>>       v4l2-ctrls: add support for dynamically allocated arrays.
> >>>>>>>>>       vivid: add dynamic array test control
> >>>>>>>>>
> >>>>>>>>>      .../userspace-api/media/drivers/hantro.rst    |   5 -
> >>>>>>>>>      .../media/v4l/ext-ctrls-codec-stateless.rst   | 833
> >>>>>>>>> ++++++++++++++++++
> >>>>>>>>>      .../media/v4l/ext-ctrls-codec.rst             | 780
> >>>>>>>>> ----------------
> >>>>>>>>>      .../media/v4l/pixfmt-compressed.rst           |   7 +-
> >>>>>>>>>      .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
> >>>>>>>>>      .../media/v4l/vidioc-queryctrl.rst            |   8 +
> >>>>>>>>>      .../media/videodev2.h.rst.exceptions          |   5 +
> >>>>>>>>>      .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
> >>>>>>>>>      drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
> >>>>>>>>>      drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
> >>>>>>>>>      drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
> >>>>>>>>>      drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
> >>>>>>>>>      drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
> >>>>>>>>>      drivers/staging/media/hantro/hantro_drv.c     |  27 +-
> >>>>>>>>>      drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
> >>>>>>>>>      drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
> >>>>>>>>>      .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
> >>>>>>>>>      .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
> >>>>>>>>>      include/media/hevc-ctrls.h                    | 250 ------
> >>>>>>>>>      include/media/v4l2-ctrls.h                    |  48 +-
> >>>>>>>>>      include/uapi/linux/hantro-media.h             |  19 +
> >>>>>>>>>      include/uapi/linux/v4l2-controls.h            | 439 +++++++++
> >>>>>>>>>      include/uapi/linux/videodev2.h                |  13 +
> >>>>>>>>>      23 files changed, 1697 insertions(+), 1170 deletions(-)
> >>>>>>>>>      delete mode 100644 include/media/hevc-ctrls.h
> >>>>>>>>>      create mode 100644 include/uapi/linux/hantro-media.h
> >>>>>>>>>

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
@ 2022-04-06 12:28                     ` Adam Ford
  0 siblings, 0 replies; 81+ messages in thread
From: Adam Ford @ 2022-04-06 12:28 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc

On Wed, Apr 6, 2022 at 1:56 AM Benjamin Gaignard
<benjamin.gaignard@collabora.com> wrote:
>
>
> Le 05/04/2022 à 23:27, Adam Ford a écrit :
> > On Mon, Apr 4, 2022 at 10:56 AM Benjamin Gaignard
> > <benjamin.gaignard@collabora.com> wrote:
> >>
> >> Le 02/04/2022 à 18:59, Adam Ford a écrit :
> >>> On Sat, Apr 2, 2022 at 11:22 AM Adam Ford <aford173@gmail.com> wrote:
> >>>> On Fri, Apr 1, 2022 at 8:18 AM Benjamin Gaignard
> >>>> <benjamin.gaignard@collabora.com> wrote:
> >>>>> Le 31/03/2022 à 08:53, Benjamin Gaignard a écrit :
> >>>>>> Le 30/03/2022 à 20:52, Adam Ford a écrit :
> >>>>>>> On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
> >>>>>>> <benjamin.gaignard@collabora.com> wrote:
> >>>>>>>> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
> >>>>>>>>> This series aims to make HEVC uapi stable and usable for hardware
> >>>>>>>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
> >>>>>>>>> and 2 out of the tree drivers (rkvdec and RPI).
> >>>>>>>>>
> >>>>>>>>> After the remarks done on version 2, I have completely reworked to
> >>>>>>>>> patches
> >>>>>>>>> split so changelogs are meaningless. I have also drop "RFC" from the
> >>>>>>>>> titles.
> >>>>>>>>>
> >>>>>>>>> Version 4:
> >>>>>>>>> - Add num_entry_point_offsets field in  struct
> >>>>>>>>> v4l2_ctrl_hevc_slice_params
> >>>>>>>>> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
> >>>>>>>>> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> >>>>>>>>> - Fix space/tab issue in kernel-doc
> >>>>>>>>> - Add patch to change data_bit_offset definition
> >>>>>>>>> - Fix hantro-media SPDX license
> >>>>>>>>> - put controls under stateless section in v4l2-ctrls-defs.c
> >>>>>>>>>
> >>>>>>>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
> >>>>>>>> Dear reviewers,
> >>>>>>>>
> >>>>>>>> This series is waiting for your feedback,
> >>>>>>> I tried several times with the suggested repos for both the kernel and
> >>>>>>> g-streamer without success getting Fluster to pass any tests on the
> >>>>>>> imx8mq.  I can try again but I likely won't get to it until this
> >>>>>>> weekend.  If I can get it working, I'll test both the 8mq and 8mm.
> >>>>>> Thanks a lot for that.
> >>>>>>
> >>>>>> Benjamin
> >>>>> Adam,
> >>>>>
> >>>>> You may need to check if h265parse and v4l2slh265dec are available on your board.
> >>>> I ran gst-inspect to see what showed up with 265 in the name.
> >>>>
> >>>> # gst-inspect-1.0 |grep 265
> >>>> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
> >>>> rtp:  rtph265depay: RTP H265 depayloader
> >>>> rtp:  rtph265pay: RTP H265 payloader
> >>>> typefindfunctions: video/x-h265: h265, x265, 265
> >>>> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
> >>>> videoparsersbad:  h265parse: H.265 parser
> >>>>
> >>>> It appears I have both h265parse and v4l2slh265dec.
> >>>>
> >>>>> fluster check if v4l2slh265dec is working fine with this command line:
> >>>>>
> >>>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
> >>>>>
> >>>>> so if one of them is missing it won't work.
> >>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
> >>>> Setting pipeline to PAUSED ...
> >>>> 0:00:00.098389938   526 0xaaaaf9d86ac0 ERROR     v4l2codecs-decoder
> >>>> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
> >>>> VIDIOC_G_EXT_CTRLS failed: Invalid argument
> >>>> ERROR: from element
> >>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
> >>>> report framing and start code method.
> >>>> Additional debug info:
> >>>> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
> >>>> gst_v4l2_codec_h265_dec_open ():
> >>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> >>>> gst_v4l2_decoder_get_controls() failed: Invalid argument
> >>>> ERROR: pipeline doesn't want to preroll.
> >>>> ERROR: from element
> >>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
> >>>> initialize supporting library.
> >>>> Additional debug info:
> >>>> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
> >>>> gst_video_decoder_change_state ():
> >>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> >>>> Failed to open decoder
> >>>> ERROR: pipeline doesn't want to preroll.
> >>>> Failed to set pipeline to PAUSED.
> >>>> Setting pipeline to NULL ...
> >>>> Freeing pipeline ...
> >>>>
> >>>> Does this mean I have a wrong version of the kernel and/or incomplete patches?
> >>> I double checked the branches.
> >>>
> >>> Kernel:
> >>> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
> >>> branch:  origin/HEVC_UAPI_V4
> >>>
> >>> Gstreamer:
> >>> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
> >>> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15
> >>>
> >>>
> >>> I am still not able to run h.265/HEVC tests.
> >> Hello Adam,
> >>
> >> I have updated the following branches with the versions I have used today:
> >>
> >> Kernel:
> >> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
> >> branch: origin/HEVC_UAPI_V5 only one change in documentation vs version 4 but rebased in v5.18-rc1
> >>
> >> Gstreamer:
> >> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
> >> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15 updated on the latest GST main branch
> >>
> >> I hope this will work fine this time.
> > I wish I had better news for you:
> >
> > dmesg shows the hantro driver is being loaded:
> >
> > [   38.612243] hantro-vpu 38300000.video-codec: registered
> > nxp,imx8mq-vpu-g1-dec as /dev/video0
> > [   38.612618] hantro-vpu 38310000.video-codec: registered
> > nxp,imx8mq-vpu-g2-dec as /dev/video1
> >
> > # gst-inspect-1.0 |grep 265
> > libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
> > rtp:  rtph265depay: RTP H265 depayloader
> > rtp:  rtph265pay: RTP H265 payloader
> > typefindfunctions: video/x-h265: h265, x265, 265
> > v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
> > videoparsersbad:  h265parse: H.265 parser
> >
> > Fluster reports:
> > GStreamer-H.265-V4L2SL-Gst1.0: GStreamer H.265 V4L2SL decoder for
> > GStreamer 1.0... ❌
>
> Still the same error about non supported control ?

# gst-lagst-launch-1.0 appsrc num-buffers=0 ! h265parse !
v4l2slh265dec ! fakesink
Setting pipeline to PAUSED ...
0:00:01.704385508   420 0xaaaaec0a76c0 ERROR     v4l2codecs-decoder
gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
VIDIOC_G_EXT_CTRLS failed: Invalid argument
ERROR: from element
/GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
report framing and start code method.
Additional debug info:
../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
gst_v4l2_codec_h265_dec_open ():
/GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
gst_v4l2_decoder_get_controls() failed: Invalid argument
ERROR: pipeline doesn't want to preroll.
ERROR: from element
/GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
initialize supporting library.
Additional debug info:
../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
gst_video_decoder_change_state ():
/GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
Failed to open decoder
ERROR: pipeline doesn't want to preroll.
Failed to set pipeline to PAUSED.
Setting pipeline to NULL ...
Freeing pipeline ...


>
> Benjamin
>
> > adam
> >> Benjamin
> >>
> >>> adam
> >>>> adam
> >>>>> Regards,
> >>>>> Benjamin
> >>>>>
> >>>>>>> adam
> >>>>>>>> Thanks,
> >>>>>>>> Benjamin
> >>>>>>>>
> >>>>>>>>> Benjamin
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> Benjamin Gaignard (12):
> >>>>>>>>>       media: uapi: HEVC: Add missing fields in HEVC controls
> >>>>>>>>>       media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
> >>>>>>>>>         prefix
> >>>>>>>>>       media: uapi: HEVC: Add document uAPI structure
> >>>>>>>>>       media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS
> >>>>>>>>> as a
> >>>>>>>>>         dynamic array
> >>>>>>>>>       media: uapi: Move parsed HEVC pixel format out of staging
> >>>>>>>>>       media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> >>>>>>>>> control
> >>>>>>>>>       media: uapi: Move the HEVC stateless control type out of staging
> >>>>>>>>>       media: controls: Log HEVC stateless control in .std_log
> >>>>>>>>>       media: uapi: Create a dedicated header for Hantro control
> >>>>>>>>>       media: uapi: HEVC: fix padding in v4l2 control structures
> >>>>>>>>>       media: uapi: Change data_bit_offset definition
> >>>>>>>>>       media: uapi: move HEVC stateless controls out of staging
> >>>>>>>>>
> >>>>>>>>> Hans Verkuil (3):
> >>>>>>>>>       videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
> >>>>>>>>>       v4l2-ctrls: add support for dynamically allocated arrays.
> >>>>>>>>>       vivid: add dynamic array test control
> >>>>>>>>>
> >>>>>>>>>      .../userspace-api/media/drivers/hantro.rst    |   5 -
> >>>>>>>>>      .../media/v4l/ext-ctrls-codec-stateless.rst   | 833
> >>>>>>>>> ++++++++++++++++++
> >>>>>>>>>      .../media/v4l/ext-ctrls-codec.rst             | 780
> >>>>>>>>> ----------------
> >>>>>>>>>      .../media/v4l/pixfmt-compressed.rst           |   7 +-
> >>>>>>>>>      .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
> >>>>>>>>>      .../media/v4l/vidioc-queryctrl.rst            |   8 +
> >>>>>>>>>      .../media/videodev2.h.rst.exceptions          |   5 +
> >>>>>>>>>      .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
> >>>>>>>>>      drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
> >>>>>>>>>      drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
> >>>>>>>>>      drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
> >>>>>>>>>      drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
> >>>>>>>>>      drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
> >>>>>>>>>      drivers/staging/media/hantro/hantro_drv.c     |  27 +-
> >>>>>>>>>      drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
> >>>>>>>>>      drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
> >>>>>>>>>      .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
> >>>>>>>>>      .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
> >>>>>>>>>      include/media/hevc-ctrls.h                    | 250 ------
> >>>>>>>>>      include/media/v4l2-ctrls.h                    |  48 +-
> >>>>>>>>>      include/uapi/linux/hantro-media.h             |  19 +
> >>>>>>>>>      include/uapi/linux/v4l2-controls.h            | 439 +++++++++
> >>>>>>>>>      include/uapi/linux/videodev2.h                |  13 +
> >>>>>>>>>      23 files changed, 1697 insertions(+), 1170 deletions(-)
> >>>>>>>>>      delete mode 100644 include/media/hevc-ctrls.h
> >>>>>>>>>      create mode 100644 include/uapi/linux/hantro-media.h
> >>>>>>>>>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
  2022-04-06 12:28                     ` Adam Ford
@ 2022-04-06 12:40                       ` Benjamin Gaignard
  -1 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-04-06 12:40 UTC (permalink / raw)
  To: Adam Ford
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc


Le 06/04/2022 à 14:28, Adam Ford a écrit :
> On Wed, Apr 6, 2022 at 1:56 AM Benjamin Gaignard
> <benjamin.gaignard@collabora.com> wrote:
>>
>> Le 05/04/2022 à 23:27, Adam Ford a écrit :
>>> On Mon, Apr 4, 2022 at 10:56 AM Benjamin Gaignard
>>> <benjamin.gaignard@collabora.com> wrote:
>>>> Le 02/04/2022 à 18:59, Adam Ford a écrit :
>>>>> On Sat, Apr 2, 2022 at 11:22 AM Adam Ford <aford173@gmail.com> wrote:
>>>>>> On Fri, Apr 1, 2022 at 8:18 AM Benjamin Gaignard
>>>>>> <benjamin.gaignard@collabora.com> wrote:
>>>>>>> Le 31/03/2022 à 08:53, Benjamin Gaignard a écrit :
>>>>>>>> Le 30/03/2022 à 20:52, Adam Ford a écrit :
>>>>>>>>> On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
>>>>>>>>> <benjamin.gaignard@collabora.com> wrote:
>>>>>>>>>> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
>>>>>>>>>>> This series aims to make HEVC uapi stable and usable for hardware
>>>>>>>>>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
>>>>>>>>>>> and 2 out of the tree drivers (rkvdec and RPI).
>>>>>>>>>>>
>>>>>>>>>>> After the remarks done on version 2, I have completely reworked to
>>>>>>>>>>> patches
>>>>>>>>>>> split so changelogs are meaningless. I have also drop "RFC" from the
>>>>>>>>>>> titles.
>>>>>>>>>>>
>>>>>>>>>>> Version 4:
>>>>>>>>>>> - Add num_entry_point_offsets field in  struct
>>>>>>>>>>> v4l2_ctrl_hevc_slice_params
>>>>>>>>>>> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
>>>>>>>>>>> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
>>>>>>>>>>> - Fix space/tab issue in kernel-doc
>>>>>>>>>>> - Add patch to change data_bit_offset definition
>>>>>>>>>>> - Fix hantro-media SPDX license
>>>>>>>>>>> - put controls under stateless section in v4l2-ctrls-defs.c
>>>>>>>>>>>
>>>>>>>>>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
>>>>>>>>>> Dear reviewers,
>>>>>>>>>>
>>>>>>>>>> This series is waiting for your feedback,
>>>>>>>>> I tried several times with the suggested repos for both the kernel and
>>>>>>>>> g-streamer without success getting Fluster to pass any tests on the
>>>>>>>>> imx8mq.  I can try again but I likely won't get to it until this
>>>>>>>>> weekend.  If I can get it working, I'll test both the 8mq and 8mm.
>>>>>>>> Thanks a lot for that.
>>>>>>>>
>>>>>>>> Benjamin
>>>>>>> Adam,
>>>>>>>
>>>>>>> You may need to check if h265parse and v4l2slh265dec are available on your board.
>>>>>> I ran gst-inspect to see what showed up with 265 in the name.
>>>>>>
>>>>>> # gst-inspect-1.0 |grep 265
>>>>>> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
>>>>>> rtp:  rtph265depay: RTP H265 depayloader
>>>>>> rtp:  rtph265pay: RTP H265 payloader
>>>>>> typefindfunctions: video/x-h265: h265, x265, 265
>>>>>> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
>>>>>> videoparsersbad:  h265parse: H.265 parser
>>>>>>
>>>>>> It appears I have both h265parse and v4l2slh265dec.
>>>>>>
>>>>>>> fluster check if v4l2slh265dec is working fine with this command line:
>>>>>>>
>>>>>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
>>>>>>>
>>>>>>> so if one of them is missing it won't work.
>>>>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
>>>>>> Setting pipeline to PAUSED ...
>>>>>> 0:00:00.098389938   526 0xaaaaf9d86ac0 ERROR     v4l2codecs-decoder
>>>>>> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
>>>>>> VIDIOC_G_EXT_CTRLS failed: Invalid argument
>>>>>> ERROR: from element
>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
>>>>>> report framing and start code method.
>>>>>> Additional debug info:
>>>>>> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
>>>>>> gst_v4l2_codec_h265_dec_open ():
>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>>>>>> gst_v4l2_decoder_get_controls() failed: Invalid argument
>>>>>> ERROR: pipeline doesn't want to preroll.
>>>>>> ERROR: from element
>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
>>>>>> initialize supporting library.
>>>>>> Additional debug info:
>>>>>> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
>>>>>> gst_video_decoder_change_state ():
>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>>>>>> Failed to open decoder
>>>>>> ERROR: pipeline doesn't want to preroll.
>>>>>> Failed to set pipeline to PAUSED.
>>>>>> Setting pipeline to NULL ...
>>>>>> Freeing pipeline ...
>>>>>>
>>>>>> Does this mean I have a wrong version of the kernel and/or incomplete patches?
>>>>> I double checked the branches.
>>>>>
>>>>> Kernel:
>>>>> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
>>>>> branch:  origin/HEVC_UAPI_V4
>>>>>
>>>>> Gstreamer:
>>>>> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
>>>>> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15
>>>>>
>>>>>
>>>>> I am still not able to run h.265/HEVC tests.
>>>> Hello Adam,
>>>>
>>>> I have updated the following branches with the versions I have used today:
>>>>
>>>> Kernel:
>>>> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
>>>> branch: origin/HEVC_UAPI_V5 only one change in documentation vs version 4 but rebased in v5.18-rc1
>>>>
>>>> Gstreamer:
>>>> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
>>>> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15 updated on the latest GST main branch
>>>>
>>>> I hope this will work fine this time.
>>> I wish I had better news for you:
>>>
>>> dmesg shows the hantro driver is being loaded:
>>>
>>> [   38.612243] hantro-vpu 38300000.video-codec: registered
>>> nxp,imx8mq-vpu-g1-dec as /dev/video0
>>> [   38.612618] hantro-vpu 38310000.video-codec: registered
>>> nxp,imx8mq-vpu-g2-dec as /dev/video1
>>>
>>> # gst-inspect-1.0 |grep 265
>>> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
>>> rtp:  rtph265depay: RTP H265 depayloader
>>> rtp:  rtph265pay: RTP H265 payloader
>>> typefindfunctions: video/x-h265: h265, x265, 265
>>> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
>>> videoparsersbad:  h265parse: H.265 parser
>>>
>>> Fluster reports:
>>> GStreamer-H.265-V4L2SL-Gst1.0: GStreamer H.265 V4L2SL decoder for
>>> GStreamer 1.0... ❌
>> Still the same error about non supported control ?
> # gst-lagst-launch-1.0 appsrc num-buffers=0 ! h265parse !
> v4l2slh265dec ! fakesink
> Setting pipeline to PAUSED ...
> 0:00:01.704385508   420 0xaaaaec0a76c0 ERROR     v4l2codecs-decoder
> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
> VIDIOC_G_EXT_CTRLS failed: Invalid argument
> ERROR: from element
> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
> report framing and start code method.
> Additional debug info:
> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
> gst_v4l2_codec_h265_dec_open ():
> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> gst_v4l2_decoder_get_controls() failed: Invalid argument
> ERROR: pipeline doesn't want to preroll.
> ERROR: from element
> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
> initialize supporting library.
> Additional debug info:
> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
> gst_video_decoder_change_state ():
> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> Failed to open decoder
> ERROR: pipeline doesn't want to preroll.
> Failed to set pipeline to PAUSED.
> Setting pipeline to NULL ...
> Freeing pipeline ...

What is the result of v4l2-ctl ?
Here I have:
v4l2-ctl --all -d 1
Driver Info:
	Driver name      : hantro-vpu
	Card type        : nxp,imx8mq-vpu-g2-dec
	Bus info         : platform: hantro-vpu
	Driver version   : 5.18.0
	Capabilities     : 0x84204000
		Video Memory-to-Memory Multiplanar
		Streaming
		Extended Pix Format
		Device Capabilities
	Device Caps      : 0x04204000
		Video Memory-to-Memory Multiplanar
		Streaming
		Extended Pix Format
Media Driver Info:
	Driver name      : hantro-vpu
	Model            : hantro-vpu
	Serial           :
	Bus info         : platform: hantro-vpu
	Media version    : 5.18.0
	Hardware revision: 0x00000000 (0)
	Driver version   : 5.18.0
Interface Info:
	ID               : 0x0300000c
	Type             : V4L Video
Entity Info:
	ID               : 0x00000001 (1)
	Name             : nxp,imx8mq-vpu-g2-dec-source
	Function         : V4L2 I/O
	Pad 0x01000002   : 0: Source
	  Link 0x02000008: to remote pad 0x1000004 of entity 'nxp,imx8mq-vpu-g2-dec-proc': Data, Enabled, Immutable
Priority: 2
Format Video Capture Multiplanar:
	Width/Height      : 48/48
	Pixel Format      : 'VT12' (Y/CbCr 4:2:0 (4x4 Linear))
	Field             : None
	Number of planes  : 1
	Flags             :
	Colorspace        : JPEG
	Transfer Function : Default
	YCbCr/HSV Encoding: Default
	Quantization      : Default
	Plane 0           :
	   Bytes per Line : 48
	   Size Image     : 3600
Format Video Output Multiplanar:
	Width/Height      : 48/48
	Pixel Format      : 'S265' (HEVC Parsed Slice Data)
	Field             : None
	Number of planes  : 1
	Flags             :
	Colorspace        : JPEG
	Transfer Function : Default
	YCbCr/HSV Encoding: Default
	Quantization      : Default
	Plane 0           :
	   Bytes per Line : 0
	   Size Image     : 4608

User Controls

hantro_hevc_slice_header_skip_b 0x00981a80 (int)    : min=0 max=256 step=1 default=0 value=0

Codec Controls

                    hevc_profile 0x00990b67 (menu)   : min=0 max=2 default=0 value=0
				0: Main
				1: Main Still Picture
				2: Main 10
                      hevc_level 0x00990b68 (menu)   : min=0 max=8 default=0 value=0
				0: 1
				1: 2
				2: 2.1
				3: 3
				4: 3.1
				5: 4
				6: 4.1
				7: 5
				8: 5.1

Stateless Codec Controls

     vp9_frame_decode_parameters 0x00a40a2c (unknown): type=261 flags=has-payload
       vp9_probabilities_updates 0x00a40a2d (unknown): type=260 flags=has-payload
     hevc_sequence_parameter_set 0x00a40a90 (unknown): type=270 flags=has-payload
      hevc_picture_parameter_set 0x00a40a91 (unknown): type=271 flags=has-payload
             hevc_scaling_matrix 0x00a40a93 (unknown): type=273 flags=has-payload
          hevc_decode_parameters 0x00a40a94 (unknown): type=274 flags=has-payload
                hevc_decode_mode 0x00a40a95 (menu)   : min=1 max=1 default=1 value=1
				1: Frame-Based
                 hevc_start_code 0x00a40a96 (menu)   : min=1 max=1 default=1 value=1
				1: Annex B Start Code

>
>> Benjamin
>>
>>> adam
>>>> Benjamin
>>>>
>>>>> adam
>>>>>> adam
>>>>>>> Regards,
>>>>>>> Benjamin
>>>>>>>
>>>>>>>>> adam
>>>>>>>>>> Thanks,
>>>>>>>>>> Benjamin
>>>>>>>>>>
>>>>>>>>>>> Benjamin
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Benjamin Gaignard (12):
>>>>>>>>>>>        media: uapi: HEVC: Add missing fields in HEVC controls
>>>>>>>>>>>        media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
>>>>>>>>>>>          prefix
>>>>>>>>>>>        media: uapi: HEVC: Add document uAPI structure
>>>>>>>>>>>        media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS
>>>>>>>>>>> as a
>>>>>>>>>>>          dynamic array
>>>>>>>>>>>        media: uapi: Move parsed HEVC pixel format out of staging
>>>>>>>>>>>        media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
>>>>>>>>>>> control
>>>>>>>>>>>        media: uapi: Move the HEVC stateless control type out of staging
>>>>>>>>>>>        media: controls: Log HEVC stateless control in .std_log
>>>>>>>>>>>        media: uapi: Create a dedicated header for Hantro control
>>>>>>>>>>>        media: uapi: HEVC: fix padding in v4l2 control structures
>>>>>>>>>>>        media: uapi: Change data_bit_offset definition
>>>>>>>>>>>        media: uapi: move HEVC stateless controls out of staging
>>>>>>>>>>>
>>>>>>>>>>> Hans Verkuil (3):
>>>>>>>>>>>        videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
>>>>>>>>>>>        v4l2-ctrls: add support for dynamically allocated arrays.
>>>>>>>>>>>        vivid: add dynamic array test control
>>>>>>>>>>>
>>>>>>>>>>>       .../userspace-api/media/drivers/hantro.rst    |   5 -
>>>>>>>>>>>       .../media/v4l/ext-ctrls-codec-stateless.rst   | 833
>>>>>>>>>>> ++++++++++++++++++
>>>>>>>>>>>       .../media/v4l/ext-ctrls-codec.rst             | 780
>>>>>>>>>>> ----------------
>>>>>>>>>>>       .../media/v4l/pixfmt-compressed.rst           |   7 +-
>>>>>>>>>>>       .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
>>>>>>>>>>>       .../media/v4l/vidioc-queryctrl.rst            |   8 +
>>>>>>>>>>>       .../media/videodev2.h.rst.exceptions          |   5 +
>>>>>>>>>>>       .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
>>>>>>>>>>>       drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
>>>>>>>>>>>       drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
>>>>>>>>>>>       drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
>>>>>>>>>>>       drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
>>>>>>>>>>>       drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
>>>>>>>>>>>       drivers/staging/media/hantro/hantro_drv.c     |  27 +-
>>>>>>>>>>>       drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
>>>>>>>>>>>       drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
>>>>>>>>>>>       .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
>>>>>>>>>>>       .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
>>>>>>>>>>>       include/media/hevc-ctrls.h                    | 250 ------
>>>>>>>>>>>       include/media/v4l2-ctrls.h                    |  48 +-
>>>>>>>>>>>       include/uapi/linux/hantro-media.h             |  19 +
>>>>>>>>>>>       include/uapi/linux/v4l2-controls.h            | 439 +++++++++
>>>>>>>>>>>       include/uapi/linux/videodev2.h                |  13 +
>>>>>>>>>>>       23 files changed, 1697 insertions(+), 1170 deletions(-)
>>>>>>>>>>>       delete mode 100644 include/media/hevc-ctrls.h
>>>>>>>>>>>       create mode 100644 include/uapi/linux/hantro-media.h
>>>>>>>>>>>

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
@ 2022-04-06 12:40                       ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-04-06 12:40 UTC (permalink / raw)
  To: Adam Ford
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc


Le 06/04/2022 à 14:28, Adam Ford a écrit :
> On Wed, Apr 6, 2022 at 1:56 AM Benjamin Gaignard
> <benjamin.gaignard@collabora.com> wrote:
>>
>> Le 05/04/2022 à 23:27, Adam Ford a écrit :
>>> On Mon, Apr 4, 2022 at 10:56 AM Benjamin Gaignard
>>> <benjamin.gaignard@collabora.com> wrote:
>>>> Le 02/04/2022 à 18:59, Adam Ford a écrit :
>>>>> On Sat, Apr 2, 2022 at 11:22 AM Adam Ford <aford173@gmail.com> wrote:
>>>>>> On Fri, Apr 1, 2022 at 8:18 AM Benjamin Gaignard
>>>>>> <benjamin.gaignard@collabora.com> wrote:
>>>>>>> Le 31/03/2022 à 08:53, Benjamin Gaignard a écrit :
>>>>>>>> Le 30/03/2022 à 20:52, Adam Ford a écrit :
>>>>>>>>> On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
>>>>>>>>> <benjamin.gaignard@collabora.com> wrote:
>>>>>>>>>> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
>>>>>>>>>>> This series aims to make HEVC uapi stable and usable for hardware
>>>>>>>>>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
>>>>>>>>>>> and 2 out of the tree drivers (rkvdec and RPI).
>>>>>>>>>>>
>>>>>>>>>>> After the remarks done on version 2, I have completely reworked to
>>>>>>>>>>> patches
>>>>>>>>>>> split so changelogs are meaningless. I have also drop "RFC" from the
>>>>>>>>>>> titles.
>>>>>>>>>>>
>>>>>>>>>>> Version 4:
>>>>>>>>>>> - Add num_entry_point_offsets field in  struct
>>>>>>>>>>> v4l2_ctrl_hevc_slice_params
>>>>>>>>>>> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
>>>>>>>>>>> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
>>>>>>>>>>> - Fix space/tab issue in kernel-doc
>>>>>>>>>>> - Add patch to change data_bit_offset definition
>>>>>>>>>>> - Fix hantro-media SPDX license
>>>>>>>>>>> - put controls under stateless section in v4l2-ctrls-defs.c
>>>>>>>>>>>
>>>>>>>>>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
>>>>>>>>>> Dear reviewers,
>>>>>>>>>>
>>>>>>>>>> This series is waiting for your feedback,
>>>>>>>>> I tried several times with the suggested repos for both the kernel and
>>>>>>>>> g-streamer without success getting Fluster to pass any tests on the
>>>>>>>>> imx8mq.  I can try again but I likely won't get to it until this
>>>>>>>>> weekend.  If I can get it working, I'll test both the 8mq and 8mm.
>>>>>>>> Thanks a lot for that.
>>>>>>>>
>>>>>>>> Benjamin
>>>>>>> Adam,
>>>>>>>
>>>>>>> You may need to check if h265parse and v4l2slh265dec are available on your board.
>>>>>> I ran gst-inspect to see what showed up with 265 in the name.
>>>>>>
>>>>>> # gst-inspect-1.0 |grep 265
>>>>>> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
>>>>>> rtp:  rtph265depay: RTP H265 depayloader
>>>>>> rtp:  rtph265pay: RTP H265 payloader
>>>>>> typefindfunctions: video/x-h265: h265, x265, 265
>>>>>> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
>>>>>> videoparsersbad:  h265parse: H.265 parser
>>>>>>
>>>>>> It appears I have both h265parse and v4l2slh265dec.
>>>>>>
>>>>>>> fluster check if v4l2slh265dec is working fine with this command line:
>>>>>>>
>>>>>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
>>>>>>>
>>>>>>> so if one of them is missing it won't work.
>>>>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
>>>>>> Setting pipeline to PAUSED ...
>>>>>> 0:00:00.098389938   526 0xaaaaf9d86ac0 ERROR     v4l2codecs-decoder
>>>>>> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
>>>>>> VIDIOC_G_EXT_CTRLS failed: Invalid argument
>>>>>> ERROR: from element
>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
>>>>>> report framing and start code method.
>>>>>> Additional debug info:
>>>>>> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
>>>>>> gst_v4l2_codec_h265_dec_open ():
>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>>>>>> gst_v4l2_decoder_get_controls() failed: Invalid argument
>>>>>> ERROR: pipeline doesn't want to preroll.
>>>>>> ERROR: from element
>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
>>>>>> initialize supporting library.
>>>>>> Additional debug info:
>>>>>> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
>>>>>> gst_video_decoder_change_state ():
>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>>>>>> Failed to open decoder
>>>>>> ERROR: pipeline doesn't want to preroll.
>>>>>> Failed to set pipeline to PAUSED.
>>>>>> Setting pipeline to NULL ...
>>>>>> Freeing pipeline ...
>>>>>>
>>>>>> Does this mean I have a wrong version of the kernel and/or incomplete patches?
>>>>> I double checked the branches.
>>>>>
>>>>> Kernel:
>>>>> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
>>>>> branch:  origin/HEVC_UAPI_V4
>>>>>
>>>>> Gstreamer:
>>>>> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
>>>>> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15
>>>>>
>>>>>
>>>>> I am still not able to run h.265/HEVC tests.
>>>> Hello Adam,
>>>>
>>>> I have updated the following branches with the versions I have used today:
>>>>
>>>> Kernel:
>>>> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
>>>> branch: origin/HEVC_UAPI_V5 only one change in documentation vs version 4 but rebased in v5.18-rc1
>>>>
>>>> Gstreamer:
>>>> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
>>>> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15 updated on the latest GST main branch
>>>>
>>>> I hope this will work fine this time.
>>> I wish I had better news for you:
>>>
>>> dmesg shows the hantro driver is being loaded:
>>>
>>> [   38.612243] hantro-vpu 38300000.video-codec: registered
>>> nxp,imx8mq-vpu-g1-dec as /dev/video0
>>> [   38.612618] hantro-vpu 38310000.video-codec: registered
>>> nxp,imx8mq-vpu-g2-dec as /dev/video1
>>>
>>> # gst-inspect-1.0 |grep 265
>>> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
>>> rtp:  rtph265depay: RTP H265 depayloader
>>> rtp:  rtph265pay: RTP H265 payloader
>>> typefindfunctions: video/x-h265: h265, x265, 265
>>> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
>>> videoparsersbad:  h265parse: H.265 parser
>>>
>>> Fluster reports:
>>> GStreamer-H.265-V4L2SL-Gst1.0: GStreamer H.265 V4L2SL decoder for
>>> GStreamer 1.0... ❌
>> Still the same error about non supported control ?
> # gst-lagst-launch-1.0 appsrc num-buffers=0 ! h265parse !
> v4l2slh265dec ! fakesink
> Setting pipeline to PAUSED ...
> 0:00:01.704385508   420 0xaaaaec0a76c0 ERROR     v4l2codecs-decoder
> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
> VIDIOC_G_EXT_CTRLS failed: Invalid argument
> ERROR: from element
> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
> report framing and start code method.
> Additional debug info:
> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
> gst_v4l2_codec_h265_dec_open ():
> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> gst_v4l2_decoder_get_controls() failed: Invalid argument
> ERROR: pipeline doesn't want to preroll.
> ERROR: from element
> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
> initialize supporting library.
> Additional debug info:
> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
> gst_video_decoder_change_state ():
> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> Failed to open decoder
> ERROR: pipeline doesn't want to preroll.
> Failed to set pipeline to PAUSED.
> Setting pipeline to NULL ...
> Freeing pipeline ...

What is the result of v4l2-ctl ?
Here I have:
v4l2-ctl --all -d 1
Driver Info:
	Driver name      : hantro-vpu
	Card type        : nxp,imx8mq-vpu-g2-dec
	Bus info         : platform: hantro-vpu
	Driver version   : 5.18.0
	Capabilities     : 0x84204000
		Video Memory-to-Memory Multiplanar
		Streaming
		Extended Pix Format
		Device Capabilities
	Device Caps      : 0x04204000
		Video Memory-to-Memory Multiplanar
		Streaming
		Extended Pix Format
Media Driver Info:
	Driver name      : hantro-vpu
	Model            : hantro-vpu
	Serial           :
	Bus info         : platform: hantro-vpu
	Media version    : 5.18.0
	Hardware revision: 0x00000000 (0)
	Driver version   : 5.18.0
Interface Info:
	ID               : 0x0300000c
	Type             : V4L Video
Entity Info:
	ID               : 0x00000001 (1)
	Name             : nxp,imx8mq-vpu-g2-dec-source
	Function         : V4L2 I/O
	Pad 0x01000002   : 0: Source
	  Link 0x02000008: to remote pad 0x1000004 of entity 'nxp,imx8mq-vpu-g2-dec-proc': Data, Enabled, Immutable
Priority: 2
Format Video Capture Multiplanar:
	Width/Height      : 48/48
	Pixel Format      : 'VT12' (Y/CbCr 4:2:0 (4x4 Linear))
	Field             : None
	Number of planes  : 1
	Flags             :
	Colorspace        : JPEG
	Transfer Function : Default
	YCbCr/HSV Encoding: Default
	Quantization      : Default
	Plane 0           :
	   Bytes per Line : 48
	   Size Image     : 3600
Format Video Output Multiplanar:
	Width/Height      : 48/48
	Pixel Format      : 'S265' (HEVC Parsed Slice Data)
	Field             : None
	Number of planes  : 1
	Flags             :
	Colorspace        : JPEG
	Transfer Function : Default
	YCbCr/HSV Encoding: Default
	Quantization      : Default
	Plane 0           :
	   Bytes per Line : 0
	   Size Image     : 4608

User Controls

hantro_hevc_slice_header_skip_b 0x00981a80 (int)    : min=0 max=256 step=1 default=0 value=0

Codec Controls

                    hevc_profile 0x00990b67 (menu)   : min=0 max=2 default=0 value=0
				0: Main
				1: Main Still Picture
				2: Main 10
                      hevc_level 0x00990b68 (menu)   : min=0 max=8 default=0 value=0
				0: 1
				1: 2
				2: 2.1
				3: 3
				4: 3.1
				5: 4
				6: 4.1
				7: 5
				8: 5.1

Stateless Codec Controls

     vp9_frame_decode_parameters 0x00a40a2c (unknown): type=261 flags=has-payload
       vp9_probabilities_updates 0x00a40a2d (unknown): type=260 flags=has-payload
     hevc_sequence_parameter_set 0x00a40a90 (unknown): type=270 flags=has-payload
      hevc_picture_parameter_set 0x00a40a91 (unknown): type=271 flags=has-payload
             hevc_scaling_matrix 0x00a40a93 (unknown): type=273 flags=has-payload
          hevc_decode_parameters 0x00a40a94 (unknown): type=274 flags=has-payload
                hevc_decode_mode 0x00a40a95 (menu)   : min=1 max=1 default=1 value=1
				1: Frame-Based
                 hevc_start_code 0x00a40a96 (menu)   : min=1 max=1 default=1 value=1
				1: Annex B Start Code

>
>> Benjamin
>>
>>> adam
>>>> Benjamin
>>>>
>>>>> adam
>>>>>> adam
>>>>>>> Regards,
>>>>>>> Benjamin
>>>>>>>
>>>>>>>>> adam
>>>>>>>>>> Thanks,
>>>>>>>>>> Benjamin
>>>>>>>>>>
>>>>>>>>>>> Benjamin
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Benjamin Gaignard (12):
>>>>>>>>>>>        media: uapi: HEVC: Add missing fields in HEVC controls
>>>>>>>>>>>        media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
>>>>>>>>>>>          prefix
>>>>>>>>>>>        media: uapi: HEVC: Add document uAPI structure
>>>>>>>>>>>        media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS
>>>>>>>>>>> as a
>>>>>>>>>>>          dynamic array
>>>>>>>>>>>        media: uapi: Move parsed HEVC pixel format out of staging
>>>>>>>>>>>        media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
>>>>>>>>>>> control
>>>>>>>>>>>        media: uapi: Move the HEVC stateless control type out of staging
>>>>>>>>>>>        media: controls: Log HEVC stateless control in .std_log
>>>>>>>>>>>        media: uapi: Create a dedicated header for Hantro control
>>>>>>>>>>>        media: uapi: HEVC: fix padding in v4l2 control structures
>>>>>>>>>>>        media: uapi: Change data_bit_offset definition
>>>>>>>>>>>        media: uapi: move HEVC stateless controls out of staging
>>>>>>>>>>>
>>>>>>>>>>> Hans Verkuil (3):
>>>>>>>>>>>        videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
>>>>>>>>>>>        v4l2-ctrls: add support for dynamically allocated arrays.
>>>>>>>>>>>        vivid: add dynamic array test control
>>>>>>>>>>>
>>>>>>>>>>>       .../userspace-api/media/drivers/hantro.rst    |   5 -
>>>>>>>>>>>       .../media/v4l/ext-ctrls-codec-stateless.rst   | 833
>>>>>>>>>>> ++++++++++++++++++
>>>>>>>>>>>       .../media/v4l/ext-ctrls-codec.rst             | 780
>>>>>>>>>>> ----------------
>>>>>>>>>>>       .../media/v4l/pixfmt-compressed.rst           |   7 +-
>>>>>>>>>>>       .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
>>>>>>>>>>>       .../media/v4l/vidioc-queryctrl.rst            |   8 +
>>>>>>>>>>>       .../media/videodev2.h.rst.exceptions          |   5 +
>>>>>>>>>>>       .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
>>>>>>>>>>>       drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
>>>>>>>>>>>       drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
>>>>>>>>>>>       drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
>>>>>>>>>>>       drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
>>>>>>>>>>>       drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
>>>>>>>>>>>       drivers/staging/media/hantro/hantro_drv.c     |  27 +-
>>>>>>>>>>>       drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
>>>>>>>>>>>       drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
>>>>>>>>>>>       .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
>>>>>>>>>>>       .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
>>>>>>>>>>>       include/media/hevc-ctrls.h                    | 250 ------
>>>>>>>>>>>       include/media/v4l2-ctrls.h                    |  48 +-
>>>>>>>>>>>       include/uapi/linux/hantro-media.h             |  19 +
>>>>>>>>>>>       include/uapi/linux/v4l2-controls.h            | 439 +++++++++
>>>>>>>>>>>       include/uapi/linux/videodev2.h                |  13 +
>>>>>>>>>>>       23 files changed, 1697 insertions(+), 1170 deletions(-)
>>>>>>>>>>>       delete mode 100644 include/media/hevc-ctrls.h
>>>>>>>>>>>       create mode 100644 include/uapi/linux/hantro-media.h
>>>>>>>>>>>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
  2022-04-06 12:40                       ` Benjamin Gaignard
@ 2022-04-06 12:46                         ` Adam Ford
  -1 siblings, 0 replies; 81+ messages in thread
From: Adam Ford @ 2022-04-06 12:46 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc

On Wed, Apr 6, 2022 at 7:41 AM Benjamin Gaignard
<benjamin.gaignard@collabora.com> wrote:
>
>
> Le 06/04/2022 à 14:28, Adam Ford a écrit :
> > On Wed, Apr 6, 2022 at 1:56 AM Benjamin Gaignard
> > <benjamin.gaignard@collabora.com> wrote:
> >>
> >> Le 05/04/2022 à 23:27, Adam Ford a écrit :
> >>> On Mon, Apr 4, 2022 at 10:56 AM Benjamin Gaignard
> >>> <benjamin.gaignard@collabora.com> wrote:
> >>>> Le 02/04/2022 à 18:59, Adam Ford a écrit :
> >>>>> On Sat, Apr 2, 2022 at 11:22 AM Adam Ford <aford173@gmail.com> wrote:
> >>>>>> On Fri, Apr 1, 2022 at 8:18 AM Benjamin Gaignard
> >>>>>> <benjamin.gaignard@collabora.com> wrote:
> >>>>>>> Le 31/03/2022 à 08:53, Benjamin Gaignard a écrit :
> >>>>>>>> Le 30/03/2022 à 20:52, Adam Ford a écrit :
> >>>>>>>>> On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
> >>>>>>>>> <benjamin.gaignard@collabora.com> wrote:
> >>>>>>>>>> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
> >>>>>>>>>>> This series aims to make HEVC uapi stable and usable for hardware
> >>>>>>>>>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
> >>>>>>>>>>> and 2 out of the tree drivers (rkvdec and RPI).
> >>>>>>>>>>>
> >>>>>>>>>>> After the remarks done on version 2, I have completely reworked to
> >>>>>>>>>>> patches
> >>>>>>>>>>> split so changelogs are meaningless. I have also drop "RFC" from the
> >>>>>>>>>>> titles.
> >>>>>>>>>>>
> >>>>>>>>>>> Version 4:
> >>>>>>>>>>> - Add num_entry_point_offsets field in  struct
> >>>>>>>>>>> v4l2_ctrl_hevc_slice_params
> >>>>>>>>>>> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
> >>>>>>>>>>> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> >>>>>>>>>>> - Fix space/tab issue in kernel-doc
> >>>>>>>>>>> - Add patch to change data_bit_offset definition
> >>>>>>>>>>> - Fix hantro-media SPDX license
> >>>>>>>>>>> - put controls under stateless section in v4l2-ctrls-defs.c
> >>>>>>>>>>>
> >>>>>>>>>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
> >>>>>>>>>> Dear reviewers,
> >>>>>>>>>>
> >>>>>>>>>> This series is waiting for your feedback,
> >>>>>>>>> I tried several times with the suggested repos for both the kernel and
> >>>>>>>>> g-streamer without success getting Fluster to pass any tests on the
> >>>>>>>>> imx8mq.  I can try again but I likely won't get to it until this
> >>>>>>>>> weekend.  If I can get it working, I'll test both the 8mq and 8mm.
> >>>>>>>> Thanks a lot for that.
> >>>>>>>>
> >>>>>>>> Benjamin
> >>>>>>> Adam,
> >>>>>>>
> >>>>>>> You may need to check if h265parse and v4l2slh265dec are available on your board.
> >>>>>> I ran gst-inspect to see what showed up with 265 in the name.
> >>>>>>
> >>>>>> # gst-inspect-1.0 |grep 265
> >>>>>> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
> >>>>>> rtp:  rtph265depay: RTP H265 depayloader
> >>>>>> rtp:  rtph265pay: RTP H265 payloader
> >>>>>> typefindfunctions: video/x-h265: h265, x265, 265
> >>>>>> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
> >>>>>> videoparsersbad:  h265parse: H.265 parser
> >>>>>>
> >>>>>> It appears I have both h265parse and v4l2slh265dec.
> >>>>>>
> >>>>>>> fluster check if v4l2slh265dec is working fine with this command line:
> >>>>>>>
> >>>>>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
> >>>>>>>
> >>>>>>> so if one of them is missing it won't work.
> >>>>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
> >>>>>> Setting pipeline to PAUSED ...
> >>>>>> 0:00:00.098389938   526 0xaaaaf9d86ac0 ERROR     v4l2codecs-decoder
> >>>>>> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
> >>>>>> VIDIOC_G_EXT_CTRLS failed: Invalid argument
> >>>>>> ERROR: from element
> >>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
> >>>>>> report framing and start code method.
> >>>>>> Additional debug info:
> >>>>>> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
> >>>>>> gst_v4l2_codec_h265_dec_open ():
> >>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> >>>>>> gst_v4l2_decoder_get_controls() failed: Invalid argument
> >>>>>> ERROR: pipeline doesn't want to preroll.
> >>>>>> ERROR: from element
> >>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
> >>>>>> initialize supporting library.
> >>>>>> Additional debug info:
> >>>>>> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
> >>>>>> gst_video_decoder_change_state ():
> >>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> >>>>>> Failed to open decoder
> >>>>>> ERROR: pipeline doesn't want to preroll.
> >>>>>> Failed to set pipeline to PAUSED.
> >>>>>> Setting pipeline to NULL ...
> >>>>>> Freeing pipeline ...
> >>>>>>
> >>>>>> Does this mean I have a wrong version of the kernel and/or incomplete patches?
> >>>>> I double checked the branches.
> >>>>>
> >>>>> Kernel:
> >>>>> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
> >>>>> branch:  origin/HEVC_UAPI_V4
> >>>>>
> >>>>> Gstreamer:
> >>>>> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
> >>>>> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15
> >>>>>
> >>>>>
> >>>>> I am still not able to run h.265/HEVC tests.
> >>>> Hello Adam,
> >>>>
> >>>> I have updated the following branches with the versions I have used today:
> >>>>
> >>>> Kernel:
> >>>> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
> >>>> branch: origin/HEVC_UAPI_V5 only one change in documentation vs version 4 but rebased in v5.18-rc1
> >>>>
> >>>> Gstreamer:
> >>>> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
> >>>> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15 updated on the latest GST main branch
> >>>>
> >>>> I hope this will work fine this time.
> >>> I wish I had better news for you:
> >>>
> >>> dmesg shows the hantro driver is being loaded:
> >>>
> >>> [   38.612243] hantro-vpu 38300000.video-codec: registered
> >>> nxp,imx8mq-vpu-g1-dec as /dev/video0
> >>> [   38.612618] hantro-vpu 38310000.video-codec: registered
> >>> nxp,imx8mq-vpu-g2-dec as /dev/video1
> >>>
> >>> # gst-inspect-1.0 |grep 265
> >>> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
> >>> rtp:  rtph265depay: RTP H265 depayloader
> >>> rtp:  rtph265pay: RTP H265 payloader
> >>> typefindfunctions: video/x-h265: h265, x265, 265
> >>> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
> >>> videoparsersbad:  h265parse: H.265 parser
> >>>
> >>> Fluster reports:
> >>> GStreamer-H.265-V4L2SL-Gst1.0: GStreamer H.265 V4L2SL decoder for
> >>> GStreamer 1.0... ❌
> >> Still the same error about non supported control ?
> > # gst-lagst-launch-1.0 appsrc num-buffers=0 ! h265parse !
> > v4l2slh265dec ! fakesink
> > Setting pipeline to PAUSED ...
> > 0:00:01.704385508   420 0xaaaaec0a76c0 ERROR     v4l2codecs-decoder
> > gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
> > VIDIOC_G_EXT_CTRLS failed: Invalid argument
> > ERROR: from element
> > /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
> > report framing and start code method.
> > Additional debug info:
> > ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
> > gst_v4l2_codec_h265_dec_open ():
> > /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> > gst_v4l2_decoder_get_controls() failed: Invalid argument
> > ERROR: pipeline doesn't want to preroll.
> > ERROR: from element
> > /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
> > initialize supporting library.
> > Additional debug info:
> > ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
> > gst_video_decoder_change_state ():
> > /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> > Failed to open decoder
> > ERROR: pipeline doesn't want to preroll.
> > Failed to set pipeline to PAUSED.
> > Setting pipeline to NULL ...
> > Freeing pipeline ...
>
> What is the result of v4l2-ctl ?
> Here I have:
> v4l2-ctl --all -d 1
> Driver Info:
>         Driver name      : hantro-vpu
>         Card type        : nxp,imx8mq-vpu-g2-dec
>         Bus info         : platform: hantro-vpu
>         Driver version   : 5.18.0
>         Capabilities     : 0x84204000
>                 Video Memory-to-Memory Multiplanar
>                 Streaming
>                 Extended Pix Format
>                 Device Capabilities
>         Device Caps      : 0x04204000
>                 Video Memory-to-Memory Multiplanar
>                 Streaming
>                 Extended Pix Format
> Media Driver Info:
>         Driver name      : hantro-vpu
>         Model            : hantro-vpu
>         Serial           :
>         Bus info         : platform: hantro-vpu
>         Media version    : 5.18.0
>         Hardware revision: 0x00000000 (0)
>         Driver version   : 5.18.0
> Interface Info:
>         ID               : 0x0300000c
>         Type             : V4L Video
> Entity Info:
>         ID               : 0x00000001 (1)
>         Name             : nxp,imx8mq-vpu-g2-dec-source
>         Function         : V4L2 I/O
>         Pad 0x01000002   : 0: Source
>           Link 0x02000008: to remote pad 0x1000004 of entity 'nxp,imx8mq-vpu-g2-dec-proc': Data, Enabled, Immutable
> Priority: 2
> Format Video Capture Multiplanar:
>         Width/Height      : 48/48
>         Pixel Format      : 'VT12' (Y/CbCr 4:2:0 (4x4 Linear))
>         Field             : None
>         Number of planes  : 1
>         Flags             :
>         Colorspace        : JPEG
>         Transfer Function : Default
>         YCbCr/HSV Encoding: Default
>         Quantization      : Default
>         Plane 0           :
>            Bytes per Line : 48
>            Size Image     : 3600
> Format Video Output Multiplanar:
>         Width/Height      : 48/48
>         Pixel Format      : 'S265' (HEVC Parsed Slice Data)
>         Field             : None
>         Number of planes  : 1
>         Flags             :
>         Colorspace        : JPEG
>         Transfer Function : Default
>         YCbCr/HSV Encoding: Default
>         Quantization      : Default
>         Plane 0           :
>            Bytes per Line : 0
>            Size Image     : 4608
>
> User Controls
>
> hantro_hevc_slice_header_skip_b 0x00981a80 (int)    : min=0 max=256 step=1 default=0 value=0
>
> Codec Controls
>
>                     hevc_profile 0x00990b67 (menu)   : min=0 max=2 default=0 value=0
>                                 0: Main
>                                 1: Main Still Picture
>                                 2: Main 10
>                       hevc_level 0x00990b68 (menu)   : min=0 max=8 default=0 value=0
>                                 0: 1
>                                 1: 2
>                                 2: 2.1
>                                 3: 3
>                                 4: 3.1
>                                 5: 4
>                                 6: 4.1
>                                 7: 5
>                                 8: 5.1
>
> Stateless Codec Controls
>
>      vp9_frame_decode_parameters 0x00a40a2c (unknown): type=261 flags=has-payload
>        vp9_probabilities_updates 0x00a40a2d (unknown): type=260 flags=has-payload
>      hevc_sequence_parameter_set 0x00a40a90 (unknown): type=270 flags=has-payload
>       hevc_picture_parameter_set 0x00a40a91 (unknown): type=271 flags=has-payload
>              hevc_scaling_matrix 0x00a40a93 (unknown): type=273 flags=has-payload
>           hevc_decode_parameters 0x00a40a94 (unknown): type=274 flags=has-payload
>                 hevc_decode_mode 0x00a40a95 (menu)   : min=1 max=1 default=1 value=1
>                                 1: Frame-Based
>                  hevc_start_code 0x00a40a96 (menu)   : min=1 max=1 default=1 value=1
>                                 1: Annex B Start Code
>

Mine looks like:

# v4l2-ctl --all -d 1
Driver Info:
Driver name      : hantro-vpu
Card type        : nxp,imx8mq-vpu-g2-dec
Bus info         : platform: hantro-vpu
Driver version   : 5.18.0
Capabilities     : 0x84204000
Video Memory-to-Memory Multiplanar
Streaming
Extended Pix Format
Device Capabilities
Device Caps      : 0x04204000
Video Memory-to-Memory Multiplanar
Streaming
Extended Pix Format
Media Driver Info:
Driver name      : hantro-vpu
Model            : hantro-vpu
Serial           :
Bus info         : platform: hantro-vpu
Media version    : 5.18.0
Hardware revision: 0x00000000 (0)
Driver version   : 5.18.0
Interface Info:
ID               : 0x0300000c
Type             : V4L Video
Entity Info:
ID               : 0x00000001 (1)
Name             : nxp,imx8mq-vpu-g2-dec-source
Function         : V4L2 I/O
Pad 0x01000002   : 0: Source
  Link 0x02000008: to remote pad 0x1000004 of entity
'nxp,imx8mq-vpu-g2-dec-proc': Data, Enabled, Immutable
Priority: 2
Format Video Capture Multiplanar:
Width/Height      : 48/48
Pixel Format      : 'VT12' (Y/CbCr 4:2:0 (4x4 Linear))
Field             : None
Number of planes  : 1
Flags             :
Colorspace        : JPEG
Transfer Function : Default
YCbCr/HSV Encoding: Default
Quantization      : Default
Plane 0           :
   Bytes per Line : 48
   Size Image     : 3600
Format Video Output Multiplanar:
Width/Height      : 48/48
Pixel Format      : 'S265' (HEVC Parsed Slice Data)
Field             : None
Number of planes  : 1
Flags             :
Colorspace        : JPEG
Transfer Function : Default
YCbCr/HSV Encoding: Default
Quantization      : Default
Plane 0           :
   Bytes per Line : 0
   Size Image     : 4608

User Controls

hantro_hevc_slice_header_skip_b 0x00981a80 (int)    : min=0 max=256
step=1 default=0 value=0

Codec Controls

                   hevc_profile 0x00990b67 (menu)   : min=0 max=2
default=0 value=0
0: Main
1: Main Still Picture
2: Main 10
                     hevc_level 0x00990b68 (menu)   : min=0 max=8
default=0 value=0
0: 1
1: 2
2: 2.1
3: 3
4: 3.1
5: 4
6: 4.1
7: 5
8: 5.1

Stateless Codec Controls

    vp9_frame_decode_parameters 0x00a40a2c (unknown): type=261 flags=has-payload
      vp9_probabilities_updates 0x00a40a2d (unknown): type=260 flags=has-payload
    hevc_sequence_parameter_set 0x00a40a90 (unknown): type=270 flags=has-payload
     hevc_picture_parameter_set 0x00a40a91 (unknown): type=271 flags=has-payload
            hevc_scaling_matrix 0x00a40a93 (unknown): type=273 flags=has-payload
         hevc_decode_parameters 0x00a40a94 (unknown): type=274 flags=has-payload
               hevc_decode_mode 0x00a40a95 (menu)   : min=1 max=1
default=1 value=1
1: Frame-Based
                hevc_start_code 0x00a40a96 (menu)   : min=1 max=1
default=1 value=1
1: Annex B Start Code

> >
> >> Benjamin
> >>
> >>> adam
> >>>> Benjamin
> >>>>
> >>>>> adam
> >>>>>> adam
> >>>>>>> Regards,
> >>>>>>> Benjamin
> >>>>>>>
> >>>>>>>>> adam
> >>>>>>>>>> Thanks,
> >>>>>>>>>> Benjamin
> >>>>>>>>>>
> >>>>>>>>>>> Benjamin
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> Benjamin Gaignard (12):
> >>>>>>>>>>>        media: uapi: HEVC: Add missing fields in HEVC controls
> >>>>>>>>>>>        media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
> >>>>>>>>>>>          prefix
> >>>>>>>>>>>        media: uapi: HEVC: Add document uAPI structure
> >>>>>>>>>>>        media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS
> >>>>>>>>>>> as a
> >>>>>>>>>>>          dynamic array
> >>>>>>>>>>>        media: uapi: Move parsed HEVC pixel format out of staging
> >>>>>>>>>>>        media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> >>>>>>>>>>> control
> >>>>>>>>>>>        media: uapi: Move the HEVC stateless control type out of staging
> >>>>>>>>>>>        media: controls: Log HEVC stateless control in .std_log
> >>>>>>>>>>>        media: uapi: Create a dedicated header for Hantro control
> >>>>>>>>>>>        media: uapi: HEVC: fix padding in v4l2 control structures
> >>>>>>>>>>>        media: uapi: Change data_bit_offset definition
> >>>>>>>>>>>        media: uapi: move HEVC stateless controls out of staging
> >>>>>>>>>>>
> >>>>>>>>>>> Hans Verkuil (3):
> >>>>>>>>>>>        videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
> >>>>>>>>>>>        v4l2-ctrls: add support for dynamically allocated arrays.
> >>>>>>>>>>>        vivid: add dynamic array test control
> >>>>>>>>>>>
> >>>>>>>>>>>       .../userspace-api/media/drivers/hantro.rst    |   5 -
> >>>>>>>>>>>       .../media/v4l/ext-ctrls-codec-stateless.rst   | 833
> >>>>>>>>>>> ++++++++++++++++++
> >>>>>>>>>>>       .../media/v4l/ext-ctrls-codec.rst             | 780
> >>>>>>>>>>> ----------------
> >>>>>>>>>>>       .../media/v4l/pixfmt-compressed.rst           |   7 +-
> >>>>>>>>>>>       .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
> >>>>>>>>>>>       .../media/v4l/vidioc-queryctrl.rst            |   8 +
> >>>>>>>>>>>       .../media/videodev2.h.rst.exceptions          |   5 +
> >>>>>>>>>>>       .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
> >>>>>>>>>>>       drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
> >>>>>>>>>>>       drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
> >>>>>>>>>>>       drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
> >>>>>>>>>>>       drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
> >>>>>>>>>>>       drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
> >>>>>>>>>>>       drivers/staging/media/hantro/hantro_drv.c     |  27 +-
> >>>>>>>>>>>       drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
> >>>>>>>>>>>       drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
> >>>>>>>>>>>       .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
> >>>>>>>>>>>       .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
> >>>>>>>>>>>       include/media/hevc-ctrls.h                    | 250 ------
> >>>>>>>>>>>       include/media/v4l2-ctrls.h                    |  48 +-
> >>>>>>>>>>>       include/uapi/linux/hantro-media.h             |  19 +
> >>>>>>>>>>>       include/uapi/linux/v4l2-controls.h            | 439 +++++++++
> >>>>>>>>>>>       include/uapi/linux/videodev2.h                |  13 +
> >>>>>>>>>>>       23 files changed, 1697 insertions(+), 1170 deletions(-)
> >>>>>>>>>>>       delete mode 100644 include/media/hevc-ctrls.h
> >>>>>>>>>>>       create mode 100644 include/uapi/linux/hantro-media.h
> >>>>>>>>>>>

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
@ 2022-04-06 12:46                         ` Adam Ford
  0 siblings, 0 replies; 81+ messages in thread
From: Adam Ford @ 2022-04-06 12:46 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc

On Wed, Apr 6, 2022 at 7:41 AM Benjamin Gaignard
<benjamin.gaignard@collabora.com> wrote:
>
>
> Le 06/04/2022 à 14:28, Adam Ford a écrit :
> > On Wed, Apr 6, 2022 at 1:56 AM Benjamin Gaignard
> > <benjamin.gaignard@collabora.com> wrote:
> >>
> >> Le 05/04/2022 à 23:27, Adam Ford a écrit :
> >>> On Mon, Apr 4, 2022 at 10:56 AM Benjamin Gaignard
> >>> <benjamin.gaignard@collabora.com> wrote:
> >>>> Le 02/04/2022 à 18:59, Adam Ford a écrit :
> >>>>> On Sat, Apr 2, 2022 at 11:22 AM Adam Ford <aford173@gmail.com> wrote:
> >>>>>> On Fri, Apr 1, 2022 at 8:18 AM Benjamin Gaignard
> >>>>>> <benjamin.gaignard@collabora.com> wrote:
> >>>>>>> Le 31/03/2022 à 08:53, Benjamin Gaignard a écrit :
> >>>>>>>> Le 30/03/2022 à 20:52, Adam Ford a écrit :
> >>>>>>>>> On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
> >>>>>>>>> <benjamin.gaignard@collabora.com> wrote:
> >>>>>>>>>> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
> >>>>>>>>>>> This series aims to make HEVC uapi stable and usable for hardware
> >>>>>>>>>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
> >>>>>>>>>>> and 2 out of the tree drivers (rkvdec and RPI).
> >>>>>>>>>>>
> >>>>>>>>>>> After the remarks done on version 2, I have completely reworked to
> >>>>>>>>>>> patches
> >>>>>>>>>>> split so changelogs are meaningless. I have also drop "RFC" from the
> >>>>>>>>>>> titles.
> >>>>>>>>>>>
> >>>>>>>>>>> Version 4:
> >>>>>>>>>>> - Add num_entry_point_offsets field in  struct
> >>>>>>>>>>> v4l2_ctrl_hevc_slice_params
> >>>>>>>>>>> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
> >>>>>>>>>>> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> >>>>>>>>>>> - Fix space/tab issue in kernel-doc
> >>>>>>>>>>> - Add patch to change data_bit_offset definition
> >>>>>>>>>>> - Fix hantro-media SPDX license
> >>>>>>>>>>> - put controls under stateless section in v4l2-ctrls-defs.c
> >>>>>>>>>>>
> >>>>>>>>>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
> >>>>>>>>>> Dear reviewers,
> >>>>>>>>>>
> >>>>>>>>>> This series is waiting for your feedback,
> >>>>>>>>> I tried several times with the suggested repos for both the kernel and
> >>>>>>>>> g-streamer without success getting Fluster to pass any tests on the
> >>>>>>>>> imx8mq.  I can try again but I likely won't get to it until this
> >>>>>>>>> weekend.  If I can get it working, I'll test both the 8mq and 8mm.
> >>>>>>>> Thanks a lot for that.
> >>>>>>>>
> >>>>>>>> Benjamin
> >>>>>>> Adam,
> >>>>>>>
> >>>>>>> You may need to check if h265parse and v4l2slh265dec are available on your board.
> >>>>>> I ran gst-inspect to see what showed up with 265 in the name.
> >>>>>>
> >>>>>> # gst-inspect-1.0 |grep 265
> >>>>>> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
> >>>>>> rtp:  rtph265depay: RTP H265 depayloader
> >>>>>> rtp:  rtph265pay: RTP H265 payloader
> >>>>>> typefindfunctions: video/x-h265: h265, x265, 265
> >>>>>> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
> >>>>>> videoparsersbad:  h265parse: H.265 parser
> >>>>>>
> >>>>>> It appears I have both h265parse and v4l2slh265dec.
> >>>>>>
> >>>>>>> fluster check if v4l2slh265dec is working fine with this command line:
> >>>>>>>
> >>>>>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
> >>>>>>>
> >>>>>>> so if one of them is missing it won't work.
> >>>>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
> >>>>>> Setting pipeline to PAUSED ...
> >>>>>> 0:00:00.098389938   526 0xaaaaf9d86ac0 ERROR     v4l2codecs-decoder
> >>>>>> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
> >>>>>> VIDIOC_G_EXT_CTRLS failed: Invalid argument
> >>>>>> ERROR: from element
> >>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
> >>>>>> report framing and start code method.
> >>>>>> Additional debug info:
> >>>>>> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
> >>>>>> gst_v4l2_codec_h265_dec_open ():
> >>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> >>>>>> gst_v4l2_decoder_get_controls() failed: Invalid argument
> >>>>>> ERROR: pipeline doesn't want to preroll.
> >>>>>> ERROR: from element
> >>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
> >>>>>> initialize supporting library.
> >>>>>> Additional debug info:
> >>>>>> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
> >>>>>> gst_video_decoder_change_state ():
> >>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> >>>>>> Failed to open decoder
> >>>>>> ERROR: pipeline doesn't want to preroll.
> >>>>>> Failed to set pipeline to PAUSED.
> >>>>>> Setting pipeline to NULL ...
> >>>>>> Freeing pipeline ...
> >>>>>>
> >>>>>> Does this mean I have a wrong version of the kernel and/or incomplete patches?
> >>>>> I double checked the branches.
> >>>>>
> >>>>> Kernel:
> >>>>> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
> >>>>> branch:  origin/HEVC_UAPI_V4
> >>>>>
> >>>>> Gstreamer:
> >>>>> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
> >>>>> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15
> >>>>>
> >>>>>
> >>>>> I am still not able to run h.265/HEVC tests.
> >>>> Hello Adam,
> >>>>
> >>>> I have updated the following branches with the versions I have used today:
> >>>>
> >>>> Kernel:
> >>>> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
> >>>> branch: origin/HEVC_UAPI_V5 only one change in documentation vs version 4 but rebased in v5.18-rc1
> >>>>
> >>>> Gstreamer:
> >>>> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
> >>>> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15 updated on the latest GST main branch
> >>>>
> >>>> I hope this will work fine this time.
> >>> I wish I had better news for you:
> >>>
> >>> dmesg shows the hantro driver is being loaded:
> >>>
> >>> [   38.612243] hantro-vpu 38300000.video-codec: registered
> >>> nxp,imx8mq-vpu-g1-dec as /dev/video0
> >>> [   38.612618] hantro-vpu 38310000.video-codec: registered
> >>> nxp,imx8mq-vpu-g2-dec as /dev/video1
> >>>
> >>> # gst-inspect-1.0 |grep 265
> >>> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
> >>> rtp:  rtph265depay: RTP H265 depayloader
> >>> rtp:  rtph265pay: RTP H265 payloader
> >>> typefindfunctions: video/x-h265: h265, x265, 265
> >>> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
> >>> videoparsersbad:  h265parse: H.265 parser
> >>>
> >>> Fluster reports:
> >>> GStreamer-H.265-V4L2SL-Gst1.0: GStreamer H.265 V4L2SL decoder for
> >>> GStreamer 1.0... ❌
> >> Still the same error about non supported control ?
> > # gst-lagst-launch-1.0 appsrc num-buffers=0 ! h265parse !
> > v4l2slh265dec ! fakesink
> > Setting pipeline to PAUSED ...
> > 0:00:01.704385508   420 0xaaaaec0a76c0 ERROR     v4l2codecs-decoder
> > gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
> > VIDIOC_G_EXT_CTRLS failed: Invalid argument
> > ERROR: from element
> > /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
> > report framing and start code method.
> > Additional debug info:
> > ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
> > gst_v4l2_codec_h265_dec_open ():
> > /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> > gst_v4l2_decoder_get_controls() failed: Invalid argument
> > ERROR: pipeline doesn't want to preroll.
> > ERROR: from element
> > /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
> > initialize supporting library.
> > Additional debug info:
> > ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
> > gst_video_decoder_change_state ():
> > /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> > Failed to open decoder
> > ERROR: pipeline doesn't want to preroll.
> > Failed to set pipeline to PAUSED.
> > Setting pipeline to NULL ...
> > Freeing pipeline ...
>
> What is the result of v4l2-ctl ?
> Here I have:
> v4l2-ctl --all -d 1
> Driver Info:
>         Driver name      : hantro-vpu
>         Card type        : nxp,imx8mq-vpu-g2-dec
>         Bus info         : platform: hantro-vpu
>         Driver version   : 5.18.0
>         Capabilities     : 0x84204000
>                 Video Memory-to-Memory Multiplanar
>                 Streaming
>                 Extended Pix Format
>                 Device Capabilities
>         Device Caps      : 0x04204000
>                 Video Memory-to-Memory Multiplanar
>                 Streaming
>                 Extended Pix Format
> Media Driver Info:
>         Driver name      : hantro-vpu
>         Model            : hantro-vpu
>         Serial           :
>         Bus info         : platform: hantro-vpu
>         Media version    : 5.18.0
>         Hardware revision: 0x00000000 (0)
>         Driver version   : 5.18.0
> Interface Info:
>         ID               : 0x0300000c
>         Type             : V4L Video
> Entity Info:
>         ID               : 0x00000001 (1)
>         Name             : nxp,imx8mq-vpu-g2-dec-source
>         Function         : V4L2 I/O
>         Pad 0x01000002   : 0: Source
>           Link 0x02000008: to remote pad 0x1000004 of entity 'nxp,imx8mq-vpu-g2-dec-proc': Data, Enabled, Immutable
> Priority: 2
> Format Video Capture Multiplanar:
>         Width/Height      : 48/48
>         Pixel Format      : 'VT12' (Y/CbCr 4:2:0 (4x4 Linear))
>         Field             : None
>         Number of planes  : 1
>         Flags             :
>         Colorspace        : JPEG
>         Transfer Function : Default
>         YCbCr/HSV Encoding: Default
>         Quantization      : Default
>         Plane 0           :
>            Bytes per Line : 48
>            Size Image     : 3600
> Format Video Output Multiplanar:
>         Width/Height      : 48/48
>         Pixel Format      : 'S265' (HEVC Parsed Slice Data)
>         Field             : None
>         Number of planes  : 1
>         Flags             :
>         Colorspace        : JPEG
>         Transfer Function : Default
>         YCbCr/HSV Encoding: Default
>         Quantization      : Default
>         Plane 0           :
>            Bytes per Line : 0
>            Size Image     : 4608
>
> User Controls
>
> hantro_hevc_slice_header_skip_b 0x00981a80 (int)    : min=0 max=256 step=1 default=0 value=0
>
> Codec Controls
>
>                     hevc_profile 0x00990b67 (menu)   : min=0 max=2 default=0 value=0
>                                 0: Main
>                                 1: Main Still Picture
>                                 2: Main 10
>                       hevc_level 0x00990b68 (menu)   : min=0 max=8 default=0 value=0
>                                 0: 1
>                                 1: 2
>                                 2: 2.1
>                                 3: 3
>                                 4: 3.1
>                                 5: 4
>                                 6: 4.1
>                                 7: 5
>                                 8: 5.1
>
> Stateless Codec Controls
>
>      vp9_frame_decode_parameters 0x00a40a2c (unknown): type=261 flags=has-payload
>        vp9_probabilities_updates 0x00a40a2d (unknown): type=260 flags=has-payload
>      hevc_sequence_parameter_set 0x00a40a90 (unknown): type=270 flags=has-payload
>       hevc_picture_parameter_set 0x00a40a91 (unknown): type=271 flags=has-payload
>              hevc_scaling_matrix 0x00a40a93 (unknown): type=273 flags=has-payload
>           hevc_decode_parameters 0x00a40a94 (unknown): type=274 flags=has-payload
>                 hevc_decode_mode 0x00a40a95 (menu)   : min=1 max=1 default=1 value=1
>                                 1: Frame-Based
>                  hevc_start_code 0x00a40a96 (menu)   : min=1 max=1 default=1 value=1
>                                 1: Annex B Start Code
>

Mine looks like:

# v4l2-ctl --all -d 1
Driver Info:
Driver name      : hantro-vpu
Card type        : nxp,imx8mq-vpu-g2-dec
Bus info         : platform: hantro-vpu
Driver version   : 5.18.0
Capabilities     : 0x84204000
Video Memory-to-Memory Multiplanar
Streaming
Extended Pix Format
Device Capabilities
Device Caps      : 0x04204000
Video Memory-to-Memory Multiplanar
Streaming
Extended Pix Format
Media Driver Info:
Driver name      : hantro-vpu
Model            : hantro-vpu
Serial           :
Bus info         : platform: hantro-vpu
Media version    : 5.18.0
Hardware revision: 0x00000000 (0)
Driver version   : 5.18.0
Interface Info:
ID               : 0x0300000c
Type             : V4L Video
Entity Info:
ID               : 0x00000001 (1)
Name             : nxp,imx8mq-vpu-g2-dec-source
Function         : V4L2 I/O
Pad 0x01000002   : 0: Source
  Link 0x02000008: to remote pad 0x1000004 of entity
'nxp,imx8mq-vpu-g2-dec-proc': Data, Enabled, Immutable
Priority: 2
Format Video Capture Multiplanar:
Width/Height      : 48/48
Pixel Format      : 'VT12' (Y/CbCr 4:2:0 (4x4 Linear))
Field             : None
Number of planes  : 1
Flags             :
Colorspace        : JPEG
Transfer Function : Default
YCbCr/HSV Encoding: Default
Quantization      : Default
Plane 0           :
   Bytes per Line : 48
   Size Image     : 3600
Format Video Output Multiplanar:
Width/Height      : 48/48
Pixel Format      : 'S265' (HEVC Parsed Slice Data)
Field             : None
Number of planes  : 1
Flags             :
Colorspace        : JPEG
Transfer Function : Default
YCbCr/HSV Encoding: Default
Quantization      : Default
Plane 0           :
   Bytes per Line : 0
   Size Image     : 4608

User Controls

hantro_hevc_slice_header_skip_b 0x00981a80 (int)    : min=0 max=256
step=1 default=0 value=0

Codec Controls

                   hevc_profile 0x00990b67 (menu)   : min=0 max=2
default=0 value=0
0: Main
1: Main Still Picture
2: Main 10
                     hevc_level 0x00990b68 (menu)   : min=0 max=8
default=0 value=0
0: 1
1: 2
2: 2.1
3: 3
4: 3.1
5: 4
6: 4.1
7: 5
8: 5.1

Stateless Codec Controls

    vp9_frame_decode_parameters 0x00a40a2c (unknown): type=261 flags=has-payload
      vp9_probabilities_updates 0x00a40a2d (unknown): type=260 flags=has-payload
    hevc_sequence_parameter_set 0x00a40a90 (unknown): type=270 flags=has-payload
     hevc_picture_parameter_set 0x00a40a91 (unknown): type=271 flags=has-payload
            hevc_scaling_matrix 0x00a40a93 (unknown): type=273 flags=has-payload
         hevc_decode_parameters 0x00a40a94 (unknown): type=274 flags=has-payload
               hevc_decode_mode 0x00a40a95 (menu)   : min=1 max=1
default=1 value=1
1: Frame-Based
                hevc_start_code 0x00a40a96 (menu)   : min=1 max=1
default=1 value=1
1: Annex B Start Code

> >
> >> Benjamin
> >>
> >>> adam
> >>>> Benjamin
> >>>>
> >>>>> adam
> >>>>>> adam
> >>>>>>> Regards,
> >>>>>>> Benjamin
> >>>>>>>
> >>>>>>>>> adam
> >>>>>>>>>> Thanks,
> >>>>>>>>>> Benjamin
> >>>>>>>>>>
> >>>>>>>>>>> Benjamin
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> Benjamin Gaignard (12):
> >>>>>>>>>>>        media: uapi: HEVC: Add missing fields in HEVC controls
> >>>>>>>>>>>        media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
> >>>>>>>>>>>          prefix
> >>>>>>>>>>>        media: uapi: HEVC: Add document uAPI structure
> >>>>>>>>>>>        media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS
> >>>>>>>>>>> as a
> >>>>>>>>>>>          dynamic array
> >>>>>>>>>>>        media: uapi: Move parsed HEVC pixel format out of staging
> >>>>>>>>>>>        media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> >>>>>>>>>>> control
> >>>>>>>>>>>        media: uapi: Move the HEVC stateless control type out of staging
> >>>>>>>>>>>        media: controls: Log HEVC stateless control in .std_log
> >>>>>>>>>>>        media: uapi: Create a dedicated header for Hantro control
> >>>>>>>>>>>        media: uapi: HEVC: fix padding in v4l2 control structures
> >>>>>>>>>>>        media: uapi: Change data_bit_offset definition
> >>>>>>>>>>>        media: uapi: move HEVC stateless controls out of staging
> >>>>>>>>>>>
> >>>>>>>>>>> Hans Verkuil (3):
> >>>>>>>>>>>        videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
> >>>>>>>>>>>        v4l2-ctrls: add support for dynamically allocated arrays.
> >>>>>>>>>>>        vivid: add dynamic array test control
> >>>>>>>>>>>
> >>>>>>>>>>>       .../userspace-api/media/drivers/hantro.rst    |   5 -
> >>>>>>>>>>>       .../media/v4l/ext-ctrls-codec-stateless.rst   | 833
> >>>>>>>>>>> ++++++++++++++++++
> >>>>>>>>>>>       .../media/v4l/ext-ctrls-codec.rst             | 780
> >>>>>>>>>>> ----------------
> >>>>>>>>>>>       .../media/v4l/pixfmt-compressed.rst           |   7 +-
> >>>>>>>>>>>       .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
> >>>>>>>>>>>       .../media/v4l/vidioc-queryctrl.rst            |   8 +
> >>>>>>>>>>>       .../media/videodev2.h.rst.exceptions          |   5 +
> >>>>>>>>>>>       .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
> >>>>>>>>>>>       drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
> >>>>>>>>>>>       drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
> >>>>>>>>>>>       drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
> >>>>>>>>>>>       drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
> >>>>>>>>>>>       drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
> >>>>>>>>>>>       drivers/staging/media/hantro/hantro_drv.c     |  27 +-
> >>>>>>>>>>>       drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
> >>>>>>>>>>>       drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
> >>>>>>>>>>>       .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
> >>>>>>>>>>>       .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
> >>>>>>>>>>>       include/media/hevc-ctrls.h                    | 250 ------
> >>>>>>>>>>>       include/media/v4l2-ctrls.h                    |  48 +-
> >>>>>>>>>>>       include/uapi/linux/hantro-media.h             |  19 +
> >>>>>>>>>>>       include/uapi/linux/v4l2-controls.h            | 439 +++++++++
> >>>>>>>>>>>       include/uapi/linux/videodev2.h                |  13 +
> >>>>>>>>>>>       23 files changed, 1697 insertions(+), 1170 deletions(-)
> >>>>>>>>>>>       delete mode 100644 include/media/hevc-ctrls.h
> >>>>>>>>>>>       create mode 100644 include/uapi/linux/hantro-media.h
> >>>>>>>>>>>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
  2022-04-06 12:46                         ` Adam Ford
@ 2022-04-06 12:50                           ` Benjamin Gaignard
  -1 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-04-06 12:50 UTC (permalink / raw)
  To: Adam Ford
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc


Le 06/04/2022 à 14:46, Adam Ford a écrit :
> On Wed, Apr 6, 2022 at 7:41 AM Benjamin Gaignard
> <benjamin.gaignard@collabora.com> wrote:
>>
>> Le 06/04/2022 à 14:28, Adam Ford a écrit :
>>> On Wed, Apr 6, 2022 at 1:56 AM Benjamin Gaignard
>>> <benjamin.gaignard@collabora.com> wrote:
>>>> Le 05/04/2022 à 23:27, Adam Ford a écrit :
>>>>> On Mon, Apr 4, 2022 at 10:56 AM Benjamin Gaignard
>>>>> <benjamin.gaignard@collabora.com> wrote:
>>>>>> Le 02/04/2022 à 18:59, Adam Ford a écrit :
>>>>>>> On Sat, Apr 2, 2022 at 11:22 AM Adam Ford <aford173@gmail.com> wrote:
>>>>>>>> On Fri, Apr 1, 2022 at 8:18 AM Benjamin Gaignard
>>>>>>>> <benjamin.gaignard@collabora.com> wrote:
>>>>>>>>> Le 31/03/2022 à 08:53, Benjamin Gaignard a écrit :
>>>>>>>>>> Le 30/03/2022 à 20:52, Adam Ford a écrit :
>>>>>>>>>>> On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
>>>>>>>>>>> <benjamin.gaignard@collabora.com> wrote:
>>>>>>>>>>>> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
>>>>>>>>>>>>> This series aims to make HEVC uapi stable and usable for hardware
>>>>>>>>>>>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
>>>>>>>>>>>>> and 2 out of the tree drivers (rkvdec and RPI).
>>>>>>>>>>>>>
>>>>>>>>>>>>> After the remarks done on version 2, I have completely reworked to
>>>>>>>>>>>>> patches
>>>>>>>>>>>>> split so changelogs are meaningless. I have also drop "RFC" from the
>>>>>>>>>>>>> titles.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Version 4:
>>>>>>>>>>>>> - Add num_entry_point_offsets field in  struct
>>>>>>>>>>>>> v4l2_ctrl_hevc_slice_params
>>>>>>>>>>>>> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
>>>>>>>>>>>>> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
>>>>>>>>>>>>> - Fix space/tab issue in kernel-doc
>>>>>>>>>>>>> - Add patch to change data_bit_offset definition
>>>>>>>>>>>>> - Fix hantro-media SPDX license
>>>>>>>>>>>>> - put controls under stateless section in v4l2-ctrls-defs.c
>>>>>>>>>>>>>
>>>>>>>>>>>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
>>>>>>>>>>>> Dear reviewers,
>>>>>>>>>>>>
>>>>>>>>>>>> This series is waiting for your feedback,
>>>>>>>>>>> I tried several times with the suggested repos for both the kernel and
>>>>>>>>>>> g-streamer without success getting Fluster to pass any tests on the
>>>>>>>>>>> imx8mq.  I can try again but I likely won't get to it until this
>>>>>>>>>>> weekend.  If I can get it working, I'll test both the 8mq and 8mm.
>>>>>>>>>> Thanks a lot for that.
>>>>>>>>>>
>>>>>>>>>> Benjamin
>>>>>>>>> Adam,
>>>>>>>>>
>>>>>>>>> You may need to check if h265parse and v4l2slh265dec are available on your board.
>>>>>>>> I ran gst-inspect to see what showed up with 265 in the name.
>>>>>>>>
>>>>>>>> # gst-inspect-1.0 |grep 265
>>>>>>>> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
>>>>>>>> rtp:  rtph265depay: RTP H265 depayloader
>>>>>>>> rtp:  rtph265pay: RTP H265 payloader
>>>>>>>> typefindfunctions: video/x-h265: h265, x265, 265
>>>>>>>> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
>>>>>>>> videoparsersbad:  h265parse: H.265 parser
>>>>>>>>
>>>>>>>> It appears I have both h265parse and v4l2slh265dec.
>>>>>>>>
>>>>>>>>> fluster check if v4l2slh265dec is working fine with this command line:
>>>>>>>>>
>>>>>>>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
>>>>>>>>>
>>>>>>>>> so if one of them is missing it won't work.
>>>>>>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
>>>>>>>> Setting pipeline to PAUSED ...
>>>>>>>> 0:00:00.098389938   526 0xaaaaf9d86ac0 ERROR     v4l2codecs-decoder
>>>>>>>> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
>>>>>>>> VIDIOC_G_EXT_CTRLS failed: Invalid argument
>>>>>>>> ERROR: from element
>>>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
>>>>>>>> report framing and start code method.
>>>>>>>> Additional debug info:
>>>>>>>> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
>>>>>>>> gst_v4l2_codec_h265_dec_open ():
>>>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>>>>>>>> gst_v4l2_decoder_get_controls() failed: Invalid argument
>>>>>>>> ERROR: pipeline doesn't want to preroll.
>>>>>>>> ERROR: from element
>>>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
>>>>>>>> initialize supporting library.
>>>>>>>> Additional debug info:
>>>>>>>> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
>>>>>>>> gst_video_decoder_change_state ():
>>>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>>>>>>>> Failed to open decoder
>>>>>>>> ERROR: pipeline doesn't want to preroll.
>>>>>>>> Failed to set pipeline to PAUSED.
>>>>>>>> Setting pipeline to NULL ...
>>>>>>>> Freeing pipeline ...
>>>>>>>>
>>>>>>>> Does this mean I have a wrong version of the kernel and/or incomplete patches?
>>>>>>> I double checked the branches.
>>>>>>>
>>>>>>> Kernel:
>>>>>>> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
>>>>>>> branch:  origin/HEVC_UAPI_V4
>>>>>>>
>>>>>>> Gstreamer:
>>>>>>> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
>>>>>>> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15
>>>>>>>
>>>>>>>
>>>>>>> I am still not able to run h.265/HEVC tests.
>>>>>> Hello Adam,
>>>>>>
>>>>>> I have updated the following branches with the versions I have used today:
>>>>>>
>>>>>> Kernel:
>>>>>> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
>>>>>> branch: origin/HEVC_UAPI_V5 only one change in documentation vs version 4 but rebased in v5.18-rc1
>>>>>>
>>>>>> Gstreamer:
>>>>>> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
>>>>>> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15 updated on the latest GST main branch
>>>>>>
>>>>>> I hope this will work fine this time.
>>>>> I wish I had better news for you:
>>>>>
>>>>> dmesg shows the hantro driver is being loaded:
>>>>>
>>>>> [   38.612243] hantro-vpu 38300000.video-codec: registered
>>>>> nxp,imx8mq-vpu-g1-dec as /dev/video0
>>>>> [   38.612618] hantro-vpu 38310000.video-codec: registered
>>>>> nxp,imx8mq-vpu-g2-dec as /dev/video1
>>>>>
>>>>> # gst-inspect-1.0 |grep 265
>>>>> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
>>>>> rtp:  rtph265depay: RTP H265 depayloader
>>>>> rtp:  rtph265pay: RTP H265 payloader
>>>>> typefindfunctions: video/x-h265: h265, x265, 265
>>>>> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
>>>>> videoparsersbad:  h265parse: H.265 parser
>>>>>
>>>>> Fluster reports:
>>>>> GStreamer-H.265-V4L2SL-Gst1.0: GStreamer H.265 V4L2SL decoder for
>>>>> GStreamer 1.0... ❌
>>>> Still the same error about non supported control ?
>>> # gst-lagst-launch-1.0 appsrc num-buffers=0 ! h265parse !
>>> v4l2slh265dec ! fakesink
>>> Setting pipeline to PAUSED ...
>>> 0:00:01.704385508   420 0xaaaaec0a76c0 ERROR     v4l2codecs-decoder
>>> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
>>> VIDIOC_G_EXT_CTRLS failed: Invalid argument
>>> ERROR: from element
>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
>>> report framing and start code method.
>>> Additional debug info:
>>> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
>>> gst_v4l2_codec_h265_dec_open ():
>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>>> gst_v4l2_decoder_get_controls() failed: Invalid argument
>>> ERROR: pipeline doesn't want to preroll.
>>> ERROR: from element
>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
>>> initialize supporting library.
>>> Additional debug info:
>>> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
>>> gst_video_decoder_change_state ():
>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>>> Failed to open decoder
>>> ERROR: pipeline doesn't want to preroll.
>>> Failed to set pipeline to PAUSED.
>>> Setting pipeline to NULL ...
>>> Freeing pipeline ...
>> What is the result of v4l2-ctl ?
>> Here I have:
>> v4l2-ctl --all -d 1
>> Driver Info:
>>          Driver name      : hantro-vpu
>>          Card type        : nxp,imx8mq-vpu-g2-dec
>>          Bus info         : platform: hantro-vpu
>>          Driver version   : 5.18.0
>>          Capabilities     : 0x84204000
>>                  Video Memory-to-Memory Multiplanar
>>                  Streaming
>>                  Extended Pix Format
>>                  Device Capabilities
>>          Device Caps      : 0x04204000
>>                  Video Memory-to-Memory Multiplanar
>>                  Streaming
>>                  Extended Pix Format
>> Media Driver Info:
>>          Driver name      : hantro-vpu
>>          Model            : hantro-vpu
>>          Serial           :
>>          Bus info         : platform: hantro-vpu
>>          Media version    : 5.18.0
>>          Hardware revision: 0x00000000 (0)
>>          Driver version   : 5.18.0
>> Interface Info:
>>          ID               : 0x0300000c
>>          Type             : V4L Video
>> Entity Info:
>>          ID               : 0x00000001 (1)
>>          Name             : nxp,imx8mq-vpu-g2-dec-source
>>          Function         : V4L2 I/O
>>          Pad 0x01000002   : 0: Source
>>            Link 0x02000008: to remote pad 0x1000004 of entity 'nxp,imx8mq-vpu-g2-dec-proc': Data, Enabled, Immutable
>> Priority: 2
>> Format Video Capture Multiplanar:
>>          Width/Height      : 48/48
>>          Pixel Format      : 'VT12' (Y/CbCr 4:2:0 (4x4 Linear))
>>          Field             : None
>>          Number of planes  : 1
>>          Flags             :
>>          Colorspace        : JPEG
>>          Transfer Function : Default
>>          YCbCr/HSV Encoding: Default
>>          Quantization      : Default
>>          Plane 0           :
>>             Bytes per Line : 48
>>             Size Image     : 3600
>> Format Video Output Multiplanar:
>>          Width/Height      : 48/48
>>          Pixel Format      : 'S265' (HEVC Parsed Slice Data)
>>          Field             : None
>>          Number of planes  : 1
>>          Flags             :
>>          Colorspace        : JPEG
>>          Transfer Function : Default
>>          YCbCr/HSV Encoding: Default
>>          Quantization      : Default
>>          Plane 0           :
>>             Bytes per Line : 0
>>             Size Image     : 4608
>>
>> User Controls
>>
>> hantro_hevc_slice_header_skip_b 0x00981a80 (int)    : min=0 max=256 step=1 default=0 value=0
>>
>> Codec Controls
>>
>>                      hevc_profile 0x00990b67 (menu)   : min=0 max=2 default=0 value=0
>>                                  0: Main
>>                                  1: Main Still Picture
>>                                  2: Main 10
>>                        hevc_level 0x00990b68 (menu)   : min=0 max=8 default=0 value=0
>>                                  0: 1
>>                                  1: 2
>>                                  2: 2.1
>>                                  3: 3
>>                                  4: 3.1
>>                                  5: 4
>>                                  6: 4.1
>>                                  7: 5
>>                                  8: 5.1
>>
>> Stateless Codec Controls
>>
>>       vp9_frame_decode_parameters 0x00a40a2c (unknown): type=261 flags=has-payload
>>         vp9_probabilities_updates 0x00a40a2d (unknown): type=260 flags=has-payload
>>       hevc_sequence_parameter_set 0x00a40a90 (unknown): type=270 flags=has-payload
>>        hevc_picture_parameter_set 0x00a40a91 (unknown): type=271 flags=has-payload
>>               hevc_scaling_matrix 0x00a40a93 (unknown): type=273 flags=has-payload
>>            hevc_decode_parameters 0x00a40a94 (unknown): type=274 flags=has-payload
>>                  hevc_decode_mode 0x00a40a95 (menu)   : min=1 max=1 default=1 value=1
>>                                  1: Frame-Based
>>                   hevc_start_code 0x00a40a96 (menu)   : min=1 max=1 default=1 value=1
>>                                  1: Annex B Start Code
>>
> Mine looks like:
>
> # v4l2-ctl --all -d 1
> Driver Info:
> Driver name      : hantro-vpu
> Card type        : nxp,imx8mq-vpu-g2-dec
> Bus info         : platform: hantro-vpu
> Driver version   : 5.18.0
> Capabilities     : 0x84204000
> Video Memory-to-Memory Multiplanar
> Streaming
> Extended Pix Format
> Device Capabilities
> Device Caps      : 0x04204000
> Video Memory-to-Memory Multiplanar
> Streaming
> Extended Pix Format
> Media Driver Info:
> Driver name      : hantro-vpu
> Model            : hantro-vpu
> Serial           :
> Bus info         : platform: hantro-vpu
> Media version    : 5.18.0
> Hardware revision: 0x00000000 (0)
> Driver version   : 5.18.0
> Interface Info:
> ID               : 0x0300000c
> Type             : V4L Video
> Entity Info:
> ID               : 0x00000001 (1)
> Name             : nxp,imx8mq-vpu-g2-dec-source
> Function         : V4L2 I/O
> Pad 0x01000002   : 0: Source
>    Link 0x02000008: to remote pad 0x1000004 of entity
> 'nxp,imx8mq-vpu-g2-dec-proc': Data, Enabled, Immutable
> Priority: 2
> Format Video Capture Multiplanar:
> Width/Height      : 48/48
> Pixel Format      : 'VT12' (Y/CbCr 4:2:0 (4x4 Linear))
> Field             : None
> Number of planes  : 1
> Flags             :
> Colorspace        : JPEG
> Transfer Function : Default
> YCbCr/HSV Encoding: Default
> Quantization      : Default
> Plane 0           :
>     Bytes per Line : 48
>     Size Image     : 3600
> Format Video Output Multiplanar:
> Width/Height      : 48/48
> Pixel Format      : 'S265' (HEVC Parsed Slice Data)
> Field             : None
> Number of planes  : 1
> Flags             :
> Colorspace        : JPEG
> Transfer Function : Default
> YCbCr/HSV Encoding: Default
> Quantization      : Default
> Plane 0           :
>     Bytes per Line : 0
>     Size Image     : 4608
>
> User Controls
>
> hantro_hevc_slice_header_skip_b 0x00981a80 (int)    : min=0 max=256
> step=1 default=0 value=0
>
> Codec Controls
>
>                     hevc_profile 0x00990b67 (menu)   : min=0 max=2
> default=0 value=0
> 0: Main
> 1: Main Still Picture
> 2: Main 10
>                       hevc_level 0x00990b68 (menu)   : min=0 max=8
> default=0 value=0
> 0: 1
> 1: 2
> 2: 2.1
> 3: 3
> 4: 3.1
> 5: 4
> 6: 4.1
> 7: 5
> 8: 5.1
>
> Stateless Codec Controls
>
>      vp9_frame_decode_parameters 0x00a40a2c (unknown): type=261 flags=has-payload
>        vp9_probabilities_updates 0x00a40a2d (unknown): type=260 flags=has-payload
>      hevc_sequence_parameter_set 0x00a40a90 (unknown): type=270 flags=has-payload
>       hevc_picture_parameter_set 0x00a40a91 (unknown): type=271 flags=has-payload
>              hevc_scaling_matrix 0x00a40a93 (unknown): type=273 flags=has-payload
>           hevc_decode_parameters 0x00a40a94 (unknown): type=274 flags=has-payload
>                 hevc_decode_mode 0x00a40a95 (menu)   : min=1 max=1
> default=1 value=1
> 1: Frame-Based
>                  hevc_start_code 0x00a40a96 (menu)   : min=1 max=1
> default=1 value=1
> 1: Annex B Start Code

It is the same so that suggest the issue is coming from GStreamer plugin.

>
>>>> Benjamin
>>>>
>>>>> adam
>>>>>> Benjamin
>>>>>>
>>>>>>> adam
>>>>>>>> adam
>>>>>>>>> Regards,
>>>>>>>>> Benjamin
>>>>>>>>>
>>>>>>>>>>> adam
>>>>>>>>>>>> Thanks,
>>>>>>>>>>>> Benjamin
>>>>>>>>>>>>
>>>>>>>>>>>>> Benjamin
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Benjamin Gaignard (12):
>>>>>>>>>>>>>         media: uapi: HEVC: Add missing fields in HEVC controls
>>>>>>>>>>>>>         media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
>>>>>>>>>>>>>           prefix
>>>>>>>>>>>>>         media: uapi: HEVC: Add document uAPI structure
>>>>>>>>>>>>>         media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS
>>>>>>>>>>>>> as a
>>>>>>>>>>>>>           dynamic array
>>>>>>>>>>>>>         media: uapi: Move parsed HEVC pixel format out of staging
>>>>>>>>>>>>>         media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
>>>>>>>>>>>>> control
>>>>>>>>>>>>>         media: uapi: Move the HEVC stateless control type out of staging
>>>>>>>>>>>>>         media: controls: Log HEVC stateless control in .std_log
>>>>>>>>>>>>>         media: uapi: Create a dedicated header for Hantro control
>>>>>>>>>>>>>         media: uapi: HEVC: fix padding in v4l2 control structures
>>>>>>>>>>>>>         media: uapi: Change data_bit_offset definition
>>>>>>>>>>>>>         media: uapi: move HEVC stateless controls out of staging
>>>>>>>>>>>>>
>>>>>>>>>>>>> Hans Verkuil (3):
>>>>>>>>>>>>>         videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
>>>>>>>>>>>>>         v4l2-ctrls: add support for dynamically allocated arrays.
>>>>>>>>>>>>>         vivid: add dynamic array test control
>>>>>>>>>>>>>
>>>>>>>>>>>>>        .../userspace-api/media/drivers/hantro.rst    |   5 -
>>>>>>>>>>>>>        .../media/v4l/ext-ctrls-codec-stateless.rst   | 833
>>>>>>>>>>>>> ++++++++++++++++++
>>>>>>>>>>>>>        .../media/v4l/ext-ctrls-codec.rst             | 780
>>>>>>>>>>>>> ----------------
>>>>>>>>>>>>>        .../media/v4l/pixfmt-compressed.rst           |   7 +-
>>>>>>>>>>>>>        .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
>>>>>>>>>>>>>        .../media/v4l/vidioc-queryctrl.rst            |   8 +
>>>>>>>>>>>>>        .../media/videodev2.h.rst.exceptions          |   5 +
>>>>>>>>>>>>>        .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
>>>>>>>>>>>>>        drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
>>>>>>>>>>>>>        drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
>>>>>>>>>>>>>        drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
>>>>>>>>>>>>>        drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
>>>>>>>>>>>>>        drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
>>>>>>>>>>>>>        drivers/staging/media/hantro/hantro_drv.c     |  27 +-
>>>>>>>>>>>>>        drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
>>>>>>>>>>>>>        drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
>>>>>>>>>>>>>        .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
>>>>>>>>>>>>>        .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
>>>>>>>>>>>>>        include/media/hevc-ctrls.h                    | 250 ------
>>>>>>>>>>>>>        include/media/v4l2-ctrls.h                    |  48 +-
>>>>>>>>>>>>>        include/uapi/linux/hantro-media.h             |  19 +
>>>>>>>>>>>>>        include/uapi/linux/v4l2-controls.h            | 439 +++++++++
>>>>>>>>>>>>>        include/uapi/linux/videodev2.h                |  13 +
>>>>>>>>>>>>>        23 files changed, 1697 insertions(+), 1170 deletions(-)
>>>>>>>>>>>>>        delete mode 100644 include/media/hevc-ctrls.h
>>>>>>>>>>>>>        create mode 100644 include/uapi/linux/hantro-media.h
>>>>>>>>>>>>>

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
@ 2022-04-06 12:50                           ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-04-06 12:50 UTC (permalink / raw)
  To: Adam Ford
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc


Le 06/04/2022 à 14:46, Adam Ford a écrit :
> On Wed, Apr 6, 2022 at 7:41 AM Benjamin Gaignard
> <benjamin.gaignard@collabora.com> wrote:
>>
>> Le 06/04/2022 à 14:28, Adam Ford a écrit :
>>> On Wed, Apr 6, 2022 at 1:56 AM Benjamin Gaignard
>>> <benjamin.gaignard@collabora.com> wrote:
>>>> Le 05/04/2022 à 23:27, Adam Ford a écrit :
>>>>> On Mon, Apr 4, 2022 at 10:56 AM Benjamin Gaignard
>>>>> <benjamin.gaignard@collabora.com> wrote:
>>>>>> Le 02/04/2022 à 18:59, Adam Ford a écrit :
>>>>>>> On Sat, Apr 2, 2022 at 11:22 AM Adam Ford <aford173@gmail.com> wrote:
>>>>>>>> On Fri, Apr 1, 2022 at 8:18 AM Benjamin Gaignard
>>>>>>>> <benjamin.gaignard@collabora.com> wrote:
>>>>>>>>> Le 31/03/2022 à 08:53, Benjamin Gaignard a écrit :
>>>>>>>>>> Le 30/03/2022 à 20:52, Adam Ford a écrit :
>>>>>>>>>>> On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
>>>>>>>>>>> <benjamin.gaignard@collabora.com> wrote:
>>>>>>>>>>>> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
>>>>>>>>>>>>> This series aims to make HEVC uapi stable and usable for hardware
>>>>>>>>>>>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
>>>>>>>>>>>>> and 2 out of the tree drivers (rkvdec and RPI).
>>>>>>>>>>>>>
>>>>>>>>>>>>> After the remarks done on version 2, I have completely reworked to
>>>>>>>>>>>>> patches
>>>>>>>>>>>>> split so changelogs are meaningless. I have also drop "RFC" from the
>>>>>>>>>>>>> titles.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Version 4:
>>>>>>>>>>>>> - Add num_entry_point_offsets field in  struct
>>>>>>>>>>>>> v4l2_ctrl_hevc_slice_params
>>>>>>>>>>>>> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
>>>>>>>>>>>>> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
>>>>>>>>>>>>> - Fix space/tab issue in kernel-doc
>>>>>>>>>>>>> - Add patch to change data_bit_offset definition
>>>>>>>>>>>>> - Fix hantro-media SPDX license
>>>>>>>>>>>>> - put controls under stateless section in v4l2-ctrls-defs.c
>>>>>>>>>>>>>
>>>>>>>>>>>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
>>>>>>>>>>>> Dear reviewers,
>>>>>>>>>>>>
>>>>>>>>>>>> This series is waiting for your feedback,
>>>>>>>>>>> I tried several times with the suggested repos for both the kernel and
>>>>>>>>>>> g-streamer without success getting Fluster to pass any tests on the
>>>>>>>>>>> imx8mq.  I can try again but I likely won't get to it until this
>>>>>>>>>>> weekend.  If I can get it working, I'll test both the 8mq and 8mm.
>>>>>>>>>> Thanks a lot for that.
>>>>>>>>>>
>>>>>>>>>> Benjamin
>>>>>>>>> Adam,
>>>>>>>>>
>>>>>>>>> You may need to check if h265parse and v4l2slh265dec are available on your board.
>>>>>>>> I ran gst-inspect to see what showed up with 265 in the name.
>>>>>>>>
>>>>>>>> # gst-inspect-1.0 |grep 265
>>>>>>>> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
>>>>>>>> rtp:  rtph265depay: RTP H265 depayloader
>>>>>>>> rtp:  rtph265pay: RTP H265 payloader
>>>>>>>> typefindfunctions: video/x-h265: h265, x265, 265
>>>>>>>> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
>>>>>>>> videoparsersbad:  h265parse: H.265 parser
>>>>>>>>
>>>>>>>> It appears I have both h265parse and v4l2slh265dec.
>>>>>>>>
>>>>>>>>> fluster check if v4l2slh265dec is working fine with this command line:
>>>>>>>>>
>>>>>>>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
>>>>>>>>>
>>>>>>>>> so if one of them is missing it won't work.
>>>>>>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
>>>>>>>> Setting pipeline to PAUSED ...
>>>>>>>> 0:00:00.098389938   526 0xaaaaf9d86ac0 ERROR     v4l2codecs-decoder
>>>>>>>> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
>>>>>>>> VIDIOC_G_EXT_CTRLS failed: Invalid argument
>>>>>>>> ERROR: from element
>>>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
>>>>>>>> report framing and start code method.
>>>>>>>> Additional debug info:
>>>>>>>> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
>>>>>>>> gst_v4l2_codec_h265_dec_open ():
>>>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>>>>>>>> gst_v4l2_decoder_get_controls() failed: Invalid argument
>>>>>>>> ERROR: pipeline doesn't want to preroll.
>>>>>>>> ERROR: from element
>>>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
>>>>>>>> initialize supporting library.
>>>>>>>> Additional debug info:
>>>>>>>> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
>>>>>>>> gst_video_decoder_change_state ():
>>>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>>>>>>>> Failed to open decoder
>>>>>>>> ERROR: pipeline doesn't want to preroll.
>>>>>>>> Failed to set pipeline to PAUSED.
>>>>>>>> Setting pipeline to NULL ...
>>>>>>>> Freeing pipeline ...
>>>>>>>>
>>>>>>>> Does this mean I have a wrong version of the kernel and/or incomplete patches?
>>>>>>> I double checked the branches.
>>>>>>>
>>>>>>> Kernel:
>>>>>>> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
>>>>>>> branch:  origin/HEVC_UAPI_V4
>>>>>>>
>>>>>>> Gstreamer:
>>>>>>> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
>>>>>>> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15
>>>>>>>
>>>>>>>
>>>>>>> I am still not able to run h.265/HEVC tests.
>>>>>> Hello Adam,
>>>>>>
>>>>>> I have updated the following branches with the versions I have used today:
>>>>>>
>>>>>> Kernel:
>>>>>> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
>>>>>> branch: origin/HEVC_UAPI_V5 only one change in documentation vs version 4 but rebased in v5.18-rc1
>>>>>>
>>>>>> Gstreamer:
>>>>>> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
>>>>>> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15 updated on the latest GST main branch
>>>>>>
>>>>>> I hope this will work fine this time.
>>>>> I wish I had better news for you:
>>>>>
>>>>> dmesg shows the hantro driver is being loaded:
>>>>>
>>>>> [   38.612243] hantro-vpu 38300000.video-codec: registered
>>>>> nxp,imx8mq-vpu-g1-dec as /dev/video0
>>>>> [   38.612618] hantro-vpu 38310000.video-codec: registered
>>>>> nxp,imx8mq-vpu-g2-dec as /dev/video1
>>>>>
>>>>> # gst-inspect-1.0 |grep 265
>>>>> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
>>>>> rtp:  rtph265depay: RTP H265 depayloader
>>>>> rtp:  rtph265pay: RTP H265 payloader
>>>>> typefindfunctions: video/x-h265: h265, x265, 265
>>>>> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
>>>>> videoparsersbad:  h265parse: H.265 parser
>>>>>
>>>>> Fluster reports:
>>>>> GStreamer-H.265-V4L2SL-Gst1.0: GStreamer H.265 V4L2SL decoder for
>>>>> GStreamer 1.0... ❌
>>>> Still the same error about non supported control ?
>>> # gst-lagst-launch-1.0 appsrc num-buffers=0 ! h265parse !
>>> v4l2slh265dec ! fakesink
>>> Setting pipeline to PAUSED ...
>>> 0:00:01.704385508   420 0xaaaaec0a76c0 ERROR     v4l2codecs-decoder
>>> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
>>> VIDIOC_G_EXT_CTRLS failed: Invalid argument
>>> ERROR: from element
>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
>>> report framing and start code method.
>>> Additional debug info:
>>> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
>>> gst_v4l2_codec_h265_dec_open ():
>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>>> gst_v4l2_decoder_get_controls() failed: Invalid argument
>>> ERROR: pipeline doesn't want to preroll.
>>> ERROR: from element
>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
>>> initialize supporting library.
>>> Additional debug info:
>>> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
>>> gst_video_decoder_change_state ():
>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>>> Failed to open decoder
>>> ERROR: pipeline doesn't want to preroll.
>>> Failed to set pipeline to PAUSED.
>>> Setting pipeline to NULL ...
>>> Freeing pipeline ...
>> What is the result of v4l2-ctl ?
>> Here I have:
>> v4l2-ctl --all -d 1
>> Driver Info:
>>          Driver name      : hantro-vpu
>>          Card type        : nxp,imx8mq-vpu-g2-dec
>>          Bus info         : platform: hantro-vpu
>>          Driver version   : 5.18.0
>>          Capabilities     : 0x84204000
>>                  Video Memory-to-Memory Multiplanar
>>                  Streaming
>>                  Extended Pix Format
>>                  Device Capabilities
>>          Device Caps      : 0x04204000
>>                  Video Memory-to-Memory Multiplanar
>>                  Streaming
>>                  Extended Pix Format
>> Media Driver Info:
>>          Driver name      : hantro-vpu
>>          Model            : hantro-vpu
>>          Serial           :
>>          Bus info         : platform: hantro-vpu
>>          Media version    : 5.18.0
>>          Hardware revision: 0x00000000 (0)
>>          Driver version   : 5.18.0
>> Interface Info:
>>          ID               : 0x0300000c
>>          Type             : V4L Video
>> Entity Info:
>>          ID               : 0x00000001 (1)
>>          Name             : nxp,imx8mq-vpu-g2-dec-source
>>          Function         : V4L2 I/O
>>          Pad 0x01000002   : 0: Source
>>            Link 0x02000008: to remote pad 0x1000004 of entity 'nxp,imx8mq-vpu-g2-dec-proc': Data, Enabled, Immutable
>> Priority: 2
>> Format Video Capture Multiplanar:
>>          Width/Height      : 48/48
>>          Pixel Format      : 'VT12' (Y/CbCr 4:2:0 (4x4 Linear))
>>          Field             : None
>>          Number of planes  : 1
>>          Flags             :
>>          Colorspace        : JPEG
>>          Transfer Function : Default
>>          YCbCr/HSV Encoding: Default
>>          Quantization      : Default
>>          Plane 0           :
>>             Bytes per Line : 48
>>             Size Image     : 3600
>> Format Video Output Multiplanar:
>>          Width/Height      : 48/48
>>          Pixel Format      : 'S265' (HEVC Parsed Slice Data)
>>          Field             : None
>>          Number of planes  : 1
>>          Flags             :
>>          Colorspace        : JPEG
>>          Transfer Function : Default
>>          YCbCr/HSV Encoding: Default
>>          Quantization      : Default
>>          Plane 0           :
>>             Bytes per Line : 0
>>             Size Image     : 4608
>>
>> User Controls
>>
>> hantro_hevc_slice_header_skip_b 0x00981a80 (int)    : min=0 max=256 step=1 default=0 value=0
>>
>> Codec Controls
>>
>>                      hevc_profile 0x00990b67 (menu)   : min=0 max=2 default=0 value=0
>>                                  0: Main
>>                                  1: Main Still Picture
>>                                  2: Main 10
>>                        hevc_level 0x00990b68 (menu)   : min=0 max=8 default=0 value=0
>>                                  0: 1
>>                                  1: 2
>>                                  2: 2.1
>>                                  3: 3
>>                                  4: 3.1
>>                                  5: 4
>>                                  6: 4.1
>>                                  7: 5
>>                                  8: 5.1
>>
>> Stateless Codec Controls
>>
>>       vp9_frame_decode_parameters 0x00a40a2c (unknown): type=261 flags=has-payload
>>         vp9_probabilities_updates 0x00a40a2d (unknown): type=260 flags=has-payload
>>       hevc_sequence_parameter_set 0x00a40a90 (unknown): type=270 flags=has-payload
>>        hevc_picture_parameter_set 0x00a40a91 (unknown): type=271 flags=has-payload
>>               hevc_scaling_matrix 0x00a40a93 (unknown): type=273 flags=has-payload
>>            hevc_decode_parameters 0x00a40a94 (unknown): type=274 flags=has-payload
>>                  hevc_decode_mode 0x00a40a95 (menu)   : min=1 max=1 default=1 value=1
>>                                  1: Frame-Based
>>                   hevc_start_code 0x00a40a96 (menu)   : min=1 max=1 default=1 value=1
>>                                  1: Annex B Start Code
>>
> Mine looks like:
>
> # v4l2-ctl --all -d 1
> Driver Info:
> Driver name      : hantro-vpu
> Card type        : nxp,imx8mq-vpu-g2-dec
> Bus info         : platform: hantro-vpu
> Driver version   : 5.18.0
> Capabilities     : 0x84204000
> Video Memory-to-Memory Multiplanar
> Streaming
> Extended Pix Format
> Device Capabilities
> Device Caps      : 0x04204000
> Video Memory-to-Memory Multiplanar
> Streaming
> Extended Pix Format
> Media Driver Info:
> Driver name      : hantro-vpu
> Model            : hantro-vpu
> Serial           :
> Bus info         : platform: hantro-vpu
> Media version    : 5.18.0
> Hardware revision: 0x00000000 (0)
> Driver version   : 5.18.0
> Interface Info:
> ID               : 0x0300000c
> Type             : V4L Video
> Entity Info:
> ID               : 0x00000001 (1)
> Name             : nxp,imx8mq-vpu-g2-dec-source
> Function         : V4L2 I/O
> Pad 0x01000002   : 0: Source
>    Link 0x02000008: to remote pad 0x1000004 of entity
> 'nxp,imx8mq-vpu-g2-dec-proc': Data, Enabled, Immutable
> Priority: 2
> Format Video Capture Multiplanar:
> Width/Height      : 48/48
> Pixel Format      : 'VT12' (Y/CbCr 4:2:0 (4x4 Linear))
> Field             : None
> Number of planes  : 1
> Flags             :
> Colorspace        : JPEG
> Transfer Function : Default
> YCbCr/HSV Encoding: Default
> Quantization      : Default
> Plane 0           :
>     Bytes per Line : 48
>     Size Image     : 3600
> Format Video Output Multiplanar:
> Width/Height      : 48/48
> Pixel Format      : 'S265' (HEVC Parsed Slice Data)
> Field             : None
> Number of planes  : 1
> Flags             :
> Colorspace        : JPEG
> Transfer Function : Default
> YCbCr/HSV Encoding: Default
> Quantization      : Default
> Plane 0           :
>     Bytes per Line : 0
>     Size Image     : 4608
>
> User Controls
>
> hantro_hevc_slice_header_skip_b 0x00981a80 (int)    : min=0 max=256
> step=1 default=0 value=0
>
> Codec Controls
>
>                     hevc_profile 0x00990b67 (menu)   : min=0 max=2
> default=0 value=0
> 0: Main
> 1: Main Still Picture
> 2: Main 10
>                       hevc_level 0x00990b68 (menu)   : min=0 max=8
> default=0 value=0
> 0: 1
> 1: 2
> 2: 2.1
> 3: 3
> 4: 3.1
> 5: 4
> 6: 4.1
> 7: 5
> 8: 5.1
>
> Stateless Codec Controls
>
>      vp9_frame_decode_parameters 0x00a40a2c (unknown): type=261 flags=has-payload
>        vp9_probabilities_updates 0x00a40a2d (unknown): type=260 flags=has-payload
>      hevc_sequence_parameter_set 0x00a40a90 (unknown): type=270 flags=has-payload
>       hevc_picture_parameter_set 0x00a40a91 (unknown): type=271 flags=has-payload
>              hevc_scaling_matrix 0x00a40a93 (unknown): type=273 flags=has-payload
>           hevc_decode_parameters 0x00a40a94 (unknown): type=274 flags=has-payload
>                 hevc_decode_mode 0x00a40a95 (menu)   : min=1 max=1
> default=1 value=1
> 1: Frame-Based
>                  hevc_start_code 0x00a40a96 (menu)   : min=1 max=1
> default=1 value=1
> 1: Annex B Start Code

It is the same so that suggest the issue is coming from GStreamer plugin.

>
>>>> Benjamin
>>>>
>>>>> adam
>>>>>> Benjamin
>>>>>>
>>>>>>> adam
>>>>>>>> adam
>>>>>>>>> Regards,
>>>>>>>>> Benjamin
>>>>>>>>>
>>>>>>>>>>> adam
>>>>>>>>>>>> Thanks,
>>>>>>>>>>>> Benjamin
>>>>>>>>>>>>
>>>>>>>>>>>>> Benjamin
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Benjamin Gaignard (12):
>>>>>>>>>>>>>         media: uapi: HEVC: Add missing fields in HEVC controls
>>>>>>>>>>>>>         media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
>>>>>>>>>>>>>           prefix
>>>>>>>>>>>>>         media: uapi: HEVC: Add document uAPI structure
>>>>>>>>>>>>>         media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS
>>>>>>>>>>>>> as a
>>>>>>>>>>>>>           dynamic array
>>>>>>>>>>>>>         media: uapi: Move parsed HEVC pixel format out of staging
>>>>>>>>>>>>>         media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
>>>>>>>>>>>>> control
>>>>>>>>>>>>>         media: uapi: Move the HEVC stateless control type out of staging
>>>>>>>>>>>>>         media: controls: Log HEVC stateless control in .std_log
>>>>>>>>>>>>>         media: uapi: Create a dedicated header for Hantro control
>>>>>>>>>>>>>         media: uapi: HEVC: fix padding in v4l2 control structures
>>>>>>>>>>>>>         media: uapi: Change data_bit_offset definition
>>>>>>>>>>>>>         media: uapi: move HEVC stateless controls out of staging
>>>>>>>>>>>>>
>>>>>>>>>>>>> Hans Verkuil (3):
>>>>>>>>>>>>>         videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
>>>>>>>>>>>>>         v4l2-ctrls: add support for dynamically allocated arrays.
>>>>>>>>>>>>>         vivid: add dynamic array test control
>>>>>>>>>>>>>
>>>>>>>>>>>>>        .../userspace-api/media/drivers/hantro.rst    |   5 -
>>>>>>>>>>>>>        .../media/v4l/ext-ctrls-codec-stateless.rst   | 833
>>>>>>>>>>>>> ++++++++++++++++++
>>>>>>>>>>>>>        .../media/v4l/ext-ctrls-codec.rst             | 780
>>>>>>>>>>>>> ----------------
>>>>>>>>>>>>>        .../media/v4l/pixfmt-compressed.rst           |   7 +-
>>>>>>>>>>>>>        .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
>>>>>>>>>>>>>        .../media/v4l/vidioc-queryctrl.rst            |   8 +
>>>>>>>>>>>>>        .../media/videodev2.h.rst.exceptions          |   5 +
>>>>>>>>>>>>>        .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
>>>>>>>>>>>>>        drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
>>>>>>>>>>>>>        drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
>>>>>>>>>>>>>        drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
>>>>>>>>>>>>>        drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
>>>>>>>>>>>>>        drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
>>>>>>>>>>>>>        drivers/staging/media/hantro/hantro_drv.c     |  27 +-
>>>>>>>>>>>>>        drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
>>>>>>>>>>>>>        drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
>>>>>>>>>>>>>        .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
>>>>>>>>>>>>>        .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
>>>>>>>>>>>>>        include/media/hevc-ctrls.h                    | 250 ------
>>>>>>>>>>>>>        include/media/v4l2-ctrls.h                    |  48 +-
>>>>>>>>>>>>>        include/uapi/linux/hantro-media.h             |  19 +
>>>>>>>>>>>>>        include/uapi/linux/v4l2-controls.h            | 439 +++++++++
>>>>>>>>>>>>>        include/uapi/linux/videodev2.h                |  13 +
>>>>>>>>>>>>>        23 files changed, 1697 insertions(+), 1170 deletions(-)
>>>>>>>>>>>>>        delete mode 100644 include/media/hevc-ctrls.h
>>>>>>>>>>>>>        create mode 100644 include/uapi/linux/hantro-media.h
>>>>>>>>>>>>>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
  2022-04-06 12:50                           ` Benjamin Gaignard
@ 2022-04-06 12:55                             ` Adam Ford
  -1 siblings, 0 replies; 81+ messages in thread
From: Adam Ford @ 2022-04-06 12:55 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc

On Wed, Apr 6, 2022 at 7:50 AM Benjamin Gaignard
<benjamin.gaignard@collabora.com> wrote:
>
>
> Le 06/04/2022 à 14:46, Adam Ford a écrit :
> > On Wed, Apr 6, 2022 at 7:41 AM Benjamin Gaignard
> > <benjamin.gaignard@collabora.com> wrote:
> >>
> >> Le 06/04/2022 à 14:28, Adam Ford a écrit :
> >>> On Wed, Apr 6, 2022 at 1:56 AM Benjamin Gaignard
> >>> <benjamin.gaignard@collabora.com> wrote:
> >>>> Le 05/04/2022 à 23:27, Adam Ford a écrit :
> >>>>> On Mon, Apr 4, 2022 at 10:56 AM Benjamin Gaignard
> >>>>> <benjamin.gaignard@collabora.com> wrote:
> >>>>>> Le 02/04/2022 à 18:59, Adam Ford a écrit :
> >>>>>>> On Sat, Apr 2, 2022 at 11:22 AM Adam Ford <aford173@gmail.com> wrote:
> >>>>>>>> On Fri, Apr 1, 2022 at 8:18 AM Benjamin Gaignard
> >>>>>>>> <benjamin.gaignard@collabora.com> wrote:
> >>>>>>>>> Le 31/03/2022 à 08:53, Benjamin Gaignard a écrit :
> >>>>>>>>>> Le 30/03/2022 à 20:52, Adam Ford a écrit :
> >>>>>>>>>>> On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
> >>>>>>>>>>> <benjamin.gaignard@collabora.com> wrote:
> >>>>>>>>>>>> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
> >>>>>>>>>>>>> This series aims to make HEVC uapi stable and usable for hardware
> >>>>>>>>>>>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
> >>>>>>>>>>>>> and 2 out of the tree drivers (rkvdec and RPI).
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> After the remarks done on version 2, I have completely reworked to
> >>>>>>>>>>>>> patches
> >>>>>>>>>>>>> split so changelogs are meaningless. I have also drop "RFC" from the
> >>>>>>>>>>>>> titles.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Version 4:
> >>>>>>>>>>>>> - Add num_entry_point_offsets field in  struct
> >>>>>>>>>>>>> v4l2_ctrl_hevc_slice_params
> >>>>>>>>>>>>> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
> >>>>>>>>>>>>> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> >>>>>>>>>>>>> - Fix space/tab issue in kernel-doc
> >>>>>>>>>>>>> - Add patch to change data_bit_offset definition
> >>>>>>>>>>>>> - Fix hantro-media SPDX license
> >>>>>>>>>>>>> - put controls under stateless section in v4l2-ctrls-defs.c
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
> >>>>>>>>>>>> Dear reviewers,
> >>>>>>>>>>>>
> >>>>>>>>>>>> This series is waiting for your feedback,
> >>>>>>>>>>> I tried several times with the suggested repos for both the kernel and
> >>>>>>>>>>> g-streamer without success getting Fluster to pass any tests on the
> >>>>>>>>>>> imx8mq.  I can try again but I likely won't get to it until this
> >>>>>>>>>>> weekend.  If I can get it working, I'll test both the 8mq and 8mm.
> >>>>>>>>>> Thanks a lot for that.
> >>>>>>>>>>
> >>>>>>>>>> Benjamin
> >>>>>>>>> Adam,
> >>>>>>>>>
> >>>>>>>>> You may need to check if h265parse and v4l2slh265dec are available on your board.
> >>>>>>>> I ran gst-inspect to see what showed up with 265 in the name.
> >>>>>>>>
> >>>>>>>> # gst-inspect-1.0 |grep 265
> >>>>>>>> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
> >>>>>>>> rtp:  rtph265depay: RTP H265 depayloader
> >>>>>>>> rtp:  rtph265pay: RTP H265 payloader
> >>>>>>>> typefindfunctions: video/x-h265: h265, x265, 265
> >>>>>>>> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
> >>>>>>>> videoparsersbad:  h265parse: H.265 parser
> >>>>>>>>
> >>>>>>>> It appears I have both h265parse and v4l2slh265dec.
> >>>>>>>>
> >>>>>>>>> fluster check if v4l2slh265dec is working fine with this command line:
> >>>>>>>>>
> >>>>>>>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
> >>>>>>>>>
> >>>>>>>>> so if one of them is missing it won't work.
> >>>>>>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
> >>>>>>>> Setting pipeline to PAUSED ...
> >>>>>>>> 0:00:00.098389938   526 0xaaaaf9d86ac0 ERROR     v4l2codecs-decoder
> >>>>>>>> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
> >>>>>>>> VIDIOC_G_EXT_CTRLS failed: Invalid argument
> >>>>>>>> ERROR: from element
> >>>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
> >>>>>>>> report framing and start code method.
> >>>>>>>> Additional debug info:
> >>>>>>>> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
> >>>>>>>> gst_v4l2_codec_h265_dec_open ():
> >>>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> >>>>>>>> gst_v4l2_decoder_get_controls() failed: Invalid argument
> >>>>>>>> ERROR: pipeline doesn't want to preroll.
> >>>>>>>> ERROR: from element
> >>>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
> >>>>>>>> initialize supporting library.
> >>>>>>>> Additional debug info:
> >>>>>>>> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
> >>>>>>>> gst_video_decoder_change_state ():
> >>>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> >>>>>>>> Failed to open decoder
> >>>>>>>> ERROR: pipeline doesn't want to preroll.
> >>>>>>>> Failed to set pipeline to PAUSED.
> >>>>>>>> Setting pipeline to NULL ...
> >>>>>>>> Freeing pipeline ...
> >>>>>>>>
> >>>>>>>> Does this mean I have a wrong version of the kernel and/or incomplete patches?
> >>>>>>> I double checked the branches.
> >>>>>>>
> >>>>>>> Kernel:
> >>>>>>> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
> >>>>>>> branch:  origin/HEVC_UAPI_V4
> >>>>>>>
> >>>>>>> Gstreamer:
> >>>>>>> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
> >>>>>>> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15
> >>>>>>>
> >>>>>>>
> >>>>>>> I am still not able to run h.265/HEVC tests.
> >>>>>> Hello Adam,
> >>>>>>
> >>>>>> I have updated the following branches with the versions I have used today:
> >>>>>>
> >>>>>> Kernel:
> >>>>>> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
> >>>>>> branch: origin/HEVC_UAPI_V5 only one change in documentation vs version 4 but rebased in v5.18-rc1
> >>>>>>
> >>>>>> Gstreamer:
> >>>>>> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
> >>>>>> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15 updated on the latest GST main branch
> >>>>>>
> >>>>>> I hope this will work fine this time.
> >>>>> I wish I had better news for you:
> >>>>>
> >>>>> dmesg shows the hantro driver is being loaded:
> >>>>>
> >>>>> [   38.612243] hantro-vpu 38300000.video-codec: registered
> >>>>> nxp,imx8mq-vpu-g1-dec as /dev/video0
> >>>>> [   38.612618] hantro-vpu 38310000.video-codec: registered
> >>>>> nxp,imx8mq-vpu-g2-dec as /dev/video1
> >>>>>
> >>>>> # gst-inspect-1.0 |grep 265
> >>>>> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
> >>>>> rtp:  rtph265depay: RTP H265 depayloader
> >>>>> rtp:  rtph265pay: RTP H265 payloader
> >>>>> typefindfunctions: video/x-h265: h265, x265, 265
> >>>>> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
> >>>>> videoparsersbad:  h265parse: H.265 parser
> >>>>>
> >>>>> Fluster reports:
> >>>>> GStreamer-H.265-V4L2SL-Gst1.0: GStreamer H.265 V4L2SL decoder for
> >>>>> GStreamer 1.0... ❌
> >>>> Still the same error about non supported control ?
> >>> # gst-lagst-launch-1.0 appsrc num-buffers=0 ! h265parse !
> >>> v4l2slh265dec ! fakesink
> >>> Setting pipeline to PAUSED ...
> >>> 0:00:01.704385508   420 0xaaaaec0a76c0 ERROR     v4l2codecs-decoder
> >>> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
> >>> VIDIOC_G_EXT_CTRLS failed: Invalid argument
> >>> ERROR: from element
> >>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
> >>> report framing and start code method.
> >>> Additional debug info:
> >>> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
> >>> gst_v4l2_codec_h265_dec_open ():
> >>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> >>> gst_v4l2_decoder_get_controls() failed: Invalid argument
> >>> ERROR: pipeline doesn't want to preroll.
> >>> ERROR: from element
> >>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
> >>> initialize supporting library.
> >>> Additional debug info:
> >>> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
> >>> gst_video_decoder_change_state ():
> >>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> >>> Failed to open decoder
> >>> ERROR: pipeline doesn't want to preroll.
> >>> Failed to set pipeline to PAUSED.
> >>> Setting pipeline to NULL ...
> >>> Freeing pipeline ...
> >> What is the result of v4l2-ctl ?
> >> Here I have:
> >> v4l2-ctl --all -d 1
> >> Driver Info:
> >>          Driver name      : hantro-vpu
> >>          Card type        : nxp,imx8mq-vpu-g2-dec
> >>          Bus info         : platform: hantro-vpu
> >>          Driver version   : 5.18.0
> >>          Capabilities     : 0x84204000
> >>                  Video Memory-to-Memory Multiplanar
> >>                  Streaming
> >>                  Extended Pix Format
> >>                  Device Capabilities
> >>          Device Caps      : 0x04204000
> >>                  Video Memory-to-Memory Multiplanar
> >>                  Streaming
> >>                  Extended Pix Format
> >> Media Driver Info:
> >>          Driver name      : hantro-vpu
> >>          Model            : hantro-vpu
> >>          Serial           :
> >>          Bus info         : platform: hantro-vpu
> >>          Media version    : 5.18.0
> >>          Hardware revision: 0x00000000 (0)
> >>          Driver version   : 5.18.0
> >> Interface Info:
> >>          ID               : 0x0300000c
> >>          Type             : V4L Video
> >> Entity Info:
> >>          ID               : 0x00000001 (1)
> >>          Name             : nxp,imx8mq-vpu-g2-dec-source
> >>          Function         : V4L2 I/O
> >>          Pad 0x01000002   : 0: Source
> >>            Link 0x02000008: to remote pad 0x1000004 of entity 'nxp,imx8mq-vpu-g2-dec-proc': Data, Enabled, Immutable
> >> Priority: 2
> >> Format Video Capture Multiplanar:
> >>          Width/Height      : 48/48
> >>          Pixel Format      : 'VT12' (Y/CbCr 4:2:0 (4x4 Linear))
> >>          Field             : None
> >>          Number of planes  : 1
> >>          Flags             :
> >>          Colorspace        : JPEG
> >>          Transfer Function : Default
> >>          YCbCr/HSV Encoding: Default
> >>          Quantization      : Default
> >>          Plane 0           :
> >>             Bytes per Line : 48
> >>             Size Image     : 3600
> >> Format Video Output Multiplanar:
> >>          Width/Height      : 48/48
> >>          Pixel Format      : 'S265' (HEVC Parsed Slice Data)
> >>          Field             : None
> >>          Number of planes  : 1
> >>          Flags             :
> >>          Colorspace        : JPEG
> >>          Transfer Function : Default
> >>          YCbCr/HSV Encoding: Default
> >>          Quantization      : Default
> >>          Plane 0           :
> >>             Bytes per Line : 0
> >>             Size Image     : 4608
> >>
> >> User Controls
> >>
> >> hantro_hevc_slice_header_skip_b 0x00981a80 (int)    : min=0 max=256 step=1 default=0 value=0
> >>
> >> Codec Controls
> >>
> >>                      hevc_profile 0x00990b67 (menu)   : min=0 max=2 default=0 value=0
> >>                                  0: Main
> >>                                  1: Main Still Picture
> >>                                  2: Main 10
> >>                        hevc_level 0x00990b68 (menu)   : min=0 max=8 default=0 value=0
> >>                                  0: 1
> >>                                  1: 2
> >>                                  2: 2.1
> >>                                  3: 3
> >>                                  4: 3.1
> >>                                  5: 4
> >>                                  6: 4.1
> >>                                  7: 5
> >>                                  8: 5.1
> >>
> >> Stateless Codec Controls
> >>
> >>       vp9_frame_decode_parameters 0x00a40a2c (unknown): type=261 flags=has-payload
> >>         vp9_probabilities_updates 0x00a40a2d (unknown): type=260 flags=has-payload
> >>       hevc_sequence_parameter_set 0x00a40a90 (unknown): type=270 flags=has-payload
> >>        hevc_picture_parameter_set 0x00a40a91 (unknown): type=271 flags=has-payload
> >>               hevc_scaling_matrix 0x00a40a93 (unknown): type=273 flags=has-payload
> >>            hevc_decode_parameters 0x00a40a94 (unknown): type=274 flags=has-payload
> >>                  hevc_decode_mode 0x00a40a95 (menu)   : min=1 max=1 default=1 value=1
> >>                                  1: Frame-Based
> >>                   hevc_start_code 0x00a40a96 (menu)   : min=1 max=1 default=1 value=1
> >>                                  1: Annex B Start Code
> >>
> > Mine looks like:
> >
> > # v4l2-ctl --all -d 1
> > Driver Info:
> > Driver name      : hantro-vpu
> > Card type        : nxp,imx8mq-vpu-g2-dec
> > Bus info         : platform: hantro-vpu
> > Driver version   : 5.18.0
> > Capabilities     : 0x84204000
> > Video Memory-to-Memory Multiplanar
> > Streaming
> > Extended Pix Format
> > Device Capabilities
> > Device Caps      : 0x04204000
> > Video Memory-to-Memory Multiplanar
> > Streaming
> > Extended Pix Format
> > Media Driver Info:
> > Driver name      : hantro-vpu
> > Model            : hantro-vpu
> > Serial           :
> > Bus info         : platform: hantro-vpu
> > Media version    : 5.18.0
> > Hardware revision: 0x00000000 (0)
> > Driver version   : 5.18.0
> > Interface Info:
> > ID               : 0x0300000c
> > Type             : V4L Video
> > Entity Info:
> > ID               : 0x00000001 (1)
> > Name             : nxp,imx8mq-vpu-g2-dec-source
> > Function         : V4L2 I/O
> > Pad 0x01000002   : 0: Source
> >    Link 0x02000008: to remote pad 0x1000004 of entity
> > 'nxp,imx8mq-vpu-g2-dec-proc': Data, Enabled, Immutable
> > Priority: 2
> > Format Video Capture Multiplanar:
> > Width/Height      : 48/48
> > Pixel Format      : 'VT12' (Y/CbCr 4:2:0 (4x4 Linear))
> > Field             : None
> > Number of planes  : 1
> > Flags             :
> > Colorspace        : JPEG
> > Transfer Function : Default
> > YCbCr/HSV Encoding: Default
> > Quantization      : Default
> > Plane 0           :
> >     Bytes per Line : 48
> >     Size Image     : 3600
> > Format Video Output Multiplanar:
> > Width/Height      : 48/48
> > Pixel Format      : 'S265' (HEVC Parsed Slice Data)
> > Field             : None
> > Number of planes  : 1
> > Flags             :
> > Colorspace        : JPEG
> > Transfer Function : Default
> > YCbCr/HSV Encoding: Default
> > Quantization      : Default
> > Plane 0           :
> >     Bytes per Line : 0
> >     Size Image     : 4608
> >
> > User Controls
> >
> > hantro_hevc_slice_header_skip_b 0x00981a80 (int)    : min=0 max=256
> > step=1 default=0 value=0
> >
> > Codec Controls
> >
> >                     hevc_profile 0x00990b67 (menu)   : min=0 max=2
> > default=0 value=0
> > 0: Main
> > 1: Main Still Picture
> > 2: Main 10
> >                       hevc_level 0x00990b68 (menu)   : min=0 max=8
> > default=0 value=0
> > 0: 1
> > 1: 2
> > 2: 2.1
> > 3: 3
> > 4: 3.1
> > 5: 4
> > 6: 4.1
> > 7: 5
> > 8: 5.1
> >
> > Stateless Codec Controls
> >
> >      vp9_frame_decode_parameters 0x00a40a2c (unknown): type=261 flags=has-payload
> >        vp9_probabilities_updates 0x00a40a2d (unknown): type=260 flags=has-payload
> >      hevc_sequence_parameter_set 0x00a40a90 (unknown): type=270 flags=has-payload
> >       hevc_picture_parameter_set 0x00a40a91 (unknown): type=271 flags=has-payload
> >              hevc_scaling_matrix 0x00a40a93 (unknown): type=273 flags=has-payload
> >           hevc_decode_parameters 0x00a40a94 (unknown): type=274 flags=has-payload
> >                 hevc_decode_mode 0x00a40a95 (menu)   : min=1 max=1
> > default=1 value=1
> > 1: Frame-Based
> >                  hevc_start_code 0x00a40a96 (menu)   : min=1 max=1
> > default=1 value=1
> > 1: Annex B Start Code
>
> It is the same so that suggest the issue is coming from GStreamer plugin.

Do I need to build Gtreamer in a special way?  I just invoked  meson
then ninja, but I didn't pass any additional parameters other than the
build directory name.

adam
>
> >
> >>>> Benjamin
> >>>>
> >>>>> adam
> >>>>>> Benjamin
> >>>>>>
> >>>>>>> adam
> >>>>>>>> adam
> >>>>>>>>> Regards,
> >>>>>>>>> Benjamin
> >>>>>>>>>
> >>>>>>>>>>> adam
> >>>>>>>>>>>> Thanks,
> >>>>>>>>>>>> Benjamin
> >>>>>>>>>>>>
> >>>>>>>>>>>>> Benjamin
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Benjamin Gaignard (12):
> >>>>>>>>>>>>>         media: uapi: HEVC: Add missing fields in HEVC controls
> >>>>>>>>>>>>>         media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
> >>>>>>>>>>>>>           prefix
> >>>>>>>>>>>>>         media: uapi: HEVC: Add document uAPI structure
> >>>>>>>>>>>>>         media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS
> >>>>>>>>>>>>> as a
> >>>>>>>>>>>>>           dynamic array
> >>>>>>>>>>>>>         media: uapi: Move parsed HEVC pixel format out of staging
> >>>>>>>>>>>>>         media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> >>>>>>>>>>>>> control
> >>>>>>>>>>>>>         media: uapi: Move the HEVC stateless control type out of staging
> >>>>>>>>>>>>>         media: controls: Log HEVC stateless control in .std_log
> >>>>>>>>>>>>>         media: uapi: Create a dedicated header for Hantro control
> >>>>>>>>>>>>>         media: uapi: HEVC: fix padding in v4l2 control structures
> >>>>>>>>>>>>>         media: uapi: Change data_bit_offset definition
> >>>>>>>>>>>>>         media: uapi: move HEVC stateless controls out of staging
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Hans Verkuil (3):
> >>>>>>>>>>>>>         videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
> >>>>>>>>>>>>>         v4l2-ctrls: add support for dynamically allocated arrays.
> >>>>>>>>>>>>>         vivid: add dynamic array test control
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>        .../userspace-api/media/drivers/hantro.rst    |   5 -
> >>>>>>>>>>>>>        .../media/v4l/ext-ctrls-codec-stateless.rst   | 833
> >>>>>>>>>>>>> ++++++++++++++++++
> >>>>>>>>>>>>>        .../media/v4l/ext-ctrls-codec.rst             | 780
> >>>>>>>>>>>>> ----------------
> >>>>>>>>>>>>>        .../media/v4l/pixfmt-compressed.rst           |   7 +-
> >>>>>>>>>>>>>        .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
> >>>>>>>>>>>>>        .../media/v4l/vidioc-queryctrl.rst            |   8 +
> >>>>>>>>>>>>>        .../media/videodev2.h.rst.exceptions          |   5 +
> >>>>>>>>>>>>>        .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
> >>>>>>>>>>>>>        drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
> >>>>>>>>>>>>>        drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
> >>>>>>>>>>>>>        drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
> >>>>>>>>>>>>>        drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
> >>>>>>>>>>>>>        drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
> >>>>>>>>>>>>>        drivers/staging/media/hantro/hantro_drv.c     |  27 +-
> >>>>>>>>>>>>>        drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
> >>>>>>>>>>>>>        drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
> >>>>>>>>>>>>>        .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
> >>>>>>>>>>>>>        .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
> >>>>>>>>>>>>>        include/media/hevc-ctrls.h                    | 250 ------
> >>>>>>>>>>>>>        include/media/v4l2-ctrls.h                    |  48 +-
> >>>>>>>>>>>>>        include/uapi/linux/hantro-media.h             |  19 +
> >>>>>>>>>>>>>        include/uapi/linux/v4l2-controls.h            | 439 +++++++++
> >>>>>>>>>>>>>        include/uapi/linux/videodev2.h                |  13 +
> >>>>>>>>>>>>>        23 files changed, 1697 insertions(+), 1170 deletions(-)
> >>>>>>>>>>>>>        delete mode 100644 include/media/hevc-ctrls.h
> >>>>>>>>>>>>>        create mode 100644 include/uapi/linux/hantro-media.h
> >>>>>>>>>>>>>

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
@ 2022-04-06 12:55                             ` Adam Ford
  0 siblings, 0 replies; 81+ messages in thread
From: Adam Ford @ 2022-04-06 12:55 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc

On Wed, Apr 6, 2022 at 7:50 AM Benjamin Gaignard
<benjamin.gaignard@collabora.com> wrote:
>
>
> Le 06/04/2022 à 14:46, Adam Ford a écrit :
> > On Wed, Apr 6, 2022 at 7:41 AM Benjamin Gaignard
> > <benjamin.gaignard@collabora.com> wrote:
> >>
> >> Le 06/04/2022 à 14:28, Adam Ford a écrit :
> >>> On Wed, Apr 6, 2022 at 1:56 AM Benjamin Gaignard
> >>> <benjamin.gaignard@collabora.com> wrote:
> >>>> Le 05/04/2022 à 23:27, Adam Ford a écrit :
> >>>>> On Mon, Apr 4, 2022 at 10:56 AM Benjamin Gaignard
> >>>>> <benjamin.gaignard@collabora.com> wrote:
> >>>>>> Le 02/04/2022 à 18:59, Adam Ford a écrit :
> >>>>>>> On Sat, Apr 2, 2022 at 11:22 AM Adam Ford <aford173@gmail.com> wrote:
> >>>>>>>> On Fri, Apr 1, 2022 at 8:18 AM Benjamin Gaignard
> >>>>>>>> <benjamin.gaignard@collabora.com> wrote:
> >>>>>>>>> Le 31/03/2022 à 08:53, Benjamin Gaignard a écrit :
> >>>>>>>>>> Le 30/03/2022 à 20:52, Adam Ford a écrit :
> >>>>>>>>>>> On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
> >>>>>>>>>>> <benjamin.gaignard@collabora.com> wrote:
> >>>>>>>>>>>> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
> >>>>>>>>>>>>> This series aims to make HEVC uapi stable and usable for hardware
> >>>>>>>>>>>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
> >>>>>>>>>>>>> and 2 out of the tree drivers (rkvdec and RPI).
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> After the remarks done on version 2, I have completely reworked to
> >>>>>>>>>>>>> patches
> >>>>>>>>>>>>> split so changelogs are meaningless. I have also drop "RFC" from the
> >>>>>>>>>>>>> titles.
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Version 4:
> >>>>>>>>>>>>> - Add num_entry_point_offsets field in  struct
> >>>>>>>>>>>>> v4l2_ctrl_hevc_slice_params
> >>>>>>>>>>>>> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
> >>>>>>>>>>>>> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> >>>>>>>>>>>>> - Fix space/tab issue in kernel-doc
> >>>>>>>>>>>>> - Add patch to change data_bit_offset definition
> >>>>>>>>>>>>> - Fix hantro-media SPDX license
> >>>>>>>>>>>>> - put controls under stateless section in v4l2-ctrls-defs.c
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
> >>>>>>>>>>>> Dear reviewers,
> >>>>>>>>>>>>
> >>>>>>>>>>>> This series is waiting for your feedback,
> >>>>>>>>>>> I tried several times with the suggested repos for both the kernel and
> >>>>>>>>>>> g-streamer without success getting Fluster to pass any tests on the
> >>>>>>>>>>> imx8mq.  I can try again but I likely won't get to it until this
> >>>>>>>>>>> weekend.  If I can get it working, I'll test both the 8mq and 8mm.
> >>>>>>>>>> Thanks a lot for that.
> >>>>>>>>>>
> >>>>>>>>>> Benjamin
> >>>>>>>>> Adam,
> >>>>>>>>>
> >>>>>>>>> You may need to check if h265parse and v4l2slh265dec are available on your board.
> >>>>>>>> I ran gst-inspect to see what showed up with 265 in the name.
> >>>>>>>>
> >>>>>>>> # gst-inspect-1.0 |grep 265
> >>>>>>>> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
> >>>>>>>> rtp:  rtph265depay: RTP H265 depayloader
> >>>>>>>> rtp:  rtph265pay: RTP H265 payloader
> >>>>>>>> typefindfunctions: video/x-h265: h265, x265, 265
> >>>>>>>> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
> >>>>>>>> videoparsersbad:  h265parse: H.265 parser
> >>>>>>>>
> >>>>>>>> It appears I have both h265parse and v4l2slh265dec.
> >>>>>>>>
> >>>>>>>>> fluster check if v4l2slh265dec is working fine with this command line:
> >>>>>>>>>
> >>>>>>>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
> >>>>>>>>>
> >>>>>>>>> so if one of them is missing it won't work.
> >>>>>>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
> >>>>>>>> Setting pipeline to PAUSED ...
> >>>>>>>> 0:00:00.098389938   526 0xaaaaf9d86ac0 ERROR     v4l2codecs-decoder
> >>>>>>>> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
> >>>>>>>> VIDIOC_G_EXT_CTRLS failed: Invalid argument
> >>>>>>>> ERROR: from element
> >>>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
> >>>>>>>> report framing and start code method.
> >>>>>>>> Additional debug info:
> >>>>>>>> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
> >>>>>>>> gst_v4l2_codec_h265_dec_open ():
> >>>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> >>>>>>>> gst_v4l2_decoder_get_controls() failed: Invalid argument
> >>>>>>>> ERROR: pipeline doesn't want to preroll.
> >>>>>>>> ERROR: from element
> >>>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
> >>>>>>>> initialize supporting library.
> >>>>>>>> Additional debug info:
> >>>>>>>> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
> >>>>>>>> gst_video_decoder_change_state ():
> >>>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> >>>>>>>> Failed to open decoder
> >>>>>>>> ERROR: pipeline doesn't want to preroll.
> >>>>>>>> Failed to set pipeline to PAUSED.
> >>>>>>>> Setting pipeline to NULL ...
> >>>>>>>> Freeing pipeline ...
> >>>>>>>>
> >>>>>>>> Does this mean I have a wrong version of the kernel and/or incomplete patches?
> >>>>>>> I double checked the branches.
> >>>>>>>
> >>>>>>> Kernel:
> >>>>>>> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
> >>>>>>> branch:  origin/HEVC_UAPI_V4
> >>>>>>>
> >>>>>>> Gstreamer:
> >>>>>>> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
> >>>>>>> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15
> >>>>>>>
> >>>>>>>
> >>>>>>> I am still not able to run h.265/HEVC tests.
> >>>>>> Hello Adam,
> >>>>>>
> >>>>>> I have updated the following branches with the versions I have used today:
> >>>>>>
> >>>>>> Kernel:
> >>>>>> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
> >>>>>> branch: origin/HEVC_UAPI_V5 only one change in documentation vs version 4 but rebased in v5.18-rc1
> >>>>>>
> >>>>>> Gstreamer:
> >>>>>> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
> >>>>>> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15 updated on the latest GST main branch
> >>>>>>
> >>>>>> I hope this will work fine this time.
> >>>>> I wish I had better news for you:
> >>>>>
> >>>>> dmesg shows the hantro driver is being loaded:
> >>>>>
> >>>>> [   38.612243] hantro-vpu 38300000.video-codec: registered
> >>>>> nxp,imx8mq-vpu-g1-dec as /dev/video0
> >>>>> [   38.612618] hantro-vpu 38310000.video-codec: registered
> >>>>> nxp,imx8mq-vpu-g2-dec as /dev/video1
> >>>>>
> >>>>> # gst-inspect-1.0 |grep 265
> >>>>> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
> >>>>> rtp:  rtph265depay: RTP H265 depayloader
> >>>>> rtp:  rtph265pay: RTP H265 payloader
> >>>>> typefindfunctions: video/x-h265: h265, x265, 265
> >>>>> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
> >>>>> videoparsersbad:  h265parse: H.265 parser
> >>>>>
> >>>>> Fluster reports:
> >>>>> GStreamer-H.265-V4L2SL-Gst1.0: GStreamer H.265 V4L2SL decoder for
> >>>>> GStreamer 1.0... ❌
> >>>> Still the same error about non supported control ?
> >>> # gst-lagst-launch-1.0 appsrc num-buffers=0 ! h265parse !
> >>> v4l2slh265dec ! fakesink
> >>> Setting pipeline to PAUSED ...
> >>> 0:00:01.704385508   420 0xaaaaec0a76c0 ERROR     v4l2codecs-decoder
> >>> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
> >>> VIDIOC_G_EXT_CTRLS failed: Invalid argument
> >>> ERROR: from element
> >>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
> >>> report framing and start code method.
> >>> Additional debug info:
> >>> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
> >>> gst_v4l2_codec_h265_dec_open ():
> >>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> >>> gst_v4l2_decoder_get_controls() failed: Invalid argument
> >>> ERROR: pipeline doesn't want to preroll.
> >>> ERROR: from element
> >>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
> >>> initialize supporting library.
> >>> Additional debug info:
> >>> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
> >>> gst_video_decoder_change_state ():
> >>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
> >>> Failed to open decoder
> >>> ERROR: pipeline doesn't want to preroll.
> >>> Failed to set pipeline to PAUSED.
> >>> Setting pipeline to NULL ...
> >>> Freeing pipeline ...
> >> What is the result of v4l2-ctl ?
> >> Here I have:
> >> v4l2-ctl --all -d 1
> >> Driver Info:
> >>          Driver name      : hantro-vpu
> >>          Card type        : nxp,imx8mq-vpu-g2-dec
> >>          Bus info         : platform: hantro-vpu
> >>          Driver version   : 5.18.0
> >>          Capabilities     : 0x84204000
> >>                  Video Memory-to-Memory Multiplanar
> >>                  Streaming
> >>                  Extended Pix Format
> >>                  Device Capabilities
> >>          Device Caps      : 0x04204000
> >>                  Video Memory-to-Memory Multiplanar
> >>                  Streaming
> >>                  Extended Pix Format
> >> Media Driver Info:
> >>          Driver name      : hantro-vpu
> >>          Model            : hantro-vpu
> >>          Serial           :
> >>          Bus info         : platform: hantro-vpu
> >>          Media version    : 5.18.0
> >>          Hardware revision: 0x00000000 (0)
> >>          Driver version   : 5.18.0
> >> Interface Info:
> >>          ID               : 0x0300000c
> >>          Type             : V4L Video
> >> Entity Info:
> >>          ID               : 0x00000001 (1)
> >>          Name             : nxp,imx8mq-vpu-g2-dec-source
> >>          Function         : V4L2 I/O
> >>          Pad 0x01000002   : 0: Source
> >>            Link 0x02000008: to remote pad 0x1000004 of entity 'nxp,imx8mq-vpu-g2-dec-proc': Data, Enabled, Immutable
> >> Priority: 2
> >> Format Video Capture Multiplanar:
> >>          Width/Height      : 48/48
> >>          Pixel Format      : 'VT12' (Y/CbCr 4:2:0 (4x4 Linear))
> >>          Field             : None
> >>          Number of planes  : 1
> >>          Flags             :
> >>          Colorspace        : JPEG
> >>          Transfer Function : Default
> >>          YCbCr/HSV Encoding: Default
> >>          Quantization      : Default
> >>          Plane 0           :
> >>             Bytes per Line : 48
> >>             Size Image     : 3600
> >> Format Video Output Multiplanar:
> >>          Width/Height      : 48/48
> >>          Pixel Format      : 'S265' (HEVC Parsed Slice Data)
> >>          Field             : None
> >>          Number of planes  : 1
> >>          Flags             :
> >>          Colorspace        : JPEG
> >>          Transfer Function : Default
> >>          YCbCr/HSV Encoding: Default
> >>          Quantization      : Default
> >>          Plane 0           :
> >>             Bytes per Line : 0
> >>             Size Image     : 4608
> >>
> >> User Controls
> >>
> >> hantro_hevc_slice_header_skip_b 0x00981a80 (int)    : min=0 max=256 step=1 default=0 value=0
> >>
> >> Codec Controls
> >>
> >>                      hevc_profile 0x00990b67 (menu)   : min=0 max=2 default=0 value=0
> >>                                  0: Main
> >>                                  1: Main Still Picture
> >>                                  2: Main 10
> >>                        hevc_level 0x00990b68 (menu)   : min=0 max=8 default=0 value=0
> >>                                  0: 1
> >>                                  1: 2
> >>                                  2: 2.1
> >>                                  3: 3
> >>                                  4: 3.1
> >>                                  5: 4
> >>                                  6: 4.1
> >>                                  7: 5
> >>                                  8: 5.1
> >>
> >> Stateless Codec Controls
> >>
> >>       vp9_frame_decode_parameters 0x00a40a2c (unknown): type=261 flags=has-payload
> >>         vp9_probabilities_updates 0x00a40a2d (unknown): type=260 flags=has-payload
> >>       hevc_sequence_parameter_set 0x00a40a90 (unknown): type=270 flags=has-payload
> >>        hevc_picture_parameter_set 0x00a40a91 (unknown): type=271 flags=has-payload
> >>               hevc_scaling_matrix 0x00a40a93 (unknown): type=273 flags=has-payload
> >>            hevc_decode_parameters 0x00a40a94 (unknown): type=274 flags=has-payload
> >>                  hevc_decode_mode 0x00a40a95 (menu)   : min=1 max=1 default=1 value=1
> >>                                  1: Frame-Based
> >>                   hevc_start_code 0x00a40a96 (menu)   : min=1 max=1 default=1 value=1
> >>                                  1: Annex B Start Code
> >>
> > Mine looks like:
> >
> > # v4l2-ctl --all -d 1
> > Driver Info:
> > Driver name      : hantro-vpu
> > Card type        : nxp,imx8mq-vpu-g2-dec
> > Bus info         : platform: hantro-vpu
> > Driver version   : 5.18.0
> > Capabilities     : 0x84204000
> > Video Memory-to-Memory Multiplanar
> > Streaming
> > Extended Pix Format
> > Device Capabilities
> > Device Caps      : 0x04204000
> > Video Memory-to-Memory Multiplanar
> > Streaming
> > Extended Pix Format
> > Media Driver Info:
> > Driver name      : hantro-vpu
> > Model            : hantro-vpu
> > Serial           :
> > Bus info         : platform: hantro-vpu
> > Media version    : 5.18.0
> > Hardware revision: 0x00000000 (0)
> > Driver version   : 5.18.0
> > Interface Info:
> > ID               : 0x0300000c
> > Type             : V4L Video
> > Entity Info:
> > ID               : 0x00000001 (1)
> > Name             : nxp,imx8mq-vpu-g2-dec-source
> > Function         : V4L2 I/O
> > Pad 0x01000002   : 0: Source
> >    Link 0x02000008: to remote pad 0x1000004 of entity
> > 'nxp,imx8mq-vpu-g2-dec-proc': Data, Enabled, Immutable
> > Priority: 2
> > Format Video Capture Multiplanar:
> > Width/Height      : 48/48
> > Pixel Format      : 'VT12' (Y/CbCr 4:2:0 (4x4 Linear))
> > Field             : None
> > Number of planes  : 1
> > Flags             :
> > Colorspace        : JPEG
> > Transfer Function : Default
> > YCbCr/HSV Encoding: Default
> > Quantization      : Default
> > Plane 0           :
> >     Bytes per Line : 48
> >     Size Image     : 3600
> > Format Video Output Multiplanar:
> > Width/Height      : 48/48
> > Pixel Format      : 'S265' (HEVC Parsed Slice Data)
> > Field             : None
> > Number of planes  : 1
> > Flags             :
> > Colorspace        : JPEG
> > Transfer Function : Default
> > YCbCr/HSV Encoding: Default
> > Quantization      : Default
> > Plane 0           :
> >     Bytes per Line : 0
> >     Size Image     : 4608
> >
> > User Controls
> >
> > hantro_hevc_slice_header_skip_b 0x00981a80 (int)    : min=0 max=256
> > step=1 default=0 value=0
> >
> > Codec Controls
> >
> >                     hevc_profile 0x00990b67 (menu)   : min=0 max=2
> > default=0 value=0
> > 0: Main
> > 1: Main Still Picture
> > 2: Main 10
> >                       hevc_level 0x00990b68 (menu)   : min=0 max=8
> > default=0 value=0
> > 0: 1
> > 1: 2
> > 2: 2.1
> > 3: 3
> > 4: 3.1
> > 5: 4
> > 6: 4.1
> > 7: 5
> > 8: 5.1
> >
> > Stateless Codec Controls
> >
> >      vp9_frame_decode_parameters 0x00a40a2c (unknown): type=261 flags=has-payload
> >        vp9_probabilities_updates 0x00a40a2d (unknown): type=260 flags=has-payload
> >      hevc_sequence_parameter_set 0x00a40a90 (unknown): type=270 flags=has-payload
> >       hevc_picture_parameter_set 0x00a40a91 (unknown): type=271 flags=has-payload
> >              hevc_scaling_matrix 0x00a40a93 (unknown): type=273 flags=has-payload
> >           hevc_decode_parameters 0x00a40a94 (unknown): type=274 flags=has-payload
> >                 hevc_decode_mode 0x00a40a95 (menu)   : min=1 max=1
> > default=1 value=1
> > 1: Frame-Based
> >                  hevc_start_code 0x00a40a96 (menu)   : min=1 max=1
> > default=1 value=1
> > 1: Annex B Start Code
>
> It is the same so that suggest the issue is coming from GStreamer plugin.

Do I need to build Gtreamer in a special way?  I just invoked  meson
then ninja, but I didn't pass any additional parameters other than the
build directory name.

adam
>
> >
> >>>> Benjamin
> >>>>
> >>>>> adam
> >>>>>> Benjamin
> >>>>>>
> >>>>>>> adam
> >>>>>>>> adam
> >>>>>>>>> Regards,
> >>>>>>>>> Benjamin
> >>>>>>>>>
> >>>>>>>>>>> adam
> >>>>>>>>>>>> Thanks,
> >>>>>>>>>>>> Benjamin
> >>>>>>>>>>>>
> >>>>>>>>>>>>> Benjamin
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Benjamin Gaignard (12):
> >>>>>>>>>>>>>         media: uapi: HEVC: Add missing fields in HEVC controls
> >>>>>>>>>>>>>         media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
> >>>>>>>>>>>>>           prefix
> >>>>>>>>>>>>>         media: uapi: HEVC: Add document uAPI structure
> >>>>>>>>>>>>>         media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS
> >>>>>>>>>>>>> as a
> >>>>>>>>>>>>>           dynamic array
> >>>>>>>>>>>>>         media: uapi: Move parsed HEVC pixel format out of staging
> >>>>>>>>>>>>>         media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
> >>>>>>>>>>>>> control
> >>>>>>>>>>>>>         media: uapi: Move the HEVC stateless control type out of staging
> >>>>>>>>>>>>>         media: controls: Log HEVC stateless control in .std_log
> >>>>>>>>>>>>>         media: uapi: Create a dedicated header for Hantro control
> >>>>>>>>>>>>>         media: uapi: HEVC: fix padding in v4l2 control structures
> >>>>>>>>>>>>>         media: uapi: Change data_bit_offset definition
> >>>>>>>>>>>>>         media: uapi: move HEVC stateless controls out of staging
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Hans Verkuil (3):
> >>>>>>>>>>>>>         videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
> >>>>>>>>>>>>>         v4l2-ctrls: add support for dynamically allocated arrays.
> >>>>>>>>>>>>>         vivid: add dynamic array test control
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>        .../userspace-api/media/drivers/hantro.rst    |   5 -
> >>>>>>>>>>>>>        .../media/v4l/ext-ctrls-codec-stateless.rst   | 833
> >>>>>>>>>>>>> ++++++++++++++++++
> >>>>>>>>>>>>>        .../media/v4l/ext-ctrls-codec.rst             | 780
> >>>>>>>>>>>>> ----------------
> >>>>>>>>>>>>>        .../media/v4l/pixfmt-compressed.rst           |   7 +-
> >>>>>>>>>>>>>        .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
> >>>>>>>>>>>>>        .../media/v4l/vidioc-queryctrl.rst            |   8 +
> >>>>>>>>>>>>>        .../media/videodev2.h.rst.exceptions          |   5 +
> >>>>>>>>>>>>>        .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
> >>>>>>>>>>>>>        drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
> >>>>>>>>>>>>>        drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
> >>>>>>>>>>>>>        drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
> >>>>>>>>>>>>>        drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
> >>>>>>>>>>>>>        drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
> >>>>>>>>>>>>>        drivers/staging/media/hantro/hantro_drv.c     |  27 +-
> >>>>>>>>>>>>>        drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
> >>>>>>>>>>>>>        drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
> >>>>>>>>>>>>>        .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
> >>>>>>>>>>>>>        .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
> >>>>>>>>>>>>>        include/media/hevc-ctrls.h                    | 250 ------
> >>>>>>>>>>>>>        include/media/v4l2-ctrls.h                    |  48 +-
> >>>>>>>>>>>>>        include/uapi/linux/hantro-media.h             |  19 +
> >>>>>>>>>>>>>        include/uapi/linux/v4l2-controls.h            | 439 +++++++++
> >>>>>>>>>>>>>        include/uapi/linux/videodev2.h                |  13 +
> >>>>>>>>>>>>>        23 files changed, 1697 insertions(+), 1170 deletions(-)
> >>>>>>>>>>>>>        delete mode 100644 include/media/hevc-ctrls.h
> >>>>>>>>>>>>>        create mode 100644 include/uapi/linux/hantro-media.h
> >>>>>>>>>>>>>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
  2022-04-06 12:55                             ` Adam Ford
@ 2022-04-06 13:01                               ` Benjamin Gaignard
  -1 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-04-06 13:01 UTC (permalink / raw)
  To: Adam Ford
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc


Le 06/04/2022 à 14:55, Adam Ford a écrit :
> On Wed, Apr 6, 2022 at 7:50 AM Benjamin Gaignard
> <benjamin.gaignard@collabora.com> wrote:
>>
>> Le 06/04/2022 à 14:46, Adam Ford a écrit :
>>> On Wed, Apr 6, 2022 at 7:41 AM Benjamin Gaignard
>>> <benjamin.gaignard@collabora.com> wrote:
>>>> Le 06/04/2022 à 14:28, Adam Ford a écrit :
>>>>> On Wed, Apr 6, 2022 at 1:56 AM Benjamin Gaignard
>>>>> <benjamin.gaignard@collabora.com> wrote:
>>>>>> Le 05/04/2022 à 23:27, Adam Ford a écrit :
>>>>>>> On Mon, Apr 4, 2022 at 10:56 AM Benjamin Gaignard
>>>>>>> <benjamin.gaignard@collabora.com> wrote:
>>>>>>>> Le 02/04/2022 à 18:59, Adam Ford a écrit :
>>>>>>>>> On Sat, Apr 2, 2022 at 11:22 AM Adam Ford <aford173@gmail.com> wrote:
>>>>>>>>>> On Fri, Apr 1, 2022 at 8:18 AM Benjamin Gaignard
>>>>>>>>>> <benjamin.gaignard@collabora.com> wrote:
>>>>>>>>>>> Le 31/03/2022 à 08:53, Benjamin Gaignard a écrit :
>>>>>>>>>>>> Le 30/03/2022 à 20:52, Adam Ford a écrit :
>>>>>>>>>>>>> On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
>>>>>>>>>>>>> <benjamin.gaignard@collabora.com> wrote:
>>>>>>>>>>>>>> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
>>>>>>>>>>>>>>> This series aims to make HEVC uapi stable and usable for hardware
>>>>>>>>>>>>>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
>>>>>>>>>>>>>>> and 2 out of the tree drivers (rkvdec and RPI).
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> After the remarks done on version 2, I have completely reworked to
>>>>>>>>>>>>>>> patches
>>>>>>>>>>>>>>> split so changelogs are meaningless. I have also drop "RFC" from the
>>>>>>>>>>>>>>> titles.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Version 4:
>>>>>>>>>>>>>>> - Add num_entry_point_offsets field in  struct
>>>>>>>>>>>>>>> v4l2_ctrl_hevc_slice_params
>>>>>>>>>>>>>>> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
>>>>>>>>>>>>>>> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
>>>>>>>>>>>>>>> - Fix space/tab issue in kernel-doc
>>>>>>>>>>>>>>> - Add patch to change data_bit_offset definition
>>>>>>>>>>>>>>> - Fix hantro-media SPDX license
>>>>>>>>>>>>>>> - put controls under stateless section in v4l2-ctrls-defs.c
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
>>>>>>>>>>>>>> Dear reviewers,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> This series is waiting for your feedback,
>>>>>>>>>>>>> I tried several times with the suggested repos for both the kernel and
>>>>>>>>>>>>> g-streamer without success getting Fluster to pass any tests on the
>>>>>>>>>>>>> imx8mq.  I can try again but I likely won't get to it until this
>>>>>>>>>>>>> weekend.  If I can get it working, I'll test both the 8mq and 8mm.
>>>>>>>>>>>> Thanks a lot for that.
>>>>>>>>>>>>
>>>>>>>>>>>> Benjamin
>>>>>>>>>>> Adam,
>>>>>>>>>>>
>>>>>>>>>>> You may need to check if h265parse and v4l2slh265dec are available on your board.
>>>>>>>>>> I ran gst-inspect to see what showed up with 265 in the name.
>>>>>>>>>>
>>>>>>>>>> # gst-inspect-1.0 |grep 265
>>>>>>>>>> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
>>>>>>>>>> rtp:  rtph265depay: RTP H265 depayloader
>>>>>>>>>> rtp:  rtph265pay: RTP H265 payloader
>>>>>>>>>> typefindfunctions: video/x-h265: h265, x265, 265
>>>>>>>>>> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
>>>>>>>>>> videoparsersbad:  h265parse: H.265 parser
>>>>>>>>>>
>>>>>>>>>> It appears I have both h265parse and v4l2slh265dec.
>>>>>>>>>>
>>>>>>>>>>> fluster check if v4l2slh265dec is working fine with this command line:
>>>>>>>>>>>
>>>>>>>>>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
>>>>>>>>>>>
>>>>>>>>>>> so if one of them is missing it won't work.
>>>>>>>>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
>>>>>>>>>> Setting pipeline to PAUSED ...
>>>>>>>>>> 0:00:00.098389938   526 0xaaaaf9d86ac0 ERROR     v4l2codecs-decoder
>>>>>>>>>> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
>>>>>>>>>> VIDIOC_G_EXT_CTRLS failed: Invalid argument
>>>>>>>>>> ERROR: from element
>>>>>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
>>>>>>>>>> report framing and start code method.
>>>>>>>>>> Additional debug info:
>>>>>>>>>> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
>>>>>>>>>> gst_v4l2_codec_h265_dec_open ():
>>>>>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>>>>>>>>>> gst_v4l2_decoder_get_controls() failed: Invalid argument
>>>>>>>>>> ERROR: pipeline doesn't want to preroll.
>>>>>>>>>> ERROR: from element
>>>>>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
>>>>>>>>>> initialize supporting library.
>>>>>>>>>> Additional debug info:
>>>>>>>>>> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
>>>>>>>>>> gst_video_decoder_change_state ():
>>>>>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>>>>>>>>>> Failed to open decoder
>>>>>>>>>> ERROR: pipeline doesn't want to preroll.
>>>>>>>>>> Failed to set pipeline to PAUSED.
>>>>>>>>>> Setting pipeline to NULL ...
>>>>>>>>>> Freeing pipeline ...
>>>>>>>>>>
>>>>>>>>>> Does this mean I have a wrong version of the kernel and/or incomplete patches?
>>>>>>>>> I double checked the branches.
>>>>>>>>>
>>>>>>>>> Kernel:
>>>>>>>>> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
>>>>>>>>> branch:  origin/HEVC_UAPI_V4
>>>>>>>>>
>>>>>>>>> Gstreamer:
>>>>>>>>> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
>>>>>>>>> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> I am still not able to run h.265/HEVC tests.
>>>>>>>> Hello Adam,
>>>>>>>>
>>>>>>>> I have updated the following branches with the versions I have used today:
>>>>>>>>
>>>>>>>> Kernel:
>>>>>>>> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
>>>>>>>> branch: origin/HEVC_UAPI_V5 only one change in documentation vs version 4 but rebased in v5.18-rc1
>>>>>>>>
>>>>>>>> Gstreamer:
>>>>>>>> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
>>>>>>>> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15 updated on the latest GST main branch
>>>>>>>>
>>>>>>>> I hope this will work fine this time.
>>>>>>> I wish I had better news for you:
>>>>>>>
>>>>>>> dmesg shows the hantro driver is being loaded:
>>>>>>>
>>>>>>> [   38.612243] hantro-vpu 38300000.video-codec: registered
>>>>>>> nxp,imx8mq-vpu-g1-dec as /dev/video0
>>>>>>> [   38.612618] hantro-vpu 38310000.video-codec: registered
>>>>>>> nxp,imx8mq-vpu-g2-dec as /dev/video1
>>>>>>>
>>>>>>> # gst-inspect-1.0 |grep 265
>>>>>>> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
>>>>>>> rtp:  rtph265depay: RTP H265 depayloader
>>>>>>> rtp:  rtph265pay: RTP H265 payloader
>>>>>>> typefindfunctions: video/x-h265: h265, x265, 265
>>>>>>> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
>>>>>>> videoparsersbad:  h265parse: H.265 parser
>>>>>>>
>>>>>>> Fluster reports:
>>>>>>> GStreamer-H.265-V4L2SL-Gst1.0: GStreamer H.265 V4L2SL decoder for
>>>>>>> GStreamer 1.0... ❌
>>>>>> Still the same error about non supported control ?
>>>>> # gst-lagst-launch-1.0 appsrc num-buffers=0 ! h265parse !
>>>>> v4l2slh265dec ! fakesink
>>>>> Setting pipeline to PAUSED ...
>>>>> 0:00:01.704385508   420 0xaaaaec0a76c0 ERROR     v4l2codecs-decoder
>>>>> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
>>>>> VIDIOC_G_EXT_CTRLS failed: Invalid argument
>>>>> ERROR: from element
>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
>>>>> report framing and start code method.
>>>>> Additional debug info:
>>>>> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
>>>>> gst_v4l2_codec_h265_dec_open ():
>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>>>>> gst_v4l2_decoder_get_controls() failed: Invalid argument
>>>>> ERROR: pipeline doesn't want to preroll.
>>>>> ERROR: from element
>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
>>>>> initialize supporting library.
>>>>> Additional debug info:
>>>>> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
>>>>> gst_video_decoder_change_state ():
>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>>>>> Failed to open decoder
>>>>> ERROR: pipeline doesn't want to preroll.
>>>>> Failed to set pipeline to PAUSED.
>>>>> Setting pipeline to NULL ...
>>>>> Freeing pipeline ...
>>>> What is the result of v4l2-ctl ?
>>>> Here I have:
>>>> v4l2-ctl --all -d 1
>>>> Driver Info:
>>>>           Driver name      : hantro-vpu
>>>>           Card type        : nxp,imx8mq-vpu-g2-dec
>>>>           Bus info         : platform: hantro-vpu
>>>>           Driver version   : 5.18.0
>>>>           Capabilities     : 0x84204000
>>>>                   Video Memory-to-Memory Multiplanar
>>>>                   Streaming
>>>>                   Extended Pix Format
>>>>                   Device Capabilities
>>>>           Device Caps      : 0x04204000
>>>>                   Video Memory-to-Memory Multiplanar
>>>>                   Streaming
>>>>                   Extended Pix Format
>>>> Media Driver Info:
>>>>           Driver name      : hantro-vpu
>>>>           Model            : hantro-vpu
>>>>           Serial           :
>>>>           Bus info         : platform: hantro-vpu
>>>>           Media version    : 5.18.0
>>>>           Hardware revision: 0x00000000 (0)
>>>>           Driver version   : 5.18.0
>>>> Interface Info:
>>>>           ID               : 0x0300000c
>>>>           Type             : V4L Video
>>>> Entity Info:
>>>>           ID               : 0x00000001 (1)
>>>>           Name             : nxp,imx8mq-vpu-g2-dec-source
>>>>           Function         : V4L2 I/O
>>>>           Pad 0x01000002   : 0: Source
>>>>             Link 0x02000008: to remote pad 0x1000004 of entity 'nxp,imx8mq-vpu-g2-dec-proc': Data, Enabled, Immutable
>>>> Priority: 2
>>>> Format Video Capture Multiplanar:
>>>>           Width/Height      : 48/48
>>>>           Pixel Format      : 'VT12' (Y/CbCr 4:2:0 (4x4 Linear))
>>>>           Field             : None
>>>>           Number of planes  : 1
>>>>           Flags             :
>>>>           Colorspace        : JPEG
>>>>           Transfer Function : Default
>>>>           YCbCr/HSV Encoding: Default
>>>>           Quantization      : Default
>>>>           Plane 0           :
>>>>              Bytes per Line : 48
>>>>              Size Image     : 3600
>>>> Format Video Output Multiplanar:
>>>>           Width/Height      : 48/48
>>>>           Pixel Format      : 'S265' (HEVC Parsed Slice Data)
>>>>           Field             : None
>>>>           Number of planes  : 1
>>>>           Flags             :
>>>>           Colorspace        : JPEG
>>>>           Transfer Function : Default
>>>>           YCbCr/HSV Encoding: Default
>>>>           Quantization      : Default
>>>>           Plane 0           :
>>>>              Bytes per Line : 0
>>>>              Size Image     : 4608
>>>>
>>>> User Controls
>>>>
>>>> hantro_hevc_slice_header_skip_b 0x00981a80 (int)    : min=0 max=256 step=1 default=0 value=0
>>>>
>>>> Codec Controls
>>>>
>>>>                       hevc_profile 0x00990b67 (menu)   : min=0 max=2 default=0 value=0
>>>>                                   0: Main
>>>>                                   1: Main Still Picture
>>>>                                   2: Main 10
>>>>                         hevc_level 0x00990b68 (menu)   : min=0 max=8 default=0 value=0
>>>>                                   0: 1
>>>>                                   1: 2
>>>>                                   2: 2.1
>>>>                                   3: 3
>>>>                                   4: 3.1
>>>>                                   5: 4
>>>>                                   6: 4.1
>>>>                                   7: 5
>>>>                                   8: 5.1
>>>>
>>>> Stateless Codec Controls
>>>>
>>>>        vp9_frame_decode_parameters 0x00a40a2c (unknown): type=261 flags=has-payload
>>>>          vp9_probabilities_updates 0x00a40a2d (unknown): type=260 flags=has-payload
>>>>        hevc_sequence_parameter_set 0x00a40a90 (unknown): type=270 flags=has-payload
>>>>         hevc_picture_parameter_set 0x00a40a91 (unknown): type=271 flags=has-payload
>>>>                hevc_scaling_matrix 0x00a40a93 (unknown): type=273 flags=has-payload
>>>>             hevc_decode_parameters 0x00a40a94 (unknown): type=274 flags=has-payload
>>>>                   hevc_decode_mode 0x00a40a95 (menu)   : min=1 max=1 default=1 value=1
>>>>                                   1: Frame-Based
>>>>                    hevc_start_code 0x00a40a96 (menu)   : min=1 max=1 default=1 value=1
>>>>                                   1: Annex B Start Code
>>>>
>>> Mine looks like:
>>>
>>> # v4l2-ctl --all -d 1
>>> Driver Info:
>>> Driver name      : hantro-vpu
>>> Card type        : nxp,imx8mq-vpu-g2-dec
>>> Bus info         : platform: hantro-vpu
>>> Driver version   : 5.18.0
>>> Capabilities     : 0x84204000
>>> Video Memory-to-Memory Multiplanar
>>> Streaming
>>> Extended Pix Format
>>> Device Capabilities
>>> Device Caps      : 0x04204000
>>> Video Memory-to-Memory Multiplanar
>>> Streaming
>>> Extended Pix Format
>>> Media Driver Info:
>>> Driver name      : hantro-vpu
>>> Model            : hantro-vpu
>>> Serial           :
>>> Bus info         : platform: hantro-vpu
>>> Media version    : 5.18.0
>>> Hardware revision: 0x00000000 (0)
>>> Driver version   : 5.18.0
>>> Interface Info:
>>> ID               : 0x0300000c
>>> Type             : V4L Video
>>> Entity Info:
>>> ID               : 0x00000001 (1)
>>> Name             : nxp,imx8mq-vpu-g2-dec-source
>>> Function         : V4L2 I/O
>>> Pad 0x01000002   : 0: Source
>>>     Link 0x02000008: to remote pad 0x1000004 of entity
>>> 'nxp,imx8mq-vpu-g2-dec-proc': Data, Enabled, Immutable
>>> Priority: 2
>>> Format Video Capture Multiplanar:
>>> Width/Height      : 48/48
>>> Pixel Format      : 'VT12' (Y/CbCr 4:2:0 (4x4 Linear))
>>> Field             : None
>>> Number of planes  : 1
>>> Flags             :
>>> Colorspace        : JPEG
>>> Transfer Function : Default
>>> YCbCr/HSV Encoding: Default
>>> Quantization      : Default
>>> Plane 0           :
>>>      Bytes per Line : 48
>>>      Size Image     : 3600
>>> Format Video Output Multiplanar:
>>> Width/Height      : 48/48
>>> Pixel Format      : 'S265' (HEVC Parsed Slice Data)
>>> Field             : None
>>> Number of planes  : 1
>>> Flags             :
>>> Colorspace        : JPEG
>>> Transfer Function : Default
>>> YCbCr/HSV Encoding: Default
>>> Quantization      : Default
>>> Plane 0           :
>>>      Bytes per Line : 0
>>>      Size Image     : 4608
>>>
>>> User Controls
>>>
>>> hantro_hevc_slice_header_skip_b 0x00981a80 (int)    : min=0 max=256
>>> step=1 default=0 value=0
>>>
>>> Codec Controls
>>>
>>>                      hevc_profile 0x00990b67 (menu)   : min=0 max=2
>>> default=0 value=0
>>> 0: Main
>>> 1: Main Still Picture
>>> 2: Main 10
>>>                        hevc_level 0x00990b68 (menu)   : min=0 max=8
>>> default=0 value=0
>>> 0: 1
>>> 1: 2
>>> 2: 2.1
>>> 3: 3
>>> 4: 3.1
>>> 5: 4
>>> 6: 4.1
>>> 7: 5
>>> 8: 5.1
>>>
>>> Stateless Codec Controls
>>>
>>>       vp9_frame_decode_parameters 0x00a40a2c (unknown): type=261 flags=has-payload
>>>         vp9_probabilities_updates 0x00a40a2d (unknown): type=260 flags=has-payload
>>>       hevc_sequence_parameter_set 0x00a40a90 (unknown): type=270 flags=has-payload
>>>        hevc_picture_parameter_set 0x00a40a91 (unknown): type=271 flags=has-payload
>>>               hevc_scaling_matrix 0x00a40a93 (unknown): type=273 flags=has-payload
>>>            hevc_decode_parameters 0x00a40a94 (unknown): type=274 flags=has-payload
>>>                  hevc_decode_mode 0x00a40a95 (menu)   : min=1 max=1
>>> default=1 value=1
>>> 1: Frame-Based
>>>                   hevc_start_code 0x00a40a96 (menu)   : min=1 max=1
>>> default=1 value=1
>>> 1: Annex B Start Code
>> It is the same so that suggest the issue is coming from GStreamer plugin.
> Do I need to build Gtreamer in a special way?  I just invoked  meson
> then ninja, but I didn't pass any additional parameters other than the
> build directory name.

Maybe make sure that the plugin is well rebuild ?

On my side I have this version:
gst-inspect-1.0 v4l2slh265dec
...
Plugin Details:
   Name                     v4l2codecs
   Description              V4L2 CODEC Accelerators plugin
   Filename                 /home/user/gstreamer/build/subprojects/gst-plugins-bad/sys/v4l2codecs/libgstv4l2codecs.so
   Version                  1.21.0.1
   License                  LGPL
   Source module            gst-plugins-bad
   Binary package           GStreamer Bad Plug-ins git
   Origin URL               Unknown package origin
...

>
> adam
>>>>>> Benjamin
>>>>>>
>>>>>>> adam
>>>>>>>> Benjamin
>>>>>>>>
>>>>>>>>> adam
>>>>>>>>>> adam
>>>>>>>>>>> Regards,
>>>>>>>>>>> Benjamin
>>>>>>>>>>>
>>>>>>>>>>>>> adam
>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>> Benjamin
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Benjamin
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Benjamin Gaignard (12):
>>>>>>>>>>>>>>>          media: uapi: HEVC: Add missing fields in HEVC controls
>>>>>>>>>>>>>>>          media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
>>>>>>>>>>>>>>>            prefix
>>>>>>>>>>>>>>>          media: uapi: HEVC: Add document uAPI structure
>>>>>>>>>>>>>>>          media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS
>>>>>>>>>>>>>>> as a
>>>>>>>>>>>>>>>            dynamic array
>>>>>>>>>>>>>>>          media: uapi: Move parsed HEVC pixel format out of staging
>>>>>>>>>>>>>>>          media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
>>>>>>>>>>>>>>> control
>>>>>>>>>>>>>>>          media: uapi: Move the HEVC stateless control type out of staging
>>>>>>>>>>>>>>>          media: controls: Log HEVC stateless control in .std_log
>>>>>>>>>>>>>>>          media: uapi: Create a dedicated header for Hantro control
>>>>>>>>>>>>>>>          media: uapi: HEVC: fix padding in v4l2 control structures
>>>>>>>>>>>>>>>          media: uapi: Change data_bit_offset definition
>>>>>>>>>>>>>>>          media: uapi: move HEVC stateless controls out of staging
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Hans Verkuil (3):
>>>>>>>>>>>>>>>          videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
>>>>>>>>>>>>>>>          v4l2-ctrls: add support for dynamically allocated arrays.
>>>>>>>>>>>>>>>          vivid: add dynamic array test control
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>         .../userspace-api/media/drivers/hantro.rst    |   5 -
>>>>>>>>>>>>>>>         .../media/v4l/ext-ctrls-codec-stateless.rst   | 833
>>>>>>>>>>>>>>> ++++++++++++++++++
>>>>>>>>>>>>>>>         .../media/v4l/ext-ctrls-codec.rst             | 780
>>>>>>>>>>>>>>> ----------------
>>>>>>>>>>>>>>>         .../media/v4l/pixfmt-compressed.rst           |   7 +-
>>>>>>>>>>>>>>>         .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
>>>>>>>>>>>>>>>         .../media/v4l/vidioc-queryctrl.rst            |   8 +
>>>>>>>>>>>>>>>         .../media/videodev2.h.rst.exceptions          |   5 +
>>>>>>>>>>>>>>>         .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
>>>>>>>>>>>>>>>         drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
>>>>>>>>>>>>>>>         drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
>>>>>>>>>>>>>>>         drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
>>>>>>>>>>>>>>>         drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
>>>>>>>>>>>>>>>         drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
>>>>>>>>>>>>>>>         drivers/staging/media/hantro/hantro_drv.c     |  27 +-
>>>>>>>>>>>>>>>         drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
>>>>>>>>>>>>>>>         drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
>>>>>>>>>>>>>>>         .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
>>>>>>>>>>>>>>>         .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
>>>>>>>>>>>>>>>         include/media/hevc-ctrls.h                    | 250 ------
>>>>>>>>>>>>>>>         include/media/v4l2-ctrls.h                    |  48 +-
>>>>>>>>>>>>>>>         include/uapi/linux/hantro-media.h             |  19 +
>>>>>>>>>>>>>>>         include/uapi/linux/v4l2-controls.h            | 439 +++++++++
>>>>>>>>>>>>>>>         include/uapi/linux/videodev2.h                |  13 +
>>>>>>>>>>>>>>>         23 files changed, 1697 insertions(+), 1170 deletions(-)
>>>>>>>>>>>>>>>         delete mode 100644 include/media/hevc-ctrls.h
>>>>>>>>>>>>>>>         create mode 100644 include/uapi/linux/hantro-media.h
>>>>>>>>>>>>>>>

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
@ 2022-04-06 13:01                               ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-04-06 13:01 UTC (permalink / raw)
  To: Adam Ford
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, Nicolas Dufresne, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc


Le 06/04/2022 à 14:55, Adam Ford a écrit :
> On Wed, Apr 6, 2022 at 7:50 AM Benjamin Gaignard
> <benjamin.gaignard@collabora.com> wrote:
>>
>> Le 06/04/2022 à 14:46, Adam Ford a écrit :
>>> On Wed, Apr 6, 2022 at 7:41 AM Benjamin Gaignard
>>> <benjamin.gaignard@collabora.com> wrote:
>>>> Le 06/04/2022 à 14:28, Adam Ford a écrit :
>>>>> On Wed, Apr 6, 2022 at 1:56 AM Benjamin Gaignard
>>>>> <benjamin.gaignard@collabora.com> wrote:
>>>>>> Le 05/04/2022 à 23:27, Adam Ford a écrit :
>>>>>>> On Mon, Apr 4, 2022 at 10:56 AM Benjamin Gaignard
>>>>>>> <benjamin.gaignard@collabora.com> wrote:
>>>>>>>> Le 02/04/2022 à 18:59, Adam Ford a écrit :
>>>>>>>>> On Sat, Apr 2, 2022 at 11:22 AM Adam Ford <aford173@gmail.com> wrote:
>>>>>>>>>> On Fri, Apr 1, 2022 at 8:18 AM Benjamin Gaignard
>>>>>>>>>> <benjamin.gaignard@collabora.com> wrote:
>>>>>>>>>>> Le 31/03/2022 à 08:53, Benjamin Gaignard a écrit :
>>>>>>>>>>>> Le 30/03/2022 à 20:52, Adam Ford a écrit :
>>>>>>>>>>>>> On Wed, Mar 30, 2022 at 2:53 AM Benjamin Gaignard
>>>>>>>>>>>>> <benjamin.gaignard@collabora.com> wrote:
>>>>>>>>>>>>>> Le 28/02/2022 à 15:08, Benjamin Gaignard a écrit :
>>>>>>>>>>>>>>> This series aims to make HEVC uapi stable and usable for hardware
>>>>>>>>>>>>>>> decoder. HEVC uapi is used by 2 mainlined drivers (Cedrus and Hantro)
>>>>>>>>>>>>>>> and 2 out of the tree drivers (rkvdec and RPI).
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> After the remarks done on version 2, I have completely reworked to
>>>>>>>>>>>>>>> patches
>>>>>>>>>>>>>>> split so changelogs are meaningless. I have also drop "RFC" from the
>>>>>>>>>>>>>>> titles.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Version 4:
>>>>>>>>>>>>>>> - Add num_entry_point_offsets field in  struct
>>>>>>>>>>>>>>> v4l2_ctrl_hevc_slice_params
>>>>>>>>>>>>>>> - Fix V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS name
>>>>>>>>>>>>>>> - Initialize control V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
>>>>>>>>>>>>>>> - Fix space/tab issue in kernel-doc
>>>>>>>>>>>>>>> - Add patch to change data_bit_offset definition
>>>>>>>>>>>>>>> - Fix hantro-media SPDX license
>>>>>>>>>>>>>>> - put controls under stateless section in v4l2-ctrls-defs.c
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> At the end fluster tests results on IMX8MQ is 77/147 for HEVC codec.
>>>>>>>>>>>>>> Dear reviewers,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> This series is waiting for your feedback,
>>>>>>>>>>>>> I tried several times with the suggested repos for both the kernel and
>>>>>>>>>>>>> g-streamer without success getting Fluster to pass any tests on the
>>>>>>>>>>>>> imx8mq.  I can try again but I likely won't get to it until this
>>>>>>>>>>>>> weekend.  If I can get it working, I'll test both the 8mq and 8mm.
>>>>>>>>>>>> Thanks a lot for that.
>>>>>>>>>>>>
>>>>>>>>>>>> Benjamin
>>>>>>>>>>> Adam,
>>>>>>>>>>>
>>>>>>>>>>> You may need to check if h265parse and v4l2slh265dec are available on your board.
>>>>>>>>>> I ran gst-inspect to see what showed up with 265 in the name.
>>>>>>>>>>
>>>>>>>>>> # gst-inspect-1.0 |grep 265
>>>>>>>>>> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
>>>>>>>>>> rtp:  rtph265depay: RTP H265 depayloader
>>>>>>>>>> rtp:  rtph265pay: RTP H265 payloader
>>>>>>>>>> typefindfunctions: video/x-h265: h265, x265, 265
>>>>>>>>>> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
>>>>>>>>>> videoparsersbad:  h265parse: H.265 parser
>>>>>>>>>>
>>>>>>>>>> It appears I have both h265parse and v4l2slh265dec.
>>>>>>>>>>
>>>>>>>>>>> fluster check if v4l2slh265dec is working fine with this command line:
>>>>>>>>>>>
>>>>>>>>>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
>>>>>>>>>>>
>>>>>>>>>>> so if one of them is missing it won't work.
>>>>>>>>>> gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
>>>>>>>>>> Setting pipeline to PAUSED ...
>>>>>>>>>> 0:00:00.098389938   526 0xaaaaf9d86ac0 ERROR     v4l2codecs-decoder
>>>>>>>>>> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
>>>>>>>>>> VIDIOC_G_EXT_CTRLS failed: Invalid argument
>>>>>>>>>> ERROR: from element
>>>>>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
>>>>>>>>>> report framing and start code method.
>>>>>>>>>> Additional debug info:
>>>>>>>>>> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
>>>>>>>>>> gst_v4l2_codec_h265_dec_open ():
>>>>>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>>>>>>>>>> gst_v4l2_decoder_get_controls() failed: Invalid argument
>>>>>>>>>> ERROR: pipeline doesn't want to preroll.
>>>>>>>>>> ERROR: from element
>>>>>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
>>>>>>>>>> initialize supporting library.
>>>>>>>>>> Additional debug info:
>>>>>>>>>> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
>>>>>>>>>> gst_video_decoder_change_state ():
>>>>>>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>>>>>>>>>> Failed to open decoder
>>>>>>>>>> ERROR: pipeline doesn't want to preroll.
>>>>>>>>>> Failed to set pipeline to PAUSED.
>>>>>>>>>> Setting pipeline to NULL ...
>>>>>>>>>> Freeing pipeline ...
>>>>>>>>>>
>>>>>>>>>> Does this mean I have a wrong version of the kernel and/or incomplete patches?
>>>>>>>>> I double checked the branches.
>>>>>>>>>
>>>>>>>>> Kernel:
>>>>>>>>> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
>>>>>>>>> branch:  origin/HEVC_UAPI_V4
>>>>>>>>>
>>>>>>>>> Gstreamer:
>>>>>>>>> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
>>>>>>>>> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> I am still not able to run h.265/HEVC tests.
>>>>>>>> Hello Adam,
>>>>>>>>
>>>>>>>> I have updated the following branches with the versions I have used today:
>>>>>>>>
>>>>>>>> Kernel:
>>>>>>>> https://gitlab.collabora.com/benjamin.gaignard/for-upstream.git
>>>>>>>> branch: origin/HEVC_UAPI_V5 only one change in documentation vs version 4 but rebased in v5.18-rc1
>>>>>>>>
>>>>>>>> Gstreamer:
>>>>>>>> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer.git
>>>>>>>> branch:  origin/benjamin.gaignard1/gstreamer-HEVC_aligned_with_kernel_5.15 updated on the latest GST main branch
>>>>>>>>
>>>>>>>> I hope this will work fine this time.
>>>>>>> I wish I had better news for you:
>>>>>>>
>>>>>>> dmesg shows the hantro driver is being loaded:
>>>>>>>
>>>>>>> [   38.612243] hantro-vpu 38300000.video-codec: registered
>>>>>>> nxp,imx8mq-vpu-g1-dec as /dev/video0
>>>>>>> [   38.612618] hantro-vpu 38310000.video-codec: registered
>>>>>>> nxp,imx8mq-vpu-g2-dec as /dev/video1
>>>>>>>
>>>>>>> # gst-inspect-1.0 |grep 265
>>>>>>> libav:  avdec_h265: libav HEVC (High Efficiency Video Coding) decoder
>>>>>>> rtp:  rtph265depay: RTP H265 depayloader
>>>>>>> rtp:  rtph265pay: RTP H265 payloader
>>>>>>> typefindfunctions: video/x-h265: h265, x265, 265
>>>>>>> v4l2codecs:  v4l2slh265dec: V4L2 Stateless H.265 Video Decoder
>>>>>>> videoparsersbad:  h265parse: H.265 parser
>>>>>>>
>>>>>>> Fluster reports:
>>>>>>> GStreamer-H.265-V4L2SL-Gst1.0: GStreamer H.265 V4L2SL decoder for
>>>>>>> GStreamer 1.0... ❌
>>>>>> Still the same error about non supported control ?
>>>>> # gst-lagst-launch-1.0 appsrc num-buffers=0 ! h265parse !
>>>>> v4l2slh265dec ! fakesink
>>>>> Setting pipeline to PAUSED ...
>>>>> 0:00:01.704385508   420 0xaaaaec0a76c0 ERROR     v4l2codecs-decoder
>>>>> gstv4l2decoder.c:725:gst_v4l2_decoder_get_controls:<v4l2decoder2>
>>>>> VIDIOC_G_EXT_CTRLS failed: Invalid argument
>>>>> ERROR: from element
>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Driver did not
>>>>> report framing and start code method.
>>>>> Additional debug info:
>>>>> ../subprojects/gst-plugins-bad/sys/v4l2codecs/gstv4l2codech265dec.c(155):
>>>>> gst_v4l2_codec_h265_dec_open ():
>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>>>>> gst_v4l2_decoder_get_controls() failed: Invalid argument
>>>>> ERROR: pipeline doesn't want to preroll.
>>>>> ERROR: from element
>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0: Could not
>>>>> initialize supporting library.
>>>>> Additional debug info:
>>>>> ../subprojects/gst-plugins-base/gst-libs/gst/video/gstvideodecoder.c(2909):
>>>>> gst_video_decoder_change_state ():
>>>>> /GstPipeline:pipeline0/v4l2slh265dec:v4l2slh265dec0:
>>>>> Failed to open decoder
>>>>> ERROR: pipeline doesn't want to preroll.
>>>>> Failed to set pipeline to PAUSED.
>>>>> Setting pipeline to NULL ...
>>>>> Freeing pipeline ...
>>>> What is the result of v4l2-ctl ?
>>>> Here I have:
>>>> v4l2-ctl --all -d 1
>>>> Driver Info:
>>>>           Driver name      : hantro-vpu
>>>>           Card type        : nxp,imx8mq-vpu-g2-dec
>>>>           Bus info         : platform: hantro-vpu
>>>>           Driver version   : 5.18.0
>>>>           Capabilities     : 0x84204000
>>>>                   Video Memory-to-Memory Multiplanar
>>>>                   Streaming
>>>>                   Extended Pix Format
>>>>                   Device Capabilities
>>>>           Device Caps      : 0x04204000
>>>>                   Video Memory-to-Memory Multiplanar
>>>>                   Streaming
>>>>                   Extended Pix Format
>>>> Media Driver Info:
>>>>           Driver name      : hantro-vpu
>>>>           Model            : hantro-vpu
>>>>           Serial           :
>>>>           Bus info         : platform: hantro-vpu
>>>>           Media version    : 5.18.0
>>>>           Hardware revision: 0x00000000 (0)
>>>>           Driver version   : 5.18.0
>>>> Interface Info:
>>>>           ID               : 0x0300000c
>>>>           Type             : V4L Video
>>>> Entity Info:
>>>>           ID               : 0x00000001 (1)
>>>>           Name             : nxp,imx8mq-vpu-g2-dec-source
>>>>           Function         : V4L2 I/O
>>>>           Pad 0x01000002   : 0: Source
>>>>             Link 0x02000008: to remote pad 0x1000004 of entity 'nxp,imx8mq-vpu-g2-dec-proc': Data, Enabled, Immutable
>>>> Priority: 2
>>>> Format Video Capture Multiplanar:
>>>>           Width/Height      : 48/48
>>>>           Pixel Format      : 'VT12' (Y/CbCr 4:2:0 (4x4 Linear))
>>>>           Field             : None
>>>>           Number of planes  : 1
>>>>           Flags             :
>>>>           Colorspace        : JPEG
>>>>           Transfer Function : Default
>>>>           YCbCr/HSV Encoding: Default
>>>>           Quantization      : Default
>>>>           Plane 0           :
>>>>              Bytes per Line : 48
>>>>              Size Image     : 3600
>>>> Format Video Output Multiplanar:
>>>>           Width/Height      : 48/48
>>>>           Pixel Format      : 'S265' (HEVC Parsed Slice Data)
>>>>           Field             : None
>>>>           Number of planes  : 1
>>>>           Flags             :
>>>>           Colorspace        : JPEG
>>>>           Transfer Function : Default
>>>>           YCbCr/HSV Encoding: Default
>>>>           Quantization      : Default
>>>>           Plane 0           :
>>>>              Bytes per Line : 0
>>>>              Size Image     : 4608
>>>>
>>>> User Controls
>>>>
>>>> hantro_hevc_slice_header_skip_b 0x00981a80 (int)    : min=0 max=256 step=1 default=0 value=0
>>>>
>>>> Codec Controls
>>>>
>>>>                       hevc_profile 0x00990b67 (menu)   : min=0 max=2 default=0 value=0
>>>>                                   0: Main
>>>>                                   1: Main Still Picture
>>>>                                   2: Main 10
>>>>                         hevc_level 0x00990b68 (menu)   : min=0 max=8 default=0 value=0
>>>>                                   0: 1
>>>>                                   1: 2
>>>>                                   2: 2.1
>>>>                                   3: 3
>>>>                                   4: 3.1
>>>>                                   5: 4
>>>>                                   6: 4.1
>>>>                                   7: 5
>>>>                                   8: 5.1
>>>>
>>>> Stateless Codec Controls
>>>>
>>>>        vp9_frame_decode_parameters 0x00a40a2c (unknown): type=261 flags=has-payload
>>>>          vp9_probabilities_updates 0x00a40a2d (unknown): type=260 flags=has-payload
>>>>        hevc_sequence_parameter_set 0x00a40a90 (unknown): type=270 flags=has-payload
>>>>         hevc_picture_parameter_set 0x00a40a91 (unknown): type=271 flags=has-payload
>>>>                hevc_scaling_matrix 0x00a40a93 (unknown): type=273 flags=has-payload
>>>>             hevc_decode_parameters 0x00a40a94 (unknown): type=274 flags=has-payload
>>>>                   hevc_decode_mode 0x00a40a95 (menu)   : min=1 max=1 default=1 value=1
>>>>                                   1: Frame-Based
>>>>                    hevc_start_code 0x00a40a96 (menu)   : min=1 max=1 default=1 value=1
>>>>                                   1: Annex B Start Code
>>>>
>>> Mine looks like:
>>>
>>> # v4l2-ctl --all -d 1
>>> Driver Info:
>>> Driver name      : hantro-vpu
>>> Card type        : nxp,imx8mq-vpu-g2-dec
>>> Bus info         : platform: hantro-vpu
>>> Driver version   : 5.18.0
>>> Capabilities     : 0x84204000
>>> Video Memory-to-Memory Multiplanar
>>> Streaming
>>> Extended Pix Format
>>> Device Capabilities
>>> Device Caps      : 0x04204000
>>> Video Memory-to-Memory Multiplanar
>>> Streaming
>>> Extended Pix Format
>>> Media Driver Info:
>>> Driver name      : hantro-vpu
>>> Model            : hantro-vpu
>>> Serial           :
>>> Bus info         : platform: hantro-vpu
>>> Media version    : 5.18.0
>>> Hardware revision: 0x00000000 (0)
>>> Driver version   : 5.18.0
>>> Interface Info:
>>> ID               : 0x0300000c
>>> Type             : V4L Video
>>> Entity Info:
>>> ID               : 0x00000001 (1)
>>> Name             : nxp,imx8mq-vpu-g2-dec-source
>>> Function         : V4L2 I/O
>>> Pad 0x01000002   : 0: Source
>>>     Link 0x02000008: to remote pad 0x1000004 of entity
>>> 'nxp,imx8mq-vpu-g2-dec-proc': Data, Enabled, Immutable
>>> Priority: 2
>>> Format Video Capture Multiplanar:
>>> Width/Height      : 48/48
>>> Pixel Format      : 'VT12' (Y/CbCr 4:2:0 (4x4 Linear))
>>> Field             : None
>>> Number of planes  : 1
>>> Flags             :
>>> Colorspace        : JPEG
>>> Transfer Function : Default
>>> YCbCr/HSV Encoding: Default
>>> Quantization      : Default
>>> Plane 0           :
>>>      Bytes per Line : 48
>>>      Size Image     : 3600
>>> Format Video Output Multiplanar:
>>> Width/Height      : 48/48
>>> Pixel Format      : 'S265' (HEVC Parsed Slice Data)
>>> Field             : None
>>> Number of planes  : 1
>>> Flags             :
>>> Colorspace        : JPEG
>>> Transfer Function : Default
>>> YCbCr/HSV Encoding: Default
>>> Quantization      : Default
>>> Plane 0           :
>>>      Bytes per Line : 0
>>>      Size Image     : 4608
>>>
>>> User Controls
>>>
>>> hantro_hevc_slice_header_skip_b 0x00981a80 (int)    : min=0 max=256
>>> step=1 default=0 value=0
>>>
>>> Codec Controls
>>>
>>>                      hevc_profile 0x00990b67 (menu)   : min=0 max=2
>>> default=0 value=0
>>> 0: Main
>>> 1: Main Still Picture
>>> 2: Main 10
>>>                        hevc_level 0x00990b68 (menu)   : min=0 max=8
>>> default=0 value=0
>>> 0: 1
>>> 1: 2
>>> 2: 2.1
>>> 3: 3
>>> 4: 3.1
>>> 5: 4
>>> 6: 4.1
>>> 7: 5
>>> 8: 5.1
>>>
>>> Stateless Codec Controls
>>>
>>>       vp9_frame_decode_parameters 0x00a40a2c (unknown): type=261 flags=has-payload
>>>         vp9_probabilities_updates 0x00a40a2d (unknown): type=260 flags=has-payload
>>>       hevc_sequence_parameter_set 0x00a40a90 (unknown): type=270 flags=has-payload
>>>        hevc_picture_parameter_set 0x00a40a91 (unknown): type=271 flags=has-payload
>>>               hevc_scaling_matrix 0x00a40a93 (unknown): type=273 flags=has-payload
>>>            hevc_decode_parameters 0x00a40a94 (unknown): type=274 flags=has-payload
>>>                  hevc_decode_mode 0x00a40a95 (menu)   : min=1 max=1
>>> default=1 value=1
>>> 1: Frame-Based
>>>                   hevc_start_code 0x00a40a96 (menu)   : min=1 max=1
>>> default=1 value=1
>>> 1: Annex B Start Code
>> It is the same so that suggest the issue is coming from GStreamer plugin.
> Do I need to build Gtreamer in a special way?  I just invoked  meson
> then ninja, but I didn't pass any additional parameters other than the
> build directory name.

Maybe make sure that the plugin is well rebuild ?

On my side I have this version:
gst-inspect-1.0 v4l2slh265dec
...
Plugin Details:
   Name                     v4l2codecs
   Description              V4L2 CODEC Accelerators plugin
   Filename                 /home/user/gstreamer/build/subprojects/gst-plugins-bad/sys/v4l2codecs/libgstv4l2codecs.so
   Version                  1.21.0.1
   License                  LGPL
   Source module            gst-plugins-bad
   Binary package           GStreamer Bad Plug-ins git
   Origin URL               Unknown package origin
...

>
> adam
>>>>>> Benjamin
>>>>>>
>>>>>>> adam
>>>>>>>> Benjamin
>>>>>>>>
>>>>>>>>> adam
>>>>>>>>>> adam
>>>>>>>>>>> Regards,
>>>>>>>>>>> Benjamin
>>>>>>>>>>>
>>>>>>>>>>>>> adam
>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>> Benjamin
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Benjamin
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Benjamin Gaignard (12):
>>>>>>>>>>>>>>>          media: uapi: HEVC: Add missing fields in HEVC controls
>>>>>>>>>>>>>>>          media: uapi: HEVC: Rename HEVC stateless controls with STATELESS
>>>>>>>>>>>>>>>            prefix
>>>>>>>>>>>>>>>          media: uapi: HEVC: Add document uAPI structure
>>>>>>>>>>>>>>>          media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS
>>>>>>>>>>>>>>> as a
>>>>>>>>>>>>>>>            dynamic array
>>>>>>>>>>>>>>>          media: uapi: Move parsed HEVC pixel format out of staging
>>>>>>>>>>>>>>>          media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS
>>>>>>>>>>>>>>> control
>>>>>>>>>>>>>>>          media: uapi: Move the HEVC stateless control type out of staging
>>>>>>>>>>>>>>>          media: controls: Log HEVC stateless control in .std_log
>>>>>>>>>>>>>>>          media: uapi: Create a dedicated header for Hantro control
>>>>>>>>>>>>>>>          media: uapi: HEVC: fix padding in v4l2 control structures
>>>>>>>>>>>>>>>          media: uapi: Change data_bit_offset definition
>>>>>>>>>>>>>>>          media: uapi: move HEVC stateless controls out of staging
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Hans Verkuil (3):
>>>>>>>>>>>>>>>          videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY
>>>>>>>>>>>>>>>          v4l2-ctrls: add support for dynamically allocated arrays.
>>>>>>>>>>>>>>>          vivid: add dynamic array test control
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>         .../userspace-api/media/drivers/hantro.rst    |   5 -
>>>>>>>>>>>>>>>         .../media/v4l/ext-ctrls-codec-stateless.rst   | 833
>>>>>>>>>>>>>>> ++++++++++++++++++
>>>>>>>>>>>>>>>         .../media/v4l/ext-ctrls-codec.rst             | 780
>>>>>>>>>>>>>>> ----------------
>>>>>>>>>>>>>>>         .../media/v4l/pixfmt-compressed.rst           |   7 +-
>>>>>>>>>>>>>>>         .../media/v4l/vidioc-g-ext-ctrls.rst          |  20 +
>>>>>>>>>>>>>>>         .../media/v4l/vidioc-queryctrl.rst            |   8 +
>>>>>>>>>>>>>>>         .../media/videodev2.h.rst.exceptions          |   5 +
>>>>>>>>>>>>>>>         .../media/test-drivers/vivid/vivid-ctrls.c    |  15 +
>>>>>>>>>>>>>>>         drivers/media/v4l2-core/v4l2-ctrls-api.c      | 103 ++-
>>>>>>>>>>>>>>>         drivers/media/v4l2-core/v4l2-ctrls-core.c     | 198 ++++-
>>>>>>>>>>>>>>>         drivers/media/v4l2-core/v4l2-ctrls-defs.c     |  37 +-
>>>>>>>>>>>>>>>         drivers/media/v4l2-core/v4l2-ctrls-priv.h     |   3 +-
>>>>>>>>>>>>>>>         drivers/media/v4l2-core/v4l2-ctrls-request.c  |  13 +-
>>>>>>>>>>>>>>>         drivers/staging/media/hantro/hantro_drv.c     |  27 +-
>>>>>>>>>>>>>>>         drivers/staging/media/hantro/hantro_hevc.c    |   8 +-
>>>>>>>>>>>>>>>         drivers/staging/media/sunxi/cedrus/cedrus.c   |  24 +-
>>>>>>>>>>>>>>>         .../staging/media/sunxi/cedrus/cedrus_dec.c   |  10 +-
>>>>>>>>>>>>>>>         .../staging/media/sunxi/cedrus/cedrus_h265.c  |   2 +-
>>>>>>>>>>>>>>>         include/media/hevc-ctrls.h                    | 250 ------
>>>>>>>>>>>>>>>         include/media/v4l2-ctrls.h                    |  48 +-
>>>>>>>>>>>>>>>         include/uapi/linux/hantro-media.h             |  19 +
>>>>>>>>>>>>>>>         include/uapi/linux/v4l2-controls.h            | 439 +++++++++
>>>>>>>>>>>>>>>         include/uapi/linux/videodev2.h                |  13 +
>>>>>>>>>>>>>>>         23 files changed, 1697 insertions(+), 1170 deletions(-)
>>>>>>>>>>>>>>>         delete mode 100644 include/media/hevc-ctrls.h
>>>>>>>>>>>>>>>         create mode 100644 include/uapi/linux/hantro-media.h
>>>>>>>>>>>>>>>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
  2022-04-06 12:50                           ` Benjamin Gaignard
@ 2022-04-06 13:02                             ` Nicolas Dufresne
  -1 siblings, 0 replies; 81+ messages in thread
From: Nicolas Dufresne @ 2022-04-06 13:02 UTC (permalink / raw)
  To: Benjamin Gaignard, Adam Ford
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc

Le mercredi 06 avril 2022 à 14:50 +0200, Benjamin Gaignard a écrit :
> > default=1 value=1
> > 1: Frame-Based
> >                   hevc_start_code 0x00a40a96 (menu)   : min=1 max=1
> > default=1 value=1
> > 1: Annex B Start Code
> 
> It is the same so that suggest the issue is coming from GStreamer plugin.

Can you report the GStreamer commit hash you have building on ? Also please
validate the creation date of the plugin (libgstv4l2codecs.so) against your
source update date. Reminder that GStreamer is now mono-repo (just in case).

https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer/-/tree/HEVC_aligned_with_kernel_5.15
Hash: 54b7c1f98084c85d103446cc3f2edce42ad53b0f

Benjamin, can you confirm you have no local changes and this is the hash you are
building from ?

regards,
Nicolas


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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
@ 2022-04-06 13:02                             ` Nicolas Dufresne
  0 siblings, 0 replies; 81+ messages in thread
From: Nicolas Dufresne @ 2022-04-06 13:02 UTC (permalink / raw)
  To: Benjamin Gaignard, Adam Ford
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc

Le mercredi 06 avril 2022 à 14:50 +0200, Benjamin Gaignard a écrit :
> > default=1 value=1
> > 1: Frame-Based
> >                   hevc_start_code 0x00a40a96 (menu)   : min=1 max=1
> > default=1 value=1
> > 1: Annex B Start Code
> 
> It is the same so that suggest the issue is coming from GStreamer plugin.

Can you report the GStreamer commit hash you have building on ? Also please
validate the creation date of the plugin (libgstv4l2codecs.so) against your
source update date. Reminder that GStreamer is now mono-repo (just in case).

https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer/-/tree/HEVC_aligned_with_kernel_5.15
Hash: 54b7c1f98084c85d103446cc3f2edce42ad53b0f

Benjamin, can you confirm you have no local changes and this is the hash you are
building from ?

regards,
Nicolas


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
  2022-04-06 13:02                             ` Nicolas Dufresne
@ 2022-04-06 13:05                               ` Benjamin Gaignard
  -1 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-04-06 13:05 UTC (permalink / raw)
  To: Nicolas Dufresne, Adam Ford
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc


Le 06/04/2022 à 15:02, Nicolas Dufresne a écrit :
> Le mercredi 06 avril 2022 à 14:50 +0200, Benjamin Gaignard a écrit :
>>> default=1 value=1
>>> 1: Frame-Based
>>>                    hevc_start_code 0x00a40a96 (menu)   : min=1 max=1
>>> default=1 value=1
>>> 1: Annex B Start Code
>> It is the same so that suggest the issue is coming from GStreamer plugin.
> Can you report the GStreamer commit hash you have building on ? Also please
> validate the creation date of the plugin (libgstv4l2codecs.so) against your
> source update date. Reminder that GStreamer is now mono-repo (just in case).
>
> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer/-/tree/HEVC_aligned_with_kernel_5.15
> Hash: 54b7c1f98084c85d103446cc3f2edce42ad53b0f
>
> Benjamin, can you confirm you have no local changes and this is the hash you are
> building from ?

Yes that is the hash I'm using without local changes

Benjamin

>
> regards,
> Nicolas
>

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
@ 2022-04-06 13:05                               ` Benjamin Gaignard
  0 siblings, 0 replies; 81+ messages in thread
From: Benjamin Gaignard @ 2022-04-06 13:05 UTC (permalink / raw)
  To: Nicolas Dufresne, Adam Ford
  Cc: Mauro Carvalho Chehab, Ezequiel Garcia, Philipp Zabel,
	Greg Kroah-Hartman, mripard, paul.kocialkowski, Chen-Yu Tsai,
	jernej.skrabec, Jonas Karlman, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc


Le 06/04/2022 à 15:02, Nicolas Dufresne a écrit :
> Le mercredi 06 avril 2022 à 14:50 +0200, Benjamin Gaignard a écrit :
>>> default=1 value=1
>>> 1: Frame-Based
>>>                    hevc_start_code 0x00a40a96 (menu)   : min=1 max=1
>>> default=1 value=1
>>> 1: Annex B Start Code
>> It is the same so that suggest the issue is coming from GStreamer plugin.
> Can you report the GStreamer commit hash you have building on ? Also please
> validate the creation date of the plugin (libgstv4l2codecs.so) against your
> source update date. Reminder that GStreamer is now mono-repo (just in case).
>
> https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer/-/tree/HEVC_aligned_with_kernel_5.15
> Hash: 54b7c1f98084c85d103446cc3f2edce42ad53b0f
>
> Benjamin, can you confirm you have no local changes and this is the hash you are
> building from ?

Yes that is the hash I'm using without local changes

Benjamin

>
> regards,
> Nicolas
>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
  2022-04-06 13:05                               ` Benjamin Gaignard
@ 2022-04-06 13:34                                 ` Adam Ford
  -1 siblings, 0 replies; 81+ messages in thread
From: Adam Ford @ 2022-04-06 13:34 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: Nicolas Dufresne, Mauro Carvalho Chehab, Ezequiel Garcia,
	Philipp Zabel, Greg Kroah-Hartman, mripard, paul.kocialkowski,
	Chen-Yu Tsai, jernej.skrabec, Jonas Karlman, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc

On Wed, Apr 6, 2022 at 8:05 AM Benjamin Gaignard
<benjamin.gaignard@collabora.com> wrote:
>
>
> Le 06/04/2022 à 15:02, Nicolas Dufresne a écrit :
> > Le mercredi 06 avril 2022 à 14:50 +0200, Benjamin Gaignard a écrit :
> >>> default=1 value=1
> >>> 1: Frame-Based
> >>>                    hevc_start_code 0x00a40a96 (menu)   : min=1 max=1
> >>> default=1 value=1
> >>> 1: Annex B Start Code
> >> It is the same so that suggest the issue is coming from GStreamer plugin.
> > Can you report the GStreamer commit hash you have building on ? Also please
> > validate the creation date of the plugin (libgstv4l2codecs.so) against your
> > source update date. Reminder that GStreamer is now mono-repo (just in case).
> >
> > https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer/-/tree/HEVC_aligned_with_kernel_5.15
> > Hash: 54b7c1f98084c85d103446cc3f2edce42ad53b0f
> >
> > Benjamin, can you confirm you have no local changes and this is the hash you are
> > building from ?
>
> Yes that is the hash I'm using without local changes

I was on (gstreamer-HEVC_aligned_with_kernel_5.15) with a hash of
4b78eaa48c0c924afd57f85c47396b77497e69f8

Benjamin's hash wasn't listed before, but I did a git pull, and now it is.

I've checked out that hash, and I am rebuilding it now. I'll report my
findings when it's done.  It's building on the imx8mq, so it may take
some time.

adam

>
> Benjamin
>
> >
> > regards,
> > Nicolas
> >

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
@ 2022-04-06 13:34                                 ` Adam Ford
  0 siblings, 0 replies; 81+ messages in thread
From: Adam Ford @ 2022-04-06 13:34 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: Nicolas Dufresne, Mauro Carvalho Chehab, Ezequiel Garcia,
	Philipp Zabel, Greg Kroah-Hartman, mripard, paul.kocialkowski,
	Chen-Yu Tsai, jernej.skrabec, Jonas Karlman, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc

On Wed, Apr 6, 2022 at 8:05 AM Benjamin Gaignard
<benjamin.gaignard@collabora.com> wrote:
>
>
> Le 06/04/2022 à 15:02, Nicolas Dufresne a écrit :
> > Le mercredi 06 avril 2022 à 14:50 +0200, Benjamin Gaignard a écrit :
> >>> default=1 value=1
> >>> 1: Frame-Based
> >>>                    hevc_start_code 0x00a40a96 (menu)   : min=1 max=1
> >>> default=1 value=1
> >>> 1: Annex B Start Code
> >> It is the same so that suggest the issue is coming from GStreamer plugin.
> > Can you report the GStreamer commit hash you have building on ? Also please
> > validate the creation date of the plugin (libgstv4l2codecs.so) against your
> > source update date. Reminder that GStreamer is now mono-repo (just in case).
> >
> > https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer/-/tree/HEVC_aligned_with_kernel_5.15
> > Hash: 54b7c1f98084c85d103446cc3f2edce42ad53b0f
> >
> > Benjamin, can you confirm you have no local changes and this is the hash you are
> > building from ?
>
> Yes that is the hash I'm using without local changes

I was on (gstreamer-HEVC_aligned_with_kernel_5.15) with a hash of
4b78eaa48c0c924afd57f85c47396b77497e69f8

Benjamin's hash wasn't listed before, but I did a git pull, and now it is.

I've checked out that hash, and I am rebuilding it now. I'll report my
findings when it's done.  It's building on the imx8mq, so it may take
some time.

adam

>
> Benjamin
>
> >
> > regards,
> > Nicolas
> >

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 14/15] media: uapi: Change data_bit_offset definition
  2022-02-28 14:08   ` Benjamin Gaignard
@ 2022-04-06 20:36     ` Nicolas Dufresne
  -1 siblings, 0 replies; 81+ messages in thread
From: Nicolas Dufresne @ 2022-04-06 20:36 UTC (permalink / raw)
  To: Benjamin Gaignard, mchehab, ezequiel, p.zabel, gregkh, mripard,
	paul.kocialkowski, wens, jernej.skrabec, jonas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc

Le lundi 28 février 2022 à 15:08 +0100, Benjamin Gaignard a écrit :
> 'F.7.3.6.1 General slice segment header syntax' section of HEVC
> specification describes that a slice header always end byte aligned,
> therefore we only need to provide the data offset in byte.
> 
> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
> ---
>  Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst | 4 ++--
>  drivers/staging/media/sunxi/cedrus/cedrus_h265.c          | 2 +-
>  include/media/hevc-ctrls.h                                | 4 ++--
>  3 files changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> index 1aa2a7399e76..c8602c1e706e 100644
> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> @@ -2986,8 +2986,8 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>        - ``bit_size``
>        - Size (in bits) of the current slice data.
>      * - __u32
> -      - ``data_bit_offset``
> -      - Offset (in bits) to the video data in the current slice data.
> +      - ``data_byte_offset``
> +      - Offset (in bytes) to the video data in the current slice data.
>      * - __u32
>        - ``num_entry_point_offsets``
>        - Specifies the number of entry point offset syntax elements in the slice header.
> diff --git a/drivers/staging/media/sunxi/cedrus/cedrus_h265.c b/drivers/staging/media/sunxi/cedrus/cedrus_h265.c
> index 8ab2d9c6f048..3e43b7cc2f57 100644
> --- a/drivers/staging/media/sunxi/cedrus/cedrus_h265.c
> +++ b/drivers/staging/media/sunxi/cedrus/cedrus_h265.c
> @@ -405,7 +405,7 @@ static void cedrus_h265_setup(struct cedrus_ctx *ctx,
>  	/* Initialize bitstream access. */
>  	cedrus_write(dev, VE_DEC_H265_TRIGGER, VE_DEC_H265_TRIGGER_INIT_SWDEC);
>  
> -	cedrus_h265_skip_bits(dev, slice_params->data_bit_offset);
> +	cedrus_h265_skip_bits(dev, slice_params->data_byte_offset / 8);

Did you mean the following instead ?

+	cedrus_h265_skip_bits(dev, slice_params->data_byte_offset * 8);

>  
>  	/* Bitstream parameters. */
>  
> diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
> index c50205083573..51bdf38ea0c3 100644
> --- a/include/media/hevc-ctrls.h
> +++ b/include/media/hevc-ctrls.h
> @@ -296,7 +296,7 @@ struct v4l2_hevc_pred_weight_table {
>   * V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
>   *
>   * @bit_size: size (in bits) of the current slice data
> - * @data_bit_offset: offset (in bits) to the video data in the current slice data
> + * @data_byte_offset: offset (in bytes) to the video data in the current slice data
>   * @num_entry_point_offsets: specifies the number of entry point offset syntax
>   *			     elements in the slice header.
>   * @nal_unit_type: specifies the coding type of the slice (B, P or I)
> @@ -340,7 +340,7 @@ struct v4l2_hevc_pred_weight_table {
>   */
>  struct v4l2_ctrl_hevc_slice_params {
>  	__u32	bit_size;
> -	__u32	data_bit_offset;
> +	__u32	data_byte_offset;
>  	__u32	num_entry_point_offsets;
>  	/* ISO/IEC 23008-2, ITU-T Rec. H.265: NAL unit header */
>  	__u8	nal_unit_type;


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

* Re: [PATCH v4 14/15] media: uapi: Change data_bit_offset definition
@ 2022-04-06 20:36     ` Nicolas Dufresne
  0 siblings, 0 replies; 81+ messages in thread
From: Nicolas Dufresne @ 2022-04-06 20:36 UTC (permalink / raw)
  To: Benjamin Gaignard, mchehab, ezequiel, p.zabel, gregkh, mripard,
	paul.kocialkowski, wens, jernej.skrabec, jonas
  Cc: linux-media, linux-kernel, linux-staging, linux-arm-kernel,
	linux-sunxi, kernel, knaerzche, jc

Le lundi 28 février 2022 à 15:08 +0100, Benjamin Gaignard a écrit :
> 'F.7.3.6.1 General slice segment header syntax' section of HEVC
> specification describes that a slice header always end byte aligned,
> therefore we only need to provide the data offset in byte.
> 
> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
> ---
>  Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst | 4 ++--
>  drivers/staging/media/sunxi/cedrus/cedrus_h265.c          | 2 +-
>  include/media/hevc-ctrls.h                                | 4 ++--
>  3 files changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> index 1aa2a7399e76..c8602c1e706e 100644
> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> @@ -2986,8 +2986,8 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
>        - ``bit_size``
>        - Size (in bits) of the current slice data.
>      * - __u32
> -      - ``data_bit_offset``
> -      - Offset (in bits) to the video data in the current slice data.
> +      - ``data_byte_offset``
> +      - Offset (in bytes) to the video data in the current slice data.
>      * - __u32
>        - ``num_entry_point_offsets``
>        - Specifies the number of entry point offset syntax elements in the slice header.
> diff --git a/drivers/staging/media/sunxi/cedrus/cedrus_h265.c b/drivers/staging/media/sunxi/cedrus/cedrus_h265.c
> index 8ab2d9c6f048..3e43b7cc2f57 100644
> --- a/drivers/staging/media/sunxi/cedrus/cedrus_h265.c
> +++ b/drivers/staging/media/sunxi/cedrus/cedrus_h265.c
> @@ -405,7 +405,7 @@ static void cedrus_h265_setup(struct cedrus_ctx *ctx,
>  	/* Initialize bitstream access. */
>  	cedrus_write(dev, VE_DEC_H265_TRIGGER, VE_DEC_H265_TRIGGER_INIT_SWDEC);
>  
> -	cedrus_h265_skip_bits(dev, slice_params->data_bit_offset);
> +	cedrus_h265_skip_bits(dev, slice_params->data_byte_offset / 8);

Did you mean the following instead ?

+	cedrus_h265_skip_bits(dev, slice_params->data_byte_offset * 8);

>  
>  	/* Bitstream parameters. */
>  
> diff --git a/include/media/hevc-ctrls.h b/include/media/hevc-ctrls.h
> index c50205083573..51bdf38ea0c3 100644
> --- a/include/media/hevc-ctrls.h
> +++ b/include/media/hevc-ctrls.h
> @@ -296,7 +296,7 @@ struct v4l2_hevc_pred_weight_table {
>   * V4L2_CTRL_FLAG_DYNAMIC_ARRAY flag must be set when using it.
>   *
>   * @bit_size: size (in bits) of the current slice data
> - * @data_bit_offset: offset (in bits) to the video data in the current slice data
> + * @data_byte_offset: offset (in bytes) to the video data in the current slice data
>   * @num_entry_point_offsets: specifies the number of entry point offset syntax
>   *			     elements in the slice header.
>   * @nal_unit_type: specifies the coding type of the slice (B, P or I)
> @@ -340,7 +340,7 @@ struct v4l2_hevc_pred_weight_table {
>   */
>  struct v4l2_ctrl_hevc_slice_params {
>  	__u32	bit_size;
> -	__u32	data_bit_offset;
> +	__u32	data_byte_offset;
>  	__u32	num_entry_point_offsets;
>  	/* ISO/IEC 23008-2, ITU-T Rec. H.265: NAL unit header */
>  	__u8	nal_unit_type;


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
  2022-04-06 13:34                                 ` Adam Ford
@ 2022-04-07  1:12                                   ` Adam Ford
  -1 siblings, 0 replies; 81+ messages in thread
From: Adam Ford @ 2022-04-07  1:12 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: Nicolas Dufresne, Mauro Carvalho Chehab, Ezequiel Garcia,
	Philipp Zabel, Greg Kroah-Hartman, mripard, paul.kocialkowski,
	Chen-Yu Tsai, jernej.skrabec, Jonas Karlman, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc

On Wed, Apr 6, 2022 at 8:34 AM Adam Ford <aford173@gmail.com> wrote:
>
> On Wed, Apr 6, 2022 at 8:05 AM Benjamin Gaignard
> <benjamin.gaignard@collabora.com> wrote:
> >
> >
> > Le 06/04/2022 à 15:02, Nicolas Dufresne a écrit :
> > > Le mercredi 06 avril 2022 à 14:50 +0200, Benjamin Gaignard a écrit :
> > >>> default=1 value=1
> > >>> 1: Frame-Based
> > >>>                    hevc_start_code 0x00a40a96 (menu)   : min=1 max=1
> > >>> default=1 value=1
> > >>> 1: Annex B Start Code
> > >> It is the same so that suggest the issue is coming from GStreamer plugin.
> > > Can you report the GStreamer commit hash you have building on ? Also please
> > > validate the creation date of the plugin (libgstv4l2codecs.so) against your
> > > source update date. Reminder that GStreamer is now mono-repo (just in case).
> > >
> > > https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer/-/tree/HEVC_aligned_with_kernel_5.15
> > > Hash: 54b7c1f98084c85d103446cc3f2edce42ad53b0f
> > >
> > > Benjamin, can you confirm you have no local changes and this is the hash you are
> > > building from ?
> >
> > Yes that is the hash I'm using without local changes
>
> I was on (gstreamer-HEVC_aligned_with_kernel_5.15) with a hash of
> 4b78eaa48c0c924afd57f85c47396b77497e69f8
>
> Benjamin's hash wasn't listed before, but I did a git pull, and now it is.
>
> I've checked out that hash, and I am rebuilding it now. I'll report my
> findings when it's done.  It's building on the imx8mq, so it may take
> some time.

We're getting closer:

# gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
Redistribute latency...
New clock: GstSystemClock
Got EOS from element "pipeline0".
Execution ended after 0:00:00.000563180
Setting pipeline to NULL ...
Freeing pipeline ...

GStreamer-H.265-V4L2SL-Gst1.0: GStreamer H.265 V4L2SL decoder for
GStreamer 1.0... ✔️

The statemless decoder appears to show it can do h.265, but it fails
all the fluster tests.

Ran 0/147 tests successfully               in 9.376 secs

I checked other V4L2SL decoders and items that previously passed are
failing now, so I think something is wrong or corrupted with my
system.

For some reason, my system seems unstable, so I might reinstall
everything, but it will be a slow process.  I don't know if my sd card
is wearing out, or something is wrong, but simple things like mounting
a thumb drive are taking a very long time.

I am not sure when I'll get back to this again, but I'll try to do a
re-install this weekend to see if I can get my system more stable.

adam

>
> adam
>
> >
> > Benjamin
> >
> > >
> > > regards,
> > > Nicolas
> > >

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

* Re: [PATCH v4 00/15] Move HEVC stateless controls out of staging
@ 2022-04-07  1:12                                   ` Adam Ford
  0 siblings, 0 replies; 81+ messages in thread
From: Adam Ford @ 2022-04-07  1:12 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: Nicolas Dufresne, Mauro Carvalho Chehab, Ezequiel Garcia,
	Philipp Zabel, Greg Kroah-Hartman, mripard, paul.kocialkowski,
	Chen-Yu Tsai, jernej.skrabec, Jonas Karlman, linux-media,
	Linux Kernel Mailing List, open list:STAGING SUBSYSTEM, arm-soc,
	linux-sunxi, kernel, knaerzche, jc

On Wed, Apr 6, 2022 at 8:34 AM Adam Ford <aford173@gmail.com> wrote:
>
> On Wed, Apr 6, 2022 at 8:05 AM Benjamin Gaignard
> <benjamin.gaignard@collabora.com> wrote:
> >
> >
> > Le 06/04/2022 à 15:02, Nicolas Dufresne a écrit :
> > > Le mercredi 06 avril 2022 à 14:50 +0200, Benjamin Gaignard a écrit :
> > >>> default=1 value=1
> > >>> 1: Frame-Based
> > >>>                    hevc_start_code 0x00a40a96 (menu)   : min=1 max=1
> > >>> default=1 value=1
> > >>> 1: Annex B Start Code
> > >> It is the same so that suggest the issue is coming from GStreamer plugin.
> > > Can you report the GStreamer commit hash you have building on ? Also please
> > > validate the creation date of the plugin (libgstv4l2codecs.so) against your
> > > source update date. Reminder that GStreamer is now mono-repo (just in case).
> > >
> > > https://gitlab.freedesktop.org/benjamin.gaignard1/gstreamer/-/tree/HEVC_aligned_with_kernel_5.15
> > > Hash: 54b7c1f98084c85d103446cc3f2edce42ad53b0f
> > >
> > > Benjamin, can you confirm you have no local changes and this is the hash you are
> > > building from ?
> >
> > Yes that is the hash I'm using without local changes
>
> I was on (gstreamer-HEVC_aligned_with_kernel_5.15) with a hash of
> 4b78eaa48c0c924afd57f85c47396b77497e69f8
>
> Benjamin's hash wasn't listed before, but I did a git pull, and now it is.
>
> I've checked out that hash, and I am rebuilding it now. I'll report my
> findings when it's done.  It's building on the imx8mq, so it may take
> some time.

We're getting closer:

# gst-launch-1.0 appsrc num-buffers=0 ! h265parse ! v4l2slh265dec ! fakesink
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
Redistribute latency...
New clock: GstSystemClock
Got EOS from element "pipeline0".
Execution ended after 0:00:00.000563180
Setting pipeline to NULL ...
Freeing pipeline ...

GStreamer-H.265-V4L2SL-Gst1.0: GStreamer H.265 V4L2SL decoder for
GStreamer 1.0... ✔️

The statemless decoder appears to show it can do h.265, but it fails
all the fluster tests.

Ran 0/147 tests successfully               in 9.376 secs

I checked other V4L2SL decoders and items that previously passed are
failing now, so I think something is wrong or corrupted with my
system.

For some reason, my system seems unstable, so I might reinstall
everything, but it will be a slow process.  I don't know if my sd card
is wearing out, or something is wrong, but simple things like mounting
a thumb drive are taking a very long time.

I am not sure when I'll get back to this again, but I'll try to do a
re-install this weekend to see if I can get my system more stable.

adam

>
> adam
>
> >
> > Benjamin
> >
> > >
> > > regards,
> > > Nicolas
> > >

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

end of thread, other threads:[~2022-04-07  1:17 UTC | newest]

Thread overview: 81+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-28 14:08 [PATCH v4 00/15] Move HEVC stateless controls out of staging Benjamin Gaignard
2022-02-28 14:08 ` Benjamin Gaignard
2022-02-28 14:08 ` [PATCH v4 01/15] videodev2.h: add V4L2_CTRL_FLAG_DYNAMIC_ARRAY Benjamin Gaignard
2022-02-28 14:08   ` Benjamin Gaignard
2022-02-28 14:08 ` [PATCH v4 02/15] v4l2-ctrls: add support for dynamically allocated arrays Benjamin Gaignard
2022-02-28 14:08   ` Benjamin Gaignard
2022-02-28 14:08 ` [PATCH v4 03/15] vivid: add dynamic array test control Benjamin Gaignard
2022-02-28 14:08   ` Benjamin Gaignard
2022-02-28 14:08 ` [PATCH v4 04/15] media: uapi: HEVC: Add missing fields in HEVC controls Benjamin Gaignard
2022-02-28 14:08   ` Benjamin Gaignard
2022-02-28 16:57   ` Sebastian Fricke
2022-02-28 16:57     ` Sebastian Fricke
2022-03-01 10:36     ` Benjamin Gaignard
2022-03-01 10:36       ` Benjamin Gaignard
2022-02-28 14:08 ` [PATCH v4 05/15] media: uapi: HEVC: Rename HEVC stateless controls with STATELESS prefix Benjamin Gaignard
2022-02-28 14:08   ` Benjamin Gaignard
2022-04-04 15:56   ` Nicolas Dufresne
2022-04-04 15:56     ` Nicolas Dufresne
2022-02-28 14:08 ` [PATCH v4 06/15] media: uapi: HEVC: Add document uAPI structure Benjamin Gaignard
2022-02-28 14:08   ` Benjamin Gaignard
2022-04-04 16:20   ` Nicolas Dufresne
2022-04-04 16:20     ` Nicolas Dufresne
2022-04-04 16:36     ` Benjamin Gaignard
2022-04-04 16:36       ` Benjamin Gaignard
2022-02-28 14:08 ` [PATCH v4 07/15] media: uapi: HEVC: Define V4L2_CID_STATELESS_HEVC_SLICE_PARAMS as a dynamic array Benjamin Gaignard
2022-02-28 14:08   ` Benjamin Gaignard
2022-02-28 14:08 ` [PATCH v4 08/15] media: uapi: Move parsed HEVC pixel format out of staging Benjamin Gaignard
2022-02-28 14:08   ` Benjamin Gaignard
2022-02-28 14:08 ` [PATCH v4 09/15] media: uapi: Add V4L2_CID_STATELESS_HEVC_ENTRY_POINT_OFFSETS control Benjamin Gaignard
2022-02-28 14:08   ` Benjamin Gaignard
2022-02-28 14:08 ` [PATCH v4 10/15] media: uapi: Move the HEVC stateless control type out of staging Benjamin Gaignard
2022-02-28 14:08   ` Benjamin Gaignard
2022-02-28 14:08 ` [PATCH v4 11/15] media: controls: Log HEVC stateless control in .std_log Benjamin Gaignard
2022-02-28 14:08   ` Benjamin Gaignard
2022-02-28 14:08 ` [PATCH v4 12/15] media: uapi: Create a dedicated header for Hantro control Benjamin Gaignard
2022-02-28 14:08   ` Benjamin Gaignard
2022-02-28 14:08 ` [PATCH v4 13/15] media: uapi: HEVC: fix padding in v4l2 control structures Benjamin Gaignard
2022-02-28 14:08   ` Benjamin Gaignard
2022-02-28 14:08 ` [PATCH v4 14/15] media: uapi: Change data_bit_offset definition Benjamin Gaignard
2022-02-28 14:08   ` Benjamin Gaignard
2022-04-06 20:36   ` Nicolas Dufresne
2022-04-06 20:36     ` Nicolas Dufresne
2022-02-28 14:08 ` [PATCH v4 15/15] media: uapi: move HEVC stateless controls out of staging Benjamin Gaignard
2022-03-30  7:09 ` [PATCH v4 00/15] Move " Benjamin Gaignard
2022-03-30  7:09   ` Benjamin Gaignard
2022-03-30 18:52   ` Adam Ford
2022-03-30 18:52     ` Adam Ford
2022-03-31  6:53     ` Benjamin Gaignard
2022-03-31  6:53       ` Benjamin Gaignard
2022-04-01 13:18       ` Benjamin Gaignard
2022-04-01 13:18         ` Benjamin Gaignard
2022-04-02 16:22         ` Adam Ford
2022-04-02 16:22           ` Adam Ford
2022-04-02 16:59           ` Adam Ford
2022-04-02 16:59             ` Adam Ford
2022-04-04 15:56             ` Benjamin Gaignard
2022-04-04 15:56               ` Benjamin Gaignard
2022-04-05 21:27               ` Adam Ford
2022-04-05 21:27                 ` Adam Ford
2022-04-06  6:56                 ` Benjamin Gaignard
2022-04-06  6:56                   ` Benjamin Gaignard
2022-04-06 12:28                   ` Adam Ford
2022-04-06 12:28                     ` Adam Ford
2022-04-06 12:40                     ` Benjamin Gaignard
2022-04-06 12:40                       ` Benjamin Gaignard
2022-04-06 12:46                       ` Adam Ford
2022-04-06 12:46                         ` Adam Ford
2022-04-06 12:50                         ` Benjamin Gaignard
2022-04-06 12:50                           ` Benjamin Gaignard
2022-04-06 12:55                           ` Adam Ford
2022-04-06 12:55                             ` Adam Ford
2022-04-06 13:01                             ` Benjamin Gaignard
2022-04-06 13:01                               ` Benjamin Gaignard
2022-04-06 13:02                           ` Nicolas Dufresne
2022-04-06 13:02                             ` Nicolas Dufresne
2022-04-06 13:05                             ` Benjamin Gaignard
2022-04-06 13:05                               ` Benjamin Gaignard
2022-04-06 13:34                               ` Adam Ford
2022-04-06 13:34                                 ` Adam Ford
2022-04-07  1:12                                 ` Adam Ford
2022-04-07  1:12                                   ` Adam Ford

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.