From fef2004b11dd32ecaaa76c305b8ba5f264839700 Mon Sep 17 00:00:00 2001 From: Boyuan Zhang Date: Fri, 22 Apr 2022 22:31:07 -0400 Subject: [PATCH] radeonsi/vcn/enc: enable cabac entropy mode Set cabac entropy mode if enabled. v2: add extra check on radeon driver side, disable cabac if profile is baseline or extended. Signed-off-by: Boyuan Zhang Acked-by: Leo Liu Reviewed-by: Ruijing Dong Part-of: --- src/gallium/drivers/radeonsi/radeon_vcn_enc.c | 8 ++++++++ src/gallium/drivers/radeonsi/radeon_vcn_enc_1_2.c | 3 --- src/gallium/drivers/radeonsi/radeon_vcn_enc_3_0.c | 3 --- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c index 0e608adf721..bec803c3519 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c @@ -101,6 +101,14 @@ static void radeon_vcn_enc_get_param(struct radeon_encoder *enc, struct pipe_pic default: enc->enc_pic.rc_session_init.rate_control_method = RENCODE_RATE_CONTROL_METHOD_NONE; } + enc->enc_pic.spec_misc.profile_idc = u_get_h264_profile_idc(enc->base.profile); + if (enc->enc_pic.spec_misc.profile_idc >= PIPE_VIDEO_PROFILE_MPEG4_AVC_MAIN && + enc->enc_pic.spec_misc.profile_idc != PIPE_VIDEO_PROFILE_MPEG4_AVC_EXTENDED) + enc->enc_pic.spec_misc.cabac_enable = pic->pic_ctrl.enc_cabac_enable; + else + enc->enc_pic.spec_misc.cabac_enable = false; + enc->enc_pic.spec_misc.cabac_init_idc = enc->enc_pic.spec_misc.cabac_enable ? pic->pic_ctrl.enc_cabac_init_idc : 0; + } else if (u_reduce_video_profile(picture->profile) == PIPE_VIDEO_FORMAT_HEVC) { struct pipe_h265_enc_picture_desc *pic = (struct pipe_h265_enc_picture_desc *)picture; enc->enc_pic.picture_type = pic->picture_type; diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc_1_2.c b/src/gallium/drivers/radeonsi/radeon_vcn_enc_1_2.c index c208ac77fa4..fdc70911d65 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc_1_2.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc_1_2.c @@ -168,11 +168,8 @@ static void radeon_enc_slice_control_hevc(struct radeon_encoder *enc) static void radeon_enc_spec_misc(struct radeon_encoder *enc) { enc->enc_pic.spec_misc.constrained_intra_pred_flag = 0; - enc->enc_pic.spec_misc.cabac_enable = 0; - enc->enc_pic.spec_misc.cabac_init_idc = 0; enc->enc_pic.spec_misc.half_pel_enabled = 1; enc->enc_pic.spec_misc.quarter_pel_enabled = 1; - enc->enc_pic.spec_misc.profile_idc = u_get_h264_profile_idc(enc->base.profile); enc->enc_pic.spec_misc.level_idc = enc->base.level; RADEON_ENC_BEGIN(enc->cmd.spec_misc_h264); diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc_3_0.c b/src/gallium/drivers/radeonsi/radeon_vcn_enc_3_0.c index 6c5871eae0f..9e28b62c081 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc_3_0.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc_3_0.c @@ -41,11 +41,8 @@ static void radeon_enc_spec_misc(struct radeon_encoder *enc) { enc->enc_pic.spec_misc.constrained_intra_pred_flag = 0; - enc->enc_pic.spec_misc.cabac_enable = 0; - enc->enc_pic.spec_misc.cabac_init_idc = 0; enc->enc_pic.spec_misc.half_pel_enabled = 1; enc->enc_pic.spec_misc.quarter_pel_enabled = 1; - enc->enc_pic.spec_misc.profile_idc = u_get_h264_profile_idc(enc->base.profile); enc->enc_pic.spec_misc.level_idc = enc->base.level; enc->enc_pic.spec_misc.b_picture_enabled = 0; enc->enc_pic.spec_misc.weighted_bipred_idc = 0;