diff options
| -rw-r--r-- | src/format/image/png.c | 14 |
1 files changed, 13 insertions, 1 deletions
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); |
