From 95b90c19c968d704959e4e27480e568d5ffd33c8 Mon Sep 17 00:00:00 2001 From: vcaesar Date: Sat, 9 Dec 2017 02:16:26 +0800 Subject: [PATCH] Add mac deps and Update README.md, png_io, cgo link --- .gitignore | 1 + README.md | 7 +- README_zh.md | 8 +- base/png_io_c.h | 2 +- cdeps/mac/libpng.a | Bin 0 -> 299016 bytes cdeps/mac/png.h | 3278 ++++++++++++++++++++++++++++++++++++++++ cdeps/mac/pngconf.h | 622 ++++++++ cdeps/mac/pnglibconf.h | 218 +++ robotgo.go | 11 +- 9 files changed, 4127 insertions(+), 20 deletions(-) create mode 100644 cdeps/mac/libpng.a create mode 100644 cdeps/mac/png.h create mode 100644 cdeps/mac/pngconf.h create mode 100644 cdeps/mac/pnglibconf.h diff --git a/.gitignore b/.gitignore index 4c4af2b..8657619 100644 --- a/.gitignore +++ b/.gitignore @@ -41,6 +41,7 @@ _testmain.go # !cdeps/win64/libpng.lib # !cdeps/win64/zlib.lib *.a +!cdeps/mac/libpng.a !cdeps/win32/libpng.a !cdeps/win64/libpng.a *.la diff --git a/README.md b/README.md index 16eb358..b587548 100644 --- a/README.md +++ b/README.md @@ -39,8 +39,6 @@ This is a work in progress. Now, Please make sure Golang, GCC, zlib and libpng is installed correctly before installing RobotGo. -If you do not need bitmap, you can use `"github.com/go-vgo/robotgo/robot"` or switch to the robot branch, where there is no zlib and libpng dependency. - ### ALL: ``` Golang @@ -48,10 +46,8 @@ GCC zlib & libpng (bitmap) ``` #### For Mac OS X: - Xcode Command Line Tools ``` -brew install libpng -brew install zlib + Xcode Command Line Tools ``` #### For Windows: ``` @@ -254,7 +250,6 @@ func main() { - Update Window Handle - Support UTF-8, transitional plan: TypeStr - Try support Android, maybe support IOS -- Remove zlib/libpng dependencies ## Donate diff --git a/README_zh.md b/README_zh.md index 4b75631..1e7d358 100644 --- a/README_zh.md +++ b/README_zh.md @@ -37,19 +37,14 @@ QQ 群: 595877611 在安装 RobotGo 之前, 请确保 Golang、GCC、zlib 和 libpng 被正确安装 -如果你不需要bitmap, 你可以使用 `"github.com/go-vgo/robotgo/robot"` 或者切换到 robot 分支, 那里没有 zlib 和 libpng 依赖 - ### ALL: ``` Golang GCC -zlib & libpng (bitmap) ``` #### For Mac OS X: - Xcode Command Line Tools ``` -brew install libpng -brew install zlib + Xcode Command Line Tools ``` #### For Windows: ``` @@ -252,7 +247,6 @@ func main() { - 更新 Window Handle - 支持 UTF-8, 过渡方案: TypeStr - 尝试支持 Android, 也许支持 IOS -- 移除 zlib/libpng 依赖 ## Donate diff --git a/base/png_io_c.h b/base/png_io_c.h index 2f71f34..5aab25f 100644 --- a/base/png_io_c.h +++ b/base/png_io_c.h @@ -2,7 +2,7 @@ #include "os.h" // #include "libpng/png.c" #if defined(IS_MACOSX) - #include + #include "../cdeps/mac/png.h" #elif defined(USE_X11) #include #elif defined(IS_WINDOWS) diff --git a/cdeps/mac/libpng.a b/cdeps/mac/libpng.a new file mode 100644 index 0000000000000000000000000000000000000000..321518bccca248317df51813c9ff6ff7bf7bd7ad GIT binary patch literal 299016 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�nHow^)O2cqc~Q40V~ugCzR=@;FP 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

ig_pI_w=B3)+wGOX$xqTe_&ZeZ(F|7|OL# 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 + * + * If you just need to read a PNG file and don't want to read the documentation + * skip to the end of this file and read the section entitled 'simplified API'. + */ + +/* Version information for png.h - this should match the version in png.c */ +#define PNG_LIBPNG_VER_STRING "1.6.34" +#define PNG_HEADER_VERSION_STRING " libpng version 1.6.34 - September 29, 2017\n" + +#define PNG_LIBPNG_VER_SONUM 16 +#define PNG_LIBPNG_VER_DLLNUM 16 + +/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */ +#define PNG_LIBPNG_VER_MAJOR 1 +#define PNG_LIBPNG_VER_MINOR 6 +#define PNG_LIBPNG_VER_RELEASE 34 + +/* This should match the numeric part of the final component of + * PNG_LIBPNG_VER_STRING, omitting any leading zero: + */ + +#define PNG_LIBPNG_VER_BUILD 0 + +/* Release Status */ +#define PNG_LIBPNG_BUILD_ALPHA 1 +#define PNG_LIBPNG_BUILD_BETA 2 +#define PNG_LIBPNG_BUILD_RC 3 +#define PNG_LIBPNG_BUILD_STABLE 4 +#define PNG_LIBPNG_BUILD_RELEASE_STATUS_MASK 7 + +/* Release-Specific Flags */ +#define PNG_LIBPNG_BUILD_PATCH 8 /* Can be OR'ed with + PNG_LIBPNG_BUILD_STABLE only */ +#define PNG_LIBPNG_BUILD_PRIVATE 16 /* Cannot be OR'ed with + PNG_LIBPNG_BUILD_SPECIAL */ +#define PNG_LIBPNG_BUILD_SPECIAL 32 /* Cannot be OR'ed with + PNG_LIBPNG_BUILD_PRIVATE */ + +#define PNG_LIBPNG_BUILD_BASE_TYPE PNG_LIBPNG_BUILD_STABLE + +/* Careful here. At one time, Guy wanted to use 082, but that would be octal. + * We must not include leading zeros. + * Versions 0.7 through 1.0.0 were in the range 0 to 100 here (only + * version 1.0.0 was mis-numbered 100 instead of 10000). From + * version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release + */ +#define PNG_LIBPNG_VER 10634 /* 1.6.34 */ + +/* Library configuration: these options cannot be changed after + * the library has been built. + */ +#ifndef PNGLCONF_H +/* If pnglibconf.h is missing, you can + * copy scripts/pnglibconf.h.prebuilt to pnglibconf.h + */ +# include "pnglibconf.h" +#endif + +#ifndef PNG_VERSION_INFO_ONLY +/* Machine specific configuration. */ +# include "pngconf.h" +#endif + +/* + * Added at libpng-1.2.8 + * + * Ref MSDN: Private as priority over Special + * VS_FF_PRIVATEBUILD File *was not* built using standard release + * procedures. If this value is given, the StringFileInfo block must + * contain a PrivateBuild string. + * + * VS_FF_SPECIALBUILD File *was* built by the original company using + * standard release procedures but is a variation of the standard + * file of the same version number. If this value is given, the + * StringFileInfo block must contain a SpecialBuild string. + */ + +#ifdef PNG_USER_PRIVATEBUILD /* From pnglibconf.h */ +# define PNG_LIBPNG_BUILD_TYPE \ + (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_PRIVATE) +#else +# ifdef PNG_LIBPNG_SPECIALBUILD +# define PNG_LIBPNG_BUILD_TYPE \ + (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_SPECIAL) +# else +# define PNG_LIBPNG_BUILD_TYPE (PNG_LIBPNG_BUILD_BASE_TYPE) +# endif +#endif + +#ifndef PNG_VERSION_INFO_ONLY + +/* Inhibit C++ name-mangling for libpng functions but not for system calls. */ +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* Version information for C files, stored in png.c. This had better match + * the version above. + */ +#define png_libpng_ver png_get_header_ver(NULL) + +/* This file is arranged in several sections: + * + * 1. [omitted] + * 2. Any configuration options that can be specified by for the application + * code when it is built. (Build time configuration is in pnglibconf.h) + * 3. Type definitions (base types are defined in pngconf.h), structure + * definitions. + * 4. Exported library functions. + * 5. Simplified API. + * 6. Implementation options. + * + * The library source code has additional files (principally pngpriv.h) that + * allow configuration of the library. + */ + +/* Section 1: [omitted] */ + +/* Section 2: run time configuration + * See pnglibconf.h for build time configuration + * + * Run time configuration allows the application to choose between + * implementations of certain arithmetic APIs. The default is set + * at build time and recorded in pnglibconf.h, but it is safe to + * override these (and only these) settings. Note that this won't + * change what the library does, only application code, and the + * settings can (and probably should) be made on a per-file basis + * by setting the #defines before including png.h + * + * Use macros to read integers from PNG data or use the exported + * functions? + * PNG_USE_READ_MACROS: use the macros (see below) Note that + * the macros evaluate their argument multiple times. + * PNG_NO_USE_READ_MACROS: call the relevant library function. + * + * Use the alternative algorithm for compositing alpha samples that + * does not use division? + * PNG_READ_COMPOSITE_NODIV_SUPPORTED: use the 'no division' + * algorithm. + * PNG_NO_READ_COMPOSITE_NODIV: use the 'division' algorithm. + * + * How to handle benign errors if PNG_ALLOW_BENIGN_ERRORS is + * false? + * PNG_ALLOW_BENIGN_ERRORS: map calls to the benign error + * APIs to png_warning. + * Otherwise the calls are mapped to png_error. + */ + +/* Section 3: type definitions, including structures and compile time + * constants. + * See pngconf.h for base types that vary by machine/system + */ + +/* This triggers a compiler error in png.c, if png.c and png.h + * do not agree upon the version number. + */ +typedef char* png_libpng_version_1_6_34; + +/* Basic control structions. Read libpng-manual.txt or libpng.3 for more info. + * + * png_struct is the cache of information used while reading or writing a single + * PNG file. One of these is always required, although the simplified API + * (below) hides the creation and destruction of it. + */ +typedef struct png_struct_def png_struct; +typedef const png_struct * png_const_structp; +typedef png_struct * png_structp; +typedef png_struct * * png_structpp; + +/* png_info contains information read from or to be written to a PNG file. One + * or more of these must exist while reading or creating a PNG file. The + * information is not used by libpng during read but is used to control what + * gets written when a PNG file is created. "png_get_" function calls read + * information during read and "png_set_" functions calls write information + * when creating a PNG. + * been moved into a separate header file that is not accessible to + * applications. Read libpng-manual.txt or libpng.3 for more info. + */ +typedef struct png_info_def png_info; +typedef png_info * png_infop; +typedef const png_info * png_const_infop; +typedef png_info * * png_infopp; + +/* Types with names ending 'p' are pointer types. The corresponding types with + * names ending 'rp' are identical pointer types except that the pointer is + * marked 'restrict', which means that it is the only pointer to the object + * passed to the function. Applications should not use the 'restrict' types; + * it is always valid to pass 'p' to a pointer with a function argument of the + * corresponding 'rp' type. Different compilers have different rules with + * regard to type matching in the presence of 'restrict'. For backward + * compatibility libpng callbacks never have 'restrict' in their parameters and, + * consequentially, writing portable application code is extremely difficult if + * an attempt is made to use 'restrict'. + */ +typedef png_struct * PNG_RESTRICT png_structrp; +typedef const png_struct * PNG_RESTRICT png_const_structrp; +typedef png_info * PNG_RESTRICT png_inforp; +typedef const png_info * PNG_RESTRICT png_const_inforp; + +/* Three color definitions. The order of the red, green, and blue, (and the + * exact size) is not important, although the size of the fields need to + * be png_byte or png_uint_16 (as defined below). + */ +typedef struct png_color_struct +{ + png_byte red; + png_byte green; + png_byte blue; +} png_color; +typedef png_color * png_colorp; +typedef const png_color * png_const_colorp; +typedef png_color * * png_colorpp; + +typedef struct png_color_16_struct +{ + png_byte index; /* used for palette files */ + png_uint_16 red; /* for use in red green blue files */ + png_uint_16 green; + png_uint_16 blue; + png_uint_16 gray; /* for use in grayscale files */ +} png_color_16; +typedef png_color_16 * png_color_16p; +typedef const png_color_16 * png_const_color_16p; +typedef png_color_16 * * png_color_16pp; + +typedef struct png_color_8_struct +{ + png_byte red; /* for use in red green blue files */ + png_byte green; + png_byte blue; + png_byte gray; /* for use in grayscale files */ + png_byte alpha; /* for alpha channel files */ +} png_color_8; +typedef png_color_8 * png_color_8p; +typedef const png_color_8 * png_const_color_8p; +typedef png_color_8 * * png_color_8pp; + +/* + * The following two structures are used for the in-core representation + * of sPLT chunks. + */ +typedef struct png_sPLT_entry_struct +{ + png_uint_16 red; + png_uint_16 green; + png_uint_16 blue; + png_uint_16 alpha; + png_uint_16 frequency; +} png_sPLT_entry; +typedef png_sPLT_entry * png_sPLT_entryp; +typedef const png_sPLT_entry * png_const_sPLT_entryp; +typedef png_sPLT_entry * * png_sPLT_entrypp; + +/* When the depth of the sPLT palette is 8 bits, the color and alpha samples + * occupy the LSB of their respective members, and the MSB of each member + * is zero-filled. The frequency member always occupies the full 16 bits. + */ + +typedef struct png_sPLT_struct +{ + png_charp name; /* palette name */ + png_byte depth; /* depth of palette samples */ + png_sPLT_entryp entries; /* palette entries */ + png_int_32 nentries; /* number of palette entries */ +} png_sPLT_t; +typedef png_sPLT_t * png_sPLT_tp; +typedef const png_sPLT_t * png_const_sPLT_tp; +typedef png_sPLT_t * * png_sPLT_tpp; + +#ifdef PNG_TEXT_SUPPORTED +/* png_text holds the contents of a text/ztxt/itxt chunk in a PNG file, + * and whether that contents is compressed or not. The "key" field + * points to a regular zero-terminated C string. The "text" fields can be a + * regular C string, an empty string, or a NULL pointer. + * However, the structure returned by png_get_text() will always contain + * the "text" field as a regular zero-terminated C string (possibly + * empty), never a NULL pointer, so it can be safely used in printf() and + * other string-handling functions. Note that the "itxt_length", "lang", and + * "lang_key" members of the structure only exist when the library is built + * with iTXt chunk support. Prior to libpng-1.4.0 the library was built by + * default without iTXt support. Also note that when iTXt *is* supported, + * the "lang" and "lang_key" fields contain NULL pointers when the + * "compression" field contains * PNG_TEXT_COMPRESSION_NONE or + * PNG_TEXT_COMPRESSION_zTXt. Note that the "compression value" is not the + * same as what appears in the PNG tEXt/zTXt/iTXt chunk's "compression flag" + * which is always 0 or 1, or its "compression method" which is always 0. + */ +typedef struct png_text_struct +{ + int compression; /* compression value: + -1: tEXt, none + 0: zTXt, deflate + 1: iTXt, none + 2: iTXt, deflate */ + png_charp key; /* keyword, 1-79 character description of "text" */ + png_charp text; /* comment, may be an empty string (ie "") + or a NULL pointer */ + png_size_t text_length; /* length of the text string */ + png_size_t itxt_length; /* length of the itxt string */ + png_charp lang; /* language code, 0-79 characters + or a NULL pointer */ + png_charp lang_key; /* keyword translated UTF-8 string, 0 or more + chars or a NULL pointer */ +} png_text; +typedef png_text * png_textp; +typedef const png_text * png_const_textp; +typedef png_text * * png_textpp; +#endif + +/* Supported compression types for text in PNG files (tEXt, and zTXt). + * The values of the PNG_TEXT_COMPRESSION_ defines should NOT be changed. */ +#define PNG_TEXT_COMPRESSION_NONE_WR -3 +#define PNG_TEXT_COMPRESSION_zTXt_WR -2 +#define PNG_TEXT_COMPRESSION_NONE -1 +#define PNG_TEXT_COMPRESSION_zTXt 0 +#define PNG_ITXT_COMPRESSION_NONE 1 +#define PNG_ITXT_COMPRESSION_zTXt 2 +#define PNG_TEXT_COMPRESSION_LAST 3 /* Not a valid value */ + +/* png_time is a way to hold the time in an machine independent way. + * Two conversions are provided, both from time_t and struct tm. There + * is no portable way to convert to either of these structures, as far + * as I know. If you know of a portable way, send it to me. As a side + * note - PNG has always been Year 2000 compliant! + */ +typedef struct png_time_struct +{ + png_uint_16 year; /* full year, as in, 1995 */ + png_byte month; /* month of year, 1 - 12 */ + png_byte day; /* day of month, 1 - 31 */ + png_byte hour; /* hour of day, 0 - 23 */ + png_byte minute; /* minute of hour, 0 - 59 */ + png_byte second; /* second of minute, 0 - 60 (for leap seconds) */ +} png_time; +typedef png_time * png_timep; +typedef const png_time * png_const_timep; +typedef png_time * * png_timepp; + +#if defined(PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED) ||\ + defined(PNG_USER_CHUNKS_SUPPORTED) +/* png_unknown_chunk is a structure to hold queued chunks for which there is + * no specific support. The idea is that we can use this to queue + * up private chunks for output even though the library doesn't actually + * know about their semantics. + * + * The data in the structure is set by libpng on read and used on write. + */ +typedef struct png_unknown_chunk_t +{ + png_byte name[5]; /* Textual chunk name with '\0' terminator */ + png_byte *data; /* Data, should not be modified on read! */ + png_size_t size; + + /* On write 'location' must be set using the flag values listed below. + * Notice that on read it is set by libpng however the values stored have + * more bits set than are listed below. Always treat the value as a + * bitmask. On write set only one bit - setting multiple bits may cause the + * chunk to be written in multiple places. + */ + png_byte location; /* mode of operation at read time */ +} +png_unknown_chunk; + +typedef png_unknown_chunk * png_unknown_chunkp; +typedef const png_unknown_chunk * png_const_unknown_chunkp; +typedef png_unknown_chunk * * png_unknown_chunkpp; +#endif + +/* Flag values for the unknown chunk location byte. */ +#define PNG_HAVE_IHDR 0x01 +#define PNG_HAVE_PLTE 0x02 +#define PNG_AFTER_IDAT 0x08 + +/* Maximum positive integer used in PNG is (2^31)-1 */ +#define PNG_UINT_31_MAX ((png_uint_32)0x7fffffffL) +#define PNG_UINT_32_MAX ((png_uint_32)(-1)) +#define PNG_SIZE_MAX ((png_size_t)(-1)) + +/* These are constants for fixed point values encoded in the + * PNG specification manner (x100000) + */ +#define PNG_FP_1 100000 +#define PNG_FP_HALF 50000 +#define PNG_FP_MAX ((png_fixed_point)0x7fffffffL) +#define PNG_FP_MIN (-PNG_FP_MAX) + +/* These describe the color_type field in png_info. */ +/* color type masks */ +#define PNG_COLOR_MASK_PALETTE 1 +#define PNG_COLOR_MASK_COLOR 2 +#define PNG_COLOR_MASK_ALPHA 4 + +/* color types. Note that not all combinations are legal */ +#define PNG_COLOR_TYPE_GRAY 0 +#define PNG_COLOR_TYPE_PALETTE (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE) +#define PNG_COLOR_TYPE_RGB (PNG_COLOR_MASK_COLOR) +#define PNG_COLOR_TYPE_RGB_ALPHA (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA) +#define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA) +/* aliases */ +#define PNG_COLOR_TYPE_RGBA PNG_COLOR_TYPE_RGB_ALPHA +#define PNG_COLOR_TYPE_GA PNG_COLOR_TYPE_GRAY_ALPHA + +/* This is for compression type. PNG 1.0-1.2 only define the single type. */ +#define PNG_COMPRESSION_TYPE_BASE 0 /* Deflate method 8, 32K window */ +#define PNG_COMPRESSION_TYPE_DEFAULT PNG_COMPRESSION_TYPE_BASE + +/* This is for filter type. PNG 1.0-1.2 only define the single type. */ +#define PNG_FILTER_TYPE_BASE 0 /* Single row per-byte filtering */ +#define PNG_INTRAPIXEL_DIFFERENCING 64 /* Used only in MNG datastreams */ +#define PNG_FILTER_TYPE_DEFAULT PNG_FILTER_TYPE_BASE + +/* These are for the interlacing type. These values should NOT be changed. */ +#define PNG_INTERLACE_NONE 0 /* Non-interlaced image */ +#define PNG_INTERLACE_ADAM7 1 /* Adam7 interlacing */ +#define PNG_INTERLACE_LAST 2 /* Not a valid value */ + +/* These are for the oFFs chunk. These values should NOT be changed. */ +#define PNG_OFFSET_PIXEL 0 /* Offset in pixels */ +#define PNG_OFFSET_MICROMETER 1 /* Offset in micrometers (1/10^6 meter) */ +#define PNG_OFFSET_LAST 2 /* Not a valid value */ + +/* These are for the pCAL chunk. These values should NOT be changed. */ +#define PNG_EQUATION_LINEAR 0 /* Linear transformation */ +#define PNG_EQUATION_BASE_E 1 /* Exponential base e transform */ +#define PNG_EQUATION_ARBITRARY 2 /* Arbitrary base exponential transform */ +#define PNG_EQUATION_HYPERBOLIC 3 /* Hyperbolic sine transformation */ +#define PNG_EQUATION_LAST 4 /* Not a valid value */ + +/* These are for the sCAL chunk. These values should NOT be changed. */ +#define PNG_SCALE_UNKNOWN 0 /* unknown unit (image scale) */ +#define PNG_SCALE_METER 1 /* meters per pixel */ +#define PNG_SCALE_RADIAN 2 /* radians per pixel */ +#define PNG_SCALE_LAST 3 /* Not a valid value */ + +/* These are for the pHYs chunk. These values should NOT be changed. */ +#define PNG_RESOLUTION_UNKNOWN 0 /* pixels/unknown unit (aspect ratio) */ +#define PNG_RESOLUTION_METER 1 /* pixels/meter */ +#define PNG_RESOLUTION_LAST 2 /* Not a valid value */ + +/* These are for the sRGB chunk. These values should NOT be changed. */ +#define PNG_sRGB_INTENT_PERCEPTUAL 0 +#define PNG_sRGB_INTENT_RELATIVE 1 +#define PNG_sRGB_INTENT_SATURATION 2 +#define PNG_sRGB_INTENT_ABSOLUTE 3 +#define PNG_sRGB_INTENT_LAST 4 /* Not a valid value */ + +/* This is for text chunks */ +#define PNG_KEYWORD_MAX_LENGTH 79 + +/* Maximum number of entries in PLTE/sPLT/tRNS arrays */ +#define PNG_MAX_PALETTE_LENGTH 256 + +/* These determine if an ancillary chunk's data has been successfully read + * from the PNG header, or if the application has filled in the corresponding + * data in the info_struct to be written into the output file. The values + * of the PNG_INFO_ defines should NOT be changed. + */ +#define PNG_INFO_gAMA 0x0001U +#define PNG_INFO_sBIT 0x0002U +#define PNG_INFO_cHRM 0x0004U +#define PNG_INFO_PLTE 0x0008U +#define PNG_INFO_tRNS 0x0010U +#define PNG_INFO_bKGD 0x0020U +#define PNG_INFO_hIST 0x0040U +#define PNG_INFO_pHYs 0x0080U +#define PNG_INFO_oFFs 0x0100U +#define PNG_INFO_tIME 0x0200U +#define PNG_INFO_pCAL 0x0400U +#define PNG_INFO_sRGB 0x0800U /* GR-P, 0.96a */ +#define PNG_INFO_iCCP 0x1000U /* ESR, 1.0.6 */ +#define PNG_INFO_sPLT 0x2000U /* ESR, 1.0.6 */ +#define PNG_INFO_sCAL 0x4000U /* ESR, 1.0.6 */ +#define PNG_INFO_IDAT 0x8000U /* ESR, 1.0.6 */ +#define PNG_INFO_eXIf 0x10000U /* GR-P, 1.6.31 */ + +/* This is used for the transformation routines, as some of them + * change these values for the row. It also should enable using + * the routines for other purposes. + */ +typedef struct png_row_info_struct +{ + png_uint_32 width; /* width of row */ + png_size_t rowbytes; /* number of bytes in row */ + png_byte color_type; /* color type of row */ + png_byte bit_depth; /* bit depth of row */ + png_byte channels; /* number of channels (1, 2, 3, or 4) */ + png_byte pixel_depth; /* bits per pixel (depth * channels) */ +} png_row_info; + +typedef png_row_info * png_row_infop; +typedef png_row_info * * png_row_infopp; + +/* These are the function types for the I/O functions and for the functions + * that allow the user to override the default I/O functions with his or her + * own. The png_error_ptr type should match that of user-supplied warning + * and error functions, while the png_rw_ptr type should match that of the + * user read/write data functions. Note that the 'write' function must not + * modify the buffer it is passed. The 'read' function, on the other hand, is + * expected to return the read data in the buffer. + */ +typedef PNG_CALLBACK(void, *png_error_ptr, (png_structp, png_const_charp)); +typedef PNG_CALLBACK(void, *png_rw_ptr, (png_structp, png_bytep, png_size_t)); +typedef PNG_CALLBACK(void, *png_flush_ptr, (png_structp)); +typedef PNG_CALLBACK(void, *png_read_status_ptr, (png_structp, png_uint_32, + int)); +typedef PNG_CALLBACK(void, *png_write_status_ptr, (png_structp, png_uint_32, + int)); + +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED +typedef PNG_CALLBACK(void, *png_progressive_info_ptr, (png_structp, png_infop)); +typedef PNG_CALLBACK(void, *png_progressive_end_ptr, (png_structp, png_infop)); + +/* The following callback receives png_uint_32 row_number, int pass for the + * png_bytep data of the row. When transforming an interlaced image the + * row number is the row number within the sub-image of the interlace pass, so + * the value will increase to the height of the sub-image (not the full image) + * then reset to 0 for the next pass. + * + * Use PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to + * find the output pixel (x,y) given an interlaced sub-image pixel + * (row,col,pass). (See below for these macros.) + */ +typedef PNG_CALLBACK(void, *png_progressive_row_ptr, (png_structp, png_bytep, + png_uint_32, int)); +#endif + +#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ + defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) +typedef PNG_CALLBACK(void, *png_user_transform_ptr, (png_structp, png_row_infop, + png_bytep)); +#endif + +#ifdef PNG_USER_CHUNKS_SUPPORTED +typedef PNG_CALLBACK(int, *png_user_chunk_ptr, (png_structp, + png_unknown_chunkp)); +#endif +#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED +/* not used anywhere */ +/* typedef PNG_CALLBACK(void, *png_unknown_chunk_ptr, (png_structp)); */ +#endif + +#ifdef PNG_SETJMP_SUPPORTED +/* This must match the function definition in , and the application + * must include this before png.h to obtain the definition of jmp_buf. The + * function is required to be PNG_NORETURN, but this is not checked. If the + * function does return the application will crash via an abort() or similar + * system level call. + * + * If you get a warning here while building the library you may need to make + * changes to ensure that pnglibconf.h records the calling convention used by + * your compiler. This may be very difficult - try using a different compiler + * to build the library! + */ +PNG_FUNCTION(void, (PNGCAPI *png_longjmp_ptr), PNGARG((jmp_buf, int)), typedef); +#endif + +/* Transform masks for the high-level interface */ +#define PNG_TRANSFORM_IDENTITY 0x0000 /* read and write */ +#define PNG_TRANSFORM_STRIP_16 0x0001 /* read only */ +#define PNG_TRANSFORM_STRIP_ALPHA 0x0002 /* read only */ +#define PNG_TRANSFORM_PACKING 0x0004 /* read and write */ +#define PNG_TRANSFORM_PACKSWAP 0x0008 /* read and write */ +#define PNG_TRANSFORM_EXPAND 0x0010 /* read only */ +#define PNG_TRANSFORM_INVERT_MONO 0x0020 /* read and write */ +#define PNG_TRANSFORM_SHIFT 0x0040 /* read and write */ +#define PNG_TRANSFORM_BGR 0x0080 /* read and write */ +#define PNG_TRANSFORM_SWAP_ALPHA 0x0100 /* read and write */ +#define PNG_TRANSFORM_SWAP_ENDIAN 0x0200 /* read and write */ +#define PNG_TRANSFORM_INVERT_ALPHA 0x0400 /* read and write */ +#define PNG_TRANSFORM_STRIP_FILLER 0x0800 /* write only */ +/* Added to libpng-1.2.34 */ +#define PNG_TRANSFORM_STRIP_FILLER_BEFORE PNG_TRANSFORM_STRIP_FILLER +#define PNG_TRANSFORM_STRIP_FILLER_AFTER 0x1000 /* write only */ +/* Added to libpng-1.4.0 */ +#define PNG_TRANSFORM_GRAY_TO_RGB 0x2000 /* read only */ +/* Added to libpng-1.5.4 */ +#define PNG_TRANSFORM_EXPAND_16 0x4000 /* read only */ +#if INT_MAX >= 0x8000 /* else this might break */ +#define PNG_TRANSFORM_SCALE_16 0x8000 /* read only */ +#endif + +/* Flags for MNG supported features */ +#define PNG_FLAG_MNG_EMPTY_PLTE 0x01 +#define PNG_FLAG_MNG_FILTER_64 0x04 +#define PNG_ALL_MNG_FEATURES 0x05 + +/* NOTE: prior to 1.5 these functions had no 'API' style declaration, + * this allowed the zlib default functions to be used on Windows + * platforms. In 1.5 the zlib default malloc (which just calls malloc and + * ignores the first argument) should be completely compatible with the + * following. + */ +typedef PNG_CALLBACK(png_voidp, *png_malloc_ptr, (png_structp, + png_alloc_size_t)); +typedef PNG_CALLBACK(void, *png_free_ptr, (png_structp, png_voidp)); + +/* Section 4: exported functions + * Here are the function definitions most commonly used. This is not + * the place to find out how to use libpng. See libpng-manual.txt for the + * full explanation, see example.c for the summary. This just provides + * a simple one line description of the use of each function. + * + * The PNG_EXPORT() and PNG_EXPORTA() macros used below are defined in + * pngconf.h and in the *.dfn files in the scripts directory. + * + * PNG_EXPORT(ordinal, type, name, (args)); + * + * ordinal: ordinal that is used while building + * *.def files. The ordinal value is only + * relevant when preprocessing png.h with + * the *.dfn files for building symbol table + * entries, and are removed by pngconf.h. + * type: return type of the function + * name: function name + * args: function arguments, with types + * + * When we wish to append attributes to a function prototype we use + * the PNG_EXPORTA() macro instead. + * + * PNG_EXPORTA(ordinal, type, name, (args), attributes); + * + * ordinal, type, name, and args: same as in PNG_EXPORT(). + * attributes: function attributes + */ + +/* Returns the version number of the library */ +PNG_EXPORT(1, png_uint_32, png_access_version_number, (void)); + +/* Tell lib we have already handled the first magic bytes. + * Handling more than 8 bytes from the beginning of the file is an error. + */ +PNG_EXPORT(2, void, png_set_sig_bytes, (png_structrp png_ptr, int num_bytes)); + +/* Check sig[start] through sig[start + num_to_check - 1] to see if it's a + * PNG file. Returns zero if the supplied bytes match the 8-byte PNG + * signature, and non-zero otherwise. Having num_to_check == 0 or + * start > 7 will always fail (ie return non-zero). + */ +PNG_EXPORT(3, int, png_sig_cmp, (png_const_bytep sig, png_size_t start, + png_size_t num_to_check)); + +/* Simple signature checking function. This is the same as calling + * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n). + */ +#define png_check_sig(sig, n) !png_sig_cmp((sig), 0, (n)) + +/* Allocate and initialize png_ptr struct for reading, and any other memory. */ +PNG_EXPORTA(4, png_structp, png_create_read_struct, + (png_const_charp user_png_ver, png_voidp error_ptr, + png_error_ptr error_fn, png_error_ptr warn_fn), + PNG_ALLOCATED); + +/* Allocate and initialize png_ptr struct for writing, and any other memory */ +PNG_EXPORTA(5, png_structp, png_create_write_struct, + (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, + png_error_ptr warn_fn), + PNG_ALLOCATED); + +PNG_EXPORT(6, png_size_t, png_get_compression_buffer_size, + (png_const_structrp png_ptr)); + +PNG_EXPORT(7, void, png_set_compression_buffer_size, (png_structrp png_ptr, + png_size_t size)); + +/* Moved from pngconf.h in 1.4.0 and modified to ensure setjmp/longjmp + * match up. + */ +#ifdef PNG_SETJMP_SUPPORTED +/* This function returns the jmp_buf built in to *png_ptr. It must be + * supplied with an appropriate 'longjmp' function to use on that jmp_buf + * unless the default error function is overridden in which case NULL is + * acceptable. The size of the jmp_buf is checked against the actual size + * allocated by the library - the call will return NULL on a mismatch + * indicating an ABI mismatch. + */ +PNG_EXPORT(8, jmp_buf*, png_set_longjmp_fn, (png_structrp png_ptr, + png_longjmp_ptr longjmp_fn, size_t jmp_buf_size)); +# define png_jmpbuf(png_ptr) \ + (*png_set_longjmp_fn((png_ptr), longjmp, (sizeof (jmp_buf)))) +#else +# define png_jmpbuf(png_ptr) \ + (LIBPNG_WAS_COMPILED_WITH__PNG_NO_SETJMP) +#endif +/* This function should be used by libpng applications in place of + * longjmp(png_ptr->jmpbuf, val). If longjmp_fn() has been set, it + * will use it; otherwise it will call PNG_ABORT(). This function was + * added in libpng-1.5.0. + */ +PNG_EXPORTA(9, void, png_longjmp, (png_const_structrp png_ptr, int val), + PNG_NORETURN); + +#ifdef PNG_READ_SUPPORTED +/* Reset the compression stream */ +PNG_EXPORTA(10, int, png_reset_zstream, (png_structrp png_ptr), PNG_DEPRECATED); +#endif + +/* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */ +#ifdef PNG_USER_MEM_SUPPORTED +PNG_EXPORTA(11, png_structp, png_create_read_struct_2, + (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, + png_error_ptr warn_fn, + png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn), + PNG_ALLOCATED); +PNG_EXPORTA(12, png_structp, png_create_write_struct_2, + (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn, + png_error_ptr warn_fn, + png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn), + PNG_ALLOCATED); +#endif + +/* Write the PNG file signature. */ +PNG_EXPORT(13, void, png_write_sig, (png_structrp png_ptr)); + +/* Write a PNG chunk - size, type, (optional) data, CRC. */ +PNG_EXPORT(14, void, png_write_chunk, (png_structrp png_ptr, png_const_bytep + chunk_name, png_const_bytep data, png_size_t length)); + +/* Write the start of a PNG chunk - length and chunk name. */ +PNG_EXPORT(15, void, png_write_chunk_start, (png_structrp png_ptr, + png_const_bytep chunk_name, png_uint_32 length)); + +/* Write the data of a PNG chunk started with png_write_chunk_start(). */ +PNG_EXPORT(16, void, png_write_chunk_data, (png_structrp png_ptr, + png_const_bytep data, png_size_t length)); + +/* Finish a chunk started with png_write_chunk_start() (includes CRC). */ +PNG_EXPORT(17, void, png_write_chunk_end, (png_structrp png_ptr)); + +/* Allocate and initialize the info structure */ +PNG_EXPORTA(18, png_infop, png_create_info_struct, (png_const_structrp png_ptr), + PNG_ALLOCATED); + +/* DEPRECATED: this function allowed init structures to be created using the + * default allocation method (typically malloc). Use is deprecated in 1.6.0 and + * the API will be removed in the future. + */ +PNG_EXPORTA(19, void, png_info_init_3, (png_infopp info_ptr, + png_size_t png_info_struct_size), PNG_DEPRECATED); + +/* Writes all the PNG information before the image. */ +PNG_EXPORT(20, void, png_write_info_before_PLTE, + (png_structrp png_ptr, png_const_inforp info_ptr)); +PNG_EXPORT(21, void, png_write_info, + (png_structrp png_ptr, png_const_inforp info_ptr)); + +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +/* Read the information before the actual image data. */ +PNG_EXPORT(22, void, png_read_info, + (png_structrp png_ptr, png_inforp info_ptr)); +#endif + +#ifdef PNG_TIME_RFC1123_SUPPORTED + /* Convert to a US string format: there is no localization support in this + * routine. The original implementation used a 29 character buffer in + * png_struct, this will be removed in future versions. + */ +#if PNG_LIBPNG_VER < 10700 +/* To do: remove this from libpng17 (and from libpng17/png.c and pngstruct.h) */ +PNG_EXPORTA(23, png_const_charp, png_convert_to_rfc1123, (png_structrp png_ptr, + png_const_timep ptime),PNG_DEPRECATED); +#endif +PNG_EXPORT(241, int, png_convert_to_rfc1123_buffer, (char out[29], + png_const_timep ptime)); +#endif + +#ifdef PNG_CONVERT_tIME_SUPPORTED +/* Convert from a struct tm to png_time */ +PNG_EXPORT(24, void, png_convert_from_struct_tm, (png_timep ptime, + const struct tm * ttime)); + +/* Convert from time_t to png_time. Uses gmtime() */ +PNG_EXPORT(25, void, png_convert_from_time_t, (png_timep ptime, time_t ttime)); +#endif /* CONVERT_tIME */ + +#ifdef PNG_READ_EXPAND_SUPPORTED +/* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */ +PNG_EXPORT(26, void, png_set_expand, (png_structrp png_ptr)); +PNG_EXPORT(27, void, png_set_expand_gray_1_2_4_to_8, (png_structrp png_ptr)); +PNG_EXPORT(28, void, png_set_palette_to_rgb, (png_structrp png_ptr)); +PNG_EXPORT(29, void, png_set_tRNS_to_alpha, (png_structrp png_ptr)); +#endif + +#ifdef PNG_READ_EXPAND_16_SUPPORTED +/* Expand to 16-bit channels, forces conversion of palette to RGB and expansion + * of a tRNS chunk if present. + */ +PNG_EXPORT(221, void, png_set_expand_16, (png_structrp png_ptr)); +#endif + +#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) +/* Use blue, green, red order for pixels. */ +PNG_EXPORT(30, void, png_set_bgr, (png_structrp png_ptr)); +#endif + +#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED +/* Expand the grayscale to 24-bit RGB if necessary. */ +PNG_EXPORT(31, void, png_set_gray_to_rgb, (png_structrp png_ptr)); +#endif + +#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED +/* Reduce RGB to grayscale. */ +#define PNG_ERROR_ACTION_NONE 1 +#define PNG_ERROR_ACTION_WARN 2 +#define PNG_ERROR_ACTION_ERROR 3 +#define PNG_RGB_TO_GRAY_DEFAULT (-1)/*for red/green coefficients*/ + +PNG_FP_EXPORT(32, void, png_set_rgb_to_gray, (png_structrp png_ptr, + int error_action, double red, double green)) +PNG_FIXED_EXPORT(33, void, png_set_rgb_to_gray_fixed, (png_structrp png_ptr, + int error_action, png_fixed_point red, png_fixed_point green)) + +PNG_EXPORT(34, png_byte, png_get_rgb_to_gray_status, (png_const_structrp + png_ptr)); +#endif + +#ifdef PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED +PNG_EXPORT(35, void, png_build_grayscale_palette, (int bit_depth, + png_colorp palette)); +#endif + +#ifdef PNG_READ_ALPHA_MODE_SUPPORTED +/* How the alpha channel is interpreted - this affects how the color channels + * of a PNG file are returned to the calling application when an alpha channel, + * or a tRNS chunk in a palette file, is present. + * + * This has no effect on the way pixels are written into a PNG output + * datastream. The color samples in a PNG datastream are never premultiplied + * with the alpha samples. + * + * The default is to return data according to the PNG specification: the alpha + * channel is a linear measure of the contribution of the pixel to the + * corresponding composited pixel, and the color channels are unassociated + * (not premultiplied). The gamma encoded color channels must be scaled + * according to the contribution and to do this it is necessary to undo + * the encoding, scale the color values, perform the composition and reencode + * the values. This is the 'PNG' mode. + * + * The alternative is to 'associate' the alpha with the color information by + * storing color channel values that have been scaled by the alpha. + * image. These are the 'STANDARD', 'ASSOCIATED' or 'PREMULTIPLIED' modes + * (the latter being the two common names for associated alpha color channels). + * + * For the 'OPTIMIZED' mode, a pixel is treated as opaque only if the alpha + * value is equal to the maximum value. + * + * The final choice is to gamma encode the alpha channel as well. This is + * broken because, in practice, no implementation that uses this choice + * correctly undoes the encoding before handling alpha composition. Use this + * choice only if other serious errors in the software or hardware you use + * mandate it; the typical serious error is for dark halos to appear around + * opaque areas of the composited PNG image because of arithmetic overflow. + * + * The API function png_set_alpha_mode specifies which of these choices to use + * with an enumerated 'mode' value and the gamma of the required output: + */ +#define PNG_ALPHA_PNG 0 /* according to the PNG standard */ +#define PNG_ALPHA_STANDARD 1 /* according to Porter/Duff */ +#define PNG_ALPHA_ASSOCIATED 1 /* as above; this is the normal practice */ +#define PNG_ALPHA_PREMULTIPLIED 1 /* as above */ +#define PNG_ALPHA_OPTIMIZED 2 /* 'PNG' for opaque pixels, else 'STANDARD' */ +#define PNG_ALPHA_BROKEN 3 /* the alpha channel is gamma encoded */ + +PNG_FP_EXPORT(227, void, png_set_alpha_mode, (png_structrp png_ptr, int mode, + double output_gamma)) +PNG_FIXED_EXPORT(228, void, png_set_alpha_mode_fixed, (png_structrp png_ptr, + int mode, png_fixed_point output_gamma)) +#endif + +#if defined(PNG_GAMMA_SUPPORTED) || defined(PNG_READ_ALPHA_MODE_SUPPORTED) +/* The output_gamma value is a screen gamma in libpng terminology: it expresses + * how to decode the output values, not how they are encoded. + */ +#define PNG_DEFAULT_sRGB -1 /* sRGB gamma and color space */ +#define PNG_GAMMA_MAC_18 -2 /* Old Mac '1.8' gamma and color space */ +#define PNG_GAMMA_sRGB 220000 /* Television standards--matches sRGB gamma */ +#define PNG_GAMMA_LINEAR PNG_FP_1 /* Linear */ +#endif + +/* The following are examples of calls to png_set_alpha_mode to achieve the + * required overall gamma correction and, where necessary, alpha + * premultiplication. + * + * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB); + * This is the default libpng handling of the alpha channel - it is not + * pre-multiplied into the color components. In addition the call states + * that the output is for a sRGB system and causes all PNG files without gAMA + * chunks to be assumed to be encoded using sRGB. + * + * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC); + * In this case the output is assumed to be something like an sRGB conformant + * display preceeded by a power-law lookup table of power 1.45. This is how + * early Mac systems behaved. + * + * png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_GAMMA_LINEAR); + * This is the classic Jim Blinn approach and will work in academic + * environments where everything is done by the book. It has the shortcoming + * of assuming that input PNG data with no gamma information is linear - this + * is unlikely to be correct unless the PNG files where generated locally. + * Most of the time the output precision will be so low as to show + * significant banding in dark areas of the image. + * + * png_set_expand_16(pp); + * png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_DEFAULT_sRGB); + * This is a somewhat more realistic Jim Blinn inspired approach. PNG files + * are assumed to have the sRGB encoding if not marked with a gamma value and + * the output is always 16 bits per component. This permits accurate scaling + * and processing of the data. If you know that your input PNG files were + * generated locally you might need to replace PNG_DEFAULT_sRGB with the + * correct value for your system. + * + * png_set_alpha_mode(pp, PNG_ALPHA_OPTIMIZED, PNG_DEFAULT_sRGB); + * If you just need to composite the PNG image onto an existing background + * and if you control the code that does this you can use the optimization + * setting. In this case you just copy completely opaque pixels to the + * output. For pixels that are not completely transparent (you just skip + * those) you do the composition math using png_composite or png_composite_16 + * below then encode the resultant 8-bit or 16-bit values to match the output + * encoding. + * + * Other cases + * If neither the PNG nor the standard linear encoding work for you because + * of the software or hardware you use then you have a big problem. The PNG + * case will probably result in halos around the image. The linear encoding + * will probably result in a washed out, too bright, image (it's actually too + * contrasty.) Try the ALPHA_OPTIMIZED mode above - this will probably + * substantially reduce the halos. Alternatively try: + * + * png_set_alpha_mode(pp, PNG_ALPHA_BROKEN, PNG_DEFAULT_sRGB); + * This option will also reduce the halos, but there will be slight dark + * halos round the opaque parts of the image where the background is light. + * In the OPTIMIZED mode the halos will be light halos where the background + * is dark. Take your pick - the halos are unavoidable unless you can get + * your hardware/software fixed! (The OPTIMIZED approach is slightly + * faster.) + * + * When the default gamma of PNG files doesn't match the output gamma. + * If you have PNG files with no gamma information png_set_alpha_mode allows + * you to provide a default gamma, but it also sets the ouput gamma to the + * matching value. If you know your PNG files have a gamma that doesn't + * match the output you can take advantage of the fact that + * png_set_alpha_mode always sets the output gamma but only sets the PNG + * default if it is not already set: + * + * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB); + * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC); + * The first call sets both the default and the output gamma values, the + * second call overrides the output gamma without changing the default. This + * is easier than achieving the same effect with png_set_gamma. You must use + * PNG_ALPHA_PNG for the first call - internal checking in png_set_alpha will + * fire if more than one call to png_set_alpha_mode and png_set_background is + * made in the same read operation, however multiple calls with PNG_ALPHA_PNG + * are ignored. + */ + +#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED +PNG_EXPORT(36, void, png_set_strip_alpha, (png_structrp png_ptr)); +#endif + +#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \ + defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) +PNG_EXPORT(37, void, png_set_swap_alpha, (png_structrp png_ptr)); +#endif + +#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \ + defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) +PNG_EXPORT(38, void, png_set_invert_alpha, (png_structrp png_ptr)); +#endif + +#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) +/* Add a filler byte to 8-bit or 16-bit Gray or 24-bit or 48-bit RGB images. */ +PNG_EXPORT(39, void, png_set_filler, (png_structrp png_ptr, png_uint_32 filler, + int flags)); +/* The values of the PNG_FILLER_ defines should NOT be changed */ +# define PNG_FILLER_BEFORE 0 +# define PNG_FILLER_AFTER 1 +/* Add an alpha byte to 8-bit or 16-bit Gray or 24-bit or 48-bit RGB images. */ +PNG_EXPORT(40, void, png_set_add_alpha, (png_structrp png_ptr, + png_uint_32 filler, int flags)); +#endif /* READ_FILLER || WRITE_FILLER */ + +#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) +/* Swap bytes in 16-bit depth files. */ +PNG_EXPORT(41, void, png_set_swap, (png_structrp png_ptr)); +#endif + +#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) +/* Use 1 byte per pixel in 1, 2, or 4-bit depth files. */ +PNG_EXPORT(42, void, png_set_packing, (png_structrp png_ptr)); +#endif + +#if defined(PNG_READ_PACKSWAP_SUPPORTED) || \ + defined(PNG_WRITE_PACKSWAP_SUPPORTED) +/* Swap packing order of pixels in bytes. */ +PNG_EXPORT(43, void, png_set_packswap, (png_structrp png_ptr)); +#endif + +#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) +/* Converts files to legal bit depths. */ +PNG_EXPORT(44, void, png_set_shift, (png_structrp png_ptr, png_const_color_8p + true_bits)); +#endif + +#if defined(PNG_READ_INTERLACING_SUPPORTED) || \ + defined(PNG_WRITE_INTERLACING_SUPPORTED) +/* Have the code handle the interlacing. Returns the number of passes. + * MUST be called before png_read_update_info or png_start_read_image, + * otherwise it will not have the desired effect. Note that it is still + * necessary to call png_read_row or png_read_rows png_get_image_height + * times for each pass. +*/ +PNG_EXPORT(45, int, png_set_interlace_handling, (png_structrp png_ptr)); +#endif + +#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) +/* Invert monochrome files */ +PNG_EXPORT(46, void, png_set_invert_mono, (png_structrp png_ptr)); +#endif + +#ifdef PNG_READ_BACKGROUND_SUPPORTED +/* Handle alpha and tRNS by replacing with a background color. Prior to + * libpng-1.5.4 this API must not be called before the PNG file header has been + * read. Doing so will result in unexpected behavior and possible warnings or + * errors if the PNG file contains a bKGD chunk. + */ +PNG_FP_EXPORT(47, void, png_set_background, (png_structrp png_ptr, + png_const_color_16p background_color, int background_gamma_code, + int need_expand, double background_gamma)) +PNG_FIXED_EXPORT(215, void, png_set_background_fixed, (png_structrp png_ptr, + png_const_color_16p background_color, int background_gamma_code, + int need_expand, png_fixed_point background_gamma)) +#endif +#ifdef PNG_READ_BACKGROUND_SUPPORTED +# define PNG_BACKGROUND_GAMMA_UNKNOWN 0 +# define PNG_BACKGROUND_GAMMA_SCREEN 1 +# define PNG_BACKGROUND_GAMMA_FILE 2 +# define PNG_BACKGROUND_GAMMA_UNIQUE 3 +#endif + +#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED +/* Scale a 16-bit depth file down to 8-bit, accurately. */ +PNG_EXPORT(229, void, png_set_scale_16, (png_structrp png_ptr)); +#endif + +#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED +#define PNG_READ_16_TO_8_SUPPORTED /* Name prior to 1.5.4 */ +/* Strip the second byte of information from a 16-bit depth file. */ +PNG_EXPORT(48, void, png_set_strip_16, (png_structrp png_ptr)); +#endif + +#ifdef PNG_READ_QUANTIZE_SUPPORTED +/* Turn on quantizing, and reduce the palette to the number of colors + * available. + */ +PNG_EXPORT(49, void, png_set_quantize, (png_structrp png_ptr, + png_colorp palette, int num_palette, int maximum_colors, + png_const_uint_16p histogram, int full_quantize)); +#endif + +#ifdef PNG_READ_GAMMA_SUPPORTED +/* The threshold on gamma processing is configurable but hard-wired into the + * library. The following is the floating point variant. + */ +#define PNG_GAMMA_THRESHOLD (PNG_GAMMA_THRESHOLD_FIXED*.00001) + +/* Handle gamma correction. Screen_gamma=(display_exponent). + * NOTE: this API simply sets the screen and file gamma values. It will + * therefore override the value for gamma in a PNG file if it is called after + * the file header has been read - use with care - call before reading the PNG + * file for best results! + * + * These routines accept the same gamma values as png_set_alpha_mode (described + * above). The PNG_GAMMA_ defines and PNG_DEFAULT_sRGB can be passed to either + * API (floating point or fixed.) Notice, however, that the 'file_gamma' value + * is the inverse of a 'screen gamma' value. + */ +PNG_FP_EXPORT(50, void, png_set_gamma, (png_structrp png_ptr, + double screen_gamma, double override_file_gamma)) +PNG_FIXED_EXPORT(208, void, png_set_gamma_fixed, (png_structrp png_ptr, + png_fixed_point screen_gamma, png_fixed_point override_file_gamma)) +#endif + +#ifdef PNG_WRITE_FLUSH_SUPPORTED +/* Set how many lines between output flushes - 0 for no flushing */ +PNG_EXPORT(51, void, png_set_flush, (png_structrp png_ptr, int nrows)); +/* Flush the current PNG output buffer */ +PNG_EXPORT(52, void, png_write_flush, (png_structrp png_ptr)); +#endif + +/* Optional update palette with requested transformations */ +PNG_EXPORT(53, void, png_start_read_image, (png_structrp png_ptr)); + +/* Optional call to update the users info structure */ +PNG_EXPORT(54, void, png_read_update_info, (png_structrp png_ptr, + png_inforp info_ptr)); + +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +/* Read one or more rows of image data. */ +PNG_EXPORT(55, void, png_read_rows, (png_structrp png_ptr, png_bytepp row, + png_bytepp display_row, png_uint_32 num_rows)); +#endif + +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +/* Read a row of data. */ +PNG_EXPORT(56, void, png_read_row, (png_structrp png_ptr, png_bytep row, + png_bytep display_row)); +#endif + +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +/* Read the whole image into memory at once. */ +PNG_EXPORT(57, void, png_read_image, (png_structrp png_ptr, png_bytepp image)); +#endif + +/* Write a row of image data */ +PNG_EXPORT(58, void, png_write_row, (png_structrp png_ptr, + png_const_bytep row)); + +/* Write a few rows of image data: (*row) is not written; however, the type + * is declared as writeable to maintain compatibility with previous versions + * of libpng and to allow the 'display_row' array from read_rows to be passed + * unchanged to write_rows. + */ +PNG_EXPORT(59, void, png_write_rows, (png_structrp png_ptr, png_bytepp row, + png_uint_32 num_rows)); + +/* Write the image data */ +PNG_EXPORT(60, void, png_write_image, (png_structrp png_ptr, png_bytepp image)); + +/* Write the end of the PNG file. */ +PNG_EXPORT(61, void, png_write_end, (png_structrp png_ptr, + png_inforp info_ptr)); + +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +/* Read the end of the PNG file. */ +PNG_EXPORT(62, void, png_read_end, (png_structrp png_ptr, png_inforp info_ptr)); +#endif + +/* Free any memory associated with the png_info_struct */ +PNG_EXPORT(63, void, png_destroy_info_struct, (png_const_structrp png_ptr, + png_infopp info_ptr_ptr)); + +/* Free any memory associated with the png_struct and the png_info_structs */ +PNG_EXPORT(64, void, png_destroy_read_struct, (png_structpp png_ptr_ptr, + png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr)); + +/* Free any memory associated with the png_struct and the png_info_structs */ +PNG_EXPORT(65, void, png_destroy_write_struct, (png_structpp png_ptr_ptr, + png_infopp info_ptr_ptr)); + +/* Set the libpng method of handling chunk CRC errors */ +PNG_EXPORT(66, void, png_set_crc_action, (png_structrp png_ptr, int crit_action, + int ancil_action)); + +/* Values for png_set_crc_action() say how to handle CRC errors in + * ancillary and critical chunks, and whether to use the data contained + * therein. Note that it is impossible to "discard" data in a critical + * chunk. For versions prior to 0.90, the action was always error/quit, + * whereas in version 0.90 and later, the action for CRC errors in ancillary + * chunks is warn/discard. These values should NOT be changed. + * + * value action:critical action:ancillary + */ +#define PNG_CRC_DEFAULT 0 /* error/quit warn/discard data */ +#define PNG_CRC_ERROR_QUIT 1 /* error/quit error/quit */ +#define PNG_CRC_WARN_DISCARD 2 /* (INVALID) warn/discard data */ +#define PNG_CRC_WARN_USE 3 /* warn/use data warn/use data */ +#define PNG_CRC_QUIET_USE 4 /* quiet/use data quiet/use data */ +#define PNG_CRC_NO_CHANGE 5 /* use current value use current value */ + +#ifdef PNG_WRITE_SUPPORTED +/* These functions give the user control over the scan-line filtering in + * libpng and the compression methods used by zlib. These functions are + * mainly useful for testing, as the defaults should work with most users. + * Those users who are tight on memory or want faster performance at the + * expense of compression can modify them. See the compression library + * header file (zlib.h) for an explination of the compression functions. + */ + +/* Set the filtering method(s) used by libpng. Currently, the only valid + * value for "method" is 0. + */ +PNG_EXPORT(67, void, png_set_filter, (png_structrp png_ptr, int method, + int filters)); +#endif /* WRITE */ + +/* Flags for png_set_filter() to say which filters to use. The flags + * are chosen so that they don't conflict with real filter types + * below, in case they are supplied instead of the #defined constants. + * These values should NOT be changed. + */ +#define PNG_NO_FILTERS 0x00 +#define PNG_FILTER_NONE 0x08 +#define PNG_FILTER_SUB 0x10 +#define PNG_FILTER_UP 0x20 +#define PNG_FILTER_AVG 0x40 +#define PNG_FILTER_PAETH 0x80 +#define PNG_FAST_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP) +#define PNG_ALL_FILTERS (PNG_FAST_FILTERS | PNG_FILTER_AVG | PNG_FILTER_PAETH) + +/* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now. + * These defines should NOT be changed. + */ +#define PNG_FILTER_VALUE_NONE 0 +#define PNG_FILTER_VALUE_SUB 1 +#define PNG_FILTER_VALUE_UP 2 +#define PNG_FILTER_VALUE_AVG 3 +#define PNG_FILTER_VALUE_PAETH 4 +#define PNG_FILTER_VALUE_LAST 5 + +#ifdef PNG_WRITE_SUPPORTED +#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED /* DEPRECATED */ +PNG_FP_EXPORT(68, void, png_set_filter_heuristics, (png_structrp png_ptr, + int heuristic_method, int num_weights, png_const_doublep filter_weights, + png_const_doublep filter_costs)) +PNG_FIXED_EXPORT(209, void, png_set_filter_heuristics_fixed, + (png_structrp png_ptr, int heuristic_method, int num_weights, + png_const_fixed_point_p filter_weights, + png_const_fixed_point_p filter_costs)) +#endif /* WRITE_WEIGHTED_FILTER */ + +/* The following are no longer used and will be removed from libpng-1.7: */ +#define PNG_FILTER_HEURISTIC_DEFAULT 0 /* Currently "UNWEIGHTED" */ +#define PNG_FILTER_HEURISTIC_UNWEIGHTED 1 /* Used by libpng < 0.95 */ +#define PNG_FILTER_HEURISTIC_WEIGHTED 2 /* Experimental feature */ +#define PNG_FILTER_HEURISTIC_LAST 3 /* Not a valid value */ + +/* Set the library compression level. Currently, valid values range from + * 0 - 9, corresponding directly to the zlib compression levels 0 - 9 + * (0 - no compression, 9 - "maximal" compression). Note that tests have + * shown that zlib compression levels 3-6 usually perform as well as level 9 + * for PNG images, and do considerably fewer caclulations. In the future, + * these values may not correspond directly to the zlib compression levels. + */ +#ifdef PNG_WRITE_CUSTOMIZE_COMPRESSION_SUPPORTED +PNG_EXPORT(69, void, png_set_compression_level, (png_structrp png_ptr, + int level)); + +PNG_EXPORT(70, void, png_set_compression_mem_level, (png_structrp png_ptr, + int mem_level)); + +PNG_EXPORT(71, void, png_set_compression_strategy, (png_structrp png_ptr, + int strategy)); + +/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a + * smaller value of window_bits if it can do so safely. + */ +PNG_EXPORT(72, void, png_set_compression_window_bits, (png_structrp png_ptr, + int window_bits)); + +PNG_EXPORT(73, void, png_set_compression_method, (png_structrp png_ptr, + int method)); +#endif /* WRITE_CUSTOMIZE_COMPRESSION */ + +#ifdef PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED +/* Also set zlib parameters for compressing non-IDAT chunks */ +PNG_EXPORT(222, void, png_set_text_compression_level, (png_structrp png_ptr, + int level)); + +PNG_EXPORT(223, void, png_set_text_compression_mem_level, (png_structrp png_ptr, + int mem_level)); + +PNG_EXPORT(224, void, png_set_text_compression_strategy, (png_structrp png_ptr, + int strategy)); + +/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a + * smaller value of window_bits if it can do so safely. + */ +PNG_EXPORT(225, void, png_set_text_compression_window_bits, + (png_structrp png_ptr, int window_bits)); + +PNG_EXPORT(226, void, png_set_text_compression_method, (png_structrp png_ptr, + int method)); +#endif /* WRITE_CUSTOMIZE_ZTXT_COMPRESSION */ +#endif /* WRITE */ + +/* These next functions are called for input/output, memory, and error + * handling. They are in the file pngrio.c, pngwio.c, and pngerror.c, + * and call standard C I/O routines such as fread(), fwrite(), and + * fprintf(). These functions can be made to use other I/O routines + * at run time for those applications that need to handle I/O in a + * different manner by calling png_set_???_fn(). See libpng-manual.txt for + * more information. + */ + +#ifdef PNG_STDIO_SUPPORTED +/* Initialize the input/output for the PNG file to the default functions. */ +PNG_EXPORT(74, void, png_init_io, (png_structrp png_ptr, png_FILE_p fp)); +#endif + +/* Replace the (error and abort), and warning functions with user + * supplied functions. If no messages are to be printed you must still + * write and use replacement functions. The replacement error_fn should + * still do a longjmp to the last setjmp location if you are using this + * method of error handling. If error_fn or warning_fn is NULL, the + * default function will be used. + */ + +PNG_EXPORT(75, void, png_set_error_fn, (png_structrp png_ptr, + png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn)); + +/* Return the user pointer associated with the error functions */ +PNG_EXPORT(76, png_voidp, png_get_error_ptr, (png_const_structrp png_ptr)); + +/* Replace the default data output functions with a user supplied one(s). + * If buffered output is not used, then output_flush_fn can be set to NULL. + * If PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time + * output_flush_fn will be ignored (and thus can be NULL). + * It is probably a mistake to use NULL for output_flush_fn if + * write_data_fn is not also NULL unless you have built libpng with + * PNG_WRITE_FLUSH_SUPPORTED undefined, because in this case libpng's + * default flush function, which uses the standard *FILE structure, will + * be used. + */ +PNG_EXPORT(77, void, png_set_write_fn, (png_structrp png_ptr, png_voidp io_ptr, + png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn)); + +/* Replace the default data input function with a user supplied one. */ +PNG_EXPORT(78, void, png_set_read_fn, (png_structrp png_ptr, png_voidp io_ptr, + png_rw_ptr read_data_fn)); + +/* Return the user pointer associated with the I/O functions */ +PNG_EXPORT(79, png_voidp, png_get_io_ptr, (png_const_structrp png_ptr)); + +PNG_EXPORT(80, void, png_set_read_status_fn, (png_structrp png_ptr, + png_read_status_ptr read_row_fn)); + +PNG_EXPORT(81, void, png_set_write_status_fn, (png_structrp png_ptr, + png_write_status_ptr write_row_fn)); + +#ifdef PNG_USER_MEM_SUPPORTED +/* Replace the default memory allocation functions with user supplied one(s). */ +PNG_EXPORT(82, void, png_set_mem_fn, (png_structrp png_ptr, png_voidp mem_ptr, + png_malloc_ptr malloc_fn, png_free_ptr free_fn)); +/* Return the user pointer associated with the memory functions */ +PNG_EXPORT(83, png_voidp, png_get_mem_ptr, (png_const_structrp png_ptr)); +#endif + +#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED +PNG_EXPORT(84, void, png_set_read_user_transform_fn, (png_structrp png_ptr, + png_user_transform_ptr read_user_transform_fn)); +#endif + +#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED +PNG_EXPORT(85, void, png_set_write_user_transform_fn, (png_structrp png_ptr, + png_user_transform_ptr write_user_transform_fn)); +#endif + +#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED +PNG_EXPORT(86, void, png_set_user_transform_info, (png_structrp png_ptr, + png_voidp user_transform_ptr, int user_transform_depth, + int user_transform_channels)); +/* Return the user pointer associated with the user transform functions */ +PNG_EXPORT(87, png_voidp, png_get_user_transform_ptr, + (png_const_structrp png_ptr)); +#endif + +#ifdef PNG_USER_TRANSFORM_INFO_SUPPORTED +/* Return information about the row currently being processed. Note that these + * APIs do not fail but will return unexpected results if called outside a user + * transform callback. Also note that when transforming an interlaced image the + * row number is the row number within the sub-image of the interlace pass, so + * the value will increase to the height of the sub-image (not the full image) + * then reset to 0 for the next pass. + * + * Use PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to + * find the output pixel (x,y) given an interlaced sub-image pixel + * (row,col,pass). (See below for these macros.) + */ +PNG_EXPORT(217, png_uint_32, png_get_current_row_number, (png_const_structrp)); +PNG_EXPORT(218, png_byte, png_get_current_pass_number, (png_const_structrp)); +#endif + +#ifdef PNG_READ_USER_CHUNKS_SUPPORTED +/* This callback is called only for *unknown* chunks. If + * PNG_HANDLE_AS_UNKNOWN_SUPPORTED is set then it is possible to set known + * chunks to be treated as unknown, however in this case the callback must do + * any processing required by the chunk (e.g. by calling the appropriate + * png_set_ APIs.) + * + * There is no write support - on write, by default, all the chunks in the + * 'unknown' list are written in the specified position. + * + * The integer return from the callback function is interpreted thus: + * + * negative: An error occurred; png_chunk_error will be called. + * zero: The chunk was not handled, the chunk will be saved. A critical + * chunk will cause an error at this point unless it is to be saved. + * positive: The chunk was handled, libpng will ignore/discard it. + * + * See "INTERACTION WTIH USER CHUNK CALLBACKS" below for important notes about + * how this behavior will change in libpng 1.7 + */ +PNG_EXPORT(88, void, png_set_read_user_chunk_fn, (png_structrp png_ptr, + png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn)); +#endif + +#ifdef PNG_USER_CHUNKS_SUPPORTED +PNG_EXPORT(89, png_voidp, png_get_user_chunk_ptr, (png_const_structrp png_ptr)); +#endif + +#ifdef PNG_PROGRESSIVE_READ_SUPPORTED +/* Sets the function callbacks for the push reader, and a pointer to a + * user-defined structure available to the callback functions. + */ +PNG_EXPORT(90, void, png_set_progressive_read_fn, (png_structrp png_ptr, + png_voidp progressive_ptr, png_progressive_info_ptr info_fn, + png_progressive_row_ptr row_fn, png_progressive_end_ptr end_fn)); + +/* Returns the user pointer associated with the push read functions */ +PNG_EXPORT(91, png_voidp, png_get_progressive_ptr, + (png_const_structrp png_ptr)); + +/* Function to be called when data becomes available */ +PNG_EXPORT(92, void, png_process_data, (png_structrp png_ptr, + png_inforp info_ptr, png_bytep buffer, png_size_t buffer_size)); + +/* A function which may be called *only* within png_process_data to stop the + * processing of any more data. The function returns the number of bytes + * remaining, excluding any that libpng has cached internally. A subsequent + * call to png_process_data must supply these bytes again. If the argument + * 'save' is set to true the routine will first save all the pending data and + * will always return 0. + */ +PNG_EXPORT(219, png_size_t, png_process_data_pause, (png_structrp, int save)); + +/* A function which may be called *only* outside (after) a call to + * png_process_data. It returns the number of bytes of data to skip in the + * input. Normally it will return 0, but if it returns a non-zero value the + * application must skip than number of bytes of input data and pass the + * following data to the next call to png_process_data. + */ +PNG_EXPORT(220, png_uint_32, png_process_data_skip, (png_structrp)); + +/* Function that combines rows. 'new_row' is a flag that should come from + * the callback and be non-NULL if anything needs to be done; the library + * stores its own version of the new data internally and ignores the passed + * in value. + */ +PNG_EXPORT(93, void, png_progressive_combine_row, (png_const_structrp png_ptr, + png_bytep old_row, png_const_bytep new_row)); +#endif /* PROGRESSIVE_READ */ + +PNG_EXPORTA(94, png_voidp, png_malloc, (png_const_structrp png_ptr, + png_alloc_size_t size), PNG_ALLOCATED); +/* Added at libpng version 1.4.0 */ +PNG_EXPORTA(95, png_voidp, png_calloc, (png_const_structrp png_ptr, + png_alloc_size_t size), PNG_ALLOCATED); + +/* Added at libpng version 1.2.4 */ +PNG_EXPORTA(96, png_voidp, png_malloc_warn, (png_const_structrp png_ptr, + png_alloc_size_t size), PNG_ALLOCATED); + +/* Frees a pointer allocated by png_malloc() */ +PNG_EXPORT(97, void, png_free, (png_const_structrp png_ptr, png_voidp ptr)); + +/* Free data that was allocated internally */ +PNG_EXPORT(98, void, png_free_data, (png_const_structrp png_ptr, + png_inforp info_ptr, png_uint_32 free_me, int num)); + +/* Reassign responsibility for freeing existing data, whether allocated + * by libpng or by the application; this works on the png_info structure passed + * in, it does not change the state for other png_info structures. + * + * It is unlikely that this function works correctly as of 1.6.0 and using it + * may result either in memory leaks or double free of allocated data. + */ +PNG_EXPORT(99, void, png_data_freer, (png_const_structrp png_ptr, + png_inforp info_ptr, int freer, png_uint_32 mask)); + +/* Assignments for png_data_freer */ +#define PNG_DESTROY_WILL_FREE_DATA 1 +#define PNG_SET_WILL_FREE_DATA 1 +#define PNG_USER_WILL_FREE_DATA 2 +/* Flags for png_ptr->free_me and info_ptr->free_me */ +#define PNG_FREE_HIST 0x0008U +#define PNG_FREE_ICCP 0x0010U +#define PNG_FREE_SPLT 0x0020U +#define PNG_FREE_ROWS 0x0040U +#define PNG_FREE_PCAL 0x0080U +#define PNG_FREE_SCAL 0x0100U +#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED +# define PNG_FREE_UNKN 0x0200U +#endif +/* PNG_FREE_LIST 0x0400U removed in 1.6.0 because it is ignored */ +#define PNG_FREE_PLTE 0x1000U +#define PNG_FREE_TRNS 0x2000U +#define PNG_FREE_TEXT 0x4000U +#define PNG_FREE_EXIF 0x8000U /* Added at libpng-1.6.31 */ +#define PNG_FREE_ALL 0xffffU +#define PNG_FREE_MUL 0x4220U /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */ + +#ifdef PNG_USER_MEM_SUPPORTED +PNG_EXPORTA(100, png_voidp, png_malloc_default, (png_const_structrp png_ptr, + png_alloc_size_t size), PNG_ALLOCATED PNG_DEPRECATED); +PNG_EXPORTA(101, void, png_free_default, (png_const_structrp png_ptr, + png_voidp ptr), PNG_DEPRECATED); +#endif + +#ifdef PNG_ERROR_TEXT_SUPPORTED +/* Fatal error in PNG image of libpng - can't continue */ +PNG_EXPORTA(102, void, png_error, (png_const_structrp png_ptr, + png_const_charp error_message), PNG_NORETURN); + +/* The same, but the chunk name is prepended to the error string. */ +PNG_EXPORTA(103, void, png_chunk_error, (png_const_structrp png_ptr, + png_const_charp error_message), PNG_NORETURN); + +#else +/* Fatal error in PNG image of libpng - can't continue */ +PNG_EXPORTA(104, void, png_err, (png_const_structrp png_ptr), PNG_NORETURN); +# define png_error(s1,s2) png_err(s1) +# define png_chunk_error(s1,s2) png_err(s1) +#endif + +#ifdef PNG_WARNINGS_SUPPORTED +/* Non-fatal error in libpng. Can continue, but may have a problem. */ +PNG_EXPORT(105, void, png_warning, (png_const_structrp png_ptr, + png_const_charp warning_message)); + +/* Non-fatal error in libpng, chunk name is prepended to message. */ +PNG_EXPORT(106, void, png_chunk_warning, (png_const_structrp png_ptr, + png_const_charp warning_message)); +#else +# define png_warning(s1,s2) ((void)(s1)) +# define png_chunk_warning(s1,s2) ((void)(s1)) +#endif + +#ifdef PNG_BENIGN_ERRORS_SUPPORTED +/* Benign error in libpng. Can continue, but may have a problem. + * User can choose whether to handle as a fatal error or as a warning. */ +PNG_EXPORT(107, void, png_benign_error, (png_const_structrp png_ptr, + png_const_charp warning_message)); + +#ifdef PNG_READ_SUPPORTED +/* Same, chunk name is prepended to message (only during read) */ +PNG_EXPORT(108, void, png_chunk_benign_error, (png_const_structrp png_ptr, + png_const_charp warning_message)); +#endif + +PNG_EXPORT(109, void, png_set_benign_errors, + (png_structrp png_ptr, int allowed)); +#else +# ifdef PNG_ALLOW_BENIGN_ERRORS +# define png_benign_error png_warning +# define png_chunk_benign_error png_chunk_warning +# else +# define png_benign_error png_error +# define png_chunk_benign_error png_chunk_error +# endif +#endif + +/* The png_set_ functions are for storing values in the png_info_struct. + * Similarly, the png_get_ calls are used to read values from the + * png_info_struct, either storing the parameters in the passed variables, or + * setting pointers into the png_info_struct where the data is stored. The + * png_get_ functions return a non-zero value if the data was available + * in info_ptr, or return zero and do not change any of the parameters if the + * data was not available. + * + * These functions should be used instead of directly accessing png_info + * to avoid problems with future changes in the size and internal layout of + * png_info_struct. + */ +/* Returns "flag" if chunk data is valid in info_ptr. */ +PNG_EXPORT(110, png_uint_32, png_get_valid, (png_const_structrp png_ptr, + png_const_inforp info_ptr, png_uint_32 flag)); + +/* Returns number of bytes needed to hold a transformed row. */ +PNG_EXPORT(111, png_size_t, png_get_rowbytes, (png_const_structrp png_ptr, + png_const_inforp info_ptr)); + +#ifdef PNG_INFO_IMAGE_SUPPORTED +/* Returns row_pointers, which is an array of pointers to scanlines that was + * returned from png_read_png(). + */ +PNG_EXPORT(112, png_bytepp, png_get_rows, (png_const_structrp png_ptr, + png_const_inforp info_ptr)); + +/* Set row_pointers, which is an array of pointers to scanlines for use + * by png_write_png(). + */ +PNG_EXPORT(113, void, png_set_rows, (png_const_structrp png_ptr, + png_inforp info_ptr, png_bytepp row_pointers)); +#endif + +/* Returns number of color channels in image. */ +PNG_EXPORT(114, png_byte, png_get_channels, (png_const_structrp png_ptr, + png_const_inforp info_ptr)); + +#ifdef PNG_EASY_ACCESS_SUPPORTED +/* Returns image width in pixels. */ +PNG_EXPORT(115, png_uint_32, png_get_image_width, (png_const_structrp png_ptr, + png_const_inforp info_ptr)); + +/* Returns image height in pixels. */ +PNG_EXPORT(116, png_uint_32, png_get_image_height, (png_const_structrp png_ptr, + png_const_inforp info_ptr)); + +/* Returns image bit_depth. */ +PNG_EXPORT(117, png_byte, png_get_bit_depth, (png_const_structrp png_ptr, + png_const_inforp info_ptr)); + +/* Returns image color_type. */ +PNG_EXPORT(118, png_byte, png_get_color_type, (png_const_structrp png_ptr, + png_const_inforp info_ptr)); + +/* Returns image filter_type. */ +PNG_EXPORT(119, png_byte, png_get_filter_type, (png_const_structrp png_ptr, + png_const_inforp info_ptr)); + +/* Returns image interlace_type. */ +PNG_EXPORT(120, png_byte, png_get_interlace_type, (png_const_structrp png_ptr, + png_const_inforp info_ptr)); + +/* Returns image compression_type. */ +PNG_EXPORT(121, png_byte, png_get_compression_type, (png_const_structrp png_ptr, + png_const_inforp info_ptr)); + +/* Returns image resolution in pixels per meter, from pHYs chunk data. */ +PNG_EXPORT(122, png_uint_32, png_get_pixels_per_meter, + (png_const_structrp png_ptr, png_const_inforp info_ptr)); +PNG_EXPORT(123, png_uint_32, png_get_x_pixels_per_meter, + (png_const_structrp png_ptr, png_const_inforp info_ptr)); +PNG_EXPORT(124, png_uint_32, png_get_y_pixels_per_meter, + (png_const_structrp png_ptr, png_const_inforp info_ptr)); + +/* Returns pixel aspect ratio, computed from pHYs chunk data. */ +PNG_FP_EXPORT(125, float, png_get_pixel_aspect_ratio, + (png_const_structrp png_ptr, png_const_inforp info_ptr)) +PNG_FIXED_EXPORT(210, png_fixed_point, png_get_pixel_aspect_ratio_fixed, + (png_const_structrp png_ptr, png_const_inforp info_ptr)) + +/* Returns image x, y offset in pixels or microns, from oFFs chunk data. */ +PNG_EXPORT(126, png_int_32, png_get_x_offset_pixels, + (png_const_structrp png_ptr, png_const_inforp info_ptr)); +PNG_EXPORT(127, png_int_32, png_get_y_offset_pixels, + (png_const_structrp png_ptr, png_const_inforp info_ptr)); +PNG_EXPORT(128, png_int_32, png_get_x_offset_microns, + (png_const_structrp png_ptr, png_const_inforp info_ptr)); +PNG_EXPORT(129, png_int_32, png_get_y_offset_microns, + (png_const_structrp png_ptr, png_const_inforp info_ptr)); + +#endif /* EASY_ACCESS */ + +#ifdef PNG_READ_SUPPORTED +/* Returns pointer to signature string read from PNG header */ +PNG_EXPORT(130, png_const_bytep, png_get_signature, (png_const_structrp png_ptr, + png_const_inforp info_ptr)); +#endif + +#ifdef PNG_bKGD_SUPPORTED +PNG_EXPORT(131, png_uint_32, png_get_bKGD, (png_const_structrp png_ptr, + png_inforp info_ptr, png_color_16p *background)); +#endif + +#ifdef PNG_bKGD_SUPPORTED +PNG_EXPORT(132, void, png_set_bKGD, (png_const_structrp png_ptr, + png_inforp info_ptr, png_const_color_16p background)); +#endif + +#ifdef PNG_cHRM_SUPPORTED +PNG_FP_EXPORT(133, png_uint_32, png_get_cHRM, (png_const_structrp png_ptr, + png_const_inforp info_ptr, double *white_x, double *white_y, double *red_x, + double *red_y, double *green_x, double *green_y, double *blue_x, + double *blue_y)) +PNG_FP_EXPORT(230, png_uint_32, png_get_cHRM_XYZ, (png_const_structrp png_ptr, + png_const_inforp info_ptr, double *red_X, double *red_Y, double *red_Z, + double *green_X, double *green_Y, double *green_Z, double *blue_X, + double *blue_Y, double *blue_Z)) +PNG_FIXED_EXPORT(134, png_uint_32, png_get_cHRM_fixed, + (png_const_structrp png_ptr, png_const_inforp info_ptr, + png_fixed_point *int_white_x, png_fixed_point *int_white_y, + png_fixed_point *int_red_x, png_fixed_point *int_red_y, + png_fixed_point *int_green_x, png_fixed_point *int_green_y, + png_fixed_point *int_blue_x, png_fixed_point *int_blue_y)) +PNG_FIXED_EXPORT(231, png_uint_32, png_get_cHRM_XYZ_fixed, + (png_const_structrp png_ptr, png_const_inforp info_ptr, + png_fixed_point *int_red_X, png_fixed_point *int_red_Y, + png_fixed_point *int_red_Z, png_fixed_point *int_green_X, + png_fixed_point *int_green_Y, png_fixed_point *int_green_Z, + png_fixed_point *int_blue_X, png_fixed_point *int_blue_Y, + png_fixed_point *int_blue_Z)) +#endif + +#ifdef PNG_cHRM_SUPPORTED +PNG_FP_EXPORT(135, void, png_set_cHRM, (png_const_structrp png_ptr, + png_inforp info_ptr, + double white_x, double white_y, double red_x, double red_y, double green_x, + double green_y, double blue_x, double blue_y)) +PNG_FP_EXPORT(232, void, png_set_cHRM_XYZ, (png_const_structrp png_ptr, + png_inforp info_ptr, double red_X, double red_Y, double red_Z, + double green_X, double green_Y, double green_Z, double blue_X, + double blue_Y, double blue_Z)) +PNG_FIXED_EXPORT(136, void, png_set_cHRM_fixed, (png_const_structrp png_ptr, + png_inforp info_ptr, png_fixed_point int_white_x, + png_fixed_point int_white_y, png_fixed_point int_red_x, + png_fixed_point int_red_y, png_fixed_point int_green_x, + png_fixed_point int_green_y, png_fixed_point int_blue_x, + png_fixed_point int_blue_y)) +PNG_FIXED_EXPORT(233, void, png_set_cHRM_XYZ_fixed, (png_const_structrp png_ptr, + png_inforp info_ptr, png_fixed_point int_red_X, png_fixed_point int_red_Y, + png_fixed_point int_red_Z, png_fixed_point int_green_X, + png_fixed_point int_green_Y, png_fixed_point int_green_Z, + png_fixed_point int_blue_X, png_fixed_point int_blue_Y, + png_fixed_point int_blue_Z)) +#endif + +#ifdef PNG_eXIf_SUPPORTED +PNG_EXPORT(246, png_uint_32, png_get_eXIf, (png_const_structrp png_ptr, + png_inforp info_ptr, png_bytep *exif)); +PNG_EXPORT(247, void, png_set_eXIf, (png_const_structrp png_ptr, + png_inforp info_ptr, const png_bytep exif)); + +PNG_EXPORT(248, png_uint_32, png_get_eXIf_1, (png_const_structrp png_ptr, + png_const_inforp info_ptr, png_uint_32 *num_exif, png_bytep *exif)); +PNG_EXPORT(249, void, png_set_eXIf_1, (png_const_structrp png_ptr, + png_inforp info_ptr, const png_uint_32 num_exif, const png_bytep exif)); +#endif + +#ifdef PNG_gAMA_SUPPORTED +PNG_FP_EXPORT(137, png_uint_32, png_get_gAMA, (png_const_structrp png_ptr, + png_const_inforp info_ptr, double *file_gamma)) +PNG_FIXED_EXPORT(138, png_uint_32, png_get_gAMA_fixed, + (png_const_structrp png_ptr, png_const_inforp info_ptr, + png_fixed_point *int_file_gamma)) +#endif + +#ifdef PNG_gAMA_SUPPORTED +PNG_FP_EXPORT(139, void, png_set_gAMA, (png_const_structrp png_ptr, + png_inforp info_ptr, double file_gamma)) +PNG_FIXED_EXPORT(140, void, png_set_gAMA_fixed, (png_const_structrp png_ptr, + png_inforp info_ptr, png_fixed_point int_file_gamma)) +#endif + +#ifdef PNG_hIST_SUPPORTED +PNG_EXPORT(141, png_uint_32, png_get_hIST, (png_const_structrp png_ptr, + png_inforp info_ptr, png_uint_16p *hist)); +PNG_EXPORT(142, void, png_set_hIST, (png_const_structrp png_ptr, + png_inforp info_ptr, png_const_uint_16p hist)); +#endif + +PNG_EXPORT(143, png_uint_32, png_get_IHDR, (png_const_structrp png_ptr, + png_const_inforp info_ptr, png_uint_32 *width, png_uint_32 *height, + int *bit_depth, int *color_type, int *interlace_method, + int *compression_method, int *filter_method)); + +PNG_EXPORT(144, void, png_set_IHDR, (png_const_structrp png_ptr, + png_inforp info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth, + int color_type, int interlace_method, int compression_method, + int filter_method)); + +#ifdef PNG_oFFs_SUPPORTED +PNG_EXPORT(145, png_uint_32, png_get_oFFs, (png_const_structrp png_ptr, + png_const_inforp info_ptr, png_int_32 *offset_x, png_int_32 *offset_y, + int *unit_type)); +#endif + +#ifdef PNG_oFFs_SUPPORTED +PNG_EXPORT(146, void, png_set_oFFs, (png_const_structrp png_ptr, + png_inforp info_ptr, png_int_32 offset_x, png_int_32 offset_y, + int unit_type)); +#endif + +#ifdef PNG_pCAL_SUPPORTED +PNG_EXPORT(147, png_uint_32, png_get_pCAL, (png_const_structrp png_ptr, + png_inforp info_ptr, png_charp *purpose, png_int_32 *X0, + png_int_32 *X1, int *type, int *nparams, png_charp *units, + png_charpp *params)); +#endif + +#ifdef PNG_pCAL_SUPPORTED +PNG_EXPORT(148, void, png_set_pCAL, (png_const_structrp png_ptr, + png_inforp info_ptr, png_const_charp purpose, png_int_32 X0, png_int_32 X1, + int type, int nparams, png_const_charp units, png_charpp params)); +#endif + +#ifdef PNG_pHYs_SUPPORTED +PNG_EXPORT(149, png_uint_32, png_get_pHYs, (png_const_structrp png_ptr, + png_const_inforp info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, + int *unit_type)); +#endif + +#ifdef PNG_pHYs_SUPPORTED +PNG_EXPORT(150, void, png_set_pHYs, (png_const_structrp png_ptr, + png_inforp info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type)); +#endif + +PNG_EXPORT(151, png_uint_32, png_get_PLTE, (png_const_structrp png_ptr, + png_inforp info_ptr, png_colorp *palette, int *num_palette)); + +PNG_EXPORT(152, void, png_set_PLTE, (png_structrp png_ptr, + png_inforp info_ptr, png_const_colorp palette, int num_palette)); + +#ifdef PNG_sBIT_SUPPORTED +PNG_EXPORT(153, png_uint_32, png_get_sBIT, (png_const_structrp png_ptr, + png_inforp info_ptr, png_color_8p *sig_bit)); +#endif + +#ifdef PNG_sBIT_SUPPORTED +PNG_EXPORT(154, void, png_set_sBIT, (png_const_structrp png_ptr, + png_inforp info_ptr, png_const_color_8p sig_bit)); +#endif + +#ifdef PNG_sRGB_SUPPORTED +PNG_EXPORT(155, png_uint_32, png_get_sRGB, (png_const_structrp png_ptr, + png_const_inforp info_ptr, int *file_srgb_intent)); +#endif + +#ifdef PNG_sRGB_SUPPORTED +PNG_EXPORT(156, void, png_set_sRGB, (png_const_structrp png_ptr, + png_inforp info_ptr, int srgb_intent)); +PNG_EXPORT(157, void, png_set_sRGB_gAMA_and_cHRM, (png_const_structrp png_ptr, + png_inforp info_ptr, int srgb_intent)); +#endif + +#ifdef PNG_iCCP_SUPPORTED +PNG_EXPORT(158, png_uint_32, png_get_iCCP, (png_const_structrp png_ptr, + png_inforp info_ptr, png_charpp name, int *compression_type, + png_bytepp profile, png_uint_32 *proflen)); +#endif + +#ifdef PNG_iCCP_SUPPORTED +PNG_EXPORT(159, void, png_set_iCCP, (png_const_structrp png_ptr, + png_inforp info_ptr, png_const_charp name, int compression_type, + png_const_bytep profile, png_uint_32 proflen)); +#endif + +#ifdef PNG_sPLT_SUPPORTED +PNG_EXPORT(160, int, png_get_sPLT, (png_const_structrp png_ptr, + png_inforp info_ptr, png_sPLT_tpp entries)); +#endif + +#ifdef PNG_sPLT_SUPPORTED +PNG_EXPORT(161, void, png_set_sPLT, (png_const_structrp png_ptr, + png_inforp info_ptr, png_const_sPLT_tp entries, int nentries)); +#endif + +#ifdef PNG_TEXT_SUPPORTED +/* png_get_text also returns the number of text chunks in *num_text */ +PNG_EXPORT(162, int, png_get_text, (png_const_structrp png_ptr, + png_inforp info_ptr, png_textp *text_ptr, int *num_text)); +#endif + +/* Note while png_set_text() will accept a structure whose text, + * language, and translated keywords are NULL pointers, the structure + * returned by png_get_text will always contain regular + * zero-terminated C strings. They might be empty strings but + * they will never be NULL pointers. + */ + +#ifdef PNG_TEXT_SUPPORTED +PNG_EXPORT(163, void, png_set_text, (png_const_structrp png_ptr, + png_inforp info_ptr, png_const_textp text_ptr, int num_text)); +#endif + +#ifdef PNG_tIME_SUPPORTED +PNG_EXPORT(164, png_uint_32, png_get_tIME, (png_const_structrp png_ptr, + png_inforp info_ptr, png_timep *mod_time)); +#endif + +#ifdef PNG_tIME_SUPPORTED +PNG_EXPORT(165, void, png_set_tIME, (png_const_structrp png_ptr, + png_inforp info_ptr, png_const_timep mod_time)); +#endif + +#ifdef PNG_tRNS_SUPPORTED +PNG_EXPORT(166, png_uint_32, png_get_tRNS, (png_const_structrp png_ptr, + png_inforp info_ptr, png_bytep *trans_alpha, int *num_trans, + png_color_16p *trans_color)); +#endif + +#ifdef PNG_tRNS_SUPPORTED +PNG_EXPORT(167, void, png_set_tRNS, (png_structrp png_ptr, + png_inforp info_ptr, png_const_bytep trans_alpha, int num_trans, + png_const_color_16p trans_color)); +#endif + +#ifdef PNG_sCAL_SUPPORTED +PNG_FP_EXPORT(168, png_uint_32, png_get_sCAL, (png_const_structrp png_ptr, + png_const_inforp info_ptr, int *unit, double *width, double *height)) +#if defined(PNG_FLOATING_ARITHMETIC_SUPPORTED) || \ + defined(PNG_FLOATING_POINT_SUPPORTED) +/* NOTE: this API is currently implemented using floating point arithmetic, + * consequently it can only be used on systems with floating point support. + * In any case the range of values supported by png_fixed_point is small and it + * is highly recommended that png_get_sCAL_s be used instead. + */ +PNG_FIXED_EXPORT(214, png_uint_32, png_get_sCAL_fixed, + (png_const_structrp png_ptr, png_const_inforp info_ptr, int *unit, + png_fixed_point *width, png_fixed_point *height)) +#endif +PNG_EXPORT(169, png_uint_32, png_get_sCAL_s, + (png_const_structrp png_ptr, png_const_inforp info_ptr, int *unit, + png_charpp swidth, png_charpp sheight)); + +PNG_FP_EXPORT(170, void, png_set_sCAL, (png_const_structrp png_ptr, + png_inforp info_ptr, int unit, double width, double height)) +PNG_FIXED_EXPORT(213, void, png_set_sCAL_fixed, (png_const_structrp png_ptr, + png_inforp info_ptr, int unit, png_fixed_point width, + png_fixed_point height)) +PNG_EXPORT(171, void, png_set_sCAL_s, (png_const_structrp png_ptr, + png_inforp info_ptr, int unit, + png_const_charp swidth, png_const_charp sheight)); +#endif /* sCAL */ + +#ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED +/* Provide the default handling for all unknown chunks or, optionally, for + * specific unknown chunks. + * + * NOTE: prior to 1.6.0 the handling specified for particular chunks on read was + * ignored and the default was used, the per-chunk setting only had an effect on + * write. If you wish to have chunk-specific handling on read in code that must + * work on earlier versions you must use a user chunk callback to specify the + * desired handling (keep or discard.) + * + * The 'keep' parameter is a PNG_HANDLE_CHUNK_ value as listed below. The + * parameter is interpreted as follows: + * + * READ: + * PNG_HANDLE_CHUNK_AS_DEFAULT: + * Known chunks: do normal libpng processing, do not keep the chunk (but + * see the comments below about PNG_HANDLE_AS_UNKNOWN_SUPPORTED) + * Unknown chunks: for a specific chunk use the global default, when used + * as the default discard the chunk data. + * PNG_HANDLE_CHUNK_NEVER: + * Discard the chunk data. + * PNG_HANDLE_CHUNK_IF_SAFE: + * Keep the chunk data if the chunk is not critical else raise a chunk + * error. + * PNG_HANDLE_CHUNK_ALWAYS: + * Keep the chunk data. + * + * If the chunk data is saved it can be retrieved using png_get_unknown_chunks, + * below. Notice that specifying "AS_DEFAULT" as a global default is equivalent + * to specifying "NEVER", however when "AS_DEFAULT" is used for specific chunks + * it simply resets the behavior to the libpng default. + * + * INTERACTION WTIH USER CHUNK CALLBACKS: + * The per-chunk handling is always used when there is a png_user_chunk_ptr + * callback and the callback returns 0; the chunk is then always stored *unless* + * it is critical and the per-chunk setting is other than ALWAYS. Notice that + * the global default is *not* used in this case. (In effect the per-chunk + * value is incremented to at least IF_SAFE.) + * + * IMPORTANT NOTE: this behavior will change in libpng 1.7 - the global and + * per-chunk defaults will be honored. If you want to preserve the current + * behavior when your callback returns 0 you must set PNG_HANDLE_CHUNK_IF_SAFE + * as the default - if you don't do this libpng 1.6 will issue a warning. + * + * If you want unhandled unknown chunks to be discarded in libpng 1.6 and + * earlier simply return '1' (handled). + * + * PNG_HANDLE_AS_UNKNOWN_SUPPORTED: + * If this is *not* set known chunks will always be handled by libpng and + * will never be stored in the unknown chunk list. Known chunks listed to + * png_set_keep_unknown_chunks will have no effect. If it is set then known + * chunks listed with a keep other than AS_DEFAULT will *never* be processed + * by libpng, in addition critical chunks must either be processed by the + * callback or saved. + * + * The IHDR and IEND chunks must not be listed. Because this turns off the + * default handling for chunks that would otherwise be recognized the + * behavior of libpng transformations may well become incorrect! + * + * WRITE: + * When writing chunks the options only apply to the chunks specified by + * png_set_unknown_chunks (below), libpng will *always* write known chunks + * required by png_set_ calls and will always write the core critical chunks + * (as required for PLTE). + * + * Each chunk in the png_set_unknown_chunks list is looked up in the + * png_set_keep_unknown_chunks list to find the keep setting, this is then + * interpreted as follows: + * + * PNG_HANDLE_CHUNK_AS_DEFAULT: + * Write safe-to-copy chunks and write other chunks if the global + * default is set to _ALWAYS, otherwise don't write this chunk. + * PNG_HANDLE_CHUNK_NEVER: + * Do not write the chunk. + * PNG_HANDLE_CHUNK_IF_SAFE: + * Write the chunk if it is safe-to-copy, otherwise do not write it. + * PNG_HANDLE_CHUNK_ALWAYS: + * Write the chunk. + * + * Note that the default behavior is effectively the opposite of the read case - + * in read unknown chunks are not stored by default, in write they are written + * by default. Also the behavior of PNG_HANDLE_CHUNK_IF_SAFE is very different + * - on write the safe-to-copy bit is checked, on read the critical bit is + * checked and on read if the chunk is critical an error will be raised. + * + * num_chunks: + * =========== + * If num_chunks is positive, then the "keep" parameter specifies the manner + * for handling only those chunks appearing in the chunk_list array, + * otherwise the chunk list array is ignored. + * + * If num_chunks is 0 the "keep" parameter specifies the default behavior for + * unknown chunks, as described above. + * + * If num_chunks is negative, then the "keep" parameter specifies the manner + * for handling all unknown chunks plus all chunks recognized by libpng + * except for the IHDR, PLTE, tRNS, IDAT, and IEND chunks (which continue to + * be processed by libpng. + */ +#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED +PNG_EXPORT(172, void, png_set_keep_unknown_chunks, (png_structrp png_ptr, + int keep, png_const_bytep chunk_list, int num_chunks)); +#endif /* HANDLE_AS_UNKNOWN */ + +/* The "keep" PNG_HANDLE_CHUNK_ parameter for the specified chunk is returned; + * the result is therefore true (non-zero) if special handling is required, + * false for the default handling. + */ +PNG_EXPORT(173, int, png_handle_as_unknown, (png_const_structrp png_ptr, + png_const_bytep chunk_name)); +#endif /* SET_UNKNOWN_CHUNKS */ + +#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED +PNG_EXPORT(174, void, png_set_unknown_chunks, (png_const_structrp png_ptr, + png_inforp info_ptr, png_const_unknown_chunkp unknowns, + int num_unknowns)); + /* NOTE: prior to 1.6.0 this routine set the 'location' field of the added + * unknowns to the location currently stored in the png_struct. This is + * invariably the wrong value on write. To fix this call the following API + * for each chunk in the list with the correct location. If you know your + * code won't be compiled on earlier versions you can rely on + * png_set_unknown_chunks(write-ptr, png_get_unknown_chunks(read-ptr)) doing + * the correct thing. + */ + +PNG_EXPORT(175, void, png_set_unknown_chunk_location, + (png_const_structrp png_ptr, png_inforp info_ptr, int chunk, int location)); + +PNG_EXPORT(176, int, png_get_unknown_chunks, (png_const_structrp png_ptr, + png_inforp info_ptr, png_unknown_chunkpp entries)); +#endif + +/* Png_free_data() will turn off the "valid" flag for anything it frees. + * If you need to turn it off for a chunk that your application has freed, + * you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK); + */ +PNG_EXPORT(177, void, png_set_invalid, (png_const_structrp png_ptr, + png_inforp info_ptr, int mask)); + +#ifdef PNG_INFO_IMAGE_SUPPORTED +/* The "params" pointer is currently not used and is for future expansion. */ +#ifdef PNG_SEQUENTIAL_READ_SUPPORTED +PNG_EXPORT(178, void, png_read_png, (png_structrp png_ptr, png_inforp info_ptr, + int transforms, png_voidp params)); +#endif +#ifdef PNG_WRITE_SUPPORTED +PNG_EXPORT(179, void, png_write_png, (png_structrp png_ptr, png_inforp info_ptr, + int transforms, png_voidp params)); +#endif +#endif + +PNG_EXPORT(180, png_const_charp, png_get_copyright, + (png_const_structrp png_ptr)); +PNG_EXPORT(181, png_const_charp, png_get_header_ver, + (png_const_structrp png_ptr)); +PNG_EXPORT(182, png_const_charp, png_get_header_version, + (png_const_structrp png_ptr)); +PNG_EXPORT(183, png_const_charp, png_get_libpng_ver, + (png_const_structrp png_ptr)); + +#ifdef PNG_MNG_FEATURES_SUPPORTED +PNG_EXPORT(184, png_uint_32, png_permit_mng_features, (png_structrp png_ptr, + png_uint_32 mng_features_permitted)); +#endif + +/* For use in png_set_keep_unknown, added to version 1.2.6 */ +#define PNG_HANDLE_CHUNK_AS_DEFAULT 0 +#define PNG_HANDLE_CHUNK_NEVER 1 +#define PNG_HANDLE_CHUNK_IF_SAFE 2 +#define PNG_HANDLE_CHUNK_ALWAYS 3 +#define PNG_HANDLE_CHUNK_LAST 4 + +/* Strip the prepended error numbers ("#nnn ") from error and warning + * messages before passing them to the error or warning handler. + */ +#ifdef PNG_ERROR_NUMBERS_SUPPORTED +PNG_EXPORT(185, void, png_set_strip_error_numbers, (png_structrp png_ptr, + png_uint_32 strip_mode)); +#endif + +/* Added in libpng-1.2.6 */ +#ifdef PNG_SET_USER_LIMITS_SUPPORTED +PNG_EXPORT(186, void, png_set_user_limits, (png_structrp png_ptr, + png_uint_32 user_width_max, png_uint_32 user_height_max)); +PNG_EXPORT(187, png_uint_32, png_get_user_width_max, + (png_const_structrp png_ptr)); +PNG_EXPORT(188, png_uint_32, png_get_user_height_max, + (png_const_structrp png_ptr)); +/* Added in libpng-1.4.0 */ +PNG_EXPORT(189, void, png_set_chunk_cache_max, (png_structrp png_ptr, + png_uint_32 user_chunk_cache_max)); +PNG_EXPORT(190, png_uint_32, png_get_chunk_cache_max, + (png_const_structrp png_ptr)); +/* Added in libpng-1.4.1 */ +PNG_EXPORT(191, void, png_set_chunk_malloc_max, (png_structrp png_ptr, + png_alloc_size_t user_chunk_cache_max)); +PNG_EXPORT(192, png_alloc_size_t, png_get_chunk_malloc_max, + (png_const_structrp png_ptr)); +#endif + +#if defined(PNG_INCH_CONVERSIONS_SUPPORTED) +PNG_EXPORT(193, png_uint_32, png_get_pixels_per_inch, + (png_const_structrp png_ptr, png_const_inforp info_ptr)); + +PNG_EXPORT(194, png_uint_32, png_get_x_pixels_per_inch, + (png_const_structrp png_ptr, png_const_inforp info_ptr)); + +PNG_EXPORT(195, png_uint_32, png_get_y_pixels_per_inch, + (png_const_structrp png_ptr, png_const_inforp info_ptr)); + +PNG_FP_EXPORT(196, float, png_get_x_offset_inches, + (png_const_structrp png_ptr, png_const_inforp info_ptr)) +#ifdef PNG_FIXED_POINT_SUPPORTED /* otherwise not implemented. */ +PNG_FIXED_EXPORT(211, png_fixed_point, png_get_x_offset_inches_fixed, + (png_const_structrp png_ptr, png_const_inforp info_ptr)) +#endif + +PNG_FP_EXPORT(197, float, png_get_y_offset_inches, (png_const_structrp png_ptr, + png_const_inforp info_ptr)) +#ifdef PNG_FIXED_POINT_SUPPORTED /* otherwise not implemented. */ +PNG_FIXED_EXPORT(212, png_fixed_point, png_get_y_offset_inches_fixed, + (png_const_structrp png_ptr, png_const_inforp info_ptr)) +#endif + +# ifdef PNG_pHYs_SUPPORTED +PNG_EXPORT(198, png_uint_32, png_get_pHYs_dpi, (png_const_structrp png_ptr, + png_const_inforp info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, + int *unit_type)); +# endif /* pHYs */ +#endif /* INCH_CONVERSIONS */ + +/* Added in libpng-1.4.0 */ +#ifdef PNG_IO_STATE_SUPPORTED +PNG_EXPORT(199, png_uint_32, png_get_io_state, (png_const_structrp png_ptr)); + +/* Removed from libpng 1.6; use png_get_io_chunk_type. */ +PNG_REMOVED(200, png_const_bytep, png_get_io_chunk_name, (png_structrp png_ptr), + PNG_DEPRECATED) + +PNG_EXPORT(216, png_uint_32, png_get_io_chunk_type, + (png_const_structrp png_ptr)); + +/* The flags returned by png_get_io_state() are the following: */ +# define PNG_IO_NONE 0x0000 /* no I/O at this moment */ +# define PNG_IO_READING 0x0001 /* currently reading */ +# define PNG_IO_WRITING 0x0002 /* currently writing */ +# define PNG_IO_SIGNATURE 0x0010 /* currently at the file signature */ +# define PNG_IO_CHUNK_HDR 0x0020 /* currently at the chunk header */ +# define PNG_IO_CHUNK_DATA 0x0040 /* currently at the chunk data */ +# define PNG_IO_CHUNK_CRC 0x0080 /* currently at the chunk crc */ +# define PNG_IO_MASK_OP 0x000f /* current operation: reading/writing */ +# define PNG_IO_MASK_LOC 0x00f0 /* current location: sig/hdr/data/crc */ +#endif /* IO_STATE */ + +/* Interlace support. The following macros are always defined so that if + * libpng interlace handling is turned off the macros may be used to handle + * interlaced images within the application. + */ +#define PNG_INTERLACE_ADAM7_PASSES 7 + +/* Two macros to return the first row and first column of the original, + * full, image which appears in a given pass. 'pass' is in the range 0 + * to 6 and the result is in the range 0 to 7. + */ +#define PNG_PASS_START_ROW(pass) (((1&~(pass))<<(3-((pass)>>1)))&7) +#define PNG_PASS_START_COL(pass) (((1& (pass))<<(3-(((pass)+1)>>1)))&7) + +/* A macro to return the offset between pixels in the output row for a pair of + * pixels in the input - effectively the inverse of the 'COL_SHIFT' macro that + * follows. Note that ROW_OFFSET is the offset from one row to the next whereas + * COL_OFFSET is from one column to the next, within a row. + */ +#define PNG_PASS_ROW_OFFSET(pass) ((pass)>2?(8>>(((pass)-1)>>1)):8) +#define PNG_PASS_COL_OFFSET(pass) (1<<((7-(pass))>>1)) + +/* Two macros to help evaluate the number of rows or columns in each + * pass. This is expressed as a shift - effectively log2 of the number or + * rows or columns in each 8x8 tile of the original image. + */ +#define PNG_PASS_ROW_SHIFT(pass) ((pass)>2?(8-(pass))>>1:3) +#define PNG_PASS_COL_SHIFT(pass) ((pass)>1?(7-(pass))>>1:3) + +/* Hence two macros to determine the number of rows or columns in a given + * pass of an image given its height or width. In fact these macros may + * return non-zero even though the sub-image is empty, because the other + * dimension may be empty for a small image. + */ +#define PNG_PASS_ROWS(height, pass) (((height)+(((1<>PNG_PASS_ROW_SHIFT(pass)) +#define PNG_PASS_COLS(width, pass) (((width)+(((1<>PNG_PASS_COL_SHIFT(pass)) + +/* For the reader row callbacks (both progressive and sequential) it is + * necessary to find the row in the output image given a row in an interlaced + * image, so two more macros: + */ +#define PNG_ROW_FROM_PASS_ROW(y_in, pass) \ + (((y_in)<>(((7-(off))-(pass))<<2)) & 0xF) | \ + ((0x01145AF0>>(((7-(off))-(pass))<<2)) & 0xF0)) + +#define PNG_ROW_IN_INTERLACE_PASS(y, pass) \ + ((PNG_PASS_MASK(pass,0) >> ((y)&7)) & 1) +#define PNG_COL_IN_INTERLACE_PASS(x, pass) \ + ((PNG_PASS_MASK(pass,1) >> ((x)&7)) & 1) + +#ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED +/* With these routines we avoid an integer divide, which will be slower on + * most machines. However, it does take more operations than the corresponding + * divide method, so it may be slower on a few RISC systems. There are two + * shifts (by 8 or 16 bits) and an addition, versus a single integer divide. + * + * Note that the rounding factors are NOT supposed to be the same! 128 and + * 32768 are correct for the NODIV code; 127 and 32767 are correct for the + * standard method. + * + * [Optimized code by Greg Roelofs and Mark Adler...blame us for bugs. :-) ] + */ + + /* fg and bg should be in `gamma 1.0' space; alpha is the opacity */ + +# define png_composite(composite, fg, alpha, bg) \ + { \ + png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) \ + * (png_uint_16)(alpha) \ + + (png_uint_16)(bg)*(png_uint_16)(255 \ + - (png_uint_16)(alpha)) + 128); \ + (composite) = (png_byte)(((temp + (temp >> 8)) >> 8) & 0xff); \ + } + +# define png_composite_16(composite, fg, alpha, bg) \ + { \ + png_uint_32 temp = (png_uint_32)((png_uint_32)(fg) \ + * (png_uint_32)(alpha) \ + + (png_uint_32)(bg)*(65535 \ + - (png_uint_32)(alpha)) + 32768); \ + (composite) = (png_uint_16)(0xffff & ((temp + (temp >> 16)) >> 16)); \ + } + +#else /* Standard method using integer division */ + +# define png_composite(composite, fg, alpha, bg) \ + (composite) = \ + (png_byte)(0xff & (((png_uint_16)(fg) * (png_uint_16)(alpha) + \ + (png_uint_16)(bg) * (png_uint_16)(255 - (png_uint_16)(alpha)) + \ + 127) / 255)) + +# define png_composite_16(composite, fg, alpha, bg) \ + (composite) = \ + (png_uint_16)(0xffff & (((png_uint_32)(fg) * (png_uint_32)(alpha) + \ + (png_uint_32)(bg)*(png_uint_32)(65535 - (png_uint_32)(alpha)) + \ + 32767) / 65535)) +#endif /* READ_COMPOSITE_NODIV */ + +#ifdef PNG_READ_INT_FUNCTIONS_SUPPORTED +PNG_EXPORT(201, png_uint_32, png_get_uint_32, (png_const_bytep buf)); +PNG_EXPORT(202, png_uint_16, png_get_uint_16, (png_const_bytep buf)); +PNG_EXPORT(203, png_int_32, png_get_int_32, (png_const_bytep buf)); +#endif + +PNG_EXPORT(204, png_uint_32, png_get_uint_31, (png_const_structrp png_ptr, + png_const_bytep buf)); +/* No png_get_int_16 -- may be added if there's a real need for it. */ + +/* Place a 32-bit number into a buffer in PNG byte order (big-endian). */ +#ifdef PNG_WRITE_INT_FUNCTIONS_SUPPORTED +PNG_EXPORT(205, void, png_save_uint_32, (png_bytep buf, png_uint_32 i)); +#endif +#ifdef PNG_SAVE_INT_32_SUPPORTED +PNG_EXPORT(206, void, png_save_int_32, (png_bytep buf, png_int_32 i)); +#endif + +/* Place a 16-bit number into a buffer in PNG byte order. + * The parameter is declared unsigned int, not png_uint_16, + * just to avoid potential problems on pre-ANSI C compilers. + */ +#ifdef PNG_WRITE_INT_FUNCTIONS_SUPPORTED +PNG_EXPORT(207, void, png_save_uint_16, (png_bytep buf, unsigned int i)); +/* No png_save_int_16 -- may be added if there's a real need for it. */ +#endif + +#ifdef PNG_USE_READ_MACROS +/* Inline macros to do direct reads of bytes from the input buffer. + * The png_get_int_32() routine assumes we are using two's complement + * format for negative values, which is almost certainly true. + */ +# define PNG_get_uint_32(buf) \ + (((png_uint_32)(*(buf)) << 24) + \ + ((png_uint_32)(*((buf) + 1)) << 16) + \ + ((png_uint_32)(*((buf) + 2)) << 8) + \ + ((png_uint_32)(*((buf) + 3)))) + + /* From libpng-1.4.0 until 1.4.4, the png_get_uint_16 macro (but not the + * function) incorrectly returned a value of type png_uint_32. + */ +# define PNG_get_uint_16(buf) \ + ((png_uint_16) \ + (((unsigned int)(*(buf)) << 8) + \ + ((unsigned int)(*((buf) + 1))))) + +# define PNG_get_int_32(buf) \ + ((png_int_32)((*(buf) & 0x80) \ + ? -((png_int_32)(((png_get_uint_32(buf)^0xffffffffU)+1U)&0x7fffffffU)) \ + : (png_int_32)png_get_uint_32(buf))) + +/* If PNG_PREFIX is defined the same thing as below happens in pnglibconf.h, + * but defining a macro name prefixed with PNG_PREFIX. + */ +# ifndef PNG_PREFIX +# define png_get_uint_32(buf) PNG_get_uint_32(buf) +# define png_get_uint_16(buf) PNG_get_uint_16(buf) +# define png_get_int_32(buf) PNG_get_int_32(buf) +# endif +#else +# ifdef PNG_PREFIX + /* No macros; revert to the (redefined) function */ +# define PNG_get_uint_32 (png_get_uint_32) +# define PNG_get_uint_16 (png_get_uint_16) +# define PNG_get_int_32 (png_get_int_32) +# endif +#endif + +#ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED +PNG_EXPORT(242, void, png_set_check_for_invalid_index, + (png_structrp png_ptr, int allowed)); +# ifdef PNG_GET_PALETTE_MAX_SUPPORTED +PNG_EXPORT(243, int, png_get_palette_max, (png_const_structp png_ptr, + png_const_infop info_ptr)); +# endif +#endif /* CHECK_FOR_INVALID_INDEX */ + +/******************************************************************************* + * Section 5: SIMPLIFIED API + ******************************************************************************* + * + * Please read the documentation in libpng-manual.txt (TODO: write said + * documentation) if you don't understand what follows. + * + * The simplified API hides the details of both libpng and the PNG file format + * itself. It allows PNG files to be read into a very limited number of + * in-memory bitmap formats or to be written from the same formats. If these + * formats do not accomodate your needs then you can, and should, use the more + * sophisticated APIs above - these support a wide variety of in-memory formats + * and a wide variety of sophisticated transformations to those formats as well + * as a wide variety of APIs to manipulate ancillary information. + * + * To read a PNG file using the simplified API: + * + * 1) Declare a 'png_image' structure (see below) on the stack, set the + * version field to PNG_IMAGE_VERSION and the 'opaque' pointer to NULL + * (this is REQUIRED, your program may crash if you don't do it.) + * 2) Call the appropriate png_image_begin_read... function. + * 3) Set the png_image 'format' member to the required sample format. + * 4) Allocate a buffer for the image and, if required, the color-map. + * 5) Call png_image_finish_read to read the image and, if required, the + * color-map into your buffers. + * + * There are no restrictions on the format of the PNG input itself; all valid + * color types, bit depths, and interlace methods are acceptable, and the + * input image is transformed as necessary to the requested in-memory format + * during the png_image_finish_read() step. The only caveat is that if you + * request a color-mapped image from a PNG that is full-color or makes + * complex use of an alpha channel the transformation is extremely lossy and the + * result may look terrible. + * + * To write a PNG file using the simplified API: + * + * 1) Declare a 'png_image' structure on the stack and memset() it to all zero. + * 2) Initialize the members of the structure that describe the image, setting + * the 'format' member to the format of the image samples. + * 3) Call the appropriate png_image_write... function with a pointer to the + * image and, if necessary, the color-map to write the PNG data. + * + * png_image is a structure that describes the in-memory format of an image + * when it is being read or defines the in-memory format of an image that you + * need to write: + */ +#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) || \ + defined(PNG_SIMPLIFIED_WRITE_SUPPORTED) + +#define PNG_IMAGE_VERSION 1 + +typedef struct png_control *png_controlp; +typedef struct +{ + png_controlp opaque; /* Initialize to NULL, free with png_image_free */ + png_uint_32 version; /* Set to PNG_IMAGE_VERSION */ + png_uint_32 width; /* Image width in pixels (columns) */ + png_uint_32 height; /* Image height in pixels (rows) */ + png_uint_32 format; /* Image format as defined below */ + png_uint_32 flags; /* A bit mask containing informational flags */ + png_uint_32 colormap_entries; + /* Number of entries in the color-map */ + + /* In the event of an error or warning the following field will be set to a + * non-zero value and the 'message' field will contain a '\0' terminated + * string with the libpng error or warning message. If both warnings and + * an error were encountered, only the error is recorded. If there + * are multiple warnings, only the first one is recorded. + * + * The upper 30 bits of this value are reserved, the low two bits contain + * a value as follows: + */ +# define PNG_IMAGE_WARNING 1 +# define PNG_IMAGE_ERROR 2 + /* + * The result is a two-bit code such that a value more than 1 indicates + * a failure in the API just called: + * + * 0 - no warning or error + * 1 - warning + * 2 - error + * 3 - error preceded by warning + */ +# define PNG_IMAGE_FAILED(png_cntrl) ((((png_cntrl).warning_or_error)&0x03)>1) + + png_uint_32 warning_or_error; + + char message[64]; +} png_image, *png_imagep; + +/* The samples of the image have one to four channels whose components have + * original values in the range 0 to 1.0: + * + * 1: A single gray or luminance channel (G). + * 2: A gray/luminance channel and an alpha channel (GA). + * 3: Three red, green, blue color channels (RGB). + * 4: Three color channels and an alpha channel (RGBA). + * + * The components are encoded in one of two ways: + * + * a) As a small integer, value 0..255, contained in a single byte. For the + * alpha channel the original value is simply value/255. For the color or + * luminance channels the value is encoded according to the sRGB specification + * and matches the 8-bit format expected by typical display devices. + * + * The color/gray channels are not scaled (pre-multiplied) by the alpha + * channel and are suitable for passing to color management software. + * + * b) As a value in the range 0..65535, contained in a 2-byte integer. All + * channels can be converted to the original value by dividing by 65535; all + * channels are linear. Color channels use the RGB encoding (RGB end-points) of + * the sRGB specification. This encoding is identified by the + * PNG_FORMAT_FLAG_LINEAR flag below. + * + * When the simplified API needs to convert between sRGB and linear colorspaces, + * the actual sRGB transfer curve defined in the sRGB specification (see the + * article at https://en.wikipedia.org/wiki/SRGB) is used, not the gamma=1/2.2 + * approximation used elsewhere in libpng. + * + * When an alpha channel is present it is expected to denote pixel coverage + * of the color or luminance channels and is returned as an associated alpha + * channel: the color/gray channels are scaled (pre-multiplied) by the alpha + * value. + * + * The samples are either contained directly in the image data, between 1 and 8 + * bytes per pixel according to the encoding, or are held in a color-map indexed + * by bytes in the image data. In the case of a color-map the color-map entries + * are individual samples, encoded as above, and the image data has one byte per + * pixel to select the relevant sample from the color-map. + */ + +/* PNG_FORMAT_* + * + * #defines to be used in png_image::format. Each #define identifies a + * particular layout of sample data and, if present, alpha values. There are + * separate defines for each of the two component encodings. + * + * A format is built up using single bit flag values. All combinations are + * valid. Formats can be built up from the flag values or you can use one of + * the predefined values below. When testing formats always use the FORMAT_FLAG + * macros to test for individual features - future versions of the library may + * add new flags. + * + * When reading or writing color-mapped images the format should be set to the + * format of the entries in the color-map then png_image_{read,write}_colormap + * called to read or write the color-map and set the format correctly for the + * image data. Do not set the PNG_FORMAT_FLAG_COLORMAP bit directly! + * + * NOTE: libpng can be built with particular features disabled. If you see + * compiler errors because the definition of one of the following flags has been + * compiled out it is because libpng does not have the required support. It is + * possible, however, for the libpng configuration to enable the format on just + * read or just write; in that case you may see an error at run time. You can + * guard against this by checking for the definition of the appropriate + * "_SUPPORTED" macro, one of: + * + * PNG_SIMPLIFIED_{READ,WRITE}_{BGR,AFIRST}_SUPPORTED + */ +#define PNG_FORMAT_FLAG_ALPHA 0x01U /* format with an alpha channel */ +#define PNG_FORMAT_FLAG_COLOR 0x02U /* color format: otherwise grayscale */ +#define PNG_FORMAT_FLAG_LINEAR 0x04U /* 2-byte channels else 1-byte */ +#define PNG_FORMAT_FLAG_COLORMAP 0x08U /* image data is color-mapped */ + +#ifdef PNG_FORMAT_BGR_SUPPORTED +# define PNG_FORMAT_FLAG_BGR 0x10U /* BGR colors, else order is RGB */ +#endif + +#ifdef PNG_FORMAT_AFIRST_SUPPORTED +# define PNG_FORMAT_FLAG_AFIRST 0x20U /* alpha channel comes first */ +#endif + +#define PNG_FORMAT_FLAG_ASSOCIATED_ALPHA 0x40U /* alpha channel is associated */ + +/* Commonly used formats have predefined macros. + * + * First the single byte (sRGB) formats: + */ +#define PNG_FORMAT_GRAY 0 +#define PNG_FORMAT_GA PNG_FORMAT_FLAG_ALPHA +#define PNG_FORMAT_AG (PNG_FORMAT_GA|PNG_FORMAT_FLAG_AFIRST) +#define PNG_FORMAT_RGB PNG_FORMAT_FLAG_COLOR +#define PNG_FORMAT_BGR (PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_BGR) +#define PNG_FORMAT_RGBA (PNG_FORMAT_RGB|PNG_FORMAT_FLAG_ALPHA) +#define PNG_FORMAT_ARGB (PNG_FORMAT_RGBA|PNG_FORMAT_FLAG_AFIRST) +#define PNG_FORMAT_BGRA (PNG_FORMAT_BGR|PNG_FORMAT_FLAG_ALPHA) +#define PNG_FORMAT_ABGR (PNG_FORMAT_BGRA|PNG_FORMAT_FLAG_AFIRST) + +/* Then the linear 2-byte formats. When naming these "Y" is used to + * indicate a luminance (gray) channel. + */ +#define PNG_FORMAT_LINEAR_Y PNG_FORMAT_FLAG_LINEAR +#define PNG_FORMAT_LINEAR_Y_ALPHA (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_ALPHA) +#define PNG_FORMAT_LINEAR_RGB (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR) +#define PNG_FORMAT_LINEAR_RGB_ALPHA \ + (PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_ALPHA) + +/* With color-mapped formats the image data is one byte for each pixel, the byte + * is an index into the color-map which is formatted as above. To obtain a + * color-mapped format it is sufficient just to add the PNG_FOMAT_FLAG_COLORMAP + * to one of the above definitions, or you can use one of the definitions below. + */ +#define PNG_FORMAT_RGB_COLORMAP (PNG_FORMAT_RGB|PNG_FORMAT_FLAG_COLORMAP) +#define PNG_FORMAT_BGR_COLORMAP (PNG_FORMAT_BGR|PNG_FORMAT_FLAG_COLORMAP) +#define PNG_FORMAT_RGBA_COLORMAP (PNG_FORMAT_RGBA|PNG_FORMAT_FLAG_COLORMAP) +#define PNG_FORMAT_ARGB_COLORMAP (PNG_FORMAT_ARGB|PNG_FORMAT_FLAG_COLORMAP) +#define PNG_FORMAT_BGRA_COLORMAP (PNG_FORMAT_BGRA|PNG_FORMAT_FLAG_COLORMAP) +#define PNG_FORMAT_ABGR_COLORMAP (PNG_FORMAT_ABGR|PNG_FORMAT_FLAG_COLORMAP) + +/* PNG_IMAGE macros + * + * These are convenience macros to derive information from a png_image + * structure. The PNG_IMAGE_SAMPLE_ macros return values appropriate to the + * actual image sample values - either the entries in the color-map or the + * pixels in the image. The PNG_IMAGE_PIXEL_ macros return corresponding values + * for the pixels and will always return 1 for color-mapped formats. The + * remaining macros return information about the rows in the image and the + * complete image. + * + * NOTE: All the macros that take a png_image::format parameter are compile time + * constants if the format parameter is, itself, a constant. Therefore these + * macros can be used in array declarations and case labels where required. + * Similarly the macros are also pre-processor constants (sizeof is not used) so + * they can be used in #if tests. + * + * First the information about the samples. + */ +#define PNG_IMAGE_SAMPLE_CHANNELS(fmt)\ + (((fmt)&(PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_ALPHA))+1) + /* Return the total number of channels in a given format: 1..4 */ + +#define PNG_IMAGE_SAMPLE_COMPONENT_SIZE(fmt)\ + ((((fmt) & PNG_FORMAT_FLAG_LINEAR) >> 2)+1) + /* Return the size in bytes of a single component of a pixel or color-map + * entry (as appropriate) in the image: 1 or 2. + */ + +#define PNG_IMAGE_SAMPLE_SIZE(fmt)\ + (PNG_IMAGE_SAMPLE_CHANNELS(fmt) * PNG_IMAGE_SAMPLE_COMPONENT_SIZE(fmt)) + /* This is the size of the sample data for one sample. If the image is + * color-mapped it is the size of one color-map entry (and image pixels are + * one byte in size), otherwise it is the size of one image pixel. + */ + +#define PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(fmt)\ + (PNG_IMAGE_SAMPLE_CHANNELS(fmt) * 256) + /* The maximum size of the color-map required by the format expressed in a + * count of components. This can be used to compile-time allocate a + * color-map: + * + * png_uint_16 colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(linear_fmt)]; + * + * png_byte colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(sRGB_fmt)]; + * + * Alternatively use the PNG_IMAGE_COLORMAP_SIZE macro below to use the + * information from one of the png_image_begin_read_ APIs and dynamically + * allocate the required memory. + */ + +/* Corresponding information about the pixels */ +#define PNG_IMAGE_PIXEL_(test,fmt)\ + (((fmt)&PNG_FORMAT_FLAG_COLORMAP)?1:test(fmt)) + +#define PNG_IMAGE_PIXEL_CHANNELS(fmt)\ + PNG_IMAGE_PIXEL_(PNG_IMAGE_SAMPLE_CHANNELS,fmt) + /* The number of separate channels (components) in a pixel; 1 for a + * color-mapped image. + */ + +#define PNG_IMAGE_PIXEL_COMPONENT_SIZE(fmt)\ + PNG_IMAGE_PIXEL_(PNG_IMAGE_SAMPLE_COMPONENT_SIZE,fmt) + /* The size, in bytes, of each component in a pixel; 1 for a color-mapped + * image. + */ + +#define PNG_IMAGE_PIXEL_SIZE(fmt) PNG_IMAGE_PIXEL_(PNG_IMAGE_SAMPLE_SIZE,fmt) + /* The size, in bytes, of a complete pixel; 1 for a color-mapped image. */ + +/* Information about the whole row, or whole image */ +#define PNG_IMAGE_ROW_STRIDE(image)\ + (PNG_IMAGE_PIXEL_CHANNELS((image).format) * (image).width) + /* Return the total number of components in a single row of the image; this + * is the minimum 'row stride', the minimum count of components between each + * row. For a color-mapped image this is the minimum number of bytes in a + * row. + * + * WARNING: this macro overflows for some images with more than one component + * and very large image widths. libpng will refuse to process an image where + * this macro would overflow. + */ + +#define PNG_IMAGE_BUFFER_SIZE(image, row_stride)\ + (PNG_IMAGE_PIXEL_COMPONENT_SIZE((image).format)*(image).height*(row_stride)) + /* Return the size, in bytes, of an image buffer given a png_image and a row + * stride - the number of components to leave space for in each row. + * + * WARNING: this macro overflows a 32-bit integer for some large PNG images, + * libpng will refuse to process an image where such an overflow would occur. + */ + +#define PNG_IMAGE_SIZE(image)\ + PNG_IMAGE_BUFFER_SIZE(image, PNG_IMAGE_ROW_STRIDE(image)) + /* Return the size, in bytes, of the image in memory given just a png_image; + * the row stride is the minimum stride required for the image. + */ + +#define PNG_IMAGE_COLORMAP_SIZE(image)\ + (PNG_IMAGE_SAMPLE_SIZE((image).format) * (image).colormap_entries) + /* Return the size, in bytes, of the color-map of this image. If the image + * format is not a color-map format this will return a size sufficient for + * 256 entries in the given format; check PNG_FORMAT_FLAG_COLORMAP if + * you don't want to allocate a color-map in this case. + */ + +/* PNG_IMAGE_FLAG_* + * + * Flags containing additional information about the image are held in the + * 'flags' field of png_image. + */ +#define PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB 0x01 + /* This indicates the the RGB values of the in-memory bitmap do not + * correspond to the red, green and blue end-points defined by sRGB. + */ + +#define PNG_IMAGE_FLAG_FAST 0x02 + /* On write emphasise speed over compression; the resultant PNG file will be + * larger but will be produced significantly faster, particular for large + * images. Do not use this option for images which will be distributed, only + * used it when producing intermediate files that will be read back in + * repeatedly. For a typical 24-bit image the option will double the read + * speed at the cost of increasing the image size by 25%, however for many + * more compressible images the PNG file can be 10 times larger with only a + * slight speed gain. + */ + +#define PNG_IMAGE_FLAG_16BIT_sRGB 0x04 + /* On read if the image is a 16-bit per component image and there is no gAMA + * or sRGB chunk assume that the components are sRGB encoded. Notice that + * images output by the simplified API always have gamma information; setting + * this flag only affects the interpretation of 16-bit images from an + * external source. It is recommended that the application expose this flag + * to the user; the user can normally easily recognize the difference between + * linear and sRGB encoding. This flag has no effect on write - the data + * passed to the write APIs must have the correct encoding (as defined + * above.) + * + * If the flag is not set (the default) input 16-bit per component data is + * assumed to be linear. + * + * NOTE: the flag can only be set after the png_image_begin_read_ call, + * because that call initializes the 'flags' field. + */ + +#ifdef PNG_SIMPLIFIED_READ_SUPPORTED +/* READ APIs + * --------- + * + * The png_image passed to the read APIs must have been initialized by setting + * the png_controlp field 'opaque' to NULL (or, safer, memset the whole thing.) + */ +#ifdef PNG_STDIO_SUPPORTED +PNG_EXPORT(234, int, png_image_begin_read_from_file, (png_imagep image, + const char *file_name)); + /* The named file is opened for read and the image header is filled in + * from the PNG header in the file. + */ + +PNG_EXPORT(235, int, png_image_begin_read_from_stdio, (png_imagep image, + FILE* file)); + /* The PNG header is read from the stdio FILE object. */ +#endif /* STDIO */ + +PNG_EXPORT(236, int, png_image_begin_read_from_memory, (png_imagep image, + png_const_voidp memory, png_size_t size)); + /* The PNG header is read from the given memory buffer. */ + +PNG_EXPORT(237, int, png_image_finish_read, (png_imagep image, + png_const_colorp background, void *buffer, png_int_32 row_stride, + void *colormap)); + /* Finish reading the image into the supplied buffer and clean up the + * png_image structure. + * + * row_stride is the step, in byte or 2-byte units as appropriate, + * between adjacent rows. A positive stride indicates that the top-most row + * is first in the buffer - the normal top-down arrangement. A negative + * stride indicates that the bottom-most row is first in the buffer. + * + * background need only be supplied if an alpha channel must be removed from + * a png_byte format and the removal is to be done by compositing on a solid + * color; otherwise it may be NULL and any composition will be done directly + * onto the buffer. The value is an sRGB color to use for the background, + * for grayscale output the green channel is used. + * + * background must be supplied when an alpha channel must be removed from a + * single byte color-mapped output format, in other words if: + * + * 1) The original format from png_image_begin_read_from_* had + * PNG_FORMAT_FLAG_ALPHA set. + * 2) The format set by the application does not. + * 3) The format set by the application has PNG_FORMAT_FLAG_COLORMAP set and + * PNG_FORMAT_FLAG_LINEAR *not* set. + * + * For linear output removing the alpha channel is always done by compositing + * on black and background is ignored. + * + * colormap must be supplied when PNG_FORMAT_FLAG_COLORMAP is set. It must + * be at least the size (in bytes) returned by PNG_IMAGE_COLORMAP_SIZE. + * image->colormap_entries will be updated to the actual number of entries + * written to the colormap; this may be less than the original value. + */ + +PNG_EXPORT(238, void, png_image_free, (png_imagep image)); + /* Free any data allocated by libpng in image->opaque, setting the pointer to + * NULL. May be called at any time after the structure is initialized. + */ +#endif /* SIMPLIFIED_READ */ + +#ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED +/* WRITE APIS + * ---------- + * For write you must initialize a png_image structure to describe the image to + * be written. To do this use memset to set the whole structure to 0 then + * initialize fields describing your image. + * + * version: must be set to PNG_IMAGE_VERSION + * opaque: must be initialized to NULL + * width: image width in pixels + * height: image height in rows + * format: the format of the data (image and color-map) you wish to write + * flags: set to 0 unless one of the defined flags applies; set + * PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB for color format images where the RGB + * values do not correspond to the colors in sRGB. + * colormap_entries: set to the number of entries in the color-map (0 to 256) + */ +#ifdef PNG_SIMPLIFIED_WRITE_STDIO_SUPPORTED +PNG_EXPORT(239, int, png_image_write_to_file, (png_imagep image, + const char *file, int convert_to_8bit, const void *buffer, + png_int_32 row_stride, const void *colormap)); + /* Write the image to the named file. */ + +PNG_EXPORT(240, int, png_image_write_to_stdio, (png_imagep image, FILE *file, + int convert_to_8_bit, const void *buffer, png_int_32 row_stride, + const void *colormap)); + /* Write the image to the given (FILE*). */ +#endif /* SIMPLIFIED_WRITE_STDIO */ + +/* With all write APIs if image is in one of the linear formats with 16-bit + * data then setting convert_to_8_bit will cause the output to be an 8-bit PNG + * gamma encoded according to the sRGB specification, otherwise a 16-bit linear + * encoded PNG file is written. + * + * With color-mapped data formats the colormap parameter point to a color-map + * with at least image->colormap_entries encoded in the specified format. If + * the format is linear the written PNG color-map will be converted to sRGB + * regardless of the convert_to_8_bit flag. + * + * With all APIs row_stride is handled as in the read APIs - it is the spacing + * from one row to the next in component sized units (1 or 2 bytes) and if + * negative indicates a bottom-up row layout in the buffer. If row_stride is + * zero, libpng will calculate it for you from the image width and number of + * channels. + * + * Note that the write API does not support interlacing, sub-8-bit pixels or + * most ancillary chunks. If you need to write text chunks (e.g. for copyright + * notices) you need to use one of the other APIs. + */ + +PNG_EXPORT(245, int, png_image_write_to_memory, (png_imagep image, void *memory, + png_alloc_size_t * PNG_RESTRICT memory_bytes, int convert_to_8_bit, + const void *buffer, png_int_32 row_stride, const void *colormap)); + /* Write the image to the given memory buffer. The function both writes the + * whole PNG data stream to *memory and updates *memory_bytes with the count + * of bytes written. + * + * 'memory' may be NULL. In this case *memory_bytes is not read however on + * success the number of bytes which would have been written will still be + * stored in *memory_bytes. On failure *memory_bytes will contain 0. + * + * If 'memory' is not NULL it must point to memory[*memory_bytes] of + * writeable memory. + * + * If the function returns success memory[*memory_bytes] (if 'memory' is not + * NULL) contains the written PNG data. *memory_bytes will always be less + * than or equal to the original value. + * + * If the function returns false and *memory_bytes was not changed an error + * occured during write. If *memory_bytes was changed, or is not 0 if + * 'memory' was NULL, the write would have succeeded but for the memory + * buffer being too small. *memory_bytes contains the required number of + * bytes and will be bigger that the original value. + */ + +#define png_image_write_get_memory_size(image, size, convert_to_8_bit, buffer,\ + row_stride, colormap)\ + png_image_write_to_memory(&(image), 0, &(size), convert_to_8_bit, buffer,\ + row_stride, colormap) + /* Return the amount of memory in 'size' required to compress this image. + * The png_image structure 'image' must be filled in as in the above + * function and must not be changed before the actual write call, the buffer + * and all other parameters must also be identical to that in the final + * write call. The 'size' variable need not be initialized. + * + * NOTE: the macro returns true/false, if false is returned 'size' will be + * set to zero and the write failed and probably will fail if tried again. + */ + +/* You can pre-allocate the buffer by making sure it is of sufficient size + * regardless of the amount of compression achieved. The buffer size will + * always be bigger than the original image and it will never be filled. The + * following macros are provided to assist in allocating the buffer. + */ +#define PNG_IMAGE_DATA_SIZE(image) (PNG_IMAGE_SIZE(image)+(image).height) + /* The number of uncompressed bytes in the PNG byte encoding of the image; + * uncompressing the PNG IDAT data will give this number of bytes. + * + * NOTE: while PNG_IMAGE_SIZE cannot overflow for an image in memory this + * macro can because of the extra bytes used in the PNG byte encoding. You + * need to avoid this macro if your image size approaches 2^30 in width or + * height. The same goes for the remainder of these macros; they all produce + * bigger numbers than the actual in-memory image size. + */ +#ifndef PNG_ZLIB_MAX_SIZE +# define PNG_ZLIB_MAX_SIZE(b) ((b)+(((b)+7U)>>3)+(((b)+63U)>>6)+11U) + /* An upper bound on the number of compressed bytes given 'b' uncompressed + * bytes. This is based on deflateBounds() in zlib; different + * implementations of zlib compression may conceivably produce more data so + * if your zlib implementation is not zlib itself redefine this macro + * appropriately. + */ +#endif + +#define PNG_IMAGE_COMPRESSED_SIZE_MAX(image)\ + PNG_ZLIB_MAX_SIZE((png_alloc_size_t)PNG_IMAGE_DATA_SIZE(image)) + /* An upper bound on the size of the data in the PNG IDAT chunks. */ + +#define PNG_IMAGE_PNG_SIZE_MAX_(image, image_size)\ + ((8U/*sig*/+25U/*IHDR*/+16U/*gAMA*/+44U/*cHRM*/+12U/*IEND*/+\ + (((image).format&PNG_FORMAT_FLAG_COLORMAP)?/*colormap: PLTE, tRNS*/\ + 12U+3U*(image).colormap_entries/*PLTE data*/+\ + (((image).format&PNG_FORMAT_FLAG_ALPHA)?\ + 12U/*tRNS*/+(image).colormap_entries:0U):0U)+\ + 12U)+(12U*((image_size)/PNG_ZBUF_SIZE))/*IDAT*/+(image_size)) + /* A helper for the following macro; if your compiler cannot handle the + * following macro use this one with the result of + * PNG_IMAGE_COMPRESSED_SIZE_MAX(image) as the second argument (most + * compilers should handle this just fine.) + */ + +#define PNG_IMAGE_PNG_SIZE_MAX(image)\ + PNG_IMAGE_PNG_SIZE_MAX_(image, PNG_IMAGE_COMPRESSED_SIZE_MAX(image)) + /* An upper bound on the total length of the PNG data stream for 'image'. + * The result is of type png_alloc_size_t, on 32-bit systems this may + * overflow even though PNG_IMAGE_DATA_SIZE does not overflow; the write will + * run out of buffer space but return a corrected size which should work. + */ +#endif /* SIMPLIFIED_WRITE */ +/******************************************************************************* + * END OF SIMPLIFIED API + ******************************************************************************/ +#endif /* SIMPLIFIED_{READ|WRITE} */ + +/******************************************************************************* + * Section 6: IMPLEMENTATION OPTIONS + ******************************************************************************* + * + * Support for arbitrary implementation-specific optimizations. The API allows + * particular options to be turned on or off. 'Option' is the number of the + * option and 'onoff' is 0 (off) or non-0 (on). The value returned is given + * by the PNG_OPTION_ defines below. + * + * HARDWARE: normally hardware capabilites, such as the Intel SSE instructions, + * are detected at run time, however sometimes it may be impossible + * to do this in user mode, in which case it is necessary to discover + * the capabilities in an OS specific way. Such capabilities are + * listed here when libpng has support for them and must be turned + * ON by the application if present. + * + * SOFTWARE: sometimes software optimizations actually result in performance + * decrease on some architectures or systems, or with some sets of + * PNG images. 'Software' options allow such optimizations to be + * selected at run time. + */ +#ifdef PNG_SET_OPTION_SUPPORTED +#ifdef PNG_ARM_NEON_API_SUPPORTED +# define PNG_ARM_NEON 0 /* HARDWARE: ARM Neon SIMD instructions supported */ +#endif +#define PNG_MAXIMUM_INFLATE_WINDOW 2 /* SOFTWARE: force maximum window */ +#define PNG_SKIP_sRGB_CHECK_PROFILE 4 /* SOFTWARE: Check ICC profile for sRGB */ +#ifdef PNG_MIPS_MSA_API_SUPPORTED +# define PNG_MIPS_MSA 6 /* HARDWARE: MIPS Msa SIMD instructions supported */ +#endif +#define PNG_IGNORE_ADLER32 8 +#ifdef PNG_POWERPC_VSX_API_SUPPORTED +# define PNG_POWERPC_VSX 10 /* HARDWARE: PowerPC VSX SIMD instructions supported */ +#endif +#define PNG_OPTION_NEXT 12 /* Next option - numbers must be even */ + +/* Return values: NOTE: there are four values and 'off' is *not* zero */ +#define PNG_OPTION_UNSET 0 /* Unset - defaults to off */ +#define PNG_OPTION_INVALID 1 /* Option number out of range */ +#define PNG_OPTION_OFF 2 +#define PNG_OPTION_ON 3 + +PNG_EXPORT(244, int, png_set_option, (png_structrp png_ptr, int option, + int onoff)); +#endif /* SET_OPTION */ + +/******************************************************************************* + * END OF HARDWARE AND SOFTWARE OPTIONS + ******************************************************************************/ + +/* Maintainer: Put new public prototypes here ^, in libpng.3, in project + * defs, and in scripts/symbols.def. + */ + +/* The last ordinal number (this is the *last* one already used; the next + * one to use is one more than this.) + */ +#ifdef PNG_EXPORT_LAST_ORDINAL + PNG_EXPORT_LAST_ORDINAL(249); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* PNG_VERSION_INFO_ONLY */ +/* Do not put anything past this line */ +#endif /* PNG_H */ diff --git a/cdeps/mac/pngconf.h b/cdeps/mac/pngconf.h new file mode 100644 index 0000000..d13b13e --- /dev/null +++ b/cdeps/mac/pngconf.h @@ -0,0 +1,622 @@ + +/* pngconf.h - machine configurable file for libpng + * + * libpng version 1.6.34, September 29, 2017 + * + * Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson + * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) + * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) + * + * This code is released under the libpng license. + * For conditions of distribution and use, see the disclaimer + * and license in png.h + * + * Any machine specific code is near the front of this file, so if you + * are configuring libpng for a machine, you may want to read the section + * starting here down to where it starts to typedef png_color, png_text, + * and png_info. + */ + +#ifndef PNGCONF_H +#define PNGCONF_H + +#ifndef PNG_BUILDING_SYMBOL_TABLE /* else includes may cause problems */ + +/* From libpng 1.6.0 libpng requires an ANSI X3.159-1989 ("ISOC90") compliant C + * compiler for correct compilation. The following header files are required by + * the standard. If your compiler doesn't provide these header files, or they + * do not match the standard, you will need to provide/improve them. + */ +#include +#include + +/* Library header files. These header files are all defined by ISOC90; libpng + * expects conformant implementations, however, an ISOC90 conformant system need + * not provide these header files if the functionality cannot be implemented. + * In this case it will be necessary to disable the relevant parts of libpng in + * the build of pnglibconf.h. + * + * Prior to 1.6.0 string.h was included here; the API changes in 1.6.0 to not + * include this unnecessary header file. + */ + +#ifdef PNG_STDIO_SUPPORTED + /* Required for the definition of FILE: */ +# include +#endif + +#ifdef PNG_SETJMP_SUPPORTED + /* Required for the definition of jmp_buf and the declaration of longjmp: */ +# include +#endif + +#ifdef PNG_CONVERT_tIME_SUPPORTED + /* Required for struct tm: */ +# include +#endif + +#endif /* PNG_BUILDING_SYMBOL_TABLE */ + +/* Prior to 1.6.0 it was possible to turn off 'const' in declarations using + * PNG_NO_CONST; this is no longer supported except for data declarations which + * apparently still cause problems in 2011 on some compilers. + */ +#define PNG_CONST const /* backward compatibility only */ + +/* This controls optimization of the reading of 16-bit and 32-bit values + * from PNG files. It can be set on a per-app-file basis - it + * just changes whether a macro is used when the function is called. + * The library builder sets the default; if read functions are not + * built into the library the macro implementation is forced on. + */ +#ifndef PNG_READ_INT_FUNCTIONS_SUPPORTED +# define PNG_USE_READ_MACROS +#endif +#if !defined(PNG_NO_USE_READ_MACROS) && !defined(PNG_USE_READ_MACROS) +# if PNG_DEFAULT_READ_MACROS +# define PNG_USE_READ_MACROS +# endif +#endif + +/* COMPILER SPECIFIC OPTIONS. + * + * These options are provided so that a variety of difficult compilers + * can be used. Some are fixed at build time (e.g. PNG_API_RULE + * below) but still have compiler specific implementations, others + * may be changed on a per-file basis when compiling against libpng. + */ + +/* The PNGARG macro was used in versions of libpng prior to 1.6.0 to protect + * against legacy (pre ISOC90) compilers that did not understand function + * prototypes. It is not required for modern C compilers. + */ +#ifndef PNGARG +# define PNGARG(arglist) arglist +#endif + +/* Function calling conventions. + * ============================= + * Normally it is not necessary to specify to the compiler how to call + * a function - it just does it - however on x86 systems derived from + * Microsoft and Borland C compilers ('IBM PC', 'DOS', 'Windows' systems + * and some others) there are multiple ways to call a function and the + * default can be changed on the compiler command line. For this reason + * libpng specifies the calling convention of every exported function and + * every function called via a user supplied function pointer. This is + * done in this file by defining the following macros: + * + * PNGAPI Calling convention for exported functions. + * PNGCBAPI Calling convention for user provided (callback) functions. + * PNGCAPI Calling convention used by the ANSI-C library (required + * for longjmp callbacks and sometimes used internally to + * specify the calling convention for zlib). + * + * These macros should never be overridden. If it is necessary to + * change calling convention in a private build this can be done + * by setting PNG_API_RULE (which defaults to 0) to one of the values + * below to select the correct 'API' variants. + * + * PNG_API_RULE=0 Use PNGCAPI - the 'C' calling convention - throughout. + * This is correct in every known environment. + * PNG_API_RULE=1 Use the operating system convention for PNGAPI and + * the 'C' calling convention (from PNGCAPI) for + * callbacks (PNGCBAPI). This is no longer required + * in any known environment - if it has to be used + * please post an explanation of the problem to the + * libpng mailing list. + * + * These cases only differ if the operating system does not use the C + * calling convention, at present this just means the above cases + * (x86 DOS/Windows sytems) and, even then, this does not apply to + * Cygwin running on those systems. + * + * Note that the value must be defined in pnglibconf.h so that what + * the application uses to call the library matches the conventions + * set when building the library. + */ + +/* Symbol export + * ============= + * When building a shared library it is almost always necessary to tell + * the compiler which symbols to export. The png.h macro 'PNG_EXPORT' + * is used to mark the symbols. On some systems these symbols can be + * extracted at link time and need no special processing by the compiler, + * on other systems the symbols are flagged by the compiler and just + * the declaration requires a special tag applied (unfortunately) in a + * compiler dependent way. Some systems can do either. + * + * A small number of older systems also require a symbol from a DLL to + * be flagged to the program that calls it. This is a problem because + * we do not know in the header file included by application code that + * the symbol will come from a shared library, as opposed to a statically + * linked one. For this reason the application must tell us by setting + * the magic flag PNG_USE_DLL to turn on the special processing before + * it includes png.h. + * + * Four additional macros are used to make this happen: + * + * PNG_IMPEXP The magic (if any) to cause a symbol to be exported from + * the build or imported if PNG_USE_DLL is set - compiler + * and system specific. + * + * PNG_EXPORT_TYPE(type) A macro that pre or appends PNG_IMPEXP to + * 'type', compiler specific. + * + * PNG_DLL_EXPORT Set to the magic to use during a libpng build to + * make a symbol exported from the DLL. Not used in the + * public header files; see pngpriv.h for how it is used + * in the libpng build. + * + * PNG_DLL_IMPORT Set to the magic to force the libpng symbols to come + * from a DLL - used to define PNG_IMPEXP when + * PNG_USE_DLL is set. + */ + +/* System specific discovery. + * ========================== + * This code is used at build time to find PNG_IMPEXP, the API settings + * and PNG_EXPORT_TYPE(), it may also set a macro to indicate the DLL + * import processing is possible. On Windows systems it also sets + * compiler-specific macros to the values required to change the calling + * conventions of the various functions. + */ +#if defined(_Windows) || defined(_WINDOWS) || defined(WIN32) ||\ + defined(_WIN32) || defined(__WIN32__) || defined(__CYGWIN__) + /* Windows system (DOS doesn't support DLLs). Includes builds under Cygwin or + * MinGW on any architecture currently supported by Windows. Also includes + * Watcom builds but these need special treatment because they are not + * compatible with GCC or Visual C because of different calling conventions. + */ +# if PNG_API_RULE == 2 + /* If this line results in an error, either because __watcall is not + * understood or because of a redefine just below you cannot use *this* + * build of the library with the compiler you are using. *This* build was + * build using Watcom and applications must also be built using Watcom! + */ +# define PNGCAPI __watcall +# endif + +# if defined(__GNUC__) || (defined(_MSC_VER) && (_MSC_VER >= 800)) +# define PNGCAPI __cdecl +# if PNG_API_RULE == 1 + /* If this line results in an error __stdcall is not understood and + * PNG_API_RULE should not have been set to '1'. + */ +# define PNGAPI __stdcall +# endif +# else + /* An older compiler, or one not detected (erroneously) above, + * if necessary override on the command line to get the correct + * variants for the compiler. + */ +# ifndef PNGCAPI +# define PNGCAPI _cdecl +# endif +# if PNG_API_RULE == 1 && !defined(PNGAPI) +# define PNGAPI _stdcall +# endif +# endif /* compiler/api */ + + /* NOTE: PNGCBAPI always defaults to PNGCAPI. */ + +# if defined(PNGAPI) && !defined(PNG_USER_PRIVATEBUILD) +# error "PNG_USER_PRIVATEBUILD must be defined if PNGAPI is changed" +# endif + +# if (defined(_MSC_VER) && _MSC_VER < 800) ||\ + (defined(__BORLANDC__) && __BORLANDC__ < 0x500) + /* older Borland and MSC + * compilers used '__export' and required this to be after + * the type. + */ +# ifndef PNG_EXPORT_TYPE +# define PNG_EXPORT_TYPE(type) type PNG_IMPEXP +# endif +# define PNG_DLL_EXPORT __export +# else /* newer compiler */ +# define PNG_DLL_EXPORT __declspec(dllexport) +# ifndef PNG_DLL_IMPORT +# define PNG_DLL_IMPORT __declspec(dllimport) +# endif +# endif /* compiler */ + +#else /* !Windows */ +# if (defined(__IBMC__) || defined(__IBMCPP__)) && defined(__OS2__) +# define PNGAPI _System +# else /* !Windows/x86 && !OS/2 */ + /* Use the defaults, or define PNG*API on the command line (but + * this will have to be done for every compile!) + */ +# endif /* other system, !OS/2 */ +#endif /* !Windows/x86 */ + +/* Now do all the defaulting . */ +#ifndef PNGCAPI +# define PNGCAPI +#endif +#ifndef PNGCBAPI +# define PNGCBAPI PNGCAPI +#endif +#ifndef PNGAPI +# define PNGAPI PNGCAPI +#endif + +/* PNG_IMPEXP may be set on the compilation system command line or (if not set) + * then in an internal header file when building the library, otherwise (when + * using the library) it is set here. + */ +#ifndef PNG_IMPEXP +# if defined(PNG_USE_DLL) && defined(PNG_DLL_IMPORT) + /* This forces use of a DLL, disallowing static linking */ +# define PNG_IMPEXP PNG_DLL_IMPORT +# endif + +# ifndef PNG_IMPEXP +# define PNG_IMPEXP +# endif +#endif + +/* In 1.5.2 the definition of PNG_FUNCTION has been changed to always treat + * 'attributes' as a storage class - the attributes go at the start of the + * function definition, and attributes are always appended regardless of the + * compiler. This considerably simplifies these macros but may cause problems + * if any compilers both need function attributes and fail to handle them as + * a storage class (this is unlikely.) + */ +#ifndef PNG_FUNCTION +# define PNG_FUNCTION(type, name, args, attributes) attributes type name args +#endif + +#ifndef PNG_EXPORT_TYPE +# define PNG_EXPORT_TYPE(type) PNG_IMPEXP type +#endif + + /* The ordinal value is only relevant when preprocessing png.h for symbol + * table entries, so we discard it here. See the .dfn files in the + * scripts directory. + */ + +#ifndef PNG_EXPORTA +# define PNG_EXPORTA(ordinal, type, name, args, attributes) \ + PNG_FUNCTION(PNG_EXPORT_TYPE(type), (PNGAPI name), PNGARG(args), \ + PNG_LINKAGE_API attributes) +#endif + +/* ANSI-C (C90) does not permit a macro to be invoked with an empty argument, + * so make something non-empty to satisfy the requirement: + */ +#define PNG_EMPTY /*empty list*/ + +#define PNG_EXPORT(ordinal, type, name, args) \ + PNG_EXPORTA(ordinal, type, name, args, PNG_EMPTY) + +/* Use PNG_REMOVED to comment out a removed interface. */ +#ifndef PNG_REMOVED +# define PNG_REMOVED(ordinal, type, name, args, attributes) +#endif + +#ifndef PNG_CALLBACK +# define PNG_CALLBACK(type, name, args) type (PNGCBAPI name) PNGARG(args) +#endif + +/* Support for compiler specific function attributes. These are used + * so that where compiler support is available incorrect use of API + * functions in png.h will generate compiler warnings. + * + * Added at libpng-1.2.41. + */ + +#ifndef PNG_NO_PEDANTIC_WARNINGS +# ifndef PNG_PEDANTIC_WARNINGS_SUPPORTED +# define PNG_PEDANTIC_WARNINGS_SUPPORTED +# endif +#endif + +#ifdef PNG_PEDANTIC_WARNINGS_SUPPORTED + /* Support for compiler specific function attributes. These are used + * so that where compiler support is available, incorrect use of API + * functions in png.h will generate compiler warnings. Added at libpng + * version 1.2.41. Disabling these removes the warnings but may also produce + * less efficient code. + */ +# if defined(__clang__) && defined(__has_attribute) + /* Clang defines both __clang__ and __GNUC__. Check __clang__ first. */ +# if !defined(PNG_USE_RESULT) && __has_attribute(__warn_unused_result__) +# define PNG_USE_RESULT __attribute__((__warn_unused_result__)) +# endif +# if !defined(PNG_NORETURN) && __has_attribute(__noreturn__) +# define PNG_NORETURN __attribute__((__noreturn__)) +# endif +# if !defined(PNG_ALLOCATED) && __has_attribute(__malloc__) +# define PNG_ALLOCATED __attribute__((__malloc__)) +# endif +# if !defined(PNG_DEPRECATED) && __has_attribute(__deprecated__) +# define PNG_DEPRECATED __attribute__((__deprecated__)) +# endif +# if !defined(PNG_PRIVATE) +# ifdef __has_extension +# if __has_extension(attribute_unavailable_with_message) +# define PNG_PRIVATE __attribute__((__unavailable__(\ + "This function is not exported by libpng."))) +# endif +# endif +# endif +# ifndef PNG_RESTRICT +# define PNG_RESTRICT __restrict +# endif + +# elif defined(__GNUC__) +# ifndef PNG_USE_RESULT +# define PNG_USE_RESULT __attribute__((__warn_unused_result__)) +# endif +# ifndef PNG_NORETURN +# define PNG_NORETURN __attribute__((__noreturn__)) +# endif +# if __GNUC__ >= 3 +# ifndef PNG_ALLOCATED +# define PNG_ALLOCATED __attribute__((__malloc__)) +# endif +# ifndef PNG_DEPRECATED +# define PNG_DEPRECATED __attribute__((__deprecated__)) +# endif +# ifndef PNG_PRIVATE +# if 0 /* Doesn't work so we use deprecated instead*/ +# define PNG_PRIVATE \ + __attribute__((warning("This function is not exported by libpng."))) +# else +# define PNG_PRIVATE \ + __attribute__((__deprecated__)) +# endif +# endif +# if ((__GNUC__ > 3) || !defined(__GNUC_MINOR__) || (__GNUC_MINOR__ >= 1)) +# ifndef PNG_RESTRICT +# define PNG_RESTRICT __restrict +# endif +# endif /* __GNUC__.__GNUC_MINOR__ > 3.0 */ +# endif /* __GNUC__ >= 3 */ + +# elif defined(_MSC_VER) && (_MSC_VER >= 1300) +# ifndef PNG_USE_RESULT +# define PNG_USE_RESULT /* not supported */ +# endif +# ifndef PNG_NORETURN +# define PNG_NORETURN __declspec(noreturn) +# endif +# ifndef PNG_ALLOCATED +# if (_MSC_VER >= 1400) +# define PNG_ALLOCATED __declspec(restrict) +# endif +# endif +# ifndef PNG_DEPRECATED +# define PNG_DEPRECATED __declspec(deprecated) +# endif +# ifndef PNG_PRIVATE +# define PNG_PRIVATE __declspec(deprecated) +# endif +# ifndef PNG_RESTRICT +# if (_MSC_VER >= 1400) +# define PNG_RESTRICT __restrict +# endif +# endif + +# elif defined(__WATCOMC__) +# ifndef PNG_RESTRICT +# define PNG_RESTRICT __restrict +# endif +# endif +#endif /* PNG_PEDANTIC_WARNINGS */ + +#ifndef PNG_DEPRECATED +# define PNG_DEPRECATED /* Use of this function is deprecated */ +#endif +#ifndef PNG_USE_RESULT +# define PNG_USE_RESULT /* The result of this function must be checked */ +#endif +#ifndef PNG_NORETURN +# define PNG_NORETURN /* This function does not return */ +#endif +#ifndef PNG_ALLOCATED +# define PNG_ALLOCATED /* The result of the function is new memory */ +#endif +#ifndef PNG_PRIVATE +# define PNG_PRIVATE /* This is a private libpng function */ +#endif +#ifndef PNG_RESTRICT +# define PNG_RESTRICT /* The C99 "restrict" feature */ +#endif + +#ifndef PNG_FP_EXPORT /* A floating point API. */ +# ifdef PNG_FLOATING_POINT_SUPPORTED +# define PNG_FP_EXPORT(ordinal, type, name, args)\ + PNG_EXPORT(ordinal, type, name, args); +# else /* No floating point APIs */ +# define PNG_FP_EXPORT(ordinal, type, name, args) +# endif +#endif +#ifndef PNG_FIXED_EXPORT /* A fixed point API. */ +# ifdef PNG_FIXED_POINT_SUPPORTED +# define PNG_FIXED_EXPORT(ordinal, type, name, args)\ + PNG_EXPORT(ordinal, type, name, args); +# else /* No fixed point APIs */ +# define PNG_FIXED_EXPORT(ordinal, type, name, args) +# endif +#endif + +#ifndef PNG_BUILDING_SYMBOL_TABLE +/* Some typedefs to get us started. These should be safe on most of the common + * platforms. + * + * png_uint_32 and png_int_32 may, currently, be larger than required to hold a + * 32-bit value however this is not normally advisable. + * + * png_uint_16 and png_int_16 should always be two bytes in size - this is + * verified at library build time. + * + * png_byte must always be one byte in size. + * + * The checks below use constants from limits.h, as defined by the ISOC90 + * standard. + */ +#if CHAR_BIT == 8 && UCHAR_MAX == 255 + typedef unsigned char png_byte; +#else +# error "libpng requires 8-bit bytes" +#endif + +#if INT_MIN == -32768 && INT_MAX == 32767 + typedef int png_int_16; +#elif SHRT_MIN == -32768 && SHRT_MAX == 32767 + typedef short png_int_16; +#else +# error "libpng requires a signed 16-bit type" +#endif + +#if UINT_MAX == 65535 + typedef unsigned int png_uint_16; +#elif USHRT_MAX == 65535 + typedef unsigned short png_uint_16; +#else +# error "libpng requires an unsigned 16-bit type" +#endif + +#if INT_MIN < -2147483646 && INT_MAX > 2147483646 + typedef int png_int_32; +#elif LONG_MIN < -2147483646 && LONG_MAX > 2147483646 + typedef long int png_int_32; +#else +# error "libpng requires a signed 32-bit (or more) type" +#endif + +#if UINT_MAX > 4294967294U + typedef unsigned int png_uint_32; +#elif ULONG_MAX > 4294967294U + typedef unsigned long int png_uint_32; +#else +# error "libpng requires an unsigned 32-bit (or more) type" +#endif + +/* Prior to 1.6.0 it was possible to disable the use of size_t, 1.6.0, however, + * requires an ISOC90 compiler and relies on consistent behavior of sizeof. + */ +typedef size_t png_size_t; +typedef ptrdiff_t png_ptrdiff_t; + +/* libpng needs to know the maximum value of 'size_t' and this controls the + * definition of png_alloc_size_t, below. This maximum value of size_t limits + * but does not control the maximum allocations the library makes - there is + * direct application control of this through png_set_user_limits(). + */ +#ifndef PNG_SMALL_SIZE_T + /* Compiler specific tests for systems where size_t is known to be less than + * 32 bits (some of these systems may no longer work because of the lack of + * 'far' support; see above.) + */ +# if (defined(__TURBOC__) && !defined(__FLAT__)) ||\ + (defined(_MSC_VER) && defined(MAXSEG_64K)) +# define PNG_SMALL_SIZE_T +# endif +#endif + +/* png_alloc_size_t is guaranteed to be no smaller than png_size_t, and no + * smaller than png_uint_32. Casts from png_size_t or png_uint_32 to + * png_alloc_size_t are not necessary; in fact, it is recommended not to use + * them at all so that the compiler can complain when something turns out to be + * problematic. + * + * Casts in the other direction (from png_alloc_size_t to png_size_t or + * png_uint_32) should be explicitly applied; however, we do not expect to + * encounter practical situations that require such conversions. + * + * PNG_SMALL_SIZE_T must be defined if the maximum value of size_t is less than + * 4294967295 - i.e. less than the maximum value of png_uint_32. + */ +#ifdef PNG_SMALL_SIZE_T + typedef png_uint_32 png_alloc_size_t; +#else + typedef png_size_t png_alloc_size_t; +#endif + +/* Prior to 1.6.0 libpng offered limited support for Microsoft C compiler + * implementations of Intel CPU specific support of user-mode segmented address + * spaces, where 16-bit pointers address more than 65536 bytes of memory using + * separate 'segment' registers. The implementation requires two different + * types of pointer (only one of which includes the segment value.) + * + * If required this support is available in version 1.2 of libpng and may be + * available in versions through 1.5, although the correctness of the code has + * not been verified recently. + */ + +/* Typedef for floating-point numbers that are converted to fixed-point with a + * multiple of 100,000, e.g., gamma + */ +typedef png_int_32 png_fixed_point; + +/* Add typedefs for pointers */ +typedef void * png_voidp; +typedef const void * png_const_voidp; +typedef png_byte * png_bytep; +typedef const png_byte * png_const_bytep; +typedef png_uint_32 * png_uint_32p; +typedef const png_uint_32 * png_const_uint_32p; +typedef png_int_32 * png_int_32p; +typedef const png_int_32 * png_const_int_32p; +typedef png_uint_16 * png_uint_16p; +typedef const png_uint_16 * png_const_uint_16p; +typedef png_int_16 * png_int_16p; +typedef const png_int_16 * png_const_int_16p; +typedef char * png_charp; +typedef const char * png_const_charp; +typedef png_fixed_point * png_fixed_point_p; +typedef const png_fixed_point * png_const_fixed_point_p; +typedef png_size_t * png_size_tp; +typedef const png_size_t * png_const_size_tp; + +#ifdef PNG_STDIO_SUPPORTED +typedef FILE * png_FILE_p; +#endif + +#ifdef PNG_FLOATING_POINT_SUPPORTED +typedef double * png_doublep; +typedef const double * png_const_doublep; +#endif + +/* Pointers to pointers; i.e. arrays */ +typedef png_byte * * png_bytepp; +typedef png_uint_32 * * png_uint_32pp; +typedef png_int_32 * * png_int_32pp; +typedef png_uint_16 * * png_uint_16pp; +typedef png_int_16 * * png_int_16pp; +typedef const char * * png_const_charpp; +typedef char * * png_charpp; +typedef png_fixed_point * * png_fixed_point_pp; +#ifdef PNG_FLOATING_POINT_SUPPORTED +typedef double * * png_doublepp; +#endif + +/* Pointers to pointers to pointers; i.e., pointer to array */ +typedef char * * * png_charppp; + +#endif /* PNG_BUILDING_SYMBOL_TABLE */ + +#endif /* PNGCONF_H */ diff --git a/cdeps/mac/pnglibconf.h b/cdeps/mac/pnglibconf.h new file mode 100644 index 0000000..cb4ea9e --- /dev/null +++ b/cdeps/mac/pnglibconf.h @@ -0,0 +1,218 @@ +/* pnglibconf.h - library build configuration */ + +/* libpng version 1.6.34, September 29, 2017 */ + +/* Copyright (c) 1998-2017 Glenn Randers-Pehrson */ + +/* This code is released under the libpng license. */ +/* For conditions of distribution and use, see the disclaimer */ +/* and license in png.h */ + +/* pnglibconf.h */ +/* Machine generated file: DO NOT EDIT */ +/* Derived from: scripts/pnglibconf.dfa */ +#ifndef PNGLCONF_H +#define PNGLCONF_H +/* options */ +#define PNG_16BIT_SUPPORTED +#define PNG_ALIGNED_MEMORY_SUPPORTED +/*#undef PNG_ARM_NEON_API_SUPPORTED*/ +/*#undef PNG_ARM_NEON_CHECK_SUPPORTED*/ +#define PNG_BENIGN_ERRORS_SUPPORTED +#define PNG_BENIGN_READ_ERRORS_SUPPORTED +/*#undef PNG_BENIGN_WRITE_ERRORS_SUPPORTED*/ +#define PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED +#define PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED +#define PNG_COLORSPACE_SUPPORTED +#define PNG_CONSOLE_IO_SUPPORTED +#define PNG_CONVERT_tIME_SUPPORTED +#define PNG_EASY_ACCESS_SUPPORTED +/*#undef PNG_ERROR_NUMBERS_SUPPORTED*/ +#define PNG_ERROR_TEXT_SUPPORTED +#define PNG_FIXED_POINT_SUPPORTED +#define PNG_FLOATING_ARITHMETIC_SUPPORTED +#define PNG_FLOATING_POINT_SUPPORTED +#define PNG_FORMAT_AFIRST_SUPPORTED +#define PNG_FORMAT_BGR_SUPPORTED +#define PNG_GAMMA_SUPPORTED +#define PNG_GET_PALETTE_MAX_SUPPORTED +#define PNG_HANDLE_AS_UNKNOWN_SUPPORTED +#define PNG_INCH_CONVERSIONS_SUPPORTED +#define PNG_INFO_IMAGE_SUPPORTED +#define PNG_IO_STATE_SUPPORTED +#define PNG_MNG_FEATURES_SUPPORTED +#define PNG_POINTER_INDEXING_SUPPORTED +/*#undef PNG_POWERPC_VSX_API_SUPPORTED*/ +/*#undef PNG_POWERPC_VSX_CHECK_SUPPORTED*/ +#define PNG_PROGRESSIVE_READ_SUPPORTED +#define PNG_READ_16BIT_SUPPORTED +#define PNG_READ_ALPHA_MODE_SUPPORTED +#define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED +#define PNG_READ_BACKGROUND_SUPPORTED +#define PNG_READ_BGR_SUPPORTED +#define PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED +#define PNG_READ_COMPOSITE_NODIV_SUPPORTED +#define PNG_READ_COMPRESSED_TEXT_SUPPORTED +#define PNG_READ_EXPAND_16_SUPPORTED +#define PNG_READ_EXPAND_SUPPORTED +#define PNG_READ_FILLER_SUPPORTED +#define PNG_READ_GAMMA_SUPPORTED +#define PNG_READ_GET_PALETTE_MAX_SUPPORTED +#define PNG_READ_GRAY_TO_RGB_SUPPORTED +#define PNG_READ_INTERLACING_SUPPORTED +#define PNG_READ_INT_FUNCTIONS_SUPPORTED +#define PNG_READ_INVERT_ALPHA_SUPPORTED +#define PNG_READ_INVERT_SUPPORTED +#define PNG_READ_OPT_PLTE_SUPPORTED +#define PNG_READ_PACKSWAP_SUPPORTED +#define PNG_READ_PACK_SUPPORTED +#define PNG_READ_QUANTIZE_SUPPORTED +#define PNG_READ_RGB_TO_GRAY_SUPPORTED +#define PNG_READ_SCALE_16_TO_8_SUPPORTED +#define PNG_READ_SHIFT_SUPPORTED +#define PNG_READ_STRIP_16_TO_8_SUPPORTED +#define PNG_READ_STRIP_ALPHA_SUPPORTED +#define PNG_READ_SUPPORTED +#define PNG_READ_SWAP_ALPHA_SUPPORTED +#define PNG_READ_SWAP_SUPPORTED +#define PNG_READ_TEXT_SUPPORTED +#define PNG_READ_TRANSFORMS_SUPPORTED +#define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED +#define PNG_READ_USER_CHUNKS_SUPPORTED +#define PNG_READ_USER_TRANSFORM_SUPPORTED +#define PNG_READ_bKGD_SUPPORTED +#define PNG_READ_cHRM_SUPPORTED +#define PNG_READ_eXIf_SUPPORTED +#define PNG_READ_gAMA_SUPPORTED +#define PNG_READ_hIST_SUPPORTED +#define PNG_READ_iCCP_SUPPORTED +#define PNG_READ_iTXt_SUPPORTED +#define PNG_READ_oFFs_SUPPORTED +#define PNG_READ_pCAL_SUPPORTED +#define PNG_READ_pHYs_SUPPORTED +#define PNG_READ_sBIT_SUPPORTED +#define PNG_READ_sCAL_SUPPORTED +#define PNG_READ_sPLT_SUPPORTED +#define PNG_READ_sRGB_SUPPORTED +#define PNG_READ_tEXt_SUPPORTED +#define PNG_READ_tIME_SUPPORTED +#define PNG_READ_tRNS_SUPPORTED +#define PNG_READ_zTXt_SUPPORTED +#define PNG_SAVE_INT_32_SUPPORTED +#define PNG_SAVE_UNKNOWN_CHUNKS_SUPPORTED +#define PNG_SEQUENTIAL_READ_SUPPORTED +#define PNG_SETJMP_SUPPORTED +#define PNG_SET_OPTION_SUPPORTED +#define PNG_SET_UNKNOWN_CHUNKS_SUPPORTED +#define PNG_SET_USER_LIMITS_SUPPORTED +#define PNG_SIMPLIFIED_READ_AFIRST_SUPPORTED +#define PNG_SIMPLIFIED_READ_BGR_SUPPORTED +#define PNG_SIMPLIFIED_READ_SUPPORTED +#define PNG_SIMPLIFIED_WRITE_AFIRST_SUPPORTED +#define PNG_SIMPLIFIED_WRITE_BGR_SUPPORTED +#define PNG_SIMPLIFIED_WRITE_STDIO_SUPPORTED +#define PNG_SIMPLIFIED_WRITE_SUPPORTED +#define PNG_STDIO_SUPPORTED +#define PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED +#define PNG_TEXT_SUPPORTED +#define PNG_TIME_RFC1123_SUPPORTED +#define PNG_UNKNOWN_CHUNKS_SUPPORTED +#define PNG_USER_CHUNKS_SUPPORTED +#define PNG_USER_LIMITS_SUPPORTED +#define PNG_USER_MEM_SUPPORTED +#define PNG_USER_TRANSFORM_INFO_SUPPORTED +#define PNG_USER_TRANSFORM_PTR_SUPPORTED +#define PNG_WARNINGS_SUPPORTED +#define PNG_WRITE_16BIT_SUPPORTED +#define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED +#define PNG_WRITE_BGR_SUPPORTED +#define PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED +#define PNG_WRITE_COMPRESSED_TEXT_SUPPORTED +#define PNG_WRITE_CUSTOMIZE_COMPRESSION_SUPPORTED +#define PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED +#define PNG_WRITE_FILLER_SUPPORTED +#define PNG_WRITE_FILTER_SUPPORTED +#define PNG_WRITE_FLUSH_SUPPORTED +#define PNG_WRITE_GET_PALETTE_MAX_SUPPORTED +#define PNG_WRITE_INTERLACING_SUPPORTED +#define PNG_WRITE_INT_FUNCTIONS_SUPPORTED +#define PNG_WRITE_INVERT_ALPHA_SUPPORTED +#define PNG_WRITE_INVERT_SUPPORTED +#define PNG_WRITE_OPTIMIZE_CMF_SUPPORTED +#define PNG_WRITE_PACKSWAP_SUPPORTED +#define PNG_WRITE_PACK_SUPPORTED +#define PNG_WRITE_SHIFT_SUPPORTED +#define PNG_WRITE_SUPPORTED +#define PNG_WRITE_SWAP_ALPHA_SUPPORTED +#define PNG_WRITE_SWAP_SUPPORTED +#define PNG_WRITE_TEXT_SUPPORTED +#define PNG_WRITE_TRANSFORMS_SUPPORTED +#define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED +#define PNG_WRITE_USER_TRANSFORM_SUPPORTED +#define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED +#define PNG_WRITE_bKGD_SUPPORTED +#define PNG_WRITE_cHRM_SUPPORTED +#define PNG_WRITE_eXIf_SUPPORTED +#define PNG_WRITE_gAMA_SUPPORTED +#define PNG_WRITE_hIST_SUPPORTED +#define PNG_WRITE_iCCP_SUPPORTED +#define PNG_WRITE_iTXt_SUPPORTED +#define PNG_WRITE_oFFs_SUPPORTED +#define PNG_WRITE_pCAL_SUPPORTED +#define PNG_WRITE_pHYs_SUPPORTED +#define PNG_WRITE_sBIT_SUPPORTED +#define PNG_WRITE_sCAL_SUPPORTED +#define PNG_WRITE_sPLT_SUPPORTED +#define PNG_WRITE_sRGB_SUPPORTED +#define PNG_WRITE_tEXt_SUPPORTED +#define PNG_WRITE_tIME_SUPPORTED +#define PNG_WRITE_tRNS_SUPPORTED +#define PNG_WRITE_zTXt_SUPPORTED +#define PNG_bKGD_SUPPORTED +#define PNG_cHRM_SUPPORTED +#define PNG_eXIf_SUPPORTED +#define PNG_gAMA_SUPPORTED +#define PNG_hIST_SUPPORTED +#define PNG_iCCP_SUPPORTED +#define PNG_iTXt_SUPPORTED +#define PNG_oFFs_SUPPORTED +#define PNG_pCAL_SUPPORTED +#define PNG_pHYs_SUPPORTED +#define PNG_sBIT_SUPPORTED +#define PNG_sCAL_SUPPORTED +#define PNG_sPLT_SUPPORTED +#define PNG_sRGB_SUPPORTED +#define PNG_tEXt_SUPPORTED +#define PNG_tIME_SUPPORTED +#define PNG_tRNS_SUPPORTED +#define PNG_zTXt_SUPPORTED +/* end of options */ +/* settings */ +#define PNG_API_RULE 0 +#define PNG_DEFAULT_READ_MACROS 1 +#define PNG_GAMMA_THRESHOLD_FIXED 5000 +#define PNG_IDAT_READ_SIZE PNG_ZBUF_SIZE +#define PNG_INFLATE_BUF_SIZE 1024 +#define PNG_LINKAGE_API extern +#define PNG_LINKAGE_CALLBACK extern +#define PNG_LINKAGE_DATA extern +#define PNG_LINKAGE_FUNCTION extern +#define PNG_MAX_GAMMA_8 11 +#define PNG_QUANTIZE_BLUE_BITS 5 +#define PNG_QUANTIZE_GREEN_BITS 5 +#define PNG_QUANTIZE_RED_BITS 5 +#define PNG_TEXT_Z_DEFAULT_COMPRESSION (-1) +#define PNG_TEXT_Z_DEFAULT_STRATEGY 0 +#define PNG_USER_CHUNK_CACHE_MAX 1000 +#define PNG_USER_CHUNK_MALLOC_MAX 8000000 +#define PNG_USER_HEIGHT_MAX 1000000 +#define PNG_USER_WIDTH_MAX 1000000 +#define PNG_ZBUF_SIZE 8192 +#define PNG_ZLIB_VERNUM 0x12b0 +#define PNG_Z_DEFAULT_COMPRESSION (-1) +#define PNG_Z_DEFAULT_NOFILTER_STRATEGY 0 +#define PNG_Z_DEFAULT_STRATEGY 1 +#define PNG_sCAL_PRECISION 5 +#define PNG_sRGB_PROFILE_CHECKS 2 +/* end of settings */ +#endif /* PNGLCONF_H */ diff --git a/robotgo.go b/robotgo.go index e97f828..2790710 100644 --- a/robotgo.go +++ b/robotgo.go @@ -25,20 +25,19 @@ package robotgo /* //#if defined(IS_MACOSX) #cgo darwin CFLAGS: -x objective-c -Wno-deprecated-declarations - #cgo darwin CFLAGS: -I/usr/local/opt/libpng/include -I/usr/local/opt/zlib/include #cgo darwin LDFLAGS: -framework Cocoa -framework OpenGL -framework IOKit #cgo darwin LDFLAGS: -framework Carbon -framework CoreFoundation - #cgo darwin LDFLAGS: -L/usr/local/opt/libpng/lib -lpng -L/usr/local/opt/zlib/lib -lz + #cgo darwin LDFLAGS:-L${SRCDIR}/cdeps/mac -lpng -lz //#elif defined(USE_X11) - // drop -std=c11 + // Drop -std=c11 #cgo linux CFLAGS: -I/usr/src #cgo linux LDFLAGS: -L/usr/src -lpng -lz -lX11 -lXtst -lX11-xcb -lxcb #cgo linux LDFLAGS: -lxcb-xkb -lxkbcommon -lxkbcommon-x11 -lm //#endif // #cgo windows LDFLAGS: -lgdi32 -luser32 -lpng -lz #cgo windows LDFLAGS: -lgdi32 -luser32 - #cgo windows,amd64 LDFLAGS: -L${SRCDIR}/cdeps/win64 -lpng -L${SRCDIR}/cdeps/win64 -lz - #cgo windows,386 LDFLAGS: -L${SRCDIR}/cdeps/win32 -lpng -L${SRCDIR}/cdeps/win32 -lz + #cgo windows,amd64 LDFLAGS: -L${SRCDIR}/cdeps/win64 -lpng -lz + #cgo windows,386 LDFLAGS: -L${SRCDIR}/cdeps/win32 -lpng -lz // #include #include "screen/goScreen.h" #include "mouse/goMouse.h" @@ -64,7 +63,7 @@ import ( ) const ( - version string = "v0.46.6.432, Pyrenees Mountains!" + version string = "v0.46.6.433, Pyrenees Mountains!" ) type (