1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 02:37:42 +00:00
serenity/Userland/Libraries/LibGfx/ImageFormats
Nico Weber ffae065593 WebP/Lossy: Clamp right after summing IDCT output, instead of later
https://datatracker.ietf.org/doc/html/rfc6386#section-14.5 says:

"""
The summing procedure is fairly straightforward, having only a couple
of details.  The prediction and residue buffers are both arrays of
16-bit signed integers.  Each individual (Y, U, and V pixel) result
is calculated first as a 32-bit sum of the prediction and residue,
and is then saturated to 8-bit unsigned range (using, say, the
clamp255 function defined above) before being stored as an 8-bit
unsigned pixel value.
"""

It's IMHO not 100% clear if the clamping is supposed to happen
immediately (so that it affects prediction inputs for the next
macroblock) or later.

But vp8_dixie_idct_add() on page 173 in
https://datatracker.ietf.org/doc/html/rfc6386#section-20.8 does:

    recon[0] = CLAMP_255(predict[0] + ((a1 + d1 + 4) >> 3));

So it does look like it should happen immediately.

(I'm a bit confused why the spec then says "The prediction and residue
buffers are both arrays of 16-bit signed integers", since the
prediction buffer can just be an u8 buffer now, without changing
behavior.
2023-05-31 22:38:36 +02:00
..
BMPLoader.cpp LibGfx+Fuzz: Convert ImageDecoder::initialize to ErrorOr 2023-05-12 09:40:24 +01:00
BMPLoader.h LibGfx+Fuzz: Convert ImageDecoder::initialize to ErrorOr 2023-05-12 09:40:24 +01:00
BMPWriter.cpp LibGfx: Move all image loaders and writers to a subdirectory 2023-03-21 22:39:25 +01:00
BMPWriter.h LibGfx: Move all image loaders and writers to a subdirectory 2023-03-21 22:39:25 +01:00
BooleanDecoder.cpp LibGfx+LibVideo: Make BooleanDecoder usable for both VP8 and VP9 2023-05-27 05:47:42 +02:00
BooleanDecoder.h LibGfx+LibVideo: Make BooleanDecoder usable for both VP8 and VP9 2023-05-27 05:47:42 +02:00
DDSLoader.cpp LibGfx+Fuzz: Convert ImageDecoder::initialize to ErrorOr 2023-05-12 09:40:24 +01:00
DDSLoader.h LibGfx+Fuzz: Convert ImageDecoder::initialize to ErrorOr 2023-05-12 09:40:24 +01:00
GIFLoader.cpp LibGfx+Fuzz: Convert ImageDecoder::initialize to ErrorOr 2023-05-12 09:40:24 +01:00
GIFLoader.h LibGfx+Fuzz: Convert ImageDecoder::initialize to ErrorOr 2023-05-12 09:40:24 +01:00
ICOLoader.cpp LibGfx+Fuzz: Convert ImageDecoder::initialize to ErrorOr 2023-05-12 09:40:24 +01:00
ICOLoader.h LibGfx+Fuzz: Convert ImageDecoder::initialize to ErrorOr 2023-05-12 09:40:24 +01:00
ImageDecoder.cpp LibGfx+Fuzz: Convert ImageDecoder::initialize to ErrorOr 2023-05-12 09:40:24 +01:00
ImageDecoder.h LibGfx+Fuzz: Convert ImageDecoder::initialize to ErrorOr 2023-05-12 09:40:24 +01:00
JPEGLoader.cpp LibGfx+Fuzz: Convert ImageDecoder::initialize to ErrorOr 2023-05-12 09:40:24 +01:00
JPEGLoader.h LibGfx+Fuzz: Convert ImageDecoder::initialize to ErrorOr 2023-05-12 09:40:24 +01:00
PBMLoader.cpp LibGfx/PortableFormat: Propagate errors from read_image_data() 2023-03-24 10:56:58 +01:00
PBMLoader.h LibGfx/PortableFormat: Propagate errors from read_image_data() 2023-03-24 10:56:58 +01:00
PGMLoader.cpp LibGfx/PortableFormat: Use static_cast instead of C-style casts 2023-03-24 10:56:58 +01:00
PGMLoader.h LibGfx/PortableFormat: Propagate errors from read_image_data() 2023-03-24 10:56:58 +01:00
PNGLoader.cpp LibGfx+Fuzz: Convert ImageDecoder::initialize to ErrorOr 2023-05-12 09:40:24 +01:00
PNGLoader.h LibGfx+Fuzz: Convert ImageDecoder::initialize to ErrorOr 2023-05-12 09:40:24 +01:00
PNGShared.h LibGfx: Move all image loaders and writers to a subdirectory 2023-03-21 22:39:25 +01:00
PNGWriter.cpp LibGfx: Move all image loaders and writers to a subdirectory 2023-03-21 22:39:25 +01:00
PNGWriter.h LibGfx: Move all image loaders and writers to a subdirectory 2023-03-21 22:39:25 +01:00
PortableFormatWriter.cpp LibGfx/PortableFormat: Use FixedArray::unchecked_at 2023-05-09 11:18:46 +02:00
PortableFormatWriter.h LibGfx/PortableFormat+image: Make encode take a Stream 2023-05-09 11:18:46 +02:00
PortableImageLoaderCommon.h Everywhere: Remove unused DeprecatedString includes 2023-04-09 22:00:54 +02:00
PortableImageMapLoader.h LibGfx+Fuzz: Convert ImageDecoder::initialize to ErrorOr 2023-05-12 09:40:24 +01:00
PPMLoader.cpp LibGfx/PortableFormat: Use static_cast instead of C-style casts 2023-03-24 10:56:58 +01:00
PPMLoader.h LibGfx/PortableFormat: Propagate errors from read_image_data() 2023-03-24 10:56:58 +01:00
QOILoader.cpp LibGfx+Fuzz: Convert ImageDecoder::initialize to ErrorOr 2023-05-12 09:40:24 +01:00
QOILoader.h LibGfx+Fuzz: Convert ImageDecoder::initialize to ErrorOr 2023-05-12 09:40:24 +01:00
QOIWriter.cpp Everywhere: Remove unused DeprecatedString includes 2023-04-09 22:00:54 +02:00
QOIWriter.h LibGfx: Move all image loaders and writers to a subdirectory 2023-03-21 22:39:25 +01:00
TGALoader.cpp LibGfx+Fuzz: Convert ImageDecoder::initialize to ErrorOr 2023-05-12 09:40:24 +01:00
TGALoader.h LibGfx+Fuzz: Convert ImageDecoder::initialize to ErrorOr 2023-05-12 09:40:24 +01:00
WebPLoader.cpp WebP: Let ALPH replace alpha channel instead of augmenting it 2023-05-22 19:24:49 +02:00
WebPLoader.h LibGfx+Fuzz: Convert ImageDecoder::initialize to ErrorOr 2023-05-12 09:40:24 +01:00
WebPLoaderLossless.cpp LibGfx/WebP: Move lossless decoder to its own file 2023-05-08 12:52:05 +02:00
WebPLoaderLossless.h LibGfx/WebP: Minor cosmetical changes in WebPLoaderLossless.h 2023-05-09 06:35:56 +02:00
WebPLoaderLossy.cpp WebP/Lossy: Clamp right after summing IDCT output, instead of later 2023-05-31 22:38:36 +02:00
WebPLoaderLossy.h WebP/Lossy: Implement macroblock coefficient decoding 2023-05-29 10:41:53 -06:00
WebPLoaderLossyTables.h WebP/Lossy: Add function for inverse 4x4 DCT from spec 2023-05-29 19:44:45 +02:00