From 80cb377990a9b6cf8ba65019e71f09a9bf477a7d Mon Sep 17 00:00:00 2001 From: Lucas CHOLLET Date: Fri, 4 Aug 2023 15:48:36 -0400 Subject: [PATCH] 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. --- .../LibGfx/ImageFormats/JPEGXLLoader.cpp | 27 +++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/Userland/Libraries/LibGfx/ImageFormats/JPEGXLLoader.cpp b/Userland/Libraries/LibGfx/ImageFormats/JPEGXLLoader.cpp index f03f5f1683..e5d9456a33 100644 --- a/Userland/Libraries/LibGfx/ImageFormats/JPEGXLLoader.cpp +++ b/Userland/Libraries/LibGfx/ImageFormats/JPEGXLLoader.cpp @@ -1208,17 +1208,7 @@ public: TODO(); // Read symbol from entropy coded stream using D[clusters[ctx]] - u32 token {}; - TRY(m_distributions.visit( - [&](Vector const& distributions) -> ErrorOr { - token = TRY(distributions[m_clusters[context]].read_symbol(stream)); - return {}; - }, - [&](Vector const& distributions) -> ErrorOr { - 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 read_symbol(LittleEndianInputBitStream& stream, u32 context) + { + u32 token {}; + TRY(m_distributions.visit( + [&](Vector const& distributions) -> ErrorOr { + token = TRY(distributions[m_clusters[context]].read_symbol(stream)); + return {}; + }, + [&](Vector const& distributions) -> ErrorOr { + token = TRY(distributions[m_clusters[context]].read_symbol(stream, m_state)); + return {}; + })); + return token; + } + ErrorOr read_pre_clustered_distributions(LittleEndianInputBitStream& stream, u32 num_distrib) { // C.2.2 Distribution clustering