Update inter_mode_cdf tables once per frame.
Move computing the inter_mode_cdf tables per coded inter mode symbol to
computing them only when the probabilities are updated.
Change-Id: I7a7b059ee75723cb6f278ed82a20cf34c27915d8
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index 44921ee..fb36f35 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -134,9 +134,14 @@
#endif // CONFIG_EXT_INTER
#else
int j;
- for (i = 0; i < INTER_MODE_CONTEXTS; ++i)
+ for (i = 0; i < INTER_MODE_CONTEXTS; ++i) {
for (j = 0; j < INTER_MODES - 1; ++j)
av1_diff_update_prob(r, &fc->inter_mode_probs[i][j], ACCT_STR);
+#if CONFIG_DAALA_EC
+ av1_tree_to_cdf(av1_inter_mode_tree, fc->inter_mode_probs[i],
+ fc->inter_mode_cdf[i]);
+#endif
+ }
#endif
}
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index a632fc0..3cfec47 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -190,8 +190,13 @@
// Invalid prediction mode.
assert(0);
#else
+#if CONFIG_DAALA_EC
+ const int mode = av1_inter_mode_inv[aom_read_symbol(
+ r, cm->fc->inter_mode_cdf[ctx], INTER_MODES, ACCT_STR)];
+#else
const int mode = aom_read_tree(r, av1_inter_mode_tree,
cm->fc->inter_mode_probs[ctx], ACCT_STR);
+#endif
FRAME_COUNTS *counts = xd->counts;
if (counts) ++counts->inter_mode[ctx][mode];
diff --git a/av1/decoder/decoder.c b/av1/decoder/decoder.c
index ca97817..bcc6a1b 100644
--- a/av1/decoder/decoder.c
+++ b/av1/decoder/decoder.c
@@ -54,6 +54,8 @@
av1_ext_tx_tree);
av1_indices_from_tree(av1_intra_mode_ind, av1_intra_mode_inv, INTRA_MODES,
av1_intra_mode_tree);
+ av1_indices_from_tree(av1_inter_mode_ind, av1_inter_mode_inv, INTER_MODES,
+ av1_inter_mode_tree);
#endif
}
}