Fix avifpng.c for libpng 1.4 (#866)
diff --git a/apps/shared/avifpng.c b/apps/shared/avifpng.c index 21a0557..b824b57 100644 --- a/apps/shared/avifpng.c +++ b/apps/shared/avifpng.c
@@ -10,6 +10,13 @@ #include <stdlib.h> #include <string.h> +// See libpng-manual.txt, section XI. +#if PNG_LIBPNG_VER_MAJOR > 1 || (PNG_LIBPNG_VER_MAJOR == 1 && PNG_LIBPNG_VER_MINOR >= 5) +typedef png_bytep png_iccp_datap; +#else +typedef png_charp png_iccp_datap; +#endif + // Note on setjmp() and volatile variables: // // K & R, The C Programming Language 2nd Ed, p. 254 says: @@ -75,7 +82,7 @@ int iccpCompression = 0; unsigned char * iccpData = NULL; png_uint_32 iccpDataLen = 0; - if (png_get_iCCP(png, info, &iccpProfileName, &iccpCompression, &iccpData, &iccpDataLen) == PNG_INFO_iCCP) { + if (png_get_iCCP(png, info, &iccpProfileName, &iccpCompression, (png_iccp_datap *)&iccpData, &iccpDataLen) == PNG_INFO_iCCP) { avifImageSetProfileICC(avif, iccpData, iccpDataLen); } @@ -216,7 +223,9 @@ // Don't bother complaining about ICC profile's contents when transferring from AVIF to PNG. // It is up to the enduser to decide if they want to keep their ICC profiles or not. - png_set_option(png, PNG_SKIP_sRGB_CHECK_PROFILE, 1); +#if defined(PNG_SKIP_sRGB_CHECK_PROFILE) && defined(PNG_SET_OPTION_SUPPORTED) // See libpng-manual.txt, section XII. + png_set_option(png, PNG_SKIP_sRGB_CHECK_PROFILE, PNG_OPTION_ON); +#endif if (compressionLevel >= 0) { png_set_compression_level(png, compressionLevel); @@ -224,7 +233,7 @@ png_set_IHDR(png, info, avif->width, avif->height, rgb.depth, PNG_COLOR_TYPE_RGBA, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); if (avif->icc.data && (avif->icc.size > 0)) { - png_set_iCCP(png, info, "libavif", 0, avif->icc.data, (png_uint_32)avif->icc.size); + png_set_iCCP(png, info, "libavif", 0, (png_iccp_datap)avif->icc.data, (png_uint_32)avif->icc.size); } png_write_info(png, info);