[NORMATIVE] Error resilient/skip mode on OrderHint

* In error_resilient_mode, some unintended frame-to-frame dependencies
  still exist owing to the way that the OrderHint (aka frame_offset)
  values are handled.

* Skip mode also has dependency on OrderHint and shall be off if
  OrderHint is disabled.

This patch removes these dependencies (as detailed in Issue 1497) when
error_resilient_mode is on or when OrderHint is disabled.

BUG=aomedia:1497

Change-Id: I11c45d9b7253cc51119197aec9a36806d9138aa9
diff --git a/av1/common/mvref_common.c b/av1/common/mvref_common.c
index 28db720..20c2ed5 100644
--- a/av1/common/mvref_common.c
+++ b/av1/common/mvref_common.c
@@ -1232,7 +1232,8 @@
   MV_REFERENCE_FRAME ref_frame;
   for (ref_frame = LAST_FRAME; ref_frame <= ALTREF_FRAME; ++ref_frame) {
     const int buf_idx = cm->frame_refs[ref_frame - LAST_FRAME].idx;
-    if (cm->seq_params.enable_order_hint && buf_idx != INVALID_IDX) {
+    if (cm->seq_params.enable_order_hint && !cm->error_resilient_mode &&
+        buf_idx != INVALID_IDX) {
       const int ref_frame_offset =
           cm->buffer_pool->frame_bufs[buf_idx].cur_frame_offset;
       cm->ref_frame_sign_bias[ref_frame] =
@@ -1391,7 +1392,7 @@
 
 void av1_setup_motion_field(AV1_COMMON *cm) {
   memset(cm->ref_frame_side, -1, sizeof(cm->ref_frame_side));
-  if (!cm->seq_params.enable_order_hint) return;
+  if (!cm->seq_params.enable_order_hint || cm->error_resilient_mode) return;
 
   int cur_frame_index = cm->cur_frame->cur_frame_offset;
   int alt_frame_index = 0, gld_frame_index = 0;
@@ -1772,7 +1773,9 @@
   cm->is_skip_mode_allowed = 0;
   cm->ref_frame_idx_0 = cm->ref_frame_idx_1 = INVALID_IDX;
 
-  if (frame_is_intra_only(cm) || cm->reference_mode == SINGLE_REFERENCE) return;
+  if (!cm->seq_params.enable_order_hint || cm->error_resilient_mode ||
+      frame_is_intra_only(cm) || cm->reference_mode == SINGLE_REFERENCE)
+    return;
 
   RefCntBuffer *const frame_bufs = cm->buffer_pool->frame_bufs;
   const int cur_frame_offset = cm->frame_offset;
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index 9c8b506..551801f 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -2992,7 +2992,8 @@
 
   av1_setup_frame_buf_refs(cm);
 
-  if (cm->frame_type != S_FRAME) av1_setup_frame_sign_bias(cm);
+  if (cm->frame_type != S_FRAME && !cm->error_resilient_mode)
+    av1_setup_frame_sign_bias(cm);
 
   cm->cur_frame->intra_only = cm->frame_type == KEY_FRAME || cm->intra_only;
   cm->cur_frame->frame_type = cm->frame_type;
@@ -3192,6 +3193,7 @@
   if (cm->reference_mode != SINGLE_REFERENCE) setup_compound_reference_mode(cm);
 
   av1_setup_skip_mode_allowed(cm);
+  assert(cm->error_resilient_mode ? !cm->is_skip_mode_allowed : 1);
   cm->skip_mode_flag = cm->is_skip_mode_allowed ? aom_rb_read_bit(rb) : 0;
 
   read_compound_tools(cm, rb);
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 9147aaa..9d9e176 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -3318,6 +3318,7 @@
     aom_wb_write_bit(wb, use_hybrid_pred);
   }
 
+  assert(cm->error_resilient_mode ? !cm->is_skip_mode_allowed : 1);
   if (cm->is_skip_mode_allowed) aom_wb_write_bit(wb, cm->skip_mode_flag);
 
   write_compound_tools(cm, wb);
diff --git a/av1/encoder/rdopt.c b/av1/encoder/rdopt.c
index 60b5af6..9527c05 100644
--- a/av1/encoder/rdopt.c
+++ b/av1/encoder/rdopt.c
@@ -7404,8 +7404,8 @@
   int64_t early_terminate = 0;
 
   int comp_idx;
-  const int search_jnt_comp = is_comp_pred && cm->seq_params.enable_jnt_comp &&
-                              !cm->error_resilient_mode;
+  const int search_jnt_comp =
+      is_comp_pred & cm->seq_params.enable_jnt_comp & !cm->error_resilient_mode;
   // If !search_jnt_comp, we need to force mbmi->compound_idx = 1.
   for (comp_idx = !search_jnt_comp; comp_idx < 2; ++comp_idx) {
     compmode_interinter_cost = 0;