17dd7cddfSDavid du Colombier /* png.h - header file for PNG reference library 27dd7cddfSDavid du Colombier * 3*593dc095SDavid du Colombier * libpng version 1.2.8 - December 3, 2004 4*593dc095SDavid du Colombier * Copyright (c) 1998-2004 Glenn Randers-Pehrson 5*593dc095SDavid du Colombier * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) 6*593dc095SDavid du Colombier * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) 7*593dc095SDavid du Colombier * 8*593dc095SDavid du Colombier * Authors and maintainers: 9*593dc095SDavid du Colombier * libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat 10*593dc095SDavid du Colombier * libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger 11*593dc095SDavid du Colombier * libpng versions 0.97, January 1998, through 1.2.8 - December 3, 2004: Glenn 12*593dc095SDavid du Colombier * See also "Contributing Authors", below. 137dd7cddfSDavid du Colombier * 147dd7cddfSDavid du Colombier * Note about libpng version numbers: 157dd7cddfSDavid du Colombier * 167dd7cddfSDavid du Colombier * Due to various miscommunications, unforeseen code incompatibilities 177dd7cddfSDavid du Colombier * and occasional factors outside the authors' control, version numbering 187dd7cddfSDavid du Colombier * on the library has not always been consistent and straightforward. 197dd7cddfSDavid du Colombier * The following table summarizes matters since version 0.89c, which was 207dd7cddfSDavid du Colombier * the first widely used release: 217dd7cddfSDavid du Colombier * 22*593dc095SDavid du Colombier * source png.h png.h shared-lib 23*593dc095SDavid du Colombier * version string int version 24*593dc095SDavid du Colombier * ------- ------ ----- ---------- 25*593dc095SDavid du Colombier * 0.89c "1.0 beta 3" 0.89 89 1.0.89 26*593dc095SDavid du Colombier * 0.90 "1.0 beta 4" 0.90 90 0.90 [should have been 2.0.90] 27*593dc095SDavid du Colombier * 0.95 "1.0 beta 5" 0.95 95 0.95 [should have been 2.0.95] 28*593dc095SDavid du Colombier * 0.96 "1.0 beta 6" 0.96 96 0.96 [should have been 2.0.96] 29*593dc095SDavid du Colombier * 0.97b "1.00.97 beta 7" 1.00.97 97 1.0.1 [should have been 2.0.97] 30*593dc095SDavid du Colombier * 0.97c 0.97 97 2.0.97 31*593dc095SDavid du Colombier * 0.98 0.98 98 2.0.98 32*593dc095SDavid du Colombier * 0.99 0.99 98 2.0.99 33*593dc095SDavid du Colombier * 0.99a-m 0.99 99 2.0.99 34*593dc095SDavid du Colombier * 1.00 1.00 100 2.1.0 [100 should be 10000] 35*593dc095SDavid du Colombier * 1.0.0 (from here on, the 100 2.1.0 [100 should be 10000] 36*593dc095SDavid du Colombier * 1.0.1 png.h string is 10001 2.1.0 37*593dc095SDavid du Colombier * 1.0.1a-e identical to the 10002 from here on, the shared library 38*593dc095SDavid du Colombier * 1.0.2 source version) 10002 is 2.V where V is the source code 39*593dc095SDavid du Colombier * 1.0.2a-b 10003 version, except as noted. 40*593dc095SDavid du Colombier * 1.0.3 10003 41*593dc095SDavid du Colombier * 1.0.3a-d 10004 42*593dc095SDavid du Colombier * 1.0.4 10004 43*593dc095SDavid du Colombier * 1.0.4a-f 10005 44*593dc095SDavid du Colombier * 1.0.5 (+ 2 patches) 10005 45*593dc095SDavid du Colombier * 1.0.5a-d 10006 46*593dc095SDavid du Colombier * 1.0.5e-r 10100 (not source compatible) 47*593dc095SDavid du Colombier * 1.0.5s-v 10006 (not binary compatible) 48*593dc095SDavid du Colombier * 1.0.6 (+ 3 patches) 10006 (still binary incompatible) 49*593dc095SDavid du Colombier * 1.0.6d-f 10007 (still binary incompatible) 50*593dc095SDavid du Colombier * 1.0.6g 10007 51*593dc095SDavid du Colombier * 1.0.6h 10007 10.6h (testing xy.z so-numbering) 52*593dc095SDavid du Colombier * 1.0.6i 10007 10.6i 53*593dc095SDavid du Colombier * 1.0.6j 10007 2.1.0.6j (incompatible with 1.0.0) 54*593dc095SDavid du Colombier * 1.0.7beta11-14 DLLNUM 10007 2.1.0.7beta11-14 (binary compatible) 55*593dc095SDavid du Colombier * 1.0.7beta15-18 1 10007 2.1.0.7beta15-18 (binary compatible) 56*593dc095SDavid du Colombier * 1.0.7rc1-2 1 10007 2.1.0.7rc1-2 (binary compatible) 57*593dc095SDavid du Colombier * 1.0.7 1 10007 (still compatible) 58*593dc095SDavid du Colombier * 1.0.8beta1-4 1 10008 2.1.0.8beta1-4 59*593dc095SDavid du Colombier * 1.0.8rc1 1 10008 2.1.0.8rc1 60*593dc095SDavid du Colombier * 1.0.8 1 10008 2.1.0.8 61*593dc095SDavid du Colombier * 1.0.9beta1-6 1 10009 2.1.0.9beta1-6 62*593dc095SDavid du Colombier * 1.0.9rc1 1 10009 2.1.0.9rc1 63*593dc095SDavid du Colombier * 1.0.9beta7-10 1 10009 2.1.0.9beta7-10 64*593dc095SDavid du Colombier * 1.0.9rc2 1 10009 2.1.0.9rc2 65*593dc095SDavid du Colombier * 1.0.9 1 10009 2.1.0.9 66*593dc095SDavid du Colombier * 1.0.10beta1 1 10010 2.1.0.10beta1 67*593dc095SDavid du Colombier * 1.0.10rc1 1 10010 2.1.0.10rc1 68*593dc095SDavid du Colombier * 1.0.10 1 10010 2.1.0.10 69*593dc095SDavid du Colombier * 1.0.11beta1-3 1 10011 2.1.0.11beta1-3 70*593dc095SDavid du Colombier * 1.0.11rc1 1 10011 2.1.0.11rc1 71*593dc095SDavid du Colombier * 1.0.11 1 10011 2.1.0.11 72*593dc095SDavid du Colombier * 1.0.12beta1-2 2 10012 2.1.0.12beta1-2 73*593dc095SDavid du Colombier * 1.0.12rc1 2 10012 2.1.0.12rc1 74*593dc095SDavid du Colombier * 1.0.12 2 10012 2.1.0.12 75*593dc095SDavid du Colombier * 1.1.0a-f - 10100 2.1.1.0a-f (branch abandoned) 76*593dc095SDavid du Colombier * 1.2.0beta1-2 2 10200 2.1.2.0beta1-2 77*593dc095SDavid du Colombier * 1.2.0beta3-5 3 10200 3.1.2.0beta3-5 78*593dc095SDavid du Colombier * 1.2.0rc1 3 10200 3.1.2.0rc1 79*593dc095SDavid du Colombier * 1.2.0 3 10200 3.1.2.0 80*593dc095SDavid du Colombier * 1.2.1beta1-4 3 10201 3.1.2.1beta1-4 81*593dc095SDavid du Colombier * 1.2.1rc1-2 3 10201 3.1.2.1rc1-2 82*593dc095SDavid du Colombier * 1.2.1 3 10201 3.1.2.1 83*593dc095SDavid du Colombier * 1.2.2beta1-6 12 10202 12.so.0.1.2.2beta1-6 84*593dc095SDavid du Colombier * 1.0.13beta1 10 10013 10.so.0.1.0.13beta1 85*593dc095SDavid du Colombier * 1.0.13rc1 10 10013 10.so.0.1.0.13rc1 86*593dc095SDavid du Colombier * 1.2.2rc1 12 10202 12.so.0.1.2.2rc1 87*593dc095SDavid du Colombier * 1.0.13 10 10013 10.so.0.1.0.13 88*593dc095SDavid du Colombier * 1.2.2 12 10202 12.so.0.1.2.2 89*593dc095SDavid du Colombier * 1.2.3rc1-6 12 10203 12.so.0.1.2.3rc1-6 90*593dc095SDavid du Colombier * 1.2.3 12 10203 12.so.0.1.2.3 91*593dc095SDavid du Colombier * 1.2.4beta1-3 13 10204 12.so.0.1.2.4beta1-3 92*593dc095SDavid du Colombier * 1.0.14rc1 13 10014 10.so.0.1.0.14rc1 93*593dc095SDavid du Colombier * 1.2.4rc1 13 10204 12.so.0.1.2.4rc1 94*593dc095SDavid du Colombier * 1.0.14 10 10014 10.so.0.1.0.14 95*593dc095SDavid du Colombier * 1.2.4 13 10204 12.so.0.1.2.4 96*593dc095SDavid du Colombier * 1.2.5beta1-2 13 10205 12.so.0.1.2.5beta1-2 97*593dc095SDavid du Colombier * 1.0.15rc1-3 10 10015 10.so.0.1.0.15rc1-3 98*593dc095SDavid du Colombier * 1.2.5rc1-3 13 10205 12.so.0.1.2.5rc1-3 99*593dc095SDavid du Colombier * 1.0.15 10 10015 10.so.0.1.0.15 100*593dc095SDavid du Colombier * 1.2.5 13 10205 12.so.0.1.2.5 101*593dc095SDavid du Colombier * 1.2.6beta1-4 13 10206 12.so.0.1.2.6beta1-4 102*593dc095SDavid du Colombier * 1.0.16 10 10016 10.so.0.1.0.16 103*593dc095SDavid du Colombier * 1.2.6 13 10206 12.so.0.1.2.6 104*593dc095SDavid du Colombier * 1.2.7beta1-2 13 10207 12.so.0.1.2.7beta1-2 105*593dc095SDavid du Colombier * 1.0.17rc1 10 10017 12.so.0.1.0.17rc1 106*593dc095SDavid du Colombier * 1.2.7rc1 13 10207 12.so.0.1.2.7rc1 107*593dc095SDavid du Colombier * 1.0.17 10 10017 12.so.0.1.0.17 108*593dc095SDavid du Colombier * 1.2.7 13 10207 12.so.0.1.2.7 109*593dc095SDavid du Colombier * 1.2.8beta1-5 13 10208 12.so.0.1.2.8beta1-5 110*593dc095SDavid du Colombier * 1.0.18rc1-5 10 10018 12.so.0.1.0.18rc1-5 111*593dc095SDavid du Colombier * 1.2.8rc1-5 13 10208 12.so.0.1.2.8rc1-5 112*593dc095SDavid du Colombier * 1.0.18 10 10018 12.so.0.1.0.18 113*593dc095SDavid du Colombier * 1.2.8 13 10208 12.so.0.1.2.8 1147dd7cddfSDavid du Colombier * 115*593dc095SDavid du Colombier * Henceforth the source version will match the shared-library major 116*593dc095SDavid du Colombier * and minor numbers; the shared-library major version number will be 117*593dc095SDavid du Colombier * used for changes in backward compatibility, as it is intended. The 118*593dc095SDavid du Colombier * PNG_LIBPNG_VER macro, which is not used within libpng but is available 119*593dc095SDavid du Colombier * for applications, is an unsigned integer of the form xyyzz corresponding 120*593dc095SDavid du Colombier * to the source version x.y.z (leading zeros in y and z). Beta versions 121*593dc095SDavid du Colombier * were given the previous public release number plus a letter, until 122*593dc095SDavid du Colombier * version 1.0.6j; from then on they were given the upcoming public 123*593dc095SDavid du Colombier * release number plus "betaNN" or "rcN". 1247dd7cddfSDavid du Colombier * 125*593dc095SDavid du Colombier * Binary incompatibility exists only when applications make direct access 126*593dc095SDavid du Colombier * to the info_ptr or png_ptr members through png.h, and the compiled 127*593dc095SDavid du Colombier * application is loaded with a different version of the library. 1287dd7cddfSDavid du Colombier * 129*593dc095SDavid du Colombier * DLLNUM will change each time there are forward or backward changes 130*593dc095SDavid du Colombier * in binary compatibility (e.g., when a new feature is added). 1317dd7cddfSDavid du Colombier * 132*593dc095SDavid du Colombier * See libpng.txt or libpng.3 for more information. The PNG specification 133*593dc095SDavid du Colombier * is available as a W3C Recommendation and as an ISO Specification, 134*593dc095SDavid du Colombier * <http://www.w3.org/TR/2003/REC-PNG-20031110/ 135*593dc095SDavid du Colombier */ 136*593dc095SDavid du Colombier 137*593dc095SDavid du Colombier /* 138*593dc095SDavid du Colombier * COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: 139*593dc095SDavid du Colombier * 140*593dc095SDavid du Colombier * If you modify libpng you may insert additional notices immediately following 141*593dc095SDavid du Colombier * this sentence. 142*593dc095SDavid du Colombier * 143*593dc095SDavid du Colombier * libpng versions 1.2.6, August 15, 2004, through 1.2.8, December 3, 2004, are 144*593dc095SDavid du Colombier * Copyright (c) 2004 Glenn Randers-Pehrson, and are 145*593dc095SDavid du Colombier * distributed according to the same disclaimer and license as libpng-1.2.5 146*593dc095SDavid du Colombier * with the following individual added to the list of Contributing Authors: 147*593dc095SDavid du Colombier * 148*593dc095SDavid du Colombier * Cosmin Truta 149*593dc095SDavid du Colombier * 150*593dc095SDavid du Colombier * libpng versions 1.0.7, July 1, 2000, through 1.2.5, October 3, 2002, are 151*593dc095SDavid du Colombier * Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are 152*593dc095SDavid du Colombier * distributed according to the same disclaimer and license as libpng-1.0.6 153*593dc095SDavid du Colombier * with the following individuals added to the list of Contributing Authors: 154*593dc095SDavid du Colombier * 155*593dc095SDavid du Colombier * Simon-Pierre Cadieux 156*593dc095SDavid du Colombier * Eric S. Raymond 157*593dc095SDavid du Colombier * Gilles Vollant 158*593dc095SDavid du Colombier * 159*593dc095SDavid du Colombier * and with the following additions to the disclaimer: 160*593dc095SDavid du Colombier * 161*593dc095SDavid du Colombier * There is no warranty against interference with your enjoyment of the 162*593dc095SDavid du Colombier * library or against infringement. There is no warranty that our 163*593dc095SDavid du Colombier * efforts or the library will fulfill any of your particular purposes 164*593dc095SDavid du Colombier * or needs. This library is provided with all faults, and the entire 165*593dc095SDavid du Colombier * risk of satisfactory quality, performance, accuracy, and effort is with 166*593dc095SDavid du Colombier * the user. 167*593dc095SDavid du Colombier * 168*593dc095SDavid du Colombier * libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are 169*593dc095SDavid du Colombier * Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson, and are 170*593dc095SDavid du Colombier * distributed according to the same disclaimer and license as libpng-0.96, 171*593dc095SDavid du Colombier * with the following individuals added to the list of Contributing Authors: 172*593dc095SDavid du Colombier * 1737dd7cddfSDavid du Colombier * Tom Lane 1747dd7cddfSDavid du Colombier * Glenn Randers-Pehrson 175*593dc095SDavid du Colombier * Willem van Schaik 176*593dc095SDavid du Colombier * 177*593dc095SDavid du Colombier * libpng versions 0.89, June 1996, through 0.96, May 1997, are 178*593dc095SDavid du Colombier * Copyright (c) 1996, 1997 Andreas Dilger 179*593dc095SDavid du Colombier * Distributed according to the same disclaimer and license as libpng-0.88, 180*593dc095SDavid du Colombier * with the following individuals added to the list of Contributing Authors: 181*593dc095SDavid du Colombier * 182*593dc095SDavid du Colombier * John Bowler 183*593dc095SDavid du Colombier * Kevin Bracey 184*593dc095SDavid du Colombier * Sam Bushell 185*593dc095SDavid du Colombier * Magnus Holmgren 1867dd7cddfSDavid du Colombier * Greg Roelofs 187*593dc095SDavid du Colombier * Tom Tanner 188*593dc095SDavid du Colombier * 189*593dc095SDavid du Colombier * libpng versions 0.5, May 1995, through 0.88, January 1996, are 190*593dc095SDavid du Colombier * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. 191*593dc095SDavid du Colombier * 192*593dc095SDavid du Colombier * For the purposes of this copyright and license, "Contributing Authors" 193*593dc095SDavid du Colombier * is defined as the following set of individuals: 194*593dc095SDavid du Colombier * 195*593dc095SDavid du Colombier * Andreas Dilger 196*593dc095SDavid du Colombier * Dave Martindale 1977dd7cddfSDavid du Colombier * Guy Eric Schalnat 1987dd7cddfSDavid du Colombier * Paul Schmidt 1997dd7cddfSDavid du Colombier * Tim Wegner 2007dd7cddfSDavid du Colombier * 2017dd7cddfSDavid du Colombier * The PNG Reference Library is supplied "AS IS". The Contributing Authors 2027dd7cddfSDavid du Colombier * and Group 42, Inc. disclaim all warranties, expressed or implied, 2037dd7cddfSDavid du Colombier * including, without limitation, the warranties of merchantability and of 2047dd7cddfSDavid du Colombier * fitness for any purpose. The Contributing Authors and Group 42, Inc. 2057dd7cddfSDavid du Colombier * assume no liability for direct, indirect, incidental, special, exemplary, 2067dd7cddfSDavid du Colombier * or consequential damages, which may result from the use of the PNG 2077dd7cddfSDavid du Colombier * Reference Library, even if advised of the possibility of such damage. 2087dd7cddfSDavid du Colombier * 2097dd7cddfSDavid du Colombier * Permission is hereby granted to use, copy, modify, and distribute this 2107dd7cddfSDavid du Colombier * source code, or portions hereof, for any purpose, without fee, subject 2117dd7cddfSDavid du Colombier * to the following restrictions: 212*593dc095SDavid du Colombier * 2137dd7cddfSDavid du Colombier * 1. The origin of this source code must not be misrepresented. 214*593dc095SDavid du Colombier * 215*593dc095SDavid du Colombier * 2. Altered versions must be plainly marked as such and 216*593dc095SDavid du Colombier * must not be misrepresented as being the original source. 217*593dc095SDavid du Colombier * 218*593dc095SDavid du Colombier * 3. This Copyright notice may not be removed or altered from 219*593dc095SDavid du Colombier * any source or altered source distribution. 2207dd7cddfSDavid du Colombier * 2217dd7cddfSDavid du Colombier * The Contributing Authors and Group 42, Inc. specifically permit, without 2227dd7cddfSDavid du Colombier * fee, and encourage the use of this source code as a component to 2237dd7cddfSDavid du Colombier * supporting the PNG file format in commercial products. If you use this 2247dd7cddfSDavid du Colombier * source code in a product, acknowledgment is not required but would be 2257dd7cddfSDavid du Colombier * appreciated. 2267dd7cddfSDavid du Colombier */ 2277dd7cddfSDavid du Colombier 228*593dc095SDavid du Colombier /* 229*593dc095SDavid du Colombier * A "png_get_copyright" function is available, for convenient use in "about" 230*593dc095SDavid du Colombier * boxes and the like: 231*593dc095SDavid du Colombier * 232*593dc095SDavid du Colombier * printf("%s",png_get_copyright(NULL)); 233*593dc095SDavid du Colombier * 234*593dc095SDavid du Colombier * Also, the PNG logo (in PNG format, of course) is supplied in the 235*593dc095SDavid du Colombier * files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31). 236*593dc095SDavid du Colombier */ 2377dd7cddfSDavid du Colombier 238*593dc095SDavid du Colombier /* 239*593dc095SDavid du Colombier * Libpng is OSI Certified Open Source Software. OSI Certified is a 240*593dc095SDavid du Colombier * certification mark of the Open Source Initiative. 241*593dc095SDavid du Colombier */ 242*593dc095SDavid du Colombier 243*593dc095SDavid du Colombier /* 244*593dc095SDavid du Colombier * The contributing authors would like to thank all those who helped 245*593dc095SDavid du Colombier * with testing, bug fixes, and patience. This wouldn't have been 246*593dc095SDavid du Colombier * possible without all of you. 247*593dc095SDavid du Colombier * 248*593dc095SDavid du Colombier * Thanks to Frank J. T. Wojcik for helping with the documentation. 249*593dc095SDavid du Colombier */ 250*593dc095SDavid du Colombier 251*593dc095SDavid du Colombier /* 252*593dc095SDavid du Colombier * Y2K compliance in libpng: 253*593dc095SDavid du Colombier * ========================= 254*593dc095SDavid du Colombier * 255*593dc095SDavid du Colombier * December 3, 2004 256*593dc095SDavid du Colombier * 257*593dc095SDavid du Colombier * Since the PNG Development group is an ad-hoc body, we can't make 258*593dc095SDavid du Colombier * an official declaration. 259*593dc095SDavid du Colombier * 260*593dc095SDavid du Colombier * This is your unofficial assurance that libpng from version 0.71 and 261*593dc095SDavid du Colombier * upward through 1.2.8 are Y2K compliant. It is my belief that earlier 262*593dc095SDavid du Colombier * versions were also Y2K compliant. 263*593dc095SDavid du Colombier * 264*593dc095SDavid du Colombier * Libpng only has three year fields. One is a 2-byte unsigned integer 265*593dc095SDavid du Colombier * that will hold years up to 65535. The other two hold the date in text 266*593dc095SDavid du Colombier * format, and will hold years up to 9999. 267*593dc095SDavid du Colombier * 268*593dc095SDavid du Colombier * The integer is 269*593dc095SDavid du Colombier * "png_uint_16 year" in png_time_struct. 270*593dc095SDavid du Colombier * 271*593dc095SDavid du Colombier * The strings are 272*593dc095SDavid du Colombier * "png_charp time_buffer" in png_struct and 273*593dc095SDavid du Colombier * "near_time_buffer", which is a local character string in png.c. 274*593dc095SDavid du Colombier * 275*593dc095SDavid du Colombier * There are seven time-related functions: 276*593dc095SDavid du Colombier * png.c: png_convert_to_rfc_1123() in png.c 277*593dc095SDavid du Colombier * (formerly png_convert_to_rfc_1152() in error) 278*593dc095SDavid du Colombier * png_convert_from_struct_tm() in pngwrite.c, called in pngwrite.c 279*593dc095SDavid du Colombier * png_convert_from_time_t() in pngwrite.c 280*593dc095SDavid du Colombier * png_get_tIME() in pngget.c 281*593dc095SDavid du Colombier * png_handle_tIME() in pngrutil.c, called in pngread.c 282*593dc095SDavid du Colombier * png_set_tIME() in pngset.c 283*593dc095SDavid du Colombier * png_write_tIME() in pngwutil.c, called in pngwrite.c 284*593dc095SDavid du Colombier * 285*593dc095SDavid du Colombier * All handle dates properly in a Y2K environment. The 286*593dc095SDavid du Colombier * png_convert_from_time_t() function calls gmtime() to convert from system 287*593dc095SDavid du Colombier * clock time, which returns (year - 1900), which we properly convert to 288*593dc095SDavid du Colombier * the full 4-digit year. There is a possibility that applications using 289*593dc095SDavid du Colombier * libpng are not passing 4-digit years into the png_convert_to_rfc_1123() 290*593dc095SDavid du Colombier * function, or that they are incorrectly passing only a 2-digit year 291*593dc095SDavid du Colombier * instead of "year - 1900" into the png_convert_from_struct_tm() function, 292*593dc095SDavid du Colombier * but this is not under our control. The libpng documentation has always 293*593dc095SDavid du Colombier * stated that it works with 4-digit years, and the APIs have been 294*593dc095SDavid du Colombier * documented as such. 295*593dc095SDavid du Colombier * 296*593dc095SDavid du Colombier * The tIME chunk itself is also Y2K compliant. It uses a 2-byte unsigned 297*593dc095SDavid du Colombier * integer to hold the year, and can hold years as large as 65535. 298*593dc095SDavid du Colombier * 299*593dc095SDavid du Colombier * zlib, upon which libpng depends, is also Y2K compliant. It contains 300*593dc095SDavid du Colombier * no date-related code. 301*593dc095SDavid du Colombier * 302*593dc095SDavid du Colombier * Glenn Randers-Pehrson 303*593dc095SDavid du Colombier * libpng maintainer 304*593dc095SDavid du Colombier * PNG Development Group 305*593dc095SDavid du Colombier */ 306*593dc095SDavid du Colombier 307*593dc095SDavid du Colombier #ifndef PNG_H 308*593dc095SDavid du Colombier #define PNG_H 3097dd7cddfSDavid du Colombier 3107dd7cddfSDavid du Colombier /* This is not the place to learn how to use libpng. The file libpng.txt 3117dd7cddfSDavid du Colombier * describes how to use libpng, and the file example.c summarizes it 3127dd7cddfSDavid du Colombier * with some code on which to build. This file is useful for looking 3137dd7cddfSDavid du Colombier * at the actual function definitions and structure components. 3147dd7cddfSDavid du Colombier */ 3157dd7cddfSDavid du Colombier 316*593dc095SDavid du Colombier /* Version information for png.h - this should match the version in png.c */ 317*593dc095SDavid du Colombier #define PNG_LIBPNG_VER_STRING "1.2.8" 318*593dc095SDavid du Colombier #define PNG_HEADER_VERSION_STRING \ 319*593dc095SDavid du Colombier " libpng version 1.2.8 - December 3, 2004 (header)\n" 320*593dc095SDavid du Colombier 321*593dc095SDavid du Colombier #define PNG_LIBPNG_VER_SONUM 0 322*593dc095SDavid du Colombier #define PNG_LIBPNG_VER_DLLNUM 13 323*593dc095SDavid du Colombier 324*593dc095SDavid du Colombier /* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */ 325*593dc095SDavid du Colombier #define PNG_LIBPNG_VER_MAJOR 1 326*593dc095SDavid du Colombier #define PNG_LIBPNG_VER_MINOR 2 327*593dc095SDavid du Colombier #define PNG_LIBPNG_VER_RELEASE 8 328*593dc095SDavid du Colombier /* This should match the numeric part of the final component of 329*593dc095SDavid du Colombier * PNG_LIBPNG_VER_STRING, omitting any leading zero: */ 330*593dc095SDavid du Colombier 331*593dc095SDavid du Colombier #define PNG_LIBPNG_VER_BUILD 0 332*593dc095SDavid du Colombier 333*593dc095SDavid du Colombier /* Release Status */ 334*593dc095SDavid du Colombier #define PNG_LIBPNG_BUILD_ALPHA 1 335*593dc095SDavid du Colombier #define PNG_LIBPNG_BUILD_BETA 2 336*593dc095SDavid du Colombier #define PNG_LIBPNG_BUILD_RC 3 337*593dc095SDavid du Colombier #define PNG_LIBPNG_BUILD_STABLE 4 338*593dc095SDavid du Colombier #define PNG_LIBPNG_BUILD_RELEASE_STATUS_MASK 7 339*593dc095SDavid du Colombier 340*593dc095SDavid du Colombier /* Release-Specific Flags */ 341*593dc095SDavid du Colombier #define PNG_LIBPNG_BUILD_PATCH 8 /* Can be OR'ed with 342*593dc095SDavid du Colombier PNG_LIBPNG_BUILD_STABLE only */ 343*593dc095SDavid du Colombier #define PNG_LIBPNG_BUILD_PRIVATE 16 /* Cannot be OR'ed with 344*593dc095SDavid du Colombier PNG_LIBPNG_BUILD_SPECIAL */ 345*593dc095SDavid du Colombier #define PNG_LIBPNG_BUILD_SPECIAL 32 /* Cannot be OR'ed with 346*593dc095SDavid du Colombier PNG_LIBPNG_BUILD_PRIVATE */ 347*593dc095SDavid du Colombier 348*593dc095SDavid du Colombier #define PNG_LIBPNG_BUILD_BASE_TYPE PNG_LIBPNG_BUILD_STABLE 349*593dc095SDavid du Colombier 350*593dc095SDavid du Colombier /* Careful here. At one time, Guy wanted to use 082, but that would be octal. 351*593dc095SDavid du Colombier * We must not include leading zeros. 352*593dc095SDavid du Colombier * Versions 0.7 through 1.0.0 were in the range 0 to 100 here (only 353*593dc095SDavid du Colombier * version 1.0.0 was mis-numbered 100 instead of 10000). From 354*593dc095SDavid du Colombier * version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release */ 355*593dc095SDavid du Colombier #define PNG_LIBPNG_VER 10208 /* 1.2.8 */ 356*593dc095SDavid du Colombier 357*593dc095SDavid du Colombier #ifndef PNG_VERSION_INFO_ONLY 3587dd7cddfSDavid du Colombier /* include the compression library's header */ 3597dd7cddfSDavid du Colombier #include "zlib.h" 360*593dc095SDavid du Colombier #endif 3617dd7cddfSDavid du Colombier 362*593dc095SDavid du Colombier /* include all user configurable info, including optional assembler routines */ 3637dd7cddfSDavid du Colombier #include "pngconf.h" 3647dd7cddfSDavid du Colombier 365*593dc095SDavid du Colombier /* 366*593dc095SDavid du Colombier * Added at libpng-1.2.8 */ 367*593dc095SDavid du Colombier /* Ref MSDN: Private as priority over Special 368*593dc095SDavid du Colombier * VS_FF_PRIVATEBUILD File *was not* built using standard release 369*593dc095SDavid du Colombier * procedures. If this value is given, the StringFileInfo block must 370*593dc095SDavid du Colombier * contain a PrivateBuild string. 371*593dc095SDavid du Colombier * 372*593dc095SDavid du Colombier * VS_FF_SPECIALBUILD File *was* built by the original company using 373*593dc095SDavid du Colombier * standard release procedures but is a variation of the standard 374*593dc095SDavid du Colombier * file of the same version number. If this value is given, the 375*593dc095SDavid du Colombier * StringFileInfo block must contain a SpecialBuild string. 376*593dc095SDavid du Colombier */ 377*593dc095SDavid du Colombier 378*593dc095SDavid du Colombier #if defined(PNG_USER_PRIVATEBUILD) 379*593dc095SDavid du Colombier # define PNG_LIBPNG_BUILD_TYPE PNG_LIBPNG_BUILD_BASE_TYPE | \ 380*593dc095SDavid du Colombier PNG_LIBPNG_BUILD_PRIVATE 381*593dc095SDavid du Colombier #else 382*593dc095SDavid du Colombier # if defined(PNG_LIBPNG_SPECIALBUILD) 383*593dc095SDavid du Colombier # define PNG_LIBPNG_BUILD_TYPE PNG_LIBPNG_BUILD_BASE_TYPE | \ 384*593dc095SDavid du Colombier PNG_LIBPNG_BUILD_SPECIAL 385*593dc095SDavid du Colombier # else 386*593dc095SDavid du Colombier # define PNG_LIBPNG_BUILD_TYPE PNG_LIBPNG_BUILD_BASE_TYPE 387*593dc095SDavid du Colombier # endif 388*593dc095SDavid du Colombier #endif 389*593dc095SDavid du Colombier 390*593dc095SDavid du Colombier #ifndef PNG_VERSION_INFO_ONLY 391*593dc095SDavid du Colombier 392*593dc095SDavid du Colombier /* Inhibit C++ name-mangling for libpng functions but not for system calls. */ 393*593dc095SDavid du Colombier #ifdef __cplusplus 394*593dc095SDavid du Colombier extern "C" { 395*593dc095SDavid du Colombier #endif /* __cplusplus */ 396*593dc095SDavid du Colombier 3977dd7cddfSDavid du Colombier /* This file is arranged in several sections. The first section contains 3987dd7cddfSDavid du Colombier * structure and type definitions. The second section contains the external 3997dd7cddfSDavid du Colombier * library functions, while the third has the internal library functions, 4007dd7cddfSDavid du Colombier * which applications aren't expected to use directly. 4017dd7cddfSDavid du Colombier */ 4027dd7cddfSDavid du Colombier 403*593dc095SDavid du Colombier #ifndef PNG_NO_TYPECAST_NULL 404*593dc095SDavid du Colombier #define int_p_NULL (int *)NULL 405*593dc095SDavid du Colombier #define png_bytep_NULL (png_bytep)NULL 406*593dc095SDavid du Colombier #define png_bytepp_NULL (png_bytepp)NULL 407*593dc095SDavid du Colombier #define png_doublep_NULL (png_doublep)NULL 408*593dc095SDavid du Colombier #define png_error_ptr_NULL (png_error_ptr)NULL 409*593dc095SDavid du Colombier #define png_flush_ptr_NULL (png_flush_ptr)NULL 410*593dc095SDavid du Colombier #define png_free_ptr_NULL (png_free_ptr)NULL 411*593dc095SDavid du Colombier #define png_infopp_NULL (png_infopp)NULL 412*593dc095SDavid du Colombier #define png_malloc_ptr_NULL (png_malloc_ptr)NULL 413*593dc095SDavid du Colombier #define png_read_status_ptr_NULL (png_read_status_ptr)NULL 414*593dc095SDavid du Colombier #define png_rw_ptr_NULL (png_rw_ptr)NULL 415*593dc095SDavid du Colombier #define png_structp_NULL (png_structp)NULL 416*593dc095SDavid du Colombier #define png_uint_16p_NULL (png_uint_16p)NULL 417*593dc095SDavid du Colombier #define png_voidp_NULL (png_voidp)NULL 418*593dc095SDavid du Colombier #define png_write_status_ptr_NULL (png_write_status_ptr)NULL 419*593dc095SDavid du Colombier #else 420*593dc095SDavid du Colombier #define int_p_NULL NULL 421*593dc095SDavid du Colombier #define png_bytep_NULL NULL 422*593dc095SDavid du Colombier #define png_bytepp_NULL NULL 423*593dc095SDavid du Colombier #define png_doublep_NULL NULL 424*593dc095SDavid du Colombier #define png_error_ptr_NULL NULL 425*593dc095SDavid du Colombier #define png_flush_ptr_NULL NULL 426*593dc095SDavid du Colombier #define png_free_ptr_NULL NULL 427*593dc095SDavid du Colombier #define png_infopp_NULL NULL 428*593dc095SDavid du Colombier #define png_malloc_ptr_NULL NULL 429*593dc095SDavid du Colombier #define png_read_status_ptr_NULL NULL 430*593dc095SDavid du Colombier #define png_rw_ptr_NULL NULL 431*593dc095SDavid du Colombier #define png_structp_NULL NULL 432*593dc095SDavid du Colombier #define png_uint_16p_NULL NULL 433*593dc095SDavid du Colombier #define png_voidp_NULL NULL 434*593dc095SDavid du Colombier #define png_write_status_ptr_NULL NULL 435*593dc095SDavid du Colombier #endif 4367dd7cddfSDavid du Colombier 4377dd7cddfSDavid du Colombier /* variables declared in png.c - only it needs to define PNG_NO_EXTERN */ 4387dd7cddfSDavid du Colombier #if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN) 4397dd7cddfSDavid du Colombier /* Version information for C files, stored in png.c. This had better match 4407dd7cddfSDavid du Colombier * the version above. 4417dd7cddfSDavid du Colombier */ 442*593dc095SDavid du Colombier #ifdef PNG_USE_GLOBAL_ARRAYS 443*593dc095SDavid du Colombier PNG_EXPORT_VAR (const char) png_libpng_ver[18]; 444*593dc095SDavid du Colombier /* need room for 99.99.99beta99z */ 445*593dc095SDavid du Colombier #else 446*593dc095SDavid du Colombier #define png_libpng_ver png_get_header_ver(NULL) 447*593dc095SDavid du Colombier #endif 4487dd7cddfSDavid du Colombier 449*593dc095SDavid du Colombier #ifdef PNG_USE_GLOBAL_ARRAYS 450*593dc095SDavid du Colombier /* This was removed in version 1.0.5c */ 4517dd7cddfSDavid du Colombier /* Structures to facilitate easy interlacing. See png.c for more details */ 452*593dc095SDavid du Colombier PNG_EXPORT_VAR (const int FARDATA) png_pass_start[7]; 453*593dc095SDavid du Colombier PNG_EXPORT_VAR (const int FARDATA) png_pass_inc[7]; 454*593dc095SDavid du Colombier PNG_EXPORT_VAR (const int FARDATA) png_pass_ystart[7]; 455*593dc095SDavid du Colombier PNG_EXPORT_VAR (const int FARDATA) png_pass_yinc[7]; 456*593dc095SDavid du Colombier PNG_EXPORT_VAR (const int FARDATA) png_pass_mask[7]; 457*593dc095SDavid du Colombier PNG_EXPORT_VAR (const int FARDATA) png_pass_dsp_mask[7]; 458*593dc095SDavid du Colombier #ifdef PNG_HAVE_ASSEMBLER_COMBINE_ROW 459*593dc095SDavid du Colombier PNG_EXPORT_VAR (const int FARDATA) png_pass_width[7]; 460*593dc095SDavid du Colombier #endif 461*593dc095SDavid du Colombier /* This isn't currently used. If you need it, see png.c for more details. 462*593dc095SDavid du Colombier PNG_EXPORT_VAR (const int FARDATA) png_pass_height[7]; 4637dd7cddfSDavid du Colombier */ 464*593dc095SDavid du Colombier #endif 465*593dc095SDavid du Colombier 4667dd7cddfSDavid du Colombier #endif /* PNG_NO_EXTERN */ 4677dd7cddfSDavid du Colombier 4687dd7cddfSDavid du Colombier /* Three color definitions. The order of the red, green, and blue, (and the 4697dd7cddfSDavid du Colombier * exact size) is not important, although the size of the fields need to 4707dd7cddfSDavid du Colombier * be png_byte or png_uint_16 (as defined below). 4717dd7cddfSDavid du Colombier */ 4727dd7cddfSDavid du Colombier typedef struct png_color_struct 4737dd7cddfSDavid du Colombier { 4747dd7cddfSDavid du Colombier png_byte red; 4757dd7cddfSDavid du Colombier png_byte green; 4767dd7cddfSDavid du Colombier png_byte blue; 4777dd7cddfSDavid du Colombier } png_color; 4787dd7cddfSDavid du Colombier typedef png_color FAR * png_colorp; 4797dd7cddfSDavid du Colombier typedef png_color FAR * FAR * png_colorpp; 4807dd7cddfSDavid du Colombier 4817dd7cddfSDavid du Colombier typedef struct png_color_16_struct 4827dd7cddfSDavid du Colombier { 4837dd7cddfSDavid du Colombier png_byte index; /* used for palette files */ 4847dd7cddfSDavid du Colombier png_uint_16 red; /* for use in red green blue files */ 4857dd7cddfSDavid du Colombier png_uint_16 green; 4867dd7cddfSDavid du Colombier png_uint_16 blue; 4877dd7cddfSDavid du Colombier png_uint_16 gray; /* for use in grayscale files */ 4887dd7cddfSDavid du Colombier } png_color_16; 4897dd7cddfSDavid du Colombier typedef png_color_16 FAR * png_color_16p; 4907dd7cddfSDavid du Colombier typedef png_color_16 FAR * FAR * png_color_16pp; 4917dd7cddfSDavid du Colombier 4927dd7cddfSDavid du Colombier typedef struct png_color_8_struct 4937dd7cddfSDavid du Colombier { 4947dd7cddfSDavid du Colombier png_byte red; /* for use in red green blue files */ 4957dd7cddfSDavid du Colombier png_byte green; 4967dd7cddfSDavid du Colombier png_byte blue; 4977dd7cddfSDavid du Colombier png_byte gray; /* for use in grayscale files */ 4987dd7cddfSDavid du Colombier png_byte alpha; /* for alpha channel files */ 4997dd7cddfSDavid du Colombier } png_color_8; 5007dd7cddfSDavid du Colombier typedef png_color_8 FAR * png_color_8p; 5017dd7cddfSDavid du Colombier typedef png_color_8 FAR * FAR * png_color_8pp; 5027dd7cddfSDavid du Colombier 503*593dc095SDavid du Colombier /* 504*593dc095SDavid du Colombier * The following two structures are used for the in-core representation 505*593dc095SDavid du Colombier * of sPLT chunks. 506*593dc095SDavid du Colombier */ 507*593dc095SDavid du Colombier typedef struct png_sPLT_entry_struct 508*593dc095SDavid du Colombier { 509*593dc095SDavid du Colombier png_uint_16 red; 510*593dc095SDavid du Colombier png_uint_16 green; 511*593dc095SDavid du Colombier png_uint_16 blue; 512*593dc095SDavid du Colombier png_uint_16 alpha; 513*593dc095SDavid du Colombier png_uint_16 frequency; 514*593dc095SDavid du Colombier } png_sPLT_entry; 515*593dc095SDavid du Colombier typedef png_sPLT_entry FAR * png_sPLT_entryp; 516*593dc095SDavid du Colombier typedef png_sPLT_entry FAR * FAR * png_sPLT_entrypp; 517*593dc095SDavid du Colombier 518*593dc095SDavid du Colombier /* When the depth of the sPLT palette is 8 bits, the color and alpha samples 519*593dc095SDavid du Colombier * occupy the LSB of their respective members, and the MSB of each member 520*593dc095SDavid du Colombier * is zero-filled. The frequency member always occupies the full 16 bits. 521*593dc095SDavid du Colombier */ 522*593dc095SDavid du Colombier 523*593dc095SDavid du Colombier typedef struct png_sPLT_struct 524*593dc095SDavid du Colombier { 525*593dc095SDavid du Colombier png_charp name; /* palette name */ 526*593dc095SDavid du Colombier png_byte depth; /* depth of palette samples */ 527*593dc095SDavid du Colombier png_sPLT_entryp entries; /* palette entries */ 528*593dc095SDavid du Colombier png_int_32 nentries; /* number of palette entries */ 529*593dc095SDavid du Colombier } png_sPLT_t; 530*593dc095SDavid du Colombier typedef png_sPLT_t FAR * png_sPLT_tp; 531*593dc095SDavid du Colombier typedef png_sPLT_t FAR * FAR * png_sPLT_tpp; 532*593dc095SDavid du Colombier 533*593dc095SDavid du Colombier #ifdef PNG_TEXT_SUPPORTED 534*593dc095SDavid du Colombier /* png_text holds the contents of a text/ztxt/itxt chunk in a PNG file, 535*593dc095SDavid du Colombier * and whether that contents is compressed or not. The "key" field 536*593dc095SDavid du Colombier * points to a regular zero-terminated C string. The "text", "lang", and 537*593dc095SDavid du Colombier * "lang_key" fields can be regular C strings, empty strings, or NULL pointers. 538*593dc095SDavid du Colombier * However, the * structure returned by png_get_text() will always contain 539*593dc095SDavid du Colombier * regular zero-terminated C strings (possibly empty), never NULL pointers, 540*593dc095SDavid du Colombier * so they can be safely used in printf() and other string-handling functions. 541*593dc095SDavid du Colombier */ 5427dd7cddfSDavid du Colombier typedef struct png_text_struct 5437dd7cddfSDavid du Colombier { 544*593dc095SDavid du Colombier int compression; /* compression value: 545*593dc095SDavid du Colombier -1: tEXt, none 546*593dc095SDavid du Colombier 0: zTXt, deflate 547*593dc095SDavid du Colombier 1: iTXt, none 548*593dc095SDavid du Colombier 2: iTXt, deflate */ 5497dd7cddfSDavid du Colombier png_charp key; /* keyword, 1-79 character description of "text" */ 550*593dc095SDavid du Colombier png_charp text; /* comment, may be an empty string (ie "") 551*593dc095SDavid du Colombier or a NULL pointer */ 552*593dc095SDavid du Colombier png_size_t text_length; /* length of the text string */ 553*593dc095SDavid du Colombier #ifdef PNG_iTXt_SUPPORTED 554*593dc095SDavid du Colombier png_size_t itxt_length; /* length of the itxt string */ 555*593dc095SDavid du Colombier png_charp lang; /* language code, 0-79 characters 556*593dc095SDavid du Colombier or a NULL pointer */ 557*593dc095SDavid du Colombier png_charp lang_key; /* keyword translated UTF-8 string, 0 or more 558*593dc095SDavid du Colombier chars or a NULL pointer */ 559*593dc095SDavid du Colombier #endif 5607dd7cddfSDavid du Colombier } png_text; 5617dd7cddfSDavid du Colombier typedef png_text FAR * png_textp; 5627dd7cddfSDavid du Colombier typedef png_text FAR * FAR * png_textpp; 563*593dc095SDavid du Colombier #endif 5647dd7cddfSDavid du Colombier 5657dd7cddfSDavid du Colombier /* Supported compression types for text in PNG files (tEXt, and zTXt). 5667dd7cddfSDavid du Colombier * The values of the PNG_TEXT_COMPRESSION_ defines should NOT be changed. */ 5677dd7cddfSDavid du Colombier #define PNG_TEXT_COMPRESSION_NONE_WR -3 5687dd7cddfSDavid du Colombier #define PNG_TEXT_COMPRESSION_zTXt_WR -2 5697dd7cddfSDavid du Colombier #define PNG_TEXT_COMPRESSION_NONE -1 5707dd7cddfSDavid du Colombier #define PNG_TEXT_COMPRESSION_zTXt 0 571*593dc095SDavid du Colombier #define PNG_ITXT_COMPRESSION_NONE 1 572*593dc095SDavid du Colombier #define PNG_ITXT_COMPRESSION_zTXt 2 573*593dc095SDavid du Colombier #define PNG_TEXT_COMPRESSION_LAST 3 /* Not a valid value */ 5747dd7cddfSDavid du Colombier 5757dd7cddfSDavid du Colombier /* png_time is a way to hold the time in an machine independent way. 5767dd7cddfSDavid du Colombier * Two conversions are provided, both from time_t and struct tm. There 5777dd7cddfSDavid du Colombier * is no portable way to convert to either of these structures, as far 5787dd7cddfSDavid du Colombier * as I know. If you know of a portable way, send it to me. As a side 579*593dc095SDavid du Colombier * note - PNG has always been Year 2000 compliant! 5807dd7cddfSDavid du Colombier */ 5817dd7cddfSDavid du Colombier typedef struct png_time_struct 5827dd7cddfSDavid du Colombier { 5837dd7cddfSDavid du Colombier png_uint_16 year; /* full year, as in, 1995 */ 5847dd7cddfSDavid du Colombier png_byte month; /* month of year, 1 - 12 */ 5857dd7cddfSDavid du Colombier png_byte day; /* day of month, 1 - 31 */ 5867dd7cddfSDavid du Colombier png_byte hour; /* hour of day, 0 - 23 */ 5877dd7cddfSDavid du Colombier png_byte minute; /* minute of hour, 0 - 59 */ 5887dd7cddfSDavid du Colombier png_byte second; /* second of minute, 0 - 60 (for leap seconds) */ 5897dd7cddfSDavid du Colombier } png_time; 5907dd7cddfSDavid du Colombier typedef png_time FAR * png_timep; 5917dd7cddfSDavid du Colombier typedef png_time FAR * FAR * png_timepp; 5927dd7cddfSDavid du Colombier 593*593dc095SDavid du Colombier #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) 594*593dc095SDavid du Colombier /* png_unknown_chunk is a structure to hold queued chunks for which there is 595*593dc095SDavid du Colombier * no specific support. The idea is that we can use this to queue 596*593dc095SDavid du Colombier * up private chunks for output even though the library doesn't actually 597*593dc095SDavid du Colombier * know about their semantics. 598*593dc095SDavid du Colombier */ 599*593dc095SDavid du Colombier typedef struct png_unknown_chunk_t 600*593dc095SDavid du Colombier { 601*593dc095SDavid du Colombier png_byte name[5]; 602*593dc095SDavid du Colombier png_byte *data; 603*593dc095SDavid du Colombier png_size_t size; 604*593dc095SDavid du Colombier 605*593dc095SDavid du Colombier /* libpng-using applications should NOT directly modify this byte. */ 606*593dc095SDavid du Colombier png_byte location; /* mode of operation at read time */ 607*593dc095SDavid du Colombier } 608*593dc095SDavid du Colombier png_unknown_chunk; 609*593dc095SDavid du Colombier typedef png_unknown_chunk FAR * png_unknown_chunkp; 610*593dc095SDavid du Colombier typedef png_unknown_chunk FAR * FAR * png_unknown_chunkpp; 611*593dc095SDavid du Colombier #endif 612*593dc095SDavid du Colombier 6137dd7cddfSDavid du Colombier /* png_info is a structure that holds the information in a PNG file so 6147dd7cddfSDavid du Colombier * that the application can find out the characteristics of the image. 6157dd7cddfSDavid du Colombier * If you are reading the file, this structure will tell you what is 6167dd7cddfSDavid du Colombier * in the PNG file. If you are writing the file, fill in the information 6177dd7cddfSDavid du Colombier * you want to put into the PNG file, then call png_write_info(). 6187dd7cddfSDavid du Colombier * The names chosen should be very close to the PNG specification, so 6197dd7cddfSDavid du Colombier * consult that document for information about the meaning of each field. 6207dd7cddfSDavid du Colombier * 6217dd7cddfSDavid du Colombier * With libpng < 0.95, it was only possible to directly set and read the 6227dd7cddfSDavid du Colombier * the values in the png_info_struct, which meant that the contents and 6237dd7cddfSDavid du Colombier * order of the values had to remain fixed. With libpng 0.95 and later, 624*593dc095SDavid du Colombier * however, there are now functions that abstract the contents of 6257dd7cddfSDavid du Colombier * png_info_struct from the application, so this makes it easier to use 6267dd7cddfSDavid du Colombier * libpng with dynamic libraries, and even makes it possible to use 6277dd7cddfSDavid du Colombier * libraries that don't have all of the libpng ancillary chunk-handing 6287dd7cddfSDavid du Colombier * functionality. 6297dd7cddfSDavid du Colombier * 6307dd7cddfSDavid du Colombier * In any case, the order of the parameters in png_info_struct should NOT 6317dd7cddfSDavid du Colombier * be changed for as long as possible to keep compatibility with applications 6327dd7cddfSDavid du Colombier * that use the old direct-access method with png_info_struct. 633*593dc095SDavid du Colombier * 634*593dc095SDavid du Colombier * The following members may have allocated storage attached that should be 635*593dc095SDavid du Colombier * cleaned up before the structure is discarded: palette, trans, text, 636*593dc095SDavid du Colombier * pcal_purpose, pcal_units, pcal_params, hist, iccp_name, iccp_profile, 637*593dc095SDavid du Colombier * splt_palettes, scal_unit, row_pointers, and unknowns. By default, these 638*593dc095SDavid du Colombier * are automatically freed when the info structure is deallocated, if they were 639*593dc095SDavid du Colombier * allocated internally by libpng. This behavior can be changed by means 640*593dc095SDavid du Colombier * of the png_data_freer() function. 641*593dc095SDavid du Colombier * 642*593dc095SDavid du Colombier * More allocation details: all the chunk-reading functions that 643*593dc095SDavid du Colombier * change these members go through the corresponding png_set_* 644*593dc095SDavid du Colombier * functions. A function to clear these members is available: see 645*593dc095SDavid du Colombier * png_free_data(). The png_set_* functions do not depend on being 646*593dc095SDavid du Colombier * able to point info structure members to any of the storage they are 647*593dc095SDavid du Colombier * passed (they make their own copies), EXCEPT that the png_set_text 648*593dc095SDavid du Colombier * functions use the same storage passed to them in the text_ptr or 649*593dc095SDavid du Colombier * itxt_ptr structure argument, and the png_set_rows and png_set_unknowns 650*593dc095SDavid du Colombier * functions do not make their own copies. 6517dd7cddfSDavid du Colombier */ 6527dd7cddfSDavid du Colombier typedef struct png_info_struct 6537dd7cddfSDavid du Colombier { 6547dd7cddfSDavid du Colombier /* the following are necessary for every PNG file */ 6557dd7cddfSDavid du Colombier png_uint_32 width; /* width of image in pixels (from IHDR) */ 6567dd7cddfSDavid du Colombier png_uint_32 height; /* height of image in pixels (from IHDR) */ 6577dd7cddfSDavid du Colombier png_uint_32 valid; /* valid chunk data (see PNG_INFO_ below) */ 658*593dc095SDavid du Colombier png_uint_32 rowbytes; /* bytes needed to hold an untransformed row */ 6597dd7cddfSDavid du Colombier png_colorp palette; /* array of color values (valid & PNG_INFO_PLTE) */ 6607dd7cddfSDavid du Colombier png_uint_16 num_palette; /* number of color entries in "palette" (PLTE) */ 6617dd7cddfSDavid du Colombier png_uint_16 num_trans; /* number of transparent palette color (tRNS) */ 6627dd7cddfSDavid du Colombier png_byte bit_depth; /* 1, 2, 4, 8, or 16 bits/channel (from IHDR) */ 6637dd7cddfSDavid du Colombier png_byte color_type; /* see PNG_COLOR_TYPE_ below (from IHDR) */ 664*593dc095SDavid du Colombier /* The following three should have been named *_method not *_type */ 6657dd7cddfSDavid du Colombier png_byte compression_type; /* must be PNG_COMPRESSION_TYPE_BASE (IHDR) */ 6667dd7cddfSDavid du Colombier png_byte filter_type; /* must be PNG_FILTER_TYPE_BASE (from IHDR) */ 6677dd7cddfSDavid du Colombier png_byte interlace_type; /* One of PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */ 6687dd7cddfSDavid du Colombier 6697dd7cddfSDavid du Colombier /* The following is informational only on read, and not used on writes. */ 670*593dc095SDavid du Colombier png_byte channels; /* number of data channels per pixel (1, 2, 3, 4) */ 6717dd7cddfSDavid du Colombier png_byte pixel_depth; /* number of bits per pixel */ 6727dd7cddfSDavid du Colombier png_byte spare_byte; /* to align the data, and for future use */ 6737dd7cddfSDavid du Colombier png_byte signature[8]; /* magic bytes read by libpng from start of file */ 6747dd7cddfSDavid du Colombier 6757dd7cddfSDavid du Colombier /* The rest of the data is optional. If you are reading, check the 6767dd7cddfSDavid du Colombier * valid field to see if the information in these are valid. If you 6777dd7cddfSDavid du Colombier * are writing, set the valid field to those chunks you want written, 6787dd7cddfSDavid du Colombier * and initialize the appropriate fields below. 6797dd7cddfSDavid du Colombier */ 6807dd7cddfSDavid du Colombier 681*593dc095SDavid du Colombier #if defined(PNG_gAMA_SUPPORTED) && defined(PNG_FLOATING_POINT_SUPPORTED) 6827dd7cddfSDavid du Colombier /* The gAMA chunk describes the gamma characteristics of the system 6837dd7cddfSDavid du Colombier * on which the image was created, normally in the range [1.0, 2.5]. 6847dd7cddfSDavid du Colombier * Data is valid if (valid & PNG_INFO_gAMA) is non-zero. 6857dd7cddfSDavid du Colombier */ 6867dd7cddfSDavid du Colombier float gamma; /* gamma value of image, if (valid & PNG_INFO_gAMA) */ 687*593dc095SDavid du Colombier #endif 6887dd7cddfSDavid du Colombier 689*593dc095SDavid du Colombier #if defined(PNG_sRGB_SUPPORTED) 6907dd7cddfSDavid du Colombier /* GR-P, 0.96a */ 6917dd7cddfSDavid du Colombier /* Data valid if (valid & PNG_INFO_sRGB) non-zero. */ 6927dd7cddfSDavid du Colombier png_byte srgb_intent; /* sRGB rendering intent [0, 1, 2, or 3] */ 693*593dc095SDavid du Colombier #endif 6947dd7cddfSDavid du Colombier 695*593dc095SDavid du Colombier #if defined(PNG_TEXT_SUPPORTED) 696*593dc095SDavid du Colombier /* The tEXt, and zTXt chunks contain human-readable textual data in 697*593dc095SDavid du Colombier * uncompressed, compressed, and optionally compressed forms, respectively. 698*593dc095SDavid du Colombier * The data in "text" is an array of pointers to uncompressed, 699*593dc095SDavid du Colombier * null-terminated C strings. Each chunk has a keyword that describes the 700*593dc095SDavid du Colombier * textual data contained in that chunk. Keywords are not required to be 701*593dc095SDavid du Colombier * unique, and the text string may be empty. Any number of text chunks may 702*593dc095SDavid du Colombier * be in an image. 7037dd7cddfSDavid du Colombier */ 7047dd7cddfSDavid du Colombier int num_text; /* number of comments read/to write */ 7057dd7cddfSDavid du Colombier int max_text; /* current size of text array */ 7067dd7cddfSDavid du Colombier png_textp text; /* array of comments read/to write */ 707*593dc095SDavid du Colombier #endif /* PNG_TEXT_SUPPORTED */ 708*593dc095SDavid du Colombier 709*593dc095SDavid du Colombier #if defined(PNG_tIME_SUPPORTED) 7107dd7cddfSDavid du Colombier /* The tIME chunk holds the last time the displayed image data was 7117dd7cddfSDavid du Colombier * modified. See the png_time struct for the contents of this struct. 7127dd7cddfSDavid du Colombier */ 7137dd7cddfSDavid du Colombier png_time mod_time; 714*593dc095SDavid du Colombier #endif 715*593dc095SDavid du Colombier 716*593dc095SDavid du Colombier #if defined(PNG_sBIT_SUPPORTED) 7177dd7cddfSDavid du Colombier /* The sBIT chunk specifies the number of significant high-order bits 7187dd7cddfSDavid du Colombier * in the pixel data. Values are in the range [1, bit_depth], and are 7197dd7cddfSDavid du Colombier * only specified for the channels in the pixel data. The contents of 7207dd7cddfSDavid du Colombier * the low-order bits is not specified. Data is valid if 7217dd7cddfSDavid du Colombier * (valid & PNG_INFO_sBIT) is non-zero. 7227dd7cddfSDavid du Colombier */ 7237dd7cddfSDavid du Colombier png_color_8 sig_bit; /* significant bits in color channels */ 724*593dc095SDavid du Colombier #endif 725*593dc095SDavid du Colombier 726*593dc095SDavid du Colombier #if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_EXPAND_SUPPORTED) || \ 727*593dc095SDavid du Colombier defined(PNG_READ_BACKGROUND_SUPPORTED) 7287dd7cddfSDavid du Colombier /* The tRNS chunk supplies transparency data for paletted images and 7297dd7cddfSDavid du Colombier * other image types that don't need a full alpha channel. There are 7307dd7cddfSDavid du Colombier * "num_trans" transparency values for a paletted image, stored in the 7317dd7cddfSDavid du Colombier * same order as the palette colors, starting from index 0. Values 7327dd7cddfSDavid du Colombier * for the data are in the range [0, 255], ranging from fully transparent 7337dd7cddfSDavid du Colombier * to fully opaque, respectively. For non-paletted images, there is a 734*593dc095SDavid du Colombier * single color specified that should be treated as fully transparent. 7357dd7cddfSDavid du Colombier * Data is valid if (valid & PNG_INFO_tRNS) is non-zero. 7367dd7cddfSDavid du Colombier */ 7377dd7cddfSDavid du Colombier png_bytep trans; /* transparent values for paletted image */ 7387dd7cddfSDavid du Colombier png_color_16 trans_values; /* transparent color for non-palette image */ 739*593dc095SDavid du Colombier #endif 740*593dc095SDavid du Colombier 741*593dc095SDavid du Colombier #if defined(PNG_bKGD_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) 7427dd7cddfSDavid du Colombier /* The bKGD chunk gives the suggested image background color if the 7437dd7cddfSDavid du Colombier * display program does not have its own background color and the image 7447dd7cddfSDavid du Colombier * is needs to composited onto a background before display. The colors 7457dd7cddfSDavid du Colombier * in "background" are normally in the same color space/depth as the 7467dd7cddfSDavid du Colombier * pixel data. Data is valid if (valid & PNG_INFO_bKGD) is non-zero. 7477dd7cddfSDavid du Colombier */ 7487dd7cddfSDavid du Colombier png_color_16 background; 749*593dc095SDavid du Colombier #endif 750*593dc095SDavid du Colombier 751*593dc095SDavid du Colombier #if defined(PNG_oFFs_SUPPORTED) 7527dd7cddfSDavid du Colombier /* The oFFs chunk gives the offset in "offset_unit_type" units rightwards 7537dd7cddfSDavid du Colombier * and downwards from the top-left corner of the display, page, or other 7547dd7cddfSDavid du Colombier * application-specific co-ordinate space. See the PNG_OFFSET_ defines 7557dd7cddfSDavid du Colombier * below for the unit types. Valid if (valid & PNG_INFO_oFFs) non-zero. 7567dd7cddfSDavid du Colombier */ 757*593dc095SDavid du Colombier png_int_32 x_offset; /* x offset on page */ 758*593dc095SDavid du Colombier png_int_32 y_offset; /* y offset on page */ 7597dd7cddfSDavid du Colombier png_byte offset_unit_type; /* offset units type */ 760*593dc095SDavid du Colombier #endif 761*593dc095SDavid du Colombier 762*593dc095SDavid du Colombier #if defined(PNG_pHYs_SUPPORTED) 7637dd7cddfSDavid du Colombier /* The pHYs chunk gives the physical pixel density of the image for 7647dd7cddfSDavid du Colombier * display or printing in "phys_unit_type" units (see PNG_RESOLUTION_ 7657dd7cddfSDavid du Colombier * defines below). Data is valid if (valid & PNG_INFO_pHYs) is non-zero. 7667dd7cddfSDavid du Colombier */ 7677dd7cddfSDavid du Colombier png_uint_32 x_pixels_per_unit; /* horizontal pixel density */ 7687dd7cddfSDavid du Colombier png_uint_32 y_pixels_per_unit; /* vertical pixel density */ 7697dd7cddfSDavid du Colombier png_byte phys_unit_type; /* resolution type (see PNG_RESOLUTION_ below) */ 770*593dc095SDavid du Colombier #endif 771*593dc095SDavid du Colombier 772*593dc095SDavid du Colombier #if defined(PNG_hIST_SUPPORTED) 7737dd7cddfSDavid du Colombier /* The hIST chunk contains the relative frequency or importance of the 7747dd7cddfSDavid du Colombier * various palette entries, so that a viewer can intelligently select a 7757dd7cddfSDavid du Colombier * reduced-color palette, if required. Data is an array of "num_palette" 7767dd7cddfSDavid du Colombier * values in the range [0,65535]. Data valid if (valid & PNG_INFO_hIST) 7777dd7cddfSDavid du Colombier * is non-zero. 7787dd7cddfSDavid du Colombier */ 7797dd7cddfSDavid du Colombier png_uint_16p hist; 780*593dc095SDavid du Colombier #endif 781*593dc095SDavid du Colombier 782*593dc095SDavid du Colombier #ifdef PNG_cHRM_SUPPORTED 7837dd7cddfSDavid du Colombier /* The cHRM chunk describes the CIE color characteristics of the monitor 7847dd7cddfSDavid du Colombier * on which the PNG was created. This data allows the viewer to do gamut 7857dd7cddfSDavid du Colombier * mapping of the input image to ensure that the viewer sees the same 7867dd7cddfSDavid du Colombier * colors in the image as the creator. Values are in the range 7877dd7cddfSDavid du Colombier * [0.0, 0.8]. Data valid if (valid & PNG_INFO_cHRM) non-zero. 7887dd7cddfSDavid du Colombier */ 789*593dc095SDavid du Colombier #ifdef PNG_FLOATING_POINT_SUPPORTED 7907dd7cddfSDavid du Colombier float x_white; 7917dd7cddfSDavid du Colombier float y_white; 7927dd7cddfSDavid du Colombier float x_red; 7937dd7cddfSDavid du Colombier float y_red; 7947dd7cddfSDavid du Colombier float x_green; 7957dd7cddfSDavid du Colombier float y_green; 7967dd7cddfSDavid du Colombier float x_blue; 7977dd7cddfSDavid du Colombier float y_blue; 798*593dc095SDavid du Colombier #endif 799*593dc095SDavid du Colombier #endif 800*593dc095SDavid du Colombier 801*593dc095SDavid du Colombier #if defined(PNG_pCAL_SUPPORTED) 8027dd7cddfSDavid du Colombier /* The pCAL chunk describes a transformation between the stored pixel 803*593dc095SDavid du Colombier * values and original physical data values used to create the image. 8047dd7cddfSDavid du Colombier * The integer range [0, 2^bit_depth - 1] maps to the floating-point 8057dd7cddfSDavid du Colombier * range given by [pcal_X0, pcal_X1], and are further transformed by a 8067dd7cddfSDavid du Colombier * (possibly non-linear) transformation function given by "pcal_type" 8077dd7cddfSDavid du Colombier * and "pcal_params" into "pcal_units". Please see the PNG_EQUATION_ 808*593dc095SDavid du Colombier * defines below, and the PNG-Group's PNG extensions document for a 809*593dc095SDavid du Colombier * complete description of the transformations and how they should be 810*593dc095SDavid du Colombier * implemented, and for a description of the ASCII parameter strings. 811*593dc095SDavid du Colombier * Data values are valid if (valid & PNG_INFO_pCAL) non-zero. 8127dd7cddfSDavid du Colombier */ 8137dd7cddfSDavid du Colombier png_charp pcal_purpose; /* pCAL chunk description string */ 8147dd7cddfSDavid du Colombier png_int_32 pcal_X0; /* minimum value */ 8157dd7cddfSDavid du Colombier png_int_32 pcal_X1; /* maximum value */ 8167dd7cddfSDavid du Colombier png_charp pcal_units; /* Latin-1 string giving physical units */ 8177dd7cddfSDavid du Colombier png_charpp pcal_params; /* ASCII strings containing parameter values */ 8187dd7cddfSDavid du Colombier png_byte pcal_type; /* equation type (see PNG_EQUATION_ below) */ 8197dd7cddfSDavid du Colombier png_byte pcal_nparams; /* number of parameters given in pcal_params */ 820*593dc095SDavid du Colombier #endif 821*593dc095SDavid du Colombier 822*593dc095SDavid du Colombier /* New members added in libpng-1.0.6 */ 823*593dc095SDavid du Colombier #ifdef PNG_FREE_ME_SUPPORTED 824*593dc095SDavid du Colombier png_uint_32 free_me; /* flags items libpng is responsible for freeing */ 825*593dc095SDavid du Colombier #endif 826*593dc095SDavid du Colombier 827*593dc095SDavid du Colombier #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) 828*593dc095SDavid du Colombier /* storage for unknown chunks that the library doesn't recognize. */ 829*593dc095SDavid du Colombier png_unknown_chunkp unknown_chunks; 830*593dc095SDavid du Colombier png_size_t unknown_chunks_num; 831*593dc095SDavid du Colombier #endif 832*593dc095SDavid du Colombier 833*593dc095SDavid du Colombier #if defined(PNG_iCCP_SUPPORTED) 834*593dc095SDavid du Colombier /* iCCP chunk data. */ 835*593dc095SDavid du Colombier png_charp iccp_name; /* profile name */ 836*593dc095SDavid du Colombier png_charp iccp_profile; /* International Color Consortium profile data */ 837*593dc095SDavid du Colombier /* Note to maintainer: should be png_bytep */ 838*593dc095SDavid du Colombier png_uint_32 iccp_proflen; /* ICC profile data length */ 839*593dc095SDavid du Colombier png_byte iccp_compression; /* Always zero */ 840*593dc095SDavid du Colombier #endif 841*593dc095SDavid du Colombier 842*593dc095SDavid du Colombier #if defined(PNG_sPLT_SUPPORTED) 843*593dc095SDavid du Colombier /* data on sPLT chunks (there may be more than one). */ 844*593dc095SDavid du Colombier png_sPLT_tp splt_palettes; 845*593dc095SDavid du Colombier png_uint_32 splt_palettes_num; 846*593dc095SDavid du Colombier #endif 847*593dc095SDavid du Colombier 848*593dc095SDavid du Colombier #if defined(PNG_sCAL_SUPPORTED) 849*593dc095SDavid du Colombier /* The sCAL chunk describes the actual physical dimensions of the 850*593dc095SDavid du Colombier * subject matter of the graphic. The chunk contains a unit specification 851*593dc095SDavid du Colombier * a byte value, and two ASCII strings representing floating-point 852*593dc095SDavid du Colombier * values. The values are width and height corresponsing to one pixel 853*593dc095SDavid du Colombier * in the image. This external representation is converted to double 854*593dc095SDavid du Colombier * here. Data values are valid if (valid & PNG_INFO_sCAL) is non-zero. 855*593dc095SDavid du Colombier */ 856*593dc095SDavid du Colombier png_byte scal_unit; /* unit of physical scale */ 857*593dc095SDavid du Colombier #ifdef PNG_FLOATING_POINT_SUPPORTED 858*593dc095SDavid du Colombier double scal_pixel_width; /* width of one pixel */ 859*593dc095SDavid du Colombier double scal_pixel_height; /* height of one pixel */ 860*593dc095SDavid du Colombier #endif 861*593dc095SDavid du Colombier #ifdef PNG_FIXED_POINT_SUPPORTED 862*593dc095SDavid du Colombier png_charp scal_s_width; /* string containing height */ 863*593dc095SDavid du Colombier png_charp scal_s_height; /* string containing width */ 864*593dc095SDavid du Colombier #endif 865*593dc095SDavid du Colombier #endif 866*593dc095SDavid du Colombier 867*593dc095SDavid du Colombier #if defined(PNG_INFO_IMAGE_SUPPORTED) 868*593dc095SDavid du Colombier /* Memory has been allocated if (valid & PNG_ALLOCATED_INFO_ROWS) non-zero */ 869*593dc095SDavid du Colombier /* Data valid if (valid & PNG_INFO_IDAT) non-zero */ 870*593dc095SDavid du Colombier png_bytepp row_pointers; /* the image bits */ 871*593dc095SDavid du Colombier #endif 872*593dc095SDavid du Colombier 873*593dc095SDavid du Colombier #if defined(PNG_FIXED_POINT_SUPPORTED) && defined(PNG_gAMA_SUPPORTED) 874*593dc095SDavid du Colombier png_fixed_point int_gamma; /* gamma of image, if (valid & PNG_INFO_gAMA) */ 875*593dc095SDavid du Colombier #endif 876*593dc095SDavid du Colombier 877*593dc095SDavid du Colombier #if defined(PNG_cHRM_SUPPORTED) && defined(PNG_FIXED_POINT_SUPPORTED) 878*593dc095SDavid du Colombier png_fixed_point int_x_white; 879*593dc095SDavid du Colombier png_fixed_point int_y_white; 880*593dc095SDavid du Colombier png_fixed_point int_x_red; 881*593dc095SDavid du Colombier png_fixed_point int_y_red; 882*593dc095SDavid du Colombier png_fixed_point int_x_green; 883*593dc095SDavid du Colombier png_fixed_point int_y_green; 884*593dc095SDavid du Colombier png_fixed_point int_x_blue; 885*593dc095SDavid du Colombier png_fixed_point int_y_blue; 886*593dc095SDavid du Colombier #endif 887*593dc095SDavid du Colombier 8887dd7cddfSDavid du Colombier } png_info; 889*593dc095SDavid du Colombier 8907dd7cddfSDavid du Colombier typedef png_info FAR * png_infop; 8917dd7cddfSDavid du Colombier typedef png_info FAR * FAR * png_infopp; 8927dd7cddfSDavid du Colombier 893*593dc095SDavid du Colombier /* Maximum positive integer used in PNG is (2^31)-1 */ 894*593dc095SDavid du Colombier #define PNG_UINT_31_MAX ((png_uint_32)0x7fffffffL) 895*593dc095SDavid du Colombier #define PNG_UINT_32_MAX ((png_uint_32)(-1)) 896*593dc095SDavid du Colombier #define PNG_SIZE_MAX ((png_size_t)(-1)) 897*593dc095SDavid du Colombier /* PNG_MAX_UINT is deprecated; use PNG_UINT_31_MAX instead. */ 898*593dc095SDavid du Colombier #define PNG_MAX_UINT PNG_UINT_31_MAX 899*593dc095SDavid du Colombier 9007dd7cddfSDavid du Colombier /* These describe the color_type field in png_info. */ 9017dd7cddfSDavid du Colombier /* color type masks */ 9027dd7cddfSDavid du Colombier #define PNG_COLOR_MASK_PALETTE 1 9037dd7cddfSDavid du Colombier #define PNG_COLOR_MASK_COLOR 2 9047dd7cddfSDavid du Colombier #define PNG_COLOR_MASK_ALPHA 4 9057dd7cddfSDavid du Colombier 9067dd7cddfSDavid du Colombier /* color types. Note that not all combinations are legal */ 9077dd7cddfSDavid du Colombier #define PNG_COLOR_TYPE_GRAY 0 9087dd7cddfSDavid du Colombier #define PNG_COLOR_TYPE_PALETTE (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE) 9097dd7cddfSDavid du Colombier #define PNG_COLOR_TYPE_RGB (PNG_COLOR_MASK_COLOR) 9107dd7cddfSDavid du Colombier #define PNG_COLOR_TYPE_RGB_ALPHA (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA) 9117dd7cddfSDavid du Colombier #define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA) 912*593dc095SDavid du Colombier /* aliases */ 913*593dc095SDavid du Colombier #define PNG_COLOR_TYPE_RGBA PNG_COLOR_TYPE_RGB_ALPHA 914*593dc095SDavid du Colombier #define PNG_COLOR_TYPE_GA PNG_COLOR_TYPE_GRAY_ALPHA 9157dd7cddfSDavid du Colombier 916*593dc095SDavid du Colombier /* This is for compression type. PNG 1.0-1.2 only define the single type. */ 9177dd7cddfSDavid du Colombier #define PNG_COMPRESSION_TYPE_BASE 0 /* Deflate method 8, 32K window */ 9187dd7cddfSDavid du Colombier #define PNG_COMPRESSION_TYPE_DEFAULT PNG_COMPRESSION_TYPE_BASE 9197dd7cddfSDavid du Colombier 920*593dc095SDavid du Colombier /* This is for filter type. PNG 1.0-1.2 only define the single type. */ 9217dd7cddfSDavid du Colombier #define PNG_FILTER_TYPE_BASE 0 /* Single row per-byte filtering */ 922*593dc095SDavid du Colombier #define PNG_INTRAPIXEL_DIFFERENCING 64 /* Used only in MNG datastreams */ 9237dd7cddfSDavid du Colombier #define PNG_FILTER_TYPE_DEFAULT PNG_FILTER_TYPE_BASE 9247dd7cddfSDavid du Colombier 9257dd7cddfSDavid du Colombier /* These are for the interlacing type. These values should NOT be changed. */ 9267dd7cddfSDavid du Colombier #define PNG_INTERLACE_NONE 0 /* Non-interlaced image */ 9277dd7cddfSDavid du Colombier #define PNG_INTERLACE_ADAM7 1 /* Adam7 interlacing */ 9287dd7cddfSDavid du Colombier #define PNG_INTERLACE_LAST 2 /* Not a valid value */ 9297dd7cddfSDavid du Colombier 9307dd7cddfSDavid du Colombier /* These are for the oFFs chunk. These values should NOT be changed. */ 9317dd7cddfSDavid du Colombier #define PNG_OFFSET_PIXEL 0 /* Offset in pixels */ 9327dd7cddfSDavid du Colombier #define PNG_OFFSET_MICROMETER 1 /* Offset in micrometers (1/10^6 meter) */ 9337dd7cddfSDavid du Colombier #define PNG_OFFSET_LAST 2 /* Not a valid value */ 9347dd7cddfSDavid du Colombier 9357dd7cddfSDavid du Colombier /* These are for the pCAL chunk. These values should NOT be changed. */ 9367dd7cddfSDavid du Colombier #define PNG_EQUATION_LINEAR 0 /* Linear transformation */ 9377dd7cddfSDavid du Colombier #define PNG_EQUATION_BASE_E 1 /* Exponential base e transform */ 9387dd7cddfSDavid du Colombier #define PNG_EQUATION_ARBITRARY 2 /* Arbitrary base exponential transform */ 9397dd7cddfSDavid du Colombier #define PNG_EQUATION_HYPERBOLIC 3 /* Hyperbolic sine transformation */ 9407dd7cddfSDavid du Colombier #define PNG_EQUATION_LAST 4 /* Not a valid value */ 9417dd7cddfSDavid du Colombier 942*593dc095SDavid du Colombier /* These are for the sCAL chunk. These values should NOT be changed. */ 943*593dc095SDavid du Colombier #define PNG_SCALE_UNKNOWN 0 /* unknown unit (image scale) */ 944*593dc095SDavid du Colombier #define PNG_SCALE_METER 1 /* meters per pixel */ 945*593dc095SDavid du Colombier #define PNG_SCALE_RADIAN 2 /* radians per pixel */ 946*593dc095SDavid du Colombier #define PNG_SCALE_LAST 3 /* Not a valid value */ 947*593dc095SDavid du Colombier 9487dd7cddfSDavid du Colombier /* These are for the pHYs chunk. These values should NOT be changed. */ 9497dd7cddfSDavid du Colombier #define PNG_RESOLUTION_UNKNOWN 0 /* pixels/unknown unit (aspect ratio) */ 9507dd7cddfSDavid du Colombier #define PNG_RESOLUTION_METER 1 /* pixels/meter */ 9517dd7cddfSDavid du Colombier #define PNG_RESOLUTION_LAST 2 /* Not a valid value */ 9527dd7cddfSDavid du Colombier 9537dd7cddfSDavid du Colombier /* These are for the sRGB chunk. These values should NOT be changed. */ 954*593dc095SDavid du Colombier #define PNG_sRGB_INTENT_PERCEPTUAL 0 955*593dc095SDavid du Colombier #define PNG_sRGB_INTENT_RELATIVE 1 956*593dc095SDavid du Colombier #define PNG_sRGB_INTENT_SATURATION 2 957*593dc095SDavid du Colombier #define PNG_sRGB_INTENT_ABSOLUTE 3 9587dd7cddfSDavid du Colombier #define PNG_sRGB_INTENT_LAST 4 /* Not a valid value */ 9597dd7cddfSDavid du Colombier 960*593dc095SDavid du Colombier /* This is for text chunks */ 961*593dc095SDavid du Colombier #define PNG_KEYWORD_MAX_LENGTH 79 9627dd7cddfSDavid du Colombier 963*593dc095SDavid du Colombier /* Maximum number of entries in PLTE/sPLT/tRNS arrays */ 964*593dc095SDavid du Colombier #define PNG_MAX_PALETTE_LENGTH 256 9657dd7cddfSDavid du Colombier 9667dd7cddfSDavid du Colombier /* These determine if an ancillary chunk's data has been successfully read 9677dd7cddfSDavid du Colombier * from the PNG header, or if the application has filled in the corresponding 9687dd7cddfSDavid du Colombier * data in the info_struct to be written into the output file. The values 9697dd7cddfSDavid du Colombier * of the PNG_INFO_<chunk> defines should NOT be changed. 9707dd7cddfSDavid du Colombier */ 9717dd7cddfSDavid du Colombier #define PNG_INFO_gAMA 0x0001 9727dd7cddfSDavid du Colombier #define PNG_INFO_sBIT 0x0002 9737dd7cddfSDavid du Colombier #define PNG_INFO_cHRM 0x0004 9747dd7cddfSDavid du Colombier #define PNG_INFO_PLTE 0x0008 9757dd7cddfSDavid du Colombier #define PNG_INFO_tRNS 0x0010 9767dd7cddfSDavid du Colombier #define PNG_INFO_bKGD 0x0020 9777dd7cddfSDavid du Colombier #define PNG_INFO_hIST 0x0040 9787dd7cddfSDavid du Colombier #define PNG_INFO_pHYs 0x0080 9797dd7cddfSDavid du Colombier #define PNG_INFO_oFFs 0x0100 9807dd7cddfSDavid du Colombier #define PNG_INFO_tIME 0x0200 9817dd7cddfSDavid du Colombier #define PNG_INFO_pCAL 0x0400 9827dd7cddfSDavid du Colombier #define PNG_INFO_sRGB 0x0800 /* GR-P, 0.96a */ 983*593dc095SDavid du Colombier #define PNG_INFO_iCCP 0x1000 /* ESR, 1.0.6 */ 984*593dc095SDavid du Colombier #define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */ 985*593dc095SDavid du Colombier #define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */ 986*593dc095SDavid du Colombier #define PNG_INFO_IDAT 0x8000L /* ESR, 1.0.6 */ 9877dd7cddfSDavid du Colombier 9887dd7cddfSDavid du Colombier /* This is used for the transformation routines, as some of them 9897dd7cddfSDavid du Colombier * change these values for the row. It also should enable using 9907dd7cddfSDavid du Colombier * the routines for other purposes. 9917dd7cddfSDavid du Colombier */ 9927dd7cddfSDavid du Colombier typedef struct png_row_info_struct 9937dd7cddfSDavid du Colombier { 9947dd7cddfSDavid du Colombier png_uint_32 width; /* width of row */ 995*593dc095SDavid du Colombier png_uint_32 rowbytes; /* number of bytes in row */ 9967dd7cddfSDavid du Colombier png_byte color_type; /* color type of row */ 9977dd7cddfSDavid du Colombier png_byte bit_depth; /* bit depth of row */ 9987dd7cddfSDavid du Colombier png_byte channels; /* number of channels (1, 2, 3, or 4) */ 9997dd7cddfSDavid du Colombier png_byte pixel_depth; /* bits per pixel (depth * channels) */ 10007dd7cddfSDavid du Colombier } png_row_info; 10017dd7cddfSDavid du Colombier 10027dd7cddfSDavid du Colombier typedef png_row_info FAR * png_row_infop; 10037dd7cddfSDavid du Colombier typedef png_row_info FAR * FAR * png_row_infopp; 10047dd7cddfSDavid du Colombier 1005*593dc095SDavid du Colombier /* These are the function types for the I/O functions and for the functions 1006*593dc095SDavid du Colombier * that allow the user to override the default I/O functions with his or her 1007*593dc095SDavid du Colombier * own. The png_error_ptr type should match that of user-supplied warning 1008*593dc095SDavid du Colombier * and error functions, while the png_rw_ptr type should match that of the 1009*593dc095SDavid du Colombier * user read/write data functions. 10107dd7cddfSDavid du Colombier */ 10117dd7cddfSDavid du Colombier typedef struct png_struct_def png_struct; 10127dd7cddfSDavid du Colombier typedef png_struct FAR * png_structp; 10137dd7cddfSDavid du Colombier 1014*593dc095SDavid du Colombier typedef void (PNGAPI *png_error_ptr) PNGARG((png_structp, png_const_charp)); 1015*593dc095SDavid du Colombier typedef void (PNGAPI *png_rw_ptr) PNGARG((png_structp, png_bytep, png_size_t)); 1016*593dc095SDavid du Colombier typedef void (PNGAPI *png_flush_ptr) PNGARG((png_structp)); 1017*593dc095SDavid du Colombier typedef void (PNGAPI *png_read_status_ptr) PNGARG((png_structp, png_uint_32, 1018*593dc095SDavid du Colombier int)); 1019*593dc095SDavid du Colombier typedef void (PNGAPI *png_write_status_ptr) PNGARG((png_structp, png_uint_32, 1020*593dc095SDavid du Colombier int)); 1021*593dc095SDavid du Colombier 10227dd7cddfSDavid du Colombier #ifdef PNG_PROGRESSIVE_READ_SUPPORTED 1023*593dc095SDavid du Colombier typedef void (PNGAPI *png_progressive_info_ptr) PNGARG((png_structp, png_infop)); 1024*593dc095SDavid du Colombier typedef void (PNGAPI *png_progressive_end_ptr) PNGARG((png_structp, png_infop)); 1025*593dc095SDavid du Colombier typedef void (PNGAPI *png_progressive_row_ptr) PNGARG((png_structp, png_bytep, 10267dd7cddfSDavid du Colombier png_uint_32, int)); 1027*593dc095SDavid du Colombier #endif 1028*593dc095SDavid du Colombier 1029*593dc095SDavid du Colombier #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ 1030*593dc095SDavid du Colombier defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ 1031*593dc095SDavid du Colombier defined(PNG_LEGACY_SUPPORTED) 1032*593dc095SDavid du Colombier typedef void (PNGAPI *png_user_transform_ptr) PNGARG((png_structp, 1033*593dc095SDavid du Colombier png_row_infop, png_bytep)); 1034*593dc095SDavid du Colombier #endif 1035*593dc095SDavid du Colombier 1036*593dc095SDavid du Colombier #if defined(PNG_USER_CHUNKS_SUPPORTED) 1037*593dc095SDavid du Colombier typedef int (PNGAPI *png_user_chunk_ptr) PNGARG((png_structp, png_unknown_chunkp)); 1038*593dc095SDavid du Colombier #endif 1039*593dc095SDavid du Colombier #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) 1040*593dc095SDavid du Colombier typedef void (PNGAPI *png_unknown_chunk_ptr) PNGARG((png_structp)); 1041*593dc095SDavid du Colombier #endif 1042*593dc095SDavid du Colombier 1043*593dc095SDavid du Colombier /* Transform masks for the high-level interface */ 1044*593dc095SDavid du Colombier #define PNG_TRANSFORM_IDENTITY 0x0000 /* read and write */ 1045*593dc095SDavid du Colombier #define PNG_TRANSFORM_STRIP_16 0x0001 /* read only */ 1046*593dc095SDavid du Colombier #define PNG_TRANSFORM_STRIP_ALPHA 0x0002 /* read only */ 1047*593dc095SDavid du Colombier #define PNG_TRANSFORM_PACKING 0x0004 /* read and write */ 1048*593dc095SDavid du Colombier #define PNG_TRANSFORM_PACKSWAP 0x0008 /* read and write */ 1049*593dc095SDavid du Colombier #define PNG_TRANSFORM_EXPAND 0x0010 /* read only */ 1050*593dc095SDavid du Colombier #define PNG_TRANSFORM_INVERT_MONO 0x0020 /* read and write */ 1051*593dc095SDavid du Colombier #define PNG_TRANSFORM_SHIFT 0x0040 /* read and write */ 1052*593dc095SDavid du Colombier #define PNG_TRANSFORM_BGR 0x0080 /* read and write */ 1053*593dc095SDavid du Colombier #define PNG_TRANSFORM_SWAP_ALPHA 0x0100 /* read and write */ 1054*593dc095SDavid du Colombier #define PNG_TRANSFORM_SWAP_ENDIAN 0x0200 /* read and write */ 1055*593dc095SDavid du Colombier #define PNG_TRANSFORM_INVERT_ALPHA 0x0400 /* read and write */ 1056*593dc095SDavid du Colombier #define PNG_TRANSFORM_STRIP_FILLER 0x0800 /* WRITE only */ 1057*593dc095SDavid du Colombier 1058*593dc095SDavid du Colombier /* Flags for MNG supported features */ 1059*593dc095SDavid du Colombier #define PNG_FLAG_MNG_EMPTY_PLTE 0x01 1060*593dc095SDavid du Colombier #define PNG_FLAG_MNG_FILTER_64 0x04 1061*593dc095SDavid du Colombier #define PNG_ALL_MNG_FEATURES 0x05 1062*593dc095SDavid du Colombier 1063*593dc095SDavid du Colombier typedef png_voidp (*png_malloc_ptr) PNGARG((png_structp, png_size_t)); 1064*593dc095SDavid du Colombier typedef void (*png_free_ptr) PNGARG((png_structp, png_voidp)); 10657dd7cddfSDavid du Colombier 10667dd7cddfSDavid du Colombier /* The structure that holds the information to read and write PNG files. 10677dd7cddfSDavid du Colombier * The only people who need to care about what is inside of this are the 10687dd7cddfSDavid du Colombier * people who will be modifying the library for their own special needs. 10697dd7cddfSDavid du Colombier * It should NOT be accessed directly by an application, except to store 10707dd7cddfSDavid du Colombier * the jmp_buf. 10717dd7cddfSDavid du Colombier */ 10727dd7cddfSDavid du Colombier 10737dd7cddfSDavid du Colombier struct png_struct_def 10747dd7cddfSDavid du Colombier { 1075*593dc095SDavid du Colombier #ifdef PNG_SETJMP_SUPPORTED 10767dd7cddfSDavid du Colombier jmp_buf jmpbuf; /* used in png_error */ 1077*593dc095SDavid du Colombier #endif 10787dd7cddfSDavid du Colombier png_error_ptr error_fn; /* function for printing errors and aborting */ 10797dd7cddfSDavid du Colombier png_error_ptr warning_fn; /* function for printing warnings */ 10807dd7cddfSDavid du Colombier png_voidp error_ptr; /* user supplied struct for error functions */ 10817dd7cddfSDavid du Colombier png_rw_ptr write_data_fn; /* function for writing output data */ 10827dd7cddfSDavid du Colombier png_rw_ptr read_data_fn; /* function for reading input data */ 10837dd7cddfSDavid du Colombier png_voidp io_ptr; /* ptr to application struct for I/O functions */ 10847dd7cddfSDavid du Colombier 1085*593dc095SDavid du Colombier #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) 1086*593dc095SDavid du Colombier png_user_transform_ptr read_user_transform_fn; /* user read transform */ 1087*593dc095SDavid du Colombier #endif 1088*593dc095SDavid du Colombier 1089*593dc095SDavid du Colombier #if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) 1090*593dc095SDavid du Colombier png_user_transform_ptr write_user_transform_fn; /* user write transform */ 1091*593dc095SDavid du Colombier #endif 1092*593dc095SDavid du Colombier 1093*593dc095SDavid du Colombier /* These were added in libpng-1.0.2 */ 1094*593dc095SDavid du Colombier #if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED) 1095*593dc095SDavid du Colombier #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ 1096*593dc095SDavid du Colombier defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) 1097*593dc095SDavid du Colombier png_voidp user_transform_ptr; /* user supplied struct for user transform */ 1098*593dc095SDavid du Colombier png_byte user_transform_depth; /* bit depth of user transformed pixels */ 1099*593dc095SDavid du Colombier png_byte user_transform_channels; /* channels in user transformed pixels */ 1100*593dc095SDavid du Colombier #endif 1101*593dc095SDavid du Colombier #endif 1102*593dc095SDavid du Colombier 1103*593dc095SDavid du Colombier png_uint_32 mode; /* tells us where we are in the PNG file */ 11047dd7cddfSDavid du Colombier png_uint_32 flags; /* flags indicating various things to libpng */ 11057dd7cddfSDavid du Colombier png_uint_32 transformations; /* which transformations to perform */ 11067dd7cddfSDavid du Colombier 11077dd7cddfSDavid du Colombier z_stream zstream; /* pointer to decompression structure (below) */ 11087dd7cddfSDavid du Colombier png_bytep zbuf; /* buffer for zlib */ 11097dd7cddfSDavid du Colombier png_size_t zbuf_size; /* size of zbuf */ 11107dd7cddfSDavid du Colombier int zlib_level; /* holds zlib compression level */ 11117dd7cddfSDavid du Colombier int zlib_method; /* holds zlib compression method */ 11127dd7cddfSDavid du Colombier int zlib_window_bits; /* holds zlib compression window bits */ 11137dd7cddfSDavid du Colombier int zlib_mem_level; /* holds zlib compression memory level */ 11147dd7cddfSDavid du Colombier int zlib_strategy; /* holds zlib compression strategy */ 11157dd7cddfSDavid du Colombier 11167dd7cddfSDavid du Colombier png_uint_32 width; /* width of image in pixels */ 11177dd7cddfSDavid du Colombier png_uint_32 height; /* height of image in pixels */ 11187dd7cddfSDavid du Colombier png_uint_32 num_rows; /* number of rows in current pass */ 11197dd7cddfSDavid du Colombier png_uint_32 usr_width; /* width of row at start of write */ 1120*593dc095SDavid du Colombier png_uint_32 rowbytes; /* size of row in bytes */ 1121*593dc095SDavid du Colombier png_uint_32 irowbytes; /* size of current interlaced row in bytes */ 11227dd7cddfSDavid du Colombier png_uint_32 iwidth; /* width of current interlaced row in pixels */ 11237dd7cddfSDavid du Colombier png_uint_32 row_number; /* current row in interlace pass */ 11247dd7cddfSDavid du Colombier png_bytep prev_row; /* buffer to save previous (unfiltered) row */ 11257dd7cddfSDavid du Colombier png_bytep row_buf; /* buffer to save current (unfiltered) row */ 11267dd7cddfSDavid du Colombier png_bytep sub_row; /* buffer to save "sub" row when filtering */ 11277dd7cddfSDavid du Colombier png_bytep up_row; /* buffer to save "up" row when filtering */ 11287dd7cddfSDavid du Colombier png_bytep avg_row; /* buffer to save "avg" row when filtering */ 11297dd7cddfSDavid du Colombier png_bytep paeth_row; /* buffer to save "Paeth" row when filtering */ 11307dd7cddfSDavid du Colombier png_row_info row_info; /* used for transformation routines */ 11317dd7cddfSDavid du Colombier 11327dd7cddfSDavid du Colombier png_uint_32 idat_size; /* current IDAT size for read */ 11337dd7cddfSDavid du Colombier png_uint_32 crc; /* current chunk CRC value */ 11347dd7cddfSDavid du Colombier png_colorp palette; /* palette from the input file */ 11357dd7cddfSDavid du Colombier png_uint_16 num_palette; /* number of color entries in palette */ 11367dd7cddfSDavid du Colombier png_uint_16 num_trans; /* number of transparency values */ 11377dd7cddfSDavid du Colombier png_byte chunk_name[5]; /* null-terminated name of current chunk */ 11387dd7cddfSDavid du Colombier png_byte compression; /* file compression type (always 0) */ 11397dd7cddfSDavid du Colombier png_byte filter; /* file filter type (always 0) */ 11407dd7cddfSDavid du Colombier png_byte interlaced; /* PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */ 11417dd7cddfSDavid du Colombier png_byte pass; /* current interlace pass (0 - 6) */ 11427dd7cddfSDavid du Colombier png_byte do_filter; /* row filter flags (see PNG_FILTER_ below ) */ 11437dd7cddfSDavid du Colombier png_byte color_type; /* color type of file */ 11447dd7cddfSDavid du Colombier png_byte bit_depth; /* bit depth of file */ 11457dd7cddfSDavid du Colombier png_byte usr_bit_depth; /* bit depth of users row */ 11467dd7cddfSDavid du Colombier png_byte pixel_depth; /* number of bits per pixel */ 11477dd7cddfSDavid du Colombier png_byte channels; /* number of channels in file */ 11487dd7cddfSDavid du Colombier png_byte usr_channels; /* channels at start of write */ 11497dd7cddfSDavid du Colombier png_byte sig_bytes; /* magic bytes read/written from start of file */ 11507dd7cddfSDavid du Colombier 11517dd7cddfSDavid du Colombier #if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) 1152*593dc095SDavid du Colombier #ifdef PNG_LEGACY_SUPPORTED 1153*593dc095SDavid du Colombier png_byte filler; /* filler byte for pixel expansion */ 1154*593dc095SDavid du Colombier #else 1155*593dc095SDavid du Colombier png_uint_16 filler; /* filler bytes for pixel expansion */ 1156*593dc095SDavid du Colombier #endif 1157*593dc095SDavid du Colombier #endif 1158*593dc095SDavid du Colombier 1159*593dc095SDavid du Colombier #if defined(PNG_bKGD_SUPPORTED) 11607dd7cddfSDavid du Colombier png_byte background_gamma_type; 1161*593dc095SDavid du Colombier # ifdef PNG_FLOATING_POINT_SUPPORTED 11627dd7cddfSDavid du Colombier float background_gamma; 1163*593dc095SDavid du Colombier # endif 11647dd7cddfSDavid du Colombier png_color_16 background; /* background color in screen gamma space */ 11657dd7cddfSDavid du Colombier #if defined(PNG_READ_GAMMA_SUPPORTED) 11667dd7cddfSDavid du Colombier png_color_16 background_1; /* background normalized to gamma 1.0 */ 1167*593dc095SDavid du Colombier #endif 1168*593dc095SDavid du Colombier #endif /* PNG_bKGD_SUPPORTED */ 1169*593dc095SDavid du Colombier 11707dd7cddfSDavid du Colombier #if defined(PNG_WRITE_FLUSH_SUPPORTED) 11717dd7cddfSDavid du Colombier png_flush_ptr output_flush_fn;/* Function for flushing output */ 11727dd7cddfSDavid du Colombier png_uint_32 flush_dist; /* how many rows apart to flush, 0 - no flush */ 11737dd7cddfSDavid du Colombier png_uint_32 flush_rows; /* number of rows written since last flush */ 1174*593dc095SDavid du Colombier #endif 1175*593dc095SDavid du Colombier 11767dd7cddfSDavid du Colombier #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) 1177*593dc095SDavid du Colombier int gamma_shift; /* number of "insignificant" bits 16-bit gamma */ 1178*593dc095SDavid du Colombier #ifdef PNG_FLOATING_POINT_SUPPORTED 1179*593dc095SDavid du Colombier float gamma; /* file gamma value */ 1180*593dc095SDavid du Colombier float screen_gamma; /* screen gamma value (display_exponent) */ 1181*593dc095SDavid du Colombier #endif 1182*593dc095SDavid du Colombier #endif 1183*593dc095SDavid du Colombier 1184*593dc095SDavid du Colombier #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) 1185*593dc095SDavid du Colombier png_bytep gamma_table; /* gamma table for 8-bit depth files */ 11867dd7cddfSDavid du Colombier png_bytep gamma_from_1; /* converts from 1.0 to screen */ 11877dd7cddfSDavid du Colombier png_bytep gamma_to_1; /* converts from file to 1.0 */ 1188*593dc095SDavid du Colombier png_uint_16pp gamma_16_table; /* gamma table for 16-bit depth files */ 11897dd7cddfSDavid du Colombier png_uint_16pp gamma_16_from_1; /* converts from 1.0 to screen */ 11907dd7cddfSDavid du Colombier png_uint_16pp gamma_16_to_1; /* converts from file to 1.0 */ 1191*593dc095SDavid du Colombier #endif 1192*593dc095SDavid du Colombier 1193*593dc095SDavid du Colombier #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_sBIT_SUPPORTED) 11947dd7cddfSDavid du Colombier png_color_8 sig_bit; /* significant bits in each available channel */ 1195*593dc095SDavid du Colombier #endif 1196*593dc095SDavid du Colombier 11977dd7cddfSDavid du Colombier #if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) 11987dd7cddfSDavid du Colombier png_color_8 shift; /* shift for significant bit tranformation */ 1199*593dc095SDavid du Colombier #endif 1200*593dc095SDavid du Colombier 1201*593dc095SDavid du Colombier #if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) \ 1202*593dc095SDavid du Colombier || defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) 12037dd7cddfSDavid du Colombier png_bytep trans; /* transparency values for paletted files */ 12047dd7cddfSDavid du Colombier png_color_16 trans_values; /* transparency values for non-paletted files */ 1205*593dc095SDavid du Colombier #endif 1206*593dc095SDavid du Colombier 1207*593dc095SDavid du Colombier png_read_status_ptr read_row_fn; /* called after each row is decoded */ 1208*593dc095SDavid du Colombier png_write_status_ptr write_row_fn; /* called after each row is encoded */ 12097dd7cddfSDavid du Colombier #ifdef PNG_PROGRESSIVE_READ_SUPPORTED 12107dd7cddfSDavid du Colombier png_progressive_info_ptr info_fn; /* called after header data fully read */ 1211*593dc095SDavid du Colombier png_progressive_row_ptr row_fn; /* called after each prog. row is decoded */ 12127dd7cddfSDavid du Colombier png_progressive_end_ptr end_fn; /* called after image is complete */ 12137dd7cddfSDavid du Colombier png_bytep save_buffer_ptr; /* current location in save_buffer */ 12147dd7cddfSDavid du Colombier png_bytep save_buffer; /* buffer for previously read data */ 12157dd7cddfSDavid du Colombier png_bytep current_buffer_ptr; /* current location in current_buffer */ 12167dd7cddfSDavid du Colombier png_bytep current_buffer; /* buffer for recently used data */ 12177dd7cddfSDavid du Colombier png_uint_32 push_length; /* size of current input chunk */ 12187dd7cddfSDavid du Colombier png_uint_32 skip_length; /* bytes to skip in input data */ 12197dd7cddfSDavid du Colombier png_size_t save_buffer_size; /* amount of data now in save_buffer */ 12207dd7cddfSDavid du Colombier png_size_t save_buffer_max; /* total size of save_buffer */ 12217dd7cddfSDavid du Colombier png_size_t buffer_size; /* total amount of available input data */ 12227dd7cddfSDavid du Colombier png_size_t current_buffer_size; /* amount of data now in current_buffer */ 12237dd7cddfSDavid du Colombier int process_mode; /* what push library is currently doing */ 12247dd7cddfSDavid du Colombier int cur_palette; /* current push library palette index */ 1225*593dc095SDavid du Colombier 1226*593dc095SDavid du Colombier # if defined(PNG_TEXT_SUPPORTED) 12277dd7cddfSDavid du Colombier png_size_t current_text_size; /* current size of text input data */ 12287dd7cddfSDavid du Colombier png_size_t current_text_left; /* how much text left to read in input */ 12297dd7cddfSDavid du Colombier png_charp current_text; /* current text chunk buffer */ 12307dd7cddfSDavid du Colombier png_charp current_text_ptr; /* current location in current_text */ 1231*593dc095SDavid du Colombier # endif /* PNG_PROGRESSIVE_READ_SUPPORTED && PNG_TEXT_SUPPORTED */ 1232*593dc095SDavid du Colombier 12337dd7cddfSDavid du Colombier #endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ 1234*593dc095SDavid du Colombier 12357dd7cddfSDavid du Colombier #if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__) 12367dd7cddfSDavid du Colombier /* for the Borland special 64K segment handler */ 12377dd7cddfSDavid du Colombier png_bytepp offset_table_ptr; 12387dd7cddfSDavid du Colombier png_bytep offset_table; 12397dd7cddfSDavid du Colombier png_uint_16 offset_table_number; 12407dd7cddfSDavid du Colombier png_uint_16 offset_table_count; 12417dd7cddfSDavid du Colombier png_uint_16 offset_table_count_free; 1242*593dc095SDavid du Colombier #endif 1243*593dc095SDavid du Colombier 12447dd7cddfSDavid du Colombier #if defined(PNG_READ_DITHER_SUPPORTED) 12457dd7cddfSDavid du Colombier png_bytep palette_lookup; /* lookup table for dithering */ 12467dd7cddfSDavid du Colombier png_bytep dither_index; /* index translation for palette files */ 1247*593dc095SDavid du Colombier #endif 1248*593dc095SDavid du Colombier 1249*593dc095SDavid du Colombier #if defined(PNG_READ_DITHER_SUPPORTED) || defined(PNG_hIST_SUPPORTED) 12507dd7cddfSDavid du Colombier png_uint_16p hist; /* histogram */ 12517dd7cddfSDavid du Colombier #endif 1252*593dc095SDavid du Colombier 12537dd7cddfSDavid du Colombier #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) 12547dd7cddfSDavid du Colombier png_byte heuristic_method; /* heuristic for row filter selection */ 12557dd7cddfSDavid du Colombier png_byte num_prev_filters; /* number of weights for previous rows */ 12567dd7cddfSDavid du Colombier png_bytep prev_filters; /* filter type(s) of previous row(s) */ 12577dd7cddfSDavid du Colombier png_uint_16p filter_weights; /* weight(s) for previous line(s) */ 12587dd7cddfSDavid du Colombier png_uint_16p inv_filter_weights; /* 1/weight(s) for previous line(s) */ 12597dd7cddfSDavid du Colombier png_uint_16p filter_costs; /* relative filter calculation cost */ 12607dd7cddfSDavid du Colombier png_uint_16p inv_filter_costs; /* 1/relative filter calculation cost */ 1261*593dc095SDavid du Colombier #endif 1262*593dc095SDavid du Colombier 12637dd7cddfSDavid du Colombier #if defined(PNG_TIME_RFC1123_SUPPORTED) 12647dd7cddfSDavid du Colombier png_charp time_buffer; /* String to hold RFC 1123 time text */ 1265*593dc095SDavid du Colombier #endif 1266*593dc095SDavid du Colombier 1267*593dc095SDavid du Colombier /* New members added in libpng-1.0.6 */ 1268*593dc095SDavid du Colombier 1269*593dc095SDavid du Colombier #ifdef PNG_FREE_ME_SUPPORTED 1270*593dc095SDavid du Colombier png_uint_32 free_me; /* flags items libpng is responsible for freeing */ 1271*593dc095SDavid du Colombier #endif 1272*593dc095SDavid du Colombier 1273*593dc095SDavid du Colombier #if defined(PNG_USER_CHUNKS_SUPPORTED) 1274*593dc095SDavid du Colombier png_voidp user_chunk_ptr; 1275*593dc095SDavid du Colombier png_user_chunk_ptr read_user_chunk_fn; /* user read chunk handler */ 1276*593dc095SDavid du Colombier #endif 1277*593dc095SDavid du Colombier 1278*593dc095SDavid du Colombier #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) 1279*593dc095SDavid du Colombier int num_chunk_list; 1280*593dc095SDavid du Colombier png_bytep chunk_list; 1281*593dc095SDavid du Colombier #endif 1282*593dc095SDavid du Colombier 1283*593dc095SDavid du Colombier /* New members added in libpng-1.0.3 */ 1284*593dc095SDavid du Colombier #if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) 1285*593dc095SDavid du Colombier png_byte rgb_to_gray_status; 1286*593dc095SDavid du Colombier /* These were changed from png_byte in libpng-1.0.6 */ 1287*593dc095SDavid du Colombier png_uint_16 rgb_to_gray_red_coeff; 1288*593dc095SDavid du Colombier png_uint_16 rgb_to_gray_green_coeff; 1289*593dc095SDavid du Colombier png_uint_16 rgb_to_gray_blue_coeff; 1290*593dc095SDavid du Colombier #endif 1291*593dc095SDavid du Colombier 1292*593dc095SDavid du Colombier /* New member added in libpng-1.0.4 (renamed in 1.0.9) */ 1293*593dc095SDavid du Colombier #if defined(PNG_MNG_FEATURES_SUPPORTED) || \ 1294*593dc095SDavid du Colombier defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \ 1295*593dc095SDavid du Colombier defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED) 1296*593dc095SDavid du Colombier /* changed from png_byte to png_uint_32 at version 1.2.0 */ 1297*593dc095SDavid du Colombier #ifdef PNG_1_0_X 1298*593dc095SDavid du Colombier png_byte mng_features_permitted; 1299*593dc095SDavid du Colombier #else 1300*593dc095SDavid du Colombier png_uint_32 mng_features_permitted; 1301*593dc095SDavid du Colombier #endif /* PNG_1_0_X */ 1302*593dc095SDavid du Colombier #endif 1303*593dc095SDavid du Colombier 1304*593dc095SDavid du Colombier /* New member added in libpng-1.0.7 */ 1305*593dc095SDavid du Colombier #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) 1306*593dc095SDavid du Colombier png_fixed_point int_gamma; 1307*593dc095SDavid du Colombier #endif 1308*593dc095SDavid du Colombier 1309*593dc095SDavid du Colombier /* New member added in libpng-1.0.9, ifdef'ed out in 1.0.12, enabled in 1.2.0 */ 1310*593dc095SDavid du Colombier #if defined(PNG_MNG_FEATURES_SUPPORTED) 1311*593dc095SDavid du Colombier png_byte filter_type; 1312*593dc095SDavid du Colombier #endif 1313*593dc095SDavid du Colombier 1314*593dc095SDavid du Colombier #if defined(PNG_1_0_X) || (defined(PNG_DEBUG) && defined(PNG_USE_PNGGCCRD)) 1315*593dc095SDavid du Colombier /* New member added in libpng-1.0.10, ifdef'ed out in 1.2.0 */ 1316*593dc095SDavid du Colombier png_uint_32 row_buf_size; 1317*593dc095SDavid du Colombier #endif 1318*593dc095SDavid du Colombier 1319*593dc095SDavid du Colombier /* New members added in libpng-1.2.0 */ 1320*593dc095SDavid du Colombier #if !defined(PNG_1_0_X) && defined(PNG_ASSEMBLER_CODE_SUPPORTED) 1321*593dc095SDavid du Colombier png_byte mmx_bitdepth_threshold; 1322*593dc095SDavid du Colombier png_uint_32 mmx_rowbytes_threshold; 1323*593dc095SDavid du Colombier png_uint_32 asm_flags; 1324*593dc095SDavid du Colombier #endif 1325*593dc095SDavid du Colombier 1326*593dc095SDavid du Colombier /* New members added in libpng-1.0.2 but first enabled by default in 1.2.0 */ 1327*593dc095SDavid du Colombier #ifdef PNG_USER_MEM_SUPPORTED 1328*593dc095SDavid du Colombier png_voidp mem_ptr; /* user supplied struct for mem functions */ 1329*593dc095SDavid du Colombier png_malloc_ptr malloc_fn; /* function for allocating memory */ 1330*593dc095SDavid du Colombier png_free_ptr free_fn; /* function for freeing memory */ 1331*593dc095SDavid du Colombier #endif 1332*593dc095SDavid du Colombier 1333*593dc095SDavid du Colombier /* New member added in libpng-1.0.13 and 1.2.0 */ 1334*593dc095SDavid du Colombier png_bytep big_row_buf; /* buffer to save current (unfiltered) row */ 1335*593dc095SDavid du Colombier 1336*593dc095SDavid du Colombier #if defined(PNG_READ_DITHER_SUPPORTED) 1337*593dc095SDavid du Colombier /* The following three members were added at version 1.0.14 and 1.2.4 */ 1338*593dc095SDavid du Colombier png_bytep dither_sort; /* working sort array */ 1339*593dc095SDavid du Colombier png_bytep index_to_palette; /* where the original index currently is */ 1340*593dc095SDavid du Colombier /* in the palette */ 1341*593dc095SDavid du Colombier png_bytep palette_to_index; /* which original index points to this */ 1342*593dc095SDavid du Colombier /* palette color */ 1343*593dc095SDavid du Colombier #endif 1344*593dc095SDavid du Colombier 1345*593dc095SDavid du Colombier /* New members added in libpng-1.0.16 and 1.2.6 */ 1346*593dc095SDavid du Colombier png_byte compression_type; 1347*593dc095SDavid du Colombier 1348*593dc095SDavid du Colombier #ifdef PNG_SET_USER_LIMITS_SUPPORTED 1349*593dc095SDavid du Colombier png_uint_32 user_width_max; 1350*593dc095SDavid du Colombier png_uint_32 user_height_max; 1351*593dc095SDavid du Colombier #endif 1352*593dc095SDavid du Colombier 13537dd7cddfSDavid du Colombier }; 13547dd7cddfSDavid du Colombier 1355*593dc095SDavid du Colombier 1356*593dc095SDavid du Colombier /* This triggers a compiler error in png.c, if png.c and png.h 1357*593dc095SDavid du Colombier * do not agree upon the version number. 1358*593dc095SDavid du Colombier */ 1359*593dc095SDavid du Colombier typedef png_structp version_1_2_8; 1360*593dc095SDavid du Colombier 13617dd7cddfSDavid du Colombier typedef png_struct FAR * FAR * png_structpp; 13627dd7cddfSDavid du Colombier 13637dd7cddfSDavid du Colombier /* Here are the function definitions most commonly used. This is not 13647dd7cddfSDavid du Colombier * the place to find out how to use libpng. See libpng.txt for the 13657dd7cddfSDavid du Colombier * full explanation, see example.c for the summary. This just provides 1366*593dc095SDavid du Colombier * a simple one line description of the use of each function. 13677dd7cddfSDavid du Colombier */ 13687dd7cddfSDavid du Colombier 1369*593dc095SDavid du Colombier /* Returns the version number of the library */ 1370*593dc095SDavid du Colombier extern PNG_EXPORT(png_uint_32,png_access_version_number) PNGARG((void)); 1371*593dc095SDavid du Colombier 13727dd7cddfSDavid du Colombier /* Tell lib we have already handled the first <num_bytes> magic bytes. 13737dd7cddfSDavid du Colombier * Handling more than 8 bytes from the beginning of the file is an error. 13747dd7cddfSDavid du Colombier */ 13757dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_sig_bytes) PNGARG((png_structp png_ptr, 13767dd7cddfSDavid du Colombier int num_bytes)); 13777dd7cddfSDavid du Colombier 13787dd7cddfSDavid du Colombier /* Check sig[start] through sig[start + num_to_check - 1] to see if it's a 13797dd7cddfSDavid du Colombier * PNG file. Returns zero if the supplied bytes match the 8-byte PNG 13807dd7cddfSDavid du Colombier * signature, and non-zero otherwise. Having num_to_check == 0 or 13817dd7cddfSDavid du Colombier * start > 7 will always fail (ie return non-zero). 13827dd7cddfSDavid du Colombier */ 13837dd7cddfSDavid du Colombier extern PNG_EXPORT(int,png_sig_cmp) PNGARG((png_bytep sig, png_size_t start, 13847dd7cddfSDavid du Colombier png_size_t num_to_check)); 13857dd7cddfSDavid du Colombier 13867dd7cddfSDavid du Colombier /* Simple signature checking function. This is the same as calling 13877dd7cddfSDavid du Colombier * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n). 13887dd7cddfSDavid du Colombier */ 13897dd7cddfSDavid du Colombier extern PNG_EXPORT(int,png_check_sig) PNGARG((png_bytep sig, int num)); 13907dd7cddfSDavid du Colombier 13917dd7cddfSDavid du Colombier /* Allocate and initialize png_ptr struct for reading, and any other memory. */ 13927dd7cddfSDavid du Colombier extern PNG_EXPORT(png_structp,png_create_read_struct) 1393*593dc095SDavid du Colombier PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, 13947dd7cddfSDavid du Colombier png_error_ptr error_fn, png_error_ptr warn_fn)); 13957dd7cddfSDavid du Colombier 1396*593dc095SDavid du Colombier /* Allocate and initialize png_ptr struct for writing, and any other memory */ 13977dd7cddfSDavid du Colombier extern PNG_EXPORT(png_structp,png_create_write_struct) 1398*593dc095SDavid du Colombier PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, 13997dd7cddfSDavid du Colombier png_error_ptr error_fn, png_error_ptr warn_fn)); 14007dd7cddfSDavid du Colombier 1401*593dc095SDavid du Colombier #ifdef PNG_WRITE_SUPPORTED 1402*593dc095SDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_compression_buffer_size) 1403*593dc095SDavid du Colombier PNGARG((png_structp png_ptr)); 1404*593dc095SDavid du Colombier #endif 1405*593dc095SDavid du Colombier 1406*593dc095SDavid du Colombier #ifdef PNG_WRITE_SUPPORTED 1407*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_set_compression_buffer_size) 1408*593dc095SDavid du Colombier PNGARG((png_structp png_ptr, png_uint_32 size)); 1409*593dc095SDavid du Colombier #endif 1410*593dc095SDavid du Colombier 1411*593dc095SDavid du Colombier /* Reset the compression stream */ 1412*593dc095SDavid du Colombier extern PNG_EXPORT(int,png_reset_zstream) PNGARG((png_structp png_ptr)); 1413*593dc095SDavid du Colombier 1414*593dc095SDavid du Colombier /* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */ 1415*593dc095SDavid du Colombier #ifdef PNG_USER_MEM_SUPPORTED 1416*593dc095SDavid du Colombier extern PNG_EXPORT(png_structp,png_create_read_struct_2) 1417*593dc095SDavid du Colombier PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, 1418*593dc095SDavid du Colombier png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr, 1419*593dc095SDavid du Colombier png_malloc_ptr malloc_fn, png_free_ptr free_fn)); 1420*593dc095SDavid du Colombier extern PNG_EXPORT(png_structp,png_create_write_struct_2) 1421*593dc095SDavid du Colombier PNGARG((png_const_charp user_png_ver, png_voidp error_ptr, 1422*593dc095SDavid du Colombier png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr, 1423*593dc095SDavid du Colombier png_malloc_ptr malloc_fn, png_free_ptr free_fn)); 1424*593dc095SDavid du Colombier #endif 1425*593dc095SDavid du Colombier 1426*593dc095SDavid du Colombier /* Write a PNG chunk - size, type, (optional) data, CRC. */ 1427*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_write_chunk) PNGARG((png_structp png_ptr, 1428*593dc095SDavid du Colombier png_bytep chunk_name, png_bytep data, png_size_t length)); 1429*593dc095SDavid du Colombier 1430*593dc095SDavid du Colombier /* Write the start of a PNG chunk - length and chunk name. */ 1431*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_write_chunk_start) PNGARG((png_structp png_ptr, 1432*593dc095SDavid du Colombier png_bytep chunk_name, png_uint_32 length)); 1433*593dc095SDavid du Colombier 1434*593dc095SDavid du Colombier /* Write the data of a PNG chunk started with png_write_chunk_start(). */ 1435*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_write_chunk_data) PNGARG((png_structp png_ptr, 1436*593dc095SDavid du Colombier png_bytep data, png_size_t length)); 1437*593dc095SDavid du Colombier 1438*593dc095SDavid du Colombier /* Finish a chunk started with png_write_chunk_start() (includes CRC). */ 1439*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_write_chunk_end) PNGARG((png_structp png_ptr)); 1440*593dc095SDavid du Colombier 14417dd7cddfSDavid du Colombier /* Allocate and initialize the info structure */ 14427dd7cddfSDavid du Colombier extern PNG_EXPORT(png_infop,png_create_info_struct) 14437dd7cddfSDavid du Colombier PNGARG((png_structp png_ptr)); 14447dd7cddfSDavid du Colombier 1445*593dc095SDavid du Colombier /* Initialize the info structure (old interface - DEPRECATED) */ 1446*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_info_init) PNGARG((png_infop info_ptr)); 1447*593dc095SDavid du Colombier #undef png_info_init 1448*593dc095SDavid du Colombier #define png_info_init(info_ptr) png_info_init_3(&info_ptr,\ 1449*593dc095SDavid du Colombier png_sizeof(png_info)); 1450*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_info_init_3) PNGARG((png_infopp info_ptr, 1451*593dc095SDavid du Colombier png_size_t png_info_struct_size)); 14527dd7cddfSDavid du Colombier 14537dd7cddfSDavid du Colombier /* Writes all the PNG information before the image. */ 1454*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_write_info_before_PLTE) PNGARG((png_structp png_ptr, 1455*593dc095SDavid du Colombier png_infop info_ptr)); 14567dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_write_info) PNGARG((png_structp png_ptr, 14577dd7cddfSDavid du Colombier png_infop info_ptr)); 14587dd7cddfSDavid du Colombier 1459*593dc095SDavid du Colombier #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED 14607dd7cddfSDavid du Colombier /* read the information before the actual image data. */ 14617dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_read_info) PNGARG((png_structp png_ptr, 14627dd7cddfSDavid du Colombier png_infop info_ptr)); 1463*593dc095SDavid du Colombier #endif 14647dd7cddfSDavid du Colombier 14657dd7cddfSDavid du Colombier #if defined(PNG_TIME_RFC1123_SUPPORTED) 14667dd7cddfSDavid du Colombier extern PNG_EXPORT(png_charp,png_convert_to_rfc1123) 14677dd7cddfSDavid du Colombier PNGARG((png_structp png_ptr, png_timep ptime)); 1468*593dc095SDavid du Colombier #endif 14697dd7cddfSDavid du Colombier 1470*593dc095SDavid du Colombier #if !defined(_WIN32_WCE) 1471*593dc095SDavid du Colombier /* "time.h" functions are not supported on WindowsCE */ 14727dd7cddfSDavid du Colombier #if defined(PNG_WRITE_tIME_SUPPORTED) 14737dd7cddfSDavid du Colombier /* convert from a struct tm to png_time */ 14747dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_convert_from_struct_tm) PNGARG((png_timep ptime, 14757dd7cddfSDavid du Colombier struct tm FAR * ttime)); 14767dd7cddfSDavid du Colombier 14777dd7cddfSDavid du Colombier /* convert from time_t to png_time. Uses gmtime() */ 14787dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_convert_from_time_t) PNGARG((png_timep ptime, 14797dd7cddfSDavid du Colombier time_t ttime)); 14807dd7cddfSDavid du Colombier #endif /* PNG_WRITE_tIME_SUPPORTED */ 1481*593dc095SDavid du Colombier #endif /* _WIN32_WCE */ 14827dd7cddfSDavid du Colombier 14837dd7cddfSDavid du Colombier #if defined(PNG_READ_EXPAND_SUPPORTED) 1484*593dc095SDavid du Colombier /* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */ 14857dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_expand) PNGARG((png_structp png_ptr)); 1486*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_set_gray_1_2_4_to_8) PNGARG((png_structp png_ptr)); 1487*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_set_palette_to_rgb) PNGARG((png_structp png_ptr)); 1488*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_set_tRNS_to_alpha) PNGARG((png_structp png_ptr)); 1489*593dc095SDavid du Colombier #endif 14907dd7cddfSDavid du Colombier 14917dd7cddfSDavid du Colombier #if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) 14927dd7cddfSDavid du Colombier /* Use blue, green, red order for pixels. */ 14937dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_bgr) PNGARG((png_structp png_ptr)); 1494*593dc095SDavid du Colombier #endif 14957dd7cddfSDavid du Colombier 14967dd7cddfSDavid du Colombier #if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) 1497*593dc095SDavid du Colombier /* Expand the grayscale to 24-bit RGB if necessary. */ 14987dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_gray_to_rgb) PNGARG((png_structp png_ptr)); 1499*593dc095SDavid du Colombier #endif 15007dd7cddfSDavid du Colombier 15017dd7cddfSDavid du Colombier #if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) 1502*593dc095SDavid du Colombier /* Reduce RGB to grayscale. */ 1503*593dc095SDavid du Colombier #ifdef PNG_FLOATING_POINT_SUPPORTED 1504*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_set_rgb_to_gray) PNGARG((png_structp png_ptr, 1505*593dc095SDavid du Colombier int error_action, double red, double green )); 1506*593dc095SDavid du Colombier #endif 1507*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_set_rgb_to_gray_fixed) PNGARG((png_structp png_ptr, 1508*593dc095SDavid du Colombier int error_action, png_fixed_point red, png_fixed_point green )); 1509*593dc095SDavid du Colombier extern PNG_EXPORT(png_byte,png_get_rgb_to_gray_status) PNGARG((png_structp 1510*593dc095SDavid du Colombier png_ptr)); 1511*593dc095SDavid du Colombier #endif 15127dd7cddfSDavid du Colombier 15137dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_build_grayscale_palette) PNGARG((int bit_depth, 15147dd7cddfSDavid du Colombier png_colorp palette)); 15157dd7cddfSDavid du Colombier 15167dd7cddfSDavid du Colombier #if defined(PNG_READ_STRIP_ALPHA_SUPPORTED) 15177dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_strip_alpha) PNGARG((png_structp png_ptr)); 1518*593dc095SDavid du Colombier #endif 15197dd7cddfSDavid du Colombier 15207dd7cddfSDavid du Colombier #if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \ 15217dd7cddfSDavid du Colombier defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) 15227dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_swap_alpha) PNGARG((png_structp png_ptr)); 1523*593dc095SDavid du Colombier #endif 15247dd7cddfSDavid du Colombier 15257dd7cddfSDavid du Colombier #if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \ 15267dd7cddfSDavid du Colombier defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) 15277dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_invert_alpha) PNGARG((png_structp png_ptr)); 1528*593dc095SDavid du Colombier #endif 15297dd7cddfSDavid du Colombier 15307dd7cddfSDavid du Colombier #if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) 1531*593dc095SDavid du Colombier /* Add a filler byte to 8-bit Gray or 24-bit RGB images. */ 15327dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_filler) PNGARG((png_structp png_ptr, 15337dd7cddfSDavid du Colombier png_uint_32 filler, int flags)); 15347dd7cddfSDavid du Colombier /* The values of the PNG_FILLER_ defines should NOT be changed */ 15357dd7cddfSDavid du Colombier #define PNG_FILLER_BEFORE 0 15367dd7cddfSDavid du Colombier #define PNG_FILLER_AFTER 1 1537*593dc095SDavid du Colombier /* Add an alpha byte to 8-bit Gray or 24-bit RGB images. */ 1538*593dc095SDavid du Colombier #if !defined(PNG_1_0_X) 1539*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_set_add_alpha) PNGARG((png_structp png_ptr, 1540*593dc095SDavid du Colombier png_uint_32 filler, int flags)); 1541*593dc095SDavid du Colombier #endif 15427dd7cddfSDavid du Colombier #endif /* PNG_READ_FILLER_SUPPORTED || PNG_WRITE_FILLER_SUPPORTED */ 15437dd7cddfSDavid du Colombier 15447dd7cddfSDavid du Colombier #if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) 1545*593dc095SDavid du Colombier /* Swap bytes in 16-bit depth files. */ 15467dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_swap) PNGARG((png_structp png_ptr)); 1547*593dc095SDavid du Colombier #endif 15487dd7cddfSDavid du Colombier 15497dd7cddfSDavid du Colombier #if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED) 1550*593dc095SDavid du Colombier /* Use 1 byte per pixel in 1, 2, or 4-bit depth files. */ 15517dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_packing) PNGARG((png_structp png_ptr)); 1552*593dc095SDavid du Colombier #endif 15537dd7cddfSDavid du Colombier 1554*593dc095SDavid du Colombier #if defined(PNG_READ_PACKSWAP_SUPPORTED) || defined(PNG_WRITE_PACKSWAP_SUPPORTED) 15557dd7cddfSDavid du Colombier /* Swap packing order of pixels in bytes. */ 15567dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_packswap) PNGARG((png_structp png_ptr)); 1557*593dc095SDavid du Colombier #endif 15587dd7cddfSDavid du Colombier 15597dd7cddfSDavid du Colombier #if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) 15607dd7cddfSDavid du Colombier /* Converts files to legal bit depths. */ 15617dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_shift) PNGARG((png_structp png_ptr, 15627dd7cddfSDavid du Colombier png_color_8p true_bits)); 1563*593dc095SDavid du Colombier #endif 15647dd7cddfSDavid du Colombier 15657dd7cddfSDavid du Colombier #if defined(PNG_READ_INTERLACING_SUPPORTED) || \ 15667dd7cddfSDavid du Colombier defined(PNG_WRITE_INTERLACING_SUPPORTED) 15677dd7cddfSDavid du Colombier /* Have the code handle the interlacing. Returns the number of passes. */ 15687dd7cddfSDavid du Colombier extern PNG_EXPORT(int,png_set_interlace_handling) PNGARG((png_structp png_ptr)); 1569*593dc095SDavid du Colombier #endif 15707dd7cddfSDavid du Colombier 15717dd7cddfSDavid du Colombier #if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) 1572*593dc095SDavid du Colombier /* Invert monochrome files */ 15737dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_invert_mono) PNGARG((png_structp png_ptr)); 1574*593dc095SDavid du Colombier #endif 15757dd7cddfSDavid du Colombier 15767dd7cddfSDavid du Colombier #if defined(PNG_READ_BACKGROUND_SUPPORTED) 15777dd7cddfSDavid du Colombier /* Handle alpha and tRNS by replacing with a background color. */ 1578*593dc095SDavid du Colombier #ifdef PNG_FLOATING_POINT_SUPPORTED 15797dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_background) PNGARG((png_structp png_ptr, 15807dd7cddfSDavid du Colombier png_color_16p background_color, int background_gamma_code, 15817dd7cddfSDavid du Colombier int need_expand, double background_gamma)); 1582*593dc095SDavid du Colombier #endif 15837dd7cddfSDavid du Colombier #define PNG_BACKGROUND_GAMMA_UNKNOWN 0 15847dd7cddfSDavid du Colombier #define PNG_BACKGROUND_GAMMA_SCREEN 1 15857dd7cddfSDavid du Colombier #define PNG_BACKGROUND_GAMMA_FILE 2 15867dd7cddfSDavid du Colombier #define PNG_BACKGROUND_GAMMA_UNIQUE 3 1587*593dc095SDavid du Colombier #endif 15887dd7cddfSDavid du Colombier 15897dd7cddfSDavid du Colombier #if defined(PNG_READ_16_TO_8_SUPPORTED) 1590*593dc095SDavid du Colombier /* strip the second byte of information from a 16-bit depth file. */ 15917dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_strip_16) PNGARG((png_structp png_ptr)); 1592*593dc095SDavid du Colombier #endif 15937dd7cddfSDavid du Colombier 15947dd7cddfSDavid du Colombier #if defined(PNG_READ_DITHER_SUPPORTED) 15957dd7cddfSDavid du Colombier /* Turn on dithering, and reduce the palette to the number of colors available. */ 15967dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_dither) PNGARG((png_structp png_ptr, 15977dd7cddfSDavid du Colombier png_colorp palette, int num_palette, int maximum_colors, 15987dd7cddfSDavid du Colombier png_uint_16p histogram, int full_dither)); 1599*593dc095SDavid du Colombier #endif 16007dd7cddfSDavid du Colombier 16017dd7cddfSDavid du Colombier #if defined(PNG_READ_GAMMA_SUPPORTED) 1602*593dc095SDavid du Colombier /* Handle gamma correction. Screen_gamma=(display_exponent) */ 1603*593dc095SDavid du Colombier #ifdef PNG_FLOATING_POINT_SUPPORTED 16047dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_gamma) PNGARG((png_structp png_ptr, 16057dd7cddfSDavid du Colombier double screen_gamma, double default_file_gamma)); 1606*593dc095SDavid du Colombier #endif 1607*593dc095SDavid du Colombier #endif 1608*593dc095SDavid du Colombier 1609*593dc095SDavid du Colombier #if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \ 1610*593dc095SDavid du Colombier defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED) 1611*593dc095SDavid du Colombier /* Permit or disallow empty PLTE (0: not permitted, 1: permitted) */ 1612*593dc095SDavid du Colombier /* Deprecated and will be removed. Use png_permit_mng_features() instead. */ 1613*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_permit_empty_plte) PNGARG((png_structp png_ptr, 1614*593dc095SDavid du Colombier int empty_plte_permitted)); 1615*593dc095SDavid du Colombier #endif 16167dd7cddfSDavid du Colombier 16177dd7cddfSDavid du Colombier #if defined(PNG_WRITE_FLUSH_SUPPORTED) 16187dd7cddfSDavid du Colombier /* Set how many lines between output flushes - 0 for no flushing */ 16197dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_flush) PNGARG((png_structp png_ptr, int nrows)); 16207dd7cddfSDavid du Colombier /* Flush the current PNG output buffer */ 16217dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_write_flush) PNGARG((png_structp png_ptr)); 1622*593dc095SDavid du Colombier #endif 16237dd7cddfSDavid du Colombier 16247dd7cddfSDavid du Colombier /* optional update palette with requested transformations */ 16257dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_start_read_image) PNGARG((png_structp png_ptr)); 16267dd7cddfSDavid du Colombier 16277dd7cddfSDavid du Colombier /* optional call to update the users info structure */ 16287dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_read_update_info) PNGARG((png_structp png_ptr, 16297dd7cddfSDavid du Colombier png_infop info_ptr)); 16307dd7cddfSDavid du Colombier 1631*593dc095SDavid du Colombier #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED 1632*593dc095SDavid du Colombier /* read one or more rows of image data. */ 16337dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_read_rows) PNGARG((png_structp png_ptr, 16347dd7cddfSDavid du Colombier png_bytepp row, png_bytepp display_row, png_uint_32 num_rows)); 1635*593dc095SDavid du Colombier #endif 16367dd7cddfSDavid du Colombier 1637*593dc095SDavid du Colombier #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED 16387dd7cddfSDavid du Colombier /* read a row of data. */ 16397dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_read_row) PNGARG((png_structp png_ptr, 16407dd7cddfSDavid du Colombier png_bytep row, 16417dd7cddfSDavid du Colombier png_bytep display_row)); 1642*593dc095SDavid du Colombier #endif 16437dd7cddfSDavid du Colombier 1644*593dc095SDavid du Colombier #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED 16457dd7cddfSDavid du Colombier /* read the whole image into memory at once. */ 16467dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_read_image) PNGARG((png_structp png_ptr, 16477dd7cddfSDavid du Colombier png_bytepp image)); 1648*593dc095SDavid du Colombier #endif 16497dd7cddfSDavid du Colombier 16507dd7cddfSDavid du Colombier /* write a row of image data */ 16517dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_write_row) PNGARG((png_structp png_ptr, 16527dd7cddfSDavid du Colombier png_bytep row)); 16537dd7cddfSDavid du Colombier 16547dd7cddfSDavid du Colombier /* write a few rows of image data */ 16557dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_write_rows) PNGARG((png_structp png_ptr, 16567dd7cddfSDavid du Colombier png_bytepp row, png_uint_32 num_rows)); 16577dd7cddfSDavid du Colombier 16587dd7cddfSDavid du Colombier /* write the image data */ 16597dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_write_image) PNGARG((png_structp png_ptr, 16607dd7cddfSDavid du Colombier png_bytepp image)); 16617dd7cddfSDavid du Colombier 16627dd7cddfSDavid du Colombier /* writes the end of the PNG file. */ 16637dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_write_end) PNGARG((png_structp png_ptr, 16647dd7cddfSDavid du Colombier png_infop info_ptr)); 16657dd7cddfSDavid du Colombier 1666*593dc095SDavid du Colombier #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED 16677dd7cddfSDavid du Colombier /* read the end of the PNG file. */ 16687dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_read_end) PNGARG((png_structp png_ptr, 16697dd7cddfSDavid du Colombier png_infop info_ptr)); 1670*593dc095SDavid du Colombier #endif 16717dd7cddfSDavid du Colombier 16727dd7cddfSDavid du Colombier /* free any memory associated with the png_info_struct */ 16737dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_destroy_info_struct) PNGARG((png_structp png_ptr, 16747dd7cddfSDavid du Colombier png_infopp info_ptr_ptr)); 16757dd7cddfSDavid du Colombier 16767dd7cddfSDavid du Colombier /* free any memory associated with the png_struct and the png_info_structs */ 16777dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_destroy_read_struct) PNGARG((png_structpp 16787dd7cddfSDavid du Colombier png_ptr_ptr, png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr)); 16797dd7cddfSDavid du Colombier 16807dd7cddfSDavid du Colombier /* free all memory used by the read (old method - NOT DLL EXPORTED) */ 16817dd7cddfSDavid du Colombier extern void png_read_destroy PNGARG((png_structp png_ptr, png_infop info_ptr, 16827dd7cddfSDavid du Colombier png_infop end_info_ptr)); 16837dd7cddfSDavid du Colombier 16847dd7cddfSDavid du Colombier /* free any memory associated with the png_struct and the png_info_structs */ 16857dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_destroy_write_struct) 16867dd7cddfSDavid du Colombier PNGARG((png_structpp png_ptr_ptr, png_infopp info_ptr_ptr)); 16877dd7cddfSDavid du Colombier 16887dd7cddfSDavid du Colombier /* free any memory used in png_ptr struct (old method - NOT DLL EXPORTED) */ 16897dd7cddfSDavid du Colombier extern void png_write_destroy PNGARG((png_structp png_ptr)); 16907dd7cddfSDavid du Colombier 16917dd7cddfSDavid du Colombier /* set the libpng method of handling chunk CRC errors */ 16927dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_crc_action) PNGARG((png_structp png_ptr, 16937dd7cddfSDavid du Colombier int crit_action, int ancil_action)); 16947dd7cddfSDavid du Colombier 16957dd7cddfSDavid du Colombier /* Values for png_set_crc_action() to say how to handle CRC errors in 16967dd7cddfSDavid du Colombier * ancillary and critical chunks, and whether to use the data contained 16977dd7cddfSDavid du Colombier * therein. Note that it is impossible to "discard" data in a critical 16987dd7cddfSDavid du Colombier * chunk. For versions prior to 0.90, the action was always error/quit, 16997dd7cddfSDavid du Colombier * whereas in version 0.90 and later, the action for CRC errors in ancillary 17007dd7cddfSDavid du Colombier * chunks is warn/discard. These values should NOT be changed. 17017dd7cddfSDavid du Colombier * 17027dd7cddfSDavid du Colombier * value action:critical action:ancillary 17037dd7cddfSDavid du Colombier */ 17047dd7cddfSDavid du Colombier #define PNG_CRC_DEFAULT 0 /* error/quit warn/discard data */ 17057dd7cddfSDavid du Colombier #define PNG_CRC_ERROR_QUIT 1 /* error/quit error/quit */ 17067dd7cddfSDavid du Colombier #define PNG_CRC_WARN_DISCARD 2 /* (INVALID) warn/discard data */ 17077dd7cddfSDavid du Colombier #define PNG_CRC_WARN_USE 3 /* warn/use data warn/use data */ 17087dd7cddfSDavid du Colombier #define PNG_CRC_QUIET_USE 4 /* quiet/use data quiet/use data */ 17097dd7cddfSDavid du Colombier #define PNG_CRC_NO_CHANGE 5 /* use current value use current value */ 17107dd7cddfSDavid du Colombier 17117dd7cddfSDavid du Colombier /* These functions give the user control over the scan-line filtering in 17127dd7cddfSDavid du Colombier * libpng and the compression methods used by zlib. These functions are 17137dd7cddfSDavid du Colombier * mainly useful for testing, as the defaults should work with most users. 17147dd7cddfSDavid du Colombier * Those users who are tight on memory or want faster performance at the 17157dd7cddfSDavid du Colombier * expense of compression can modify them. See the compression library 17167dd7cddfSDavid du Colombier * header file (zlib.h) for an explination of the compression functions. 17177dd7cddfSDavid du Colombier */ 17187dd7cddfSDavid du Colombier 17197dd7cddfSDavid du Colombier /* set the filtering method(s) used by libpng. Currently, the only valid 17207dd7cddfSDavid du Colombier * value for "method" is 0. 17217dd7cddfSDavid du Colombier */ 17227dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_filter) PNGARG((png_structp png_ptr, int method, 17237dd7cddfSDavid du Colombier int filters)); 17247dd7cddfSDavid du Colombier 17257dd7cddfSDavid du Colombier /* Flags for png_set_filter() to say which filters to use. The flags 17267dd7cddfSDavid du Colombier * are chosen so that they don't conflict with real filter types 17277dd7cddfSDavid du Colombier * below, in case they are supplied instead of the #defined constants. 17287dd7cddfSDavid du Colombier * These values should NOT be changed. 17297dd7cddfSDavid du Colombier */ 17307dd7cddfSDavid du Colombier #define PNG_NO_FILTERS 0x00 17317dd7cddfSDavid du Colombier #define PNG_FILTER_NONE 0x08 17327dd7cddfSDavid du Colombier #define PNG_FILTER_SUB 0x10 17337dd7cddfSDavid du Colombier #define PNG_FILTER_UP 0x20 17347dd7cddfSDavid du Colombier #define PNG_FILTER_AVG 0x40 17357dd7cddfSDavid du Colombier #define PNG_FILTER_PAETH 0x80 17367dd7cddfSDavid du Colombier #define PNG_ALL_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP | \ 17377dd7cddfSDavid du Colombier PNG_FILTER_AVG | PNG_FILTER_PAETH) 17387dd7cddfSDavid du Colombier 17397dd7cddfSDavid du Colombier /* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now. 17407dd7cddfSDavid du Colombier * These defines should NOT be changed. 17417dd7cddfSDavid du Colombier */ 17427dd7cddfSDavid du Colombier #define PNG_FILTER_VALUE_NONE 0 17437dd7cddfSDavid du Colombier #define PNG_FILTER_VALUE_SUB 1 17447dd7cddfSDavid du Colombier #define PNG_FILTER_VALUE_UP 2 17457dd7cddfSDavid du Colombier #define PNG_FILTER_VALUE_AVG 3 17467dd7cddfSDavid du Colombier #define PNG_FILTER_VALUE_PAETH 4 17477dd7cddfSDavid du Colombier #define PNG_FILTER_VALUE_LAST 5 17487dd7cddfSDavid du Colombier 17497dd7cddfSDavid du Colombier #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) /* EXPERIMENTAL */ 17507dd7cddfSDavid du Colombier /* The "heuristic_method" is given by one of the PNG_FILTER_HEURISTIC_ 17517dd7cddfSDavid du Colombier * defines, either the default (minimum-sum-of-absolute-differences), or 17527dd7cddfSDavid du Colombier * the experimental method (weighted-minimum-sum-of-absolute-differences). 17537dd7cddfSDavid du Colombier * 17547dd7cddfSDavid du Colombier * Weights are factors >= 1.0, indicating how important it is to keep the 17557dd7cddfSDavid du Colombier * filter type consistent between rows. Larger numbers mean the current 17567dd7cddfSDavid du Colombier * filter is that many times as likely to be the same as the "num_weights" 17577dd7cddfSDavid du Colombier * previous filters. This is cumulative for each previous row with a weight. 17587dd7cddfSDavid du Colombier * There needs to be "num_weights" values in "filter_weights", or it can be 17597dd7cddfSDavid du Colombier * NULL if the weights aren't being specified. Weights have no influence on 17607dd7cddfSDavid du Colombier * the selection of the first row filter. Well chosen weights can (in theory) 17617dd7cddfSDavid du Colombier * improve the compression for a given image. 17627dd7cddfSDavid du Colombier * 17637dd7cddfSDavid du Colombier * Costs are factors >= 1.0 indicating the relative decoding costs of a 17647dd7cddfSDavid du Colombier * filter type. Higher costs indicate more decoding expense, and are 17657dd7cddfSDavid du Colombier * therefore less likely to be selected over a filter with lower computational 17667dd7cddfSDavid du Colombier * costs. There needs to be a value in "filter_costs" for each valid filter 17677dd7cddfSDavid du Colombier * type (given by PNG_FILTER_VALUE_LAST), or it can be NULL if you aren't 17687dd7cddfSDavid du Colombier * setting the costs. Costs try to improve the speed of decompression without 17697dd7cddfSDavid du Colombier * unduly increasing the compressed image size. 17707dd7cddfSDavid du Colombier * 17717dd7cddfSDavid du Colombier * A negative weight or cost indicates the default value is to be used, and 17727dd7cddfSDavid du Colombier * values in the range [0.0, 1.0) indicate the value is to remain unchanged. 17737dd7cddfSDavid du Colombier * The default values for both weights and costs are currently 1.0, but may 17747dd7cddfSDavid du Colombier * change if good general weighting/cost heuristics can be found. If both 17757dd7cddfSDavid du Colombier * the weights and costs are set to 1.0, this degenerates the WEIGHTED method 17767dd7cddfSDavid du Colombier * to the UNWEIGHTED method, but with added encoding time/computation. 17777dd7cddfSDavid du Colombier */ 1778*593dc095SDavid du Colombier #ifdef PNG_FLOATING_POINT_SUPPORTED 17797dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_filter_heuristics) PNGARG((png_structp png_ptr, 17807dd7cddfSDavid du Colombier int heuristic_method, int num_weights, png_doublep filter_weights, 17817dd7cddfSDavid du Colombier png_doublep filter_costs)); 1782*593dc095SDavid du Colombier #endif 17837dd7cddfSDavid du Colombier #endif /* PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */ 17847dd7cddfSDavid du Colombier 17857dd7cddfSDavid du Colombier /* Heuristic used for row filter selection. These defines should NOT be 17867dd7cddfSDavid du Colombier * changed. 17877dd7cddfSDavid du Colombier */ 17887dd7cddfSDavid du Colombier #define PNG_FILTER_HEURISTIC_DEFAULT 0 /* Currently "UNWEIGHTED" */ 17897dd7cddfSDavid du Colombier #define PNG_FILTER_HEURISTIC_UNWEIGHTED 1 /* Used by libpng < 0.95 */ 17907dd7cddfSDavid du Colombier #define PNG_FILTER_HEURISTIC_WEIGHTED 2 /* Experimental feature */ 17917dd7cddfSDavid du Colombier #define PNG_FILTER_HEURISTIC_LAST 3 /* Not a valid value */ 17927dd7cddfSDavid du Colombier 17937dd7cddfSDavid du Colombier /* Set the library compression level. Currently, valid values range from 17947dd7cddfSDavid du Colombier * 0 - 9, corresponding directly to the zlib compression levels 0 - 9 17957dd7cddfSDavid du Colombier * (0 - no compression, 9 - "maximal" compression). Note that tests have 17967dd7cddfSDavid du Colombier * shown that zlib compression levels 3-6 usually perform as well as level 9 17977dd7cddfSDavid du Colombier * for PNG images, and do considerably fewer caclulations. In the future, 17987dd7cddfSDavid du Colombier * these values may not correspond directly to the zlib compression levels. 17997dd7cddfSDavid du Colombier */ 18007dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_compression_level) PNGARG((png_structp png_ptr, 18017dd7cddfSDavid du Colombier int level)); 18027dd7cddfSDavid du Colombier 18037dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_compression_mem_level) 18047dd7cddfSDavid du Colombier PNGARG((png_structp png_ptr, int mem_level)); 18057dd7cddfSDavid du Colombier 18067dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_compression_strategy) 18077dd7cddfSDavid du Colombier PNGARG((png_structp png_ptr, int strategy)); 18087dd7cddfSDavid du Colombier 18097dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_compression_window_bits) 18107dd7cddfSDavid du Colombier PNGARG((png_structp png_ptr, int window_bits)); 18117dd7cddfSDavid du Colombier 18127dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_compression_method) PNGARG((png_structp png_ptr, 18137dd7cddfSDavid du Colombier int method)); 18147dd7cddfSDavid du Colombier 18157dd7cddfSDavid du Colombier /* These next functions are called for input/output, memory, and error 18167dd7cddfSDavid du Colombier * handling. They are in the file pngrio.c, pngwio.c, and pngerror.c, 18177dd7cddfSDavid du Colombier * and call standard C I/O routines such as fread(), fwrite(), and 18187dd7cddfSDavid du Colombier * fprintf(). These functions can be made to use other I/O routines 18197dd7cddfSDavid du Colombier * at run time for those applications that need to handle I/O in a 18207dd7cddfSDavid du Colombier * different manner by calling png_set_???_fn(). See libpng.txt for 18217dd7cddfSDavid du Colombier * more information. 18227dd7cddfSDavid du Colombier */ 18237dd7cddfSDavid du Colombier 18247dd7cddfSDavid du Colombier #if !defined(PNG_NO_STDIO) 18257dd7cddfSDavid du Colombier /* Initialize the input/output for the PNG file to the default functions. */ 1826*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_init_io) PNGARG((png_structp png_ptr, png_FILE_p fp)); 18277dd7cddfSDavid du Colombier #endif 18287dd7cddfSDavid du Colombier 18297dd7cddfSDavid du Colombier /* Replace the (error and abort), and warning functions with user 18307dd7cddfSDavid du Colombier * supplied functions. If no messages are to be printed you must still 18317dd7cddfSDavid du Colombier * write and use replacement functions. The replacement error_fn should 18327dd7cddfSDavid du Colombier * still do a longjmp to the last setjmp location if you are using this 18337dd7cddfSDavid du Colombier * method of error handling. If error_fn or warning_fn is NULL, the 18347dd7cddfSDavid du Colombier * default function will be used. 18357dd7cddfSDavid du Colombier */ 1836*593dc095SDavid du Colombier 18377dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_error_fn) PNGARG((png_structp png_ptr, 18387dd7cddfSDavid du Colombier png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn)); 18397dd7cddfSDavid du Colombier 18407dd7cddfSDavid du Colombier /* Return the user pointer associated with the error functions */ 18417dd7cddfSDavid du Colombier extern PNG_EXPORT(png_voidp,png_get_error_ptr) PNGARG((png_structp png_ptr)); 18427dd7cddfSDavid du Colombier 18437dd7cddfSDavid du Colombier /* Replace the default data output functions with a user supplied one(s). 18447dd7cddfSDavid du Colombier * If buffered output is not used, then output_flush_fn can be set to NULL. 18457dd7cddfSDavid du Colombier * If PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time 18467dd7cddfSDavid du Colombier * output_flush_fn will be ignored (and thus can be NULL). 18477dd7cddfSDavid du Colombier */ 18487dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_write_fn) PNGARG((png_structp png_ptr, 18497dd7cddfSDavid du Colombier png_voidp io_ptr, png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn)); 18507dd7cddfSDavid du Colombier 18517dd7cddfSDavid du Colombier /* Replace the default data input function with a user supplied one. */ 18527dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_read_fn) PNGARG((png_structp png_ptr, 18537dd7cddfSDavid du Colombier png_voidp io_ptr, png_rw_ptr read_data_fn)); 18547dd7cddfSDavid du Colombier 18557dd7cddfSDavid du Colombier /* Return the user pointer associated with the I/O functions */ 18567dd7cddfSDavid du Colombier extern PNG_EXPORT(png_voidp,png_get_io_ptr) PNGARG((png_structp png_ptr)); 18577dd7cddfSDavid du Colombier 1858*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_set_read_status_fn) PNGARG((png_structp png_ptr, 1859*593dc095SDavid du Colombier png_read_status_ptr read_row_fn)); 1860*593dc095SDavid du Colombier 1861*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_set_write_status_fn) PNGARG((png_structp png_ptr, 1862*593dc095SDavid du Colombier png_write_status_ptr write_row_fn)); 1863*593dc095SDavid du Colombier 1864*593dc095SDavid du Colombier #ifdef PNG_USER_MEM_SUPPORTED 1865*593dc095SDavid du Colombier /* Replace the default memory allocation functions with user supplied one(s). */ 1866*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_set_mem_fn) PNGARG((png_structp png_ptr, 1867*593dc095SDavid du Colombier png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn)); 1868*593dc095SDavid du Colombier /* Return the user pointer associated with the memory functions */ 1869*593dc095SDavid du Colombier extern PNG_EXPORT(png_voidp,png_get_mem_ptr) PNGARG((png_structp png_ptr)); 1870*593dc095SDavid du Colombier #endif 1871*593dc095SDavid du Colombier 1872*593dc095SDavid du Colombier #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ 1873*593dc095SDavid du Colombier defined(PNG_LEGACY_SUPPORTED) 1874*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_set_read_user_transform_fn) PNGARG((png_structp 1875*593dc095SDavid du Colombier png_ptr, png_user_transform_ptr read_user_transform_fn)); 1876*593dc095SDavid du Colombier #endif 1877*593dc095SDavid du Colombier 1878*593dc095SDavid du Colombier #if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ 1879*593dc095SDavid du Colombier defined(PNG_LEGACY_SUPPORTED) 1880*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_set_write_user_transform_fn) PNGARG((png_structp 1881*593dc095SDavid du Colombier png_ptr, png_user_transform_ptr write_user_transform_fn)); 1882*593dc095SDavid du Colombier #endif 1883*593dc095SDavid du Colombier 1884*593dc095SDavid du Colombier #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ 1885*593dc095SDavid du Colombier defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \ 1886*593dc095SDavid du Colombier defined(PNG_LEGACY_SUPPORTED) 1887*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_set_user_transform_info) PNGARG((png_structp 1888*593dc095SDavid du Colombier png_ptr, png_voidp user_transform_ptr, int user_transform_depth, 1889*593dc095SDavid du Colombier int user_transform_channels)); 1890*593dc095SDavid du Colombier /* Return the user pointer associated with the user transform functions */ 1891*593dc095SDavid du Colombier extern PNG_EXPORT(png_voidp,png_get_user_transform_ptr) 1892*593dc095SDavid du Colombier PNGARG((png_structp png_ptr)); 1893*593dc095SDavid du Colombier #endif 1894*593dc095SDavid du Colombier 1895*593dc095SDavid du Colombier #ifdef PNG_USER_CHUNKS_SUPPORTED 1896*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_set_read_user_chunk_fn) PNGARG((png_structp png_ptr, 1897*593dc095SDavid du Colombier png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn)); 1898*593dc095SDavid du Colombier extern PNG_EXPORT(png_voidp,png_get_user_chunk_ptr) PNGARG((png_structp 1899*593dc095SDavid du Colombier png_ptr)); 1900*593dc095SDavid du Colombier #endif 1901*593dc095SDavid du Colombier 19027dd7cddfSDavid du Colombier #ifdef PNG_PROGRESSIVE_READ_SUPPORTED 19037dd7cddfSDavid du Colombier /* Sets the function callbacks for the push reader, and a pointer to a 19047dd7cddfSDavid du Colombier * user-defined structure available to the callback functions. 19057dd7cddfSDavid du Colombier */ 19067dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_progressive_read_fn) PNGARG((png_structp png_ptr, 19077dd7cddfSDavid du Colombier png_voidp progressive_ptr, 19087dd7cddfSDavid du Colombier png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn, 19097dd7cddfSDavid du Colombier png_progressive_end_ptr end_fn)); 19107dd7cddfSDavid du Colombier 19117dd7cddfSDavid du Colombier /* returns the user pointer associated with the push read functions */ 19127dd7cddfSDavid du Colombier extern PNG_EXPORT(png_voidp,png_get_progressive_ptr) 19137dd7cddfSDavid du Colombier PNGARG((png_structp png_ptr)); 19147dd7cddfSDavid du Colombier 19157dd7cddfSDavid du Colombier /* function to be called when data becomes available */ 19167dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_process_data) PNGARG((png_structp png_ptr, 19177dd7cddfSDavid du Colombier png_infop info_ptr, png_bytep buffer, png_size_t buffer_size)); 19187dd7cddfSDavid du Colombier 1919*593dc095SDavid du Colombier /* function that combines rows. Not very much different than the 19207dd7cddfSDavid du Colombier * png_combine_row() call. Is this even used????? 19217dd7cddfSDavid du Colombier */ 19227dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_progressive_combine_row) PNGARG((png_structp png_ptr, 19237dd7cddfSDavid du Colombier png_bytep old_row, png_bytep new_row)); 19247dd7cddfSDavid du Colombier #endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ 19257dd7cddfSDavid du Colombier 19267dd7cddfSDavid du Colombier extern PNG_EXPORT(png_voidp,png_malloc) PNGARG((png_structp png_ptr, 19277dd7cddfSDavid du Colombier png_uint_32 size)); 19287dd7cddfSDavid du Colombier 1929*593dc095SDavid du Colombier #if defined(PNG_1_0_X) 1930*593dc095SDavid du Colombier # define png_malloc_warn png_malloc 1931*593dc095SDavid du Colombier #else 1932*593dc095SDavid du Colombier /* Added at libpng version 1.2.4 */ 1933*593dc095SDavid du Colombier extern PNG_EXPORT(png_voidp,png_malloc_warn) PNGARG((png_structp png_ptr, 1934*593dc095SDavid du Colombier png_uint_32 size)); 1935*593dc095SDavid du Colombier #endif 1936*593dc095SDavid du Colombier 19377dd7cddfSDavid du Colombier /* frees a pointer allocated by png_malloc() */ 19387dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_free) PNGARG((png_structp png_ptr, png_voidp ptr)); 19397dd7cddfSDavid du Colombier 1940*593dc095SDavid du Colombier #if defined(PNG_1_0_X) 1941*593dc095SDavid du Colombier /* Function to allocate memory for zlib. */ 1942*593dc095SDavid du Colombier extern PNG_EXPORT(voidpf,png_zalloc) PNGARG((voidpf png_ptr, uInt items, 1943*593dc095SDavid du Colombier uInt size)); 1944*593dc095SDavid du Colombier 1945*593dc095SDavid du Colombier /* Function to free memory for zlib */ 1946*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_zfree) PNGARG((voidpf png_ptr, voidpf ptr)); 1947*593dc095SDavid du Colombier #endif 1948*593dc095SDavid du Colombier 1949*593dc095SDavid du Colombier /* Free data that was allocated internally */ 1950*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_free_data) PNGARG((png_structp png_ptr, 1951*593dc095SDavid du Colombier png_infop info_ptr, png_uint_32 free_me, int num)); 1952*593dc095SDavid du Colombier #ifdef PNG_FREE_ME_SUPPORTED 1953*593dc095SDavid du Colombier /* Reassign responsibility for freeing existing data, whether allocated 1954*593dc095SDavid du Colombier * by libpng or by the application */ 1955*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_data_freer) PNGARG((png_structp png_ptr, 1956*593dc095SDavid du Colombier png_infop info_ptr, int freer, png_uint_32 mask)); 1957*593dc095SDavid du Colombier #endif 1958*593dc095SDavid du Colombier /* assignments for png_data_freer */ 1959*593dc095SDavid du Colombier #define PNG_DESTROY_WILL_FREE_DATA 1 1960*593dc095SDavid du Colombier #define PNG_SET_WILL_FREE_DATA 1 1961*593dc095SDavid du Colombier #define PNG_USER_WILL_FREE_DATA 2 1962*593dc095SDavid du Colombier /* Flags for png_ptr->free_me and info_ptr->free_me */ 1963*593dc095SDavid du Colombier #define PNG_FREE_HIST 0x0008 1964*593dc095SDavid du Colombier #define PNG_FREE_ICCP 0x0010 1965*593dc095SDavid du Colombier #define PNG_FREE_SPLT 0x0020 1966*593dc095SDavid du Colombier #define PNG_FREE_ROWS 0x0040 1967*593dc095SDavid du Colombier #define PNG_FREE_PCAL 0x0080 1968*593dc095SDavid du Colombier #define PNG_FREE_SCAL 0x0100 1969*593dc095SDavid du Colombier #define PNG_FREE_UNKN 0x0200 1970*593dc095SDavid du Colombier #define PNG_FREE_LIST 0x0400 1971*593dc095SDavid du Colombier #define PNG_FREE_PLTE 0x1000 1972*593dc095SDavid du Colombier #define PNG_FREE_TRNS 0x2000 1973*593dc095SDavid du Colombier #define PNG_FREE_TEXT 0x4000 1974*593dc095SDavid du Colombier #define PNG_FREE_ALL 0x7fff 1975*593dc095SDavid du Colombier #define PNG_FREE_MUL 0x4220 /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */ 1976*593dc095SDavid du Colombier 1977*593dc095SDavid du Colombier #ifdef PNG_USER_MEM_SUPPORTED 1978*593dc095SDavid du Colombier extern PNG_EXPORT(png_voidp,png_malloc_default) PNGARG((png_structp png_ptr, 19797dd7cddfSDavid du Colombier png_uint_32 size)); 1980*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_free_default) PNGARG((png_structp png_ptr, 19817dd7cddfSDavid du Colombier png_voidp ptr)); 19827dd7cddfSDavid du Colombier #endif 1983*593dc095SDavid du Colombier 1984*593dc095SDavid du Colombier extern PNG_EXPORT(png_voidp,png_memcpy_check) PNGARG((png_structp png_ptr, 1985*593dc095SDavid du Colombier png_voidp s1, png_voidp s2, png_uint_32 size)); 1986*593dc095SDavid du Colombier 1987*593dc095SDavid du Colombier extern PNG_EXPORT(png_voidp,png_memset_check) PNGARG((png_structp png_ptr, 1988*593dc095SDavid du Colombier png_voidp s1, int value, png_uint_32 size)); 1989*593dc095SDavid du Colombier 19907dd7cddfSDavid du Colombier #if defined(USE_FAR_KEYWORD) /* memory model conversion function */ 1991*593dc095SDavid du Colombier extern void *png_far_to_near PNGARG((png_structp png_ptr,png_voidp ptr, 1992*593dc095SDavid du Colombier int check)); 19937dd7cddfSDavid du Colombier #endif /* USE_FAR_KEYWORD */ 19947dd7cddfSDavid du Colombier 19957dd7cddfSDavid du Colombier /* Fatal error in PNG image of libpng - can't continue */ 19967dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_error) PNGARG((png_structp png_ptr, 1997*593dc095SDavid du Colombier png_const_charp error_message)); 19987dd7cddfSDavid du Colombier 19997dd7cddfSDavid du Colombier /* The same, but the chunk name is prepended to the error string. */ 20007dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_chunk_error) PNGARG((png_structp png_ptr, 2001*593dc095SDavid du Colombier png_const_charp error_message)); 20027dd7cddfSDavid du Colombier 20037dd7cddfSDavid du Colombier /* Non-fatal error in libpng. Can continue, but may have a problem. */ 20047dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_warning) PNGARG((png_structp png_ptr, 2005*593dc095SDavid du Colombier png_const_charp warning_message)); 20067dd7cddfSDavid du Colombier 20077dd7cddfSDavid du Colombier /* Non-fatal error in libpng, chunk name is prepended to message. */ 20087dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_chunk_warning) PNGARG((png_structp png_ptr, 2009*593dc095SDavid du Colombier png_const_charp warning_message)); 20107dd7cddfSDavid du Colombier 20117dd7cddfSDavid du Colombier /* The png_set_<chunk> functions are for storing values in the png_info_struct. 20127dd7cddfSDavid du Colombier * Similarly, the png_get_<chunk> calls are used to read values from the 20137dd7cddfSDavid du Colombier * png_info_struct, either storing the parameters in the passed variables, or 20147dd7cddfSDavid du Colombier * setting pointers into the png_info_struct where the data is stored. The 20157dd7cddfSDavid du Colombier * png_get_<chunk> functions return a non-zero value if the data was available 20167dd7cddfSDavid du Colombier * in info_ptr, or return zero and do not change any of the parameters if the 20177dd7cddfSDavid du Colombier * data was not available. 20187dd7cddfSDavid du Colombier * 20197dd7cddfSDavid du Colombier * These functions should be used instead of directly accessing png_info 20207dd7cddfSDavid du Colombier * to avoid problems with future changes in the size and internal layout of 20217dd7cddfSDavid du Colombier * png_info_struct. 20227dd7cddfSDavid du Colombier */ 20237dd7cddfSDavid du Colombier /* Returns "flag" if chunk data is valid in info_ptr. */ 20247dd7cddfSDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_valid) PNGARG((png_structp png_ptr, 20257dd7cddfSDavid du Colombier png_infop info_ptr, png_uint_32 flag)); 20267dd7cddfSDavid du Colombier 20277dd7cddfSDavid du Colombier /* Returns number of bytes needed to hold a transformed row. */ 20287dd7cddfSDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_rowbytes) PNGARG((png_structp png_ptr, 20297dd7cddfSDavid du Colombier png_infop info_ptr)); 20307dd7cddfSDavid du Colombier 2031*593dc095SDavid du Colombier #if defined(PNG_INFO_IMAGE_SUPPORTED) 2032*593dc095SDavid du Colombier /* Returns row_pointers, which is an array of pointers to scanlines that was 2033*593dc095SDavid du Colombier returned from png_read_png(). */ 2034*593dc095SDavid du Colombier extern PNG_EXPORT(png_bytepp,png_get_rows) PNGARG((png_structp png_ptr, 2035*593dc095SDavid du Colombier png_infop info_ptr)); 2036*593dc095SDavid du Colombier /* Set row_pointers, which is an array of pointers to scanlines for use 2037*593dc095SDavid du Colombier by png_write_png(). */ 2038*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_set_rows) PNGARG((png_structp png_ptr, 2039*593dc095SDavid du Colombier png_infop info_ptr, png_bytepp row_pointers)); 2040*593dc095SDavid du Colombier #endif 2041*593dc095SDavid du Colombier 20427dd7cddfSDavid du Colombier /* Returns number of color channels in image. */ 20437dd7cddfSDavid du Colombier extern PNG_EXPORT(png_byte,png_get_channels) PNGARG((png_structp png_ptr, 20447dd7cddfSDavid du Colombier png_infop info_ptr)); 20457dd7cddfSDavid du Colombier 20467dd7cddfSDavid du Colombier #ifdef PNG_EASY_ACCESS_SUPPORTED 20477dd7cddfSDavid du Colombier /* Returns image width in pixels. */ 20487dd7cddfSDavid du Colombier extern PNG_EXPORT(png_uint_32, png_get_image_width) PNGARG((png_structp 20497dd7cddfSDavid du Colombier png_ptr, png_infop info_ptr)); 20507dd7cddfSDavid du Colombier 20517dd7cddfSDavid du Colombier /* Returns image height in pixels. */ 20527dd7cddfSDavid du Colombier extern PNG_EXPORT(png_uint_32, png_get_image_height) PNGARG((png_structp 20537dd7cddfSDavid du Colombier png_ptr, png_infop info_ptr)); 20547dd7cddfSDavid du Colombier 20557dd7cddfSDavid du Colombier /* Returns image bit_depth. */ 20567dd7cddfSDavid du Colombier extern PNG_EXPORT(png_byte, png_get_bit_depth) PNGARG((png_structp 20577dd7cddfSDavid du Colombier png_ptr, png_infop info_ptr)); 20587dd7cddfSDavid du Colombier 20597dd7cddfSDavid du Colombier /* Returns image color_type. */ 20607dd7cddfSDavid du Colombier extern PNG_EXPORT(png_byte, png_get_color_type) PNGARG((png_structp 20617dd7cddfSDavid du Colombier png_ptr, png_infop info_ptr)); 20627dd7cddfSDavid du Colombier 20637dd7cddfSDavid du Colombier /* Returns image filter_type. */ 20647dd7cddfSDavid du Colombier extern PNG_EXPORT(png_byte, png_get_filter_type) PNGARG((png_structp 20657dd7cddfSDavid du Colombier png_ptr, png_infop info_ptr)); 20667dd7cddfSDavid du Colombier 20677dd7cddfSDavid du Colombier /* Returns image interlace_type. */ 20687dd7cddfSDavid du Colombier extern PNG_EXPORT(png_byte, png_get_interlace_type) PNGARG((png_structp 20697dd7cddfSDavid du Colombier png_ptr, png_infop info_ptr)); 20707dd7cddfSDavid du Colombier 20717dd7cddfSDavid du Colombier /* Returns image compression_type. */ 20727dd7cddfSDavid du Colombier extern PNG_EXPORT(png_byte, png_get_compression_type) PNGARG((png_structp 20737dd7cddfSDavid du Colombier png_ptr, png_infop info_ptr)); 20747dd7cddfSDavid du Colombier 20757dd7cddfSDavid du Colombier /* Returns image resolution in pixels per meter, from pHYs chunk data. */ 20767dd7cddfSDavid du Colombier extern PNG_EXPORT(png_uint_32, png_get_pixels_per_meter) PNGARG((png_structp 20777dd7cddfSDavid du Colombier png_ptr, png_infop info_ptr)); 2078*593dc095SDavid du Colombier extern PNG_EXPORT(png_uint_32, png_get_x_pixels_per_meter) PNGARG((png_structp 2079*593dc095SDavid du Colombier png_ptr, png_infop info_ptr)); 2080*593dc095SDavid du Colombier extern PNG_EXPORT(png_uint_32, png_get_y_pixels_per_meter) PNGARG((png_structp 2081*593dc095SDavid du Colombier png_ptr, png_infop info_ptr)); 20827dd7cddfSDavid du Colombier 20837dd7cddfSDavid du Colombier /* Returns pixel aspect ratio, computed from pHYs chunk data. */ 2084*593dc095SDavid du Colombier #ifdef PNG_FLOATING_POINT_SUPPORTED 20857dd7cddfSDavid du Colombier extern PNG_EXPORT(float, png_get_pixel_aspect_ratio) PNGARG((png_structp 20867dd7cddfSDavid du Colombier png_ptr, png_infop info_ptr)); 2087*593dc095SDavid du Colombier #endif 20887dd7cddfSDavid du Colombier 20897dd7cddfSDavid du Colombier /* Returns image x, y offset in pixels or microns, from oFFs chunk data. */ 2090*593dc095SDavid du Colombier extern PNG_EXPORT(png_int_32, png_get_x_offset_pixels) PNGARG((png_structp 20917dd7cddfSDavid du Colombier png_ptr, png_infop info_ptr)); 2092*593dc095SDavid du Colombier extern PNG_EXPORT(png_int_32, png_get_y_offset_pixels) PNGARG((png_structp 20937dd7cddfSDavid du Colombier png_ptr, png_infop info_ptr)); 2094*593dc095SDavid du Colombier extern PNG_EXPORT(png_int_32, png_get_x_offset_microns) PNGARG((png_structp 20957dd7cddfSDavid du Colombier png_ptr, png_infop info_ptr)); 2096*593dc095SDavid du Colombier extern PNG_EXPORT(png_int_32, png_get_y_offset_microns) PNGARG((png_structp 20977dd7cddfSDavid du Colombier png_ptr, png_infop info_ptr)); 20987dd7cddfSDavid du Colombier 20997dd7cddfSDavid du Colombier #endif /* PNG_EASY_ACCESS_SUPPORTED */ 21007dd7cddfSDavid du Colombier 21017dd7cddfSDavid du Colombier /* Returns pointer to signature string read from PNG header */ 21027dd7cddfSDavid du Colombier extern PNG_EXPORT(png_bytep,png_get_signature) PNGARG((png_structp png_ptr, 21037dd7cddfSDavid du Colombier png_infop info_ptr)); 21047dd7cddfSDavid du Colombier 2105*593dc095SDavid du Colombier #if defined(PNG_bKGD_SUPPORTED) 21067dd7cddfSDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_bKGD) PNGARG((png_structp png_ptr, 21077dd7cddfSDavid du Colombier png_infop info_ptr, png_color_16p *background)); 2108*593dc095SDavid du Colombier #endif 21097dd7cddfSDavid du Colombier 2110*593dc095SDavid du Colombier #if defined(PNG_bKGD_SUPPORTED) 21117dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_bKGD) PNGARG((png_structp png_ptr, 21127dd7cddfSDavid du Colombier png_infop info_ptr, png_color_16p background)); 2113*593dc095SDavid du Colombier #endif 21147dd7cddfSDavid du Colombier 2115*593dc095SDavid du Colombier #if defined(PNG_cHRM_SUPPORTED) 2116*593dc095SDavid du Colombier #ifdef PNG_FLOATING_POINT_SUPPORTED 21177dd7cddfSDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_cHRM) PNGARG((png_structp png_ptr, 21187dd7cddfSDavid du Colombier png_infop info_ptr, double *white_x, double *white_y, double *red_x, 21197dd7cddfSDavid du Colombier double *red_y, double *green_x, double *green_y, double *blue_x, 21207dd7cddfSDavid du Colombier double *blue_y)); 2121*593dc095SDavid du Colombier #endif 2122*593dc095SDavid du Colombier #ifdef PNG_FIXED_POINT_SUPPORTED 2123*593dc095SDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_cHRM_fixed) PNGARG((png_structp png_ptr, 2124*593dc095SDavid du Colombier png_infop info_ptr, png_fixed_point *int_white_x, png_fixed_point 2125*593dc095SDavid du Colombier *int_white_y, png_fixed_point *int_red_x, png_fixed_point *int_red_y, 2126*593dc095SDavid du Colombier png_fixed_point *int_green_x, png_fixed_point *int_green_y, png_fixed_point 2127*593dc095SDavid du Colombier *int_blue_x, png_fixed_point *int_blue_y)); 2128*593dc095SDavid du Colombier #endif 2129*593dc095SDavid du Colombier #endif 21307dd7cddfSDavid du Colombier 2131*593dc095SDavid du Colombier #if defined(PNG_cHRM_SUPPORTED) 2132*593dc095SDavid du Colombier #ifdef PNG_FLOATING_POINT_SUPPORTED 21337dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_cHRM) PNGARG((png_structp png_ptr, 21347dd7cddfSDavid du Colombier png_infop info_ptr, double white_x, double white_y, double red_x, 21357dd7cddfSDavid du Colombier double red_y, double green_x, double green_y, double blue_x, double blue_y)); 2136*593dc095SDavid du Colombier #endif 2137*593dc095SDavid du Colombier #ifdef PNG_FIXED_POINT_SUPPORTED 2138*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_set_cHRM_fixed) PNGARG((png_structp png_ptr, 2139*593dc095SDavid du Colombier png_infop info_ptr, png_fixed_point int_white_x, png_fixed_point int_white_y, 2140*593dc095SDavid du Colombier png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point 2141*593dc095SDavid du Colombier int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x, 2142*593dc095SDavid du Colombier png_fixed_point int_blue_y)); 2143*593dc095SDavid du Colombier #endif 2144*593dc095SDavid du Colombier #endif 21457dd7cddfSDavid du Colombier 2146*593dc095SDavid du Colombier #if defined(PNG_gAMA_SUPPORTED) 2147*593dc095SDavid du Colombier #ifdef PNG_FLOATING_POINT_SUPPORTED 21487dd7cddfSDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_gAMA) PNGARG((png_structp png_ptr, 21497dd7cddfSDavid du Colombier png_infop info_ptr, double *file_gamma)); 2150*593dc095SDavid du Colombier #endif 2151*593dc095SDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_gAMA_fixed) PNGARG((png_structp png_ptr, 2152*593dc095SDavid du Colombier png_infop info_ptr, png_fixed_point *int_file_gamma)); 2153*593dc095SDavid du Colombier #endif 21547dd7cddfSDavid du Colombier 2155*593dc095SDavid du Colombier #if defined(PNG_gAMA_SUPPORTED) 2156*593dc095SDavid du Colombier #ifdef PNG_FLOATING_POINT_SUPPORTED 21577dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_gAMA) PNGARG((png_structp png_ptr, 21587dd7cddfSDavid du Colombier png_infop info_ptr, double file_gamma)); 2159*593dc095SDavid du Colombier #endif 2160*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_set_gAMA_fixed) PNGARG((png_structp png_ptr, 2161*593dc095SDavid du Colombier png_infop info_ptr, png_fixed_point int_file_gamma)); 2162*593dc095SDavid du Colombier #endif 21637dd7cddfSDavid du Colombier 2164*593dc095SDavid du Colombier #if defined(PNG_hIST_SUPPORTED) 21657dd7cddfSDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_hIST) PNGARG((png_structp png_ptr, 21667dd7cddfSDavid du Colombier png_infop info_ptr, png_uint_16p *hist)); 2167*593dc095SDavid du Colombier #endif 21687dd7cddfSDavid du Colombier 2169*593dc095SDavid du Colombier #if defined(PNG_hIST_SUPPORTED) 21707dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_hIST) PNGARG((png_structp png_ptr, 21717dd7cddfSDavid du Colombier png_infop info_ptr, png_uint_16p hist)); 2172*593dc095SDavid du Colombier #endif 21737dd7cddfSDavid du Colombier 21747dd7cddfSDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_IHDR) PNGARG((png_structp png_ptr, 21757dd7cddfSDavid du Colombier png_infop info_ptr, png_uint_32 *width, png_uint_32 *height, 2176*593dc095SDavid du Colombier int *bit_depth, int *color_type, int *interlace_method, 2177*593dc095SDavid du Colombier int *compression_method, int *filter_method)); 21787dd7cddfSDavid du Colombier 21797dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_IHDR) PNGARG((png_structp png_ptr, 21807dd7cddfSDavid du Colombier png_infop info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth, 2181*593dc095SDavid du Colombier int color_type, int interlace_method, int compression_method, 2182*593dc095SDavid du Colombier int filter_method)); 21837dd7cddfSDavid du Colombier 2184*593dc095SDavid du Colombier #if defined(PNG_oFFs_SUPPORTED) 21857dd7cddfSDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_oFFs) PNGARG((png_structp png_ptr, 2186*593dc095SDavid du Colombier png_infop info_ptr, png_int_32 *offset_x, png_int_32 *offset_y, 21877dd7cddfSDavid du Colombier int *unit_type)); 2188*593dc095SDavid du Colombier #endif 21897dd7cddfSDavid du Colombier 2190*593dc095SDavid du Colombier #if defined(PNG_oFFs_SUPPORTED) 21917dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_oFFs) PNGARG((png_structp png_ptr, 2192*593dc095SDavid du Colombier png_infop info_ptr, png_int_32 offset_x, png_int_32 offset_y, 21937dd7cddfSDavid du Colombier int unit_type)); 2194*593dc095SDavid du Colombier #endif 21957dd7cddfSDavid du Colombier 2196*593dc095SDavid du Colombier #if defined(PNG_pCAL_SUPPORTED) 21977dd7cddfSDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_pCAL) PNGARG((png_structp png_ptr, 21987dd7cddfSDavid du Colombier png_infop info_ptr, png_charp *purpose, png_int_32 *X0, png_int_32 *X1, 21997dd7cddfSDavid du Colombier int *type, int *nparams, png_charp *units, png_charpp *params)); 2200*593dc095SDavid du Colombier #endif 22017dd7cddfSDavid du Colombier 2202*593dc095SDavid du Colombier #if defined(PNG_pCAL_SUPPORTED) 22037dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_pCAL) PNGARG((png_structp png_ptr, 22047dd7cddfSDavid du Colombier png_infop info_ptr, png_charp purpose, png_int_32 X0, png_int_32 X1, 22057dd7cddfSDavid du Colombier int type, int nparams, png_charp units, png_charpp params)); 2206*593dc095SDavid du Colombier #endif 22077dd7cddfSDavid du Colombier 2208*593dc095SDavid du Colombier #if defined(PNG_pHYs_SUPPORTED) 22097dd7cddfSDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_pHYs) PNGARG((png_structp png_ptr, 22107dd7cddfSDavid du Colombier png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)); 2211*593dc095SDavid du Colombier #endif 22127dd7cddfSDavid du Colombier 2213*593dc095SDavid du Colombier #if defined(PNG_pHYs_SUPPORTED) 22147dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_pHYs) PNGARG((png_structp png_ptr, 22157dd7cddfSDavid du Colombier png_infop info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type)); 2216*593dc095SDavid du Colombier #endif 22177dd7cddfSDavid du Colombier 22187dd7cddfSDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_PLTE) PNGARG((png_structp png_ptr, 22197dd7cddfSDavid du Colombier png_infop info_ptr, png_colorp *palette, int *num_palette)); 22207dd7cddfSDavid du Colombier 22217dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_PLTE) PNGARG((png_structp png_ptr, 22227dd7cddfSDavid du Colombier png_infop info_ptr, png_colorp palette, int num_palette)); 22237dd7cddfSDavid du Colombier 2224*593dc095SDavid du Colombier #if defined(PNG_sBIT_SUPPORTED) 22257dd7cddfSDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_sBIT) PNGARG((png_structp png_ptr, 22267dd7cddfSDavid du Colombier png_infop info_ptr, png_color_8p *sig_bit)); 2227*593dc095SDavid du Colombier #endif 22287dd7cddfSDavid du Colombier 2229*593dc095SDavid du Colombier #if defined(PNG_sBIT_SUPPORTED) 22307dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_sBIT) PNGARG((png_structp png_ptr, 22317dd7cddfSDavid du Colombier png_infop info_ptr, png_color_8p sig_bit)); 2232*593dc095SDavid du Colombier #endif 22337dd7cddfSDavid du Colombier 2234*593dc095SDavid du Colombier #if defined(PNG_sRGB_SUPPORTED) 22357dd7cddfSDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_sRGB) PNGARG((png_structp png_ptr, 22367dd7cddfSDavid du Colombier png_infop info_ptr, int *intent)); 2237*593dc095SDavid du Colombier #endif 22387dd7cddfSDavid du Colombier 2239*593dc095SDavid du Colombier #if defined(PNG_sRGB_SUPPORTED) 22407dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_sRGB) PNGARG((png_structp png_ptr, 22417dd7cddfSDavid du Colombier png_infop info_ptr, int intent)); 22427dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_sRGB_gAMA_and_cHRM) PNGARG((png_structp png_ptr, 22437dd7cddfSDavid du Colombier png_infop info_ptr, int intent)); 2244*593dc095SDavid du Colombier #endif 22457dd7cddfSDavid du Colombier 2246*593dc095SDavid du Colombier #if defined(PNG_iCCP_SUPPORTED) 2247*593dc095SDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_iCCP) PNGARG((png_structp png_ptr, 2248*593dc095SDavid du Colombier png_infop info_ptr, png_charpp name, int *compression_type, 2249*593dc095SDavid du Colombier png_charpp profile, png_uint_32 *proflen)); 2250*593dc095SDavid du Colombier /* Note to maintainer: profile should be png_bytepp */ 2251*593dc095SDavid du Colombier #endif 2252*593dc095SDavid du Colombier 2253*593dc095SDavid du Colombier #if defined(PNG_iCCP_SUPPORTED) 2254*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_set_iCCP) PNGARG((png_structp png_ptr, 2255*593dc095SDavid du Colombier png_infop info_ptr, png_charp name, int compression_type, 2256*593dc095SDavid du Colombier png_charp profile, png_uint_32 proflen)); 2257*593dc095SDavid du Colombier /* Note to maintainer: profile should be png_bytep */ 2258*593dc095SDavid du Colombier #endif 2259*593dc095SDavid du Colombier 2260*593dc095SDavid du Colombier #if defined(PNG_sPLT_SUPPORTED) 2261*593dc095SDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_sPLT) PNGARG((png_structp png_ptr, 2262*593dc095SDavid du Colombier png_infop info_ptr, png_sPLT_tpp entries)); 2263*593dc095SDavid du Colombier #endif 2264*593dc095SDavid du Colombier 2265*593dc095SDavid du Colombier #if defined(PNG_sPLT_SUPPORTED) 2266*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_set_sPLT) PNGARG((png_structp png_ptr, 2267*593dc095SDavid du Colombier png_infop info_ptr, png_sPLT_tp entries, int nentries)); 2268*593dc095SDavid du Colombier #endif 2269*593dc095SDavid du Colombier 2270*593dc095SDavid du Colombier #if defined(PNG_TEXT_SUPPORTED) 2271*593dc095SDavid du Colombier /* png_get_text also returns the number of text chunks in *num_text */ 22727dd7cddfSDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_text) PNGARG((png_structp png_ptr, 22737dd7cddfSDavid du Colombier png_infop info_ptr, png_textp *text_ptr, int *num_text)); 2274*593dc095SDavid du Colombier #endif 22757dd7cddfSDavid du Colombier 2276*593dc095SDavid du Colombier /* 2277*593dc095SDavid du Colombier * Note while png_set_text() will accept a structure whose text, 2278*593dc095SDavid du Colombier * language, and translated keywords are NULL pointers, the structure 2279*593dc095SDavid du Colombier * returned by png_get_text will always contain regular 2280*593dc095SDavid du Colombier * zero-terminated C strings. They might be empty strings but 2281*593dc095SDavid du Colombier * they will never be NULL pointers. 2282*593dc095SDavid du Colombier */ 2283*593dc095SDavid du Colombier 2284*593dc095SDavid du Colombier #if defined(PNG_TEXT_SUPPORTED) 22857dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_text) PNGARG((png_structp png_ptr, 22867dd7cddfSDavid du Colombier png_infop info_ptr, png_textp text_ptr, int num_text)); 2287*593dc095SDavid du Colombier #endif 22887dd7cddfSDavid du Colombier 2289*593dc095SDavid du Colombier #if defined(PNG_tIME_SUPPORTED) 22907dd7cddfSDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_tIME) PNGARG((png_structp png_ptr, 22917dd7cddfSDavid du Colombier png_infop info_ptr, png_timep *mod_time)); 2292*593dc095SDavid du Colombier #endif 22937dd7cddfSDavid du Colombier 2294*593dc095SDavid du Colombier #if defined(PNG_tIME_SUPPORTED) 22957dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_tIME) PNGARG((png_structp png_ptr, 22967dd7cddfSDavid du Colombier png_infop info_ptr, png_timep mod_time)); 2297*593dc095SDavid du Colombier #endif 22987dd7cddfSDavid du Colombier 2299*593dc095SDavid du Colombier #if defined(PNG_tRNS_SUPPORTED) 23007dd7cddfSDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_tRNS) PNGARG((png_structp png_ptr, 23017dd7cddfSDavid du Colombier png_infop info_ptr, png_bytep *trans, int *num_trans, 23027dd7cddfSDavid du Colombier png_color_16p *trans_values)); 2303*593dc095SDavid du Colombier #endif 23047dd7cddfSDavid du Colombier 2305*593dc095SDavid du Colombier #if defined(PNG_tRNS_SUPPORTED) 23067dd7cddfSDavid du Colombier extern PNG_EXPORT(void,png_set_tRNS) PNGARG((png_structp png_ptr, 23077dd7cddfSDavid du Colombier png_infop info_ptr, png_bytep trans, int num_trans, 23087dd7cddfSDavid du Colombier png_color_16p trans_values)); 2309*593dc095SDavid du Colombier #endif 2310*593dc095SDavid du Colombier 2311*593dc095SDavid du Colombier #if defined(PNG_tRNS_SUPPORTED) 2312*593dc095SDavid du Colombier #endif 2313*593dc095SDavid du Colombier 2314*593dc095SDavid du Colombier #if defined(PNG_sCAL_SUPPORTED) 2315*593dc095SDavid du Colombier #ifdef PNG_FLOATING_POINT_SUPPORTED 2316*593dc095SDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_sCAL) PNGARG((png_structp png_ptr, 2317*593dc095SDavid du Colombier png_infop info_ptr, int *unit, double *width, double *height)); 2318*593dc095SDavid du Colombier #else 2319*593dc095SDavid du Colombier #ifdef PNG_FIXED_POINT_SUPPORTED 2320*593dc095SDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_sCAL_s) PNGARG((png_structp png_ptr, 2321*593dc095SDavid du Colombier png_infop info_ptr, int *unit, png_charpp swidth, png_charpp sheight)); 2322*593dc095SDavid du Colombier #endif 2323*593dc095SDavid du Colombier #endif 2324*593dc095SDavid du Colombier #endif /* PNG_sCAL_SUPPORTED */ 2325*593dc095SDavid du Colombier 2326*593dc095SDavid du Colombier #if defined(PNG_sCAL_SUPPORTED) 2327*593dc095SDavid du Colombier #ifdef PNG_FLOATING_POINT_SUPPORTED 2328*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_set_sCAL) PNGARG((png_structp png_ptr, 2329*593dc095SDavid du Colombier png_infop info_ptr, int unit, double width, double height)); 2330*593dc095SDavid du Colombier #endif 2331*593dc095SDavid du Colombier #ifdef PNG_FIXED_POINT_SUPPORTED 2332*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_set_sCAL_s) PNGARG((png_structp png_ptr, 2333*593dc095SDavid du Colombier png_infop info_ptr, int unit, png_charp swidth, png_charp sheight)); 2334*593dc095SDavid du Colombier #endif 2335*593dc095SDavid du Colombier #endif /* PNG_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */ 2336*593dc095SDavid du Colombier 2337*593dc095SDavid du Colombier #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) 2338*593dc095SDavid du Colombier /* provide a list of chunks and how they are to be handled, if the built-in 2339*593dc095SDavid du Colombier handling or default unknown chunk handling is not desired. Any chunks not 2340*593dc095SDavid du Colombier listed will be handled in the default manner. The IHDR and IEND chunks 2341*593dc095SDavid du Colombier must not be listed. 2342*593dc095SDavid du Colombier keep = 0: follow default behavour 2343*593dc095SDavid du Colombier = 1: do not keep 2344*593dc095SDavid du Colombier = 2: keep only if safe-to-copy 2345*593dc095SDavid du Colombier = 3: keep even if unsafe-to-copy 2346*593dc095SDavid du Colombier */ 2347*593dc095SDavid du Colombier extern PNG_EXPORT(void, png_set_keep_unknown_chunks) PNGARG((png_structp 2348*593dc095SDavid du Colombier png_ptr, int keep, png_bytep chunk_list, int num_chunks)); 2349*593dc095SDavid du Colombier extern PNG_EXPORT(void, png_set_unknown_chunks) PNGARG((png_structp png_ptr, 2350*593dc095SDavid du Colombier png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns)); 2351*593dc095SDavid du Colombier extern PNG_EXPORT(void, png_set_unknown_chunk_location) 2352*593dc095SDavid du Colombier PNGARG((png_structp png_ptr, png_infop info_ptr, int chunk, int location)); 2353*593dc095SDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_unknown_chunks) PNGARG((png_structp 2354*593dc095SDavid du Colombier png_ptr, png_infop info_ptr, png_unknown_chunkpp entries)); 2355*593dc095SDavid du Colombier #endif 2356*593dc095SDavid du Colombier #ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED 2357*593dc095SDavid du Colombier PNG_EXPORT(int,png_handle_as_unknown) PNGARG((png_structp png_ptr, png_bytep 2358*593dc095SDavid du Colombier chunk_name)); 2359*593dc095SDavid du Colombier #endif 2360*593dc095SDavid du Colombier 2361*593dc095SDavid du Colombier /* Png_free_data() will turn off the "valid" flag for anything it frees. 2362*593dc095SDavid du Colombier If you need to turn it off for a chunk that your application has freed, 2363*593dc095SDavid du Colombier you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK); */ 2364*593dc095SDavid du Colombier extern PNG_EXPORT(void, png_set_invalid) PNGARG((png_structp png_ptr, 2365*593dc095SDavid du Colombier png_infop info_ptr, int mask)); 2366*593dc095SDavid du Colombier 2367*593dc095SDavid du Colombier #if defined(PNG_INFO_IMAGE_SUPPORTED) 2368*593dc095SDavid du Colombier /* The "params" pointer is currently not used and is for future expansion. */ 2369*593dc095SDavid du Colombier extern PNG_EXPORT(void, png_read_png) PNGARG((png_structp png_ptr, 2370*593dc095SDavid du Colombier png_infop info_ptr, 2371*593dc095SDavid du Colombier int transforms, 2372*593dc095SDavid du Colombier png_voidp params)); 2373*593dc095SDavid du Colombier extern PNG_EXPORT(void, png_write_png) PNGARG((png_structp png_ptr, 2374*593dc095SDavid du Colombier png_infop info_ptr, 2375*593dc095SDavid du Colombier int transforms, 2376*593dc095SDavid du Colombier png_voidp params)); 2377*593dc095SDavid du Colombier #endif 23787dd7cddfSDavid du Colombier 23797dd7cddfSDavid du Colombier /* Define PNG_DEBUG at compile time for debugging information. Higher 23807dd7cddfSDavid du Colombier * numbers for PNG_DEBUG mean more debugging information. This has 23817dd7cddfSDavid du Colombier * only been added since version 0.95 so it is not implemented throughout 23827dd7cddfSDavid du Colombier * libpng yet, but more support will be added as needed. 23837dd7cddfSDavid du Colombier */ 2384*593dc095SDavid du Colombier #ifdef PNG_DEBUG 23857dd7cddfSDavid du Colombier #if (PNG_DEBUG > 0) 2386*593dc095SDavid du Colombier #if !defined(PNG_DEBUG_FILE) && defined(_MSC_VER) 2387*593dc095SDavid du Colombier #include <crtdbg.h> 2388*593dc095SDavid du Colombier #if (PNG_DEBUG > 1) 2389*593dc095SDavid du Colombier #define png_debug(l,m) _RPT0(_CRT_WARN,m) 2390*593dc095SDavid du Colombier #define png_debug1(l,m,p1) _RPT1(_CRT_WARN,m,p1) 2391*593dc095SDavid du Colombier #define png_debug2(l,m,p1,p2) _RPT2(_CRT_WARN,m,p1,p2) 23927dd7cddfSDavid du Colombier #endif 2393*593dc095SDavid du Colombier #else /* PNG_DEBUG_FILE || !_MSC_VER */ 23947dd7cddfSDavid du Colombier #ifndef PNG_DEBUG_FILE 23957dd7cddfSDavid du Colombier #define PNG_DEBUG_FILE stderr 23967dd7cddfSDavid du Colombier #endif /* PNG_DEBUG_FILE */ 2397*593dc095SDavid du Colombier #if (PNG_DEBUG > 1) 2398*593dc095SDavid du Colombier #define png_debug(l,m) \ 2399*593dc095SDavid du Colombier { \ 2400*593dc095SDavid du Colombier int num_tabs=l; \ 2401*593dc095SDavid du Colombier fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \ 2402*593dc095SDavid du Colombier (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":"")))); \ 2403*593dc095SDavid du Colombier } 2404*593dc095SDavid du Colombier #define png_debug1(l,m,p1) \ 2405*593dc095SDavid du Colombier { \ 2406*593dc095SDavid du Colombier int num_tabs=l; \ 2407*593dc095SDavid du Colombier fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \ 2408*593dc095SDavid du Colombier (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1); \ 2409*593dc095SDavid du Colombier } 2410*593dc095SDavid du Colombier #define png_debug2(l,m,p1,p2) \ 2411*593dc095SDavid du Colombier { \ 2412*593dc095SDavid du Colombier int num_tabs=l; \ 2413*593dc095SDavid du Colombier fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \ 2414*593dc095SDavid du Colombier (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1,p2); \ 2415*593dc095SDavid du Colombier } 2416*593dc095SDavid du Colombier #endif /* (PNG_DEBUG > 1) */ 2417*593dc095SDavid du Colombier #endif /* _MSC_VER */ 24187dd7cddfSDavid du Colombier #endif /* (PNG_DEBUG > 0) */ 2419*593dc095SDavid du Colombier #endif /* PNG_DEBUG */ 2420*593dc095SDavid du Colombier #ifndef png_debug 2421*593dc095SDavid du Colombier #define png_debug(l, m) 2422*593dc095SDavid du Colombier #endif 2423*593dc095SDavid du Colombier #ifndef png_debug1 2424*593dc095SDavid du Colombier #define png_debug1(l, m, p1) 2425*593dc095SDavid du Colombier #endif 2426*593dc095SDavid du Colombier #ifndef png_debug2 2427*593dc095SDavid du Colombier #define png_debug2(l, m, p1, p2) 2428*593dc095SDavid du Colombier #endif 2429*593dc095SDavid du Colombier 2430*593dc095SDavid du Colombier extern PNG_EXPORT(png_bytep,png_sig_bytes) PNGARG((void)); 2431*593dc095SDavid du Colombier 2432*593dc095SDavid du Colombier extern PNG_EXPORT(png_charp,png_get_copyright) PNGARG((png_structp png_ptr)); 2433*593dc095SDavid du Colombier extern PNG_EXPORT(png_charp,png_get_header_ver) PNGARG((png_structp png_ptr)); 2434*593dc095SDavid du Colombier extern PNG_EXPORT(png_charp,png_get_header_version) PNGARG((png_structp png_ptr)); 2435*593dc095SDavid du Colombier extern PNG_EXPORT(png_charp,png_get_libpng_ver) PNGARG((png_structp png_ptr)); 2436*593dc095SDavid du Colombier 2437*593dc095SDavid du Colombier #ifdef PNG_MNG_FEATURES_SUPPORTED 2438*593dc095SDavid du Colombier extern PNG_EXPORT(png_uint_32,png_permit_mng_features) PNGARG((png_structp 2439*593dc095SDavid du Colombier png_ptr, png_uint_32 mng_features_permitted)); 2440*593dc095SDavid du Colombier #endif 2441*593dc095SDavid du Colombier 2442*593dc095SDavid du Colombier /* For use in png_set_keep_unknown, added to version 1.2.6 */ 2443*593dc095SDavid du Colombier #define PNG_HANDLE_CHUNK_AS_DEFAULT 0 2444*593dc095SDavid du Colombier #define PNG_HANDLE_CHUNK_NEVER 1 2445*593dc095SDavid du Colombier #define PNG_HANDLE_CHUNK_IF_SAFE 2 2446*593dc095SDavid du Colombier #define PNG_HANDLE_CHUNK_ALWAYS 3 2447*593dc095SDavid du Colombier 2448*593dc095SDavid du Colombier /* Added to version 1.2.0 */ 2449*593dc095SDavid du Colombier #if defined(PNG_ASSEMBLER_CODE_SUPPORTED) 2450*593dc095SDavid du Colombier #define PNG_ASM_FLAG_MMX_SUPPORT_COMPILED 0x01 /* not user-settable */ 2451*593dc095SDavid du Colombier #define PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU 0x02 /* not user-settable */ 2452*593dc095SDavid du Colombier #define PNG_ASM_FLAG_MMX_READ_COMBINE_ROW 0x04 2453*593dc095SDavid du Colombier #define PNG_ASM_FLAG_MMX_READ_INTERLACE 0x08 2454*593dc095SDavid du Colombier #define PNG_ASM_FLAG_MMX_READ_FILTER_SUB 0x10 2455*593dc095SDavid du Colombier #define PNG_ASM_FLAG_MMX_READ_FILTER_UP 0x20 2456*593dc095SDavid du Colombier #define PNG_ASM_FLAG_MMX_READ_FILTER_AVG 0x40 2457*593dc095SDavid du Colombier #define PNG_ASM_FLAG_MMX_READ_FILTER_PAETH 0x80 2458*593dc095SDavid du Colombier #define PNG_ASM_FLAGS_INITIALIZED 0x80000000 /* not user-settable */ 2459*593dc095SDavid du Colombier 2460*593dc095SDavid du Colombier #define PNG_MMX_READ_FLAGS ( PNG_ASM_FLAG_MMX_READ_COMBINE_ROW \ 2461*593dc095SDavid du Colombier | PNG_ASM_FLAG_MMX_READ_INTERLACE \ 2462*593dc095SDavid du Colombier | PNG_ASM_FLAG_MMX_READ_FILTER_SUB \ 2463*593dc095SDavid du Colombier | PNG_ASM_FLAG_MMX_READ_FILTER_UP \ 2464*593dc095SDavid du Colombier | PNG_ASM_FLAG_MMX_READ_FILTER_AVG \ 2465*593dc095SDavid du Colombier | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH ) 2466*593dc095SDavid du Colombier #define PNG_MMX_WRITE_FLAGS ( 0 ) 2467*593dc095SDavid du Colombier 2468*593dc095SDavid du Colombier #define PNG_MMX_FLAGS ( PNG_ASM_FLAG_MMX_SUPPORT_COMPILED \ 2469*593dc095SDavid du Colombier | PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU \ 2470*593dc095SDavid du Colombier | PNG_MMX_READ_FLAGS \ 2471*593dc095SDavid du Colombier | PNG_MMX_WRITE_FLAGS ) 2472*593dc095SDavid du Colombier 2473*593dc095SDavid du Colombier #define PNG_SELECT_READ 1 2474*593dc095SDavid du Colombier #define PNG_SELECT_WRITE 2 2475*593dc095SDavid du Colombier 2476*593dc095SDavid du Colombier #if !defined(PNG_1_0_X) 2477*593dc095SDavid du Colombier /* pngget.c */ 2478*593dc095SDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_mmx_flagmask) 2479*593dc095SDavid du Colombier PNGARG((int flag_select, int *compilerID)); 2480*593dc095SDavid du Colombier 2481*593dc095SDavid du Colombier /* pngget.c */ 2482*593dc095SDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_asm_flagmask) 2483*593dc095SDavid du Colombier PNGARG((int flag_select)); 2484*593dc095SDavid du Colombier 2485*593dc095SDavid du Colombier /* pngget.c */ 2486*593dc095SDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_asm_flags) 2487*593dc095SDavid du Colombier PNGARG((png_structp png_ptr)); 2488*593dc095SDavid du Colombier 2489*593dc095SDavid du Colombier /* pngget.c */ 2490*593dc095SDavid du Colombier extern PNG_EXPORT(png_byte,png_get_mmx_bitdepth_threshold) 2491*593dc095SDavid du Colombier PNGARG((png_structp png_ptr)); 2492*593dc095SDavid du Colombier 2493*593dc095SDavid du Colombier /* pngget.c */ 2494*593dc095SDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_mmx_rowbytes_threshold) 2495*593dc095SDavid du Colombier PNGARG((png_structp png_ptr)); 2496*593dc095SDavid du Colombier 2497*593dc095SDavid du Colombier /* pngset.c */ 2498*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_set_asm_flags) 2499*593dc095SDavid du Colombier PNGARG((png_structp png_ptr, png_uint_32 asm_flags)); 2500*593dc095SDavid du Colombier 2501*593dc095SDavid du Colombier /* pngset.c */ 2502*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_set_mmx_thresholds) 2503*593dc095SDavid du Colombier PNGARG((png_structp png_ptr, png_byte mmx_bitdepth_threshold, 2504*593dc095SDavid du Colombier png_uint_32 mmx_rowbytes_threshold)); 2505*593dc095SDavid du Colombier 2506*593dc095SDavid du Colombier #endif /* PNG_1_0_X */ 2507*593dc095SDavid du Colombier #endif /* PNG_ASSEMBLER_CODE_SUPPORTED */ 2508*593dc095SDavid du Colombier 2509*593dc095SDavid du Colombier #if !defined(PNG_1_0_X) 2510*593dc095SDavid du Colombier /* png.c, pnggccrd.c, or pngvcrd.c */ 2511*593dc095SDavid du Colombier extern PNG_EXPORT(int,png_mmx_support) PNGARG((void)); 2512*593dc095SDavid du Colombier 2513*593dc095SDavid du Colombier /* Strip the prepended error numbers ("#nnn ") from error and warning 2514*593dc095SDavid du Colombier * messages before passing them to the error or warning handler. */ 2515*593dc095SDavid du Colombier #ifdef PNG_ERROR_NUMBERS_SUPPORTED 2516*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_set_strip_error_numbers) PNGARG((png_structp 2517*593dc095SDavid du Colombier png_ptr, png_uint_32 strip_mode)); 2518*593dc095SDavid du Colombier #endif 2519*593dc095SDavid du Colombier 2520*593dc095SDavid du Colombier #endif /* PNG_1_0_X */ 2521*593dc095SDavid du Colombier 2522*593dc095SDavid du Colombier /* Added at libpng-1.2.6 */ 2523*593dc095SDavid du Colombier #ifdef PNG_SET_USER_LIMITS_SUPPORTED 2524*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_set_user_limits) PNGARG((png_structp 2525*593dc095SDavid du Colombier png_ptr, png_uint_32 user_width_max, png_uint_32 user_height_max)); 2526*593dc095SDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_user_width_max) PNGARG((png_structp 2527*593dc095SDavid du Colombier png_ptr)); 2528*593dc095SDavid du Colombier extern PNG_EXPORT(png_uint_32,png_get_user_height_max) PNGARG((png_structp 2529*593dc095SDavid du Colombier png_ptr)); 2530*593dc095SDavid du Colombier #endif 2531*593dc095SDavid du Colombier 2532*593dc095SDavid du Colombier /* Maintainer: Put new public prototypes here ^, in libpng.3, and project defs */ 2533*593dc095SDavid du Colombier 2534*593dc095SDavid du Colombier #ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED 2535*593dc095SDavid du Colombier /* With these routines we avoid an integer divide, which will be slower on 2536*593dc095SDavid du Colombier * most machines. However, it does take more operations than the corresponding 2537*593dc095SDavid du Colombier * divide method, so it may be slower on a few RISC systems. There are two 2538*593dc095SDavid du Colombier * shifts (by 8 or 16 bits) and an addition, versus a single integer divide. 2539*593dc095SDavid du Colombier * 2540*593dc095SDavid du Colombier * Note that the rounding factors are NOT supposed to be the same! 128 and 2541*593dc095SDavid du Colombier * 32768 are correct for the NODIV code; 127 and 32767 are correct for the 2542*593dc095SDavid du Colombier * standard method. 2543*593dc095SDavid du Colombier * 2544*593dc095SDavid du Colombier * [Optimized code by Greg Roelofs and Mark Adler...blame us for bugs. :-) ] 2545*593dc095SDavid du Colombier */ 2546*593dc095SDavid du Colombier 2547*593dc095SDavid du Colombier /* fg and bg should be in `gamma 1.0' space; alpha is the opacity */ 2548*593dc095SDavid du Colombier 2549*593dc095SDavid du Colombier # define png_composite(composite, fg, alpha, bg) \ 2550*593dc095SDavid du Colombier { png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) * (png_uint_16)(alpha) \ 2551*593dc095SDavid du Colombier + (png_uint_16)(bg)*(png_uint_16)(255 - \ 2552*593dc095SDavid du Colombier (png_uint_16)(alpha)) + (png_uint_16)128); \ 2553*593dc095SDavid du Colombier (composite) = (png_byte)((temp + (temp >> 8)) >> 8); } 2554*593dc095SDavid du Colombier 2555*593dc095SDavid du Colombier # define png_composite_16(composite, fg, alpha, bg) \ 2556*593dc095SDavid du Colombier { png_uint_32 temp = (png_uint_32)((png_uint_32)(fg) * (png_uint_32)(alpha) \ 2557*593dc095SDavid du Colombier + (png_uint_32)(bg)*(png_uint_32)(65535L - \ 2558*593dc095SDavid du Colombier (png_uint_32)(alpha)) + (png_uint_32)32768L); \ 2559*593dc095SDavid du Colombier (composite) = (png_uint_16)((temp + (temp >> 16)) >> 16); } 2560*593dc095SDavid du Colombier 2561*593dc095SDavid du Colombier #else /* standard method using integer division */ 2562*593dc095SDavid du Colombier 2563*593dc095SDavid du Colombier # define png_composite(composite, fg, alpha, bg) \ 2564*593dc095SDavid du Colombier (composite) = (png_byte)(((png_uint_16)(fg) * (png_uint_16)(alpha) + \ 2565*593dc095SDavid du Colombier (png_uint_16)(bg) * (png_uint_16)(255 - (png_uint_16)(alpha)) + \ 2566*593dc095SDavid du Colombier (png_uint_16)127) / 255) 2567*593dc095SDavid du Colombier 2568*593dc095SDavid du Colombier # define png_composite_16(composite, fg, alpha, bg) \ 2569*593dc095SDavid du Colombier (composite) = (png_uint_16)(((png_uint_32)(fg) * (png_uint_32)(alpha) + \ 2570*593dc095SDavid du Colombier (png_uint_32)(bg)*(png_uint_32)(65535L - (png_uint_32)(alpha)) + \ 2571*593dc095SDavid du Colombier (png_uint_32)32767) / (png_uint_32)65535L) 2572*593dc095SDavid du Colombier 2573*593dc095SDavid du Colombier #endif /* PNG_READ_COMPOSITE_NODIV_SUPPORTED */ 25747dd7cddfSDavid du Colombier 25757dd7cddfSDavid du Colombier /* These next functions are used internally in the code. They generally 25767dd7cddfSDavid du Colombier * shouldn't be used unless you are writing code to add or replace some 25777dd7cddfSDavid du Colombier * functionality in libpng. More information about most functions can 25787dd7cddfSDavid du Colombier * be found in the files where the functions are located. 25797dd7cddfSDavid du Colombier */ 25807dd7cddfSDavid du Colombier 25817dd7cddfSDavid du Colombier #if defined(PNG_INTERNAL) 25827dd7cddfSDavid du Colombier 25837dd7cddfSDavid du Colombier /* Various modes of operation. Note that after an init, mode is set to 25847dd7cddfSDavid du Colombier * zero automatically when the structure is created. 25857dd7cddfSDavid du Colombier */ 25867dd7cddfSDavid du Colombier #define PNG_HAVE_IHDR 0x01 25877dd7cddfSDavid du Colombier #define PNG_HAVE_PLTE 0x02 25887dd7cddfSDavid du Colombier #define PNG_HAVE_IDAT 0x04 25897dd7cddfSDavid du Colombier #define PNG_AFTER_IDAT 0x08 25907dd7cddfSDavid du Colombier #define PNG_HAVE_IEND 0x10 25917dd7cddfSDavid du Colombier #define PNG_HAVE_gAMA 0x20 25927dd7cddfSDavid du Colombier #define PNG_HAVE_cHRM 0x40 25937dd7cddfSDavid du Colombier #define PNG_HAVE_sRGB 0x80 2594*593dc095SDavid du Colombier #define PNG_HAVE_CHUNK_HEADER 0x100 2595*593dc095SDavid du Colombier #define PNG_WROTE_tIME 0x200 2596*593dc095SDavid du Colombier #define PNG_WROTE_INFO_BEFORE_PLTE 0x400 2597*593dc095SDavid du Colombier #define PNG_BACKGROUND_IS_GRAY 0x800 2598*593dc095SDavid du Colombier #define PNG_HAVE_PNG_SIGNATURE 0x1000 25997dd7cddfSDavid du Colombier 26007dd7cddfSDavid du Colombier /* flags for the transformations the PNG library does on the image data */ 26017dd7cddfSDavid du Colombier #define PNG_BGR 0x0001 26027dd7cddfSDavid du Colombier #define PNG_INTERLACE 0x0002 26037dd7cddfSDavid du Colombier #define PNG_PACK 0x0004 26047dd7cddfSDavid du Colombier #define PNG_SHIFT 0x0008 26057dd7cddfSDavid du Colombier #define PNG_SWAP_BYTES 0x0010 26067dd7cddfSDavid du Colombier #define PNG_INVERT_MONO 0x0020 26077dd7cddfSDavid du Colombier #define PNG_DITHER 0x0040 26087dd7cddfSDavid du Colombier #define PNG_BACKGROUND 0x0080 26097dd7cddfSDavid du Colombier #define PNG_BACKGROUND_EXPAND 0x0100 2610*593dc095SDavid du Colombier /* 0x0200 unused */ 26117dd7cddfSDavid du Colombier #define PNG_16_TO_8 0x0400 26127dd7cddfSDavid du Colombier #define PNG_RGBA 0x0800 26137dd7cddfSDavid du Colombier #define PNG_EXPAND 0x1000 26147dd7cddfSDavid du Colombier #define PNG_GAMMA 0x2000 26157dd7cddfSDavid du Colombier #define PNG_GRAY_TO_RGB 0x4000 2616*593dc095SDavid du Colombier #define PNG_FILLER 0x8000L 26177dd7cddfSDavid du Colombier #define PNG_PACKSWAP 0x10000L 26187dd7cddfSDavid du Colombier #define PNG_SWAP_ALPHA 0x20000L 26197dd7cddfSDavid du Colombier #define PNG_STRIP_ALPHA 0x40000L 26207dd7cddfSDavid du Colombier #define PNG_INVERT_ALPHA 0x80000L 2621*593dc095SDavid du Colombier #define PNG_USER_TRANSFORM 0x100000L 2622*593dc095SDavid du Colombier #define PNG_RGB_TO_GRAY_ERR 0x200000L 2623*593dc095SDavid du Colombier #define PNG_RGB_TO_GRAY_WARN 0x400000L 2624*593dc095SDavid du Colombier #define PNG_RGB_TO_GRAY 0x600000L /* two bits, RGB_TO_GRAY_ERR|WARN */ 2625*593dc095SDavid du Colombier /* 0x800000L Unused */ 2626*593dc095SDavid du Colombier #define PNG_ADD_ALPHA 0x1000000L /* Added to libpng-1.2.7 */ 2627*593dc095SDavid du Colombier /* 0x2000000L unused */ 2628*593dc095SDavid du Colombier /* 0x4000000L unused */ 2629*593dc095SDavid du Colombier /* 0x8000000L unused */ 2630*593dc095SDavid du Colombier /* 0x10000000L unused */ 2631*593dc095SDavid du Colombier /* 0x20000000L unused */ 2632*593dc095SDavid du Colombier /* 0x40000000L unused */ 26337dd7cddfSDavid du Colombier 26347dd7cddfSDavid du Colombier /* flags for png_create_struct */ 26357dd7cddfSDavid du Colombier #define PNG_STRUCT_PNG 0x0001 26367dd7cddfSDavid du Colombier #define PNG_STRUCT_INFO 0x0002 26377dd7cddfSDavid du Colombier 26387dd7cddfSDavid du Colombier /* Scaling factor for filter heuristic weighting calculations */ 26397dd7cddfSDavid du Colombier #define PNG_WEIGHT_SHIFT 8 26407dd7cddfSDavid du Colombier #define PNG_WEIGHT_FACTOR (1<<(PNG_WEIGHT_SHIFT)) 26417dd7cddfSDavid du Colombier #define PNG_COST_SHIFT 3 26427dd7cddfSDavid du Colombier #define PNG_COST_FACTOR (1<<(PNG_COST_SHIFT)) 26437dd7cddfSDavid du Colombier 26447dd7cddfSDavid du Colombier /* flags for the png_ptr->flags rather than declaring a byte for each one */ 26457dd7cddfSDavid du Colombier #define PNG_FLAG_ZLIB_CUSTOM_STRATEGY 0x0001 26467dd7cddfSDavid du Colombier #define PNG_FLAG_ZLIB_CUSTOM_LEVEL 0x0002 26477dd7cddfSDavid du Colombier #define PNG_FLAG_ZLIB_CUSTOM_MEM_LEVEL 0x0004 26487dd7cddfSDavid du Colombier #define PNG_FLAG_ZLIB_CUSTOM_WINDOW_BITS 0x0008 26497dd7cddfSDavid du Colombier #define PNG_FLAG_ZLIB_CUSTOM_METHOD 0x0010 26507dd7cddfSDavid du Colombier #define PNG_FLAG_ZLIB_FINISHED 0x0020 26517dd7cddfSDavid du Colombier #define PNG_FLAG_ROW_INIT 0x0040 26527dd7cddfSDavid du Colombier #define PNG_FLAG_FILLER_AFTER 0x0080 26537dd7cddfSDavid du Colombier #define PNG_FLAG_CRC_ANCILLARY_USE 0x0100 26547dd7cddfSDavid du Colombier #define PNG_FLAG_CRC_ANCILLARY_NOWARN 0x0200 26557dd7cddfSDavid du Colombier #define PNG_FLAG_CRC_CRITICAL_USE 0x0400 26567dd7cddfSDavid du Colombier #define PNG_FLAG_CRC_CRITICAL_IGNORE 0x0800 2657*593dc095SDavid du Colombier #define PNG_FLAG_FREE_PLTE 0x1000 2658*593dc095SDavid du Colombier #define PNG_FLAG_FREE_TRNS 0x2000 26597dd7cddfSDavid du Colombier #define PNG_FLAG_FREE_HIST 0x4000 2660*593dc095SDavid du Colombier #define PNG_FLAG_KEEP_UNKNOWN_CHUNKS 0x8000L 2661*593dc095SDavid du Colombier #define PNG_FLAG_KEEP_UNSAFE_CHUNKS 0x10000L 2662*593dc095SDavid du Colombier #define PNG_FLAG_LIBRARY_MISMATCH 0x20000L 2663*593dc095SDavid du Colombier #define PNG_FLAG_STRIP_ERROR_NUMBERS 0x40000L 2664*593dc095SDavid du Colombier #define PNG_FLAG_STRIP_ERROR_TEXT 0x80000L 2665*593dc095SDavid du Colombier #define PNG_FLAG_MALLOC_NULL_MEM_OK 0x100000L 2666*593dc095SDavid du Colombier #define PNG_FLAG_ADD_ALPHA 0x200000L /* Added to libpng-1.2.8 */ 2667*593dc095SDavid du Colombier #define PNG_FLAG_STRIP_ALPHA 0x400000L /* Added to libpng-1.2.8 */ 2668*593dc095SDavid du Colombier /* 0x800000L unused */ 2669*593dc095SDavid du Colombier /* 0x1000000L unused */ 2670*593dc095SDavid du Colombier /* 0x2000000L unused */ 2671*593dc095SDavid du Colombier /* 0x4000000L unused */ 2672*593dc095SDavid du Colombier /* 0x8000000L unused */ 2673*593dc095SDavid du Colombier /* 0x10000000L unused */ 2674*593dc095SDavid du Colombier /* 0x20000000L unused */ 2675*593dc095SDavid du Colombier /* 0x40000000L unused */ 26767dd7cddfSDavid du Colombier 26777dd7cddfSDavid du Colombier #define PNG_FLAG_CRC_ANCILLARY_MASK (PNG_FLAG_CRC_ANCILLARY_USE | \ 26787dd7cddfSDavid du Colombier PNG_FLAG_CRC_ANCILLARY_NOWARN) 26797dd7cddfSDavid du Colombier 26807dd7cddfSDavid du Colombier #define PNG_FLAG_CRC_CRITICAL_MASK (PNG_FLAG_CRC_CRITICAL_USE | \ 26817dd7cddfSDavid du Colombier PNG_FLAG_CRC_CRITICAL_IGNORE) 26827dd7cddfSDavid du Colombier 26837dd7cddfSDavid du Colombier #define PNG_FLAG_CRC_MASK (PNG_FLAG_CRC_ANCILLARY_MASK | \ 26847dd7cddfSDavid du Colombier PNG_FLAG_CRC_CRITICAL_MASK) 26857dd7cddfSDavid du Colombier 26867dd7cddfSDavid du Colombier /* save typing and make code easier to understand */ 2687*593dc095SDavid du Colombier 26887dd7cddfSDavid du Colombier #define PNG_COLOR_DIST(c1, c2) (abs((int)((c1).red) - (int)((c2).red)) + \ 26897dd7cddfSDavid du Colombier abs((int)((c1).green) - (int)((c2).green)) + \ 26907dd7cddfSDavid du Colombier abs((int)((c1).blue) - (int)((c2).blue))) 26917dd7cddfSDavid du Colombier 2692*593dc095SDavid du Colombier /* Added to libpng-1.2.6 JB */ 2693*593dc095SDavid du Colombier #define PNG_ROWBYTES(pixel_bits, width) \ 2694*593dc095SDavid du Colombier ((pixel_bits) >= 8 ? \ 2695*593dc095SDavid du Colombier ((width) * (((png_uint_32)(pixel_bits)) >> 3)) : \ 2696*593dc095SDavid du Colombier (( ((width) * ((png_uint_32)(pixel_bits))) + 7) >> 3) ) 2697*593dc095SDavid du Colombier 2698*593dc095SDavid du Colombier /* PNG_OUT_OF_RANGE returns true if value is outside the range 2699*593dc095SDavid du Colombier ideal-delta..ideal+delta. Each argument is evaluated twice. 2700*593dc095SDavid du Colombier "ideal" and "delta" should be constants, normally simple 2701*593dc095SDavid du Colombier integers, "value" a variable. Added to libpng-1.2.6 JB */ 2702*593dc095SDavid du Colombier #define PNG_OUT_OF_RANGE(value, ideal, delta) \ 2703*593dc095SDavid du Colombier ( (value) < (ideal)-(delta) || (value) > (ideal)+(delta) ) 2704*593dc095SDavid du Colombier 27057dd7cddfSDavid du Colombier /* variables declared in png.c - only it needs to define PNG_NO_EXTERN */ 2706*593dc095SDavid du Colombier #if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN) 27077dd7cddfSDavid du Colombier /* place to hold the signature string for a PNG file. */ 2708*593dc095SDavid du Colombier #ifdef PNG_USE_GLOBAL_ARRAYS 2709*593dc095SDavid du Colombier PNG_EXPORT_VAR (const png_byte FARDATA) png_sig[8]; 2710*593dc095SDavid du Colombier #else 2711*593dc095SDavid du Colombier #define png_sig png_sig_bytes(NULL) 2712*593dc095SDavid du Colombier #endif 2713*593dc095SDavid du Colombier #endif /* PNG_NO_EXTERN */ 27147dd7cddfSDavid du Colombier 27157dd7cddfSDavid du Colombier /* Constant strings for known chunk types. If you need to add a chunk, 2716*593dc095SDavid du Colombier * define the name here, and add an invocation of the macro in png.c and 2717*593dc095SDavid du Colombier * wherever it's needed. 27187dd7cddfSDavid du Colombier */ 2719*593dc095SDavid du Colombier #define PNG_IHDR const png_byte png_IHDR[5] = { 73, 72, 68, 82, '\0'} 2720*593dc095SDavid du Colombier #define PNG_IDAT const png_byte png_IDAT[5] = { 73, 68, 65, 84, '\0'} 2721*593dc095SDavid du Colombier #define PNG_IEND const png_byte png_IEND[5] = { 73, 69, 78, 68, '\0'} 2722*593dc095SDavid du Colombier #define PNG_PLTE const png_byte png_PLTE[5] = { 80, 76, 84, 69, '\0'} 2723*593dc095SDavid du Colombier #define PNG_bKGD const png_byte png_bKGD[5] = { 98, 75, 71, 68, '\0'} 2724*593dc095SDavid du Colombier #define PNG_cHRM const png_byte png_cHRM[5] = { 99, 72, 82, 77, '\0'} 2725*593dc095SDavid du Colombier #define PNG_gAMA const png_byte png_gAMA[5] = {103, 65, 77, 65, '\0'} 2726*593dc095SDavid du Colombier #define PNG_hIST const png_byte png_hIST[5] = {104, 73, 83, 84, '\0'} 2727*593dc095SDavid du Colombier #define PNG_iCCP const png_byte png_iCCP[5] = {105, 67, 67, 80, '\0'} 2728*593dc095SDavid du Colombier #define PNG_iTXt const png_byte png_iTXt[5] = {105, 84, 88, 116, '\0'} 2729*593dc095SDavid du Colombier #define PNG_oFFs const png_byte png_oFFs[5] = {111, 70, 70, 115, '\0'} 2730*593dc095SDavid du Colombier #define PNG_pCAL const png_byte png_pCAL[5] = {112, 67, 65, 76, '\0'} 2731*593dc095SDavid du Colombier #define PNG_sCAL const png_byte png_sCAL[5] = {115, 67, 65, 76, '\0'} 2732*593dc095SDavid du Colombier #define PNG_pHYs const png_byte png_pHYs[5] = {112, 72, 89, 115, '\0'} 2733*593dc095SDavid du Colombier #define PNG_sBIT const png_byte png_sBIT[5] = {115, 66, 73, 84, '\0'} 2734*593dc095SDavid du Colombier #define PNG_sPLT const png_byte png_sPLT[5] = {115, 80, 76, 84, '\0'} 2735*593dc095SDavid du Colombier #define PNG_sRGB const png_byte png_sRGB[5] = {115, 82, 71, 66, '\0'} 2736*593dc095SDavid du Colombier #define PNG_tEXt const png_byte png_tEXt[5] = {116, 69, 88, 116, '\0'} 2737*593dc095SDavid du Colombier #define PNG_tIME const png_byte png_tIME[5] = {116, 73, 77, 69, '\0'} 2738*593dc095SDavid du Colombier #define PNG_tRNS const png_byte png_tRNS[5] = {116, 82, 78, 83, '\0'} 2739*593dc095SDavid du Colombier #define PNG_zTXt const png_byte png_zTXt[5] = {122, 84, 88, 116, '\0'} 27407dd7cddfSDavid du Colombier 2741*593dc095SDavid du Colombier #ifdef PNG_USE_GLOBAL_ARRAYS 2742*593dc095SDavid du Colombier PNG_EXPORT_VAR (const png_byte FARDATA) png_IHDR[5]; 2743*593dc095SDavid du Colombier PNG_EXPORT_VAR (const png_byte FARDATA) png_IDAT[5]; 2744*593dc095SDavid du Colombier PNG_EXPORT_VAR (const png_byte FARDATA) png_IEND[5]; 2745*593dc095SDavid du Colombier PNG_EXPORT_VAR (const png_byte FARDATA) png_PLTE[5]; 2746*593dc095SDavid du Colombier PNG_EXPORT_VAR (const png_byte FARDATA) png_bKGD[5]; 2747*593dc095SDavid du Colombier PNG_EXPORT_VAR (const png_byte FARDATA) png_cHRM[5]; 2748*593dc095SDavid du Colombier PNG_EXPORT_VAR (const png_byte FARDATA) png_gAMA[5]; 2749*593dc095SDavid du Colombier PNG_EXPORT_VAR (const png_byte FARDATA) png_hIST[5]; 2750*593dc095SDavid du Colombier PNG_EXPORT_VAR (const png_byte FARDATA) png_iCCP[5]; 2751*593dc095SDavid du Colombier PNG_EXPORT_VAR (const png_byte FARDATA) png_iTXt[5]; 2752*593dc095SDavid du Colombier PNG_EXPORT_VAR (const png_byte FARDATA) png_oFFs[5]; 2753*593dc095SDavid du Colombier PNG_EXPORT_VAR (const png_byte FARDATA) png_pCAL[5]; 2754*593dc095SDavid du Colombier PNG_EXPORT_VAR (const png_byte FARDATA) png_sCAL[5]; 2755*593dc095SDavid du Colombier PNG_EXPORT_VAR (const png_byte FARDATA) png_pHYs[5]; 2756*593dc095SDavid du Colombier PNG_EXPORT_VAR (const png_byte FARDATA) png_sBIT[5]; 2757*593dc095SDavid du Colombier PNG_EXPORT_VAR (const png_byte FARDATA) png_sPLT[5]; 2758*593dc095SDavid du Colombier PNG_EXPORT_VAR (const png_byte FARDATA) png_sRGB[5]; 2759*593dc095SDavid du Colombier PNG_EXPORT_VAR (const png_byte FARDATA) png_tEXt[5]; 2760*593dc095SDavid du Colombier PNG_EXPORT_VAR (const png_byte FARDATA) png_tIME[5]; 2761*593dc095SDavid du Colombier PNG_EXPORT_VAR (const png_byte FARDATA) png_tRNS[5]; 2762*593dc095SDavid du Colombier PNG_EXPORT_VAR (const png_byte FARDATA) png_zTXt[5]; 2763*593dc095SDavid du Colombier #endif /* PNG_USE_GLOBAL_ARRAYS */ 2764*593dc095SDavid du Colombier 27657dd7cddfSDavid du Colombier 27667dd7cddfSDavid du Colombier /* Inline macros to do direct reads of bytes from the input buffer. These 27677dd7cddfSDavid du Colombier * require that you are using an architecture that uses PNG byte ordering 27687dd7cddfSDavid du Colombier * (MSB first) and supports unaligned data storage. I think that PowerPC 27697dd7cddfSDavid du Colombier * in big-endian mode and 680x0 are the only ones that will support this. 27707dd7cddfSDavid du Colombier * The x86 line of processors definitely do not. The png_get_int_32() 27717dd7cddfSDavid du Colombier * routine also assumes we are using two's complement format for negative 27727dd7cddfSDavid du Colombier * values, which is almost certainly true. 27737dd7cddfSDavid du Colombier */ 27747dd7cddfSDavid du Colombier #if defined(PNG_READ_BIG_ENDIAN_SUPPORTED) 2775*593dc095SDavid du Colombier # if defined(PNG_pCAL_SUPPORTED) || defined(PNG_oFFs_SUPPORTED) 27767dd7cddfSDavid du Colombier # define png_get_int_32(buf) ( *((png_int_32p) (buf))) 2777*593dc095SDavid du Colombier # endif 27787dd7cddfSDavid du Colombier # define png_get_uint_32(buf) ( *((png_uint_32p) (buf))) 27797dd7cddfSDavid du Colombier # define png_get_uint_16(buf) ( *((png_uint_16p) (buf))) 27807dd7cddfSDavid du Colombier #else 2781*593dc095SDavid du Colombier # if defined(PNG_pCAL_SUPPORTED) || defined(PNG_oFFs_SUPPORTED) 27827dd7cddfSDavid du Colombier PNG_EXTERN png_int_32 png_get_int_32 PNGARG((png_bytep buf)); 2783*593dc095SDavid du Colombier # endif 27847dd7cddfSDavid du Colombier PNG_EXTERN png_uint_32 png_get_uint_32 PNGARG((png_bytep buf)); 27857dd7cddfSDavid du Colombier PNG_EXTERN png_uint_16 png_get_uint_16 PNGARG((png_bytep buf)); 2786*593dc095SDavid du Colombier #endif /* !PNG_READ_BIG_ENDIAN_SUPPORTED */ 2787*593dc095SDavid du Colombier PNG_EXTERN png_uint_32 png_get_uint_31 PNGARG((png_structp png_ptr, 2788*593dc095SDavid du Colombier png_bytep buf)); 27897dd7cddfSDavid du Colombier 27907dd7cddfSDavid du Colombier /* Initialize png_ptr struct for reading, and allocate any other memory. 2791*593dc095SDavid du Colombier * (old interface - DEPRECATED - use png_create_read_struct instead). 27927dd7cddfSDavid du Colombier */ 2793*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_read_init) PNGARG((png_structp png_ptr)); 2794*593dc095SDavid du Colombier #undef png_read_init 2795*593dc095SDavid du Colombier #define png_read_init(png_ptr) png_read_init_3(&png_ptr, \ 2796*593dc095SDavid du Colombier PNG_LIBPNG_VER_STRING, png_sizeof(png_struct)); 2797*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_read_init_3) PNGARG((png_structpp ptr_ptr, 2798*593dc095SDavid du Colombier png_const_charp user_png_ver, png_size_t png_struct_size)); 2799*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_read_init_2) PNGARG((png_structp png_ptr, 2800*593dc095SDavid du Colombier png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t 2801*593dc095SDavid du Colombier png_info_size)); 28027dd7cddfSDavid du Colombier 28037dd7cddfSDavid du Colombier /* Initialize png_ptr struct for writing, and allocate any other memory. 2804*593dc095SDavid du Colombier * (old interface - DEPRECATED - use png_create_write_struct instead). 28057dd7cddfSDavid du Colombier */ 2806*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_write_init) PNGARG((png_structp png_ptr)); 2807*593dc095SDavid du Colombier #undef png_write_init 2808*593dc095SDavid du Colombier #define png_write_init(png_ptr) png_write_init_3(&png_ptr, \ 2809*593dc095SDavid du Colombier PNG_LIBPNG_VER_STRING, png_sizeof(png_struct)); 2810*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_write_init_3) PNGARG((png_structpp ptr_ptr, 2811*593dc095SDavid du Colombier png_const_charp user_png_ver, png_size_t png_struct_size)); 2812*593dc095SDavid du Colombier extern PNG_EXPORT(void,png_write_init_2) PNGARG((png_structp png_ptr, 2813*593dc095SDavid du Colombier png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t 2814*593dc095SDavid du Colombier png_info_size)); 28157dd7cddfSDavid du Colombier 2816*593dc095SDavid du Colombier /* Allocate memory for an internal libpng struct */ 28177dd7cddfSDavid du Colombier PNG_EXTERN png_voidp png_create_struct PNGARG((int type)); 28187dd7cddfSDavid du Colombier 2819*593dc095SDavid du Colombier /* Free memory from internal libpng struct */ 28207dd7cddfSDavid du Colombier PNG_EXTERN void png_destroy_struct PNGARG((png_voidp struct_ptr)); 28217dd7cddfSDavid du Colombier 2822*593dc095SDavid du Colombier PNG_EXTERN png_voidp png_create_struct_2 PNGARG((int type, png_malloc_ptr 2823*593dc095SDavid du Colombier malloc_fn, png_voidp mem_ptr)); 2824*593dc095SDavid du Colombier PNG_EXTERN void png_destroy_struct_2 PNGARG((png_voidp struct_ptr, 2825*593dc095SDavid du Colombier png_free_ptr free_fn, png_voidp mem_ptr)); 2826*593dc095SDavid du Colombier 2827*593dc095SDavid du Colombier /* Free any memory that info_ptr points to and reset struct. */ 28287dd7cddfSDavid du Colombier PNG_EXTERN void png_info_destroy PNGARG((png_structp png_ptr, 28297dd7cddfSDavid du Colombier png_infop info_ptr)); 28307dd7cddfSDavid du Colombier 2831*593dc095SDavid du Colombier #ifndef PNG_1_0_X 28327dd7cddfSDavid du Colombier /* Function to allocate memory for zlib. */ 28337dd7cddfSDavid du Colombier PNG_EXTERN voidpf png_zalloc PNGARG((voidpf png_ptr, uInt items, uInt size)); 28347dd7cddfSDavid du Colombier 2835*593dc095SDavid du Colombier /* Function to free memory for zlib */ 28367dd7cddfSDavid du Colombier PNG_EXTERN void png_zfree PNGARG((voidpf png_ptr, voidpf ptr)); 28377dd7cddfSDavid du Colombier 2838*593dc095SDavid du Colombier #ifdef PNG_SIZE_T 2839*593dc095SDavid du Colombier /* Function to convert a sizeof an item to png_sizeof item */ 2840*593dc095SDavid du Colombier PNG_EXTERN png_size_t PNGAPI png_convert_size PNGARG((size_t size)); 2841*593dc095SDavid du Colombier #endif 2842*593dc095SDavid du Colombier 2843*593dc095SDavid du Colombier /* Next four functions are used internally as callbacks. PNGAPI is required 2844*593dc095SDavid du Colombier * but not PNG_EXPORT. PNGAPI added at libpng version 1.2.3. */ 2845*593dc095SDavid du Colombier 2846*593dc095SDavid du Colombier PNG_EXTERN void PNGAPI png_default_read_data PNGARG((png_structp png_ptr, 2847*593dc095SDavid du Colombier png_bytep data, png_size_t length)); 2848*593dc095SDavid du Colombier 2849*593dc095SDavid du Colombier #ifdef PNG_PROGRESSIVE_READ_SUPPORTED 2850*593dc095SDavid du Colombier PNG_EXTERN void PNGAPI png_push_fill_buffer PNGARG((png_structp png_ptr, 2851*593dc095SDavid du Colombier png_bytep buffer, png_size_t length)); 2852*593dc095SDavid du Colombier #endif 2853*593dc095SDavid du Colombier 2854*593dc095SDavid du Colombier PNG_EXTERN void PNGAPI png_default_write_data PNGARG((png_structp png_ptr, 2855*593dc095SDavid du Colombier png_bytep data, png_size_t length)); 2856*593dc095SDavid du Colombier 2857*593dc095SDavid du Colombier #if defined(PNG_WRITE_FLUSH_SUPPORTED) 2858*593dc095SDavid du Colombier #if !defined(PNG_NO_STDIO) 2859*593dc095SDavid du Colombier PNG_EXTERN void PNGAPI png_default_flush PNGARG((png_structp png_ptr)); 2860*593dc095SDavid du Colombier #endif 2861*593dc095SDavid du Colombier #endif 2862*593dc095SDavid du Colombier #else /* PNG_1_0_X */ 2863*593dc095SDavid du Colombier #ifdef PNG_PROGRESSIVE_READ_SUPPORTED 2864*593dc095SDavid du Colombier PNG_EXTERN void png_push_fill_buffer PNGARG((png_structp png_ptr, 2865*593dc095SDavid du Colombier png_bytep buffer, png_size_t length)); 2866*593dc095SDavid du Colombier #endif 2867*593dc095SDavid du Colombier #endif /* PNG_1_0_X */ 2868*593dc095SDavid du Colombier 2869*593dc095SDavid du Colombier /* Reset the CRC variable */ 28707dd7cddfSDavid du Colombier PNG_EXTERN void png_reset_crc PNGARG((png_structp png_ptr)); 28717dd7cddfSDavid du Colombier 28727dd7cddfSDavid du Colombier /* Write the "data" buffer to whatever output you are using. */ 28737dd7cddfSDavid du Colombier PNG_EXTERN void png_write_data PNGARG((png_structp png_ptr, png_bytep data, 28747dd7cddfSDavid du Colombier png_size_t length)); 28757dd7cddfSDavid du Colombier 28767dd7cddfSDavid du Colombier /* Read data from whatever input you are using into the "data" buffer */ 28777dd7cddfSDavid du Colombier PNG_EXTERN void png_read_data PNGARG((png_structp png_ptr, png_bytep data, 28787dd7cddfSDavid du Colombier png_size_t length)); 28797dd7cddfSDavid du Colombier 2880*593dc095SDavid du Colombier /* Read bytes into buf, and update png_ptr->crc */ 28817dd7cddfSDavid du Colombier PNG_EXTERN void png_crc_read PNGARG((png_structp png_ptr, png_bytep buf, 28827dd7cddfSDavid du Colombier png_size_t length)); 28837dd7cddfSDavid du Colombier 2884*593dc095SDavid du Colombier /* Decompress data in a chunk that uses compression */ 2885*593dc095SDavid du Colombier #if defined(PNG_zTXt_SUPPORTED) || defined(PNG_iTXt_SUPPORTED) || \ 2886*593dc095SDavid du Colombier defined(PNG_iCCP_SUPPORTED) || defined(PNG_sPLT_SUPPORTED) 2887*593dc095SDavid du Colombier PNG_EXTERN png_charp png_decompress_chunk PNGARG((png_structp png_ptr, 2888*593dc095SDavid du Colombier int comp_type, png_charp chunkdata, png_size_t chunklength, 2889*593dc095SDavid du Colombier png_size_t prefix_length, png_size_t *data_length)); 2890*593dc095SDavid du Colombier #endif 2891*593dc095SDavid du Colombier 2892*593dc095SDavid du Colombier /* Read "skip" bytes, read the file crc, and (optionally) verify png_ptr->crc */ 28937dd7cddfSDavid du Colombier PNG_EXTERN int png_crc_finish PNGARG((png_structp png_ptr, png_uint_32 skip)); 28947dd7cddfSDavid du Colombier 2895*593dc095SDavid du Colombier /* Read the CRC from the file and compare it to the libpng calculated CRC */ 28967dd7cddfSDavid du Colombier PNG_EXTERN int png_crc_error PNGARG((png_structp png_ptr)); 28977dd7cddfSDavid du Colombier 28987dd7cddfSDavid du Colombier /* Calculate the CRC over a section of data. Note that we are only 28997dd7cddfSDavid du Colombier * passing a maximum of 64K on systems that have this as a memory limit, 29007dd7cddfSDavid du Colombier * since this is the maximum buffer size we can specify. 29017dd7cddfSDavid du Colombier */ 29027dd7cddfSDavid du Colombier PNG_EXTERN void png_calculate_crc PNGARG((png_structp png_ptr, png_bytep ptr, 29037dd7cddfSDavid du Colombier png_size_t length)); 29047dd7cddfSDavid du Colombier 29057dd7cddfSDavid du Colombier #if defined(PNG_WRITE_FLUSH_SUPPORTED) 29067dd7cddfSDavid du Colombier PNG_EXTERN void png_flush PNGARG((png_structp png_ptr)); 29077dd7cddfSDavid du Colombier #endif 29087dd7cddfSDavid du Colombier 2909*593dc095SDavid du Colombier 29107dd7cddfSDavid du Colombier /* Place a 32-bit number into a buffer in PNG byte order (big-endian). 2911*593dc095SDavid du Colombier * The only currently known PNG chunks that use signed numbers are 2912*593dc095SDavid du Colombier * the ancillary extension chunks, oFFs and pCAL. 29137dd7cddfSDavid du Colombier */ 29147dd7cddfSDavid du Colombier PNG_EXTERN void png_save_uint_32 PNGARG((png_bytep buf, png_uint_32 i)); 29157dd7cddfSDavid du Colombier 2916*593dc095SDavid du Colombier #if defined(PNG_WRITE_pCAL_SUPPORTED) || defined(PNG_WRITE_oFFs_SUPPORTED) 29177dd7cddfSDavid du Colombier PNG_EXTERN void png_save_int_32 PNGARG((png_bytep buf, png_int_32 i)); 29187dd7cddfSDavid du Colombier #endif 29197dd7cddfSDavid du Colombier 2920*593dc095SDavid du Colombier /* Place a 16-bit number into a buffer in PNG byte order. 29217dd7cddfSDavid du Colombier * The parameter is declared unsigned int, not png_uint_16, 29227dd7cddfSDavid du Colombier * just to avoid potential problems on pre-ANSI C compilers. 29237dd7cddfSDavid du Colombier */ 29247dd7cddfSDavid du Colombier PNG_EXTERN void png_save_uint_16 PNGARG((png_bytep buf, unsigned int i)); 29257dd7cddfSDavid du Colombier 29267dd7cddfSDavid du Colombier /* simple function to write the signature */ 29277dd7cddfSDavid du Colombier PNG_EXTERN void png_write_sig PNGARG((png_structp png_ptr)); 29287dd7cddfSDavid du Colombier 29297dd7cddfSDavid du Colombier /* write various chunks */ 29307dd7cddfSDavid du Colombier 29317dd7cddfSDavid du Colombier /* Write the IHDR chunk, and update the png_struct with the necessary 29327dd7cddfSDavid du Colombier * information. 29337dd7cddfSDavid du Colombier */ 29347dd7cddfSDavid du Colombier PNG_EXTERN void png_write_IHDR PNGARG((png_structp png_ptr, png_uint_32 width, 29357dd7cddfSDavid du Colombier png_uint_32 height, 2936*593dc095SDavid du Colombier int bit_depth, int color_type, int compression_method, int filter_method, 2937*593dc095SDavid du Colombier int interlace_method)); 29387dd7cddfSDavid du Colombier 29397dd7cddfSDavid du Colombier PNG_EXTERN void png_write_PLTE PNGARG((png_structp png_ptr, png_colorp palette, 29407dd7cddfSDavid du Colombier png_uint_32 num_pal)); 29417dd7cddfSDavid du Colombier 29427dd7cddfSDavid du Colombier PNG_EXTERN void png_write_IDAT PNGARG((png_structp png_ptr, png_bytep data, 29437dd7cddfSDavid du Colombier png_size_t length)); 29447dd7cddfSDavid du Colombier 29457dd7cddfSDavid du Colombier PNG_EXTERN void png_write_IEND PNGARG((png_structp png_ptr)); 29467dd7cddfSDavid du Colombier 29477dd7cddfSDavid du Colombier #if defined(PNG_WRITE_gAMA_SUPPORTED) 2948*593dc095SDavid du Colombier #ifdef PNG_FLOATING_POINT_SUPPORTED 29497dd7cddfSDavid du Colombier PNG_EXTERN void png_write_gAMA PNGARG((png_structp png_ptr, double file_gamma)); 29507dd7cddfSDavid du Colombier #endif 2951*593dc095SDavid du Colombier #ifdef PNG_FIXED_POINT_SUPPORTED 2952*593dc095SDavid du Colombier PNG_EXTERN void png_write_gAMA_fixed PNGARG((png_structp png_ptr, png_fixed_point 2953*593dc095SDavid du Colombier file_gamma)); 2954*593dc095SDavid du Colombier #endif 2955*593dc095SDavid du Colombier #endif 29567dd7cddfSDavid du Colombier 29577dd7cddfSDavid du Colombier #if defined(PNG_WRITE_sBIT_SUPPORTED) 29587dd7cddfSDavid du Colombier PNG_EXTERN void png_write_sBIT PNGARG((png_structp png_ptr, png_color_8p sbit, 29597dd7cddfSDavid du Colombier int color_type)); 29607dd7cddfSDavid du Colombier #endif 29617dd7cddfSDavid du Colombier 29627dd7cddfSDavid du Colombier #if defined(PNG_WRITE_cHRM_SUPPORTED) 2963*593dc095SDavid du Colombier #ifdef PNG_FLOATING_POINT_SUPPORTED 29647dd7cddfSDavid du Colombier PNG_EXTERN void png_write_cHRM PNGARG((png_structp png_ptr, 29657dd7cddfSDavid du Colombier double white_x, double white_y, 29667dd7cddfSDavid du Colombier double red_x, double red_y, double green_x, double green_y, 29677dd7cddfSDavid du Colombier double blue_x, double blue_y)); 29687dd7cddfSDavid du Colombier #endif 2969*593dc095SDavid du Colombier #ifdef PNG_FIXED_POINT_SUPPORTED 2970*593dc095SDavid du Colombier PNG_EXTERN void png_write_cHRM_fixed PNGARG((png_structp png_ptr, 2971*593dc095SDavid du Colombier png_fixed_point int_white_x, png_fixed_point int_white_y, 2972*593dc095SDavid du Colombier png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point 2973*593dc095SDavid du Colombier int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x, 2974*593dc095SDavid du Colombier png_fixed_point int_blue_y)); 2975*593dc095SDavid du Colombier #endif 2976*593dc095SDavid du Colombier #endif 29777dd7cddfSDavid du Colombier 29787dd7cddfSDavid du Colombier #if defined(PNG_WRITE_sRGB_SUPPORTED) 29797dd7cddfSDavid du Colombier PNG_EXTERN void png_write_sRGB PNGARG((png_structp png_ptr, 29807dd7cddfSDavid du Colombier int intent)); 29817dd7cddfSDavid du Colombier #endif 29827dd7cddfSDavid du Colombier 2983*593dc095SDavid du Colombier #if defined(PNG_WRITE_iCCP_SUPPORTED) 2984*593dc095SDavid du Colombier PNG_EXTERN void png_write_iCCP PNGARG((png_structp png_ptr, 2985*593dc095SDavid du Colombier png_charp name, int compression_type, 2986*593dc095SDavid du Colombier png_charp profile, int proflen)); 2987*593dc095SDavid du Colombier /* Note to maintainer: profile should be png_bytep */ 2988*593dc095SDavid du Colombier #endif 2989*593dc095SDavid du Colombier 2990*593dc095SDavid du Colombier #if defined(PNG_WRITE_sPLT_SUPPORTED) 2991*593dc095SDavid du Colombier PNG_EXTERN void png_write_sPLT PNGARG((png_structp png_ptr, 2992*593dc095SDavid du Colombier png_sPLT_tp palette)); 2993*593dc095SDavid du Colombier #endif 2994*593dc095SDavid du Colombier 29957dd7cddfSDavid du Colombier #if defined(PNG_WRITE_tRNS_SUPPORTED) 29967dd7cddfSDavid du Colombier PNG_EXTERN void png_write_tRNS PNGARG((png_structp png_ptr, png_bytep trans, 29977dd7cddfSDavid du Colombier png_color_16p values, int number, int color_type)); 29987dd7cddfSDavid du Colombier #endif 29997dd7cddfSDavid du Colombier 30007dd7cddfSDavid du Colombier #if defined(PNG_WRITE_bKGD_SUPPORTED) 30017dd7cddfSDavid du Colombier PNG_EXTERN void png_write_bKGD PNGARG((png_structp png_ptr, 30027dd7cddfSDavid du Colombier png_color_16p values, int color_type)); 30037dd7cddfSDavid du Colombier #endif 30047dd7cddfSDavid du Colombier 30057dd7cddfSDavid du Colombier #if defined(PNG_WRITE_hIST_SUPPORTED) 30067dd7cddfSDavid du Colombier PNG_EXTERN void png_write_hIST PNGARG((png_structp png_ptr, png_uint_16p hist, 30077dd7cddfSDavid du Colombier int num_hist)); 30087dd7cddfSDavid du Colombier #endif 30097dd7cddfSDavid du Colombier 3010*593dc095SDavid du Colombier #if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_pCAL_SUPPORTED) || \ 3011*593dc095SDavid du Colombier defined(PNG_WRITE_iCCP_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED) 30127dd7cddfSDavid du Colombier PNG_EXTERN png_size_t png_check_keyword PNGARG((png_structp png_ptr, 30137dd7cddfSDavid du Colombier png_charp key, png_charpp new_key)); 30147dd7cddfSDavid du Colombier #endif 30157dd7cddfSDavid du Colombier 30167dd7cddfSDavid du Colombier #if defined(PNG_WRITE_tEXt_SUPPORTED) 30177dd7cddfSDavid du Colombier PNG_EXTERN void png_write_tEXt PNGARG((png_structp png_ptr, png_charp key, 30187dd7cddfSDavid du Colombier png_charp text, png_size_t text_len)); 30197dd7cddfSDavid du Colombier #endif 30207dd7cddfSDavid du Colombier 30217dd7cddfSDavid du Colombier #if defined(PNG_WRITE_zTXt_SUPPORTED) 30227dd7cddfSDavid du Colombier PNG_EXTERN void png_write_zTXt PNGARG((png_structp png_ptr, png_charp key, 30237dd7cddfSDavid du Colombier png_charp text, png_size_t text_len, int compression)); 30247dd7cddfSDavid du Colombier #endif 30257dd7cddfSDavid du Colombier 3026*593dc095SDavid du Colombier #if defined(PNG_WRITE_iTXt_SUPPORTED) 3027*593dc095SDavid du Colombier PNG_EXTERN void png_write_iTXt PNGARG((png_structp png_ptr, 3028*593dc095SDavid du Colombier int compression, png_charp key, png_charp lang, png_charp lang_key, 3029*593dc095SDavid du Colombier png_charp text)); 3030*593dc095SDavid du Colombier #endif 3031*593dc095SDavid du Colombier 3032*593dc095SDavid du Colombier #if defined(PNG_TEXT_SUPPORTED) /* Added at version 1.0.14 and 1.2.4 */ 3033*593dc095SDavid du Colombier PNG_EXTERN int png_set_text_2 PNGARG((png_structp png_ptr, 3034*593dc095SDavid du Colombier png_infop info_ptr, png_textp text_ptr, int num_text)); 3035*593dc095SDavid du Colombier #endif 3036*593dc095SDavid du Colombier 30377dd7cddfSDavid du Colombier #if defined(PNG_WRITE_oFFs_SUPPORTED) 30387dd7cddfSDavid du Colombier PNG_EXTERN void png_write_oFFs PNGARG((png_structp png_ptr, 3039*593dc095SDavid du Colombier png_int_32 x_offset, png_int_32 y_offset, int unit_type)); 30407dd7cddfSDavid du Colombier #endif 30417dd7cddfSDavid du Colombier 30427dd7cddfSDavid du Colombier #if defined(PNG_WRITE_pCAL_SUPPORTED) 30437dd7cddfSDavid du Colombier PNG_EXTERN void png_write_pCAL PNGARG((png_structp png_ptr, png_charp purpose, 30447dd7cddfSDavid du Colombier png_int_32 X0, png_int_32 X1, int type, int nparams, 30457dd7cddfSDavid du Colombier png_charp units, png_charpp params)); 30467dd7cddfSDavid du Colombier #endif 30477dd7cddfSDavid du Colombier 30487dd7cddfSDavid du Colombier #if defined(PNG_WRITE_pHYs_SUPPORTED) 30497dd7cddfSDavid du Colombier PNG_EXTERN void png_write_pHYs PNGARG((png_structp png_ptr, 30507dd7cddfSDavid du Colombier png_uint_32 x_pixels_per_unit, png_uint_32 y_pixels_per_unit, 30517dd7cddfSDavid du Colombier int unit_type)); 30527dd7cddfSDavid du Colombier #endif 30537dd7cddfSDavid du Colombier 30547dd7cddfSDavid du Colombier #if defined(PNG_WRITE_tIME_SUPPORTED) 30557dd7cddfSDavid du Colombier PNG_EXTERN void png_write_tIME PNGARG((png_structp png_ptr, 30567dd7cddfSDavid du Colombier png_timep mod_time)); 30577dd7cddfSDavid du Colombier #endif 30587dd7cddfSDavid du Colombier 3059*593dc095SDavid du Colombier #if defined(PNG_WRITE_sCAL_SUPPORTED) 3060*593dc095SDavid du Colombier #if defined(PNG_FLOATING_POINT_SUPPORTED) && !defined(PNG_NO_STDIO) 3061*593dc095SDavid du Colombier PNG_EXTERN void png_write_sCAL PNGARG((png_structp png_ptr, 3062*593dc095SDavid du Colombier int unit, double width, double height)); 3063*593dc095SDavid du Colombier #else 3064*593dc095SDavid du Colombier #ifdef PNG_FIXED_POINT_SUPPORTED 3065*593dc095SDavid du Colombier PNG_EXTERN void png_write_sCAL_s PNGARG((png_structp png_ptr, 3066*593dc095SDavid du Colombier int unit, png_charp width, png_charp height)); 3067*593dc095SDavid du Colombier #endif 3068*593dc095SDavid du Colombier #endif 3069*593dc095SDavid du Colombier #endif 3070*593dc095SDavid du Colombier 30717dd7cddfSDavid du Colombier /* Called when finished processing a row of data */ 30727dd7cddfSDavid du Colombier PNG_EXTERN void png_write_finish_row PNGARG((png_structp png_ptr)); 30737dd7cddfSDavid du Colombier 30747dd7cddfSDavid du Colombier /* Internal use only. Called before first row of data */ 30757dd7cddfSDavid du Colombier PNG_EXTERN void png_write_start_row PNGARG((png_structp png_ptr)); 30767dd7cddfSDavid du Colombier 30777dd7cddfSDavid du Colombier #if defined(PNG_READ_GAMMA_SUPPORTED) 30787dd7cddfSDavid du Colombier PNG_EXTERN void png_build_gamma_table PNGARG((png_structp png_ptr)); 30797dd7cddfSDavid du Colombier #endif 30807dd7cddfSDavid du Colombier 30817dd7cddfSDavid du Colombier /* combine a row of data, dealing with alpha, etc. if requested */ 30827dd7cddfSDavid du Colombier PNG_EXTERN void png_combine_row PNGARG((png_structp png_ptr, png_bytep row, 30837dd7cddfSDavid du Colombier int mask)); 30847dd7cddfSDavid du Colombier 30857dd7cddfSDavid du Colombier #if defined(PNG_READ_INTERLACING_SUPPORTED) 30867dd7cddfSDavid du Colombier /* expand an interlaced row */ 3087*593dc095SDavid du Colombier /* OLD pre-1.0.9 interface: 30887dd7cddfSDavid du Colombier PNG_EXTERN void png_do_read_interlace PNGARG((png_row_infop row_info, 30897dd7cddfSDavid du Colombier png_bytep row, int pass, png_uint_32 transformations)); 3090*593dc095SDavid du Colombier */ 3091*593dc095SDavid du Colombier PNG_EXTERN void png_do_read_interlace PNGARG((png_structp png_ptr)); 30927dd7cddfSDavid du Colombier #endif 30937dd7cddfSDavid du Colombier 3094*593dc095SDavid du Colombier /* GRR TO DO (2.0 or whenever): simplify other internal calling interfaces */ 3095*593dc095SDavid du Colombier 30967dd7cddfSDavid du Colombier #if defined(PNG_WRITE_INTERLACING_SUPPORTED) 30977dd7cddfSDavid du Colombier /* grab pixels out of a row for an interlaced pass */ 30987dd7cddfSDavid du Colombier PNG_EXTERN void png_do_write_interlace PNGARG((png_row_infop row_info, 30997dd7cddfSDavid du Colombier png_bytep row, int pass)); 31007dd7cddfSDavid du Colombier #endif 31017dd7cddfSDavid du Colombier 31027dd7cddfSDavid du Colombier /* unfilter a row */ 31037dd7cddfSDavid du Colombier PNG_EXTERN void png_read_filter_row PNGARG((png_structp png_ptr, 31047dd7cddfSDavid du Colombier png_row_infop row_info, png_bytep row, png_bytep prev_row, int filter)); 31057dd7cddfSDavid du Colombier 31067dd7cddfSDavid du Colombier /* Choose the best filter to use and filter the row data */ 31077dd7cddfSDavid du Colombier PNG_EXTERN void png_write_find_filter PNGARG((png_structp png_ptr, 31087dd7cddfSDavid du Colombier png_row_infop row_info)); 31097dd7cddfSDavid du Colombier 31107dd7cddfSDavid du Colombier /* Write out the filtered row. */ 31117dd7cddfSDavid du Colombier PNG_EXTERN void png_write_filtered_row PNGARG((png_structp png_ptr, 31127dd7cddfSDavid du Colombier png_bytep filtered_row)); 31137dd7cddfSDavid du Colombier /* finish a row while reading, dealing with interlacing passes, etc. */ 31147dd7cddfSDavid du Colombier PNG_EXTERN void png_read_finish_row PNGARG((png_structp png_ptr)); 31157dd7cddfSDavid du Colombier 31167dd7cddfSDavid du Colombier /* initialize the row buffers, etc. */ 31177dd7cddfSDavid du Colombier PNG_EXTERN void png_read_start_row PNGARG((png_structp png_ptr)); 31187dd7cddfSDavid du Colombier /* optional call to update the users info structure */ 31197dd7cddfSDavid du Colombier PNG_EXTERN void png_read_transform_info PNGARG((png_structp png_ptr, 31207dd7cddfSDavid du Colombier png_infop info_ptr)); 31217dd7cddfSDavid du Colombier 31227dd7cddfSDavid du Colombier /* these are the functions that do the transformations */ 31237dd7cddfSDavid du Colombier #if defined(PNG_READ_FILLER_SUPPORTED) 31247dd7cddfSDavid du Colombier PNG_EXTERN void png_do_read_filler PNGARG((png_row_infop row_info, 31257dd7cddfSDavid du Colombier png_bytep row, png_uint_32 filler, png_uint_32 flags)); 31267dd7cddfSDavid du Colombier #endif 31277dd7cddfSDavid du Colombier 31287dd7cddfSDavid du Colombier #if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) 31297dd7cddfSDavid du Colombier PNG_EXTERN void png_do_read_swap_alpha PNGARG((png_row_infop row_info, 31307dd7cddfSDavid du Colombier png_bytep row)); 31317dd7cddfSDavid du Colombier #endif 31327dd7cddfSDavid du Colombier 31337dd7cddfSDavid du Colombier #if defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED) 31347dd7cddfSDavid du Colombier PNG_EXTERN void png_do_write_swap_alpha PNGARG((png_row_infop row_info, 31357dd7cddfSDavid du Colombier png_bytep row)); 31367dd7cddfSDavid du Colombier #endif 31377dd7cddfSDavid du Colombier 31387dd7cddfSDavid du Colombier #if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) 31397dd7cddfSDavid du Colombier PNG_EXTERN void png_do_read_invert_alpha PNGARG((png_row_infop row_info, 31407dd7cddfSDavid du Colombier png_bytep row)); 31417dd7cddfSDavid du Colombier #endif 31427dd7cddfSDavid du Colombier 31437dd7cddfSDavid du Colombier #if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED) 31447dd7cddfSDavid du Colombier PNG_EXTERN void png_do_write_invert_alpha PNGARG((png_row_infop row_info, 31457dd7cddfSDavid du Colombier png_bytep row)); 31467dd7cddfSDavid du Colombier #endif 31477dd7cddfSDavid du Colombier 31487dd7cddfSDavid du Colombier #if defined(PNG_WRITE_FILLER_SUPPORTED) || \ 31497dd7cddfSDavid du Colombier defined(PNG_READ_STRIP_ALPHA_SUPPORTED) 31507dd7cddfSDavid du Colombier PNG_EXTERN void png_do_strip_filler PNGARG((png_row_infop row_info, 31517dd7cddfSDavid du Colombier png_bytep row, png_uint_32 flags)); 31527dd7cddfSDavid du Colombier #endif 31537dd7cddfSDavid du Colombier 31547dd7cddfSDavid du Colombier #if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) 31557dd7cddfSDavid du Colombier PNG_EXTERN void png_do_swap PNGARG((png_row_infop row_info, png_bytep row)); 31567dd7cddfSDavid du Colombier #endif 31577dd7cddfSDavid du Colombier 3158*593dc095SDavid du Colombier #if defined(PNG_READ_PACKSWAP_SUPPORTED) || defined(PNG_WRITE_PACKSWAP_SUPPORTED) 31597dd7cddfSDavid du Colombier PNG_EXTERN void png_do_packswap PNGARG((png_row_infop row_info, png_bytep row)); 31607dd7cddfSDavid du Colombier #endif 31617dd7cddfSDavid du Colombier 31627dd7cddfSDavid du Colombier #if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) 3163*593dc095SDavid du Colombier PNG_EXTERN int png_do_rgb_to_gray PNGARG((png_structp png_ptr, png_row_infop 3164*593dc095SDavid du Colombier row_info, png_bytep row)); 31657dd7cddfSDavid du Colombier #endif 31667dd7cddfSDavid du Colombier 31677dd7cddfSDavid du Colombier #if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED) 31687dd7cddfSDavid du Colombier PNG_EXTERN void png_do_gray_to_rgb PNGARG((png_row_infop row_info, 31697dd7cddfSDavid du Colombier png_bytep row)); 31707dd7cddfSDavid du Colombier #endif 31717dd7cddfSDavid du Colombier 31727dd7cddfSDavid du Colombier #if defined(PNG_READ_PACK_SUPPORTED) 31737dd7cddfSDavid du Colombier PNG_EXTERN void png_do_unpack PNGARG((png_row_infop row_info, png_bytep row)); 31747dd7cddfSDavid du Colombier #endif 31757dd7cddfSDavid du Colombier 31767dd7cddfSDavid du Colombier #if defined(PNG_READ_SHIFT_SUPPORTED) 31777dd7cddfSDavid du Colombier PNG_EXTERN void png_do_unshift PNGARG((png_row_infop row_info, png_bytep row, 31787dd7cddfSDavid du Colombier png_color_8p sig_bits)); 31797dd7cddfSDavid du Colombier #endif 31807dd7cddfSDavid du Colombier 31817dd7cddfSDavid du Colombier #if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) 31827dd7cddfSDavid du Colombier PNG_EXTERN void png_do_invert PNGARG((png_row_infop row_info, png_bytep row)); 31837dd7cddfSDavid du Colombier #endif 31847dd7cddfSDavid du Colombier 31857dd7cddfSDavid du Colombier #if defined(PNG_READ_16_TO_8_SUPPORTED) 31867dd7cddfSDavid du Colombier PNG_EXTERN void png_do_chop PNGARG((png_row_infop row_info, png_bytep row)); 31877dd7cddfSDavid du Colombier #endif 31887dd7cddfSDavid du Colombier 31897dd7cddfSDavid du Colombier #if defined(PNG_READ_DITHER_SUPPORTED) 31907dd7cddfSDavid du Colombier PNG_EXTERN void png_do_dither PNGARG((png_row_infop row_info, 31917dd7cddfSDavid du Colombier png_bytep row, png_bytep palette_lookup, png_bytep dither_lookup)); 31927dd7cddfSDavid du Colombier 31937dd7cddfSDavid du Colombier # if defined(PNG_CORRECT_PALETTE_SUPPORTED) 31947dd7cddfSDavid du Colombier PNG_EXTERN void png_correct_palette PNGARG((png_structp png_ptr, 31957dd7cddfSDavid du Colombier png_colorp palette, int num_palette)); 31967dd7cddfSDavid du Colombier # endif 31977dd7cddfSDavid du Colombier #endif 31987dd7cddfSDavid du Colombier 31997dd7cddfSDavid du Colombier #if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) 32007dd7cddfSDavid du Colombier PNG_EXTERN void png_do_bgr PNGARG((png_row_infop row_info, png_bytep row)); 32017dd7cddfSDavid du Colombier #endif 32027dd7cddfSDavid du Colombier 32037dd7cddfSDavid du Colombier #if defined(PNG_WRITE_PACK_SUPPORTED) 32047dd7cddfSDavid du Colombier PNG_EXTERN void png_do_pack PNGARG((png_row_infop row_info, 32057dd7cddfSDavid du Colombier png_bytep row, png_uint_32 bit_depth)); 32067dd7cddfSDavid du Colombier #endif 32077dd7cddfSDavid du Colombier 32087dd7cddfSDavid du Colombier #if defined(PNG_WRITE_SHIFT_SUPPORTED) 32097dd7cddfSDavid du Colombier PNG_EXTERN void png_do_shift PNGARG((png_row_infop row_info, png_bytep row, 32107dd7cddfSDavid du Colombier png_color_8p bit_depth)); 32117dd7cddfSDavid du Colombier #endif 32127dd7cddfSDavid du Colombier 32137dd7cddfSDavid du Colombier #if defined(PNG_READ_BACKGROUND_SUPPORTED) 3214*593dc095SDavid du Colombier #if defined(PNG_READ_GAMMA_SUPPORTED) 32157dd7cddfSDavid du Colombier PNG_EXTERN void png_do_background PNGARG((png_row_infop row_info, png_bytep row, 32167dd7cddfSDavid du Colombier png_color_16p trans_values, png_color_16p background, 32177dd7cddfSDavid du Colombier png_color_16p background_1, 32187dd7cddfSDavid du Colombier png_bytep gamma_table, png_bytep gamma_from_1, png_bytep gamma_to_1, 32197dd7cddfSDavid du Colombier png_uint_16pp gamma_16, png_uint_16pp gamma_16_from_1, 32207dd7cddfSDavid du Colombier png_uint_16pp gamma_16_to_1, int gamma_shift)); 3221*593dc095SDavid du Colombier #else 3222*593dc095SDavid du Colombier PNG_EXTERN void png_do_background PNGARG((png_row_infop row_info, png_bytep row, 3223*593dc095SDavid du Colombier png_color_16p trans_values, png_color_16p background)); 3224*593dc095SDavid du Colombier #endif 32257dd7cddfSDavid du Colombier #endif 32267dd7cddfSDavid du Colombier 32277dd7cddfSDavid du Colombier #if defined(PNG_READ_GAMMA_SUPPORTED) 32287dd7cddfSDavid du Colombier PNG_EXTERN void png_do_gamma PNGARG((png_row_infop row_info, png_bytep row, 32297dd7cddfSDavid du Colombier png_bytep gamma_table, png_uint_16pp gamma_16_table, 32307dd7cddfSDavid du Colombier int gamma_shift)); 32317dd7cddfSDavid du Colombier #endif 32327dd7cddfSDavid du Colombier 32337dd7cddfSDavid du Colombier #if defined(PNG_READ_EXPAND_SUPPORTED) 32347dd7cddfSDavid du Colombier PNG_EXTERN void png_do_expand_palette PNGARG((png_row_infop row_info, 32357dd7cddfSDavid du Colombier png_bytep row, png_colorp palette, png_bytep trans, int num_trans)); 32367dd7cddfSDavid du Colombier PNG_EXTERN void png_do_expand PNGARG((png_row_infop row_info, 32377dd7cddfSDavid du Colombier png_bytep row, png_color_16p trans_value)); 32387dd7cddfSDavid du Colombier #endif 32397dd7cddfSDavid du Colombier 32407dd7cddfSDavid du Colombier /* The following decodes the appropriate chunks, and does error correction, 32417dd7cddfSDavid du Colombier * then calls the appropriate callback for the chunk if it is valid. 32427dd7cddfSDavid du Colombier */ 32437dd7cddfSDavid du Colombier 32447dd7cddfSDavid du Colombier /* decode the IHDR chunk */ 32457dd7cddfSDavid du Colombier PNG_EXTERN void png_handle_IHDR PNGARG((png_structp png_ptr, png_infop info_ptr, 32467dd7cddfSDavid du Colombier png_uint_32 length)); 32477dd7cddfSDavid du Colombier PNG_EXTERN void png_handle_PLTE PNGARG((png_structp png_ptr, png_infop info_ptr, 32487dd7cddfSDavid du Colombier png_uint_32 length)); 32497dd7cddfSDavid du Colombier PNG_EXTERN void png_handle_IEND PNGARG((png_structp png_ptr, png_infop info_ptr, 32507dd7cddfSDavid du Colombier png_uint_32 length)); 32517dd7cddfSDavid du Colombier 3252*593dc095SDavid du Colombier #if defined(PNG_READ_bKGD_SUPPORTED) 3253*593dc095SDavid du Colombier PNG_EXTERN void png_handle_bKGD PNGARG((png_structp png_ptr, png_infop info_ptr, 32547dd7cddfSDavid du Colombier png_uint_32 length)); 32557dd7cddfSDavid du Colombier #endif 32567dd7cddfSDavid du Colombier 32577dd7cddfSDavid du Colombier #if defined(PNG_READ_cHRM_SUPPORTED) 32587dd7cddfSDavid du Colombier PNG_EXTERN void png_handle_cHRM PNGARG((png_structp png_ptr, png_infop info_ptr, 32597dd7cddfSDavid du Colombier png_uint_32 length)); 32607dd7cddfSDavid du Colombier #endif 32617dd7cddfSDavid du Colombier 3262*593dc095SDavid du Colombier #if defined(PNG_READ_gAMA_SUPPORTED) 3263*593dc095SDavid du Colombier PNG_EXTERN void png_handle_gAMA PNGARG((png_structp png_ptr, png_infop info_ptr, 32647dd7cddfSDavid du Colombier png_uint_32 length)); 32657dd7cddfSDavid du Colombier #endif 32667dd7cddfSDavid du Colombier 32677dd7cddfSDavid du Colombier #if defined(PNG_READ_hIST_SUPPORTED) 32687dd7cddfSDavid du Colombier PNG_EXTERN void png_handle_hIST PNGARG((png_structp png_ptr, png_infop info_ptr, 32697dd7cddfSDavid du Colombier png_uint_32 length)); 32707dd7cddfSDavid du Colombier #endif 32717dd7cddfSDavid du Colombier 3272*593dc095SDavid du Colombier #if defined(PNG_READ_iCCP_SUPPORTED) 3273*593dc095SDavid du Colombier extern void png_handle_iCCP PNGARG((png_structp png_ptr, png_infop info_ptr, 3274*593dc095SDavid du Colombier png_uint_32 length)); 3275*593dc095SDavid du Colombier #endif /* PNG_READ_iCCP_SUPPORTED */ 3276*593dc095SDavid du Colombier 3277*593dc095SDavid du Colombier #if defined(PNG_READ_iTXt_SUPPORTED) 3278*593dc095SDavid du Colombier PNG_EXTERN void png_handle_iTXt PNGARG((png_structp png_ptr, png_infop info_ptr, 3279*593dc095SDavid du Colombier png_uint_32 length)); 3280*593dc095SDavid du Colombier #endif 3281*593dc095SDavid du Colombier 32827dd7cddfSDavid du Colombier #if defined(PNG_READ_oFFs_SUPPORTED) 32837dd7cddfSDavid du Colombier PNG_EXTERN void png_handle_oFFs PNGARG((png_structp png_ptr, png_infop info_ptr, 32847dd7cddfSDavid du Colombier png_uint_32 length)); 32857dd7cddfSDavid du Colombier #endif 32867dd7cddfSDavid du Colombier 32877dd7cddfSDavid du Colombier #if defined(PNG_READ_pCAL_SUPPORTED) 32887dd7cddfSDavid du Colombier PNG_EXTERN void png_handle_pCAL PNGARG((png_structp png_ptr, png_infop info_ptr, 32897dd7cddfSDavid du Colombier png_uint_32 length)); 32907dd7cddfSDavid du Colombier #endif 32917dd7cddfSDavid du Colombier 32927dd7cddfSDavid du Colombier #if defined(PNG_READ_pHYs_SUPPORTED) 32937dd7cddfSDavid du Colombier PNG_EXTERN void png_handle_pHYs PNGARG((png_structp png_ptr, png_infop info_ptr, 32947dd7cddfSDavid du Colombier png_uint_32 length)); 32957dd7cddfSDavid du Colombier #endif 32967dd7cddfSDavid du Colombier 3297*593dc095SDavid du Colombier #if defined(PNG_READ_sBIT_SUPPORTED) 3298*593dc095SDavid du Colombier PNG_EXTERN void png_handle_sBIT PNGARG((png_structp png_ptr, png_infop info_ptr, 3299*593dc095SDavid du Colombier png_uint_32 length)); 3300*593dc095SDavid du Colombier #endif 3301*593dc095SDavid du Colombier 3302*593dc095SDavid du Colombier #if defined(PNG_READ_sCAL_SUPPORTED) 3303*593dc095SDavid du Colombier PNG_EXTERN void png_handle_sCAL PNGARG((png_structp png_ptr, png_infop info_ptr, 3304*593dc095SDavid du Colombier png_uint_32 length)); 3305*593dc095SDavid du Colombier #endif 3306*593dc095SDavid du Colombier 3307*593dc095SDavid du Colombier #if defined(PNG_READ_sPLT_SUPPORTED) 3308*593dc095SDavid du Colombier extern void png_handle_sPLT PNGARG((png_structp png_ptr, png_infop info_ptr, 3309*593dc095SDavid du Colombier png_uint_32 length)); 3310*593dc095SDavid du Colombier #endif /* PNG_READ_sPLT_SUPPORTED */ 3311*593dc095SDavid du Colombier 3312*593dc095SDavid du Colombier #if defined(PNG_READ_sRGB_SUPPORTED) 3313*593dc095SDavid du Colombier PNG_EXTERN void png_handle_sRGB PNGARG((png_structp png_ptr, png_infop info_ptr, 33147dd7cddfSDavid du Colombier png_uint_32 length)); 33157dd7cddfSDavid du Colombier #endif 33167dd7cddfSDavid du Colombier 33177dd7cddfSDavid du Colombier #if defined(PNG_READ_tEXt_SUPPORTED) 33187dd7cddfSDavid du Colombier PNG_EXTERN void png_handle_tEXt PNGARG((png_structp png_ptr, png_infop info_ptr, 33197dd7cddfSDavid du Colombier png_uint_32 length)); 33207dd7cddfSDavid du Colombier #endif 33217dd7cddfSDavid du Colombier 3322*593dc095SDavid du Colombier #if defined(PNG_READ_tIME_SUPPORTED) 3323*593dc095SDavid du Colombier PNG_EXTERN void png_handle_tIME PNGARG((png_structp png_ptr, png_infop info_ptr, 3324*593dc095SDavid du Colombier png_uint_32 length)); 3325*593dc095SDavid du Colombier #endif 3326*593dc095SDavid du Colombier 3327*593dc095SDavid du Colombier #if defined(PNG_READ_tRNS_SUPPORTED) 3328*593dc095SDavid du Colombier PNG_EXTERN void png_handle_tRNS PNGARG((png_structp png_ptr, png_infop info_ptr, 3329*593dc095SDavid du Colombier png_uint_32 length)); 3330*593dc095SDavid du Colombier #endif 3331*593dc095SDavid du Colombier 33327dd7cddfSDavid du Colombier #if defined(PNG_READ_zTXt_SUPPORTED) 33337dd7cddfSDavid du Colombier PNG_EXTERN void png_handle_zTXt PNGARG((png_structp png_ptr, png_infop info_ptr, 33347dd7cddfSDavid du Colombier png_uint_32 length)); 33357dd7cddfSDavid du Colombier #endif 33367dd7cddfSDavid du Colombier 33377dd7cddfSDavid du Colombier PNG_EXTERN void png_handle_unknown PNGARG((png_structp png_ptr, 33387dd7cddfSDavid du Colombier png_infop info_ptr, png_uint_32 length)); 33397dd7cddfSDavid du Colombier 33407dd7cddfSDavid du Colombier PNG_EXTERN void png_check_chunk_name PNGARG((png_structp png_ptr, 33417dd7cddfSDavid du Colombier png_bytep chunk_name)); 33427dd7cddfSDavid du Colombier 33437dd7cddfSDavid du Colombier /* handle the transformations for reading and writing */ 33447dd7cddfSDavid du Colombier PNG_EXTERN void png_do_read_transformations PNGARG((png_structp png_ptr)); 33457dd7cddfSDavid du Colombier PNG_EXTERN void png_do_write_transformations PNGARG((png_structp png_ptr)); 33467dd7cddfSDavid du Colombier 33477dd7cddfSDavid du Colombier PNG_EXTERN void png_init_read_transformations PNGARG((png_structp png_ptr)); 33487dd7cddfSDavid du Colombier 33497dd7cddfSDavid du Colombier #ifdef PNG_PROGRESSIVE_READ_SUPPORTED 33507dd7cddfSDavid du Colombier PNG_EXTERN void png_push_read_chunk PNGARG((png_structp png_ptr, 33517dd7cddfSDavid du Colombier png_infop info_ptr)); 33527dd7cddfSDavid du Colombier PNG_EXTERN void png_push_read_sig PNGARG((png_structp png_ptr, 33537dd7cddfSDavid du Colombier png_infop info_ptr)); 33547dd7cddfSDavid du Colombier PNG_EXTERN void png_push_check_crc PNGARG((png_structp png_ptr)); 33557dd7cddfSDavid du Colombier PNG_EXTERN void png_push_crc_skip PNGARG((png_structp png_ptr, 33567dd7cddfSDavid du Colombier png_uint_32 length)); 33577dd7cddfSDavid du Colombier PNG_EXTERN void png_push_crc_finish PNGARG((png_structp png_ptr)); 33587dd7cddfSDavid du Colombier PNG_EXTERN void png_push_save_buffer PNGARG((png_structp png_ptr)); 33597dd7cddfSDavid du Colombier PNG_EXTERN void png_push_restore_buffer PNGARG((png_structp png_ptr, 33607dd7cddfSDavid du Colombier png_bytep buffer, png_size_t buffer_length)); 33617dd7cddfSDavid du Colombier PNG_EXTERN void png_push_read_IDAT PNGARG((png_structp png_ptr)); 33627dd7cddfSDavid du Colombier PNG_EXTERN void png_process_IDAT_data PNGARG((png_structp png_ptr, 33637dd7cddfSDavid du Colombier png_bytep buffer, png_size_t buffer_length)); 33647dd7cddfSDavid du Colombier PNG_EXTERN void png_push_process_row PNGARG((png_structp png_ptr)); 33657dd7cddfSDavid du Colombier PNG_EXTERN void png_push_handle_unknown PNGARG((png_structp png_ptr, 33667dd7cddfSDavid du Colombier png_infop info_ptr, png_uint_32 length)); 33677dd7cddfSDavid du Colombier PNG_EXTERN void png_push_have_info PNGARG((png_structp png_ptr, 33687dd7cddfSDavid du Colombier png_infop info_ptr)); 33697dd7cddfSDavid du Colombier PNG_EXTERN void png_push_have_end PNGARG((png_structp png_ptr, 33707dd7cddfSDavid du Colombier png_infop info_ptr)); 33717dd7cddfSDavid du Colombier PNG_EXTERN void png_push_have_row PNGARG((png_structp png_ptr, png_bytep row)); 33727dd7cddfSDavid du Colombier PNG_EXTERN void png_push_read_end PNGARG((png_structp png_ptr, 33737dd7cddfSDavid du Colombier png_infop info_ptr)); 33747dd7cddfSDavid du Colombier PNG_EXTERN void png_process_some_data PNGARG((png_structp png_ptr, 33757dd7cddfSDavid du Colombier png_infop info_ptr)); 33767dd7cddfSDavid du Colombier PNG_EXTERN void png_read_push_finish_row PNGARG((png_structp png_ptr)); 33777dd7cddfSDavid du Colombier #if defined(PNG_READ_tEXt_SUPPORTED) 33787dd7cddfSDavid du Colombier PNG_EXTERN void png_push_handle_tEXt PNGARG((png_structp png_ptr, 33797dd7cddfSDavid du Colombier png_infop info_ptr, png_uint_32 length)); 33807dd7cddfSDavid du Colombier PNG_EXTERN void png_push_read_tEXt PNGARG((png_structp png_ptr, 33817dd7cddfSDavid du Colombier png_infop info_ptr)); 33827dd7cddfSDavid du Colombier #endif 33837dd7cddfSDavid du Colombier #if defined(PNG_READ_zTXt_SUPPORTED) 33847dd7cddfSDavid du Colombier PNG_EXTERN void png_push_handle_zTXt PNGARG((png_structp png_ptr, 33857dd7cddfSDavid du Colombier png_infop info_ptr, png_uint_32 length)); 33867dd7cddfSDavid du Colombier PNG_EXTERN void png_push_read_zTXt PNGARG((png_structp png_ptr, 33877dd7cddfSDavid du Colombier png_infop info_ptr)); 33887dd7cddfSDavid du Colombier #endif 3389*593dc095SDavid du Colombier #if defined(PNG_READ_iTXt_SUPPORTED) 3390*593dc095SDavid du Colombier PNG_EXTERN void png_push_handle_iTXt PNGARG((png_structp png_ptr, 3391*593dc095SDavid du Colombier png_infop info_ptr, png_uint_32 length)); 3392*593dc095SDavid du Colombier PNG_EXTERN void png_push_read_iTXt PNGARG((png_structp png_ptr, 3393*593dc095SDavid du Colombier png_infop info_ptr)); 3394*593dc095SDavid du Colombier #endif 33957dd7cddfSDavid du Colombier 33967dd7cddfSDavid du Colombier #endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ 33977dd7cddfSDavid du Colombier 3398*593dc095SDavid du Colombier #ifdef PNG_MNG_FEATURES_SUPPORTED 3399*593dc095SDavid du Colombier PNG_EXTERN void png_do_read_intrapixel PNGARG((png_row_infop row_info, 3400*593dc095SDavid du Colombier png_bytep row)); 3401*593dc095SDavid du Colombier PNG_EXTERN void png_do_write_intrapixel PNGARG((png_row_infop row_info, 3402*593dc095SDavid du Colombier png_bytep row)); 3403*593dc095SDavid du Colombier #endif 3404*593dc095SDavid du Colombier 3405*593dc095SDavid du Colombier #if defined(PNG_ASSEMBLER_CODE_SUPPORTED) 3406*593dc095SDavid du Colombier /* png.c */ /* PRIVATE */ 3407*593dc095SDavid du Colombier PNG_EXTERN void png_init_mmx_flags PNGARG((png_structp png_ptr)); 3408*593dc095SDavid du Colombier #endif 3409*593dc095SDavid du Colombier /* Maintainer: Put new private prototypes here ^ and in libpngpf.3 */ 3410*593dc095SDavid du Colombier 34117dd7cddfSDavid du Colombier #endif /* PNG_INTERNAL */ 34127dd7cddfSDavid du Colombier 34137dd7cddfSDavid du Colombier #ifdef __cplusplus 34147dd7cddfSDavid du Colombier } 34157dd7cddfSDavid du Colombier #endif 34167dd7cddfSDavid du Colombier 3417*593dc095SDavid du Colombier #endif /* PNG_VERSION_INFO_ONLY */ 34187dd7cddfSDavid du Colombier /* do not put anything past this line */ 3419*593dc095SDavid du Colombier #endif /* PNG_H */ 3420