diff options
-rw-r--r-- | test/test-data.sha1 | 3 | ||||
-rw-r--r-- | test/test.mk | 2 | ||||
-rw-r--r-- | test/test_vectors.cc | 3 | ||||
-rw-r--r-- | vp9/vp9_dx_iface.c | 46 | ||||
-rw-r--r-- | vpx_scale/generic/yv12extend.c | 11 | ||||
-rw-r--r-- | vpx_scale/mips/dspr2/yv12extend_dspr2.c | 26 |
6 files changed, 47 insertions, 44 deletions
diff --git a/test/test-data.sha1 b/test/test-data.sha1 index 56946b5e5..0def69d18 100644 --- a/test/test-data.sha1 +++ b/test/test-data.sha1 @@ -638,4 +638,5 @@ e615575ded499ea1d992f3b38e3baa434509cdcd vp90-2-15-segkey.webm e3ab35d4316c5e81325c50f5236ceca4bc0d35df vp90-2-15-segkey.webm.md5 9b7ca2cac09d34c4a5d296c1900f93b1e2f69d0d vp90-2-15-segkey_adpq.webm 8f46ba5f785d0c2170591a153e0d0d146a7c8090 vp90-2-15-segkey_adpq.webm.md5 - +d78e2fceba5ac942246503ec8366f879c4775ca5 vp90-2-15-fuzz-flicker.webm +bbd7dd15f43a703ff0a332fee4959e7b23bf77dc vp90-2-15-fuzz-flicker.webm.md5 diff --git a/test/test.mk b/test/test.mk index 56e467afc..c59ae1172 100644 --- a/test/test.mk +++ b/test/test.mk @@ -754,6 +754,8 @@ LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-15-segkey.webm LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-15-segkey.webm.md5 LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-15-segkey_adpq.webm LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-15-segkey_adpq.webm.md5 +LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-15-fuzz-flicker.webm +LIBVPX_TEST_DATA-$(CONFIG_VP9_DECODER) += vp90-2-15-fuzz-flicker.webm.md5 ifeq ($(CONFIG_DECODE_PERF_TESTS),yes) # BBB VP9 streams diff --git a/test/test_vectors.cc b/test/test_vectors.cc index fd8c4c3eb..3873712cf 100644 --- a/test/test_vectors.cc +++ b/test/test_vectors.cc @@ -178,7 +178,8 @@ const char *const kVP9TestVectors[] = { "vp90-2-14-resize-fp-tiles-4-2.webm", "vp90-2-14-resize-fp-tiles-4-8.webm", "vp90-2-14-resize-fp-tiles-8-16.webm", "vp90-2-14-resize-fp-tiles-8-1.webm", "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-15-segkey.webm", "vp90-2-15-segkey_adpq.webm", + "vp90-2-15-fuzz-flicker.webm" }; const int kNumVP9TestVectors = NELEMENTS(kVP9TestVectors); #endif // CONFIG_VP9_DECODER diff --git a/vp9/vp9_dx_iface.c b/vp9/vp9_dx_iface.c index 07389713a..3b5d4bf71 100644 --- a/vp9/vp9_dx_iface.c +++ b/vp9/vp9_dx_iface.c @@ -321,31 +321,33 @@ static void parse_superframe_index(const uint8_t *data, size_t data_sz, const uint32_t mag = ((marker >> 3) & 0x3) + 1; const size_t index_sz = 2 + mag * frames; - uint8_t marker2 = read_marker(decrypt_cb, decrypt_state, - data + data_sz - index_sz); - - if (data_sz >= index_sz && marker2 == marker) { - // found a valid superframe index - uint32_t i, j; - const uint8_t *x = &data[data_sz - index_sz + 1]; - - // frames has a maximum of 8 and mag has a maximum of 4. - uint8_t clear_buffer[32]; - assert(sizeof(clear_buffer) >= frames * mag); - if (decrypt_cb) { - decrypt_cb(decrypt_state, x, clear_buffer, frames * mag); - x = clear_buffer; - } + if (data_sz >= index_sz) { + uint8_t marker2 = read_marker(decrypt_cb, decrypt_state, + data + data_sz - index_sz); + + if (marker == marker2) { + // Found a valid superframe index. + uint32_t i, j; + const uint8_t *x = &data[data_sz - index_sz + 1]; + + // Frames has a maximum of 8 and mag has a maximum of 4. + uint8_t clear_buffer[32]; + assert(sizeof(clear_buffer) >= frames * mag); + if (decrypt_cb) { + decrypt_cb(decrypt_state, x, clear_buffer, frames * mag); + x = clear_buffer; + } - for (i = 0; i < frames; i++) { - uint32_t this_sz = 0; + for (i = 0; i < frames; ++i) { + uint32_t this_sz = 0; - for (j = 0; j < mag; j++) - this_sz |= (*x++) << (j * 8); - sizes[i] = this_sz; - } + for (j = 0; j < mag; ++j) + this_sz |= (*x++) << (j * 8); + sizes[i] = this_sz; + } - *count = frames; + *count = frames; + } } } } diff --git a/vpx_scale/generic/yv12extend.c b/vpx_scale/generic/yv12extend.c index 7b43eece2..614602a03 100644 --- a/vpx_scale/generic/yv12extend.c +++ b/vpx_scale/generic/yv12extend.c @@ -84,11 +84,12 @@ void vp8_yv12_extend_frame_borders_c(YV12_BUFFER_CONFIG *ybf) { static void extend_frame(YV12_BUFFER_CONFIG *const ybf, int ext_size) { const int c_w = ybf->uv_crop_width; const int c_h = ybf->uv_crop_height; - const int c_ext_size = ext_size >> 1; - const int c_et = c_ext_size; - const int c_el = c_ext_size; - const int c_eb = c_ext_size + ybf->uv_height - ybf->uv_crop_height; - const int c_er = c_ext_size + ybf->uv_width - ybf->uv_crop_width; + const int ss_x = ybf->uv_width < ybf->y_width; + const int ss_y = ybf->uv_height < ybf->y_height; + const int c_et = ext_size >> ss_y; + const int c_el = ext_size >> ss_x; + const int c_eb = c_et + ybf->uv_height - ybf->uv_crop_height; + const int c_er = c_el + ybf->uv_width - ybf->uv_crop_width; assert(ybf->y_height - ybf->y_crop_height < 16); assert(ybf->y_width - ybf->y_crop_width < 16); diff --git a/vpx_scale/mips/dspr2/yv12extend_dspr2.c b/vpx_scale/mips/dspr2/yv12extend_dspr2.c index 26558b0c5..0dfc47cc8 100644 --- a/vpx_scale/mips/dspr2/yv12extend_dspr2.c +++ b/vpx_scale/mips/dspr2/yv12extend_dspr2.c @@ -104,16 +104,15 @@ static void extend_plane(uint8_t *const src, int src_stride, } } -static void extend_frame(YV12_BUFFER_CONFIG *const ybf, - int subsampling_x, int subsampling_y, - int ext_size) { +static void extend_frame(YV12_BUFFER_CONFIG *const ybf, int ext_size) { const int c_w = ybf->uv_crop_width; const int c_h = ybf->uv_crop_height; - const int c_ext_size = ext_size >> 1; - const int c_et = c_ext_size; - const int c_el = c_ext_size; - const int c_eb = c_ext_size + ybf->uv_height - ybf->uv_crop_height; - const int c_er = c_ext_size + ybf->uv_width - ybf->uv_crop_width; + const int ss_x = ybf->uv_width < ybf->y_width; + const int ss_y = ybf->uv_height < ybf->y_height; + const int c_et = ext_size >> ss_y; + const int c_el = ext_size >> ss_x; + const int c_eb = c_et + ybf->uv_height - ybf->uv_crop_height; + const int c_er = c_el + ybf->uv_width - ybf->uv_crop_width; assert(ybf->y_height - ybf->y_crop_height < 16); assert(ybf->y_width - ybf->y_crop_width < 16); @@ -133,16 +132,13 @@ static void extend_frame(YV12_BUFFER_CONFIG *const ybf, c_w, c_h, c_et, c_el, c_eb, c_er); } -void vp9_extend_frame_borders_dspr2(YV12_BUFFER_CONFIG *ybf, - int subsampling_x, int subsampling_y) { - extend_frame(ybf, subsampling_x, subsampling_y, ybf->border); +void vp9_extend_frame_borders_dspr2(YV12_BUFFER_CONFIG *ybf) { + extend_frame(ybf, ybf->border); } -void vp9_extend_frame_inner_borders_dspr2(YV12_BUFFER_CONFIG *ybf, - int subsampling_x, - int subsampling_y) { +void vp9_extend_frame_inner_borders_dspr2(YV12_BUFFER_CONFIG *ybf) { const int inner_bw = (ybf->border > VP9INNERBORDERINPIXELS) ? VP9INNERBORDERINPIXELS : ybf->border; - extend_frame(ybf, subsampling_x, subsampling_y, inner_bw); + extend_frame(ybf, inner_bw); } #endif |