/src/serenity/Userland/Libraries/LibGfx/ImageFormats/WebPSharedLossless.cpp
Line | Count | Source |
1 | | /* |
2 | | * Copyright (c) 2024, Nico Weber <thakis@chromium.org> |
3 | | * |
4 | | * SPDX-License-Identifier: BSD-2-Clause |
5 | | */ |
6 | | |
7 | | #include <LibGfx/ImageFormats/WebPSharedLossless.h> |
8 | | |
9 | | namespace Gfx { |
10 | | |
11 | | ErrorOr<CanonicalCode> CanonicalCode::from_bytes(ReadonlyBytes bytes) |
12 | 155k | { |
13 | 155k | auto non_zero_symbol_count = 0; |
14 | 155k | auto last_non_zero_symbol = -1; |
15 | 37.1M | for (size_t i = 0; i < bytes.size(); i++) { |
16 | 36.9M | if (bytes[i] != 0) { |
17 | 265k | non_zero_symbol_count++; |
18 | 265k | last_non_zero_symbol = i; |
19 | 265k | } |
20 | 36.9M | } |
21 | | |
22 | 155k | if (non_zero_symbol_count == 1) |
23 | 150k | return CanonicalCode(last_non_zero_symbol); |
24 | | |
25 | 5.60k | return CanonicalCode(TRY(Compress::CanonicalCode::from_bytes(bytes))); |
26 | 5.60k | } |
27 | | |
28 | | ErrorOr<u32> CanonicalCode::read_symbol(LittleEndianInputBitStream& bit_stream) const |
29 | 3.99G | { |
30 | 3.99G | return TRY(m_code.visit( |
31 | 3.99G | [](u32 single_code) -> ErrorOr<u32> { return single_code; }, |
32 | 3.99G | [&bit_stream](Compress::CanonicalCode const& code) { return code.read_symbol(bit_stream); })); |
33 | 3.99G | } |
34 | | |
35 | | } |