From: Jim Bankoski Date: Mon, 28 Jul 2014 15:37:25 +0000 (-0700) Subject: Fix reference frame size restrictions. X-Git-Tag: v1.4.0~1142^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=899585ebe9a1e8e3ba408ac0b1652e14d8d6eaaf;p=libvpx Fix reference frame size restrictions. The issue was introduced by commit g9f37d14 with adding explicit restrictions on reference-frame scale factors. The restriction is checked against aligned-by-8 frame dimensions, not against original ones. So, for example, frame of 35×35 actually can refer to frame of 70×70, but the new check won't allow this. It will compare 35 vs 72 (not 70), so 2x downscale limit will be exceeded. Change-Id: Ic663693034440f64ac8312cbff9e1e773a921060 --- diff --git a/test/test-data.sha1 b/test/test-data.sha1 index b7a8f3f2b..98ac0e670 100644 --- a/test/test-data.sha1 +++ b/test/test-data.sha1 @@ -678,3 +678,5 @@ eb438c6540eb429f74404eedfa3228d409c57874 desktop_640_360_30.yuv edd86a1f5e62fd9da9a9d46078247759c2638009 tacomasmallcameramovement_640_480_30.yuv 9a70e8b7d14fba9234d0e51dce876635413ce444 thaloundeskmtg_640_480_30.yuv e7d315dbf4f3928779e0dc624311196d44491d32 niklas_1280_720_30.yuv +c77e4a26616add298a05dd5d12397be22c0e40c5 vp90-2-18-resize.ivf +c77e4a26616add298a05dd5d12397be22c0e40c5 vp90-2-18-resize.ivf diff --git a/test/test.mk b/test/test.mk index 4355237bb..53d40572a 100644 --- a/test/test.mk +++ b/test/test.mk @@ -782,6 +782,8 @@ LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-16-intra-only.webm LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-16-intra-only.webm.md5 LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-17-show-existing-frame.webm LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-17-show-existing-frame.webm.md5 +LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-18-resize.ivf +LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-18-resize.ivf.md5 LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp91-2-04-yuv444.webm LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp91-2-04-yuv444.webm.md5 diff --git a/test/test_vectors.cc b/test/test_vectors.cc index 4ea4b9dab..dbdbdd6f9 100644 --- a/test/test_vectors.cc +++ b/test/test_vectors.cc @@ -181,7 +181,7 @@ const char *const kVP9TestVectors[] = { "vp90-2-14-resize-fp-tiles-8-2.webm", "vp90-2-14-resize-fp-tiles-8-4.webm", "vp90-2-15-segkey.webm", "vp90-2-15-segkey_adpq.webm", "vp90-2-16-intra-only.webm", "vp90-2-17-show-existing-frame.webm", - "vp91-2-04-yuv444.webm", + "vp90-2-18-resize.ivf", "vp91-2-04-yuv444.webm", }; const int kNumVP9TestVectors = NELEMENTS(kVP9TestVectors); #endif // CONFIG_VP9_DECODER diff --git a/vp9/decoder/vp9_decodeframe.c b/vp9/decoder/vp9_decodeframe.c index cc6f95537..a448bd2b4 100644 --- a/vp9/decoder/vp9_decodeframe.c +++ b/vp9/decoder/vp9_decodeframe.c @@ -688,8 +688,8 @@ static void setup_frame_size_with_refs(VP9_COMMON *cm, // has valid dimensions. for (i = 0; i < REFS_PER_FRAME; ++i) { RefBuffer *const ref_frame = &cm->frame_refs[i]; - has_valid_ref_frame |= valid_ref_frame_size(ref_frame->buf->y_width, - ref_frame->buf->y_height, + has_valid_ref_frame |= valid_ref_frame_size(ref_frame->buf->y_crop_width, + ref_frame->buf->y_crop_height, width, height); } if (!has_valid_ref_frame)