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