ladybird/Tests
Nico Weber a2d8de180c WebP/Lossy: Add support for images with more than one partition
Each secondary partition has an independent BooleanDecoder.
Their bitstreams interleave per macroblock row, that is the first
macroblock row is read from the first decoder, the second from the
second, ..., until it wraps around again.

All partitions share a single prediction state though: The second
macroblock row (which reads coefficients off the second decoder) is
predicted using the result of decoding the frist macroblock row (which
reads coefficients off the first decoder).

So if I understand things right, in theory the coefficient reading could
be parallelized, but prediction can't be. (IDCT can also be
parallelized, but that's true with just a single partition too.)

I created the test image by running

    examples/cwebp -low_memory -partitions 3 -o foo.webp \
        ~/src/serenity/Tests/LibGfx/test-inputs/4.webp

using a cwebp hacked up as described in #19149. Since creating
multi-partition lossy webps requires hacking up `cwebp`, they're likely
very rare in practice. (But maybe other programs using the libwebp API
create them.)

Fixes #19149.

With this, webp lossy support is complete (*) :^)

And with that, webp support is complete: Lossless, lossy, lossy with
alpha, animated lossless, animated lossy, animated lossy with alpha all
work.

(*: Loop filtering isn't implemented yet, which has a minor visual
effect on the output. But it's only visible when carefully comparing
a webp decoded without loop filtering to the same decoded with it.
But it's technically a part of the spec that's still missing.

The upsampling of UV in the YUV->RGB code is also low-quality. This
produces somewhat visible banding in practice in some images (e.g.
in the fire breather's face in 5.webp), so we should probably improve
that at some point. Our JPG decoder has the same issue.)
2023-05-31 14:07:15 +02:00
..
AK AK: Correctly calculate size of the last AllocatingMemoryStream chunk 2023-05-29 13:30:46 +02:00
Kernel Tests/Kernel: Do not build TestEFault on AArch64 2023-05-28 05:05:09 -06:00
LibAudio Tests: Correct FLAC spec test paths 2023-03-19 14:15:35 +00:00
LibC Tests: Prefer TRY_OR_FAIL() and MUST() over EXPECT(!.is_error()) 2023-05-14 15:39:38 -06:00
LibCompress LibCompress: Handle arbitrarily long FF-chains in the LZMA encoder 2023-05-19 23:40:33 +02:00
LibCore LibCore: Drop TestLibCoreIODevice 2023-05-27 07:16:01 +02:00
LibCpp AK: Rename Stream::read_entire_buffer to Stream::read_until_filled 2023-03-13 15:16:20 +00:00
LibCrypto LibCrypto: Add PBKDF2 2023-04-09 17:05:18 -06:00
LibEDID Tests: Prefer TRY_OR_FAIL() and MUST() over EXPECT(!.is_error()) 2023-05-14 15:39:38 -06:00
LibELF Tests: Prefer TRY_OR_FAIL() and MUST() over EXPECT(!.is_error()) 2023-05-14 15:39:38 -06:00
LibGfx WebP/Lossy: Add support for images with more than one partition 2023-05-31 14:07:15 +02:00
LibGL LibGfx: Move all image loaders and writers to a subdirectory 2023-03-21 22:39:25 +01:00
LibIMAP LibIMAP: Propagate OOM errors from decode_quoted_printable() 2023-03-09 14:47:45 +00:00
LibJS Tests: Prefer TRY_OR_FAIL() and MUST() over EXPECT(!.is_error()) 2023-05-14 15:39:38 -06:00
LibLocale LibTimeZone+Userland: Change timezone functions to use UnixDateTime 2023-05-24 23:18:07 +02:00
LibMarkdown AK: Rename Stream::read_entire_buffer to Stream::read_until_filled 2023-03-13 15:16:20 +00:00
LibPDF Tests: Prefer TRY_OR_FAIL() and MUST() over EXPECT(!.is_error()) 2023-05-14 15:39:38 -06:00
LibRegex LibRegex: Avoid calling GenericLexer::consume() past EOF 2023-04-14 12:33:54 +02:00
LibSQL LibSQL: Free heap storage when deleting rows 2023-05-25 06:19:16 -07:00
LibTest LibTest: Add EXPECT_NO_CRASH 2021-12-19 14:22:06 -08:00
LibTextCodec LibTextCodec+Everywhere: Port Decoders to new Strings 2023-02-19 17:15:47 +01:00
LibThreading LibThreading: Improve resiliancy of timed threading tests 2023-05-24 00:25:35 +02:00
LibTimeZone LibTimeZone+Userland: Change timezone functions to use UnixDateTime 2023-05-24 23:18:07 +02:00
LibTLS LibTLS: Streamline certificate loading 2023-04-12 11:40:06 +03:30
LibTTF Tests: Correct serenity_test() invocation for LibTTF 2023-01-19 11:50:10 +00:00
LibUnicode LibUnicode: Detect ZWJ sequences when filtering by emoji presentation 2023-03-05 20:21:57 +01:00
LibVideo LibVideo/VP9: Revert framebuffer size reduction to allow OOB blocks 2023-05-02 07:00:46 -04:00
LibWasm LibJS: Port Value::to_object() to NonnullGCPtr 2023-04-14 09:59:29 +02:00
LibWeb LibWeb: Change calc node representation from float to double 2023-05-31 10:56:32 +02:00
LibXML Everywhere: Add sv suffix to strings relying on StringView(char const*) 2022-07-12 23:11:35 +02:00
Spreadsheet Everywhere: Rename to_{string => deprecated_string}() where applicable 2022-12-06 08:54:33 +01:00
UserspaceEmulator Everywhere: Remove unused includes of LibC/stdlib.h 2023-01-02 20:27:20 -05:00
Utilities Tests: Add tests for sed utility 2023-04-09 18:09:23 -06:00
CMakeLists.txt Tests: Add tests for sed utility 2023-04-09 18:09:23 -06:00