Skip to content

Latest commit

 

History

History
3276 lines (2934 loc) · 141 KB

File metadata and controls

3276 lines (2934 loc) · 141 KB
 
Jan 2, 2012
Jan 2, 2012
1
Jan 18, 2011
Jan 18, 2011
2
3
/* png.h - header file for PNG reference library
*
Oct 22, 2017
Oct 22, 2017
4
5
6
* libpng version 1.6.32, August 24, 2017
*
* Copyright (c) 1998-2002,2004,2006-2017 Glenn Randers-Pehrson
Jan 18, 2011
Jan 18, 2011
7
8
9
10
11
12
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
*
* This code is released under the libpng license (See LICENSE, below)
*
* Authors and maintainers:
Jan 2, 2012
Jan 2, 2012
13
* libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
Oct 22, 2017
Oct 22, 2017
14
15
16
* libpng versions 0.89, June 1996, through 0.96, May 1997: Andreas Dilger
* libpng versions 0.97, January 1998, through 1.6.32, August 24, 2017:
* Glenn Randers-Pehrson.
Jan 2, 2012
Jan 2, 2012
17
* See also "Contributing Authors", below.
Jan 18, 2011
Jan 18, 2011
18
19
20
21
22
23
24
25
26
27
*/
/*
* COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
*
* If you modify libpng you may insert additional notices immediately following
* this sentence.
*
* This code is released under the libpng license.
*
Oct 22, 2017
Oct 22, 2017
28
29
30
31
32
* libpng versions 1.0.7, July 1, 2000 through 1.6.32, August 24, 2017 are
* Copyright (c) 2000-2002, 2004, 2006-2017 Glenn Randers-Pehrson, are
* derived from libpng-1.0.6, and are distributed according to the same
* disclaimer and license as libpng-1.0.6 with the following individuals
* added to the list of Contributing Authors:
Jan 18, 2011
Jan 18, 2011
33
34
35
*
* Simon-Pierre Cadieux
* Eric S. Raymond
Oct 22, 2017
Oct 22, 2017
36
37
* Mans Rullgard
* Cosmin Truta
Jan 18, 2011
Jan 18, 2011
38
* Gilles Vollant
Oct 22, 2017
Oct 22, 2017
39
40
41
42
* James Yu
* Mandar Sahastrabuddhe
* Google Inc.
* Vadim Barkov
Jan 18, 2011
Jan 18, 2011
43
44
45
46
47
48
49
50
51
52
*
* and with the following additions to the disclaimer:
*
* There is no warranty against interference with your enjoyment of the
* library or against infringement. There is no warranty that our
* efforts or the library will fulfill any of your particular purposes
* or needs. This library is provided with all faults, and the entire
* risk of satisfactory quality, performance, accuracy, and effort is with
* the user.
*
Oct 22, 2017
Oct 22, 2017
53
54
55
56
* Some files in the "contrib" directory and some configure-generated
* files that are distributed with libpng have other copyright owners and
* are released under other open source licenses.
*
Jan 18, 2011
Jan 18, 2011
57
* libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
Oct 22, 2017
Oct 22, 2017
58
59
60
61
* Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
* libpng-0.96, and are distributed according to the same disclaimer and
* license as libpng-0.96, with the following individuals added to the list
* of Contributing Authors:
Jan 18, 2011
Jan 18, 2011
62
63
64
65
66
67
*
* Tom Lane
* Glenn Randers-Pehrson
* Willem van Schaik
*
* libpng versions 0.89, June 1996, through 0.96, May 1997, are
Oct 22, 2017
Oct 22, 2017
68
69
70
71
* Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88,
* and are distributed according to the same disclaimer and license as
* libpng-0.88, with the following individuals added to the list of
* Contributing Authors:
Jan 18, 2011
Jan 18, 2011
72
73
74
75
76
77
78
79
*
* John Bowler
* Kevin Bracey
* Sam Bushell
* Magnus Holmgren
* Greg Roelofs
* Tom Tanner
*
Oct 22, 2017
Oct 22, 2017
80
81
82
* Some files in the "scripts" directory have other copyright owners
* but are released under this license.
*
Jan 18, 2011
Jan 18, 2011
83
* libpng versions 0.5, May 1995, through 0.88, January 1996, are
Oct 22, 2017
Oct 22, 2017
84
* Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
Jan 18, 2011
Jan 18, 2011
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
*
* For the purposes of this copyright and license, "Contributing Authors"
* is defined as the following set of individuals:
*
* Andreas Dilger
* Dave Martindale
* Guy Eric Schalnat
* Paul Schmidt
* Tim Wegner
*
* The PNG Reference Library is supplied "AS IS". The Contributing Authors
* and Group 42, Inc. disclaim all warranties, expressed or implied,
* including, without limitation, the warranties of merchantability and of
* fitness for any purpose. The Contributing Authors and Group 42, Inc.
* assume no liability for direct, indirect, incidental, special, exemplary,
* or consequential damages, which may result from the use of the PNG
* Reference Library, even if advised of the possibility of such damage.
*
* Permission is hereby granted to use, copy, modify, and distribute this
* source code, or portions hereof, for any purpose, without fee, subject
* to the following restrictions:
*
Jan 2, 2012
Jan 2, 2012
107
* 1. The origin of this source code must not be misrepresented.
Jan 18, 2011
Jan 18, 2011
108
*
Jan 2, 2012
Jan 2, 2012
109
110
* 2. Altered versions must be plainly marked as such and must not
* be misrepresented as being the original source.
Jan 18, 2011
Jan 18, 2011
111
*
Oct 22, 2017
Oct 22, 2017
112
113
* 3. This Copyright notice may not be removed or altered from any
* source or altered source distribution.
Jan 18, 2011
Jan 18, 2011
114
115
116
117
118
119
*
* The Contributing Authors and Group 42, Inc. specifically permit, without
* fee, and encourage the use of this source code as a component to
* supporting the PNG file format in commercial products. If you use this
* source code in a product, acknowledgment is not required but would be
* appreciated.
Oct 22, 2017
Oct 22, 2017
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
*
* END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.
*
* TRADEMARK:
*
* The name "libpng" has not been registered by the Copyright owner
* as a trademark in any jurisdiction. However, because libpng has
* been distributed and maintained world-wide, continually since 1995,
* the Copyright owner claims "common-law trademark protection" in any
* jurisdiction where common-law trademark is recognized.
*
* OSI CERTIFICATION:
*
* Libpng is OSI Certified Open Source Software. OSI Certified Open Source is
* a certification mark of the Open Source Initiative. OSI has not addressed
* the additional disclaimers inserted at version 1.0.7.
*
* EXPORT CONTROL:
*
* The Copyright owner believes that the Export Control Classification
* Number (ECCN) for libpng is EAR99, which means not subject to export
* controls or International Traffic in Arms Regulations (ITAR) because
* it is open source, publicly available software, that does not contain
* any encryption software. See the EAR, paragraphs 734.3(b)(3) and
* 734.7(b).
Jan 18, 2011
Jan 18, 2011
145
146
147
148
149
150
*/
/*
* A "png_get_copyright" function is available, for convenient use in "about"
* boxes and the like:
*
Oct 22, 2017
Oct 22, 2017
151
* printf("%s", png_get_copyright(NULL));
Jan 18, 2011
Jan 18, 2011
152
153
154
155
156
157
158
159
160
161
162
163
164
*
* Also, the PNG logo (in PNG format, of course) is supplied in the
* files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
*/
/*
* The contributing authors would like to thank all those who helped
* with testing, bug fixes, and patience. This wouldn't have been
* possible without all of you.
*
* Thanks to Frank J. T. Wojcik for helping with the documentation.
*/
Oct 22, 2017
Oct 22, 2017
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
/* Note about libpng version numbers:
*
* Due to various miscommunications, unforeseen code incompatibilities
* and occasional factors outside the authors' control, version numbering
* on the library has not always been consistent and straightforward.
* The following table summarizes matters since version 0.89c, which was
* the first widely used release:
*
* source png.h png.h shared-lib
* version string int version
* ------- ------ ----- ----------
* 0.89c "1.0 beta 3" 0.89 89 1.0.89
* 0.90 "1.0 beta 4" 0.90 90 0.90 [should have been 2.0.90]
* 0.95 "1.0 beta 5" 0.95 95 0.95 [should have been 2.0.95]
* 0.96 "1.0 beta 6" 0.96 96 0.96 [should have been 2.0.96]
* 0.97b "1.00.97 beta 7" 1.00.97 97 1.0.1 [should have been 2.0.97]
* 0.97c 0.97 97 2.0.97
* 0.98 0.98 98 2.0.98
* 0.99 0.99 98 2.0.99
* 0.99a-m 0.99 99 2.0.99
* 1.00 1.00 100 2.1.0 [100 should be 10000]
* 1.0.0 (from here on, the 100 2.1.0 [100 should be 10000]
* 1.0.1 png.h string is 10001 2.1.0
* 1.0.1a-e identical to the 10002 from here on, the shared library
* 1.0.2 source version) 10002 is 2.V where V is the source code
* 1.0.2a-b 10003 version, except as noted.
* 1.0.3 10003
* 1.0.3a-d 10004
* 1.0.4 10004
* 1.0.4a-f 10005
* 1.0.5 (+ 2 patches) 10005
* 1.0.5a-d 10006
* 1.0.5e-r 10100 (not source compatible)
* 1.0.5s-v 10006 (not binary compatible)
* 1.0.6 (+ 3 patches) 10006 (still binary incompatible)
* 1.0.6d-f 10007 (still binary incompatible)
* 1.0.6g 10007
* 1.0.6h 10007 10.6h (testing xy.z so-numbering)
* 1.0.6i 10007 10.6i
* 1.0.6j 10007 2.1.0.6j (incompatible with 1.0.0)
* 1.0.7beta11-14 DLLNUM 10007 2.1.0.7beta11-14 (binary compatible)
* 1.0.7beta15-18 1 10007 2.1.0.7beta15-18 (binary compatible)
* 1.0.7rc1-2 1 10007 2.1.0.7rc1-2 (binary compatible)
* 1.0.7 1 10007 (still compatible)
* ...
* 1.0.19 10 10019 10.so.0.19[.0]
* ...
* 1.2.57 13 10257 12.so.0.57[.0]
* ...
* 1.5.28 15 10527 15.so.15.28[.0]
* ...
* 1.6.32 16 10632 16.so.16.32[.0]
*
* Henceforth the source version will match the shared-library major
* and minor numbers; the shared-library major version number will be
* used for changes in backward compatibility, as it is intended. The
* PNG_LIBPNG_VER macro, which is not used within libpng but is available
* for applications, is an unsigned integer of the form xyyzz corresponding
* to the source version x.y.z (leading zeros in y and z). Beta versions
* were given the previous public release number plus a letter, until
* version 1.0.6j; from then on they were given the upcoming public
* release number plus "betaNN" or "rcNN".
*
* Binary incompatibility exists only when applications make direct access
* to the info_ptr or png_ptr members through png.h, and the compiled
* application is loaded with a different version of the library.
*
* DLLNUM will change each time there are forward or backward changes
* in binary compatibility (e.g., when a new feature is added).
*
* See libpng.txt or libpng.3 for more information. The PNG specification
* is available as a W3C Recommendation and as an ISO Specification,
* <https://www.w3.org/TR/2003/REC-PNG-20031110/
*/
Jan 18, 2011
Jan 18, 2011
240
241
242
243
/*
* Y2K compliance in libpng:
* =========================
*
Oct 22, 2017
Oct 22, 2017
244
* August 24, 2017
Jan 18, 2011
Jan 18, 2011
245
246
247
248
249
*
* Since the PNG Development group is an ad-hoc body, we can't make
* an official declaration.
*
* This is your unofficial assurance that libpng from version 0.71 and
Oct 22, 2017
Oct 22, 2017
250
* upward through 1.6.32 are Y2K compliant. It is my belief that
Jan 2, 2012
Jan 2, 2012
251
* earlier versions were also Y2K compliant.
Jan 18, 2011
Jan 18, 2011
252
*
Jan 2, 2012
Jan 2, 2012
253
* Libpng only has two year fields. One is a 2-byte unsigned integer
May 27, 2013
May 27, 2013
254
255
* that will hold years up to 65535. The other, which is deprecated,
* holds the date in text format, and will hold years up to 9999.
Jan 18, 2011
Jan 18, 2011
256
257
258
259
*
* The integer is
* "png_uint_16 year" in png_time_struct.
*
Jan 2, 2012
Jan 2, 2012
260
* The string is
May 27, 2013
May 27, 2013
261
262
* "char time_buffer[29]" in png_struct. This is no longer used
* in libpng-1.6.x and will be removed from libpng-1.7.0.
Jan 18, 2011
Jan 18, 2011
263
264
*
* There are seven time-related functions:
May 27, 2013
May 27, 2013
265
266
267
* png.c: png_convert_to_rfc_1123_buffer() in png.c
* (formerly png_convert_to_rfc_1123() prior to libpng-1.5.x and
* png_convert_to_rfc_1152() in error prior to libpng-0.98)
Jan 18, 2011
Jan 18, 2011
268
269
270
271
272
273
274
275
276
277
* png_convert_from_struct_tm() in pngwrite.c, called in pngwrite.c
* png_convert_from_time_t() in pngwrite.c
* png_get_tIME() in pngget.c
* png_handle_tIME() in pngrutil.c, called in pngread.c
* png_set_tIME() in pngset.c
* png_write_tIME() in pngwutil.c, called in pngwrite.c
*
* All handle dates properly in a Y2K environment. The
* png_convert_from_time_t() function calls gmtime() to convert from system
* clock time, which returns (year - 1900), which we properly convert to
May 27, 2013
May 27, 2013
278
279
* the full 4-digit year. There is a possibility that libpng applications
* are not passing 4-digit years into the png_convert_to_rfc_1123_buffer()
Jan 18, 2011
Jan 18, 2011
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
* function, or that they are incorrectly passing only a 2-digit year
* instead of "year - 1900" into the png_convert_from_struct_tm() function,
* but this is not under our control. The libpng documentation has always
* stated that it works with 4-digit years, and the APIs have been
* documented as such.
*
* The tIME chunk itself is also Y2K compliant. It uses a 2-byte unsigned
* integer to hold the year, and can hold years as large as 65535.
*
* zlib, upon which libpng depends, is also Y2K compliant. It contains
* no date-related code.
*
* Glenn Randers-Pehrson
* libpng maintainer
* PNG Development Group
*/
#ifndef PNG_H
#define PNG_H
Jan 2, 2012
Jan 2, 2012
300
/* This is not the place to learn how to use libpng. The file libpng-manual.txt
Jan 18, 2011
Jan 18, 2011
301
302
* describes how to use libpng, and the file example.c summarizes it
* with some code on which to build. This file is useful for looking
Oct 22, 2017
Oct 22, 2017
303
304
305
* at the actual function definitions and structure components. If that
* file has been stripped from your copy of libpng, you can find it at
* <http://www.libpng.org/pub/png/libpng-manual.txt>
Jan 2, 2012
Jan 2, 2012
306
307
308
*
* If you just need to read a PNG file and don't want to read the documentation
* skip to the end of this file and read the section entitled 'simplified API'.
Jan 18, 2011
Jan 18, 2011
309
310
311
*/
/* Version information for png.h - this should match the version in png.c */
Oct 22, 2017
Oct 22, 2017
312
313
#define PNG_LIBPNG_VER_STRING "1.6.32"
#define PNG_HEADER_VERSION_STRING " libpng version 1.6.32 - August 24, 2017\n"
Jan 18, 2011
Jan 18, 2011
314
May 27, 2013
May 27, 2013
315
316
#define PNG_LIBPNG_VER_SONUM 16
#define PNG_LIBPNG_VER_DLLNUM 16
Jan 18, 2011
Jan 18, 2011
317
318
319
/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
#define PNG_LIBPNG_VER_MAJOR 1
May 27, 2013
May 27, 2013
320
#define PNG_LIBPNG_VER_MINOR 6
Oct 22, 2017
Oct 22, 2017
321
#define PNG_LIBPNG_VER_RELEASE 32
Jan 2, 2012
Jan 2, 2012
322
Jan 18, 2011
Jan 18, 2011
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
/* This should match the numeric part of the final component of
* PNG_LIBPNG_VER_STRING, omitting any leading zero:
*/
#define PNG_LIBPNG_VER_BUILD 0
/* Release Status */
#define PNG_LIBPNG_BUILD_ALPHA 1
#define PNG_LIBPNG_BUILD_BETA 2
#define PNG_LIBPNG_BUILD_RC 3
#define PNG_LIBPNG_BUILD_STABLE 4
#define PNG_LIBPNG_BUILD_RELEASE_STATUS_MASK 7
/* Release-Specific Flags */
#define PNG_LIBPNG_BUILD_PATCH 8 /* Can be OR'ed with
PNG_LIBPNG_BUILD_STABLE only */
#define PNG_LIBPNG_BUILD_PRIVATE 16 /* Cannot be OR'ed with
PNG_LIBPNG_BUILD_SPECIAL */
#define PNG_LIBPNG_BUILD_SPECIAL 32 /* Cannot be OR'ed with
PNG_LIBPNG_BUILD_PRIVATE */
May 27, 2013
May 27, 2013
344
#define PNG_LIBPNG_BUILD_BASE_TYPE PNG_LIBPNG_BUILD_STABLE
Jan 18, 2011
Jan 18, 2011
345
346
347
348
349
350
351
/* Careful here. At one time, Guy wanted to use 082, but that would be octal.
* We must not include leading zeros.
* Versions 0.7 through 1.0.0 were in the range 0 to 100 here (only
* version 1.0.0 was mis-numbered 100 instead of 10000). From
* version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release
*/
Oct 22, 2017
Oct 22, 2017
352
#define PNG_LIBPNG_VER 10632 /* 1.6.32 */
Jan 18, 2011
Jan 18, 2011
353
Jan 2, 2012
Jan 2, 2012
354
355
356
357
/* Library configuration: these options cannot be changed after
* the library has been built.
*/
#ifndef PNGLCONF_H
Oct 22, 2017
Oct 22, 2017
358
359
360
/* If pnglibconf.h is missing, you can
* copy scripts/pnglibconf.h.prebuilt to pnglibconf.h
*/
Jan 2, 2012
Jan 2, 2012
361
# include "pnglibconf.h"
Jan 18, 2011
Jan 18, 2011
362
363
#endif
Jan 2, 2012
Jan 2, 2012
364
#ifndef PNG_VERSION_INFO_ONLY
Oct 22, 2017
Oct 22, 2017
365
/* Machine specific configuration. */
Jan 2, 2012
Jan 2, 2012
366
367
# include "pngconf.h"
#endif
Jan 18, 2011
Jan 18, 2011
368
369
/*
Jan 2, 2012
Jan 2, 2012
370
371
372
* Added at libpng-1.2.8
*
* Ref MSDN: Private as priority over Special
Jan 18, 2011
Jan 18, 2011
373
374
375
376
377
378
379
380
381
382
* VS_FF_PRIVATEBUILD File *was not* built using standard release
* procedures. If this value is given, the StringFileInfo block must
* contain a PrivateBuild string.
*
* VS_FF_SPECIALBUILD File *was* built by the original company using
* standard release procedures but is a variation of the standard
* file of the same version number. If this value is given, the
* StringFileInfo block must contain a SpecialBuild string.
*/
Jan 2, 2012
Jan 2, 2012
383
#ifdef PNG_USER_PRIVATEBUILD /* From pnglibconf.h */
Jan 18, 2011
Jan 18, 2011
384
# define PNG_LIBPNG_BUILD_TYPE \
Jan 2, 2012
Jan 2, 2012
385
(PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_PRIVATE)
Jan 18, 2011
Jan 18, 2011
386
#else
Jan 2, 2012
Jan 2, 2012
387
# ifdef PNG_LIBPNG_SPECIALBUILD
Jan 18, 2011
Jan 18, 2011
388
# define PNG_LIBPNG_BUILD_TYPE \
Jan 2, 2012
Jan 2, 2012
389
(PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_SPECIAL)
Jan 18, 2011
Jan 18, 2011
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
# else
# define PNG_LIBPNG_BUILD_TYPE (PNG_LIBPNG_BUILD_BASE_TYPE)
# endif
#endif
#ifndef PNG_VERSION_INFO_ONLY
/* Inhibit C++ name-mangling for libpng functions but not for system calls. */
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* Version information for C files, stored in png.c. This had better match
* the version above.
*/
#define png_libpng_ver png_get_header_ver(NULL)
Jan 2, 2012
Jan 2, 2012
407
408
/* This file is arranged in several sections:
*
Oct 22, 2017
Oct 22, 2017
409
410
* 1. [omitted]
* 2. Any configuration options that can be specified by for the application
Jan 2, 2012
Jan 2, 2012
411
* code when it is built. (Build time configuration is in pnglibconf.h)
Oct 22, 2017
Oct 22, 2017
412
* 3. Type definitions (base types are defined in pngconf.h), structure
Jan 2, 2012
Jan 2, 2012
413
* definitions.
Oct 22, 2017
Oct 22, 2017
414
415
416
* 4. Exported library functions.
* 5. Simplified API.
* 6. Implementation options.
Jan 2, 2012
Jan 2, 2012
417
418
419
420
*
* The library source code has additional files (principally pngpriv.h) that
* allow configuration of the library.
*/
Oct 22, 2017
Oct 22, 2017
421
422
423
424
/* Section 1: [omitted] */
/* Section 2: run time configuration
Jan 2, 2012
Jan 2, 2012
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
* See pnglibconf.h for build time configuration
*
* Run time configuration allows the application to choose between
* implementations of certain arithmetic APIs. The default is set
* at build time and recorded in pnglibconf.h, but it is safe to
* override these (and only these) settings. Note that this won't
* change what the library does, only application code, and the
* settings can (and probably should) be made on a per-file basis
* by setting the #defines before including png.h
*
* Use macros to read integers from PNG data or use the exported
* functions?
* PNG_USE_READ_MACROS: use the macros (see below) Note that
* the macros evaluate their argument multiple times.
* PNG_NO_USE_READ_MACROS: call the relevant library function.
*
* Use the alternative algorithm for compositing alpha samples that
* does not use division?
* PNG_READ_COMPOSITE_NODIV_SUPPORTED: use the 'no division'
* algorithm.
* PNG_NO_READ_COMPOSITE_NODIV: use the 'division' algorithm.
*
* How to handle benign errors if PNG_ALLOW_BENIGN_ERRORS is
* false?
* PNG_ALLOW_BENIGN_ERRORS: map calls to the benign error
* APIs to png_warning.
* Otherwise the calls are mapped to png_error.
*/
Oct 22, 2017
Oct 22, 2017
454
/* Section 3: type definitions, including structures and compile time
Jan 2, 2012
Jan 2, 2012
455
456
457
* constants.
* See pngconf.h for base types that vary by machine/system
*/
Jan 18, 2011
Jan 18, 2011
458
Jan 2, 2012
Jan 2, 2012
459
460
461
/* This triggers a compiler error in png.c, if png.c and png.h
* do not agree upon the version number.
*/
Oct 22, 2017
Oct 22, 2017
462
typedef char* png_libpng_version_1_6_32;
May 27, 2013
May 27, 2013
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
/* Basic control structions. Read libpng-manual.txt or libpng.3 for more info.
*
* png_struct is the cache of information used while reading or writing a single
* PNG file. One of these is always required, although the simplified API
* (below) hides the creation and destruction of it.
*/
typedef struct png_struct_def png_struct;
typedef const png_struct * png_const_structp;
typedef png_struct * png_structp;
typedef png_struct * * png_structpp;
/* png_info contains information read from or to be written to a PNG file. One
* or more of these must exist while reading or creating a PNG file. The
* information is not used by libpng during read but is used to control what
* gets written when a PNG file is created. "png_get_" function calls read
* information during read and "png_set_" functions calls write information
* when creating a PNG.
* been moved into a separate header file that is not accessible to
* applications. Read libpng-manual.txt or libpng.3 for more info.
*/
typedef struct png_info_def png_info;
typedef png_info * png_infop;
typedef const png_info * png_const_infop;
typedef png_info * * png_infopp;
/* Types with names ending 'p' are pointer types. The corresponding types with
* names ending 'rp' are identical pointer types except that the pointer is
* marked 'restrict', which means that it is the only pointer to the object
* passed to the function. Applications should not use the 'restrict' types;
* it is always valid to pass 'p' to a pointer with a function argument of the
* corresponding 'rp' type. Different compilers have different rules with
* regard to type matching in the presence of 'restrict'. For backward
* compatibility libpng callbacks never have 'restrict' in their parameters and,
* consequentially, writing portable application code is extremely difficult if
* an attempt is made to use 'restrict'.
*/
typedef png_struct * PNG_RESTRICT png_structrp;
typedef const png_struct * PNG_RESTRICT png_const_structrp;
typedef png_info * PNG_RESTRICT png_inforp;
typedef const png_info * PNG_RESTRICT png_const_inforp;
Jan 18, 2011
Jan 18, 2011
504
505
506
507
508
509
510
511
512
513
514
/* Three color definitions. The order of the red, green, and blue, (and the
* exact size) is not important, although the size of the fields need to
* be png_byte or png_uint_16 (as defined below).
*/
typedef struct png_color_struct
{
png_byte red;
png_byte green;
png_byte blue;
} png_color;
May 27, 2013
May 27, 2013
515
516
517
typedef png_color * png_colorp;
typedef const png_color * png_const_colorp;
typedef png_color * * png_colorpp;
Jan 18, 2011
Jan 18, 2011
518
519
520
521
522
523
524
525
526
typedef struct png_color_16_struct
{
png_byte index; /* used for palette files */
png_uint_16 red; /* for use in red green blue files */
png_uint_16 green;
png_uint_16 blue;
png_uint_16 gray; /* for use in grayscale files */
} png_color_16;
May 27, 2013
May 27, 2013
527
528
529
typedef png_color_16 * png_color_16p;
typedef const png_color_16 * png_const_color_16p;
typedef png_color_16 * * png_color_16pp;
Jan 18, 2011
Jan 18, 2011
530
531
532
533
534
535
536
537
538
typedef struct png_color_8_struct
{
png_byte red; /* for use in red green blue files */
png_byte green;
png_byte blue;
png_byte gray; /* for use in grayscale files */
png_byte alpha; /* for alpha channel files */
} png_color_8;
May 27, 2013
May 27, 2013
539
540
541
typedef png_color_8 * png_color_8p;
typedef const png_color_8 * png_const_color_8p;
typedef png_color_8 * * png_color_8pp;
Jan 18, 2011
Jan 18, 2011
542
543
544
545
546
547
548
549
550
551
552
553
554
/*
* The following two structures are used for the in-core representation
* of sPLT chunks.
*/
typedef struct png_sPLT_entry_struct
{
png_uint_16 red;
png_uint_16 green;
png_uint_16 blue;
png_uint_16 alpha;
png_uint_16 frequency;
} png_sPLT_entry;
May 27, 2013
May 27, 2013
555
556
557
typedef png_sPLT_entry * png_sPLT_entryp;
typedef const png_sPLT_entry * png_const_sPLT_entryp;
typedef png_sPLT_entry * * png_sPLT_entrypp;
Jan 18, 2011
Jan 18, 2011
558
559
560
561
562
563
564
565
566
567
568
569
570
/* When the depth of the sPLT palette is 8 bits, the color and alpha samples
* occupy the LSB of their respective members, and the MSB of each member
* is zero-filled. The frequency member always occupies the full 16 bits.
*/
typedef struct png_sPLT_struct
{
png_charp name; /* palette name */
png_byte depth; /* depth of palette samples */
png_sPLT_entryp entries; /* palette entries */
png_int_32 nentries; /* number of palette entries */
} png_sPLT_t;
May 27, 2013
May 27, 2013
571
572
573
typedef png_sPLT_t * png_sPLT_tp;
typedef const png_sPLT_t * png_const_sPLT_tp;
typedef png_sPLT_t * * png_sPLT_tpp;
Jan 18, 2011
Jan 18, 2011
574
575
576
577
#ifdef PNG_TEXT_SUPPORTED
/* png_text holds the contents of a text/ztxt/itxt chunk in a PNG file,
* and whether that contents is compressed or not. The "key" field
Jan 2, 2012
Jan 2, 2012
578
579
580
581
582
583
584
585
586
587
588
589
590
591
* points to a regular zero-terminated C string. The "text" fields can be a
* regular C string, an empty string, or a NULL pointer.
* However, the structure returned by png_get_text() will always contain
* the "text" field as a regular zero-terminated C string (possibly
* empty), never a NULL pointer, so it can be safely used in printf() and
* other string-handling functions. Note that the "itxt_length", "lang", and
* "lang_key" members of the structure only exist when the library is built
* with iTXt chunk support. Prior to libpng-1.4.0 the library was built by
* default without iTXt support. Also note that when iTXt *is* supported,
* the "lang" and "lang_key" fields contain NULL pointers when the
* "compression" field contains * PNG_TEXT_COMPRESSION_NONE or
* PNG_TEXT_COMPRESSION_zTXt. Note that the "compression value" is not the
* same as what appears in the PNG tEXt/zTXt/iTXt chunk's "compression flag"
* which is always 0 or 1, or its "compression method" which is always 0.
Jan 18, 2011
Jan 18, 2011
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
*/
typedef struct png_text_struct
{
int compression; /* compression value:
-1: tEXt, none
0: zTXt, deflate
1: iTXt, none
2: iTXt, deflate */
png_charp key; /* keyword, 1-79 character description of "text" */
png_charp text; /* comment, may be an empty string (ie "")
or a NULL pointer */
png_size_t text_length; /* length of the text string */
png_size_t itxt_length; /* length of the itxt string */
png_charp lang; /* language code, 0-79 characters
or a NULL pointer */
png_charp lang_key; /* keyword translated UTF-8 string, 0 or more
chars or a NULL pointer */
} png_text;
May 27, 2013
May 27, 2013
610
611
612
typedef png_text * png_textp;
typedef const png_text * png_const_textp;
typedef png_text * * png_textpp;
Jan 18, 2011
Jan 18, 2011
613
614
615
#endif
/* Supported compression types for text in PNG files (tEXt, and zTXt).
Jan 2, 2012
Jan 2, 2012
616
* The values of the PNG_TEXT_COMPRESSION_ defines should NOT be changed. */
Jan 18, 2011
Jan 18, 2011
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
#define PNG_TEXT_COMPRESSION_NONE_WR -3
#define PNG_TEXT_COMPRESSION_zTXt_WR -2
#define PNG_TEXT_COMPRESSION_NONE -1
#define PNG_TEXT_COMPRESSION_zTXt 0
#define PNG_ITXT_COMPRESSION_NONE 1
#define PNG_ITXT_COMPRESSION_zTXt 2
#define PNG_TEXT_COMPRESSION_LAST 3 /* Not a valid value */
/* png_time is a way to hold the time in an machine independent way.
* Two conversions are provided, both from time_t and struct tm. There
* is no portable way to convert to either of these structures, as far
* as I know. If you know of a portable way, send it to me. As a side
* note - PNG has always been Year 2000 compliant!
*/
typedef struct png_time_struct
{
png_uint_16 year; /* full year, as in, 1995 */
png_byte month; /* month of year, 1 - 12 */
png_byte day; /* day of month, 1 - 31 */
png_byte hour; /* hour of day, 0 - 23 */
png_byte minute; /* minute of hour, 0 - 59 */
png_byte second; /* second of minute, 0 - 60 (for leap seconds) */
} png_time;
May 27, 2013
May 27, 2013
640
641
642
typedef png_time * png_timep;
typedef const png_time * png_const_timep;
typedef png_time * * png_timepp;
Jan 18, 2011
Jan 18, 2011
643
Oct 22, 2017
Oct 22, 2017
644
645
#if defined(PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED) ||\
defined(PNG_USER_CHUNKS_SUPPORTED)
Jan 18, 2011
Jan 18, 2011
646
647
648
649
/* png_unknown_chunk is a structure to hold queued chunks for which there is
* no specific support. The idea is that we can use this to queue
* up private chunks for output even though the library doesn't actually
* know about their semantics.
May 27, 2013
May 27, 2013
650
651
*
* The data in the structure is set by libpng on read and used on write.
Jan 18, 2011
Jan 18, 2011
652
653
654
*/
typedef struct png_unknown_chunk_t
{
Oct 22, 2017
Oct 22, 2017
655
656
657
658
659
660
661
662
663
664
665
png_byte name[5]; /* Textual chunk name with '\0' terminator */
png_byte *data; /* Data, should not be modified on read! */
png_size_t size;
/* On write 'location' must be set using the flag values listed below.
* Notice that on read it is set by libpng however the values stored have
* more bits set than are listed below. Always treat the value as a
* bitmask. On write set only one bit - setting multiple bits may cause the
* chunk to be written in multiple places.
*/
png_byte location; /* mode of operation at read time */
Jan 18, 2011
Jan 18, 2011
666
667
668
}
png_unknown_chunk;
May 27, 2013
May 27, 2013
669
670
671
672
typedef png_unknown_chunk * png_unknown_chunkp;
typedef const png_unknown_chunk * png_const_unknown_chunkp;
typedef png_unknown_chunk * * png_unknown_chunkpp;
#endif
Jan 18, 2011
Jan 18, 2011
673
May 27, 2013
May 27, 2013
674
/* Flag values for the unknown chunk location byte. */
Jan 2, 2012
Jan 2, 2012
675
676
677
#define PNG_HAVE_IHDR 0x01
#define PNG_HAVE_PLTE 0x02
#define PNG_AFTER_IDAT 0x08
Jan 18, 2011
Jan 18, 2011
678
679
680
681
682
/* Maximum positive integer used in PNG is (2^31)-1 */
#define PNG_UINT_31_MAX ((png_uint_32)0x7fffffffL)
#define PNG_UINT_32_MAX ((png_uint_32)(-1))
#define PNG_SIZE_MAX ((png_size_t)(-1))
Jan 2, 2012
Jan 2, 2012
683
684
685
686
687
688
689
690
/* These are constants for fixed point values encoded in the
* PNG specification manner (x100000)
*/
#define PNG_FP_1 100000
#define PNG_FP_HALF 50000
#define PNG_FP_MAX ((png_fixed_point)0x7fffffffL)
#define PNG_FP_MIN (-PNG_FP_MAX)
Jan 18, 2011
Jan 18, 2011
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
/* These describe the color_type field in png_info. */
/* color type masks */
#define PNG_COLOR_MASK_PALETTE 1
#define PNG_COLOR_MASK_COLOR 2
#define PNG_COLOR_MASK_ALPHA 4
/* color types. Note that not all combinations are legal */
#define PNG_COLOR_TYPE_GRAY 0
#define PNG_COLOR_TYPE_PALETTE (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE)
#define PNG_COLOR_TYPE_RGB (PNG_COLOR_MASK_COLOR)
#define PNG_COLOR_TYPE_RGB_ALPHA (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA)
#define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA)
/* aliases */
#define PNG_COLOR_TYPE_RGBA PNG_COLOR_TYPE_RGB_ALPHA
#define PNG_COLOR_TYPE_GA PNG_COLOR_TYPE_GRAY_ALPHA
/* This is for compression type. PNG 1.0-1.2 only define the single type. */
#define PNG_COMPRESSION_TYPE_BASE 0 /* Deflate method 8, 32K window */
#define PNG_COMPRESSION_TYPE_DEFAULT PNG_COMPRESSION_TYPE_BASE
/* This is for filter type. PNG 1.0-1.2 only define the single type. */
#define PNG_FILTER_TYPE_BASE 0 /* Single row per-byte filtering */
#define PNG_INTRAPIXEL_DIFFERENCING 64 /* Used only in MNG datastreams */
#define PNG_FILTER_TYPE_DEFAULT PNG_FILTER_TYPE_BASE
/* These are for the interlacing type. These values should NOT be changed. */
#define PNG_INTERLACE_NONE 0 /* Non-interlaced image */
#define PNG_INTERLACE_ADAM7 1 /* Adam7 interlacing */
#define PNG_INTERLACE_LAST 2 /* Not a valid value */
/* These are for the oFFs chunk. These values should NOT be changed. */
#define PNG_OFFSET_PIXEL 0 /* Offset in pixels */
#define PNG_OFFSET_MICROMETER 1 /* Offset in micrometers (1/10^6 meter) */
#define PNG_OFFSET_LAST 2 /* Not a valid value */
/* These are for the pCAL chunk. These values should NOT be changed. */
#define PNG_EQUATION_LINEAR 0 /* Linear transformation */
#define PNG_EQUATION_BASE_E 1 /* Exponential base e transform */
#define PNG_EQUATION_ARBITRARY 2 /* Arbitrary base exponential transform */
#define PNG_EQUATION_HYPERBOLIC 3 /* Hyperbolic sine transformation */
#define PNG_EQUATION_LAST 4 /* Not a valid value */
/* These are for the sCAL chunk. These values should NOT be changed. */
#define PNG_SCALE_UNKNOWN 0 /* unknown unit (image scale) */
#define PNG_SCALE_METER 1 /* meters per pixel */
#define PNG_SCALE_RADIAN 2 /* radians per pixel */
#define PNG_SCALE_LAST 3 /* Not a valid value */
/* These are for the pHYs chunk. These values should NOT be changed. */
#define PNG_RESOLUTION_UNKNOWN 0 /* pixels/unknown unit (aspect ratio) */
#define PNG_RESOLUTION_METER 1 /* pixels/meter */
#define PNG_RESOLUTION_LAST 2 /* Not a valid value */
/* These are for the sRGB chunk. These values should NOT be changed. */
#define PNG_sRGB_INTENT_PERCEPTUAL 0
#define PNG_sRGB_INTENT_RELATIVE 1
#define PNG_sRGB_INTENT_SATURATION 2
#define PNG_sRGB_INTENT_ABSOLUTE 3
#define PNG_sRGB_INTENT_LAST 4 /* Not a valid value */
/* This is for text chunks */
#define PNG_KEYWORD_MAX_LENGTH 79
/* Maximum number of entries in PLTE/sPLT/tRNS arrays */
#define PNG_MAX_PALETTE_LENGTH 256
/* These determine if an ancillary chunk's data has been successfully read
* from the PNG header, or if the application has filled in the corresponding
* data in the info_struct to be written into the output file. The values
* of the PNG_INFO_<chunk> defines should NOT be changed.
*/
Oct 22, 2017
Oct 22, 2017
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
#define PNG_INFO_gAMA 0x0001U
#define PNG_INFO_sBIT 0x0002U
#define PNG_INFO_cHRM 0x0004U
#define PNG_INFO_PLTE 0x0008U
#define PNG_INFO_tRNS 0x0010U
#define PNG_INFO_bKGD 0x0020U
#define PNG_INFO_hIST 0x0040U
#define PNG_INFO_pHYs 0x0080U
#define PNG_INFO_oFFs 0x0100U
#define PNG_INFO_tIME 0x0200U
#define PNG_INFO_pCAL 0x0400U
#define PNG_INFO_sRGB 0x0800U /* GR-P, 0.96a */
#define PNG_INFO_iCCP 0x1000U /* ESR, 1.0.6 */
#define PNG_INFO_sPLT 0x2000U /* ESR, 1.0.6 */
#define PNG_INFO_sCAL 0x4000U /* ESR, 1.0.6 */
#define PNG_INFO_IDAT 0x8000U /* ESR, 1.0.6 */
#define PNG_INFO_eXIf 0x10000U /* GR-P, 1.6.31 */
Jan 18, 2011
Jan 18, 2011
780
781
782
783
784
785
786
/* This is used for the transformation routines, as some of them
* change these values for the row. It also should enable using
* the routines for other purposes.
*/
typedef struct png_row_info_struct
{
Jan 2, 2012
Jan 2, 2012
787
788
789
790
791
png_uint_32 width; /* width of row */
png_size_t rowbytes; /* number of bytes in row */
png_byte color_type; /* color type of row */
png_byte bit_depth; /* bit depth of row */
png_byte channels; /* number of channels (1, 2, 3, or 4) */
Jan 18, 2011
Jan 18, 2011
792
793
794
png_byte pixel_depth; /* bits per pixel (depth * channels) */
} png_row_info;
May 27, 2013
May 27, 2013
795
796
typedef png_row_info * png_row_infop;
typedef png_row_info * * png_row_infopp;
Jan 18, 2011
Jan 18, 2011
797
Jan 2, 2012
Jan 2, 2012
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
/* These are the function types for the I/O functions and for the functions
* that allow the user to override the default I/O functions with his or her
* own. The png_error_ptr type should match that of user-supplied warning
* and error functions, while the png_rw_ptr type should match that of the
* user read/write data functions. Note that the 'write' function must not
* modify the buffer it is passed. The 'read' function, on the other hand, is
* expected to return the read data in the buffer.
*/
typedef PNG_CALLBACK(void, *png_error_ptr, (png_structp, png_const_charp));
typedef PNG_CALLBACK(void, *png_rw_ptr, (png_structp, png_bytep, png_size_t));
typedef PNG_CALLBACK(void, *png_flush_ptr, (png_structp));
typedef PNG_CALLBACK(void, *png_read_status_ptr, (png_structp, png_uint_32,
int));
typedef PNG_CALLBACK(void, *png_write_status_ptr, (png_structp, png_uint_32,
int));
Jan 18, 2011
Jan 18, 2011
813
814
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
Jan 2, 2012
Jan 2, 2012
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
typedef PNG_CALLBACK(void, *png_progressive_info_ptr, (png_structp, png_infop));
typedef PNG_CALLBACK(void, *png_progressive_end_ptr, (png_structp, png_infop));
/* The following callback receives png_uint_32 row_number, int pass for the
* png_bytep data of the row. When transforming an interlaced image the
* row number is the row number within the sub-image of the interlace pass, so
* the value will increase to the height of the sub-image (not the full image)
* then reset to 0 for the next pass.
*
* Use PNG_ROW_FROM_PASS_ROW(row, pass) and PNG_COL_FROM_PASS_COL(col, pass) to
* find the output pixel (x,y) given an interlaced sub-image pixel
* (row,col,pass). (See below for these macros.)
*/
typedef PNG_CALLBACK(void, *png_progressive_row_ptr, (png_structp, png_bytep,
png_uint_32, int));
Jan 18, 2011
Jan 18, 2011
830
831
832
#endif
#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
Jan 2, 2012
Jan 2, 2012
833
834
835
defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
typedef PNG_CALLBACK(void, *png_user_transform_ptr, (png_structp, png_row_infop,
png_bytep));
Jan 18, 2011
Jan 18, 2011
836
837
#endif
Jan 2, 2012
Jan 2, 2012
838
839
840
841
842
#ifdef PNG_USER_CHUNKS_SUPPORTED
typedef PNG_CALLBACK(int, *png_user_chunk_ptr, (png_structp,
png_unknown_chunkp));
#endif
#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED
May 27, 2013
May 27, 2013
843
844
/* not used anywhere */
/* typedef PNG_CALLBACK(void, *png_unknown_chunk_ptr, (png_structp)); */
Jan 18, 2011
Jan 18, 2011
845
#endif
Jan 2, 2012
Jan 2, 2012
846
847
848
849
850
851
852
853
854
855
856
857
858
859
#ifdef PNG_SETJMP_SUPPORTED
/* This must match the function definition in <setjmp.h>, and the application
* must include this before png.h to obtain the definition of jmp_buf. The
* function is required to be PNG_NORETURN, but this is not checked. If the
* function does return the application will crash via an abort() or similar
* system level call.
*
* If you get a warning here while building the library you may need to make
* changes to ensure that pnglibconf.h records the calling convention used by
* your compiler. This may be very difficult - try using a different compiler
* to build the library!
*/
PNG_FUNCTION(void, (PNGCAPI *png_longjmp_ptr), PNGARG((jmp_buf, int)), typedef);
Jan 18, 2011
Jan 18, 2011
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
#endif
/* Transform masks for the high-level interface */
#define PNG_TRANSFORM_IDENTITY 0x0000 /* read and write */
#define PNG_TRANSFORM_STRIP_16 0x0001 /* read only */
#define PNG_TRANSFORM_STRIP_ALPHA 0x0002 /* read only */
#define PNG_TRANSFORM_PACKING 0x0004 /* read and write */
#define PNG_TRANSFORM_PACKSWAP 0x0008 /* read and write */
#define PNG_TRANSFORM_EXPAND 0x0010 /* read only */
#define PNG_TRANSFORM_INVERT_MONO 0x0020 /* read and write */
#define PNG_TRANSFORM_SHIFT 0x0040 /* read and write */
#define PNG_TRANSFORM_BGR 0x0080 /* read and write */
#define PNG_TRANSFORM_SWAP_ALPHA 0x0100 /* read and write */
#define PNG_TRANSFORM_SWAP_ENDIAN 0x0200 /* read and write */
#define PNG_TRANSFORM_INVERT_ALPHA 0x0400 /* read and write */
Jan 2, 2012
Jan 2, 2012
875
#define PNG_TRANSFORM_STRIP_FILLER 0x0800 /* write only */
Jan 18, 2011
Jan 18, 2011
876
/* Added to libpng-1.2.34 */
Jan 2, 2012
Jan 2, 2012
877
878
879
880
881
882
#define PNG_TRANSFORM_STRIP_FILLER_BEFORE PNG_TRANSFORM_STRIP_FILLER
#define PNG_TRANSFORM_STRIP_FILLER_AFTER 0x1000 /* write only */
/* Added to libpng-1.4.0 */
#define PNG_TRANSFORM_GRAY_TO_RGB 0x2000 /* read only */
/* Added to libpng-1.5.4 */
#define PNG_TRANSFORM_EXPAND_16 0x4000 /* read only */
Oct 22, 2017
Oct 22, 2017
883
#if INT_MAX >= 0x8000 /* else this might break */
Jan 2, 2012
Jan 2, 2012
884
#define PNG_TRANSFORM_SCALE_16 0x8000 /* read only */
Oct 22, 2017
Oct 22, 2017
885
#endif
Jan 18, 2011
Jan 18, 2011
886
887
888
889
890
891
/* Flags for MNG supported features */
#define PNG_FLAG_MNG_EMPTY_PLTE 0x01
#define PNG_FLAG_MNG_FILTER_64 0x04
#define PNG_ALL_MNG_FEATURES 0x05
Jan 2, 2012
Jan 2, 2012
892
893
894
895
896
/* NOTE: prior to 1.5 these functions had no 'API' style declaration,
* this allowed the zlib default functions to be used on Windows
* platforms. In 1.5 the zlib default malloc (which just calls malloc and
* ignores the first argument) should be completely compatible with the
* following.
Jan 18, 2011
Jan 18, 2011
897
*/
Jan 2, 2012
Jan 2, 2012
898
899
900
typedef PNG_CALLBACK(png_voidp, *png_malloc_ptr, (png_structp,
png_alloc_size_t));
typedef PNG_CALLBACK(void, *png_free_ptr, (png_structp, png_voidp));
Jan 18, 2011
Jan 18, 2011
901
Oct 22, 2017
Oct 22, 2017
902
/* Section 4: exported functions
Jan 2, 2012
Jan 2, 2012
903
904
* Here are the function definitions most commonly used. This is not
* the place to find out how to use libpng. See libpng-manual.txt for the
Jan 18, 2011
Jan 18, 2011
905
906
* full explanation, see example.c for the summary. This just provides
* a simple one line description of the use of each function.
Jan 2, 2012
Jan 2, 2012
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
*
* The PNG_EXPORT() and PNG_EXPORTA() macros used below are defined in
* pngconf.h and in the *.dfn files in the scripts directory.
*
* PNG_EXPORT(ordinal, type, name, (args));
*
* ordinal: ordinal that is used while building
* *.def files. The ordinal value is only
* relevant when preprocessing png.h with
* the *.dfn files for building symbol table
* entries, and are removed by pngconf.h.
* type: return type of the function
* name: function name
* args: function arguments, with types
*
* When we wish to append attributes to a function prototype we use
* the PNG_EXPORTA() macro instead.
*
* PNG_EXPORTA(ordinal, type, name, (args), attributes);
*
* ordinal, type, name, and args: same as in PNG_EXPORT().
* attributes: function attributes
Jan 18, 2011
Jan 18, 2011
929
930
931
*/
/* Returns the version number of the library */
Jan 2, 2012
Jan 2, 2012
932
PNG_EXPORT(1, png_uint_32, png_access_version_number, (void));
Jan 18, 2011
Jan 18, 2011
933
934
935
936
/* Tell lib we have already handled the first <num_bytes> magic bytes.
* Handling more than 8 bytes from the beginning of the file is an error.
*/
May 27, 2013
May 27, 2013
937
PNG_EXPORT(2, void, png_set_sig_bytes, (png_structrp png_ptr, int num_bytes));
Jan 18, 2011
Jan 18, 2011
938
939
940
941
942
943
/* Check sig[start] through sig[start + num_to_check - 1] to see if it's a
* PNG file. Returns zero if the supplied bytes match the 8-byte PNG
* signature, and non-zero otherwise. Having num_to_check == 0 or
* start > 7 will always fail (ie return non-zero).
*/
Jan 2, 2012
Jan 2, 2012
944
945
PNG_EXPORT(3, int, png_sig_cmp, (png_const_bytep sig, png_size_t start,
png_size_t num_to_check));
Jan 18, 2011
Jan 18, 2011
946
947
948
949
/* Simple signature checking function. This is the same as calling
* png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n).
*/
Jan 2, 2012
Jan 2, 2012
950
#define png_check_sig(sig, n) !png_sig_cmp((sig), 0, (n))
Jan 18, 2011
Jan 18, 2011
951
952
/* Allocate and initialize png_ptr struct for reading, and any other memory. */
Jan 2, 2012
Jan 2, 2012
953
954
955
956
PNG_EXPORTA(4, png_structp, png_create_read_struct,
(png_const_charp user_png_ver, png_voidp error_ptr,
png_error_ptr error_fn, png_error_ptr warn_fn),
PNG_ALLOCATED);
Jan 18, 2011
Jan 18, 2011
957
958
/* Allocate and initialize png_ptr struct for writing, and any other memory */
Jan 2, 2012
Jan 2, 2012
959
960
961
962
PNG_EXPORTA(5, png_structp, png_create_write_struct,
(png_const_charp user_png_ver, png_voidp error_ptr, png_error_ptr error_fn,
png_error_ptr warn_fn),
PNG_ALLOCATED);
Jan 18, 2011
Jan 18, 2011
963
Jan 2, 2012
Jan 2, 2012
964
PNG_EXPORT(6, png_size_t, png_get_compression_buffer_size,
May 27, 2013
May 27, 2013
965
(png_const_structrp png_ptr));
Jan 18, 2011
Jan 18, 2011
966
May 27, 2013
May 27, 2013
967
PNG_EXPORT(7, void, png_set_compression_buffer_size, (png_structrp png_ptr,
Jan 2, 2012
Jan 2, 2012
968
969
970
971
972
973
974
975
976
977
978
979
980
png_size_t size));
/* Moved from pngconf.h in 1.4.0 and modified to ensure setjmp/longjmp
* match up.
*/
#ifdef PNG_SETJMP_SUPPORTED
/* This function returns the jmp_buf built in to *png_ptr. It must be
* supplied with an appropriate 'longjmp' function to use on that jmp_buf
* unless the default error function is overridden in which case NULL is
* acceptable. The size of the jmp_buf is checked against the actual size
* allocated by the library - the call will return NULL on a mismatch
* indicating an ABI mismatch.
*/
May 27, 2013
May 27, 2013
981
PNG_EXPORT(8, jmp_buf*, png_set_longjmp_fn, (png_structrp png_ptr,
Jan 2, 2012
Jan 2, 2012
982
983
png_longjmp_ptr longjmp_fn, size_t jmp_buf_size));
# define png_jmpbuf(png_ptr) \
May 27, 2013
May 27, 2013
984
(*png_set_longjmp_fn((png_ptr), longjmp, (sizeof (jmp_buf))))
Jan 2, 2012
Jan 2, 2012
985
986
987
#else
# define png_jmpbuf(png_ptr) \
(LIBPNG_WAS_COMPILED_WITH__PNG_NO_SETJMP)
Jan 18, 2011
Jan 18, 2011
988
#endif
Jan 2, 2012
Jan 2, 2012
989
990
991
992
993
/* This function should be used by libpng applications in place of
* longjmp(png_ptr->jmpbuf, val). If longjmp_fn() has been set, it
* will use it; otherwise it will call PNG_ABORT(). This function was
* added in libpng-1.5.0.
*/
May 27, 2013
May 27, 2013
994
PNG_EXPORTA(9, void, png_longjmp, (png_const_structrp png_ptr, int val),
Jan 2, 2012
Jan 2, 2012
995
PNG_NORETURN);
Jan 18, 2011
Jan 18, 2011
996
Jan 2, 2012
Jan 2, 2012
997
#ifdef PNG_READ_SUPPORTED
Jan 18, 2011
Jan 18, 2011
998
/* Reset the compression stream */
May 27, 2013
May 27, 2013
999
PNG_EXPORTA(10, int, png_reset_zstream, (png_structrp png_ptr), PNG_DEPRECATED);
Jan 2, 2012
Jan 2, 2012
1000
#endif