From 2ecb61a3d02400fb0bf647e3c32c55f46285ceab Mon Sep 17 00:00:00 2001 From: sippeangelo Date: Tue, 24 Nov 2015 11:35:04 +0100 Subject: [PATCH] Added libpng 1.6.19 --- bin/msvc14/x64/libpng16.dll | Bin 0 -> 188416 bytes bin/msvc14/x64/libpng16d.dll | Bin 0 -> 416256 bytes include/libpng16/png.h | 3129 +++++++++++++++++++++++++++++++++ include/libpng16/pngconf.h | 622 +++++++ include/libpng16/pnglibconf.h | 214 +++ include/png.h | 3129 +++++++++++++++++++++++++++++++++ include/pngconf.h | 622 +++++++ include/pnglibconf.h | 214 +++ lib/msvc14/x64/libpng16.lib | Bin 0 -> 54878 bytes lib/msvc14/x64/libpng16d.lib | Bin 0 -> 55172 bytes 10 files changed, 7930 insertions(+) create mode 100644 bin/msvc14/x64/libpng16.dll create mode 100644 bin/msvc14/x64/libpng16d.dll create mode 100644 include/libpng16/png.h create mode 100644 include/libpng16/pngconf.h create mode 100644 include/libpng16/pnglibconf.h create mode 100644 include/png.h create mode 100644 include/pngconf.h create mode 100644 include/pnglibconf.h create mode 100644 lib/msvc14/x64/libpng16.lib create mode 100644 lib/msvc14/x64/libpng16d.lib diff --git a/bin/msvc14/x64/libpng16.dll b/bin/msvc14/x64/libpng16.dll new file mode 100644 index 0000000000000000000000000000000000000000..06c12a20afdf1323d8220471deef80e481917b03 GIT binary patch literal 188416 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

2zJ@gd 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

-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 literal 0 HcmV?d00001 diff --git a/bin/msvc14/x64/libpng16d.dll b/bin/msvc14/x64/libpng16d.dll new file mode 100644 index 0000000000000000000000000000000000000000..b3630739c80c1130dd6058477f19db2d1d5e91db GIT binary patch literal 416256 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�O&{)Op{~I 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 literal 0 HcmV?d00001 diff --git a/include/libpng16/png.h b/include/libpng16/png.h new file mode 100644 index 0000000..c83051b --- /dev/null +++ b/include/libpng16/png.h @@ -0,0 +1,3129 @@ + +/* png.h - header file for PNG reference library + * + * libpng version 1.6.19, November 12, 2015 + * + * Copyright (c) 1998-2015 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 (See LICENSE, below) + * + * Authors and maintainers: + * libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat + * libpng versions 0.89, June 1996, through 0.96, May 1997: Andreas Dilger + * libpng versions 0.97, January 1998, through 1.6.19, November 12, 2015: Glenn + * See also "Contributing Authors", below. + */ + +/* + * COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: + * + * If you modify libpng you may insert additional notices immediately following + * this sentence. + * + * This code is released under the libpng license. + * + * libpng versions 1.0.7, July 1, 2000, through 1.6.19, November 12, 2015, are + * Copyright (c) 2000-2002, 2004, 2006-2015 Glenn Randers-Pehrson, are + * derived from libpng-1.0.6, and are distributed according to the same + * disclaimer and license as libpng-1.0.6 with the following individuals + * added to the list of Contributing Authors: + * + * Simon-Pierre Cadieux + * Eric S. Raymond + * Mans Rullgard + * Cosmin Truta + * Gilles Vollant + * James Yu + * + * and with the following additions to the disclaimer: + * + * There is no warranty against interference with your enjoyment of the + * library or against infringement. There is no warranty that our + * efforts or the library will fulfill any of your particular purposes + * or needs. This library is provided with all faults, and the entire + * risk of satisfactory quality, performance, accuracy, and effort is with + * the user. + * + * libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are + * Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from + * libpng-0.96, and are distributed according to the same disclaimer and + * license as libpng-0.96, with the following individuals added to the list + * of Contributing Authors: + * + * Tom Lane + * Glenn Randers-Pehrson + * Willem van Schaik + * + * libpng versions 0.89, June 1996, through 0.96, May 1997, are + * Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88, + * and are distributed according to the same disclaimer and license as + * libpng-0.88, with the following individuals added to the list of + * Contributing Authors: + * + * John Bowler + * Kevin Bracey + * Sam Bushell + * Magnus Holmgren + * Greg Roelofs + * Tom Tanner + * + * libpng versions 0.5, May 1995, through 0.88, January 1996, are + * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc. + * + * For the purposes of this copyright and license, "Contributing Authors" + * is defined as the following set of individuals: + * + * Andreas Dilger + * Dave Martindale + * Guy Eric Schalnat + * Paul Schmidt + * Tim Wegner + * + * The PNG Reference Library is supplied "AS IS". The Contributing Authors + * and Group 42, Inc. disclaim all warranties, expressed or implied, + * including, without limitation, the warranties of merchantability and of + * fitness for any purpose. The Contributing Authors and Group 42, Inc. + * assume no liability for direct, indirect, incidental, special, exemplary, + * or consequential damages, which may result from the use of the PNG + * Reference Library, even if advised of the possibility of such damage. + * + * Permission is hereby granted to use, copy, modify, and distribute this + * source code, or portions hereof, for any purpose, without fee, subject + * to the following restrictions: + * + * 1. The origin of this source code must not be misrepresented. + * + * 2. Altered versions must be plainly marked as such and must not + * be misrepresented as being the original source. + * + * 3. This Copyright notice may not be removed or altered from any + * source or altered source distribution. + * + * The Contributing Authors and Group 42, Inc. specifically permit, without + * fee, and encourage the use of this source code as a component to + * supporting the PNG file format in commercial products. If you use this + * source code in a product, acknowledgment is not required but would be + * appreciated. + * + * END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE. + */ + +/* + * A "png_get_copyright" function is available, for convenient use in "about" + * boxes and the like: + * + * printf("%s", png_get_copyright(NULL)); + * + * Also, the PNG logo (in PNG format, of course) is supplied in the + * files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31). + */ + +/* + * Libpng is OSI Certified Open Source Software. OSI Certified Open Source is + * a certification mark of the Open Source Initiative. OSI has not addressed + * the additional disclaimers inserted at version 1.0.7. + */ + +/* + * The contributing authors would like to thank all those who helped + * with testing, bug fixes, and patience. This wouldn't have been + * possible without all of you. + * + * Thanks to Frank J. T. Wojcik for helping with the documentation. + */ + +/* Note about libpng version numbers: + * + * Due to various miscommunications, unforeseen code incompatibilities + * and occasional factors outside the authors' control, version numbering + * on the library has not always been consistent and straightforward. + * The following table summarizes matters since version 0.89c, which was + * the first widely used release: + * + * source png.h png.h shared-lib + * version string int version + * ------- ------ ----- ---------- + * 0.89c "1.0 beta 3" 0.89 89 1.0.89 + * 0.90 "1.0 beta 4" 0.90 90 0.90 [should have been 2.0.90] + * 0.95 "1.0 beta 5" 0.95 95 0.95 [should have been 2.0.95] + * 0.96 "1.0 beta 6" 0.96 96 0.96 [should have been 2.0.96] + * 0.97b "1.00.97 beta 7" 1.00.97 97 1.0.1 [should have been 2.0.97] + * 0.97c 0.97 97 2.0.97 + * 0.98 0.98 98 2.0.98 + * 0.99 0.99 98 2.0.99 + * 0.99a-m 0.99 99 2.0.99 + * 1.00 1.00 100 2.1.0 [100 should be 10000] + * 1.0.0 (from here on, the 100 2.1.0 [100 should be 10000] + * 1.0.1 png.h string is 10001 2.1.0 + * 1.0.1a-e identical to the 10002 from here on, the shared library + * 1.0.2 source version) 10002 is 2.V where V is the source code + * 1.0.2a-b 10003 version, except as noted. + * 1.0.3 10003 + * 1.0.3a-d 10004 + * 1.0.4 10004 + * 1.0.4a-f 10005 + * 1.0.5 (+ 2 patches) 10005 + * 1.0.5a-d 10006 + * 1.0.5e-r 10100 (not source compatible) + * 1.0.5s-v 10006 (not binary compatible) + * 1.0.6 (+ 3 patches) 10006 (still binary incompatible) + * 1.0.6d-f 10007 (still binary incompatible) + * 1.0.6g 10007 + * 1.0.6h 10007 10.6h (testing xy.z so-numbering) + * 1.0.6i 10007 10.6i + * 1.0.6j 10007 2.1.0.6j (incompatible with 1.0.0) + * 1.0.7beta11-14 DLLNUM 10007 2.1.0.7beta11-14 (binary compatible) + * 1.0.7beta15-18 1 10007 2.1.0.7beta15-18 (binary compatible) + * 1.0.7rc1-2 1 10007 2.1.0.7rc1-2 (binary compatible) + * 1.0.7 1 10007 (still compatible) + * ... + * 1.0.19 10 10019 10.so.0.19[.0] + * ... + * 1.2.53 13 10253 12.so.0.53[.0] + * ... + * 1.5.23 15 10523 15.so.15.23[.0] + * ... + * 1.6.19 16 10619 16.so.16.19[.0] + * + * Henceforth the source version will match the shared-library major + * and minor numbers; the shared-library major version number will be + * used for changes in backward compatibility, as it is intended. The + * PNG_LIBPNG_VER macro, which is not used within libpng but is available + * for applications, is an unsigned integer of the form xyyzz corresponding + * to the source version x.y.z (leading zeros in y and z). Beta versions + * were given the previous public release number plus a letter, until + * version 1.0.6j; from then on they were given the upcoming public + * release number plus "betaNN" or "rcNN". + * + * Binary incompatibility exists only when applications make direct access + * to the info_ptr or png_ptr members through png.h, and the compiled + * application is loaded with a different version of the library. + * + * DLLNUM will change each time there are forward or backward changes + * in binary compatibility (e.g., when a new feature is added). + * + * See libpng.txt or libpng.3 for more information. The PNG specification + * is available as a W3C Recommendation and as an ISO Specification, + * + * + * 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.19" +#define PNG_HEADER_VERSION_STRING \ + " libpng version 1.6.19 - November 12, 2015\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 19 + +/* 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 10619 /* 1.6.19 */ + +/* 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_19; + +/* 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 0x0001 +#define PNG_INFO_sBIT 0x0002 +#define PNG_INFO_cHRM 0x0004 +#define PNG_INFO_PLTE 0x0008 +#define PNG_INFO_tRNS 0x0010 +#define PNG_INFO_bKGD 0x0020 +#define PNG_INFO_hIST 0x0040 +#define PNG_INFO_pHYs 0x0080 +#define PNG_INFO_oFFs 0x0100 +#define PNG_INFO_tIME 0x0200 +#define PNG_INFO_pCAL 0x0400 +#define PNG_INFO_sRGB 0x0800 /* GR-P, 0.96a */ +#define PNG_INFO_iCCP 0x1000 /* ESR, 1.0.6 */ +#define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */ +#define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */ +#if INT_MAX >= 0x8000 /* else this might break */ +#define PNG_INFO_IDAT 0x8000 /* ESR, 1.0.6 */ +#endif + +/* 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_ALL_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP | \ + 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 0x0008 +#define PNG_FREE_ICCP 0x0010 +#define PNG_FREE_SPLT 0x0020 +#define PNG_FREE_ROWS 0x0040 +#define PNG_FREE_PCAL 0x0080 +#define PNG_FREE_SCAL 0x0100 +#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED +# define PNG_FREE_UNKN 0x0200 +#endif +/* PNG_FREE_LIST 0x0400 removed in 1.6.0 because it is ignored */ +#define PNG_FREE_PLTE 0x1000 +#define PNG_FREE_TRNS 0x2000 +#define PNG_FREE_TEXT 0x4000 +#define PNG_FREE_ALL 0x7fff +#define PNG_FREE_MUL 0x4220 /* 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_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)); +#endif + +#ifdef PNG_hIST_SUPPORTED +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. + */ +PNG_EXPORT(172, void, png_set_keep_unknown_chunks, (png_structrp png_ptr, + int keep, png_const_bytep chunk_list, int num_chunks)); + +/* 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 + +#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 http://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 + +/* 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. + */ + +#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. + */ + +#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 +#ifdef PNG_STDIO_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) + */ +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*). */ + +/* With both 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, indexed + * PNG (color_type 3) or most ancillary chunks. + */ +#endif /* STDIO */ +#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 */ +#define PNG_OPTION_NEXT 6 /* 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(244); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* PNG_VERSION_INFO_ONLY */ +/* Do not put anything past this line */ +#endif /* PNG_H */ diff --git a/include/libpng16/pngconf.h b/include/libpng16/pngconf.h new file mode 100644 index 0000000..f1b795b --- /dev/null +++ b/include/libpng16/pngconf.h @@ -0,0 +1,622 @@ + +/* pngconf.h - machine configurable file for libpng + * + * libpng version 1.6.19, July 23, 2015 + * + * Copyright (c) 1998-2015 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 > 4294967294 + typedef unsigned int png_uint_32; +#elif ULONG_MAX > 4294967294 + 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/include/libpng16/pnglibconf.h b/include/libpng16/pnglibconf.h new file mode 100644 index 0000000..ff5d156 --- /dev/null +++ b/include/libpng16/pnglibconf.h @@ -0,0 +1,214 @@ +/* libpng 1.6.19 STANDARD API DEFINITION */ + +/* pnglibconf.h - library build configuration */ + +/* Libpng version 1.6.19 - November 12, 2015 */ + +/* Copyright (c) 1998-2015 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 +#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_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_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_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_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 0 /* unknown */ +#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/include/png.h b/include/png.h new file mode 100644 index 0000000..c83051b --- /dev/null +++ b/include/png.h @@ -0,0 +1,3129 @@ + +/* png.h - header file for PNG reference library + * + * libpng version 1.6.19, November 12, 2015 + * + * Copyright (c) 1998-2015 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 (See LICENSE, below) + * + * Authors and maintainers: + * libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat + * libpng versions 0.89, June 1996, through 0.96, May 1997: Andreas Dilger + * libpng versions 0.97, January 1998, through 1.6.19, November 12, 2015: Glenn + * See also "Contributing Authors", below. + */ + +/* + * COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: + * + * If you modify libpng you may insert additional notices immediately following + * this sentence. + * + * This code is released under the libpng license. + * + * libpng versions 1.0.7, July 1, 2000, through 1.6.19, November 12, 2015, are + * Copyright (c) 2000-2002, 2004, 2006-2015 Glenn Randers-Pehrson, are + * derived from libpng-1.0.6, and are distributed according to the same + * disclaimer and license as libpng-1.0.6 with the following individuals + * added to the list of Contributing Authors: + * + * Simon-Pierre Cadieux + * Eric S. Raymond + * Mans Rullgard + * Cosmin Truta + * Gilles Vollant + * James Yu + * + * and with the following additions to the disclaimer: + * + * There is no warranty against interference with your enjoyment of the + * library or against infringement. There is no warranty that our + * efforts or the library will fulfill any of your particular purposes + * or needs. This library is provided with all faults, and the entire + * risk of satisfactory quality, performance, accuracy, and effort is with + * the user. + * + * libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are + * Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from + * libpng-0.96, and are distributed according to the same disclaimer and + * license as libpng-0.96, with the following individuals added to the list + * of Contributing Authors: + * + * Tom Lane + * Glenn Randers-Pehrson + * Willem van Schaik + * + * libpng versions 0.89, June 1996, through 0.96, May 1997, are + * Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88, + * and are distributed according to the same disclaimer and license as + * libpng-0.88, with the following individuals added to the list of + * Contributing Authors: + * + * John Bowler + * Kevin Bracey + * Sam Bushell + * Magnus Holmgren + * Greg Roelofs + * Tom Tanner + * + * libpng versions 0.5, May 1995, through 0.88, January 1996, are + * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc. + * + * For the purposes of this copyright and license, "Contributing Authors" + * is defined as the following set of individuals: + * + * Andreas Dilger + * Dave Martindale + * Guy Eric Schalnat + * Paul Schmidt + * Tim Wegner + * + * The PNG Reference Library is supplied "AS IS". The Contributing Authors + * and Group 42, Inc. disclaim all warranties, expressed or implied, + * including, without limitation, the warranties of merchantability and of + * fitness for any purpose. The Contributing Authors and Group 42, Inc. + * assume no liability for direct, indirect, incidental, special, exemplary, + * or consequential damages, which may result from the use of the PNG + * Reference Library, even if advised of the possibility of such damage. + * + * Permission is hereby granted to use, copy, modify, and distribute this + * source code, or portions hereof, for any purpose, without fee, subject + * to the following restrictions: + * + * 1. The origin of this source code must not be misrepresented. + * + * 2. Altered versions must be plainly marked as such and must not + * be misrepresented as being the original source. + * + * 3. This Copyright notice may not be removed or altered from any + * source or altered source distribution. + * + * The Contributing Authors and Group 42, Inc. specifically permit, without + * fee, and encourage the use of this source code as a component to + * supporting the PNG file format in commercial products. If you use this + * source code in a product, acknowledgment is not required but would be + * appreciated. + * + * END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE. + */ + +/* + * A "png_get_copyright" function is available, for convenient use in "about" + * boxes and the like: + * + * printf("%s", png_get_copyright(NULL)); + * + * Also, the PNG logo (in PNG format, of course) is supplied in the + * files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31). + */ + +/* + * Libpng is OSI Certified Open Source Software. OSI Certified Open Source is + * a certification mark of the Open Source Initiative. OSI has not addressed + * the additional disclaimers inserted at version 1.0.7. + */ + +/* + * The contributing authors would like to thank all those who helped + * with testing, bug fixes, and patience. This wouldn't have been + * possible without all of you. + * + * Thanks to Frank J. T. Wojcik for helping with the documentation. + */ + +/* Note about libpng version numbers: + * + * Due to various miscommunications, unforeseen code incompatibilities + * and occasional factors outside the authors' control, version numbering + * on the library has not always been consistent and straightforward. + * The following table summarizes matters since version 0.89c, which was + * the first widely used release: + * + * source png.h png.h shared-lib + * version string int version + * ------- ------ ----- ---------- + * 0.89c "1.0 beta 3" 0.89 89 1.0.89 + * 0.90 "1.0 beta 4" 0.90 90 0.90 [should have been 2.0.90] + * 0.95 "1.0 beta 5" 0.95 95 0.95 [should have been 2.0.95] + * 0.96 "1.0 beta 6" 0.96 96 0.96 [should have been 2.0.96] + * 0.97b "1.00.97 beta 7" 1.00.97 97 1.0.1 [should have been 2.0.97] + * 0.97c 0.97 97 2.0.97 + * 0.98 0.98 98 2.0.98 + * 0.99 0.99 98 2.0.99 + * 0.99a-m 0.99 99 2.0.99 + * 1.00 1.00 100 2.1.0 [100 should be 10000] + * 1.0.0 (from here on, the 100 2.1.0 [100 should be 10000] + * 1.0.1 png.h string is 10001 2.1.0 + * 1.0.1a-e identical to the 10002 from here on, the shared library + * 1.0.2 source version) 10002 is 2.V where V is the source code + * 1.0.2a-b 10003 version, except as noted. + * 1.0.3 10003 + * 1.0.3a-d 10004 + * 1.0.4 10004 + * 1.0.4a-f 10005 + * 1.0.5 (+ 2 patches) 10005 + * 1.0.5a-d 10006 + * 1.0.5e-r 10100 (not source compatible) + * 1.0.5s-v 10006 (not binary compatible) + * 1.0.6 (+ 3 patches) 10006 (still binary incompatible) + * 1.0.6d-f 10007 (still binary incompatible) + * 1.0.6g 10007 + * 1.0.6h 10007 10.6h (testing xy.z so-numbering) + * 1.0.6i 10007 10.6i + * 1.0.6j 10007 2.1.0.6j (incompatible with 1.0.0) + * 1.0.7beta11-14 DLLNUM 10007 2.1.0.7beta11-14 (binary compatible) + * 1.0.7beta15-18 1 10007 2.1.0.7beta15-18 (binary compatible) + * 1.0.7rc1-2 1 10007 2.1.0.7rc1-2 (binary compatible) + * 1.0.7 1 10007 (still compatible) + * ... + * 1.0.19 10 10019 10.so.0.19[.0] + * ... + * 1.2.53 13 10253 12.so.0.53[.0] + * ... + * 1.5.23 15 10523 15.so.15.23[.0] + * ... + * 1.6.19 16 10619 16.so.16.19[.0] + * + * Henceforth the source version will match the shared-library major + * and minor numbers; the shared-library major version number will be + * used for changes in backward compatibility, as it is intended. The + * PNG_LIBPNG_VER macro, which is not used within libpng but is available + * for applications, is an unsigned integer of the form xyyzz corresponding + * to the source version x.y.z (leading zeros in y and z). Beta versions + * were given the previous public release number plus a letter, until + * version 1.0.6j; from then on they were given the upcoming public + * release number plus "betaNN" or "rcNN". + * + * Binary incompatibility exists only when applications make direct access + * to the info_ptr or png_ptr members through png.h, and the compiled + * application is loaded with a different version of the library. + * + * DLLNUM will change each time there are forward or backward changes + * in binary compatibility (e.g., when a new feature is added). + * + * See libpng.txt or libpng.3 for more information. The PNG specification + * is available as a W3C Recommendation and as an ISO Specification, + * + * + * 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.19" +#define PNG_HEADER_VERSION_STRING \ + " libpng version 1.6.19 - November 12, 2015\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 19 + +/* 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 10619 /* 1.6.19 */ + +/* 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_19; + +/* 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 0x0001 +#define PNG_INFO_sBIT 0x0002 +#define PNG_INFO_cHRM 0x0004 +#define PNG_INFO_PLTE 0x0008 +#define PNG_INFO_tRNS 0x0010 +#define PNG_INFO_bKGD 0x0020 +#define PNG_INFO_hIST 0x0040 +#define PNG_INFO_pHYs 0x0080 +#define PNG_INFO_oFFs 0x0100 +#define PNG_INFO_tIME 0x0200 +#define PNG_INFO_pCAL 0x0400 +#define PNG_INFO_sRGB 0x0800 /* GR-P, 0.96a */ +#define PNG_INFO_iCCP 0x1000 /* ESR, 1.0.6 */ +#define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */ +#define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */ +#if INT_MAX >= 0x8000 /* else this might break */ +#define PNG_INFO_IDAT 0x8000 /* ESR, 1.0.6 */ +#endif + +/* 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_ALL_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP | \ + 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 0x0008 +#define PNG_FREE_ICCP 0x0010 +#define PNG_FREE_SPLT 0x0020 +#define PNG_FREE_ROWS 0x0040 +#define PNG_FREE_PCAL 0x0080 +#define PNG_FREE_SCAL 0x0100 +#ifdef PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED +# define PNG_FREE_UNKN 0x0200 +#endif +/* PNG_FREE_LIST 0x0400 removed in 1.6.0 because it is ignored */ +#define PNG_FREE_PLTE 0x1000 +#define PNG_FREE_TRNS 0x2000 +#define PNG_FREE_TEXT 0x4000 +#define PNG_FREE_ALL 0x7fff +#define PNG_FREE_MUL 0x4220 /* 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_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)); +#endif + +#ifdef PNG_hIST_SUPPORTED +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. + */ +PNG_EXPORT(172, void, png_set_keep_unknown_chunks, (png_structrp png_ptr, + int keep, png_const_bytep chunk_list, int num_chunks)); + +/* 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 + +#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 http://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 + +/* 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. + */ + +#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. + */ + +#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 +#ifdef PNG_STDIO_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) + */ +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*). */ + +/* With both 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, indexed + * PNG (color_type 3) or most ancillary chunks. + */ +#endif /* STDIO */ +#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 */ +#define PNG_OPTION_NEXT 6 /* 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(244); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* PNG_VERSION_INFO_ONLY */ +/* Do not put anything past this line */ +#endif /* PNG_H */ diff --git a/include/pngconf.h b/include/pngconf.h new file mode 100644 index 0000000..f1b795b --- /dev/null +++ b/include/pngconf.h @@ -0,0 +1,622 @@ + +/* pngconf.h - machine configurable file for libpng + * + * libpng version 1.6.19, July 23, 2015 + * + * Copyright (c) 1998-2015 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 > 4294967294 + typedef unsigned int png_uint_32; +#elif ULONG_MAX > 4294967294 + 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/include/pnglibconf.h b/include/pnglibconf.h new file mode 100644 index 0000000..ff5d156 --- /dev/null +++ b/include/pnglibconf.h @@ -0,0 +1,214 @@ +/* libpng 1.6.19 STANDARD API DEFINITION */ + +/* pnglibconf.h - library build configuration */ + +/* Libpng version 1.6.19 - November 12, 2015 */ + +/* Copyright (c) 1998-2015 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 +#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_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_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_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_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 0 /* unknown */ +#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/lib/msvc14/x64/libpng16.lib b/lib/msvc14/x64/libpng16.lib new file mode 100644 index 0000000000000000000000000000000000000000..dad8b0d5e8f1631ba9f1d3aeb4cce1624100dc9d GIT binary patch literal 54878 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

Gz13ZeL;P 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