std/vp8: fix skip for all-zero DCT coefficients "wuffs test -mimic std/webp" now passes. This commit, part of a series, is inspired by pull request PR #168 by Damian Kaczmarek (with AI assistance), with some modifications. Updates PR #168
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c index 58b989a..885f3a0 100644 --- a/release/c/wuffs-unsupported-snapshot.c +++ b/release/c/wuffs-unsupported-snapshot.c
@@ -81822,7 +81822,7 @@ uint32_t a_n); WUFFS_BASE__GENERATED_C_CODE -static wuffs_base__empty_struct +static uint32_t wuffs_vp8__decoder__decode_coefficients( wuffs_vp8__decoder* self, wuffs_base__slice_u8 a_workbuf, @@ -82316,7 +82316,7 @@ // -------- func vp8.decoder.decode_coefficients WUFFS_BASE__GENERATED_C_CODE -static wuffs_base__empty_struct +static uint32_t wuffs_vp8__decoder__decode_coefficients( wuffs_vp8__decoder* self, wuffs_base__slice_u8 a_workbuf, @@ -82417,7 +82417,10 @@ } v_bc += 2u; } - return wuffs_base__make_empty_struct(); + if ((self->private_impl.f_mb_dc_nz == 0u) && (self->private_impl.f_mb_ac_nz == 0u)) { + return 1u; + } + return 0u; } // -------- func vp8.decoder.initialize_mb_coeffs @@ -83984,7 +83987,7 @@ self->private_impl.f_mb_dc_nz = 0u; self->private_impl.f_mb_ac_nz = 0u; } else { - wuffs_vp8__decoder__decode_coefficients(self, + v_skip = wuffs_vp8__decoder__decode_coefficients(self, a_workbuf, a_mbx, a_mby,
diff --git a/std/vp8/decode_coefficients.wuffs b/std/vp8/decode_coefficients.wuffs index a730d55..8ad9d99 100644 --- a/std/vp8/decode_coefficients.wuffs +++ b/std/vp8/decode_coefficients.wuffs
@@ -13,7 +13,7 @@ mbx: base.u32[..= 0x3FF], mby: base.u32[..= 0x3FF], seg: base.u32[..= 3], - luma_mode: base.u32[..= 4]) { + luma_mode: base.u32[..= 4]) base.u32[..= 1] { var bc : base.u32 var by : base.u32 var bx : base.u32 @@ -134,6 +134,11 @@ } bc += 2 } + + if (this.mb_dc_nz == 0) and (this.mb_ac_nz == 0) { + return 1 + } + return 0 } pri func decoder.initialize_mb_coeffs!() {
diff --git a/std/vp8/decode_macroblocks.wuffs b/std/vp8/decode_macroblocks.wuffs index 06cf996..79f686d 100644 --- a/std/vp8/decode_macroblocks.wuffs +++ b/std/vp8/decode_macroblocks.wuffs
@@ -119,7 +119,7 @@ this.mb_ac_nz = 0 } else { - this.decode_coefficients!( + skip = this.decode_coefficients!( workbuf: args.workbuf, mbx: args.mbx, mby: args.mby, seg: seg, luma_mode: luma_mode) }
diff --git a/test/3pdata/nia-checksums-of-blinksuite.txt b/test/3pdata/nia-checksums-of-blinksuite.txt index 9e6bc9f..628424a 100644 --- a/test/3pdata/nia-checksums-of-blinksuite.txt +++ b/test/3pdata/nia-checksums-of-blinksuite.txt
@@ -173,7 +173,7 @@ OK. 631f6a02 test/3pdata/blinksuite/test.webp OK. 19d3a207 test/3pdata/blinksuite/test3.webp BAD 1dfa35c6 test/3pdata/blinksuite/truncated2.webp -OK. a66e5687 test/3pdata/blinksuite/webp-color-no-profile-lossy.webp +OK. 603ddc49 test/3pdata/blinksuite/webp-color-no-profile-lossy.webp BAD ed67a9a5 test/3pdata/blinksuite/wrong-block-length.gif OK. 577c5c4c test/3pdata/blinksuite/ycbcr-420-fast-int-progressive.jpg OK. bf4cd8e2 test/3pdata/blinksuite/ycbcr-420-float-progressive.jpg
diff --git a/test/3pdata/nia-checksums-of-webpsuite.txt b/test/3pdata/nia-checksums-of-webpsuite.txt index 7f04d3e..67ce611 100644 --- a/test/3pdata/nia-checksums-of-webpsuite.txt +++ b/test/3pdata/nia-checksums-of-webpsuite.txt
@@ -1,6 +1,6 @@ # Generated by script/print-nia-checksums.sh OK. ca4c0038 test/3pdata/webpsuite/bad_palette_index.webp -OK. 695fb9c9 test/3pdata/webpsuite/bryce.webp +OK. 3557c3f5 test/3pdata/webpsuite/bryce.webp OK. a07d001c test/3pdata/webpsuite/bug3.webp OK. 6fbda804 test/3pdata/webpsuite/color_cache_bits_11.webp BAD d338aed8 test/3pdata/webpsuite/dual_transform.webp @@ -50,7 +50,7 @@ OK. 6706e719 test/3pdata/webpsuite/lossless_vec_2_8.webp BAD 79781cfb test/3pdata/webpsuite/lossless_vec_2_9.webp OK. 3a23e407 test/3pdata/webpsuite/lossy_extreme_probabilities.webp -OK. ac8caef7 test/3pdata/webpsuite/lossy_q0_f100.webp +OK. f6f31bd1 test/3pdata/webpsuite/lossy_q0_f100.webp OK. 6957defa test/3pdata/webpsuite/near_lossless_75.webp OK. 7c80a001 test/3pdata/webpsuite/one_color_no_palette.webp OK. 6706e719 test/3pdata/webpsuite/peak.bmp @@ -78,7 +78,7 @@ OK. 9458b100 test/3pdata/webpsuite/vp80-00-comprehensive-009.webp OK. 954647a5 test/3pdata/webpsuite/vp80-00-comprehensive-010.webp OK. ff7d9585 test/3pdata/webpsuite/vp80-00-comprehensive-011.webp -OK. 85cbf113 test/3pdata/webpsuite/vp80-00-comprehensive-012.webp +OK. 6732c101 test/3pdata/webpsuite/vp80-00-comprehensive-012.webp OK. df21b5c8 test/3pdata/webpsuite/vp80-00-comprehensive-013.webp OK. de3154f1 test/3pdata/webpsuite/vp80-00-comprehensive-014.webp OK. 6291f264 test/3pdata/webpsuite/vp80-00-comprehensive-015.webp @@ -102,7 +102,7 @@ OK. 65fb3f68 test/3pdata/webpsuite/vp80-03-segmentation-1414.webp OK. 65fb3f68 test/3pdata/webpsuite/vp80-03-segmentation-1415.webp OK. 3819b4d7 test/3pdata/webpsuite/vp80-03-segmentation-1425.webp -OK. 6883fbc5 test/3pdata/webpsuite/vp80-03-segmentation-1426.webp +OK. 981e1d2e test/3pdata/webpsuite/vp80-03-segmentation-1426.webp OK. 57780055 test/3pdata/webpsuite/vp80-03-segmentation-1427.webp OK. caf44365 test/3pdata/webpsuite/vp80-03-segmentation-1432.webp OK. 17d6af96 test/3pdata/webpsuite/vp80-03-segmentation-1435.webp
diff --git a/test/c/std/webp.c b/test/c/std/webp.c index 11ccf70..be4f25f 100644 --- a/test/c/std/webp.c +++ b/test/c/std/webp.c
@@ -532,7 +532,7 @@ test_mimic_webp_lossy_decode_image_19k_8bpp, test_mimic_webp_lossy_decode_image_40k_24bpp, test_mimic_webp_lossy_decode_image_77k_24bpp, - // test_mimic_webp_lossy_decode_image_552k_32bpp, + test_mimic_webp_lossy_decode_image_552k_32bpp, test_mimic_webp_lossy_decode_image_4002k_24bpp, #endif // WUFFS_MIMIC
diff --git a/test/nia-checksums-of-data.txt b/test/nia-checksums-of-data.txt index 27cba69..ab27329 100644 --- a/test/nia-checksums-of-data.txt +++ b/test/nia-checksums-of-data.txt
@@ -115,13 +115,13 @@ OK. 25e212b3 test/data/hibiscus.primitive.gif OK. 9624fa44 test/data/hibiscus.primitive.jpeg OK. 33a44f22 test/data/hibiscus.primitive.lossless.webp -OK. 9f1315c7 test/data/hibiscus.primitive.lossy.webp +OK. 09bbaab0 test/data/hibiscus.primitive.lossy.webp OK. 33a44f22 test/data/hibiscus.primitive.png OK. 60040742 test/data/hibiscus.regular.bmp OK. b727da8b test/data/hibiscus.regular.gif OK. 41e39405 test/data/hibiscus.regular.jpeg OK. 60040742 test/data/hibiscus.regular.lossless.webp -OK. 2b5fe795 test/data/hibiscus.regular.lossy.webp +OK. 6bbe1ed2 test/data/hibiscus.regular.lossy.webp OK. 60040742 test/data/hibiscus.regular.png OK. dcbb225a test/data/hippopotamus.bmp OK. ed4b78fc test/data/hippopotamus.interlaced.gif