diff --git a/libretro-common/formats/png/rpng_decode.c b/libretro-common/formats/png/rpng_decode.c index 5911a6403a..365995644a 100644 --- a/libretro-common/formats/png/rpng_decode.c +++ b/libretro-common/formats/png/rpng_decode.c @@ -644,5 +644,7 @@ bool rpng_load_image_argb_process_init(struct rpng_t *rpng, if (png_reverse_filter_init(&rpng->ihdr, &rpng->process) == -1) return false; + rpng->process.initialized = true; + return true; } diff --git a/libretro-common/formats/png/rpng_nbio.c b/libretro-common/formats/png/rpng_nbio.c index 925bdefe6f..c27e82e981 100644 --- a/libretro-common/formats/png/rpng_nbio.c +++ b/libretro-common/formats/png/rpng_nbio.c @@ -196,9 +196,12 @@ bool rpng_nbio_load_image_argb_process(struct rpng_t *rpng, { int retval = 0; - if (!rpng_load_image_argb_process_init(rpng, data, width, - height)) - return false; + if (!rpng->process.initialized) + { + if (!rpng_load_image_argb_process_init(rpng, data, width, + height)) + return false; + } do{ retval = png_reverse_filter_iterate(rpng, data); diff --git a/libretro-common/include/formats/rpng.h b/libretro-common/include/formats/rpng.h index ce88178344..08053a0e96 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 { + bool initialized; bool adam7_pass_initialized; bool pass_initialized; uint32_t *data;