From 7c56468903540fefc8029f67395665436f5d26b3 Mon Sep 17 00:00:00 2001 From: TazyFoundSoup Date: Sat, 31 Jan 2026 13:04:34 +1100 Subject: fix(png): Implement Paeth predictor in ff_png_data_handler for scanline filtering --- src/format/image/png.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/format/image/png.c b/src/format/image/png.c index 1d4109d..162d5ee 100644 --- a/src/format/image/png.c +++ b/src/format/image/png.c @@ -218,7 +218,19 @@ ff_result ff_png_data_handler(uint8_t *buf, size_t len, ff_png_ctx *ctx) reconstructed_buf[x] = raw[x] + ((left + above) / 2); break; case 4: // Paeth Predictor - // TODO: Get a Paeth predictor function + { + int p = left + above - diagonal; + int pa = abs(p - left); + int pb = abs(p - above); + int pc = abs(p - diagonal); + + if (pa <= pb && pa <= pc) + reconstructed_buf[x] = raw[x] + left; + else if (pb <= pc) + reconstructed_buf[x] = raw[x] + above; + else + reconstructed_buf[x] = raw[x] + diagonal; + } break; default: // Unknown ff_dprintf("png: unsupported scanline filter method '%d'", filter_type); -- cgit v1.2.3