mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 09:08:10 +02:00
radeonsi/vcn: update to use correct padding size.
Update padding size calculation to use cropping. Original method could result in 0 padding, which generated unnessary noise in the encoding result. Cc: mesa-stable Fixes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/9196 Reviewed-by: Leo Liu <leo.liu@amd.com> Signed-off-by: Ruijing Dong <ruijing.dong@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28280>
This commit is contained in:
parent
b24748a93a
commit
fecbb4177c
4 changed files with 33 additions and 30 deletions
|
|
@ -196,9 +196,9 @@ static void radeon_vcn_enc_h264_get_cropping_param(struct radeon_encoder *enc,
|
|||
enc->enc_pic.crop_bottom = pic->seq.enc_frame_crop_bottom_offset;
|
||||
} else {
|
||||
enc->enc_pic.crop_left = 0;
|
||||
enc->enc_pic.crop_right = (align(enc->base.width, 16) - enc->base.width) / 2;
|
||||
enc->enc_pic.crop_right = 0;
|
||||
enc->enc_pic.crop_top = 0;
|
||||
enc->enc_pic.crop_bottom = (align(enc->base.height, 16) - enc->base.height) / 2;
|
||||
enc->enc_pic.crop_bottom = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -453,9 +453,9 @@ static void radeon_vcn_enc_hevc_get_cropping_param(struct radeon_encoder *enc,
|
|||
enc->enc_pic.crop_bottom = pic->seq.conf_win_bottom_offset;
|
||||
} else {
|
||||
enc->enc_pic.crop_left = 0;
|
||||
enc->enc_pic.crop_right = (align(enc->base.width, 16) - enc->base.width) / 2;
|
||||
enc->enc_pic.crop_right = 0;
|
||||
enc->enc_pic.crop_top = 0;
|
||||
enc->enc_pic.crop_bottom = (align(enc->base.height, 16) - enc->base.height) / 2;
|
||||
enc->enc_pic.crop_bottom = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -81,10 +81,12 @@ static void radeon_enc_session_init(struct radeon_encoder *enc)
|
|||
enc->enc_pic.session_init.aligned_picture_width = align(enc->base.width, 64);
|
||||
}
|
||||
enc->enc_pic.session_init.aligned_picture_height = align(enc->base.height, 16);
|
||||
|
||||
enc->enc_pic.session_init.padding_width =
|
||||
enc->enc_pic.session_init.aligned_picture_width - enc->base.width;
|
||||
(enc->enc_pic.crop_left + enc->enc_pic.crop_right) * 2;
|
||||
enc->enc_pic.session_init.padding_height =
|
||||
enc->enc_pic.session_init.aligned_picture_height - enc->base.height;
|
||||
(enc->enc_pic.crop_top + enc->enc_pic.crop_bottom) * 2;
|
||||
|
||||
enc->enc_pic.session_init.display_remote = 0;
|
||||
enc->enc_pic.session_init.pre_encode_mode = enc->enc_pic.quality_modes.pre_encode_mode;
|
||||
enc->enc_pic.session_init.pre_encode_chroma_enabled = !!(enc->enc_pic.quality_modes.pre_encode_mode);
|
||||
|
|
|
|||
|
|
@ -506,10 +506,12 @@ static void radeon_enc_session_init(struct radeon_encoder *enc)
|
|||
enc->enc_pic.session_init.aligned_picture_width = align(enc->base.width, 64);
|
||||
}
|
||||
enc->enc_pic.session_init.aligned_picture_height = align(enc->base.height, 16);
|
||||
|
||||
enc->enc_pic.session_init.padding_width =
|
||||
enc->enc_pic.session_init.aligned_picture_width - enc->base.width;
|
||||
(enc->enc_pic.crop_left + enc->enc_pic.crop_right) * 2;
|
||||
enc->enc_pic.session_init.padding_height =
|
||||
enc->enc_pic.session_init.aligned_picture_height - enc->base.height;
|
||||
(enc->enc_pic.crop_top + enc->enc_pic.crop_bottom) * 2;
|
||||
|
||||
enc->enc_pic.session_init.slice_output_enabled = 0;
|
||||
enc->enc_pic.session_init.display_remote = 0;
|
||||
enc->enc_pic.session_init.pre_encode_mode = enc->enc_pic.quality_modes.pre_encode_mode;
|
||||
|
|
|
|||
|
|
@ -81,7 +81,6 @@ static void radeon_enc_op_preset(struct radeon_encoder *enc)
|
|||
|
||||
static void radeon_enc_session_init(struct radeon_encoder *enc)
|
||||
{
|
||||
bool av1_encoding = false;
|
||||
uint32_t av1_height = enc->enc_pic.pic_height_in_luma_samples;
|
||||
|
||||
switch (u_reduce_video_profile(enc->base.profile)) {
|
||||
|
|
@ -89,11 +88,20 @@ static void radeon_enc_session_init(struct radeon_encoder *enc)
|
|||
enc->enc_pic.session_init.encode_standard = RENCODE_ENCODE_STANDARD_H264;
|
||||
enc->enc_pic.session_init.aligned_picture_width = align(enc->base.width, 16);
|
||||
enc->enc_pic.session_init.aligned_picture_height = align(enc->base.height, 16);
|
||||
|
||||
enc->enc_pic.session_init.padding_width =
|
||||
(enc->enc_pic.crop_left + enc->enc_pic.crop_right) * 2;
|
||||
enc->enc_pic.session_init.padding_height =
|
||||
(enc->enc_pic.crop_top + enc->enc_pic.crop_bottom) * 2;
|
||||
break;
|
||||
case PIPE_VIDEO_FORMAT_HEVC:
|
||||
enc->enc_pic.session_init.encode_standard = RENCODE_ENCODE_STANDARD_HEVC;
|
||||
enc->enc_pic.session_init.aligned_picture_width = align(enc->base.width, 64);
|
||||
enc->enc_pic.session_init.aligned_picture_height = align(enc->base.height, 16);
|
||||
enc->enc_pic.session_init.padding_width =
|
||||
(enc->enc_pic.crop_left + enc->enc_pic.crop_right) * 2;
|
||||
enc->enc_pic.session_init.padding_height =
|
||||
(enc->enc_pic.crop_top + enc->enc_pic.crop_bottom) * 2;
|
||||
break;
|
||||
case PIPE_VIDEO_FORMAT_AV1:
|
||||
enc->enc_pic.session_init.encode_standard = RENCODE_ENCODE_STANDARD_AV1;
|
||||
|
|
@ -104,33 +112,24 @@ static void radeon_enc_session_init(struct radeon_encoder *enc)
|
|||
if (!(av1_height % 8) && (av1_height % 16) && !(enc->enc_pic.enable_render_size))
|
||||
enc->enc_pic.session_init.aligned_picture_height = av1_height + 2;
|
||||
|
||||
av1_encoding = true;
|
||||
enc->enc_pic.session_init.padding_width =
|
||||
enc->enc_pic.session_init.aligned_picture_width -
|
||||
enc->enc_pic.pic_width_in_luma_samples;
|
||||
enc->enc_pic.session_init.padding_height =
|
||||
enc->enc_pic.session_init.aligned_picture_height - av1_height;
|
||||
|
||||
if (enc->enc_pic.enable_render_size)
|
||||
enc->enc_pic.enable_render_size =
|
||||
(enc->enc_pic.session_init.aligned_picture_width !=
|
||||
enc->enc_pic.render_width) ||
|
||||
(enc->enc_pic.session_init.aligned_picture_height !=
|
||||
enc->enc_pic.render_height);
|
||||
break;
|
||||
default:
|
||||
assert(0);
|
||||
break;
|
||||
}
|
||||
|
||||
enc->enc_pic.session_init.padding_width =
|
||||
enc->enc_pic.session_init.aligned_picture_width - enc->base.width;
|
||||
enc->enc_pic.session_init.padding_height =
|
||||
enc->enc_pic.session_init.aligned_picture_height - enc->base.height;
|
||||
|
||||
if (av1_encoding) {
|
||||
enc->enc_pic.session_init.padding_width =
|
||||
enc->enc_pic.session_init.aligned_picture_width -
|
||||
enc->enc_pic.pic_width_in_luma_samples;
|
||||
enc->enc_pic.session_init.padding_height =
|
||||
enc->enc_pic.session_init.aligned_picture_height - av1_height;
|
||||
|
||||
if (enc->enc_pic.enable_render_size)
|
||||
enc->enc_pic.enable_render_size =
|
||||
(enc->enc_pic.session_init.aligned_picture_width !=
|
||||
enc->enc_pic.render_width) ||
|
||||
(enc->enc_pic.session_init.aligned_picture_height !=
|
||||
enc->enc_pic.render_height);
|
||||
}
|
||||
|
||||
enc->enc_pic.session_init.slice_output_enabled = 0;
|
||||
enc->enc_pic.session_init.display_remote = 0;
|
||||
enc->enc_pic.session_init.pre_encode_mode = enc->enc_pic.quality_modes.pre_encode_mode;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue