Add flag to disable transform ML speed features This is analogous to: https://aomedia-review.googlesource.com/c/aom/+/104141 The default value is set to 0. Change-Id: I73369ffedb56a740b7970ce752d8091d14badc18
diff --git a/aom/aomcx.h b/aom/aomcx.h index 4ba4248..80b0926 100644 --- a/aom/aomcx.h +++ b/aom/aomcx.h
@@ -1207,6 +1207,13 @@ * 0 : off, 1 : on */ AV1E_SET_DISABLE_ML_PARTITION_SPEED_FEATURES = 157, + + /*!\brief Codec control function to disable ML based transform search speed + * features. + * + * 0 : off, 1 : on + */ + AV1E_SET_DISABLE_ML_TX_SPEED_FEATURES = 158, }; /*!\brief aom 1-D scaling mode @@ -1415,6 +1422,9 @@ 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_DISABLE_ML_TX_SPEED_FEATURES, int) +#define AOM_CTRL_AV1E_SET_DISABLE_ML_TX_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 4b295f4..beeb6e6 100644 --- a/apps/aomenc.c +++ b/apps/aomenc.c
@@ -447,6 +447,10 @@ ARG_DEF(NULL, "disable-ml-partition-speed-features", 1, "Disable ML partition speed features " "(0: false (default), 1: true)"); +static const arg_def_t disable_ml_tx_speed_features = + ARG_DEF(NULL, "disable-ml-tx-speed-features", 1, + "Disable ML transform speed features " + "(0: false (default), 1: true)"); static const arg_def_t enable_rect_partitions = ARG_DEF(NULL, "enable-rect-partitions", 1, "Enable rectangular partitions " @@ -850,6 +854,7 @@ &lossless, &enable_cdef, &enable_restoration, + &disable_ml_tx_speed_features, &disable_ml_partition_speed_features, &enable_rect_partitions, &enable_ab_partitions, @@ -962,6 +967,7 @@ AV1E_SET_LOSSLESS, AV1E_SET_ENABLE_CDEF, AV1E_SET_ENABLE_RESTORATION, + AV1E_SET_DISABLE_ML_TX_SPEED_FEATURES, AV1E_SET_DISABLE_ML_PARTITION_SPEED_FEATURES, AV1E_SET_ENABLE_RECT_PARTITIONS, AV1E_SET_ENABLE_AB_PARTITIONS,
diff --git a/av1/av1_cx_iface.c b/av1/av1_cx_iface.c index 983b49e..21169f5 100644 --- a/av1/av1_cx_iface.c +++ b/av1/av1_cx_iface.c
@@ -95,6 +95,7 @@ const char *film_grain_table_filename; unsigned int motion_vector_unit_test; unsigned int cdf_update_mode; + int disable_ml_tx_speed_features; int disable_ml_partition_speed_features; int enable_rect_partitions; // enable rectangular partitions for sequence int enable_ab_partitions; // enable AB partitions for sequence @@ -222,6 +223,7 @@ 0, // film_grain_table_filename 0, // motion_vector_unit_test 1, // CDF update mode + 0, // disable ML based transform speed up features 0, // disable ML based partition speed up features 1, // enable rectangular partitions 1, // enable ab shape partitions @@ -947,6 +949,7 @@ oxcf->monochrome = cfg->monochrome; oxcf->full_still_picture_hdr = cfg->full_still_picture_hdr; oxcf->enable_dual_filter = extra_cfg->enable_dual_filter; + oxcf->disable_ml_tx_speed_features = extra_cfg->disable_ml_tx_speed_features; oxcf->disable_ml_partition_speed_features = #if CONFIG_EXT_RECUR_PARTITIONS 1; @@ -1394,6 +1397,14 @@ return update_extra_cfg(ctx, &extra_cfg); } +static aom_codec_err_t ctrl_set_disable_ml_tx_speed_features( + aom_codec_alg_priv_t *ctx, va_list args) { + struct av1_extracfg extra_cfg = ctx->extra_cfg; + extra_cfg.disable_ml_tx_speed_features = + CAST(AV1E_SET_DISABLE_ML_TX_SPEED_FEATURES, args); + 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; @@ -2674,6 +2685,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_TX_SPEED_FEATURES, + ctrl_set_disable_ml_tx_speed_features }, { AV1E_SET_DISABLE_ML_PARTITION_SPEED_FEATURES, ctrl_set_disable_ml_partition_speed_features }, { AV1E_SET_ENABLE_RECT_PARTITIONS, ctrl_set_enable_rect_partitions },
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h index 19bdf0a..19174ee 100644 --- a/av1/encoder/encoder.h +++ b/av1/encoder/encoder.h
@@ -368,6 +368,7 @@ int enable_dual_filter; unsigned int motion_vector_unit_test; unsigned int sb_multipass_unit_test; + int disable_ml_tx_speed_features; int disable_ml_partition_speed_features; int enable_rect_partitions; int enable_ab_partitions;
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c index d304532..0077a0f 100644 --- a/av1/encoder/speed_features.c +++ b/av1/encoder/speed_features.c
@@ -711,6 +711,11 @@ } } +static void av1_disable_ml_based_tx_sf(SPEED_FEATURES *const sf) { + sf->tx_type_search.prune_mode = NO_PRUNE; + sf->tx_type_search.ml_tx_split_thresh = -1; +} + static void av1_disable_ml_based_partition_sf(SPEED_FEATURES *const sf) { sf->ml_prune_4_partition = 0; sf->ml_prune_ab_partition = 0; @@ -743,6 +748,7 @@ if (oxcf->disable_ml_partition_speed_features) av1_disable_ml_based_partition_sf(sf); + if (oxcf->disable_ml_tx_speed_features) av1_disable_ml_based_tx_sf(sf); } void av1_set_speed_features_framesize_independent(AV1_COMP *cpi, int speed) {