~oif-team/ubuntu/natty/qt4-x11/xi2.1

« back to all changes in this revision

Viewing changes to src/3rdparty/libpng/png.h

  • Committer: Bazaar Package Importer
  • Author(s): Adam Conrad
  • Date: 2005-08-24 04:09:09 UTC
  • Revision ID: james.westby@ubuntu.com-20050824040909-xmxe9jfr4a0w5671
Tags: upstream-4.0.0
ImportĀ upstreamĀ versionĀ 4.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* png.h - header file for PNG reference library
 
2
 *
 
3
 * libpng version 1.2.8 - December 3, 2004
 
4
 * Copyright (c) 1998-2004 Glenn Randers-Pehrson
 
5
 * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
 
6
 * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
 
7
 *
 
8
 * Authors and maintainers:
 
9
 *  libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
 
10
 *  libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger
 
11
 *  libpng versions 0.97, January 1998, through 1.2.8 - December 3, 2004: Glenn
 
12
 *  See also "Contributing Authors", below.
 
13
 *
 
14
 * Note about libpng version numbers:
 
15
 *
 
16
 *    Due to various miscommunications, unforeseen code incompatibilities
 
17
 *    and occasional factors outside the authors' control, version numbering
 
18
 *    on the library has not always been consistent and straightforward.
 
19
 *    The following table summarizes matters since version 0.89c, which was
 
20
 *    the first widely used release:
 
21
 *
 
22
 *    source                 png.h  png.h  shared-lib
 
23
 *    version                string   int  version
 
24
 *    -------                ------ -----  ----------
 
25
 *    0.89c "1.0 beta 3"     0.89      89  1.0.89
 
26
 *    0.90  "1.0 beta 4"     0.90      90  0.90  [should have been 2.0.90]
 
27
 *    0.95  "1.0 beta 5"     0.95      95  0.95  [should have been 2.0.95]
 
28
 *    0.96  "1.0 beta 6"     0.96      96  0.96  [should have been 2.0.96]
 
29
 *    0.97b "1.00.97 beta 7" 1.00.97   97  1.0.1 [should have been 2.0.97]
 
30
 *    0.97c                  0.97      97  2.0.97
 
31
 *    0.98                   0.98      98  2.0.98
 
32
 *    0.99                   0.99      98  2.0.99
 
33
 *    0.99a-m                0.99      99  2.0.99
 
34
 *    1.00                   1.00     100  2.1.0 [100 should be 10000]
 
35
 *    1.0.0      (from here on, the   100  2.1.0 [100 should be 10000]
 
36
 *    1.0.1       png.h string is   10001  2.1.0
 
37
 *    1.0.1a-e    identical to the  10002  from here on, the shared library
 
38
 *    1.0.2       source version)   10002  is 2.V where V is the source code
 
39
 *    1.0.2a-b                      10003  version, except as noted.
 
40
 *    1.0.3                         10003
 
41
 *    1.0.3a-d                      10004
 
42
 *    1.0.4                         10004
 
43
 *    1.0.4a-f                      10005
 
44
 *    1.0.5 (+ 2 patches)           10005
 
45
 *    1.0.5a-d                      10006
 
46
 *    1.0.5e-r                      10100 (not source compatible)
 
47
 *    1.0.5s-v                      10006 (not binary compatible)
 
48
 *    1.0.6 (+ 3 patches)           10006 (still binary incompatible)
 
49
 *    1.0.6d-f                      10007 (still binary incompatible)
 
50
 *    1.0.6g                        10007
 
51
 *    1.0.6h                        10007  10.6h (testing xy.z so-numbering)
 
52
 *    1.0.6i                        10007  10.6i
 
53
 *    1.0.6j                        10007  2.1.0.6j (incompatible with 1.0.0)
 
54
 *    1.0.7beta11-14        DLLNUM  10007  2.1.0.7beta11-14 (binary compatible)
 
55
 *    1.0.7beta15-18           1    10007  2.1.0.7beta15-18 (binary compatible)
 
56
 *    1.0.7rc1-2               1    10007  2.1.0.7rc1-2 (binary compatible)
 
57
 *    1.0.7                    1    10007  (still compatible)
 
58
 *    1.0.8beta1-4             1    10008  2.1.0.8beta1-4
 
59
 *    1.0.8rc1                 1    10008  2.1.0.8rc1
 
60
 *    1.0.8                    1    10008  2.1.0.8
 
61
 *    1.0.9beta1-6             1    10009  2.1.0.9beta1-6
 
62
 *    1.0.9rc1                 1    10009  2.1.0.9rc1
 
63
 *    1.0.9beta7-10            1    10009  2.1.0.9beta7-10
 
64
 *    1.0.9rc2                 1    10009  2.1.0.9rc2
 
65
 *    1.0.9                    1    10009  2.1.0.9
 
66
 *    1.0.10beta1              1    10010  2.1.0.10beta1
 
67
 *    1.0.10rc1                1    10010  2.1.0.10rc1
 
68
 *    1.0.10                   1    10010  2.1.0.10
 
69
 *    1.0.11beta1-3            1    10011  2.1.0.11beta1-3
 
70
 *    1.0.11rc1                1    10011  2.1.0.11rc1
 
71
 *    1.0.11                   1    10011  2.1.0.11
 
72
 *    1.0.12beta1-2            2    10012  2.1.0.12beta1-2
 
73
 *    1.0.12rc1                2    10012  2.1.0.12rc1
 
74
 *    1.0.12                   2    10012  2.1.0.12
 
75
 *    1.1.0a-f                 -    10100  2.1.1.0a-f (branch abandoned)
 
76
 *    1.2.0beta1-2             2    10200  2.1.2.0beta1-2
 
77
 *    1.2.0beta3-5             3    10200  3.1.2.0beta3-5
 
78
 *    1.2.0rc1                 3    10200  3.1.2.0rc1
 
79
 *    1.2.0                    3    10200  3.1.2.0
 
80
 *    1.2.1beta1-4             3    10201  3.1.2.1beta1-4
 
81
 *    1.2.1rc1-2               3    10201  3.1.2.1rc1-2
 
82
 *    1.2.1                    3    10201  3.1.2.1
 
83
 *    1.2.2beta1-6            12    10202  12.so.0.1.2.2beta1-6
 
84
 *    1.0.13beta1             10    10013  10.so.0.1.0.13beta1
 
85
 *    1.0.13rc1               10    10013  10.so.0.1.0.13rc1
 
86
 *    1.2.2rc1                12    10202  12.so.0.1.2.2rc1
 
87
 *    1.0.13                  10    10013  10.so.0.1.0.13
 
88
 *    1.2.2                   12    10202  12.so.0.1.2.2
 
89
 *    1.2.3rc1-6              12    10203  12.so.0.1.2.3rc1-6
 
90
 *    1.2.3                   12    10203  12.so.0.1.2.3
 
91
 *    1.2.4beta1-3            13    10204  12.so.0.1.2.4beta1-3
 
92
 *    1.0.14rc1               13    10014  10.so.0.1.0.14rc1
 
93
 *    1.2.4rc1                13    10204  12.so.0.1.2.4rc1
 
94
 *    1.0.14                  10    10014  10.so.0.1.0.14
 
95
 *    1.2.4                   13    10204  12.so.0.1.2.4
 
96
 *    1.2.5beta1-2            13    10205  12.so.0.1.2.5beta1-2
 
97
 *    1.0.15rc1-3             10    10015  10.so.0.1.0.15rc1-3
 
98
 *    1.2.5rc1-3              13    10205  12.so.0.1.2.5rc1-3
 
99
 *    1.0.15                  10    10015  10.so.0.1.0.15
 
100
 *    1.2.5                   13    10205  12.so.0.1.2.5
 
101
 *    1.2.6beta1-4            13    10206  12.so.0.1.2.6beta1-4
 
102
 *    1.0.16                  10    10016  10.so.0.1.0.16
 
103
 *    1.2.6                   13    10206  12.so.0.1.2.6
 
104
 *    1.2.7beta1-2            13    10207  12.so.0.1.2.7beta1-2
 
105
 *    1.0.17rc1               10    10017  12.so.0.1.0.17rc1
 
106
 *    1.2.7rc1                13    10207  12.so.0.1.2.7rc1
 
107
 *    1.0.17                  10    10017  12.so.0.1.0.17
 
108
 *    1.2.7                   13    10207  12.so.0.1.2.7
 
109
 *    1.2.8beta1-5            13    10208  12.so.0.1.2.8beta1-5
 
110
 *    1.0.18rc1-5             10    10018  12.so.0.1.0.18rc1-5
 
111
 *    1.2.8rc1-5              13    10208  12.so.0.1.2.8rc1-5
 
112
 *    1.0.18                  10    10018  12.so.0.1.0.18
 
113
 *    1.2.8                   13    10208  12.so.0.1.2.8
 
114
 *
 
115
 *    Henceforth the source version will match the shared-library major
 
116
 *    and minor numbers; the shared-library major version number will be
 
117
 *    used for changes in backward compatibility, as it is intended.  The
 
118
 *    PNG_LIBPNG_VER macro, which is not used within libpng but is available
 
119
 *    for applications, is an unsigned integer of the form xyyzz corresponding
 
120
 *    to the source version x.y.z (leading zeros in y and z).  Beta versions
 
121
 *    were given the previous public release number plus a letter, until
 
122
 *    version 1.0.6j; from then on they were given the upcoming public
 
123
 *    release number plus "betaNN" or "rcN".
 
124
 *
 
125
 *    Binary incompatibility exists only when applications make direct access
 
126
 *    to the info_ptr or png_ptr members through png.h, and the compiled
 
127
 *    application is loaded with a different version of the library.
 
128
 *
 
129
 *    DLLNUM will change each time there are forward or backward changes
 
130
 *    in binary compatibility (e.g., when a new feature is added).
 
131
 *
 
132
 * See libpng.txt or libpng.3 for more information.  The PNG specification
 
133
 * is available as a W3C Recommendation and as an ISO Specification,
 
134
 * <http://www.w3.org/TR/2003/REC-PNG-20031110/
 
135
 */
 
136
 
 
137
/*
 
138
 * COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
 
139
 *
 
140
 * If you modify libpng you may insert additional notices immediately following
 
141
 * this sentence.
 
142
 *
 
143
 * libpng versions 1.2.6, August 15, 2004, through 1.2.8, December 3, 2004, are
 
144
 * Copyright (c) 2004 Glenn Randers-Pehrson, and are
 
145
 * distributed according to the same disclaimer and license as libpng-1.2.5
 
146
 * with the following individual added to the list of Contributing Authors:
 
147
 *
 
148
 *    Cosmin Truta
 
149
 *
 
150
 * libpng versions 1.0.7, July 1, 2000, through 1.2.5, October 3, 2002, are
 
151
 * Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
 
152
 * distributed according to the same disclaimer and license as libpng-1.0.6
 
153
 * with the following individuals added to the list of Contributing Authors:
 
154
 *
 
155
 *    Simon-Pierre Cadieux
 
156
 *    Eric S. Raymond
 
157
 *    Gilles Vollant
 
158
 *
 
159
 * and with the following additions to the disclaimer:
 
160
 *
 
161
 *    There is no warranty against interference with your enjoyment of the
 
162
 *    library or against infringement.  There is no warranty that our
 
163
 *    efforts or the library will fulfill any of your particular purposes
 
164
 *    or needs.  This library is provided with all faults, and the entire
 
165
 *    risk of satisfactory quality, performance, accuracy, and effort is with
 
166
 *    the user.
 
167
 *
 
168
 * libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
 
169
 * Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson, and are
 
170
 * distributed according to the same disclaimer and license as libpng-0.96,
 
171
 * with the following individuals added to the list of Contributing Authors:
 
172
 *
 
173
 *    Tom Lane
 
174
 *    Glenn Randers-Pehrson
 
175
 *    Willem van Schaik
 
176
 *
 
177
 * libpng versions 0.89, June 1996, through 0.96, May 1997, are
 
178
 * Copyright (c) 1996, 1997 Andreas Dilger
 
179
 * Distributed according to the same disclaimer and license as libpng-0.88,
 
180
 * with the following individuals added to the list of Contributing Authors:
 
181
 *
 
182
 *    John Bowler
 
183
 *    Kevin Bracey
 
184
 *    Sam Bushell
 
185
 *    Magnus Holmgren
 
186
 *    Greg Roelofs
 
187
 *    Tom Tanner
 
188
 *
 
189
 * libpng versions 0.5, May 1995, through 0.88, January 1996, are
 
190
 * Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
 
191
 *
 
192
 * For the purposes of this copyright and license, "Contributing Authors"
 
193
 * is defined as the following set of individuals:
 
194
 *
 
195
 *    Andreas Dilger
 
196
 *    Dave Martindale
 
197
 *    Guy Eric Schalnat
 
198
 *    Paul Schmidt
 
199
 *    Tim Wegner
 
200
 *
 
201
 * The PNG Reference Library is supplied "AS IS".  The Contributing Authors
 
202
 * and Group 42, Inc. disclaim all warranties, expressed or implied,
 
203
 * including, without limitation, the warranties of merchantability and of
 
204
 * fitness for any purpose.  The Contributing Authors and Group 42, Inc.
 
205
 * assume no liability for direct, indirect, incidental, special, exemplary,
 
206
 * or consequential damages, which may result from the use of the PNG
 
207
 * Reference Library, even if advised of the possibility of such damage.
 
208
 *
 
209
 * Permission is hereby granted to use, copy, modify, and distribute this
 
210
 * source code, or portions hereof, for any purpose, without fee, subject
 
211
 * to the following restrictions:
 
212
 *
 
213
 * 1. The origin of this source code must not be misrepresented.
 
214
 *
 
215
 * 2. Altered versions must be plainly marked as such and
 
216
 * must not be misrepresented as being the original source.
 
217
 *
 
218
 * 3. This Copyright notice may not be removed or altered from
 
219
 *    any source or altered source distribution.
 
220
 *
 
221
 * The Contributing Authors and Group 42, Inc. specifically permit, without
 
222
 * fee, and encourage the use of this source code as a component to
 
223
 * supporting the PNG file format in commercial products.  If you use this
 
224
 * source code in a product, acknowledgment is not required but would be
 
225
 * appreciated.
 
226
 */
 
227
 
 
228
/*
 
229
 * A "png_get_copyright" function is available, for convenient use in "about"
 
230
 * boxes and the like:
 
231
 *
 
232
 * printf("%s",png_get_copyright(NULL));
 
233
 *
 
234
 * Also, the PNG logo (in PNG format, of course) is supplied in the
 
235
 * files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
 
236
 */
 
237
 
 
238
/*
 
239
 * Libpng is OSI Certified Open Source Software.  OSI Certified is a
 
240
 * certification mark of the Open Source Initiative.
 
241
 */
 
242
 
 
243
/*
 
244
 * The contributing authors would like to thank all those who helped
 
245
 * with testing, bug fixes, and patience.  This wouldn't have been
 
246
 * possible without all of you.
 
247
 *
 
248
 * Thanks to Frank J. T. Wojcik for helping with the documentation.
 
249
 */
 
250
 
 
251
/*
 
252
 * Y2K compliance in libpng:
 
253
 * =========================
 
254
 *
 
255
 *    December 3, 2004
 
256
 *
 
257
 *    Since the PNG Development group is an ad-hoc body, we can't make
 
258
 *    an official declaration.
 
259
 *
 
260
 *    This is your unofficial assurance that libpng from version 0.71 and
 
261
 *    upward through 1.2.8 are Y2K compliant.  It is my belief that earlier
 
262
 *    versions were also Y2K compliant.
 
263
 *
 
264
 *    Libpng only has three year fields.  One is a 2-byte unsigned integer
 
265
 *    that will hold years up to 65535.  The other two hold the date in text
 
266
 *    format, and will hold years up to 9999.
 
267
 *
 
268
 *    The integer is
 
269
 *        "png_uint_16 year" in png_time_struct.
 
270
 *
 
271
 *    The strings are
 
272
 *        "png_charp time_buffer" in png_struct and
 
273
 *        "near_time_buffer", which is a local character string in png.c.
 
274
 *
 
275
 *    There are seven time-related functions:
 
276
 *        png.c: png_convert_to_rfc_1123() in png.c
 
277
 *          (formerly png_convert_to_rfc_1152() in error)
 
278
 *        png_convert_from_struct_tm() in pngwrite.c, called in pngwrite.c
 
279
 *        png_convert_from_time_t() in pngwrite.c
 
280
 *        png_get_tIME() in pngget.c
 
281
 *        png_handle_tIME() in pngrutil.c, called in pngread.c
 
282
 *        png_set_tIME() in pngset.c
 
283
 *        png_write_tIME() in pngwutil.c, called in pngwrite.c
 
284
 *
 
285
 *    All handle dates properly in a Y2K environment.  The
 
286
 *    png_convert_from_time_t() function calls gmtime() to convert from system
 
287
 *    clock time, which returns (year - 1900), which we properly convert to
 
288
 *    the full 4-digit year.  There is a possibility that applications using
 
289
 *    libpng are not passing 4-digit years into the png_convert_to_rfc_1123()
 
290
 *    function, or that they are incorrectly passing only a 2-digit year
 
291
 *    instead of "year - 1900" into the png_convert_from_struct_tm() function,
 
292
 *    but this is not under our control.  The libpng documentation has always
 
293
 *    stated that it works with 4-digit years, and the APIs have been
 
294
 *    documented as such.
 
295
 *
 
296
 *    The tIME chunk itself is also Y2K compliant.  It uses a 2-byte unsigned
 
297
 *    integer to hold the year, and can hold years as large as 65535.
 
298
 *
 
299
 *    zlib, upon which libpng depends, is also Y2K compliant.  It contains
 
300
 *    no date-related code.
 
301
 *
 
302
 *       Glenn Randers-Pehrson
 
303
 *       libpng maintainer
 
304
 *       PNG Development Group
 
305
 */
 
306
 
 
307
#ifndef PNG_H
 
308
#define PNG_H
 
309
 
 
310
/* This is not the place to learn how to use libpng.  The file libpng.txt
 
311
 * describes how to use libpng, and the file example.c summarizes it
 
312
 * with some code on which to build.  This file is useful for looking
 
313
 * at the actual function definitions and structure components.
 
314
 */
 
315
 
 
316
/* Version information for png.h - this should match the version in png.c */
 
317
#define PNG_LIBPNG_VER_STRING "1.2.8"
 
318
#define PNG_HEADER_VERSION_STRING \
 
319
   " libpng version 1.2.8 - December 3, 2004 (header)\n"
 
320
 
 
321
#define PNG_LIBPNG_VER_SONUM   0
 
322
#define PNG_LIBPNG_VER_DLLNUM  13
 
323
 
 
324
/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
 
325
#define PNG_LIBPNG_VER_MAJOR   1
 
326
#define PNG_LIBPNG_VER_MINOR   2
 
327
#define PNG_LIBPNG_VER_RELEASE 8
 
328
/* This should match the numeric part of the final component of
 
329
 * PNG_LIBPNG_VER_STRING, omitting any leading zero: */
 
330
 
 
331
#define PNG_LIBPNG_VER_BUILD  0
 
332
 
 
333
/* Release Status */
 
334
#define PNG_LIBPNG_BUILD_ALPHA    1
 
335
#define PNG_LIBPNG_BUILD_BETA     2
 
336
#define PNG_LIBPNG_BUILD_RC       3
 
337
#define PNG_LIBPNG_BUILD_STABLE   4
 
338
#define PNG_LIBPNG_BUILD_RELEASE_STATUS_MASK 7
 
339
  
 
340
/* Release-Specific Flags */
 
341
#define PNG_LIBPNG_BUILD_PATCH    8 /* Can be OR'ed with
 
342
                                       PNG_LIBPNG_BUILD_STABLE only */
 
343
#define PNG_LIBPNG_BUILD_PRIVATE 16 /* Cannot be OR'ed with
 
344
                                       PNG_LIBPNG_BUILD_SPECIAL */
 
345
#define PNG_LIBPNG_BUILD_SPECIAL 32 /* Cannot be OR'ed with
 
346
                                       PNG_LIBPNG_BUILD_PRIVATE */
 
347
 
 
348
#define PNG_LIBPNG_BUILD_BASE_TYPE PNG_LIBPNG_BUILD_STABLE
 
349
 
 
350
/* Careful here.  At one time, Guy wanted to use 082, but that would be octal.
 
351
 * We must not include leading zeros.
 
352
 * Versions 0.7 through 1.0.0 were in the range 0 to 100 here (only
 
353
 * version 1.0.0 was mis-numbered 100 instead of 10000).  From
 
354
 * version 1.0.1 it's    xxyyzz, where x=major, y=minor, z=release */
 
355
#define PNG_LIBPNG_VER 10208 /* 1.2.8 */
 
356
 
 
357
#ifndef PNG_VERSION_INFO_ONLY
 
358
/* include the compression library's header */
 
359
#include "zlib.h"
 
360
#endif
 
361
 
 
362
/* include all user configurable info, including optional assembler routines */
 
363
#include "pngconf.h"
 
364
 
 
365
/*
 
366
 * Added at libpng-1.2.8 */
 
367
/* Ref MSDN: Private as priority over Special
 
368
 * VS_FF_PRIVATEBUILD File *was not* built using standard release
 
369
 * procedures. If this value is given, the StringFileInfo block must
 
370
 * contain a PrivateBuild string. 
 
371
 *
 
372
 * VS_FF_SPECIALBUILD File *was* built by the original company using
 
373
 * standard release procedures but is a variation of the standard
 
374
 * file of the same version number. If this value is given, the
 
375
 * StringFileInfo block must contain a SpecialBuild string. 
 
376
 */
 
377
 
 
378
#if defined(PNG_USER_PRIVATEBUILD)
 
379
#  define PNG_LIBPNG_BUILD_TYPE PNG_LIBPNG_BUILD_BASE_TYPE | \
 
380
          PNG_LIBPNG_BUILD_PRIVATE
 
381
#else
 
382
#  if defined(PNG_LIBPNG_SPECIALBUILD)
 
383
#    define PNG_LIBPNG_BUILD_TYPE PNG_LIBPNG_BUILD_BASE_TYPE | \
 
384
            PNG_LIBPNG_BUILD_SPECIAL
 
385
#  else
 
386
#    define PNG_LIBPNG_BUILD_TYPE PNG_LIBPNG_BUILD_BASE_TYPE
 
387
#  endif
 
388
#endif
 
389
 
 
390
#ifndef PNG_VERSION_INFO_ONLY
 
391
 
 
392
/* Inhibit C++ name-mangling for libpng functions but not for system calls. */
 
393
#ifdef __cplusplus
 
394
extern "C" {
 
395
#endif /* __cplusplus */
 
396
 
 
397
/* This file is arranged in several sections.  The first section contains
 
398
 * structure and type definitions.  The second section contains the external
 
399
 * library functions, while the third has the internal library functions,
 
400
 * which applications aren't expected to use directly.
 
401
 */
 
402
 
 
403
#ifndef PNG_NO_TYPECAST_NULL
 
404
#define int_p_NULL                (int *)NULL
 
405
#define png_bytep_NULL            (png_bytep)NULL
 
406
#define png_bytepp_NULL           (png_bytepp)NULL
 
407
#define png_doublep_NULL          (png_doublep)NULL
 
408
#define png_error_ptr_NULL        (png_error_ptr)NULL
 
409
#define png_flush_ptr_NULL        (png_flush_ptr)NULL
 
410
#define png_free_ptr_NULL         (png_free_ptr)NULL
 
411
#define png_infopp_NULL           (png_infopp)NULL
 
412
#define png_malloc_ptr_NULL       (png_malloc_ptr)NULL
 
413
#define png_read_status_ptr_NULL  (png_read_status_ptr)NULL
 
414
#define png_rw_ptr_NULL           (png_rw_ptr)NULL
 
415
#define png_structp_NULL          (png_structp)NULL
 
416
#define png_uint_16p_NULL         (png_uint_16p)NULL
 
417
#define png_voidp_NULL            (png_voidp)NULL
 
418
#define png_write_status_ptr_NULL (png_write_status_ptr)NULL
 
419
#else
 
420
#define int_p_NULL                NULL
 
421
#define png_bytep_NULL            NULL
 
422
#define png_bytepp_NULL           NULL
 
423
#define png_doublep_NULL          NULL
 
424
#define png_error_ptr_NULL        NULL
 
425
#define png_flush_ptr_NULL        NULL
 
426
#define png_free_ptr_NULL         NULL
 
427
#define png_infopp_NULL           NULL
 
428
#define png_malloc_ptr_NULL       NULL
 
429
#define png_read_status_ptr_NULL  NULL
 
430
#define png_rw_ptr_NULL           NULL
 
431
#define png_structp_NULL          NULL
 
432
#define png_uint_16p_NULL         NULL
 
433
#define png_voidp_NULL            NULL
 
434
#define png_write_status_ptr_NULL NULL
 
435
#endif
 
436
 
 
437
/* variables declared in png.c - only it needs to define PNG_NO_EXTERN */
 
438
#if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN)
 
439
/* Version information for C files, stored in png.c.  This had better match
 
440
 * the version above.
 
441
 */
 
442
#ifdef PNG_USE_GLOBAL_ARRAYS
 
443
PNG_EXPORT_VAR (const char) png_libpng_ver[18];
 
444
  /* need room for 99.99.99beta99z */
 
445
#else
 
446
#define png_libpng_ver png_get_header_ver(NULL)
 
447
#endif
 
448
 
 
449
#ifdef PNG_USE_GLOBAL_ARRAYS
 
450
/* This was removed in version 1.0.5c */
 
451
/* Structures to facilitate easy interlacing.  See png.c for more details */
 
452
PNG_EXPORT_VAR (const int FARDATA) png_pass_start[7];
 
453
PNG_EXPORT_VAR (const int FARDATA) png_pass_inc[7];
 
454
PNG_EXPORT_VAR (const int FARDATA) png_pass_ystart[7];
 
455
PNG_EXPORT_VAR (const int FARDATA) png_pass_yinc[7];
 
456
PNG_EXPORT_VAR (const int FARDATA) png_pass_mask[7];
 
457
PNG_EXPORT_VAR (const int FARDATA) png_pass_dsp_mask[7];
 
458
#ifdef PNG_HAVE_ASSEMBLER_COMBINE_ROW
 
459
PNG_EXPORT_VAR (const int FARDATA) png_pass_width[7];
 
460
#endif
 
461
/* This isn't currently used.  If you need it, see png.c for more details.
 
462
PNG_EXPORT_VAR (const int FARDATA) png_pass_height[7];
 
463
*/
 
464
#endif
 
465
 
 
466
#endif /* PNG_NO_EXTERN */
 
467
 
 
468
/* Three color definitions.  The order of the red, green, and blue, (and the
 
469
 * exact size) is not important, although the size of the fields need to
 
470
 * be png_byte or png_uint_16 (as defined below).
 
471
 */
 
472
typedef struct png_color_struct
 
473
{
 
474
   png_byte red;
 
475
   png_byte green;
 
476
   png_byte blue;
 
477
} png_color;
 
478
typedef png_color FAR * png_colorp;
 
479
typedef png_color FAR * FAR * png_colorpp;
 
480
 
 
481
typedef struct png_color_16_struct
 
482
{
 
483
   png_byte index;    /* used for palette files */
 
484
   png_uint_16 red;   /* for use in red green blue files */
 
485
   png_uint_16 green;
 
486
   png_uint_16 blue;
 
487
   png_uint_16 gray;  /* for use in grayscale files */
 
488
} png_color_16;
 
489
typedef png_color_16 FAR * png_color_16p;
 
490
typedef png_color_16 FAR * FAR * png_color_16pp;
 
491
 
 
492
typedef struct png_color_8_struct
 
493
{
 
494
   png_byte red;   /* for use in red green blue files */
 
495
   png_byte green;
 
496
   png_byte blue;
 
497
   png_byte gray;  /* for use in grayscale files */
 
498
   png_byte alpha; /* for alpha channel files */
 
499
} png_color_8;
 
500
typedef png_color_8 FAR * png_color_8p;
 
501
typedef png_color_8 FAR * FAR * png_color_8pp;
 
502
 
 
503
/*
 
504
 * The following two structures are used for the in-core representation
 
505
 * of sPLT chunks.
 
506
 */
 
507
typedef struct png_sPLT_entry_struct
 
508
{
 
509
   png_uint_16 red;
 
510
   png_uint_16 green;
 
511
   png_uint_16 blue;
 
512
   png_uint_16 alpha;
 
513
   png_uint_16 frequency;
 
514
} png_sPLT_entry;
 
515
typedef png_sPLT_entry FAR * png_sPLT_entryp;
 
516
typedef png_sPLT_entry FAR * FAR * png_sPLT_entrypp;
 
517
 
 
518
/*  When the depth of the sPLT palette is 8 bits, the color and alpha samples
 
519
 *  occupy the LSB of their respective members, and the MSB of each member
 
520
 *  is zero-filled.  The frequency member always occupies the full 16 bits.
 
521
 */
 
522
 
 
523
typedef struct png_sPLT_struct
 
524
{
 
525
   png_charp name;           /* palette name */
 
526
   png_byte depth;           /* depth of palette samples */
 
527
   png_sPLT_entryp entries;  /* palette entries */
 
528
   png_int_32 nentries;      /* number of palette entries */
 
529
} png_sPLT_t;
 
530
typedef png_sPLT_t FAR * png_sPLT_tp;
 
531
typedef png_sPLT_t FAR * FAR * png_sPLT_tpp;
 
532
 
 
533
#ifdef PNG_TEXT_SUPPORTED
 
534
/* png_text holds the contents of a text/ztxt/itxt chunk in a PNG file,
 
535
 * and whether that contents is compressed or not.  The "key" field
 
536
 * points to a regular zero-terminated C string.  The "text", "lang", and
 
537
 * "lang_key" fields can be regular C strings, empty strings, or NULL pointers.
 
538
 * However, the * structure returned by png_get_text() will always contain
 
539
 * regular zero-terminated C strings (possibly empty), never NULL pointers,
 
540
 * so they can be safely used in printf() and other string-handling functions.
 
541
 */
 
542
typedef struct png_text_struct
 
543
{
 
544
   int  compression;       /* compression value:
 
545
                             -1: tEXt, none
 
546
                              0: zTXt, deflate
 
547
                              1: iTXt, none
 
548
                              2: iTXt, deflate  */
 
549
   png_charp key;          /* keyword, 1-79 character description of "text" */
 
550
   png_charp text;         /* comment, may be an empty string (ie "")
 
551
                              or a NULL pointer */
 
552
   png_size_t text_length; /* length of the text string */
 
553
#ifdef PNG_iTXt_SUPPORTED
 
554
   png_size_t itxt_length; /* length of the itxt string */
 
555
   png_charp lang;         /* language code, 0-79 characters
 
556
                              or a NULL pointer */
 
557
   png_charp lang_key;     /* keyword translated UTF-8 string, 0 or more
 
558
                              chars or a NULL pointer */
 
559
#endif
 
560
} png_text;
 
561
typedef png_text FAR * png_textp;
 
562
typedef png_text FAR * FAR * png_textpp;
 
563
#endif
 
564
 
 
565
/* Supported compression types for text in PNG files (tEXt, and zTXt).
 
566
 * The values of the PNG_TEXT_COMPRESSION_ defines should NOT be changed. */
 
567
#define PNG_TEXT_COMPRESSION_NONE_WR -3
 
568
#define PNG_TEXT_COMPRESSION_zTXt_WR -2
 
569
#define PNG_TEXT_COMPRESSION_NONE    -1
 
570
#define PNG_TEXT_COMPRESSION_zTXt     0
 
571
#define PNG_ITXT_COMPRESSION_NONE     1
 
572
#define PNG_ITXT_COMPRESSION_zTXt     2
 
573
#define PNG_TEXT_COMPRESSION_LAST     3  /* Not a valid value */
 
574
 
 
575
/* png_time is a way to hold the time in an machine independent way.
 
576
 * Two conversions are provided, both from time_t and struct tm.  There
 
577
 * is no portable way to convert to either of these structures, as far
 
578
 * as I know.  If you know of a portable way, send it to me.  As a side
 
579
 * note - PNG has always been Year 2000 compliant!
 
580
 */
 
581
typedef struct png_time_struct
 
582
{
 
583
   png_uint_16 year; /* full year, as in, 1995 */
 
584
   png_byte month;   /* month of year, 1 - 12 */
 
585
   png_byte day;     /* day of month, 1 - 31 */
 
586
   png_byte hour;    /* hour of day, 0 - 23 */
 
587
   png_byte minute;  /* minute of hour, 0 - 59 */
 
588
   png_byte second;  /* second of minute, 0 - 60 (for leap seconds) */
 
589
} png_time;
 
590
typedef png_time FAR * png_timep;
 
591
typedef png_time FAR * FAR * png_timepp;
 
592
 
 
593
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
 
594
/* png_unknown_chunk is a structure to hold queued chunks for which there is
 
595
 * no specific support.  The idea is that we can use this to queue
 
596
 * up private chunks for output even though the library doesn't actually
 
597
 * know about their semantics.
 
598
 */
 
599
typedef struct png_unknown_chunk_t
 
600
{
 
601
    png_byte name[5];
 
602
    png_byte *data;
 
603
    png_size_t size;
 
604
 
 
605
    /* libpng-using applications should NOT directly modify this byte. */
 
606
    png_byte location; /* mode of operation at read time */
 
607
}
 
608
png_unknown_chunk;
 
609
typedef png_unknown_chunk FAR * png_unknown_chunkp;
 
610
typedef png_unknown_chunk FAR * FAR * png_unknown_chunkpp;
 
611
#endif
 
612
 
 
613
/* png_info is a structure that holds the information in a PNG file so
 
614
 * that the application can find out the characteristics of the image.
 
615
 * If you are reading the file, this structure will tell you what is
 
616
 * in the PNG file.  If you are writing the file, fill in the information
 
617
 * you want to put into the PNG file, then call png_write_info().
 
618
 * The names chosen should be very close to the PNG specification, so
 
619
 * consult that document for information about the meaning of each field.
 
620
 *
 
621
 * With libpng < 0.95, it was only possible to directly set and read the
 
622
 * the values in the png_info_struct, which meant that the contents and
 
623
 * order of the values had to remain fixed.  With libpng 0.95 and later,
 
624
 * however, there are now functions that abstract the contents of
 
625
 * png_info_struct from the application, so this makes it easier to use
 
626
 * libpng with dynamic libraries, and even makes it possible to use
 
627
 * libraries that don't have all of the libpng ancillary chunk-handing
 
628
 * functionality.
 
629
 *
 
630
 * In any case, the order of the parameters in png_info_struct should NOT
 
631
 * be changed for as long as possible to keep compatibility with applications
 
632
 * that use the old direct-access method with png_info_struct.
 
633
 *
 
634
 * The following members may have allocated storage attached that should be
 
635
 * cleaned up before the structure is discarded: palette, trans, text,
 
636
 * pcal_purpose, pcal_units, pcal_params, hist, iccp_name, iccp_profile,
 
637
 * splt_palettes, scal_unit, row_pointers, and unknowns.   By default, these
 
638
 * are automatically freed when the info structure is deallocated, if they were
 
639
 * allocated internally by libpng.  This behavior can be changed by means
 
640
 * of the png_data_freer() function.
 
641
 *
 
642
 * More allocation details: all the chunk-reading functions that
 
643
 * change these members go through the corresponding png_set_*
 
644
 * functions.  A function to clear these members is available: see
 
645
 * png_free_data().  The png_set_* functions do not depend on being
 
646
 * able to point info structure members to any of the storage they are
 
647
 * passed (they make their own copies), EXCEPT that the png_set_text
 
648
 * functions use the same storage passed to them in the text_ptr or
 
649
 * itxt_ptr structure argument, and the png_set_rows and png_set_unknowns
 
650
 * functions do not make their own copies.
 
651
 */
 
652
typedef struct png_info_struct
 
653
{
 
654
   /* the following are necessary for every PNG file */
 
655
   png_uint_32 width;       /* width of image in pixels (from IHDR) */
 
656
   png_uint_32 height;      /* height of image in pixels (from IHDR) */
 
657
   png_uint_32 valid;       /* valid chunk data (see PNG_INFO_ below) */
 
658
   png_uint_32 rowbytes;    /* bytes needed to hold an untransformed row */
 
659
   png_colorp palette;      /* array of color values (valid & PNG_INFO_PLTE) */
 
660
   png_uint_16 num_palette; /* number of color entries in "palette" (PLTE) */
 
661
   png_uint_16 num_trans;   /* number of transparent palette color (tRNS) */
 
662
   png_byte bit_depth;      /* 1, 2, 4, 8, or 16 bits/channel (from IHDR) */
 
663
   png_byte color_type;     /* see PNG_COLOR_TYPE_ below (from IHDR) */
 
664
   /* The following three should have been named *_method not *_type */
 
665
   png_byte compression_type; /* must be PNG_COMPRESSION_TYPE_BASE (IHDR) */
 
666
   png_byte filter_type;    /* must be PNG_FILTER_TYPE_BASE (from IHDR) */
 
667
   png_byte interlace_type; /* One of PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
 
668
 
 
669
   /* The following is informational only on read, and not used on writes. */
 
670
   png_byte channels;       /* number of data channels per pixel (1, 2, 3, 4) */
 
671
   png_byte pixel_depth;    /* number of bits per pixel */
 
672
   png_byte spare_byte;     /* to align the data, and for future use */
 
673
   png_byte signature[8];   /* magic bytes read by libpng from start of file */
 
674
 
 
675
   /* The rest of the data is optional.  If you are reading, check the
 
676
    * valid field to see if the information in these are valid.  If you
 
677
    * are writing, set the valid field to those chunks you want written,
 
678
    * and initialize the appropriate fields below.
 
679
    */
 
680
 
 
681
#if defined(PNG_gAMA_SUPPORTED) && defined(PNG_FLOATING_POINT_SUPPORTED)
 
682
   /* The gAMA chunk describes the gamma characteristics of the system
 
683
    * on which the image was created, normally in the range [1.0, 2.5].
 
684
    * Data is valid if (valid & PNG_INFO_gAMA) is non-zero.
 
685
    */
 
686
   float gamma; /* gamma value of image, if (valid & PNG_INFO_gAMA) */
 
687
#endif
 
688
 
 
689
#if defined(PNG_sRGB_SUPPORTED)
 
690
    /* GR-P, 0.96a */
 
691
    /* Data valid if (valid & PNG_INFO_sRGB) non-zero. */
 
692
   png_byte srgb_intent; /* sRGB rendering intent [0, 1, 2, or 3] */
 
693
#endif
 
694
 
 
695
#if defined(PNG_TEXT_SUPPORTED)
 
696
   /* The tEXt, and zTXt chunks contain human-readable textual data in
 
697
    * uncompressed, compressed, and optionally compressed forms, respectively.
 
698
    * The data in "text" is an array of pointers to uncompressed,
 
699
    * null-terminated C strings. Each chunk has a keyword that describes the
 
700
    * textual data contained in that chunk.  Keywords are not required to be
 
701
    * unique, and the text string may be empty.  Any number of text chunks may
 
702
    * be in an image.
 
703
    */
 
704
   int num_text; /* number of comments read/to write */
 
705
   int max_text; /* current size of text array */
 
706
   png_textp text; /* array of comments read/to write */
 
707
#endif /* PNG_TEXT_SUPPORTED */
 
708
 
 
709
#if defined(PNG_tIME_SUPPORTED)
 
710
   /* The tIME chunk holds the last time the displayed image data was
 
711
    * modified.  See the png_time struct for the contents of this struct.
 
712
    */
 
713
   png_time mod_time;
 
714
#endif
 
715
 
 
716
#if defined(PNG_sBIT_SUPPORTED)
 
717
   /* The sBIT chunk specifies the number of significant high-order bits
 
718
    * in the pixel data.  Values are in the range [1, bit_depth], and are
 
719
    * only specified for the channels in the pixel data.  The contents of
 
720
    * the low-order bits is not specified.  Data is valid if
 
721
    * (valid & PNG_INFO_sBIT) is non-zero.
 
722
    */
 
723
   png_color_8 sig_bit; /* significant bits in color channels */
 
724
#endif
 
725
 
 
726
#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_EXPAND_SUPPORTED) || \
 
727
defined(PNG_READ_BACKGROUND_SUPPORTED)
 
728
   /* The tRNS chunk supplies transparency data for paletted images and
 
729
    * other image types that don't need a full alpha channel.  There are
 
730
    * "num_trans" transparency values for a paletted image, stored in the
 
731
    * same order as the palette colors, starting from index 0.  Values
 
732
    * for the data are in the range [0, 255], ranging from fully transparent
 
733
    * to fully opaque, respectively.  For non-paletted images, there is a
 
734
    * single color specified that should be treated as fully transparent.
 
735
    * Data is valid if (valid & PNG_INFO_tRNS) is non-zero.
 
736
    */
 
737
   png_bytep trans; /* transparent values for paletted image */
 
738
   png_color_16 trans_values; /* transparent color for non-palette image */
 
739
#endif
 
740
 
 
741
#if defined(PNG_bKGD_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
 
742
   /* The bKGD chunk gives the suggested image background color if the
 
743
    * display program does not have its own background color and the image
 
744
    * is needs to composited onto a background before display.  The colors
 
745
    * in "background" are normally in the same color space/depth as the
 
746
    * pixel data.  Data is valid if (valid & PNG_INFO_bKGD) is non-zero.
 
747
    */
 
748
   png_color_16 background;
 
749
#endif
 
750
 
 
751
#if defined(PNG_oFFs_SUPPORTED)
 
752
   /* The oFFs chunk gives the offset in "offset_unit_type" units rightwards
 
753
    * and downwards from the top-left corner of the display, page, or other
 
754
    * application-specific co-ordinate space.  See the PNG_OFFSET_ defines
 
755
    * below for the unit types.  Valid if (valid & PNG_INFO_oFFs) non-zero.
 
756
    */
 
757
   png_int_32 x_offset; /* x offset on page */
 
758
   png_int_32 y_offset; /* y offset on page */
 
759
   png_byte offset_unit_type; /* offset units type */
 
760
#endif
 
761
 
 
762
#if defined(PNG_pHYs_SUPPORTED)
 
763
   /* The pHYs chunk gives the physical pixel density of the image for
 
764
    * display or printing in "phys_unit_type" units (see PNG_RESOLUTION_
 
765
    * defines below).  Data is valid if (valid & PNG_INFO_pHYs) is non-zero.
 
766
    */
 
767
   png_uint_32 x_pixels_per_unit; /* horizontal pixel density */
 
768
   png_uint_32 y_pixels_per_unit; /* vertical pixel density */
 
769
   png_byte phys_unit_type; /* resolution type (see PNG_RESOLUTION_ below) */
 
770
#endif
 
771
 
 
772
#if defined(PNG_hIST_SUPPORTED)
 
773
   /* The hIST chunk contains the relative frequency or importance of the
 
774
    * various palette entries, so that a viewer can intelligently select a
 
775
    * reduced-color palette, if required.  Data is an array of "num_palette"
 
776
    * values in the range [0,65535]. Data valid if (valid & PNG_INFO_hIST)
 
777
    * is non-zero.
 
778
    */
 
779
   png_uint_16p hist;
 
780
#endif
 
781
 
 
782
#ifdef PNG_cHRM_SUPPORTED
 
783
   /* The cHRM chunk describes the CIE color characteristics of the monitor
 
784
    * on which the PNG was created.  This data allows the viewer to do gamut
 
785
    * mapping of the input image to ensure that the viewer sees the same
 
786
    * colors in the image as the creator.  Values are in the range
 
787
    * [0.0, 0.8].  Data valid if (valid & PNG_INFO_cHRM) non-zero.
 
788
    */
 
789
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
790
   float x_white;
 
791
   float y_white;
 
792
   float x_red;
 
793
   float y_red;
 
794
   float x_green;
 
795
   float y_green;
 
796
   float x_blue;
 
797
   float y_blue;
 
798
#endif
 
799
#endif
 
800
 
 
801
#if defined(PNG_pCAL_SUPPORTED)
 
802
   /* The pCAL chunk describes a transformation between the stored pixel
 
803
    * values and original physical data values used to create the image.
 
804
    * The integer range [0, 2^bit_depth - 1] maps to the floating-point
 
805
    * range given by [pcal_X0, pcal_X1], and are further transformed by a
 
806
    * (possibly non-linear) transformation function given by "pcal_type"
 
807
    * and "pcal_params" into "pcal_units".  Please see the PNG_EQUATION_
 
808
    * defines below, and the PNG-Group's PNG extensions document for a
 
809
    * complete description of the transformations and how they should be
 
810
    * implemented, and for a description of the ASCII parameter strings.
 
811
    * Data values are valid if (valid & PNG_INFO_pCAL) non-zero.
 
812
    */
 
813
   png_charp pcal_purpose;  /* pCAL chunk description string */
 
814
   png_int_32 pcal_X0;      /* minimum value */
 
815
   png_int_32 pcal_X1;      /* maximum value */
 
816
   png_charp pcal_units;    /* Latin-1 string giving physical units */
 
817
   png_charpp pcal_params;  /* ASCII strings containing parameter values */
 
818
   png_byte pcal_type;      /* equation type (see PNG_EQUATION_ below) */
 
819
   png_byte pcal_nparams;   /* number of parameters given in pcal_params */
 
820
#endif
 
821
 
 
822
/* New members added in libpng-1.0.6 */
 
823
#ifdef PNG_FREE_ME_SUPPORTED
 
824
   png_uint_32 free_me;     /* flags items libpng is responsible for freeing */
 
825
#endif
 
826
 
 
827
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
 
828
   /* storage for unknown chunks that the library doesn't recognize. */
 
829
   png_unknown_chunkp unknown_chunks;
 
830
   png_size_t unknown_chunks_num;
 
831
#endif
 
832
 
 
833
#if defined(PNG_iCCP_SUPPORTED)
 
834
   /* iCCP chunk data. */
 
835
   png_charp iccp_name;     /* profile name */
 
836
   png_charp iccp_profile;  /* International Color Consortium profile data */
 
837
                            /* Note to maintainer: should be png_bytep */
 
838
   png_uint_32 iccp_proflen;  /* ICC profile data length */
 
839
   png_byte iccp_compression; /* Always zero */
 
840
#endif
 
841
 
 
842
#if defined(PNG_sPLT_SUPPORTED)
 
843
   /* data on sPLT chunks (there may be more than one). */
 
844
   png_sPLT_tp splt_palettes;
 
845
   png_uint_32 splt_palettes_num;
 
846
#endif
 
847
 
 
848
#if defined(PNG_sCAL_SUPPORTED)
 
849
   /* The sCAL chunk describes the actual physical dimensions of the
 
850
    * subject matter of the graphic.  The chunk contains a unit specification
 
851
    * a byte value, and two ASCII strings representing floating-point
 
852
    * values.  The values are width and height corresponsing to one pixel
 
853
    * in the image.  This external representation is converted to double
 
854
    * here.  Data values are valid if (valid & PNG_INFO_sCAL) is non-zero.
 
855
    */
 
856
   png_byte scal_unit;         /* unit of physical scale */
 
857
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
858
   double scal_pixel_width;    /* width of one pixel */
 
859
   double scal_pixel_height;   /* height of one pixel */
 
860
#endif
 
861
#ifdef PNG_FIXED_POINT_SUPPORTED
 
862
   png_charp scal_s_width;     /* string containing height */
 
863
   png_charp scal_s_height;    /* string containing width */
 
864
#endif
 
865
#endif
 
866
 
 
867
#if defined(PNG_INFO_IMAGE_SUPPORTED)
 
868
   /* Memory has been allocated if (valid & PNG_ALLOCATED_INFO_ROWS) non-zero */
 
869
   /* Data valid if (valid & PNG_INFO_IDAT) non-zero */
 
870
   png_bytepp row_pointers;        /* the image bits */
 
871
#endif
 
872
 
 
873
#if defined(PNG_FIXED_POINT_SUPPORTED) && defined(PNG_gAMA_SUPPORTED)
 
874
   png_fixed_point int_gamma; /* gamma of image, if (valid & PNG_INFO_gAMA) */
 
875
#endif
 
876
 
 
877
#if defined(PNG_cHRM_SUPPORTED) && defined(PNG_FIXED_POINT_SUPPORTED)
 
878
   png_fixed_point int_x_white;
 
879
   png_fixed_point int_y_white;
 
880
   png_fixed_point int_x_red;
 
881
   png_fixed_point int_y_red;
 
882
   png_fixed_point int_x_green;
 
883
   png_fixed_point int_y_green;
 
884
   png_fixed_point int_x_blue;
 
885
   png_fixed_point int_y_blue;
 
886
#endif
 
887
 
 
888
} png_info;
 
889
 
 
890
typedef png_info FAR * png_infop;
 
891
typedef png_info FAR * FAR * png_infopp;
 
892
 
 
893
/* Maximum positive integer used in PNG is (2^31)-1 */
 
894
#define PNG_UINT_31_MAX ((png_uint_32)0x7fffffffL)
 
895
#define PNG_UINT_32_MAX ((png_uint_32)(-1))
 
896
#define PNG_SIZE_MAX ((png_size_t)(-1))
 
897
/* PNG_MAX_UINT is deprecated; use PNG_UINT_31_MAX instead. */
 
898
#define PNG_MAX_UINT PNG_UINT_31_MAX
 
899
 
 
900
/* These describe the color_type field in png_info. */
 
901
/* color type masks */
 
902
#define PNG_COLOR_MASK_PALETTE    1
 
903
#define PNG_COLOR_MASK_COLOR      2
 
904
#define PNG_COLOR_MASK_ALPHA      4
 
905
 
 
906
/* color types.  Note that not all combinations are legal */
 
907
#define PNG_COLOR_TYPE_GRAY 0
 
908
#define PNG_COLOR_TYPE_PALETTE  (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE)
 
909
#define PNG_COLOR_TYPE_RGB        (PNG_COLOR_MASK_COLOR)
 
910
#define PNG_COLOR_TYPE_RGB_ALPHA  (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA)
 
911
#define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA)
 
912
/* aliases */
 
913
#define PNG_COLOR_TYPE_RGBA  PNG_COLOR_TYPE_RGB_ALPHA
 
914
#define PNG_COLOR_TYPE_GA  PNG_COLOR_TYPE_GRAY_ALPHA
 
915
 
 
916
/* This is for compression type. PNG 1.0-1.2 only define the single type. */
 
917
#define PNG_COMPRESSION_TYPE_BASE 0 /* Deflate method 8, 32K window */
 
918
#define PNG_COMPRESSION_TYPE_DEFAULT PNG_COMPRESSION_TYPE_BASE
 
919
 
 
920
/* This is for filter type. PNG 1.0-1.2 only define the single type. */
 
921
#define PNG_FILTER_TYPE_BASE      0 /* Single row per-byte filtering */
 
922
#define PNG_INTRAPIXEL_DIFFERENCING 64 /* Used only in MNG datastreams */
 
923
#define PNG_FILTER_TYPE_DEFAULT   PNG_FILTER_TYPE_BASE
 
924
 
 
925
/* These are for the interlacing type.  These values should NOT be changed. */
 
926
#define PNG_INTERLACE_NONE        0 /* Non-interlaced image */
 
927
#define PNG_INTERLACE_ADAM7       1 /* Adam7 interlacing */
 
928
#define PNG_INTERLACE_LAST        2 /* Not a valid value */
 
929
 
 
930
/* These are for the oFFs chunk.  These values should NOT be changed. */
 
931
#define PNG_OFFSET_PIXEL          0 /* Offset in pixels */
 
932
#define PNG_OFFSET_MICROMETER     1 /* Offset in micrometers (1/10^6 meter) */
 
933
#define PNG_OFFSET_LAST           2 /* Not a valid value */
 
934
 
 
935
/* These are for the pCAL chunk.  These values should NOT be changed. */
 
936
#define PNG_EQUATION_LINEAR       0 /* Linear transformation */
 
937
#define PNG_EQUATION_BASE_E       1 /* Exponential base e transform */
 
938
#define PNG_EQUATION_ARBITRARY    2 /* Arbitrary base exponential transform */
 
939
#define PNG_EQUATION_HYPERBOLIC   3 /* Hyperbolic sine transformation */
 
940
#define PNG_EQUATION_LAST         4 /* Not a valid value */
 
941
 
 
942
/* These are for the sCAL chunk.  These values should NOT be changed. */
 
943
#define PNG_SCALE_UNKNOWN         0 /* unknown unit (image scale) */
 
944
#define PNG_SCALE_METER           1 /* meters per pixel */
 
945
#define PNG_SCALE_RADIAN          2 /* radians per pixel */
 
946
#define PNG_SCALE_LAST            3 /* Not a valid value */
 
947
 
 
948
/* These are for the pHYs chunk.  These values should NOT be changed. */
 
949
#define PNG_RESOLUTION_UNKNOWN    0 /* pixels/unknown unit (aspect ratio) */
 
950
#define PNG_RESOLUTION_METER      1 /* pixels/meter */
 
951
#define PNG_RESOLUTION_LAST       2 /* Not a valid value */
 
952
 
 
953
/* These are for the sRGB chunk.  These values should NOT be changed. */
 
954
#define PNG_sRGB_INTENT_PERCEPTUAL 0
 
955
#define PNG_sRGB_INTENT_RELATIVE   1
 
956
#define PNG_sRGB_INTENT_SATURATION 2
 
957
#define PNG_sRGB_INTENT_ABSOLUTE   3
 
958
#define PNG_sRGB_INTENT_LAST       4 /* Not a valid value */
 
959
 
 
960
/* This is for text chunks */
 
961
#define PNG_KEYWORD_MAX_LENGTH     79
 
962
 
 
963
/* Maximum number of entries in PLTE/sPLT/tRNS arrays */
 
964
#define PNG_MAX_PALETTE_LENGTH    256
 
965
 
 
966
/* These determine if an ancillary chunk's data has been successfully read
 
967
 * from the PNG header, or if the application has filled in the corresponding
 
968
 * data in the info_struct to be written into the output file.  The values
 
969
 * of the PNG_INFO_<chunk> defines should NOT be changed.
 
970
 */
 
971
#define PNG_INFO_gAMA 0x0001
 
972
#define PNG_INFO_sBIT 0x0002
 
973
#define PNG_INFO_cHRM 0x0004
 
974
#define PNG_INFO_PLTE 0x0008
 
975
#define PNG_INFO_tRNS 0x0010
 
976
#define PNG_INFO_bKGD 0x0020
 
977
#define PNG_INFO_hIST 0x0040
 
978
#define PNG_INFO_pHYs 0x0080
 
979
#define PNG_INFO_oFFs 0x0100
 
980
#define PNG_INFO_tIME 0x0200
 
981
#define PNG_INFO_pCAL 0x0400
 
982
#define PNG_INFO_sRGB 0x0800   /* GR-P, 0.96a */
 
983
#define PNG_INFO_iCCP 0x1000   /* ESR, 1.0.6 */
 
984
#define PNG_INFO_sPLT 0x2000   /* ESR, 1.0.6 */
 
985
#define PNG_INFO_sCAL 0x4000   /* ESR, 1.0.6 */
 
986
#define PNG_INFO_IDAT 0x8000L  /* ESR, 1.0.6 */
 
987
 
 
988
/* This is used for the transformation routines, as some of them
 
989
 * change these values for the row.  It also should enable using
 
990
 * the routines for other purposes.
 
991
 */
 
992
typedef struct png_row_info_struct
 
993
{
 
994
   png_uint_32 width; /* width of row */
 
995
   png_uint_32 rowbytes; /* number of bytes in row */
 
996
   png_byte color_type; /* color type of row */
 
997
   png_byte bit_depth; /* bit depth of row */
 
998
   png_byte channels; /* number of channels (1, 2, 3, or 4) */
 
999
   png_byte pixel_depth; /* bits per pixel (depth * channels) */
 
1000
} png_row_info;
 
1001
 
 
1002
typedef png_row_info FAR * png_row_infop;
 
1003
typedef png_row_info FAR * FAR * png_row_infopp;
 
1004
 
 
1005
/* These are the function types for the I/O functions and for the functions
 
1006
 * that allow the user to override the default I/O functions with his or her
 
1007
 * own.  The png_error_ptr type should match that of user-supplied warning
 
1008
 * and error functions, while the png_rw_ptr type should match that of the
 
1009
 * user read/write data functions.
 
1010
 */
 
1011
typedef struct png_struct_def png_struct;
 
1012
typedef png_struct FAR * png_structp;
 
1013
 
 
1014
typedef void (PNGAPI *png_error_ptr) PNGARG((png_structp, png_const_charp));
 
1015
typedef void (PNGAPI *png_rw_ptr) PNGARG((png_structp, png_bytep, png_size_t));
 
1016
typedef void (PNGAPI *png_flush_ptr) PNGARG((png_structp));
 
1017
typedef void (PNGAPI *png_read_status_ptr) PNGARG((png_structp, png_uint_32,
 
1018
   int));
 
1019
typedef void (PNGAPI *png_write_status_ptr) PNGARG((png_structp, png_uint_32,
 
1020
   int));
 
1021
 
 
1022
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
 
1023
typedef void (PNGAPI *png_progressive_info_ptr) PNGARG((png_structp, png_infop));
 
1024
typedef void (PNGAPI *png_progressive_end_ptr) PNGARG((png_structp, png_infop));
 
1025
typedef void (PNGAPI *png_progressive_row_ptr) PNGARG((png_structp, png_bytep,
 
1026
   png_uint_32, int));
 
1027
#endif
 
1028
 
 
1029
#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
 
1030
    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \
 
1031
    defined(PNG_LEGACY_SUPPORTED)
 
1032
typedef void (PNGAPI *png_user_transform_ptr) PNGARG((png_structp,
 
1033
    png_row_infop, png_bytep));
 
1034
#endif
 
1035
 
 
1036
#if defined(PNG_USER_CHUNKS_SUPPORTED)
 
1037
typedef int (PNGAPI *png_user_chunk_ptr) PNGARG((png_structp, png_unknown_chunkp));
 
1038
#endif
 
1039
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
 
1040
typedef void (PNGAPI *png_unknown_chunk_ptr) PNGARG((png_structp));
 
1041
#endif
 
1042
 
 
1043
/* Transform masks for the high-level interface */
 
1044
#define PNG_TRANSFORM_IDENTITY       0x0000    /* read and write */
 
1045
#define PNG_TRANSFORM_STRIP_16       0x0001    /* read only */
 
1046
#define PNG_TRANSFORM_STRIP_ALPHA    0x0002    /* read only */
 
1047
#define PNG_TRANSFORM_PACKING        0x0004    /* read and write */
 
1048
#define PNG_TRANSFORM_PACKSWAP       0x0008    /* read and write */
 
1049
#define PNG_TRANSFORM_EXPAND         0x0010    /* read only */
 
1050
#define PNG_TRANSFORM_INVERT_MONO    0x0020    /* read and write */
 
1051
#define PNG_TRANSFORM_SHIFT          0x0040    /* read and write */
 
1052
#define PNG_TRANSFORM_BGR            0x0080    /* read and write */
 
1053
#define PNG_TRANSFORM_SWAP_ALPHA     0x0100    /* read and write */
 
1054
#define PNG_TRANSFORM_SWAP_ENDIAN    0x0200    /* read and write */
 
1055
#define PNG_TRANSFORM_INVERT_ALPHA   0x0400    /* read and write */
 
1056
#define PNG_TRANSFORM_STRIP_FILLER   0x0800    /* WRITE only */
 
1057
 
 
1058
/* Flags for MNG supported features */
 
1059
#define PNG_FLAG_MNG_EMPTY_PLTE     0x01
 
1060
#define PNG_FLAG_MNG_FILTER_64      0x04
 
1061
#define PNG_ALL_MNG_FEATURES        0x05
 
1062
 
 
1063
typedef png_voidp (*png_malloc_ptr) PNGARG((png_structp, png_size_t));
 
1064
typedef void (*png_free_ptr) PNGARG((png_structp, png_voidp));
 
1065
 
 
1066
/* The structure that holds the information to read and write PNG files.
 
1067
 * The only people who need to care about what is inside of this are the
 
1068
 * people who will be modifying the library for their own special needs.
 
1069
 * It should NOT be accessed directly by an application, except to store
 
1070
 * the jmp_buf.
 
1071
 */
 
1072
 
 
1073
struct png_struct_def
 
1074
{
 
1075
#ifdef PNG_SETJMP_SUPPORTED
 
1076
   jmp_buf jmpbuf;            /* used in png_error */
 
1077
#endif
 
1078
   png_error_ptr error_fn;    /* function for printing errors and aborting */
 
1079
   png_error_ptr warning_fn;  /* function for printing warnings */
 
1080
   png_voidp error_ptr;       /* user supplied struct for error functions */
 
1081
   png_rw_ptr write_data_fn;  /* function for writing output data */
 
1082
   png_rw_ptr read_data_fn;   /* function for reading input data */
 
1083
   png_voidp io_ptr;          /* ptr to application struct for I/O functions */
 
1084
 
 
1085
#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED)
 
1086
   png_user_transform_ptr read_user_transform_fn; /* user read transform */
 
1087
#endif
 
1088
 
 
1089
#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
 
1090
   png_user_transform_ptr write_user_transform_fn; /* user write transform */
 
1091
#endif
 
1092
 
 
1093
/* These were added in libpng-1.0.2 */
 
1094
#if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)
 
1095
#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
 
1096
    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
 
1097
   png_voidp user_transform_ptr; /* user supplied struct for user transform */
 
1098
   png_byte user_transform_depth;    /* bit depth of user transformed pixels */
 
1099
   png_byte user_transform_channels; /* channels in user transformed pixels */
 
1100
#endif
 
1101
#endif
 
1102
 
 
1103
   png_uint_32 mode;          /* tells us where we are in the PNG file */
 
1104
   png_uint_32 flags;         /* flags indicating various things to libpng */
 
1105
   png_uint_32 transformations; /* which transformations to perform */
 
1106
 
 
1107
   z_stream zstream;          /* pointer to decompression structure (below) */
 
1108
   png_bytep zbuf;            /* buffer for zlib */
 
1109
   png_size_t zbuf_size;      /* size of zbuf */
 
1110
   int zlib_level;            /* holds zlib compression level */
 
1111
   int zlib_method;           /* holds zlib compression method */
 
1112
   int zlib_window_bits;      /* holds zlib compression window bits */
 
1113
   int zlib_mem_level;        /* holds zlib compression memory level */
 
1114
   int zlib_strategy;         /* holds zlib compression strategy */
 
1115
 
 
1116
   png_uint_32 width;         /* width of image in pixels */
 
1117
   png_uint_32 height;        /* height of image in pixels */
 
1118
   png_uint_32 num_rows;      /* number of rows in current pass */
 
1119
   png_uint_32 usr_width;     /* width of row at start of write */
 
1120
   png_uint_32 rowbytes;      /* size of row in bytes */
 
1121
   png_uint_32 irowbytes;     /* size of current interlaced row in bytes */
 
1122
   png_uint_32 iwidth;        /* width of current interlaced row in pixels */
 
1123
   png_uint_32 row_number;    /* current row in interlace pass */
 
1124
   png_bytep prev_row;        /* buffer to save previous (unfiltered) row */
 
1125
   png_bytep row_buf;         /* buffer to save current (unfiltered) row */
 
1126
   png_bytep sub_row;         /* buffer to save "sub" row when filtering */
 
1127
   png_bytep up_row;          /* buffer to save "up" row when filtering */
 
1128
   png_bytep avg_row;         /* buffer to save "avg" row when filtering */
 
1129
   png_bytep paeth_row;       /* buffer to save "Paeth" row when filtering */
 
1130
   png_row_info row_info;     /* used for transformation routines */
 
1131
 
 
1132
   png_uint_32 idat_size;     /* current IDAT size for read */
 
1133
   png_uint_32 crc;           /* current chunk CRC value */
 
1134
   png_colorp palette;        /* palette from the input file */
 
1135
   png_uint_16 num_palette;   /* number of color entries in palette */
 
1136
   png_uint_16 num_trans;     /* number of transparency values */
 
1137
   png_byte chunk_name[5];    /* null-terminated name of current chunk */
 
1138
   png_byte compression;      /* file compression type (always 0) */
 
1139
   png_byte filter;           /* file filter type (always 0) */
 
1140
   png_byte interlaced;       /* PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
 
1141
   png_byte pass;             /* current interlace pass (0 - 6) */
 
1142
   png_byte do_filter;        /* row filter flags (see PNG_FILTER_ below ) */
 
1143
   png_byte color_type;       /* color type of file */
 
1144
   png_byte bit_depth;        /* bit depth of file */
 
1145
   png_byte usr_bit_depth;    /* bit depth of users row */
 
1146
   png_byte pixel_depth;      /* number of bits per pixel */
 
1147
   png_byte channels;         /* number of channels in file */
 
1148
   png_byte usr_channels;     /* channels at start of write */
 
1149
   png_byte sig_bytes;        /* magic bytes read/written from start of file */
 
1150
 
 
1151
#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
 
1152
#ifdef PNG_LEGACY_SUPPORTED
 
1153
   png_byte filler;           /* filler byte for pixel expansion */
 
1154
#else
 
1155
   png_uint_16 filler;           /* filler bytes for pixel expansion */
 
1156
#endif
 
1157
#endif
 
1158
 
 
1159
#if defined(PNG_bKGD_SUPPORTED)
 
1160
   png_byte background_gamma_type;
 
1161
#  ifdef PNG_FLOATING_POINT_SUPPORTED
 
1162
   float background_gamma;
 
1163
#  endif
 
1164
   png_color_16 background;   /* background color in screen gamma space */
 
1165
#if defined(PNG_READ_GAMMA_SUPPORTED)
 
1166
   png_color_16 background_1; /* background normalized to gamma 1.0 */
 
1167
#endif
 
1168
#endif /* PNG_bKGD_SUPPORTED */
 
1169
 
 
1170
#if defined(PNG_WRITE_FLUSH_SUPPORTED)
 
1171
   png_flush_ptr output_flush_fn;/* Function for flushing output */
 
1172
   png_uint_32 flush_dist;    /* how many rows apart to flush, 0 - no flush */
 
1173
   png_uint_32 flush_rows;    /* number of rows written since last flush */
 
1174
#endif
 
1175
 
 
1176
#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
 
1177
   int gamma_shift;      /* number of "insignificant" bits 16-bit gamma */
 
1178
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
1179
   float gamma;          /* file gamma value */
 
1180
   float screen_gamma;   /* screen gamma value (display_exponent) */
 
1181
#endif
 
1182
#endif
 
1183
 
 
1184
#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
 
1185
   png_bytep gamma_table;     /* gamma table for 8-bit depth files */
 
1186
   png_bytep gamma_from_1;    /* converts from 1.0 to screen */
 
1187
   png_bytep gamma_to_1;      /* converts from file to 1.0 */
 
1188
   png_uint_16pp gamma_16_table; /* gamma table for 16-bit depth files */
 
1189
   png_uint_16pp gamma_16_from_1; /* converts from 1.0 to screen */
 
1190
   png_uint_16pp gamma_16_to_1; /* converts from file to 1.0 */
 
1191
#endif
 
1192
 
 
1193
#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_sBIT_SUPPORTED)
 
1194
   png_color_8 sig_bit;       /* significant bits in each available channel */
 
1195
#endif
 
1196
 
 
1197
#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
 
1198
   png_color_8 shift;         /* shift for significant bit tranformation */
 
1199
#endif
 
1200
 
 
1201
#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) \
 
1202
 || defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
 
1203
   png_bytep trans;           /* transparency values for paletted files */
 
1204
   png_color_16 trans_values; /* transparency values for non-paletted files */
 
1205
#endif
 
1206
 
 
1207
   png_read_status_ptr read_row_fn;   /* called after each row is decoded */
 
1208
   png_write_status_ptr write_row_fn; /* called after each row is encoded */
 
1209
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
 
1210
   png_progressive_info_ptr info_fn; /* called after header data fully read */
 
1211
   png_progressive_row_ptr row_fn;   /* called after each prog. row is decoded */
 
1212
   png_progressive_end_ptr end_fn;   /* called after image is complete */
 
1213
   png_bytep save_buffer_ptr;        /* current location in save_buffer */
 
1214
   png_bytep save_buffer;            /* buffer for previously read data */
 
1215
   png_bytep current_buffer_ptr;     /* current location in current_buffer */
 
1216
   png_bytep current_buffer;         /* buffer for recently used data */
 
1217
   png_uint_32 push_length;          /* size of current input chunk */
 
1218
   png_uint_32 skip_length;          /* bytes to skip in input data */
 
1219
   png_size_t save_buffer_size;      /* amount of data now in save_buffer */
 
1220
   png_size_t save_buffer_max;       /* total size of save_buffer */
 
1221
   png_size_t buffer_size;           /* total amount of available input data */
 
1222
   png_size_t current_buffer_size;   /* amount of data now in current_buffer */
 
1223
   int process_mode;                 /* what push library is currently doing */
 
1224
   int cur_palette;                  /* current push library palette index */
 
1225
 
 
1226
#  if defined(PNG_TEXT_SUPPORTED)
 
1227
     png_size_t current_text_size;   /* current size of text input data */
 
1228
     png_size_t current_text_left;   /* how much text left to read in input */
 
1229
     png_charp current_text;         /* current text chunk buffer */
 
1230
     png_charp current_text_ptr;     /* current location in current_text */
 
1231
#  endif /* PNG_PROGRESSIVE_READ_SUPPORTED && PNG_TEXT_SUPPORTED */
 
1232
 
 
1233
#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
 
1234
 
 
1235
#if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__)
 
1236
/* for the Borland special 64K segment handler */
 
1237
   png_bytepp offset_table_ptr;
 
1238
   png_bytep offset_table;
 
1239
   png_uint_16 offset_table_number;
 
1240
   png_uint_16 offset_table_count;
 
1241
   png_uint_16 offset_table_count_free;
 
1242
#endif
 
1243
 
 
1244
#if defined(PNG_READ_DITHER_SUPPORTED)
 
1245
   png_bytep palette_lookup;         /* lookup table for dithering */
 
1246
   png_bytep dither_index;           /* index translation for palette files */
 
1247
#endif
 
1248
 
 
1249
#if defined(PNG_READ_DITHER_SUPPORTED) || defined(PNG_hIST_SUPPORTED)
 
1250
   png_uint_16p hist;                /* histogram */
 
1251
#endif
 
1252
 
 
1253
#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED)
 
1254
   png_byte heuristic_method;        /* heuristic for row filter selection */
 
1255
   png_byte num_prev_filters;        /* number of weights for previous rows */
 
1256
   png_bytep prev_filters;           /* filter type(s) of previous row(s) */
 
1257
   png_uint_16p filter_weights;      /* weight(s) for previous line(s) */
 
1258
   png_uint_16p inv_filter_weights;  /* 1/weight(s) for previous line(s) */
 
1259
   png_uint_16p filter_costs;        /* relative filter calculation cost */
 
1260
   png_uint_16p inv_filter_costs;    /* 1/relative filter calculation cost */
 
1261
#endif
 
1262
 
 
1263
#if defined(PNG_TIME_RFC1123_SUPPORTED)
 
1264
   png_charp time_buffer;            /* String to hold RFC 1123 time text */
 
1265
#endif
 
1266
 
 
1267
/* New members added in libpng-1.0.6 */
 
1268
 
 
1269
#ifdef PNG_FREE_ME_SUPPORTED
 
1270
   png_uint_32 free_me;       /* flags items libpng is responsible for freeing */
 
1271
#endif
 
1272
 
 
1273
#if defined(PNG_USER_CHUNKS_SUPPORTED)
 
1274
   png_voidp user_chunk_ptr;
 
1275
   png_user_chunk_ptr read_user_chunk_fn; /* user read chunk handler */
 
1276
#endif
 
1277
 
 
1278
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
 
1279
   int num_chunk_list;
 
1280
   png_bytep chunk_list;
 
1281
#endif
 
1282
 
 
1283
/* New members added in libpng-1.0.3 */
 
1284
#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
 
1285
   png_byte rgb_to_gray_status;
 
1286
   /* These were changed from png_byte in libpng-1.0.6 */
 
1287
   png_uint_16 rgb_to_gray_red_coeff;
 
1288
   png_uint_16 rgb_to_gray_green_coeff;
 
1289
   png_uint_16 rgb_to_gray_blue_coeff;
 
1290
#endif
 
1291
 
 
1292
/* New member added in libpng-1.0.4 (renamed in 1.0.9) */
 
1293
#if defined(PNG_MNG_FEATURES_SUPPORTED) || \
 
1294
    defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \
 
1295
    defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED)
 
1296
/* changed from png_byte to png_uint_32 at version 1.2.0 */
 
1297
#ifdef PNG_1_0_X
 
1298
   png_byte mng_features_permitted;
 
1299
#else
 
1300
   png_uint_32 mng_features_permitted;
 
1301
#endif /* PNG_1_0_X */
 
1302
#endif
 
1303
 
 
1304
/* New member added in libpng-1.0.7 */
 
1305
#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
 
1306
   png_fixed_point int_gamma;
 
1307
#endif
 
1308
 
 
1309
/* New member added in libpng-1.0.9, ifdef'ed out in 1.0.12, enabled in 1.2.0 */
 
1310
#if defined(PNG_MNG_FEATURES_SUPPORTED)
 
1311
   png_byte filter_type;
 
1312
#endif
 
1313
 
 
1314
#if defined(PNG_1_0_X) || (defined(PNG_DEBUG) && defined(PNG_USE_PNGGCCRD))
 
1315
/* New member added in libpng-1.0.10, ifdef'ed out in 1.2.0 */
 
1316
   png_uint_32 row_buf_size;
 
1317
#endif
 
1318
 
 
1319
/* New members added in libpng-1.2.0 */
 
1320
#if !defined(PNG_1_0_X) && defined(PNG_ASSEMBLER_CODE_SUPPORTED)
 
1321
   png_byte     mmx_bitdepth_threshold;
 
1322
   png_uint_32  mmx_rowbytes_threshold;
 
1323
   png_uint_32  asm_flags;
 
1324
#endif
 
1325
 
 
1326
/* New members added in libpng-1.0.2 but first enabled by default in 1.2.0 */
 
1327
#ifdef PNG_USER_MEM_SUPPORTED
 
1328
   png_voidp mem_ptr;                /* user supplied struct for mem functions */
 
1329
   png_malloc_ptr malloc_fn;         /* function for allocating memory */
 
1330
   png_free_ptr free_fn;             /* function for freeing memory */
 
1331
#endif
 
1332
 
 
1333
/* New member added in libpng-1.0.13 and 1.2.0 */
 
1334
   png_bytep big_row_buf;         /* buffer to save current (unfiltered) row */
 
1335
 
 
1336
#if defined(PNG_READ_DITHER_SUPPORTED)
 
1337
/* The following three members were added at version 1.0.14 and 1.2.4 */
 
1338
   png_bytep dither_sort;            /* working sort array */
 
1339
   png_bytep index_to_palette;       /* where the original index currently is */
 
1340
                                     /* in the palette */
 
1341
   png_bytep palette_to_index;       /* which original index points to this */
 
1342
                                     /* palette color */
 
1343
#endif
 
1344
 
 
1345
/* New members added in libpng-1.0.16 and 1.2.6 */
 
1346
   png_byte compression_type;
 
1347
 
 
1348
#ifdef PNG_SET_USER_LIMITS_SUPPORTED
 
1349
   png_uint_32 user_width_max;
 
1350
   png_uint_32 user_height_max;
 
1351
#endif
 
1352
 
 
1353
};
 
1354
 
 
1355
 
 
1356
/* This triggers a compiler error in png.c, if png.c and png.h
 
1357
 * do not agree upon the version number.
 
1358
 */
 
1359
typedef png_structp version_1_2_8;
 
1360
 
 
1361
typedef png_struct FAR * FAR * png_structpp;
 
1362
 
 
1363
/* Here are the function definitions most commonly used.  This is not
 
1364
 * the place to find out how to use libpng.  See libpng.txt for the
 
1365
 * full explanation, see example.c for the summary.  This just provides
 
1366
 * a simple one line description of the use of each function.
 
1367
 */
 
1368
 
 
1369
/* Returns the version number of the library */
 
1370
extern PNG_EXPORT(png_uint_32,png_access_version_number) PNGARG((void));
 
1371
 
 
1372
/* Tell lib we have already handled the first <num_bytes> magic bytes.
 
1373
 * Handling more than 8 bytes from the beginning of the file is an error.
 
1374
 */
 
1375
extern PNG_EXPORT(void,png_set_sig_bytes) PNGARG((png_structp png_ptr,
 
1376
   int num_bytes));
 
1377
 
 
1378
/* Check sig[start] through sig[start + num_to_check - 1] to see if it's a
 
1379
 * PNG file.  Returns zero if the supplied bytes match the 8-byte PNG
 
1380
 * signature, and non-zero otherwise.  Having num_to_check == 0 or
 
1381
 * start > 7 will always fail (ie return non-zero).
 
1382
 */
 
1383
extern PNG_EXPORT(int,png_sig_cmp) PNGARG((png_bytep sig, png_size_t start,
 
1384
   png_size_t num_to_check));
 
1385
 
 
1386
/* Simple signature checking function.  This is the same as calling
 
1387
 * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n).
 
1388
 */
 
1389
extern PNG_EXPORT(int,png_check_sig) PNGARG((png_bytep sig, int num));
 
1390
 
 
1391
/* Allocate and initialize png_ptr struct for reading, and any other memory. */
 
1392
extern PNG_EXPORT(png_structp,png_create_read_struct)
 
1393
   PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
 
1394
   png_error_ptr error_fn, png_error_ptr warn_fn));
 
1395
 
 
1396
/* Allocate and initialize png_ptr struct for writing, and any other memory */
 
1397
extern PNG_EXPORT(png_structp,png_create_write_struct)
 
1398
   PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
 
1399
   png_error_ptr error_fn, png_error_ptr warn_fn));
 
1400
 
 
1401
#ifdef PNG_WRITE_SUPPORTED
 
1402
extern PNG_EXPORT(png_uint_32,png_get_compression_buffer_size)
 
1403
   PNGARG((png_structp png_ptr));
 
1404
#endif
 
1405
 
 
1406
#ifdef PNG_WRITE_SUPPORTED
 
1407
extern PNG_EXPORT(void,png_set_compression_buffer_size)
 
1408
   PNGARG((png_structp png_ptr, png_uint_32 size));
 
1409
#endif
 
1410
 
 
1411
/* Reset the compression stream */
 
1412
extern PNG_EXPORT(int,png_reset_zstream) PNGARG((png_structp png_ptr));
 
1413
 
 
1414
/* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */
 
1415
#ifdef PNG_USER_MEM_SUPPORTED
 
1416
extern PNG_EXPORT(png_structp,png_create_read_struct_2)
 
1417
   PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
 
1418
   png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr,
 
1419
   png_malloc_ptr malloc_fn, png_free_ptr free_fn));
 
1420
extern PNG_EXPORT(png_structp,png_create_write_struct_2)
 
1421
   PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
 
1422
   png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr,
 
1423
   png_malloc_ptr malloc_fn, png_free_ptr free_fn));
 
1424
#endif
 
1425
 
 
1426
/* Write a PNG chunk - size, type, (optional) data, CRC. */
 
1427
extern PNG_EXPORT(void,png_write_chunk) PNGARG((png_structp png_ptr,
 
1428
   png_bytep chunk_name, png_bytep data, png_size_t length));
 
1429
 
 
1430
/* Write the start of a PNG chunk - length and chunk name. */
 
1431
extern PNG_EXPORT(void,png_write_chunk_start) PNGARG((png_structp png_ptr,
 
1432
   png_bytep chunk_name, png_uint_32 length));
 
1433
 
 
1434
/* Write the data of a PNG chunk started with png_write_chunk_start(). */
 
1435
extern PNG_EXPORT(void,png_write_chunk_data) PNGARG((png_structp png_ptr,
 
1436
   png_bytep data, png_size_t length));
 
1437
 
 
1438
/* Finish a chunk started with png_write_chunk_start() (includes CRC). */
 
1439
extern PNG_EXPORT(void,png_write_chunk_end) PNGARG((png_structp png_ptr));
 
1440
 
 
1441
/* Allocate and initialize the info structure */
 
1442
extern PNG_EXPORT(png_infop,png_create_info_struct)
 
1443
   PNGARG((png_structp png_ptr));
 
1444
 
 
1445
/* Initialize the info structure (old interface - DEPRECATED) */
 
1446
extern PNG_EXPORT(void,png_info_init) PNGARG((png_infop info_ptr));
 
1447
#undef png_info_init
 
1448
#define png_info_init(info_ptr) png_info_init_3(&info_ptr,\
 
1449
    png_sizeof(png_info));
 
1450
extern PNG_EXPORT(void,png_info_init_3) PNGARG((png_infopp info_ptr,
 
1451
    png_size_t png_info_struct_size));
 
1452
 
 
1453
/* Writes all the PNG information before the image. */
 
1454
extern PNG_EXPORT(void,png_write_info_before_PLTE) PNGARG((png_structp png_ptr,
 
1455
   png_infop info_ptr));
 
1456
extern PNG_EXPORT(void,png_write_info) PNGARG((png_structp png_ptr,
 
1457
   png_infop info_ptr));
 
1458
 
 
1459
#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
 
1460
/* read the information before the actual image data. */
 
1461
extern PNG_EXPORT(void,png_read_info) PNGARG((png_structp png_ptr,
 
1462
   png_infop info_ptr));
 
1463
#endif
 
1464
 
 
1465
#if defined(PNG_TIME_RFC1123_SUPPORTED)
 
1466
extern PNG_EXPORT(png_charp,png_convert_to_rfc1123)
 
1467
   PNGARG((png_structp png_ptr, png_timep ptime));
 
1468
#endif
 
1469
 
 
1470
#if !defined(_WIN32_WCE)
 
1471
/* "time.h" functions are not supported on WindowsCE */
 
1472
#if defined(PNG_WRITE_tIME_SUPPORTED)
 
1473
/* convert from a struct tm to png_time */
 
1474
extern PNG_EXPORT(void,png_convert_from_struct_tm) PNGARG((png_timep ptime,
 
1475
   struct tm FAR * ttime));
 
1476
 
 
1477
/* convert from time_t to png_time.  Uses gmtime() */
 
1478
extern PNG_EXPORT(void,png_convert_from_time_t) PNGARG((png_timep ptime,
 
1479
   time_t ttime));
 
1480
#endif /* PNG_WRITE_tIME_SUPPORTED */
 
1481
#endif /* _WIN32_WCE */
 
1482
 
 
1483
#if defined(PNG_READ_EXPAND_SUPPORTED)
 
1484
/* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */
 
1485
extern PNG_EXPORT(void,png_set_expand) PNGARG((png_structp png_ptr));
 
1486
extern PNG_EXPORT(void,png_set_gray_1_2_4_to_8) PNGARG((png_structp png_ptr));
 
1487
extern PNG_EXPORT(void,png_set_palette_to_rgb) PNGARG((png_structp png_ptr));
 
1488
extern PNG_EXPORT(void,png_set_tRNS_to_alpha) PNGARG((png_structp png_ptr));
 
1489
#endif
 
1490
 
 
1491
#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
 
1492
/* Use blue, green, red order for pixels. */
 
1493
extern PNG_EXPORT(void,png_set_bgr) PNGARG((png_structp png_ptr));
 
1494
#endif
 
1495
 
 
1496
#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)
 
1497
/* Expand the grayscale to 24-bit RGB if necessary. */
 
1498
extern PNG_EXPORT(void,png_set_gray_to_rgb) PNGARG((png_structp png_ptr));
 
1499
#endif
 
1500
 
 
1501
#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
 
1502
/* Reduce RGB to grayscale. */
 
1503
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
1504
extern PNG_EXPORT(void,png_set_rgb_to_gray) PNGARG((png_structp png_ptr,
 
1505
   int error_action, double red, double green ));
 
1506
#endif
 
1507
extern PNG_EXPORT(void,png_set_rgb_to_gray_fixed) PNGARG((png_structp png_ptr,
 
1508
   int error_action, png_fixed_point red, png_fixed_point green ));
 
1509
extern PNG_EXPORT(png_byte,png_get_rgb_to_gray_status) PNGARG((png_structp
 
1510
   png_ptr));
 
1511
#endif
 
1512
 
 
1513
extern PNG_EXPORT(void,png_build_grayscale_palette) PNGARG((int bit_depth,
 
1514
   png_colorp palette));
 
1515
 
 
1516
#if defined(PNG_READ_STRIP_ALPHA_SUPPORTED)
 
1517
extern PNG_EXPORT(void,png_set_strip_alpha) PNGARG((png_structp png_ptr));
 
1518
#endif
 
1519
 
 
1520
#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \
 
1521
    defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)
 
1522
extern PNG_EXPORT(void,png_set_swap_alpha) PNGARG((png_structp png_ptr));
 
1523
#endif
 
1524
 
 
1525
#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \
 
1526
    defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
 
1527
extern PNG_EXPORT(void,png_set_invert_alpha) PNGARG((png_structp png_ptr));
 
1528
#endif
 
1529
 
 
1530
#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
 
1531
/* Add a filler byte to 8-bit Gray or 24-bit RGB images. */
 
1532
extern PNG_EXPORT(void,png_set_filler) PNGARG((png_structp png_ptr,
 
1533
   png_uint_32 filler, int flags));
 
1534
/* The values of the PNG_FILLER_ defines should NOT be changed */
 
1535
#define PNG_FILLER_BEFORE 0
 
1536
#define PNG_FILLER_AFTER 1
 
1537
/* Add an alpha byte to 8-bit Gray or 24-bit RGB images. */
 
1538
#if !defined(PNG_1_0_X)
 
1539
extern PNG_EXPORT(void,png_set_add_alpha) PNGARG((png_structp png_ptr,
 
1540
   png_uint_32 filler, int flags));
 
1541
#endif
 
1542
#endif /* PNG_READ_FILLER_SUPPORTED || PNG_WRITE_FILLER_SUPPORTED */
 
1543
 
 
1544
#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
 
1545
/* Swap bytes in 16-bit depth files. */
 
1546
extern PNG_EXPORT(void,png_set_swap) PNGARG((png_structp png_ptr));
 
1547
#endif
 
1548
 
 
1549
#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
 
1550
/* Use 1 byte per pixel in 1, 2, or 4-bit depth files. */
 
1551
extern PNG_EXPORT(void,png_set_packing) PNGARG((png_structp png_ptr));
 
1552
#endif
 
1553
 
 
1554
#if defined(PNG_READ_PACKSWAP_SUPPORTED) || defined(PNG_WRITE_PACKSWAP_SUPPORTED)
 
1555
/* Swap packing order of pixels in bytes. */
 
1556
extern PNG_EXPORT(void,png_set_packswap) PNGARG((png_structp png_ptr));
 
1557
#endif
 
1558
 
 
1559
#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
 
1560
/* Converts files to legal bit depths. */
 
1561
extern PNG_EXPORT(void,png_set_shift) PNGARG((png_structp png_ptr,
 
1562
   png_color_8p true_bits));
 
1563
#endif
 
1564
 
 
1565
#if defined(PNG_READ_INTERLACING_SUPPORTED) || \
 
1566
    defined(PNG_WRITE_INTERLACING_SUPPORTED)
 
1567
/* Have the code handle the interlacing.  Returns the number of passes. */
 
1568
extern PNG_EXPORT(int,png_set_interlace_handling) PNGARG((png_structp png_ptr));
 
1569
#endif
 
1570
 
 
1571
#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED)
 
1572
/* Invert monochrome files */
 
1573
extern PNG_EXPORT(void,png_set_invert_mono) PNGARG((png_structp png_ptr));
 
1574
#endif
 
1575
 
 
1576
#if defined(PNG_READ_BACKGROUND_SUPPORTED)
 
1577
/* Handle alpha and tRNS by replacing with a background color. */
 
1578
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
1579
extern PNG_EXPORT(void,png_set_background) PNGARG((png_structp png_ptr,
 
1580
   png_color_16p background_color, int background_gamma_code,
 
1581
   int need_expand, double background_gamma));
 
1582
#endif
 
1583
#define PNG_BACKGROUND_GAMMA_UNKNOWN 0
 
1584
#define PNG_BACKGROUND_GAMMA_SCREEN  1
 
1585
#define PNG_BACKGROUND_GAMMA_FILE    2
 
1586
#define PNG_BACKGROUND_GAMMA_UNIQUE  3
 
1587
#endif
 
1588
 
 
1589
#if defined(PNG_READ_16_TO_8_SUPPORTED)
 
1590
/* strip the second byte of information from a 16-bit depth file. */
 
1591
extern PNG_EXPORT(void,png_set_strip_16) PNGARG((png_structp png_ptr));
 
1592
#endif
 
1593
 
 
1594
#if defined(PNG_READ_DITHER_SUPPORTED)
 
1595
/* Turn on dithering, and reduce the palette to the number of colors available. */
 
1596
extern PNG_EXPORT(void,png_set_dither) PNGARG((png_structp png_ptr,
 
1597
   png_colorp palette, int num_palette, int maximum_colors,
 
1598
   png_uint_16p histogram, int full_dither));
 
1599
#endif
 
1600
 
 
1601
#if defined(PNG_READ_GAMMA_SUPPORTED)
 
1602
/* Handle gamma correction. Screen_gamma=(display_exponent) */
 
1603
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
1604
extern PNG_EXPORT(void,png_set_gamma) PNGARG((png_structp png_ptr,
 
1605
   double screen_gamma, double default_file_gamma));
 
1606
#endif
 
1607
#endif
 
1608
 
 
1609
#if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \
 
1610
    defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED)
 
1611
/* Permit or disallow empty PLTE (0: not permitted, 1: permitted) */
 
1612
/* Deprecated and will be removed.  Use png_permit_mng_features() instead. */
 
1613
extern PNG_EXPORT(void,png_permit_empty_plte) PNGARG((png_structp png_ptr,
 
1614
   int empty_plte_permitted));
 
1615
#endif
 
1616
 
 
1617
#if defined(PNG_WRITE_FLUSH_SUPPORTED)
 
1618
/* Set how many lines between output flushes - 0 for no flushing */
 
1619
extern PNG_EXPORT(void,png_set_flush) PNGARG((png_structp png_ptr, int nrows));
 
1620
/* Flush the current PNG output buffer */
 
1621
extern PNG_EXPORT(void,png_write_flush) PNGARG((png_structp png_ptr));
 
1622
#endif
 
1623
 
 
1624
/* optional update palette with requested transformations */
 
1625
extern PNG_EXPORT(void,png_start_read_image) PNGARG((png_structp png_ptr));
 
1626
 
 
1627
/* optional call to update the users info structure */
 
1628
extern PNG_EXPORT(void,png_read_update_info) PNGARG((png_structp png_ptr,
 
1629
   png_infop info_ptr));
 
1630
 
 
1631
#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
 
1632
/* read one or more rows of image data. */
 
1633
extern PNG_EXPORT(void,png_read_rows) PNGARG((png_structp png_ptr,
 
1634
   png_bytepp row, png_bytepp display_row, png_uint_32 num_rows));
 
1635
#endif
 
1636
 
 
1637
#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
 
1638
/* read a row of data. */
 
1639
extern PNG_EXPORT(void,png_read_row) PNGARG((png_structp png_ptr,
 
1640
   png_bytep row,
 
1641
   png_bytep display_row));
 
1642
#endif
 
1643
 
 
1644
#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
 
1645
/* read the whole image into memory at once. */
 
1646
extern PNG_EXPORT(void,png_read_image) PNGARG((png_structp png_ptr,
 
1647
   png_bytepp image));
 
1648
#endif
 
1649
 
 
1650
/* write a row of image data */
 
1651
extern PNG_EXPORT(void,png_write_row) PNGARG((png_structp png_ptr,
 
1652
   png_bytep row));
 
1653
 
 
1654
/* write a few rows of image data */
 
1655
extern PNG_EXPORT(void,png_write_rows) PNGARG((png_structp png_ptr,
 
1656
   png_bytepp row, png_uint_32 num_rows));
 
1657
 
 
1658
/* write the image data */
 
1659
extern PNG_EXPORT(void,png_write_image) PNGARG((png_structp png_ptr,
 
1660
   png_bytepp image));
 
1661
 
 
1662
/* writes the end of the PNG file. */
 
1663
extern PNG_EXPORT(void,png_write_end) PNGARG((png_structp png_ptr,
 
1664
   png_infop info_ptr));
 
1665
 
 
1666
#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
 
1667
/* read the end of the PNG file. */
 
1668
extern PNG_EXPORT(void,png_read_end) PNGARG((png_structp png_ptr,
 
1669
   png_infop info_ptr));
 
1670
#endif
 
1671
 
 
1672
/* free any memory associated with the png_info_struct */
 
1673
extern PNG_EXPORT(void,png_destroy_info_struct) PNGARG((png_structp png_ptr,
 
1674
   png_infopp info_ptr_ptr));
 
1675
 
 
1676
/* free any memory associated with the png_struct and the png_info_structs */
 
1677
extern PNG_EXPORT(void,png_destroy_read_struct) PNGARG((png_structpp
 
1678
   png_ptr_ptr, png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr));
 
1679
 
 
1680
/* free all memory used by the read (old method - NOT DLL EXPORTED) */
 
1681
extern void png_read_destroy PNGARG((png_structp png_ptr, png_infop info_ptr,
 
1682
   png_infop end_info_ptr));
 
1683
 
 
1684
/* free any memory associated with the png_struct and the png_info_structs */
 
1685
extern PNG_EXPORT(void,png_destroy_write_struct)
 
1686
   PNGARG((png_structpp png_ptr_ptr, png_infopp info_ptr_ptr));
 
1687
 
 
1688
/* free any memory used in png_ptr struct (old method - NOT DLL EXPORTED) */
 
1689
extern void png_write_destroy PNGARG((png_structp png_ptr));
 
1690
 
 
1691
/* set the libpng method of handling chunk CRC errors */
 
1692
extern PNG_EXPORT(void,png_set_crc_action) PNGARG((png_structp png_ptr,
 
1693
   int crit_action, int ancil_action));
 
1694
 
 
1695
/* Values for png_set_crc_action() to say how to handle CRC errors in
 
1696
 * ancillary and critical chunks, and whether to use the data contained
 
1697
 * therein.  Note that it is impossible to "discard" data in a critical
 
1698
 * chunk.  For versions prior to 0.90, the action was always error/quit,
 
1699
 * whereas in version 0.90 and later, the action for CRC errors in ancillary
 
1700
 * chunks is warn/discard.  These values should NOT be changed.
 
1701
 *
 
1702
 *      value                       action:critical     action:ancillary
 
1703
 */
 
1704
#define PNG_CRC_DEFAULT       0  /* error/quit          warn/discard data */
 
1705
#define PNG_CRC_ERROR_QUIT    1  /* error/quit          error/quit        */
 
1706
#define PNG_CRC_WARN_DISCARD  2  /* (INVALID)           warn/discard data */
 
1707
#define PNG_CRC_WARN_USE      3  /* warn/use data       warn/use data     */
 
1708
#define PNG_CRC_QUIET_USE     4  /* quiet/use data      quiet/use data    */
 
1709
#define PNG_CRC_NO_CHANGE     5  /* use current value   use current value */
 
1710
 
 
1711
/* These functions give the user control over the scan-line filtering in
 
1712
 * libpng and the compression methods used by zlib.  These functions are
 
1713
 * mainly useful for testing, as the defaults should work with most users.
 
1714
 * Those users who are tight on memory or want faster performance at the
 
1715
 * expense of compression can modify them.  See the compression library
 
1716
 * header file (zlib.h) for an explination of the compression functions.
 
1717
 */
 
1718
 
 
1719
/* set the filtering method(s) used by libpng.  Currently, the only valid
 
1720
 * value for "method" is 0.
 
1721
 */
 
1722
extern PNG_EXPORT(void,png_set_filter) PNGARG((png_structp png_ptr, int method,
 
1723
   int filters));
 
1724
 
 
1725
/* Flags for png_set_filter() to say which filters to use.  The flags
 
1726
 * are chosen so that they don't conflict with real filter types
 
1727
 * below, in case they are supplied instead of the #defined constants.
 
1728
 * These values should NOT be changed.
 
1729
 */
 
1730
#define PNG_NO_FILTERS     0x00
 
1731
#define PNG_FILTER_NONE    0x08
 
1732
#define PNG_FILTER_SUB     0x10
 
1733
#define PNG_FILTER_UP      0x20
 
1734
#define PNG_FILTER_AVG     0x40
 
1735
#define PNG_FILTER_PAETH   0x80
 
1736
#define PNG_ALL_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP | \
 
1737
                         PNG_FILTER_AVG | PNG_FILTER_PAETH)
 
1738
 
 
1739
/* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now.
 
1740
 * These defines should NOT be changed.
 
1741
 */
 
1742
#define PNG_FILTER_VALUE_NONE  0
 
1743
#define PNG_FILTER_VALUE_SUB   1
 
1744
#define PNG_FILTER_VALUE_UP    2
 
1745
#define PNG_FILTER_VALUE_AVG   3
 
1746
#define PNG_FILTER_VALUE_PAETH 4
 
1747
#define PNG_FILTER_VALUE_LAST  5
 
1748
 
 
1749
#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) /* EXPERIMENTAL */
 
1750
/* The "heuristic_method" is given by one of the PNG_FILTER_HEURISTIC_
 
1751
 * defines, either the default (minimum-sum-of-absolute-differences), or
 
1752
 * the experimental method (weighted-minimum-sum-of-absolute-differences).
 
1753
 *
 
1754
 * Weights are factors >= 1.0, indicating how important it is to keep the
 
1755
 * filter type consistent between rows.  Larger numbers mean the current
 
1756
 * filter is that many times as likely to be the same as the "num_weights"
 
1757
 * previous filters.  This is cumulative for each previous row with a weight.
 
1758
 * There needs to be "num_weights" values in "filter_weights", or it can be
 
1759
 * NULL if the weights aren't being specified.  Weights have no influence on
 
1760
 * the selection of the first row filter.  Well chosen weights can (in theory)
 
1761
 * improve the compression for a given image.
 
1762
 *
 
1763
 * Costs are factors >= 1.0 indicating the relative decoding costs of a
 
1764
 * filter type.  Higher costs indicate more decoding expense, and are
 
1765
 * therefore less likely to be selected over a filter with lower computational
 
1766
 * costs.  There needs to be a value in "filter_costs" for each valid filter
 
1767
 * type (given by PNG_FILTER_VALUE_LAST), or it can be NULL if you aren't
 
1768
 * setting the costs.  Costs try to improve the speed of decompression without
 
1769
 * unduly increasing the compressed image size.
 
1770
 *
 
1771
 * A negative weight or cost indicates the default value is to be used, and
 
1772
 * values in the range [0.0, 1.0) indicate the value is to remain unchanged.
 
1773
 * The default values for both weights and costs are currently 1.0, but may
 
1774
 * change if good general weighting/cost heuristics can be found.  If both
 
1775
 * the weights and costs are set to 1.0, this degenerates the WEIGHTED method
 
1776
 * to the UNWEIGHTED method, but with added encoding time/computation.
 
1777
 */
 
1778
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
1779
extern PNG_EXPORT(void,png_set_filter_heuristics) PNGARG((png_structp png_ptr,
 
1780
   int heuristic_method, int num_weights, png_doublep filter_weights,
 
1781
   png_doublep filter_costs));
 
1782
#endif
 
1783
#endif /*  PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */
 
1784
 
 
1785
/* Heuristic used for row filter selection.  These defines should NOT be
 
1786
 * changed.
 
1787
 */
 
1788
#define PNG_FILTER_HEURISTIC_DEFAULT    0  /* Currently "UNWEIGHTED" */
 
1789
#define PNG_FILTER_HEURISTIC_UNWEIGHTED 1  /* Used by libpng < 0.95 */
 
1790
#define PNG_FILTER_HEURISTIC_WEIGHTED   2  /* Experimental feature */
 
1791
#define PNG_FILTER_HEURISTIC_LAST       3  /* Not a valid value */
 
1792
 
 
1793
/* Set the library compression level.  Currently, valid values range from
 
1794
 * 0 - 9, corresponding directly to the zlib compression levels 0 - 9
 
1795
 * (0 - no compression, 9 - "maximal" compression).  Note that tests have
 
1796
 * shown that zlib compression levels 3-6 usually perform as well as level 9
 
1797
 * for PNG images, and do considerably fewer caclulations.  In the future,
 
1798
 * these values may not correspond directly to the zlib compression levels.
 
1799
 */
 
1800
extern PNG_EXPORT(void,png_set_compression_level) PNGARG((png_structp png_ptr,
 
1801
   int level));
 
1802
 
 
1803
extern PNG_EXPORT(void,png_set_compression_mem_level)
 
1804
   PNGARG((png_structp png_ptr, int mem_level));
 
1805
 
 
1806
extern PNG_EXPORT(void,png_set_compression_strategy)
 
1807
   PNGARG((png_structp png_ptr, int strategy));
 
1808
 
 
1809
extern PNG_EXPORT(void,png_set_compression_window_bits)
 
1810
   PNGARG((png_structp png_ptr, int window_bits));
 
1811
 
 
1812
extern PNG_EXPORT(void,png_set_compression_method) PNGARG((png_structp png_ptr,
 
1813
   int method));
 
1814
 
 
1815
/* These next functions are called for input/output, memory, and error
 
1816
 * handling.  They are in the file pngrio.c, pngwio.c, and pngerror.c,
 
1817
 * and call standard C I/O routines such as fread(), fwrite(), and
 
1818
 * fprintf().  These functions can be made to use other I/O routines
 
1819
 * at run time for those applications that need to handle I/O in a
 
1820
 * different manner by calling png_set_???_fn().  See libpng.txt for
 
1821
 * more information.
 
1822
 */
 
1823
 
 
1824
#if !defined(PNG_NO_STDIO)
 
1825
/* Initialize the input/output for the PNG file to the default functions. */
 
1826
extern PNG_EXPORT(void,png_init_io) PNGARG((png_structp png_ptr, png_FILE_p fp));
 
1827
#endif
 
1828
 
 
1829
/* Replace the (error and abort), and warning functions with user
 
1830
 * supplied functions.  If no messages are to be printed you must still
 
1831
 * write and use replacement functions. The replacement error_fn should
 
1832
 * still do a longjmp to the last setjmp location if you are using this
 
1833
 * method of error handling.  If error_fn or warning_fn is NULL, the
 
1834
 * default function will be used.
 
1835
 */
 
1836
 
 
1837
extern PNG_EXPORT(void,png_set_error_fn) PNGARG((png_structp png_ptr,
 
1838
   png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn));
 
1839
 
 
1840
/* Return the user pointer associated with the error functions */
 
1841
extern PNG_EXPORT(png_voidp,png_get_error_ptr) PNGARG((png_structp png_ptr));
 
1842
 
 
1843
/* Replace the default data output functions with a user supplied one(s).
 
1844
 * If buffered output is not used, then output_flush_fn can be set to NULL.
 
1845
 * If PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time
 
1846
 * output_flush_fn will be ignored (and thus can be NULL).
 
1847
 */
 
1848
extern PNG_EXPORT(void,png_set_write_fn) PNGARG((png_structp png_ptr,
 
1849
   png_voidp io_ptr, png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn));
 
1850
 
 
1851
/* Replace the default data input function with a user supplied one. */
 
1852
extern PNG_EXPORT(void,png_set_read_fn) PNGARG((png_structp png_ptr,
 
1853
   png_voidp io_ptr, png_rw_ptr read_data_fn));
 
1854
 
 
1855
/* Return the user pointer associated with the I/O functions */
 
1856
extern PNG_EXPORT(png_voidp,png_get_io_ptr) PNGARG((png_structp png_ptr));
 
1857
 
 
1858
extern PNG_EXPORT(void,png_set_read_status_fn) PNGARG((png_structp png_ptr,
 
1859
   png_read_status_ptr read_row_fn));
 
1860
 
 
1861
extern PNG_EXPORT(void,png_set_write_status_fn) PNGARG((png_structp png_ptr,
 
1862
   png_write_status_ptr write_row_fn));
 
1863
 
 
1864
#ifdef PNG_USER_MEM_SUPPORTED
 
1865
/* Replace the default memory allocation functions with user supplied one(s). */
 
1866
extern PNG_EXPORT(void,png_set_mem_fn) PNGARG((png_structp png_ptr,
 
1867
   png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn));
 
1868
/* Return the user pointer associated with the memory functions */
 
1869
extern PNG_EXPORT(png_voidp,png_get_mem_ptr) PNGARG((png_structp png_ptr));
 
1870
#endif
 
1871
 
 
1872
#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
 
1873
    defined(PNG_LEGACY_SUPPORTED)
 
1874
extern PNG_EXPORT(void,png_set_read_user_transform_fn) PNGARG((png_structp
 
1875
   png_ptr, png_user_transform_ptr read_user_transform_fn));
 
1876
#endif
 
1877
 
 
1878
#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \
 
1879
    defined(PNG_LEGACY_SUPPORTED)
 
1880
extern PNG_EXPORT(void,png_set_write_user_transform_fn) PNGARG((png_structp
 
1881
   png_ptr, png_user_transform_ptr write_user_transform_fn));
 
1882
#endif
 
1883
 
 
1884
#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
 
1885
    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \
 
1886
    defined(PNG_LEGACY_SUPPORTED)
 
1887
extern PNG_EXPORT(void,png_set_user_transform_info) PNGARG((png_structp
 
1888
   png_ptr, png_voidp user_transform_ptr, int user_transform_depth,
 
1889
   int user_transform_channels));
 
1890
/* Return the user pointer associated with the user transform functions */
 
1891
extern PNG_EXPORT(png_voidp,png_get_user_transform_ptr)
 
1892
   PNGARG((png_structp png_ptr));
 
1893
#endif
 
1894
 
 
1895
#ifdef PNG_USER_CHUNKS_SUPPORTED
 
1896
extern PNG_EXPORT(void,png_set_read_user_chunk_fn) PNGARG((png_structp png_ptr,
 
1897
   png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn));
 
1898
extern PNG_EXPORT(png_voidp,png_get_user_chunk_ptr) PNGARG((png_structp
 
1899
   png_ptr));
 
1900
#endif
 
1901
 
 
1902
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
 
1903
/* Sets the function callbacks for the push reader, and a pointer to a
 
1904
 * user-defined structure available to the callback functions.
 
1905
 */
 
1906
extern PNG_EXPORT(void,png_set_progressive_read_fn) PNGARG((png_structp png_ptr,
 
1907
   png_voidp progressive_ptr,
 
1908
   png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn,
 
1909
   png_progressive_end_ptr end_fn));
 
1910
 
 
1911
/* returns the user pointer associated with the push read functions */
 
1912
extern PNG_EXPORT(png_voidp,png_get_progressive_ptr)
 
1913
   PNGARG((png_structp png_ptr));
 
1914
 
 
1915
/* function to be called when data becomes available */
 
1916
extern PNG_EXPORT(void,png_process_data) PNGARG((png_structp png_ptr,
 
1917
   png_infop info_ptr, png_bytep buffer, png_size_t buffer_size));
 
1918
 
 
1919
/* function that combines rows.  Not very much different than the
 
1920
 * png_combine_row() call.  Is this even used?????
 
1921
 */
 
1922
extern PNG_EXPORT(void,png_progressive_combine_row) PNGARG((png_structp png_ptr,
 
1923
   png_bytep old_row, png_bytep new_row));
 
1924
#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
 
1925
 
 
1926
extern PNG_EXPORT(png_voidp,png_malloc) PNGARG((png_structp png_ptr,
 
1927
   png_uint_32 size));
 
1928
 
 
1929
#if defined(PNG_1_0_X)
 
1930
#  define png_malloc_warn png_malloc
 
1931
#else
 
1932
/* Added at libpng version 1.2.4 */
 
1933
extern PNG_EXPORT(png_voidp,png_malloc_warn) PNGARG((png_structp png_ptr,
 
1934
   png_uint_32 size));
 
1935
#endif
 
1936
 
 
1937
/* frees a pointer allocated by png_malloc() */
 
1938
extern PNG_EXPORT(void,png_free) PNGARG((png_structp png_ptr, png_voidp ptr));
 
1939
 
 
1940
#if defined(PNG_1_0_X)
 
1941
/* Function to allocate memory for zlib. */
 
1942
extern PNG_EXPORT(voidpf,png_zalloc) PNGARG((voidpf png_ptr, uInt items,
 
1943
   uInt size));
 
1944
 
 
1945
/* Function to free memory for zlib */
 
1946
extern PNG_EXPORT(void,png_zfree) PNGARG((voidpf png_ptr, voidpf ptr));
 
1947
#endif
 
1948
 
 
1949
/* Free data that was allocated internally */
 
1950
extern PNG_EXPORT(void,png_free_data) PNGARG((png_structp png_ptr,
 
1951
   png_infop info_ptr, png_uint_32 free_me, int num));
 
1952
#ifdef PNG_FREE_ME_SUPPORTED
 
1953
/* Reassign responsibility for freeing existing data, whether allocated
 
1954
 * by libpng or by the application */
 
1955
extern PNG_EXPORT(void,png_data_freer) PNGARG((png_structp png_ptr,
 
1956
   png_infop info_ptr, int freer, png_uint_32 mask));
 
1957
#endif
 
1958
/* assignments for png_data_freer */
 
1959
#define PNG_DESTROY_WILL_FREE_DATA 1
 
1960
#define PNG_SET_WILL_FREE_DATA 1
 
1961
#define PNG_USER_WILL_FREE_DATA 2
 
1962
/* Flags for png_ptr->free_me and info_ptr->free_me */
 
1963
#define PNG_FREE_HIST 0x0008
 
1964
#define PNG_FREE_ICCP 0x0010
 
1965
#define PNG_FREE_SPLT 0x0020
 
1966
#define PNG_FREE_ROWS 0x0040
 
1967
#define PNG_FREE_PCAL 0x0080
 
1968
#define PNG_FREE_SCAL 0x0100
 
1969
#define PNG_FREE_UNKN 0x0200
 
1970
#define PNG_FREE_LIST 0x0400
 
1971
#define PNG_FREE_PLTE 0x1000
 
1972
#define PNG_FREE_TRNS 0x2000
 
1973
#define PNG_FREE_TEXT 0x4000
 
1974
#define PNG_FREE_ALL  0x7fff
 
1975
#define PNG_FREE_MUL  0x4220 /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */
 
1976
 
 
1977
#ifdef PNG_USER_MEM_SUPPORTED
 
1978
extern PNG_EXPORT(png_voidp,png_malloc_default) PNGARG((png_structp png_ptr,
 
1979
   png_uint_32 size));
 
1980
extern PNG_EXPORT(void,png_free_default) PNGARG((png_structp png_ptr,
 
1981
   png_voidp ptr));
 
1982
#endif
 
1983
 
 
1984
extern PNG_EXPORT(png_voidp,png_memcpy_check) PNGARG((png_structp png_ptr,
 
1985
   png_voidp s1, png_voidp s2, png_uint_32 size));
 
1986
 
 
1987
extern PNG_EXPORT(png_voidp,png_memset_check) PNGARG((png_structp png_ptr,
 
1988
   png_voidp s1, int value, png_uint_32 size));
 
1989
 
 
1990
#if defined(USE_FAR_KEYWORD)  /* memory model conversion function */
 
1991
extern void *png_far_to_near PNGARG((png_structp png_ptr,png_voidp ptr,
 
1992
   int check));
 
1993
#endif /* USE_FAR_KEYWORD */
 
1994
 
 
1995
/* Fatal error in PNG image of libpng - can't continue */
 
1996
extern PNG_EXPORT(void,png_error) PNGARG((png_structp png_ptr,
 
1997
   png_const_charp error_message));
 
1998
 
 
1999
/* The same, but the chunk name is prepended to the error string. */
 
2000
extern PNG_EXPORT(void,png_chunk_error) PNGARG((png_structp png_ptr,
 
2001
   png_const_charp error_message));
 
2002
 
 
2003
/* Non-fatal error in libpng.  Can continue, but may have a problem. */
 
2004
extern PNG_EXPORT(void,png_warning) PNGARG((png_structp png_ptr,
 
2005
   png_const_charp warning_message));
 
2006
 
 
2007
/* Non-fatal error in libpng, chunk name is prepended to message. */
 
2008
extern PNG_EXPORT(void,png_chunk_warning) PNGARG((png_structp png_ptr,
 
2009
   png_const_charp warning_message));
 
2010
 
 
2011
/* The png_set_<chunk> functions are for storing values in the png_info_struct.
 
2012
 * Similarly, the png_get_<chunk> calls are used to read values from the
 
2013
 * png_info_struct, either storing the parameters in the passed variables, or
 
2014
 * setting pointers into the png_info_struct where the data is stored.  The
 
2015
 * png_get_<chunk> functions return a non-zero value if the data was available
 
2016
 * in info_ptr, or return zero and do not change any of the parameters if the
 
2017
 * data was not available.
 
2018
 *
 
2019
 * These functions should be used instead of directly accessing png_info
 
2020
 * to avoid problems with future changes in the size and internal layout of
 
2021
 * png_info_struct.
 
2022
 */
 
2023
/* Returns "flag" if chunk data is valid in info_ptr. */
 
2024
extern PNG_EXPORT(png_uint_32,png_get_valid) PNGARG((png_structp png_ptr,
 
2025
png_infop info_ptr, png_uint_32 flag));
 
2026
 
 
2027
/* Returns number of bytes needed to hold a transformed row. */
 
2028
extern PNG_EXPORT(png_uint_32,png_get_rowbytes) PNGARG((png_structp png_ptr,
 
2029
png_infop info_ptr));
 
2030
 
 
2031
#if defined(PNG_INFO_IMAGE_SUPPORTED)
 
2032
/* Returns row_pointers, which is an array of pointers to scanlines that was
 
2033
returned from png_read_png(). */
 
2034
extern PNG_EXPORT(png_bytepp,png_get_rows) PNGARG((png_structp png_ptr,
 
2035
png_infop info_ptr));
 
2036
/* Set row_pointers, which is an array of pointers to scanlines for use
 
2037
by png_write_png(). */
 
2038
extern PNG_EXPORT(void,png_set_rows) PNGARG((png_structp png_ptr,
 
2039
   png_infop info_ptr, png_bytepp row_pointers));
 
2040
#endif
 
2041
 
 
2042
/* Returns number of color channels in image. */
 
2043
extern PNG_EXPORT(png_byte,png_get_channels) PNGARG((png_structp png_ptr,
 
2044
png_infop info_ptr));
 
2045
 
 
2046
#ifdef PNG_EASY_ACCESS_SUPPORTED
 
2047
/* Returns image width in pixels. */
 
2048
extern PNG_EXPORT(png_uint_32, png_get_image_width) PNGARG((png_structp
 
2049
png_ptr, png_infop info_ptr));
 
2050
 
 
2051
/* Returns image height in pixels. */
 
2052
extern PNG_EXPORT(png_uint_32, png_get_image_height) PNGARG((png_structp
 
2053
png_ptr, png_infop info_ptr));
 
2054
 
 
2055
/* Returns image bit_depth. */
 
2056
extern PNG_EXPORT(png_byte, png_get_bit_depth) PNGARG((png_structp
 
2057
png_ptr, png_infop info_ptr));
 
2058
 
 
2059
/* Returns image color_type. */
 
2060
extern PNG_EXPORT(png_byte, png_get_color_type) PNGARG((png_structp
 
2061
png_ptr, png_infop info_ptr));
 
2062
 
 
2063
/* Returns image filter_type. */
 
2064
extern PNG_EXPORT(png_byte, png_get_filter_type) PNGARG((png_structp
 
2065
png_ptr, png_infop info_ptr));
 
2066
 
 
2067
/* Returns image interlace_type. */
 
2068
extern PNG_EXPORT(png_byte, png_get_interlace_type) PNGARG((png_structp
 
2069
png_ptr, png_infop info_ptr));
 
2070
 
 
2071
/* Returns image compression_type. */
 
2072
extern PNG_EXPORT(png_byte, png_get_compression_type) PNGARG((png_structp
 
2073
png_ptr, png_infop info_ptr));
 
2074
 
 
2075
/* Returns image resolution in pixels per meter, from pHYs chunk data. */
 
2076
extern PNG_EXPORT(png_uint_32, png_get_pixels_per_meter) PNGARG((png_structp
 
2077
png_ptr, png_infop info_ptr));
 
2078
extern PNG_EXPORT(png_uint_32, png_get_x_pixels_per_meter) PNGARG((png_structp
 
2079
png_ptr, png_infop info_ptr));
 
2080
extern PNG_EXPORT(png_uint_32, png_get_y_pixels_per_meter) PNGARG((png_structp
 
2081
png_ptr, png_infop info_ptr));
 
2082
 
 
2083
/* Returns pixel aspect ratio, computed from pHYs chunk data.  */
 
2084
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
2085
extern PNG_EXPORT(float, png_get_pixel_aspect_ratio) PNGARG((png_structp
 
2086
png_ptr, png_infop info_ptr));
 
2087
#endif
 
2088
 
 
2089
/* Returns image x, y offset in pixels or microns, from oFFs chunk data. */
 
2090
extern PNG_EXPORT(png_int_32, png_get_x_offset_pixels) PNGARG((png_structp
 
2091
png_ptr, png_infop info_ptr));
 
2092
extern PNG_EXPORT(png_int_32, png_get_y_offset_pixels) PNGARG((png_structp
 
2093
png_ptr, png_infop info_ptr));
 
2094
extern PNG_EXPORT(png_int_32, png_get_x_offset_microns) PNGARG((png_structp
 
2095
png_ptr, png_infop info_ptr));
 
2096
extern PNG_EXPORT(png_int_32, png_get_y_offset_microns) PNGARG((png_structp
 
2097
png_ptr, png_infop info_ptr));
 
2098
 
 
2099
#endif /* PNG_EASY_ACCESS_SUPPORTED */
 
2100
 
 
2101
/* Returns pointer to signature string read from PNG header */
 
2102
extern PNG_EXPORT(png_bytep,png_get_signature) PNGARG((png_structp png_ptr,
 
2103
png_infop info_ptr));
 
2104
 
 
2105
#if defined(PNG_bKGD_SUPPORTED)
 
2106
extern PNG_EXPORT(png_uint_32,png_get_bKGD) PNGARG((png_structp png_ptr,
 
2107
   png_infop info_ptr, png_color_16p *background));
 
2108
#endif
 
2109
 
 
2110
#if defined(PNG_bKGD_SUPPORTED)
 
2111
extern PNG_EXPORT(void,png_set_bKGD) PNGARG((png_structp png_ptr,
 
2112
   png_infop info_ptr, png_color_16p background));
 
2113
#endif
 
2114
 
 
2115
#if defined(PNG_cHRM_SUPPORTED)
 
2116
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
2117
extern PNG_EXPORT(png_uint_32,png_get_cHRM) PNGARG((png_structp png_ptr,
 
2118
   png_infop info_ptr, double *white_x, double *white_y, double *red_x,
 
2119
   double *red_y, double *green_x, double *green_y, double *blue_x,
 
2120
   double *blue_y));
 
2121
#endif
 
2122
#ifdef PNG_FIXED_POINT_SUPPORTED
 
2123
extern PNG_EXPORT(png_uint_32,png_get_cHRM_fixed) PNGARG((png_structp png_ptr,
 
2124
   png_infop info_ptr, png_fixed_point *int_white_x, png_fixed_point
 
2125
   *int_white_y, png_fixed_point *int_red_x, png_fixed_point *int_red_y,
 
2126
   png_fixed_point *int_green_x, png_fixed_point *int_green_y, png_fixed_point
 
2127
   *int_blue_x, png_fixed_point *int_blue_y));
 
2128
#endif
 
2129
#endif
 
2130
 
 
2131
#if defined(PNG_cHRM_SUPPORTED)
 
2132
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
2133
extern PNG_EXPORT(void,png_set_cHRM) PNGARG((png_structp png_ptr,
 
2134
   png_infop info_ptr, double white_x, double white_y, double red_x,
 
2135
   double red_y, double green_x, double green_y, double blue_x, double blue_y));
 
2136
#endif
 
2137
#ifdef PNG_FIXED_POINT_SUPPORTED
 
2138
extern PNG_EXPORT(void,png_set_cHRM_fixed) PNGARG((png_structp png_ptr,
 
2139
   png_infop info_ptr, png_fixed_point int_white_x, png_fixed_point int_white_y,
 
2140
   png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point
 
2141
   int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x,
 
2142
   png_fixed_point int_blue_y));
 
2143
#endif
 
2144
#endif
 
2145
 
 
2146
#if defined(PNG_gAMA_SUPPORTED)
 
2147
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
2148
extern PNG_EXPORT(png_uint_32,png_get_gAMA) PNGARG((png_structp png_ptr,
 
2149
   png_infop info_ptr, double *file_gamma));
 
2150
#endif
 
2151
extern PNG_EXPORT(png_uint_32,png_get_gAMA_fixed) PNGARG((png_structp png_ptr,
 
2152
   png_infop info_ptr, png_fixed_point *int_file_gamma));
 
2153
#endif
 
2154
 
 
2155
#if defined(PNG_gAMA_SUPPORTED)
 
2156
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
2157
extern PNG_EXPORT(void,png_set_gAMA) PNGARG((png_structp png_ptr,
 
2158
   png_infop info_ptr, double file_gamma));
 
2159
#endif
 
2160
extern PNG_EXPORT(void,png_set_gAMA_fixed) PNGARG((png_structp png_ptr,
 
2161
   png_infop info_ptr, png_fixed_point int_file_gamma));
 
2162
#endif
 
2163
 
 
2164
#if defined(PNG_hIST_SUPPORTED)
 
2165
extern PNG_EXPORT(png_uint_32,png_get_hIST) PNGARG((png_structp png_ptr,
 
2166
   png_infop info_ptr, png_uint_16p *hist));
 
2167
#endif
 
2168
 
 
2169
#if defined(PNG_hIST_SUPPORTED)
 
2170
extern PNG_EXPORT(void,png_set_hIST) PNGARG((png_structp png_ptr,
 
2171
   png_infop info_ptr, png_uint_16p hist));
 
2172
#endif
 
2173
 
 
2174
extern PNG_EXPORT(png_uint_32,png_get_IHDR) PNGARG((png_structp png_ptr,
 
2175
   png_infop info_ptr, png_uint_32 *width, png_uint_32 *height,
 
2176
   int *bit_depth, int *color_type, int *interlace_method,
 
2177
   int *compression_method, int *filter_method));
 
2178
 
 
2179
extern PNG_EXPORT(void,png_set_IHDR) PNGARG((png_structp png_ptr,
 
2180
   png_infop info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth,
 
2181
   int color_type, int interlace_method, int compression_method,
 
2182
   int filter_method));
 
2183
 
 
2184
#if defined(PNG_oFFs_SUPPORTED)
 
2185
extern PNG_EXPORT(png_uint_32,png_get_oFFs) PNGARG((png_structp png_ptr,
 
2186
   png_infop info_ptr, png_int_32 *offset_x, png_int_32 *offset_y,
 
2187
   int *unit_type));
 
2188
#endif
 
2189
 
 
2190
#if defined(PNG_oFFs_SUPPORTED)
 
2191
extern PNG_EXPORT(void,png_set_oFFs) PNGARG((png_structp png_ptr,
 
2192
   png_infop info_ptr, png_int_32 offset_x, png_int_32 offset_y,
 
2193
   int unit_type));
 
2194
#endif
 
2195
 
 
2196
#if defined(PNG_pCAL_SUPPORTED)
 
2197
extern PNG_EXPORT(png_uint_32,png_get_pCAL) PNGARG((png_structp png_ptr,
 
2198
   png_infop info_ptr, png_charp *purpose, png_int_32 *X0, png_int_32 *X1,
 
2199
   int *type, int *nparams, png_charp *units, png_charpp *params));
 
2200
#endif
 
2201
 
 
2202
#if defined(PNG_pCAL_SUPPORTED)
 
2203
extern PNG_EXPORT(void,png_set_pCAL) PNGARG((png_structp png_ptr,
 
2204
   png_infop info_ptr, png_charp purpose, png_int_32 X0, png_int_32 X1,
 
2205
   int type, int nparams, png_charp units, png_charpp params));
 
2206
#endif
 
2207
 
 
2208
#if defined(PNG_pHYs_SUPPORTED)
 
2209
extern PNG_EXPORT(png_uint_32,png_get_pHYs) PNGARG((png_structp png_ptr,
 
2210
   png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type));
 
2211
#endif
 
2212
 
 
2213
#if defined(PNG_pHYs_SUPPORTED)
 
2214
extern PNG_EXPORT(void,png_set_pHYs) PNGARG((png_structp png_ptr,
 
2215
   png_infop info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type));
 
2216
#endif
 
2217
 
 
2218
extern PNG_EXPORT(png_uint_32,png_get_PLTE) PNGARG((png_structp png_ptr,
 
2219
   png_infop info_ptr, png_colorp *palette, int *num_palette));
 
2220
 
 
2221
extern PNG_EXPORT(void,png_set_PLTE) PNGARG((png_structp png_ptr,
 
2222
   png_infop info_ptr, png_colorp palette, int num_palette));
 
2223
 
 
2224
#if defined(PNG_sBIT_SUPPORTED)
 
2225
extern PNG_EXPORT(png_uint_32,png_get_sBIT) PNGARG((png_structp png_ptr,
 
2226
   png_infop info_ptr, png_color_8p *sig_bit));
 
2227
#endif
 
2228
 
 
2229
#if defined(PNG_sBIT_SUPPORTED)
 
2230
extern PNG_EXPORT(void,png_set_sBIT) PNGARG((png_structp png_ptr,
 
2231
   png_infop info_ptr, png_color_8p sig_bit));
 
2232
#endif
 
2233
 
 
2234
#if defined(PNG_sRGB_SUPPORTED)
 
2235
extern PNG_EXPORT(png_uint_32,png_get_sRGB) PNGARG((png_structp png_ptr,
 
2236
   png_infop info_ptr, int *intent));
 
2237
#endif
 
2238
 
 
2239
#if defined(PNG_sRGB_SUPPORTED)
 
2240
extern PNG_EXPORT(void,png_set_sRGB) PNGARG((png_structp png_ptr,
 
2241
   png_infop info_ptr, int intent));
 
2242
extern PNG_EXPORT(void,png_set_sRGB_gAMA_and_cHRM) PNGARG((png_structp png_ptr,
 
2243
   png_infop info_ptr, int intent));
 
2244
#endif
 
2245
 
 
2246
#if defined(PNG_iCCP_SUPPORTED)
 
2247
extern PNG_EXPORT(png_uint_32,png_get_iCCP) PNGARG((png_structp png_ptr,
 
2248
   png_infop info_ptr, png_charpp name, int *compression_type,
 
2249
   png_charpp profile, png_uint_32 *proflen));
 
2250
   /* Note to maintainer: profile should be png_bytepp */
 
2251
#endif
 
2252
 
 
2253
#if defined(PNG_iCCP_SUPPORTED)
 
2254
extern PNG_EXPORT(void,png_set_iCCP) PNGARG((png_structp png_ptr,
 
2255
   png_infop info_ptr, png_charp name, int compression_type,
 
2256
   png_charp profile, png_uint_32 proflen));
 
2257
   /* Note to maintainer: profile should be png_bytep */
 
2258
#endif
 
2259
 
 
2260
#if defined(PNG_sPLT_SUPPORTED)
 
2261
extern PNG_EXPORT(png_uint_32,png_get_sPLT) PNGARG((png_structp png_ptr,
 
2262
   png_infop info_ptr, png_sPLT_tpp entries));
 
2263
#endif
 
2264
 
 
2265
#if defined(PNG_sPLT_SUPPORTED)
 
2266
extern PNG_EXPORT(void,png_set_sPLT) PNGARG((png_structp png_ptr,
 
2267
   png_infop info_ptr, png_sPLT_tp entries, int nentries));
 
2268
#endif
 
2269
 
 
2270
#if defined(PNG_TEXT_SUPPORTED)
 
2271
/* png_get_text also returns the number of text chunks in *num_text */
 
2272
extern PNG_EXPORT(png_uint_32,png_get_text) PNGARG((png_structp png_ptr,
 
2273
   png_infop info_ptr, png_textp *text_ptr, int *num_text));
 
2274
#endif
 
2275
 
 
2276
/*
 
2277
 *  Note while png_set_text() will accept a structure whose text,
 
2278
 *  language, and  translated keywords are NULL pointers, the structure
 
2279
 *  returned by png_get_text will always contain regular
 
2280
 *  zero-terminated C strings.  They might be empty strings but
 
2281
 *  they will never be NULL pointers.
 
2282
 */
 
2283
 
 
2284
#if defined(PNG_TEXT_SUPPORTED)
 
2285
extern PNG_EXPORT(void,png_set_text) PNGARG((png_structp png_ptr,
 
2286
   png_infop info_ptr, png_textp text_ptr, int num_text));
 
2287
#endif
 
2288
 
 
2289
#if defined(PNG_tIME_SUPPORTED)
 
2290
extern PNG_EXPORT(png_uint_32,png_get_tIME) PNGARG((png_structp png_ptr,
 
2291
   png_infop info_ptr, png_timep *mod_time));
 
2292
#endif
 
2293
 
 
2294
#if defined(PNG_tIME_SUPPORTED)
 
2295
extern PNG_EXPORT(void,png_set_tIME) PNGARG((png_structp png_ptr,
 
2296
   png_infop info_ptr, png_timep mod_time));
 
2297
#endif
 
2298
 
 
2299
#if defined(PNG_tRNS_SUPPORTED)
 
2300
extern PNG_EXPORT(png_uint_32,png_get_tRNS) PNGARG((png_structp png_ptr,
 
2301
   png_infop info_ptr, png_bytep *trans, int *num_trans,
 
2302
   png_color_16p *trans_values));
 
2303
#endif
 
2304
 
 
2305
#if defined(PNG_tRNS_SUPPORTED)
 
2306
extern PNG_EXPORT(void,png_set_tRNS) PNGARG((png_structp png_ptr,
 
2307
   png_infop info_ptr, png_bytep trans, int num_trans,
 
2308
   png_color_16p trans_values));
 
2309
#endif
 
2310
 
 
2311
#if defined(PNG_tRNS_SUPPORTED)
 
2312
#endif
 
2313
 
 
2314
#if defined(PNG_sCAL_SUPPORTED)
 
2315
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
2316
extern PNG_EXPORT(png_uint_32,png_get_sCAL) PNGARG((png_structp png_ptr,
 
2317
   png_infop info_ptr, int *unit, double *width, double *height));
 
2318
#else
 
2319
#ifdef PNG_FIXED_POINT_SUPPORTED
 
2320
extern PNG_EXPORT(png_uint_32,png_get_sCAL_s) PNGARG((png_structp png_ptr,
 
2321
   png_infop info_ptr, int *unit, png_charpp swidth, png_charpp sheight));
 
2322
#endif
 
2323
#endif
 
2324
#endif /* PNG_sCAL_SUPPORTED */
 
2325
 
 
2326
#if defined(PNG_sCAL_SUPPORTED)
 
2327
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
2328
extern PNG_EXPORT(void,png_set_sCAL) PNGARG((png_structp png_ptr,
 
2329
   png_infop info_ptr, int unit, double width, double height));
 
2330
#endif
 
2331
#ifdef PNG_FIXED_POINT_SUPPORTED
 
2332
extern PNG_EXPORT(void,png_set_sCAL_s) PNGARG((png_structp png_ptr,
 
2333
   png_infop info_ptr, int unit, png_charp swidth, png_charp sheight));
 
2334
#endif
 
2335
#endif /* PNG_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */
 
2336
 
 
2337
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
 
2338
/* provide a list of chunks and how they are to be handled, if the built-in
 
2339
   handling or default unknown chunk handling is not desired.  Any chunks not
 
2340
   listed will be handled in the default manner.  The IHDR and IEND chunks
 
2341
   must not be listed.
 
2342
      keep = 0: follow default behavour
 
2343
           = 1: do not keep
 
2344
           = 2: keep only if safe-to-copy
 
2345
           = 3: keep even if unsafe-to-copy
 
2346
*/
 
2347
extern PNG_EXPORT(void, png_set_keep_unknown_chunks) PNGARG((png_structp
 
2348
   png_ptr, int keep, png_bytep chunk_list, int num_chunks));
 
2349
extern PNG_EXPORT(void, png_set_unknown_chunks) PNGARG((png_structp png_ptr,
 
2350
   png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns));
 
2351
extern PNG_EXPORT(void, png_set_unknown_chunk_location)
 
2352
   PNGARG((png_structp png_ptr, png_infop info_ptr, int chunk, int location));
 
2353
extern PNG_EXPORT(png_uint_32,png_get_unknown_chunks) PNGARG((png_structp
 
2354
   png_ptr, png_infop info_ptr, png_unknown_chunkpp entries));
 
2355
#endif
 
2356
#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
 
2357
PNG_EXPORT(int,png_handle_as_unknown) PNGARG((png_structp png_ptr, png_bytep
 
2358
   chunk_name));
 
2359
#endif
 
2360
 
 
2361
/* Png_free_data() will turn off the "valid" flag for anything it frees.
 
2362
   If you need to turn it off for a chunk that your application has freed,
 
2363
   you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK); */
 
2364
extern PNG_EXPORT(void, png_set_invalid) PNGARG((png_structp png_ptr,
 
2365
   png_infop info_ptr, int mask));
 
2366
 
 
2367
#if defined(PNG_INFO_IMAGE_SUPPORTED)
 
2368
/* The "params" pointer is currently not used and is for future expansion. */
 
2369
extern PNG_EXPORT(void, png_read_png) PNGARG((png_structp png_ptr,
 
2370
                        png_infop info_ptr,
 
2371
                        int transforms,
 
2372
                        png_voidp params));
 
2373
extern PNG_EXPORT(void, png_write_png) PNGARG((png_structp png_ptr,
 
2374
                        png_infop info_ptr,
 
2375
                        int transforms,
 
2376
                        png_voidp params));
 
2377
#endif
 
2378
 
 
2379
/* Define PNG_DEBUG at compile time for debugging information.  Higher
 
2380
 * numbers for PNG_DEBUG mean more debugging information.  This has
 
2381
 * only been added since version 0.95 so it is not implemented throughout
 
2382
 * libpng yet, but more support will be added as needed.
 
2383
 */
 
2384
#ifdef PNG_DEBUG
 
2385
#if (PNG_DEBUG > 0)
 
2386
#if !defined(PNG_DEBUG_FILE) && defined(_MSC_VER)
 
2387
#include <crtdbg.h>
 
2388
#if (PNG_DEBUG > 1)
 
2389
#define png_debug(l,m)  _RPT0(_CRT_WARN,m)
 
2390
#define png_debug1(l,m,p1)  _RPT1(_CRT_WARN,m,p1)
 
2391
#define png_debug2(l,m,p1,p2) _RPT2(_CRT_WARN,m,p1,p2)
 
2392
#endif
 
2393
#else /* PNG_DEBUG_FILE || !_MSC_VER */
 
2394
#ifndef PNG_DEBUG_FILE
 
2395
#define PNG_DEBUG_FILE stderr
 
2396
#endif /* PNG_DEBUG_FILE */
 
2397
#if (PNG_DEBUG > 1)
 
2398
#define png_debug(l,m) \
 
2399
{ \
 
2400
     int num_tabs=l; \
 
2401
     fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \
 
2402
       (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":"")))); \
 
2403
}
 
2404
#define png_debug1(l,m,p1) \
 
2405
{ \
 
2406
     int num_tabs=l; \
 
2407
     fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \
 
2408
       (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1); \
 
2409
}
 
2410
#define png_debug2(l,m,p1,p2) \
 
2411
{ \
 
2412
     int num_tabs=l; \
 
2413
     fprintf(PNG_DEBUG_FILE,"%s"m,(num_tabs==1 ? "\t" : \
 
2414
       (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1,p2); \
 
2415
}
 
2416
#endif /* (PNG_DEBUG > 1) */
 
2417
#endif /* _MSC_VER */
 
2418
#endif /* (PNG_DEBUG > 0) */
 
2419
#endif /* PNG_DEBUG */
 
2420
#ifndef png_debug
 
2421
#define png_debug(l, m)
 
2422
#endif
 
2423
#ifndef png_debug1
 
2424
#define png_debug1(l, m, p1)
 
2425
#endif
 
2426
#ifndef png_debug2
 
2427
#define png_debug2(l, m, p1, p2)
 
2428
#endif
 
2429
 
 
2430
extern PNG_EXPORT(png_bytep,png_sig_bytes) PNGARG((void));
 
2431
 
 
2432
extern PNG_EXPORT(png_charp,png_get_copyright) PNGARG((png_structp png_ptr));
 
2433
extern PNG_EXPORT(png_charp,png_get_header_ver) PNGARG((png_structp png_ptr));
 
2434
extern PNG_EXPORT(png_charp,png_get_header_version) PNGARG((png_structp png_ptr));
 
2435
extern PNG_EXPORT(png_charp,png_get_libpng_ver) PNGARG((png_structp png_ptr));
 
2436
 
 
2437
#ifdef PNG_MNG_FEATURES_SUPPORTED
 
2438
extern PNG_EXPORT(png_uint_32,png_permit_mng_features) PNGARG((png_structp
 
2439
   png_ptr, png_uint_32 mng_features_permitted));
 
2440
#endif
 
2441
 
 
2442
/* For use in png_set_keep_unknown, added to version 1.2.6 */
 
2443
#define PNG_HANDLE_CHUNK_AS_DEFAULT   0
 
2444
#define PNG_HANDLE_CHUNK_NEVER        1
 
2445
#define PNG_HANDLE_CHUNK_IF_SAFE      2
 
2446
#define PNG_HANDLE_CHUNK_ALWAYS       3
 
2447
 
 
2448
/* Added to version 1.2.0 */
 
2449
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
 
2450
#define PNG_ASM_FLAG_MMX_SUPPORT_COMPILED  0x01  /* not user-settable */
 
2451
#define PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU    0x02  /* not user-settable */
 
2452
#define PNG_ASM_FLAG_MMX_READ_COMBINE_ROW  0x04
 
2453
#define PNG_ASM_FLAG_MMX_READ_INTERLACE    0x08
 
2454
#define PNG_ASM_FLAG_MMX_READ_FILTER_SUB   0x10
 
2455
#define PNG_ASM_FLAG_MMX_READ_FILTER_UP    0x20
 
2456
#define PNG_ASM_FLAG_MMX_READ_FILTER_AVG   0x40
 
2457
#define PNG_ASM_FLAG_MMX_READ_FILTER_PAETH 0x80
 
2458
#define PNG_ASM_FLAGS_INITIALIZED          0x80000000  /* not user-settable */
 
2459
 
 
2460
#define PNG_MMX_READ_FLAGS ( PNG_ASM_FLAG_MMX_READ_COMBINE_ROW  \
 
2461
                           | PNG_ASM_FLAG_MMX_READ_INTERLACE    \
 
2462
                           | PNG_ASM_FLAG_MMX_READ_FILTER_SUB   \
 
2463
                           | PNG_ASM_FLAG_MMX_READ_FILTER_UP    \
 
2464
                           | PNG_ASM_FLAG_MMX_READ_FILTER_AVG   \
 
2465
                           | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH )
 
2466
#define PNG_MMX_WRITE_FLAGS ( 0 )
 
2467
 
 
2468
#define PNG_MMX_FLAGS ( PNG_ASM_FLAG_MMX_SUPPORT_COMPILED \
 
2469
                      | PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU   \
 
2470
                      | PNG_MMX_READ_FLAGS                \
 
2471
                      | PNG_MMX_WRITE_FLAGS )
 
2472
 
 
2473
#define PNG_SELECT_READ   1
 
2474
#define PNG_SELECT_WRITE  2
 
2475
 
 
2476
#if !defined(PNG_1_0_X)
 
2477
/* pngget.c */
 
2478
extern PNG_EXPORT(png_uint_32,png_get_mmx_flagmask)
 
2479
   PNGARG((int flag_select, int *compilerID));
 
2480
 
 
2481
/* pngget.c */
 
2482
extern PNG_EXPORT(png_uint_32,png_get_asm_flagmask)
 
2483
   PNGARG((int flag_select));
 
2484
 
 
2485
/* pngget.c */
 
2486
extern PNG_EXPORT(png_uint_32,png_get_asm_flags)
 
2487
   PNGARG((png_structp png_ptr));
 
2488
 
 
2489
/* pngget.c */
 
2490
extern PNG_EXPORT(png_byte,png_get_mmx_bitdepth_threshold)
 
2491
   PNGARG((png_structp png_ptr));
 
2492
 
 
2493
/* pngget.c */
 
2494
extern PNG_EXPORT(png_uint_32,png_get_mmx_rowbytes_threshold)
 
2495
   PNGARG((png_structp png_ptr));
 
2496
 
 
2497
/* pngset.c */
 
2498
extern PNG_EXPORT(void,png_set_asm_flags)
 
2499
   PNGARG((png_structp png_ptr, png_uint_32 asm_flags));
 
2500
 
 
2501
/* pngset.c */
 
2502
extern PNG_EXPORT(void,png_set_mmx_thresholds)
 
2503
   PNGARG((png_structp png_ptr, png_byte mmx_bitdepth_threshold,
 
2504
   png_uint_32 mmx_rowbytes_threshold));
 
2505
 
 
2506
#endif /* PNG_1_0_X */
 
2507
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
 
2508
 
 
2509
#if !defined(PNG_1_0_X)
 
2510
/* png.c, pnggccrd.c, or pngvcrd.c */
 
2511
extern PNG_EXPORT(int,png_mmx_support) PNGARG((void));
 
2512
 
 
2513
/* Strip the prepended error numbers ("#nnn ") from error and warning
 
2514
 * messages before passing them to the error or warning handler. */
 
2515
#ifdef PNG_ERROR_NUMBERS_SUPPORTED
 
2516
extern PNG_EXPORT(void,png_set_strip_error_numbers) PNGARG((png_structp
 
2517
   png_ptr, png_uint_32 strip_mode));
 
2518
#endif
 
2519
 
 
2520
#endif /* PNG_1_0_X */
 
2521
 
 
2522
/* Added at libpng-1.2.6 */
 
2523
#ifdef PNG_SET_USER_LIMITS_SUPPORTED
 
2524
extern PNG_EXPORT(void,png_set_user_limits) PNGARG((png_structp
 
2525
   png_ptr, png_uint_32 user_width_max, png_uint_32 user_height_max));
 
2526
extern PNG_EXPORT(png_uint_32,png_get_user_width_max) PNGARG((png_structp
 
2527
   png_ptr));
 
2528
extern PNG_EXPORT(png_uint_32,png_get_user_height_max) PNGARG((png_structp
 
2529
   png_ptr));
 
2530
#endif
 
2531
 
 
2532
/* Maintainer: Put new public prototypes here ^, in libpng.3, and project defs */
 
2533
 
 
2534
#ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED
 
2535
/* With these routines we avoid an integer divide, which will be slower on
 
2536
 * most machines.  However, it does take more operations than the corresponding
 
2537
 * divide method, so it may be slower on a few RISC systems.  There are two
 
2538
 * shifts (by 8 or 16 bits) and an addition, versus a single integer divide.
 
2539
 *
 
2540
 * Note that the rounding factors are NOT supposed to be the same!  128 and
 
2541
 * 32768 are correct for the NODIV code; 127 and 32767 are correct for the
 
2542
 * standard method.
 
2543
 *
 
2544
 * [Optimized code by Greg Roelofs and Mark Adler...blame us for bugs. :-) ]
 
2545
 */
 
2546
 
 
2547
 /* fg and bg should be in `gamma 1.0' space; alpha is the opacity          */
 
2548
 
 
2549
#  define png_composite(composite, fg, alpha, bg)                            \
 
2550
     { png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) * (png_uint_16)(alpha) \
 
2551
                        +        (png_uint_16)(bg)*(png_uint_16)(255 -       \
 
2552
                        (png_uint_16)(alpha)) + (png_uint_16)128);           \
 
2553
       (composite) = (png_byte)((temp + (temp >> 8)) >> 8); }
 
2554
 
 
2555
#  define png_composite_16(composite, fg, alpha, bg)                         \
 
2556
     { png_uint_32 temp = (png_uint_32)((png_uint_32)(fg) * (png_uint_32)(alpha) \
 
2557
                        + (png_uint_32)(bg)*(png_uint_32)(65535L -           \
 
2558
                        (png_uint_32)(alpha)) + (png_uint_32)32768L);        \
 
2559
       (composite) = (png_uint_16)((temp + (temp >> 16)) >> 16); }
 
2560
 
 
2561
#else  /* standard method using integer division */
 
2562
 
 
2563
#  define png_composite(composite, fg, alpha, bg)                            \
 
2564
     (composite) = (png_byte)(((png_uint_16)(fg) * (png_uint_16)(alpha) +    \
 
2565
       (png_uint_16)(bg) * (png_uint_16)(255 - (png_uint_16)(alpha)) +       \
 
2566
       (png_uint_16)127) / 255)
 
2567
 
 
2568
#  define png_composite_16(composite, fg, alpha, bg)                         \
 
2569
     (composite) = (png_uint_16)(((png_uint_32)(fg) * (png_uint_32)(alpha) + \
 
2570
       (png_uint_32)(bg)*(png_uint_32)(65535L - (png_uint_32)(alpha)) +      \
 
2571
       (png_uint_32)32767) / (png_uint_32)65535L)
 
2572
 
 
2573
#endif /* PNG_READ_COMPOSITE_NODIV_SUPPORTED */
 
2574
 
 
2575
/* These next functions are used internally in the code.  They generally
 
2576
 * shouldn't be used unless you are writing code to add or replace some
 
2577
 * functionality in libpng.  More information about most functions can
 
2578
 * be found in the files where the functions are located.
 
2579
 */
 
2580
 
 
2581
#if defined(PNG_INTERNAL)
 
2582
 
 
2583
/* Various modes of operation.  Note that after an init, mode is set to
 
2584
 * zero automatically when the structure is created.
 
2585
 */
 
2586
#define PNG_HAVE_IHDR               0x01
 
2587
#define PNG_HAVE_PLTE               0x02
 
2588
#define PNG_HAVE_IDAT               0x04
 
2589
#define PNG_AFTER_IDAT              0x08
 
2590
#define PNG_HAVE_IEND               0x10
 
2591
#define PNG_HAVE_gAMA               0x20
 
2592
#define PNG_HAVE_cHRM               0x40
 
2593
#define PNG_HAVE_sRGB               0x80
 
2594
#define PNG_HAVE_CHUNK_HEADER      0x100
 
2595
#define PNG_WROTE_tIME             0x200
 
2596
#define PNG_WROTE_INFO_BEFORE_PLTE 0x400
 
2597
#define PNG_BACKGROUND_IS_GRAY     0x800
 
2598
#define PNG_HAVE_PNG_SIGNATURE    0x1000
 
2599
 
 
2600
/* flags for the transformations the PNG library does on the image data */
 
2601
#define PNG_BGR                0x0001
 
2602
#define PNG_INTERLACE          0x0002
 
2603
#define PNG_PACK               0x0004
 
2604
#define PNG_SHIFT              0x0008
 
2605
#define PNG_SWAP_BYTES         0x0010
 
2606
#define PNG_INVERT_MONO        0x0020
 
2607
#define PNG_DITHER             0x0040
 
2608
#define PNG_BACKGROUND         0x0080
 
2609
#define PNG_BACKGROUND_EXPAND  0x0100
 
2610
                          /*   0x0200 unused */
 
2611
#define PNG_16_TO_8            0x0400
 
2612
#define PNG_RGBA               0x0800
 
2613
#define PNG_EXPAND             0x1000
 
2614
#define PNG_GAMMA              0x2000
 
2615
#define PNG_GRAY_TO_RGB        0x4000
 
2616
#define PNG_FILLER             0x8000L
 
2617
#define PNG_PACKSWAP          0x10000L
 
2618
#define PNG_SWAP_ALPHA        0x20000L
 
2619
#define PNG_STRIP_ALPHA       0x40000L
 
2620
#define PNG_INVERT_ALPHA      0x80000L
 
2621
#define PNG_USER_TRANSFORM   0x100000L
 
2622
#define PNG_RGB_TO_GRAY_ERR  0x200000L
 
2623
#define PNG_RGB_TO_GRAY_WARN 0x400000L
 
2624
#define PNG_RGB_TO_GRAY      0x600000L  /* two bits, RGB_TO_GRAY_ERR|WARN */
 
2625
                       /*    0x800000L     Unused */
 
2626
#define PNG_ADD_ALPHA       0x1000000L  /* Added to libpng-1.2.7 */
 
2627
                       /*   0x2000000L  unused */
 
2628
                       /*   0x4000000L  unused */
 
2629
                       /*   0x8000000L  unused */
 
2630
                       /*  0x10000000L  unused */
 
2631
                       /*  0x20000000L  unused */
 
2632
                       /*  0x40000000L  unused */
 
2633
 
 
2634
/* flags for png_create_struct */
 
2635
#define PNG_STRUCT_PNG   0x0001
 
2636
#define PNG_STRUCT_INFO  0x0002
 
2637
 
 
2638
/* Scaling factor for filter heuristic weighting calculations */
 
2639
#define PNG_WEIGHT_SHIFT 8
 
2640
#define PNG_WEIGHT_FACTOR (1<<(PNG_WEIGHT_SHIFT))
 
2641
#define PNG_COST_SHIFT 3
 
2642
#define PNG_COST_FACTOR (1<<(PNG_COST_SHIFT))
 
2643
 
 
2644
/* flags for the png_ptr->flags rather than declaring a byte for each one */
 
2645
#define PNG_FLAG_ZLIB_CUSTOM_STRATEGY     0x0001
 
2646
#define PNG_FLAG_ZLIB_CUSTOM_LEVEL        0x0002
 
2647
#define PNG_FLAG_ZLIB_CUSTOM_MEM_LEVEL    0x0004
 
2648
#define PNG_FLAG_ZLIB_CUSTOM_WINDOW_BITS  0x0008
 
2649
#define PNG_FLAG_ZLIB_CUSTOM_METHOD       0x0010
 
2650
#define PNG_FLAG_ZLIB_FINISHED            0x0020
 
2651
#define PNG_FLAG_ROW_INIT                 0x0040
 
2652
#define PNG_FLAG_FILLER_AFTER             0x0080
 
2653
#define PNG_FLAG_CRC_ANCILLARY_USE        0x0100
 
2654
#define PNG_FLAG_CRC_ANCILLARY_NOWARN     0x0200
 
2655
#define PNG_FLAG_CRC_CRITICAL_USE         0x0400
 
2656
#define PNG_FLAG_CRC_CRITICAL_IGNORE      0x0800
 
2657
#define PNG_FLAG_FREE_PLTE                0x1000
 
2658
#define PNG_FLAG_FREE_TRNS                0x2000
 
2659
#define PNG_FLAG_FREE_HIST                0x4000
 
2660
#define PNG_FLAG_KEEP_UNKNOWN_CHUNKS      0x8000L
 
2661
#define PNG_FLAG_KEEP_UNSAFE_CHUNKS       0x10000L
 
2662
#define PNG_FLAG_LIBRARY_MISMATCH         0x20000L
 
2663
#define PNG_FLAG_STRIP_ERROR_NUMBERS      0x40000L
 
2664
#define PNG_FLAG_STRIP_ERROR_TEXT         0x80000L
 
2665
#define PNG_FLAG_MALLOC_NULL_MEM_OK       0x100000L
 
2666
#define PNG_FLAG_ADD_ALPHA                0x200000L  /* Added to libpng-1.2.8 */
 
2667
#define PNG_FLAG_STRIP_ALPHA              0x400000L  /* Added to libpng-1.2.8 */
 
2668
                                  /*      0x800000L  unused */
 
2669
                                  /*     0x1000000L  unused */
 
2670
                                  /*     0x2000000L  unused */
 
2671
                                  /*     0x4000000L  unused */
 
2672
                                  /*     0x8000000L  unused */
 
2673
                                  /*    0x10000000L  unused */
 
2674
                                  /*    0x20000000L  unused */
 
2675
                                  /*    0x40000000L  unused */
 
2676
 
 
2677
#define PNG_FLAG_CRC_ANCILLARY_MASK (PNG_FLAG_CRC_ANCILLARY_USE | \
 
2678
                                     PNG_FLAG_CRC_ANCILLARY_NOWARN)
 
2679
 
 
2680
#define PNG_FLAG_CRC_CRITICAL_MASK  (PNG_FLAG_CRC_CRITICAL_USE | \
 
2681
                                     PNG_FLAG_CRC_CRITICAL_IGNORE)
 
2682
 
 
2683
#define PNG_FLAG_CRC_MASK           (PNG_FLAG_CRC_ANCILLARY_MASK | \
 
2684
                                     PNG_FLAG_CRC_CRITICAL_MASK)
 
2685
 
 
2686
/* save typing and make code easier to understand */
 
2687
 
 
2688
#define PNG_COLOR_DIST(c1, c2) (abs((int)((c1).red) - (int)((c2).red)) + \
 
2689
   abs((int)((c1).green) - (int)((c2).green)) + \
 
2690
   abs((int)((c1).blue) - (int)((c2).blue)))
 
2691
 
 
2692
/* Added to libpng-1.2.6 JB */
 
2693
#define PNG_ROWBYTES(pixel_bits, width) \
 
2694
    ((pixel_bits) >= 8 ? \
 
2695
    ((width) * (((png_uint_32)(pixel_bits)) >> 3)) : \
 
2696
    (( ((width) * ((png_uint_32)(pixel_bits))) + 7) >> 3) )
 
2697
 
 
2698
/* PNG_OUT_OF_RANGE returns true if value is outside the range
 
2699
   ideal-delta..ideal+delta.  Each argument is evaluated twice.
 
2700
   "ideal" and "delta" should be constants, normally simple
 
2701
   integers, "value" a variable. Added to libpng-1.2.6 JB */
 
2702
#define PNG_OUT_OF_RANGE(value, ideal, delta) \
 
2703
        ( (value) < (ideal)-(delta) || (value) > (ideal)+(delta) )
 
2704
 
 
2705
/* variables declared in png.c - only it needs to define PNG_NO_EXTERN */
 
2706
#if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN)
 
2707
/* place to hold the signature string for a PNG file. */
 
2708
#ifdef PNG_USE_GLOBAL_ARRAYS
 
2709
   PNG_EXPORT_VAR (const png_byte FARDATA) png_sig[8];
 
2710
#else
 
2711
#define png_sig png_sig_bytes(NULL)
 
2712
#endif
 
2713
#endif /* PNG_NO_EXTERN */
 
2714
 
 
2715
/* Constant strings for known chunk types.  If you need to add a chunk,
 
2716
 * define the name here, and add an invocation of the macro in png.c and
 
2717
 * wherever it's needed.
 
2718
 */
 
2719
#define PNG_IHDR const png_byte png_IHDR[5] = { 73,  72,  68,  82, '\0'}
 
2720
#define PNG_IDAT const png_byte png_IDAT[5] = { 73,  68,  65,  84, '\0'}
 
2721
#define PNG_IEND const png_byte png_IEND[5] = { 73,  69,  78,  68, '\0'}
 
2722
#define PNG_PLTE const png_byte png_PLTE[5] = { 80,  76,  84,  69, '\0'}
 
2723
#define PNG_bKGD const png_byte png_bKGD[5] = { 98,  75,  71,  68, '\0'}
 
2724
#define PNG_cHRM const png_byte png_cHRM[5] = { 99,  72,  82,  77, '\0'}
 
2725
#define PNG_gAMA const png_byte png_gAMA[5] = {103,  65,  77,  65, '\0'}
 
2726
#define PNG_hIST const png_byte png_hIST[5] = {104,  73,  83,  84, '\0'}
 
2727
#define PNG_iCCP const png_byte png_iCCP[5] = {105,  67,  67,  80, '\0'}
 
2728
#define PNG_iTXt const png_byte png_iTXt[5] = {105,  84,  88, 116, '\0'}
 
2729
#define PNG_oFFs const png_byte png_oFFs[5] = {111,  70,  70, 115, '\0'}
 
2730
#define PNG_pCAL const png_byte png_pCAL[5] = {112,  67,  65,  76, '\0'}
 
2731
#define PNG_sCAL const png_byte png_sCAL[5] = {115,  67,  65,  76, '\0'}
 
2732
#define PNG_pHYs const png_byte png_pHYs[5] = {112,  72,  89, 115, '\0'}
 
2733
#define PNG_sBIT const png_byte png_sBIT[5] = {115,  66,  73,  84, '\0'}
 
2734
#define PNG_sPLT const png_byte png_sPLT[5] = {115,  80,  76,  84, '\0'}
 
2735
#define PNG_sRGB const png_byte png_sRGB[5] = {115,  82,  71,  66, '\0'}
 
2736
#define PNG_tEXt const png_byte png_tEXt[5] = {116,  69,  88, 116, '\0'}
 
2737
#define PNG_tIME const png_byte png_tIME[5] = {116,  73,  77,  69, '\0'}
 
2738
#define PNG_tRNS const png_byte png_tRNS[5] = {116,  82,  78,  83, '\0'}
 
2739
#define PNG_zTXt const png_byte png_zTXt[5] = {122,  84,  88, 116, '\0'}
 
2740
 
 
2741
#ifdef PNG_USE_GLOBAL_ARRAYS
 
2742
PNG_EXPORT_VAR (const png_byte FARDATA) png_IHDR[5];
 
2743
PNG_EXPORT_VAR (const png_byte FARDATA) png_IDAT[5];
 
2744
PNG_EXPORT_VAR (const png_byte FARDATA) png_IEND[5];
 
2745
PNG_EXPORT_VAR (const png_byte FARDATA) png_PLTE[5];
 
2746
PNG_EXPORT_VAR (const png_byte FARDATA) png_bKGD[5];
 
2747
PNG_EXPORT_VAR (const png_byte FARDATA) png_cHRM[5];
 
2748
PNG_EXPORT_VAR (const png_byte FARDATA) png_gAMA[5];
 
2749
PNG_EXPORT_VAR (const png_byte FARDATA) png_hIST[5];
 
2750
PNG_EXPORT_VAR (const png_byte FARDATA) png_iCCP[5];
 
2751
PNG_EXPORT_VAR (const png_byte FARDATA) png_iTXt[5];
 
2752
PNG_EXPORT_VAR (const png_byte FARDATA) png_oFFs[5];
 
2753
PNG_EXPORT_VAR (const png_byte FARDATA) png_pCAL[5];
 
2754
PNG_EXPORT_VAR (const png_byte FARDATA) png_sCAL[5];
 
2755
PNG_EXPORT_VAR (const png_byte FARDATA) png_pHYs[5];
 
2756
PNG_EXPORT_VAR (const png_byte FARDATA) png_sBIT[5];
 
2757
PNG_EXPORT_VAR (const png_byte FARDATA) png_sPLT[5];
 
2758
PNG_EXPORT_VAR (const png_byte FARDATA) png_sRGB[5];
 
2759
PNG_EXPORT_VAR (const png_byte FARDATA) png_tEXt[5];
 
2760
PNG_EXPORT_VAR (const png_byte FARDATA) png_tIME[5];
 
2761
PNG_EXPORT_VAR (const png_byte FARDATA) png_tRNS[5];
 
2762
PNG_EXPORT_VAR (const png_byte FARDATA) png_zTXt[5];
 
2763
#endif /* PNG_USE_GLOBAL_ARRAYS */
 
2764
 
 
2765
 
 
2766
/* Inline macros to do direct reads of bytes from the input buffer.  These
 
2767
 * require that you are using an architecture that uses PNG byte ordering
 
2768
 * (MSB first) and supports unaligned data storage.  I think that PowerPC
 
2769
 * in big-endian mode and 680x0 are the only ones that will support this.
 
2770
 * The x86 line of processors definitely do not.  The png_get_int_32()
 
2771
 * routine also assumes we are using two's complement format for negative
 
2772
 * values, which is almost certainly true.
 
2773
 */
 
2774
#if defined(PNG_READ_BIG_ENDIAN_SUPPORTED)
 
2775
#  if defined(PNG_pCAL_SUPPORTED) || defined(PNG_oFFs_SUPPORTED)
 
2776
#    define png_get_int_32(buf) ( *((png_int_32p) (buf)))
 
2777
#  endif
 
2778
#  define png_get_uint_32(buf) ( *((png_uint_32p) (buf)))
 
2779
#  define png_get_uint_16(buf) ( *((png_uint_16p) (buf)))
 
2780
#else
 
2781
#  if defined(PNG_pCAL_SUPPORTED) || defined(PNG_oFFs_SUPPORTED)
 
2782
PNG_EXTERN png_int_32 png_get_int_32 PNGARG((png_bytep buf));
 
2783
#  endif
 
2784
PNG_EXTERN png_uint_32 png_get_uint_32 PNGARG((png_bytep buf));
 
2785
PNG_EXTERN png_uint_16 png_get_uint_16 PNGARG((png_bytep buf));
 
2786
#endif /* !PNG_READ_BIG_ENDIAN_SUPPORTED */
 
2787
PNG_EXTERN png_uint_32 png_get_uint_31 PNGARG((png_structp png_ptr,
 
2788
  png_bytep buf));
 
2789
 
 
2790
/* Initialize png_ptr struct for reading, and allocate any other memory.
 
2791
 * (old interface - DEPRECATED - use png_create_read_struct instead).
 
2792
 */
 
2793
extern PNG_EXPORT(void,png_read_init) PNGARG((png_structp png_ptr));
 
2794
#undef png_read_init
 
2795
#define png_read_init(png_ptr) png_read_init_3(&png_ptr, \
 
2796
    PNG_LIBPNG_VER_STRING,  png_sizeof(png_struct));
 
2797
extern PNG_EXPORT(void,png_read_init_3) PNGARG((png_structpp ptr_ptr,
 
2798
    png_const_charp user_png_ver, png_size_t png_struct_size));
 
2799
extern PNG_EXPORT(void,png_read_init_2) PNGARG((png_structp png_ptr,
 
2800
    png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t
 
2801
    png_info_size));
 
2802
 
 
2803
/* Initialize png_ptr struct for writing, and allocate any other memory.
 
2804
 * (old interface - DEPRECATED - use png_create_write_struct instead).
 
2805
 */
 
2806
extern PNG_EXPORT(void,png_write_init) PNGARG((png_structp png_ptr));
 
2807
#undef png_write_init
 
2808
#define png_write_init(png_ptr) png_write_init_3(&png_ptr, \
 
2809
    PNG_LIBPNG_VER_STRING, png_sizeof(png_struct));
 
2810
extern PNG_EXPORT(void,png_write_init_3) PNGARG((png_structpp ptr_ptr,
 
2811
    png_const_charp user_png_ver, png_size_t png_struct_size));
 
2812
extern PNG_EXPORT(void,png_write_init_2) PNGARG((png_structp png_ptr,
 
2813
    png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t
 
2814
    png_info_size));
 
2815
 
 
2816
/* Allocate memory for an internal libpng struct */
 
2817
PNG_EXTERN png_voidp png_create_struct PNGARG((int type));
 
2818
 
 
2819
/* Free memory from internal libpng struct */
 
2820
PNG_EXTERN void png_destroy_struct PNGARG((png_voidp struct_ptr));
 
2821
 
 
2822
PNG_EXTERN png_voidp png_create_struct_2 PNGARG((int type, png_malloc_ptr
 
2823
  malloc_fn, png_voidp mem_ptr));
 
2824
PNG_EXTERN void png_destroy_struct_2 PNGARG((png_voidp struct_ptr,
 
2825
   png_free_ptr free_fn, png_voidp mem_ptr));
 
2826
 
 
2827
/* Free any memory that info_ptr points to and reset struct. */
 
2828
PNG_EXTERN void png_info_destroy PNGARG((png_structp png_ptr,
 
2829
   png_infop info_ptr));
 
2830
 
 
2831
#ifndef PNG_1_0_X
 
2832
/* Function to allocate memory for zlib. */
 
2833
PNG_EXTERN voidpf png_zalloc PNGARG((voidpf png_ptr, uInt items, uInt size));
 
2834
 
 
2835
/* Function to free memory for zlib */
 
2836
PNG_EXTERN void png_zfree PNGARG((voidpf png_ptr, voidpf ptr));
 
2837
 
 
2838
#ifdef PNG_SIZE_T
 
2839
/* Function to convert a sizeof an item to png_sizeof item */
 
2840
   PNG_EXTERN png_size_t PNGAPI png_convert_size PNGARG((size_t size));
 
2841
#endif
 
2842
 
 
2843
/* Next four functions are used internally as callbacks.  PNGAPI is required
 
2844
 * but not PNG_EXPORT.  PNGAPI added at libpng version 1.2.3. */
 
2845
 
 
2846
PNG_EXTERN void PNGAPI png_default_read_data PNGARG((png_structp png_ptr,
 
2847
   png_bytep data, png_size_t length));
 
2848
 
 
2849
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
 
2850
PNG_EXTERN void PNGAPI png_push_fill_buffer PNGARG((png_structp png_ptr,
 
2851
   png_bytep buffer, png_size_t length));
 
2852
#endif
 
2853
 
 
2854
PNG_EXTERN void PNGAPI png_default_write_data PNGARG((png_structp png_ptr,
 
2855
   png_bytep data, png_size_t length));
 
2856
 
 
2857
#if defined(PNG_WRITE_FLUSH_SUPPORTED)
 
2858
#if !defined(PNG_NO_STDIO)
 
2859
PNG_EXTERN void PNGAPI png_default_flush PNGARG((png_structp png_ptr));
 
2860
#endif
 
2861
#endif
 
2862
#else /* PNG_1_0_X */
 
2863
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
 
2864
PNG_EXTERN void png_push_fill_buffer PNGARG((png_structp png_ptr,
 
2865
   png_bytep buffer, png_size_t length));
 
2866
#endif
 
2867
#endif /* PNG_1_0_X */
 
2868
 
 
2869
/* Reset the CRC variable */
 
2870
PNG_EXTERN void png_reset_crc PNGARG((png_structp png_ptr));
 
2871
 
 
2872
/* Write the "data" buffer to whatever output you are using. */
 
2873
PNG_EXTERN void png_write_data PNGARG((png_structp png_ptr, png_bytep data,
 
2874
   png_size_t length));
 
2875
 
 
2876
/* Read data from whatever input you are using into the "data" buffer */
 
2877
PNG_EXTERN void png_read_data PNGARG((png_structp png_ptr, png_bytep data,
 
2878
   png_size_t length));
 
2879
 
 
2880
/* Read bytes into buf, and update png_ptr->crc */
 
2881
PNG_EXTERN void png_crc_read PNGARG((png_structp png_ptr, png_bytep buf,
 
2882
   png_size_t length));
 
2883
 
 
2884
/* Decompress data in a chunk that uses compression */
 
2885
#if defined(PNG_zTXt_SUPPORTED) || defined(PNG_iTXt_SUPPORTED) || \
 
2886
    defined(PNG_iCCP_SUPPORTED) || defined(PNG_sPLT_SUPPORTED)
 
2887
PNG_EXTERN png_charp png_decompress_chunk PNGARG((png_structp png_ptr,
 
2888
   int comp_type, png_charp chunkdata, png_size_t chunklength,
 
2889
   png_size_t prefix_length, png_size_t *data_length));
 
2890
#endif
 
2891
 
 
2892
/* Read "skip" bytes, read the file crc, and (optionally) verify png_ptr->crc */
 
2893
PNG_EXTERN int png_crc_finish PNGARG((png_structp png_ptr, png_uint_32 skip));
 
2894
 
 
2895
/* Read the CRC from the file and compare it to the libpng calculated CRC */
 
2896
PNG_EXTERN int png_crc_error PNGARG((png_structp png_ptr));
 
2897
 
 
2898
/* Calculate the CRC over a section of data.  Note that we are only
 
2899
 * passing a maximum of 64K on systems that have this as a memory limit,
 
2900
 * since this is the maximum buffer size we can specify.
 
2901
 */
 
2902
PNG_EXTERN void png_calculate_crc PNGARG((png_structp png_ptr, png_bytep ptr,
 
2903
   png_size_t length));
 
2904
 
 
2905
#if defined(PNG_WRITE_FLUSH_SUPPORTED)
 
2906
PNG_EXTERN void png_flush PNGARG((png_structp png_ptr));
 
2907
#endif
 
2908
 
 
2909
 
 
2910
/* Place a 32-bit number into a buffer in PNG byte order (big-endian).
 
2911
 * The only currently known PNG chunks that use signed numbers are
 
2912
 * the ancillary extension chunks, oFFs and pCAL.
 
2913
 */
 
2914
PNG_EXTERN void png_save_uint_32 PNGARG((png_bytep buf, png_uint_32 i));
 
2915
 
 
2916
#if defined(PNG_WRITE_pCAL_SUPPORTED) || defined(PNG_WRITE_oFFs_SUPPORTED)
 
2917
PNG_EXTERN void png_save_int_32 PNGARG((png_bytep buf, png_int_32 i));
 
2918
#endif
 
2919
 
 
2920
/* Place a 16-bit number into a buffer in PNG byte order.
 
2921
 * The parameter is declared unsigned int, not png_uint_16,
 
2922
 * just to avoid potential problems on pre-ANSI C compilers.
 
2923
 */
 
2924
PNG_EXTERN void png_save_uint_16 PNGARG((png_bytep buf, unsigned int i));
 
2925
 
 
2926
/* simple function to write the signature */
 
2927
PNG_EXTERN void png_write_sig PNGARG((png_structp png_ptr));
 
2928
 
 
2929
/* write various chunks */
 
2930
 
 
2931
/* Write the IHDR chunk, and update the png_struct with the necessary
 
2932
 * information.
 
2933
 */
 
2934
PNG_EXTERN void png_write_IHDR PNGARG((png_structp png_ptr, png_uint_32 width,
 
2935
   png_uint_32 height,
 
2936
   int bit_depth, int color_type, int compression_method, int filter_method,
 
2937
   int interlace_method));
 
2938
 
 
2939
PNG_EXTERN void png_write_PLTE PNGARG((png_structp png_ptr, png_colorp palette,
 
2940
   png_uint_32 num_pal));
 
2941
 
 
2942
PNG_EXTERN void png_write_IDAT PNGARG((png_structp png_ptr, png_bytep data,
 
2943
   png_size_t length));
 
2944
 
 
2945
PNG_EXTERN void png_write_IEND PNGARG((png_structp png_ptr));
 
2946
 
 
2947
#if defined(PNG_WRITE_gAMA_SUPPORTED)
 
2948
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
2949
PNG_EXTERN void png_write_gAMA PNGARG((png_structp png_ptr, double file_gamma));
 
2950
#endif
 
2951
#ifdef PNG_FIXED_POINT_SUPPORTED
 
2952
PNG_EXTERN void png_write_gAMA_fixed PNGARG((png_structp png_ptr, png_fixed_point
 
2953
    file_gamma));
 
2954
#endif
 
2955
#endif
 
2956
 
 
2957
#if defined(PNG_WRITE_sBIT_SUPPORTED)
 
2958
PNG_EXTERN void png_write_sBIT PNGARG((png_structp png_ptr, png_color_8p sbit,
 
2959
   int color_type));
 
2960
#endif
 
2961
 
 
2962
#if defined(PNG_WRITE_cHRM_SUPPORTED)
 
2963
#ifdef PNG_FLOATING_POINT_SUPPORTED
 
2964
PNG_EXTERN void png_write_cHRM PNGARG((png_structp png_ptr,
 
2965
   double white_x, double white_y,
 
2966
   double red_x, double red_y, double green_x, double green_y,
 
2967
   double blue_x, double blue_y));
 
2968
#endif
 
2969
#ifdef PNG_FIXED_POINT_SUPPORTED
 
2970
PNG_EXTERN void png_write_cHRM_fixed PNGARG((png_structp png_ptr,
 
2971
   png_fixed_point int_white_x, png_fixed_point int_white_y,
 
2972
   png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point
 
2973
   int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x,
 
2974
   png_fixed_point int_blue_y));
 
2975
#endif
 
2976
#endif
 
2977
 
 
2978
#if defined(PNG_WRITE_sRGB_SUPPORTED)
 
2979
PNG_EXTERN void png_write_sRGB PNGARG((png_structp png_ptr,
 
2980
   int intent));
 
2981
#endif
 
2982
 
 
2983
#if defined(PNG_WRITE_iCCP_SUPPORTED)
 
2984
PNG_EXTERN void png_write_iCCP PNGARG((png_structp png_ptr,
 
2985
   png_charp name, int compression_type,
 
2986
   png_charp profile, int proflen));
 
2987
   /* Note to maintainer: profile should be png_bytep */
 
2988
#endif
 
2989
 
 
2990
#if defined(PNG_WRITE_sPLT_SUPPORTED)
 
2991
PNG_EXTERN void png_write_sPLT PNGARG((png_structp png_ptr,
 
2992
   png_sPLT_tp palette));
 
2993
#endif
 
2994
 
 
2995
#if defined(PNG_WRITE_tRNS_SUPPORTED)
 
2996
PNG_EXTERN void png_write_tRNS PNGARG((png_structp png_ptr, png_bytep trans,
 
2997
   png_color_16p values, int number, int color_type));
 
2998
#endif
 
2999
 
 
3000
#if defined(PNG_WRITE_bKGD_SUPPORTED)
 
3001
PNG_EXTERN void png_write_bKGD PNGARG((png_structp png_ptr,
 
3002
   png_color_16p values, int color_type));
 
3003
#endif
 
3004
 
 
3005
#if defined(PNG_WRITE_hIST_SUPPORTED)
 
3006
PNG_EXTERN void png_write_hIST PNGARG((png_structp png_ptr, png_uint_16p hist,
 
3007
   int num_hist));
 
3008
#endif
 
3009
 
 
3010
#if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_pCAL_SUPPORTED) || \
 
3011
    defined(PNG_WRITE_iCCP_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED)
 
3012
PNG_EXTERN png_size_t png_check_keyword PNGARG((png_structp png_ptr,
 
3013
   png_charp key, png_charpp new_key));
 
3014
#endif
 
3015
 
 
3016
#if defined(PNG_WRITE_tEXt_SUPPORTED)
 
3017
PNG_EXTERN void png_write_tEXt PNGARG((png_structp png_ptr, png_charp key,
 
3018
   png_charp text, png_size_t text_len));
 
3019
#endif
 
3020
 
 
3021
#if defined(PNG_WRITE_zTXt_SUPPORTED)
 
3022
PNG_EXTERN void png_write_zTXt PNGARG((png_structp png_ptr, png_charp key,
 
3023
   png_charp text, png_size_t text_len, int compression));
 
3024
#endif
 
3025
 
 
3026
#if defined(PNG_WRITE_iTXt_SUPPORTED)
 
3027
PNG_EXTERN void png_write_iTXt PNGARG((png_structp png_ptr,
 
3028
   int compression, png_charp key, png_charp lang, png_charp lang_key,
 
3029
   png_charp text));
 
3030
#endif
 
3031
 
 
3032
#if defined(PNG_TEXT_SUPPORTED)  /* Added at version 1.0.14 and 1.2.4 */
 
3033
PNG_EXTERN int png_set_text_2 PNGARG((png_structp png_ptr,
 
3034
   png_infop info_ptr, png_textp text_ptr, int num_text));
 
3035
#endif
 
3036
 
 
3037
#if defined(PNG_WRITE_oFFs_SUPPORTED)
 
3038
PNG_EXTERN void png_write_oFFs PNGARG((png_structp png_ptr,
 
3039
   png_int_32 x_offset, png_int_32 y_offset, int unit_type));
 
3040
#endif
 
3041
 
 
3042
#if defined(PNG_WRITE_pCAL_SUPPORTED)
 
3043
PNG_EXTERN void png_write_pCAL PNGARG((png_structp png_ptr, png_charp purpose,
 
3044
   png_int_32 X0, png_int_32 X1, int type, int nparams,
 
3045
   png_charp units, png_charpp params));
 
3046
#endif
 
3047
 
 
3048
#if defined(PNG_WRITE_pHYs_SUPPORTED)
 
3049
PNG_EXTERN void png_write_pHYs PNGARG((png_structp png_ptr,
 
3050
   png_uint_32 x_pixels_per_unit, png_uint_32 y_pixels_per_unit,
 
3051
   int unit_type));
 
3052
#endif
 
3053
 
 
3054
#if defined(PNG_WRITE_tIME_SUPPORTED)
 
3055
PNG_EXTERN void png_write_tIME PNGARG((png_structp png_ptr,
 
3056
   png_timep mod_time));
 
3057
#endif
 
3058
 
 
3059
#if defined(PNG_WRITE_sCAL_SUPPORTED)
 
3060
#if defined(PNG_FLOATING_POINT_SUPPORTED) && !defined(PNG_NO_STDIO)
 
3061
PNG_EXTERN void png_write_sCAL PNGARG((png_structp png_ptr,
 
3062
   int unit, double width, double height));
 
3063
#else
 
3064
#ifdef PNG_FIXED_POINT_SUPPORTED
 
3065
PNG_EXTERN void png_write_sCAL_s PNGARG((png_structp png_ptr,
 
3066
   int unit, png_charp width, png_charp height));
 
3067
#endif
 
3068
#endif
 
3069
#endif
 
3070
 
 
3071
/* Called when finished processing a row of data */
 
3072
PNG_EXTERN void png_write_finish_row PNGARG((png_structp png_ptr));
 
3073
 
 
3074
/* Internal use only.   Called before first row of data */
 
3075
PNG_EXTERN void png_write_start_row PNGARG((png_structp png_ptr));
 
3076
 
 
3077
#if defined(PNG_READ_GAMMA_SUPPORTED)
 
3078
PNG_EXTERN void png_build_gamma_table PNGARG((png_structp png_ptr));
 
3079
#endif
 
3080
 
 
3081
/* combine a row of data, dealing with alpha, etc. if requested */
 
3082
PNG_EXTERN void png_combine_row PNGARG((png_structp png_ptr, png_bytep row,
 
3083
   int mask));
 
3084
 
 
3085
#if defined(PNG_READ_INTERLACING_SUPPORTED)
 
3086
/* expand an interlaced row */
 
3087
/* OLD pre-1.0.9 interface:
 
3088
PNG_EXTERN void png_do_read_interlace PNGARG((png_row_infop row_info,
 
3089
   png_bytep row, int pass, png_uint_32 transformations));
 
3090
 */
 
3091
PNG_EXTERN void png_do_read_interlace PNGARG((png_structp png_ptr));
 
3092
#endif
 
3093
 
 
3094
/* GRR TO DO (2.0 or whenever):  simplify other internal calling interfaces */
 
3095
 
 
3096
#if defined(PNG_WRITE_INTERLACING_SUPPORTED)
 
3097
/* grab pixels out of a row for an interlaced pass */
 
3098
PNG_EXTERN void png_do_write_interlace PNGARG((png_row_infop row_info,
 
3099
   png_bytep row, int pass));
 
3100
#endif
 
3101
 
 
3102
/* unfilter a row */
 
3103
PNG_EXTERN void png_read_filter_row PNGARG((png_structp png_ptr,
 
3104
   png_row_infop row_info, png_bytep row, png_bytep prev_row, int filter));
 
3105
 
 
3106
/* Choose the best filter to use and filter the row data */
 
3107
PNG_EXTERN void png_write_find_filter PNGARG((png_structp png_ptr,
 
3108
   png_row_infop row_info));
 
3109
 
 
3110
/* Write out the filtered row. */
 
3111
PNG_EXTERN void png_write_filtered_row PNGARG((png_structp png_ptr,
 
3112
   png_bytep filtered_row));
 
3113
/* finish a row while reading, dealing with interlacing passes, etc. */
 
3114
PNG_EXTERN void png_read_finish_row PNGARG((png_structp png_ptr));
 
3115
 
 
3116
/* initialize the row buffers, etc. */
 
3117
PNG_EXTERN void png_read_start_row PNGARG((png_structp png_ptr));
 
3118
/* optional call to update the users info structure */
 
3119
PNG_EXTERN void png_read_transform_info PNGARG((png_structp png_ptr,
 
3120
   png_infop info_ptr));
 
3121
 
 
3122
/* these are the functions that do the transformations */
 
3123
#if defined(PNG_READ_FILLER_SUPPORTED)
 
3124
PNG_EXTERN void png_do_read_filler PNGARG((png_row_infop row_info,
 
3125
   png_bytep row, png_uint_32 filler, png_uint_32 flags));
 
3126
#endif
 
3127
 
 
3128
#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED)
 
3129
PNG_EXTERN void png_do_read_swap_alpha PNGARG((png_row_infop row_info,
 
3130
   png_bytep row));
 
3131
#endif
 
3132
 
 
3133
#if defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)
 
3134
PNG_EXTERN void png_do_write_swap_alpha PNGARG((png_row_infop row_info,
 
3135
   png_bytep row));
 
3136
#endif
 
3137
 
 
3138
#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED)
 
3139
PNG_EXTERN void png_do_read_invert_alpha PNGARG((png_row_infop row_info,
 
3140
   png_bytep row));
 
3141
#endif
 
3142
 
 
3143
#if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
 
3144
PNG_EXTERN void png_do_write_invert_alpha PNGARG((png_row_infop row_info,
 
3145
   png_bytep row));
 
3146
#endif
 
3147
 
 
3148
#if defined(PNG_WRITE_FILLER_SUPPORTED) || \
 
3149
    defined(PNG_READ_STRIP_ALPHA_SUPPORTED)
 
3150
PNG_EXTERN void png_do_strip_filler PNGARG((png_row_infop row_info,
 
3151
   png_bytep row, png_uint_32 flags));
 
3152
#endif
 
3153
 
 
3154
#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
 
3155
PNG_EXTERN void png_do_swap PNGARG((png_row_infop row_info, png_bytep row));
 
3156
#endif
 
3157
 
 
3158
#if defined(PNG_READ_PACKSWAP_SUPPORTED) || defined(PNG_WRITE_PACKSWAP_SUPPORTED)
 
3159
PNG_EXTERN void png_do_packswap PNGARG((png_row_infop row_info, png_bytep row));
 
3160
#endif
 
3161
 
 
3162
#if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
 
3163
PNG_EXTERN int png_do_rgb_to_gray PNGARG((png_structp png_ptr, png_row_infop
 
3164
   row_info, png_bytep row));
 
3165
#endif
 
3166
 
 
3167
#if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)
 
3168
PNG_EXTERN void png_do_gray_to_rgb PNGARG((png_row_infop row_info,
 
3169
   png_bytep row));
 
3170
#endif
 
3171
 
 
3172
#if defined(PNG_READ_PACK_SUPPORTED)
 
3173
PNG_EXTERN void png_do_unpack PNGARG((png_row_infop row_info, png_bytep row));
 
3174
#endif
 
3175
 
 
3176
#if defined(PNG_READ_SHIFT_SUPPORTED)
 
3177
PNG_EXTERN void png_do_unshift PNGARG((png_row_infop row_info, png_bytep row,
 
3178
   png_color_8p sig_bits));
 
3179
#endif
 
3180
 
 
3181
#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED)
 
3182
PNG_EXTERN void png_do_invert PNGARG((png_row_infop row_info, png_bytep row));
 
3183
#endif
 
3184
 
 
3185
#if defined(PNG_READ_16_TO_8_SUPPORTED)
 
3186
PNG_EXTERN void png_do_chop PNGARG((png_row_infop row_info, png_bytep row));
 
3187
#endif
 
3188
 
 
3189
#if defined(PNG_READ_DITHER_SUPPORTED)
 
3190
PNG_EXTERN void png_do_dither PNGARG((png_row_infop row_info,
 
3191
   png_bytep row, png_bytep palette_lookup, png_bytep dither_lookup));
 
3192
 
 
3193
#  if defined(PNG_CORRECT_PALETTE_SUPPORTED)
 
3194
PNG_EXTERN void png_correct_palette PNGARG((png_structp png_ptr,
 
3195
   png_colorp palette, int num_palette));
 
3196
#  endif
 
3197
#endif
 
3198
 
 
3199
#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
 
3200
PNG_EXTERN void png_do_bgr PNGARG((png_row_infop row_info, png_bytep row));
 
3201
#endif
 
3202
 
 
3203
#if defined(PNG_WRITE_PACK_SUPPORTED)
 
3204
PNG_EXTERN void png_do_pack PNGARG((png_row_infop row_info,
 
3205
   png_bytep row, png_uint_32 bit_depth));
 
3206
#endif
 
3207
 
 
3208
#if defined(PNG_WRITE_SHIFT_SUPPORTED)
 
3209
PNG_EXTERN void png_do_shift PNGARG((png_row_infop row_info, png_bytep row,
 
3210
   png_color_8p bit_depth));
 
3211
#endif
 
3212
 
 
3213
#if defined(PNG_READ_BACKGROUND_SUPPORTED)
 
3214
#if defined(PNG_READ_GAMMA_SUPPORTED)
 
3215
PNG_EXTERN void png_do_background PNGARG((png_row_infop row_info, png_bytep row,
 
3216
   png_color_16p trans_values, png_color_16p background,
 
3217
   png_color_16p background_1,
 
3218
   png_bytep gamma_table, png_bytep gamma_from_1, png_bytep gamma_to_1,
 
3219
   png_uint_16pp gamma_16, png_uint_16pp gamma_16_from_1,
 
3220
   png_uint_16pp gamma_16_to_1, int gamma_shift));
 
3221
#else
 
3222
PNG_EXTERN void png_do_background PNGARG((png_row_infop row_info, png_bytep row,
 
3223
   png_color_16p trans_values, png_color_16p background));
 
3224
#endif
 
3225
#endif
 
3226
 
 
3227
#if defined(PNG_READ_GAMMA_SUPPORTED)
 
3228
PNG_EXTERN void png_do_gamma PNGARG((png_row_infop row_info, png_bytep row,
 
3229
   png_bytep gamma_table, png_uint_16pp gamma_16_table,
 
3230
   int gamma_shift));
 
3231
#endif
 
3232
 
 
3233
#if defined(PNG_READ_EXPAND_SUPPORTED)
 
3234
PNG_EXTERN void png_do_expand_palette PNGARG((png_row_infop row_info,
 
3235
   png_bytep row, png_colorp palette, png_bytep trans, int num_trans));
 
3236
PNG_EXTERN void png_do_expand PNGARG((png_row_infop row_info,
 
3237
   png_bytep row, png_color_16p trans_value));
 
3238
#endif
 
3239
 
 
3240
/* The following decodes the appropriate chunks, and does error correction,
 
3241
 * then calls the appropriate callback for the chunk if it is valid.
 
3242
 */
 
3243
 
 
3244
/* decode the IHDR chunk */
 
3245
PNG_EXTERN void png_handle_IHDR PNGARG((png_structp png_ptr, png_infop info_ptr,
 
3246
   png_uint_32 length));
 
3247
PNG_EXTERN void png_handle_PLTE PNGARG((png_structp png_ptr, png_infop info_ptr,
 
3248
   png_uint_32 length));
 
3249
PNG_EXTERN void png_handle_IEND PNGARG((png_structp png_ptr, png_infop info_ptr,
 
3250
   png_uint_32 length));
 
3251
 
 
3252
#if defined(PNG_READ_bKGD_SUPPORTED)
 
3253
PNG_EXTERN void png_handle_bKGD PNGARG((png_structp png_ptr, png_infop info_ptr,
 
3254
   png_uint_32 length));
 
3255
#endif
 
3256
 
 
3257
#if defined(PNG_READ_cHRM_SUPPORTED)
 
3258
PNG_EXTERN void png_handle_cHRM PNGARG((png_structp png_ptr, png_infop info_ptr,
 
3259
   png_uint_32 length));
 
3260
#endif
 
3261
 
 
3262
#if defined(PNG_READ_gAMA_SUPPORTED)
 
3263
PNG_EXTERN void png_handle_gAMA PNGARG((png_structp png_ptr, png_infop info_ptr,
 
3264
   png_uint_32 length));
 
3265
#endif
 
3266
 
 
3267
#if defined(PNG_READ_hIST_SUPPORTED)
 
3268
PNG_EXTERN void png_handle_hIST PNGARG((png_structp png_ptr, png_infop info_ptr,
 
3269
   png_uint_32 length));
 
3270
#endif
 
3271
 
 
3272
#if defined(PNG_READ_iCCP_SUPPORTED)
 
3273
extern void png_handle_iCCP PNGARG((png_structp png_ptr, png_infop info_ptr,
 
3274
   png_uint_32 length));
 
3275
#endif /* PNG_READ_iCCP_SUPPORTED */
 
3276
 
 
3277
#if defined(PNG_READ_iTXt_SUPPORTED)
 
3278
PNG_EXTERN void png_handle_iTXt PNGARG((png_structp png_ptr, png_infop info_ptr,
 
3279
   png_uint_32 length));
 
3280
#endif
 
3281
 
 
3282
#if defined(PNG_READ_oFFs_SUPPORTED)
 
3283
PNG_EXTERN void png_handle_oFFs PNGARG((png_structp png_ptr, png_infop info_ptr,
 
3284
   png_uint_32 length));
 
3285
#endif
 
3286
 
 
3287
#if defined(PNG_READ_pCAL_SUPPORTED)
 
3288
PNG_EXTERN void png_handle_pCAL PNGARG((png_structp png_ptr, png_infop info_ptr,
 
3289
   png_uint_32 length));
 
3290
#endif
 
3291
 
 
3292
#if defined(PNG_READ_pHYs_SUPPORTED)
 
3293
PNG_EXTERN void png_handle_pHYs PNGARG((png_structp png_ptr, png_infop info_ptr,
 
3294
   png_uint_32 length));
 
3295
#endif
 
3296
 
 
3297
#if defined(PNG_READ_sBIT_SUPPORTED)
 
3298
PNG_EXTERN void png_handle_sBIT PNGARG((png_structp png_ptr, png_infop info_ptr,
 
3299
   png_uint_32 length));
 
3300
#endif
 
3301
 
 
3302
#if defined(PNG_READ_sCAL_SUPPORTED)
 
3303
PNG_EXTERN void png_handle_sCAL PNGARG((png_structp png_ptr, png_infop info_ptr,
 
3304
   png_uint_32 length));
 
3305
#endif
 
3306
 
 
3307
#if defined(PNG_READ_sPLT_SUPPORTED)
 
3308
extern void png_handle_sPLT PNGARG((png_structp png_ptr, png_infop info_ptr,
 
3309
   png_uint_32 length));
 
3310
#endif /* PNG_READ_sPLT_SUPPORTED */
 
3311
 
 
3312
#if defined(PNG_READ_sRGB_SUPPORTED)
 
3313
PNG_EXTERN void png_handle_sRGB PNGARG((png_structp png_ptr, png_infop info_ptr,
 
3314
   png_uint_32 length));
 
3315
#endif
 
3316
 
 
3317
#if defined(PNG_READ_tEXt_SUPPORTED)
 
3318
PNG_EXTERN void png_handle_tEXt PNGARG((png_structp png_ptr, png_infop info_ptr,
 
3319
   png_uint_32 length));
 
3320
#endif
 
3321
 
 
3322
#if defined(PNG_READ_tIME_SUPPORTED)
 
3323
PNG_EXTERN void png_handle_tIME PNGARG((png_structp png_ptr, png_infop info_ptr,
 
3324
   png_uint_32 length));
 
3325
#endif
 
3326
 
 
3327
#if defined(PNG_READ_tRNS_SUPPORTED)
 
3328
PNG_EXTERN void png_handle_tRNS PNGARG((png_structp png_ptr, png_infop info_ptr,
 
3329
   png_uint_32 length));
 
3330
#endif
 
3331
 
 
3332
#if defined(PNG_READ_zTXt_SUPPORTED)
 
3333
PNG_EXTERN void png_handle_zTXt PNGARG((png_structp png_ptr, png_infop info_ptr,
 
3334
   png_uint_32 length));
 
3335
#endif
 
3336
 
 
3337
PNG_EXTERN void png_handle_unknown PNGARG((png_structp png_ptr,
 
3338
   png_infop info_ptr, png_uint_32 length));
 
3339
 
 
3340
PNG_EXTERN void png_check_chunk_name PNGARG((png_structp png_ptr,
 
3341
   png_bytep chunk_name));
 
3342
 
 
3343
/* handle the transformations for reading and writing */
 
3344
PNG_EXTERN void png_do_read_transformations PNGARG((png_structp png_ptr));
 
3345
PNG_EXTERN void png_do_write_transformations PNGARG((png_structp png_ptr));
 
3346
 
 
3347
PNG_EXTERN void png_init_read_transformations PNGARG((png_structp png_ptr));
 
3348
 
 
3349
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
 
3350
PNG_EXTERN void png_push_read_chunk PNGARG((png_structp png_ptr,
 
3351
   png_infop info_ptr));
 
3352
PNG_EXTERN void png_push_read_sig PNGARG((png_structp png_ptr,
 
3353
   png_infop info_ptr));
 
3354
PNG_EXTERN void png_push_check_crc PNGARG((png_structp png_ptr));
 
3355
PNG_EXTERN void png_push_crc_skip PNGARG((png_structp png_ptr,
 
3356
   png_uint_32 length));
 
3357
PNG_EXTERN void png_push_crc_finish PNGARG((png_structp png_ptr));
 
3358
PNG_EXTERN void png_push_save_buffer PNGARG((png_structp png_ptr));
 
3359
PNG_EXTERN void png_push_restore_buffer PNGARG((png_structp png_ptr,
 
3360
   png_bytep buffer, png_size_t buffer_length));
 
3361
PNG_EXTERN void png_push_read_IDAT PNGARG((png_structp png_ptr));
 
3362
PNG_EXTERN void png_process_IDAT_data PNGARG((png_structp png_ptr,
 
3363
   png_bytep buffer, png_size_t buffer_length));
 
3364
PNG_EXTERN void png_push_process_row PNGARG((png_structp png_ptr));
 
3365
PNG_EXTERN void png_push_handle_unknown PNGARG((png_structp png_ptr,
 
3366
   png_infop info_ptr, png_uint_32 length));
 
3367
PNG_EXTERN void png_push_have_info PNGARG((png_structp png_ptr,
 
3368
   png_infop info_ptr));
 
3369
PNG_EXTERN void png_push_have_end PNGARG((png_structp png_ptr,
 
3370
   png_infop info_ptr));
 
3371
PNG_EXTERN void png_push_have_row PNGARG((png_structp png_ptr, png_bytep row));
 
3372
PNG_EXTERN void png_push_read_end PNGARG((png_structp png_ptr,
 
3373
   png_infop info_ptr));
 
3374
PNG_EXTERN void png_process_some_data PNGARG((png_structp png_ptr,
 
3375
   png_infop info_ptr));
 
3376
PNG_EXTERN void png_read_push_finish_row PNGARG((png_structp png_ptr));
 
3377
#if defined(PNG_READ_tEXt_SUPPORTED)
 
3378
PNG_EXTERN void png_push_handle_tEXt PNGARG((png_structp png_ptr,
 
3379
   png_infop info_ptr, png_uint_32 length));
 
3380
PNG_EXTERN void png_push_read_tEXt PNGARG((png_structp png_ptr,
 
3381
   png_infop info_ptr));
 
3382
#endif
 
3383
#if defined(PNG_READ_zTXt_SUPPORTED)
 
3384
PNG_EXTERN void png_push_handle_zTXt PNGARG((png_structp png_ptr,
 
3385
   png_infop info_ptr, png_uint_32 length));
 
3386
PNG_EXTERN void png_push_read_zTXt PNGARG((png_structp png_ptr,
 
3387
   png_infop info_ptr));
 
3388
#endif
 
3389
#if defined(PNG_READ_iTXt_SUPPORTED)
 
3390
PNG_EXTERN void png_push_handle_iTXt PNGARG((png_structp png_ptr,
 
3391
   png_infop info_ptr, png_uint_32 length));
 
3392
PNG_EXTERN void png_push_read_iTXt PNGARG((png_structp png_ptr,
 
3393
   png_infop info_ptr));
 
3394
#endif
 
3395
 
 
3396
#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
 
3397
 
 
3398
#ifdef PNG_MNG_FEATURES_SUPPORTED
 
3399
PNG_EXTERN void png_do_read_intrapixel PNGARG((png_row_infop row_info,
 
3400
   png_bytep row));
 
3401
PNG_EXTERN void png_do_write_intrapixel PNGARG((png_row_infop row_info,
 
3402
   png_bytep row));
 
3403
#endif
 
3404
 
 
3405
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
 
3406
/* png.c */ /* PRIVATE */
 
3407
PNG_EXTERN void png_init_mmx_flags PNGARG((png_structp png_ptr));
 
3408
#endif
 
3409
/* Maintainer: Put new private prototypes here ^ and in libpngpf.3 */
 
3410
 
 
3411
#endif /* PNG_INTERNAL */
 
3412
 
 
3413
#ifdef __cplusplus
 
3414
}
 
3415
#endif
 
3416
 
 
3417
#endif /* PNG_VERSION_INFO_ONLY */
 
3418
/* do not put anything past this line */
 
3419
#endif /* PNG_H */