media: hevc: Remove RPS named flags
authorBenjamin Gaignard <benjamin.gaignard@collabora.com>
Fri, 7 Jan 2022 15:54:54 +0000 (16:54 +0100)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Sun, 23 Jan 2022 20:18:44 +0000 (21:18 +0100)
Marking a picture as long-term reference is valid for DPB but not for RPS.
Change flag name to match with the description in HEVC spec chapter
"8.3.2 Decoding process for reference picture set".

PocStCurrBefore, PocStCurrAfter, PocLtCurr lists could be built by the
kernel from the DPB entries struct v4l2_hevc_dpb_entry, using the
information in the rps field. This way RPS flags becomes useless and are
removed.

This patch breaks the staging HEVC API because it introduces a new flag,
changes a field name in v4l2_hevc_dpb_entry structure and removes
V4L2_HEVC_DPB_ENTRY_RPS_* flags.

[hverkuil: fixed some typos]

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
Reviewed-by: Jernej Skrabec <jernej.skrabec@gmail.com>
Reviewed-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
drivers/staging/media/hantro/hantro_g2_hevc_dec.c
drivers/staging/media/sunxi/cedrus/cedrus_h265.c
include/media/hevc-ctrls.h

index e141f0e4eec9a2d8037746364c51a9ba2b7bc335..e8de13e16c3bb1e9f534fba195f37e11f6b5ab5f 100644 (file)
@@ -3166,11 +3166,11 @@ enum v4l2_mpeg_video_hevc_size_of_length_field -
        :c:func:`v4l2_timeval_to_ns()` function to convert the struct
        :c:type:`timeval` in struct :c:type:`v4l2_buffer` to a __u64.
     * - __u8
-      - ``rps``
-      - The reference set for the reference frame
-        (V4L2_HEVC_DPB_ENTRY_RPS_ST_CURR_BEFORE,
-        V4L2_HEVC_DPB_ENTRY_RPS_ST_CURR_AFTER or
-        V4L2_HEVC_DPB_ENTRY_RPS_LT_CURR)
+      - ``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.
index 99d8ea7543da0917b9aa3d2b760a85b6d9ff440d..14e0e64141009c671182d832efac892871e0b88a 100644 (file)
@@ -433,7 +433,7 @@ static int set_ref(struct hantro_ctx *ctx)
                chroma_addr = luma_addr + cr_offset;
                mv_addr = luma_addr + mv_offset;
 
-               if (dpb[i].rps == V4L2_HEVC_DPB_ENTRY_RPS_LT_CURR)
+               if (dpb[i].flags & V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE)
                        dpb_longterm_e |= BIT(V4L2_HEVC_DPB_ENTRIES_NUM_MAX - 1 - i);
 
                hantro_write_addr(vpu, G2_REF_LUMA_ADDR(i), luma_addr);
index 8829a7bab07ec6b116ddb9cb91b5b20543c189a1..8ab2d9c6f0485cfe73fdd401cac85a9b96bfa99f 100644 (file)
@@ -169,7 +169,7 @@ static void cedrus_h265_ref_pic_list_write(struct cedrus_dev *dev,
                unsigned int index = list[i];
                u8 value = list[i];
 
-               if (dpb[index].rps == V4L2_HEVC_DPB_ENTRY_RPS_LT_CURR)
+               if (dpb[index].flags & V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE)
                        value |= VE_DEC_H265_SRAM_REF_PIC_LIST_LT_REF;
 
                /* Each SRAM word gathers up to 4 references. */
index ef63bc205756783cd513e13a4547c9dd6722cb09..01ccda48d8c575cd26b9de9842a3e4176ac2b597 100644 (file)
@@ -127,15 +127,13 @@ struct v4l2_ctrl_hevc_pps {
        __u64   flags;
 };
 
-#define V4L2_HEVC_DPB_ENTRY_RPS_ST_CURR_BEFORE 0x01
-#define V4L2_HEVC_DPB_ENTRY_RPS_ST_CURR_AFTER  0x02
-#define V4L2_HEVC_DPB_ENTRY_RPS_LT_CURR                0x03
+#define V4L2_HEVC_DPB_ENTRY_LONG_TERM_REFERENCE        0x01
 
 #define V4L2_HEVC_DPB_ENTRIES_NUM_MAX          16
 
 struct v4l2_hevc_dpb_entry {
        __u64   timestamp;
-       __u8    rps;
+       __u8    flags;
        __u8    field_pic;
        __u16   pic_order_cnt[2];
        __u8    padding[2];