diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c index d4558f9ba9f..d9b1beefac5 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc.c @@ -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; } } 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 d6d1cfdb941..6df548cdcc4 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc_1_2.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc_1_2.c @@ -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); diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc_3_0.c b/src/gallium/drivers/radeonsi/radeon_vcn_enc_3_0.c index ce94f221c1c..ef63a2d745a 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc_3_0.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc_3_0.c @@ -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; diff --git a/src/gallium/drivers/radeonsi/radeon_vcn_enc_4_0.c b/src/gallium/drivers/radeonsi/radeon_vcn_enc_4_0.c index 05a3aa2f055..3dff2c52daf 100644 --- a/src/gallium/drivers/radeonsi/radeon_vcn_enc_4_0.c +++ b/src/gallium/drivers/radeonsi/radeon_vcn_enc_4_0.c @@ -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;