]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
media: rkvdec: h264: Don't hardcode SPS/PPS parameters
authorAlex Bee <knaerzche@gmail.com>
Tue, 25 Feb 2025 09:40:25 +0000 (10:40 +0100)
committerHans Verkuil <hverkuil@xs4all.nl>
Tue, 8 Apr 2025 07:21:21 +0000 (07:21 +0000)
Some SPS/PPS parameters are currently hardcoded in the driver even
though they exist in the stable uapi controls.

Use values from SPS/PPS controls instead of hardcoding them.

Signed-off-by: Alex Bee <knaerzche@gmail.com>
[jonas@kwiboo.se: constraint_set_flags condition, commit message]
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Tested-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Tested-by: Christopher Obbard <chris.obbard@collabora.com>
Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
drivers/staging/media/rkvdec/rkvdec-h264.c

index 7a1e76d423df55bd01c1ff26ff2c6d1b81ee7169..8bce8902b8dda39bb2058c8504bd52ccae6b4204 100644 (file)
@@ -655,13 +655,14 @@ static void assemble_hw_pps(struct rkvdec_ctx *ctx,
 
 #define WRITE_PPS(value, field) set_ps_field(hw_ps->info, field, value)
        /* write sps */
-       WRITE_PPS(0xf, SEQ_PARAMETER_SET_ID);
-       WRITE_PPS(0xff, PROFILE_IDC);
-       WRITE_PPS(1, CONSTRAINT_SET3_FLAG);
+       WRITE_PPS(sps->seq_parameter_set_id, SEQ_PARAMETER_SET_ID);
+       WRITE_PPS(sps->profile_idc, PROFILE_IDC);
+       WRITE_PPS(!!(sps->constraint_set_flags & (1 << 3)), CONSTRAINT_SET3_FLAG);
        WRITE_PPS(sps->chroma_format_idc, CHROMA_FORMAT_IDC);
        WRITE_PPS(sps->bit_depth_luma_minus8, BIT_DEPTH_LUMA);
        WRITE_PPS(sps->bit_depth_chroma_minus8, BIT_DEPTH_CHROMA);
-       WRITE_PPS(0, QPPRIME_Y_ZERO_TRANSFORM_BYPASS_FLAG);
+       WRITE_PPS(!!(sps->flags & V4L2_H264_SPS_FLAG_QPPRIME_Y_ZERO_TRANSFORM_BYPASS),
+                 QPPRIME_Y_ZERO_TRANSFORM_BYPASS_FLAG);
        WRITE_PPS(sps->log2_max_frame_num_minus4, LOG2_MAX_FRAME_NUM_MINUS4);
        WRITE_PPS(sps->max_num_ref_frames, MAX_NUM_REF_FRAMES);
        WRITE_PPS(sps->pic_order_cnt_type, PIC_ORDER_CNT_TYPE);
@@ -688,8 +689,8 @@ static void assemble_hw_pps(struct rkvdec_ctx *ctx,
                  DIRECT_8X8_INFERENCE_FLAG);
 
        /* write pps */
-       WRITE_PPS(0xff, PIC_PARAMETER_SET_ID);
-       WRITE_PPS(0x1f, PPS_SEQ_PARAMETER_SET_ID);
+       WRITE_PPS(pps->pic_parameter_set_id, PIC_PARAMETER_SET_ID);
+       WRITE_PPS(pps->seq_parameter_set_id, PPS_SEQ_PARAMETER_SET_ID);
        WRITE_PPS(!!(pps->flags & V4L2_H264_PPS_FLAG_ENTROPY_CODING_MODE),
                  ENTROPY_CODING_MODE_FLAG);
        WRITE_PPS(!!(pps->flags & V4L2_H264_PPS_FLAG_BOTTOM_FIELD_PIC_ORDER_IN_FRAME_PRESENT),