radeonsi/vce: Support quality presets

Reviewed-by: David (Ming Qiang) Wu <David.Wu3@amd.com>
Acked-by: Leo Liu <leo.liu@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32829>
This commit is contained in:
David Rosca 2024-12-27 15:29:54 +01:00 committed by Marge Bot
parent 683766eebc
commit 544a180320

View file

@ -55,19 +55,58 @@ static void get_rate_control_param(struct rvce_encoder *enc, struct pipe_h264_en
static void get_motion_estimation_param(struct rvce_encoder *enc, static void get_motion_estimation_param(struct rvce_encoder *enc,
struct pipe_h264_enc_picture_desc *pic) struct pipe_h264_enc_picture_desc *pic)
{ {
enc->enc_pic.me.enc_ime_decimation_search = 1;
enc->enc_pic.me.motion_est_half_pixel = 1;
enc->enc_pic.me.motion_est_quarter_pixel = 1; enc->enc_pic.me.motion_est_quarter_pixel = 1;
enc->enc_pic.me.enc_disable_sub_mode = 254; enc->enc_pic.me.disable_favor_pmv_point = 0;
enc->enc_pic.me.lsmvert = 2; enc->enc_pic.me.lsmvert = 2;
enc->enc_pic.me.enc_en_ime_overw_dis_subm = 0; enc->enc_pic.me.disable_16x16_frame1 = 0;
enc->enc_pic.me.enc_ime_overw_dis_subm_no = 0; enc->enc_pic.me.disable_satd = 0;
enc->enc_pic.me.enc_ime_skip_x = 0;
enc->enc_pic.me.enc_ime_skip_y = 0;
enc->enc_pic.me.enc_ime2_search_range_x = 4; enc->enc_pic.me.enc_ime2_search_range_x = 4;
enc->enc_pic.me.enc_ime2_search_range_y = 4; enc->enc_pic.me.enc_ime2_search_range_y = 4;
enc->enc_pic.me.enc_ime_decimation_search = 0x00000001; enc->enc_pic.me.parallel_mode_speedup_enable = 0;
enc->enc_pic.me.motion_est_half_pixel = 0x00000001; enc->enc_pic.me.fme0_enc_disable_sub_mode = 0;
enc->enc_pic.me.enc_search_range_x = 0x00000010; enc->enc_pic.me.fme1_enc_disable_sub_mode = 0;
enc->enc_pic.me.enc_search_range_y = 0x00000010; enc->enc_pic.me.ime_sw_speedup_enable = 0;
enc->enc_pic.me.enc_search1_range_x = 0x00000010;
enc->enc_pic.me.enc_search1_range_y = 0x00000010; switch (pic->quality_modes.preset_mode) {
case 0: /* SPEED */
enc->enc_pic.me.force_zero_point_center = 0;
enc->enc_pic.me.enc_search_range_x = 16;
enc->enc_pic.me.enc_search_range_y = 16;
enc->enc_pic.me.enc_search1_range_x = 16;
enc->enc_pic.me.enc_search1_range_y = 16;
enc->enc_pic.me.enable_amd = 0;
enc->enc_pic.me.enc_disable_sub_mode = 126;
enc->enc_pic.me.enc_en_ime_overw_dis_subm = 0;
enc->enc_pic.me.enc_ime_overw_dis_subm_no = 0;
break;
case 1: /* BALANCED */
enc->enc_pic.me.force_zero_point_center = 0;
enc->enc_pic.me.enc_search_range_x = 16;
enc->enc_pic.me.enc_search_range_y = 16;
enc->enc_pic.me.enc_search1_range_x = 16;
enc->enc_pic.me.enc_search1_range_y = 16;
enc->enc_pic.me.enable_amd = 0;
enc->enc_pic.me.enc_disable_sub_mode = 120;
enc->enc_pic.me.enc_en_ime_overw_dis_subm = 1;
enc->enc_pic.me.enc_ime_overw_dis_subm_no = 1;
break;
case 2: /* QUALITY */
default:
enc->enc_pic.me.force_zero_point_center = 1;
enc->enc_pic.me.enc_search_range_x = 36;
enc->enc_pic.me.enc_search_range_y = 36;
enc->enc_pic.me.enc_search1_range_x = 36;
enc->enc_pic.me.enc_search1_range_y = 36;
enc->enc_pic.me.enable_amd = 1;
enc->enc_pic.me.enc_disable_sub_mode = 0;
enc->enc_pic.me.enc_en_ime_overw_dis_subm = 0;
enc->enc_pic.me.enc_ime_overw_dis_subm_no = 0;
break;
}
} }
static void get_pic_control_param(struct rvce_encoder *enc, struct pipe_h264_enc_picture_desc *pic) static void get_pic_control_param(struct rvce_encoder *enc, struct pipe_h264_enc_picture_desc *pic)