1ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 2ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* pngstruct.h - header file for PNG reference library 3ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * 47a055fdaacbcb54d3606638017fb3381f05d96acAlex Naidis * Last changed in libpng 1.6.24 [August 4, 2016] 57a055fdaacbcb54d3606638017fb3381f05d96acAlex Naidis * Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson 6ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) 7ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) 8ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * 9ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * This code is released under the libpng license. 10ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * For conditions of distribution and use, see the disclaimer 11ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * and license in png.h 12ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik */ 13ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 14ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* The structure that holds the information to read and write PNG files. 15ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * The only people who need to care about what is inside of this are the 16ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * people who will be modifying the library for their own special needs. 17ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * It should NOT be accessed directly by an application. 18ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik */ 19ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 20ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifndef PNGSTRUCT_H 21ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#define PNGSTRUCT_H 22ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* zlib.h defines the structure z_stream, an instance of which is included 23ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * in this structure and is required for decompressing the LZ compressed 24ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * data in PNG files. 25ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik */ 26ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifndef ZLIB_CONST 27ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* We must ensure that zlib uses 'const' in declarations. */ 28ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# define ZLIB_CONST 29ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 30ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#include "zlib.h" 31ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef const 32ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* zlib.h sometimes #defines const to nothing, undo this. */ 33ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# undef const 34ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 35ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 36ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* zlib.h has mediocre z_const use before 1.2.6, this stuff is for compatibility 37ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * with older builds. 38ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik */ 39ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#if ZLIB_VERNUM < 0x1260 40ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# define PNGZ_MSG_CAST(s) png_constcast(char*,s) 41ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# define PNGZ_INPUT_CAST(b) png_constcast(png_bytep,b) 42ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#else 43ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# define PNGZ_MSG_CAST(s) (s) 44ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# define PNGZ_INPUT_CAST(b) (b) 45ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 46ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 47ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* zlib.h declares a magic type 'uInt' that limits the amount of data that zlib 48ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * can handle at once. This type need be no larger than 16 bits (so maximum of 49ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * 65535), this define allows us to discover how big it is, but limited by the 50ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * maximuum for png_size_t. The value can be overriden in a library build 51ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * (pngusr.h, or set it in CPPFLAGS) and it works to set it to a considerably 52ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * lower value (e.g. 255 works). A lower value may help memory usage (slightly) 53ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * and may even improve performance on some systems (and degrade it on others.) 54ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik */ 55ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifndef ZLIB_IO_MAX 56ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik# define ZLIB_IO_MAX ((uInt)-1) 57ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 58ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 59ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_WRITE_SUPPORTED 60ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* The type of a compression buffer list used by the write code. */ 61ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craiktypedef struct png_compression_buffer 62ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik{ 63ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik struct png_compression_buffer *next; 64ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_byte output[1]; /* actually zbuf_size */ 65ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik} png_compression_buffer, *png_compression_bufferp; 66ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 67ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#define PNG_COMPRESSION_BUFFER_SIZE(pp)\ 68ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik (offsetof(png_compression_buffer, output) + (pp)->zbuffer_size) 69ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 70ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 71ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* Colorspace support; structures used in png_struct, png_info and in internal 72ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * functions to hold and communicate information about the color space. 73ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * 74ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * PNG_COLORSPACE_SUPPORTED is only required if the application will perform 75ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * colorspace corrections, otherwise all the colorspace information can be 76ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * skipped and the size of libpng can be reduced (significantly) by compiling 77ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * out the colorspace support. 78ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik */ 79ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_COLORSPACE_SUPPORTED 80ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* The chromaticities of the red, green and blue colorants and the chromaticity 81ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * of the corresponding white point (i.e. of rgb(1.0,1.0,1.0)). 82ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik */ 83ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craiktypedef struct png_xy 84ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik{ 85ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_fixed_point redx, redy; 86ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_fixed_point greenx, greeny; 87ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_fixed_point bluex, bluey; 88ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_fixed_point whitex, whitey; 89ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik} png_xy; 90ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 91ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* The same data as above but encoded as CIE XYZ values. When this data comes 92ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * from chromaticities the sum of the Y values is assumed to be 1.0 93ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik */ 94ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craiktypedef struct png_XYZ 95ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik{ 96ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_fixed_point red_X, red_Y, red_Z; 97ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_fixed_point green_X, green_Y, green_Z; 98ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_fixed_point blue_X, blue_Y, blue_Z; 99ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik} png_XYZ; 100ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif /* COLORSPACE */ 101ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 102ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#if defined(PNG_COLORSPACE_SUPPORTED) || defined(PNG_GAMMA_SUPPORTED) 1039b1fe63dcc7ba076b9730b7bfa031cc0dbc25561Matt Sarett/* A colorspace is all the above plus, potentially, profile information; 104ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * however at present libpng does not use the profile internally so it is only 105ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * stored in the png_info struct (if iCCP is supported.) The rendering intent 106ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * is retained here and is checked. 107ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * 108ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * The file gamma encoding information is also stored here and gamma correction 109ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * is done by libpng, whereas color correction must currently be done by the 110ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * application. 111ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik */ 112ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craiktypedef struct png_colorspace 113ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik{ 114ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_GAMMA_SUPPORTED 115ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_fixed_point gamma; /* File gamma */ 116ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 117ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 118ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_COLORSPACE_SUPPORTED 119ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_xy end_points_xy; /* End points as chromaticities */ 120ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_XYZ end_points_XYZ; /* End points as CIE XYZ colorant values */ 121ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_16 rendering_intent; /* Rendering intent of a profile */ 122ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 123ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 124ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* Flags are always defined to simplify the code. */ 125ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_16 flags; /* As defined below */ 126ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik} png_colorspace, * PNG_RESTRICT png_colorspacerp; 127ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 128ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craiktypedef const png_colorspace * PNG_RESTRICT png_const_colorspacerp; 129ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 130ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* General flags for the 'flags' field */ 131ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#define PNG_COLORSPACE_HAVE_GAMMA 0x0001 132ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#define PNG_COLORSPACE_HAVE_ENDPOINTS 0x0002 133ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#define PNG_COLORSPACE_HAVE_INTENT 0x0004 134ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#define PNG_COLORSPACE_FROM_gAMA 0x0008 135ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#define PNG_COLORSPACE_FROM_cHRM 0x0010 136ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#define PNG_COLORSPACE_FROM_sRGB 0x0020 137ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#define PNG_COLORSPACE_ENDPOINTS_MATCH_sRGB 0x0040 138ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#define PNG_COLORSPACE_MATCHES_sRGB 0x0080 /* exact match on profile */ 139ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#define PNG_COLORSPACE_INVALID 0x8000 140ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#define PNG_COLORSPACE_CANCEL(flags) (0xffff ^ (flags)) 141ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif /* COLORSPACE || GAMMA */ 142ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 143ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craikstruct png_struct_def 144ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik{ 145ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_SETJMP_SUPPORTED 146ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik jmp_buf jmp_buf_local; /* New name in 1.6.0 for jmp_buf in png_struct */ 147ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_longjmp_ptr longjmp_fn;/* setjmp non-local goto function. */ 148ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik jmp_buf *jmp_buf_ptr; /* passed to longjmp_fn */ 149ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik size_t jmp_buf_size; /* size of the above, if allocated */ 150ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 151ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_error_ptr error_fn; /* function for printing errors and aborting */ 152ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_WARNINGS_SUPPORTED 153ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_error_ptr warning_fn; /* function for printing warnings */ 154ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 155ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_voidp error_ptr; /* user supplied struct for error functions */ 156ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_rw_ptr write_data_fn; /* function for writing output data */ 157ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_rw_ptr read_data_fn; /* function for reading input data */ 158ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_voidp io_ptr; /* ptr to application struct for I/O functions */ 159ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 160ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED 161ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_user_transform_ptr read_user_transform_fn; /* user read transform */ 162ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 163ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 164ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED 165ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_user_transform_ptr write_user_transform_fn; /* user write transform */ 166ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 167ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 168ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* These were added in libpng-1.0.2 */ 169ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED 170ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \ 171ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) 172ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_voidp user_transform_ptr; /* user supplied struct for user transform */ 173ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_byte user_transform_depth; /* bit depth of user transformed pixels */ 174ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_byte user_transform_channels; /* channels in user transformed pixels */ 175ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 176ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 177ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 178ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_32 mode; /* tells us where we are in the PNG file */ 179ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_32 flags; /* flags indicating various things to libpng */ 180ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_32 transformations; /* which transformations to perform */ 181ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 182ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_32 zowner; /* ID (chunk type) of zstream owner, 0 if none */ 183ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik z_stream zstream; /* decompression structure */ 184ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 185ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_WRITE_SUPPORTED 186ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_compression_bufferp zbuffer_list; /* Created on demand during write */ 187ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik uInt zbuffer_size; /* size of the actual buffer */ 188ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 189ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik int zlib_level; /* holds zlib compression level */ 190ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik int zlib_method; /* holds zlib compression method */ 191ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik int zlib_window_bits; /* holds zlib compression window bits */ 192ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik int zlib_mem_level; /* holds zlib compression memory level */ 193ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik int zlib_strategy; /* holds zlib compression strategy */ 194ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 195ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* Added at libpng 1.5.4 */ 196ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED 197ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik int zlib_text_level; /* holds zlib compression level */ 198ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik int zlib_text_method; /* holds zlib compression method */ 199ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik int zlib_text_window_bits; /* holds zlib compression window bits */ 200ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik int zlib_text_mem_level; /* holds zlib compression memory level */ 201ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik int zlib_text_strategy; /* holds zlib compression strategy */ 202ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 203ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* End of material added at libpng 1.5.4 */ 204ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* Added at libpng 1.6.0 */ 205ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_WRITE_SUPPORTED 206ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik int zlib_set_level; /* Actual values set into the zstream on write */ 207ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik int zlib_set_method; 208ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik int zlib_set_window_bits; 209ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik int zlib_set_mem_level; 210ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik int zlib_set_strategy; 211ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 212ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 213ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_32 width; /* width of image in pixels */ 214ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_32 height; /* height of image in pixels */ 215ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_32 num_rows; /* number of rows in current pass */ 216ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_32 usr_width; /* width of row at start of write */ 217ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_size_t rowbytes; /* size of row in bytes */ 218ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_32 iwidth; /* width of current interlaced row in pixels */ 219ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_32 row_number; /* current row in interlace pass */ 220ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_32 chunk_name; /* PNG_CHUNK() id of current chunk */ 221ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_bytep prev_row; /* buffer to save previous (unfiltered) row. 2229b1fe63dcc7ba076b9730b7bfa031cc0dbc25561Matt Sarett * While reading this is a pointer into 2239b1fe63dcc7ba076b9730b7bfa031cc0dbc25561Matt Sarett * big_prev_row; while writing it is separately 2249b1fe63dcc7ba076b9730b7bfa031cc0dbc25561Matt Sarett * allocated if needed. 225ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik */ 226ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_bytep row_buf; /* buffer to save current (unfiltered) row. 2279b1fe63dcc7ba076b9730b7bfa031cc0dbc25561Matt Sarett * While reading, this is a pointer into 2289b1fe63dcc7ba076b9730b7bfa031cc0dbc25561Matt Sarett * big_row_buf; while writing it is separately 2299b1fe63dcc7ba076b9730b7bfa031cc0dbc25561Matt Sarett * allocated. 230ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik */ 2319b1fe63dcc7ba076b9730b7bfa031cc0dbc25561Matt Sarett#ifdef PNG_WRITE_FILTER_SUPPORTED 2329b1fe63dcc7ba076b9730b7bfa031cc0dbc25561Matt Sarett png_bytep try_row; /* buffer to save trial row when filtering */ 2339b1fe63dcc7ba076b9730b7bfa031cc0dbc25561Matt Sarett png_bytep tst_row; /* buffer to save best trial row when filtering */ 234ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 235ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_size_t info_rowbytes; /* Added in 1.5.4: cache of updated row bytes */ 236ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 237ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_32 idat_size; /* current IDAT size for read */ 238ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_32 crc; /* current chunk CRC value */ 239ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_colorp palette; /* palette from the input file */ 240ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_16 num_palette; /* number of color entries in palette */ 241ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 242ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* Added at libpng-1.5.10 */ 243ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED 244ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik int num_palette_max; /* maximum palette index found in IDAT */ 245ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 246ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 247ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_16 num_trans; /* number of transparency values */ 248ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_byte compression; /* file compression type (always 0) */ 249ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_byte filter; /* file filter type (always 0) */ 250ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_byte interlaced; /* PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */ 251ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_byte pass; /* current interlace pass (0 - 6) */ 2527a055fdaacbcb54d3606638017fb3381f05d96acAlex Naidis png_byte do_filter; /* row filter flags (see PNG_FILTER_ in png.h ) */ 253ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_byte color_type; /* color type of file */ 254ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_byte bit_depth; /* bit depth of file */ 255ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_byte usr_bit_depth; /* bit depth of users row: write only */ 256ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_byte pixel_depth; /* number of bits per pixel */ 257ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_byte channels; /* number of channels in file */ 258ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_WRITE_SUPPORTED 259ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_byte usr_channels; /* channels at start of write: write only */ 260ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 261ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_byte sig_bytes; /* magic bytes read/written from start of file */ 262ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_byte maximum_pixel_depth; 263ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* pixel depth used for the row buffers */ 264ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_byte transformed_pixel_depth; 265ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* pixel depth after read/write transforms */ 266851c67770f9cebece9c79e914a54c348f539a512Matt Sarett#if PNG_ZLIB_VERNUM >= 0x1240 26706f1087a94f1e48298e89d77ccc51a0ced871958Matt Sarett png_byte zstream_start; /* at start of an input zlib stream */ 26806f1087a94f1e48298e89d77ccc51a0ced871958Matt Sarett#endif /* Zlib >= 1.2.4 */ 269ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED) 270ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_16 filler; /* filler bytes for pixel expansion */ 271ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 272ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 273ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#if defined(PNG_bKGD_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) ||\ 274ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik defined(PNG_READ_ALPHA_MODE_SUPPORTED) 275ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_byte background_gamma_type; 276ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_fixed_point background_gamma; 277ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_color_16 background; /* background color in screen gamma space */ 278ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_READ_GAMMA_SUPPORTED 279ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_color_16 background_1; /* background normalized to gamma 1.0 */ 280ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 2819b1fe63dcc7ba076b9730b7bfa031cc0dbc25561Matt Sarett#endif /* bKGD */ 282ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 283ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_WRITE_FLUSH_SUPPORTED 284ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_flush_ptr output_flush_fn; /* Function for flushing output */ 285ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_32 flush_dist; /* how many rows apart to flush, 0 - no flush */ 286ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_32 flush_rows; /* number of rows written since last flush */ 287ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 288ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 289ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_READ_GAMMA_SUPPORTED 290ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik int gamma_shift; /* number of "insignificant" bits in 16-bit gamma */ 291ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_fixed_point screen_gamma; /* screen gamma value (display_exponent) */ 292ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 293ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_bytep gamma_table; /* gamma table for 8-bit depth files */ 294ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_16pp gamma_16_table; /* gamma table for 16-bit depth files */ 295ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#if defined(PNG_READ_BACKGROUND_SUPPORTED) || \ 296ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik defined(PNG_READ_ALPHA_MODE_SUPPORTED) || \ 297ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik defined(PNG_READ_RGB_TO_GRAY_SUPPORTED) 298ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_bytep gamma_from_1; /* converts from 1.0 to screen */ 299ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_bytep gamma_to_1; /* converts from file to 1.0 */ 300ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_16pp gamma_16_from_1; /* converts from 1.0 to screen */ 301ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_16pp gamma_16_to_1; /* converts from file to 1.0 */ 302ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif /* READ_BACKGROUND || READ_ALPHA_MODE || RGB_TO_GRAY */ 303ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 304ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 305ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_sBIT_SUPPORTED) 306ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_color_8 sig_bit; /* significant bits in each available channel */ 307ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 308ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 309ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED) 310ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_color_8 shift; /* shift for significant bit tranformation */ 311ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 312ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 313ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) \ 314ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik || defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) 315ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_bytep trans_alpha; /* alpha values for paletted files */ 316ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_color_16 trans_color; /* transparent color for non-paletted files */ 317ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 318ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 319ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_read_status_ptr read_row_fn; /* called after each row is decoded */ 320ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_write_status_ptr write_row_fn; /* called after each row is encoded */ 321ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_PROGRESSIVE_READ_SUPPORTED 322ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_progressive_info_ptr info_fn; /* called after header data fully read */ 323ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_progressive_row_ptr row_fn; /* called after a prog. row is decoded */ 324ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_progressive_end_ptr end_fn; /* called after image is complete */ 325ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_bytep save_buffer_ptr; /* current location in save_buffer */ 326ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_bytep save_buffer; /* buffer for previously read data */ 327ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_bytep current_buffer_ptr; /* current location in current_buffer */ 328ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_bytep current_buffer; /* buffer for recently used data */ 329ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_32 push_length; /* size of current input chunk */ 330ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_32 skip_length; /* bytes to skip in input data */ 331ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_size_t save_buffer_size; /* amount of data now in save_buffer */ 332ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_size_t save_buffer_max; /* total size of save_buffer */ 333ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_size_t buffer_size; /* total amount of available input data */ 334ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_size_t current_buffer_size; /* amount of data now in current_buffer */ 335ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik int process_mode; /* what push library is currently doing */ 336ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik int cur_palette; /* current push library palette index */ 337ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 3389b1fe63dcc7ba076b9730b7bfa031cc0dbc25561Matt Sarett#endif /* PROGRESSIVE_READ */ 339ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 340ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__) 341ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* For the Borland special 64K segment handler */ 342ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_bytepp offset_table_ptr; 343ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_bytep offset_table; 344ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_16 offset_table_number; 345ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_16 offset_table_count; 346ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_16 offset_table_count_free; 347ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 348ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 349ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_READ_QUANTIZE_SUPPORTED 350ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_bytep palette_lookup; /* lookup table for quantizing */ 351ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_bytep quantize_index; /* index translation for palette files */ 352ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 353ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 3549b1fe63dcc7ba076b9730b7bfa031cc0dbc25561Matt Sarett/* Options */ 355ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_SET_OPTION_SUPPORTED 356ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_byte options; /* On/off state (up to 4 options) */ 357ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 358ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 359ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#if PNG_LIBPNG_VER < 10700 360ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* To do: remove this from libpng-1.7 */ 361ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_TIME_RFC1123_SUPPORTED 362ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik char time_buffer[29]; /* String to hold RFC 1123 time text */ 363ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 364ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 365ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 366ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* New members added in libpng-1.0.6 */ 367ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 368ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_32 free_me; /* flags items libpng is responsible for freeing */ 369ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 370ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_USER_CHUNKS_SUPPORTED 371ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_voidp user_chunk_ptr; 372ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_READ_USER_CHUNKS_SUPPORTED 373ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_user_chunk_ptr read_user_chunk_fn; /* user read chunk handler */ 374ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 375ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 376ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 377ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED 378ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik int unknown_default; /* As PNG_HANDLE_* */ 379ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik unsigned int num_chunk_list; /* Number of entries in the list */ 380ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_bytep chunk_list; /* List of png_byte[5]; the textual chunk name 381ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * followed by a PNG_HANDLE_* byte */ 382ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 383ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 384ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* New members added in libpng-1.0.3 */ 385ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED 386ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_byte rgb_to_gray_status; 387ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* Added in libpng 1.5.5 to record setting of coefficients: */ 388ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_byte rgb_to_gray_coefficients_set; 389ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* These were changed from png_byte in libpng-1.0.6 */ 390ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_16 rgb_to_gray_red_coeff; 391ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_16 rgb_to_gray_green_coeff; 392ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* deleted in 1.5.5: rgb_to_gray_blue_coeff; */ 393ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 394ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 395ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* New member added in libpng-1.0.4 (renamed in 1.0.9) */ 396ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#if defined(PNG_MNG_FEATURES_SUPPORTED) 397ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* Changed from png_byte to png_uint_32 at version 1.2.0 */ 398ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_32 mng_features_permitted; 399ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 400ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 401ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* New member added in libpng-1.0.9, ifdef'ed out in 1.0.12, enabled in 1.2.0 */ 402ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_MNG_FEATURES_SUPPORTED 403ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_byte filter_type; 404ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 405ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 406ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* New members added in libpng-1.2.0 */ 407ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 408ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* New members added in libpng-1.0.2 but first enabled by default in 1.2.0 */ 409ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_USER_MEM_SUPPORTED 410ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_voidp mem_ptr; /* user supplied struct for mem functions */ 411ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_malloc_ptr malloc_fn; /* function for allocating memory */ 412ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_free_ptr free_fn; /* function for freeing memory */ 413ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 414ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 415ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* New member added in libpng-1.0.13 and 1.2.0 */ 416ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_bytep big_row_buf; /* buffer to save current (unfiltered) row */ 417ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 418ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_READ_QUANTIZE_SUPPORTED 419ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* The following three members were added at version 1.0.14 and 1.2.4 */ 420ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_bytep quantize_sort; /* working sort array */ 421ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_bytep index_to_palette; /* where the original index currently is 422ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik in the palette */ 423ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_bytep palette_to_index; /* which original index points to this 424ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik palette color */ 425ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 426ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 427ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* New members added in libpng-1.0.16 and 1.2.6 */ 428ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_byte compression_type; 429ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 430ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_USER_LIMITS_SUPPORTED 431ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_32 user_width_max; 432ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_32 user_height_max; 433ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 434ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* Added in libpng-1.4.0: Total number of sPLT, text, and unknown 435ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * chunks that can be stored (0 means unlimited). 436ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik */ 437ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_32 user_chunk_cache_max; 438ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 439ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* Total memory that a zTXt, sPLT, iTXt, iCCP, or unknown chunk 440ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * can occupy when decompressed. 0 means unlimited. 441ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik */ 442ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_alloc_size_t user_chunk_malloc_max; 443ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 444ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 445ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* New member added in libpng-1.0.25 and 1.2.17 */ 446ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_READ_UNKNOWN_CHUNKS_SUPPORTED 447ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik /* Temporary storage for unknown chunk that the library doesn't recognize, 448ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik * used while reading the chunk. 449ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik */ 450ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_unknown_chunk unknown_chunk; 451ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 452ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 453ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* New member added in libpng-1.2.26 */ 454ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_size_t old_big_row_buf_size; 455ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 456ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_READ_SUPPORTED 457ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* New member added in libpng-1.2.30 */ 458ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_bytep read_buffer; /* buffer for reading chunk data */ 459ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_alloc_size_t read_buffer_size; /* current size of the buffer */ 460ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 461ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_SEQUENTIAL_READ_SUPPORTED 462ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik uInt IDAT_read_size; /* limit on read buffer size for IDAT */ 463ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 464ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 465ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_IO_STATE_SUPPORTED 466ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* New member added in libpng-1.4.0 */ 467ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_uint_32 io_state; 468ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 469ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 470ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* New member added in libpng-1.5.6 */ 471ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_bytep big_prev_row; 472ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 473ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik/* New member added in libpng-1.5.7 */ 474ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik void (*read_filter[PNG_FILTER_VALUE_LAST-1])(png_row_infop row_info, 475ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_bytep row, png_const_bytep prev_row); 476ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik 477ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#ifdef PNG_READ_SUPPORTED 478ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#if defined(PNG_COLORSPACE_SUPPORTED) || defined(PNG_GAMMA_SUPPORTED) 479ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik png_colorspace colorspace; 480ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 481ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif 482ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik}; 483ca2bf81b02c99afa2e76b3b2c6eb232c239221e0Chris Craik#endif /* PNGSTRUCT_H */ 484