[NORMATIVE, fwd-kf] Reload adapted CDFs for fwd keyframes

Instead of calling av1_setup_past_independence() when we display
a forward-coded keyframe, we can instead reload the frame context
which we had just after decoding that keyframe.

This is a much less fragile approach (it removes several issues
we encountered on our internal testing), and should give better
coding gains.

BUG=aomedia:1510

Change-Id: Ia67b20bc4128b85b11829bc84e0c383f36ae4a52
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index 07718c4..8d14139 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -2544,7 +2544,8 @@
 }
 
 #if CONFIG_FWD_KF
-static void show_existing_frame_reset(AV1Decoder *const pbi) {
+static void show_existing_frame_reset(AV1Decoder *const pbi,
+                                      int existing_frame_idx) {
   AV1_COMMON *const cm = &pbi->common;
   BufferPool *const pool = cm->buffer_pool;
   RefCntBuffer *const frame_bufs = pool->frame_bufs;
@@ -2613,7 +2614,8 @@
   unlock_buffer_pool(pool);
   pbi->hold_ref_buf = 1;
 
-  av1_setup_past_independence(cm);
+  // Reload the adapted CDFs from when we originally coded this keyframe
+  *cm->fc = cm->frame_contexts[existing_frame_idx];
 }
 #endif  // CONFIG_FWD_KF
 
@@ -2685,7 +2687,7 @@
 
 #if CONFIG_FWD_KF
     if (cm->reset_decoder_state) {
-      show_existing_frame_reset(pbi);
+      show_existing_frame_reset(pbi, existing_frame_idx);
     } else {
 #endif  // CONFIG_FWD_KF
       pbi->refresh_frame_flags = 0;