diff --git a/libretro-common/formats/image_transfer.c b/libretro-common/formats/image_transfer.c index d01c44b5bb..ae29f8756d 100644 --- a/libretro-common/formats/image_transfer.c +++ b/libretro-common/formats/image_transfer.c @@ -22,6 +22,7 @@ void image_transfer_free(void *data, enum image_type_enum type) break; case IMAGE_TYPE_JPEG: #ifdef HAVE_RJPEG + rjpeg_free((rjpeg_t*)data); #endif break; } @@ -34,12 +35,16 @@ void *image_transfer_new(enum image_type_enum type) case IMAGE_TYPE_PNG: #ifdef HAVE_RPNG return rpng_alloc(); -#endif +#else break; +#endif case IMAGE_TYPE_JPEG: #ifdef HAVE_RJPEG return rjpeg_alloc(); +#else + break; #endif + default: break; } diff --git a/libretro-common/formats/jpeg/rjpeg.c b/libretro-common/formats/jpeg/rjpeg.c index 6ae2afd3c4..8419e5bb12 100644 --- a/libretro-common/formats/jpeg/rjpeg.c +++ b/libretro-common/formats/jpeg/rjpeg.c @@ -2467,7 +2467,15 @@ bool rjpeg_image_load(uint8_t *_buf, void *data, size_t size, return true; } -void *rjpeg_alloc(void) +void rjpeg_free(rjpeg_t *rjpeg) +{ + if (!rjpeg) + return; + + free(rjpeg); +} + +rjpeg_t *rjpeg_alloc(void) { rjpeg_t *rjpeg = (rjpeg_t*)calloc(1, sizeof(*rjpeg)); if (!rjpeg) diff --git a/libretro-common/include/formats/rjpeg.h b/libretro-common/include/formats/rjpeg.h index 62fafb4123..f0ddece720 100644 --- a/libretro-common/include/formats/rjpeg.h +++ b/libretro-common/include/formats/rjpeg.h @@ -37,7 +37,9 @@ typedef struct rjpeg rjpeg_t; bool rjpeg_image_load(uint8_t *buf, void *data, size_t size, unsigned a_shift, unsigned r_shift, unsigned g_shift, unsigned b_shift); -void *rjpeg_alloc(void); +void rjpeg_free(rjpeg_t *rjpeg); + +rjpeg_t *rjpeg_alloc(void); RETRO_END_DECLS