@ -1,12 +1,10 @@
/* pngpriv.h - private declarations for use inside libpng
/* pngpriv.h - private declarations for use inside libpng
*
*
* For conditions of distribution and use , see copyright notice in png . h
* Copyright ( c ) 2018 - 2019 Cosmin Truta
* Copyright ( c ) 1998 - 2014 Glenn Randers - Pehrson
* Copyright ( c ) 1998 - 2002 , 2004 , 2006 - 2018 Glenn Randers - Pehrson
* ( Version 0.96 Copyright ( c ) 1996 , 1997 Andreas Dilger )
* Copyright ( c ) 1996 - 1997 Andreas Dilger
* ( Version 0.88 Copyright ( c ) 1995 , 1996 Guy Eric Schalnat , Group 42 , Inc . )
* Copyright ( c ) 1995 - 1996 Guy Eric Schalnat , Group 42 , Inc .
*
* Last changed in libpng 1.6 .10 [ March 6 , 1014 ] ]
*
*
* This code is released under the libpng license .
* This code is released under the libpng license .
* For conditions of distribution and use , see the disclaimer
* For conditions of distribution and use , see the disclaimer
@ -37,7 +35,9 @@
* Windows / Visual Studio ) there is no effect ; the OS specific tests below are
* Windows / Visual Studio ) there is no effect ; the OS specific tests below are
* still required ( as of 2011 - 05 - 02. )
* still required ( as of 2011 - 05 - 02. )
*/
*/
# define _POSIX_SOURCE 1 /* Just the POSIX 1003.1 and C89 APIs */
# ifndef _POSIX_SOURCE
# define _POSIX_SOURCE 1 /* Just the POSIX 1003.1 and C89 APIs */
# endif
# ifndef PNG_VERSION_INFO_ONLY
# ifndef PNG_VERSION_INFO_ONLY
/* Standard library headers not required by png.h: */
/* Standard library headers not required by png.h: */
@ -120,8 +120,12 @@
* to compile with an appropriate # error if ALIGNED_MEMORY has been turned
* to compile with an appropriate # error if ALIGNED_MEMORY has been turned
* off .
* off .
*
*
* Note that gcc - 4.9 defines __ARM_NEON instead of __ARM_NEON__ , so we
* Note that gcc - 4.9 defines __ARM_NEON instead of the deprecated
* check both variants .
* __ARM_NEON__ , so we check both variants .
*
* To disable ARM_NEON optimizations entirely , and skip compiling the
* associated assembler code , pass - - enable - arm - neon = no to configure
* or put - DPNG_ARM_NEON_OPT = 0 in CPPFLAGS .
*/
*/
# if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \
# if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && \
defined ( PNG_ALIGNED_MEMORY_SUPPORTED )
defined ( PNG_ALIGNED_MEMORY_SUPPORTED )
@ -170,7 +174,10 @@
# else /* !defined __ARM_NEON__ */
# else /* !defined __ARM_NEON__ */
/* The 'intrinsics' code simply won't compile without this -mfpu=neon:
/* The 'intrinsics' code simply won't compile without this -mfpu=neon:
*/
*/
# if !defined(__aarch64__)
/* The assembler code currently does not work on ARM64 */
# define PNG_ARM_NEON_IMPLEMENTATION 2
# define PNG_ARM_NEON_IMPLEMENTATION 2
# endif /* __aarch64__ */
# endif /* __ARM_NEON__ */
# endif /* __ARM_NEON__ */
# endif /* !PNG_ARM_NEON_IMPLEMENTATION */
# endif /* !PNG_ARM_NEON_IMPLEMENTATION */
@ -180,6 +187,90 @@
# endif
# endif
# endif /* PNG_ARM_NEON_OPT > 0 */
# endif /* PNG_ARM_NEON_OPT > 0 */
# ifndef PNG_MIPS_MSA_OPT
# if defined(__mips_msa) && (__mips_isa_rev >= 5) && defined(PNG_ALIGNED_MEMORY_SUPPORTED)
# define PNG_MIPS_MSA_OPT 2
# else
# define PNG_MIPS_MSA_OPT 0
# endif
# endif
# ifndef PNG_POWERPC_VSX_OPT
# if defined(__PPC64__) && defined(__ALTIVEC__) && defined(__VSX__)
# define PNG_POWERPC_VSX_OPT 2
# else
# define PNG_POWERPC_VSX_OPT 0
# endif
# endif
# ifndef PNG_INTEL_SSE_OPT
# ifdef PNG_INTEL_SSE
/* Only check for SSE if the build configuration has been modified to
* enable SSE optimizations . This means that these optimizations will
* be off by default . See contrib / intel for more details .
*/
# if defined(__SSE4_1__) || defined(__AVX__) || defined(__SSSE3__) || \
defined ( __SSE2__ ) | | defined ( _M_X64 ) | | defined ( _M_AMD64 ) | | \
( defined ( _M_IX86_FP ) & & _M_IX86_FP > = 2 )
# define PNG_INTEL_SSE_OPT 1
# else
# define PNG_INTEL_SSE_OPT 0
# endif
# else
# define PNG_INTEL_SSE_OPT 0
# endif
# endif
# if PNG_INTEL_SSE_OPT > 0
# ifndef PNG_INTEL_SSE_IMPLEMENTATION
# if defined(__SSE4_1__) || defined(__AVX__)
/* We are not actually using AVX, but checking for AVX is the best
way we can detect SSE4 .1 and SSSE3 on MSVC .
*/
# define PNG_INTEL_SSE_IMPLEMENTATION 3
# elif defined(__SSSE3__)
# define PNG_INTEL_SSE_IMPLEMENTATION 2
# elif defined(__SSE2__) || defined(_M_X64) || defined(_M_AMD64) || \
( defined ( _M_IX86_FP ) & & _M_IX86_FP > = 2 )
# define PNG_INTEL_SSE_IMPLEMENTATION 1
# else
# define PNG_INTEL_SSE_IMPLEMENTATION 0
# endif
# endif
# if PNG_INTEL_SSE_IMPLEMENTATION > 0
# define PNG_FILTER_OPTIMIZATIONS png_init_filter_functions_sse2
# endif
# else
# define PNG_INTEL_SSE_IMPLEMENTATION 0
# endif
# if PNG_MIPS_MSA_OPT > 0
# define PNG_FILTER_OPTIMIZATIONS png_init_filter_functions_msa
# ifndef PNG_MIPS_MSA_IMPLEMENTATION
# if defined(__mips_msa)
# if defined(__clang__)
# elif defined(__GNUC__)
# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 7)
# define PNG_MIPS_MSA_IMPLEMENTATION 2
# endif /* no GNUC support */
# endif /* __GNUC__ */
# else /* !defined __mips_msa */
# define PNG_MIPS_MSA_IMPLEMENTATION 2
# endif /* __mips_msa */
# endif /* !PNG_MIPS_MSA_IMPLEMENTATION */
# ifndef PNG_MIPS_MSA_IMPLEMENTATION
# define PNG_MIPS_MSA_IMPLEMENTATION 1
# endif
# endif /* PNG_MIPS_MSA_OPT > 0 */
# if PNG_POWERPC_VSX_OPT > 0
# define PNG_FILTER_OPTIMIZATIONS png_init_filter_functions_vsx
# define PNG_POWERPC_VSX_IMPLEMENTATION 1
# endif
/* Is this a build of a DLL where compilation of the object modules requires
/* Is this a build of a DLL where compilation of the object modules requires
* different preprocessor settings to those required for a simple library ? If
* different preprocessor settings to those required for a simple library ? If
* so PNG_BUILD_DLL must be set .
* so PNG_BUILD_DLL must be set .
@ -250,17 +341,18 @@
* always be used to declare an extern data or function object in this file .
* always be used to declare an extern data or function object in this file .
*/
*/
# ifndef PNG_INTERNAL_DATA
# ifndef PNG_INTERNAL_DATA
# define PNG_INTERNAL_DATA(type, name, array) extern type name array
# define PNG_INTERNAL_DATA(type, name, array) PNG_LINKAGE_DATA type name array
# endif
# endif
# ifndef PNG_INTERNAL_FUNCTION
# ifndef PNG_INTERNAL_FUNCTION
# define PNG_INTERNAL_FUNCTION(type, name, args, attributes)\
# define PNG_INTERNAL_FUNCTION(type, name, args, attributes)\
extern PNG_FUNCTION ( type , name , args , PNG_EMPTY attributes )
PNG_LINKAGE_FUNCTION PNG_FUNCTION ( type , name , args , PNG_EMPTY attributes )
# endif
# endif
# ifndef PNG_INTERNAL_CALLBACK
# ifndef PNG_INTERNAL_CALLBACK
# define PNG_INTERNAL_CALLBACK(type, name, args, attributes)\
# define PNG_INTERNAL_CALLBACK(type, name, args, attributes)\
extern PNG_FUNCTION ( type , ( PNGCBAPI name ) , args , PNG_EMPTY attributes )
PNG_LINKAGE_CALLBACK PNG_FUNCTION ( type , ( PNGCBAPI name ) , args , \
PNG_EMPTY attributes )
# endif
# endif
/* If floating or fixed point APIs are disabled they may still be compiled
/* If floating or fixed point APIs are disabled they may still be compiled
@ -298,48 +390,27 @@
# define PNG_DLL_EXPORT
# define PNG_DLL_EXPORT
# endif
# endif
/* SECURITY and SAFETY:
/* This is a global switch to set the compilation for an installed system
* ( a release build ) . It can be set for testing debug builds to ensure that
* they will compile when the build type is switched to RC or STABLE , the
* default is just to use PNG_LIBPNG_BUILD_BASE_TYPE . Set this in CPPFLAGS
* with either :
*
*
* By default libpng is built without any internal limits on image size ,
* - DPNG_RELEASE_BUILD Turns on the release compile path
* individual heap ( png_malloc ) allocations or the total amount of memory used .
* - DPNG_RELEASE_BUILD = 0 Turns it off
* If PNG_SAFE_LIMITS_SUPPORTED is defined , however , the limits below are used
* or in your pngusr . h with
* ( unless individually overridden ) . These limits are believed to be fairly
* # define PNG_RELEASE_BUILD = 1 Turns on the release compile path
* safe , but builders of secure systems should verify the values against the
* # define PNG_RELEASE_BUILD = 0 Turns it off
* real system capabilities .
*/
*/
# ifndef PNG_RELEASE_BUILD
# ifdef PNG_SAFE_LIMITS_SUPPORTED
# define PNG_RELEASE_BUILD (PNG_LIBPNG_BUILD_BASE_TYPE >= PNG_LIBPNG_BUILD_RC)
/* 'safe' limits */
# ifndef PNG_USER_WIDTH_MAX
# define PNG_USER_WIDTH_MAX 1000000
# endif
# ifndef PNG_USER_HEIGHT_MAX
# define PNG_USER_HEIGHT_MAX 1000000
# endif
# ifndef PNG_USER_CHUNK_CACHE_MAX
# define PNG_USER_CHUNK_CACHE_MAX 128
# endif
# ifndef PNG_USER_CHUNK_MALLOC_MAX
# define PNG_USER_CHUNK_MALLOC_MAX 8000000
# endif
# else
/* values for no limits */
# ifndef PNG_USER_WIDTH_MAX
# define PNG_USER_WIDTH_MAX 0x7fffffff
# endif
# ifndef PNG_USER_HEIGHT_MAX
# define PNG_USER_HEIGHT_MAX 0x7fffffff
# endif
# ifndef PNG_USER_CHUNK_CACHE_MAX
# define PNG_USER_CHUNK_CACHE_MAX 0
# endif
# ifndef PNG_USER_CHUNK_MALLOC_MAX
# define PNG_USER_CHUNK_MALLOC_MAX 0
# endif
# endif
# endif
/* Moved to pngpriv.h at libpng-1.5.0 */
/* SECURITY and SAFETY:
/* NOTE: some of these may have been used in external applications as
*
* these definitions were exposed in pngconf . h prior to 1.5 .
* libpng is built with support for internal limits on image dimensions and
* memory usage . These are documented in scripts / pnglibconf . dfa of the
* source and recorded in the machine generated header file pnglibconf . h .
*/
*/
/* If you are running on a machine where you cannot allocate more
/* If you are running on a machine where you cannot allocate more
@ -392,6 +463,21 @@
# define png_fixed_error(s1,s2) png_err(s1)
# define png_fixed_error(s1,s2) png_err(s1)
# endif
# endif
/* Some fixed point APIs are still required even if not exported because
* they get used by the corresponding floating point APIs . This magic
* deals with this :
*/
# ifdef PNG_FIXED_POINT_SUPPORTED
# define PNGFAPI PNGAPI
# else
# define PNGFAPI /* PRIVATE */
# endif
# ifndef PNG_VERSION_INFO_ONLY
/* Other defines specific to compilers can go here. Try to keep
* them inside an appropriate ifdef / endif pair for portability .
*/
/* C allows up-casts from (void*) to any pointer and (const void*) to any
/* C allows up-casts from (void*) to any pointer and (const void*) to any
* pointer to a const object . C + + regards this as a type error and requires an
* pointer to a const object . C + + regards this as a type error and requires an
* explicit , static , cast and provides the static_cast < > rune to ensure that
* explicit , static , cast and provides the static_cast < > rune to ensure that
@ -406,25 +492,20 @@
static_cast < type > ( static_cast < const void * > ( value ) )
static_cast < type > ( static_cast < const void * > ( value ) )
# else
# else
# define png_voidcast(type, value) (value)
# define png_voidcast(type, value) (value)
# define png_constcast(type, value) ((type)(value))
# ifdef _WIN64
# ifdef __GNUC__
typedef unsigned long long png_ptruint ;
# else
typedef unsigned __int64 png_ptruint ;
# endif
# else
typedef unsigned long png_ptruint ;
# endif
# define png_constcast(type, value) ((type)(png_ptruint)(const void*)(value))
# define png_aligncast(type, value) ((void*)(value))
# define png_aligncast(type, value) ((void*)(value))
# define png_aligncastconst(type, value) ((const void*)(value))
# define png_aligncastconst(type, value) ((const void*)(value))
# endif /* __cplusplus */
# endif /* __cplusplus */
/* Some fixed point APIs are still required even if not exported because
* they get used by the corresponding floating point APIs . This magic
* deals with this :
*/
# ifdef PNG_FIXED_POINT_SUPPORTED
# define PNGFAPI PNGAPI
# else
# define PNGFAPI /* PRIVATE */
# endif
# ifndef PNG_VERSION_INFO_ONLY
/* Other defines specific to compilers can go here. Try to keep
* them inside an appropriate ifdef / endif pair for portability .
*/
# if defined(PNG_FLOATING_POINT_SUPPORTED) ||\
# if defined(PNG_FLOATING_POINT_SUPPORTED) ||\
defined ( PNG_FLOATING_ARITHMETIC_SUPPORTED )
defined ( PNG_FLOATING_ARITHMETIC_SUPPORTED )
/* png.c requires the following ANSI-C constants if the conversion of
/* png.c requires the following ANSI-C constants if the conversion of
@ -522,7 +603,8 @@
/* This implicitly assumes alignment is always to a power of 2. */
/* This implicitly assumes alignment is always to a power of 2. */
# ifdef png_alignof
# ifdef png_alignof
# define png_isaligned(ptr, type)\
# define png_isaligned(ptr, type)\
( ( ( ( const char * ) ptr - ( const char * ) 0 ) & ( png_alignof ( type ) - 1 ) ) = = 0 )
( ( ( type ) ( ( const char * ) ptr - ( const char * ) 0 ) & \
( type ) ( png_alignof ( type ) - 1 ) ) = = 0 )
# else
# else
# define png_isaligned(ptr, type) 0
# define png_isaligned(ptr, type) 0
# endif
# endif
@ -539,96 +621,92 @@
* are defined in png . h because they need to be visible to applications
* are defined in png . h because they need to be visible to applications
* that call png_set_unknown_chunk ( ) .
* that call png_set_unknown_chunk ( ) .
*/
*/
/* #define PNG_HAVE_IHDR 0x01 (defined in png.h) */
/* #define PNG_HAVE_IHDR 0x01U (defined in png.h) */
/* #define PNG_HAVE_PLTE 0x02 (defined in png.h) */
/* #define PNG_HAVE_PLTE 0x02U (defined in png.h) */
# define PNG_HAVE_IDAT 0x04
# define PNG_HAVE_IDAT 0x04U
/* #define PNG_AFTER_IDAT 0x08 (defined in png.h) */
/* #define PNG_AFTER_IDAT 0x08U (defined in png.h) */
# define PNG_HAVE_IEND 0x10
# define PNG_HAVE_IEND 0x10U
/* 0x20 (unused) */
/* 0x20U (unused) */
/* 0x40 (unused) */
/* 0x40U (unused) */
/* 0x80 (unused) */
/* 0x80U (unused) */
# define PNG_HAVE_CHUNK_HEADER 0x100
# define PNG_HAVE_CHUNK_HEADER 0x100U
# define PNG_WROTE_tIME 0x200
# define PNG_WROTE_tIME 0x200U
# define PNG_WROTE_INFO_BEFORE_PLTE 0x400
# define PNG_WROTE_INFO_BEFORE_PLTE 0x400U
# define PNG_BACKGROUND_IS_GRAY 0x800
# define PNG_BACKGROUND_IS_GRAY 0x800U
# define PNG_HAVE_PNG_SIGNATURE 0x1000
# define PNG_HAVE_PNG_SIGNATURE 0x1000U
# define PNG_HAVE_CHUNK_AFTER_IDAT 0x2000 /* Have another chunk after IDAT */
# define PNG_HAVE_CHUNK_AFTER_IDAT 0x2000U /* Have another chunk after IDAT */
/* 0x4000 (unused) */
/* 0x4000U (unused) */
# define PNG_IS_READ_STRUCT 0x8000 /* Else is a write struct */
# define PNG_IS_READ_STRUCT 0x8000U /* Else is a write struct */
/* Flags for the transformations the PNG library does on the image data */
/* Flags for the transformations the PNG library does on the image data */
# define PNG_BGR 0x0001
# define PNG_BGR 0x0001U
# define PNG_INTERLACE 0x0002
# define PNG_INTERLACE 0x0002U
# define PNG_PACK 0x0004
# define PNG_PACK 0x0004U
# define PNG_SHIFT 0x0008
# define PNG_SHIFT 0x0008U
# define PNG_SWAP_BYTES 0x0010
# define PNG_SWAP_BYTES 0x0010U
# define PNG_INVERT_MONO 0x0020
# define PNG_INVERT_MONO 0x0020U
# define PNG_QUANTIZE 0x0040
# define PNG_QUANTIZE 0x0040U
# define PNG_COMPOSE 0x0080 /* Was PNG_BACKGROUND */
# define PNG_COMPOSE 0x0080U /* Was PNG_BACKGROUND */
# define PNG_BACKGROUND_EXPAND 0x0100
# define PNG_BACKGROUND_EXPAND 0x0100U
# define PNG_EXPAND_16 0x0200 /* Added to libpng 1.5.2 */
# define PNG_EXPAND_16 0x0200U /* Added to libpng 1.5.2 */
# define PNG_16_TO_8 0x0400 /* Becomes 'chop' in 1.5.4 */
# define PNG_16_TO_8 0x0400U /* Becomes 'chop' in 1.5.4 */
# define PNG_RGBA 0x0800
# define PNG_RGBA 0x0800U
# define PNG_EXPAND 0x1000
# define PNG_EXPAND 0x1000U
# define PNG_GAMMA 0x2000
# define PNG_GAMMA 0x2000U
# define PNG_GRAY_TO_RGB 0x4000
# define PNG_GRAY_TO_RGB 0x4000U
# define PNG_FILLER 0x8000
# define PNG_FILLER 0x8000U
# define PNG_PACKSWAP 0x10000
# define PNG_PACKSWAP 0x10000U
# define PNG_SWAP_ALPHA 0x20000
# define PNG_SWAP_ALPHA 0x20000U
# define PNG_STRIP_ALPHA 0x40000
# define PNG_STRIP_ALPHA 0x40000U
# define PNG_INVERT_ALPHA 0x80000
# define PNG_INVERT_ALPHA 0x80000U
# define PNG_USER_TRANSFORM 0x100000
# define PNG_USER_TRANSFORM 0x100000U
# define PNG_RGB_TO_GRAY_ERR 0x200000
# define PNG_RGB_TO_GRAY_ERR 0x200000U
# define PNG_RGB_TO_GRAY_WARN 0x400000
# define PNG_RGB_TO_GRAY_WARN 0x400000U
# define PNG_RGB_TO_GRAY 0x600000 /* two bits, RGB_TO_GRAY_ERR|WARN */
# define PNG_RGB_TO_GRAY 0x600000U /* two bits, RGB_TO_GRAY_ERR|WARN */
# define PNG_ENCODE_ALPHA 0x800000 /* Added to libpng-1.5.4 */
# define PNG_ENCODE_ALPHA 0x800000U /* Added to libpng-1.5.4 */
# define PNG_ADD_ALPHA 0x1000000 /* Added to libpng-1.2.7 */
# define PNG_ADD_ALPHA 0x1000000U /* Added to libpng-1.2.7 */
# define PNG_EXPAND_tRNS 0x2000000 /* Added to libpng-1.2.9 */
# define PNG_EXPAND_tRNS 0x2000000U /* Added to libpng-1.2.9 */
# define PNG_SCALE_16_TO_8 0x4000000 /* Added to libpng-1.5.4 */
# define PNG_SCALE_16_TO_8 0x4000000U /* Added to libpng-1.5.4 */
/* 0x8000000 unused */
/* 0x8000000U unused */
/* 0x10000000 unused */
/* 0x10000000U unused */
/* 0x20000000 unused */
/* 0x20000000U unused */
/* 0x40000000 unused */
/* 0x40000000U unused */
/* Flags for png_create_struct */
/* Flags for png_create_struct */
# define PNG_STRUCT_PNG 0x0001
# define PNG_STRUCT_PNG 0x0001U
# define PNG_STRUCT_INFO 0x0002
# define PNG_STRUCT_INFO 0x0002U
/* Scaling factor for filter heuristic weighting calculations */
# define PNG_WEIGHT_FACTOR (1<<(PNG_WEIGHT_SHIFT))
# define PNG_COST_FACTOR (1<<(PNG_COST_SHIFT))
/* Flags for the png_ptr->flags rather than declaring a byte for each one */
/* Flags for the png_ptr->flags rather than declaring a byte for each one */
# define PNG_FLAG_ZLIB_CUSTOM_STRATEGY 0x0001
# define PNG_FLAG_ZLIB_CUSTOM_STRATEGY 0x0001U
# define PNG_FLAG_ZSTREAM_INITIALIZED 0x0002 /* Added to libpng-1.6.0 */
# define PNG_FLAG_ZSTREAM_INITIALIZED 0x0002U /* Added to libpng-1.6.0 */
/* 0x0004 unused */
/* 0x0004U unused */
# define PNG_FLAG_ZSTREAM_ENDED 0x0008 /* Added to libpng-1.6.0 */
# define PNG_FLAG_ZSTREAM_ENDED 0x0008U /* Added to libpng-1.6.0 */
/* 0x0010 unused */
/* 0x0010U unused */
/* 0x0020 unused */
/* 0x0020U unused */
# define PNG_FLAG_ROW_INIT 0x0040
# define PNG_FLAG_ROW_INIT 0x0040U
# define PNG_FLAG_FILLER_AFTER 0x0080
# define PNG_FLAG_FILLER_AFTER 0x0080U
# define PNG_FLAG_CRC_ANCILLARY_USE 0x0100
# define PNG_FLAG_CRC_ANCILLARY_USE 0x0100U
# define PNG_FLAG_CRC_ANCILLARY_NOWARN 0x0200
# define PNG_FLAG_CRC_ANCILLARY_NOWARN 0x0200U
# define PNG_FLAG_CRC_CRITICAL_USE 0x0400
# define PNG_FLAG_CRC_CRITICAL_USE 0x0400U
# define PNG_FLAG_CRC_CRITICAL_IGNORE 0x0800
# define PNG_FLAG_CRC_CRITICAL_IGNORE 0x0800U
# define PNG_FLAG_ASSUME_sRGB 0x1000 /* Added to libpng-1.5.4 */
# define PNG_FLAG_ASSUME_sRGB 0x1000U /* Added to libpng-1.5.4 */
# define PNG_FLAG_OPTIMIZE_ALPHA 0x2000 /* Added to libpng-1.5.4 */
# define PNG_FLAG_OPTIMIZE_ALPHA 0x2000U /* Added to libpng-1.5.4 */
# define PNG_FLAG_DETECT_UNINITIALIZED 0x4000 /* Added to libpng-1.5.4 */
# define PNG_FLAG_DETECT_UNINITIALIZED 0x4000U /* Added to libpng-1.5.4 */
/* #define PNG_FLAG_KEEP_UNKNOWN_CHUNKS 0x8000 */
/* #define PNG_FLAG_KEEP_UNKNOWN_CHUNKS 0x8000U */
/* #define PNG_FLAG_KEEP_UNSAFE_CHUNKS 0x10000 */
/* #define PNG_FLAG_KEEP_UNSAFE_CHUNKS 0x10000U */
# define PNG_FLAG_LIBRARY_MISMATCH 0x20000
# define PNG_FLAG_LIBRARY_MISMATCH 0x20000U
# define PNG_FLAG_STRIP_ERROR_NUMBERS 0x40000
# define PNG_FLAG_STRIP_ERROR_NUMBERS 0x40000U
# define PNG_FLAG_STRIP_ERROR_TEXT 0x80000
# define PNG_FLAG_STRIP_ERROR_TEXT 0x80000U
# define PNG_FLAG_BENIGN_ERRORS_WARN 0x100000 /* Added to libpng-1.4.0 */
# define PNG_FLAG_BENIGN_ERRORS_WARN 0x100000U /* Added to libpng-1.4.0 */
# define PNG_FLAG_APP_WARNINGS_WARN 0x200000 /* Added to libpng-1.6.0 */
# define PNG_FLAG_APP_WARNINGS_WARN 0x200000U /* Added to libpng-1.6.0 */
# define PNG_FLAG_APP_ERRORS_WARN 0x400000 /* Added to libpng-1.6.0 */
# define PNG_FLAG_APP_ERRORS_WARN 0x400000U /* Added to libpng-1.6.0 */
/* 0x800000 unused */
/* 0x800000U unused */
/* 0x1000000 unused */
/* 0x1000000U unused */
/* 0x2000000 unused */
/* 0x2000000U unused */
/* 0x4000000 unused */
/* 0x4000000U unused */
/* 0x8000000 unused */
/* 0x8000000U unused */
/* 0x10000000 unused */
/* 0x10000000U unused */
/* 0x20000000 unused */
/* 0x20000000U unused */
/* 0x40000000 unused */
/* 0x40000000U unused */
# define PNG_FLAG_CRC_ANCILLARY_MASK (PNG_FLAG_CRC_ANCILLARY_USE | \
# define PNG_FLAG_CRC_ANCILLARY_MASK (PNG_FLAG_CRC_ANCILLARY_USE | \
PNG_FLAG_CRC_ANCILLARY_NOWARN )
PNG_FLAG_CRC_ANCILLARY_NOWARN )
@ -659,8 +737,26 @@
/* Added to libpng-1.2.6 JB */
/* Added to libpng-1.2.6 JB */
# define PNG_ROWBYTES(pixel_bits, width) \
# define PNG_ROWBYTES(pixel_bits, width) \
( ( pixel_bits ) > = 8 ? \
( ( pixel_bits ) > = 8 ? \
( ( png_size_t ) ( width ) * ( ( ( png_size_t ) ( pixel_bits ) ) > > 3 ) ) : \
( ( size_t ) ( width ) * ( ( ( size_t ) ( pixel_bits ) ) > > 3 ) ) : \
( ( ( ( png_size_t ) ( width ) * ( ( png_size_t ) ( pixel_bits ) ) ) + 7 ) > > 3 ) )
( ( ( ( size_t ) ( width ) * ( ( size_t ) ( pixel_bits ) ) ) + 7 ) > > 3 ) )
/* This returns the number of trailing bits in the last byte of a row, 0 if the
* last byte is completely full of pixels . It is , in principle , ( pixel_bits x
* width ) % 8 , but that would overflow for large ' width ' . The second macro is
* the same except that it returns the number of unused bits in the last byte ;
* ( 8 - TRAILBITS ) , but 0 when TRAILBITS is 0.
*
* NOTE : these macros are intended to be self - evidently correct and never
* overflow on the assumption that pixel_bits is in the range 0. .255 . The
* arguments are evaluated only once and they can be signed ( e . g . as a result of
* the integral promotions ) . The result of the expression always has type
* ( png_uint_32 ) , however the compiler always knows it is in the range 0. .7 .
*/
# define PNG_TRAILBITS(pixel_bits, width) \
( ( ( pixel_bits ) * ( ( width ) % ( png_uint_32 ) 8 ) ) % 8 )
# define PNG_PADBITS(pixel_bits, width) \
( ( 8 - PNG_TRAILBITS ( pixel_bits , width ) ) % 8 )
/* PNG_OUT_OF_RANGE returns true if value is outside the range
/* PNG_OUT_OF_RANGE returns true if value is outside the range
* ideal - delta . . ideal + delta . Each argument is evaluated twice .
* ideal - delta . . ideal + delta . Each argument is evaluated twice .
@ -687,7 +783,7 @@
/* The fixed point conversion performs range checking and evaluates
/* The fixed point conversion performs range checking and evaluates
* its argument multiple times , so must be used with care . The
* its argument multiple times , so must be used with care . The
* range checking uses the PNG specification values for a signed
* range checking uses the PNG specification values for a signed
* 32 bit fixed point value except that the values are deliberately
* 32 - bit fixed point value except that the values are deliberately
* rounded - to - zero to an integral value - 21474 ( 21474.83 is roughly
* rounded - to - zero to an integral value - 21474 ( 21474.83 is roughly
* ( 2 ^ 31 - 1 ) * 100000 ) . ' s ' is a string that describes the value being
* ( 2 ^ 31 - 1 ) * 100000 ) . ' s ' is a string that describes the value being
* converted .
* converted .
@ -755,6 +851,7 @@
# define png_PLTE PNG_U32( 80, 76, 84, 69)
# define png_PLTE PNG_U32( 80, 76, 84, 69)
# define png_bKGD PNG_U32( 98, 75, 71, 68)
# define png_bKGD PNG_U32( 98, 75, 71, 68)
# define png_cHRM PNG_U32( 99, 72, 82, 77)
# define png_cHRM PNG_U32( 99, 72, 82, 77)
# define png_eXIf PNG_U32(101, 88, 73, 102) /* registered July 2017 */
# define png_fRAc PNG_U32(102, 82, 65, 99) /* registered, not defined */
# define png_fRAc PNG_U32(102, 82, 65, 99) /* registered, not defined */
# define png_gAMA PNG_U32(103, 65, 77, 65)
# define png_gAMA PNG_U32(103, 65, 77, 65)
# define png_gIFg PNG_U32(103, 73, 70, 103)
# define png_gIFg PNG_U32(103, 73, 70, 103)
@ -780,15 +877,17 @@
* macro will fail on top - bit - set values because of the sign extension .
* macro will fail on top - bit - set values because of the sign extension .
*/
*/
# define PNG_CHUNK_FROM_STRING(s)\
# define PNG_CHUNK_FROM_STRING(s)\
PNG_U32 ( 0xff & ( s ) [ 0 ] , 0xff & ( s ) [ 1 ] , 0xff & ( s ) [ 2 ] , 0xff & ( s ) [ 3 ] )
PNG_U32 ( 0xff & ( s ) [ 0 ] , 0xff & ( s ) [ 1 ] , 0xff & ( s ) [ 2 ] , 0xff & ( s ) [ 3 ] )
/* This uses (char), not (png_byte) to avoid warnings on systems where (char) is
/* This uses (char), not (png_byte) to avoid warnings on systems where (char) is
* signed and the argument is a ( char [ ] ) This macro will fail miserably on
* signed and the argument is a ( char [ ] ) This macro will fail miserably on
* systems where ( char ) is more than 8 bits .
* systems where ( char ) is more than 8 bits .
*/
*/
# define PNG_STRING_FROM_CHUNK(s,c)\
# define PNG_STRING_FROM_CHUNK(s,c)\
( void ) ( ( ( char * ) ( s ) ) [ 0 ] = ( char ) ( ( c ) > > 24 ) , ( ( char * ) ( s ) ) [ 1 ] = ( char ) ( ( c ) > > 16 ) , \
( void ) ( ( ( char * ) ( s ) ) [ 0 ] = ( char ) ( ( ( c ) > > 24 ) & 0xff ) , \
( ( char * ) ( s ) ) [ 2 ] = ( char ) ( ( c ) > > 8 ) , ( ( char * ) ( s ) ) [ 3 ] = ( char ) ( ( c ) ) )
( ( char * ) ( s ) ) [ 1 ] = ( char ) ( ( ( c ) > > 16 ) & 0xff ) , \
( ( char * ) ( s ) ) [ 2 ] = ( char ) ( ( ( c ) > > 8 ) & 0xff ) , \
( ( char * ) ( s ) ) [ 3 ] = ( char ) ( ( c & 0xff ) ) )
/* Do the same but terminate with a null character. */
/* Do the same but terminate with a null character. */
# define PNG_CSTRING_FROM_CHUNK(s,c)\
# define PNG_CSTRING_FROM_CHUNK(s,c)\
@ -827,12 +926,12 @@
* PNG files the - I directives must match .
* PNG files the - I directives must match .
*
*
* The most likely explanation is that you passed a - I in CFLAGS . This will
* The most likely explanation is that you passed a - I in CFLAGS . This will
* not work ; all the preprocessor director ies and in particular all the - I
* not work ; all the preprocessor directiv es and in particular all the - I
* directives must be in CPPFLAGS .
* directives must be in CPPFLAGS .
*/
*/
# endif
# endif
/* This is used for 16 bit gamma tables -- only the top level pointers are
/* This is used for 16- bit gamma tables -- only the top level pointers are
* const ; this could be changed :
* const ; this could be changed :
*/
*/
typedef const png_uint_16p * png_const_uint_16pp ;
typedef const png_uint_16p * png_const_uint_16pp ;
@ -850,8 +949,9 @@ PNG_INTERNAL_DATA(const png_uint_16, png_sRGB_table, [256]);
PNG_INTERNAL_DATA ( const png_uint_16 , png_sRGB_base , [ 512 ] ) ;
PNG_INTERNAL_DATA ( const png_uint_16 , png_sRGB_base , [ 512 ] ) ;
PNG_INTERNAL_DATA ( const png_byte , png_sRGB_delta , [ 512 ] ) ;
PNG_INTERNAL_DATA ( const png_byte , png_sRGB_delta , [ 512 ] ) ;
# define PNG_sRGB_FROM_LINEAR(linear) ((png_byte)((png_sRGB_base[(linear)>>15] +\
# define PNG_sRGB_FROM_LINEAR(linear) \
( ( ( ( linear ) & 0x7fff ) * png_sRGB_delta [ ( linear ) > > 15 ] ) > > 12 ) ) > > 8 ) )
( ( png_byte ) ( 0xff & ( ( png_sRGB_base [ ( linear ) > > 15 ] \
+ ( ( ( ( linear ) & 0x7fff ) * png_sRGB_delta [ ( linear ) > > 15 ] ) > > 12 ) ) > > 8 ) ) )
/* Given a value 'linear' in the range 0..255*65535 calculate the 8-bit sRGB
/* Given a value 'linear' in the range 0..255*65535 calculate the 8-bit sRGB
* encoded value with maximum error 0.646365 . Note that the input is not a
* encoded value with maximum error 0.646365 . Note that the input is not a
* 16 - bit value ; it has been multiplied by 255 ! */
* 16 - bit value ; it has been multiplied by 255 ! */
@ -955,15 +1055,15 @@ PNG_INTERNAL_FUNCTION(void,png_zfree,(voidpf png_ptr, voidpf ptr),PNG_EMPTY);
*/
*/
PNG_INTERNAL_FUNCTION ( void PNGCBAPI , png_default_read_data , ( png_structp png_ptr ,
PNG_INTERNAL_FUNCTION ( void PNGCBAPI , png_default_read_data , ( png_structp png_ptr ,
png_bytep data , png_ size_t length ) , PNG_EMPTY ) ;
png_bytep data , size_t length ) , PNG_EMPTY ) ;
# ifdef PNG_PROGRESSIVE_READ_SUPPORTED
# ifdef PNG_PROGRESSIVE_READ_SUPPORTED
PNG_INTERNAL_FUNCTION ( void PNGCBAPI , png_push_fill_buffer , ( png_structp png_ptr ,
PNG_INTERNAL_FUNCTION ( void PNGCBAPI , png_push_fill_buffer , ( png_structp png_ptr ,
png_bytep buffer , png_ size_t length ) , PNG_EMPTY ) ;
png_bytep buffer , size_t length ) , PNG_EMPTY ) ;
# endif
# endif
PNG_INTERNAL_FUNCTION ( void PNGCBAPI , png_default_write_data , ( png_structp png_ptr ,
PNG_INTERNAL_FUNCTION ( void PNGCBAPI , png_default_write_data , ( png_structp png_ptr ,
png_bytep data , png_ size_t length ) , PNG_EMPTY ) ;
png_bytep data , size_t length ) , PNG_EMPTY ) ;
# ifdef PNG_WRITE_FLUSH_SUPPORTED
# ifdef PNG_WRITE_FLUSH_SUPPORTED
# ifdef PNG_STDIO_SUPPORTED
# ifdef PNG_STDIO_SUPPORTED
@ -977,7 +1077,7 @@ PNG_INTERNAL_FUNCTION(void,png_reset_crc,(png_structrp png_ptr),PNG_EMPTY);
/* Write the "data" buffer to whatever output you are using */
/* Write the "data" buffer to whatever output you are using */
PNG_INTERNAL_FUNCTION ( void , png_write_data , ( png_structrp png_ptr ,
PNG_INTERNAL_FUNCTION ( void , png_write_data , ( png_structrp png_ptr ,
png_const_bytep data , png_ size_t length ) , PNG_EMPTY ) ;
png_const_bytep data , size_t length ) , PNG_EMPTY ) ;
/* Read and check the PNG file signature */
/* Read and check the PNG file signature */
PNG_INTERNAL_FUNCTION ( void , png_read_sig , ( png_structrp png_ptr ,
PNG_INTERNAL_FUNCTION ( void , png_read_sig , ( png_structrp png_ptr ,
@ -989,7 +1089,7 @@ PNG_INTERNAL_FUNCTION(png_uint_32,png_read_chunk_header,(png_structrp png_ptr),
/* Read data from whatever input you are using into the "data" buffer */
/* Read data from whatever input you are using into the "data" buffer */
PNG_INTERNAL_FUNCTION ( void , png_read_data , ( png_structrp png_ptr , png_bytep data ,
PNG_INTERNAL_FUNCTION ( void , png_read_data , ( png_structrp png_ptr , png_bytep data ,
png_ size_t length ) , PNG_EMPTY ) ;
size_t length ) , PNG_EMPTY ) ;
/* Read bytes into buf, and update png_ptr->crc */
/* Read bytes into buf, and update png_ptr->crc */
PNG_INTERNAL_FUNCTION ( void , png_crc_read , ( png_structrp png_ptr , png_bytep buf ,
PNG_INTERNAL_FUNCTION ( void , png_crc_read , ( png_structrp png_ptr , png_bytep buf ,
@ -1007,7 +1107,7 @@ PNG_INTERNAL_FUNCTION(int,png_crc_error,(png_structrp png_ptr),PNG_EMPTY);
* since this is the maximum buffer size we can specify .
* since this is the maximum buffer size we can specify .
*/
*/
PNG_INTERNAL_FUNCTION ( void , png_calculate_crc , ( png_structrp png_ptr ,
PNG_INTERNAL_FUNCTION ( void , png_calculate_crc , ( png_structrp png_ptr ,
png_const_bytep ptr , png_ size_t length ) , PNG_EMPTY ) ;
png_const_bytep ptr , size_t length ) , PNG_EMPTY ) ;
# ifdef PNG_WRITE_FLUSH_SUPPORTED
# ifdef PNG_WRITE_FLUSH_SUPPORTED
PNG_INTERNAL_FUNCTION ( void , png_flush , ( png_structrp png_ptr ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_flush , ( png_structrp png_ptr ) , PNG_EMPTY ) ;
@ -1052,6 +1152,11 @@ PNG_INTERNAL_FUNCTION(void,png_write_sRGB,(png_structrp png_ptr,
int intent ) , PNG_EMPTY ) ;
int intent ) , PNG_EMPTY ) ;
# endif
# endif
# ifdef PNG_WRITE_eXIf_SUPPORTED
PNG_INTERNAL_FUNCTION ( void , png_write_eXIf , ( png_structrp png_ptr ,
png_bytep exif , int num_exif ) , PNG_EMPTY ) ;
# endif
# ifdef PNG_WRITE_iCCP_SUPPORTED
# ifdef PNG_WRITE_iCCP_SUPPORTED
PNG_INTERNAL_FUNCTION ( void , png_write_iCCP , ( png_structrp png_ptr ,
PNG_INTERNAL_FUNCTION ( void , png_write_iCCP , ( png_structrp png_ptr ,
png_const_charp name , png_const_bytep profile ) , PNG_EMPTY ) ;
png_const_charp name , png_const_bytep profile ) , PNG_EMPTY ) ;
@ -1085,7 +1190,7 @@ PNG_INTERNAL_FUNCTION(void,png_write_hIST,(png_structrp png_ptr,
/* Chunks that have keywords */
/* Chunks that have keywords */
# ifdef PNG_WRITE_tEXt_SUPPORTED
# ifdef PNG_WRITE_tEXt_SUPPORTED
PNG_INTERNAL_FUNCTION ( void , png_write_tEXt , ( png_structrp png_ptr ,
PNG_INTERNAL_FUNCTION ( void , png_write_tEXt , ( png_structrp png_ptr ,
png_const_charp key , png_const_charp text , png_ size_t text_len ) , PNG_EMPTY ) ;
png_const_charp key , png_const_charp text , size_t text_len ) , PNG_EMPTY ) ;
# endif
# endif
# ifdef PNG_WRITE_zTXt_SUPPORTED
# ifdef PNG_WRITE_zTXt_SUPPORTED
@ -1193,6 +1298,7 @@ PNG_INTERNAL_FUNCTION(void,png_do_write_interlace,(png_row_infop row_info,
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row , ( png_structrp pp , png_row_infop
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row , ( png_structrp pp , png_row_infop
row_info , png_bytep row , png_const_bytep prev_row , int filter ) , PNG_EMPTY ) ;
row_info , png_bytep row , png_const_bytep prev_row , int filter ) , PNG_EMPTY ) ;
# if PNG_ARM_NEON_OPT > 0
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row_up_neon , ( png_row_infop row_info ,
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row_up_neon , ( png_row_infop row_info ,
png_bytep row , png_const_bytep prev_row ) , PNG_EMPTY ) ;
png_bytep row , png_const_bytep prev_row ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row_sub3_neon , ( png_row_infop
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row_sub3_neon , ( png_row_infop
@ -1207,6 +1313,56 @@ PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth3_neon,(png_row_infop
row_info , png_bytep row , png_const_bytep prev_row ) , PNG_EMPTY ) ;
row_info , png_bytep row , png_const_bytep prev_row ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row_paeth4_neon , ( png_row_infop
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row_paeth4_neon , ( png_row_infop
row_info , png_bytep row , png_const_bytep prev_row ) , PNG_EMPTY ) ;
row_info , png_bytep row , png_const_bytep prev_row ) , PNG_EMPTY ) ;
# endif
# if PNG_MIPS_MSA_OPT > 0
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row_up_msa , ( png_row_infop row_info ,
png_bytep row , png_const_bytep prev_row ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row_sub3_msa , ( png_row_infop
row_info , png_bytep row , png_const_bytep prev_row ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row_sub4_msa , ( png_row_infop
row_info , png_bytep row , png_const_bytep prev_row ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row_avg3_msa , ( png_row_infop
row_info , png_bytep row , png_const_bytep prev_row ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row_avg4_msa , ( png_row_infop
row_info , png_bytep row , png_const_bytep prev_row ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row_paeth3_msa , ( png_row_infop
row_info , png_bytep row , png_const_bytep prev_row ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row_paeth4_msa , ( png_row_infop
row_info , png_bytep row , png_const_bytep prev_row ) , PNG_EMPTY ) ;
# endif
# if PNG_POWERPC_VSX_OPT > 0
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row_up_vsx , ( png_row_infop row_info ,
png_bytep row , png_const_bytep prev_row ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row_sub3_vsx , ( png_row_infop
row_info , png_bytep row , png_const_bytep prev_row ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row_sub4_vsx , ( png_row_infop
row_info , png_bytep row , png_const_bytep prev_row ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row_avg3_vsx , ( png_row_infop
row_info , png_bytep row , png_const_bytep prev_row ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row_avg4_vsx , ( png_row_infop
row_info , png_bytep row , png_const_bytep prev_row ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row_paeth3_vsx , ( png_row_infop
row_info , png_bytep row , png_const_bytep prev_row ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row_paeth4_vsx , ( png_row_infop
row_info , png_bytep row , png_const_bytep prev_row ) , PNG_EMPTY ) ;
# endif
# if PNG_INTEL_SSE_IMPLEMENTATION > 0
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row_sub3_sse2 , ( png_row_infop
row_info , png_bytep row , png_const_bytep prev_row ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row_sub4_sse2 , ( png_row_infop
row_info , png_bytep row , png_const_bytep prev_row ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row_avg3_sse2 , ( png_row_infop
row_info , png_bytep row , png_const_bytep prev_row ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row_avg4_sse2 , ( png_row_infop
row_info , png_bytep row , png_const_bytep prev_row ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row_paeth3_sse2 , ( png_row_infop
row_info , png_bytep row , png_const_bytep prev_row ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_read_filter_row_paeth4_sse2 , ( png_row_infop
row_info , png_bytep row , png_const_bytep prev_row ) , PNG_EMPTY ) ;
# endif
/* Choose the best filter to use and filter the row data */
/* Choose the best filter to use and filter the row data */
PNG_INTERNAL_FUNCTION ( void , png_write_find_filter , ( png_structrp png_ptr ,
PNG_INTERNAL_FUNCTION ( void , png_write_find_filter , ( png_structrp png_ptr ,
@ -1234,6 +1390,14 @@ PNG_INTERNAL_FUNCTION(void,png_read_finish_row,(png_structrp png_ptr),
/* Initialize the row buffers, etc. */
/* Initialize the row buffers, etc. */
PNG_INTERNAL_FUNCTION ( void , png_read_start_row , ( png_structrp png_ptr ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_read_start_row , ( png_structrp png_ptr ) , PNG_EMPTY ) ;
# if ZLIB_VERNUM >= 0x1240
PNG_INTERNAL_FUNCTION ( int , png_zlib_inflate , ( png_structrp png_ptr , int flush ) ,
PNG_EMPTY ) ;
# define PNG_INFLATE(pp, flush) png_zlib_inflate(pp, flush)
# else /* Zlib < 1.2.4 */
# define PNG_INFLATE(pp, flush) inflate(&(pp)->zstream, flush)
# endif /* Zlib < 1.2.4 */
# ifdef PNG_READ_TRANSFORMS_SUPPORTED
# ifdef PNG_READ_TRANSFORMS_SUPPORTED
/* Optional call to update the users info structure */
/* Optional call to update the users info structure */
PNG_INTERNAL_FUNCTION ( void , png_read_transform_info , ( png_structrp png_ptr ,
PNG_INTERNAL_FUNCTION ( void , png_read_transform_info , ( png_structrp png_ptr ,
@ -1292,6 +1456,11 @@ PNG_INTERNAL_FUNCTION(void,png_handle_cHRM,(png_structrp png_ptr,
png_inforp info_ptr , png_uint_32 length ) , PNG_EMPTY ) ;
png_inforp info_ptr , png_uint_32 length ) , PNG_EMPTY ) ;
# endif
# endif
# ifdef PNG_READ_eXIf_SUPPORTED
PNG_INTERNAL_FUNCTION ( void , png_handle_eXIf , ( png_structrp png_ptr ,
png_inforp info_ptr , png_uint_32 length ) , PNG_EMPTY ) ;
# endif
# ifdef PNG_READ_gAMA_SUPPORTED
# ifdef PNG_READ_gAMA_SUPPORTED
PNG_INTERNAL_FUNCTION ( void , png_handle_gAMA , ( png_structrp png_ptr ,
PNG_INTERNAL_FUNCTION ( void , png_handle_gAMA , ( png_structrp png_ptr ,
png_inforp info_ptr , png_uint_32 length ) , PNG_EMPTY ) ;
png_inforp info_ptr , png_uint_32 length ) , PNG_EMPTY ) ;
@ -1367,9 +1536,12 @@ PNG_INTERNAL_FUNCTION(void,png_handle_zTXt,(png_structrp png_ptr,
png_inforp info_ptr , png_uint_32 length ) , PNG_EMPTY ) ;
png_inforp info_ptr , png_uint_32 length ) , PNG_EMPTY ) ;
# endif
# endif
PNG_INTERNAL_FUNCTION ( void , png_check_chunk_name , ( png_structrp png_ptr ,
PNG_INTERNAL_FUNCTION ( void , png_check_chunk_name , ( png_const_ structrp png_ptr ,
png_uint_32 chunk_name ) , PNG_EMPTY ) ;
png_uint_32 chunk_name ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_check_chunk_length , ( png_const_structrp png_ptr ,
png_uint_32 chunk_length ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_handle_unknown , ( png_structrp png_ptr ,
PNG_INTERNAL_FUNCTION ( void , png_handle_unknown , ( png_structrp png_ptr ,
png_inforp info_ptr , png_uint_32 length , int keep ) , PNG_EMPTY ) ;
png_inforp info_ptr , png_uint_32 length , int keep ) , PNG_EMPTY ) ;
/* This is the function that gets called for unknown chunks. The 'keep'
/* This is the function that gets called for unknown chunks. The 'keep'
@ -1408,17 +1580,13 @@ PNG_INTERNAL_FUNCTION(void,png_push_read_chunk,(png_structrp png_ptr,
PNG_INTERNAL_FUNCTION ( void , png_push_read_sig , ( png_structrp png_ptr ,
PNG_INTERNAL_FUNCTION ( void , png_push_read_sig , ( png_structrp png_ptr ,
png_inforp info_ptr ) , PNG_EMPTY ) ;
png_inforp info_ptr ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_push_check_crc , ( png_structrp png_ptr ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_push_check_crc , ( png_structrp png_ptr ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_push_crc_skip , ( png_structrp png_ptr ,
png_uint_32 length ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_push_crc_finish , ( png_structrp png_ptr ) ,
PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_push_save_buffer , ( png_structrp png_ptr ) ,
PNG_INTERNAL_FUNCTION ( void , png_push_save_buffer , ( png_structrp png_ptr ) ,
PNG_EMPTY ) ;
PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_push_restore_buffer , ( png_structrp png_ptr ,
PNG_INTERNAL_FUNCTION ( void , png_push_restore_buffer , ( png_structrp png_ptr ,
png_bytep buffer , png_ size_t buffer_length ) , PNG_EMPTY ) ;
png_bytep buffer , size_t buffer_length ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_push_read_IDAT , ( png_structrp png_ptr ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_push_read_IDAT , ( png_structrp png_ptr ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_process_IDAT_data , ( png_structrp png_ptr ,
PNG_INTERNAL_FUNCTION ( void , png_process_IDAT_data , ( png_structrp png_ptr ,
png_bytep buffer , png_ size_t buffer_length ) , PNG_EMPTY ) ;
png_bytep buffer , size_t buffer_length ) , PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_push_process_row , ( png_structrp png_ptr ) ,
PNG_INTERNAL_FUNCTION ( void , png_push_process_row , ( png_structrp png_ptr ) ,
PNG_EMPTY ) ;
PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( void , png_push_handle_unknown , ( png_structrp png_ptr ,
PNG_INTERNAL_FUNCTION ( void , png_push_handle_unknown , ( png_structrp png_ptr ,
@ -1507,9 +1675,11 @@ PNG_INTERNAL_FUNCTION(int,png_colorspace_set_ICC,(png_const_structrp png_ptr,
/* The 'name' is used for information only */
/* The 'name' is used for information only */
/* Routines for checking parts of an ICC profile. */
/* Routines for checking parts of an ICC profile. */
# ifdef PNG_READ_iCCP_SUPPORTED
PNG_INTERNAL_FUNCTION ( int , png_icc_check_length , ( png_const_structrp png_ptr ,
PNG_INTERNAL_FUNCTION ( int , png_icc_check_length , ( png_const_structrp png_ptr ,
png_colorspacerp colorspace , png_const_charp name ,
png_colorspacerp colorspace , png_const_charp name ,
png_uint_32 profile_length ) , PNG_EMPTY ) ;
png_uint_32 profile_length ) , PNG_EMPTY ) ;
# endif /* READ_iCCP */
PNG_INTERNAL_FUNCTION ( int , png_icc_check_header , ( png_const_structrp png_ptr ,
PNG_INTERNAL_FUNCTION ( int , png_icc_check_header , ( png_const_structrp png_ptr ,
png_colorspacerp colorspace , png_const_charp name ,
png_colorspacerp colorspace , png_const_charp name ,
png_uint_32 profile_length ,
png_uint_32 profile_length ,
@ -1686,13 +1856,13 @@ PNG_INTERNAL_FUNCTION(void,png_chunk_report,(png_const_structrp png_ptr,
# ifdef PNG_FLOATING_POINT_SUPPORTED
# ifdef PNG_FLOATING_POINT_SUPPORTED
PNG_INTERNAL_FUNCTION ( void , png_ascii_from_fp , ( png_const_structrp png_ptr ,
PNG_INTERNAL_FUNCTION ( void , png_ascii_from_fp , ( png_const_structrp png_ptr ,
png_charp ascii , png_ size_t size , double fp , unsigned int precision ) ,
png_charp ascii , size_t size , double fp , unsigned int precision ) ,
PNG_EMPTY ) ;
PNG_EMPTY ) ;
# endif /* FLOATING_POINT */
# endif /* FLOATING_POINT */
# ifdef PNG_FIXED_POINT_SUPPORTED
# ifdef PNG_FIXED_POINT_SUPPORTED
PNG_INTERNAL_FUNCTION ( void , png_ascii_from_fixed , ( png_const_structrp png_ptr ,
PNG_INTERNAL_FUNCTION ( void , png_ascii_from_fixed , ( png_const_structrp png_ptr ,
png_charp ascii , png_ size_t size , png_fixed_point fp ) , PNG_EMPTY ) ;
png_charp ascii , size_t size , png_fixed_point fp ) , PNG_EMPTY ) ;
# endif /* FIXED_POINT */
# endif /* FIXED_POINT */
# endif /* sCAL */
# endif /* sCAL */
@ -1785,7 +1955,7 @@ PNG_INTERNAL_FUNCTION(void,png_ascii_from_fixed,(png_const_structrp png_ptr,
* the problem character . ) This has not been tested within libpng .
* the problem character . ) This has not been tested within libpng .
*/
*/
PNG_INTERNAL_FUNCTION ( int , png_check_fp_number , ( png_const_charp string ,
PNG_INTERNAL_FUNCTION ( int , png_check_fp_number , ( png_const_charp string ,
png_ size_t size , int * statep , png_size_tp whereami ) , PNG_EMPTY ) ;
size_t size , int * statep , png_size_tp whereami ) , PNG_EMPTY ) ;
/* This is the same but it checks a complete string and returns true
/* This is the same but it checks a complete string and returns true
* only if it just contains a floating point number . As of 1.5 .4 this
* only if it just contains a floating point number . As of 1.5 .4 this
@ -1794,7 +1964,7 @@ PNG_INTERNAL_FUNCTION(int,png_check_fp_number,(png_const_charp string,
* for negative or zero values using the sticky flag .
* for negative or zero values using the sticky flag .
*/
*/
PNG_INTERNAL_FUNCTION ( int , png_check_fp_string , ( png_const_charp string ,
PNG_INTERNAL_FUNCTION ( int , png_check_fp_string , ( png_const_charp string ,
png_ size_t size ) , PNG_EMPTY ) ;
size_t size ) , PNG_EMPTY ) ;
# endif /* pCAL || sCAL */
# endif /* pCAL || sCAL */
# if defined(PNG_GAMMA_SUPPORTED) ||\
# if defined(PNG_GAMMA_SUPPORTED) ||\
@ -1869,7 +2039,7 @@ typedef struct png_control
png_voidp error_buf ; /* Always a jmp_buf at present. */
png_voidp error_buf ; /* Always a jmp_buf at present. */
png_const_bytep memory ; /* Memory buffer. */
png_const_bytep memory ; /* Memory buffer. */
png_ size_t size ; /* Size of the memory buffer. */
size_t size ; /* Size of the memory buffer. */
unsigned int for_write : 1 ; /* Otherwise it is a read structure */
unsigned int for_write : 1 ; /* Otherwise it is a read structure */
unsigned int owned_file : 1 ; /* We own the file in io_ptr */
unsigned int owned_file : 1 ; /* We own the file in io_ptr */
@ -1928,10 +2098,48 @@ PNG_INTERNAL_FUNCTION(void, PNG_FILTER_OPTIMIZATIONS, (png_structp png_ptr,
* the builder of libpng passes the definition of PNG_FILTER_OPTIMIZATIONS in
* the builder of libpng passes the definition of PNG_FILTER_OPTIMIZATIONS in
* CFLAGS in place of CPPFLAGS * and * uses symbol prefixing .
* CFLAGS in place of CPPFLAGS * and * uses symbol prefixing .
*/
*/
# if PNG_ARM_NEON_OPT > 0
PNG_INTERNAL_FUNCTION ( void , png_init_filter_functions_neon ,
PNG_INTERNAL_FUNCTION ( void , png_init_filter_functions_neon ,
( png_structp png_ptr , unsigned int bpp ) , PNG_EMPTY ) ;
( png_structp png_ptr , unsigned int bpp ) , PNG_EMPTY ) ;
# endif
# endif
# if PNG_MIPS_MSA_OPT > 0
PNG_INTERNAL_FUNCTION ( void , png_init_filter_functions_msa ,
( png_structp png_ptr , unsigned int bpp ) , PNG_EMPTY ) ;
# endif
# if PNG_INTEL_SSE_IMPLEMENTATION > 0
PNG_INTERNAL_FUNCTION ( void , png_init_filter_functions_sse2 ,
( png_structp png_ptr , unsigned int bpp ) , PNG_EMPTY ) ;
# endif
# endif
PNG_INTERNAL_FUNCTION ( png_uint_32 , png_check_keyword , ( png_structrp png_ptr ,
png_const_charp key , png_bytep new_key ) , PNG_EMPTY ) ;
# if PNG_ARM_NEON_IMPLEMENTATION == 1
PNG_INTERNAL_FUNCTION ( void ,
png_riffle_palette_neon ,
( png_structrp ) ,
PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( int ,
png_do_expand_palette_rgba8_neon ,
( png_structrp ,
png_row_infop ,
png_const_bytep ,
const png_bytepp ,
const png_bytepp ) ,
PNG_EMPTY ) ;
PNG_INTERNAL_FUNCTION ( int ,
png_do_expand_palette_rgb8_neon ,
( png_structrp ,
png_row_infop ,
png_const_bytep ,
const png_bytepp ,
const png_bytepp ) ,
PNG_EMPTY ) ;
# endif
/* Maintainer: Put new private prototypes here ^ */
/* Maintainer: Put new private prototypes here ^ */
# include "pngdebug.h"
# include "pngdebug.h"