diff mbox series

media: uapi: HEVC: Add num_delta_pocs_of_ref_rps_idx field

Message ID 20230418160717.743517-1-benjamin.gaignard@collabora.com
State Accepted
Commit ae440c5da33cdb90a109f2df2a0360c67b3fab7e
Headers show
Series media: uapi: HEVC: Add num_delta_pocs_of_ref_rps_idx field | expand

Commit Message

Benjamin Gaignard April 18, 2023, 4:07 p.m. UTC
Some drivers firmwares parse by themselves slice header and need
num_delta_pocs_of_ref_rps_idx value to parse slice header
short_term_ref_pic_set().
Use one of the 4 reserved bytes to store this value without
changing the v4l2_ctrl_hevc_decode_params structure size and padding.

This value also exist in DXVA API.

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
 .../userspace-api/media/v4l/ext-ctrls-codec-stateless.rst  | 7 +++++++
 include/uapi/linux/v4l2-controls.h                         | 6 +++++-
 2 files changed, 12 insertions(+), 1 deletion(-)

Comments

Nicolas Dufresne April 19, 2023, 8:10 p.m. UTC | #1
Le mardi 18 avril 2023 à 18:07 +0200, Benjamin Gaignard a écrit :
> Some drivers firmwares parse by themselves slice header and need
> num_delta_pocs_of_ref_rps_idx value to parse slice header
> short_term_ref_pic_set().
> Use one of the 4 reserved bytes to store this value without
> changing the v4l2_ctrl_hevc_decode_params structure size and padding.
> 
> This value also exist in DXVA API.
> 
> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
> 

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

For the info, this is in preparation for MTK VCODEC HEVC driver. It makes our
API (hopefully) on par with DXVA, which has always been the goal, we simply
missed it during review.

regards,
Nicolas

> ---
>  .../userspace-api/media/v4l/ext-ctrls-codec-stateless.rst  | 7 +++++++
>  include/uapi/linux/v4l2-controls.h                         | 6 +++++-
>  2 files changed, 12 insertions(+), 1 deletion(-)
> 
> 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 3d8411acd5b8..92ce3e126929 100644
> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst
> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst
> @@ -2923,6 +2923,13 @@ This structure contains all loop filter related parameters. See sections
>        - ``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.
> +    * - __u8
> +      - ``num_delta_pocs_of_ref_rps_idx``
> +      - When the short_term_ref_pic_set_sps_flag in the slice header is equal to 0,
> +        it is the same than derived value NumDeltaPocs[RefRpsIdx]. It can be used to parse
> +        the RPS data in slice headers instead of skipping it with @short_term_ref_pic_set_size.
> +        When the value of short_term_ref_pic_set_sps_flag in the slice header is
> +        equal to 1, num_delta_pocs_of_ref_rps_idx shall be set to 0.
>      * - struct :c:type:`v4l2_hevc_dpb_entry`
>        - ``dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
>        - The decoded picture buffer, for meta-data about reference frames.
> diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
> index 5e80daa4ffe0..7bf59a87a1bf 100644
> --- a/include/uapi/linux/v4l2-controls.h
> +++ b/include/uapi/linux/v4l2-controls.h
> @@ -2385,6 +2385,9 @@ 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
> + * @num_delta_pocs_of_ref_rps_idx: same as the derived value NumDeltaPocs[RefRpsIdx],
> + *				   can be used to parse the RPS data in slice headers
> + *				   instead of skipping it with @short_term_ref_pic_set_size.
>   * @reserved: padding field. Should be zeroed by applications.
>   * @dpb: the decoded picture buffer, for meta-data about reference frames
>   * @flags: see V4L2_HEVC_DECODE_PARAM_FLAG_{}
> @@ -2400,7 +2403,8 @@ struct v4l2_ctrl_hevc_decode_params {
>  	__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];
> -	__u8	reserved[4];
> +	__u8	num_delta_pocs_of_ref_rps_idx;
> +	__u8	reserved[3];
>  	struct	v4l2_hevc_dpb_entry dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
>  	__u64	flags;
>  };
diff mbox series

Patch

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 3d8411acd5b8..92ce3e126929 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst
@@ -2923,6 +2923,13 @@  This structure contains all loop filter related parameters. See sections
       - ``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.
+    * - __u8
+      - ``num_delta_pocs_of_ref_rps_idx``
+      - When the short_term_ref_pic_set_sps_flag in the slice header is equal to 0,
+        it is the same than derived value NumDeltaPocs[RefRpsIdx]. It can be used to parse
+        the RPS data in slice headers instead of skipping it with @short_term_ref_pic_set_size.
+        When the value of short_term_ref_pic_set_sps_flag in the slice header is
+        equal to 1, num_delta_pocs_of_ref_rps_idx shall be set to 0.
     * - struct :c:type:`v4l2_hevc_dpb_entry`
       - ``dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX]``
       - The decoded picture buffer, for meta-data about reference frames.
diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
index 5e80daa4ffe0..7bf59a87a1bf 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -2385,6 +2385,9 @@  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
+ * @num_delta_pocs_of_ref_rps_idx: same as the derived value NumDeltaPocs[RefRpsIdx],
+ *				   can be used to parse the RPS data in slice headers
+ *				   instead of skipping it with @short_term_ref_pic_set_size.
  * @reserved: padding field. Should be zeroed by applications.
  * @dpb: the decoded picture buffer, for meta-data about reference frames
  * @flags: see V4L2_HEVC_DECODE_PARAM_FLAG_{}
@@ -2400,7 +2403,8 @@  struct v4l2_ctrl_hevc_decode_params {
 	__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];
-	__u8	reserved[4];
+	__u8	num_delta_pocs_of_ref_rps_idx;
+	__u8	reserved[3];
 	struct	v4l2_hevc_dpb_entry dpb[V4L2_HEVC_DPB_ENTRIES_NUM_MAX];
 	__u64	flags;
 };