Don't use last_frame_seg_map if frame size differs
BUG=aomedia:1303
Change-Id: Ie9fbd1274a4b4e43b548f7377617f74d8e45d89c
diff --git a/av1/decoder/decodeframe.c b/av1/decoder/decodeframe.c
index 4e3101a..bac3668 100644
--- a/av1/decoder/decodeframe.c
+++ b/av1/decoder/decodeframe.c
@@ -750,8 +750,13 @@
return;
}
#if CONFIG_SEGMENT_PRED_LAST
- if (cm->seg.enabled && !cm->frame_parallel_decode && cm->prev_frame)
+ if (cm->seg.enabled && !cm->frame_parallel_decode && cm->prev_frame &&
+ (cm->mi_rows == cm->prev_frame->mi_rows) &&
+ (cm->mi_cols == cm->prev_frame->mi_cols)) {
cm->last_frame_seg_map = cm->prev_frame->seg_map;
+ } else {
+ cm->last_frame_seg_map = NULL;
+ }
#endif
// Segmentation map update
if (frame_is_intra_only(cm) || cm->error_resilient_mode) {
@@ -2965,8 +2970,13 @@
cm->use_prev_frame_mvs =
cm->use_ref_frame_mvs && frame_can_use_prev_frame_mvs(cm);
#if CONFIG_SEGMENT_PRED_LAST
- if (cm->seg.enabled && !cm->frame_parallel_decode)
+ if (cm->seg.enabled && !cm->frame_parallel_decode && cm->prev_frame &&
+ (cm->mi_rows == cm->prev_frame->mi_rows) &&
+ (cm->mi_cols == cm->prev_frame->mi_cols)) {
cm->last_frame_seg_map = cm->prev_frame->seg_map;
+ } else {
+ cm->last_frame_seg_map = NULL;
+ }
#endif
#endif
for (int i = 0; i < INTER_REFS_PER_FRAME; ++i) {
diff --git a/av1/decoder/decoder.c b/av1/decoder/decoder.c
index 1e38429..28addcf 100644
--- a/av1/decoder/decoder.c
+++ b/av1/decoder/decoder.c
@@ -420,12 +420,18 @@
// NOTE: It is not supposed to ref to any frame not used as reference
if (cm->is_reference_frame) cm->prev_frame = cm->cur_frame;
- if (cm->seg.enabled && !cm->frame_parallel_decode)
+ if (cm->seg.enabled && !cm->frame_parallel_decode) {
#if CONFIG_SEGMENT_PRED_LAST
- cm->last_frame_seg_map = cm->prev_frame->seg_map;
+ if (cm->prev_frame && (cm->mi_rows == cm->prev_frame->mi_rows) &&
+ (cm->mi_cols == cm->prev_frame->mi_cols)) {
+ cm->last_frame_seg_map = cm->prev_frame->seg_map;
+ } else {
+ cm->last_frame_seg_map = NULL;
+ }
#else
av1_swap_current_and_last_seg_map(cm);
#endif
+ }
}
// Update progress in frame parallel decode.