Add a flag to disable ml-based coding block partition features
Runtime flag: --disable-ml-partition-speed-features
OFF(0) by default.
Change-Id: I6108685c1c8358ad1074a5e00a7f34fec2d3cb98
diff --git a/aom/aom_encoder.h b/aom/aom_encoder.h
index 6e7589d..bf42dc7 100644
--- a/aom/aom_encoder.h
+++ b/aom/aom_encoder.h
@@ -234,6 +234,10 @@
*
*/
unsigned int enable_1to4_partitions;
+ /*!\brief disable ml-based speed-up for partition search
+ *
+ */
+ unsigned int disable_ml_partition_speed_features;
#if CONFIG_SDP
/*!\brief enable Semi-decoupled partitioning
*
diff --git a/aom/aomcx.h b/aom/aomcx.h
index db2a744..92c5514 100644
--- a/aom/aomcx.h
+++ b/aom/aomcx.h
@@ -1307,6 +1307,14 @@
/*!\brief Control to get frame info
*/
AV1E_GET_FRAME_INFO = 165,
+
+ /*!\brief Codec control function to disable ML based partition search speed
+ * features.
+ *
+ * - 0 = off (default)
+ * - 1 = on
+ */
+ AV1E_SET_DISABLE_ML_PARTITION_SPEED_FEATURES = 166,
};
/*!\brief aom 1-D scaling mode
@@ -1571,6 +1579,9 @@
AOM_CTRL_USE_TYPE(AV1E_SET_TIMING_INFO_TYPE, int) /* aom_timing_info_type_t */
#define AOM_CTRL_AV1E_SET_TIMING_INFO_TYPE
+AOM_CTRL_USE_TYPE(AV1E_SET_DISABLE_ML_PARTITION_SPEED_FEATURES, int)
+#define AOM_CTRL_AV1E_SET_DISABLE_ML_PARTITION_SPEED_FEATURES
+
AOM_CTRL_USE_TYPE(AV1E_SET_ENABLE_RECT_PARTITIONS, int)
#define AOM_CTRL_AV1E_SET_ENABLE_RECT_PARTITIONS
diff --git a/apps/aomenc.c b/apps/aomenc.c
index 29c0358..06a1079 100644
--- a/apps/aomenc.c
+++ b/apps/aomenc.c
@@ -118,115 +118,118 @@
return 0;
}
-static const int av1_arg_ctrl_map[] = { AOME_SET_CPUUSED,
- AOME_SET_ENABLEAUTOALTREF,
- AOME_SET_SHARPNESS,
- AOME_SET_STATIC_THRESHOLD,
- AV1E_SET_ROW_MT,
- AV1E_SET_TILE_COLUMNS,
- AV1E_SET_TILE_ROWS,
- AV1E_SET_ENABLE_TPL_MODEL,
- AV1E_SET_ENABLE_KEYFRAME_FILTERING,
- AOME_SET_ARNR_MAXFRAMES,
- AOME_SET_ARNR_STRENGTH,
- AOME_SET_TUNING,
- AOME_SET_QP,
- AOME_SET_MAX_INTRA_BITRATE_PCT,
- AV1E_SET_MAX_INTER_BITRATE_PCT,
- AV1E_SET_GF_CBR_BOOST_PCT,
- AV1E_SET_LOSSLESS,
- AV1E_SET_ENABLE_DEBLOCKING,
- AV1E_SET_ENABLE_CDEF,
- AV1E_SET_ENABLE_RESTORATION,
- AV1E_SET_ENABLE_RECT_PARTITIONS,
- AV1E_SET_ENABLE_AB_PARTITIONS,
- AV1E_SET_ENABLE_1TO4_PARTITIONS,
- AV1E_SET_MIN_PARTITION_SIZE,
- AV1E_SET_MAX_PARTITION_SIZE,
+static const int av1_arg_ctrl_map[] = {
+ AOME_SET_CPUUSED,
+ AOME_SET_ENABLEAUTOALTREF,
+ AOME_SET_SHARPNESS,
+ AOME_SET_STATIC_THRESHOLD,
+ AV1E_SET_ROW_MT,
+ AV1E_SET_TILE_COLUMNS,
+ AV1E_SET_TILE_ROWS,
+ AV1E_SET_ENABLE_TPL_MODEL,
+ AV1E_SET_ENABLE_KEYFRAME_FILTERING,
+ AOME_SET_ARNR_MAXFRAMES,
+ AOME_SET_ARNR_STRENGTH,
+ AOME_SET_TUNING,
+ AOME_SET_QP,
+ AOME_SET_MAX_INTRA_BITRATE_PCT,
+ AV1E_SET_MAX_INTER_BITRATE_PCT,
+ AV1E_SET_GF_CBR_BOOST_PCT,
+ AV1E_SET_LOSSLESS,
+ AV1E_SET_ENABLE_DEBLOCKING,
+ AV1E_SET_ENABLE_CDEF,
+ AV1E_SET_ENABLE_RESTORATION,
+ AV1E_SET_DISABLE_ML_PARTITION_SPEED_FEATURES,
+ AV1E_SET_ENABLE_RECT_PARTITIONS,
+ AV1E_SET_ENABLE_AB_PARTITIONS,
+ AV1E_SET_ENABLE_1TO4_PARTITIONS,
+ AV1E_SET_MIN_PARTITION_SIZE,
+ AV1E_SET_MAX_PARTITION_SIZE,
#if !CONFIG_REMOVE_DUAL_FILTER
- AV1E_SET_ENABLE_DUAL_FILTER,
+ AV1E_SET_ENABLE_DUAL_FILTER,
#endif // !CONFIG_REMOVE_DUAL_FILTER
- AV1E_SET_ENABLE_CHROMA_DELTAQ,
- AV1E_SET_ENABLE_INTRA_EDGE_FILTER,
- AV1E_SET_ENABLE_ORDER_HINT,
- AV1E_SET_ENABLE_TX64,
- AV1E_SET_ENABLE_FLIP_IDTX,
+ AV1E_SET_ENABLE_CHROMA_DELTAQ,
+ AV1E_SET_ENABLE_INTRA_EDGE_FILTER,
+ AV1E_SET_ENABLE_ORDER_HINT,
+ AV1E_SET_ENABLE_TX64,
+ AV1E_SET_ENABLE_FLIP_IDTX,
#if !CONFIG_REMOVE_DIST_WTD_COMP
- AV1E_SET_ENABLE_DIST_WTD_COMP,
+ AV1E_SET_ENABLE_DIST_WTD_COMP,
#endif // !CONFIG_REMOVE_DIST_WTD_COMP
- AV1E_SET_ENABLE_MASKED_COMP,
- AV1E_SET_ENABLE_ONESIDED_COMP,
- AV1E_SET_ENABLE_INTERINTRA_COMP,
- AV1E_SET_ENABLE_SMOOTH_INTERINTRA,
- AV1E_SET_ENABLE_DIFF_WTD_COMP,
- AV1E_SET_ENABLE_INTERINTER_WEDGE,
- AV1E_SET_ENABLE_INTERINTRA_WEDGE,
- AV1E_SET_ENABLE_GLOBAL_MOTION,
- AV1E_SET_ENABLE_WARPED_MOTION,
- AV1E_SET_ENABLE_FILTER_INTRA,
- AV1E_SET_ENABLE_SMOOTH_INTRA,
- AV1E_SET_ENABLE_PAETH_INTRA,
- AV1E_SET_ENABLE_CFL_INTRA,
- AV1E_SET_FORCE_VIDEO_MODE,
- AV1E_SET_ENABLE_OBMC,
- AV1E_SET_ENABLE_OVERLAY,
- AV1E_SET_ENABLE_PALETTE,
- AV1E_SET_ENABLE_INTRABC,
- AV1E_SET_ENABLE_ANGLE_DELTA,
- AV1E_SET_ENABLE_TRELLIS_QUANT,
- AV1E_SET_ENABLE_QM,
- AV1E_SET_QM_MIN,
- AV1E_SET_QM_MAX,
- AV1E_SET_REDUCED_TX_TYPE_SET,
- AV1E_SET_INTRA_DCT_ONLY,
- AV1E_SET_INTER_DCT_ONLY,
- AV1E_SET_INTRA_DEFAULT_TX_ONLY,
- AV1E_SET_QUANT_B_ADAPT,
- AV1E_SET_COEFF_COST_UPD_FREQ,
- AV1E_SET_MODE_COST_UPD_FREQ,
- AV1E_SET_MV_COST_UPD_FREQ,
- AV1E_SET_FRAME_PARALLEL_DECODING,
- AV1E_SET_ERROR_RESILIENT_MODE,
- AV1E_SET_AQ_MODE,
- AV1E_SET_DELTAQ_MODE,
- AV1E_SET_DELTALF_MODE,
- AV1E_SET_FRAME_PERIODIC_BOOST,
- AV1E_SET_NOISE_SENSITIVITY,
- AV1E_SET_TUNE_CONTENT,
- AV1E_SET_CDF_UPDATE_MODE,
- AV1E_SET_COLOR_PRIMARIES,
- AV1E_SET_TRANSFER_CHARACTERISTICS,
- AV1E_SET_MATRIX_COEFFICIENTS,
- AV1E_SET_CHROMA_SAMPLE_POSITION,
- AV1E_SET_MIN_GF_INTERVAL,
- AV1E_SET_MAX_GF_INTERVAL,
- AV1E_SET_GF_MIN_PYRAMID_HEIGHT,
- AV1E_SET_GF_MAX_PYRAMID_HEIGHT,
- AV1E_SET_SUPERBLOCK_SIZE,
- AV1E_SET_NUM_TG,
- AV1E_SET_MTU,
- AV1E_SET_TIMING_INFO_TYPE,
- AV1E_SET_FILM_GRAIN_TEST_VECTOR,
- AV1E_SET_FILM_GRAIN_TABLE,
+ AV1E_SET_ENABLE_MASKED_COMP,
+ AV1E_SET_ENABLE_ONESIDED_COMP,
+ AV1E_SET_ENABLE_INTERINTRA_COMP,
+ AV1E_SET_ENABLE_SMOOTH_INTERINTRA,
+ AV1E_SET_ENABLE_DIFF_WTD_COMP,
+ AV1E_SET_ENABLE_INTERINTER_WEDGE,
+ AV1E_SET_ENABLE_INTERINTRA_WEDGE,
+ AV1E_SET_ENABLE_GLOBAL_MOTION,
+ AV1E_SET_ENABLE_WARPED_MOTION,
+ AV1E_SET_ENABLE_FILTER_INTRA,
+ AV1E_SET_ENABLE_SMOOTH_INTRA,
+ AV1E_SET_ENABLE_PAETH_INTRA,
+ AV1E_SET_ENABLE_CFL_INTRA,
+ AV1E_SET_FORCE_VIDEO_MODE,
+ AV1E_SET_ENABLE_OBMC,
+ AV1E_SET_ENABLE_OVERLAY,
+ AV1E_SET_ENABLE_PALETTE,
+ AV1E_SET_ENABLE_INTRABC,
+ AV1E_SET_ENABLE_ANGLE_DELTA,
+ AV1E_SET_ENABLE_TRELLIS_QUANT,
+ AV1E_SET_ENABLE_QM,
+ AV1E_SET_QM_MIN,
+ AV1E_SET_QM_MAX,
+ AV1E_SET_REDUCED_TX_TYPE_SET,
+ AV1E_SET_INTRA_DCT_ONLY,
+ AV1E_SET_INTER_DCT_ONLY,
+ AV1E_SET_INTRA_DEFAULT_TX_ONLY,
+ AV1E_SET_QUANT_B_ADAPT,
+ AV1E_SET_COEFF_COST_UPD_FREQ,
+ AV1E_SET_MODE_COST_UPD_FREQ,
+ AV1E_SET_MV_COST_UPD_FREQ,
+ AV1E_SET_FRAME_PARALLEL_DECODING,
+ AV1E_SET_ERROR_RESILIENT_MODE,
+ AV1E_SET_AQ_MODE,
+ AV1E_SET_DELTAQ_MODE,
+ AV1E_SET_DELTALF_MODE,
+ AV1E_SET_FRAME_PERIODIC_BOOST,
+ AV1E_SET_NOISE_SENSITIVITY,
+ AV1E_SET_TUNE_CONTENT,
+ AV1E_SET_CDF_UPDATE_MODE,
+ AV1E_SET_COLOR_PRIMARIES,
+ AV1E_SET_TRANSFER_CHARACTERISTICS,
+ AV1E_SET_MATRIX_COEFFICIENTS,
+ AV1E_SET_CHROMA_SAMPLE_POSITION,
+ AV1E_SET_MIN_GF_INTERVAL,
+ AV1E_SET_MAX_GF_INTERVAL,
+ AV1E_SET_GF_MIN_PYRAMID_HEIGHT,
+ AV1E_SET_GF_MAX_PYRAMID_HEIGHT,
+ AV1E_SET_SUPERBLOCK_SIZE,
+ AV1E_SET_NUM_TG,
+ AV1E_SET_MTU,
+ AV1E_SET_TIMING_INFO_TYPE,
+ AV1E_SET_FILM_GRAIN_TEST_VECTOR,
+ AV1E_SET_FILM_GRAIN_TABLE,
#if CONFIG_DENOISE
- AV1E_SET_DENOISE_NOISE_LEVEL,
- AV1E_SET_DENOISE_BLOCK_SIZE,
+ AV1E_SET_DENOISE_NOISE_LEVEL,
+ AV1E_SET_DENOISE_BLOCK_SIZE,
#endif // CONFIG_DENOISE
- AV1E_SET_MAX_REFERENCE_FRAMES,
- AV1E_SET_REDUCED_REFERENCE_SET,
- AV1E_SET_ENABLE_REF_FRAME_MVS,
- AV1E_SET_TARGET_SEQ_LEVEL_IDX,
- AV1E_SET_TIER_MASK,
- AV1E_SET_MIN_CR,
- AV1E_SET_VBR_CORPUS_COMPLEXITY_LAP,
- AV1E_SET_CHROMA_SUBSAMPLING_X,
- AV1E_SET_CHROMA_SUBSAMPLING_Y,
+ AV1E_SET_MAX_REFERENCE_FRAMES,
+ AV1E_SET_REDUCED_REFERENCE_SET,
+ AV1E_SET_ENABLE_REF_FRAME_MVS,
+ AV1E_SET_TARGET_SEQ_LEVEL_IDX,
+ AV1E_SET_TIER_MASK,
+ AV1E_SET_MIN_CR,
+ AV1E_SET_VBR_CORPUS_COMPLEXITY_LAP,
+ AV1E_SET_CHROMA_SUBSAMPLING_X,
+ AV1E_SET_CHROMA_SUBSAMPLING_Y,
#if CONFIG_TUNE_VMAF
- AV1E_SET_VMAF_MODEL_PATH,
+ AV1E_SET_VMAF_MODEL_PATH,
#endif
- AV1E_SET_SUBGOP_CONFIG_STR,
- AV1E_SET_SUBGOP_CONFIG_PATH,
- 0 };
+ AV1E_SET_SUBGOP_CONFIG_STR,
+ AV1E_SET_SUBGOP_CONFIG_PATH,
+ 0
+};
const arg_def_t *main_args[] = { &g_av1_codec_arg_defs.help,
&g_av1_codec_arg_defs.use_cfg,
@@ -338,6 +341,7 @@
&g_av1_codec_arg_defs.enable_deblocking,
&g_av1_codec_arg_defs.enable_cdef,
&g_av1_codec_arg_defs.enable_restoration,
+ &g_av1_codec_arg_defs.disable_ml_partition_speed_features,
&g_av1_codec_arg_defs.enable_rect_partitions,
&g_av1_codec_arg_defs.enable_ab_partitions,
&g_av1_codec_arg_defs.enable_1to4_partitions,
diff --git a/av1/arg_defs.c b/av1/arg_defs.c
index ff2ea3d..c381ac9 100644
--- a/av1/arg_defs.c
+++ b/av1/arg_defs.c
@@ -333,6 +333,10 @@
"Enable cross component sample offset (0: false "
"1: true)"),
#endif
+ .disable_ml_partition_speed_features =
+ ARG_DEF(NULL, "disable-ml-partition-speed-features", 1,
+ "Disable ML partition speed features "
+ "(0: false (default), 1: true)"),
.enable_rect_partitions = ARG_DEF(NULL, "enable-rect-partitions", 1,
"Enable rectangular partitions "
"(0: false, 1: true (default))"),
diff --git a/av1/arg_defs.h b/av1/arg_defs.h
index 5e9d244..60a1ff6 100644
--- a/av1/arg_defs.h
+++ b/av1/arg_defs.h
@@ -134,6 +134,7 @@
#if CONFIG_CCSO
arg_def_t enable_ccso;
#endif
+ arg_def_t disable_ml_partition_speed_features;
arg_def_t enable_rect_partitions;
arg_def_t enable_ab_partitions;
arg_def_t enable_1to4_partitions;
diff --git a/av1/av1_cx_iface.c b/av1/av1_cx_iface.c
index 9c3c69f..35651e5 100644
--- a/av1/av1_cx_iface.c
+++ b/av1/av1_cx_iface.c
@@ -109,6 +109,7 @@
const char *film_grain_table_filename;
unsigned int motion_vector_unit_test;
unsigned int cdf_update_mode;
+ int disable_ml_partition_speed_features;
int enable_rect_partitions; // enable rectangular partitions for sequence
int enable_ab_partitions; // enable AB partitions for sequence
int enable_1to4_partitions; // enable 1:4 and 4:1 partitions for sequence
@@ -384,6 +385,7 @@
0, // film_grain_table_filename
0, // motion_vector_unit_test
1, // CDF update mode
+ 0, // disable ML based partition speed up features
1, // enable rectangular partitions
1, // enable ab shape partitions
1, // enable 1:4 and 4:1 partitions
@@ -834,6 +836,8 @@
cfg->enable_dual_filter = extra_cfg->enable_dual_filter;
#endif // !CONFIG_REMOVE_DUAL_FILTER
cfg->enable_angle_delta = extra_cfg->enable_angle_delta;
+ cfg->disable_ml_partition_speed_features =
+ extra_cfg->disable_ml_partition_speed_features;
cfg->enable_rect_partitions = extra_cfg->enable_rect_partitions;
cfg->enable_ab_partitions = extra_cfg->enable_ab_partitions;
cfg->enable_1to4_partitions = extra_cfg->enable_1to4_partitions;
@@ -1344,6 +1348,8 @@
(extra_cfg->allow_warped_motion & extra_cfg->enable_warped_motion);
// Set partition related configuration.
+ part_cfg->disable_ml_partition_speed_features =
+ extra_cfg->disable_ml_partition_speed_features;
part_cfg->enable_rect_partitions = extra_cfg->enable_rect_partitions;
part_cfg->enable_ab_partitions = extra_cfg->enable_ab_partitions;
part_cfg->enable_1to4_partitions = extra_cfg->enable_1to4_partitions;
@@ -1875,6 +1881,14 @@
return update_extra_cfg(ctx, &extra_cfg);
}
+static aom_codec_err_t ctrl_set_disable_ml_partition_speed_features(
+ aom_codec_alg_priv_t *ctx, va_list args) {
+ struct av1_extracfg extra_cfg = ctx->extra_cfg;
+ extra_cfg.disable_ml_partition_speed_features =
+ CAST(AV1E_SET_DISABLE_ML_PARTITION_SPEED_FEATURES, args);
+ return update_extra_cfg(ctx, &extra_cfg);
+}
+
static aom_codec_err_t ctrl_set_enable_rect_partitions(
aom_codec_alg_priv_t *ctx, va_list args) {
struct av1_extracfg extra_cfg = ctx->extra_cfg;
@@ -3523,6 +3537,12 @@
&g_av1_codec_arg_defs.enable_1to4_partitions,
argv, err_string)) {
extra_cfg.enable_1to4_partitions = arg_parse_int_helper(&arg, err_string);
+ } else if (arg_match_helper(
+ &arg,
+ &g_av1_codec_arg_defs.disable_ml_partition_speed_features,
+ argv, err_string)) {
+ extra_cfg.disable_ml_partition_speed_features =
+ arg_parse_int_helper(&arg, err_string);
#if CONFIG_SDP
} else if (arg_match_helper(&arg, &g_av1_codec_arg_defs.enable_sdp, argv,
err_string)) {
@@ -3781,6 +3801,8 @@
{ AV1E_SET_FRAME_PARALLEL_DECODING, ctrl_set_frame_parallel_decoding_mode },
{ AV1E_SET_ERROR_RESILIENT_MODE, ctrl_set_error_resilient_mode },
{ AV1E_SET_S_FRAME_MODE, ctrl_set_s_frame_mode },
+ { AV1E_SET_DISABLE_ML_PARTITION_SPEED_FEATURES,
+ ctrl_set_disable_ml_partition_speed_features },
{ AV1E_SET_ENABLE_RECT_PARTITIONS, ctrl_set_enable_rect_partitions },
{ AV1E_SET_ENABLE_AB_PARTITIONS, ctrl_set_enable_ab_partitions },
{ AV1E_SET_ENABLE_1TO4_PARTITIONS, ctrl_set_enable_1to4_partitions },
@@ -3948,7 +3970,7 @@
0, // use_fixed_qp_offsets
{ -1, -1, -1, -1, -1, -1 }, // fixed_qp_offsets
{
- 0, 128, 128, 4, 1, 1, 1,
+ 0, 128, 128, 4, 1, 1, 1, 0,
#if CONFIG_SDP
1,
#endif // CONFIG_SDP
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index 903c8d7..9c3f4c2 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -201,6 +201,11 @@
*/
typedef struct {
/*!
+ * Flag to indicate if ml-based speed-up for partition search should be
+ * disabled.
+ */
+ bool disable_ml_partition_speed_features;
+ /*!
* Flag to indicate if rectanguar partitions should be enabled.
*/
bool enable_rect_partitions;
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c
index 52e8b87..067986b 100644
--- a/av1/encoder/speed_features.c
+++ b/av1/encoder/speed_features.c
@@ -883,6 +883,23 @@
lpf_sf->disable_lr_filter = 0;
}
+static void av1_disable_ml_based_partition_sf(
+ PARTITION_SPEED_FEATURES *const part_sf) {
+ part_sf->ml_prune_4_partition = 0;
+ part_sf->ml_prune_ab_partition = 0;
+ part_sf->ml_prune_rect_partition = 0;
+ part_sf->ml_early_term_after_part_split_level = 0;
+ part_sf->auto_max_partition_based_on_simple_motion = NOT_IN_USE;
+ part_sf->intra_cnn_split = 0;
+ part_sf->simple_motion_search_split = 0;
+ part_sf->simple_motion_search_prune_rect = 0;
+ part_sf->simple_motion_search_early_term_none = 0;
+
+ for (int i = 0; i < PARTITION_BLOCK_SIZES; ++i) {
+ part_sf->ml_partition_search_breakout_thresh[i] = -1;
+ }
+}
+
void av1_set_speed_features_framesize_dependent(AV1_COMP *cpi, int speed) {
SPEED_FEATURES *const sf = &cpi->sf;
const AV1EncoderConfig *const oxcf = &cpi->oxcf;
@@ -896,6 +913,9 @@
cpi->mv_search_params.find_fractional_mv_step = av1_return_max_sub_pixel_mv;
else if (cpi->oxcf.unit_test_cfg.motion_vector_unit_test == 2)
cpi->mv_search_params.find_fractional_mv_step = av1_return_min_sub_pixel_mv;
+
+ if (oxcf->part_cfg.disable_ml_partition_speed_features)
+ av1_disable_ml_based_partition_sf(&sf->part_sf);
}
void av1_set_speed_features_framesize_independent(AV1_COMP *cpi, int speed) {
diff --git a/common/args.c b/common/args.c
index b4d2715..6c8e401 100644
--- a/common/args.c
+++ b/common/args.c
@@ -80,6 +80,7 @@
GET_PARAMS(enable_ab_partitions);
GET_PARAMS(enable_rect_partitions);
GET_PARAMS(enable_1to4_partitions);
+ GET_PARAMS(disable_ml_partition_speed_features);
#if CONFIG_SDP
GET_PARAMS(enable_sdp);
#endif