1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 21:27:35 +00:00

LibGfx/JPEGXL: Factorize the code to read symbols from distributions

This will soon be used by the LZ77 decoder, so let's avoid some
duplication.
This commit is contained in:
Lucas CHOLLET 2023-08-04 15:48:36 -04:00 committed by Jelle Raaijmakers
parent 3fdc000b90
commit 80cb377990

View file

@ -1208,17 +1208,7 @@ public:
TODO();
// Read symbol from entropy coded stream using D[clusters[ctx]]
u32 token {};
TRY(m_distributions.visit(
[&](Vector<BrotliCanonicalCode> const& distributions) -> ErrorOr<void> {
token = TRY(distributions[m_clusters[context]].read_symbol(stream));
return {};
},
[&](Vector<ANSHistogram> const& distributions) -> ErrorOr<void> {
token = TRY(distributions[m_clusters[context]].read_symbol(stream, m_state));
return {};
}));
auto const token = TRY(read_symbol(stream, context));
auto r = TRY(read_uint(stream, m_configs[m_clusters[context]], token));
return r;
}
@ -1276,6 +1266,21 @@ private:
return config;
}
ErrorOr<u32> read_symbol(LittleEndianInputBitStream& stream, u32 context)
{
u32 token {};
TRY(m_distributions.visit(
[&](Vector<BrotliCanonicalCode> const& distributions) -> ErrorOr<void> {
token = TRY(distributions[m_clusters[context]].read_symbol(stream));
return {};
},
[&](Vector<ANSHistogram> const& distributions) -> ErrorOr<void> {
token = TRY(distributions[m_clusters[context]].read_symbol(stream, m_state));
return {};
}));
return token;
}
ErrorOr<void> read_pre_clustered_distributions(LittleEndianInputBitStream& stream, u32 num_distrib)
{
// C.2.2 Distribution clustering