diff --git a/src/amd/common/ac_vcn_enc.h b/src/amd/common/ac_vcn_enc.h index ebff3a55b1b..8d4cc62aeaa 100644 --- a/src/amd/common/ac_vcn_enc.h +++ b/src/amd/common/ac_vcn_enc.h @@ -312,10 +312,10 @@ typedef struct rvcn_enc_rate_ctl_layer_init_s { } rvcn_enc_rate_ctl_layer_init_t; typedef struct rvcn_enc_rate_ctl_per_picture_s { - uint32_t qp; - uint32_t min_qp_app; - uint32_t max_qp_app; - uint32_t max_au_size; + uint32_t qp_obs; + uint32_t min_qp_app_obs; + uint32_t max_qp_app_obs; + uint32_t max_au_size_obs; uint32_t qp_i; uint32_t qp_p; uint32_t qp_b; diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c index 3d3462cb28d..8607d499449 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c @@ -261,9 +261,9 @@ static void radeon_vcn_enc_h264_get_rc_param(struct radeon_encoder *enc, frame_rate_num); } enc->enc_pic.rc_session_init.vbv_buffer_level = pic->rate_ctrl[0].vbv_buf_lv; - enc->enc_pic.rc_per_pic.qp = pic->quant_i_frames; - enc->enc_pic.rc_per_pic.min_qp_app = pic->rate_ctrl[0].min_qp; - enc->enc_pic.rc_per_pic.max_qp_app = pic->rate_ctrl[0].max_qp ? + enc->enc_pic.rc_per_pic.qp_obs = pic->quant_i_frames; + enc->enc_pic.rc_per_pic.min_qp_app_obs = pic->rate_ctrl[0].min_qp; + enc->enc_pic.rc_per_pic.max_qp_app_obs = pic->rate_ctrl[0].max_qp ? pic->rate_ctrl[0].max_qp : 51; enc->enc_pic.rc_per_pic.qp_i = pic->quant_i_frames; enc->enc_pic.rc_per_pic.qp_p = pic->quant_p_frames; @@ -295,7 +295,7 @@ static void radeon_vcn_enc_h264_get_rc_param(struct radeon_encoder *enc, default: enc->enc_pic.rc_session_init.rate_control_method = RENCODE_RATE_CONTROL_METHOD_NONE; } - enc->enc_pic.rc_per_pic.max_au_size = pic->rate_ctrl[0].max_au_size; + enc->enc_pic.rc_per_pic.max_au_size_obs = pic->rate_ctrl[0].max_au_size; enc->enc_pic.rc_per_pic.max_au_size_i = pic->rate_ctrl[0].max_au_size; enc->enc_pic.rc_per_pic.max_au_size_p = pic->rate_ctrl[0].max_au_size; enc->enc_pic.rc_per_pic.max_au_size_b = pic->rate_ctrl[0].max_au_size; @@ -518,9 +518,9 @@ static void radeon_vcn_enc_hevc_get_rc_param(struct radeon_encoder *enc, frame_rate_den, frame_rate_num); enc->enc_pic.rc_session_init.vbv_buffer_level = pic->rc.vbv_buf_lv; - enc->enc_pic.rc_per_pic.qp = pic->rc.quant_i_frames; - enc->enc_pic.rc_per_pic.min_qp_app = pic->rc.min_qp; - enc->enc_pic.rc_per_pic.max_qp_app = pic->rc.max_qp ? pic->rc.max_qp : 51; + enc->enc_pic.rc_per_pic.qp_obs = pic->rc.quant_i_frames; + enc->enc_pic.rc_per_pic.min_qp_app_obs = pic->rc.min_qp; + enc->enc_pic.rc_per_pic.max_qp_app_obs = pic->rc.max_qp ? pic->rc.max_qp : 51; enc->enc_pic.rc_per_pic.qp_i = pic->rc.quant_i_frames; enc->enc_pic.rc_per_pic.qp_p = pic->rc.quant_p_frames; enc->enc_pic.rc_per_pic.min_qp_i = pic->rc.min_qp; @@ -547,7 +547,7 @@ static void radeon_vcn_enc_hevc_get_rc_param(struct radeon_encoder *enc, default: enc->enc_pic.rc_session_init.rate_control_method = RENCODE_RATE_CONTROL_METHOD_NONE; } - enc->enc_pic.rc_per_pic.max_au_size = pic->rc.max_au_size; + enc->enc_pic.rc_per_pic.max_au_size_obs = pic->rc.max_au_size; enc->enc_pic.rc_per_pic.max_au_size_i = pic->rc.max_au_size; enc->enc_pic.rc_per_pic.max_au_size_p = pic->rc.max_au_size; } @@ -746,9 +746,9 @@ static void radeon_vcn_enc_av1_get_rc_param(struct radeon_encoder *enc, frame_rate_num); } enc->enc_pic.rc_session_init.vbv_buffer_level = pic->rc[0].vbv_buf_lv; - enc->enc_pic.rc_per_pic.qp = pic->rc[0].qp; - enc->enc_pic.rc_per_pic.min_qp_app = pic->rc[0].min_qp ? pic->rc[0].min_qp : 1; - enc->enc_pic.rc_per_pic.max_qp_app = pic->rc[0].max_qp ? pic->rc[0].max_qp : 255; + enc->enc_pic.rc_per_pic.qp_obs = pic->rc[0].qp; + enc->enc_pic.rc_per_pic.min_qp_app_obs = pic->rc[0].min_qp ? pic->rc[0].min_qp : 1; + enc->enc_pic.rc_per_pic.max_qp_app_obs = pic->rc[0].max_qp ? pic->rc[0].max_qp : 255; enc->enc_pic.rc_per_pic.qp_i = pic->rc[0].qp; enc->enc_pic.rc_per_pic.qp_p = pic->rc[0].qp_inter; min_qp = pic->rc[0].min_qp ? pic->rc[0].min_qp : 1; @@ -776,7 +776,7 @@ static void radeon_vcn_enc_av1_get_rc_param(struct radeon_encoder *enc, default: enc->enc_pic.rc_session_init.rate_control_method = RENCODE_RATE_CONTROL_METHOD_NONE; } - enc->enc_pic.rc_per_pic.max_au_size = pic->rc[0].max_au_size; + enc->enc_pic.rc_per_pic.max_au_size_obs = pic->rc[0].max_au_size; enc->enc_pic.rc_per_pic.max_au_size_i = pic->rc[0].max_au_size; enc->enc_pic.rc_per_pic.max_au_size_p = pic->rc[0].max_au_size; } 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 20efe2ad650..88c9aba3a9f 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc_1_2.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc_1_2.c @@ -1190,11 +1190,13 @@ static void radeon_enc_intra_refresh(struct radeon_encoder *enc) static void radeon_enc_rc_per_pic(struct radeon_encoder *enc) { + fprintf(stderr, "Warning: Obsoleted rate control is being used due to outdated VCN firmware on system.\n"); + fprintf(stderr, "Updating VCN firmware is highly recommended.\n"); RADEON_ENC_BEGIN(enc->cmd.rc_per_pic); - RADEON_ENC_CS(enc->enc_pic.rc_per_pic.qp); - RADEON_ENC_CS(enc->enc_pic.rc_per_pic.min_qp_app); - RADEON_ENC_CS(enc->enc_pic.rc_per_pic.max_qp_app); - RADEON_ENC_CS(enc->enc_pic.rc_per_pic.max_au_size); + RADEON_ENC_CS(enc->enc_pic.rc_per_pic.qp_obs); + RADEON_ENC_CS(enc->enc_pic.rc_per_pic.min_qp_app_obs); + RADEON_ENC_CS(enc->enc_pic.rc_per_pic.max_qp_app_obs); + RADEON_ENC_CS(enc->enc_pic.rc_per_pic.max_au_size_obs); RADEON_ENC_CS(enc->enc_pic.rc_per_pic.enabled_filler_data); RADEON_ENC_CS(enc->enc_pic.rc_per_pic.skip_frame_enable); RADEON_ENC_CS(enc->enc_pic.rc_per_pic.enforce_hrd);