radeon/vce: change rate ctrl struct to array

Signed-off-by: Thong Thai <thong.thai@amd.com>
Reviewed-by: Boyuan Zhang <Boyuan.Zhang@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11850>
This commit is contained in:
Thong Thai 2021-07-13 12:06:00 -04:00
parent 21da3be7a2
commit 65ad80f1d8
4 changed files with 40 additions and 40 deletions

View File

@ -261,13 +261,13 @@ static void rvce_begin_frame(struct pipe_video_codec *encoder, struct pipe_video
struct pipe_h264_enc_picture_desc *pic = (struct pipe_h264_enc_picture_desc *)picture;
bool need_rate_control =
enc->pic.rate_ctrl.rate_ctrl_method != pic->rate_ctrl.rate_ctrl_method ||
enc->pic.rate_ctrl[0].rate_ctrl_method != pic->rate_ctrl[0].rate_ctrl_method ||
enc->pic.quant_i_frames != pic->quant_i_frames ||
enc->pic.quant_p_frames != pic->quant_p_frames ||
enc->pic.quant_b_frames != pic->quant_b_frames ||
enc->pic.rate_ctrl.target_bitrate != pic->rate_ctrl.target_bitrate ||
enc->pic.rate_ctrl.frame_rate_num != pic->rate_ctrl.frame_rate_num ||
enc->pic.rate_ctrl.frame_rate_den != pic->rate_ctrl.frame_rate_den;
enc->pic.rate_ctrl[0].target_bitrate != pic->rate_ctrl[0].target_bitrate ||
enc->pic.rate_ctrl[0].frame_rate_num != pic->rate_ctrl[0].frame_rate_num ||
enc->pic.rate_ctrl[0].frame_rate_den != pic->rate_ctrl[0].frame_rate_den;
enc->pic = *pic;
enc->si_get_pic_param(enc, pic);

View File

@ -92,22 +92,22 @@ static void create(struct rvce_encoder *enc)
static void rate_control(struct rvce_encoder *enc)
{
RVCE_BEGIN(0x04000005); // rate control
RVCE_CS(enc->pic.rate_ctrl.rate_ctrl_method); // encRateControlMethod
RVCE_CS(enc->pic.rate_ctrl.target_bitrate); // encRateControlTargetBitRate
RVCE_CS(enc->pic.rate_ctrl.peak_bitrate); // encRateControlPeakBitRate
RVCE_CS(enc->pic.rate_ctrl.frame_rate_num); // encRateControlFrameRateNum
RVCE_CS(enc->pic.rate_ctrl[0].rate_ctrl_method); // encRateControlMethod
RVCE_CS(enc->pic.rate_ctrl[0].target_bitrate); // encRateControlTargetBitRate
RVCE_CS(enc->pic.rate_ctrl[0].peak_bitrate); // encRateControlPeakBitRate
RVCE_CS(enc->pic.rate_ctrl[0].frame_rate_num); // encRateControlFrameRateNum
RVCE_CS(0x00000000); // encGOPSize
RVCE_CS(enc->pic.quant_i_frames); // encQP_I
RVCE_CS(enc->pic.quant_p_frames); // encQP_P
RVCE_CS(enc->pic.quant_b_frames); // encQP_B
RVCE_CS(enc->pic.rate_ctrl.vbv_buffer_size); // encVBVBufferSize
RVCE_CS(enc->pic.rate_ctrl.frame_rate_den); // encRateControlFrameRateDen
RVCE_CS(enc->pic.rate_ctrl[0].vbv_buffer_size); // encVBVBufferSize
RVCE_CS(enc->pic.rate_ctrl[0].frame_rate_den); // encRateControlFrameRateDen
RVCE_CS(0x00000000); // encVBVBufferLevel
RVCE_CS(0x00000000); // encMaxAUSize
RVCE_CS(0x00000000); // encQPInitialMode
RVCE_CS(enc->pic.rate_ctrl.target_bits_picture); // encTargetBitsPerPicture
RVCE_CS(enc->pic.rate_ctrl.peak_bits_picture_integer); // encPeakBitsPerPictureInteger
RVCE_CS(enc->pic.rate_ctrl.peak_bits_picture_fraction); // encPeakBitsPerPictureFractional
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(0x00000000); // encMinQP
RVCE_CS(0x00000033); // encMaxQP
RVCE_CS(0x00000000); // encSkipFrameEnable
@ -221,7 +221,7 @@ static void vui(struct rvce_encoder *enc)
{
int i;
if (!enc->pic.rate_ctrl.frame_rate_num)
if (!enc->pic.rate_ctrl[0].frame_rate_num)
return;
RVCE_BEGIN(0x04000009); // vui
@ -242,8 +242,8 @@ static void vui(struct rvce_encoder *enc)
RVCE_CS(0x00000000); // chromaLocInfo.chromaLocTop
RVCE_CS(0x00000000); // chromaLocInfo.chromaLocBottom
RVCE_CS(0x00000001); // timingInfoPresentFlag
RVCE_CS(enc->pic.rate_ctrl.frame_rate_den); // timingInfo.numUnitsInTick
RVCE_CS(enc->pic.rate_ctrl.frame_rate_num * 2); // timingInfo.timeScale;
RVCE_CS(enc->pic.rate_ctrl[0].frame_rate_den); // timingInfo.numUnitsInTick
RVCE_CS(enc->pic.rate_ctrl[0].frame_rate_num * 2); // timingInfo.timeScale;
RVCE_CS(0x00000001); // timingInfo.fixedFrameRateFlag
RVCE_CS(0x00000000); // nalHRDParametersPresentFlag
RVCE_CS(0x00000000); // hrdParam.cpbCntMinus1

View File

@ -38,22 +38,22 @@
static void rate_control(struct rvce_encoder *enc)
{
RVCE_BEGIN(0x04000005); // rate control
RVCE_CS(enc->pic.rate_ctrl.rate_ctrl_method); // encRateControlMethod
RVCE_CS(enc->pic.rate_ctrl.target_bitrate); // encRateControlTargetBitRate
RVCE_CS(enc->pic.rate_ctrl.peak_bitrate); // encRateControlPeakBitRate
RVCE_CS(enc->pic.rate_ctrl.frame_rate_num); // encRateControlFrameRateNum
RVCE_CS(enc->pic.rate_ctrl[0].rate_ctrl_method); // encRateControlMethod
RVCE_CS(enc->pic.rate_ctrl[0].target_bitrate); // encRateControlTargetBitRate
RVCE_CS(enc->pic.rate_ctrl[0].peak_bitrate); // encRateControlPeakBitRate
RVCE_CS(enc->pic.rate_ctrl[0].frame_rate_num); // encRateControlFrameRateNum
RVCE_CS(0x00000000); // encGOPSize
RVCE_CS(enc->pic.quant_i_frames); // encQP_I
RVCE_CS(enc->pic.quant_p_frames); // encQP_P
RVCE_CS(enc->pic.quant_b_frames); // encQP_B
RVCE_CS(enc->pic.rate_ctrl.vbv_buffer_size); // encVBVBufferSize
RVCE_CS(enc->pic.rate_ctrl.frame_rate_den); // encRateControlFrameRateDen
RVCE_CS(enc->pic.rate_ctrl[0].vbv_buffer_size); // encVBVBufferSize
RVCE_CS(enc->pic.rate_ctrl[0].frame_rate_den); // encRateControlFrameRateDen
RVCE_CS(0x00000000); // encVBVBufferLevel
RVCE_CS(0x00000000); // encMaxAUSize
RVCE_CS(0x00000000); // encQPInitialMode
RVCE_CS(enc->pic.rate_ctrl.target_bits_picture); // encTargetBitsPerPicture
RVCE_CS(enc->pic.rate_ctrl.peak_bits_picture_integer); // encPeakBitsPerPictureInteger
RVCE_CS(enc->pic.rate_ctrl.peak_bits_picture_fraction); // encPeakBitsPerPictureFractional
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(0x00000000); // encMinQP
RVCE_CS(0x00000033); // encMaxQP
RVCE_CS(0x00000000); // encSkipFrameEnable

View File

@ -37,15 +37,15 @@
static void get_rate_control_param(struct rvce_encoder *enc, struct pipe_h264_enc_picture_desc *pic)
{
enc->enc_pic.rc.rc_method = pic->rate_ctrl.rate_ctrl_method;
enc->enc_pic.rc.target_bitrate = pic->rate_ctrl.target_bitrate;
enc->enc_pic.rc.peak_bitrate = pic->rate_ctrl.peak_bitrate;
enc->enc_pic.rc.rc_method = pic->rate_ctrl[0].rate_ctrl_method;
enc->enc_pic.rc.target_bitrate = pic->rate_ctrl[0].target_bitrate;
enc->enc_pic.rc.peak_bitrate = pic->rate_ctrl[0].peak_bitrate;
enc->enc_pic.rc.quant_i_frames = pic->quant_i_frames;
enc->enc_pic.rc.quant_p_frames = pic->quant_p_frames;
enc->enc_pic.rc.quant_b_frames = pic->quant_b_frames;
enc->enc_pic.rc.gop_size = pic->gop_size;
enc->enc_pic.rc.frame_rate_num = pic->rate_ctrl.frame_rate_num;
enc->enc_pic.rc.frame_rate_den = pic->rate_ctrl.frame_rate_den;
enc->enc_pic.rc.frame_rate_num = pic->rate_ctrl[0].frame_rate_num;
enc->enc_pic.rc.frame_rate_den = pic->rate_ctrl[0].frame_rate_den;
enc->enc_pic.rc.max_qp = 51;
/* For CBR mode, to guarantee bitrate of generated stream complies with
@ -53,17 +53,17 @@ static void get_rate_control_param(struct rvce_encoder *enc, struct pipe_h264_en
* as target bitrate.
*/
if (enc->enc_pic.rc.rc_method == PIPE_H2645_ENC_RATE_CONTROL_METHOD_CONSTANT) {
enc->enc_pic.rc.vbv_buffer_size = pic->rate_ctrl.target_bitrate;
enc->enc_pic.rc.vbv_buffer_size = pic->rate_ctrl[0].target_bitrate;
} else {
enc->enc_pic.rc.vbv_buffer_size = pic->rate_ctrl.vbv_buffer_size;
enc->enc_pic.rc.vbv_buffer_size = pic->rate_ctrl[0].vbv_buffer_size;
}
enc->enc_pic.rc.vbv_buf_lv = pic->rate_ctrl.vbv_buf_lv;
enc->enc_pic.rc.fill_data_enable = pic->rate_ctrl.fill_data_enable;
enc->enc_pic.rc.enforce_hrd = pic->rate_ctrl.enforce_hrd;
enc->enc_pic.rc.target_bits_picture = pic->rate_ctrl.target_bits_picture;
enc->enc_pic.rc.peak_bits_picture_integer = pic->rate_ctrl.peak_bits_picture_integer;
enc->enc_pic.rc.peak_bits_picture_fraction = pic->rate_ctrl.peak_bits_picture_fraction;
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;
}
static void get_motion_estimation_param(struct rvce_encoder *enc,
@ -132,8 +132,8 @@ static void get_vui_param(struct rvce_encoder *enc, struct pipe_h264_enc_picture
enc->enc_pic.vui.transfer_char = 0x00000002;
enc->enc_pic.vui.matrix_coef = 0x00000002;
enc->enc_pic.vui.timing_info_present_flag = 0x00000001;
enc->enc_pic.vui.num_units_in_tick = pic->rate_ctrl.frame_rate_den;
enc->enc_pic.vui.time_scale = pic->rate_ctrl.frame_rate_num * 2;
enc->enc_pic.vui.num_units_in_tick = pic->rate_ctrl[0].frame_rate_den;
enc->enc_pic.vui.time_scale = pic->rate_ctrl[0].frame_rate_num * 2;
enc->enc_pic.vui.fixed_frame_rate_flag = 0x00000001;
enc->enc_pic.vui.bit_rate_scale = 0x00000004;
enc->enc_pic.vui.cpb_size_scale = 0x00000006;