Frame context signaling: Remove reset symbols from the bitstream.

Because frame contexts now follow reference frames, explicit resets
are no longer necessary, but can simply happen at the same time
as reference frame resets.

Change-Id: Idbed3794e3ed52fa298346943a3014fa1ca23897
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 568199c..9e20819 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -4358,6 +4358,7 @@
 #if CONFIG_PALETTE || CONFIG_INTRABC
     if (cm->intra_only) aom_wb_write_bit(wb, cm->allow_screen_content_tools);
 #endif  // CONFIG_PALETTE || CONFIG_INTRABC
+#if !CONFIG_NO_FRAME_CONTEXT_SIGNALING
     if (!cm->error_resilient_mode) {
       if (cm->intra_only) {
         aom_wb_write_bit(wb,
@@ -4370,7 +4371,7 @@
                            cm->reset_frame_context == RESET_FRAME_CONTEXT_ALL);
       }
     }
-
+#endif
 #if CONFIG_EXT_REFS
     cpi->refresh_frame_mask = get_refresh_mask(cpi);
 #endif  // CONFIG_EXT_REFS
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index dac1f84..24c6caa 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -352,10 +352,12 @@
 #endif
 #endif
 #if CONFIG_NO_FRAME_CONTEXT_SIGNALING
-  if (frame_is_intra_only(cm) || cm->error_resilient_mode) {
+  if (frame_is_intra_only(cm) || cm->error_resilient_mode ||
+      cm->frame_refs[0].idx < 0) {
     // use default frame context values
     cm->pre_fc = &cm->frame_contexts[FRAME_CONTEXT_DEFAULTS];
   } else {
+    *cm->fc = cm->frame_contexts[cm->frame_refs[0].idx];
     cm->pre_fc = &cm->frame_contexts[cm->frame_refs[0].idx];
   }
 #else
@@ -2226,7 +2228,9 @@
       (oxcf->error_resilient_mode || oxcf->frame_parallel_decoding_mode)
           ? REFRESH_FRAME_CONTEXT_FORWARD
           : REFRESH_FRAME_CONTEXT_BACKWARD;
+#if !CONFIG_NO_FRAME_CONTEXT_SIGNALING
   cm->reset_frame_context = RESET_FRAME_CONTEXT_NONE;
+#endif
 
 #if CONFIG_PALETTE
   if (x->palette_buffer == NULL) {
@@ -4884,6 +4888,7 @@
 
     cm->error_resilient_mode = oxcf->error_resilient_mode;
 
+#if !CONFIG_NO_FRAME_CONTEXT_SIGNALING
     // By default, encoder assumes decoder can use prev_mi.
     if (cm->error_resilient_mode) {
       cm->reset_frame_context = RESET_FRAME_CONTEXT_NONE;
@@ -4892,6 +4897,7 @@
       // Only reset the current context.
       cm->reset_frame_context = RESET_FRAME_CONTEXT_CURRENT;
     }
+#endif
   }
   if (cpi->oxcf.mtu == 0) {
     cm->num_tg = cpi->oxcf.num_tile_groups;
@@ -5632,8 +5638,10 @@
   else
     cpi->multi_arf_allowed = 0;
 
-  // Normal defaults
+// Normal defaults
+#if !CONFIG_NO_FRAME_CONTEXT_SIGNALING
   cm->reset_frame_context = RESET_FRAME_CONTEXT_NONE;
+#endif
   cm->refresh_frame_context =
       (oxcf->error_resilient_mode || oxcf->frame_parallel_decoding_mode)
           ? REFRESH_FRAME_CONTEXT_FORWARD
@@ -5961,8 +5969,7 @@
   }
 #endif
 #if CONFIG_NO_FRAME_CONTEXT_SIGNALING
-  // TODO(tdaede): Check if this condition is really needed.
-  if (!cm->error_resilient_mode) cm->frame_contexts[cm->new_fb_idx] = *cm->fc;
+  cm->frame_contexts[cm->new_fb_idx] = *cm->fc;
 #else
   if (!cm->error_resilient_mode)
     cm->frame_contexts[cm->frame_context_idx] = *cm->fc;