From 252ba4bbdda41443e0f7cc8c153e390d380c1fd4 Mon Sep 17 00:00:00 2001 From: David Rosca Date: Thu, 22 Feb 2024 16:35:52 +0100 Subject: [PATCH] radeonsi/vcn: Use temporal_layer_index to select temporal layer Don't change enc_pic.temporal_id as that is used in AV1 encode. Fixes: 8d44a115080 ("radeonsi/vcn: Don't reinitialize encode session on bitrate/fps change") Reviewed-by: Ruijing Dong Part-of: --- src/gallium/drivers/radeonsi/radeon_vcn_enc.c | 1 - src/gallium/drivers/radeonsi/radeon_vcn_enc_1_2.c | 8 +++----- src/gallium/drivers/radeonsi/radeon_vcn_enc_2_0.c | 2 +- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c index 86ab2457c93..0d81826baf0 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c @@ -238,7 +238,6 @@ static void radeon_vcn_enc_h264_get_rc_param(struct radeon_encoder *enc, uint32_t frame_rate_den, frame_rate_num; enc->enc_pic.num_temporal_layers = pic->seq.num_temporal_layers ? pic->seq.num_temporal_layers : 1; - enc->enc_pic.temporal_id = 0; 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; 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 cb1b2957c49..0e9bfb670c0 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc_1_2.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc_1_2.c @@ -114,8 +114,6 @@ static void radeon_enc_layer_control(struct radeon_encoder *enc) static void radeon_enc_layer_select(struct radeon_encoder *enc) { - enc->enc_pic.layer_sel.temporal_layer_index = enc->enc_pic.temporal_id; - RADEON_ENC_BEGIN(enc->cmd.layer_select); RADEON_ENC_CS(enc->enc_pic.layer_sel.temporal_layer_index); RADEON_ENC_END(); @@ -183,7 +181,7 @@ static void radeon_enc_rc_session_init(struct radeon_encoder *enc) static void radeon_enc_rc_layer_init(struct radeon_encoder *enc) { - unsigned int i = enc->enc_pic.temporal_id; + unsigned int i = enc->enc_pic.layer_sel.temporal_layer_index; RADEON_ENC_BEGIN(enc->cmd.rc_layer_init); RADEON_ENC_CS(enc->enc_pic.rc_layer_init[i].target_bit_rate); RADEON_ENC_CS(enc->enc_pic.rc_layer_init[i].peak_bit_rate); @@ -1350,7 +1348,7 @@ static void begin(struct radeon_encoder *enc) i = 0; do { - enc->enc_pic.temporal_id = i; + enc->enc_pic.layer_sel.temporal_layer_index = i; enc->layer_select(enc); enc->rc_layer_init(enc); enc->layer_select(enc); @@ -1402,7 +1400,7 @@ static void encode(struct radeon_encoder *enc) if (enc->need_rate_control) { i = 0; do { - enc->enc_pic.temporal_id = i; + enc->enc_pic.layer_sel.temporal_layer_index = i; enc->layer_select(enc); enc->rc_layer_init(enc); } while (++i < enc->enc_pic.num_temporal_layers); diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc_2_0.c b/src/gallium/drivers/radeonsi/radeon_vcn_enc_2_0.c index aefbd3192e8..a6bfd70b97c 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc_2_0.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc_2_0.c @@ -515,7 +515,7 @@ static void encode(struct radeon_encoder *enc) if (enc->need_rate_control) { i = 0; do { - enc->enc_pic.temporal_id = i; + enc->enc_pic.layer_sel.temporal_layer_index = i; enc->layer_select(enc); enc->rc_layer_init(enc); } while (++i < enc->enc_pic.num_temporal_layers);