Index: source/libvpx/vp9/decoder/vp9_decodemv.c |
=================================================================== |
--- source/libvpx/vp9/decoder/vp9_decodemv.c (revision 292608) |
+++ source/libvpx/vp9/decoder/vp9_decodemv.c (working copy) |
@@ -223,7 +223,6 @@ |
fr = vp9_read_tree(r, vp9_mv_fp_tree, class0 ? mvcomp->class0_fp[d] |
: mvcomp->fp); |
- |
// High precision part (if hp is not used, the default value of the hp is 1) |
hp = usehp ? vp9_read(r, class0 ? mvcomp->class0_hp : mvcomp->hp) |
: 1; |
@@ -435,11 +434,16 @@ |
for (ref = 0; ref < 1 + is_compound; ++ref) { |
const MV_REFERENCE_FRAME frame = mbmi->ref_frame[ref]; |
- const int ref_idx = frame - LAST_FRAME; |
- if (cm->frame_refs[ref_idx].sf.x_scale_fp == REF_INVALID_SCALE || |
- cm->frame_refs[ref_idx].sf.y_scale_fp == REF_INVALID_SCALE ) |
+ RefBuffer *ref_buf = &cm->frame_refs[frame - LAST_FRAME]; |
+ xd->block_refs[ref] = ref_buf; |
+ if ((!vp9_is_valid_scale(&ref_buf->sf))) |
vpx_internal_error(&cm->error, VPX_CODEC_UNSUP_BITSTREAM, |
"Reference frame has invalid dimensions"); |
+ if (ref_buf->buf->corrupted) |
+ vpx_internal_error(&cm->error, VPX_CODEC_CORRUPT_FRAME, |
+ "Block reference is corrupt"); |
+ vp9_setup_pre_planes(xd, ref, ref_buf->buf, mi_row, mi_col, |
+ &ref_buf->sf); |
vp9_find_mv_refs(cm, xd, tile, mi, frame, mbmi->ref_mvs[frame], |
mi_row, mi_col); |
} |