media: uapi: HEVC: Add num_delta_pocs_of_ref_rps_idx field
authorBenjamin Gaignard <benjamin.gaignard@collabora.com>
Wed, 24 May 2023 08:07:38 +0000 (16:07 +0800)
committerHans Verkuil <hverkuil-cisco@xs4all.nl>
Thu, 25 May 2023 14:21:21 +0000 (16:21 +0200)
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>
Signed-off-by: Yunfei Dong <yunfei.dong@mediatek.com>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
[hverkuil: fix typo in num_delta_pocs_of_ref_rps_idx doc]

Documentation/userspace-api/media/v4l/ext-ctrls-codec-stateless.rst
include/uapi/linux/v4l2-controls.h

index 3d8411acd5b8ca9b38b622e8522ce80fe80607ac..677bf0fbcc5a2731fc70c8ed496e258266793e6c 100644 (file)
@@ -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 as the 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.
index 5e80daa4ffe0f6e65633bf3155d37301a553a1c8..7bf59a87a1bf799dc5acb43b4bd50743789393fd 100644 (file)
@@ -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;
 };