~brian-sidebotham/wxwidgets-cmake/wxpython-2.9.4

« back to all changes in this revision

Viewing changes to src/png/png.h

  • Committer: Brian Sidebotham
  • Date: 2013-08-03 14:30:08 UTC
  • Revision ID: brian.sidebotham@gmail.com-20130803143008-c7806tkych1tp6fc
Initial import into Bazaar

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
/* png.h - header file for PNG reference library
 
3
 *
 
4
 * libpng version 1.5.7 - December 15, 2011
 
5
 * Copyright (c) 1998-2011 Glenn Randers-Pehrson
 
6
 * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
 
7
 * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
 
8
 *
 
9
 * This code is released under the libpng license (See LICENSE, below)
 
10
 *
 
11
 * Authors and maintainers:
 
12
 *   libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
 
13
 *   libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger
 
14
 *   libpng versions 0.97, January 1998, through 1.5.7 - December 15, 2011: Glenn
 
15
 *   See also "Contributing Authors", below.
 
16
 *
 
17
 * Note about libpng version numbers:
 
18
 *
 
19
 *   Due to various miscommunications, unforeseen code incompatibilities
 
20
 *   and occasional factors outside the authors' control, version numbering
 
21
 *   on the library has not always been consistent and straightforward.
 
22
 *   The following table summarizes matters since version 0.89c, which was
 
23
 *   the first widely used release:
 
24
 *
 
25
 *    source                 png.h  png.h  shared-lib
 
26
 *    version                string   int  version
 
27
 *    -------                ------ -----  ----------
 
28
 *    0.89c "1.0 beta 3"     0.89      89  1.0.89
 
29
 *    0.90  "1.0 beta 4"     0.90      90  0.90  [should have been 2.0.90]
 
30
 *    0.95  "1.0 beta 5"     0.95      95  0.95  [should have been 2.0.95]
 
31
 *    0.96  "1.0 beta 6"     0.96      96  0.96  [should have been 2.0.96]
 
32
 *    0.97b "1.00.97 beta 7" 1.00.97   97  1.0.1 [should have been 2.0.97]
 
33
 *    0.97c                  0.97      97  2.0.97
 
34
 *    0.98                   0.98      98  2.0.98
 
35
 *    0.99                   0.99      98  2.0.99
 
36
 *    0.99a-m                0.99      99  2.0.99
 
37
 *    1.00                   1.00     100  2.1.0 [100 should be 10000]
 
38
 *    1.0.0      (from here on, the   100  2.1.0 [100 should be 10000]
 
39
 *    1.0.1       png.h string is   10001  2.1.0
 
40
 *    1.0.1a-e    identical to the  10002  from here on, the shared library
 
41
 *    1.0.2       source version)   10002  is 2.V where V is the source code
 
42
 *    1.0.2a-b                      10003  version, except as noted.
 
43
 *    1.0.3                         10003
 
44
 *    1.0.3a-d                      10004
 
45
 *    1.0.4                         10004
 
46
 *    1.0.4a-f                      10005
 
47
 *    1.0.5 (+ 2 patches)           10005
 
48
 *    1.0.5a-d                      10006
 
49
 *    1.0.5e-r                      10100 (not source compatible)
 
50
 *    1.0.5s-v                      10006 (not binary compatible)
 
51
 *    1.0.6 (+ 3 patches)           10006 (still binary incompatible)
 
52
 *    1.0.6d-f                      10007 (still binary incompatible)
 
53
 *    1.0.6g                        10007
 
54
 *    1.0.6h                        10007  10.6h (testing xy.z so-numbering)
 
55
 *    1.0.6i                        10007  10.6i
 
56
 *    1.0.6j                        10007  2.1.0.6j (incompatible with 1.0.0)
 
57
 *    1.0.7beta11-14        DLLNUM  10007  2.1.0.7beta11-14 (binary compatible)
 
58
 *    1.0.7beta15-18           1    10007  2.1.0.7beta15-18 (binary compatible)
 
59
 *    1.0.7rc1-2               1    10007  2.1.0.7rc1-2 (binary compatible)
 
60
 *    1.0.7                    1    10007  (still compatible)
 
61
 *    1.0.8beta1-4             1    10008  2.1.0.8beta1-4
 
62
 *    1.0.8rc1                 1    10008  2.1.0.8rc1
 
63
 *    1.0.8                    1    10008  2.1.0.8
 
64
 *    1.0.9beta1-6             1    10009  2.1.0.9beta1-6
 
65
 *    1.0.9rc1                 1    10009  2.1.0.9rc1
 
66
 *    1.0.9beta7-10            1    10009  2.1.0.9beta7-10
 
67
 *    1.0.9rc2                 1    10009  2.1.0.9rc2
 
68
 *    1.0.9                    1    10009  2.1.0.9
 
69
 *    1.0.10beta1              1    10010  2.1.0.10beta1
 
70
 *    1.0.10rc1                1    10010  2.1.0.10rc1
 
71
 *    1.0.10                   1    10010  2.1.0.10
 
72
 *    1.0.11beta1-3            1    10011  2.1.0.11beta1-3
 
73
 *    1.0.11rc1                1    10011  2.1.0.11rc1
 
74
 *    1.0.11                   1    10011  2.1.0.11
 
75
 *    1.0.12beta1-2            2    10012  2.1.0.12beta1-2
 
76
 *    1.0.12rc1                2    10012  2.1.0.12rc1
 
77
 *    1.0.12                   2    10012  2.1.0.12
 
78
 *    1.1.0a-f                 -    10100  2.1.1.0a-f (branch abandoned)
 
79
 *    1.2.0beta1-2             2    10200  2.1.2.0beta1-2
 
80
 *    1.2.0beta3-5             3    10200  3.1.2.0beta3-5
 
81
 *    1.2.0rc1                 3    10200  3.1.2.0rc1
 
82
 *    1.2.0                    3    10200  3.1.2.0
 
83
 *    1.2.1beta1-4             3    10201  3.1.2.1beta1-4
 
84
 *    1.2.1rc1-2               3    10201  3.1.2.1rc1-2
 
85
 *    1.2.1                    3    10201  3.1.2.1
 
86
 *    1.2.2beta1-6            12    10202  12.so.0.1.2.2beta1-6
 
87
 *    1.0.13beta1             10    10013  10.so.0.1.0.13beta1
 
88
 *    1.0.13rc1               10    10013  10.so.0.1.0.13rc1
 
89
 *    1.2.2rc1                12    10202  12.so.0.1.2.2rc1
 
90
 *    1.0.13                  10    10013  10.so.0.1.0.13
 
91
 *    1.2.2                   12    10202  12.so.0.1.2.2
 
92
 *    1.2.3rc1-6              12    10203  12.so.0.1.2.3rc1-6
 
93
 *    1.2.3                   12    10203  12.so.0.1.2.3
 
94
 *    1.2.4beta1-3            13    10204  12.so.0.1.2.4beta1-3
 
95
 *    1.0.14rc1               13    10014  10.so.0.1.0.14rc1
 
96
 *    1.2.4rc1                13    10204  12.so.0.1.2.4rc1
 
97
 *    1.0.14                  10    10014  10.so.0.1.0.14
 
98
 *    1.2.4                   13    10204  12.so.0.1.2.4
 
99
 *    1.2.5beta1-2            13    10205  12.so.0.1.2.5beta1-2
 
100
 *    1.0.15rc1-3             10    10015  10.so.0.1.0.15rc1-3
 
101
 *    1.2.5rc1-3              13    10205  12.so.0.1.2.5rc1-3
 
102
 *    1.0.15                  10    10015  10.so.0.1.0.15
 
103
 *    1.2.5                   13    10205  12.so.0.1.2.5
 
104
 *    1.2.6beta1-4            13    10206  12.so.0.1.2.6beta1-4
 
105
 *    1.0.16                  10    10016  10.so.0.1.0.16
 
106
 *    1.2.6                   13    10206  12.so.0.1.2.6
 
107
 *    1.2.7beta1-2            13    10207  12.so.0.1.2.7beta1-2
 
108
 *    1.0.17rc1               10    10017  12.so.0.1.0.17rc1
 
109
 *    1.2.7rc1                13    10207  12.so.0.1.2.7rc1
 
110
 *    1.0.17                  10    10017  12.so.0.1.0.17
 
111
 *    1.2.7                   13    10207  12.so.0.1.2.7
 
112
 *    1.2.8beta1-5            13    10208  12.so.0.1.2.8beta1-5
 
113
 *    1.0.18rc1-5             10    10018  12.so.0.1.0.18rc1-5
 
114
 *    1.2.8rc1-5              13    10208  12.so.0.1.2.8rc1-5
 
115
 *    1.0.18                  10    10018  12.so.0.1.0.18
 
116
 *    1.2.8                   13    10208  12.so.0.1.2.8
 
117
 *    1.2.9beta1-3            13    10209  12.so.0.1.2.9beta1-3
 
118
 *    1.2.9beta4-11           13    10209  12.so.0.9[.0]
 
119
 *    1.2.9rc1                13    10209  12.so.0.9[.0]
 
120
 *    1.2.9                   13    10209  12.so.0.9[.0]
 
121
 *    1.2.10beta1-7           13    10210  12.so.0.10[.0]
 
122
 *    1.2.10rc1-2             13    10210  12.so.0.10[.0]
 
123
 *    1.2.10                  13    10210  12.so.0.10[.0]
 
124
 *    1.4.0beta1-5            14    10400  14.so.0.0[.0]
 
125
 *    1.2.11beta1-4           13    10211  12.so.0.11[.0]
 
126
 *    1.4.0beta7-8            14    10400  14.so.0.0[.0]
 
127
 *    1.2.11                  13    10211  12.so.0.11[.0]
 
128
 *    1.2.12                  13    10212  12.so.0.12[.0]
 
129
 *    1.4.0beta9-14           14    10400  14.so.0.0[.0]
 
130
 *    1.2.13                  13    10213  12.so.0.13[.0]
 
131
 *    1.4.0beta15-36          14    10400  14.so.0.0[.0]
 
132
 *    1.4.0beta37-87          14    10400  14.so.14.0[.0]
 
133
 *    1.4.0rc01               14    10400  14.so.14.0[.0]
 
134
 *    1.4.0beta88-109         14    10400  14.so.14.0[.0]
 
135
 *    1.4.0rc02-08            14    10400  14.so.14.0[.0]
 
136
 *    1.4.0                   14    10400  14.so.14.0[.0]
 
137
 *    1.4.1beta01-03          14    10401  14.so.14.1[.0]
 
138
 *    1.4.1rc01               14    10401  14.so.14.1[.0]
 
139
 *    1.4.1beta04-12          14    10401  14.so.14.1[.0]
 
140
 *    1.4.1                   14    10401  14.so.14.1[.0]
 
141
 *    1.4.2                   14    10402  14.so.14.2[.0]
 
142
 *    1.4.3                   14    10403  14.so.14.3[.0]
 
143
 *    1.4.4                   14    10404  14.so.14.4[.0]
 
144
 *    1.5.0beta01-58          15    10500  15.so.15.0[.0]
 
145
 *    1.5.0rc01-07            15    10500  15.so.15.0[.0]
 
146
 *    1.5.0                   15    10500  15.so.15.0[.0]
 
147
 *    1.5.1beta01-11          15    10501  15.so.15.1[.0]
 
148
 *    1.5.1rc01-02            15    10501  15.so.15.1[.0]
 
149
 *    1.5.1                   15    10501  15.so.15.1[.0]
 
150
 *    1.5.2beta01-03          15    10502  15.so.15.2[.0]
 
151
 *    1.5.2rc01-03            15    10502  15.so.15.2[.0]
 
152
 *    1.5.2                   15    10502  15.so.15.2[.0]
 
153
 *    1.5.3beta01-10          15    10503  15.so.15.3[.0]
 
154
 *    1.5.3rc01-02            15    10503  15.so.15.3[.0]
 
155
 *    1.5.3beta11             15    10503  15.so.15.3[.0]
 
156
 *    1.5.3 [omitted]
 
157
 *    1.5.4beta01-08          15    10504  15.so.15.4[.0]
 
158
 *    1.5.4rc01               15    10504  15.so.15.4[.0]
 
159
 *    1.5.4                   15    10504  15.so.15.4[.0]
 
160
 *    1.5.5beta01-08          15    10505  15.so.15.5[.0]
 
161
 *    1.5.5rc01               15    10505  15.so.15.5[.0]
 
162
 *    1.5.5                   15    10505  15.so.15.5[.0]
 
163
 *    1.5.6beta01-07          15    10506  15.so.15.6[.0]
 
164
 *    1.5.6rc01-03            15    10506  15.so.15.6[.0]
 
165
 *    1.5.6                   15    10506  15.so.15.6[.0]
 
166
 *    1.5.7beta01-05          15    10507  15.so.15.7[.0]
 
167
 *    1.5.7rc01-03            15    10507  15.so.15.7[.0]
 
168
 *    1.5.7                   15    10507  15.so.15.7[.0]
 
169
 *
 
170
 *   Henceforth the source version will match the shared-library major
 
171
 *   and minor numbers; the shared-library major version number will be
 
172
 *   used for changes in backward compatibility, as it is intended.  The
 
173
 *   PNG_LIBPNG_VER macro, which is not used within libpng but is available
 
174
 *   for applications, is an unsigned integer of the form xyyzz corresponding
 
175
 *   to the source version x.y.z (leading zeros in y and z).  Beta versions
 
176
 *   were given the previous public release number plus a letter, until
 
177
 *   version 1.0.6j; from then on they were given the upcoming public
 
178
 *   release number plus "betaNN" or "rcN".
 
179
 *
 
180
 *   Binary incompatibility exists only when applications make direct access
 
181
 *   to the info_ptr or png_ptr members through png.h, and the compiled
 
182
 *   application is loaded with a different version of the library.
 
183
 *
 
184
 *   DLLNUM will change each time there are forward or backward changes
 
185
 *   in binary compatibility (e.g., when a new feature is added).
 
186
 *
 
187
 * See libpng-manual.txt or libpng.3 for more information.  The PNG
 
188
 * specification is available as a W3C Recommendation and as an ISO
 
189
 * Specification, <http://www.w3.org/TR/2003/REC-PNG-20031110/
 
190
 */
 
191
 
 
192
/*
 
193
 * COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
 
194
 *
 
195
 * If you modify libpng you may insert additional notices immediately following
 
196
 * this sentence.
 
197
 *
 
198
 * This code is released under the libpng license.
 
199
 *
 
200
 * libpng versions 1.2.6, August 15, 2004, through 1.5.7, December 15, 2011, are
 
201
 * Copyright (c) 2004, 2006-2011 Glenn Randers-Pehrson, and are
 
202
 * distributed according to the same disclaimer and license as libpng-1.2.5
 
203
 * with the following individual added to the list of Contributing Authors:
 
204
 *
 
205
 *    Cosmin Truta
 
206
 *
 
207
 * libpng versions 1.0.7, July 1, 2000, through 1.2.5, October 3, 2002, are
 
208
 * Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
 
209
 * distributed according to the same disclaimer and license as libpng-1.0.6
 
210
 * with the following individuals added to the list of Contributing Authors:
 
211
 *
 
212
 *    Simon-Pierre Cadieux
 
213
 *    Eric S. Raymond
 
214
 *    Gilles Vollant
 
215
 *
 
216
 * and with the following additions to the disclaimer:
 
217
 *
 
218
 *    There is no warranty against interference with your enjoyment of the
 
219
 *    library or against infringement.  There is no warranty that our
 
220
 *    efforts or the library will fulfill any of your particular purposes
 
221
 *    or needs.  This library is provided with all faults, and the entire
 
222
 *    risk of satisfactory quality, performance, accuracy, and effort is with
 
223
 *    the user.
 
224
 *
 
225
 * libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
 
226
 * Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson, and are
 
227
 * distributed according to the same disclaimer and license as libpng-0.96,
 
228
 * with the following individuals added to the list of Contributing Authors:
 
229
 *
 
230
 *    Tom Lane
 
231
 *    Glenn Randers-Pehrson
 
232
 *    Willem van Schaik
 
233
 *
 
234
 * libpng versions 0.89, June 1996, through 0.96, May 1997, are
 
235
 * Copyright (c) 1996, 1997 Andreas Dilger
 
236
 * Distributed according to the same disclaimer and license as libpng-0.88,
 
237
 * with the following individuals added to the list of Contributing Authors:
 
238
 *
 
239
 *    John Bowler
 
240
 *    Kevin Bracey
 
241
 *    Sam Bushell
 
242
 *    Magnus Holmgren
 
243
 *    Greg Roelofs
 
244
 *    Tom Tanner
 
245
 *
 
246
 * libpng versions 0.5, May 1995, through 0.88, January 1996, are
 
247
 * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 
248
 *
 
249
 * For the purposes of this copyright and license, "Contributing Authors"
 
250
 * is defined as the following set of individuals:
 
251
 *
 
252
 *    Andreas Dilger
 
253
 *    Dave Martindale
 
254
 *    Guy Eric Schalnat
 
255
 *    Paul Schmidt
 
256
 *    Tim Wegner
 
257
 *
 
258
 * The PNG Reference Library is supplied "AS IS".  The Contributing Authors
 
259
 * and Group 42, Inc. disclaim all warranties, expressed or implied,
 
260
 * including, without limitation, the warranties of merchantability and of
 
261
 * fitness for any purpose.  The Contributing Authors and Group 42, Inc.
 
262
 * assume no liability for direct, indirect, incidental, special, exemplary,
 
263
 * or consequential damages, which may result from the use of the PNG
 
264
 * Reference Library, even if advised of the possibility of such damage.
 
265
 *
 
266
 * Permission is hereby granted to use, copy, modify, and distribute this
 
267
 * source code, or portions hereof, for any purpose, without fee, subject
 
268
 * to the following restrictions:
 
269
 *
 
270
 *   1. The origin of this source code must not be misrepresented.
 
271
 *
 
272
 *   2. Altered versions must be plainly marked as such and must not
 
273
 *      be misrepresented as being the original source.
 
274
 *
 
275
 *   3. This Copyright notice may not be removed or altered from
 
276
 *      any source or altered source distribution.
 
277
 *
 
278
 * The Contributing Authors and Group 42, Inc. specifically permit, without
 
279
 * fee, and encourage the use of this source code as a component to
 
280
 * supporting the PNG file format in commercial products.  If you use this
 
281
 * source code in a product, acknowledgment is not required but would be
 
282
 * appreciated.
 
283
 */
 
284
 
 
285
/*
 
286
 * A "png_get_copyright" function is available, for convenient use in "about"
 
287
 * boxes and the like:
 
288
 *
 
289
 *     printf("%s", png_get_copyright(NULL));
 
290
 *
 
291
 * Also, the PNG logo (in PNG format, of course) is supplied in the
 
292
 * files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
 
293
 */
 
294
 
 
295
/*
 
296
 * Libpng is OSI Certified Open Source Software.  OSI Certified is a
 
297
 * certification mark of the Open Source Initiative.
 
298
 */
 
299
 
 
300
/*
 
301
 * The contributing authors would like to thank all those who helped
 
302
 * with testing, bug fixes, and patience.  This wouldn't have been
 
303
 * possible without all of you.
 
304
 *
 
305
 * Thanks to Frank J. T. Wojcik for helping with the documentation.
 
306
 */
 
307
 
 
308
/*
 
309
 * Y2K compliance in libpng:
 
310
 * =========================
 
311
 *
 
312
 *    December 15, 2011
 
313
 *
 
314
 *    Since the PNG Development group is an ad-hoc body, we can't make
 
315
 *    an official declaration.
 
316
 *
 
317
 *    This is your unofficial assurance that libpng from version 0.71 and
 
318
 *    upward through 1.5.7 are Y2K compliant.  It is my belief that
 
319
 *    earlier versions were also Y2K compliant.
 
320
 *
 
321
 *    Libpng only has two year fields.  One is a 2-byte unsigned integer
 
322
 *    that will hold years up to 65535.  The other holds the date in text
 
323
 *    format, and will hold years up to 9999.
 
324
 *
 
325
 *    The integer is
 
326
 *        "png_uint_16 year" in png_time_struct.
 
327
 *
 
328
 *    The string is
 
329
 *        "png_char time_buffer" in png_struct
 
330
 *
 
331
 *    There are seven time-related functions:
 
332
 *        png.c: png_convert_to_rfc_1123() in png.c
 
333
 *          (formerly png_convert_to_rfc_1152() in error)
 
334
 *        png_convert_from_struct_tm() in pngwrite.c, called in pngwrite.c
 
335
 *        png_convert_from_time_t() in pngwrite.c
 
336
 *        png_get_tIME() in pngget.c
 
337
 *        png_handle_tIME() in pngrutil.c, called in pngread.c
 
338
 *        png_set_tIME() in pngset.c
 
339
 *        png_write_tIME() in pngwutil.c, called in pngwrite.c
 
340
 *
 
341
 *    All handle dates properly in a Y2K environment.  The
 
342
 *    png_convert_from_time_t() function calls gmtime() to convert from system
 
343
 *    clock time, which returns (year - 1900), which we properly convert to
 
344
 *    the full 4-digit year.  There is a possibility that applications using
 
345
 *    libpng are not passing 4-digit years into the png_convert_to_rfc_1123()
 
346
 *    function, or that they are incorrectly passing only a 2-digit year
 
347
 *    instead of "year - 1900" into the png_convert_from_struct_tm() function,
 
348
 *    but this is not under our control.  The libpng documentation has always
 
349
 *    stated that it works with 4-digit years, and the APIs have been
 
350
 *    documented as such.
 
351
 *
 
352
 *    The tIME chunk itself is also Y2K compliant.  It uses a 2-byte unsigned
 
353
 *    integer to hold the year, and can hold years as large as 65535.
 
354
 *
 
355
 *    zlib, upon which libpng depends, is also Y2K compliant.  It contains
 
356
 *    no date-related code.
 
357
 *
 
358
 *       Glenn Randers-Pehrson
 
359
 *       libpng maintainer
 
360
 *       PNG Development Group
 
361
 */
 
362
 
 
363
#ifndef PNG_H
 
364
#define PNG_H
 
365
 
 
366
/* This is not the place to learn how to use libpng. The file libpng-manual.txt
 
367
 * describes how to use libpng, and the file example.c summarizes it
 
368
 * with some code on which to build.  This file is useful for looking
 
369
 * at the actual function definitions and structure components.
 
370
 *
 
371
 * If you just need to read a PNG file and don't want to read the documentation
 
372
 * skip to the end of this file and read the section entitled 'simplified API'.
 
373
 */
 
374
 
 
375
/* Version information for png.h - this should match the version in png.c */
 
376
#define PNG_LIBPNG_VER_STRING "1.5.7"
 
377
#define PNG_HEADER_VERSION_STRING \
 
378
     " libpng version 1.5.7 - December 15, 2011\n"
 
379
 
 
380
#define PNG_LIBPNG_VER_SONUM   15
 
381
#define PNG_LIBPNG_VER_DLLNUM  15
 
382
 
 
383
/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
 
384
#define PNG_LIBPNG_VER_MAJOR   1
 
385
#define PNG_LIBPNG_VER_MINOR   5
 
386
#define PNG_LIBPNG_VER_RELEASE 7
 
387
 
 
388
/* This should match the numeric part of the final component of
 
389
 * PNG_LIBPNG_VER_STRING, omitting any leading zero:
 
390
 */
 
391
 
 
392
#define PNG_LIBPNG_VER_BUILD  0
 
393
 
 
394
/* Release Status */
 
395
#define PNG_LIBPNG_BUILD_ALPHA    1
 
396
#define PNG_LIBPNG_BUILD_BETA     2
 
397
#define PNG_LIBPNG_BUILD_RC       3
 
398
#define PNG_LIBPNG_BUILD_STABLE   4
 
399
#define PNG_LIBPNG_BUILD_RELEASE_STATUS_MASK 7
 
400
 
 
401
/* Release-Specific Flags */
 
402
#define PNG_LIBPNG_BUILD_PATCH    8 /* Can be OR'ed with
 
403
                                       PNG_LIBPNG_BUILD_STABLE only */
 
404
#define PNG_LIBPNG_BUILD_PRIVATE 16 /* Cannot be OR'ed with
 
405
                                       PNG_LIBPNG_BUILD_SPECIAL */
 
406
#define PNG_LIBPNG_BUILD_SPECIAL 32 /* Cannot be OR'ed with
 
407
                                       PNG_LIBPNG_BUILD_PRIVATE */
 
408
 
 
409
#define PNG_LIBPNG_BUILD_BASE_TYPE PNG_LIBPNG_BUILD_BETA
 
410
 
 
411
/* Careful here.  At one time, Guy wanted to use 082, but that would be octal.
 
412
 * We must not include leading zeros.
 
413
 * Versions 0.7 through 1.0.0 were in the range 0 to 100 here (only
 
414
 * version 1.0.0 was mis-numbered 100 instead of 10000).  From
 
415
 * version 1.0.1 it's    xxyyzz, where x=major, y=minor, z=release
 
416
 */
 
417
#define PNG_LIBPNG_VER 10507 /* 1.5.7 */
 
418
 
 
419
/* Library configuration: these options cannot be changed after
 
420
 * the library has been built.
 
421
 */
 
422
#ifndef PNGLCONF_H
 
423
    /* If pnglibconf.h is missing, you can
 
424
     * copy scripts/pnglibconf.h.prebuilt to pnglibconf.h
 
425
     */
 
426
#   include "pnglibconf.h"
 
427
#endif
 
428
 
 
429
#ifndef PNG_VERSION_INFO_ONLY
 
430
#  ifndef PNG_BUILDING_SYMBOL_TABLE
 
431
  /*
 
432
   *   Standard header files (not needed for the version info or while
 
433
   *   building symbol table -- see scripts/pnglibconf.dfa)
 
434
   */
 
435
#    ifdef PNG_SETJMP_SUPPORTED
 
436
#      include <setjmp.h>
 
437
#    endif
 
438
 
 
439
    /* Need the time information for converting tIME chunks, it
 
440
     * defines struct tm:
 
441
     */
 
442
#    ifdef PNG_CONVERT_tIME_SUPPORTED
 
443
       /* "time.h" functions are not supported on all operating systems */
 
444
#      include <time.h>
 
445
#    endif
 
446
#  endif
 
447
 
 
448
/* Machine specific configuration. */
 
449
#  include "pngconf.h"
 
450
#endif
 
451
 
 
452
/*
 
453
 * Added at libpng-1.2.8
 
454
 *
 
455
 * Ref MSDN: Private as priority over Special
 
456
 * VS_FF_PRIVATEBUILD File *was not* built using standard release
 
457
 * procedures. If this value is given, the StringFileInfo block must
 
458
 * contain a PrivateBuild string.
 
459
 *
 
460
 * VS_FF_SPECIALBUILD File *was* built by the original company using
 
461
 * standard release procedures but is a variation of the standard
 
462
 * file of the same version number. If this value is given, the
 
463
 * StringFileInfo block must contain a SpecialBuild string.
 
464
 */
 
465
 
 
466
#ifdef PNG_USER_PRIVATEBUILD /* From pnglibconf.h */
 
467
#  define PNG_LIBPNG_BUILD_TYPE \
 
468
       (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_PRIVATE)
 
469
#else
 
470
#  ifdef PNG_LIBPNG_SPECIALBUILD
 
471
#    define PNG_LIBPNG_BUILD_TYPE \
 
472
         (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_SPECIAL)
 
473
#  else
 
474
#    define PNG_LIBPNG_BUILD_TYPE (PNG_LIBPNG_BUILD_BASE_TYPE)
 
475
#  endif
 
476
#endif
 
477
 
 
478
#ifndef PNG_VERSION_INFO_ONLY
 
479
 
 
480
/* Inhibit C++ name-mangling for libpng functions but not for system calls. */
 
481
#ifdef __cplusplus
 
482
extern "C" {
 
483
#endif /* __cplusplus */
 
484
 
 
485
/* Version information for C files, stored in png.c.  This had better match
 
486
 * the version above.
 
487
 */
 
488
#define png_libpng_ver png_get_header_ver(NULL)
 
489
 
 
490
/* This file is arranged in several sections:
 
491
 *
 
492
 * 1. Any configuration options that can be specified by for the application
 
493
 *    code when it is built.  (Build time configuration is in pnglibconf.h)
 
494
 * 2. Type definitions (base types are defined in pngconf.h), structure
 
495
 *    definitions.
 
496
 * 3. Exported library functions.
 
497
 *
 
498
 * The library source code has additional files (principally pngpriv.h) that
 
499
 * allow configuration of the library.
 
500
 */
 
501
/* Section 1: run time configuration
 
502
 * See pnglibconf.h for build time configuration
 
503
 *
 
504
 * Run time configuration allows the application to choose between
 
505
 * implementations of certain arithmetic APIs.  The default is set
 
506
 * at build time and recorded in pnglibconf.h, but it is safe to
 
507
 * override these (and only these) settings.  Note that this won't
 
508
 * change what the library does, only application code, and the
 
509
 * settings can (and probably should) be made on a per-file basis
 
510
 * by setting the #defines before including png.h
 
511
 *
 
512
 * Use macros to read integers from PNG data or use the exported
 
513
 * functions?
 
514
 *   PNG_USE_READ_MACROS: use the macros (see below)  Note that
 
515
 *     the macros evaluate their argument multiple times.
 
516
 *   PNG_NO_USE_READ_MACROS: call the relevant library function.
 
517
 *
 
518
 * Use the alternative algorithm for compositing alpha samples that
 
519
 * does not use division?
 
520
 *   PNG_READ_COMPOSITE_NODIV_SUPPORTED: use the 'no division'
 
521
 *      algorithm.
 
522
 *   PNG_NO_READ_COMPOSITE_NODIV: use the 'division' algorithm.
 
523
 *
 
524
 * How to handle benign errors if PNG_ALLOW_BENIGN_ERRORS is
 
525
 * false?
 
526
 *   PNG_ALLOW_BENIGN_ERRORS: map calls to the benign error
 
527
 *      APIs to png_warning.
 
528
 * Otherwise the calls are mapped to png_error.
 
529
 */
 
530
 
 
531
/* Section 2: type definitions, including structures and compile time
 
532
 * constants.
 
533
 * See pngconf.h for base types that vary by machine/system
 
534
 */
 
535
 
 
536
/* This triggers a compiler error in png.c, if png.c and png.h
 
537
 * do not agree upon the version number.
 
538
 */
 
539
typedef char* png_libpng_version_1_5_7;
 
540
 
 
541
/* Three color definitions.  The order of the red, green, and blue, (and the
 
542
 * exact size) is not important, although the size of the fields need to
 
543
 * be png_byte or png_uint_16 (as defined below).
 
544
 */
 
545
typedef struct png_color_struct
 
546
{
 
547
   png_byte red;
 
548
   png_byte green;
 
549
   png_byte blue;
 
550
} png_color;
 
551
typedef png_color FAR * png_colorp;
 
552
typedef PNG_CONST png_color FAR * png_const_colorp;
 
553
typedef png_color FAR * FAR * png_colorpp;
 
554
 
 
555
typedef struct png_color_16_struct
 
556
{
 
557
   png_byte index;    /* used for palette files */
 
558
   png_uint_16 red;   /* for use in red green blue files */
 
559
   png_uint_16 green;
 
560
   png_uint_16 blue;
 
561
   png_uint_16 gray;  /* for use in grayscale files */
 
562
} png_color_16;
 
563
typedef png_color_16 FAR * png_color_16p;
 
564
typedef PNG_CONST png_color_16 FAR * png_const_color_16p;
 
565
typedef png_color_16 FAR * FAR * png_color_16pp;
 
566
 
 
567
typedef struct png_color_8_struct
 
568
{
 
569
   png_byte red;   /* for use in red green blue files */
 
570
   png_byte green;
 
571
   png_byte blue;
 
572
   png_byte gray;  /* for use in grayscale files */
 
573
   png_byte alpha; /* for alpha channel files */
 
574
} png_color_8;
 
575
typedef png_color_8 FAR * png_color_8p;
 
576
typedef PNG_CONST png_color_8 FAR * png_const_color_8p;
 
577
typedef png_color_8 FAR * FAR * png_color_8pp;
 
578
 
 
579
/*
 
580
 * The following two structures are used for the in-core representation
 
581
 * of sPLT chunks.
 
582
 */
 
583
typedef struct png_sPLT_entry_struct
 
584
{
 
585
   png_uint_16 red;
 
586
   png_uint_16 green;
 
587
   png_uint_16 blue;
 
588
   png_uint_16 alpha;
 
589
   png_uint_16 frequency;
 
590
} png_sPLT_entry;
 
591
typedef png_sPLT_entry FAR * png_sPLT_entryp;
 
592
typedef PNG_CONST png_sPLT_entry FAR * png_const_sPLT_entryp;
 
593
typedef png_sPLT_entry FAR * FAR * png_sPLT_entrypp;
 
594
 
 
595
/*  When the depth of the sPLT palette is 8 bits, the color and alpha samples
 
596
 *  occupy the LSB of their respective members, and the MSB of each member
 
597
 *  is zero-filled.  The frequency member always occupies the full 16 bits.
 
598
 */
 
599
 
 
600
typedef struct png_sPLT_struct
 
601
{
 
602
   png_charp name;           /* palette name */
 
603
   png_byte depth;           /* depth of palette samples */
 
604
   png_sPLT_entryp entries;  /* palette entries */
 
605
   png_int_32 nentries;      /* number of palette entries */
 
606
} png_sPLT_t;
 
607
typedef png_sPLT_t FAR * png_sPLT_tp;
 
608
typedef PNG_CONST png_sPLT_t FAR * png_const_sPLT_tp;
 
609
typedef png_sPLT_t FAR * FAR * png_sPLT_tpp;
 
610
 
 
611
#ifdef PNG_TEXT_SUPPORTED
 
612
/* png_text holds the contents of a text/ztxt/itxt chunk in a PNG file,
 
613
 * and whether that contents is compressed or not.  The "key" field
 
614
 * points to a regular zero-terminated C string.  The "text" fields can be a
 
615
 * regular C string, an empty string, or a NULL pointer.
 
616
 * However, the structure returned by png_get_text() will always contain
 
617
 * the "text" field as a regular zero-terminated C string (possibly
 
618
 * empty), never a NULL pointer, so it can be safely used in printf() and
 
619
 * other string-handling functions.  Note that the "itxt_length", "lang", and
 
620
 * "lang_key" members of the structure only exist when the library is built
 
621
 * with iTXt chunk support.  Prior to libpng-1.4.0 the library was built by
 
622
 * default without iTXt support. Also note that when iTXt *is* supported,
 
623
 * the "lang" and "lang_key" fields contain NULL pointers when the
 
624
 * "compression" field contains * PNG_TEXT_COMPRESSION_NONE or
 
625
 * PNG_TEXT_COMPRESSION_zTXt. Note that the "compression value" is not the
 
626
 * same as what appears in the PNG tEXt/zTXt/iTXt chunk's "compression flag"
 
627
 * which is always 0 or 1, or its "compression method" which is always 0.
 
628
 */
 
629
typedef struct png_text_struct
 
630
{
 
631
   int  compression;       /* compression value:
 
632
                             -1: tEXt, none
 
633
                              0: zTXt, deflate
 
634
                              1: iTXt, none
 
635
                              2: iTXt, deflate  */
 
636
   png_charp key;          /* keyword, 1-79 character description of "text" */
 
637
   png_charp text;         /* comment, may be an empty string (ie "")
 
638
                              or a NULL pointer */
 
639
   png_size_t text_length; /* length of the text string */
 
640
   png_size_t itxt_length; /* length of the itxt string */
 
641
   png_charp lang;         /* language code, 0-79 characters
 
642
                              or a NULL pointer */
 
643
   png_charp lang_key;     /* keyword translated UTF-8 string, 0 or more
 
644
                              chars or a NULL pointer */
 
645
} png_text;
 
646
typedef png_text FAR * png_textp;
 
647
typedef PNG_CONST png_text FAR * png_const_textp;
 
648
typedef png_text FAR * FAR * png_textpp;
 
649
#endif
 
650
 
 
651
/* Supported compression types for text in PNG files (tEXt, and zTXt).
 
652
 * The values of the PNG_TEXT_COMPRESSION_ defines should NOT be changed. */
 
653
#define PNG_TEXT_COMPRESSION_NONE_WR -3
 
654
#define PNG_TEXT_COMPRESSION_zTXt_WR -2
 
655
#define PNG_TEXT_COMPRESSION_NONE    -1
 
656
#define PNG_TEXT_COMPRESSION_zTXt     0
 
657
#define PNG_ITXT_COMPRESSION_NONE     1
 
658
#define PNG_ITXT_COMPRESSION_zTXt     2
 
659
#define PNG_TEXT_COMPRESSION_LAST     3  /* Not a valid value */
 
660
 
 
661
/* png_time is a way to hold the time in an machine independent way.
 
662
 * Two conversions are provided, both from time_t and struct tm.  There
 
663
 * is no portable way to convert to either of these structures, as far
 
664
 * as I know.  If you know of a portable way, send it to me.  As a side
 
665
 * note - PNG has always been Year 2000 compliant!
 
666
 */
 
667
typedef struct png_time_struct
 
668
{
 
669
   png_uint_16 year; /* full year, as in, 1995 */
 
670
   png_byte month;   /* month of year, 1 - 12 */
 
671
   png_byte day;     /* day of month, 1 - 31 */
 
672
   png_byte hour;    /* hour of day, 0 - 23 */
 
673
   png_byte minute;  /* minute of hour, 0 - 59 */
 
674
   png_byte second;  /* second of minute, 0 - 60 (for leap seconds) */
 
675
} png_time;
 
676
typedef png_time FAR * png_timep;
 
677
typedef PNG_CONST png_time FAR * png_const_timep;
 
678
typedef png_time FAR * FAR * png_timepp;
 
679
 
 
680
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) || \
 
681
    defined(PNG_HANDLE_AS_UNKNOWN_SUPPORTED)
 
682
/* png_unknown_chunk is a structure to hold queued chunks for which there is
 
683
 * no specific support.  The idea is that we can use this to queue
 
684
 * up private chunks for output even though the library doesn't actually
 
685
 * know about their semantics.
 
686
 */
 
687
typedef struct png_unknown_chunk_t
 
688
{
 
689
    png_byte name[5];
 
690
    png_byte *data;
 
691
    png_size_t size;
 
692
 
 
693
    /* libpng-using applications should NOT directly modify this byte. */
 
694
    png_byte location; /* mode of operation at read time */
 
695
}
 
696
 
 
697
 
 
698
png_unknown_chunk;
 
699
typedef png_unknown_chunk FAR * png_unknown_chunkp;
 
700
typedef PNG_CONST png_unknown_chunk FAR * png_const_unknown_chunkp;
 
701
typedef png_unknown_chunk FAR * FAR * png_unknown_chunkpp;
 
702
#endif
 
703
 
 
704
/* Values for the unknown chunk location byte */
 
705
 
 
706
#define PNG_HAVE_IHDR  0x01
 
707
#define PNG_HAVE_PLTE  0x02
 
708
#define PNG_AFTER_IDAT 0x08
 
709
 
 
710
/* The complete definition of png_info has, as of libpng-1.5.0,
 
711
 * been moved into a separate header file that is not accessible to
 
712
 * applications.  Read libpng-manual.txt or libpng.3 for more info.
 
713
 */
 
714
typedef struct png_info_def png_info;
 
715
typedef png_info FAR * png_infop;
 
716
typedef PNG_CONST png_info FAR * png_const_infop;
 
717
typedef png_info FAR * FAR * png_infopp;
 
718
 
 
719
/* Maximum positive integer used in PNG is (2^31)-1 */
 
720
#define PNG_UINT_31_MAX ((png_uint_32)0x7fffffffL)
 
721
#define PNG_UINT_32_MAX ((png_uint_32)(-1))
 
722
#define PNG_SIZE_MAX ((png_size_t)(-1))
 
723
 
 
724
/* These are constants for fixed point values encoded in the
 
725
 * PNG specification manner (x100000)
 
726
 */
 
727
#define PNG_FP_1    100000
 
728
#define PNG_FP_HALF  50000
 
729
#define PNG_FP_MAX  ((png_fixed_point)0x7fffffffL)
 
730
#define PNG_FP_MIN  (-PNG_FP_MAX)
 
731
 
 
732
/* These describe the color_type field in png_info. */
 
733
/* color type masks */
 
734
#define PNG_COLOR_MASK_PALETTE    1
 
735
#define PNG_COLOR_MASK_COLOR      2
 
736
#define PNG_COLOR_MASK_ALPHA      4
 
737
 
 
738
/* color types.  Note that not all combinations are legal */
 
739
#define PNG_COLOR_TYPE_GRAY 0
 
740
#define PNG_COLOR_TYPE_PALETTE  (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE)
 
741
#define PNG_COLOR_TYPE_RGB        (PNG_COLOR_MASK_COLOR)
 
742
#define PNG_COLOR_TYPE_RGB_ALPHA  (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA)
 
743
#define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA)
 
744
/* aliases */
 
745
#define PNG_COLOR_TYPE_RGBA  PNG_COLOR_TYPE_RGB_ALPHA
 
746
#define PNG_COLOR_TYPE_GA  PNG_COLOR_TYPE_GRAY_ALPHA
 
747
 
 
748
/* This is for compression type. PNG 1.0-1.2 only define the single type. */
 
749
#define PNG_COMPRESSION_TYPE_BASE 0 /* Deflate method 8, 32K window */
 
750
#define PNG_COMPRESSION_TYPE_DEFAULT PNG_COMPRESSION_TYPE_BASE
 
751
 
 
752
/* This is for filter type. PNG 1.0-1.2 only define the single type. */
 
753
#define PNG_FILTER_TYPE_BASE      0 /* Single row per-byte filtering */
 
754
#define PNG_INTRAPIXEL_DIFFERENCING 64 /* Used only in MNG datastreams */
 
755
#define PNG_FILTER_TYPE_DEFAULT   PNG_FILTER_TYPE_BASE
 
756
 
 
757
/* These are for the interlacing type.  These values should NOT be changed. */
 
758
#define PNG_INTERLACE_NONE        0 /* Non-interlaced image */
 
759
#define PNG_INTERLACE_ADAM7       1 /* Adam7 interlacing */
 
760
#define PNG_INTERLACE_LAST        2 /* Not a valid value */
 
761
 
 
762
/* These are for the oFFs chunk.  These values should NOT be changed. */
 
763
#define PNG_OFFSET_PIXEL          0 /* Offset in pixels */
 
764
#define PNG_OFFSET_MICROMETER     1 /* Offset in micrometers (1/10^6 meter) */
 
765
#define PNG_OFFSET_LAST           2 /* Not a valid value */
 
766
 
 
767
/* These are for the pCAL chunk.  These values should NOT be changed. */
 
768
#define PNG_EQUATION_LINEAR       0 /* Linear transformation */
 
769
#define PNG_EQUATION_BASE_E       1 /* Exponential base e transform */
 
770
#define PNG_EQUATION_ARBITRARY    2 /* Arbitrary base exponential transform */
 
771
#define PNG_EQUATION_HYPERBOLIC   3 /* Hyperbolic sine transformation */
 
772
#define PNG_EQUATION_LAST         4 /* Not a valid value */
 
773
 
 
774
/* These are for the sCAL chunk.  These values should NOT be changed. */
 
775
#define PNG_SCALE_UNKNOWN         0 /* unknown unit (image scale) */
 
776
#define PNG_SCALE_METER           1 /* meters per pixel */
 
777
#define PNG_SCALE_RADIAN          2 /* radians per pixel */
 
778
#define PNG_SCALE_LAST            3 /* Not a valid value */
 
779
 
 
780
/* These are for the pHYs chunk.  These values should NOT be changed. */
 
781
#define PNG_RESOLUTION_UNKNOWN    0 /* pixels/unknown unit (aspect ratio) */
 
782
#define PNG_RESOLUTION_METER      1 /* pixels/meter */
 
783
#define PNG_RESOLUTION_LAST       2 /* Not a valid value */
 
784
 
 
785
/* These are for the sRGB chunk.  These values should NOT be changed. */
 
786
#define PNG_sRGB_INTENT_PERCEPTUAL 0
 
787
#define PNG_sRGB_INTENT_RELATIVE   1
 
788
#define PNG_sRGB_INTENT_SATURATION 2
 
789
#define PNG_sRGB_INTENT_ABSOLUTE   3
 
790
#define PNG_sRGB_INTENT_LAST       4 /* Not a valid value */
 
791
 
 
792
/* This is for text chunks */
 
793
#define PNG_KEYWORD_MAX_LENGTH     79
 
794
 
 
795
/* Maximum number of entries in PLTE/sPLT/tRNS arrays */
 
796
#define PNG_MAX_PALETTE_LENGTH    256
 
797
 
 
798
/* These determine if an ancillary chunk's data has been successfully read
 
799
 * from the PNG header, or if the application has filled in the corresponding
 
800
 * data in the info_struct to be written into the output file.  The values
 
801
 * of the PNG_INFO_<chunk> defines should NOT be changed.
 
802
 */
 
803
#define PNG_INFO_gAMA 0x0001
 
804
#define PNG_INFO_sBIT 0x0002
 
805
#define PNG_INFO_cHRM 0x0004
 
806
#define PNG_INFO_PLTE 0x0008
 
807
#define PNG_INFO_tRNS 0x0010
 
808
#define PNG_INFO_bKGD 0x0020
 
809
#define PNG_INFO_hIST 0x0040
 
810
#define PNG_INFO_pHYs 0x0080
 
811
#define PNG_INFO_oFFs 0x0100
 
812
#define PNG_INFO_tIME 0x0200
 
813
#define PNG_INFO_pCAL 0x0400
 
814
#define PNG_INFO_sRGB 0x0800   /* GR-P, 0.96a */
 
815
#define PNG_INFO_iCCP 0x1000   /* ESR, 1.0.6 */
 
816
#define PNG_INFO_sPLT 0x2000   /* ESR, 1.0.6 */
 
817
#define PNG_INFO_sCAL 0x4000   /* ESR, 1.0.6 */
 
818
#define PNG_INFO_IDAT 0x8000   /* ESR, 1.0.6 */
 
819
 
 
820
/* This is used for the transformation routines, as some of them
 
821
 * change these values for the row.  It also should enable using
 
822
 * the routines for other purposes.
 
823
 */
 
824
typedef struct png_row_info_struct
 
825
{
 
826
   png_uint_32 width;    /* width of row */
 
827
   png_size_t rowbytes;  /* number of bytes in row */
 
828
   png_byte color_type;  /* color type of row */
 
829
   png_byte bit_depth;   /* bit depth of row */
 
830
   png_byte channels;    /* number of channels (1, 2, 3, or 4) */
 
831
   png_byte pixel_depth; /* bits per pixel (depth * channels) */
 
832
} png_row_info;
 
833
 
 
834
typedef png_row_info FAR * png_row_infop;
 
835
typedef png_row_info FAR * FAR * png_row_infopp;
 
836
 
 
837
/* The complete definition of png_struct has, as of libpng-1.5.0,
 
838
 * been moved into a separate header file that is not accessible to
 
839
 * applications.  Read libpng-manual.txt or libpng.3 for more info.
 
840
 */
 
841
typedef struct png_struct_def png_struct;
 
842
typedef PNG_CONST png_struct FAR * png_const_structp;
 
843
typedef png_struct FAR * png_structp;
 
844
 
 
845
/* These are the function types for the I/O functions and for the functions
 
846
 * that allow the user to override the default I/O functions with his or her
 
847
 * own.  The png_error_ptr type should match that of user-supplied warning
 
848
 * and error functions, while the png_rw_ptr type should match that of the
 
849
 * user read/write data functions.  Note that the 'write' function must not
 
850
 * modify the buffer it is passed. The 'read' function, on the other hand, is
 
851
 * expected to return the read data in the buffer.
 
852
 */
 
853
typedef PNG_CALLBACK(void, *png_error_ptr, (png_structp, png_const_charp));
 
854
typedef PNG_CALLBACK(void, *png_rw_ptr, (png_structp, png_bytep, png_size_t));
 
855
typedef PNG_CALLBACK(void, *png_flush_ptr, (png_structp));
 
856
typedef PNG_CALLBACK(void, *png_read_status_ptr, (png_structp, png_uint_32,
 
857
    int));
 
858
typedef PNG_CALLBACK(void, *png_write_status_ptr, (png_structp, png_uint_32,
 
859
    int));
 
860
 
 
861
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
 
862
typedef PNG_CALLBACK(void, *png_progressive_info_ptr, (png_structp, png_infop));
 
863
typedef PNG_CALLBACK(void, *png_progressive_end_ptr, (png_structp, png_infop));
 
864
 
 
865
/* The following callback receives png_uint_32 row_number, int pass for the
 
866
 * png_bytep data of the row.  When transforming an interlaced image the
 
867
 * row number is the row number within the sub-image of the interlace pass, so
 
868
 * the value will increase to the height of the sub-image (not the full image)
 
869
 * then reset to 0 for the next pass.
 
870
 *
 
871
 * Use PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to
 
872
 * find the output pixel (x,y) given an interlaced sub-image pixel
 
873
 * (row,col,pass).  (See below for these macros.)
 
874
 */
 
875
typedef PNG_CALLBACK(void, *png_progressive_row_ptr, (png_structp, png_bytep,
 
876
    png_uint_32, int));
 
877
#endif
 
878
 
 
879
#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
 
880
    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
 
881
typedef PNG_CALLBACK(void, *png_user_transform_ptr, (png_structp, png_row_infop,
 
882
    png_bytep));
 
883
#endif
 
884
 
 
885
#ifdef PNG_USER_CHUNKS_SUPPORTED
 
886
typedef PNG_CALLBACK(int, *png_user_chunk_ptr, (png_structp,
 
887
    png_unknown_chunkp));
 
888
#endif
 
889
#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED
 
890
typedef PNG_CALLBACK(void, *png_unknown_chunk_ptr, (png_structp));
 
891
#endif
 
892
 
 
893
#ifdef PNG_SETJMP_SUPPORTED
 
894
/* This must match the function definition in <setjmp.h>, and the application
 
895
 * must include this before png.h to obtain the definition of jmp_buf.  The
 
896
 * function is required to be PNG_NORETURN, but this is not checked.  If the
 
897
 * function does return the application will crash via an abort() or similar
 
898
 * system level call.
 
899
 *
 
900
 * If you get a warning here while building the library you may need to make
 
901
 * changes to ensure that pnglibconf.h records the calling convention used by
 
902
 * your compiler.  This may be very difficult - try using a different compiler
 
903
 * to build the library!
 
904
 */
 
905
PNG_FUNCTION(void, (PNGCAPI *png_longjmp_ptr), PNGARG((jmp_buf, int)), typedef);
 
906
#endif
 
907
 
 
908
/* Transform masks for the high-level interface */
 
909
#define PNG_TRANSFORM_IDENTITY       0x0000    /* read and write */
 
910
#define PNG_TRANSFORM_STRIP_16       0x0001    /* read only */
 
911
#define PNG_TRANSFORM_STRIP_ALPHA    0x0002    /* read only */
 
912
#define PNG_TRANSFORM_PACKING        0x0004    /* read and write */
 
913
#define PNG_TRANSFORM_PACKSWAP       0x0008    /* read and write */
 
914
#define PNG_TRANSFORM_EXPAND         0x0010    /* read only */
 
915
#define PNG_TRANSFORM_INVERT_MONO    0x0020    /* read and write */
 
916
#define PNG_TRANSFORM_SHIFT          0x0040    /* read and write */
 
917
#define PNG_TRANSFORM_BGR            0x0080    /* read and write */
 
918
#define PNG_TRANSFORM_SWAP_ALPHA     0x0100    /* read and write */
 
919
#define PNG_TRANSFORM_SWAP_ENDIAN    0x0200    /* read and write */
 
920
#define PNG_TRANSFORM_INVERT_ALPHA   0x0400    /* read and write */
 
921
#define PNG_TRANSFORM_STRIP_FILLER   0x0800    /* write only */
 
922
/* Added to libpng-1.2.34 */
 
923
#define PNG_TRANSFORM_STRIP_FILLER_BEFORE PNG_TRANSFORM_STRIP_FILLER
 
924
#define PNG_TRANSFORM_STRIP_FILLER_AFTER 0x1000 /* write only */
 
925
/* Added to libpng-1.4.0 */
 
926
#define PNG_TRANSFORM_GRAY_TO_RGB   0x2000      /* read only */
 
927
/* Added to libpng-1.5.4 */
 
928
#define PNG_TRANSFORM_EXPAND_16     0x4000      /* read only */
 
929
#define PNG_TRANSFORM_SCALE_16      0x8000      /* read only */
 
930
 
 
931
/* Flags for MNG supported features */
 
932
#define PNG_FLAG_MNG_EMPTY_PLTE     0x01
 
933
#define PNG_FLAG_MNG_FILTER_64      0x04
 
934
#define PNG_ALL_MNG_FEATURES        0x05
 
935
 
 
936
/* NOTE: prior to 1.5 these functions had no 'API' style declaration,
 
937
 * this allowed the zlib default functions to be used on Windows
 
938
 * platforms.  In 1.5 the zlib default malloc (which just calls malloc and
 
939
 * ignores the first argument) should be completely compatible with the
 
940
 * following.
 
941
 */
 
942
typedef PNG_CALLBACK(png_voidp, *png_malloc_ptr, (png_structp,
 
943
    png_alloc_size_t));
 
944
typedef PNG_CALLBACK(void, *png_free_ptr, (png_structp, png_voidp));
 
945
 
 
946
typedef png_struct FAR * FAR * png_structpp;
 
947
 
 
948
/* Section 3: exported functions
 
949
 * Here are the function definitions most commonly used.  This is not
 
950
 * the place to find out how to use libpng.  See libpng-manual.txt for the
 
951
 * full explanation, see example.c for the summary.  This just provides
 
952
 * a simple one line description of the use of each function.
 
953
 *
 
954
 * The PNG_EXPORT() and PNG_EXPORTA() macros used below are defined in
 
955
 * pngconf.h and in the *.dfn files in the scripts directory.
 
956
 *
 
957
 *   PNG_EXPORT(ordinal, type, name, (args));
 
958
 *
 
959
 *       ordinal:    ordinal that is used while building
 
960
 *                   *.def files. The ordinal value is only
 
961
 *                   relevant when preprocessing png.h with
 
962
 *                   the *.dfn files for building symbol table
 
963
 *                   entries, and are removed by pngconf.h.
 
964
 *       type:       return type of the function
 
965
 *       name:       function name
 
966
 *       args:       function arguments, with types
 
967
 *
 
968
 * When we wish to append attributes to a function prototype we use
 
969
 * the PNG_EXPORTA() macro instead.
 
970
 *
 
971
 *   PNG_EXPORTA(ordinal, type, name, (args), attributes);
 
972
 *
 
973
 *       ordinal, type, name, and args: same as in PNG_EXPORT().
 
974
 *       attributes: function attributes
 
975
 */
 
976
 
 
977
/* Returns the version number of the library */
 
978
PNG_EXPORT(1, png_uint_32, png_access_version_number, (void));
 
979
 
 
980
/* Tell lib we have already handled the first <num_bytes> magic bytes.
 
981
 * Handling more than 8 bytes from the beginning of the file is an error.
 
982
 */
 
983
PNG_EXPORT(2, void, png_set_sig_bytes, (png_structp png_ptr, int num_bytes));
 
984
 
 
985
/* Check sig[start] through sig[start + num_to_check - 1] to see if it's a
 
986
 * PNG file.  Returns zero if the supplied bytes match the 8-byte PNG
 
987
 * signature, and non-zero otherwise.  Having num_to_check == 0 or
 
988
 * start > 7 will always fail (ie return non-zero).
 
989
 */
 
990
PNG_EXPORT(3, int, png_sig_cmp, (png_const_bytep sig, png_size_t start,
 
991
    png_size_t num_to_check));
 
992
 
 
993
/* Simple signature checking function.  This is the same as calling
 
994
 * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n).
 
995
 */
 
996
#define png_check_sig(sig, n) !png_sig_cmp((sig), 0, (n))
 
997
 
 
998
/* Allocate and initialize png_ptr struct for reading, and any other memory. */
 
999
PNG_EXPORTA(4, png_structp, png_create_read_struct,
 
1000
    (png_const_charp user_png_ver, png_voidp error_ptr,
 
1001
    png_error_ptr error_fn, png_error_ptr warn_fn),
 
1002
    PNG_ALLOCATED);
 
1003
 
 
1004
/* Allocate and initialize png_ptr struct for writing, and any other memory */
 
1005
PNG_EXPORTA(5, png_structp, png_create_write_struct,
 
1006
    (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn,
 
1007
    png_error_ptr warn_fn),
 
1008
    PNG_ALLOCATED);
 
1009
 
 
1010
PNG_EXPORT(6, png_size_t, png_get_compression_buffer_size,
 
1011
    (png_const_structp png_ptr));
 
1012
 
 
1013
PNG_EXPORT(7, void, png_set_compression_buffer_size, (png_structp png_ptr,
 
1014
    png_size_t size));
 
1015
 
 
1016
/* Moved from pngconf.h in 1.4.0 and modified to ensure setjmp/longjmp
 
1017
 * match up.
 
1018
 */
 
1019
#ifdef PNG_SETJMP_SUPPORTED
 
1020
/* This function returns the jmp_buf built in to *png_ptr.  It must be
 
1021
 * supplied with an appropriate 'longjmp' function to use on that jmp_buf
 
1022
 * unless the default error function is overridden in which case NULL is
 
1023
 * acceptable.  The size of the jmp_buf is checked against the actual size
 
1024
 * allocated by the library - the call will return NULL on a mismatch
 
1025
 * indicating an ABI mismatch.
 
1026
 */
 
1027
PNG_EXPORT(8, jmp_buf*, png_set_longjmp_fn, (png_structp png_ptr,
 
1028
    png_longjmp_ptr longjmp_fn, size_t jmp_buf_size));
 
1029
#  define png_jmpbuf(png_ptr) \
 
1030
      (*png_set_longjmp_fn((png_ptr), longjmp, sizeof (jmp_buf)))
 
1031
#else
 
1032
#  define png_jmpbuf(png_ptr) \
 
1033
      (LIBPNG_WAS_COMPILED_WITH__PNG_NO_SETJMP)
 
1034
#endif
 
1035
/* This function should be used by libpng applications in place of
 
1036
 * longjmp(png_ptr->jmpbuf, val).  If longjmp_fn() has been set, it
 
1037
 * will use it; otherwise it will call PNG_ABORT().  This function was
 
1038
 * added in libpng-1.5.0.
 
1039
 */
 
1040
PNG_EXPORTA(9, void, png_longjmp, (png_structp png_ptr, int val),
 
1041
    PNG_NORETURN);
 
1042
 
 
1043
#ifdef PNG_READ_SUPPORTED
 
1044
/* Reset the compression stream */
 
1045
PNG_EXPORT(10, int, png_reset_zstream, (png_structp png_ptr));
 
1046
#endif
 
1047
 
 
1048
/* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */
 
1049
#ifdef PNG_USER_MEM_SUPPORTED
 
1050
PNG_EXPORTA(11, png_structp, png_create_read_struct_2,
 
1051
    (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn,
 
1052
    png_error_ptr warn_fn,
 
1053
    png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn),
 
1054
    PNG_ALLOCATED);
 
1055
PNG_EXPORTA(12, png_structp, png_create_write_struct_2,
 
1056
    (png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn,
 
1057
    png_error_ptr warn_fn,
 
1058
    png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn),
 
1059
    PNG_ALLOCATED);
 
1060
#endif
 
1061
 
 
1062
/* Write the PNG file signature. */
 
1063
PNG_EXPORT(13, void, png_write_sig, (png_structp png_ptr));
 
1064
 
 
1065
/* Write a PNG chunk - size, type, (optional) data, CRC. */
 
1066
PNG_EXPORT(14, void, png_write_chunk, (png_structp png_ptr, png_const_bytep
 
1067
    chunk_name, png_const_bytep data, png_size_t length));
 
1068
 
 
1069
/* Write the start of a PNG chunk - length and chunk name. */
 
1070
PNG_EXPORT(15, void, png_write_chunk_start, (png_structp png_ptr,
 
1071
    png_const_bytep chunk_name, png_uint_32 length));
 
1072
 
 
1073
/* Write the data of a PNG chunk started with png_write_chunk_start(). */
 
1074
PNG_EXPORT(16, void, png_write_chunk_data, (png_structp png_ptr,
 
1075
    png_const_bytep data, png_size_t length));
 
1076
 
 
1077
/* Finish a chunk started with png_write_chunk_start() (includes CRC). */
 
1078
PNG_EXPORT(17, void, png_write_chunk_end, (png_structp png_ptr));
 
1079
 
 
1080
/* Allocate and initialize the info structure */
 
1081
PNG_EXPORTA(18, png_infop, png_create_info_struct, (png_structp png_ptr),
 
1082
    PNG_ALLOCATED);
 
1083
 
 
1084
PNG_EXPORT(19, void, png_info_init_3, (png_infopp info_ptr,
 
1085
    png_size_t png_info_struct_size));
 
1086
 
 
1087
/* Writes all the PNG information before the image. */
 
1088
PNG_EXPORT(20, void, png_write_info_before_PLTE,
 
1089
    (png_structp png_ptr, png_infop info_ptr));
 
1090
PNG_EXPORT(21, void, png_write_info,
 
1091
    (png_structp png_ptr, png_infop info_ptr));
 
1092
 
 
1093
#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
 
1094
/* Read the information before the actual image data. */
 
1095
PNG_EXPORT(22, void, png_read_info,
 
1096
    (png_structp png_ptr, png_infop info_ptr));
 
1097
#endif
 
1098
 
 
1099
#ifdef PNG_TIME_RFC1123_SUPPORTED
 
1100
PNG_EXPORT(23, png_const_charp, png_convert_to_rfc1123,
 
1101
    (png_structp png_ptr,
 
1102
    png_const_timep ptime));
 
1103
#endif
 
1104
 
 
1105
#ifdef PNG_CONVERT_tIME_SUPPORTED
 
1106
/* Convert from a struct tm to png_time */
 
1107
PNG_EXPORT(24, void, png_convert_from_struct_tm, (png_timep ptime,
 
1108
    PNG_CONST struct tm FAR * ttime));
 
1109
 
 
1110
/* Convert from time_t to png_time.  Uses gmtime() */
 
1111
PNG_EXPORT(25, void, png_convert_from_time_t,
 
1112
    (png_timep ptime, time_t ttime));
 
1113
#endif /* PNG_CONVERT_tIME_SUPPORTED */
 
1114
 
 
1115
#ifdef PNG_READ_EXPAND_SUPPORTED
 
1116
/* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */
 
1117
PNG_EXPORT(26, void, png_set_expand, (png_structp png_ptr));
 
1118
PNG_EXPORT(27, void, png_set_expand_gray_1_2_4_to_8, (png_structp png_ptr));
 
1119
PNG_EXPORT(28, void, png_set_palette_to_rgb, (png_structp png_ptr));
 
1120
PNG_EXPORT(29, void, png_set_tRNS_to_alpha, (png_structp png_ptr));
 
1121
#endif
 
1122
 
 
1123
#ifdef PNG_READ_EXPAND_16_SUPPORTED
 
1124
/* Expand to 16-bit channels, forces conversion of palette to RGB and expansion
 
1125
 * of a tRNS chunk if present.
 
1126
 */
 
1127
PNG_EXPORT(221, void, png_set_expand_16, (png_structp png_ptr));
 
1128
#endif
 
1129
 
 
1130
#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
 
1131
/* Use blue, green, red order for pixels. */
 
1132
PNG_EXPORT(30, void, png_set_bgr, (png_structp png_ptr));
 
1133
#endif
 
1134
 
 
1135
#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
 
1136
/* Expand the grayscale to 24-bit RGB if necessary. */
 
1137
PNG_EXPORT(31, void, png_set_gray_to_rgb, (png_structp png_ptr));
 
1138
#endif
 
1139
 
 
1140
#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
 
1141
/* Reduce RGB to grayscale. */
 
1142
#define PNG_ERROR_ACTION_NONE  1
 
1143
#define PNG_ERROR_ACTION_WARN  2
 
1144
#define PNG_ERROR_ACTION_ERROR 3
 
1145
#define PNG_RGB_TO_GRAY_DEFAULT (-1)/*for red/green coefficients*/
 
1146
 
 
1147
PNG_FP_EXPORT(32, void, png_set_rgb_to_gray, (png_structp png_ptr,
 
1148
    int error_action, double red, double green));
 
1149
PNG_FIXED_EXPORT(33, void, png_set_rgb_to_gray_fixed, (png_structp png_ptr,
 
1150
    int error_action, png_fixed_point red, png_fixed_point green));
 
1151
 
 
1152
PNG_EXPORT(34, png_byte, png_get_rgb_to_gray_status, (png_const_structp
 
1153
    png_ptr));
 
1154
#endif
 
1155
 
 
1156
#ifdef PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED
 
1157
PNG_EXPORT(35, void, png_build_grayscale_palette, (int bit_depth,
 
1158
    png_colorp palette));
 
1159
#endif
 
1160
 
 
1161
#ifdef PNG_READ_ALPHA_MODE_SUPPORTED
 
1162
/* How the alpha channel is interpreted - this affects how the color channels of
 
1163
 * a PNG file are returned when an alpha channel, or tRNS chunk in a palette
 
1164
 * file, is present.
 
1165
 *
 
1166
 * This has no effect on the way pixels are written into a PNG output
 
1167
 * datastream. The color samples in a PNG datastream are never premultiplied
 
1168
 * with the alpha samples.
 
1169
 *
 
1170
 * The default is to return data according to the PNG specification: the alpha
 
1171
 * channel is a linear measure of the contribution of the pixel to the
 
1172
 * corresponding composited pixel.  The gamma encoded color channels must be
 
1173
 * scaled according to the contribution and to do this it is necessary to undo
 
1174
 * the encoding, scale the color values, perform the composition and reencode
 
1175
 * the values.  This is the 'PNG' mode.
 
1176
 *
 
1177
 * The alternative is to 'associate' the alpha with the color information by
 
1178
 * storing color channel values that have been scaled by the alpha.  The
 
1179
 * advantage is that the color channels can be resampled (the image can be
 
1180
 * scaled) in this form.  The disadvantage is that normal practice is to store
 
1181
 * linear, not (gamma) encoded, values and this requires 16-bit channels for
 
1182
 * still images rather than the 8-bit channels that are just about sufficient if
 
1183
 * gamma encoding is used.  In addition all non-transparent pixel values,
 
1184
 * including completely opaque ones, must be gamma encoded to produce the final
 
1185
 * image.  This is the 'STANDARD', 'ASSOCIATED' or 'PREMULTIPLIED' mode (the
 
1186
 * latter being the two common names for associated alpha color channels.)
 
1187
 *
 
1188
 * Since it is not necessary to perform arithmetic on opaque color values so
 
1189
 * long as they are not to be resampled and are in the final color space it is
 
1190
 * possible to optimize the handling of alpha by storing the opaque pixels in
 
1191
 * the PNG format (adjusted for the output color space) while storing partially
 
1192
 * opaque pixels in the standard, linear, format.  The accuracy required for
 
1193
 * standard alpha composition is relatively low, because the pixels are
 
1194
 * isolated, therefore typically the accuracy loss in storing 8-bit linear
 
1195
 * values is acceptable.  (This is not true if the alpha channel is used to
 
1196
 * simulate transparency over large areas - use 16 bits or the PNG mode in
 
1197
 * this case!)  This is the 'OPTIMIZED' mode.  For this mode a pixel is
 
1198
 * treated as opaque only if the alpha value is equal to the maximum value.
 
1199
 *
 
1200
 * The final choice is to gamma encode the alpha channel as well.  This is
 
1201
 * broken because, in practice, no implementation that uses this choice
 
1202
 * correctly undoes the encoding before handling alpha composition.  Use this
 
1203
 * choice only if other serious errors in the software or hardware you use
 
1204
 * mandate it; the typical serious error is for dark halos to appear around
 
1205
 * opaque areas of the composited PNG image because of arithmetic overflow.
 
1206
 *
 
1207
 * The API function png_set_alpha_mode specifies which of these choices to use
 
1208
 * with an enumerated 'mode' value and the gamma of the required output:
 
1209
 */
 
1210
#define PNG_ALPHA_PNG           0 /* according to the PNG standard */
 
1211
#define PNG_ALPHA_STANDARD      1 /* according to Porter/Duff */
 
1212
#define PNG_ALPHA_ASSOCIATED    1 /* as above; this is the normal practice */
 
1213
#define PNG_ALPHA_PREMULTIPLIED 1 /* as above */
 
1214
#define PNG_ALPHA_OPTIMIZED     2 /* 'PNG' for opaque pixels, else 'STANDARD' */
 
1215
#define PNG_ALPHA_BROKEN        3 /* the alpha channel is gamma encoded */
 
1216
 
 
1217
PNG_FP_EXPORT(227, void, png_set_alpha_mode, (png_structp png_ptr, int mode,
 
1218
    double output_gamma));
 
1219
PNG_FIXED_EXPORT(228, void, png_set_alpha_mode_fixed, (png_structp png_ptr,
 
1220
    int mode, png_fixed_point output_gamma));
 
1221
#endif
 
1222
 
 
1223
#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_ALPHA_MODE_SUPPORTED)
 
1224
/* The output_gamma value is a screen gamma in libpng terminology: it expresses
 
1225
 * how to decode the output values, not how they are encoded.  The values used
 
1226
 * correspond to the normal numbers used to describe the overall gamma of a
 
1227
 * computer display system; for example 2.2 for an sRGB conformant system.  The
 
1228
 * values are scaled by 100000 in the _fixed version of the API (so 220000 for
 
1229
 * sRGB.)
 
1230
 *
 
1231
 * The inverse of the value is always used to provide a default for the PNG file
 
1232
 * encoding if it has no gAMA chunk and if png_set_gamma() has not been called
 
1233
 * to override the PNG gamma information.
 
1234
 *
 
1235
 * When the ALPHA_OPTIMIZED mode is selected the output gamma is used to encode
 
1236
 * opaque pixels however pixels with lower alpha values are not encoded,
 
1237
 * regardless of the output gamma setting.
 
1238
 *
 
1239
 * When the standard Porter Duff handling is requested with mode 1 the output
 
1240
 * encoding is set to be linear and the output_gamma value is only relevant
 
1241
 * as a default for input data that has no gamma information.  The linear output
 
1242
 * encoding will be overridden if png_set_gamma() is called - the results may be
 
1243
 * highly unexpected!
 
1244
 *
 
1245
 * The following numbers are derived from the sRGB standard and the research
 
1246
 * behind it.  sRGB is defined to be approximated by a PNG gAMA chunk value of
 
1247
 * 0.45455 (1/2.2) for PNG.  The value implicitly includes any viewing
 
1248
 * correction required to take account of any differences in the color
 
1249
 * environment of the original scene and the intended display environment; the
 
1250
 * value expresses how to *decode* the image for display, not how the original
 
1251
 * data was *encoded*.
 
1252
 *
 
1253
 * sRGB provides a peg for the PNG standard by defining a viewing environment.
 
1254
 * sRGB itself, and earlier TV standards, actually use a more complex transform
 
1255
 * (a linear portion then a gamma 2.4 power law) than PNG can express.  (PNG is
 
1256
 * limited to simple power laws.)  By saying that an image for direct display on
 
1257
 * an sRGB conformant system should be stored with a gAMA chunk value of 45455
 
1258
 * (11.3.3.2 and 11.3.3.5 of the ISO PNG specification) the PNG specification
 
1259
 * makes it possible to derive values for other display systems and
 
1260
 * environments.
 
1261
 *
 
1262
 * The Mac value is deduced from the sRGB based on an assumption that the actual
 
1263
 * extra viewing correction used in early Mac display systems was implemented as
 
1264
 * a power 1.45 lookup table.
 
1265
 *
 
1266
 * Any system where a programmable lookup table is used or where the behavior of
 
1267
 * the final display device characteristics can be changed requires system
 
1268
 * specific code to obtain the current characteristic.  However this can be
 
1269
 * difficult and most PNG gamma correction only requires an approximate value.
 
1270
 *
 
1271
 * By default, if png_set_alpha_mode() is not called, libpng assumes that all
 
1272
 * values are unencoded, linear, values and that the output device also has a
 
1273
 * linear characteristic.  This is only very rarely correct - it is invariably
 
1274
 * better to call png_set_alpha_mode() with PNG_DEFAULT_sRGB than rely on the
 
1275
 * default if you don't know what the right answer is!
 
1276
 *
 
1277
 * The special value PNG_GAMMA_MAC_18 indicates an older Mac system (pre Mac OS
 
1278
 * 10.6) which used a correction table to implement a somewhat lower gamma on an
 
1279
 * otherwise sRGB system.
 
1280
 *
 
1281
 * Both these values are reserved (not simple gamma values) in order to allow
 
1282
 * more precise correction internally in the future.
 
1283
 *
 
1284
 * NOTE: the following values can be passed to either the fixed or floating
 
1285
 * point APIs, but the floating point API will also accept floating point
 
1286
 * values.
 
1287
 */
 
1288
#define PNG_DEFAULT_sRGB -1       /* sRGB gamma and color space */
 
1289
#define PNG_GAMMA_MAC_18 -2       /* Old Mac '1.8' gamma and color space */
 
1290
#define PNG_GAMMA_sRGB   220000   /* Television standards--matches sRGB gamma */
 
1291
#define PNG_GAMMA_LINEAR PNG_FP_1 /* Linear */
 
1292
#endif
 
1293
 
 
1294
/* The following are examples of calls to png_set_alpha_mode to achieve the
 
1295
 * required overall gamma correction and, where necessary, alpha
 
1296
 * premultiplication.
 
1297
 *
 
1298
 * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB);
 
1299
 *    This is the default libpng handling of the alpha channel - it is not
 
1300
 *    pre-multiplied into the color components.  In addition the call states
 
1301
 *    that the output is for a sRGB system and causes all PNG files without gAMA
 
1302
 *    chunks to be assumed to be encoded using sRGB.
 
1303
 *
 
1304
 * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC);
 
1305
 *    In this case the output is assumed to be something like an sRGB conformant
 
1306
 *    display preceeded by a power-law lookup table of power 1.45.  This is how
 
1307
 *    early Mac systems behaved.
 
1308
 *
 
1309
 * png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_GAMMA_LINEAR);
 
1310
 *    This is the classic Jim Blinn approach and will work in academic
 
1311
 *    environments where everything is done by the book.  It has the shortcoming
 
1312
 *    of assuming that input PNG data with no gamma information is linear - this
 
1313
 *    is unlikely to be correct unless the PNG files where generated locally.
 
1314
 *    Most of the time the output precision will be so low as to show
 
1315
 *    significant banding in dark areas of the image.
 
1316
 *
 
1317
 * png_set_expand_16(pp);
 
1318
 * png_set_alpha_mode(pp, PNG_ALPHA_STANDARD, PNG_DEFAULT_sRGB);
 
1319
 *    This is a somewhat more realistic Jim Blinn inspired approach.  PNG files
 
1320
 *    are assumed to have the sRGB encoding if not marked with a gamma value and
 
1321
 *    the output is always 16 bits per component.  This permits accurate scaling
 
1322
 *    and processing of the data.  If you know that your input PNG files were
 
1323
 *    generated locally you might need to replace PNG_DEFAULT_sRGB with the
 
1324
 *    correct value for your system.
 
1325
 *
 
1326
 * png_set_alpha_mode(pp, PNG_ALPHA_OPTIMIZED, PNG_DEFAULT_sRGB);
 
1327
 *    If you just need to composite the PNG image onto an existing background
 
1328
 *    and if you control the code that does this you can use the optimization
 
1329
 *    setting.  In this case you just copy completely opaque pixels to the
 
1330
 *    output.  For pixels that are not completely transparent (you just skip
 
1331
 *    those) you do the composition math using png_composite or png_composite_16
 
1332
 *    below then encode the resultant 8-bit or 16-bit values to match the output
 
1333
 *    encoding.
 
1334
 *
 
1335
 * Other cases
 
1336
 *    If neither the PNG nor the standard linear encoding work for you because
 
1337
 *    of the software or hardware you use then you have a big problem.  The PNG
 
1338
 *    case will probably result in halos around the image.  The linear encoding
 
1339
 *    will probably result in a washed out, too bright, image (it's actually too
 
1340
 *    contrasty.)  Try the ALPHA_OPTIMIZED mode above - this will probably
 
1341
 *    substantially reduce the halos.  Alternatively try:
 
1342
 *
 
1343
 * png_set_alpha_mode(pp, PNG_ALPHA_BROKEN, PNG_DEFAULT_sRGB);
 
1344
 *    This option will also reduce the halos, but there will be slight dark
 
1345
 *    halos round the opaque parts of the image where the background is light.
 
1346
 *    In the OPTIMIZED mode the halos will be light halos where the background
 
1347
 *    is dark.  Take your pick - the halos are unavoidable unless you can get
 
1348
 *    your hardware/software fixed!  (The OPTIMIZED approach is slightly
 
1349
 *    faster.)
 
1350
 *
 
1351
 * When the default gamma of PNG files doesn't match the output gamma.
 
1352
 *    If you have PNG files with no gamma information png_set_alpha_mode allows
 
1353
 *    you to provide a default gamma, but it also sets the ouput gamma to the
 
1354
 *    matching value.  If you know your PNG files have a gamma that doesn't
 
1355
 *    match the output you can take advantage of the fact that
 
1356
 *    png_set_alpha_mode always sets the output gamma but only sets the PNG
 
1357
 *    default if it is not already set:
 
1358
 *
 
1359
 * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_DEFAULT_sRGB);
 
1360
 * png_set_alpha_mode(pp, PNG_ALPHA_PNG, PNG_GAMMA_MAC);
 
1361
 *    The first call sets both the default and the output gamma values, the
 
1362
 *    second call overrides the output gamma without changing the default.  This
 
1363
 *    is easier than achieving the same effect with png_set_gamma.  You must use
 
1364
 *    PNG_ALPHA_PNG for the first call - internal checking in png_set_alpha will
 
1365
 *    fire if more than one call to png_set_alpha_mode and png_set_background is
 
1366
 *    made in the same read operation, however multiple calls with PNG_ALPHA_PNG
 
1367
 *    are ignored.
 
1368
 */
 
1369
 
 
1370
#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
 
1371
PNG_EXPORT(36, void, png_set_strip_alpha, (png_structp png_ptr));
 
1372
#endif
 
1373
 
 
1374
#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \
 
1375
    defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)
 
1376
PNG_EXPORT(37, void, png_set_swap_alpha, (png_structp png_ptr));
 
1377
#endif
 
1378
 
 
1379
#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \
 
1380
    defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
 
1381
PNG_EXPORT(38, void, png_set_invert_alpha, (png_structp png_ptr));
 
1382
#endif
 
1383
 
 
1384
#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
 
1385
/* Add a filler byte to 8-bit Gray or 24-bit RGB images. */
 
1386
PNG_EXPORT(39, void, png_set_filler, (png_structp png_ptr, png_uint_32 filler,
 
1387
    int flags));
 
1388
/* The values of the PNG_FILLER_ defines should NOT be changed */
 
1389
#  define PNG_FILLER_BEFORE 0
 
1390
#  define PNG_FILLER_AFTER 1
 
1391
/* Add an alpha byte to 8-bit Gray or 24-bit RGB images. */
 
1392
PNG_EXPORT(40, void, png_set_add_alpha,
 
1393
    (png_structp png_ptr, png_uint_32 filler,
 
1394
    int flags));
 
1395
#endif /* PNG_READ_FILLER_SUPPORTED || PNG_WRITE_FILLER_SUPPORTED */
 
1396
 
 
1397
#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
 
1398
/* Swap bytes in 16-bit depth files. */
 
1399
PNG_EXPORT(41, void, png_set_swap, (png_structp png_ptr));
 
1400
#endif
 
1401
 
 
1402
#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
 
1403
/* Use 1 byte per pixel in 1, 2, or 4-bit depth files. */
 
1404
PNG_EXPORT(42, void, png_set_packing, (png_structp png_ptr));
 
1405
#endif
 
1406
 
 
1407
#if defined(PNG_READ_PACKSWAP_SUPPORTED) || \
 
1408
    defined(PNG_WRITE_PACKSWAP_SUPPORTED)
 
1409
/* Swap packing order of pixels in bytes. */
 
1410
PNG_EXPORT(43, void, png_set_packswap, (png_structp png_ptr));
 
1411
#endif
 
1412
 
 
1413
#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
 
1414
/* Converts files to legal bit depths. */
 
1415
PNG_EXPORT(44, void, png_set_shift, (png_structp png_ptr, png_const_color_8p
 
1416
    true_bits));
 
1417
#endif
 
1418
 
 
1419
#if defined(PNG_READ_INTERLACING_SUPPORTED) || \
 
1420
    defined(PNG_WRITE_INTERLACING_SUPPORTED)
 
1421
/* Have the code handle the interlacing.  Returns the number of passes.
 
1422
 * MUST be called before png_read_update_info or png_start_read_image,
 
1423
 * otherwise it will not have the desired effect.  Note that it is still
 
1424
 * necessary to call png_read_row or png_read_rows png_get_image_height
 
1425
 * times for each pass.
 
1426
*/
 
1427
PNG_EXPORT(45, int, png_set_interlace_handling, (png_structp png_ptr));
 
1428
#endif
 
1429
 
 
1430
#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED)
 
1431
/* Invert monochrome files */
 
1432
PNG_EXPORT(46, void, png_set_invert_mono, (png_structp png_ptr));
 
1433
#endif
 
1434
 
 
1435
#ifdef PNG_READ_BACKGROUND_SUPPORTED
 
1436
/* Handle alpha and tRNS by replacing with a background color.  Prior to
 
1437
 * libpng-1.5.4 this API must not be called before the PNG file header has been
 
1438
 * read.  Doing so will result in unexpected behavior and possible warnings or
 
1439
 * errors if the PNG file contains a bKGD chunk.
 
1440
 */
 
1441
PNG_FP_EXPORT(47, void, png_set_background, (png_structp png_ptr,
 
1442
    png_const_color_16p background_color, int background_gamma_code,
 
1443
    int need_expand, double background_gamma));
 
1444
PNG_FIXED_EXPORT(215, void, png_set_background_fixed, (png_structp png_ptr,
 
1445
    png_const_color_16p background_color, int background_gamma_code,
 
1446
    int need_expand, png_fixed_point background_gamma));
 
1447
#endif
 
1448
#ifdef PNG_READ_BACKGROUND_SUPPORTED
 
1449
#  define PNG_BACKGROUND_GAMMA_UNKNOWN 0
 
1450
#  define PNG_BACKGROUND_GAMMA_SCREEN  1
 
1451
#  define PNG_BACKGROUND_GAMMA_FILE    2
 
1452
#  define PNG_BACKGROUND_GAMMA_UNIQUE  3
 
1453
#endif
 
1454
 
 
1455
#ifdef PNG_READ_SCALE_16_TO_8_SUPPORTED
 
1456
/* Scale a 16-bit depth file down to 8-bit, accurately. */
 
1457
PNG_EXPORT(229, void, png_set_scale_16, (png_structp png_ptr));
 
1458
#endif
 
1459
 
 
1460
#ifdef PNG_READ_STRIP_16_TO_8_SUPPORTED
 
1461
#define PNG_READ_16_TO_8 SUPPORTED /* Name prior to 1.5.4 */
 
1462
/* Strip the second byte of information from a 16-bit depth file. */
 
1463
PNG_EXPORT(48, void, png_set_strip_16, (png_structp png_ptr));
 
1464
#endif
 
1465
 
 
1466
#ifdef PNG_READ_QUANTIZE_SUPPORTED
 
1467
/* Turn on quantizing, and reduce the palette to the number of colors
 
1468
 * available.
 
1469
 */
 
1470
PNG_EXPORT(49, void, png_set_quantize,
 
1471
    (png_structp png_ptr, png_colorp palette,
 
1472
    int num_palette, int maximum_colors, png_const_uint_16p histogram,
 
1473
    int full_quantize));
 
1474
#endif
 
1475
 
 
1476
#ifdef PNG_READ_GAMMA_SUPPORTED
 
1477
/* The threshold on gamma processing is configurable but hard-wired into the
 
1478
 * library.  The following is the floating point variant.
 
1479
 */
 
1480
#define PNG_GAMMA_THRESHOLD (PNG_GAMMA_THRESHOLD_FIXED*.00001)
 
1481
 
 
1482
/* Handle gamma correction. Screen_gamma=(display_exponent).
 
1483
 * NOTE: this API simply sets the screen and file gamma values. It will
 
1484
 * therefore override the value for gamma in a PNG file if it is called after
 
1485
 * the file header has been read - use with care  - call before reading the PNG
 
1486
 * file for best results!
 
1487
 *
 
1488
 * These routines accept the same gamma values as png_set_alpha_mode (described
 
1489
 * above).  The PNG_GAMMA_ defines and PNG_DEFAULT_sRGB can be passed to either
 
1490
 * API (floating point or fixed.)  Notice, however, that the 'file_gamma' value
 
1491
 * is the inverse of a 'screen gamma' value.
 
1492
 */
 
1493
PNG_FP_EXPORT(50, void, png_set_gamma,
 
1494
    (png_structp png_ptr, double screen_gamma,
 
1495
    double override_file_gamma));
 
1496
PNG_FIXED_EXPORT(208, void, png_set_gamma_fixed, (png_structp png_ptr,
 
1497
    png_fixed_point screen_gamma, png_fixed_point override_file_gamma));
 
1498
#endif
 
1499
 
 
1500
#ifdef PNG_WRITE_FLUSH_SUPPORTED
 
1501
/* Set how many lines between output flushes - 0 for no flushing */
 
1502
PNG_EXPORT(51, void, png_set_flush, (png_structp png_ptr, int nrows));
 
1503
/* Flush the current PNG output buffer */
 
1504
PNG_EXPORT(52, void, png_write_flush, (png_structp png_ptr));
 
1505
#endif
 
1506
 
 
1507
/* Optional update palette with requested transformations */
 
1508
PNG_EXPORT(53, void, png_start_read_image, (png_structp png_ptr));
 
1509
 
 
1510
/* Optional call to update the users info structure */
 
1511
PNG_EXPORT(54, void, png_read_update_info,
 
1512
    (png_structp png_ptr, png_infop info_ptr));
 
1513
 
 
1514
#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
 
1515
/* Read one or more rows of image data. */
 
1516
PNG_EXPORT(55, void, png_read_rows, (png_structp png_ptr, png_bytepp row,
 
1517
    png_bytepp display_row, png_uint_32 num_rows));
 
1518
#endif
 
1519
 
 
1520
#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
 
1521
/* Read a row of data. */
 
1522
PNG_EXPORT(56, void, png_read_row, (png_structp png_ptr, png_bytep row,
 
1523
    png_bytep display_row));
 
1524
#endif
 
1525
 
 
1526
#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
 
1527
/* Read the whole image into memory at once. */
 
1528
PNG_EXPORT(57, void, png_read_image, (png_structp png_ptr, png_bytepp image));
 
1529
#endif
 
1530
 
 
1531
/* Write a row of image data */
 
1532
PNG_EXPORT(58, void, png_write_row,
 
1533
    (png_structp png_ptr, png_const_bytep row));
 
1534
 
 
1535
/* Write a few rows of image data: (*row) is not written; however, the type
 
1536
 * is declared as writeable to maintain compatibility with previous versions
 
1537
 * of libpng and to allow the 'display_row' array from read_rows to be passed
 
1538
 * unchanged to write_rows.
 
1539
 */
 
1540
PNG_EXPORT(59, void, png_write_rows, (png_structp png_ptr, png_bytepp row,
 
1541
    png_uint_32 num_rows));
 
1542
 
 
1543
/* Write the image data */
 
1544
PNG_EXPORT(60, void, png_write_image,
 
1545
    (png_structp png_ptr, png_bytepp image));
 
1546
 
 
1547
/* Write the end of the PNG file. */
 
1548
PNG_EXPORT(61, void, png_write_end,
 
1549
    (png_structp png_ptr, png_infop info_ptr));
 
1550
 
 
1551
#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
 
1552
/* Read the end of the PNG file. */
 
1553
PNG_EXPORT(62, void, png_read_end, (png_structp png_ptr, png_infop info_ptr));
 
1554
#endif
 
1555
 
 
1556
/* Free any memory associated with the png_info_struct */
 
1557
PNG_EXPORT(63, void, png_destroy_info_struct, (png_structp png_ptr,
 
1558
    png_infopp info_ptr_ptr));
 
1559
 
 
1560
/* Free any memory associated with the png_struct and the png_info_structs */
 
1561
PNG_EXPORT(64, void, png_destroy_read_struct, (png_structpp png_ptr_ptr,
 
1562
    png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr));
 
1563
 
 
1564
/* Free any memory associated with the png_struct and the png_info_structs */
 
1565
PNG_EXPORT(65, void, png_destroy_write_struct, (png_structpp png_ptr_ptr,
 
1566
    png_infopp info_ptr_ptr));
 
1567
 
 
1568
/* Set the libpng method of handling chunk CRC errors */
 
1569
PNG_EXPORT(66, void, png_set_crc_action,
 
1570
    (png_structp png_ptr, int crit_action, int ancil_action));
 
1571
 
 
1572
/* Values for png_set_crc_action() say how to handle CRC errors in
 
1573
 * ancillary and critical chunks, and whether to use the data contained
 
1574
 * therein.  Note that it is impossible to "discard" data in a critical
 
1575
 * chunk.  For versions prior to 0.90, the action was always error/quit,
 
1576
 * whereas in version 0.90 and later, the action for CRC errors in ancillary
 
1577
 * chunks is warn/discard.  These values should NOT be changed.
 
1578
 *
 
1579
 *      value                       action:critical     action:ancillary
 
1580
 */
 
1581
#define PNG_CRC_DEFAULT       0  /* error/quit          warn/discard data */
 
1582
#define PNG_CRC_ERROR_QUIT    1  /* error/quit          error/quit        */
 
1583
#define PNG_CRC_WARN_DISCARD  2  /* (INVALID)           warn/discard data */
 
1584
#define PNG_CRC_WARN_USE      3  /* warn/use data       warn/use data     */
 
1585
#define PNG_CRC_QUIET_USE     4  /* quiet/use data      quiet/use data    */
 
1586
#define PNG_CRC_NO_CHANGE     5  /* use current value   use current value */
 
1587
 
 
1588
/* These functions give the user control over the scan-line filtering in
 
1589
 * libpng and the compression methods used by zlib.  These functions are
 
1590
 * mainly useful for testing, as the defaults should work with most users.
 
1591
 * Those users who are tight on memory or want faster performance at the
 
1592
 * expense of compression can modify them.  See the compression library
 
1593
 * header file (zlib.h) for an explination of the compression functions.
 
1594
 */
 
1595
 
 
1596
/* Set the filtering method(s) used by libpng.  Currently, the only valid
 
1597
 * value for "method" is 0.
 
1598
 */
 
1599
PNG_EXPORT(67, void, png_set_filter,
 
1600
    (png_structp png_ptr, int method, int filters));
 
1601
 
 
1602
/* Flags for png_set_filter() to say which filters to use.  The flags
 
1603
 * are chosen so that they don't conflict with real filter types
 
1604
 * below, in case they are supplied instead of the #defined constants.
 
1605
 * These values should NOT be changed.
 
1606
 */
 
1607
#define PNG_NO_FILTERS     0x00
 
1608
#define PNG_FILTER_NONE    0x08
 
1609
#define PNG_FILTER_SUB     0x10
 
1610
#define PNG_FILTER_UP      0x20
 
1611
#define PNG_FILTER_AVG     0x40
 
1612
#define PNG_FILTER_PAETH   0x80
 
1613
#define PNG_ALL_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP | \
 
1614
                         PNG_FILTER_AVG | PNG_FILTER_PAETH)
 
1615
 
 
1616
/* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now.
 
1617
 * These defines should NOT be changed.
 
1618
 */
 
1619
#define PNG_FILTER_VALUE_NONE  0
 
1620
#define PNG_FILTER_VALUE_SUB   1
 
1621
#define PNG_FILTER_VALUE_UP    2
 
1622
#define PNG_FILTER_VALUE_AVG   3
 
1623
#define PNG_FILTER_VALUE_PAETH 4
 
1624
#define PNG_FILTER_VALUE_LAST  5
 
1625
 
 
1626
#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED /* EXPERIMENTAL */
 
1627
/* The "heuristic_method" is given by one of the PNG_FILTER_HEURISTIC_
 
1628
 * defines, either the default (minimum-sum-of-absolute-differences), or
 
1629
 * the experimental method (weighted-minimum-sum-of-absolute-differences).
 
1630
 *
 
1631
 * Weights are factors >= 1.0, indicating how important it is to keep the
 
1632
 * filter type consistent between rows.  Larger numbers mean the current
 
1633
 * filter is that many times as likely to be the same as the "num_weights"
 
1634
 * previous filters.  This is cumulative for each previous row with a weight.
 
1635
 * There needs to be "num_weights" values in "filter_weights", or it can be
 
1636
 * NULL if the weights aren't being specified.  Weights have no influence on
 
1637
 * the selection of the first row filter.  Well chosen weights can (in theory)
 
1638
 * improve the compression for a given image.
 
1639
 *
 
1640
 * Costs are factors >= 1.0 indicating the relative decoding costs of a
 
1641
 * filter type.  Higher costs indicate more decoding expense, and are
 
1642
 * therefore less likely to be selected over a filter with lower computational
 
1643
 * costs.  There needs to be a value in "filter_costs" for each valid filter
 
1644
 * type (given by PNG_FILTER_VALUE_LAST), or it can be NULL if you aren't
 
1645
 * setting the costs.  Costs try to improve the speed of decompression without
 
1646
 * unduly increasing the compressed image size.
 
1647
 *
 
1648
 * A negative weight or cost indicates the default value is to be used, and
 
1649
 * values in the range [0.0, 1.0) indicate the value is to remain unchanged.
 
1650
 * The default values for both weights and costs are currently 1.0, but may
 
1651
 * change if good general weighting/cost heuristics can be found.  If both
 
1652
 * the weights and costs are set to 1.0, this degenerates the WEIGHTED method
 
1653
 * to the UNWEIGHTED method, but with added encoding time/computation.
 
1654
 */
 
1655
PNG_FP_EXPORT(68, void, png_set_filter_heuristics, (png_structp png_ptr,
 
1656
    int heuristic_method, int num_weights, png_const_doublep filter_weights,
 
1657
    png_const_doublep filter_costs));
 
1658
PNG_FIXED_EXPORT(209, void, png_set_filter_heuristics_fixed,
 
1659
    (png_structp png_ptr,
 
1660
    int heuristic_method, int num_weights, png_const_fixed_point_p
 
1661
    filter_weights, png_const_fixed_point_p filter_costs));
 
1662
#endif /*  PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */
 
1663
 
 
1664
/* Heuristic used for row filter selection.  These defines should NOT be
 
1665
 * changed.
 
1666
 */
 
1667
#define PNG_FILTER_HEURISTIC_DEFAULT    0  /* Currently "UNWEIGHTED" */
 
1668
#define PNG_FILTER_HEURISTIC_UNWEIGHTED 1  /* Used by libpng < 0.95 */
 
1669
#define PNG_FILTER_HEURISTIC_WEIGHTED   2  /* Experimental feature */
 
1670
#define PNG_FILTER_HEURISTIC_LAST       3  /* Not a valid value */
 
1671
 
 
1672
#ifdef PNG_WRITE_SUPPORTED
 
1673
/* Set the library compression level.  Currently, valid values range from
 
1674
 * 0 - 9, corresponding directly to the zlib compression levels 0 - 9
 
1675
 * (0 - no compression, 9 - "maximal" compression).  Note that tests have
 
1676
 * shown that zlib compression levels 3-6 usually perform as well as level 9
 
1677
 * for PNG images, and do considerably fewer caclulations.  In the future,
 
1678
 * these values may not correspond directly to the zlib compression levels.
 
1679
 */
 
1680
PNG_EXPORT(69, void, png_set_compression_level,
 
1681
    (png_structp png_ptr, int level));
 
1682
 
 
1683
PNG_EXPORT(70, void, png_set_compression_mem_level, (png_structp png_ptr,
 
1684
    int mem_level));
 
1685
 
 
1686
PNG_EXPORT(71, void, png_set_compression_strategy, (png_structp png_ptr,
 
1687
    int strategy));
 
1688
 
 
1689
/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a
 
1690
 * smaller value of window_bits if it can do so safely.
 
1691
 */
 
1692
PNG_EXPORT(72, void, png_set_compression_window_bits, (png_structp png_ptr,
 
1693
    int window_bits));
 
1694
 
 
1695
PNG_EXPORT(73, void, png_set_compression_method, (png_structp png_ptr,
 
1696
    int method));
 
1697
#endif
 
1698
 
 
1699
#ifdef PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED
 
1700
/* Also set zlib parameters for compressing non-IDAT chunks */
 
1701
PNG_EXPORT(222, void, png_set_text_compression_level,
 
1702
    (png_structp png_ptr, int level));
 
1703
 
 
1704
PNG_EXPORT(223, void, png_set_text_compression_mem_level, (png_structp png_ptr,
 
1705
    int mem_level));
 
1706
 
 
1707
PNG_EXPORT(224, void, png_set_text_compression_strategy, (png_structp png_ptr,
 
1708
    int strategy));
 
1709
 
 
1710
/* If PNG_WRITE_OPTIMIZE_CMF_SUPPORTED is defined, libpng will use a
 
1711
 * smaller value of window_bits if it can do so safely.
 
1712
 */
 
1713
PNG_EXPORT(225, void, png_set_text_compression_window_bits, (png_structp
 
1714
    png_ptr, int window_bits));
 
1715
 
 
1716
PNG_EXPORT(226, void, png_set_text_compression_method, (png_structp png_ptr,
 
1717
    int method));
 
1718
#endif /* PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED */
 
1719
 
 
1720
/* These next functions are called for input/output, memory, and error
 
1721
 * handling.  They are in the file pngrio.c, pngwio.c, and pngerror.c,
 
1722
 * and call standard C I/O routines such as fread(), fwrite(), and
 
1723
 * fprintf().  These functions can be made to use other I/O routines
 
1724
 * at run time for those applications that need to handle I/O in a
 
1725
 * different manner by calling png_set_???_fn().  See libpng-manual.txt for
 
1726
 * more information.
 
1727
 */
 
1728
 
 
1729
#ifdef PNG_STDIO_SUPPORTED
 
1730
/* Initialize the input/output for the PNG file to the default functions. */
 
1731
PNG_EXPORT(74, void, png_init_io, (png_structp png_ptr, png_FILE_p fp));
 
1732
#endif
 
1733
 
 
1734
/* Replace the (error and abort), and warning functions with user
 
1735
 * supplied functions.  If no messages are to be printed you must still
 
1736
 * write and use replacement functions. The replacement error_fn should
 
1737
 * still do a longjmp to the last setjmp location if you are using this
 
1738
 * method of error handling.  If error_fn or warning_fn is NULL, the
 
1739
 * default function will be used.
 
1740
 */
 
1741
 
 
1742
PNG_EXPORT(75, void, png_set_error_fn,
 
1743
    (png_structp png_ptr, png_voidp error_ptr,
 
1744
    png_error_ptr error_fn, png_error_ptr warning_fn));
 
1745
 
 
1746
/* Return the user pointer associated with the error functions */
 
1747
PNG_EXPORT(76, png_voidp, png_get_error_ptr, (png_const_structp png_ptr));
 
1748
 
 
1749
/* Replace the default data output functions with a user supplied one(s).
 
1750
 * If buffered output is not used, then output_flush_fn can be set to NULL.
 
1751
 * If PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time
 
1752
 * output_flush_fn will be ignored (and thus can be NULL).
 
1753
 * It is probably a mistake to use NULL for output_flush_fn if
 
1754
 * write_data_fn is not also NULL unless you have built libpng with
 
1755
 * PNG_WRITE_FLUSH_SUPPORTED undefined, because in this case libpng's
 
1756
 * default flush function, which uses the standard *FILE structure, will
 
1757
 * be used.
 
1758
 */
 
1759
PNG_EXPORT(77, void, png_set_write_fn, (png_structp png_ptr, png_voidp io_ptr,
 
1760
    png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn));
 
1761
 
 
1762
/* Replace the default data input function with a user supplied one. */
 
1763
PNG_EXPORT(78, void, png_set_read_fn, (png_structp png_ptr, png_voidp io_ptr,
 
1764
    png_rw_ptr read_data_fn));
 
1765
 
 
1766
/* Return the user pointer associated with the I/O functions */
 
1767
PNG_EXPORT(79, png_voidp, png_get_io_ptr, (png_structp png_ptr));
 
1768
 
 
1769
PNG_EXPORT(80, void, png_set_read_status_fn, (png_structp png_ptr,
 
1770
    png_read_status_ptr read_row_fn));
 
1771
 
 
1772
PNG_EXPORT(81, void, png_set_write_status_fn, (png_structp png_ptr,
 
1773
    png_write_status_ptr write_row_fn));
 
1774
 
 
1775
#ifdef PNG_USER_MEM_SUPPORTED
 
1776
/* Replace the default memory allocation functions with user supplied one(s). */
 
1777
PNG_EXPORT(82, void, png_set_mem_fn, (png_structp png_ptr, png_voidp mem_ptr,
 
1778
    png_malloc_ptr malloc_fn, png_free_ptr free_fn));
 
1779
/* Return the user pointer associated with the memory functions */
 
1780
PNG_EXPORT(83, png_voidp, png_get_mem_ptr, (png_const_structp png_ptr));
 
1781
#endif
 
1782
 
 
1783
#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED
 
1784
PNG_EXPORT(84, void, png_set_read_user_transform_fn, (png_structp png_ptr,
 
1785
    png_user_transform_ptr read_user_transform_fn));
 
1786
#endif
 
1787
 
 
1788
#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED
 
1789
PNG_EXPORT(85, void, png_set_write_user_transform_fn, (png_structp png_ptr,
 
1790
    png_user_transform_ptr write_user_transform_fn));
 
1791
#endif
 
1792
 
 
1793
#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED
 
1794
PNG_EXPORT(86, void, png_set_user_transform_info, (png_structp png_ptr,
 
1795
    png_voidp user_transform_ptr, int user_transform_depth,
 
1796
    int user_transform_channels));
 
1797
/* Return the user pointer associated with the user transform functions */
 
1798
PNG_EXPORT(87, png_voidp, png_get_user_transform_ptr,
 
1799
    (png_const_structp png_ptr));
 
1800
#endif
 
1801
 
 
1802
#ifdef PNG_USER_TRANSFORM_INFO_SUPPORTED
 
1803
/* Return information about the row currently being processed.  Note that these
 
1804
 * APIs do not fail but will return unexpected results if called outside a user
 
1805
 * transform callback.  Also note that when transforming an interlaced image the
 
1806
 * row number is the row number within the sub-image of the interlace pass, so
 
1807
 * the value will increase to the height of the sub-image (not the full image)
 
1808
 * then reset to 0 for the next pass.
 
1809
 *
 
1810
 * Use PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to
 
1811
 * find the output pixel (x,y) given an interlaced sub-image pixel
 
1812
 * (row,col,pass).  (See below for these macros.)
 
1813
 */
 
1814
PNG_EXPORT(217, png_uint_32, png_get_current_row_number, (png_const_structp));
 
1815
PNG_EXPORT(218, png_byte, png_get_current_pass_number, (png_const_structp));
 
1816
#endif
 
1817
 
 
1818
#ifdef PNG_USER_CHUNKS_SUPPORTED
 
1819
PNG_EXPORT(88, void, png_set_read_user_chunk_fn, (png_structp png_ptr,
 
1820
    png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn));
 
1821
PNG_EXPORT(89, png_voidp, png_get_user_chunk_ptr, (png_const_structp png_ptr));
 
1822
#endif
 
1823
 
 
1824
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
 
1825
/* Sets the function callbacks for the push reader, and a pointer to a
 
1826
 * user-defined structure available to the callback functions.
 
1827
 */
 
1828
PNG_EXPORT(90, void, png_set_progressive_read_fn, (png_structp png_ptr,
 
1829
    png_voidp progressive_ptr, png_progressive_info_ptr info_fn,
 
1830
    png_progressive_row_ptr row_fn, png_progressive_end_ptr end_fn));
 
1831
 
 
1832
/* Returns the user pointer associated with the push read functions */
 
1833
PNG_EXPORT(91, png_voidp, png_get_progressive_ptr, (png_const_structp png_ptr));
 
1834
 
 
1835
/* Function to be called when data becomes available */
 
1836
PNG_EXPORT(92, void, png_process_data,
 
1837
    (png_structp png_ptr, png_infop info_ptr,
 
1838
    png_bytep buffer, png_size_t buffer_size));
 
1839
 
 
1840
/* A function which may be called *only* within png_process_data to stop the
 
1841
 * processing of any more data.  The function returns the number of bytes
 
1842
 * remaining, excluding any that libpng has cached internally.  A subsequent
 
1843
 * call to png_process_data must supply these bytes again.  If the argument
 
1844
 * 'save' is set to true the routine will first save all the pending data and
 
1845
 * will always return 0.
 
1846
 */
 
1847
PNG_EXPORT(219, png_size_t, png_process_data_pause, (png_structp, int save));
 
1848
 
 
1849
/* A function which may be called *only* outside (after) a call to
 
1850
 * png_process_data.  It returns the number of bytes of data to skip in the
 
1851
 * input.  Normally it will return 0, but if it returns a non-zero value the
 
1852
 * application must skip than number of bytes of input data and pass the
 
1853
 * following data to the next call to png_process_data.
 
1854
 */
 
1855
PNG_EXPORT(220, png_uint_32, png_process_data_skip, (png_structp));
 
1856
 
 
1857
#ifdef PNG_READ_INTERLACING_SUPPORTED
 
1858
/* Function that combines rows.  'new_row' is a flag that should come from
 
1859
 * the callback and be non-NULL if anything needs to be done; the library
 
1860
 * stores its own version of the new data internally and ignores the passed
 
1861
 * in value.
 
1862
 */
 
1863
PNG_EXPORT(93, void, png_progressive_combine_row, (png_structp png_ptr,
 
1864
    png_bytep old_row, png_const_bytep new_row));
 
1865
#endif /* PNG_READ_INTERLACING_SUPPORTED */
 
1866
#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
 
1867
 
 
1868
PNG_EXPORTA(94, png_voidp, png_malloc,
 
1869
    (png_structp png_ptr, png_alloc_size_t size),
 
1870
    PNG_ALLOCATED);
 
1871
/* Added at libpng version 1.4.0 */
 
1872
PNG_EXPORTA(95, png_voidp, png_calloc,
 
1873
    (png_structp png_ptr, png_alloc_size_t size),
 
1874
    PNG_ALLOCATED);
 
1875
 
 
1876
/* Added at libpng version 1.2.4 */
 
1877
PNG_EXPORTA(96, png_voidp, png_malloc_warn, (png_structp png_ptr,
 
1878
    png_alloc_size_t size), PNG_ALLOCATED);
 
1879
 
 
1880
/* Frees a pointer allocated by png_malloc() */
 
1881
PNG_EXPORT(97, void, png_free, (png_structp png_ptr, png_voidp ptr));
 
1882
 
 
1883
/* Free data that was allocated internally */
 
1884
PNG_EXPORT(98, void, png_free_data,
 
1885
    (png_structp png_ptr, png_infop info_ptr, png_uint_32 free_me, int num));
 
1886
 
 
1887
/* Reassign responsibility for freeing existing data, whether allocated
 
1888
 * by libpng or by the application */
 
1889
PNG_EXPORT(99, void, png_data_freer,
 
1890
    (png_structp png_ptr, png_infop info_ptr, int freer, png_uint_32 mask));
 
1891
 
 
1892
/* Assignments for png_data_freer */
 
1893
#define PNG_DESTROY_WILL_FREE_DATA 1
 
1894
#define PNG_SET_WILL_FREE_DATA 1
 
1895
#define PNG_USER_WILL_FREE_DATA 2
 
1896
/* Flags for png_ptr->free_me and info_ptr->free_me */
 
1897
#define PNG_FREE_HIST 0x0008
 
1898
#define PNG_FREE_ICCP 0x0010
 
1899
#define PNG_FREE_SPLT 0x0020
 
1900
#define PNG_FREE_ROWS 0x0040
 
1901
#define PNG_FREE_PCAL 0x0080
 
1902
#define PNG_FREE_SCAL 0x0100
 
1903
#define PNG_FREE_UNKN 0x0200
 
1904
#define PNG_FREE_LIST 0x0400
 
1905
#define PNG_FREE_PLTE 0x1000
 
1906
#define PNG_FREE_TRNS 0x2000
 
1907
#define PNG_FREE_TEXT 0x4000
 
1908
#define PNG_FREE_ALL  0x7fff
 
1909
#define PNG_FREE_MUL  0x4220 /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */
 
1910
 
 
1911
#ifdef PNG_USER_MEM_SUPPORTED
 
1912
PNG_EXPORTA(100, png_voidp, png_malloc_default, (png_structp png_ptr,
 
1913
    png_alloc_size_t size), PNG_ALLOCATED);
 
1914
PNG_EXPORT(101, void, png_free_default, (png_structp png_ptr, png_voidp ptr));
 
1915
#endif
 
1916
 
 
1917
#ifdef PNG_ERROR_TEXT_SUPPORTED
 
1918
/* Fatal error in PNG image of libpng - can't continue */
 
1919
PNG_EXPORTA(102, void, png_error,
 
1920
    (png_structp png_ptr, png_const_charp error_message),
 
1921
    PNG_NORETURN);
 
1922
 
 
1923
/* The same, but the chunk name is prepended to the error string. */
 
1924
PNG_EXPORTA(103, void, png_chunk_error, (png_structp png_ptr,
 
1925
    png_const_charp error_message), PNG_NORETURN);
 
1926
 
 
1927
#else
 
1928
/* Fatal error in PNG image of libpng - can't continue */
 
1929
PNG_EXPORTA(104, void, png_err, (png_structp png_ptr), PNG_NORETURN);
 
1930
#endif
 
1931
 
 
1932
#ifdef PNG_WARNINGS_SUPPORTED
 
1933
/* Non-fatal error in libpng.  Can continue, but may have a problem. */
 
1934
PNG_EXPORT(105, void, png_warning, (png_structp png_ptr,
 
1935
    png_const_charp warning_message));
 
1936
 
 
1937
/* Non-fatal error in libpng, chunk name is prepended to message. */
 
1938
PNG_EXPORT(106, void, png_chunk_warning, (png_structp png_ptr,
 
1939
    png_const_charp warning_message));
 
1940
#endif
 
1941
 
 
1942
#ifdef PNG_BENIGN_ERRORS_SUPPORTED
 
1943
/* Benign error in libpng.  Can continue, but may have a problem.
 
1944
 * User can choose whether to handle as a fatal error or as a warning. */
 
1945
#  undef png_benign_error
 
1946
PNG_EXPORT(107, void, png_benign_error, (png_structp png_ptr,
 
1947
    png_const_charp warning_message));
 
1948
 
 
1949
/* Same, chunk name is prepended to message. */
 
1950
#  undef png_chunk_benign_error
 
1951
PNG_EXPORT(108, void, png_chunk_benign_error, (png_structp png_ptr,
 
1952
    png_const_charp warning_message));
 
1953
 
 
1954
PNG_EXPORT(109, void, png_set_benign_errors,
 
1955
    (png_structp png_ptr, int allowed));
 
1956
#else
 
1957
#  ifdef PNG_ALLOW_BENIGN_ERRORS
 
1958
#    define png_benign_error png_warning
 
1959
#    define png_chunk_benign_error png_chunk_warning
 
1960
#  else
 
1961
#    define png_benign_error png_error
 
1962
#    define png_chunk_benign_error png_chunk_error
 
1963
#  endif
 
1964
#endif
 
1965
 
 
1966
/* The png_set_<chunk> functions are for storing values in the png_info_struct.
 
1967
 * Similarly, the png_get_<chunk> calls are used to read values from the
 
1968
 * png_info_struct, either storing the parameters in the passed variables, or
 
1969
 * setting pointers into the png_info_struct where the data is stored.  The
 
1970
 * png_get_<chunk> functions return a non-zero value if the data was available
 
1971
 * in info_ptr, or return zero and do not change any of the parameters if the
 
1972
 * data was not available.
 
1973
 *
 
1974
 * These functions should be used instead of directly accessing png_info
 
1975
 * to avoid problems with future changes in the size and internal layout of
 
1976
 * png_info_struct.
 
1977
 */
 
1978
/* Returns "flag" if chunk data is valid in info_ptr. */
 
1979
PNG_EXPORT(110, png_uint_32, png_get_valid,
 
1980
    (png_const_structp png_ptr, png_const_infop info_ptr,
 
1981
    png_uint_32 flag));
 
1982
 
 
1983
/* Returns number of bytes needed to hold a transformed row. */
 
1984
PNG_EXPORT(111, png_size_t, png_get_rowbytes, (png_const_structp png_ptr,
 
1985
    png_const_infop info_ptr));
 
1986
 
 
1987
#ifdef PNG_INFO_IMAGE_SUPPORTED
 
1988
/* Returns row_pointers, which is an array of pointers to scanlines that was
 
1989
 * returned from png_read_png().
 
1990
 */
 
1991
PNG_EXPORT(112, png_bytepp, png_get_rows,
 
1992
    (png_const_structp png_ptr, png_const_infop info_ptr));
 
1993
/* Set row_pointers, which is an array of pointers to scanlines for use
 
1994
 * by png_write_png().
 
1995
 */
 
1996
PNG_EXPORT(113, void, png_set_rows, (png_structp png_ptr,
 
1997
    png_infop info_ptr, png_bytepp row_pointers));
 
1998
#endif
 
1999
 
 
2000
/* Returns number of color channels in image. */
 
2001
PNG_EXPORT(114, png_byte, png_get_channels,
 
2002
    (png_const_structp png_ptr, png_const_infop info_ptr));
 
2003
 
 
2004
#ifdef PNG_EASY_ACCESS_SUPPORTED
 
2005
/* Returns image width in pixels. */
 
2006
PNG_EXPORT(115, png_uint_32, png_get_image_width, (png_const_structp png_ptr,
 
2007
    png_const_infop info_ptr));
 
2008
 
 
2009
/* Returns image height in pixels. */
 
2010
PNG_EXPORT(116, png_uint_32, png_get_image_height, (png_const_structp png_ptr,
 
2011
    png_const_infop info_ptr));
 
2012
 
 
2013
/* Returns image bit_depth. */
 
2014
PNG_EXPORT(117, png_byte, png_get_bit_depth,
 
2015
    (png_const_structp png_ptr, png_const_infop info_ptr));
 
2016
 
 
2017
/* Returns image color_type. */
 
2018
PNG_EXPORT(118, png_byte, png_get_color_type, (png_const_structp png_ptr,
 
2019
    png_const_infop info_ptr));
 
2020
 
 
2021
/* Returns image filter_type. */
 
2022
PNG_EXPORT(119, png_byte, png_get_filter_type, (png_const_structp png_ptr,
 
2023
    png_const_infop info_ptr));
 
2024
 
 
2025
/* Returns image interlace_type. */
 
2026
PNG_EXPORT(120, png_byte, png_get_interlace_type, (png_const_structp png_ptr,
 
2027
    png_const_infop info_ptr));
 
2028
 
 
2029
/* Returns image compression_type. */
 
2030
PNG_EXPORT(121, png_byte, png_get_compression_type, (png_const_structp png_ptr,
 
2031
    png_const_infop info_ptr));
 
2032
 
 
2033
/* Returns image resolution in pixels per meter, from pHYs chunk data. */
 
2034
PNG_EXPORT(122, png_uint_32, png_get_pixels_per_meter,
 
2035
    (png_const_structp png_ptr, png_const_infop info_ptr));
 
2036
PNG_EXPORT(123, png_uint_32, png_get_x_pixels_per_meter,
 
2037
    (png_const_structp png_ptr, png_const_infop info_ptr));
 
2038
PNG_EXPORT(124, png_uint_32, png_get_y_pixels_per_meter,
 
2039
    (png_const_structp png_ptr, png_const_infop info_ptr));
 
2040
 
 
2041
/* Returns pixel aspect ratio, computed from pHYs chunk data.  */
 
2042
PNG_FP_EXPORT(125, float, png_get_pixel_aspect_ratio,
 
2043
    (png_const_structp png_ptr, png_const_infop info_ptr));
 
2044
PNG_FIXED_EXPORT(210, png_fixed_point, png_get_pixel_aspect_ratio_fixed,
 
2045
    (png_const_structp png_ptr, png_const_infop info_ptr));
 
2046
 
 
2047
/* Returns image x, y offset in pixels or microns, from oFFs chunk data. */
 
2048
PNG_EXPORT(126, png_int_32, png_get_x_offset_pixels,
 
2049
    (png_const_structp png_ptr, png_const_infop info_ptr));
 
2050
PNG_EXPORT(127, png_int_32, png_get_y_offset_pixels,
 
2051
    (png_const_structp png_ptr, png_const_infop info_ptr));
 
2052
PNG_EXPORT(128, png_int_32, png_get_x_offset_microns,
 
2053
    (png_const_structp png_ptr, png_const_infop info_ptr));
 
2054
PNG_EXPORT(129, png_int_32, png_get_y_offset_microns,
 
2055
    (png_const_structp png_ptr, png_const_infop info_ptr));
 
2056
 
 
2057
#endif /* PNG_EASY_ACCESS_SUPPORTED */
 
2058
 
 
2059
/* Returns pointer to signature string read from PNG header */
 
2060
PNG_EXPORT(130, png_const_bytep, png_get_signature,
 
2061
    (png_const_structp png_ptr, png_infop info_ptr));
 
2062
 
 
2063
#ifdef PNG_bKGD_SUPPORTED
 
2064
PNG_EXPORT(131, png_uint_32, png_get_bKGD,
 
2065
    (png_const_structp png_ptr, png_infop info_ptr,
 
2066
    png_color_16p *background));
 
2067
#endif
 
2068
 
 
2069
#ifdef PNG_bKGD_SUPPORTED
 
2070
PNG_EXPORT(132, void, png_set_bKGD, (png_structp png_ptr, png_infop info_ptr,
 
2071
    png_const_color_16p background));
 
2072
#endif
 
2073
 
 
2074
#ifdef PNG_cHRM_SUPPORTED
 
2075
PNG_FP_EXPORT(133, png_uint_32, png_get_cHRM, (png_const_structp png_ptr,
 
2076
   png_const_infop info_ptr, double *white_x, double *white_y, double *red_x,
 
2077
    double *red_y, double *green_x, double *green_y, double *blue_x,
 
2078
    double *blue_y));
 
2079
PNG_FP_EXPORT(230, png_uint_32, png_get_cHRM_XYZ, (png_structp png_ptr,
 
2080
    png_const_infop info_ptr, double *red_X, double *red_Y, double *red_Z,
 
2081
    double *green_X, double *green_Y, double *green_Z, double *blue_X,
 
2082
    double *blue_Y, double *blue_Z));
 
2083
#ifdef PNG_FIXED_POINT_SUPPORTED /* Otherwise not implemented */
 
2084
PNG_FIXED_EXPORT(134, png_uint_32, png_get_cHRM_fixed,
 
2085
    (png_const_structp png_ptr,
 
2086
    png_const_infop info_ptr, png_fixed_point *int_white_x,
 
2087
    png_fixed_point *int_white_y, png_fixed_point *int_red_x,
 
2088
    png_fixed_point *int_red_y, png_fixed_point *int_green_x,
 
2089
    png_fixed_point *int_green_y, png_fixed_point *int_blue_x,
 
2090
    png_fixed_point *int_blue_y));
 
2091
#endif
 
2092
PNG_FIXED_EXPORT(231, png_uint_32, png_get_cHRM_XYZ_fixed,
 
2093
    (png_structp png_ptr, png_const_infop info_ptr,
 
2094
    png_fixed_point *int_red_X, png_fixed_point *int_red_Y,
 
2095
    png_fixed_point *int_red_Z, png_fixed_point *int_green_X,
 
2096
    png_fixed_point *int_green_Y, png_fixed_point *int_green_Z,
 
2097
    png_fixed_point *int_blue_X, png_fixed_point *int_blue_Y,
 
2098
    png_fixed_point *int_blue_Z));
 
2099
#endif
 
2100
 
 
2101
#ifdef PNG_cHRM_SUPPORTED
 
2102
PNG_FP_EXPORT(135, void, png_set_cHRM,
 
2103
    (png_structp png_ptr, png_infop info_ptr,
 
2104
    double white_x, double white_y, double red_x, double red_y, double green_x,
 
2105
    double green_y, double blue_x, double blue_y));
 
2106
PNG_FP_EXPORT(232, void, png_set_cHRM_XYZ, (png_structp png_ptr,
 
2107
    png_infop info_ptr, double red_X, double red_Y, double red_Z,
 
2108
    double green_X, double green_Y, double green_Z, double blue_X,
 
2109
    double blue_Y, double blue_Z));
 
2110
PNG_FIXED_EXPORT(136, void, png_set_cHRM_fixed, (png_structp png_ptr,
 
2111
    png_infop info_ptr, png_fixed_point int_white_x,
 
2112
    png_fixed_point int_white_y, png_fixed_point int_red_x,
 
2113
    png_fixed_point int_red_y, png_fixed_point int_green_x,
 
2114
    png_fixed_point int_green_y, png_fixed_point int_blue_x,
 
2115
    png_fixed_point int_blue_y));
 
2116
PNG_FIXED_EXPORT(233, void, png_set_cHRM_XYZ_fixed, (png_structp png_ptr,
 
2117
    png_infop info_ptr, png_fixed_point int_red_X, png_fixed_point int_red_Y,
 
2118
    png_fixed_point int_red_Z, png_fixed_point int_green_X,
 
2119
    png_fixed_point int_green_Y, png_fixed_point int_green_Z,
 
2120
    png_fixed_point int_blue_X, png_fixed_point int_blue_Y,
 
2121
    png_fixed_point int_blue_Z));
 
2122
#endif
 
2123
 
 
2124
#ifdef PNG_gAMA_SUPPORTED
 
2125
PNG_FP_EXPORT(137, png_uint_32, png_get_gAMA,
 
2126
    (png_const_structp png_ptr, png_const_infop info_ptr,
 
2127
    double *file_gamma));
 
2128
PNG_FIXED_EXPORT(138, png_uint_32, png_get_gAMA_fixed,
 
2129
    (png_const_structp png_ptr, png_const_infop info_ptr,
 
2130
    png_fixed_point *int_file_gamma));
 
2131
#endif
 
2132
 
 
2133
#ifdef PNG_gAMA_SUPPORTED
 
2134
PNG_FP_EXPORT(139, void, png_set_gAMA, (png_structp png_ptr,
 
2135
    png_infop info_ptr, double file_gamma));
 
2136
PNG_FIXED_EXPORT(140, void, png_set_gAMA_fixed, (png_structp png_ptr,
 
2137
    png_infop info_ptr, png_fixed_point int_file_gamma));
 
2138
#endif
 
2139
 
 
2140
#ifdef PNG_hIST_SUPPORTED
 
2141
PNG_EXPORT(141, png_uint_32, png_get_hIST,
 
2142
    (png_const_structp png_ptr, png_const_infop info_ptr,
 
2143
    png_uint_16p *hist));
 
2144
#endif
 
2145
 
 
2146
#ifdef PNG_hIST_SUPPORTED
 
2147
PNG_EXPORT(142, void, png_set_hIST, (png_structp png_ptr,
 
2148
    png_infop info_ptr, png_const_uint_16p hist));
 
2149
#endif
 
2150
 
 
2151
PNG_EXPORT(143, png_uint_32, png_get_IHDR,
 
2152
    (png_structp png_ptr, png_infop info_ptr,
 
2153
    png_uint_32 *width, png_uint_32 *height, int *bit_depth, int *color_type,
 
2154
    int *interlace_method, int *compression_method, int *filter_method));
 
2155
 
 
2156
PNG_EXPORT(144, void, png_set_IHDR,
 
2157
    (png_structp png_ptr, png_infop info_ptr,
 
2158
    png_uint_32 width, png_uint_32 height, int bit_depth, int color_type,
 
2159
    int interlace_method, int compression_method, int filter_method));
 
2160
 
 
2161
#ifdef PNG_oFFs_SUPPORTED
 
2162
PNG_EXPORT(145, png_uint_32, png_get_oFFs,
 
2163
    (png_const_structp png_ptr, png_const_infop info_ptr,
 
2164
    png_int_32 *offset_x, png_int_32 *offset_y, int *unit_type));
 
2165
#endif
 
2166
 
 
2167
#ifdef PNG_oFFs_SUPPORTED
 
2168
PNG_EXPORT(146, void, png_set_oFFs,
 
2169
    (png_structp png_ptr, png_infop info_ptr,
 
2170
    png_int_32 offset_x, png_int_32 offset_y, int unit_type));
 
2171
#endif
 
2172
 
 
2173
#ifdef PNG_pCAL_SUPPORTED
 
2174
PNG_EXPORT(147, png_uint_32, png_get_pCAL,
 
2175
    (png_const_structp png_ptr, png_const_infop info_ptr,
 
2176
    png_charp *purpose, png_int_32 *X0, png_int_32 *X1, int *type,
 
2177
    int *nparams,
 
2178
    png_charp *units, png_charpp *params));
 
2179
#endif
 
2180
 
 
2181
#ifdef PNG_pCAL_SUPPORTED
 
2182
PNG_EXPORT(148, void, png_set_pCAL, (png_structp png_ptr,
 
2183
    png_infop info_ptr,
 
2184
    png_const_charp purpose, png_int_32 X0, png_int_32 X1, int type,
 
2185
    int nparams, png_const_charp units, png_charpp params));
 
2186
#endif
 
2187
 
 
2188
#ifdef PNG_pHYs_SUPPORTED
 
2189
PNG_EXPORT(149, png_uint_32, png_get_pHYs,
 
2190
    (png_const_structp png_ptr, png_const_infop info_ptr,
 
2191
    png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type));
 
2192
#endif
 
2193
 
 
2194
#ifdef PNG_pHYs_SUPPORTED
 
2195
PNG_EXPORT(150, void, png_set_pHYs,
 
2196
    (png_structp png_ptr, png_infop info_ptr,
 
2197
    png_uint_32 res_x, png_uint_32 res_y, int unit_type));
 
2198
#endif
 
2199
 
 
2200
PNG_EXPORT(151, png_uint_32, png_get_PLTE,
 
2201
    (png_const_structp png_ptr, png_const_infop info_ptr,
 
2202
    png_colorp *palette, int *num_palette));
 
2203
 
 
2204
PNG_EXPORT(152, void, png_set_PLTE,
 
2205
    (png_structp png_ptr, png_infop info_ptr,
 
2206
    png_const_colorp palette, int num_palette));
 
2207
 
 
2208
#ifdef PNG_sBIT_SUPPORTED
 
2209
PNG_EXPORT(153, png_uint_32, png_get_sBIT,
 
2210
    (png_const_structp png_ptr, png_infop info_ptr,
 
2211
    png_color_8p *sig_bit));
 
2212
#endif
 
2213
 
 
2214
#ifdef PNG_sBIT_SUPPORTED
 
2215
PNG_EXPORT(154, void, png_set_sBIT,
 
2216
    (png_structp png_ptr, png_infop info_ptr, png_const_color_8p sig_bit));
 
2217
#endif
 
2218
 
 
2219
#ifdef PNG_sRGB_SUPPORTED
 
2220
PNG_EXPORT(155, png_uint_32, png_get_sRGB, (png_const_structp png_ptr,
 
2221
    png_const_infop info_ptr, int *file_srgb_intent));
 
2222
#endif
 
2223
 
 
2224
#ifdef PNG_sRGB_SUPPORTED
 
2225
PNG_EXPORT(156, void, png_set_sRGB,
 
2226
    (png_structp png_ptr, png_infop info_ptr, int srgb_intent));
 
2227
PNG_EXPORT(157, void, png_set_sRGB_gAMA_and_cHRM, (png_structp png_ptr,
 
2228
    png_infop info_ptr, int srgb_intent));
 
2229
#endif
 
2230
 
 
2231
#ifdef PNG_iCCP_SUPPORTED
 
2232
PNG_EXPORT(158, png_uint_32, png_get_iCCP,
 
2233
    (png_const_structp png_ptr, png_const_infop info_ptr,
 
2234
    png_charpp name, int *compression_type, png_bytepp profile,
 
2235
    png_uint_32 *proflen));
 
2236
#endif
 
2237
 
 
2238
#ifdef PNG_iCCP_SUPPORTED
 
2239
PNG_EXPORT(159, void, png_set_iCCP,
 
2240
    (png_structp png_ptr, png_infop info_ptr,
 
2241
    png_const_charp name, int compression_type, png_const_bytep profile,
 
2242
    png_uint_32 proflen));
 
2243
#endif
 
2244
 
 
2245
#ifdef PNG_sPLT_SUPPORTED
 
2246
PNG_EXPORT(160, png_uint_32, png_get_sPLT,
 
2247
    (png_const_structp png_ptr, png_const_infop info_ptr,
 
2248
    png_sPLT_tpp entries));
 
2249
#endif
 
2250
 
 
2251
#ifdef PNG_sPLT_SUPPORTED
 
2252
PNG_EXPORT(161, void, png_set_sPLT,
 
2253
    (png_structp png_ptr, png_infop info_ptr,
 
2254
    png_const_sPLT_tp entries, int nentries));
 
2255
#endif
 
2256
 
 
2257
#ifdef PNG_TEXT_SUPPORTED
 
2258
/* png_get_text also returns the number of text chunks in *num_text */
 
2259
PNG_EXPORT(162, png_uint_32, png_get_text,
 
2260
    (png_const_structp png_ptr, png_const_infop info_ptr,
 
2261
    png_textp *text_ptr, int *num_text));
 
2262
#endif
 
2263
 
 
2264
/* Note while png_set_text() will accept a structure whose text,
 
2265
 * language, and  translated keywords are NULL pointers, the structure
 
2266
 * returned by png_get_text will always contain regular
 
2267
 * zero-terminated C strings.  They might be empty strings but
 
2268
 * they will never be NULL pointers.
 
2269
 */
 
2270
 
 
2271
#ifdef PNG_TEXT_SUPPORTED
 
2272
PNG_EXPORT(163, void, png_set_text,
 
2273
    (png_structp png_ptr, png_infop info_ptr,
 
2274
    png_const_textp text_ptr, int num_text));
 
2275
#endif
 
2276
 
 
2277
#ifdef PNG_tIME_SUPPORTED
 
2278
PNG_EXPORT(164, png_uint_32, png_get_tIME,
 
2279
    (png_const_structp png_ptr, png_infop info_ptr, png_timep *mod_time));
 
2280
#endif
 
2281
 
 
2282
#ifdef PNG_tIME_SUPPORTED
 
2283
PNG_EXPORT(165, void, png_set_tIME,
 
2284
    (png_structp png_ptr, png_infop info_ptr, png_const_timep mod_time));
 
2285
#endif
 
2286
 
 
2287
#ifdef PNG_tRNS_SUPPORTED
 
2288
PNG_EXPORT(166, png_uint_32, png_get_tRNS,
 
2289
    (png_const_structp png_ptr, png_infop info_ptr,
 
2290
    png_bytep *trans_alpha, int *num_trans, png_color_16p *trans_color));
 
2291
#endif
 
2292
 
 
2293
#ifdef PNG_tRNS_SUPPORTED
 
2294
PNG_EXPORT(167, void, png_set_tRNS,
 
2295
    (png_structp png_ptr, png_infop info_ptr,
 
2296
    png_const_bytep trans_alpha, int num_trans,
 
2297
    png_const_color_16p trans_color));
 
2298
#endif
 
2299
 
 
2300
#ifdef PNG_sCAL_SUPPORTED
 
2301
PNG_FP_EXPORT(168, png_uint_32, png_get_sCAL,
 
2302
    (png_const_structp png_ptr, png_const_infop info_ptr,
 
2303
    int *unit, double *width, double *height));
 
2304
#ifdef PNG_FLOATING_ARITHMETIC_SUPPORTED
 
2305
/* NOTE: this API is currently implemented using floating point arithmetic,
 
2306
 * consequently it can only be used on systems with floating point support.
 
2307
 * In any case the range of values supported by png_fixed_point is small and it
 
2308
 * is highly recommended that png_get_sCAL_s be used instead.
 
2309
 */
 
2310
PNG_FIXED_EXPORT(214, png_uint_32, png_get_sCAL_fixed,
 
2311
    (png_structp png_ptr, png_const_infop info_ptr, int *unit,
 
2312
    png_fixed_point *width,
 
2313
    png_fixed_point *height));
 
2314
#endif
 
2315
PNG_EXPORT(169, png_uint_32, png_get_sCAL_s,
 
2316
    (png_const_structp png_ptr, png_const_infop info_ptr,
 
2317
    int *unit, png_charpp swidth, png_charpp sheight));
 
2318
 
 
2319
PNG_FP_EXPORT(170, void, png_set_sCAL,
 
2320
    (png_structp png_ptr, png_infop info_ptr,
 
2321
    int unit, double width, double height));
 
2322
PNG_FIXED_EXPORT(213, void, png_set_sCAL_fixed, (png_structp png_ptr,
 
2323
   png_infop info_ptr, int unit, png_fixed_point width,
 
2324
   png_fixed_point height));
 
2325
PNG_EXPORT(171, void, png_set_sCAL_s,
 
2326
    (png_structp png_ptr, png_infop info_ptr,
 
2327
    int unit, png_const_charp swidth, png_const_charp sheight));
 
2328
#endif /* PNG_sCAL_SUPPORTED */
 
2329
 
 
2330
#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
 
2331
/* Provide a list of chunks and how they are to be handled, if the built-in
 
2332
   handling or default unknown chunk handling is not desired.  Any chunks not
 
2333
   listed will be handled in the default manner.  The IHDR and IEND chunks
 
2334
   must not be listed.  Because this turns off the default handling for chunks
 
2335
   that would otherwise be recognized the behavior of libpng transformations may
 
2336
   well become incorrect!
 
2337
      keep = 0: PNG_HANDLE_CHUNK_AS_DEFAULT: follow default behavior
 
2338
           = 1: PNG_HANDLE_CHUNK_NEVER:      do not keep
 
2339
           = 2: PNG_HANDLE_CHUNK_IF_SAFE:    keep only if safe-to-copy
 
2340
           = 3: PNG_HANDLE_CHUNK_ALWAYS:     keep even if unsafe-to-copy
 
2341
*/
 
2342
PNG_EXPORT(172, void, png_set_keep_unknown_chunks,
 
2343
    (png_structp png_ptr, int keep,
 
2344
    png_const_bytep chunk_list, int num_chunks));
 
2345
 
 
2346
/* The handling code is returned; the result is therefore true (non-zero) if
 
2347
 * special handling is required, false for the default handling.
 
2348
 */
 
2349
PNG_EXPORT(173, int, png_handle_as_unknown, (png_structp png_ptr,
 
2350
    png_const_bytep chunk_name));
 
2351
#endif
 
2352
#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED
 
2353
PNG_EXPORT(174, void, png_set_unknown_chunks, (png_structp png_ptr,
 
2354
    png_infop info_ptr, png_const_unknown_chunkp unknowns,
 
2355
    int num_unknowns));
 
2356
PNG_EXPORT(175, void, png_set_unknown_chunk_location,
 
2357
    (png_structp png_ptr, png_infop info_ptr, int chunk, int location));
 
2358
PNG_EXPORT(176, int, png_get_unknown_chunks, (png_const_structp png_ptr,
 
2359
    png_const_infop info_ptr, png_unknown_chunkpp entries));
 
2360
#endif
 
2361
 
 
2362
/* Png_free_data() will turn off the "valid" flag for anything it frees.
 
2363
 * If you need to turn it off for a chunk that your application has freed,
 
2364
 * you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK);
 
2365
 */
 
2366
PNG_EXPORT(177, void, png_set_invalid,
 
2367
    (png_structp png_ptr, png_infop info_ptr, int mask));
 
2368
 
 
2369
#ifdef PNG_INFO_IMAGE_SUPPORTED
 
2370
/* The "params" pointer is currently not used and is for future expansion. */
 
2371
PNG_EXPORT(178, void, png_read_png, (png_structp png_ptr, png_infop info_ptr,
 
2372
    int transforms, png_voidp params));
 
2373
PNG_EXPORT(179, void, png_write_png, (png_structp png_ptr, png_infop info_ptr,
 
2374
    int transforms, png_voidp params));
 
2375
#endif
 
2376
 
 
2377
PNG_EXPORT(180, png_const_charp, png_get_copyright,
 
2378
    (png_const_structp png_ptr));
 
2379
PNG_EXPORT(181, png_const_charp, png_get_header_ver,
 
2380
    (png_const_structp png_ptr));
 
2381
PNG_EXPORT(182, png_const_charp, png_get_header_version,
 
2382
    (png_const_structp png_ptr));
 
2383
PNG_EXPORT(183, png_const_charp, png_get_libpng_ver,
 
2384
    (png_const_structp png_ptr));
 
2385
 
 
2386
#ifdef PNG_MNG_FEATURES_SUPPORTED
 
2387
PNG_EXPORT(184, png_uint_32, png_permit_mng_features, (png_structp png_ptr,
 
2388
    png_uint_32 mng_features_permitted));
 
2389
#endif
 
2390
 
 
2391
/* For use in png_set_keep_unknown, added to version 1.2.6 */
 
2392
#define PNG_HANDLE_CHUNK_AS_DEFAULT   0
 
2393
#define PNG_HANDLE_CHUNK_NEVER        1
 
2394
#define PNG_HANDLE_CHUNK_IF_SAFE      2
 
2395
#define PNG_HANDLE_CHUNK_ALWAYS       3
 
2396
 
 
2397
/* Strip the prepended error numbers ("#nnn ") from error and warning
 
2398
 * messages before passing them to the error or warning handler.
 
2399
 */
 
2400
#ifdef PNG_ERROR_NUMBERS_SUPPORTED
 
2401
PNG_EXPORT(185, void, png_set_strip_error_numbers,
 
2402
    (png_structp png_ptr,
 
2403
    png_uint_32 strip_mode));
 
2404
#endif
 
2405
 
 
2406
/* Added in libpng-1.2.6 */
 
2407
#ifdef PNG_SET_USER_LIMITS_SUPPORTED
 
2408
PNG_EXPORT(186, void, png_set_user_limits, (png_structp png_ptr,
 
2409
    png_uint_32 user_width_max, png_uint_32 user_height_max));
 
2410
PNG_EXPORT(187, png_uint_32, png_get_user_width_max,
 
2411
    (png_const_structp png_ptr));
 
2412
PNG_EXPORT(188, png_uint_32, png_get_user_height_max,
 
2413
    (png_const_structp png_ptr));
 
2414
/* Added in libpng-1.4.0 */
 
2415
PNG_EXPORT(189, void, png_set_chunk_cache_max, (png_structp png_ptr,
 
2416
    png_uint_32 user_chunk_cache_max));
 
2417
PNG_EXPORT(190, png_uint_32, png_get_chunk_cache_max,
 
2418
    (png_const_structp png_ptr));
 
2419
/* Added in libpng-1.4.1 */
 
2420
PNG_EXPORT(191, void, png_set_chunk_malloc_max, (png_structp png_ptr,
 
2421
    png_alloc_size_t user_chunk_cache_max));
 
2422
PNG_EXPORT(192, png_alloc_size_t, png_get_chunk_malloc_max,
 
2423
    (png_const_structp png_ptr));
 
2424
#endif
 
2425
 
 
2426
#if defined(PNG_INCH_CONVERSIONS_SUPPORTED)
 
2427
PNG_EXPORT(193, png_uint_32, png_get_pixels_per_inch,
 
2428
    (png_const_structp png_ptr, png_const_infop info_ptr));
 
2429
 
 
2430
PNG_EXPORT(194, png_uint_32, png_get_x_pixels_per_inch,
 
2431
    (png_const_structp png_ptr, png_const_infop info_ptr));
 
2432
 
 
2433
PNG_EXPORT(195, png_uint_32, png_get_y_pixels_per_inch,
 
2434
    (png_const_structp png_ptr, png_const_infop info_ptr));
 
2435
 
 
2436
PNG_FP_EXPORT(196, float, png_get_x_offset_inches,
 
2437
    (png_const_structp png_ptr, png_const_infop info_ptr));
 
2438
#ifdef PNG_FIXED_POINT_SUPPORTED /* otherwise not implemented. */
 
2439
PNG_FIXED_EXPORT(211, png_fixed_point, png_get_x_offset_inches_fixed,
 
2440
    (png_structp png_ptr, png_const_infop info_ptr));
 
2441
#endif
 
2442
 
 
2443
PNG_FP_EXPORT(197, float, png_get_y_offset_inches, (png_const_structp png_ptr,
 
2444
    png_const_infop info_ptr));
 
2445
#ifdef PNG_FIXED_POINT_SUPPORTED /* otherwise not implemented. */
 
2446
PNG_FIXED_EXPORT(212, png_fixed_point, png_get_y_offset_inches_fixed,
 
2447
    (png_structp png_ptr, png_const_infop info_ptr));
 
2448
#endif
 
2449
 
 
2450
#  ifdef PNG_pHYs_SUPPORTED
 
2451
PNG_EXPORT(198, png_uint_32, png_get_pHYs_dpi, (png_const_structp png_ptr,
 
2452
    png_const_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y,
 
2453
    int *unit_type));
 
2454
#  endif /* PNG_pHYs_SUPPORTED */
 
2455
#endif  /* PNG_INCH_CONVERSIONS_SUPPORTED */
 
2456
 
 
2457
/* Added in libpng-1.4.0 */
 
2458
#ifdef PNG_IO_STATE_SUPPORTED
 
2459
PNG_EXPORT(199, png_uint_32, png_get_io_state, (png_structp png_ptr));
 
2460
 
 
2461
PNG_EXPORTA(200, png_const_bytep, png_get_io_chunk_name,
 
2462
    (png_structp png_ptr), PNG_DEPRECATED);
 
2463
PNG_EXPORT(216, png_uint_32, png_get_io_chunk_type,
 
2464
    (png_const_structp png_ptr));
 
2465
 
 
2466
/* The flags returned by png_get_io_state() are the following: */
 
2467
#  define PNG_IO_NONE        0x0000   /* no I/O at this moment */
 
2468
#  define PNG_IO_READING     0x0001   /* currently reading */
 
2469
#  define PNG_IO_WRITING     0x0002   /* currently writing */
 
2470
#  define PNG_IO_SIGNATURE   0x0010   /* currently at the file signature */
 
2471
#  define PNG_IO_CHUNK_HDR   0x0020   /* currently at the chunk header */
 
2472
#  define PNG_IO_CHUNK_DATA  0x0040   /* currently at the chunk data */
 
2473
#  define PNG_IO_CHUNK_CRC   0x0080   /* currently at the chunk crc */
 
2474
#  define PNG_IO_MASK_OP     0x000f   /* current operation: reading/writing */
 
2475
#  define PNG_IO_MASK_LOC    0x00f0   /* current location: sig/hdr/data/crc */
 
2476
#endif /* ?PNG_IO_STATE_SUPPORTED */
 
2477
 
 
2478
/* Interlace support.  The following macros are always defined so that if
 
2479
 * libpng interlace handling is turned off the macros may be used to handle
 
2480
 * interlaced images within the application.
 
2481
 */
 
2482
#define PNG_INTERLACE_ADAM7_PASSES 7
 
2483
 
 
2484
/* Two macros to return the first row and first column of the original,
 
2485
 * full, image which appears in a given pass.  'pass' is in the range 0
 
2486
 * to 6 and the result is in the range 0 to 7.
 
2487
 */
 
2488
#define PNG_PASS_START_ROW(pass) (((1&~(pass))<<(3-((pass)>>1)))&7)
 
2489
#define PNG_PASS_START_COL(pass) (((1& (pass))<<(3-(((pass)+1)>>1)))&7)
 
2490
 
 
2491
/* A macro to return the offset between pixels in the output row for a pair of
 
2492
 * pixels in the input - effectively the inverse of the 'COL_SHIFT' macro that
 
2493
 * follows.  Note that ROW_OFFSET is the offset from one row to the next whereas
 
2494
 * COL_OFFSET is from one column to the next, within a row.
 
2495
 */
 
2496
#define PNG_PASS_ROW_OFFSET(pass) ((pass)>2?(8>>(((pass)-1)>>1)):8)
 
2497
#define PNG_PASS_COL_OFFSET(pass) (1<<((7-(pass))>>1))
 
2498
 
 
2499
/* Two macros to help evaluate the number of rows or columns in each
 
2500
 * pass.  This is expressed as a shift - effectively log2 of the number or
 
2501
 * rows or columns in each 8x8 tile of the original image.
 
2502
 */
 
2503
#define PNG_PASS_ROW_SHIFT(pass) ((pass)>2?(8-(pass))>>1:3)
 
2504
#define PNG_PASS_COL_SHIFT(pass) ((pass)>1?(7-(pass))>>1:3)
 
2505
 
 
2506
/* Hence two macros to determine the number of rows or columns in a given
 
2507
 * pass of an image given its height or width.  In fact these macros may
 
2508
 * return non-zero even though the sub-image is empty, because the other
 
2509
 * dimension may be empty for a small image.
 
2510
 */
 
2511
#define PNG_PASS_ROWS(height, pass) (((height)+(((1<<PNG_PASS_ROW_SHIFT(pass))\
 
2512
   -1)-PNG_PASS_START_ROW(pass)))>>PNG_PASS_ROW_SHIFT(pass))
 
2513
#define PNG_PASS_COLS(width, pass) (((width)+(((1<<PNG_PASS_COL_SHIFT(pass))\
 
2514
   -1)-PNG_PASS_START_COL(pass)))>>PNG_PASS_COL_SHIFT(pass))
 
2515
 
 
2516
/* For the reader row callbacks (both progressive and sequential) it is
 
2517
 * necessary to find the row in the output image given a row in an interlaced
 
2518
 * image, so two more macros:
 
2519
 */
 
2520
#define PNG_ROW_FROM_PASS_ROW(yIn, pass) \
 
2521
   (((yIn)<<PNG_PASS_ROW_SHIFT(pass))+PNG_PASS_START_ROW(pass))
 
2522
#define PNG_COL_FROM_PASS_COL(xIn, pass) \
 
2523
   (((xIn)<<PNG_PASS_COL_SHIFT(pass))+PNG_PASS_START_COL(pass))
 
2524
 
 
2525
/* Two macros which return a boolean (0 or 1) saying whether the given row
 
2526
 * or column is in a particular pass.  These use a common utility macro that
 
2527
 * returns a mask for a given pass - the offset 'off' selects the row or
 
2528
 * column version.  The mask has the appropriate bit set for each column in
 
2529
 * the tile.
 
2530
 */
 
2531
#define PNG_PASS_MASK(pass,off) ( \
 
2532
   ((0x110145AF>>(((7-(off))-(pass))<<2)) & 0xF) | \
 
2533
   ((0x01145AF0>>(((7-(off))-(pass))<<2)) & 0xF0))
 
2534
 
 
2535
#define PNG_ROW_IN_INTERLACE_PASS(y, pass) \
 
2536
   ((PNG_PASS_MASK(pass,0) >> ((y)&7)) & 1)
 
2537
#define PNG_COL_IN_INTERLACE_PASS(x, pass) \
 
2538
   ((PNG_PASS_MASK(pass,1) >> ((x)&7)) & 1)
 
2539
 
 
2540
#ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED
 
2541
/* With these routines we avoid an integer divide, which will be slower on
 
2542
 * most machines.  However, it does take more operations than the corresponding
 
2543
 * divide method, so it may be slower on a few RISC systems.  There are two
 
2544
 * shifts (by 8 or 16 bits) and an addition, versus a single integer divide.
 
2545
 *
 
2546
 * Note that the rounding factors are NOT supposed to be the same!  128 and
 
2547
 * 32768 are correct for the NODIV code; 127 and 32767 are correct for the
 
2548
 * standard method.
 
2549
 *
 
2550
 * [Optimized code by Greg Roelofs and Mark Adler...blame us for bugs. :-) ]
 
2551
 */
 
2552
 
 
2553
 /* fg and bg should be in `gamma 1.0' space; alpha is the opacity */
 
2554
 
 
2555
#  define png_composite(composite, fg, alpha, bg)         \
 
2556
     { png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) \
 
2557
           * (png_uint_16)(alpha)                         \
 
2558
           + (png_uint_16)(bg)*(png_uint_16)(255          \
 
2559
           - (png_uint_16)(alpha)) + 128);                \
 
2560
       (composite) = (png_byte)((temp + (temp >> 8)) >> 8); }
 
2561
 
 
2562
#  define png_composite_16(composite, fg, alpha, bg)       \
 
2563
     { png_uint_32 temp = (png_uint_32)((png_uint_32)(fg)  \
 
2564
           * (png_uint_32)(alpha)                          \
 
2565
           + (png_uint_32)(bg)*(65535                      \
 
2566
           - (png_uint_32)(alpha)) + 32768);               \
 
2567
       (composite) = (png_uint_16)((temp + (temp >> 16)) >> 16); }
 
2568
 
 
2569
#else  /* Standard method using integer division */
 
2570
 
 
2571
#  define png_composite(composite, fg, alpha, bg)                          \
 
2572
     (composite) = (png_byte)(((png_uint_16)(fg) * (png_uint_16)(alpha) +  \
 
2573
     (png_uint_16)(bg) * (png_uint_16)(255 - (png_uint_16)(alpha)) +       \
 
2574
     127) / 255)
 
2575
 
 
2576
#  define png_composite_16(composite, fg, alpha, bg)                         \
 
2577
     (composite) = (png_uint_16)(((png_uint_32)(fg) * (png_uint_32)(alpha) + \
 
2578
     (png_uint_32)(bg)*(png_uint_32)(65535 - (png_uint_32)(alpha)) +         \
 
2579
     32767) / 65535)
 
2580
#endif /* PNG_READ_COMPOSITE_NODIV_SUPPORTED */
 
2581
 
 
2582
#ifdef PNG_READ_INT_FUNCTIONS_SUPPORTED
 
2583
PNG_EXPORT(201, png_uint_32, png_get_uint_32, (png_const_bytep buf));
 
2584
PNG_EXPORT(202, png_uint_16, png_get_uint_16, (png_const_bytep buf));
 
2585
PNG_EXPORT(203, png_int_32, png_get_int_32, (png_const_bytep buf));
 
2586
#endif
 
2587
 
 
2588
PNG_EXPORT(204, png_uint_32, png_get_uint_31, (png_structp png_ptr,
 
2589
    png_const_bytep buf));
 
2590
/* No png_get_int_16 -- may be added if there's a real need for it. */
 
2591
 
 
2592
/* Place a 32-bit number into a buffer in PNG byte order (big-endian). */
 
2593
#ifdef PNG_WRITE_INT_FUNCTIONS_SUPPORTED
 
2594
PNG_EXPORT(205, void, png_save_uint_32, (png_bytep buf, png_uint_32 i));
 
2595
#endif
 
2596
#ifdef PNG_SAVE_INT_32_SUPPORTED
 
2597
PNG_EXPORT(206, void, png_save_int_32, (png_bytep buf, png_int_32 i));
 
2598
#endif
 
2599
 
 
2600
/* Place a 16-bit number into a buffer in PNG byte order.
 
2601
 * The parameter is declared unsigned int, not png_uint_16,
 
2602
 * just to avoid potential problems on pre-ANSI C compilers.
 
2603
 */
 
2604
#ifdef PNG_WRITE_INT_FUNCTIONS_SUPPORTED
 
2605
PNG_EXPORT(207, void, png_save_uint_16, (png_bytep buf, unsigned int i));
 
2606
/* No png_save_int_16 -- may be added if there's a real need for it. */
 
2607
#endif
 
2608
 
 
2609
#ifdef PNG_USE_READ_MACROS
 
2610
/* Inline macros to do direct reads of bytes from the input buffer.
 
2611
 * The png_get_int_32() routine assumes we are using two's complement
 
2612
 * format for negative values, which is almost certainly true.
 
2613
 */
 
2614
#  define png_get_uint_32(buf) \
 
2615
     (((png_uint_32)(*(buf)) << 24) + \
 
2616
      ((png_uint_32)(*((buf) + 1)) << 16) + \
 
2617
      ((png_uint_32)(*((buf) + 2)) << 8) + \
 
2618
      ((png_uint_32)(*((buf) + 3))))
 
2619
 
 
2620
   /* From libpng-1.4.0 until 1.4.4, the png_get_uint_16 macro (but not the
 
2621
    * function) incorrectly returned a value of type png_uint_32.
 
2622
    */
 
2623
#  define png_get_uint_16(buf) \
 
2624
     ((png_uint_16) \
 
2625
      (((unsigned int)(*(buf)) << 8) + \
 
2626
       ((unsigned int)(*((buf) + 1)))))
 
2627
 
 
2628
#  define png_get_int_32(buf) \
 
2629
     ((png_int_32)((*(buf) & 0x80) \
 
2630
      ? -((png_int_32)((png_get_uint_32(buf) ^ 0xffffffffL) + 1)) \
 
2631
      : (png_int_32)png_get_uint_32(buf)))
 
2632
#endif
 
2633
 
 
2634
/* Maintainer: Put new public prototypes here ^, in libpng.3, and project
 
2635
 * defs
 
2636
 */
 
2637
 
 
2638
/* The last ordinal number (this is the *last* one already used; the next
 
2639
 * one to use is one more than this.)  Maintainer, remember to add an entry to
 
2640
 * scripts/symbols.def as well.
 
2641
 */
 
2642
#ifdef PNG_EXPORT_LAST_ORDINAL
 
2643
  PNG_EXPORT_LAST_ORDINAL(233);
 
2644
#endif
 
2645
 
 
2646
#ifdef __cplusplus
 
2647
}
 
2648
#endif
 
2649
 
 
2650
#endif /* PNG_VERSION_INFO_ONLY */
 
2651
/* Do not put anything past this line */
 
2652
#endif /* PNG_H */