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