xref: /plan9-contrib/sys/src/cmd/gs/libpng/png.h (revision 593dc095aefb2a85c828727bbfa9da139a49bdf4)
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