Move frame_refs into current_frame

The frame_refs mapping is a property of the current frame, so move it
from the common structure into CurrentFrame (current_frame).

This forms part of wider restructuring and refactoring in order to
achieve a clean API separation at the entry to the low-level encoder.

BUG=aomedia:2244

Change-Id: I832a996eb1f1a5777936abe1826f81ebed6c9068
diff --git a/av1/common/entropymode.c b/av1/common/entropymode.c
index 89e2a1b..51bbea7 100644
--- a/av1/common/entropymode.c
+++ b/av1/common/entropymode.c
@@ -1073,8 +1073,8 @@
   // but could do with fuller testing
   if (cm->large_scale_tile) {
     for (int i = 0; i < INTER_REFS_PER_FRAME; ++i) {
-      if (cm->frame_refs[i].buf != NULL)
-        cm->frame_refs[i].buf->frame_context = *cm->fc;
+      if (cm->current_frame.frame_refs[i].buf != NULL)
+        cm->current_frame.frame_refs[i].buf->frame_context = *cm->fc;
     }
     for (int i = 0; i < FRAME_BUFFERS; ++i)
       cm->buffer_pool->frame_bufs[i].frame_context = *cm->fc;
diff --git a/av1/common/mvref_common.c b/av1/common/mvref_common.c
index 858fc5d..b3d9c2f 100644
--- a/av1/common/mvref_common.c
+++ b/av1/common/mvref_common.c
@@ -347,7 +347,8 @@
 
   if (rf[1] == NONE_FRAME) {
     int cur_frame_index = cm->cur_frame->order_hint;
-    const RefCntBuffer *const buf_0 = cm->frame_refs[FWD_RF_OFFSET(rf[0])].buf;
+    const RefCntBuffer *const buf_0 =
+        cm->current_frame.frame_refs[FWD_RF_OFFSET(rf[0])].buf;
     int frame0_index = buf_0->order_hint;
     int cur_offset_0 = get_relative_dist(&cm->seq_params.order_hint_info,
                                          cur_frame_index, frame0_index);
@@ -382,12 +383,14 @@
   } else {
     // Process compound inter mode
     int cur_frame_index = cm->cur_frame->order_hint;
-    const RefCntBuffer *const buf_0 = cm->frame_refs[FWD_RF_OFFSET(rf[0])].buf;
+    const RefCntBuffer *const buf_0 =
+        cm->current_frame.frame_refs[FWD_RF_OFFSET(rf[0])].buf;
     int frame0_index = buf_0->order_hint;
 
     int cur_offset_0 = get_relative_dist(&cm->seq_params.order_hint_info,
                                          cur_frame_index, frame0_index);
-    const RefCntBuffer *const buf_1 = cm->frame_refs[FWD_RF_OFFSET(rf[1])].buf;
+    const RefCntBuffer *const buf_1 =
+        cm->current_frame.frame_refs[FWD_RF_OFFSET(rf[1])].buf;
     int frame1_index = buf_1->order_hint;
     int cur_offset_1 = get_relative_dist(&cm->seq_params.order_hint_info,
                                          cur_frame_index, frame1_index);
@@ -868,7 +871,8 @@
 
   MV_REFERENCE_FRAME ref_frame;
   for (ref_frame = LAST_FRAME; ref_frame <= ALTREF_FRAME; ++ref_frame) {
-    const RefCntBuffer *const buf = cm->frame_refs[ref_frame - LAST_FRAME].buf;
+    const RefCntBuffer *const buf =
+        cm->current_frame.frame_refs[ref_frame - LAST_FRAME].buf;
     if (buf != NULL)
       cm->cur_frame->ref_order_hints[ref_frame - LAST_FRAME] = buf->order_hint;
   }
@@ -877,7 +881,8 @@
 void av1_setup_frame_sign_bias(AV1_COMMON *cm) {
   MV_REFERENCE_FRAME ref_frame;
   for (ref_frame = LAST_FRAME; ref_frame <= ALTREF_FRAME; ++ref_frame) {
-    const RefCntBuffer *const buf = cm->frame_refs[ref_frame - LAST_FRAME].buf;
+    const RefCntBuffer *const buf =
+        cm->current_frame.frame_refs[ref_frame - LAST_FRAME].buf;
     if (cm->seq_params.order_hint_info.enable_order_hint && buf != NULL) {
       const int ref_order_hint = buf->order_hint;
       cm->ref_frame_sign_bias[ref_frame] =
@@ -940,7 +945,7 @@
   (void)dir;
 
   const RefCntBuffer *const start_frame_buf =
-      cm->frame_refs[FWD_RF_OFFSET(start_frame)].buf;
+      cm->current_frame.frame_refs[FWD_RF_OFFSET(start_frame)].buf;
   if (start_frame_buf == NULL) return 0;
 
   if (start_frame_buf->intra_only) return 0;
@@ -1024,7 +1029,7 @@
 
   for (int ref_frame = LAST_FRAME; ref_frame <= ALTREF_FRAME; ref_frame++) {
     const int ref_idx = ref_frame - LAST_FRAME;
-    const RefCntBuffer *const buf = cm->frame_refs[ref_idx].buf;
+    const RefCntBuffer *const buf = cm->current_frame.frame_refs[ref_idx].buf;
     int order_hint = 0;
 
     if (buf != NULL) order_hint = buf->order_hint;
@@ -1288,7 +1293,7 @@
 
   // Identify the nearest forward and backward references.
   for (int i = 0; i < INTER_REFS_PER_FRAME; ++i) {
-    const RefCntBuffer *const buf = cm->frame_refs[i].buf;
+    const RefCntBuffer *const buf = cm->current_frame.frame_refs[i].buf;
     if (buf == NULL) continue;
 
     const int ref_order_hint = buf->order_hint;
@@ -1323,7 +1328,7 @@
     // Identify the second nearest forward reference.
     ref_order_hints[1] = -1;
     for (int i = 0; i < INTER_REFS_PER_FRAME; ++i) {
-      const RefCntBuffer *const buf = cm->frame_refs[i].buf;
+      const RefCntBuffer *const buf = cm->current_frame.frame_refs[i].buf;
       if (buf == NULL) continue;
 
       const int ref_order_hint = buf->order_hint;
@@ -1369,8 +1374,9 @@
 
   const int buf_idx = ref_info->buf_idx;
 
-  cm->frame_refs[frame_idx].buf = &cm->buffer_pool->frame_bufs[buf_idx];
-  cm->frame_refs[frame_idx].map_idx = ref_info->map_idx;
+  cm->current_frame.frame_refs[frame_idx].buf =
+      &cm->buffer_pool->frame_bufs[buf_idx];
+  cm->current_frame.frame_refs[frame_idx].map_idx = ref_info->map_idx;
 }
 
 void av1_set_frame_refs(AV1_COMMON *const cm, int lst_map_idx,
diff --git a/av1/common/onyxc_int.h b/av1/common/onyxc_int.h
index 945a8dd..2a91167 100644
--- a/av1/common/onyxc_int.h
+++ b/av1/common/onyxc_int.h
@@ -325,6 +325,9 @@
   unsigned int order_hint;
   unsigned int frame_number;
   SkipModeInfo skip_mode_info;
+  // Each Inter frame can reference INTER_REFS_PER_FRAME buffers. This maps each
+  // (inter) reference frame type to the corresponding reference buffer.
+  RefBuffer frame_refs[INTER_REFS_PER_FRAME];
 } CurrentFrame;
 
 typedef struct AV1Common {
@@ -368,10 +371,6 @@
   // Only used in frame parallel decode.
   int next_ref_frame_map[REF_FRAMES];
 
-  // Each Inter frame can reference INTER_REFS_PER_FRAME buffers. This maps each
-  // (inter) reference frame type to the corresponding reference buffer.
-  RefBuffer frame_refs[INTER_REFS_PER_FRAME];
-
   // Index to the 'new' frame (i.e. the frame currently being encoded or
   // decoded) in the buffer pool 'cm->buffer_pool'.
   int new_fb_idx;
@@ -680,10 +679,10 @@
 
 static INLINE RefCntBuffer *get_prev_frame(const AV1_COMMON *const cm) {
   if (cm->primary_ref_frame == PRIMARY_REF_NONE ||
-      cm->frame_refs[cm->primary_ref_frame].buf == NULL) {
+      cm->current_frame.frame_refs[cm->primary_ref_frame].buf == NULL) {
     return NULL;
   } else {
-    return cm->frame_refs[cm->primary_ref_frame].buf;
+    return cm->current_frame.frame_refs[cm->primary_ref_frame].buf;
   }
 }
 
diff --git a/av1/common/pred_common.h b/av1/common/pred_common.h
index 721c8fe..f667057 100644
--- a/av1/common/pred_common.h
+++ b/av1/common/pred_common.h
@@ -91,9 +91,9 @@
                                          const MACROBLOCKD *xd) {
   MB_MODE_INFO *mbmi = xd->mi[0];
   const RefCntBuffer *const bck_buf =
-      cm->frame_refs[mbmi->ref_frame[0] - LAST_FRAME].buf;
+      cm->current_frame.frame_refs[mbmi->ref_frame[0] - LAST_FRAME].buf;
   const RefCntBuffer *const fwd_buf =
-      cm->frame_refs[mbmi->ref_frame[1] - LAST_FRAME].buf;
+      cm->current_frame.frame_refs[mbmi->ref_frame[1] - LAST_FRAME].buf;
   int bck_frame_index = 0, fwd_frame_index = 0;
   int cur_frame_index = cm->cur_frame->order_hint;
 
diff --git a/av1/common/reconinter.c b/av1/common/reconinter.c
index 230b55d..f338e1b 100644
--- a/av1/common/reconinter.c
+++ b/av1/common/reconinter.c
@@ -637,9 +637,9 @@
 
   *use_jnt_comp_avg = 1;
   const RefCntBuffer *const bck_buf =
-      cm->frame_refs[mbmi->ref_frame[0] - LAST_FRAME].buf;
+      cm->current_frame.frame_refs[mbmi->ref_frame[0] - LAST_FRAME].buf;
   const RefCntBuffer *const fwd_buf =
-      cm->frame_refs[mbmi->ref_frame[1] - LAST_FRAME].buf;
+      cm->current_frame.frame_refs[mbmi->ref_frame[1] - LAST_FRAME].buf;
   const int cur_frame_index = cm->cur_frame->order_hint;
   int bck_frame_index = 0, fwd_frame_index = 0;
 
@@ -968,7 +968,8 @@
   for (int ref = 0; ref < num_refs; ++ref) {
     const MV_REFERENCE_FRAME frame = above_mbmi->ref_frame[ref];
 
-    const RefBuffer *const ref_buf = &ctxt->cm->frame_refs[frame - LAST_FRAME];
+    const RefBuffer *const ref_buf =
+        &ctxt->cm->current_frame.frame_refs[frame - LAST_FRAME];
 
     xd->block_refs[ref] = ref_buf;
     if ((!av1_is_valid_scale(&ref_buf->sf)))
@@ -1005,7 +1006,8 @@
   for (int ref = 0; ref < num_refs; ++ref) {
     const MV_REFERENCE_FRAME frame = left_mbmi->ref_frame[ref];
 
-    const RefBuffer *const ref_buf = &ctxt->cm->frame_refs[frame - LAST_FRAME];
+    const RefBuffer *const ref_buf =
+        &ctxt->cm->current_frame.frame_refs[frame - LAST_FRAME];
 
     xd->block_refs[ref] = ref_buf;
     if ((!av1_is_valid_scale(&ref_buf->sf)))
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index f9fd0a2..d28d500 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -702,7 +702,8 @@
 
         ref = 0;
         const RefBuffer *ref_buf =
-            &cm->frame_refs[this_mbmi->ref_frame[ref] - LAST_FRAME];
+            &cm->current_frame
+                 .frame_refs[this_mbmi->ref_frame[ref] - LAST_FRAME];
 
         pd->pre[ref].buf0 = (plane == 1) ? ref_buf->buf->buf.u_buffer
                                          : ref_buf->buf->buf.v_buffer;
@@ -1062,7 +1063,7 @@
       assert(frame == INTRA_FRAME);
       assert(ref == 0);
     } else {
-      RefBuffer *ref_buf = &cm->frame_refs[frame - LAST_FRAME];
+      RefBuffer *ref_buf = &cm->current_frame.frame_refs[frame - LAST_FRAME];
 
       xd->block_refs[ref] = ref_buf;
       av1_setup_pre_planes(xd, ref, &ref_buf->buf->buf, mi_row, mi_col,
@@ -2444,7 +2445,7 @@
   int has_valid_ref_frame = 0;
   for (int i = 0; i < INTER_REFS_PER_FRAME; ++i) {
     if (aom_rb_read_bit(rb)) {
-      YV12_BUFFER_CONFIG *const buf = &cm->frame_refs[i].buf->buf;
+      YV12_BUFFER_CONFIG *const buf = &cm->current_frame.frame_refs[i].buf->buf;
       width = buf->y_crop_width;
       height = buf->y_crop_height;
       cm->render_width = buf->render_width;
@@ -2474,7 +2475,7 @@
   // Check to make sure at least one of frames that this frame references
   // has valid dimensions.
   for (int i = 0; i < INTER_REFS_PER_FRAME; ++i) {
-    RefBuffer *const ref_frame = &cm->frame_refs[i];
+    RefBuffer *const ref_frame = &cm->current_frame.frame_refs[i];
     has_valid_ref_frame |=
         valid_ref_frame_size(ref_frame->buf->buf.y_crop_width,
                              ref_frame->buf->buf.y_crop_height, width, height);
@@ -2483,7 +2484,7 @@
     aom_internal_error(&cm->error, AOM_CODEC_CORRUPT_FRAME,
                        "Referenced frame has invalid size");
   for (int i = 0; i < INTER_REFS_PER_FRAME; ++i) {
-    RefBuffer *const ref_frame = &cm->frame_refs[i];
+    RefBuffer *const ref_frame = &cm->current_frame.frame_refs[i];
     if (!valid_ref_frame_img_fmt(
             ref_frame->buf->buf.bit_depth, ref_frame->buf->buf.subsampling_x,
             ref_frame->buf->buf.subsampling_y, seq_params->bit_depth,
@@ -4721,7 +4722,7 @@
   pbi->refresh_frame_flags = (1 << REF_FRAMES) - 1;
 
   for (int i = 0; i < INTER_REFS_PER_FRAME; ++i) {
-    cm->frame_refs[i].buf = NULL;
+    cm->current_frame.frame_refs[i].buf = NULL;
   }
 
   if (pbi->need_resync) {
@@ -4752,7 +4753,7 @@
   generate_next_ref_frame_map(pbi);
 
   // Reload the adapted CDFs from when we originally coded this keyframe
-  *cm->fc = cm->frame_refs[existing_frame_idx].buf->frame_context;
+  *cm->fc = cm->current_frame.frame_refs[existing_frame_idx].buf->frame_context;
 }
 
 static INLINE void reset_frame_buffers(AV1_COMMON *cm) {
@@ -5026,7 +5027,7 @@
       pbi->refresh_frame_flags = (1 << REF_FRAMES) - 1;
 
     for (int i = 0; i < INTER_REFS_PER_FRAME; ++i) {
-      cm->frame_refs[i].buf = NULL;
+      cm->current_frame.frame_refs[i].buf = NULL;
     }
     if (pbi->need_resync) {
       reset_ref_frame_map(cm);
@@ -5165,11 +5166,11 @@
             aom_internal_error(&cm->error, AOM_CODEC_CORRUPT_FRAME,
                                "Inter frame requests nonexistent reference");
 
-          RefBuffer *const ref_frame = &cm->frame_refs[i];
+          RefBuffer *const ref_frame = &cm->current_frame.frame_refs[i];
           ref_frame->buf = &frame_bufs[idx];
           ref_frame->map_idx = ref;
         } else {
-          ref = cm->frame_refs[i].map_idx;
+          ref = cm->current_frame.frame_refs[i].map_idx;
         }
 
         cm->ref_frame_sign_bias[LAST_FRAME + i] = 0;
@@ -5208,7 +5209,7 @@
 
     cm->prev_frame = get_prev_frame(cm);
     if (cm->primary_ref_frame != PRIMARY_REF_NONE &&
-        cm->frame_refs[cm->primary_ref_frame].buf == NULL) {
+        cm->current_frame.frame_refs[cm->primary_ref_frame].buf == NULL) {
       aom_internal_error(&cm->error, AOM_CODEC_CORRUPT_FRAME,
                          "Reference frame containing this frame's initial "
                          "frame context is unavailable.");
@@ -5221,7 +5222,7 @@
         cm->allow_ref_frame_mvs = 0;
 
       for (int i = 0; i < INTER_REFS_PER_FRAME; ++i) {
-        RefBuffer *const ref_buf = &cm->frame_refs[i];
+        RefBuffer *const ref_buf = &cm->current_frame.frame_refs[i];
         av1_setup_scale_factors_for_frame(
             &ref_buf->sf, ref_buf->buf->buf.y_crop_width,
             ref_buf->buf->buf.y_crop_height, cm->width, cm->height);
@@ -5509,7 +5510,8 @@
     // use the default frame context values
     *cm->fc = *cm->default_frame_context;
   } else {
-    *cm->fc = cm->frame_refs[cm->primary_ref_frame].buf->frame_context;
+    *cm->fc =
+        cm->current_frame.frame_refs[cm->primary_ref_frame].buf->frame_context;
   }
   if (!cm->fc->initialized)
     aom_internal_error(&cm->error, AOM_CODEC_CORRUPT_FRAME,
diff --git a/av1/decoder/decodemv.c b/av1/decoder/decodemv.c
index 4cfed5b..df09996 100644
--- a/av1/decoder/decodemv.c
+++ b/av1/decoder/decodemv.c
@@ -1390,7 +1390,7 @@
 
   for (int ref = 0; ref < 1 + has_second_ref(mbmi); ++ref) {
     const MV_REFERENCE_FRAME frame = mbmi->ref_frame[ref];
-    RefBuffer *ref_buf = &cm->frame_refs[frame - LAST_FRAME];
+    RefBuffer *ref_buf = &cm->current_frame.frame_refs[frame - LAST_FRAME];
 
     xd->block_refs[ref] = ref_buf;
   }
diff --git a/av1/decoder/decoder.c b/av1/decoder/decoder.c
index b917648..9b958e6 100644
--- a/av1/decoder/decoder.c
+++ b/av1/decoder/decoder.c
@@ -444,7 +444,7 @@
 
     // Invalidate these references until the next frame starts.
     for (ref_index = 0; ref_index < INTER_REFS_PER_FRAME; ref_index++) {
-      cm->frame_refs[ref_index].buf = NULL;
+      cm->current_frame.frame_refs[ref_index].buf = NULL;
     }
   }
 }
@@ -467,8 +467,8 @@
     // TODO(jkoleszar): Error concealment is undefined and non-normative
     // at this point, but if it becomes so, [0] may not always be the correct
     // thing to do here.
-    if (cm->frame_refs[0].buf != NULL) {
-      cm->frame_refs[0].buf->buf.corrupted = 1;
+    if (cm->current_frame.frame_refs[0].buf != NULL) {
+      cm->current_frame.frame_refs[0].buf->buf.corrupted = 1;
     }
   }
 
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 2121a6f..a462fc7 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -1943,7 +1943,9 @@
     if (lf->mode_ref_delta_update) {
       const int prime_idx = cm->primary_ref_frame;
       const RefCntBuffer *const buf =
-          prime_idx == PRIMARY_REF_NONE ? NULL : cm->frame_refs[prime_idx].buf;
+          prime_idx == PRIMARY_REF_NONE
+              ? NULL
+              : cm->current_frame.frame_refs[prime_idx].buf;
       int8_t last_ref_deltas[REF_FRAMES];
       if (prime_idx == PRIMARY_REF_NONE || buf == NULL) {
         av1_set_default_ref_deltas(last_ref_deltas);
@@ -2875,7 +2877,7 @@
   RefBuffer frame_refs_copy[INTER_REFS_PER_FRAME];
 
   // Backup the frame refs info
-  memcpy(frame_refs_copy, cm->frame_refs,
+  memcpy(frame_refs_copy, cm->current_frame.frame_refs,
          INTER_REFS_PER_FRAME * sizeof(RefBuffer));
 
   const int lst_map_idx = get_ref_frame_map_idx(cpi, LAST_FRAME);
@@ -2890,7 +2892,8 @@
   for (int ref_idx = 0; ref_idx < INTER_REFS_PER_FRAME; ++ref_idx) {
     // Compare the buffer index between two reference frames indexed
     // respectively by the encoder and the decoder side decisions.
-    if (cm->frame_refs[ref_idx].buf != frame_refs_copy[ref_idx].buf) {
+    if (cm->current_frame.frame_refs[ref_idx].buf !=
+        frame_refs_copy[ref_idx].buf) {
       cm->frame_refs_short_signaling = 0;
       break;
     }
@@ -2904,13 +2907,14 @@
         "dec_ref(map_idx=%d)=%d\n",
         get_ref_frame_map_idx(cpi, ref_frame),
         get_ref_frame_buf_idx(cpi, ref_frame), ref_frame,
-        cm->frame_refs[ref_frame - LAST_FRAME].map_idx, ref_frame);
+        cm->current_frame.frame_refs[ref_frame - LAST_FRAME].map_idx,
+        ref_frame);
   }
 #endif  // 0
 
   // Restore the frame refs info if frame_refs_short_signaling is off.
   if (!cm->frame_refs_short_signaling)
-    memcpy(cm->frame_refs, frame_refs_copy,
+    memcpy(cm->current_frame.frame_refs, frame_refs_copy,
            INTER_REFS_PER_FRAME * sizeof(RefBuffer));
 }
 
diff --git a/av1/encoder/encodeframe.c b/av1/encoder/encodeframe.c
index 452a520..8bf16dd 100644
--- a/av1/encoder/encodeframe.c
+++ b/av1/encoder/encodeframe.c
@@ -3420,7 +3420,8 @@
                          num_planes);
   } else {
     av1_setup_pre_planes(xd, ref_idx, yv12, mi_row, mi_col,
-                         &cm->frame_refs[ref - LAST_FRAME].sf, num_planes);
+                         &cm->current_frame.frame_refs[ref - LAST_FRAME].sf,
+                         num_planes);
   }
 
   mbmi->ref_frame[0] = ref;
@@ -5442,7 +5443,7 @@
       if (ref_frame == GOLDEN_FRAME || ref_frame == ALTREF_FRAME) continue;
 
       const RefCntBuffer *const buf =
-          cm->frame_refs[ref_frame - LAST_FRAME].buf;
+          cm->current_frame.frame_refs[ref_frame - LAST_FRAME].buf;
       if (buf != NULL) {
         const unsigned int ref_order_hint = buf->order_hint;
 
@@ -5511,7 +5512,7 @@
 
   int one_sided_refs = 1;
   for (int ref = 0; ref < INTER_REFS_PER_FRAME; ++ref) {
-    const RefCntBuffer *const buf = cm->frame_refs[ref].buf;
+    const RefCntBuffer *const buf = cm->current_frame.frame_refs[ref].buf;
     if (buf == NULL) continue;
 
     const int ref_order_hint = buf->order_hint;
@@ -5531,9 +5532,9 @@
   if (!skip_mode_info->skip_mode_allowed) return;
 
   const RefCntBuffer *const buf_0 =
-      cm->frame_refs[skip_mode_info->ref_frame_idx_0].buf;
+      cm->current_frame.frame_refs[skip_mode_info->ref_frame_idx_0].buf;
   const RefCntBuffer *const buf_1 =
-      cm->frame_refs[skip_mode_info->ref_frame_idx_1].buf;
+      cm->current_frame.frame_refs[skip_mode_info->ref_frame_idx_1].buf;
   assert(buf_0 != NULL && buf_1 != NULL);
 
   ref_order_hint[0] = buf_0->order_hint;
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index 3011cfa..703eeb5 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -410,12 +410,13 @@
     set_sb_size(&cm->seq_params, select_sb_size(cpi));
   } else {
     if (cm->primary_ref_frame == PRIMARY_REF_NONE ||
-        cm->frame_refs[cm->primary_ref_frame].buf == NULL) {
+        cm->current_frame.frame_refs[cm->primary_ref_frame].buf == NULL) {
       av1_setup_past_independence(cm);
       cm->seg.update_map = 1;
       cm->seg.update_data = 1;
     } else {
-      *cm->fc = cm->frame_refs[cm->primary_ref_frame].buf->frame_context;
+      *cm->fc = cm->current_frame.frame_refs[cm->primary_ref_frame]
+                    .buf->frame_context;
     }
     av1_zero(cpi->interp_filter_selected[0]);
   }
@@ -4103,7 +4104,8 @@
   init_motion_estimation(cpi);
 
   for (ref_frame = LAST_FRAME; ref_frame <= ALTREF_FRAME; ++ref_frame) {
-    RefBuffer *const ref_buf = &cm->frame_refs[ref_frame - LAST_FRAME];
+    RefBuffer *const ref_buf =
+        &cm->current_frame.frame_refs[ref_frame - LAST_FRAME];
     const int buf_idx = get_ref_frame_buf_idx(cpi, ref_frame);
 
     if (buf_idx != INVALID_IDX) {
@@ -4581,7 +4583,7 @@
     // Base q-index may have changed, so we need to assign proper default coef
     // probs before every iteration.
     if (cm->primary_ref_frame == PRIMARY_REF_NONE ||
-        cm->frame_refs[cm->primary_ref_frame].buf == NULL) {
+        cm->current_frame.frame_refs[cm->primary_ref_frame].buf == NULL) {
       av1_default_coef_probs(cm);
       av1_setup_frame_contexts(cm);
     }
@@ -4924,7 +4926,7 @@
       current_frame->frame_number, current_frame->order_hint, cm->show_frame,
       cm->show_existing_frame);
   for (int ref_frame = LAST_FRAME; ref_frame <= ALTREF_FRAME; ++ref_frame) {
-    RefBuffer *buf = &cm->frame_refs[ref_frame - LAST_FRAME];
+    RefBuffer *buf = &cm->current_frame.frame_refs[ref_frame - LAST_FRAME];
     const int ref_offset = (buf->buf) ? (int)buf->buf->order_hint : -1;
     printf(" %d(%c-%d-%4.2f)", ref_offset,
            (cpi->ref_frame_flags & flag_list[ref_frame]) ? 'Y' : 'N',
diff --git a/av1/encoder/encoder.h b/av1/encoder/encoder.h
index d2f9b84..1ff2ef7 100644
--- a/av1/encoder/encoder.h
+++ b/av1/encoder/encoder.h
@@ -1027,9 +1027,9 @@
                                 MV_REFERENCE_FRAME ref0,
                                 MV_REFERENCE_FRAME ref1) {
   xd->block_refs[0] =
-      &cm->frame_refs[ref0 >= LAST_FRAME ? ref0 - LAST_FRAME : 0];
+      &cm->current_frame.frame_refs[ref0 >= LAST_FRAME ? ref0 - LAST_FRAME : 0];
   xd->block_refs[1] =
-      &cm->frame_refs[ref1 >= LAST_FRAME ? ref1 - LAST_FRAME : 0];
+      &cm->current_frame.frame_refs[ref1 >= LAST_FRAME ? ref1 - LAST_FRAME : 0];
 }
 
 static INLINE int get_chessboard_index(int frame_index) {
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 970f53d..c4876e5 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -7038,7 +7038,8 @@
   const YV12_BUFFER_CONFIG *yv12 = get_ref_frame_buffer(cpi, ref_frame);
   MACROBLOCKD *const xd = &x->e_mbd;
   MB_MODE_INFO *const mbmi = xd->mi[0];
-  const struct scale_factors *const sf = &cm->frame_refs[ref_frame - 1].sf;
+  const struct scale_factors *const sf =
+      &cm->current_frame.frame_refs[ref_frame - 1].sf;
   MB_MODE_INFO_EXT *const mbmi_ext = x->mbmi_ext;
 
   assert(yv12 != NULL);
@@ -8549,7 +8550,8 @@
   const int is_compound = has_second_ref(mbmi);
   assert(is_intrabc_block(mbmi) == 0);
   for (int j = 0; j < 1 + is_compound; ++j) {
-    const RefBuffer *ref_buf = &cm->frame_refs[mbmi->ref_frame[j] - LAST_FRAME];
+    const RefBuffer *ref_buf =
+        &cm->current_frame.frame_refs[mbmi->ref_frame[j] - LAST_FRAME];
     const struct scale_factors *const sf = &ref_buf->sf;
     // TODO(any): Refine skip flag calculation considering scaling
     if (av1_is_scaled(sf)) {
@@ -11200,7 +11202,7 @@
     unsigned int ref_offsets[2];
     for (int i = 0; i < 2; ++i) {
       const RefCntBuffer *const buf =
-          cm->frame_refs[ref_frame[i] - LAST_FRAME].buf;
+          cm->current_frame.frame_refs[ref_frame[i] - LAST_FRAME].buf;
       assert(buf != NULL);
       ref_offsets[i] = buf->order_hint;
     }
diff --git a/av1/encoder/reconinter_enc.c b/av1/encoder/reconinter_enc.c
index 9e3c7a4..87f5132 100644
--- a/av1/encoder/reconinter_enc.c
+++ b/av1/encoder/reconinter_enc.c
@@ -144,7 +144,8 @@
 
         ref = 0;
         const RefBuffer *ref_buf =
-            &cm->frame_refs[this_mbmi->ref_frame[ref] - LAST_FRAME];
+            &cm->current_frame
+                 .frame_refs[this_mbmi->ref_frame[ref] - LAST_FRAME];
 
         pd->pre[ref].buf0 = (plane == 1) ? ref_buf->buf->buf.u_buffer
                                          : ref_buf->buf->buf.v_buffer;