[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;