[NORMATIVE] Only signal allow_warped_motion if needed
The allow_warped_motion flag has no effect on keyframes or
intra-only frames, so we don't need to signal it in that case.
BUG=aomedia:1652
STATS_CHANGED
Change-Id: I216ee9f61fdc58dceffb8be93a33a944deb7daf1
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index 4eae946..ae12fb8 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -2764,7 +2764,6 @@
(av1_superres_unscaled(cm) || !NO_FILTER_FOR_IBC))
cm->allow_intrabc = aom_rb_read_bit(rb);
cm->use_ref_frame_mvs = 0;
- cm->allow_warped_motion = 0;
cm->prev_frame = NULL;
} else {
#if CONFIG_EXPLICIT_ORDER_HINT
@@ -3131,7 +3130,7 @@
cm->skip_mode_flag = cm->is_skip_mode_allowed ? aom_rb_read_bit(rb) : 0;
read_compound_tools(cm, rb);
- if (!cm->error_resilient_mode)
+ if (!(frame_is_intra_only(cm) || cm->error_resilient_mode))
cm->allow_warped_motion = aom_rb_read_bit(rb);
else
cm->allow_warped_motion = 0;
diff --git a/av1/encoder/bitstream.c b/av1/encoder/bitstream.c
index 3403984..2547ac8 100644
--- a/av1/encoder/bitstream.c
+++ b/av1/encoder/bitstream.c
@@ -3259,7 +3259,7 @@
if (cm->is_skip_mode_allowed) aom_wb_write_bit(wb, cm->skip_mode_flag);
write_compound_tools(cm, wb);
- if (!cm->error_resilient_mode)
+ if (!(frame_is_intra_only(cm) || cm->error_resilient_mode))
aom_wb_write_bit(wb, cm->allow_warped_motion);
else
assert(!cm->allow_warped_motion);
diff --git a/av1/encoder/encoder.c b/av1/encoder/encoder.c
index ee2eca7..c955756 100644
--- a/av1/encoder/encoder.c
+++ b/av1/encoder/encoder.c
@@ -4732,7 +4732,8 @@
cm->use_ref_frame_mvs = !cpi->oxcf.disable_tempmv &&
frame_might_use_prev_frame_mvs(cm) &&
cm->seq_params.enable_order_hint;
- cm->allow_warped_motion = !cm->error_resilient_mode;
+ cm->allow_warped_motion =
+ !(frame_is_intra_only(cm) || cm->error_resilient_mode);
// Reset the frame packet stamp index.
if (cm->frame_type == KEY_FRAME) cm->current_video_frame = 0;