Store pre_fc in AV1_COMMON rather than computing it on the spot.

Prep work for changing how frame contexts are signaled.

Change-Id: I0db8ec631fc2d616d16fabaf72eac5663ffe3630
diff --git a/av1/common/entropy.c b/av1/common/entropy.c
index b88ff3a..e29bf27 100644
--- a/av1/common/entropy.c
+++ b/av1/common/entropy.c
@@ -6139,7 +6139,7 @@
 static void adapt_coef_probs(AV1_COMMON *cm, TX_SIZE tx_size,
                              unsigned int count_sat,
                              unsigned int update_factor) {
-  const FRAME_CONTEXT *pre_fc = &cm->frame_contexts[cm->frame_context_idx];
+  const FRAME_CONTEXT *pre_fc = cm->pre_fc;
   av1_coeff_probs_model *const probs = cm->fc->coef_probs[tx_size];
   const av1_coeff_probs_model *const pre_probs = pre_fc->coef_probs[tx_size];
   const av1_coeff_count_model *const counts =
diff --git a/av1/common/entropymode.c b/av1/common/entropymode.c
index 0fcf762..ac1a418 100644
--- a/av1/common/entropymode.c
+++ b/av1/common/entropymode.c
@@ -3455,7 +3455,7 @@
 void av1_adapt_inter_frame_probs(AV1_COMMON *cm) {
   int i, j;
   FRAME_CONTEXT *fc = cm->fc;
-  const FRAME_CONTEXT *pre_fc = &cm->frame_contexts[cm->frame_context_idx];
+  const FRAME_CONTEXT *pre_fc = cm->pre_fc;
   const FRAME_COUNTS *counts = &cm->counts;
 
   for (i = 0; i < INTRA_INTER_CONTEXTS; i++)
@@ -3586,7 +3586,7 @@
 void av1_adapt_intra_frame_probs(AV1_COMMON *cm) {
   int i, j;
   FRAME_CONTEXT *fc = cm->fc;
-  const FRAME_CONTEXT *pre_fc = &cm->frame_contexts[cm->frame_context_idx];
+  const FRAME_CONTEXT *pre_fc = cm->pre_fc;
   const FRAME_COUNTS *counts = &cm->counts;
 
   if (cm->tx_mode == TX_MODE_SELECT) {
diff --git a/av1/common/entropymv.c b/av1/common/entropymv.c
index 9c162d2..ddca80a 100644
--- a/av1/common/entropymv.c
+++ b/av1/common/entropymv.c
@@ -235,20 +235,19 @@
 #if CONFIG_REF_MV
   int idx;
   for (idx = 0; idx < NMV_CONTEXTS; ++idx) {
-    nmv_context *fc = &cm->fc->nmvc[idx];
-    const nmv_context *pre_fc =
-        &cm->frame_contexts[cm->frame_context_idx].nmvc[idx];
+    nmv_context *nmvc = &cm->fc->nmvc[idx];
+    const nmv_context *pre_nmvc = &cm->pre_fc->nmvc[idx];
     const nmv_context_counts *counts = &cm->counts.mv[idx];
 #else
-  nmv_context *fc = &cm->fc->nmvc;
-  const nmv_context *pre_fc = &cm->frame_contexts[cm->frame_context_idx].nmvc;
+  nmv_context *nmvc = &cm->fc->nmvc;
+  const nmv_context *pre_nmvc = &cm->pre_fc.nmvc;
   const nmv_context_counts *counts = &cm->counts.mv;
 #endif  // CONFIG_REF_MV
-    aom_tree_merge_probs(av1_mv_joint_tree, pre_fc->joints, counts->joints,
-                         fc->joints);
+    aom_tree_merge_probs(av1_mv_joint_tree, pre_nmvc->joints, counts->joints,
+                         nmvc->joints);
     for (i = 0; i < 2; ++i) {
-      nmv_component *comp = &fc->comps[i];
-      const nmv_component *pre_comp = &pre_fc->comps[i];
+      nmv_component *comp = &nmvc->comps[i];
+      const nmv_component *pre_comp = &pre_nmvc->comps[i];
       const nmv_component_counts *c = &counts->comps[i];
 
       comp->sign = av1_mode_mv_merge_probs(pre_comp->sign, c->sign);
diff --git a/av1/common/onyxc_int.h b/av1/common/onyxc_int.h
index b60112e..aa6f212 100644
--- a/av1/common/onyxc_int.h
+++ b/av1/common/onyxc_int.h
@@ -331,6 +331,7 @@
 
   FRAME_CONTEXT *fc;              /* this frame entropy */
   FRAME_CONTEXT *frame_contexts;  // FRAME_CONTEXTS
+  FRAME_CONTEXT *pre_fc;          // Context referenced in this frame
   unsigned int frame_context_idx; /* Context to use/update */
   FRAME_COUNTS counts;
 
diff --git a/av1/common/scan.c b/av1/common/scan.c
index 9ad6c0b..293acf6 100644
--- a/av1/common/scan.c
+++ b/av1/common/scan.c
@@ -6606,7 +6606,7 @@
 
 static void update_scan_prob(AV1_COMMON *cm, TX_SIZE tx_size, TX_TYPE tx_type,
                              int rate_16) {
-  FRAME_CONTEXT *pre_fc = &cm->frame_contexts[cm->frame_context_idx];
+  FRAME_CONTEXT *pre_fc = cm->pre_fc;
   uint32_t *prev_non_zero_prob = get_non_zero_prob(pre_fc, tx_size, tx_type);
   uint32_t *non_zero_prob = get_non_zero_prob(cm->fc, tx_size, tx_type);
   uint32_t *non_zero_count = get_non_zero_counts(&cm->counts, tx_size, tx_type);
diff --git a/av1/common/txb_common.c b/av1/common/txb_common.c
index 08a685b..33eea81 100644
--- a/av1/common/txb_common.c
+++ b/av1/common/txb_common.c
@@ -98,7 +98,7 @@
 void av1_adapt_txb_probs(AV1_COMMON *cm, unsigned int count_sat,
                          unsigned int update_factor) {
   FRAME_CONTEXT *fc = cm->fc;
-  const FRAME_CONTEXT *pre_fc = &cm->frame_contexts[cm->frame_context_idx];
+  const FRAME_CONTEXT *pre_fc = cm->pre_fc;
   const FRAME_COUNTS *counts = &cm->counts;
   TX_SIZE tx_size;
   int plane, ctx, level;
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index ea2ff71..1ceae84 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -5007,6 +5007,7 @@
   av1_setup_block_planes(xd, cm->subsampling_x, cm->subsampling_y);
 
   *cm->fc = cm->frame_contexts[cm->frame_context_idx];
+  cm->pre_fc = &cm->frame_contexts[cm->frame_context_idx];
   if (!cm->fc->initialized)
     aom_internal_error(&cm->error, AOM_CODEC_CORRUPT_FRAME,
                        "Uninitialized entropy context.");
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index 90fc1c7..8579b90 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -341,6 +341,7 @@
   }
 #endif
 #endif
+  cm->pre_fc = &cm->frame_contexts[cm->frame_context_idx];
 
   cpi->vaq_refresh = 0;