Add default reduced set for ext-tx

Here we create a default set for the ext-tx experiment which
includes:

Intra: {DCT, ADST} X {DCT, ADST} + IDTX (identity in both directions)
Inter: DCT_DCT + IDTX

This set is used if indicated in the uncompressed header.

Change-Id: Ic907ada12b4e0c98cabb7c9650ab99942d0c0859
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index e6783b7..16540d7 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -1785,9 +1785,10 @@
                    cpi->sf.use_fast_coef_costing);
   if (rd_stats->rate == INT_MAX) return INT64_MAX;
 #if CONFIG_EXT_TX
-  if (get_ext_tx_types(tx_size, bs, is_inter) > 1 &&
+  if (get_ext_tx_types(tx_size, bs, is_inter, cm->reduced_tx_set_used) > 1 &&
       !xd->lossless[xd->mi[0]->mbmi.segment_id]) {
-    const int ext_tx_set = get_ext_tx_set(tx_size, bs, is_inter);
+    const int ext_tx_set =
+        get_ext_tx_set(tx_size, bs, is_inter, cm->reduced_tx_set_used);
     if (is_inter) {
       if (ext_tx_set > 0)
         rd_stats->rate +=
@@ -1885,7 +1886,8 @@
   if (evaluate_rect_tx) {
     const TX_SIZE rect_tx_size = max_txsize_rect_lookup[bs];
     RD_STATS this_rd_stats;
-    ext_tx_set = get_ext_tx_set(rect_tx_size, bs, is_inter);
+    ext_tx_set =
+        get_ext_tx_set(rect_tx_size, bs, is_inter, cm->reduced_tx_set_used);
     if ((is_inter && ext_tx_used_inter[ext_tx_set][tx_type]) ||
         (!is_inter && ext_tx_used_intra[ext_tx_set][tx_type])) {
       rd = txfm_yrd(cpi, x, &this_rd_stats, ref_best_rd, bs, tx_type,
@@ -1912,7 +1914,7 @@
       continue;
     if (max_tx_size >= TX_32X32 && n == TX_4X4) continue;
 #if CONFIG_EXT_TX
-    ext_tx_set = get_ext_tx_set(n, bs, is_inter);
+    ext_tx_set = get_ext_tx_set(n, bs, is_inter, cm->reduced_tx_set_used);
     if (is_inter) {
       if (!ext_tx_used_inter[ext_tx_set][tx_type]) continue;
       if (cpi->sf.tx_type_search.prune_mode > NO_PRUNE) {
@@ -1992,7 +1994,8 @@
   mbmi->min_tx_size = get_min_tx_size(mbmi->tx_size);
 #endif
 #if CONFIG_EXT_TX
-  ext_tx_set = get_ext_tx_set(mbmi->tx_size, bs, is_inter);
+  ext_tx_set =
+      get_ext_tx_set(mbmi->tx_size, bs, is_inter, cm->reduced_tx_set_used);
 #endif  // CONFIG_EXT_TX
 
   if (is_inter && cpi->sf.tx_type_search.prune_mode > NO_PRUNE)
@@ -2002,7 +2005,8 @@
     prune = prune_tx_types(cpi, bs, x, xd, 0);
 #endif
 #if CONFIG_EXT_TX
-  if (get_ext_tx_types(mbmi->tx_size, bs, is_inter) > 1 &&
+  if (get_ext_tx_types(mbmi->tx_size, bs, is_inter, cm->reduced_tx_set_used) >
+          1 &&
       !xd->lossless[mbmi->segment_id]) {
 #if CONFIG_PVQ
     od_rollback_buffer pre_buf, post_buf;
@@ -2039,7 +2043,8 @@
       od_encode_rollback(&x->daala_enc, &pre_buf);
 #endif
       if (this_rd_stats.rate == INT_MAX) continue;
-      if (get_ext_tx_types(mbmi->tx_size, bs, is_inter) > 1) {
+      if (get_ext_tx_types(mbmi->tx_size, bs, is_inter,
+                           cm->reduced_tx_set_used) > 1) {
         if (is_inter) {
           if (ext_tx_set > 0)
             this_rd_stats.rate +=
@@ -3096,8 +3101,10 @@
   if (!is_lossless) {
     int rate_tx_type = 0;
 #if CONFIG_EXT_TX
-    if (get_ext_tx_types(tx_size, bsize, 0) > 1) {
-      const int eset = get_ext_tx_set(tx_size, bsize, 0);
+    if (get_ext_tx_types(tx_size, bsize, 0, cpi->common.reduced_tx_set_used) >
+        1) {
+      const int eset =
+          get_ext_tx_set(tx_size, bsize, 0, cpi->common.reduced_tx_set_used);
       rate_tx_type = cpi->intra_tx_type_costs[eset][txsize_sqr_map[tx_size]]
                                              [mbmi->mode][mbmi->tx_type];
     }
@@ -4126,9 +4133,11 @@
           mbmi->min_tx_size, get_min_tx_size(mbmi->inter_tx_size[row][col]));
 
 #if CONFIG_EXT_TX
-  if (get_ext_tx_types(mbmi->min_tx_size, bsize, is_inter) > 1 &&
+  if (get_ext_tx_types(mbmi->min_tx_size, bsize, is_inter,
+                       cm->reduced_tx_set_used) > 1 &&
       !xd->lossless[xd->mi[0]->mbmi.segment_id]) {
-    int ext_tx_set = get_ext_tx_set(mbmi->min_tx_size, bsize, is_inter);
+    const int ext_tx_set = get_ext_tx_set(mbmi->min_tx_size, bsize, is_inter,
+                                          cm->reduced_tx_set_used);
     if (is_inter) {
       if (ext_tx_set > 0)
         rd_stats->rate +=
@@ -4185,7 +4194,8 @@
   RD_STATS rd_stats_stack[4];
 #endif
 #if CONFIG_EXT_TX
-  int ext_tx_set = get_ext_tx_set(max_tx_size, bsize, is_inter);
+  const int ext_tx_set =
+      get_ext_tx_set(max_tx_size, bsize, is_inter, cm->reduced_tx_set_used);
 #endif  // CONFIG_EXT_TX
 
   if (is_inter && cpi->sf.tx_type_search.prune_mode > NO_PRUNE)
@@ -11799,8 +11809,10 @@
       if (!xd->lossless[mbmi->segment_id]) {
         int rate_tx_type = 0;
 #if CONFIG_EXT_TX
-        if (get_ext_tx_types(mbmi->tx_size, bsize, 1) > 1) {
-          const int eset = get_ext_tx_set(mbmi->tx_size, bsize, 1);
+        if (get_ext_tx_types(mbmi->tx_size, bsize, 1, cm->reduced_tx_set_used) >
+            1) {
+          const int eset =
+              get_ext_tx_set(mbmi->tx_size, bsize, 1, cm->reduced_tx_set_used);
           rate_tx_type =
               cpi->inter_tx_type_costs[eset][mbmi->tx_size][mbmi->tx_type];
         }