From c97096287d7673c10e455560ad8d0f137973ae95 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 25 Feb 2015 09:42:19 +0100 Subject: [PATCH] Move inflate_buf to rpng_process_t --- .../formats/png/rpng_decode_common.h | 30 +++++++++---------- .../formats/png/rpng_decode_fbio.c | 7 +++-- .../formats/png/rpng_decode_fnbio.c | 7 +++-- libretro-common/include/formats/rpng.h | 1 + 4 files changed, 24 insertions(+), 21 deletions(-) diff --git a/libretro-common/formats/png/rpng_decode_common.h b/libretro-common/formats/png/rpng_decode_common.h index 0ddecfb43a..1c1a81d3f1 100644 --- a/libretro-common/formats/png/rpng_decode_common.h +++ b/libretro-common/formats/png/rpng_decode_common.h @@ -90,7 +90,7 @@ static void deinterlace_pass(uint32_t *data, const struct png_ihdr *ihdr, } static bool png_reverse_filter(uint32_t *data, const struct png_ihdr *ihdr, - const uint8_t *inflate_buf, struct rpng_process_t *pngp, + struct rpng_process_t *pngp, const uint32_t *palette) { unsigned i, h; @@ -113,47 +113,47 @@ static bool png_reverse_filter(uint32_t *data, const struct png_ihdr *ihdr, GOTO_END_ERROR(); for (h = 0; h < ihdr->height; - h++, inflate_buf += pitch, data += ihdr->width) + h++, pngp->inflate_buf += pitch, data += ihdr->width) { - unsigned filter = *inflate_buf++; + unsigned filter = *pngp->inflate_buf++; switch (filter) { case 0: /* None */ - memcpy(decoded_scanline, inflate_buf, pitch); + memcpy(decoded_scanline, pngp->inflate_buf, pitch); break; case 1: /* Sub */ for (i = 0; i < bpp; i++) - decoded_scanline[i] = inflate_buf[i]; + decoded_scanline[i] = pngp->inflate_buf[i]; for (i = bpp; i < pitch; i++) - decoded_scanline[i] = decoded_scanline[i - bpp] + inflate_buf[i]; + decoded_scanline[i] = decoded_scanline[i - bpp] + pngp->inflate_buf[i]; break; case 2: /* Up */ for (i = 0; i < pitch; i++) - decoded_scanline[i] = prev_scanline[i] + inflate_buf[i]; + decoded_scanline[i] = prev_scanline[i] + pngp->inflate_buf[i]; break; case 3: /* Average */ for (i = 0; i < bpp; i++) { uint8_t avg = prev_scanline[i] >> 1; - decoded_scanline[i] = avg + inflate_buf[i]; + decoded_scanline[i] = avg + pngp->inflate_buf[i]; } for (i = bpp; i < pitch; i++) { uint8_t avg = (decoded_scanline[i - bpp] + prev_scanline[i]) >> 1; - decoded_scanline[i] = avg + inflate_buf[i]; + decoded_scanline[i] = avg + pngp->inflate_buf[i]; } break; case 4: /* Paeth */ for (i = 0; i < bpp; i++) - decoded_scanline[i] = paeth(0, prev_scanline[i], 0) + inflate_buf[i]; + decoded_scanline[i] = paeth(0, prev_scanline[i], 0) + pngp->inflate_buf[i]; for (i = bpp; i < pitch; i++) decoded_scanline[i] = paeth(decoded_scanline[i - bpp], - prev_scanline[i], prev_scanline[i - bpp]) + inflate_buf[i]; + prev_scanline[i], prev_scanline[i - bpp]) + pngp->inflate_buf[i]; break; default: @@ -184,7 +184,7 @@ end: static bool png_reverse_filter_adam7(uint32_t *data, const struct png_ihdr *ihdr, - const uint8_t *inflate_buf, struct rpng_process_t *pngp, + struct rpng_process_t *pngp, const uint32_t *palette) { unsigned pass; @@ -234,14 +234,14 @@ static bool png_reverse_filter_adam7(uint32_t *data, } if (!png_reverse_filter(tmp_data, - &tmp_ihdr, inflate_buf, pngp, palette)) + &tmp_ihdr, pngp, palette)) { free(tmp_data); return false; } - inflate_buf += pass_size; - pngp->total_out -= pass_size; + pngp->inflate_buf += pass_size; + pngp->total_out -= pass_size; deinterlace_pass(data, ihdr, tmp_data, pass_width, pass_height, &passes[pass]); diff --git a/libretro-common/formats/png/rpng_decode_fbio.c b/libretro-common/formats/png/rpng_decode_fbio.c index 5d3bd3795d..06d98296a7 100644 --- a/libretro-common/formats/png/rpng_decode_fbio.c +++ b/libretro-common/formats/png/rpng_decode_fbio.c @@ -338,16 +338,17 @@ bool rpng_load_image_argb(const char *path, uint32_t **data, if (!*data) GOTO_END_ERROR(); - process.total_out = stream.total_out; + process.total_out = stream.total_out; + process.inflate_buf = rpng.inflate_buf; if (rpng.ihdr.interlace == 1) { if (!png_reverse_filter_adam7(*data, - &rpng.ihdr, rpng.inflate_buf, &process, rpng.palette)) + &rpng.ihdr, &process, rpng.palette)) GOTO_END_ERROR(); } else if (!png_reverse_filter(*data, - &rpng.ihdr, rpng.inflate_buf, &process, rpng.palette)) + &rpng.ihdr, &process, rpng.palette)) GOTO_END_ERROR(); end: diff --git a/libretro-common/formats/png/rpng_decode_fnbio.c b/libretro-common/formats/png/rpng_decode_fnbio.c index 438a4beba3..bf9e94bb52 100644 --- a/libretro-common/formats/png/rpng_decode_fnbio.c +++ b/libretro-common/formats/png/rpng_decode_fnbio.c @@ -297,16 +297,17 @@ bool rpng_nbio_load_image_argb_process(struct rpng_t *rpng, if (!*data) return false; - process.total_out = stream.total_out; + process.total_out = stream.total_out; + process.inflate_buf = rpng->inflate_buf; if (rpng->ihdr.interlace == 1) { if (!png_reverse_filter_adam7(*data, - &rpng->ihdr, rpng->inflate_buf, &process, rpng->palette)) + &rpng->ihdr, &process, rpng->palette)) return false; } else if (!png_reverse_filter(*data, - &rpng->ihdr, rpng->inflate_buf, &process, rpng->palette)) + &rpng->ihdr, &process, rpng->palette)) return false; return true; diff --git a/libretro-common/include/formats/rpng.h b/libretro-common/include/formats/rpng.h index 3729e63336..2b1411517f 100644 --- a/libretro-common/include/formats/rpng.h +++ b/libretro-common/include/formats/rpng.h @@ -62,6 +62,7 @@ struct png_ihdr struct rpng_process_t { + const uint8_t *inflate_buf; size_t total_out; };