]>
Commit | Line | Data |
---|---|---|
1 | ||
2 | /* pngpriv.h - private declarations for use inside libpng | |
3 | * | |
4 | * libpng version 1.4.4 - September 23, 2010 | |
5 | * For conditions of distribution and use, see copyright notice in png.h | |
6 | * Copyright (c) 1998-2010 Glenn Randers-Pehrson | |
7 | * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) | |
8 | * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) | |
9 | * | |
10 | * This code is released under the libpng license. | |
11 | * For conditions of distribution and use, see the disclaimer | |
12 | * and license in png.h | |
13 | */ | |
14 | ||
15 | /* The symbols declared in this file (including the functions declared | |
16 | * as PNG_EXTERN) are PRIVATE. They are not part of the libpng public | |
17 | * interface, and are not recommended for use by regular applications. | |
18 | * Some of them may become public in the future; others may stay private, | |
19 | * change in an incompatible way, or even disappear. | |
20 | * Although the libpng users are not forbidden to include this header, | |
21 | * they should be well aware of the issues that may arise from doing so. | |
22 | */ | |
23 | ||
24 | #ifndef PNGPRIV_H | |
25 | #define PNGPRIV_H | |
26 | ||
27 | #ifndef PNG_VERSION_INFO_ONLY | |
28 | ||
29 | #include <stdlib.h> | |
30 | ||
31 | #ifndef PNG_EXTERN | |
32 | /* The functions exported by PNG_EXTERN are internal functions, which | |
33 | * aren't usually used outside the library (as far as I know), so it is | |
34 | * debatable if they should be exported at all. In the future, when it | |
35 | * is possible to have run-time registry of chunk-handling functions, | |
36 | * some of these will be made available again. | |
37 | # define PNG_EXTERN extern | |
38 | */ | |
39 | # define PNG_EXTERN | |
40 | #endif | |
41 | ||
42 | /* Other defines specific to compilers can go here. Try to keep | |
43 | * them inside an appropriate ifdef/endif pair for portability. | |
44 | */ | |
45 | ||
46 | #ifdef PNG_FLOATING_POINT_SUPPORTED | |
47 | # if defined(MACOS) && !wxOSX_USE_IPHONE | |
48 | /* We need to check that <math.h> hasn't already been included earlier | |
49 | * as it seems it doesn't agree with <fp.h>, yet we should really use | |
50 | * <fp.h> if possible. | |
51 | */ | |
52 | # if !defined(__MATH_H__) && !defined(__MATH_H) && !defined(__cmath__) | |
53 | # include <fp.h> | |
54 | # endif | |
55 | # else | |
56 | # include <math.h> | |
57 | # endif | |
58 | # if defined(_AMIGA) && defined(__SASC) && defined(_M68881) | |
59 | /* Amiga SAS/C: We must include builtin FPU functions when compiling using | |
60 | * MATH=68881 | |
61 | */ | |
62 | # include <m68881.h> | |
63 | # endif | |
64 | #endif | |
65 | ||
66 | /* Codewarrior on NT has linking problems without this. */ | |
67 | #if (defined(__MWERKS__) && defined(WIN32)) || defined(__STDC__) | |
68 | # define PNG_ALWAYS_EXTERN | |
69 | #endif | |
70 | ||
71 | /* This provides the non-ANSI (far) memory allocation routines. */ | |
72 | #if defined(__TURBOC__) && defined(__MSDOS__) | |
73 | # include <mem.h> | |
74 | # include <alloc.h> | |
75 | #endif | |
76 | ||
77 | #if defined(WIN32) || defined(_Windows) || defined(_WINDOWS) || \ | |
78 | defined(_WIN32) || defined(__WIN32__) | |
79 | # include <windows.h> /* defines _WINDOWS_ macro */ | |
80 | #endif | |
81 | ||
82 | /* Various modes of operation. Note that after an init, mode is set to | |
83 | * zero automatically when the structure is created. | |
84 | */ | |
85 | #define PNG_HAVE_IHDR 0x01 | |
86 | #define PNG_HAVE_PLTE 0x02 | |
87 | #define PNG_HAVE_IDAT 0x04 | |
88 | #define PNG_AFTER_IDAT 0x08 /* Have complete zlib datastream */ | |
89 | #define PNG_HAVE_IEND 0x10 | |
90 | #define PNG_HAVE_gAMA 0x20 | |
91 | #define PNG_HAVE_cHRM 0x40 | |
92 | #define PNG_HAVE_sRGB 0x80 | |
93 | #define PNG_HAVE_CHUNK_HEADER 0x100 | |
94 | #define PNG_WROTE_tIME 0x200 | |
95 | #define PNG_WROTE_INFO_BEFORE_PLTE 0x400 | |
96 | #define PNG_BACKGROUND_IS_GRAY 0x800 | |
97 | #define PNG_HAVE_PNG_SIGNATURE 0x1000 | |
98 | #define PNG_HAVE_CHUNK_AFTER_IDAT 0x2000 /* Have another chunk after IDAT */ | |
99 | ||
100 | /* Flags for the transformations the PNG library does on the image data */ | |
101 | #define PNG_BGR 0x0001 | |
102 | #define PNG_INTERLACE 0x0002 | |
103 | #define PNG_PACK 0x0004 | |
104 | #define PNG_SHIFT 0x0008 | |
105 | #define PNG_SWAP_BYTES 0x0010 | |
106 | #define PNG_INVERT_MONO 0x0020 | |
107 | #define PNG_QUANTIZE 0x0040 /* formerly PNG_DITHER */ | |
108 | #define PNG_BACKGROUND 0x0080 | |
109 | #define PNG_BACKGROUND_EXPAND 0x0100 | |
110 | /* 0x0200 unused */ | |
111 | #define PNG_16_TO_8 0x0400 | |
112 | #define PNG_RGBA 0x0800 | |
113 | #define PNG_EXPAND 0x1000 | |
114 | #define PNG_GAMMA 0x2000 | |
115 | #define PNG_GRAY_TO_RGB 0x4000 | |
116 | #define PNG_FILLER 0x8000L | |
117 | #define PNG_PACKSWAP 0x10000L | |
118 | #define PNG_SWAP_ALPHA 0x20000L | |
119 | #define PNG_STRIP_ALPHA 0x40000L | |
120 | #define PNG_INVERT_ALPHA 0x80000L | |
121 | #define PNG_USER_TRANSFORM 0x100000L | |
122 | #define PNG_RGB_TO_GRAY_ERR 0x200000L | |
123 | #define PNG_RGB_TO_GRAY_WARN 0x400000L | |
124 | #define PNG_RGB_TO_GRAY 0x600000L /* two bits, RGB_TO_GRAY_ERR|WARN */ | |
125 | /* 0x800000L Unused */ | |
126 | #define PNG_ADD_ALPHA 0x1000000L /* Added to libpng-1.2.7 */ | |
127 | #define PNG_EXPAND_tRNS 0x2000000L /* Added to libpng-1.2.9 */ | |
128 | /* 0x4000000L unused */ | |
129 | /* 0x8000000L unused */ | |
130 | /* 0x10000000L unused */ | |
131 | /* 0x20000000L unused */ | |
132 | /* 0x40000000L unused */ | |
133 | ||
134 | /* Flags for png_create_struct */ | |
135 | #define PNG_STRUCT_PNG 0x0001 | |
136 | #define PNG_STRUCT_INFO 0x0002 | |
137 | ||
138 | /* Scaling factor for filter heuristic weighting calculations */ | |
139 | #define PNG_WEIGHT_SHIFT 8 | |
140 | #define PNG_WEIGHT_FACTOR (1<<(PNG_WEIGHT_SHIFT)) | |
141 | #define PNG_COST_SHIFT 3 | |
142 | #define PNG_COST_FACTOR (1<<(PNG_COST_SHIFT)) | |
143 | ||
144 | /* Flags for the png_ptr->flags rather than declaring a byte for each one */ | |
145 | #define PNG_FLAG_ZLIB_CUSTOM_STRATEGY 0x0001 | |
146 | #define PNG_FLAG_ZLIB_CUSTOM_LEVEL 0x0002 | |
147 | #define PNG_FLAG_ZLIB_CUSTOM_MEM_LEVEL 0x0004 | |
148 | #define PNG_FLAG_ZLIB_CUSTOM_WINDOW_BITS 0x0008 | |
149 | #define PNG_FLAG_ZLIB_CUSTOM_METHOD 0x0010 | |
150 | #define PNG_FLAG_ZLIB_FINISHED 0x0020 | |
151 | #define PNG_FLAG_ROW_INIT 0x0040 | |
152 | #define PNG_FLAG_FILLER_AFTER 0x0080 | |
153 | #define PNG_FLAG_CRC_ANCILLARY_USE 0x0100 | |
154 | #define PNG_FLAG_CRC_ANCILLARY_NOWARN 0x0200 | |
155 | #define PNG_FLAG_CRC_CRITICAL_USE 0x0400 | |
156 | #define PNG_FLAG_CRC_CRITICAL_IGNORE 0x0800 | |
157 | /* 0x1000 unused */ | |
158 | /* 0x2000 unused */ | |
159 | /* 0x4000 unused */ | |
160 | #define PNG_FLAG_KEEP_UNKNOWN_CHUNKS 0x8000L | |
161 | #define PNG_FLAG_KEEP_UNSAFE_CHUNKS 0x10000L | |
162 | #define PNG_FLAG_LIBRARY_MISMATCH 0x20000L | |
163 | #define PNG_FLAG_STRIP_ERROR_NUMBERS 0x40000L | |
164 | #define PNG_FLAG_STRIP_ERROR_TEXT 0x80000L | |
165 | #define PNG_FLAG_MALLOC_NULL_MEM_OK 0x100000L | |
166 | #define PNG_FLAG_ADD_ALPHA 0x200000L /* Added to libpng-1.2.8 */ | |
167 | #define PNG_FLAG_STRIP_ALPHA 0x400000L /* Added to libpng-1.2.8 */ | |
168 | #define PNG_FLAG_BENIGN_ERRORS_WARN 0x800000L /* Added to libpng-1.4.0 */ | |
169 | /* 0x1000000L unused */ | |
170 | /* 0x2000000L unused */ | |
171 | /* 0x4000000L unused */ | |
172 | /* 0x8000000L unused */ | |
173 | /* 0x10000000L unused */ | |
174 | /* 0x20000000L unused */ | |
175 | /* 0x40000000L unused */ | |
176 | ||
177 | #define PNG_FLAG_CRC_ANCILLARY_MASK (PNG_FLAG_CRC_ANCILLARY_USE | \ | |
178 | PNG_FLAG_CRC_ANCILLARY_NOWARN) | |
179 | ||
180 | #define PNG_FLAG_CRC_CRITICAL_MASK (PNG_FLAG_CRC_CRITICAL_USE | \ | |
181 | PNG_FLAG_CRC_CRITICAL_IGNORE) | |
182 | ||
183 | #define PNG_FLAG_CRC_MASK (PNG_FLAG_CRC_ANCILLARY_MASK | \ | |
184 | PNG_FLAG_CRC_CRITICAL_MASK) | |
185 | ||
186 | /* Save typing and make code easier to understand */ | |
187 | ||
188 | #define PNG_COLOR_DIST(c1, c2) (abs((int)((c1).red) - (int)((c2).red)) + \ | |
189 | abs((int)((c1).green) - (int)((c2).green)) + \ | |
190 | abs((int)((c1).blue) - (int)((c2).blue))) | |
191 | ||
192 | /* Added to libpng-1.2.6 JB */ | |
193 | #define PNG_ROWBYTES(pixel_bits, width) \ | |
194 | ((pixel_bits) >= 8 ? \ | |
195 | ((png_size_t)(width) * (((png_size_t)(pixel_bits)) >> 3)) : \ | |
196 | (( ((png_size_t)(width) * ((png_size_t)(pixel_bits))) + 7) >> 3) ) | |
197 | ||
198 | /* PNG_OUT_OF_RANGE returns true if value is outside the range | |
199 | * ideal-delta..ideal+delta. Each argument is evaluated twice. | |
200 | * "ideal" and "delta" should be constants, normally simple | |
201 | * integers, "value" a variable. Added to libpng-1.2.6 JB | |
202 | */ | |
203 | #define PNG_OUT_OF_RANGE(value, ideal, delta) \ | |
204 | ( (value) < (ideal)-(delta) || (value) > (ideal)+(delta) ) | |
205 | ||
206 | /* Constant strings for known chunk types. If you need to add a chunk, | |
207 | * define the name here, and add an invocation of the macro wherever it's | |
208 | * needed. | |
209 | */ | |
210 | #define PNG_IHDR PNG_CONST png_byte png_IHDR[5] = { 73, 72, 68, 82, '\0'} | |
211 | #define PNG_IDAT PNG_CONST png_byte png_IDAT[5] = { 73, 68, 65, 84, '\0'} | |
212 | #define PNG_IEND PNG_CONST png_byte png_IEND[5] = { 73, 69, 78, 68, '\0'} | |
213 | #define PNG_PLTE PNG_CONST png_byte png_PLTE[5] = { 80, 76, 84, 69, '\0'} | |
214 | #define PNG_bKGD PNG_CONST png_byte png_bKGD[5] = { 98, 75, 71, 68, '\0'} | |
215 | #define PNG_cHRM PNG_CONST png_byte png_cHRM[5] = { 99, 72, 82, 77, '\0'} | |
216 | #define PNG_gAMA PNG_CONST png_byte png_gAMA[5] = {103, 65, 77, 65, '\0'} | |
217 | #define PNG_hIST PNG_CONST png_byte png_hIST[5] = {104, 73, 83, 84, '\0'} | |
218 | #define PNG_iCCP PNG_CONST png_byte png_iCCP[5] = {105, 67, 67, 80, '\0'} | |
219 | #define PNG_iTXt PNG_CONST png_byte png_iTXt[5] = {105, 84, 88, 116, '\0'} | |
220 | #define PNG_oFFs PNG_CONST png_byte png_oFFs[5] = {111, 70, 70, 115, '\0'} | |
221 | #define PNG_pCAL PNG_CONST png_byte png_pCAL[5] = {112, 67, 65, 76, '\0'} | |
222 | #define PNG_sCAL PNG_CONST png_byte png_sCAL[5] = {115, 67, 65, 76, '\0'} | |
223 | #define PNG_pHYs PNG_CONST png_byte png_pHYs[5] = {112, 72, 89, 115, '\0'} | |
224 | #define PNG_sBIT PNG_CONST png_byte png_sBIT[5] = {115, 66, 73, 84, '\0'} | |
225 | #define PNG_sPLT PNG_CONST png_byte png_sPLT[5] = {115, 80, 76, 84, '\0'} | |
226 | #define PNG_sRGB PNG_CONST png_byte png_sRGB[5] = {115, 82, 71, 66, '\0'} | |
227 | #define PNG_sTER PNG_CONST png_byte png_sTER[5] = {115, 84, 69, 82, '\0'} | |
228 | #define PNG_tEXt PNG_CONST png_byte png_tEXt[5] = {116, 69, 88, 116, '\0'} | |
229 | #define PNG_tIME PNG_CONST png_byte png_tIME[5] = {116, 73, 77, 69, '\0'} | |
230 | #define PNG_tRNS PNG_CONST png_byte png_tRNS[5] = {116, 82, 78, 83, '\0'} | |
231 | #define PNG_zTXt PNG_CONST png_byte png_zTXt[5] = {122, 84, 88, 116, '\0'} | |
232 | ||
233 | ||
234 | /* Inhibit C++ name-mangling for libpng functions but not for system calls. */ | |
235 | #ifdef __cplusplus | |
236 | extern "C" { | |
237 | #endif /* __cplusplus */ | |
238 | ||
239 | /* These functions are used internally in the code. They generally | |
240 | * shouldn't be used unless you are writing code to add or replace some | |
241 | * functionality in libpng. More information about most functions can | |
242 | * be found in the files where the functions are located. | |
243 | */ | |
244 | ||
245 | /* Allocate memory for an internal libpng struct */ | |
246 | PNG_EXTERN png_voidp png_create_struct PNGARG((int type)); | |
247 | ||
248 | /* Free memory from internal libpng struct */ | |
249 | PNG_EXTERN void png_destroy_struct PNGARG((png_voidp struct_ptr)); | |
250 | ||
251 | PNG_EXTERN png_voidp png_create_struct_2 PNGARG((int type, png_malloc_ptr | |
252 | malloc_fn, png_voidp mem_ptr)); | |
253 | PNG_EXTERN void png_destroy_struct_2 PNGARG((png_voidp struct_ptr, | |
254 | png_free_ptr free_fn, png_voidp mem_ptr)); | |
255 | ||
256 | /* Free any memory that info_ptr points to and reset struct. */ | |
257 | PNG_EXTERN void png_info_destroy PNGARG((png_structp png_ptr, | |
258 | png_infop info_ptr)); | |
259 | ||
260 | /* Function to allocate memory for zlib. PNGAPI is disallowed. */ | |
261 | PNG_EXTERN voidpf png_zalloc PNGARG((voidpf png_ptr, uInt items, uInt size)); | |
262 | ||
263 | /* Function to free memory for zlib. PNGAPI is disallowed. */ | |
264 | PNG_EXTERN void png_zfree PNGARG((voidpf png_ptr, voidpf ptr)); | |
265 | ||
266 | /* Next four functions are used internally as callbacks. PNGAPI is required | |
267 | * but not PNG_EXPORT. PNGAPI added at libpng version 1.2.3. */ | |
268 | ||
269 | PNG_EXTERN void PNGAPI png_default_read_data PNGARG((png_structp png_ptr, | |
270 | png_bytep data, png_size_t length)); | |
271 | ||
272 | #ifdef PNG_PROGRESSIVE_READ_SUPPORTED | |
273 | PNG_EXTERN void PNGAPI png_push_fill_buffer PNGARG((png_structp png_ptr, | |
274 | png_bytep buffer, png_size_t length)); | |
275 | #endif | |
276 | ||
277 | PNG_EXTERN void PNGAPI png_default_write_data PNGARG((png_structp png_ptr, | |
278 | png_bytep data, png_size_t length)); | |
279 | ||
280 | #ifdef PNG_WRITE_FLUSH_SUPPORTED | |
281 | #ifdef PNG_STDIO_SUPPORTED | |
282 | PNG_EXTERN void PNGAPI png_default_flush PNGARG((png_structp png_ptr)); | |
283 | #endif | |
284 | #endif | |
285 | ||
286 | /* Reset the CRC variable */ | |
287 | PNG_EXTERN void png_reset_crc PNGARG((png_structp png_ptr)); | |
288 | ||
289 | /* Write the "data" buffer to whatever output you are using */ | |
290 | PNG_EXTERN void png_write_data PNGARG((png_structp png_ptr, png_bytep data, | |
291 | png_size_t length)); | |
292 | ||
293 | /* Read the chunk header (length + type name) */ | |
294 | PNG_EXTERN png_uint_32 png_read_chunk_header PNGARG((png_structp png_ptr)); | |
295 | ||
296 | /* Read data from whatever input you are using into the "data" buffer */ | |
297 | PNG_EXTERN void png_read_data PNGARG((png_structp png_ptr, png_bytep data, | |
298 | png_size_t length)); | |
299 | ||
300 | /* Read bytes into buf, and update png_ptr->crc */ | |
301 | PNG_EXTERN void png_crc_read PNGARG((png_structp png_ptr, png_bytep buf, | |
302 | png_size_t length)); | |
303 | ||
304 | /* Decompress data in a chunk that uses compression */ | |
305 | #if defined(PNG_zTXt_SUPPORTED) || defined(PNG_iTXt_SUPPORTED) || \ | |
306 | defined(PNG_iCCP_SUPPORTED) || defined(PNG_sPLT_SUPPORTED) | |
307 | PNG_EXTERN void png_decompress_chunk PNGARG((png_structp png_ptr, | |
308 | int comp_type, png_size_t chunklength, png_size_t prefix_length, | |
309 | png_size_t *data_length)); | |
310 | #endif | |
311 | ||
312 | /* Read "skip" bytes, read the file crc, and (optionally) verify png_ptr->crc */ | |
313 | PNG_EXTERN int png_crc_finish PNGARG((png_structp png_ptr, png_uint_32 skip)); | |
314 | ||
315 | /* Read the CRC from the file and compare it to the libpng calculated CRC */ | |
316 | PNG_EXTERN int png_crc_error PNGARG((png_structp png_ptr)); | |
317 | ||
318 | /* Calculate the CRC over a section of data. Note that we are only | |
319 | * passing a maximum of 64K on systems that have this as a memory limit, | |
320 | * since this is the maximum buffer size we can specify. | |
321 | */ | |
322 | PNG_EXTERN void png_calculate_crc PNGARG((png_structp png_ptr, png_bytep ptr, | |
323 | png_size_t length)); | |
324 | ||
325 | #ifdef PNG_WRITE_FLUSH_SUPPORTED | |
326 | PNG_EXTERN void png_flush PNGARG((png_structp png_ptr)); | |
327 | #endif | |
328 | ||
329 | /* Write various chunks */ | |
330 | ||
331 | /* Write the IHDR chunk, and update the png_struct with the necessary | |
332 | * information. | |
333 | */ | |
334 | PNG_EXTERN void png_write_IHDR PNGARG((png_structp png_ptr, png_uint_32 width, | |
335 | png_uint_32 height, | |
336 | int bit_depth, int color_type, int compression_method, int filter_method, | |
337 | int interlace_method)); | |
338 | ||
339 | PNG_EXTERN void png_write_PLTE PNGARG((png_structp png_ptr, png_colorp palette, | |
340 | png_uint_32 num_pal)); | |
341 | ||
342 | PNG_EXTERN void png_write_IDAT PNGARG((png_structp png_ptr, png_bytep data, | |
343 | png_size_t length)); | |
344 | ||
345 | PNG_EXTERN void png_write_IEND PNGARG((png_structp png_ptr)); | |
346 | ||
347 | #ifdef PNG_WRITE_gAMA_SUPPORTED | |
348 | #ifdef PNG_FLOATING_POINT_SUPPORTED | |
349 | PNG_EXTERN void png_write_gAMA PNGARG((png_structp png_ptr, double file_gamma)); | |
350 | #endif | |
351 | #ifdef PNG_FIXED_POINT_SUPPORTED | |
352 | PNG_EXTERN void png_write_gAMA_fixed PNGARG((png_structp png_ptr, | |
353 | png_fixed_point file_gamma)); | |
354 | #endif | |
355 | #endif | |
356 | ||
357 | #ifdef PNG_WRITE_sBIT_SUPPORTED | |
358 | PNG_EXTERN void png_write_sBIT PNGARG((png_structp png_ptr, png_color_8p sbit, | |
359 | int color_type)); | |
360 | #endif | |
361 | ||
362 | #ifdef PNG_WRITE_cHRM_SUPPORTED | |
363 | #ifdef PNG_FLOATING_POINT_SUPPORTED | |
364 | PNG_EXTERN void png_write_cHRM PNGARG((png_structp png_ptr, | |
365 | double white_x, double white_y, | |
366 | double red_x, double red_y, double green_x, double green_y, | |
367 | double blue_x, double blue_y)); | |
368 | #endif | |
369 | PNG_EXTERN void png_write_cHRM_fixed PNGARG((png_structp png_ptr, | |
370 | png_fixed_point int_white_x, png_fixed_point int_white_y, | |
371 | png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point | |
372 | int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x, | |
373 | png_fixed_point int_blue_y)); | |
374 | #endif | |
375 | ||
376 | #ifdef PNG_WRITE_sRGB_SUPPORTED | |
377 | PNG_EXTERN void png_write_sRGB PNGARG((png_structp png_ptr, | |
378 | int intent)); | |
379 | #endif | |
380 | ||
381 | #ifdef PNG_WRITE_iCCP_SUPPORTED | |
382 | PNG_EXTERN void png_write_iCCP PNGARG((png_structp png_ptr, | |
383 | png_charp name, int compression_type, | |
384 | png_charp profile, int proflen)); | |
385 | /* Note to maintainer: profile should be png_bytep */ | |
386 | #endif | |
387 | ||
388 | #ifdef PNG_WRITE_sPLT_SUPPORTED | |
389 | PNG_EXTERN void png_write_sPLT PNGARG((png_structp png_ptr, | |
390 | png_sPLT_tp palette)); | |
391 | #endif | |
392 | ||
393 | #ifdef PNG_WRITE_tRNS_SUPPORTED | |
394 | PNG_EXTERN void png_write_tRNS PNGARG((png_structp png_ptr, png_bytep trans, | |
395 | png_color_16p values, int number, int color_type)); | |
396 | #endif | |
397 | ||
398 | #ifdef PNG_WRITE_bKGD_SUPPORTED | |
399 | PNG_EXTERN void png_write_bKGD PNGARG((png_structp png_ptr, | |
400 | png_color_16p values, int color_type)); | |
401 | #endif | |
402 | ||
403 | #ifdef PNG_WRITE_hIST_SUPPORTED | |
404 | PNG_EXTERN void png_write_hIST PNGARG((png_structp png_ptr, png_uint_16p hist, | |
405 | int num_hist)); | |
406 | #endif | |
407 | ||
408 | #if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_pCAL_SUPPORTED) || \ | |
409 | defined(PNG_WRITE_iCCP_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED) | |
410 | PNG_EXTERN png_size_t png_check_keyword PNGARG((png_structp png_ptr, | |
411 | png_charp key, png_charpp new_key)); | |
412 | #endif | |
413 | ||
414 | #ifdef PNG_WRITE_tEXt_SUPPORTED | |
415 | PNG_EXTERN void png_write_tEXt PNGARG((png_structp png_ptr, png_charp key, | |
416 | png_charp text, png_size_t text_len)); | |
417 | #endif | |
418 | ||
419 | #ifdef PNG_WRITE_zTXt_SUPPORTED | |
420 | PNG_EXTERN void png_write_zTXt PNGARG((png_structp png_ptr, png_charp key, | |
421 | png_charp text, png_size_t text_len, int compression)); | |
422 | #endif | |
423 | ||
424 | #ifdef PNG_WRITE_iTXt_SUPPORTED | |
425 | PNG_EXTERN void png_write_iTXt PNGARG((png_structp png_ptr, | |
426 | int compression, png_charp key, png_charp lang, png_charp lang_key, | |
427 | png_charp text)); | |
428 | #endif | |
429 | ||
430 | #ifdef PNG_TEXT_SUPPORTED /* Added at version 1.0.14 and 1.2.4 */ | |
431 | PNG_EXTERN int png_set_text_2 PNGARG((png_structp png_ptr, | |
432 | png_infop info_ptr, png_textp text_ptr, int num_text)); | |
433 | #endif | |
434 | ||
435 | #ifdef PNG_WRITE_oFFs_SUPPORTED | |
436 | PNG_EXTERN void png_write_oFFs PNGARG((png_structp png_ptr, | |
437 | png_int_32 x_offset, png_int_32 y_offset, int unit_type)); | |
438 | #endif | |
439 | ||
440 | #ifdef PNG_WRITE_pCAL_SUPPORTED | |
441 | PNG_EXTERN void png_write_pCAL PNGARG((png_structp png_ptr, png_charp purpose, | |
442 | png_int_32 X0, png_int_32 X1, int type, int nparams, | |
443 | png_charp units, png_charpp params)); | |
444 | #endif | |
445 | ||
446 | #ifdef PNG_WRITE_pHYs_SUPPORTED | |
447 | PNG_EXTERN void png_write_pHYs PNGARG((png_structp png_ptr, | |
448 | png_uint_32 x_pixels_per_unit, png_uint_32 y_pixels_per_unit, | |
449 | int unit_type)); | |
450 | #endif | |
451 | ||
452 | #ifdef PNG_WRITE_tIME_SUPPORTED | |
453 | PNG_EXTERN void png_write_tIME PNGARG((png_structp png_ptr, | |
454 | png_timep mod_time)); | |
455 | #endif | |
456 | ||
457 | #ifdef PNG_WRITE_sCAL_SUPPORTED | |
458 | #if defined(PNG_FLOATING_POINT_SUPPORTED) && defined(PNG_STDIO_SUPPORTED) | |
459 | PNG_EXTERN void png_write_sCAL PNGARG((png_structp png_ptr, | |
460 | int unit, double width, double height)); | |
461 | #else | |
462 | #ifdef PNG_FIXED_POINT_SUPPORTED | |
463 | PNG_EXTERN void png_write_sCAL_s PNGARG((png_structp png_ptr, | |
464 | int unit, png_charp width, png_charp height)); | |
465 | #endif | |
466 | #endif | |
467 | #endif | |
468 | ||
469 | /* Called when finished processing a row of data */ | |
470 | PNG_EXTERN void png_write_finish_row PNGARG((png_structp png_ptr)); | |
471 | ||
472 | /* Internal use only. Called before first row of data */ | |
473 | PNG_EXTERN void png_write_start_row PNGARG((png_structp png_ptr)); | |
474 | ||
475 | #ifdef PNG_READ_GAMMA_SUPPORTED | |
476 | PNG_EXTERN void png_build_gamma_table PNGARG((png_structp png_ptr, | |
477 | png_byte bit_depth)); | |
478 | #endif | |
479 | ||
480 | /* Combine a row of data, dealing with alpha, etc. if requested */ | |
481 | PNG_EXTERN void png_combine_row PNGARG((png_structp png_ptr, png_bytep row, | |
482 | int mask)); | |
483 | ||
484 | #ifdef PNG_READ_INTERLACING_SUPPORTED | |
485 | /* Expand an interlaced row */ | |
486 | /* OLD pre-1.0.9 interface: | |
487 | PNG_EXTERN void png_do_read_interlace PNGARG((png_row_infop row_info, | |
488 | png_bytep row, int pass, png_uint_32 transformations)); | |
489 | */ | |
490 | PNG_EXTERN void png_do_read_interlace PNGARG((png_structp png_ptr)); | |
491 | #endif | |
492 | ||
493 | /* GRR TO DO (2.0 or whenever): simplify other internal calling interfaces */ | |
494 | ||
495 | #ifdef PNG_WRITE_INTERLACING_SUPPORTED | |
496 | /* Grab pixels out of a row for an interlaced pass */ | |
497 | PNG_EXTERN void png_do_write_interlace PNGARG((png_row_infop row_info, | |
498 | png_bytep row, int pass)); | |
499 | #endif | |
500 | ||
501 | /* Unfilter a row */ | |
502 | PNG_EXTERN void png_read_filter_row PNGARG((png_structp png_ptr, | |
503 | png_row_infop row_info, png_bytep row, png_bytep prev_row, int filter)); | |
504 | ||
505 | /* Choose the best filter to use and filter the row data */ | |
506 | PNG_EXTERN void png_write_find_filter PNGARG((png_structp png_ptr, | |
507 | png_row_infop row_info)); | |
508 | ||
509 | /* Write out the filtered row. */ | |
510 | PNG_EXTERN void png_write_filtered_row PNGARG((png_structp png_ptr, | |
511 | png_bytep filtered_row)); | |
512 | /* Finish a row while reading, dealing with interlacing passes, etc. */ | |
513 | PNG_EXTERN void png_read_finish_row PNGARG((png_structp png_ptr)); | |
514 | ||
515 | /* Initialize the row buffers, etc. */ | |
516 | PNG_EXTERN void png_read_start_row PNGARG((png_structp png_ptr)); | |
517 | /* Optional call to update the users info structure */ | |
518 | PNG_EXTERN void png_read_transform_info PNGARG((png_structp png_ptr, | |
519 | png_infop info_ptr)); | |
520 | ||
521 | /* These are the functions that do the transformations */ | |
522 | #ifdef PNG_READ_FILLER_SUPPORTED | |
523 | PNG_EXTERN void png_do_read_filler PNGARG((png_row_infop row_info, | |
524 | png_bytep row, png_uint_32 filler, png_uint_32 flags)); | |
525 | #endif | |
526 | ||
527 | #ifdef PNG_READ_SWAP_ALPHA_SUPPORTED | |
528 | PNG_EXTERN void png_do_read_swap_alpha PNGARG((png_row_infop row_info, | |
529 | png_bytep row)); | |
530 | #endif | |
531 | ||
532 | #ifdef PNG_WRITE_SWAP_ALPHA_SUPPORTED | |
533 | PNG_EXTERN void png_do_write_swap_alpha PNGARG((png_row_infop row_info, | |
534 | png_bytep row)); | |
535 | #endif | |
536 | ||
537 | #ifdef PNG_READ_INVERT_ALPHA_SUPPORTED | |
538 | PNG_EXTERN void png_do_read_invert_alpha PNGARG((png_row_infop row_info, | |
539 | png_bytep row)); | |
540 | #endif | |
541 | ||
542 | #ifdef PNG_WRITE_INVERT_ALPHA_SUPPORTED | |
543 | PNG_EXTERN void png_do_write_invert_alpha PNGARG((png_row_infop row_info, | |
544 | png_bytep row)); | |
545 | #endif | |
546 | ||
547 | #if defined(PNG_WRITE_FILLER_SUPPORTED) || \ | |
548 | defined(PNG_READ_STRIP_ALPHA_SUPPORTED) | |
549 | PNG_EXTERN void png_do_strip_filler PNGARG((png_row_infop row_info, | |
550 | png_bytep row, png_uint_32 flags)); | |
551 | #endif | |
552 | ||
553 | #if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED) | |
554 | PNG_EXTERN void png_do_swap PNGARG((png_row_infop row_info, png_bytep row)); | |
555 | #endif | |
556 | ||
557 | #if defined(PNG_READ_PACKSWAP_SUPPORTED) || \ | |
558 | defined(PNG_WRITE_PACKSWAP_SUPPORTED) | |
559 | PNG_EXTERN void png_do_packswap PNGARG((png_row_infop row_info, png_bytep row)); | |
560 | #endif | |
561 | ||
562 | #ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED | |
563 | PNG_EXTERN int png_do_rgb_to_gray PNGARG((png_structp png_ptr, png_row_infop | |
564 | row_info, png_bytep row)); | |
565 | #endif | |
566 | ||
567 | #ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED | |
568 | PNG_EXTERN void png_do_gray_to_rgb PNGARG((png_row_infop row_info, | |
569 | png_bytep row)); | |
570 | #endif | |
571 | ||
572 | #ifdef PNG_READ_PACK_SUPPORTED | |
573 | PNG_EXTERN void png_do_unpack PNGARG((png_row_infop row_info, png_bytep row)); | |
574 | #endif | |
575 | ||
576 | #ifdef PNG_READ_SHIFT_SUPPORTED | |
577 | PNG_EXTERN void png_do_unshift PNGARG((png_row_infop row_info, png_bytep row, | |
578 | png_color_8p sig_bits)); | |
579 | #endif | |
580 | ||
581 | #if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED) | |
582 | PNG_EXTERN void png_do_invert PNGARG((png_row_infop row_info, png_bytep row)); | |
583 | #endif | |
584 | ||
585 | #ifdef PNG_READ_16_TO_8_SUPPORTED | |
586 | PNG_EXTERN void png_do_chop PNGARG((png_row_infop row_info, png_bytep row)); | |
587 | #endif | |
588 | ||
589 | #ifdef PNG_READ_QUANTIZE_SUPPORTED | |
590 | PNG_EXTERN void png_do_quantize PNGARG((png_row_infop row_info, | |
591 | png_bytep row, png_bytep palette_lookup, png_bytep quantize_lookup)); | |
592 | ||
593 | # ifdef PNG_CORRECT_PALETTE_SUPPORTED | |
594 | PNG_EXTERN void png_correct_palette PNGARG((png_structp png_ptr, | |
595 | png_colorp palette, int num_palette)); | |
596 | # endif | |
597 | #endif | |
598 | ||
599 | #if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED) | |
600 | PNG_EXTERN void png_do_bgr PNGARG((png_row_infop row_info, png_bytep row)); | |
601 | #endif | |
602 | ||
603 | #ifdef PNG_WRITE_PACK_SUPPORTED | |
604 | PNG_EXTERN void png_do_pack PNGARG((png_row_infop row_info, | |
605 | png_bytep row, png_uint_32 bit_depth)); | |
606 | #endif | |
607 | ||
608 | #ifdef PNG_WRITE_SHIFT_SUPPORTED | |
609 | PNG_EXTERN void png_do_shift PNGARG((png_row_infop row_info, png_bytep row, | |
610 | png_color_8p bit_depth)); | |
611 | #endif | |
612 | ||
613 | #ifdef PNG_READ_BACKGROUND_SUPPORTED | |
614 | #ifdef PNG_READ_GAMMA_SUPPORTED | |
615 | PNG_EXTERN void png_do_background PNGARG((png_row_infop row_info, png_bytep row, | |
616 | png_color_16p trans_color, png_color_16p background, | |
617 | png_color_16p background_1, | |
618 | png_bytep gamma_table, png_bytep gamma_from_1, png_bytep gamma_to_1, | |
619 | png_uint_16pp gamma_16, png_uint_16pp gamma_16_from_1, | |
620 | png_uint_16pp gamma_16_to_1, int gamma_shift)); | |
621 | #else | |
622 | PNG_EXTERN void png_do_background PNGARG((png_row_infop row_info, png_bytep row, | |
623 | png_color_16p trans_color, png_color_16p background)); | |
624 | #endif | |
625 | #endif | |
626 | ||
627 | #ifdef PNG_READ_GAMMA_SUPPORTED | |
628 | PNG_EXTERN void png_do_gamma PNGARG((png_row_infop row_info, png_bytep row, | |
629 | png_bytep gamma_table, png_uint_16pp gamma_16_table, | |
630 | int gamma_shift)); | |
631 | #endif | |
632 | ||
633 | #ifdef PNG_READ_EXPAND_SUPPORTED | |
634 | PNG_EXTERN void png_do_expand_palette PNGARG((png_row_infop row_info, | |
635 | png_bytep row, png_colorp palette, png_bytep trans, int num_trans)); | |
636 | PNG_EXTERN void png_do_expand PNGARG((png_row_infop row_info, | |
637 | png_bytep row, png_color_16p trans_value)); | |
638 | #endif | |
639 | ||
640 | /* The following decodes the appropriate chunks, and does error correction, | |
641 | * then calls the appropriate callback for the chunk if it is valid. | |
642 | */ | |
643 | ||
644 | /* Decode the IHDR chunk */ | |
645 | PNG_EXTERN void png_handle_IHDR PNGARG((png_structp png_ptr, png_infop info_ptr, | |
646 | png_uint_32 length)); | |
647 | PNG_EXTERN void png_handle_PLTE PNGARG((png_structp png_ptr, png_infop info_ptr, | |
648 | png_uint_32 length)); | |
649 | PNG_EXTERN void png_handle_IEND PNGARG((png_structp png_ptr, png_infop info_ptr, | |
650 | png_uint_32 length)); | |
651 | ||
652 | #ifdef PNG_READ_bKGD_SUPPORTED | |
653 | PNG_EXTERN void png_handle_bKGD PNGARG((png_structp png_ptr, png_infop info_ptr, | |
654 | png_uint_32 length)); | |
655 | #endif | |
656 | ||
657 | #ifdef PNG_READ_cHRM_SUPPORTED | |
658 | PNG_EXTERN void png_handle_cHRM PNGARG((png_structp png_ptr, png_infop info_ptr, | |
659 | png_uint_32 length)); | |
660 | #endif | |
661 | ||
662 | #ifdef PNG_READ_gAMA_SUPPORTED | |
663 | PNG_EXTERN void png_handle_gAMA PNGARG((png_structp png_ptr, png_infop info_ptr, | |
664 | png_uint_32 length)); | |
665 | #endif | |
666 | ||
667 | #ifdef PNG_READ_hIST_SUPPORTED | |
668 | PNG_EXTERN void png_handle_hIST PNGARG((png_structp png_ptr, png_infop info_ptr, | |
669 | png_uint_32 length)); | |
670 | #endif | |
671 | ||
672 | #ifdef PNG_READ_iCCP_SUPPORTED | |
673 | PNG_EXTERN void png_handle_iCCP PNGARG((png_structp png_ptr, png_infop info_ptr, | |
674 | png_uint_32 length)); | |
675 | #endif /* PNG_READ_iCCP_SUPPORTED */ | |
676 | ||
677 | #ifdef PNG_READ_iTXt_SUPPORTED | |
678 | PNG_EXTERN void png_handle_iTXt PNGARG((png_structp png_ptr, png_infop info_ptr, | |
679 | png_uint_32 length)); | |
680 | #endif | |
681 | ||
682 | #ifdef PNG_READ_oFFs_SUPPORTED | |
683 | PNG_EXTERN void png_handle_oFFs PNGARG((png_structp png_ptr, png_infop info_ptr, | |
684 | png_uint_32 length)); | |
685 | #endif | |
686 | ||
687 | #ifdef PNG_READ_pCAL_SUPPORTED | |
688 | PNG_EXTERN void png_handle_pCAL PNGARG((png_structp png_ptr, png_infop info_ptr, | |
689 | png_uint_32 length)); | |
690 | #endif | |
691 | ||
692 | #ifdef PNG_READ_pHYs_SUPPORTED | |
693 | PNG_EXTERN void png_handle_pHYs PNGARG((png_structp png_ptr, png_infop info_ptr, | |
694 | png_uint_32 length)); | |
695 | #endif | |
696 | ||
697 | #ifdef PNG_READ_sBIT_SUPPORTED | |
698 | PNG_EXTERN void png_handle_sBIT PNGARG((png_structp png_ptr, png_infop info_ptr, | |
699 | png_uint_32 length)); | |
700 | #endif | |
701 | ||
702 | #ifdef PNG_READ_sCAL_SUPPORTED | |
703 | PNG_EXTERN void png_handle_sCAL PNGARG((png_structp png_ptr, png_infop info_ptr, | |
704 | png_uint_32 length)); | |
705 | #endif | |
706 | ||
707 | #ifdef PNG_READ_sPLT_SUPPORTED | |
708 | PNG_EXTERN void png_handle_sPLT PNGARG((png_structp png_ptr, png_infop info_ptr, | |
709 | png_uint_32 length)); | |
710 | #endif /* PNG_READ_sPLT_SUPPORTED */ | |
711 | ||
712 | #ifdef PNG_READ_sRGB_SUPPORTED | |
713 | PNG_EXTERN void png_handle_sRGB PNGARG((png_structp png_ptr, png_infop info_ptr, | |
714 | png_uint_32 length)); | |
715 | #endif | |
716 | ||
717 | #ifdef PNG_READ_tEXt_SUPPORTED | |
718 | PNG_EXTERN void png_handle_tEXt PNGARG((png_structp png_ptr, png_infop info_ptr, | |
719 | png_uint_32 length)); | |
720 | #endif | |
721 | ||
722 | #ifdef PNG_READ_tIME_SUPPORTED | |
723 | PNG_EXTERN void png_handle_tIME PNGARG((png_structp png_ptr, png_infop info_ptr, | |
724 | png_uint_32 length)); | |
725 | #endif | |
726 | ||
727 | #ifdef PNG_READ_tRNS_SUPPORTED | |
728 | PNG_EXTERN void png_handle_tRNS PNGARG((png_structp png_ptr, png_infop info_ptr, | |
729 | png_uint_32 length)); | |
730 | #endif | |
731 | ||
732 | #ifdef PNG_READ_zTXt_SUPPORTED | |
733 | PNG_EXTERN void png_handle_zTXt PNGARG((png_structp png_ptr, png_infop info_ptr, | |
734 | png_uint_32 length)); | |
735 | #endif | |
736 | ||
737 | PNG_EXTERN void png_handle_unknown PNGARG((png_structp png_ptr, | |
738 | png_infop info_ptr, png_uint_32 length)); | |
739 | ||
740 | PNG_EXTERN void png_check_chunk_name PNGARG((png_structp png_ptr, | |
741 | png_bytep chunk_name)); | |
742 | ||
743 | /* Handle the transformations for reading and writing */ | |
744 | PNG_EXTERN void png_do_read_transformations PNGARG((png_structp png_ptr)); | |
745 | PNG_EXTERN void png_do_write_transformations PNGARG((png_structp png_ptr)); | |
746 | ||
747 | PNG_EXTERN void png_init_read_transformations PNGARG((png_structp png_ptr)); | |
748 | ||
749 | #ifdef PNG_PROGRESSIVE_READ_SUPPORTED | |
750 | PNG_EXTERN void png_push_read_chunk PNGARG((png_structp png_ptr, | |
751 | png_infop info_ptr)); | |
752 | PNG_EXTERN void png_push_read_sig PNGARG((png_structp png_ptr, | |
753 | png_infop info_ptr)); | |
754 | PNG_EXTERN void png_push_check_crc PNGARG((png_structp png_ptr)); | |
755 | PNG_EXTERN void png_push_crc_skip PNGARG((png_structp png_ptr, | |
756 | png_uint_32 length)); | |
757 | PNG_EXTERN void png_push_crc_finish PNGARG((png_structp png_ptr)); | |
758 | PNG_EXTERN void png_push_save_buffer PNGARG((png_structp png_ptr)); | |
759 | PNG_EXTERN void png_push_restore_buffer PNGARG((png_structp png_ptr, | |
760 | png_bytep buffer, png_size_t buffer_length)); | |
761 | PNG_EXTERN void png_push_read_IDAT PNGARG((png_structp png_ptr)); | |
762 | PNG_EXTERN void png_process_IDAT_data PNGARG((png_structp png_ptr, | |
763 | png_bytep buffer, png_size_t buffer_length)); | |
764 | PNG_EXTERN void png_push_process_row PNGARG((png_structp png_ptr)); | |
765 | PNG_EXTERN void png_push_handle_unknown PNGARG((png_structp png_ptr, | |
766 | png_infop info_ptr, png_uint_32 length)); | |
767 | PNG_EXTERN void png_push_have_info PNGARG((png_structp png_ptr, | |
768 | png_infop info_ptr)); | |
769 | PNG_EXTERN void png_push_have_end PNGARG((png_structp png_ptr, | |
770 | png_infop info_ptr)); | |
771 | PNG_EXTERN void png_push_have_row PNGARG((png_structp png_ptr, png_bytep row)); | |
772 | PNG_EXTERN void png_push_read_end PNGARG((png_structp png_ptr, | |
773 | png_infop info_ptr)); | |
774 | PNG_EXTERN void png_process_some_data PNGARG((png_structp png_ptr, | |
775 | png_infop info_ptr)); | |
776 | PNG_EXTERN void png_read_push_finish_row PNGARG((png_structp png_ptr)); | |
777 | #ifdef PNG_READ_tEXt_SUPPORTED | |
778 | PNG_EXTERN void png_push_handle_tEXt PNGARG((png_structp png_ptr, | |
779 | png_infop info_ptr, png_uint_32 length)); | |
780 | PNG_EXTERN void png_push_read_tEXt PNGARG((png_structp png_ptr, | |
781 | png_infop info_ptr)); | |
782 | #endif | |
783 | #ifdef PNG_READ_zTXt_SUPPORTED | |
784 | PNG_EXTERN void png_push_handle_zTXt PNGARG((png_structp png_ptr, | |
785 | png_infop info_ptr, png_uint_32 length)); | |
786 | PNG_EXTERN void png_push_read_zTXt PNGARG((png_structp png_ptr, | |
787 | png_infop info_ptr)); | |
788 | #endif | |
789 | #ifdef PNG_READ_iTXt_SUPPORTED | |
790 | PNG_EXTERN void png_push_handle_iTXt PNGARG((png_structp png_ptr, | |
791 | png_infop info_ptr, png_uint_32 length)); | |
792 | PNG_EXTERN void png_push_read_iTXt PNGARG((png_structp png_ptr, | |
793 | png_infop info_ptr)); | |
794 | #endif | |
795 | ||
796 | #endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ | |
797 | ||
798 | #ifdef PNG_MNG_FEATURES_SUPPORTED | |
799 | PNG_EXTERN void png_do_read_intrapixel PNGARG((png_row_infop row_info, | |
800 | png_bytep row)); | |
801 | PNG_EXTERN void png_do_write_intrapixel PNGARG((png_row_infop row_info, | |
802 | png_bytep row)); | |
803 | #endif | |
804 | ||
805 | /* Added at libpng version 1.4.0 */ | |
806 | #ifdef PNG_cHRM_SUPPORTED | |
807 | PNG_EXTERN int png_check_cHRM_fixed PNGARG((png_structp png_ptr, | |
808 | png_fixed_point int_white_x, png_fixed_point int_white_y, | |
809 | png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point | |
810 | int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x, | |
811 | png_fixed_point int_blue_y)); | |
812 | #endif | |
813 | ||
814 | #ifdef PNG_cHRM_SUPPORTED | |
815 | #ifdef PNG_CHECK_cHRM_SUPPORTED | |
816 | /* Added at libpng version 1.2.34 and 1.4.0 */ | |
817 | PNG_EXTERN void png_64bit_product PNGARG((long v1, long v2, | |
818 | unsigned long *hi_product, unsigned long *lo_product)); | |
819 | #endif | |
820 | #endif | |
821 | ||
822 | /* Added at libpng version 1.4.0 */ | |
823 | PNG_EXTERN void png_check_IHDR PNGARG((png_structp png_ptr, | |
824 | png_uint_32 width, png_uint_32 height, int bit_depth, | |
825 | int color_type, int interlace_type, int compression_type, | |
826 | int filter_type)); | |
827 | ||
828 | /* Free all memory used by the read (old method - NOT DLL EXPORTED) */ | |
829 | PNG_EXTERN void png_read_destroy PNGARG((png_structp png_ptr, png_infop info_ptr, | |
830 | png_infop end_info_ptr)); | |
831 | ||
832 | /* Free any memory used in png_ptr struct (old method - NOT DLL EXPORTED) */ | |
833 | PNG_EXTERN void png_write_destroy PNGARG((png_structp png_ptr)); | |
834 | ||
835 | #ifdef USE_FAR_KEYWORD /* memory model conversion function */ | |
836 | PNG_EXTERN void *png_far_to_near PNGARG((png_structp png_ptr,png_voidp ptr, | |
837 | int check)); | |
838 | #endif /* USE_FAR_KEYWORD */ | |
839 | ||
840 | /* Define PNG_DEBUG at compile time for debugging information. Higher | |
841 | * numbers for PNG_DEBUG mean more debugging information. This has | |
842 | * only been added since version 0.95 so it is not implemented throughout | |
843 | * libpng yet, but more support will be added as needed. | |
844 | */ | |
845 | #ifdef PNG_DEBUG | |
846 | #if (PNG_DEBUG > 0) | |
847 | #if !defined(PNG_DEBUG_FILE) && defined(_MSC_VER) | |
848 | #include <crtdbg.h> | |
849 | #if (PNG_DEBUG > 1) | |
850 | #ifndef _DEBUG | |
851 | # define _DEBUG | |
852 | #endif | |
853 | #ifndef png_debug | |
854 | #define png_debug(l,m) _RPT0(_CRT_WARN,m PNG_STRING_NEWLINE) | |
855 | #endif | |
856 | #ifndef png_debug1 | |
857 | #define png_debug1(l,m,p1) _RPT1(_CRT_WARN,m PNG_STRING_NEWLINE,p1) | |
858 | #endif | |
859 | #ifndef png_debug2 | |
860 | #define png_debug2(l,m,p1,p2) _RPT2(_CRT_WARN,m PNG_STRING_NEWLINE,p1,p2) | |
861 | #endif | |
862 | #endif | |
863 | #else /* PNG_DEBUG_FILE || !_MSC_VER */ | |
864 | #ifndef PNG_DEBUG_FILE | |
865 | #define PNG_DEBUG_FILE stderr | |
866 | #endif /* PNG_DEBUG_FILE */ | |
867 | ||
868 | #if (PNG_DEBUG > 1) | |
869 | /* Note: ["%s"m PNG_STRING_NEWLINE] probably does not work on | |
870 | * non-ISO compilers | |
871 | */ | |
872 | # ifdef __STDC__ | |
873 | # ifndef png_debug | |
874 | # define png_debug(l,m) \ | |
875 | { \ | |
876 | int num_tabs=l; \ | |
877 | fprintf(PNG_DEBUG_FILE,"%s"m PNG_STRING_NEWLINE,(num_tabs==1 ? "\t" : \ | |
878 | (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":"")))); \ | |
879 | } | |
880 | # endif | |
881 | # ifndef png_debug1 | |
882 | # define png_debug1(l,m,p1) \ | |
883 | { \ | |
884 | int num_tabs=l; \ | |
885 | fprintf(PNG_DEBUG_FILE,"%s"m PNG_STRING_NEWLINE,(num_tabs==1 ? "\t" : \ | |
886 | (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1); \ | |
887 | } | |
888 | # endif | |
889 | # ifndef png_debug2 | |
890 | # define png_debug2(l,m,p1,p2) \ | |
891 | { \ | |
892 | int num_tabs=l; \ | |
893 | fprintf(PNG_DEBUG_FILE,"%s"m PNG_STRING_NEWLINE,(num_tabs==1 ? "\t" : \ | |
894 | (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1,p2); \ | |
895 | } | |
896 | # endif | |
897 | # else /* __STDC __ */ | |
898 | # ifndef png_debug | |
899 | # define png_debug(l,m) \ | |
900 | { \ | |
901 | int num_tabs=l; \ | |
902 | char format[256]; \ | |
903 | snprintf(format,256,"%s%s%s",(num_tabs==1 ? "\t" : \ | |
904 | (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))), \ | |
905 | m,PNG_STRING_NEWLINE); \ | |
906 | fprintf(PNG_DEBUG_FILE,format); \ | |
907 | } | |
908 | # endif | |
909 | # ifndef png_debug1 | |
910 | # define png_debug1(l,m,p1) \ | |
911 | { \ | |
912 | int num_tabs=l; \ | |
913 | char format[256]; \ | |
914 | snprintf(format,256,"%s%s%s",(num_tabs==1 ? "\t" : \ | |
915 | (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))), \ | |
916 | m,PNG_STRING_NEWLINE); \ | |
917 | fprintf(PNG_DEBUG_FILE,format,p1); \ | |
918 | } | |
919 | # endif | |
920 | # ifndef png_debug2 | |
921 | # define png_debug2(l,m,p1,p2) \ | |
922 | { \ | |
923 | int num_tabs=l; \ | |
924 | char format[256]; \ | |
925 | snprintf(format,256,"%s%s%s",(num_tabs==1 ? "\t" : \ | |
926 | (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))), \ | |
927 | m,PNG_STRING_NEWLINE); \ | |
928 | fprintf(PNG_DEBUG_FILE,format,p1,p2); \ | |
929 | } | |
930 | # endif | |
931 | # endif /* __STDC __ */ | |
932 | #endif /* (PNG_DEBUG > 1) */ | |
933 | ||
934 | #endif /* _MSC_VER */ | |
935 | #endif /* (PNG_DEBUG > 0) */ | |
936 | #endif /* PNG_DEBUG */ | |
937 | #ifndef png_debug | |
938 | #define png_debug(l, m) | |
939 | #endif | |
940 | #ifndef png_debug1 | |
941 | #define png_debug1(l, m, p1) | |
942 | #endif | |
943 | #ifndef png_debug2 | |
944 | #define png_debug2(l, m, p1, p2) | |
945 | #endif | |
946 | ||
947 | /* Maintainer: Put new private prototypes here ^ and in libpngpf.3 */ | |
948 | ||
949 | #ifdef __cplusplus | |
950 | } | |
951 | #endif | |
952 | ||
953 | #endif /* PNG_VERSION_INFO_ONLY */ | |
954 | #endif /* PNGPRIV_H */ |