Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

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