Add enc option to use default intra tx type only
Adds an encoder command line flag to select default transform for
intra modes:
--use-intra-default-tx-only
Change-Id: I30ff99fa7dce830ad69cc294423040a8045633bf
diff --git a/aom/aomcx.h b/aom/aomcx.h
index 37c9ea4..a200171 100644
--- a/aom/aomcx.h
+++ b/aom/aomcx.h
@@ -980,6 +980,9 @@
/*!\brief Control to use dct only for inter modes */
AV1E_SET_INTER_DCT_ONLY,
+ /*!\brief Control to use default tx type only for intra modes */
+ AV1E_SET_INTRA_DEFAULT_TX_ONLY,
+
/*!\brief Control to use adaptive quantize_b */
AV1E_SET_QUANT_B_ADAPT,
@@ -1386,6 +1389,9 @@
AOM_CTRL_USE_TYPE(AV1E_SET_INTER_DCT_ONLY, unsigned int)
#define AOM_CTRL_AV1E_SET_INTER_DCT_ONLY
+AOM_CTRL_USE_TYPE(AV1E_SET_INTRA_DEFAULT_TX_ONLY, unsigned int)
+#define AOM_CTRL_AV1E_SET_INTRA_DEFAULT_TX_ONLY
+
AOM_CTRL_USE_TYPE(AV1E_SET_QUANT_B_ADAPT, unsigned int)
#define AOM_CTRL_AV1E_SET_QUANT_B_ADAPT
diff --git a/apps/aomenc.c b/apps/aomenc.c
index 6efe123..c1fb84b 100644
--- a/apps/aomenc.c
+++ b/apps/aomenc.c
@@ -539,6 +539,9 @@
ARG_DEF(NULL, "use-intra-dct-only", 1, "Use DCT only for INTRA modes");
static const arg_def_t use_inter_dct_only =
ARG_DEF(NULL, "use-inter-dct-only", 1, "Use DCT only for INTER modes");
+static const arg_def_t use_intra_default_tx_only =
+ ARG_DEF(NULL, "use-intra-default-tx-only", 1,
+ "Use Default-transform only for INTRA modes");
static const arg_def_t quant_b_adapt =
ARG_DEF(NULL, "quant-b-adapt", 1, "Use adaptive quantize_b");
static const arg_def_t coeff_cost_upd_freq =
@@ -774,6 +777,7 @@
&reduced_tx_type_set,
&use_intra_dct_only,
&use_inter_dct_only,
+ &use_intra_default_tx_only,
&quant_b_adapt,
&coeff_cost_upd_freq,
&mode_cost_upd_freq,
@@ -862,6 +866,7 @@
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,
diff --git a/av1/av1_cx_iface.c b/av1/av1_cx_iface.c
index 0b6b61c..3356f08 100644
--- a/av1/av1_cx_iface.c
+++ b/av1/av1_cx_iface.c
@@ -126,6 +126,7 @@
int reduced_tx_type_set;
int use_intra_dct_only;
int use_inter_dct_only;
+ int use_intra_default_tx_only;
int quant_b_adapt;
COST_UPDATE_TYPE coeff_cost_upd_freq;
COST_UPDATE_TYPE mode_cost_upd_freq;
@@ -225,6 +226,7 @@
0, // reduced_tx_type_set
0, // use_intra_dct_only
0, // use_inter_dct_only
+ 0, // use_intra_default_tx_only
0, // quant_b_adapt
COST_UPD_SB, // coeff_cost_upd_freq
COST_UPD_SB, // mode_cost_upd_freq
@@ -591,6 +593,7 @@
oxcf->reduced_tx_type_set = extra_cfg->reduced_tx_type_set;
oxcf->use_intra_dct_only = extra_cfg->use_intra_dct_only;
oxcf->use_inter_dct_only = extra_cfg->use_inter_dct_only;
+ oxcf->use_intra_default_tx_only = extra_cfg->use_intra_default_tx_only;
oxcf->quant_b_adapt = extra_cfg->quant_b_adapt;
oxcf->coeff_cost_upd_freq = (COST_UPDATE_TYPE)extra_cfg->coeff_cost_upd_freq;
oxcf->mode_cost_upd_freq = (COST_UPDATE_TYPE)extra_cfg->mode_cost_upd_freq;
@@ -1334,6 +1337,14 @@
return update_extra_cfg(ctx, &extra_cfg);
}
+static aom_codec_err_t ctrl_set_intra_default_tx_only(aom_codec_alg_priv_t *ctx,
+ va_list args) {
+ struct av1_extracfg extra_cfg = ctx->extra_cfg;
+ extra_cfg.use_intra_default_tx_only =
+ CAST(AV1E_SET_INTRA_DEFAULT_TX_ONLY, args);
+ return update_extra_cfg(ctx, &extra_cfg);
+}
+
static aom_codec_err_t ctrl_set_quant_b_adapt(aom_codec_alg_priv_t *ctx,
va_list args) {
struct av1_extracfg extra_cfg = ctx->extra_cfg;
@@ -2078,6 +2089,7 @@
{ AV1E_SET_REDUCED_TX_TYPE_SET, ctrl_set_reduced_tx_type_set },
{ AV1E_SET_INTRA_DCT_ONLY, ctrl_set_intra_dct_only },
{ AV1E_SET_INTER_DCT_ONLY, ctrl_set_inter_dct_only },
+ { AV1E_SET_INTRA_DEFAULT_TX_ONLY, ctrl_set_intra_default_tx_only },
{ AV1E_SET_QUANT_B_ADAPT, ctrl_set_quant_b_adapt },
{ AV1E_SET_COEFF_COST_UPD_FREQ, ctrl_set_coeff_cost_upd_freq },
{ AV1E_SET_MODE_COST_UPD_FREQ, ctrl_set_mode_cost_upd_freq },
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index bccaa82..f65b024 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -383,6 +383,7 @@
int reduced_tx_type_set;
int use_intra_dct_only;
int use_inter_dct_only;
+ int use_intra_default_tx_only;
int quant_b_adapt;
COST_UPDATE_TYPE coeff_cost_upd_freq;
COST_UPDATE_TYPE mode_cost_upd_freq;
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 4d9bb7a..e6e4da9 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -11106,7 +11106,8 @@
init_mode_skip_mask(mode_skip_mask, cpi, x, bsize);
- if (cpi->sf.tx_type_search.fast_intra_tx_type_search)
+ if (cpi->sf.tx_type_search.fast_intra_tx_type_search ||
+ cpi->oxcf.use_intra_default_tx_only)
x->use_default_intra_tx_type = 1;
else
x->use_default_intra_tx_type = 0;
@@ -11121,6 +11122,7 @@
}
x->comp_rd_stats_idx = 0;
}
+
// TODO(kyslov): now this is very similar to set_params_rd_pick_inter_mode
// (except that doesn't set ALTREF parameters)
// consider passing a flag to select non-rd path (similar to