Merge "Factor out common tx_type writing codes from inter/intra frame" into nextgenv2
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index fa6b905..e76cd17 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -1122,6 +1122,81 @@
 }
 #endif  // CONFIG_PALETTE
 
+static void write_tx_type(const AV1_COMMON *const cm,
+                          const MB_MODE_INFO *const mbmi,
+#if CONFIG_SUPERTX
+                          const int supertx_enabled,
+#endif
+                          aom_writer *w) {
+  const int is_inter = is_inter_block(mbmi);
+  if (!FIXED_TX_TYPE) {
+#if CONFIG_EXT_TX
+    const BLOCK_SIZE bsize = mbmi->sb_type;
+    if (get_ext_tx_types(mbmi->tx_size, bsize, is_inter) > 1 &&
+        cm->base_qindex > 0 && !mbmi->skip &&
+#if CONFIG_SUPERTX
+        !supertx_enabled &&
+#endif  // CONFIG_SUPERTX
+        !segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
+      int eset = get_ext_tx_set(mbmi->tx_size, bsize, is_inter);
+      if (is_inter) {
+        assert(ext_tx_used_inter[eset][mbmi->tx_type]);
+        if (eset > 0)
+          av1_write_token(
+              w, av1_ext_tx_inter_tree[eset],
+              cm->fc->inter_ext_tx_prob[eset][txsize_sqr_map[mbmi->tx_size]],
+              &ext_tx_inter_encodings[eset][mbmi->tx_type]);
+      } else if (ALLOW_INTRA_EXT_TX) {
+        if (eset > 0)
+          av1_write_token(
+              w, av1_ext_tx_intra_tree[eset],
+              cm->fc->intra_ext_tx_prob[eset][mbmi->tx_size][mbmi->mode],
+              &ext_tx_intra_encodings[eset][mbmi->tx_type]);
+      }
+    }
+#else
+    if (mbmi->tx_size < TX_32X32 && cm->base_qindex > 0 && !mbmi->skip &&
+#if CONFIG_SUPERTX
+        !supertx_enabled &&
+#endif  // CONFIG_SUPERTX
+        !segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
+      if (is_inter) {
+#if CONFIG_DAALA_EC
+        aom_write_symbol(w, av1_ext_tx_ind[mbmi->tx_type],
+                         cm->fc->inter_ext_tx_cdf[mbmi->tx_size], TX_TYPES);
+#else
+        av1_write_token(w, av1_ext_tx_tree,
+                        cm->fc->inter_ext_tx_prob[mbmi->tx_size],
+                        &ext_tx_encodings[mbmi->tx_type]);
+#endif
+      } else {
+#if CONFIG_DAALA_EC
+        aom_write_symbol(
+            w, av1_ext_tx_ind[mbmi->tx_type],
+            cm->fc->intra_ext_tx_cdf[mbmi->tx_size]
+                                    [intra_mode_to_tx_type_context[mbmi->mode]],
+            TX_TYPES);
+#else
+        av1_write_token(
+            w, av1_ext_tx_tree,
+            cm->fc
+                ->intra_ext_tx_prob[mbmi->tx_size]
+                                   [intra_mode_to_tx_type_context[mbmi->mode]],
+            &ext_tx_encodings[mbmi->tx_type]);
+#endif
+      }
+    } else {
+      if (!mbmi->skip) {
+#if CONFIG_SUPERTX
+        if (!supertx_enabled)
+#endif  // CONFIG_SUPERTX
+          assert(mbmi->tx_type == DCT_DCT);
+      }
+    }
+#endif  // CONFIG_EXT_TX
+  }
+}
+
 static void pack_inter_mode_mvs(AV1_COMP *cpi, const MODE_INFO *mi,
 #if CONFIG_SUPERTX
                                 int supertx_enabled,
@@ -1535,71 +1610,11 @@
 #endif  // CONFIG_EXT_INTERP
   }
 
-  if (!FIXED_TX_TYPE) {
-#if CONFIG_EXT_TX
-    if (get_ext_tx_types(mbmi->tx_size, bsize, is_inter) > 1 &&
-        cm->base_qindex > 0 && !mbmi->skip &&
+  write_tx_type(cm, mbmi,
 #if CONFIG_SUPERTX
-        !supertx_enabled &&
-#endif  // CONFIG_SUPERTX
-        !segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
-      int eset = get_ext_tx_set(mbmi->tx_size, bsize, is_inter);
-      if (is_inter) {
-        assert(ext_tx_used_inter[eset][mbmi->tx_type]);
-        if (eset > 0)
-          av1_write_token(
-              w, av1_ext_tx_inter_tree[eset],
-              cm->fc->inter_ext_tx_prob[eset][txsize_sqr_map[mbmi->tx_size]],
-              &ext_tx_inter_encodings[eset][mbmi->tx_type]);
-      } else if (ALLOW_INTRA_EXT_TX) {
-        if (eset > 0)
-          av1_write_token(
-              w, av1_ext_tx_intra_tree[eset],
-              cm->fc->intra_ext_tx_prob[eset][mbmi->tx_size][mbmi->mode],
-              &ext_tx_intra_encodings[eset][mbmi->tx_type]);
-      }
-    }
-#else
-    if (mbmi->tx_size < TX_32X32 && cm->base_qindex > 0 && !mbmi->skip &&
-#if CONFIG_SUPERTX
-        !supertx_enabled &&
-#endif  // CONFIG_SUPERTX
-        !segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
-      if (is_inter) {
-#if CONFIG_DAALA_EC
-        aom_write_symbol(w, av1_ext_tx_ind[mbmi->tx_type],
-                         cm->fc->inter_ext_tx_cdf[mbmi->tx_size], TX_TYPES);
-#else
-        av1_write_token(w, av1_ext_tx_tree,
-                        cm->fc->inter_ext_tx_prob[mbmi->tx_size],
-                        &ext_tx_encodings[mbmi->tx_type]);
+                supertx_enabled,
 #endif
-      } else {
-#if CONFIG_DAALA_EC
-        aom_write_symbol(
-            w, av1_ext_tx_ind[mbmi->tx_type],
-            cm->fc->intra_ext_tx_cdf[mbmi->tx_size]
-                                    [intra_mode_to_tx_type_context[mbmi->mode]],
-            TX_TYPES);
-#else
-        av1_write_token(
-            w, av1_ext_tx_tree,
-            cm->fc
-                ->intra_ext_tx_prob[mbmi->tx_size]
-                                   [intra_mode_to_tx_type_context[mbmi->mode]],
-            &ext_tx_encodings[mbmi->tx_type]);
-#endif
-      }
-    } else {
-      if (!mbmi->skip) {
-#if CONFIG_SUPERTX
-        if (!supertx_enabled)
-#endif  // CONFIG_SUPERTX
-          assert(mbmi->tx_type == DCT_DCT);
-      }
-    }
-#endif  // CONFIG_EXT_TX
-  }
+                w);
 }
 
 #if CONFIG_DELTA_Q
@@ -1685,38 +1700,11 @@
   if (bsize >= BLOCK_8X8) write_filter_intra_mode_info(cm, mbmi, w);
 #endif  // CONFIG_FILTER_INTRA
 
-  if (!FIXED_TX_TYPE) {
-#if CONFIG_EXT_TX
-    if (get_ext_tx_types(mbmi->tx_size, bsize, 0) > 1 && cm->base_qindex > 0 &&
-        !mbmi->skip &&
-        !segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP) &&
-        ALLOW_INTRA_EXT_TX) {
-      int eset = get_ext_tx_set(mbmi->tx_size, bsize, 0);
-      if (eset > 0)
-        av1_write_token(
-            w, av1_ext_tx_intra_tree[eset],
-            cm->fc->intra_ext_tx_prob[eset][mbmi->tx_size][mbmi->mode],
-            &ext_tx_intra_encodings[eset][mbmi->tx_type]);
-    }
-#else
-    if (mbmi->tx_size < TX_32X32 && cm->base_qindex > 0 && !mbmi->skip &&
-        !segfeature_active(&cm->seg, mbmi->segment_id, SEG_LVL_SKIP)) {
-#if CONFIG_DAALA_EC
-      aom_write_symbol(
-          w, av1_ext_tx_ind[mbmi->tx_type],
-          cm->fc->intra_ext_tx_cdf[mbmi->tx_size]
-                                  [intra_mode_to_tx_type_context[mbmi->mode]],
-          TX_TYPES);
-#else
-      av1_write_token(
-          w, av1_ext_tx_tree,
-          cm->fc->intra_ext_tx_prob[mbmi->tx_size]
-                                   [intra_mode_to_tx_type_context[mbmi->mode]],
-          &ext_tx_encodings[mbmi->tx_type]);
+  write_tx_type(cm, mbmi,
+#if CONFIG_SUPERTX
+                0,
 #endif
-    }
-#endif  // CONFIG_EXT_TX
-  }
+                w);
 }
 
 #if CONFIG_SUPERTX