diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c index cac84cd90d4..9ffd61c810e 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c @@ -567,26 +567,29 @@ static void radeon_vcn_enc_hevc_get_rc_param(struct radeon_encoder *enc, { uint32_t frame_rate_den, frame_rate_num, max_qp; - enc->enc_pic.rc_layer_init[0].target_bit_rate = pic->rc[0].target_bitrate; - enc->enc_pic.rc_layer_init[0].peak_bit_rate = pic->rc[0].peak_bitrate; - frame_rate_den = pic->rc[0].frame_rate_den; - frame_rate_num = pic->rc[0].frame_rate_num; - radeon_vcn_enc_invalid_frame_rate(&frame_rate_den, &frame_rate_num); - enc->enc_pic.rc_layer_init[0].frame_rate_den = frame_rate_den; - enc->enc_pic.rc_layer_init[0].frame_rate_num = frame_rate_num; - enc->enc_pic.rc_layer_init[0].vbv_buffer_size = pic->rc[0].vbv_buffer_size; - enc->enc_pic.rc_layer_init[0].avg_target_bits_per_picture = - radeon_vcn_per_frame_integer(pic->rc[0].target_bitrate, - frame_rate_den, - frame_rate_num); - enc->enc_pic.rc_layer_init[0].peak_bits_per_picture_integer = - radeon_vcn_per_frame_integer(pic->rc[0].peak_bitrate, - frame_rate_den, - frame_rate_num); - enc->enc_pic.rc_layer_init[0].peak_bits_per_picture_fractional = - radeon_vcn_per_frame_frac(pic->rc[0].peak_bitrate, - frame_rate_den, - frame_rate_num); + enc->enc_pic.num_temporal_layers = pic->seq.num_temporal_layers ? pic->seq.num_temporal_layers : 1; + for (int i = 0; i < enc->enc_pic.num_temporal_layers; i++) { + enc->enc_pic.rc_layer_init[i].target_bit_rate = pic->rc[i].target_bitrate; + enc->enc_pic.rc_layer_init[i].peak_bit_rate = pic->rc[i].peak_bitrate; + frame_rate_den = pic->rc[i].frame_rate_den; + frame_rate_num = pic->rc[i].frame_rate_num; + radeon_vcn_enc_invalid_frame_rate(&frame_rate_den, &frame_rate_num); + enc->enc_pic.rc_layer_init[i].frame_rate_den = frame_rate_den; + enc->enc_pic.rc_layer_init[i].frame_rate_num = frame_rate_num; + enc->enc_pic.rc_layer_init[i].vbv_buffer_size = pic->rc[i].vbv_buffer_size; + enc->enc_pic.rc_layer_init[i].avg_target_bits_per_picture = + radeon_vcn_per_frame_integer(pic->rc[i].target_bitrate, + frame_rate_den, + frame_rate_num); + enc->enc_pic.rc_layer_init[i].peak_bits_per_picture_integer = + radeon_vcn_per_frame_integer(pic->rc[i].peak_bitrate, + frame_rate_den, + frame_rate_num); + enc->enc_pic.rc_layer_init[i].peak_bits_per_picture_fractional = + radeon_vcn_per_frame_frac(pic->rc[i].peak_bitrate, + frame_rate_den, + 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_obs = pic->rc[0].quant_i_frames; enc->enc_pic.rc_per_pic.min_qp_app_obs = pic->rc[0].min_qp; @@ -676,7 +679,6 @@ static void radeon_vcn_enc_hevc_get_param(struct radeon_encoder *enc, enc->enc_pic.enc_params.reference_picture_index = pic->ref_list0[0] == PIPE_H2645_LIST_REF_INVALID_ENTRY ? 0xffffffff : pic->ref_list0[0]; enc->enc_pic.enc_params.reconstructed_picture_index = pic->dpb_curr_pic; - enc->enc_pic.num_temporal_layers = 1; enc->enc_pic.bit_depth_luma_minus8 = pic->seq.bit_depth_luma_minus8; enc->enc_pic.bit_depth_chroma_minus8 = pic->seq.bit_depth_chroma_minus8; enc->enc_pic.nal_unit_type = pic->pic.nal_unit_type;