12 #ifndef AOM_AV1_ENCODER_SPEED_FEATURES_H_ 13 #define AOM_AV1_ENCODER_SPEED_FEATURES_H_ 16 #include "av1/encoder/enc_enums.h" 17 #include "av1/encoder/mcomp.h" 18 #include "av1/encoder/encodemb.h" 27 #define MAX_MESH_STEP 4 29 typedef struct MESH_PATTERN {
36 GM_REDUCED_REF_SEARCH_SKIP_L2_L3,
37 GM_REDUCED_REF_SEARCH_SKIP_L2_L3_ARF2,
39 } UENUM1BYTE(GM_SEARCH_TYPE);
42 DIST_WTD_COMP_ENABLED,
43 DIST_WTD_COMP_SKIP_MV_SEARCH,
44 DIST_WTD_COMP_DISABLED,
45 } UENUM1BYTE(DIST_WTD_COMP_FLAG);
48 INTRA_ALL = (1 << DC_PRED) | (1 << V_PRED) | (1 << H_PRED) | (1 << D45_PRED) |
49 (1 << D135_PRED) | (1 << D113_PRED) | (1 << D157_PRED) |
50 (1 << D203_PRED) | (1 << D67_PRED) | (1 << SMOOTH_PRED) |
51 (1 << SMOOTH_V_PRED) | (1 << SMOOTH_H_PRED) | (1 << PAETH_PRED),
53 (1 << UV_DC_PRED) | (1 << UV_V_PRED) | (1 << UV_H_PRED) |
54 (1 << UV_D45_PRED) | (1 << UV_D135_PRED) | (1 << UV_D113_PRED) |
55 (1 << UV_D157_PRED) | (1 << UV_D203_PRED) | (1 << UV_D67_PRED) |
56 (1 << UV_SMOOTH_PRED) | (1 << UV_SMOOTH_V_PRED) |
57 (1 << UV_SMOOTH_H_PRED) | (1 << UV_PAETH_PRED) | (1 << UV_CFL_PRED),
58 UV_INTRA_DC = (1 << UV_DC_PRED),
59 UV_INTRA_DC_CFL = (1 << UV_DC_PRED) | (1 << UV_CFL_PRED),
60 UV_INTRA_DC_TM = (1 << UV_DC_PRED) | (1 << UV_PAETH_PRED),
61 UV_INTRA_DC_PAETH_CFL =
62 (1 << UV_DC_PRED) | (1 << UV_PAETH_PRED) | (1 << UV_CFL_PRED),
63 UV_INTRA_DC_H_V = (1 << UV_DC_PRED) | (1 << UV_V_PRED) | (1 << UV_H_PRED),
64 UV_INTRA_DC_H_V_CFL = (1 << UV_DC_PRED) | (1 << UV_V_PRED) |
65 (1 << UV_H_PRED) | (1 << UV_CFL_PRED),
66 UV_INTRA_DC_PAETH_H_V = (1 << UV_DC_PRED) | (1 << UV_PAETH_PRED) |
67 (1 << UV_V_PRED) | (1 << UV_H_PRED),
68 UV_INTRA_DC_PAETH_H_V_CFL = (1 << UV_DC_PRED) | (1 << UV_PAETH_PRED) |
69 (1 << UV_V_PRED) | (1 << UV_H_PRED) |
71 INTRA_DC = (1 << DC_PRED),
72 INTRA_DC_TM = (1 << DC_PRED) | (1 << PAETH_PRED),
73 INTRA_DC_H_V = (1 << DC_PRED) | (1 << V_PRED) | (1 << H_PRED),
75 (1 << DC_PRED) | (1 << V_PRED) | (1 << H_PRED) | (1 << SMOOTH_PRED),
77 (1 << DC_PRED) | (1 << PAETH_PRED) | (1 << V_PRED) | (1 << H_PRED)
81 INTER_ALL = (1 << NEARESTMV) | (1 << NEARMV) | (1 << GLOBALMV) |
82 (1 << NEWMV) | (1 << NEAREST_NEARESTMV) | (1 << NEAR_NEARMV) |
83 (1 << NEW_NEWMV) | (1 << NEAREST_NEWMV) | (1 << NEAR_NEWMV) |
84 (1 << NEW_NEARMV) | (1 << NEW_NEARESTMV) | (1 << GLOBAL_GLOBALMV),
85 INTER_NEAREST_NEAR_ZERO = (1 << NEARESTMV) | (1 << NEARMV) | (1 << GLOBALMV) |
86 (1 << NEAREST_NEARESTMV) | (1 << GLOBAL_GLOBALMV) |
87 (1 << NEAREST_NEWMV) | (1 << NEW_NEARESTMV) |
88 (1 << NEW_NEARMV) | (1 << NEAR_NEWMV) |
93 DISABLE_ALL_INTER_SPLIT = (1 << THR_COMP_GA) | (1 << THR_COMP_LA) |
94 (1 << THR_ALTR) | (1 << THR_GOLD) | (1 << THR_LAST),
96 DISABLE_ALL_SPLIT = (1 << THR_INTRA) | DISABLE_ALL_INTER_SPLIT,
98 DISABLE_COMPOUND_SPLIT = (1 << THR_COMP_GA) | (1 << THR_COMP_LA),
100 LAST_AND_INTRA_SPLIT_ONLY = (1 << THR_COMP_GA) | (1 << THR_COMP_LA) |
101 (1 << THR_ALTR) | (1 << THR_GOLD)
113 } UENUM1BYTE(DEV_SPEED_FEATURES);
126 ALLOW_RECODE_KFARFGF = 1,
131 } UENUM1BYTE(RECODE_LOOP_TYPE);
135 SUBPEL_TREE_PRUNED = 1,
136 SUBPEL_TREE_PRUNED_MORE = 2,
137 } UENUM1BYTE(SUBPEL_SEARCH_METHODS);
141 LPF_PICK_FROM_FULL_IMAGE,
143 LPF_PICK_FROM_FULL_IMAGE_NON_DUAL,
145 LPF_PICK_FROM_SUBIMAGE,
150 } UENUM1BYTE(LPF_PICK_METHOD);
171 FLAG_EARLY_TERMINATE = 1 << 0,
174 FLAG_SKIP_COMP_BESTINTRA = 1 << 1,
177 FLAG_SKIP_INTRA_BESTINTER = 1 << 3,
181 FLAG_SKIP_INTRA_DIRMISMATCH = 1 << 4,
184 FLAG_SKIP_INTRA_LOWVAR = 1 << 5,
185 } UENUM1BYTE(MODE_SEARCH_SKIP_LOGIC);
199 } UENUM1BYTE(TX_TYPE_PRUNE_MODE);
207 FAST_DETECTION_MAXQ = 1,
208 } UENUM1BYTE(OVERSHOOT_DETECTION_CBR);
214 MULTI_WINNER_MODE_OFF = 0,
217 MULTI_WINNER_MODE_FAST = 1,
221 MULTI_WINNER_MODE_DEFAULT = 2,
222 } UENUM1BYTE(MULTI_WINNER_MODE_TYPE);
225 TX_TYPE_PRUNE_MODE prune_2d_txfm_mode;
226 int fast_intra_tx_type_search;
227 int fast_inter_tx_type_search;
231 int use_reduced_intra_txset;
235 int use_skip_flag_prediction;
238 int ml_tx_split_thresh;
245 int prune_tx_type_using_stats;
247 int prune_tx_type_est_rd;
253 int winner_mode_tx_type_pruning;
266 #if CONFIG_RT_ML_PARTITIONING 270 } UENUM1BYTE(PARTITION_SEARCH_TYPE);
277 } UENUM1BYTE(MAX_PART_PRED_MODE);
283 } UENUM1BYTE(MV_PREC_LOGIC);
289 } UENUM1BYTE(SUPERRES_AUTO_SEARCH_TYPE);
313 int frame_parameter_update;
332 MV_PREC_LOGIC high_precision_mv_usage;
339 int static_segmentation;
344 SUPERRES_AUTO_SEARCH_TYPE superres_auto_search_type;
359 typedef struct TPL_SPEED_FEATURES {
361 int disable_gop_length_decision;
365 int prune_intra_modes;
367 int reduce_first_step_size;
374 int skip_alike_starting_mv;
377 SUBPEL_FORCE_STOP subpel_force_stop;
380 SEARCH_METHODS search_method;
383 int prune_starting_mv;
386 int disable_filtered_key_tpl;
389 int prune_ref_frames_in_tpl;
392 int allow_compound_pred;
395 int use_y_only_rate_distortion;
396 } TPL_SPEED_FEATURES;
398 typedef struct GLOBAL_MOTION_SPEED_FEATURES {
399 GM_SEARCH_TYPE gm_search_type;
404 int prune_ref_frame_for_gm_search;
405 } GLOBAL_MOTION_SPEED_FEATURES;
407 typedef struct PARTITION_SPEED_FEATURES {
408 PARTITION_SEARCH_TYPE partition_search_type;
411 BLOCK_SIZE fixed_partition_size;
416 int prune_ext_partition_types_search_level;
419 int prune_part4_search;
423 int ml_prune_partition;
428 int ml_early_term_after_part_split_level;
433 int less_rectangular_check_level;
436 BLOCK_SIZE use_square_partition_only_threshold;
441 MAX_PART_PRED_MODE auto_max_partition_based_on_simple_motion;
445 BLOCK_SIZE default_min_partition_size;
446 BLOCK_SIZE default_max_partition_size;
452 int adjust_var_based_rd_partitioning;
455 int64_t partition_search_breakout_dist_thr;
456 int partition_search_breakout_rate_thr;
459 int ml_partition_search_breakout_thresh[PARTITION_BLOCK_SIZES];
462 int allow_partition_search_skip;
466 int simple_motion_search_prune_agg;
470 int simple_motion_search_prune_rect;
477 int simple_motion_search_split;
481 int simple_motion_search_early_term_none;
487 int simple_motion_search_reduce_search_steps;
492 BLOCK_SIZE max_intra_bsize;
499 int ext_partition_eval_thresh;
505 int prune_ext_part_using_split_info;
508 int prune_rectangular_split_based_on_qidx;
512 int early_term_after_none_split;
518 int ml_predict_breakout_level;
524 int prune_sub_8x8_partition_level;
528 int simple_motion_search_rect_split;
532 int reuse_best_prediction_for_part_ab;
533 } PARTITION_SPEED_FEATURES;
535 typedef struct MV_SPEED_FEATURES {
537 SEARCH_METHODS search_method;
543 int use_bsize_dependent_search_method;
547 int auto_mv_step_size;
553 SUBPEL_SEARCH_METHODS subpel_search_method;
556 int subpel_iters_per_step;
559 SUBPEL_FORCE_STOP subpel_force_stop;
562 SUBPEL_FORCE_STOP simple_motion_subpel_force_stop;
566 SUBPEL_SEARCH_TYPE use_accurate_subpel_search;
569 int exhaustive_searches_thresh;
572 MESH_PATTERN mesh_patterns[MAX_MESH_STEP];
575 MESH_PATTERN intrabc_mesh_patterns[MAX_MESH_STEP];
578 int reduce_search_range;
581 int prune_mesh_search;
584 int use_fullpel_costlist;
589 int obmc_full_pixel_search_level;
592 int full_pixel_search_level;
596 int use_downsampled_sad;
599 int disable_extensive_joint_motion_search;
605 int disable_second_mv;
608 typedef struct INTER_MODE_SPEED_FEATURES {
615 int inter_mode_rd_model_estimation;
618 int txfm_rd_gate_level;
621 int reduce_inter_modes;
625 int adaptive_rd_thresh;
628 int prune_inter_modes_if_skippable;
633 int selective_ref_frame;
639 int prune_ref_frame_for_rect_partitions;
641 int alt_ref_search_fp;
644 int skip_repeated_newmv;
652 int skip_repeated_full_newmv;
658 int skip_repeated_ref_mv;
661 int perform_best_rd_based_gating_for_chroma;
665 int reuse_inter_intra_mode;
669 int prune_comp_type_by_model_rd;
673 int prune_comp_type_by_comp_avg;
681 int prune_comp_search_by_single_result;
687 BLOCK_SIZE comp_inter_joint_search_thresh;
692 int prune_mode_search_simple_translation;
697 int prune_compound_using_single_ref;
704 int prune_compound_using_neighbors;
711 int prune_comp_using_best_single_mode_ref;
714 int prune_ref_mv_idx_search;
717 int disable_onesided_comp;
721 int prune_obmc_prob_thresh;
724 int prune_warped_prob_thresh;
727 unsigned int disable_interintra_wedge_var_thresh;
730 unsigned int disable_interinter_wedge_var_thresh;
733 int fast_interintra_wedge_search;
736 int fast_wedge_sign_estimate;
739 int disable_interinter_wedge_newmv_search;
742 DIST_WTD_COMP_FLAG use_dist_wtd_comp_flag;
750 int prune_inter_modes_based_on_tpl;
754 int prune_nearmv_using_neighbors;
759 int model_based_post_interp_filter_breakout;
764 int reuse_compound_type_decision;
767 int disable_masked_comp;
770 int enable_fast_compound_mode_search;
773 int reuse_mask_search_results;
774 } INTER_MODE_SPEED_FEATURES;
776 typedef struct INTERP_FILTER_SPEED_FEATURES {
779 int use_fast_interpolation_filter_search;
782 int disable_dual_filter;
787 int use_interp_filter;
791 int skip_sharp_interp_filter_search;
793 int cb_pred_filter_search;
796 int adaptive_interp_filter_search;
797 } INTERP_FILTER_SPEED_FEATURES;
799 typedef struct INTRA_MODE_SPEED_FEATURES {
802 int intra_y_mode_mask[TX_SIZES];
803 int intra_uv_mode_mask[TX_SIZES];
806 int skip_intra_in_interframe;
812 int intra_pruning_with_hog;
818 int chroma_intra_pruning_with_hog;
821 int disable_smooth_intra;
824 int disable_filter_intra;
833 int prune_palette_search_level;
839 int prune_chroma_modes_using_luma_winner;
855 int cfl_search_range;
856 } INTRA_MODE_SPEED_FEATURES;
858 typedef struct TX_SPEED_FEATURES {
862 int inter_tx_size_search_init_depth_sqr;
863 int inter_tx_size_search_init_depth_rect;
864 int intra_tx_size_search_init_depth_sqr;
865 int intra_tx_size_search_init_depth_rect;
869 int tx_size_search_lgr_block;
871 TX_TYPE_SEARCH tx_type_search;
881 int adaptive_txb_search_level;
886 int model_based_prune_tx_search_level;
892 int use_intra_txb_hash;
896 int use_inter_txb_hash;
899 int refine_fast_tx_search_results;
904 int prune_tx_size_level;
907 typedef struct RD_CALC_SPEED_FEATURES {
909 int simple_model_rd_from_var;
917 int tx_domain_dist_level;
920 int tx_domain_dist_thres_level;
923 TRELLIS_OPT_TYPE optimize_coefficients;
930 int perform_coeff_opt;
931 } RD_CALC_SPEED_FEATURES;
933 typedef struct WINNER_MODE_SPEED_FEATURES {
936 int enable_winner_mode_for_coeff_opt;
940 int enable_winner_mode_for_tx_size_srch;
947 int tx_size_search_level;
951 int enable_winner_mode_for_use_tx_domain_dist;
954 MULTI_WINNER_MODE_TYPE multi_winner_mode_type;
959 int motion_mode_for_winner_cand;
964 int dc_blk_pred_level;
965 } WINNER_MODE_SPEED_FEATURES;
967 typedef struct LOOP_FILTER_SPEED_FEATURES {
969 LPF_PICK_METHOD lpf_pick;
973 int use_coarse_filter_level_search;
981 int dual_sgr_penalty_level;
984 int enable_sgr_ep_pruning;
987 int disable_loop_restoration_chroma;
993 int prune_wiener_based_on_src_var;
1000 int prune_sgr_based_on_wiener;
1003 int reduce_wiener_window_size;
1006 int disable_lr_filter;
1007 } LOOP_FILTER_SPEED_FEATURES;
1009 typedef struct REAL_TIME_SPEED_FEATURES {
1011 int check_intra_pred_nonrd;
1014 int skip_intra_pred_if_tx_skip;
1017 int estimate_motion_for_var_based_partition;
1023 int nonrd_check_partition_merge_mode;
1026 int nonrd_check_partition_split;
1031 unsigned int mode_search_skip_flags;
1037 int nonrd_prune_ref_frame_search;
1040 int use_nonrd_pick_mode;
1043 int use_nonrd_altref_frame;
1046 int use_comp_ref_nonrd;
1049 int use_real_time_ref_set;
1053 int short_circuit_low_temp_var;
1056 int use_modeled_non_rd_cost;
1059 int reuse_inter_pred_nonrd;
1062 int num_inter_modes_for_tx_search;
1065 int force_tx_search_off;
1068 int use_nonrd_filter_search;
1071 int use_simple_rd_model;
1074 int skip_interp_filter_search;
1079 int hybrid_intra_pickmode;
1082 int source_metrics_sb_nonrd;
1086 OVERSHOOT_DETECTION_CBR overshoot_detection_cbr;
1089 int check_scene_detection;
1092 int force_large_partition_blocks;
1095 int use_temporal_noise_estimate;
1101 int fullpel_search_step_param;
1105 int skip_loopfilter_non_reference;
1109 int intra_y_mode_bsize_mask_nrd[BLOCK_SIZES];
1112 int nonrd_agressive_skip;
1113 } REAL_TIME_SPEED_FEATURES;
1235 #endif // AOM_AV1_ENCODER_SPEED_FEATURES_H_ void av1_set_speed_features_framesize_independent(struct AV1_COMP *cpi, int speed)
Frame size independent speed vs quality trade off flags.
MV_SPEED_FEATURES mv_sf
Definition: speed_features.h:1144
int recode_tolerance
Definition: speed_features.h:325
Definition: speed_features.h:162
RD_CALC_SPEED_FEATURES rd_sf
Definition: speed_features.h:1169
int disable_extra_sc_testing
Definition: speed_features.h:350
CDEF_PICK_METHOD
This enumeration defines a variety of CDEF pick methods.
Definition: speed_features.h:156
PARTITION_SPEED_FEATURES part_sf
Definition: speed_features.h:1139
struct HIGH_LEVEL_SPEED_FEATURES HIGH_LEVEL_SPEED_FEATURES
Sequence/frame level speed vs quality features.
Definition: speed_features.h:303
Top level speed vs quality trade off data struture.
Definition: speed_features.h:1120
Definition: speed_features.h:159
TX_SPEED_FEATURES tx_sf
Definition: speed_features.h:1164
Definition: speed_features.h:163
LOOP_FILTER_SPEED_FEATURES lpf_sf
Definition: speed_features.h:1179
WINNER_MODE_SPEED_FEATURES winner_mode_sf
Definition: speed_features.h:1174
HIGH_LEVEL_SPEED_FEATURES hl_sf
Definition: speed_features.h:1124
Definition: speed_features.h:157
INTRA_MODE_SPEED_FEATURES intra_sf
Definition: speed_features.h:1159
INTER_MODE_SPEED_FEATURES inter_sf
Definition: speed_features.h:1149
Sequence/frame level speed vs quality features.
Definition: speed_features.h:310
Definition: speed_features.h:301
void av1_set_speed_features_framesize_dependent(struct AV1_COMP *cpi, int speed)
Frame size dependent speed vs quality trade off flags.
Definition: speed_features.h:304
int second_alt_ref_filtering
Definition: speed_features.h:355
struct SPEED_FEATURES SPEED_FEATURES
Top level speed vs quality trade off data struture.
Top level encoder structure.
Definition: encoder.h:2095
INTERNAL_COST_UPDATE_TYPE
This enum decides internally how often to update the entropy costs.
Definition: speed_features.h:300
REAL_TIME_SPEED_FEATURES rt_sf
Definition: speed_features.h:1184
RECODE_LOOP_TYPE recode_loop
Definition: speed_features.h:319
int speed
Definition: encoder.h:2309
Definition: speed_features.h:158
GLOBAL_MOTION_SPEED_FEATURES gm_sf
Definition: speed_features.h:1134
TPL_SPEED_FEATURES tpl_sf
Definition: speed_features.h:1129
Definition: speed_features.h:160
Definition: speed_features.h:302
INTERP_FILTER_SPEED_FEATURES interp_sf
Definition: speed_features.h:1154
void av1_set_speed_features_qindex_dependent(struct AV1_COMP *cpi, int speed)
Q index dependent speed vs quality trade off flags.