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