From cd2562117a5d43d322a609f62e9fe446f6a6a247 Mon Sep 17 00:00:00 2001 From: David Rosca Date: Tue, 3 Sep 2024 15:03:04 +0200 Subject: [PATCH] frontends/va: Parse more H264 PPS for transform_8x8_mode_flag Also use constrained_intra_pred_flag from pic params. Reviewed-by: Ruijing Dong Part-of: --- src/gallium/frontends/va/picture_h264_enc.c | 15 +++++++++++++++ src/gallium/include/pipe/p_video_state.h | 1 + 2 files changed, 16 insertions(+) diff --git a/src/gallium/frontends/va/picture_h264_enc.c b/src/gallium/frontends/va/picture_h264_enc.c index ac691772293..08404d2a060 100644 --- a/src/gallium/frontends/va/picture_h264_enc.c +++ b/src/gallium/frontends/va/picture_h264_enc.c @@ -136,6 +136,10 @@ vlVaHandleVAEncPictureParameterBufferTypeH264(vlVaDriver *drv, vlVaContext *cont context->desc.h264enc.pic_ctrl.chroma_qp_index_offset = h264->chroma_qp_index_offset; context->desc.h264enc.pic_ctrl.second_chroma_qp_index_offset = h264->second_chroma_qp_index_offset; + context->desc.h264enc.pic_ctrl.constrained_intra_pred_flag = + h264->pic_fields.bits.constrained_intra_pred_flag; + context->desc.h264enc.pic_ctrl.transform_8x8_mode_flag = + h264->pic_fields.bits.transform_8x8_mode_flag; if (!(context->desc.base.packed_headers & VA_ENC_PACKED_HEADER_SLICE)) { unsigned max_poc = 1 << (context->desc.h264enc.seq.log2_max_pic_order_cnt_lsb_minus4 + 4); @@ -749,6 +753,17 @@ static void parseEncPpsParamsH264(vlVaContext *context, struct vl_rbsp *rbsp) pic->deblocking_filter_control_present_flag = vl_rbsp_u(rbsp, 1); pic->constrained_intra_pred_flag = vl_rbsp_u(rbsp, 1); pic->redundant_pic_cnt_present_flag = vl_rbsp_u(rbsp, 1); + if (vl_rbsp_more_data(rbsp)) { + pic->transform_8x8_mode_flag = vl_rbsp_u(rbsp, 1); + if (vl_rbsp_u(rbsp, 1)) { /* pic_scaling_matrix_present_flag */ + debug_error("PPS scaling matrix not supported"); + return; + } + pic->second_chroma_qp_index_offset = vl_rbsp_se(rbsp); + } else { + pic->transform_8x8_mode_flag = 0; + pic->second_chroma_qp_index_offset = pic->chroma_qp_index_offset; + } } VAStatus diff --git a/src/gallium/include/pipe/p_video_state.h b/src/gallium/include/pipe/p_video_state.h index 7a0dd36ef60..c36e4f65b3c 100644 --- a/src/gallium/include/pipe/p_video_state.h +++ b/src/gallium/include/pipe/p_video_state.h @@ -538,6 +538,7 @@ struct pipe_h264_enc_pic_control uint32_t deblocking_filter_control_present_flag : 1; uint32_t constrained_intra_pred_flag : 1; uint32_t redundant_pic_cnt_present_flag : 1; + uint32_t transform_8x8_mode_flag : 1; }; uint8_t nal_ref_idc; uint8_t nal_unit_type;