From 6b2c60404d3192d05f3e02c4a1590c3156090bbe Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Thu, 16 Nov 2023 19:26:26 -0500 Subject: [PATCH] LibGfx: Use PNG::paeth_predictor() in png decoding path Increases code reuse between encoder and decoder a tiny bit. No behavior change. (We should use the vectorized version in the future! But first, we should learn to do the prediction in-place.) --- .../Libraries/LibGfx/ImageFormats/PNGLoader.cpp | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/Userland/Libraries/LibGfx/ImageFormats/PNGLoader.cpp b/Userland/Libraries/LibGfx/ImageFormats/PNGLoader.cpp index 77f5265570..85785526d1 100644 --- a/Userland/Libraries/LibGfx/ImageFormats/PNGLoader.cpp +++ b/Userland/Libraries/LibGfx/ImageFormats/PNGLoader.cpp @@ -325,19 +325,7 @@ static void unfilter_scanline(PNG::FilterType filter, Bytes scanline_data, Reado u8 left = (i < bytes_per_complete_pixel) ? 0 : scanline_data[i - bytes_per_complete_pixel]; u8 above = previous_scanlines_data[i]; u8 upper_left = (i < bytes_per_complete_pixel) ? 0 : previous_scanlines_data[i - bytes_per_complete_pixel]; - i32 predictor = left + above - upper_left; - u32 predictor_left = abs(predictor - left); - u32 predictor_above = abs(predictor - above); - u32 predictor_upper_left = abs(predictor - upper_left); - u8 nearest; - if (predictor_left <= predictor_above && predictor_left <= predictor_upper_left) { - nearest = left; - } else if (predictor_above <= predictor_upper_left) { - nearest = above; - } else { - nearest = upper_left; - } - scanline_data[i] += nearest; + scanline_data[i] += PNG::paeth_predictor(left, above, upper_left); } break; default: