From 248241b6e18ecf0d9cb2706419952ae933ad78d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Thu, 4 Jun 2026 14:42:08 +0200 Subject: [PATCH] Cap AVIF lossy quality at 99 Before this commit, lossy compression with 100 quality meant lossless compression, leading to a big gap between 99 and 100. This commit caps the lossy quality at 99, ensuring that lossy compression is always lossy. Fixes #14981 --- internal/warpc/genavif/avif.c | 4 ++++ internal/warpc/wasm/avif.wasm | Bin 7271421 -> 7271445 bytes 2 files changed, 4 insertions(+) diff --git a/internal/warpc/genavif/avif.c b/internal/warpc/genavif/avif.c index f572f7cf5..3932f7fcb 100644 --- a/internal/warpc/genavif/avif.c +++ b/internal/warpc/genavif/avif.c @@ -685,6 +685,8 @@ void handle_commands(FILE *stream) if (quality < 1) quality = 1; if (quality > 100) quality = 100; int avif_quality = (int)((quality - 1.0) / 99.0 * 100.0); + // Keep lossy strictly below lossless so quality 100 stays lossy. See issue 14981. + if (avif_quality >= AVIF_QUALITY_LOSSLESS) avif_quality = AVIF_QUALITY_LOSSLESS - 1; encoder->quality = avif_quality; encoder->qualityAlpha = avif_quality; } @@ -809,6 +811,8 @@ void handle_commands(FILE *stream) if (quality < 1) quality = 1; if (quality > 100) quality = 100; int avif_quality = (int)((quality - 1.0) / 99.0 * 100.0); + // Keep lossy strictly below lossless so quality 100 stays lossy. See issue 14981. + if (avif_quality >= AVIF_QUALITY_LOSSLESS) avif_quality = AVIF_QUALITY_LOSSLESS - 1; encoder->quality = avif_quality; } encoder->qualityAlpha = AVIF_QUALITY_LOSSLESS; diff --git a/internal/warpc/wasm/avif.wasm b/internal/warpc/wasm/avif.wasm index 4fb7b29956d77de752627a2d31845da7a3f5e36d..9968def00da555070ab9c282743b1e8ba3c84e67 100755 GIT binary patch delta 517 zcmYk(IWq%s0ETg!ziXXw#1&*EZi|TfjCDjDiMY?jx=B!|RSIo}F)8>8J7Xq=A|JtL zP$~EdDa?4N6u+5wp7#CzOo+#?gm}48<>&XLC91q#g=3Crz!rZ}V{V~+q&#?ZO?FC( z#17iy*LqU?<%sbw-BMaHcK`!!;4=V~#h$0ljh7y#b4CSbR z9hIm;H5^b-11DUlMIGwVfJQW-87)xJiZ-;vjShIwi7s@b2fgS+KL#*}Aq-;#UW`J+ z7{)PyN%$}YKc+E*S4%#6dB4^pzJAImQ~775YZ1Hgaag8361gSFOc-Wfpb5@ zv;G1H5}t?m1@Gs-o50=Qo50m^DE;iuZPG