mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 13:48:06 +02:00
radv/video: Fix initializing rc structs with default rate control
Fixes:32a02720a8("radv/video: Init session and update rate control in ControlVideoCoding") Reviewed-by: Benjamin Cheng <benjamin.cheng@amd.com> (cherry picked from commit3d0239cff9) Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41269>
This commit is contained in:
parent
83b9055811
commit
1b996fbde9
2 changed files with 23 additions and 15 deletions
|
|
@ -2864,7 +2864,7 @@
|
|||
"description": "radv/video: Fix initializing rc structs with default rate control",
|
||||
"nominated": true,
|
||||
"nomination_type": 2,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "32a02720a88a23cf3836d4515e81ab4164c68c0a",
|
||||
"notes": null
|
||||
|
|
|
|||
|
|
@ -174,6 +174,22 @@ radv_vcn_per_frame_frac(uint32_t bitrate, uint32_t den, uint32_t num)
|
|||
return (uint32_t)((remainder << 32) / num);
|
||||
}
|
||||
|
||||
static void
|
||||
radv_enc_rc_layer_init_default(rvcn_enc_rate_ctl_layer_init_t *layer_init)
|
||||
{
|
||||
uint32_t frame_rate_num = 30;
|
||||
uint32_t frame_rate_den = 1;
|
||||
|
||||
layer_init[0].frame_rate_den = frame_rate_den;
|
||||
layer_init[0].frame_rate_num = frame_rate_num;
|
||||
layer_init[0].vbv_buffer_size = 20000000;
|
||||
layer_init[0].target_bit_rate = 16000;
|
||||
layer_init[0].peak_bit_rate = 32000;
|
||||
layer_init[0].avg_target_bits_per_picture = radv_vcn_per_frame_integer(16000, frame_rate_den, frame_rate_num);
|
||||
layer_init[0].peak_bits_per_picture_integer = radv_vcn_per_frame_integer(32000, frame_rate_den, frame_rate_num);
|
||||
layer_init[0].peak_bits_per_picture_fractional = radv_vcn_per_frame_frac(32000, frame_rate_den, frame_rate_num);
|
||||
}
|
||||
|
||||
static void
|
||||
radv_enc_set_emulation_prevention(struct radv_cmd_buffer *cmd_buffer, bool set)
|
||||
{
|
||||
|
|
@ -3051,22 +3067,10 @@ radv_video_enc_control_video_coding(struct radv_cmd_buffer *cmd_buffer, const Vk
|
|||
rvcn_enc_rate_ctl_per_picture_t rc_per_pic[RADV_ENC_MAX_RATE_LAYER];
|
||||
|
||||
if (control_info->flags & VK_VIDEO_CODING_CONTROL_RESET_BIT_KHR) {
|
||||
uint32_t frame_rate_num = 30;
|
||||
uint32_t frame_rate_den = 1;
|
||||
|
||||
cmd_buffer->video.enc.rate_control_mode = VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR;
|
||||
cmd_buffer->video.enc.rate_control_num_layers = 1;
|
||||
radv_enc_rc_per_pic_default(vid, &rc_per_pic[0]);
|
||||
rc_layer_init[0].frame_rate_den = frame_rate_den;
|
||||
rc_layer_init[0].frame_rate_num = frame_rate_num;
|
||||
rc_layer_init[0].vbv_buffer_size = 20000000;
|
||||
rc_layer_init[0].target_bit_rate = 16000;
|
||||
rc_layer_init[0].peak_bit_rate = 32000;
|
||||
rc_layer_init[0].avg_target_bits_per_picture = radv_vcn_per_frame_integer(16000, frame_rate_den, frame_rate_num);
|
||||
rc_layer_init[0].peak_bits_per_picture_integer =
|
||||
radv_vcn_per_frame_integer(32000, frame_rate_den, frame_rate_num);
|
||||
rc_layer_init[0].peak_bits_per_picture_fractional =
|
||||
radv_vcn_per_frame_frac(32000, frame_rate_den, frame_rate_num);
|
||||
radv_enc_rc_layer_init_default(&rc_layer_init[0]);
|
||||
|
||||
session_init = true;
|
||||
rate_control_init = true;
|
||||
|
|
@ -3085,7 +3089,11 @@ radv_video_enc_control_video_coding(struct radv_cmd_buffer *cmd_buffer, const Vk
|
|||
|
||||
cmd_buffer->video.enc.rate_control_mode = rate_control->rateControlMode;
|
||||
|
||||
if (rate_control->rateControlMode != VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR) {
|
||||
if (rate_control->rateControlMode == VK_VIDEO_ENCODE_RATE_CONTROL_MODE_DEFAULT_KHR) {
|
||||
cmd_buffer->video.enc.rate_control_num_layers = 1;
|
||||
radv_enc_rc_per_pic_default(vid, &rc_per_pic[0]);
|
||||
radv_enc_rc_layer_init_default(&rc_layer_init[0]);
|
||||
} else {
|
||||
if (h264_rate_control)
|
||||
cmd_buffer->video.enc.rate_control_num_layers = MAX2(1, h264_rate_control->temporalLayerCount);
|
||||
else if (h265_rate_control)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue