mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 13:58:04 +02:00
radeonsi/vcn: Select layer for rate control
This makes the per-layer rate control work. Previously it would always use rate control params for last configured layer. Reviewed-by: Ruijing Dong <ruijing.dong@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31148>
This commit is contained in:
parent
d2ad188915
commit
6a598cccc3
3 changed files with 13 additions and 5 deletions
|
|
@ -279,6 +279,8 @@ static void radeon_vcn_enc_h264_get_rc_param(struct radeon_encoder *enc,
|
|||
uint32_t frame_rate_den, frame_rate_num, max_qp;
|
||||
|
||||
enc->enc_pic.num_temporal_layers = pic->seq.num_temporal_layers ? pic->seq.num_temporal_layers : 1;
|
||||
enc->enc_pic.temporal_id = MIN2(pic->pic_ctrl.temporal_id, enc->enc_pic.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->rate_ctrl[i].target_bitrate;
|
||||
enc->enc_pic.rc_layer_init[i].peak_bit_rate = pic->rate_ctrl[i].peak_bitrate;
|
||||
|
|
@ -568,6 +570,8 @@ 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.num_temporal_layers = pic->seq.num_temporal_layers ? pic->seq.num_temporal_layers : 1;
|
||||
enc->enc_pic.temporal_id = MIN2(pic->pic.temporal_id, enc->enc_pic.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;
|
||||
|
|
@ -682,7 +686,6 @@ static void radeon_vcn_enc_hevc_get_param(struct radeon_encoder *enc,
|
|||
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;
|
||||
enc->enc_pic.temporal_id = pic->pic.temporal_id;
|
||||
|
||||
if (enc->dpb_type == DPB_TIER_2) {
|
||||
for (uint32_t i = 0; i < ARRAY_SIZE(pic->dpb); i++) {
|
||||
|
|
@ -762,6 +765,9 @@ static void radeon_vcn_enc_av1_get_rc_param(struct radeon_encoder *enc,
|
|||
{
|
||||
uint32_t frame_rate_den, frame_rate_num, min_qp, max_qp;
|
||||
|
||||
enc->enc_pic.num_temporal_layers = pic->seq.num_temporal_layers ? pic->seq.num_temporal_layers : 1;
|
||||
enc->enc_pic.temporal_id = MIN2(pic->temporal_id, enc->enc_pic.num_temporal_layers - 1);
|
||||
|
||||
for (int i = 0; i < ARRAY_SIZE(enc->enc_pic.rc_layer_init); 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;
|
||||
|
|
@ -875,10 +881,6 @@ static void radeon_vcn_enc_av1_get_param(struct radeon_encoder *enc,
|
|||
enc_pic->render_width = pic->render_width;
|
||||
enc_pic->render_height = pic->render_height;
|
||||
|
||||
enc_pic->num_temporal_layers =
|
||||
pic->seq.num_temporal_layers <= RENCODE_MAX_NUM_TEMPORAL_LAYERS ?
|
||||
pic->seq.num_temporal_layers : RENCODE_MAX_NUM_TEMPORAL_LAYERS;
|
||||
|
||||
enc_pic->enc_params.reference_picture_index =
|
||||
pic->ref_list0[0] == PIPE_H2645_LIST_REF_INVALID_ENTRY ?
|
||||
0xffffffff : pic->dpb_ref_frame_idx[pic->ref_list0[0]];
|
||||
|
|
|
|||
|
|
@ -1438,6 +1438,9 @@ static void encode(struct radeon_encoder *enc)
|
|||
} while (++i < enc->enc_pic.num_temporal_layers);
|
||||
}
|
||||
|
||||
enc->enc_pic.layer_sel.temporal_layer_index = enc->enc_pic.temporal_id;
|
||||
enc->layer_select(enc);
|
||||
|
||||
enc->encode_headers(enc);
|
||||
enc->ctx(enc);
|
||||
enc->bitstream(enc);
|
||||
|
|
|
|||
|
|
@ -168,6 +168,9 @@ static void encode(struct radeon_encoder *enc)
|
|||
} while (++i < enc->enc_pic.num_temporal_layers);
|
||||
}
|
||||
|
||||
enc->enc_pic.layer_sel.temporal_layer_index = enc->enc_pic.temporal_id;
|
||||
enc->layer_select(enc);
|
||||
|
||||
enc->encode_headers(enc);
|
||||
enc->ctx(enc);
|
||||
enc->ctx_override(enc);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue