~baltix/+junk/irrlicht-test

« back to all changes in this revision

Viewing changes to source/Irrlicht/libpng/png.h

  • Committer: Mantas Kriaučiūnas
  • Date: 2011-07-18 13:06:25 UTC
  • Revision ID: mantas@akl.lt-20110718130625-c5pvifp61e7kj1ol
Included whole irrlicht SVN libraries to work around launchpad recipe issue with quilt, see https://answers.launchpad.net/launchpad/+question/165193

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.4.4 - September 23, 2010
 
5
 * Copyright (c) 1998-2010 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.4.4 - September 23, 2010: 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.1rc02-04            14    10401  14.so.14.1[.0]
 
141
 *    1.4.1                   14    10401  14.so.14.1[.0]
 
142
 *    1.4.2beta01             14    10402  14.so.14.2[.0]
 
143
 *    1.4.2rc02-06            14    10402  14.so.14.2[.0]
 
144
 *    1.4.2                   14    10402  14.so.14.2[.0]
 
145
 *    1.4.3beta01-05          14    10403  14.so.14.3[.0]
 
146
 *    1.4.3rc01-03            14    10403  14.so.14.3[.0]
 
147
 *    1.4.3                   14    10403  14.so.14.3[.0]
 
148
 *    1.4.4beta01-08          14    10404  14.so.14.4[.0]
 
149
 *    1.4.4rc01-06            14    10404  14.so.14.4[.0]
 
150
 *
 
151
 *    Henceforth the source version will match the shared-library major
 
152
 *    and minor numbers; the shared-library major version number will be
 
153
 *    used for changes in backward compatibility, as it is intended.  The
 
154
 *    PNG_LIBPNG_VER macro, which is not used within libpng but is available
 
155
 *    for applications, is an unsigned integer of the form xyyzz corresponding
 
156
 *    to the source version x.y.z (leading zeros in y and z).  Beta versions
 
157
 *    were given the previous public release number plus a letter, until
 
158
 *    version 1.0.6j; from then on they were given the upcoming public
 
159
 *    release number plus "betaNN" or "rcN".
 
160
 *
 
161
 *    Binary incompatibility exists only when applications make direct access
 
162
 *    to the info_ptr or png_ptr members through png.h, and the compiled
 
163
 *    application is loaded with a different version of the library.
 
164
 *
 
165
 *    DLLNUM will change each time there are forward or backward changes
 
166
 *    in binary compatibility (e.g., when a new feature is added).
 
167
 *
 
168
 * See libpng.txt or libpng.3 for more information.  The PNG specification
 
169
 * is available as a W3C Recommendation and as an ISO Specification,
 
170
 * <http://www.w3.org/TR/2003/REC-PNG-20031110/
 
171
 */
 
172
 
 
173
/*
 
174
 * COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
 
175
 *
 
176
 * If you modify libpng you may insert additional notices immediately following
 
177
 * this sentence.
 
178
 *
 
179
 * This code is released under the libpng license.
 
180
 *
 
181
 * libpng versions 1.2.6, August 15, 2004, through 1.4.4, September 23, 2010, are
 
182
 * Copyright (c) 2004, 2006-2010 Glenn Randers-Pehrson, and are
 
183
 * distributed according to the same disclaimer and license as libpng-1.2.5
 
184
 * with the following individual added to the list of Contributing Authors:
 
185
 *
 
186
 *    Cosmin Truta
 
187
 *
 
188
 * libpng versions 1.0.7, July 1, 2000, through 1.2.5, October 3, 2002, are
 
189
 * Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
 
190
 * distributed according to the same disclaimer and license as libpng-1.0.6
 
191
 * with the following individuals added to the list of Contributing Authors:
 
192
 *
 
193
 *    Simon-Pierre Cadieux
 
194
 *    Eric S. Raymond
 
195
 *    Gilles Vollant
 
196
 *
 
197
 * and with the following additions to the disclaimer:
 
198
 *
 
199
 *    There is no warranty against interference with your enjoyment of the
 
200
 *    library or against infringement.  There is no warranty that our
 
201
 *    efforts or the library will fulfill any of your particular purposes
 
202
 *    or needs.  This library is provided with all faults, and the entire
 
203
 *    risk of satisfactory quality, performance, accuracy, and effort is with
 
204
 *    the user.
 
205
 *
 
206
 * libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
 
207
 * Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson, and are
 
208
 * distributed according to the same disclaimer and license as libpng-0.96,
 
209
 * with the following individuals added to the list of Contributing Authors:
 
210
 *
 
211
 *    Tom Lane
 
212
 *    Glenn Randers-Pehrson
 
213
 *    Willem van Schaik
 
214
 *
 
215
 * libpng versions 0.89, June 1996, through 0.96, May 1997, are
 
216
 * Copyright (c) 1996, 1997 Andreas Dilger
 
217
 * Distributed according to the same disclaimer and license as libpng-0.88,
 
218
 * with the following individuals added to the list of Contributing Authors:
 
219
 *
 
220
 *    John Bowler
 
221
 *    Kevin Bracey
 
222
 *    Sam Bushell
 
223
 *    Magnus Holmgren
 
224
 *    Greg Roelofs
 
225
 *    Tom Tanner
 
226
 *
 
227
 * libpng versions 0.5, May 1995, through 0.88, January 1996, are
 
228
 * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 
229
 *
 
230
 * For the purposes of this copyright and license, "Contributing Authors"
 
231
 * is defined as the following set of individuals:
 
232
 *
 
233
 *    Andreas Dilger
 
234
 *    Dave Martindale
 
235
 *    Guy Eric Schalnat
 
236
 *    Paul Schmidt
 
237
 *    Tim Wegner
 
238
 *
 
239
 * The PNG Reference Library is supplied "AS IS".  The Contributing Authors
 
240
 * and Group 42, Inc. disclaim all warranties, expressed or implied,
 
241
 * including, without limitation, the warranties of merchantability and of
 
242
 * fitness for any purpose.  The Contributing Authors and Group 42, Inc.
 
243
 * assume no liability for direct, indirect, incidental, special, exemplary,
 
244
 * or consequential damages, which may result from the use of the PNG
 
245
 * Reference Library, even if advised of the possibility of such damage.
 
246
 *
 
247
 * Permission is hereby granted to use, copy, modify, and distribute this
 
248
 * source code, or portions hereof, for any purpose, without fee, subject
 
249
 * to the following restrictions:
 
250
 *
 
251
 * 1. The origin of this source code must not be misrepresented.
 
252
 *
 
253
 * 2. Altered versions must be plainly marked as such and
 
254
 * must not be misrepresented as being the original source.
 
255
 *
 
256
 * 3. This Copyright notice may not be removed or altered from
 
257
 *    any source or altered source distribution.
 
258
 *
 
259
 * The Contributing Authors and Group 42, Inc. specifically permit, without
 
260
 * fee, and encourage the use of this source code as a component to
 
261
 * supporting the PNG file format in commercial products.  If you use this
 
262
 * source code in a product, acknowledgment is not required but would be
 
263
 * appreciated.
 
264
 */
 
265
 
 
266
/*
 
267
 * A "png_get_copyright" function is available, for convenient use in "about"
 
268
 * boxes and the like:
 
269
 *
 
270
 *     printf("%s",png_get_copyright(NULL));
 
271
 *
 
272
 * Also, the PNG logo (in PNG format, of course) is supplied in the
 
273
 * files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
 
274
 */
 
275
 
 
276
/*
 
277
 * Libpng is OSI Certified Open Source Software.  OSI Certified is a
 
278
 * certification mark of the Open Source Initiative.
 
279
 */
 
280
 
 
281
/*
 
282
 * The contributing authors would like to thank all those who helped
 
283
 * with testing, bug fixes, and patience.  This wouldn't have been
 
284
 * possible without all of you.
 
285
 *
 
286
 * Thanks to Frank J. T. Wojcik for helping with the documentation.
 
287
 */
 
288
 
 
289
/*
 
290
 * Y2K compliance in libpng:
 
291
 * =========================
 
292
 *
 
293
 *    September 23, 2010
 
294
 *
 
295
 *    Since the PNG Development group is an ad-hoc body, we can't make
 
296
 *    an official declaration.
 
297
 *
 
298
 *    This is your unofficial assurance that libpng from version 0.71 and
 
299
 *    upward through 1.4.4 are Y2K compliant.  It is my belief that earlier
 
300
 *    versions were also Y2K compliant.
 
301
 *
 
302
 *    Libpng only has three year fields.  One is a 2-byte unsigned integer
 
303
 *    that will hold years up to 65535.  The other two hold the date in text
 
304
 *    format, and will hold years up to 9999.
 
305
 *
 
306
 *    The integer is
 
307
 *        "png_uint_16 year" in png_time_struct.
 
308
 *
 
309
 *    The strings are
 
310
 *        "png_charp time_buffer" in png_struct and
 
311
 *        "near_time_buffer", which is a local character string in png.c.
 
312
 *
 
313
 *    There are seven time-related functions:
 
314
 *        png.c: png_convert_to_rfc_1123() in png.c
 
315
 *          (formerly png_convert_to_rfc_1152() in error)
 
316
 *        png_convert_from_struct_tm() in pngwrite.c, called in pngwrite.c
 
317
 *        png_convert_from_time_t() in pngwrite.c
 
318
 *        png_get_tIME() in pngget.c
 
319
 *        png_handle_tIME() in pngrutil.c, called in pngread.c
 
320
 *        png_set_tIME() in pngset.c
 
321
 *        png_write_tIME() in pngwutil.c, called in pngwrite.c
 
322
 *
 
323
 *    All handle dates properly in a Y2K environment.  The
 
324
 *    png_convert_from_time_t() function calls gmtime() to convert from system
 
325
 *    clock time, which returns (year - 1900), which we properly convert to
 
326
 *    the full 4-digit year.  There is a possibility that applications using
 
327
 *    libpng are not passing 4-digit years into the png_convert_to_rfc_1123()
 
328
 *    function, or that they are incorrectly passing only a 2-digit year
 
329
 *    instead of "year - 1900" into the png_convert_from_struct_tm() function,
 
330
 *    but this is not under our control.  The libpng documentation has always
 
331
 *    stated that it works with 4-digit years, and the APIs have been
 
332
 *    documented as such.
 
333
 *
 
334
 *    The tIME chunk itself is also Y2K compliant.  It uses a 2-byte unsigned
 
335
 *    integer to hold the year, and can hold years as large as 65535.
 
336
 *
 
337
 *    zlib, upon which libpng depends, is also Y2K compliant.  It contains
 
338
 *    no date-related code.
 
339
 *
 
340
 *       Glenn Randers-Pehrson
 
341
 *       libpng maintainer
 
342
 *       PNG Development Group
 
343
 */
 
344
 
 
345
#ifndef PNG_H
 
346
#define PNG_H
 
347
 
 
348
/* This is not the place to learn how to use libpng.  The file libpng.txt
 
349
 * describes how to use libpng, and the file example.c summarizes it
 
350
 * with some code on which to build.  This file is useful for looking
 
351
 * at the actual function definitions and structure components.
 
352
 */
 
353
 
 
354
/* Version information for png.h - this should match the version in png.c */
 
355
#define PNG_LIBPNG_VER_STRING "1.4.4"
 
356
#define PNG_HEADER_VERSION_STRING \
 
357
   " libpng version 1.4.4 - September 23, 2010\n"
 
358
 
 
359
#define PNG_LIBPNG_VER_SONUM   14
 
360
#define PNG_LIBPNG_VER_DLLNUM  14
 
361
 
 
362
/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
 
363
#define PNG_LIBPNG_VER_MAJOR   1
 
364
#define PNG_LIBPNG_VER_MINOR   4
 
365
#define PNG_LIBPNG_VER_RELEASE 4
 
366
/* This should match the numeric part of the final component of
 
367
 * PNG_LIBPNG_VER_STRING, omitting any leading zero:
 
368
 */
 
369
 
 
370
#define PNG_LIBPNG_VER_BUILD  0
 
371
 
 
372
/* Release Status */
 
373
#define PNG_LIBPNG_BUILD_ALPHA    1
 
374
#define PNG_LIBPNG_BUILD_BETA     2
 
375
#define PNG_LIBPNG_BUILD_RC       3
 
376
#define PNG_LIBPNG_BUILD_STABLE   4
 
377
#define PNG_LIBPNG_BUILD_RELEASE_STATUS_MASK 7
 
378
 
 
379
/* Release-Specific Flags */
 
380
#define PNG_LIBPNG_BUILD_PATCH    8 /* Can be OR'ed with
 
381
                                       PNG_LIBPNG_BUILD_STABLE only */
 
382
#define PNG_LIBPNG_BUILD_PRIVATE 16 /* Cannot be OR'ed with
 
383
                                       PNG_LIBPNG_BUILD_SPECIAL */
 
384
#define PNG_LIBPNG_BUILD_SPECIAL 32 /* Cannot be OR'ed with
 
385
                                       PNG_LIBPNG_BUILD_PRIVATE */
 
386
 
 
387
#define PNG_LIBPNG_BUILD_BASE_TYPE PNG_LIBPNG_BUILD_BETA
 
388
 
 
389
/* Careful here.  At one time, Guy wanted to use 082, but that would be octal.
 
390
 * We must not include leading zeros.
 
391
 * Versions 0.7 through 1.0.0 were in the range 0 to 100 here (only
 
392
 * version 1.0.0 was mis-numbered 100 instead of 10000).  From
 
393
 * version 1.0.1 it's    xxyyzz, where x=major, y=minor, z=release
 
394
 */
 
395
#define PNG_LIBPNG_VER 10404 /* 1.4.4 */
 
396
 
 
397
#ifndef PNG_VERSION_INFO_ONLY
 
398
/* Include the compression library's header */
 
399
#include "zlib.h"
 
400
#endif
 
401
 
 
402
/* Include all user configurable info, including optional assembler routines */
 
403
#include "pngconf.h"
 
404
 
 
405
/*
 
406
 * Added at libpng-1.2.8
 
407
 *
 
408
 * Ref MSDN: Private as priority over Special
 
409
 * VS_FF_PRIVATEBUILD File *was not* built using standard release
 
410
 * procedures. If this value is given, the StringFileInfo block must
 
411
 * contain a PrivateBuild string.
 
412
 *
 
413
 * VS_FF_SPECIALBUILD File *was* built by the original company using
 
414
 * standard release procedures but is a variation of the standard
 
415
 * file of the same version number. If this value is given, the
 
416
 * StringFileInfo block must contain a SpecialBuild string.
 
417
 */
 
418
 
 
419
#ifdef PNG_USER_PRIVATEBUILD
 
420
#  define PNG_LIBPNG_BUILD_TYPE \
 
421
          (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_PRIVATE)
 
422
#else
 
423
#  ifdef PNG_LIBPNG_SPECIALBUILD
 
424
#    define PNG_LIBPNG_BUILD_TYPE \
 
425
            (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_SPECIAL)
 
426
#  else
 
427
#    define PNG_LIBPNG_BUILD_TYPE (PNG_LIBPNG_BUILD_BASE_TYPE)
 
428
#  endif
 
429
#endif
 
430
 
 
431
#ifndef PNG_VERSION_INFO_ONLY
 
432
 
 
433
/* Inhibit C++ name-mangling for libpng functions but not for system calls. */
 
434
#ifdef __cplusplus
 
435
extern "C" {
 
436
#endif /* __cplusplus */
 
437
 
 
438
/* This file is arranged in several sections.  The first section contains
 
439
 * structure and type definitions.  The second section contains the external
 
440
 * library functions, while the third has the internal library functions,
 
441
 * which applications aren't expected to use directly.
 
442
 */
 
443
 
 
444
/* Variables declared in png.c - only it needs to define PNG_NO_EXTERN */
 
445
#if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN)
 
446
/* Version information for C files, stored in png.c.  This had better match
 
447
 * the version above.
 
448
 */
 
449
#define png_libpng_ver png_get_header_ver(NULL)
 
450
 
 
451
#endif /* PNG_NO_EXTERN */
 
452
 
 
453
/* Three color definitions.  The order of the red, green, and blue, (and the
 
454
 * exact size) is not important, although the size of the fields need to
 
455
 * be png_byte or png_uint_16 (as defined below).
 
456
 */
 
457
typedef struct png_color_struct
 
458
{
 
459
   png_byte red;
 
460
   png_byte green;
 
461
   png_byte blue;
 
462
} png_color;
 
463
typedef png_color FAR * png_colorp;
 
464
typedef png_color FAR * FAR * png_colorpp;
 
465
 
 
466
typedef struct png_color_16_struct
 
467
{
 
468
   png_byte index;    /* used for palette files */
 
469
   png_uint_16 red;   /* for use in red green blue files */
 
470
   png_uint_16 green;
 
471
   png_uint_16 blue;
 
472
   png_uint_16 gray;  /* for use in grayscale files */
 
473
} png_color_16;
 
474
typedef png_color_16 FAR * png_color_16p;
 
475
typedef png_color_16 FAR * FAR * png_color_16pp;
 
476
 
 
477
typedef struct png_color_8_struct
 
478
{
 
479
   png_byte red;   /* for use in red green blue files */
 
480
   png_byte green;
 
481
   png_byte blue;
 
482
   png_byte gray;  /* for use in grayscale files */
 
483
   png_byte alpha; /* for alpha channel files */
 
484
} png_color_8;
 
485
typedef png_color_8 FAR * png_color_8p;
 
486
typedef png_color_8 FAR * FAR * png_color_8pp;
 
487
 
 
488
/*
 
489
 * The following two structures are used for the in-core representation
 
490
 * of sPLT chunks.
 
491
 */
 
492
typedef struct png_sPLT_entry_struct
 
493
{
 
494
   png_uint_16 red;
 
495
   png_uint_16 green;
 
496
   png_uint_16 blue;
 
497
   png_uint_16 alpha;
 
498
   png_uint_16 frequency;
 
499
} png_sPLT_entry;
 
500
typedef png_sPLT_entry FAR * png_sPLT_entryp;
 
501
typedef png_sPLT_entry FAR * FAR * png_sPLT_entrypp;
 
502
 
 
503
/*  When the depth of the sPLT palette is 8 bits, the color and alpha samples
 
504
 *  occupy the LSB of their respective members, and the MSB of each member
 
505
 *  is zero-filled.  The frequency member always occupies the full 16 bits.
 
506
 */
 
507
 
 
508
typedef struct png_sPLT_struct
 
509
{
 
510
   png_charp name;           /* palette name */
 
511
   png_byte depth;           /* depth of palette samples */
 
512
   png_sPLT_entryp entries;  /* palette entries */
 
513
   png_int_32 nentries;      /* number of palette entries */
 
514
} png_sPLT_t;
 
515
typedef png_sPLT_t FAR * png_sPLT_tp;
 
516
typedef png_sPLT_t FAR * FAR * png_sPLT_tpp;
 
517
 
 
518
#ifdef PNG_TEXT_SUPPORTED
 
519
/* png_text holds the contents of a text/ztxt/itxt chunk in a PNG file,
 
520
 * and whether that contents is compressed or not.  The "key" field
 
521
 * points to a regular zero-terminated C string.  The "text", "lang", and
 
522
 * "lang_key" fields can be regular C strings, empty strings, or NULL pointers.
 
523
 * However, the * structure returned by png_get_text() will always contain
 
524
 * regular zero-terminated C strings (possibly empty), never NULL pointers,
 
525
 * so they can be safely used in printf() and other string-handling functions.
 
526
 */
 
527
typedef struct png_text_struct
 
528
{
 
529
   int  compression;       /* compression value:
 
530
                             -1: tEXt, none
 
531
                              0: zTXt, deflate
 
532
                              1: iTXt, none
 
533
                              2: iTXt, deflate  */
 
534
   png_charp key;          /* keyword, 1-79 character description of "text" */
 
535
   png_charp text;         /* comment, may be an empty string (ie "")
 
536
                              or a NULL pointer */
 
537
   png_size_t text_length; /* length of the text string */
 
538
#ifdef PNG_iTXt_SUPPORTED
 
539
   png_size_t itxt_length; /* length of the itxt string */
 
540
   png_charp lang;         /* language code, 0-79 characters
 
541
                              or a NULL pointer */
 
542
   png_charp lang_key;     /* keyword translated UTF-8 string, 0 or more
 
543
                              chars or a NULL pointer */
 
544
#endif
 
545
} png_text;
 
546
typedef png_text FAR * png_textp;
 
547
typedef png_text FAR * FAR * png_textpp;
 
548
#endif
 
549
 
 
550
/* Supported compression types for text in PNG files (tEXt, and zTXt).
 
551
 * The values of the PNG_TEXT_COMPRESSION_ defines should NOT be changed. */
 
552
#define PNG_TEXT_COMPRESSION_NONE_WR -3
 
553
#define PNG_TEXT_COMPRESSION_zTXt_WR -2
 
554
#define PNG_TEXT_COMPRESSION_NONE    -1
 
555
#define PNG_TEXT_COMPRESSION_zTXt     0
 
556
#define PNG_ITXT_COMPRESSION_NONE     1
 
557
#define PNG_ITXT_COMPRESSION_zTXt     2
 
558
#define PNG_TEXT_COMPRESSION_LAST     3  /* Not a valid value */
 
559
 
 
560
/* png_time is a way to hold the time in an machine independent way.
 
561
 * Two conversions are provided, both from time_t and struct tm.  There
 
562
 * is no portable way to convert to either of these structures, as far
 
563
 * as I know.  If you know of a portable way, send it to me.  As a side
 
564
 * note - PNG has always been Year 2000 compliant!
 
565
 */
 
566
typedef struct png_time_struct
 
567
{
 
568
   png_uint_16 year; /* full year, as in, 1995 */
 
569
   png_byte month;   /* month of year, 1 - 12 */
 
570
   png_byte day;     /* day of month, 1 - 31 */
 
571
   png_byte hour;    /* hour of day, 0 - 23 */
 
572
   png_byte minute;  /* minute of hour, 0 - 59 */
 
573
   png_byte second;  /* second of minute, 0 - 60 (for leap seconds) */
 
574
} png_time;
 
575
typedef png_time FAR * png_timep;
 
576
typedef png_time FAR * FAR * png_timepp;
 
577
 
 
578
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) || \
 
579
 defined(PNG_HANDLE_AS_UNKNOWN_SUPPORTED)
 
580
/* png_unknown_chunk is a structure to hold queued chunks for which there is
 
581
 * no specific support.  The idea is that we can use this to queue
 
582
 * up private chunks for output even though the library doesn't actually
 
583
 * know about their semantics.
 
584
 */
 
585
typedef struct png_unknown_chunk_t
 
586
{
 
587
    png_byte name[5];
 
588
    png_byte *data;
 
589
    png_size_t size;
 
590
 
 
591
    /* libpng-using applications should NOT directly modify this byte. */
 
592
    png_byte location; /* mode of operation at read time */
 
593
}
 
594
png_unknown_chunk;
 
595
typedef png_unknown_chunk FAR * png_unknown_chunkp;
 
596
typedef png_unknown_chunk FAR * FAR * png_unknown_chunkpp;
 
597
#endif
 
598
 
 
599
/* png_info is a structure that holds the information in a PNG file so
 
600
 * that the application can find out the characteristics of the image.
 
601
 * If you are reading the file, this structure will tell you what is
 
602
 * in the PNG file.  If you are writing the file, fill in the information
 
603
 * you want to put into the PNG file, then call png_write_info().
 
604
 * The names chosen should be very close to the PNG specification, so
 
605
 * consult that document for information about the meaning of each field.
 
606
 *
 
607
 * With libpng < 0.95, it was only possible to directly set and read the
 
608
 * the values in the png_info_struct, which meant that the contents and
 
609
 * order of the values had to remain fixed.  With libpng 0.95 and later,
 
610
 * however, there are now functions that abstract the contents of
 
611
 * png_info_struct from the application, so this makes it easier to use
 
612
 * libpng with dynamic libraries, and even makes it possible to use
 
613
 * libraries that don't have all of the libpng ancillary chunk-handing
 
614
 * functionality.
 
615
 *
 
616
 * In any case, the order of the parameters in png_info_struct should NOT
 
617
 * be changed for as long as possible to keep compatibility with applications
 
618
 * that use the old direct-access method with png_info_struct.
 
619
 *
 
620
 * The following members may have allocated storage attached that should be
 
621
 * cleaned up before the structure is discarded: palette, trans, text,
 
622
 * pcal_purpose, pcal_units, pcal_params, hist, iccp_name, iccp_profile,
 
623
 * splt_palettes, scal_unit, row_pointers, and unknowns.   By default, these
 
624
 * are automatically freed when the info structure is deallocated, if they were
 
625
 * allocated internally by libpng.  This behavior can be changed by means
 
626
 * of the png_data_freer() function.
 
627
 *
 
628
 * More allocation details: all the chunk-reading functions that
 
629
 * change these members go through the corresponding png_set_*
 
630
 * functions.  A function to clear these members is available: see
 
631
 * png_free_data().  The png_set_* functions do not depend on being
 
632
 * able to point info structure members to any of the storage they are
 
633
 * passed (they make their own copies), EXCEPT that the png_set_text
 
634
 * functions use the same storage passed to them in the text_ptr or
 
635
 * itxt_ptr structure argument, and the png_set_rows and png_set_unknowns
 
636
 * functions do not make their own copies.
 
637
 */
 
638
typedef struct png_info_struct
 
639
{
 
640
   /* the following are necessary for every PNG file */
 
641
   png_uint_32 width PNG_DEPSTRUCT;  /* width of image in pixels (from IHDR) */
 
642
   png_uint_32 height PNG_DEPSTRUCT; /* height of image in pixels (from IHDR) */
 
643
   png_uint_32 valid PNG_DEPSTRUCT;  /* valid chunk data (see PNG_INFO_
 
644
                                        below) */
 
645
   png_size_t rowbytes PNG_DEPSTRUCT; /* bytes needed to hold an untransformed
 
646
                                         row */
 
647
   png_colorp palette PNG_DEPSTRUCT;      /* array of color values
 
648
                                             (valid & PNG_INFO_PLTE) */
 
649
   png_uint_16 num_palette PNG_DEPSTRUCT; /* number of color entries in
 
650
                                             "palette" (PLTE) */
 
651
   png_uint_16 num_trans PNG_DEPSTRUCT;   /* number of transparent palette
 
652
                                             color (tRNS) */
 
653
   png_byte bit_depth PNG_DEPSTRUCT;      /* 1, 2, 4, 8, or 16 bits/channel
 
654
                                             (from IHDR) */
 
655
   png_byte color_type PNG_DEPSTRUCT;     /* see PNG_COLOR_TYPE_ below
 
656
                                             (from IHDR) */
 
657
   /* The following three should have been named *_method not *_type */
 
658
   png_byte compression_type PNG_DEPSTRUCT; /* must be
 
659
                                             PNG_COMPRESSION_TYPE_BASE (IHDR) */
 
660
   png_byte filter_type PNG_DEPSTRUCT;    /* must be PNG_FILTER_TYPE_BASE
 
661
                                             (from IHDR) */
 
662
   png_byte interlace_type PNG_DEPSTRUCT; /* One of PNG_INTERLACE_NONE,
 
663
                                             PNG_INTERLACE_ADAM7 */
 
664
 
 
665
   /* The following is informational only on read, and not used on writes. */
 
666
   png_byte channels PNG_DEPSTRUCT;       /* number of data channels per
 
667
                                             pixel (1, 2, 3, 4) */
 
668
   png_byte pixel_depth PNG_DEPSTRUCT;    /* number of bits per pixel */
 
669
   png_byte spare_byte PNG_DEPSTRUCT;     /* to align the data, and for
 
670
                                             future use */
 
671
   png_byte signature[8] PNG_DEPSTRUCT;   /* magic bytes read by libpng
 
672
                                             from start of file */
 
673
 
 
674
   /* The rest of the data is optional.  If you are reading, check the
 
675
    * valid field to see if the information in these are valid.  If you
 
676
    * are writing, set the valid field to those chunks you want written,
 
677
    * and initialize the appropriate fields below.
 
678
    */
 
679
 
 
680
#if defined(PNG_gAMA_SUPPORTED) && defined(PNG_FLOATING_POINT_SUPPORTED)
 
681
   /* The gAMA chunk describes the gamma characteristics of the system
 
682
    * on which the image was created, normally in the range [1.0, 2.5].
 
683
    * Data is valid if (valid & PNG_INFO_gAMA) is non-zero.
 
684
    */
 
685
   float gamma PNG_DEPSTRUCT; /* gamma value of image,
 
686
                                 if (valid & PNG_INFO_gAMA) */
 
687
#endif
 
688
 
 
689
#ifdef PNG_sRGB_SUPPORTED
 
690
    /* GR-P, 0.96a */
 
691
    /* Data valid if (valid & PNG_INFO_sRGB) non-zero. */
 
692
   png_byte srgb_intent PNG_DEPSTRUCT; /* sRGB rendering intent
 
693
                                          [0, 1, 2, or 3] */
 
694
#endif
 
695
 
 
696
#ifdef PNG_TEXT_SUPPORTED
 
697
   /* The tEXt, and zTXt chunks contain human-readable textual data in
 
698
    * uncompressed, compressed, and optionally compressed forms, respectively.
 
699
    * The data in "text" is an array of pointers to uncompressed,
 
700
    * null-terminated C strings. Each chunk has a keyword that describes the
 
701
    * textual data contained in that chunk.  Keywords are not required to be
 
702
    * unique, and the text string may be empty.  Any number of text chunks may
 
703
    * be in an image.
 
704
    */
 
705
   int num_text PNG_DEPSTRUCT; /* number of comments read/to write */
 
706
   int max_text PNG_DEPSTRUCT; /* current size of text array */
 
707
   png_textp text PNG_DEPSTRUCT; /* array of comments read/to write */
 
708
#endif /* PNG_TEXT_SUPPORTED */
 
709
 
 
710
#ifdef PNG_tIME_SUPPORTED
 
711
   /* The tIME chunk holds the last time the displayed image data was
 
712
    * modified.  See the png_time struct for the contents of this struct.
 
713
    */
 
714
   png_time mod_time PNG_DEPSTRUCT;
 
715
#endif
 
716
 
 
717
#ifdef PNG_sBIT_SUPPORTED
 
718
   /* The sBIT chunk specifies the number of significant high-order bits
 
719
    * in the pixel data.  Values are in the range [1, bit_depth], and are
 
720
    * only specified for the channels in the pixel data.  The contents of
 
721
    * the low-order bits is not specified.  Data is valid if
 
722
    * (valid & PNG_INFO_sBIT) is non-zero.
 
723
    */
 
724
   png_color_8 sig_bit PNG_DEPSTRUCT; /* significant bits in color channels */
 
725
#endif
 
726
 
 
727
#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_EXPAND_SUPPORTED) || \
 
728
defined(PNG_READ_BACKGROUND_SUPPORTED)
 
729
   /* The tRNS chunk supplies transparency data for paletted images and
 
730
    * other image types that don't need a full alpha channel.  There are
 
731
    * "num_trans" transparency values for a paletted image, stored in the
 
732
    * same order as the palette colors, starting from index 0.  Values
 
733
    * for the data are in the range [0, 255], ranging from fully transparent
 
734
    * to fully opaque, respectively.  For non-paletted images, there is a
 
735
    * single color specified that should be treated as fully transparent.
 
736
    * Data is valid if (valid & PNG_INFO_tRNS) is non-zero.
 
737
    */
 
738
   png_bytep trans_alpha PNG_DEPSTRUCT;    /* alpha values for paletted
 
739
                                              image */
 
740
   png_color_16 trans_color PNG_DEPSTRUCT; /* transparent color for
 
741
                                              non-palette image */
 
742
#endif
 
743
 
 
744
#if defined(PNG_bKGD_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
 
745
   /* The bKGD chunk gives the suggested image background color if the
 
746
    * display program does not have its own background color and the image
 
747
    * is needs to composited onto a background before display.  The colors
 
748
    * in "background" are normally in the same color space/depth as the
 
749
    * pixel data.  Data is valid if (valid & PNG_INFO_bKGD) is non-zero.
 
750
    */
 
751
   png_color_16 background PNG_DEPSTRUCT;
 
752
#endif
 
753
 
 
754
#ifdef PNG_oFFs_SUPPORTED
 
755
   /* The oFFs chunk gives the offset in "offset_unit_type" units rightwards
 
756
    * and downwards from the top-left corner of the display, page, or other
 
757
    * application-specific co-ordinate space.  See the PNG_OFFSET_ defines
 
758
    * below for the unit types.  Valid if (valid & PNG_INFO_oFFs) non-zero.
 
759
    */
 
760
   png_int_32 x_offset PNG_DEPSTRUCT; /* x offset on page */
 
761
   png_int_32 y_offset PNG_DEPSTRUCT; /* y offset on page */
 
762
   png_byte offset_unit_type PNG_DEPSTRUCT; /* offset units type */
 
763
#endif
 
764
 
 
765
#ifdef PNG_pHYs_SUPPORTED
 
766
   /* The pHYs chunk gives the physical pixel density of the image for
 
767
    * display or printing in "phys_unit_type" units (see PNG_RESOLUTION_
 
768
    * defines below).  Data is valid if (valid & PNG_INFO_pHYs) is non-zero.
 
769
    */
 
770
   png_uint_32 x_pixels_per_unit PNG_DEPSTRUCT; /* horizontal pixel density */
 
771
   png_uint_32 y_pixels_per_unit PNG_DEPSTRUCT; /* vertical pixel density */
 
772
   png_byte phys_unit_type PNG_DEPSTRUCT; /* resolution type (see
 
773
                                             PNG_RESOLUTION_ below) */
 
774
#endif
 
775
 
 
776
#ifdef PNG_hIST_SUPPORTED
 
777
   /* The hIST chunk contains the relative frequency or importance of the
 
778
    * various palette entries, so that a viewer can intelligently select a
 
779
    * reduced-color palette, if required.  Data is an array of "num_palette"
 
780
    * values in the range [0,65535]. Data valid if (valid & PNG_INFO_hIST)
 
781
    * is non-zero.
 
782
    */
 
783
   png_uint_16p hist PNG_DEPSTRUCT;
 
784
#endif
 
785
 
 
786
#ifdef PNG_cHRM_SUPPORTED
 
787
   /* The cHRM chunk describes the CIE color characteristics of the monitor
 
788
    * on which the PNG was created.  This data allows the viewer to do gamut
 
789
    * mapping of the input image to ensure that the viewer sees the same
 
790
    * colors in the image as the creator.  Values are in the range
 
791
    * [0.0, 0.8].  Data valid if (valid & PNG_INFO_cHRM) non-zero.
 
792
    */
 
793
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
794
   float x_white PNG_DEPSTRUCT;
 
795
   float y_white PNG_DEPSTRUCT;
 
796
   float x_red PNG_DEPSTRUCT;
 
797
   float y_red PNG_DEPSTRUCT;
 
798
   float x_green PNG_DEPSTRUCT;
 
799
   float y_green PNG_DEPSTRUCT;
 
800
   float x_blue PNG_DEPSTRUCT;
 
801
   float y_blue PNG_DEPSTRUCT;
 
802
#endif
 
803
#endif
 
804
 
 
805
#ifdef PNG_pCAL_SUPPORTED
 
806
   /* The pCAL chunk describes a transformation between the stored pixel
 
807
    * values and original physical data values used to create the image.
 
808
    * The integer range [0, 2^bit_depth - 1] maps to the floating-point
 
809
    * range given by [pcal_X0, pcal_X1], and are further transformed by a
 
810
    * (possibly non-linear) transformation function given by "pcal_type"
 
811
    * and "pcal_params" into "pcal_units".  Please see the PNG_EQUATION_
 
812
    * defines below, and the PNG-Group's PNG extensions document for a
 
813
    * complete description of the transformations and how they should be
 
814
    * implemented, and for a description of the ASCII parameter strings.
 
815
    * Data values are valid if (valid & PNG_INFO_pCAL) non-zero.
 
816
    */
 
817
   png_charp pcal_purpose PNG_DEPSTRUCT;  /* pCAL chunk description string */
 
818
   png_int_32 pcal_X0 PNG_DEPSTRUCT;      /* minimum value */
 
819
   png_int_32 pcal_X1 PNG_DEPSTRUCT;      /* maximum value */
 
820
   png_charp pcal_units PNG_DEPSTRUCT;    /* Latin-1 string giving physical
 
821
                                             units */
 
822
   png_charpp pcal_params PNG_DEPSTRUCT;  /* ASCII strings containing
 
823
                                             parameter values */
 
824
   png_byte pcal_type PNG_DEPSTRUCT;      /* equation type
 
825
                                             (see PNG_EQUATION_ below) */
 
826
   png_byte pcal_nparams PNG_DEPSTRUCT;   /* number of parameters given
 
827
                                             in pcal_params */
 
828
#endif
 
829
 
 
830
/* New members added in libpng-1.0.6 */
 
831
   png_uint_32 free_me PNG_DEPSTRUCT;     /* flags items libpng is
 
832
                                             responsible for freeing */
 
833
 
 
834
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) || \
 
835
 defined(PNG_HANDLE_AS_UNKNOWN_SUPPORTED)
 
836
   /* Storage for unknown chunks that the library doesn't recognize. */
 
837
   png_unknown_chunkp unknown_chunks PNG_DEPSTRUCT;
 
838
   png_size_t unknown_chunks_num PNG_DEPSTRUCT;
 
839
#endif
 
840
 
 
841
#ifdef PNG_iCCP_SUPPORTED
 
842
   /* iCCP chunk data. */
 
843
   png_charp iccp_name PNG_DEPSTRUCT;     /* profile name */
 
844
   png_charp iccp_profile PNG_DEPSTRUCT;  /* International Color Consortium
 
845
                                             profile data */
 
846
                            /* Note to maintainer: should be png_bytep */
 
847
   png_uint_32 iccp_proflen PNG_DEPSTRUCT;  /* ICC profile data length */
 
848
   png_byte iccp_compression PNG_DEPSTRUCT; /* Always zero */
 
849
#endif
 
850
 
 
851
#ifdef PNG_sPLT_SUPPORTED
 
852
   /* Data on sPLT chunks (there may be more than one). */
 
853
   png_sPLT_tp splt_palettes PNG_DEPSTRUCT;
 
854
   png_uint_32 splt_palettes_num PNG_DEPSTRUCT;
 
855
#endif
 
856
 
 
857
#ifdef PNG_sCAL_SUPPORTED
 
858
   /* The sCAL chunk describes the actual physical dimensions of the
 
859
    * subject matter of the graphic.  The chunk contains a unit specification
 
860
    * a byte value, and two ASCII strings representing floating-point
 
861
    * values.  The values are width and height corresponsing to one pixel
 
862
    * in the image.  This external representation is converted to double
 
863
    * here.  Data values are valid if (valid & PNG_INFO_sCAL) is non-zero.
 
864
    */
 
865
   png_byte scal_unit PNG_DEPSTRUCT;         /* unit of physical scale */
 
866
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
867
   double scal_pixel_width PNG_DEPSTRUCT;    /* width of one pixel */
 
868
   double scal_pixel_height PNG_DEPSTRUCT;   /* height of one pixel */
 
869
#endif
 
870
#ifdef PNG_FIXED_POINT_SUPPORTED
 
871
   png_charp scal_s_width PNG_DEPSTRUCT;     /* string containing height */
 
872
   png_charp scal_s_height PNG_DEPSTRUCT;    /* string containing width */
 
873
#endif
 
874
#endif
 
875
 
 
876
#ifdef PNG_INFO_IMAGE_SUPPORTED
 
877
   /* Memory has been allocated if (valid & PNG_ALLOCATED_INFO_ROWS)
 
878
      non-zero */
 
879
   /* Data valid if (valid & PNG_INFO_IDAT) non-zero */
 
880
   png_bytepp row_pointers PNG_DEPSTRUCT;        /* the image bits */
 
881
#endif
 
882
 
 
883
#if defined(PNG_FIXED_POINT_SUPPORTED) && defined(PNG_gAMA_SUPPORTED)
 
884
   png_fixed_point int_gamma PNG_DEPSTRUCT; /* gamma of image,
 
885
                                               if (valid & PNG_INFO_gAMA) */
 
886
#endif
 
887
 
 
888
#if defined(PNG_cHRM_SUPPORTED) && defined(PNG_FIXED_POINT_SUPPORTED)
 
889
   png_fixed_point int_x_white PNG_DEPSTRUCT;
 
890
   png_fixed_point int_y_white PNG_DEPSTRUCT;
 
891
   png_fixed_point int_x_red PNG_DEPSTRUCT;
 
892
   png_fixed_point int_y_red PNG_DEPSTRUCT;
 
893
   png_fixed_point int_x_green PNG_DEPSTRUCT;
 
894
   png_fixed_point int_y_green PNG_DEPSTRUCT;
 
895
   png_fixed_point int_x_blue PNG_DEPSTRUCT;
 
896
   png_fixed_point int_y_blue PNG_DEPSTRUCT;
 
897
#endif
 
898
 
 
899
} png_info;
 
900
 
 
901
typedef png_info FAR * png_infop;
 
902
typedef png_info FAR * FAR * png_infopp;
 
903
 
 
904
/* Maximum positive integer used in PNG is (2^31)-1 */
 
905
#define PNG_UINT_31_MAX ((png_uint_32)0x7fffffffL)
 
906
#define PNG_UINT_32_MAX ((png_uint_32)(-1))
 
907
#define PNG_SIZE_MAX ((png_size_t)(-1))
 
908
 
 
909
/* These describe the color_type field in png_info. */
 
910
/* color type masks */
 
911
#define PNG_COLOR_MASK_PALETTE    1
 
912
#define PNG_COLOR_MASK_COLOR      2
 
913
#define PNG_COLOR_MASK_ALPHA      4
 
914
 
 
915
/* color types.  Note that not all combinations are legal */
 
916
#define PNG_COLOR_TYPE_GRAY 0
 
917
#define PNG_COLOR_TYPE_PALETTE  (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE)
 
918
#define PNG_COLOR_TYPE_RGB        (PNG_COLOR_MASK_COLOR)
 
919
#define PNG_COLOR_TYPE_RGB_ALPHA  (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA)
 
920
#define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA)
 
921
/* aliases */
 
922
#define PNG_COLOR_TYPE_RGBA  PNG_COLOR_TYPE_RGB_ALPHA
 
923
#define PNG_COLOR_TYPE_GA  PNG_COLOR_TYPE_GRAY_ALPHA
 
924
 
 
925
/* This is for compression type. PNG 1.0-1.2 only define the single type. */
 
926
#define PNG_COMPRESSION_TYPE_BASE 0 /* Deflate method 8, 32K window */
 
927
#define PNG_COMPRESSION_TYPE_DEFAULT PNG_COMPRESSION_TYPE_BASE
 
928
 
 
929
/* This is for filter type. PNG 1.0-1.2 only define the single type. */
 
930
#define PNG_FILTER_TYPE_BASE      0 /* Single row per-byte filtering */
 
931
#define PNG_INTRAPIXEL_DIFFERENCING 64 /* Used only in MNG datastreams */
 
932
#define PNG_FILTER_TYPE_DEFAULT   PNG_FILTER_TYPE_BASE
 
933
 
 
934
/* These are for the interlacing type.  These values should NOT be changed. */
 
935
#define PNG_INTERLACE_NONE        0 /* Non-interlaced image */
 
936
#define PNG_INTERLACE_ADAM7       1 /* Adam7 interlacing */
 
937
#define PNG_INTERLACE_LAST        2 /* Not a valid value */
 
938
 
 
939
/* These are for the oFFs chunk.  These values should NOT be changed. */
 
940
#define PNG_OFFSET_PIXEL          0 /* Offset in pixels */
 
941
#define PNG_OFFSET_MICROMETER     1 /* Offset in micrometers (1/10^6 meter) */
 
942
#define PNG_OFFSET_LAST           2 /* Not a valid value */
 
943
 
 
944
/* These are for the pCAL chunk.  These values should NOT be changed. */
 
945
#define PNG_EQUATION_LINEAR       0 /* Linear transformation */
 
946
#define PNG_EQUATION_BASE_E       1 /* Exponential base e transform */
 
947
#define PNG_EQUATION_ARBITRARY    2 /* Arbitrary base exponential transform */
 
948
#define PNG_EQUATION_HYPERBOLIC   3 /* Hyperbolic sine transformation */
 
949
#define PNG_EQUATION_LAST         4 /* Not a valid value */
 
950
 
 
951
/* These are for the sCAL chunk.  These values should NOT be changed. */
 
952
#define PNG_SCALE_UNKNOWN         0 /* unknown unit (image scale) */
 
953
#define PNG_SCALE_METER           1 /* meters per pixel */
 
954
#define PNG_SCALE_RADIAN          2 /* radians per pixel */
 
955
#define PNG_SCALE_LAST            3 /* Not a valid value */
 
956
 
 
957
/* These are for the pHYs chunk.  These values should NOT be changed. */
 
958
#define PNG_RESOLUTION_UNKNOWN    0 /* pixels/unknown unit (aspect ratio) */
 
959
#define PNG_RESOLUTION_METER      1 /* pixels/meter */
 
960
#define PNG_RESOLUTION_LAST       2 /* Not a valid value */
 
961
 
 
962
/* These are for the sRGB chunk.  These values should NOT be changed. */
 
963
#define PNG_sRGB_INTENT_PERCEPTUAL 0
 
964
#define PNG_sRGB_INTENT_RELATIVE   1
 
965
#define PNG_sRGB_INTENT_SATURATION 2
 
966
#define PNG_sRGB_INTENT_ABSOLUTE   3
 
967
#define PNG_sRGB_INTENT_LAST       4 /* Not a valid value */
 
968
 
 
969
/* This is for text chunks */
 
970
#define PNG_KEYWORD_MAX_LENGTH     79
 
971
 
 
972
/* Maximum number of entries in PLTE/sPLT/tRNS arrays */
 
973
#define PNG_MAX_PALETTE_LENGTH    256
 
974
 
 
975
/* These determine if an ancillary chunk's data has been successfully read
 
976
 * from the PNG header, or if the application has filled in the corresponding
 
977
 * data in the info_struct to be written into the output file.  The values
 
978
 * of the PNG_INFO_<chunk> defines should NOT be changed.
 
979
 */
 
980
#define PNG_INFO_gAMA 0x0001
 
981
#define PNG_INFO_sBIT 0x0002
 
982
#define PNG_INFO_cHRM 0x0004
 
983
#define PNG_INFO_PLTE 0x0008
 
984
#define PNG_INFO_tRNS 0x0010
 
985
#define PNG_INFO_bKGD 0x0020
 
986
#define PNG_INFO_hIST 0x0040
 
987
#define PNG_INFO_pHYs 0x0080
 
988
#define PNG_INFO_oFFs 0x0100
 
989
#define PNG_INFO_tIME 0x0200
 
990
#define PNG_INFO_pCAL 0x0400
 
991
#define PNG_INFO_sRGB 0x0800   /* GR-P, 0.96a */
 
992
#define PNG_INFO_iCCP 0x1000   /* ESR, 1.0.6 */
 
993
#define PNG_INFO_sPLT 0x2000   /* ESR, 1.0.6 */
 
994
#define PNG_INFO_sCAL 0x4000   /* ESR, 1.0.6 */
 
995
#define PNG_INFO_IDAT 0x8000L  /* ESR, 1.0.6 */
 
996
 
 
997
/* This is used for the transformation routines, as some of them
 
998
 * change these values for the row.  It also should enable using
 
999
 * the routines for other purposes.
 
1000
 */
 
1001
typedef struct png_row_info_struct
 
1002
{
 
1003
   png_uint_32 width; /* width of row */
 
1004
   png_size_t rowbytes; /* number of bytes in row */
 
1005
   png_byte color_type; /* color type of row */
 
1006
   png_byte bit_depth; /* bit depth of row */
 
1007
   png_byte channels; /* number of channels (1, 2, 3, or 4) */
 
1008
   png_byte pixel_depth; /* bits per pixel (depth * channels) */
 
1009
} png_row_info;
 
1010
 
 
1011
typedef png_row_info FAR * png_row_infop;
 
1012
typedef png_row_info FAR * FAR * png_row_infopp;
 
1013
 
 
1014
/* These are the function types for the I/O functions and for the functions
 
1015
 * that allow the user to override the default I/O functions with his or her
 
1016
 * own.  The png_error_ptr type should match that of user-supplied warning
 
1017
 * and error functions, while the png_rw_ptr type should match that of the
 
1018
 * user read/write data functions.
 
1019
 */
 
1020
typedef struct png_struct_def png_struct;
 
1021
typedef png_struct FAR * png_structp;
 
1022
 
 
1023
typedef void (PNGAPI *png_error_ptr) PNGARG((png_structp, png_const_charp));
 
1024
typedef void (PNGAPI *png_rw_ptr) PNGARG((png_structp, png_bytep, png_size_t));
 
1025
typedef void (PNGAPI *png_flush_ptr) PNGARG((png_structp));
 
1026
typedef void (PNGAPI *png_read_status_ptr) PNGARG((png_structp, png_uint_32,
 
1027
   int));
 
1028
typedef void (PNGAPI *png_write_status_ptr) PNGARG((png_structp, png_uint_32,
 
1029
   int));
 
1030
 
 
1031
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
 
1032
typedef void (PNGAPI *png_progressive_info_ptr) PNGARG((png_structp,
 
1033
   png_infop));
 
1034
typedef void (PNGAPI *png_progressive_end_ptr) PNGARG((png_structp, png_infop));
 
1035
typedef void (PNGAPI *png_progressive_row_ptr) PNGARG((png_structp, png_bytep,
 
1036
   png_uint_32, int));
 
1037
#endif
 
1038
 
 
1039
#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
 
1040
    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
 
1041
typedef void (PNGAPI *png_user_transform_ptr) PNGARG((png_structp,
 
1042
    png_row_infop, png_bytep));
 
1043
#endif
 
1044
 
 
1045
#ifdef PNG_USER_CHUNKS_SUPPORTED
 
1046
typedef int (PNGAPI *png_user_chunk_ptr) PNGARG((png_structp,
 
1047
   png_unknown_chunkp));
 
1048
#endif
 
1049
#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED
 
1050
typedef void (PNGAPI *png_unknown_chunk_ptr) PNGARG((png_structp));
 
1051
#endif
 
1052
#ifdef PNG_SETJMP_SUPPORTED
 
1053
/* This must match the function definition in <setjmp.h>, and the
 
1054
 * application must include this before png.h to obtain the definition
 
1055
 * of jmp_buf.
 
1056
 */
 
1057
typedef void (PNGAPI *png_longjmp_ptr) PNGARG((jmp_buf, int));
 
1058
#endif
 
1059
 
 
1060
/* Transform masks for the high-level interface */
 
1061
#define PNG_TRANSFORM_IDENTITY       0x0000    /* read and write */
 
1062
#define PNG_TRANSFORM_STRIP_16       0x0001    /* read only */
 
1063
#define PNG_TRANSFORM_STRIP_ALPHA    0x0002    /* read only */
 
1064
#define PNG_TRANSFORM_PACKING        0x0004    /* read and write */
 
1065
#define PNG_TRANSFORM_PACKSWAP       0x0008    /* read and write */
 
1066
#define PNG_TRANSFORM_EXPAND         0x0010    /* read only */
 
1067
#define PNG_TRANSFORM_INVERT_MONO    0x0020    /* read and write */
 
1068
#define PNG_TRANSFORM_SHIFT          0x0040    /* read and write */
 
1069
#define PNG_TRANSFORM_BGR            0x0080    /* read and write */
 
1070
#define PNG_TRANSFORM_SWAP_ALPHA     0x0100    /* read and write */
 
1071
#define PNG_TRANSFORM_SWAP_ENDIAN    0x0200    /* read and write */
 
1072
#define PNG_TRANSFORM_INVERT_ALPHA   0x0400    /* read and write */
 
1073
#define PNG_TRANSFORM_STRIP_FILLER   0x0800    /* write only */
 
1074
/* Added to libpng-1.2.34 */
 
1075
#define PNG_TRANSFORM_STRIP_FILLER_BEFORE PNG_TRANSFORM_STRIP_FILLER
 
1076
#define PNG_TRANSFORM_STRIP_FILLER_AFTER 0x1000 /* write only */
 
1077
/* Added to libpng-1.4.0 */
 
1078
#define PNG_TRANSFORM_GRAY_TO_RGB   0x2000      /* read only */
 
1079
 
 
1080
/* Flags for MNG supported features */
 
1081
#define PNG_FLAG_MNG_EMPTY_PLTE     0x01
 
1082
#define PNG_FLAG_MNG_FILTER_64      0x04
 
1083
#define PNG_ALL_MNG_FEATURES        0x05
 
1084
 
 
1085
typedef png_voidp (*png_malloc_ptr) PNGARG((png_structp, png_alloc_size_t));
 
1086
typedef void (*png_free_ptr) PNGARG((png_structp, png_voidp));
 
1087
 
 
1088
/* The structure that holds the information to read and write PNG files.
 
1089
 * The only people who need to care about what is inside of this are the
 
1090
 * people who will be modifying the library for their own special needs.
 
1091
 * It should NOT be accessed directly by an application, except to store
 
1092
 * the jmp_buf.
 
1093
 */
 
1094
 
 
1095
struct png_struct_def
 
1096
{
 
1097
#ifdef PNG_SETJMP_SUPPORTED
 
1098
   jmp_buf jmpbuf PNG_DEPSTRUCT;            /* used in png_error */
 
1099
   png_longjmp_ptr longjmp_fn PNG_DEPSTRUCT;/* setjmp non-local goto
 
1100
                                               function. */
 
1101
#endif
 
1102
   png_error_ptr error_fn PNG_DEPSTRUCT;    /* function for printing
 
1103
                                               errors and aborting */
 
1104
   png_error_ptr warning_fn PNG_DEPSTRUCT;  /* function for printing
 
1105
                                               warnings */
 
1106
   png_voidp error_ptr PNG_DEPSTRUCT;       /* user supplied struct for
 
1107
                                               error functions */
 
1108
   png_rw_ptr write_data_fn PNG_DEPSTRUCT;  /* function for writing
 
1109
                                               output data */
 
1110
   png_rw_ptr read_data_fn PNG_DEPSTRUCT;   /* function for reading
 
1111
                                               input data */
 
1112
   png_voidp io_ptr PNG_DEPSTRUCT;          /* ptr to application struct
 
1113
                                               for I/O functions */
 
1114
 
 
1115
#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED
 
1116
   png_user_transform_ptr read_user_transform_fn PNG_DEPSTRUCT; /* user read
 
1117
                                                                 transform */
 
1118
#endif
 
1119
 
 
1120
#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED
 
1121
   png_user_transform_ptr write_user_transform_fn PNG_DEPSTRUCT; /* user write
 
1122
                                                                  transform */
 
1123
#endif
 
1124
 
 
1125
/* These were added in libpng-1.0.2 */
 
1126
#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED
 
1127
#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
 
1128
    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
 
1129
   png_voidp user_transform_ptr PNG_DEPSTRUCT; /* user supplied struct
 
1130
                                                  for user transform */
 
1131
   png_byte user_transform_depth PNG_DEPSTRUCT;    /* bit depth of user
 
1132
                                                      transformed pixels */
 
1133
   png_byte user_transform_channels PNG_DEPSTRUCT; /* channels in user
 
1134
                                                      transformed pixels */
 
1135
#endif
 
1136
#endif
 
1137
 
 
1138
   png_uint_32 mode PNG_DEPSTRUCT;          /* tells us where we are in
 
1139
                                               the PNG file */
 
1140
   png_uint_32 flags PNG_DEPSTRUCT;         /* flags indicating various
 
1141
                                               things to libpng */
 
1142
   png_uint_32 transformations PNG_DEPSTRUCT; /* which transformations
 
1143
                                                 to perform */
 
1144
 
 
1145
   z_stream zstream PNG_DEPSTRUCT;          /* pointer to decompression
 
1146
                                               structure (below) */
 
1147
   png_bytep zbuf PNG_DEPSTRUCT;            /* buffer for zlib */
 
1148
   png_size_t zbuf_size PNG_DEPSTRUCT;      /* size of zbuf */
 
1149
   int zlib_level PNG_DEPSTRUCT;            /* holds zlib compression level */
 
1150
   int zlib_method PNG_DEPSTRUCT;           /* holds zlib compression method */
 
1151
   int zlib_window_bits PNG_DEPSTRUCT;      /* holds zlib compression window
 
1152
                                               bits */
 
1153
   int zlib_mem_level PNG_DEPSTRUCT;        /* holds zlib compression memory
 
1154
                                               level */
 
1155
   int zlib_strategy PNG_DEPSTRUCT;         /* holds zlib compression
 
1156
                                               strategy */
 
1157
 
 
1158
   png_uint_32 width PNG_DEPSTRUCT;         /* width of image in pixels */
 
1159
   png_uint_32 height PNG_DEPSTRUCT;        /* height of image in pixels */
 
1160
   png_uint_32 num_rows PNG_DEPSTRUCT;      /* number of rows in current pass */
 
1161
   png_uint_32 usr_width PNG_DEPSTRUCT;     /* width of row at start of write */
 
1162
   png_size_t rowbytes PNG_DEPSTRUCT;       /* size of row in bytes */
 
1163
#if 0 /* Replaced with the following in libpng-1.4.1 */
 
1164
   png_size_t irowbytes PNG_DEPSTRUCT;
 
1165
#endif
 
1166
/* Added in libpng-1.4.1 */
 
1167
#ifdef PNG_USER_LIMITS_SUPPORTED
 
1168
   /* Total memory that a zTXt, sPLT, iTXt, iCCP, or unknown chunk
 
1169
    * can occupy when decompressed.  0 means unlimited.
 
1170
    * We will change the typedef from png_size_t to png_alloc_size_t
 
1171
    * in libpng-1.6.0
 
1172
    */
 
1173
   png_alloc_size_t user_chunk_malloc_max PNG_DEPSTRUCT;
 
1174
#endif
 
1175
   png_uint_32 iwidth PNG_DEPSTRUCT;        /* width of current interlaced
 
1176
                                               row in pixels */
 
1177
   png_uint_32 row_number PNG_DEPSTRUCT;    /* current row in interlace pass */
 
1178
   png_bytep prev_row PNG_DEPSTRUCT;        /* buffer to save previous
 
1179
                                               (unfiltered) row */
 
1180
   png_bytep row_buf PNG_DEPSTRUCT;         /* buffer to save current
 
1181
                                               (unfiltered) row */
 
1182
   png_bytep sub_row PNG_DEPSTRUCT;         /* buffer to save "sub" row
 
1183
                                               when filtering */
 
1184
   png_bytep up_row PNG_DEPSTRUCT;          /* buffer to save "up" row
 
1185
                                               when filtering */
 
1186
   png_bytep avg_row PNG_DEPSTRUCT;         /* buffer to save "avg" row
 
1187
                                               when filtering */
 
1188
   png_bytep paeth_row PNG_DEPSTRUCT;       /* buffer to save "Paeth" row
 
1189
                                               when filtering */
 
1190
   png_row_info row_info PNG_DEPSTRUCT;     /* used for transformation
 
1191
                                               routines */
 
1192
 
 
1193
   png_uint_32 idat_size PNG_DEPSTRUCT;     /* current IDAT size for read */
 
1194
   png_uint_32 crc PNG_DEPSTRUCT;           /* current chunk CRC value */
 
1195
   png_colorp palette PNG_DEPSTRUCT;        /* palette from the input file */
 
1196
   png_uint_16 num_palette PNG_DEPSTRUCT;   /* number of color entries in
 
1197
                                               palette */
 
1198
   png_uint_16 num_trans PNG_DEPSTRUCT;     /* number of transparency values */
 
1199
   png_byte chunk_name[5] PNG_DEPSTRUCT;    /* null-terminated name of current
 
1200
                                               chunk */
 
1201
   png_byte compression PNG_DEPSTRUCT;      /* file compression type
 
1202
                                               (always 0) */
 
1203
   png_byte filter PNG_DEPSTRUCT;           /* file filter type (always 0) */
 
1204
   png_byte interlaced PNG_DEPSTRUCT;       /* PNG_INTERLACE_NONE,
 
1205
                                               PNG_INTERLACE_ADAM7 */
 
1206
   png_byte pass PNG_DEPSTRUCT;             /* current interlace pass (0 - 6) */
 
1207
   png_byte do_filter PNG_DEPSTRUCT;        /* row filter flags (see
 
1208
                                               PNG_FILTER_ below ) */
 
1209
   png_byte color_type PNG_DEPSTRUCT;       /* color type of file */
 
1210
   png_byte bit_depth PNG_DEPSTRUCT;        /* bit depth of file */
 
1211
   png_byte usr_bit_depth PNG_DEPSTRUCT;    /* bit depth of users row */
 
1212
   png_byte pixel_depth PNG_DEPSTRUCT;      /* number of bits per pixel */
 
1213
   png_byte channels PNG_DEPSTRUCT;         /* number of channels in file */
 
1214
   png_byte usr_channels PNG_DEPSTRUCT;     /* channels at start of write */
 
1215
   png_byte sig_bytes PNG_DEPSTRUCT;        /* magic bytes read/written from
 
1216
                                               start of file */
 
1217
 
 
1218
#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
 
1219
   png_uint_16 filler PNG_DEPSTRUCT;           /* filler bytes for pixel
 
1220
                                                  expansion */
 
1221
#endif
 
1222
 
 
1223
#ifdef PNG_bKGD_SUPPORTED
 
1224
   png_byte background_gamma_type PNG_DEPSTRUCT;
 
1225
#  ifdef PNG_FLOATING_POINT_SUPPORTED
 
1226
   float background_gamma PNG_DEPSTRUCT;
 
1227
#  endif
 
1228
   png_color_16 background PNG_DEPSTRUCT;   /* background color in
 
1229
                                               screen gamma space */
 
1230
#ifdef PNG_READ_GAMMA_SUPPORTED
 
1231
   png_color_16 background_1 PNG_DEPSTRUCT; /* background normalized
 
1232
                                               to gamma 1.0 */
 
1233
#endif
 
1234
#endif /* PNG_bKGD_SUPPORTED */
 
1235
 
 
1236
#ifdef PNG_WRITE_FLUSH_SUPPORTED
 
1237
   png_flush_ptr output_flush_fn PNG_DEPSTRUCT; /* Function for flushing
 
1238
                                               output */
 
1239
   png_uint_32 flush_dist PNG_DEPSTRUCT;    /* how many rows apart to flush,
 
1240
                                               0 - no flush */
 
1241
   png_uint_32 flush_rows PNG_DEPSTRUCT;    /* number of rows written since
 
1242
                                               last flush */
 
1243
#endif
 
1244
 
 
1245
#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
 
1246
   int gamma_shift PNG_DEPSTRUCT;      /* number of "insignificant" bits
 
1247
                                          16-bit gamma */
 
1248
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
1249
   float gamma PNG_DEPSTRUCT;          /* file gamma value */
 
1250
   float screen_gamma PNG_DEPSTRUCT;   /* screen gamma value
 
1251
                                          (display_exponent) */
 
1252
#endif
 
1253
#endif
 
1254
 
 
1255
#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
 
1256
   png_bytep gamma_table PNG_DEPSTRUCT;     /* gamma table for 8-bit
 
1257
                                               depth files */
 
1258
   png_bytep gamma_from_1 PNG_DEPSTRUCT;    /* converts from 1.0 to screen */
 
1259
   png_bytep gamma_to_1 PNG_DEPSTRUCT;      /* converts from file to 1.0 */
 
1260
   png_uint_16pp gamma_16_table PNG_DEPSTRUCT; /* gamma table for 16-bit
 
1261
                                                  depth files */
 
1262
   png_uint_16pp gamma_16_from_1 PNG_DEPSTRUCT; /* converts from 1.0 to
 
1263
                                                   screen */
 
1264
   png_uint_16pp gamma_16_to_1 PNG_DEPSTRUCT; /* converts from file to 1.0 */
 
1265
#endif
 
1266
 
 
1267
#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_sBIT_SUPPORTED)
 
1268
   png_color_8 sig_bit PNG_DEPSTRUCT;       /* significant bits in each
 
1269
                                               available channel */
 
1270
#endif
 
1271
 
 
1272
#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
 
1273
   png_color_8 shift PNG_DEPSTRUCT;         /* shift for significant bit
 
1274
                                               tranformation */
 
1275
#endif
 
1276
 
 
1277
#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) \
 
1278
 || defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
 
1279
   png_bytep trans_alpha PNG_DEPSTRUCT;           /* alpha values for
 
1280
                                                     paletted files */
 
1281
   png_color_16 trans_color PNG_DEPSTRUCT;  /* transparent color for
 
1282
                                               non-paletted files */
 
1283
#endif
 
1284
 
 
1285
   png_read_status_ptr read_row_fn PNG_DEPSTRUCT;   /* called after each
 
1286
                                                       row is decoded */
 
1287
   png_write_status_ptr write_row_fn PNG_DEPSTRUCT; /* called after each
 
1288
                                                       row is encoded */
 
1289
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
 
1290
   png_progressive_info_ptr info_fn PNG_DEPSTRUCT; /* called after header
 
1291
                                                      data fully read */
 
1292
   png_progressive_row_ptr row_fn PNG_DEPSTRUCT;   /* called after each
 
1293
                                                      prog. row is decoded */
 
1294
   png_progressive_end_ptr end_fn PNG_DEPSTRUCT;   /* called after image
 
1295
                                                      is complete */
 
1296
   png_bytep save_buffer_ptr PNG_DEPSTRUCT;        /* current location in
 
1297
                                                      save_buffer */
 
1298
   png_bytep save_buffer PNG_DEPSTRUCT;            /* buffer for previously
 
1299
                                                      read data */
 
1300
   png_bytep current_buffer_ptr PNG_DEPSTRUCT;     /* current location in
 
1301
                                                      current_buffer */
 
1302
   png_bytep current_buffer PNG_DEPSTRUCT;         /* buffer for recently
 
1303
                                                      used data */
 
1304
   png_uint_32 push_length PNG_DEPSTRUCT;          /* size of current input
 
1305
                                                      chunk */
 
1306
   png_uint_32 skip_length PNG_DEPSTRUCT;          /* bytes to skip in
 
1307
                                                      input data */
 
1308
   png_size_t save_buffer_size PNG_DEPSTRUCT;      /* amount of data now
 
1309
                                                      in save_buffer */
 
1310
   png_size_t save_buffer_max PNG_DEPSTRUCT;       /* total size of
 
1311
                                                      save_buffer */
 
1312
   png_size_t buffer_size PNG_DEPSTRUCT;           /* total amount of
 
1313
                                                      available input data */
 
1314
   png_size_t current_buffer_size PNG_DEPSTRUCT;   /* amount of data now
 
1315
                                                      in current_buffer */
 
1316
   int process_mode PNG_DEPSTRUCT;                 /* what push library
 
1317
                                                      is currently doing */
 
1318
   int cur_palette PNG_DEPSTRUCT;                  /* current push library
 
1319
                                                      palette index */
 
1320
 
 
1321
#  ifdef PNG_TEXT_SUPPORTED
 
1322
     png_size_t current_text_size PNG_DEPSTRUCT;   /* current size of
 
1323
                                                      text input data */
 
1324
     png_size_t current_text_left PNG_DEPSTRUCT;   /* how much text left
 
1325
                                                      to read in input */
 
1326
     png_charp current_text PNG_DEPSTRUCT;         /* current text chunk
 
1327
                                                      buffer */
 
1328
     png_charp current_text_ptr PNG_DEPSTRUCT;     /* current location
 
1329
                                                      in current_text */
 
1330
#  endif /* PNG_PROGRESSIVE_READ_SUPPORTED && PNG_TEXT_SUPPORTED */
 
1331
 
 
1332
#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
 
1333
 
 
1334
#if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__)
 
1335
/* For the Borland special 64K segment handler */
 
1336
   png_bytepp offset_table_ptr PNG_DEPSTRUCT;
 
1337
   png_bytep offset_table PNG_DEPSTRUCT;
 
1338
   png_uint_16 offset_table_number PNG_DEPSTRUCT;
 
1339
   png_uint_16 offset_table_count PNG_DEPSTRUCT;
 
1340
   png_uint_16 offset_table_count_free PNG_DEPSTRUCT;
 
1341
#endif
 
1342
 
 
1343
#ifdef PNG_READ_QUANTIZE_SUPPORTED
 
1344
   png_bytep palette_lookup PNG_DEPSTRUCT; /* lookup table for quantizing */
 
1345
   png_bytep quantize_index PNG_DEPSTRUCT; /* index translation for palette
 
1346
                                              files */
 
1347
#endif
 
1348
 
 
1349
#if defined(PNG_READ_QUANTIZE_SUPPORTED) || defined(PNG_hIST_SUPPORTED)
 
1350
   png_uint_16p hist PNG_DEPSTRUCT;                /* histogram */
 
1351
#endif
 
1352
 
 
1353
#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
 
1354
   png_byte heuristic_method PNG_DEPSTRUCT;        /* heuristic for row
 
1355
                                                      filter selection */
 
1356
   png_byte num_prev_filters PNG_DEPSTRUCT;        /* number of weights
 
1357
                                                      for previous rows */
 
1358
   png_bytep prev_filters PNG_DEPSTRUCT;           /* filter type(s) of
 
1359
                                                      previous row(s) */
 
1360
   png_uint_16p filter_weights PNG_DEPSTRUCT;      /* weight(s) for previous
 
1361
                                                      line(s) */
 
1362
   png_uint_16p inv_filter_weights PNG_DEPSTRUCT;  /* 1/weight(s) for
 
1363
                                                      previous line(s) */
 
1364
   png_uint_16p filter_costs PNG_DEPSTRUCT;        /* relative filter
 
1365
                                                      calculation cost */
 
1366
   png_uint_16p inv_filter_costs PNG_DEPSTRUCT;    /* 1/relative filter
 
1367
                                                      calculation cost */
 
1368
#endif
 
1369
 
 
1370
#ifdef PNG_TIME_RFC1123_SUPPORTED
 
1371
   png_charp time_buffer PNG_DEPSTRUCT; /* String to hold RFC 1123 time text */
 
1372
#endif
 
1373
 
 
1374
/* New members added in libpng-1.0.6 */
 
1375
 
 
1376
   png_uint_32 free_me PNG_DEPSTRUCT;    /* flags items libpng is
 
1377
                                            responsible for freeing */
 
1378
 
 
1379
#ifdef PNG_USER_CHUNKS_SUPPORTED
 
1380
   png_voidp user_chunk_ptr PNG_DEPSTRUCT;
 
1381
   png_user_chunk_ptr read_user_chunk_fn PNG_DEPSTRUCT; /* user read
 
1382
                                                           chunk handler */
 
1383
#endif
 
1384
 
 
1385
#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
 
1386
   int num_chunk_list PNG_DEPSTRUCT;
 
1387
   png_bytep chunk_list PNG_DEPSTRUCT;
 
1388
#endif
 
1389
 
 
1390
/* New members added in libpng-1.0.3 */
 
1391
#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
 
1392
   png_byte rgb_to_gray_status PNG_DEPSTRUCT;
 
1393
   /* These were changed from png_byte in libpng-1.0.6 */
 
1394
   png_uint_16 rgb_to_gray_red_coeff PNG_DEPSTRUCT;
 
1395
   png_uint_16 rgb_to_gray_green_coeff PNG_DEPSTRUCT;
 
1396
   png_uint_16 rgb_to_gray_blue_coeff PNG_DEPSTRUCT;
 
1397
#endif
 
1398
 
 
1399
/* New member added in libpng-1.0.4 (renamed in 1.0.9) */
 
1400
#if defined(PNG_MNG_FEATURES_SUPPORTED) || \
 
1401
    defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \
 
1402
    defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED)
 
1403
/* Changed from png_byte to png_uint_32 at version 1.2.0 */
 
1404
   png_uint_32 mng_features_permitted PNG_DEPSTRUCT;
 
1405
#endif
 
1406
 
 
1407
/* New member added in libpng-1.0.7 */
 
1408
#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
 
1409
   png_fixed_point int_gamma PNG_DEPSTRUCT;
 
1410
#endif
 
1411
 
 
1412
/* New member added in libpng-1.0.9, ifdef'ed out in 1.0.12, enabled in 1.2.0 */
 
1413
#ifdef PNG_MNG_FEATURES_SUPPORTED
 
1414
   png_byte filter_type PNG_DEPSTRUCT;
 
1415
#endif
 
1416
 
 
1417
/* New members added in libpng-1.2.0 */
 
1418
 
 
1419
/* New members added in libpng-1.0.2 but first enabled by default in 1.2.0 */
 
1420
#ifdef PNG_USER_MEM_SUPPORTED
 
1421
   png_voidp mem_ptr PNG_DEPSTRUCT;             /* user supplied struct for
 
1422
                                                   mem functions */
 
1423
   png_malloc_ptr malloc_fn PNG_DEPSTRUCT;      /* function for
 
1424
                                                   allocating memory */
 
1425
   png_free_ptr free_fn PNG_DEPSTRUCT;          /* function for
 
1426
                                                   freeing memory */
 
1427
#endif
 
1428
 
 
1429
/* New member added in libpng-1.0.13 and 1.2.0 */
 
1430
   png_bytep big_row_buf PNG_DEPSTRUCT;         /* buffer to save current
 
1431
                                                   (unfiltered) row */
 
1432
 
 
1433
#ifdef PNG_READ_QUANTIZE_SUPPORTED
 
1434
/* The following three members were added at version 1.0.14 and 1.2.4 */
 
1435
   png_bytep quantize_sort PNG_DEPSTRUCT;          /* working sort array */
 
1436
   png_bytep index_to_palette PNG_DEPSTRUCT;       /* where the original
 
1437
                                                     index currently is
 
1438
                                                     in the palette */
 
1439
   png_bytep palette_to_index PNG_DEPSTRUCT;       /* which original index
 
1440
                                                      points to this
 
1441
                                                      palette color */
 
1442
#endif
 
1443
 
 
1444
/* New members added in libpng-1.0.16 and 1.2.6 */
 
1445
   png_byte compression_type PNG_DEPSTRUCT;
 
1446
 
 
1447
#ifdef PNG_USER_LIMITS_SUPPORTED
 
1448
   png_uint_32 user_width_max PNG_DEPSTRUCT;
 
1449
   png_uint_32 user_height_max PNG_DEPSTRUCT;
 
1450
   /* Added in libpng-1.4.0: Total number of sPLT, text, and unknown
 
1451
    * chunks that can be stored (0 means unlimited).
 
1452
    */
 
1453
   png_uint_32 user_chunk_cache_max PNG_DEPSTRUCT;
 
1454
#endif
 
1455
 
 
1456
/* New member added in libpng-1.0.25 and 1.2.17 */
 
1457
#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED
 
1458
   /* Storage for unknown chunk that the library doesn't recognize. */
 
1459
   png_unknown_chunk unknown_chunk PNG_DEPSTRUCT;
 
1460
#endif
 
1461
 
 
1462
/* New members added in libpng-1.2.26 */
 
1463
  png_uint_32 old_big_row_buf_size PNG_DEPSTRUCT;
 
1464
  png_uint_32 old_prev_row_size PNG_DEPSTRUCT;
 
1465
 
 
1466
/* New member added in libpng-1.2.30 */
 
1467
  png_charp chunkdata PNG_DEPSTRUCT;  /* buffer for reading chunk data */
 
1468
 
 
1469
#ifdef PNG_IO_STATE_SUPPORTED
 
1470
/* New member added in libpng-1.4.0 */
 
1471
   png_uint_32 io_state PNG_DEPSTRUCT;
 
1472
#endif
 
1473
};
 
1474
 
 
1475
 
 
1476
/* This triggers a compiler error in png.c, if png.c and png.h
 
1477
 * do not agree upon the version number.
 
1478
 */
 
1479
typedef png_structp version_1_4_4;
 
1480
 
 
1481
typedef png_struct FAR * FAR * png_structpp;
 
1482
 
 
1483
/* Here are the function definitions most commonly used.  This is not
 
1484
 * the place to find out how to use libpng.  See libpng.txt for the
 
1485
 * full explanation, see example.c for the summary.  This just provides
 
1486
 * a simple one line description of the use of each function.
 
1487
 */
 
1488
 
 
1489
/* Returns the version number of the library */
 
1490
PNG_EXPORT(png_uint_32,png_access_version_number) PNGARG((void));
 
1491
 
 
1492
/* Tell lib we have already handled the first <num_bytes> magic bytes.
 
1493
 * Handling more than 8 bytes from the beginning of the file is an error.
 
1494
 */
 
1495
PNG_EXPORT(void,png_set_sig_bytes) PNGARG((png_structp png_ptr,
 
1496
   int num_bytes));
 
1497
 
 
1498
/* Check sig[start] through sig[start + num_to_check - 1] to see if it's a
 
1499
 * PNG file.  Returns zero if the supplied bytes match the 8-byte PNG
 
1500
 * signature, and non-zero otherwise.  Having num_to_check == 0 or
 
1501
 * start > 7 will always fail (ie return non-zero).
 
1502
 */
 
1503
PNG_EXPORT(int,png_sig_cmp) PNGARG((png_bytep sig, png_size_t start,
 
1504
   png_size_t num_to_check));
 
1505
 
 
1506
/* Simple signature checking function.  This is the same as calling
 
1507
 * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n).
 
1508
 */
 
1509
#define png_check_sig(sig,n) !png_sig_cmp((sig), 0, (n))
 
1510
 
 
1511
/* Allocate and initialize png_ptr struct for reading, and any other memory. */
 
1512
PNG_EXPORT(png_structp,png_create_read_struct)
 
1513
   PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
 
1514
   png_error_ptr error_fn, png_error_ptr warn_fn)) PNG_ALLOCATED;
 
1515
 
 
1516
/* Allocate and initialize png_ptr struct for writing, and any other memory */
 
1517
PNG_EXPORT(png_structp,png_create_write_struct)
 
1518
   PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
 
1519
   png_error_ptr error_fn, png_error_ptr warn_fn)) PNG_ALLOCATED;
 
1520
 
 
1521
PNG_EXPORT(png_size_t,png_get_compression_buffer_size)
 
1522
   PNGARG((png_structp png_ptr));
 
1523
 
 
1524
PNG_EXPORT(void,png_set_compression_buffer_size)
 
1525
   PNGARG((png_structp png_ptr, png_size_t size));
 
1526
 
 
1527
/* Moved from pngconf.h in 1.4.0 and modified to ensure setjmp/longjmp
 
1528
 * match up.
 
1529
 */
 
1530
#ifdef PNG_SETJMP_SUPPORTED
 
1531
/* This function returns the jmp_buf built in to *png_ptr.  It must be
 
1532
 * supplied with an appropriate 'longjmp' function to use on that jmp_buf
 
1533
 * unless the default error function is overridden in which case NULL is
 
1534
 * acceptable.  The size of the jmp_buf is checked against the actual size
 
1535
 * allocated by the library - the call will return NULL on a mismatch
 
1536
 * indicating an ABI mismatch.
 
1537
 */
 
1538
PNG_EXPORT(jmp_buf*, png_set_longjmp_fn)
 
1539
   PNGARG((png_structp png_ptr, png_longjmp_ptr longjmp_fn, size_t
 
1540
       jmp_buf_size));
 
1541
#  define png_jmpbuf(png_ptr) \
 
1542
   (*png_set_longjmp_fn((png_ptr), longjmp, sizeof (jmp_buf)))
 
1543
#else
 
1544
#  define png_jmpbuf(png_ptr) \
 
1545
   (LIBPNG_WAS_COMPILED_WITH__PNG_NO_SETJMP)
 
1546
#endif
 
1547
 
 
1548
#ifdef PNG_READ_SUPPORTED
 
1549
/* Reset the compression stream */
 
1550
PNG_EXPORT(int,png_reset_zstream) PNGARG((png_structp png_ptr));
 
1551
#endif
 
1552
 
 
1553
/* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */
 
1554
#ifdef PNG_USER_MEM_SUPPORTED
 
1555
PNG_EXPORT(png_structp,png_create_read_struct_2)
 
1556
   PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
 
1557
   png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr,
 
1558
   png_malloc_ptr malloc_fn, png_free_ptr free_fn)) PNG_ALLOCATED;
 
1559
PNG_EXPORT(png_structp,png_create_write_struct_2)
 
1560
   PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
 
1561
   png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr,
 
1562
   png_malloc_ptr malloc_fn, png_free_ptr free_fn)) PNG_ALLOCATED;
 
1563
#endif
 
1564
 
 
1565
/* Write the PNG file signature. */
 
1566
PNG_EXPORT(void,png_write_sig) PNGARG((png_structp png_ptr));
 
1567
 
 
1568
/* Write a PNG chunk - size, type, (optional) data, CRC. */
 
1569
PNG_EXPORT(void,png_write_chunk) PNGARG((png_structp png_ptr,
 
1570
   png_bytep chunk_name, png_bytep data, png_size_t length));
 
1571
 
 
1572
/* Write the start of a PNG chunk - length and chunk name. */
 
1573
PNG_EXPORT(void,png_write_chunk_start) PNGARG((png_structp png_ptr,
 
1574
   png_bytep chunk_name, png_uint_32 length));
 
1575
 
 
1576
/* Write the data of a PNG chunk started with png_write_chunk_start(). */
 
1577
PNG_EXPORT(void,png_write_chunk_data) PNGARG((png_structp png_ptr,
 
1578
   png_bytep data, png_size_t length));
 
1579
 
 
1580
/* Finish a chunk started with png_write_chunk_start() (includes CRC). */
 
1581
PNG_EXPORT(void,png_write_chunk_end) PNGARG((png_structp png_ptr));
 
1582
 
 
1583
/* Allocate and initialize the info structure */
 
1584
PNG_EXPORT(png_infop,png_create_info_struct)
 
1585
   PNGARG((png_structp png_ptr)) PNG_ALLOCATED;
 
1586
 
 
1587
PNG_EXPORT(void,png_info_init_3) PNGARG((png_infopp info_ptr,
 
1588
    png_size_t png_info_struct_size));
 
1589
 
 
1590
/* Writes all the PNG information before the image. */
 
1591
PNG_EXPORT(void,png_write_info_before_PLTE) PNGARG((png_structp png_ptr,
 
1592
   png_infop info_ptr));
 
1593
PNG_EXPORT(void,png_write_info) PNGARG((png_structp png_ptr,
 
1594
   png_infop info_ptr));
 
1595
 
 
1596
#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
 
1597
/* Read the information before the actual image data. */
 
1598
PNG_EXPORT(void,png_read_info) PNGARG((png_structp png_ptr,
 
1599
   png_infop info_ptr));
 
1600
#endif
 
1601
 
 
1602
#ifdef PNG_TIME_RFC1123_SUPPORTED
 
1603
PNG_EXPORT(png_charp,png_convert_to_rfc1123)
 
1604
   PNGARG((png_structp png_ptr, png_timep ptime));
 
1605
#endif
 
1606
 
 
1607
#ifdef PNG_CONVERT_tIME_SUPPORTED
 
1608
/* Convert from a struct tm to png_time */
 
1609
PNG_EXPORT(void,png_convert_from_struct_tm) PNGARG((png_timep ptime,
 
1610
   struct tm FAR * ttime));
 
1611
 
 
1612
/* Convert from time_t to png_time.  Uses gmtime() */
 
1613
PNG_EXPORT(void,png_convert_from_time_t) PNGARG((png_timep ptime,
 
1614
   time_t ttime));
 
1615
#endif /* PNG_CONVERT_tIME_SUPPORTED */
 
1616
 
 
1617
#ifdef PNG_READ_EXPAND_SUPPORTED
 
1618
/* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */
 
1619
PNG_EXPORT(void,png_set_expand) PNGARG((png_structp png_ptr));
 
1620
PNG_EXPORT(void,png_set_expand_gray_1_2_4_to_8) PNGARG((png_structp
 
1621
  png_ptr));
 
1622
PNG_EXPORT(void,png_set_palette_to_rgb) PNGARG((png_structp png_ptr));
 
1623
PNG_EXPORT(void,png_set_tRNS_to_alpha) PNGARG((png_structp png_ptr));
 
1624
#endif
 
1625
 
 
1626
#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
 
1627
/* Use blue, green, red order for pixels. */
 
1628
PNG_EXPORT(void,png_set_bgr) PNGARG((png_structp png_ptr));
 
1629
#endif
 
1630
 
 
1631
#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
 
1632
/* Expand the grayscale to 24-bit RGB if necessary. */
 
1633
PNG_EXPORT(void,png_set_gray_to_rgb) PNGARG((png_structp png_ptr));
 
1634
#endif
 
1635
 
 
1636
#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
 
1637
/* Reduce RGB to grayscale. */
 
1638
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
1639
PNG_EXPORT(void,png_set_rgb_to_gray) PNGARG((png_structp png_ptr,
 
1640
   int error_action, double red, double green ));
 
1641
#endif
 
1642
PNG_EXPORT(void,png_set_rgb_to_gray_fixed) PNGARG((png_structp png_ptr,
 
1643
   int error_action, png_fixed_point red, png_fixed_point green ));
 
1644
PNG_EXPORT(png_byte,png_get_rgb_to_gray_status) PNGARG((png_structp
 
1645
   png_ptr));
 
1646
#endif
 
1647
 
 
1648
PNG_EXPORT(void,png_build_grayscale_palette) PNGARG((int bit_depth,
 
1649
   png_colorp palette));
 
1650
 
 
1651
#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
 
1652
PNG_EXPORT(void,png_set_strip_alpha) PNGARG((png_structp png_ptr));
 
1653
#endif
 
1654
 
 
1655
#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \
 
1656
    defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)
 
1657
PNG_EXPORT(void,png_set_swap_alpha) PNGARG((png_structp png_ptr));
 
1658
#endif
 
1659
 
 
1660
#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \
 
1661
    defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
 
1662
PNG_EXPORT(void,png_set_invert_alpha) PNGARG((png_structp png_ptr));
 
1663
#endif
 
1664
 
 
1665
#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
 
1666
/* Add a filler byte to 8-bit Gray or 24-bit RGB images. */
 
1667
PNG_EXPORT(void,png_set_filler) PNGARG((png_structp png_ptr,
 
1668
   png_uint_32 filler, int flags));
 
1669
/* The values of the PNG_FILLER_ defines should NOT be changed */
 
1670
#define PNG_FILLER_BEFORE 0
 
1671
#define PNG_FILLER_AFTER 1
 
1672
/* Add an alpha byte to 8-bit Gray or 24-bit RGB images. */
 
1673
PNG_EXPORT(void,png_set_add_alpha) PNGARG((png_structp png_ptr,
 
1674
   png_uint_32 filler, int flags));
 
1675
#endif /* PNG_READ_FILLER_SUPPORTED || PNG_WRITE_FILLER_SUPPORTED */
 
1676
 
 
1677
#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
 
1678
/* Swap bytes in 16-bit depth files. */
 
1679
PNG_EXPORT(void,png_set_swap) PNGARG((png_structp png_ptr));
 
1680
#endif
 
1681
 
 
1682
#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
 
1683
/* Use 1 byte per pixel in 1, 2, or 4-bit depth files. */
 
1684
PNG_EXPORT(void,png_set_packing) PNGARG((png_structp png_ptr));
 
1685
#endif
 
1686
 
 
1687
#if defined(PNG_READ_PACKSWAP_SUPPORTED) || \
 
1688
    defined(PNG_WRITE_PACKSWAP_SUPPORTED)
 
1689
/* Swap packing order of pixels in bytes. */
 
1690
PNG_EXPORT(void,png_set_packswap) PNGARG((png_structp png_ptr));
 
1691
#endif
 
1692
 
 
1693
#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
 
1694
/* Converts files to legal bit depths. */
 
1695
PNG_EXPORT(void,png_set_shift) PNGARG((png_structp png_ptr,
 
1696
   png_color_8p true_bits));
 
1697
#endif
 
1698
 
 
1699
#if defined(PNG_READ_INTERLACING_SUPPORTED) || \
 
1700
    defined(PNG_WRITE_INTERLACING_SUPPORTED)
 
1701
/* Have the code handle the interlacing.  Returns the number of passes. */
 
1702
PNG_EXPORT(int,png_set_interlace_handling) PNGARG((png_structp png_ptr));
 
1703
#endif
 
1704
 
 
1705
#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED)
 
1706
/* Invert monochrome files */
 
1707
PNG_EXPORT(void,png_set_invert_mono) PNGARG((png_structp png_ptr));
 
1708
#endif
 
1709
 
 
1710
#ifdef PNG_READ_BACKGROUND_SUPPORTED
 
1711
/* Handle alpha and tRNS by replacing with a background color. */
 
1712
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
1713
PNG_EXPORT(void,png_set_background) PNGARG((png_structp png_ptr,
 
1714
   png_color_16p background_color, int background_gamma_code,
 
1715
   int need_expand, double background_gamma));
 
1716
#endif
 
1717
#define PNG_BACKGROUND_GAMMA_UNKNOWN 0
 
1718
#define PNG_BACKGROUND_GAMMA_SCREEN  1
 
1719
#define PNG_BACKGROUND_GAMMA_FILE    2
 
1720
#define PNG_BACKGROUND_GAMMA_UNIQUE  3
 
1721
#endif
 
1722
 
 
1723
#ifdef PNG_READ_16_TO_8_SUPPORTED
 
1724
/* Strip the second byte of information from a 16-bit depth file. */
 
1725
PNG_EXPORT(void,png_set_strip_16) PNGARG((png_structp png_ptr));
 
1726
#endif
 
1727
 
 
1728
#ifdef PNG_READ_QUANTIZE_SUPPORTED
 
1729
/* Turn on quantizing, and reduce the palette to the number of colors
 
1730
 * available.  Prior to libpng-1.4.2, this was png_set_dither().
 
1731
 */
 
1732
PNG_EXPORT(void,png_set_quantize) PNGARG((png_structp png_ptr,
 
1733
   png_colorp palette, int num_palette, int maximum_colors,
 
1734
   png_uint_16p histogram, int full_quantize));
 
1735
#endif
 
1736
/* This migration aid will be removed from libpng-1.5.0 */
 
1737
#define png_set_dither png_set_quantize
 
1738
 
 
1739
#ifdef PNG_READ_GAMMA_SUPPORTED
 
1740
/* Handle gamma correction. Screen_gamma=(display_exponent) */
 
1741
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
1742
PNG_EXPORT(void,png_set_gamma) PNGARG((png_structp png_ptr,
 
1743
   double screen_gamma, double default_file_gamma));
 
1744
#endif
 
1745
#endif
 
1746
 
 
1747
 
 
1748
#ifdef PNG_WRITE_FLUSH_SUPPORTED
 
1749
/* Set how many lines between output flushes - 0 for no flushing */
 
1750
PNG_EXPORT(void,png_set_flush) PNGARG((png_structp png_ptr, int nrows));
 
1751
/* Flush the current PNG output buffer */
 
1752
PNG_EXPORT(void,png_write_flush) PNGARG((png_structp png_ptr));
 
1753
#endif
 
1754
 
 
1755
/* Optional update palette with requested transformations */
 
1756
PNG_EXPORT(void,png_start_read_image) PNGARG((png_structp png_ptr));
 
1757
 
 
1758
/* Optional call to update the users info structure */
 
1759
PNG_EXPORT(void,png_read_update_info) PNGARG((png_structp png_ptr,
 
1760
   png_infop info_ptr));
 
1761
 
 
1762
#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
 
1763
/* Read one or more rows of image data. */
 
1764
PNG_EXPORT(void,png_read_rows) PNGARG((png_structp png_ptr,
 
1765
   png_bytepp row, png_bytepp display_row, png_uint_32 num_rows));
 
1766
#endif
 
1767
 
 
1768
#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
 
1769
/* Read a row of data. */
 
1770
PNG_EXPORT(void,png_read_row) PNGARG((png_structp png_ptr,
 
1771
   png_bytep row,
 
1772
   png_bytep display_row));
 
1773
#endif
 
1774
 
 
1775
#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
 
1776
/* Read the whole image into memory at once. */
 
1777
PNG_EXPORT(void,png_read_image) PNGARG((png_structp png_ptr,
 
1778
   png_bytepp image));
 
1779
#endif
 
1780
 
 
1781
/* Write a row of image data */
 
1782
PNG_EXPORT(void,png_write_row) PNGARG((png_structp png_ptr,
 
1783
   png_bytep row));
 
1784
 
 
1785
/* Write a few rows of image data */
 
1786
PNG_EXPORT(void,png_write_rows) PNGARG((png_structp png_ptr,
 
1787
   png_bytepp row, png_uint_32 num_rows));
 
1788
 
 
1789
/* Write the image data */
 
1790
PNG_EXPORT(void,png_write_image) PNGARG((png_structp png_ptr,
 
1791
   png_bytepp image));
 
1792
 
 
1793
/* Write the end of the PNG file. */
 
1794
PNG_EXPORT(void,png_write_end) PNGARG((png_structp png_ptr,
 
1795
   png_infop info_ptr));
 
1796
 
 
1797
#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
 
1798
/* Read the end of the PNG file. */
 
1799
PNG_EXPORT(void,png_read_end) PNGARG((png_structp png_ptr,
 
1800
   png_infop info_ptr));
 
1801
#endif
 
1802
 
 
1803
/* Free any memory associated with the png_info_struct */
 
1804
PNG_EXPORT(void,png_destroy_info_struct) PNGARG((png_structp png_ptr,
 
1805
   png_infopp info_ptr_ptr));
 
1806
 
 
1807
/* Free any memory associated with the png_struct and the png_info_structs */
 
1808
PNG_EXPORT(void,png_destroy_read_struct) PNGARG((png_structpp
 
1809
   png_ptr_ptr, png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr));
 
1810
 
 
1811
/* Free any memory associated with the png_struct and the png_info_structs */
 
1812
PNG_EXPORT(void,png_destroy_write_struct)
 
1813
   PNGARG((png_structpp png_ptr_ptr, png_infopp info_ptr_ptr));
 
1814
 
 
1815
/* Set the libpng method of handling chunk CRC errors */
 
1816
PNG_EXPORT(void,png_set_crc_action) PNGARG((png_structp png_ptr,
 
1817
   int crit_action, int ancil_action));
 
1818
 
 
1819
/* Values for png_set_crc_action() to say how to handle CRC errors in
 
1820
 * ancillary and critical chunks, and whether to use the data contained
 
1821
 * therein.  Note that it is impossible to "discard" data in a critical
 
1822
 * chunk.  For versions prior to 0.90, the action was always error/quit,
 
1823
 * whereas in version 0.90 and later, the action for CRC errors in ancillary
 
1824
 * chunks is warn/discard.  These values should NOT be changed.
 
1825
 *
 
1826
 *      value                       action:critical     action:ancillary
 
1827
 */
 
1828
#define PNG_CRC_DEFAULT       0  /* error/quit          warn/discard data */
 
1829
#define PNG_CRC_ERROR_QUIT    1  /* error/quit          error/quit        */
 
1830
#define PNG_CRC_WARN_DISCARD  2  /* (INVALID)           warn/discard data */
 
1831
#define PNG_CRC_WARN_USE      3  /* warn/use data       warn/use data     */
 
1832
#define PNG_CRC_QUIET_USE     4  /* quiet/use data      quiet/use data    */
 
1833
#define PNG_CRC_NO_CHANGE     5  /* use current value   use current value */
 
1834
 
 
1835
/* These functions give the user control over the scan-line filtering in
 
1836
 * libpng and the compression methods used by zlib.  These functions are
 
1837
 * mainly useful for testing, as the defaults should work with most users.
 
1838
 * Those users who are tight on memory or want faster performance at the
 
1839
 * expense of compression can modify them.  See the compression library
 
1840
 * header file (zlib.h) for an explination of the compression functions.
 
1841
 */
 
1842
 
 
1843
/* Set the filtering method(s) used by libpng.  Currently, the only valid
 
1844
 * value for "method" is 0.
 
1845
 */
 
1846
PNG_EXPORT(void,png_set_filter) PNGARG((png_structp png_ptr, int method,
 
1847
   int filters));
 
1848
 
 
1849
/* Flags for png_set_filter() to say which filters to use.  The flags
 
1850
 * are chosen so that they don't conflict with real filter types
 
1851
 * below, in case they are supplied instead of the #defined constants.
 
1852
 * These values should NOT be changed.
 
1853
 */
 
1854
#define PNG_NO_FILTERS     0x00
 
1855
#define PNG_FILTER_NONE    0x08
 
1856
#define PNG_FILTER_SUB     0x10
 
1857
#define PNG_FILTER_UP      0x20
 
1858
#define PNG_FILTER_AVG     0x40
 
1859
#define PNG_FILTER_PAETH   0x80
 
1860
#define PNG_ALL_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP | \
 
1861
                         PNG_FILTER_AVG | PNG_FILTER_PAETH)
 
1862
 
 
1863
/* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now.
 
1864
 * These defines should NOT be changed.
 
1865
 */
 
1866
#define PNG_FILTER_VALUE_NONE  0
 
1867
#define PNG_FILTER_VALUE_SUB   1
 
1868
#define PNG_FILTER_VALUE_UP    2
 
1869
#define PNG_FILTER_VALUE_AVG   3
 
1870
#define PNG_FILTER_VALUE_PAETH 4
 
1871
#define PNG_FILTER_VALUE_LAST  5
 
1872
 
 
1873
#ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED /* EXPERIMENTAL */
 
1874
/* The "heuristic_method" is given by one of the PNG_FILTER_HEURISTIC_
 
1875
 * defines, either the default (minimum-sum-of-absolute-differences), or
 
1876
 * the experimental method (weighted-minimum-sum-of-absolute-differences).
 
1877
 *
 
1878
 * Weights are factors >= 1.0, indicating how important it is to keep the
 
1879
 * filter type consistent between rows.  Larger numbers mean the current
 
1880
 * filter is that many times as likely to be the same as the "num_weights"
 
1881
 * previous filters.  This is cumulative for each previous row with a weight.
 
1882
 * There needs to be "num_weights" values in "filter_weights", or it can be
 
1883
 * NULL if the weights aren't being specified.  Weights have no influence on
 
1884
 * the selection of the first row filter.  Well chosen weights can (in theory)
 
1885
 * improve the compression for a given image.
 
1886
 *
 
1887
 * Costs are factors >= 1.0 indicating the relative decoding costs of a
 
1888
 * filter type.  Higher costs indicate more decoding expense, and are
 
1889
 * therefore less likely to be selected over a filter with lower computational
 
1890
 * costs.  There needs to be a value in "filter_costs" for each valid filter
 
1891
 * type (given by PNG_FILTER_VALUE_LAST), or it can be NULL if you aren't
 
1892
 * setting the costs.  Costs try to improve the speed of decompression without
 
1893
 * unduly increasing the compressed image size.
 
1894
 *
 
1895
 * A negative weight or cost indicates the default value is to be used, and
 
1896
 * values in the range [0.0, 1.0) indicate the value is to remain unchanged.
 
1897
 * The default values for both weights and costs are currently 1.0, but may
 
1898
 * change if good general weighting/cost heuristics can be found.  If both
 
1899
 * the weights and costs are set to 1.0, this degenerates the WEIGHTED method
 
1900
 * to the UNWEIGHTED method, but with added encoding time/computation.
 
1901
 */
 
1902
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
1903
PNG_EXPORT(void,png_set_filter_heuristics) PNGARG((png_structp png_ptr,
 
1904
   int heuristic_method, int num_weights, png_doublep filter_weights,
 
1905
   png_doublep filter_costs));
 
1906
#endif
 
1907
#endif /*  PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */
 
1908
 
 
1909
/* Heuristic used for row filter selection.  These defines should NOT be
 
1910
 * changed.
 
1911
 */
 
1912
#define PNG_FILTER_HEURISTIC_DEFAULT    0  /* Currently "UNWEIGHTED" */
 
1913
#define PNG_FILTER_HEURISTIC_UNWEIGHTED 1  /* Used by libpng < 0.95 */
 
1914
#define PNG_FILTER_HEURISTIC_WEIGHTED   2  /* Experimental feature */
 
1915
#define PNG_FILTER_HEURISTIC_LAST       3  /* Not a valid value */
 
1916
 
 
1917
/* Set the library compression level.  Currently, valid values range from
 
1918
 * 0 - 9, corresponding directly to the zlib compression levels 0 - 9
 
1919
 * (0 - no compression, 9 - "maximal" compression).  Note that tests have
 
1920
 * shown that zlib compression levels 3-6 usually perform as well as level 9
 
1921
 * for PNG images, and do considerably fewer caclulations.  In the future,
 
1922
 * these values may not correspond directly to the zlib compression levels.
 
1923
 */
 
1924
PNG_EXPORT(void,png_set_compression_level) PNGARG((png_structp png_ptr,
 
1925
   int level));
 
1926
 
 
1927
PNG_EXPORT(void,png_set_compression_mem_level)
 
1928
   PNGARG((png_structp png_ptr, int mem_level));
 
1929
 
 
1930
PNG_EXPORT(void,png_set_compression_strategy)
 
1931
   PNGARG((png_structp png_ptr, int strategy));
 
1932
 
 
1933
PNG_EXPORT(void,png_set_compression_window_bits)
 
1934
   PNGARG((png_structp png_ptr, int window_bits));
 
1935
 
 
1936
PNG_EXPORT(void,png_set_compression_method) PNGARG((png_structp png_ptr,
 
1937
   int method));
 
1938
 
 
1939
/* These next functions are called for input/output, memory, and error
 
1940
 * handling.  They are in the file pngrio.c, pngwio.c, and pngerror.c,
 
1941
 * and call standard C I/O routines such as fread(), fwrite(), and
 
1942
 * fprintf().  These functions can be made to use other I/O routines
 
1943
 * at run time for those applications that need to handle I/O in a
 
1944
 * different manner by calling png_set_???_fn().  See libpng.txt for
 
1945
 * more information.
 
1946
 */
 
1947
 
 
1948
#ifdef PNG_STDIO_SUPPORTED
 
1949
/* Initialize the input/output for the PNG file to the default functions. */
 
1950
PNG_EXPORT(void,png_init_io) PNGARG((png_structp png_ptr,
 
1951
    png_FILE_p fp));
 
1952
#endif
 
1953
 
 
1954
/* Replace the (error and abort), and warning functions with user
 
1955
 * supplied functions.  If no messages are to be printed you must still
 
1956
 * write and use replacement functions. The replacement error_fn should
 
1957
 * still do a longjmp to the last setjmp location if you are using this
 
1958
 * method of error handling.  If error_fn or warning_fn is NULL, the
 
1959
 * default function will be used.
 
1960
 */
 
1961
 
 
1962
PNG_EXPORT(void,png_set_error_fn) PNGARG((png_structp png_ptr,
 
1963
   png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn));
 
1964
 
 
1965
/* Return the user pointer associated with the error functions */
 
1966
PNG_EXPORT(png_voidp,png_get_error_ptr) PNGARG((png_structp png_ptr));
 
1967
 
 
1968
/* Replace the default data output functions with a user supplied one(s).
 
1969
 * If buffered output is not used, then output_flush_fn can be set to NULL.
 
1970
 * If PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time
 
1971
 * output_flush_fn will be ignored (and thus can be NULL).
 
1972
 * It is probably a mistake to use NULL for output_flush_fn if
 
1973
 * write_data_fn is not also NULL unless you have built libpng with
 
1974
 * PNG_WRITE_FLUSH_SUPPORTED undefined, because in this case libpng's
 
1975
 * default flush function, which uses the standard *FILE structure, will
 
1976
 * be used.
 
1977
 */
 
1978
PNG_EXPORT(void,png_set_write_fn) PNGARG((png_structp png_ptr,
 
1979
   png_voidp io_ptr, png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn));
 
1980
 
 
1981
/* Replace the default data input function with a user supplied one. */
 
1982
PNG_EXPORT(void,png_set_read_fn) PNGARG((png_structp png_ptr,
 
1983
   png_voidp io_ptr, png_rw_ptr read_data_fn));
 
1984
 
 
1985
/* Return the user pointer associated with the I/O functions */
 
1986
PNG_EXPORT(png_voidp,png_get_io_ptr) PNGARG((png_structp png_ptr));
 
1987
 
 
1988
PNG_EXPORT(void,png_set_read_status_fn) PNGARG((png_structp png_ptr,
 
1989
   png_read_status_ptr read_row_fn));
 
1990
 
 
1991
PNG_EXPORT(void,png_set_write_status_fn) PNGARG((png_structp png_ptr,
 
1992
   png_write_status_ptr write_row_fn));
 
1993
 
 
1994
#ifdef PNG_USER_MEM_SUPPORTED
 
1995
/* Replace the default memory allocation functions with user supplied one(s). */
 
1996
PNG_EXPORT(void,png_set_mem_fn) PNGARG((png_structp png_ptr,
 
1997
   png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn));
 
1998
/* Return the user pointer associated with the memory functions */
 
1999
PNG_EXPORT(png_voidp,png_get_mem_ptr) PNGARG((png_structp png_ptr));
 
2000
#endif
 
2001
 
 
2002
#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED
 
2003
PNG_EXPORT(void,png_set_read_user_transform_fn) PNGARG((png_structp
 
2004
   png_ptr, png_user_transform_ptr read_user_transform_fn));
 
2005
#endif
 
2006
 
 
2007
#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED
 
2008
PNG_EXPORT(void,png_set_write_user_transform_fn) PNGARG((png_structp
 
2009
   png_ptr, png_user_transform_ptr write_user_transform_fn));
 
2010
#endif
 
2011
 
 
2012
#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
 
2013
    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
 
2014
PNG_EXPORT(void,png_set_user_transform_info) PNGARG((png_structp
 
2015
   png_ptr, png_voidp user_transform_ptr, int user_transform_depth,
 
2016
   int user_transform_channels));
 
2017
/* Return the user pointer associated with the user transform functions */
 
2018
PNG_EXPORT(png_voidp,png_get_user_transform_ptr)
 
2019
   PNGARG((png_structp png_ptr));
 
2020
#endif
 
2021
 
 
2022
#ifdef PNG_USER_CHUNKS_SUPPORTED
 
2023
PNG_EXPORT(void,png_set_read_user_chunk_fn) PNGARG((png_structp png_ptr,
 
2024
   png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn));
 
2025
PNG_EXPORT(png_voidp,png_get_user_chunk_ptr) PNGARG((png_structp
 
2026
   png_ptr));
 
2027
#endif
 
2028
 
 
2029
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
 
2030
/* Sets the function callbacks for the push reader, and a pointer to a
 
2031
 * user-defined structure available to the callback functions.
 
2032
 */
 
2033
PNG_EXPORT(void,png_set_progressive_read_fn) PNGARG((png_structp png_ptr,
 
2034
   png_voidp progressive_ptr,
 
2035
   png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn,
 
2036
   png_progressive_end_ptr end_fn));
 
2037
 
 
2038
/* Returns the user pointer associated with the push read functions */
 
2039
PNG_EXPORT(png_voidp,png_get_progressive_ptr)
 
2040
   PNGARG((png_structp png_ptr));
 
2041
 
 
2042
/* Function to be called when data becomes available */
 
2043
PNG_EXPORT(void,png_process_data) PNGARG((png_structp png_ptr,
 
2044
   png_infop info_ptr, png_bytep buffer, png_size_t buffer_size));
 
2045
 
 
2046
/* Function that combines rows.  Not very much different than the
 
2047
 * png_combine_row() call.  Is this even used?????
 
2048
 */
 
2049
PNG_EXPORT(void,png_progressive_combine_row) PNGARG((png_structp png_ptr,
 
2050
   png_bytep old_row, png_bytep new_row));
 
2051
#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
 
2052
 
 
2053
PNG_EXPORT(png_voidp,png_malloc) PNGARG((png_structp png_ptr,
 
2054
   png_alloc_size_t size)) PNG_ALLOCATED;
 
2055
/* Added at libpng version 1.4.0 */
 
2056
PNG_EXPORT(png_voidp,png_calloc) PNGARG((png_structp png_ptr,
 
2057
   png_alloc_size_t size)) PNG_ALLOCATED;
 
2058
 
 
2059
/* Added at libpng version 1.2.4 */
 
2060
PNG_EXPORT(png_voidp,png_malloc_warn) PNGARG((png_structp png_ptr,
 
2061
   png_alloc_size_t size)) PNG_ALLOCATED;
 
2062
 
 
2063
/* Frees a pointer allocated by png_malloc() */
 
2064
PNG_EXPORT(void,png_free) PNGARG((png_structp png_ptr, png_voidp ptr));
 
2065
 
 
2066
/* Free data that was allocated internally */
 
2067
PNG_EXPORT(void,png_free_data) PNGARG((png_structp png_ptr,
 
2068
   png_infop info_ptr, png_uint_32 free_me, int num));
 
2069
/* Reassign responsibility for freeing existing data, whether allocated
 
2070
 * by libpng or by the application */
 
2071
PNG_EXPORT(void,png_data_freer) PNGARG((png_structp png_ptr,
 
2072
   png_infop info_ptr, int freer, png_uint_32 mask));
 
2073
/* Assignments for png_data_freer */
 
2074
#define PNG_DESTROY_WILL_FREE_DATA 1
 
2075
#define PNG_SET_WILL_FREE_DATA 1
 
2076
#define PNG_USER_WILL_FREE_DATA 2
 
2077
/* Flags for png_ptr->free_me and info_ptr->free_me */
 
2078
#define PNG_FREE_HIST 0x0008
 
2079
#define PNG_FREE_ICCP 0x0010
 
2080
#define PNG_FREE_SPLT 0x0020
 
2081
#define PNG_FREE_ROWS 0x0040
 
2082
#define PNG_FREE_PCAL 0x0080
 
2083
#define PNG_FREE_SCAL 0x0100
 
2084
#define PNG_FREE_UNKN 0x0200
 
2085
#define PNG_FREE_LIST 0x0400
 
2086
#define PNG_FREE_PLTE 0x1000
 
2087
#define PNG_FREE_TRNS 0x2000
 
2088
#define PNG_FREE_TEXT 0x4000
 
2089
#define PNG_FREE_ALL  0x7fff
 
2090
#define PNG_FREE_MUL  0x4220 /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */
 
2091
 
 
2092
#ifdef PNG_USER_MEM_SUPPORTED
 
2093
PNG_EXPORT(png_voidp,png_malloc_default) PNGARG((png_structp png_ptr,
 
2094
   png_alloc_size_t size)) PNG_ALLOCATED;
 
2095
PNG_EXPORT(void,png_free_default) PNGARG((png_structp png_ptr,
 
2096
   png_voidp ptr));
 
2097
#endif
 
2098
 
 
2099
#ifndef PNG_NO_ERROR_TEXT
 
2100
/* Fatal error in PNG image of libpng - can't continue */
 
2101
PNG_EXPORT(void,png_error) PNGARG((png_structp png_ptr,
 
2102
   png_const_charp error_message)) PNG_NORETURN;
 
2103
 
 
2104
/* The same, but the chunk name is prepended to the error string. */
 
2105
PNG_EXPORT(void,png_chunk_error) PNGARG((png_structp png_ptr,
 
2106
   png_const_charp error_message)) PNG_NORETURN;
 
2107
 
 
2108
#else
 
2109
/* Fatal error in PNG image of libpng - can't continue */
 
2110
PNG_EXPORT(void,png_err) PNGARG((png_structp png_ptr)) PNG_NORETURN;
 
2111
#endif
 
2112
 
 
2113
/* Non-fatal error in libpng.  Can continue, but may have a problem. */
 
2114
PNG_EXPORT(void,png_warning) PNGARG((png_structp png_ptr,
 
2115
   png_const_charp warning_message));
 
2116
 
 
2117
/* Non-fatal error in libpng, chunk name is prepended to message. */
 
2118
PNG_EXPORT(void,png_chunk_warning) PNGARG((png_structp png_ptr,
 
2119
   png_const_charp warning_message));
 
2120
 
 
2121
#ifdef PNG_BENIGN_ERRORS_SUPPORTED
 
2122
/* Benign error in libpng.  Can continue, but may have a problem.
 
2123
 * User can choose whether to handle as a fatal error or as a warning. */
 
2124
PNG_EXPORT(void,png_benign_error) PNGARG((png_structp png_ptr,
 
2125
   png_const_charp warning_message));
 
2126
 
 
2127
/* Same, chunk name is prepended to message. */
 
2128
PNG_EXPORT(void,png_chunk_benign_error) PNGARG((png_structp png_ptr,
 
2129
   png_const_charp warning_message));
 
2130
 
 
2131
PNG_EXPORT(void,png_set_benign_errors) PNGARG((png_structp
 
2132
   png_ptr, int allowed));
 
2133
#endif
 
2134
 
 
2135
/* The png_set_<chunk> functions are for storing values in the png_info_struct.
 
2136
 * Similarly, the png_get_<chunk> calls are used to read values from the
 
2137
 * png_info_struct, either storing the parameters in the passed variables, or
 
2138
 * setting pointers into the png_info_struct where the data is stored.  The
 
2139
 * png_get_<chunk> functions return a non-zero value if the data was available
 
2140
 * in info_ptr, or return zero and do not change any of the parameters if the
 
2141
 * data was not available.
 
2142
 *
 
2143
 * These functions should be used instead of directly accessing png_info
 
2144
 * to avoid problems with future changes in the size and internal layout of
 
2145
 * png_info_struct.
 
2146
 */
 
2147
/* Returns "flag" if chunk data is valid in info_ptr. */
 
2148
PNG_EXPORT(png_uint_32,png_get_valid) PNGARG((png_structp png_ptr,
 
2149
png_infop info_ptr, png_uint_32 flag));
 
2150
 
 
2151
/* Returns number of bytes needed to hold a transformed row. */
 
2152
PNG_EXPORT(png_size_t,png_get_rowbytes) PNGARG((png_structp png_ptr,
 
2153
png_infop info_ptr));
 
2154
 
 
2155
#ifdef PNG_INFO_IMAGE_SUPPORTED
 
2156
/* Returns row_pointers, which is an array of pointers to scanlines that was
 
2157
 * returned from png_read_png().
 
2158
 */
 
2159
PNG_EXPORT(png_bytepp,png_get_rows) PNGARG((png_structp png_ptr,
 
2160
png_infop info_ptr));
 
2161
/* Set row_pointers, which is an array of pointers to scanlines for use
 
2162
 * by png_write_png().
 
2163
 */
 
2164
PNG_EXPORT(void,png_set_rows) PNGARG((png_structp png_ptr,
 
2165
   png_infop info_ptr, png_bytepp row_pointers));
 
2166
#endif
 
2167
 
 
2168
/* Returns number of color channels in image. */
 
2169
PNG_EXPORT(png_byte,png_get_channels) PNGARG((png_structp png_ptr,
 
2170
png_infop info_ptr));
 
2171
 
 
2172
#ifdef PNG_EASY_ACCESS_SUPPORTED
 
2173
/* Returns image width in pixels. */
 
2174
PNG_EXPORT(png_uint_32, png_get_image_width) PNGARG((png_structp
 
2175
png_ptr, png_infop info_ptr));
 
2176
 
 
2177
/* Returns image height in pixels. */
 
2178
PNG_EXPORT(png_uint_32, png_get_image_height) PNGARG((png_structp
 
2179
png_ptr, png_infop info_ptr));
 
2180
 
 
2181
/* Returns image bit_depth. */
 
2182
PNG_EXPORT(png_byte, png_get_bit_depth) PNGARG((png_structp
 
2183
png_ptr, png_infop info_ptr));
 
2184
 
 
2185
/* Returns image color_type. */
 
2186
PNG_EXPORT(png_byte, png_get_color_type) PNGARG((png_structp
 
2187
png_ptr, png_infop info_ptr));
 
2188
 
 
2189
/* Returns image filter_type. */
 
2190
PNG_EXPORT(png_byte, png_get_filter_type) PNGARG((png_structp
 
2191
png_ptr, png_infop info_ptr));
 
2192
 
 
2193
/* Returns image interlace_type. */
 
2194
PNG_EXPORT(png_byte, png_get_interlace_type) PNGARG((png_structp
 
2195
png_ptr, png_infop info_ptr));
 
2196
 
 
2197
/* Returns image compression_type. */
 
2198
PNG_EXPORT(png_byte, png_get_compression_type) PNGARG((png_structp
 
2199
png_ptr, png_infop info_ptr));
 
2200
 
 
2201
/* Returns image resolution in pixels per meter, from pHYs chunk data. */
 
2202
PNG_EXPORT(png_uint_32, png_get_pixels_per_meter) PNGARG((png_structp
 
2203
png_ptr, png_infop info_ptr));
 
2204
PNG_EXPORT(png_uint_32, png_get_x_pixels_per_meter) PNGARG((png_structp
 
2205
png_ptr, png_infop info_ptr));
 
2206
PNG_EXPORT(png_uint_32, png_get_y_pixels_per_meter) PNGARG((png_structp
 
2207
png_ptr, png_infop info_ptr));
 
2208
 
 
2209
/* Returns pixel aspect ratio, computed from pHYs chunk data.  */
 
2210
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
2211
PNG_EXPORT(float, png_get_pixel_aspect_ratio) PNGARG((png_structp
 
2212
png_ptr, png_infop info_ptr));
 
2213
#endif
 
2214
 
 
2215
/* Returns image x, y offset in pixels or microns, from oFFs chunk data. */
 
2216
PNG_EXPORT(png_int_32, png_get_x_offset_pixels) PNGARG((png_structp
 
2217
png_ptr, png_infop info_ptr));
 
2218
PNG_EXPORT(png_int_32, png_get_y_offset_pixels) PNGARG((png_structp
 
2219
png_ptr, png_infop info_ptr));
 
2220
PNG_EXPORT(png_int_32, png_get_x_offset_microns) PNGARG((png_structp
 
2221
png_ptr, png_infop info_ptr));
 
2222
PNG_EXPORT(png_int_32, png_get_y_offset_microns) PNGARG((png_structp
 
2223
png_ptr, png_infop info_ptr));
 
2224
 
 
2225
#endif /* PNG_EASY_ACCESS_SUPPORTED */
 
2226
 
 
2227
/* Returns pointer to signature string read from PNG header */
 
2228
PNG_EXPORT(png_bytep,png_get_signature) PNGARG((png_structp png_ptr,
 
2229
png_infop info_ptr));
 
2230
 
 
2231
#ifdef PNG_bKGD_SUPPORTED
 
2232
PNG_EXPORT(png_uint_32,png_get_bKGD) PNGARG((png_structp png_ptr,
 
2233
   png_infop info_ptr, png_color_16p *background));
 
2234
#endif
 
2235
 
 
2236
#ifdef PNG_bKGD_SUPPORTED
 
2237
PNG_EXPORT(void,png_set_bKGD) PNGARG((png_structp png_ptr,
 
2238
   png_infop info_ptr, png_color_16p background));
 
2239
#endif
 
2240
 
 
2241
#ifdef PNG_cHRM_SUPPORTED
 
2242
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
2243
PNG_EXPORT(png_uint_32,png_get_cHRM) PNGARG((png_structp png_ptr,
 
2244
   png_infop info_ptr, double *white_x, double *white_y, double *red_x,
 
2245
   double *red_y, double *green_x, double *green_y, double *blue_x,
 
2246
   double *blue_y));
 
2247
#endif
 
2248
#ifdef PNG_FIXED_POINT_SUPPORTED
 
2249
PNG_EXPORT(png_uint_32,png_get_cHRM_fixed) PNGARG((png_structp png_ptr,
 
2250
   png_infop info_ptr, png_fixed_point *int_white_x, png_fixed_point
 
2251
   *int_white_y, png_fixed_point *int_red_x, png_fixed_point *int_red_y,
 
2252
   png_fixed_point *int_green_x, png_fixed_point *int_green_y, png_fixed_point
 
2253
   *int_blue_x, png_fixed_point *int_blue_y));
 
2254
#endif
 
2255
#endif
 
2256
 
 
2257
#ifdef PNG_cHRM_SUPPORTED
 
2258
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
2259
PNG_EXPORT(void,png_set_cHRM) PNGARG((png_structp png_ptr,
 
2260
   png_infop info_ptr, double white_x, double white_y, double red_x,
 
2261
   double red_y, double green_x, double green_y, double blue_x, double blue_y));
 
2262
#endif
 
2263
#ifdef PNG_FIXED_POINT_SUPPORTED
 
2264
PNG_EXPORT(void,png_set_cHRM_fixed) PNGARG((png_structp png_ptr,
 
2265
   png_infop info_ptr, png_fixed_point int_white_x, png_fixed_point int_white_y,
 
2266
   png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point
 
2267
   int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x,
 
2268
   png_fixed_point int_blue_y));
 
2269
#endif
 
2270
#endif
 
2271
 
 
2272
#ifdef PNG_gAMA_SUPPORTED
 
2273
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
2274
PNG_EXPORT(png_uint_32,png_get_gAMA) PNGARG((png_structp png_ptr,
 
2275
   png_infop info_ptr, double *file_gamma));
 
2276
#endif
 
2277
PNG_EXPORT(png_uint_32,png_get_gAMA_fixed) PNGARG((png_structp png_ptr,
 
2278
   png_infop info_ptr, png_fixed_point *int_file_gamma));
 
2279
#endif
 
2280
 
 
2281
#ifdef PNG_gAMA_SUPPORTED
 
2282
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
2283
PNG_EXPORT(void,png_set_gAMA) PNGARG((png_structp png_ptr,
 
2284
   png_infop info_ptr, double file_gamma));
 
2285
#endif
 
2286
PNG_EXPORT(void,png_set_gAMA_fixed) PNGARG((png_structp png_ptr,
 
2287
   png_infop info_ptr, png_fixed_point int_file_gamma));
 
2288
#endif
 
2289
 
 
2290
#ifdef PNG_hIST_SUPPORTED
 
2291
PNG_EXPORT(png_uint_32,png_get_hIST) PNGARG((png_structp png_ptr,
 
2292
   png_infop info_ptr, png_uint_16p *hist));
 
2293
#endif
 
2294
 
 
2295
#ifdef PNG_hIST_SUPPORTED
 
2296
PNG_EXPORT(void,png_set_hIST) PNGARG((png_structp png_ptr,
 
2297
   png_infop info_ptr, png_uint_16p hist));
 
2298
#endif
 
2299
 
 
2300
PNG_EXPORT(png_uint_32,png_get_IHDR) PNGARG((png_structp png_ptr,
 
2301
   png_infop info_ptr, png_uint_32 *width, png_uint_32 *height,
 
2302
   int *bit_depth, int *color_type, int *interlace_method,
 
2303
   int *compression_method, int *filter_method));
 
2304
 
 
2305
PNG_EXPORT(void,png_set_IHDR) PNGARG((png_structp png_ptr,
 
2306
   png_infop info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth,
 
2307
   int color_type, int interlace_method, int compression_method,
 
2308
   int filter_method));
 
2309
 
 
2310
#ifdef PNG_oFFs_SUPPORTED
 
2311
PNG_EXPORT(png_uint_32,png_get_oFFs) PNGARG((png_structp png_ptr,
 
2312
   png_infop info_ptr, png_int_32 *offset_x, png_int_32 *offset_y,
 
2313
   int *unit_type));
 
2314
#endif
 
2315
 
 
2316
#ifdef PNG_oFFs_SUPPORTED
 
2317
PNG_EXPORT(void,png_set_oFFs) PNGARG((png_structp png_ptr,
 
2318
   png_infop info_ptr, png_int_32 offset_x, png_int_32 offset_y,
 
2319
   int unit_type));
 
2320
#endif
 
2321
 
 
2322
#ifdef PNG_pCAL_SUPPORTED
 
2323
PNG_EXPORT(png_uint_32,png_get_pCAL) PNGARG((png_structp png_ptr,
 
2324
   png_infop info_ptr, png_charp *purpose, png_int_32 *X0, png_int_32 *X1,
 
2325
   int *type, int *nparams, png_charp *units, png_charpp *params));
 
2326
#endif
 
2327
 
 
2328
#ifdef PNG_pCAL_SUPPORTED
 
2329
PNG_EXPORT(void,png_set_pCAL) PNGARG((png_structp png_ptr,
 
2330
   png_infop info_ptr, png_charp purpose, png_int_32 X0, png_int_32 X1,
 
2331
   int type, int nparams, png_charp units, png_charpp params));
 
2332
#endif
 
2333
 
 
2334
#ifdef PNG_pHYs_SUPPORTED
 
2335
PNG_EXPORT(png_uint_32,png_get_pHYs) PNGARG((png_structp png_ptr,
 
2336
   png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type));
 
2337
#endif
 
2338
 
 
2339
#ifdef PNG_pHYs_SUPPORTED
 
2340
PNG_EXPORT(void,png_set_pHYs) PNGARG((png_structp png_ptr,
 
2341
   png_infop info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type));
 
2342
#endif
 
2343
 
 
2344
PNG_EXPORT(png_uint_32,png_get_PLTE) PNGARG((png_structp png_ptr,
 
2345
   png_infop info_ptr, png_colorp *palette, int *num_palette));
 
2346
 
 
2347
PNG_EXPORT(void,png_set_PLTE) PNGARG((png_structp png_ptr,
 
2348
   png_infop info_ptr, png_colorp palette, int num_palette));
 
2349
 
 
2350
#ifdef PNG_sBIT_SUPPORTED
 
2351
PNG_EXPORT(png_uint_32,png_get_sBIT) PNGARG((png_structp png_ptr,
 
2352
   png_infop info_ptr, png_color_8p *sig_bit));
 
2353
#endif
 
2354
 
 
2355
#ifdef PNG_sBIT_SUPPORTED
 
2356
PNG_EXPORT(void,png_set_sBIT) PNGARG((png_structp png_ptr,
 
2357
   png_infop info_ptr, png_color_8p sig_bit));
 
2358
#endif
 
2359
 
 
2360
#ifdef PNG_sRGB_SUPPORTED
 
2361
PNG_EXPORT(png_uint_32,png_get_sRGB) PNGARG((png_structp png_ptr,
 
2362
   png_infop info_ptr, int *intent));
 
2363
#endif
 
2364
 
 
2365
#ifdef PNG_sRGB_SUPPORTED
 
2366
PNG_EXPORT(void,png_set_sRGB) PNGARG((png_structp png_ptr,
 
2367
   png_infop info_ptr, int intent));
 
2368
PNG_EXPORT(void,png_set_sRGB_gAMA_and_cHRM) PNGARG((png_structp png_ptr,
 
2369
   png_infop info_ptr, int intent));
 
2370
#endif
 
2371
 
 
2372
#ifdef PNG_iCCP_SUPPORTED
 
2373
PNG_EXPORT(png_uint_32,png_get_iCCP) PNGARG((png_structp png_ptr,
 
2374
   png_infop info_ptr, png_charpp name, int *compression_type,
 
2375
   png_charpp profile, png_uint_32 *proflen));
 
2376
   /* Note to maintainer: profile should be png_bytepp */
 
2377
#endif
 
2378
 
 
2379
#ifdef PNG_iCCP_SUPPORTED
 
2380
PNG_EXPORT(void,png_set_iCCP) PNGARG((png_structp png_ptr,
 
2381
   png_infop info_ptr, png_charp name, int compression_type,
 
2382
   png_charp profile, png_uint_32 proflen));
 
2383
   /* Note to maintainer: profile should be png_bytep */
 
2384
#endif
 
2385
 
 
2386
#ifdef PNG_sPLT_SUPPORTED
 
2387
PNG_EXPORT(png_uint_32,png_get_sPLT) PNGARG((png_structp png_ptr,
 
2388
   png_infop info_ptr, png_sPLT_tpp entries));
 
2389
#endif
 
2390
 
 
2391
#ifdef PNG_sPLT_SUPPORTED
 
2392
PNG_EXPORT(void,png_set_sPLT) PNGARG((png_structp png_ptr,
 
2393
   png_infop info_ptr, png_sPLT_tp entries, int nentries));
 
2394
#endif
 
2395
 
 
2396
#ifdef PNG_TEXT_SUPPORTED
 
2397
/* png_get_text also returns the number of text chunks in *num_text */
 
2398
PNG_EXPORT(png_uint_32,png_get_text) PNGARG((png_structp png_ptr,
 
2399
   png_infop info_ptr, png_textp *text_ptr, int *num_text));
 
2400
#endif
 
2401
 
 
2402
/* Note while png_set_text() will accept a structure whose text,
 
2403
 * language, and  translated keywords are NULL pointers, the structure
 
2404
 * returned by png_get_text will always contain regular
 
2405
 * zero-terminated C strings.  They might be empty strings but
 
2406
 * they will never be NULL pointers.
 
2407
 */
 
2408
 
 
2409
#ifdef PNG_TEXT_SUPPORTED
 
2410
PNG_EXPORT(void,png_set_text) PNGARG((png_structp png_ptr,
 
2411
   png_infop info_ptr, png_textp text_ptr, int num_text));
 
2412
#endif
 
2413
 
 
2414
#ifdef PNG_tIME_SUPPORTED
 
2415
PNG_EXPORT(png_uint_32,png_get_tIME) PNGARG((png_structp png_ptr,
 
2416
   png_infop info_ptr, png_timep *mod_time));
 
2417
#endif
 
2418
 
 
2419
#ifdef PNG_tIME_SUPPORTED
 
2420
PNG_EXPORT(void,png_set_tIME) PNGARG((png_structp png_ptr,
 
2421
   png_infop info_ptr, png_timep mod_time));
 
2422
#endif
 
2423
 
 
2424
#ifdef PNG_tRNS_SUPPORTED
 
2425
PNG_EXPORT(png_uint_32,png_get_tRNS) PNGARG((png_structp png_ptr,
 
2426
   png_infop info_ptr, png_bytep *trans_alpha, int *num_trans,
 
2427
   png_color_16p *trans_color));
 
2428
#endif
 
2429
 
 
2430
#ifdef PNG_tRNS_SUPPORTED
 
2431
PNG_EXPORT(void,png_set_tRNS) PNGARG((png_structp png_ptr,
 
2432
   png_infop info_ptr, png_bytep trans_alpha, int num_trans,
 
2433
   png_color_16p trans_color));
 
2434
#endif
 
2435
 
 
2436
#ifdef PNG_tRNS_SUPPORTED
 
2437
#endif
 
2438
 
 
2439
#ifdef PNG_sCAL_SUPPORTED
 
2440
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
2441
PNG_EXPORT(png_uint_32,png_get_sCAL) PNGARG((png_structp png_ptr,
 
2442
   png_infop info_ptr, int *unit, double *width, double *height));
 
2443
#else
 
2444
#ifdef PNG_FIXED_POINT_SUPPORTED
 
2445
PNG_EXPORT(png_uint_32,png_get_sCAL_s) PNGARG((png_structp png_ptr,
 
2446
   png_infop info_ptr, int *unit, png_charpp swidth, png_charpp sheight));
 
2447
#endif
 
2448
#endif
 
2449
#endif /* PNG_sCAL_SUPPORTED */
 
2450
 
 
2451
#ifdef PNG_sCAL_SUPPORTED
 
2452
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
2453
PNG_EXPORT(void,png_set_sCAL) PNGARG((png_structp png_ptr,
 
2454
   png_infop info_ptr, int unit, double width, double height));
 
2455
#else
 
2456
#ifdef PNG_FIXED_POINT_SUPPORTED
 
2457
PNG_EXPORT(void,png_set_sCAL_s) PNGARG((png_structp png_ptr,
 
2458
   png_infop info_ptr, int unit, png_charp swidth, png_charp sheight));
 
2459
#endif
 
2460
#endif
 
2461
#endif /* PNG_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */
 
2462
 
 
2463
#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
 
2464
/* Provide a list of chunks and how they are to be handled, if the built-in
 
2465
   handling or default unknown chunk handling is not desired.  Any chunks not
 
2466
   listed will be handled in the default manner.  The IHDR and IEND chunks
 
2467
   must not be listed.
 
2468
      keep = 0: follow default behaviour
 
2469
           = 1: do not keep
 
2470
           = 2: keep only if safe-to-copy
 
2471
           = 3: keep even if unsafe-to-copy
 
2472
*/
 
2473
PNG_EXPORT(void, png_set_keep_unknown_chunks) PNGARG((png_structp
 
2474
   png_ptr, int keep, png_bytep chunk_list, int num_chunks));
 
2475
PNG_EXPORT(int,png_handle_as_unknown) PNGARG((png_structp png_ptr, png_bytep
 
2476
   chunk_name));
 
2477
#endif
 
2478
#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED
 
2479
PNG_EXPORT(void, png_set_unknown_chunks) PNGARG((png_structp png_ptr,
 
2480
   png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns));
 
2481
PNG_EXPORT(void, png_set_unknown_chunk_location)
 
2482
   PNGARG((png_structp png_ptr, png_infop info_ptr, int chunk, int location));
 
2483
PNG_EXPORT(png_uint_32,png_get_unknown_chunks) PNGARG((png_structp
 
2484
   png_ptr, png_infop info_ptr, png_unknown_chunkpp entries));
 
2485
#endif
 
2486
 
 
2487
/* Png_free_data() will turn off the "valid" flag for anything it frees.
 
2488
 * If you need to turn it off for a chunk that your application has freed,
 
2489
 * you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK);
 
2490
 */
 
2491
PNG_EXPORT(void, png_set_invalid) PNGARG((png_structp png_ptr,
 
2492
   png_infop info_ptr, int mask));
 
2493
 
 
2494
#ifdef PNG_INFO_IMAGE_SUPPORTED
 
2495
/* The "params" pointer is currently not used and is for future expansion. */
 
2496
PNG_EXPORT(void, png_read_png) PNGARG((png_structp png_ptr,
 
2497
                        png_infop info_ptr,
 
2498
                        int transforms,
 
2499
                        png_voidp params));
 
2500
PNG_EXPORT(void, png_write_png) PNGARG((png_structp png_ptr,
 
2501
                        png_infop info_ptr,
 
2502
                        int transforms,
 
2503
                        png_voidp params));
 
2504
#endif
 
2505
 
 
2506
PNG_EXPORT(png_charp,png_get_copyright) PNGARG((png_structp png_ptr));
 
2507
PNG_EXPORT(png_charp,png_get_header_ver) PNGARG((png_structp png_ptr));
 
2508
PNG_EXPORT(png_charp,png_get_header_version) PNGARG((png_structp
 
2509
    png_ptr));
 
2510
PNG_EXPORT(png_charp,png_get_libpng_ver) PNGARG((png_structp png_ptr));
 
2511
 
 
2512
#ifdef PNG_MNG_FEATURES_SUPPORTED
 
2513
PNG_EXPORT(png_uint_32,png_permit_mng_features) PNGARG((png_structp
 
2514
   png_ptr, png_uint_32 mng_features_permitted));
 
2515
#endif
 
2516
 
 
2517
/* For use in png_set_keep_unknown, added to version 1.2.6 */
 
2518
#define PNG_HANDLE_CHUNK_AS_DEFAULT   0
 
2519
#define PNG_HANDLE_CHUNK_NEVER        1
 
2520
#define PNG_HANDLE_CHUNK_IF_SAFE      2
 
2521
#define PNG_HANDLE_CHUNK_ALWAYS       3
 
2522
 
 
2523
/* Strip the prepended error numbers ("#nnn ") from error and warning
 
2524
 * messages before passing them to the error or warning handler.
 
2525
 */
 
2526
#ifdef PNG_ERROR_NUMBERS_SUPPORTED
 
2527
PNG_EXPORT(void,png_set_strip_error_numbers) PNGARG((png_structp
 
2528
   png_ptr, png_uint_32 strip_mode));
 
2529
#endif
 
2530
 
 
2531
/* Added in libpng-1.2.6 */
 
2532
#ifdef PNG_SET_USER_LIMITS_SUPPORTED
 
2533
PNG_EXPORT(void,png_set_user_limits) PNGARG((png_structp
 
2534
   png_ptr, png_uint_32 user_width_max, png_uint_32 user_height_max));
 
2535
PNG_EXPORT(png_uint_32,png_get_user_width_max) PNGARG((png_structp
 
2536
   png_ptr));
 
2537
PNG_EXPORT(png_uint_32,png_get_user_height_max) PNGARG((png_structp
 
2538
   png_ptr));
 
2539
/* Added in libpng-1.4.0 */
 
2540
PNG_EXPORT(void,png_set_chunk_cache_max) PNGARG((png_structp
 
2541
   png_ptr, png_uint_32 user_chunk_cache_max));
 
2542
PNG_EXPORT(png_uint_32,png_get_chunk_cache_max)
 
2543
   PNGARG((png_structp png_ptr));
 
2544
/* Added in libpng-1.4.1 */
 
2545
PNG_EXPORT(void,png_set_chunk_malloc_max) PNGARG((png_structp
 
2546
   png_ptr, png_alloc_size_t user_chunk_cache_max));
 
2547
PNG_EXPORT(png_alloc_size_t,png_get_chunk_malloc_max)
 
2548
   PNGARG((png_structp png_ptr));
 
2549
#endif
 
2550
 
 
2551
#if defined(PNG_INCH_CONVERSIONS) && defined(PNG_FLOATING_POINT_SUPPORTED)
 
2552
PNG_EXPORT(png_uint_32,png_get_pixels_per_inch) PNGARG((png_structp png_ptr,
 
2553
png_infop info_ptr));
 
2554
 
 
2555
PNG_EXPORT(png_uint_32,png_get_x_pixels_per_inch) PNGARG((png_structp png_ptr,
 
2556
png_infop info_ptr));
 
2557
 
 
2558
PNG_EXPORT(png_uint_32,png_get_y_pixels_per_inch) PNGARG((png_structp png_ptr,
 
2559
png_infop info_ptr));
 
2560
 
 
2561
PNG_EXPORT(float,png_get_x_offset_inches) PNGARG((png_structp png_ptr,
 
2562
png_infop info_ptr));
 
2563
 
 
2564
PNG_EXPORT(float,png_get_y_offset_inches) PNGARG((png_structp png_ptr,
 
2565
png_infop info_ptr));
 
2566
 
 
2567
#ifdef PNG_pHYs_SUPPORTED
 
2568
PNG_EXPORT(png_uint_32,png_get_pHYs_dpi) PNGARG((png_structp png_ptr,
 
2569
png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type));
 
2570
#endif /* PNG_pHYs_SUPPORTED */
 
2571
#endif  /* PNG_INCH_CONVERSIONS && PNG_FLOATING_POINT_SUPPORTED */
 
2572
 
 
2573
/* Added in libpng-1.4.0 */
 
2574
#ifdef PNG_IO_STATE_SUPPORTED
 
2575
PNG_EXPORT(png_uint_32,png_get_io_state) PNGARG((png_structp png_ptr));
 
2576
 
 
2577
PNG_EXPORT(png_bytep,png_get_io_chunk_name)
 
2578
   PNGARG((png_structp png_ptr));
 
2579
 
 
2580
/* The flags returned by png_get_io_state() are the following: */
 
2581
#define PNG_IO_NONE        0x0000   /* no I/O at this moment */
 
2582
#define PNG_IO_READING     0x0001   /* currently reading */
 
2583
#define PNG_IO_WRITING     0x0002   /* currently writing */
 
2584
#define PNG_IO_SIGNATURE   0x0010   /* currently at the file signature */
 
2585
#define PNG_IO_CHUNK_HDR   0x0020   /* currently at the chunk header */
 
2586
#define PNG_IO_CHUNK_DATA  0x0040   /* currently at the chunk data */
 
2587
#define PNG_IO_CHUNK_CRC   0x0080   /* currently at the chunk crc */
 
2588
#define PNG_IO_MASK_OP     0x000f   /* current operation: reading/writing */
 
2589
#define PNG_IO_MASK_LOC    0x00f0   /* current location: sig/hdr/data/crc */
 
2590
#endif /* ?PNG_IO_STATE_SUPPORTED */
 
2591
 
 
2592
/* Maintainer: Put new public prototypes here ^, in libpng.3, and project
 
2593
 * defs
 
2594
 */
 
2595
 
 
2596
#ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED
 
2597
/* With these routines we avoid an integer divide, which will be slower on
 
2598
 * most machines.  However, it does take more operations than the corresponding
 
2599
 * divide method, so it may be slower on a few RISC systems.  There are two
 
2600
 * shifts (by 8 or 16 bits) and an addition, versus a single integer divide.
 
2601
 *
 
2602
 * Note that the rounding factors are NOT supposed to be the same!  128 and
 
2603
 * 32768 are correct for the NODIV code; 127 and 32767 are correct for the
 
2604
 * standard method.
 
2605
 *
 
2606
 * [Optimized code by Greg Roelofs and Mark Adler...blame us for bugs. :-) ]
 
2607
 */
 
2608
 
 
2609
 /* fg and bg should be in `gamma 1.0' space; alpha is the opacity          */
 
2610
 
 
2611
#  define png_composite(composite, fg, alpha, bg)         \
 
2612
     { png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) \
 
2613
           * (png_uint_16)(alpha)                         \
 
2614
           + (png_uint_16)(bg)*(png_uint_16)(255          \
 
2615
           - (png_uint_16)(alpha)) + (png_uint_16)128);   \
 
2616
       (composite) = (png_byte)((temp + (temp >> 8)) >> 8); }
 
2617
 
 
2618
#  define png_composite_16(composite, fg, alpha, bg)       \
 
2619
     { png_uint_32 temp = (png_uint_32)((png_uint_32)(fg)  \
 
2620
           * (png_uint_32)(alpha)                          \
 
2621
           + (png_uint_32)(bg)*(png_uint_32)(65535L        \
 
2622
           - (png_uint_32)(alpha)) + (png_uint_32)32768L); \
 
2623
       (composite) = (png_uint_16)((temp + (temp >> 16)) >> 16); }
 
2624
 
 
2625
#else  /* Standard method using integer division */
 
2626
 
 
2627
#  define png_composite(composite, fg, alpha, bg)                            \
 
2628
     (composite) = (png_byte)(((png_uint_16)(fg) * (png_uint_16)(alpha) +    \
 
2629
       (png_uint_16)(bg) * (png_uint_16)(255 - (png_uint_16)(alpha)) +       \
 
2630
       (png_uint_16)127) / 255)
 
2631
 
 
2632
#  define png_composite_16(composite, fg, alpha, bg)                         \
 
2633
     (composite) = (png_uint_16)(((png_uint_32)(fg) * (png_uint_32)(alpha) + \
 
2634
       (png_uint_32)(bg)*(png_uint_32)(65535L - (png_uint_32)(alpha)) +      \
 
2635
       (png_uint_32)32767) / (png_uint_32)65535L)
 
2636
#endif /* PNG_READ_COMPOSITE_NODIV_SUPPORTED */
 
2637
 
 
2638
#ifdef PNG_USE_READ_MACROS
 
2639
/* Inline macros to do direct reads of bytes from the input buffer.
 
2640
 * The png_get_int_32() routine assumes we are using two's complement
 
2641
 * format for negative values, which is almost certainly true.
 
2642
 */
 
2643
#  define png_get_uint_32(buf) \
 
2644
     (((png_uint_32)(*(buf)) << 24) + \
 
2645
      ((png_uint_32)(*((buf) + 1)) << 16) + \
 
2646
      ((png_uint_32)(*((buf) + 2)) << 8) + \
 
2647
      ((png_uint_32)(*((buf) + 3))))
 
2648
#  define png_get_uint_16(buf) \
 
2649
     (((png_uint_32)(*(buf)) << 8) + \
 
2650
      ((png_uint_32)(*((buf) + 1))))
 
2651
#  define png_get_int_32(buf) \
 
2652
     ((png_int_32)((*(buf) & 0x80) \
 
2653
      ? -((png_int_32)((png_get_uint_32(buf) ^ 0xffffffff)+1)) \
 
2654
      : (png_int_32)png_get_uint_32(buf)))
 
2655
#else
 
2656
PNG_EXPORT(png_uint_32,png_get_uint_32) PNGARG((png_bytep buf));
 
2657
PNG_EXPORT(png_uint_16,png_get_uint_16) PNGARG((png_bytep buf));
 
2658
#ifdef PNG_GET_INT_32_SUPPORTED
 
2659
PNG_EXPORT(png_int_32,png_get_int_32) PNGARG((png_bytep buf));
 
2660
#endif
 
2661
#endif
 
2662
PNG_EXPORT(png_uint_32,png_get_uint_31)
 
2663
  PNGARG((png_structp png_ptr, png_bytep buf));
 
2664
/* No png_get_int_16 -- may be added if there's a real need for it. */
 
2665
 
 
2666
/* Place a 32-bit number into a buffer in PNG byte order (big-endian). */
 
2667
PNG_EXPORT(void,png_save_uint_32)
 
2668
   PNGARG((png_bytep buf, png_uint_32 i));
 
2669
PNG_EXPORT(void,png_save_int_32)
 
2670
   PNGARG((png_bytep buf, png_int_32 i));
 
2671
 
 
2672
/* Place a 16-bit number into a buffer in PNG byte order.
 
2673
 * The parameter is declared unsigned int, not png_uint_16,
 
2674
 * just to avoid potential problems on pre-ANSI C compilers.
 
2675
 */
 
2676
PNG_EXPORT(void,png_save_uint_16)
 
2677
   PNGARG((png_bytep buf, unsigned int i));
 
2678
/* No png_save_int_16 -- may be added if there's a real need for it. */
 
2679
 
 
2680
/* ************************************************************************* */
 
2681
 
 
2682
/* Various modes of operation.  Note that after an init, mode is set to
 
2683
 * zero automatically when the structure is created.
 
2684
 */
 
2685
#define PNG_HAVE_IHDR               0x01
 
2686
#define PNG_HAVE_PLTE               0x02
 
2687
#define PNG_HAVE_IDAT               0x04
 
2688
#define PNG_AFTER_IDAT              0x08 /* Have complete zlib datastream */
 
2689
#define PNG_HAVE_IEND               0x10
 
2690
#define PNG_HAVE_gAMA               0x20
 
2691
#define PNG_HAVE_cHRM               0x40
 
2692
 
 
2693
#ifdef __cplusplus
 
2694
}
 
2695
#endif
 
2696
 
 
2697
#endif /* PNG_VERSION_INFO_ONLY */
 
2698
/* Do not put anything past this line */
 
2699
#endif /* PNG_H */