radeonsi/vce,uvd_enc: Stop using obsolete rate control params

Other drivers don't use these and the values can be derived from other
fields.

Reviewed-by: Ruijing Dong <ruijing.dong@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30992>
This commit is contained in:
David Rosca 2024-08-27 11:11:42 +02:00 committed by Marge Bot
parent 7fa7812219
commit 96975bc32f
4 changed files with 54 additions and 12 deletions

View file

@ -316,9 +316,13 @@ static void radeon_uvd_enc_rc_layer_init(struct radeon_uvd_encoder *enc,
enc->enc_pic.rc_layer_init.frame_rate_num = pic->rc[0].frame_rate_num;
enc->enc_pic.rc_layer_init.frame_rate_den = pic->rc[0].frame_rate_den;
enc->enc_pic.rc_layer_init.vbv_buffer_size = pic->rc[0].vbv_buffer_size;
enc->enc_pic.rc_layer_init.avg_target_bits_per_picture = pic->rc[0].target_bits_picture;
enc->enc_pic.rc_layer_init.peak_bits_per_picture_integer = pic->rc[0].peak_bits_picture_integer;
enc->enc_pic.rc_layer_init.peak_bits_per_picture_fractional = pic->rc[0].peak_bits_picture_fraction;
enc->enc_pic.rc_layer_init.avg_target_bits_per_picture =
pic->rc[0].target_bitrate * ((float)pic->rc[0].frame_rate_den / pic->rc[0].frame_rate_num);
enc->enc_pic.rc_layer_init.peak_bits_per_picture_integer =
pic->rc[0].peak_bitrate * ((float)pic->rc[0].frame_rate_den / pic->rc[0].frame_rate_num);
enc->enc_pic.rc_layer_init.peak_bits_per_picture_fractional =
(((pic->rc[0].peak_bitrate * (uint64_t)pic->rc[0].frame_rate_den) % pic->rc[0].frame_rate_num) << 32) /
pic->rc[0].frame_rate_num;
RADEON_ENC_BEGIN(RENC_UVD_IB_PARAM_RATE_CONTROL_LAYER_INIT);
RADEON_ENC_CS(enc->enc_pic.rc_layer_init.target_bit_rate);

View file

@ -72,6 +72,20 @@ static void create(struct rvce_encoder *enc)
static void rate_control(struct rvce_encoder *enc)
{
uint32_t target_bits_picture =
enc->pic.rate_ctrl[0].target_bitrate *
((float)enc->pic.rate_ctrl[0].frame_rate_den /
enc->pic.rate_ctrl[0].frame_rate_num);
uint32_t peak_bits_picture_integer =
enc->pic.rate_ctrl[0].peak_bitrate *
((float)enc->pic.rate_ctrl[0].frame_rate_den /
enc->pic.rate_ctrl[0].frame_rate_num);
uint32_t peak_bits_picture_fraction =
(((enc->pic.rate_ctrl[0].peak_bitrate *
(uint64_t)enc->pic.rate_ctrl[0].frame_rate_den) %
enc->pic.rate_ctrl[0].frame_rate_num) << 32) /
enc->pic.rate_ctrl[0].frame_rate_num;
RVCE_BEGIN(0x04000005); // rate control
RVCE_CS(enc->pic.rate_ctrl[0].rate_ctrl_method); // encRateControlMethod
RVCE_CS(enc->pic.rate_ctrl[0].target_bitrate); // encRateControlTargetBitRate
@ -86,9 +100,9 @@ static void rate_control(struct rvce_encoder *enc)
RVCE_CS(0x00000000); // encVBVBufferLevel
RVCE_CS(0x00000000); // encMaxAUSize
RVCE_CS(0x00000000); // encQPInitialMode
RVCE_CS(enc->pic.rate_ctrl[0].target_bits_picture); // encTargetBitsPerPicture
RVCE_CS(enc->pic.rate_ctrl[0].peak_bits_picture_integer); // encPeakBitsPerPictureInteger
RVCE_CS(enc->pic.rate_ctrl[0].peak_bits_picture_fraction); // encPeakBitsPerPictureFractional
RVCE_CS(target_bits_picture); // encTargetBitsPerPicture
RVCE_CS(peak_bits_picture_integer); // encPeakBitsPerPictureInteger
RVCE_CS(peak_bits_picture_fraction); // encPeakBitsPerPictureFractional
RVCE_CS(0x00000000); // encMinQP
RVCE_CS(0x00000033); // encMaxQP
RVCE_CS(0x00000000); // encSkipFrameEnable

View file

@ -18,6 +18,20 @@
static void rate_control(struct rvce_encoder *enc)
{
uint32_t target_bits_picture =
enc->pic.rate_ctrl[0].target_bitrate *
((float)enc->pic.rate_ctrl[0].frame_rate_den /
enc->pic.rate_ctrl[0].frame_rate_num);
uint32_t peak_bits_picture_integer =
enc->pic.rate_ctrl[0].peak_bitrate *
((float)enc->pic.rate_ctrl[0].frame_rate_den /
enc->pic.rate_ctrl[0].frame_rate_num);
uint32_t peak_bits_picture_fraction =
(((enc->pic.rate_ctrl[0].peak_bitrate *
(uint64_t)enc->pic.rate_ctrl[0].frame_rate_den) %
enc->pic.rate_ctrl[0].frame_rate_num) << 32) /
enc->pic.rate_ctrl[0].frame_rate_num;
RVCE_BEGIN(0x04000005); // rate control
RVCE_CS(enc->pic.rate_ctrl[0].rate_ctrl_method); // encRateControlMethod
RVCE_CS(enc->pic.rate_ctrl[0].target_bitrate); // encRateControlTargetBitRate
@ -32,9 +46,9 @@ static void rate_control(struct rvce_encoder *enc)
RVCE_CS(0x00000000); // encVBVBufferLevel
RVCE_CS(0x00000000); // encMaxAUSize
RVCE_CS(0x00000000); // encQPInitialMode
RVCE_CS(enc->pic.rate_ctrl[0].target_bits_picture); // encTargetBitsPerPicture
RVCE_CS(enc->pic.rate_ctrl[0].peak_bits_picture_integer); // encPeakBitsPerPictureInteger
RVCE_CS(enc->pic.rate_ctrl[0].peak_bits_picture_fraction); // encPeakBitsPerPictureFractional
RVCE_CS(target_bits_picture); // encTargetBitsPerPicture
RVCE_CS(peak_bits_picture_integer); // encPeakBitsPerPictureInteger
RVCE_CS(peak_bits_picture_fraction); // encPeakBitsPerPictureFractional
RVCE_CS(0x00000000); // encMinQP
RVCE_CS(0x00000033); // encMaxQP
RVCE_CS(0x00000000); // encSkipFrameEnable

View file

@ -32,9 +32,19 @@ static void get_rate_control_param(struct rvce_encoder *enc, struct pipe_h264_en
enc->enc_pic.rc.vbv_buf_lv = pic->rate_ctrl[0].vbv_buf_lv;
enc->enc_pic.rc.fill_data_enable = pic->rate_ctrl[0].fill_data_enable;
enc->enc_pic.rc.enforce_hrd = pic->rate_ctrl[0].enforce_hrd;
enc->enc_pic.rc.target_bits_picture = pic->rate_ctrl[0].target_bits_picture;
enc->enc_pic.rc.peak_bits_picture_integer = pic->rate_ctrl[0].peak_bits_picture_integer;
enc->enc_pic.rc.peak_bits_picture_fraction = pic->rate_ctrl[0].peak_bits_picture_fraction;
enc->enc_pic.rc.target_bits_picture =
enc->pic.rate_ctrl[0].target_bitrate *
((float)enc->pic.rate_ctrl[0].frame_rate_den /
enc->pic.rate_ctrl[0].frame_rate_num);
enc->enc_pic.rc.peak_bits_picture_integer =
enc->pic.rate_ctrl[0].peak_bitrate *
((float)enc->pic.rate_ctrl[0].frame_rate_den /
enc->pic.rate_ctrl[0].frame_rate_num);
enc->enc_pic.rc.peak_bits_picture_fraction =
(((enc->pic.rate_ctrl[0].peak_bitrate *
(uint64_t)enc->pic.rate_ctrl[0].frame_rate_den) %
enc->pic.rate_ctrl[0].frame_rate_num) << 32) /
enc->pic.rate_ctrl[0].frame_rate_num;
}
static void get_motion_estimation_param(struct rvce_encoder *enc,