diff --git a/libretro-common/formats/png/rpng_decode_common.h b/libretro-common/formats/png/rpng_decode_common.h index 1c1a81d3f1..858ebaa91d 100644 --- a/libretro-common/formats/png/rpng_decode_common.h +++ b/libretro-common/formats/png/rpng_decode_common.h @@ -90,8 +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, - struct rpng_process_t *pngp, - const uint32_t *palette) + struct rpng_process_t *pngp) { unsigned i, h; unsigned bpp; @@ -166,7 +165,7 @@ static bool png_reverse_filter(uint32_t *data, const struct png_ihdr *ihdr, copy_line_rgb(data, decoded_scanline, ihdr->width, ihdr->depth); else if (ihdr->color_type == 3) copy_line_plt(data, decoded_scanline, ihdr->width, - ihdr->depth, palette); + ihdr->depth, pngp->palette); else if (ihdr->color_type == 4) copy_line_gray_alpha(data, decoded_scanline, ihdr->width, ihdr->depth); @@ -184,8 +183,7 @@ end: static bool png_reverse_filter_adam7(uint32_t *data, const struct png_ihdr *ihdr, - struct rpng_process_t *pngp, - const uint32_t *palette) + struct rpng_process_t *pngp) { unsigned pass; static const struct adam7_pass passes[] = { @@ -234,7 +232,7 @@ static bool png_reverse_filter_adam7(uint32_t *data, } if (!png_reverse_filter(tmp_data, - &tmp_ihdr, pngp, palette)) + &tmp_ihdr, pngp)) { free(tmp_data); return false; diff --git a/libretro-common/formats/png/rpng_decode_fbio.c b/libretro-common/formats/png/rpng_decode_fbio.c index 06d98296a7..30ed070697 100644 --- a/libretro-common/formats/png/rpng_decode_fbio.c +++ b/libretro-common/formats/png/rpng_decode_fbio.c @@ -340,15 +340,16 @@ bool rpng_load_image_argb(const char *path, uint32_t **data, process.total_out = stream.total_out; process.inflate_buf = rpng.inflate_buf; + process.palette = rpng.palette; if (rpng.ihdr.interlace == 1) { if (!png_reverse_filter_adam7(*data, - &rpng.ihdr, &process, rpng.palette)) + &rpng.ihdr, &process)) GOTO_END_ERROR(); } else if (!png_reverse_filter(*data, - &rpng.ihdr, &process, rpng.palette)) + &rpng.ihdr, &process)) 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 bf9e94bb52..d9b9044023 100644 --- a/libretro-common/formats/png/rpng_decode_fnbio.c +++ b/libretro-common/formats/png/rpng_decode_fnbio.c @@ -299,15 +299,16 @@ bool rpng_nbio_load_image_argb_process(struct rpng_t *rpng, process.total_out = stream.total_out; process.inflate_buf = rpng->inflate_buf; + process.palette = rpng->palette; if (rpng->ihdr.interlace == 1) { if (!png_reverse_filter_adam7(*data, - &rpng->ihdr, &process, rpng->palette)) + &rpng->ihdr, &process)) return false; } else if (!png_reverse_filter(*data, - &rpng->ihdr, &process, rpng->palette)) + &rpng->ihdr, &process)) return false; return true; diff --git a/libretro-common/include/formats/rpng.h b/libretro-common/include/formats/rpng.h index 2b1411517f..9fabeb5537 100644 --- a/libretro-common/include/formats/rpng.h +++ b/libretro-common/include/formats/rpng.h @@ -63,6 +63,7 @@ struct png_ihdr struct rpng_process_t { const uint8_t *inflate_buf; + const uint32_t *palette; size_t total_out; };