Add a flag to disable ml-based coding block transform features Runtime flag: --disable-ml-transform-speed-features OFF(0) by default. Change-Id: I8f4c6b88c25b0dba562eb64e454f639dfa5ee310
diff --git a/aom/aom_encoder.h b/aom/aom_encoder.h index bf42dc7..5ec26e4 100644 --- a/aom/aom_encoder.h +++ b/aom/aom_encoder.h
@@ -238,6 +238,10 @@ * */ unsigned int disable_ml_partition_speed_features; + /*!\brief disable ml-based speed-up for transform search + * + */ + unsigned int disable_ml_transform_speed_features; #if CONFIG_SDP /*!\brief enable Semi-decoupled partitioning *
diff --git a/apps/aomenc.c b/apps/aomenc.c index 06a1079..fda2159 100644 --- a/apps/aomenc.c +++ b/apps/aomenc.c
@@ -434,6 +434,7 @@ }; const arg_def_t *av1_key_val_args[] = { + &g_av1_codec_arg_defs.disable_ml_transform_speed_features, #if CONFIG_SDP &g_av1_codec_arg_defs.enable_sdp, #endif @@ -582,6 +583,7 @@ config->enable_ab_partitions = 1; config->enable_rect_partitions = 1; config->enable_1to4_partitions = 1; + config->disable_ml_transform_speed_features = 0; #if CONFIG_SDP config->enable_sdp = 1; #endif @@ -1383,6 +1385,8 @@ fprintf( stdout, "Tool setting (Partition) : T-Type (%d), 4:1/1:4 (%d)\n", encoder_cfg->enable_ab_partitions, encoder_cfg->enable_1to4_partitions); + fprintf(stdout, "Disable ml transform speed features : %d\n", + encoder_cfg->disable_ml_transform_speed_features); #if CONFIG_SDP fprintf(stdout, " : SDP (%d)\n", encoder_cfg->enable_sdp);
diff --git a/av1/arg_defs.c b/av1/arg_defs.c index c381ac9..ebb2469 100644 --- a/av1/arg_defs.c +++ b/av1/arg_defs.c
@@ -346,6 +346,10 @@ .enable_1to4_partitions = ARG_DEF(NULL, "enable-1to4-partitions", 1, "Enable 1:4 and 4:1 partitions " "(0: false, 1: true (default))"), + .disable_ml_transform_speed_features = + ARG_DEF(NULL, "disable-ml-transform-speed-features", 1, + "Disable ML transform speed features " + "(0: false (default), 1: true)"), #if CONFIG_SDP .enable_sdp = ARG_DEF(NULL, "enable-sdp", 1, "Enable semi decoupled partitioning for key frame"
diff --git a/av1/arg_defs.h b/av1/arg_defs.h index 60a1ff6..6653b49 100644 --- a/av1/arg_defs.h +++ b/av1/arg_defs.h
@@ -138,6 +138,7 @@ arg_def_t enable_rect_partitions; arg_def_t enable_ab_partitions; arg_def_t enable_1to4_partitions; + arg_def_t disable_ml_transform_speed_features; #if CONFIG_SDP arg_def_t enable_sdp; #endif
diff --git a/av1/av1_cx_iface.c b/av1/av1_cx_iface.c index 35651e5..a483654 100644 --- a/av1/av1_cx_iface.c +++ b/av1/av1_cx_iface.c
@@ -113,6 +113,7 @@ 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 + int disable_ml_transform_speed_features; // disable all ml transform speedups #if CONFIG_SDP int enable_sdp; // enable semi-decoupled partitioning #endif // CONFIG_SDP @@ -389,6 +390,7 @@ 1, // enable rectangular partitions 1, // enable ab shape partitions 1, // enable 1:4 and 4:1 partitions + 0, // disable ml based transform speed features #if CONFIG_SDP 1, // enable semi-decoupled partitioning #endif // CONFIG_SDP @@ -841,6 +843,8 @@ 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; + cfg->disable_ml_transform_speed_features = + extra_cfg->disable_ml_transform_speed_features; #if CONFIG_SDP cfg->enable_sdp = extra_cfg->enable_sdp; #endif @@ -907,6 +911,8 @@ extra_cfg->enable_rect_partitions = cfg->enable_rect_partitions; extra_cfg->enable_ab_partitions = cfg->enable_ab_partitions; extra_cfg->enable_1to4_partitions = cfg->enable_1to4_partitions; + extra_cfg->disable_ml_transform_speed_features = + cfg->disable_ml_transform_speed_features; #if CONFIG_SDP extra_cfg->enable_sdp = cfg->enable_sdp; #endif @@ -1381,6 +1387,8 @@ txfm_cfg->use_intra_dct_only = extra_cfg->use_intra_dct_only; txfm_cfg->use_inter_dct_only = extra_cfg->use_inter_dct_only; txfm_cfg->use_intra_default_tx_only = extra_cfg->use_intra_default_tx_only; + txfm_cfg->disable_ml_transform_speed_features = + extra_cfg->disable_ml_transform_speed_features; #if CONFIG_IST txfm_cfg->enable_ist = extra_cfg->enable_ist; #endif @@ -3543,6 +3551,12 @@ argv, err_string)) { extra_cfg.disable_ml_partition_speed_features = arg_parse_int_helper(&arg, err_string); + } else if (arg_match_helper( + &arg, + &g_av1_codec_arg_defs.disable_ml_transform_speed_features, + argv, err_string)) { + extra_cfg.disable_ml_transform_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)) { @@ -3970,7 +3984,7 @@ 0, // use_fixed_qp_offsets { -1, -1, -1, -1, -1, -1 }, // fixed_qp_offsets { - 0, 128, 128, 4, 1, 1, 1, 0, + 0, 128, 128, 4, 1, 1, 1, 0, 0, #if CONFIG_SDP 1, #endif // CONFIG_SDP
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h index 9c3f4c2..71a1158 100644 --- a/av1/encoder/encoder.h +++ b/av1/encoder/encoder.h
@@ -285,6 +285,10 @@ */ typedef struct { /*! + * Flag to disable ml based transform speed features. + */ + bool disable_ml_transform_speed_features; + /*! * Flag to indicate if 64-pt transform should be enabled. */ bool enable_tx64;
diff --git a/av1/encoder/speed_features.c b/av1/encoder/speed_features.c index 067986b..cc42808 100644 --- a/av1/encoder/speed_features.c +++ b/av1/encoder/speed_features.c
@@ -883,6 +883,14 @@ lpf_sf->disable_lr_filter = 0; } +static void av1_disable_ml_based_transform_sf(TX_SPEED_FEATURES *const tx_sf) { + tx_sf->tx_type_search.prune_2d_txfm_mode = TX_TYPE_PRUNE_0; + tx_sf->tx_type_search.ml_tx_split_thresh = -1; +#if CONFIG_NEW_TX_PARTITION + tx_sf->tx_type_search.ml_tx_split_horzvert_thresh = -1; +#endif // CONFIG_NEW_TX_PARTITION +} + static void av1_disable_ml_based_partition_sf( PARTITION_SPEED_FEATURES *const part_sf) { part_sf->ml_prune_4_partition = 0; @@ -916,6 +924,9 @@ if (oxcf->part_cfg.disable_ml_partition_speed_features) av1_disable_ml_based_partition_sf(&sf->part_sf); + + if (oxcf->txfm_cfg.disable_ml_transform_speed_features) + av1_disable_ml_based_transform_sf(&sf->tx_sf); } void av1_set_speed_features_framesize_independent(AV1_COMP *cpi, int speed) {
diff --git a/common/args.c b/common/args.c index 6c8e401..6665645 100644 --- a/common/args.c +++ b/common/args.c
@@ -81,6 +81,7 @@ GET_PARAMS(enable_rect_partitions); GET_PARAMS(enable_1to4_partitions); GET_PARAMS(disable_ml_partition_speed_features); + GET_PARAMS(disable_ml_transform_speed_features); #if CONFIG_SDP GET_PARAMS(enable_sdp); #endif