Make ext-intra/intra-interp work with ec-multisymbol
Use cdf to signal intra filter type.
Skip forward update when ec-adapt is on.
Change-Id: Idd446e081b8e9ea33356e60423b372bfd85a80db
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index d9eaf23..af94487 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -168,11 +168,9 @@
}
#endif // CONFIG_PALETTE
-#if CONFIG_EXT_INTRA
-#if CONFIG_INTRA_INTERP
+#if CONFIG_EXT_INTRA && CONFIG_INTRA_INTERP
av1_tokens_from_tree(intra_filter_encodings, av1_intra_filter_tree);
-#endif // CONFIG_INTRA_INTERP
-#endif // CONFIG_EXT_INTRA
+#endif // CONFIG_EXT_INTRA && CONFIG_INTRA_INTERP
#if CONFIG_EXT_INTER
av1_tokens_from_tree(interintra_mode_encodings, av1_interintra_mode_tree);
av1_tokens_from_tree(compound_type_encodings, av1_compound_type_tree);
@@ -1263,8 +1261,8 @@
#endif // CONFIG_FILTER_INTRA
#if CONFIG_EXT_INTRA
-static void write_intra_angle_info(const AV1_COMMON *cm, const MACROBLOCKD *xd,
- aom_writer *w) {
+static void write_intra_angle_info(const MACROBLOCKD *xd,
+ FRAME_CONTEXT *const ec_ctx, aom_writer *w) {
const MB_MODE_INFO *const mbmi = &xd->mi[0]->mbmi;
const BLOCK_SIZE bsize = mbmi->sb_type;
#if CONFIG_INTRA_INTERP
@@ -1272,7 +1270,7 @@
int p_angle;
#endif // CONFIG_INTRA_INTERP
- (void)cm;
+ (void)ec_ctx;
if (bsize < BLOCK_8X8) return;
if (av1_is_directional_mode(mbmi->mode, bsize)) {
@@ -1283,9 +1281,15 @@
p_angle = mode_to_angle_map[mbmi->mode] +
mbmi->angle_delta[0] * av1_get_angle_step(mbmi->sb_type, 0);
if (av1_is_intra_filter_switchable(p_angle)) {
+#if CONFIG_EC_MULTISYMBOL
+ aom_write_symbol(w, mbmi->intra_filter,
+ ec_ctx->intra_filter_cdf[intra_filter_ctx],
+ INTRA_FILTERS);
+#else
av1_write_token(w, av1_intra_filter_tree,
- cm->fc->intra_filter_probs[intra_filter_ctx],
+ ec_ctx->intra_filter_probs[intra_filter_ctx],
&intra_filter_encodings[mbmi->intra_filter]);
+#endif // CONFIG_EC_MULTISYMBOL
}
#endif // CONFIG_INTRA_INTERP
}
@@ -1653,7 +1657,7 @@
#endif // CONFIG_CB4X4
#if CONFIG_EXT_INTRA
- write_intra_angle_info(cm, xd, w);
+ write_intra_angle_info(xd, ec_ctx, w);
#endif // CONFIG_EXT_INTRA
#if CONFIG_PALETTE
if (bsize >= BLOCK_8X8 && cm->allow_screen_content_tools)
@@ -1994,7 +1998,7 @@
#endif // CONFIG_CB4X4
#if CONFIG_EXT_INTRA
- write_intra_angle_info(cm, xd, w);
+ write_intra_angle_info(xd, ec_ctx, w);
#endif // CONFIG_EXT_INTRA
#if CONFIG_PALETTE
if (bsize >= BLOCK_8X8 && cm->allow_screen_content_tools)
@@ -4623,13 +4627,12 @@
ct, probwt);
}
#endif
-#endif // !CONFIG_EC_ADAPT
-
#if CONFIG_EXT_INTRA && CONFIG_INTRA_INTERP
for (i = 0; i < INTRA_FILTERS + 1; ++i)
prob_diff_update(av1_intra_filter_tree, fc->intra_filter_probs[i],
counts->intra_filter[i], INTRA_FILTERS, probwt, header_bc);
#endif // CONFIG_EXT_INTRA && CONFIG_INTRA_INTERP
+#endif // !CONFIG_EC_ADAPT
if (frame_is_intra_only(cm)) {
av1_copy(cm->kf_y_prob, av1_kf_y_mode_prob);