Blame png.h

Packit 0ba690
Packit 0ba690
/* png.h - header file for PNG reference library
Packit 0ba690
 *
Packit 0ba690
 * libpng version 1.2.57, December 29, 2016
Packit 0ba690
 *
Packit 0ba690
 * Copyright (c) 1998-2016 Glenn Randers-Pehrson
Packit 0ba690
 * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
Packit 0ba690
 * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
Packit 0ba690
 *
Packit 0ba690
 * This code is released under the libpng license (See LICENSE, below)
Packit 0ba690
 *
Packit 0ba690
 * Authors and maintainers:
Packit 0ba690
 *  libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
Packit 0ba690
 *  libpng versions 0.89, June 1996, through 0.96, May 1997: Andreas Dilger
Packit 0ba690
 *  libpng versions 0.97, January 1998, through 1.2.57, December 29, 2016: Glenn
Packit 0ba690
 *  See also "Contributing Authors", below.
Packit 0ba690
 */
Packit 0ba690
Packit 0ba690
/*
Packit 0ba690
 * COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
Packit 0ba690
 *
Packit 0ba690
 * If you modify libpng you may insert additional notices immediately following
Packit 0ba690
 * this sentence.
Packit 0ba690
 *
Packit 0ba690
 * This code is released under the libpng license.
Packit 0ba690
 *
Packit 0ba690
 * libpng versions 1.0.7, July 1, 2000, through 1.2.57, December 29, 2016, are
Packit 0ba690
 * Copyright (c) 2000-2002, 2004, 2006-2016 Glenn Randers-Pehrson, are
Packit 0ba690
 * derived from libpng-1.0.6, and are distributed according to the same
Packit 0ba690
 * disclaimer and license as libpng-1.0.6 with the following individuals
Packit 0ba690
 * added to the list of Contributing Authors:
Packit 0ba690
 *
Packit 0ba690
 *    Simon-Pierre Cadieux
Packit 0ba690
 *    Eric S. Raymond
Packit 0ba690
 *    Cosmin Truta
Packit 0ba690
 *    Gilles Vollant
Packit 0ba690
 *
Packit 0ba690
 * and with the following additions to the disclaimer:
Packit 0ba690
 *
Packit 0ba690
 *    There is no warranty against interference with your enjoyment of the
Packit 0ba690
 *    library or against infringement.  There is no warranty that our
Packit 0ba690
 *    efforts or the library will fulfill any of your particular purposes
Packit 0ba690
 *    or needs.  This library is provided with all faults, and the entire
Packit 0ba690
 *    risk of satisfactory quality, performance, accuracy, and effort is with
Packit 0ba690
 *    the user.
Packit 0ba690
 *
Packit 0ba690
 * libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
Packit 0ba690
 * Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
Packit 0ba690
 * libpng-0.96, and are distributed according to the same disclaimer and
Packit 0ba690
 * license as libpng-0.96, with the following individuals added to the list
Packit 0ba690
 * of Contributing Authors:
Packit 0ba690
 *
Packit 0ba690
 *    Tom Lane
Packit 0ba690
 *    Glenn Randers-Pehrson
Packit 0ba690
 *    Willem van Schaik
Packit 0ba690
 *
Packit 0ba690
 * libpng versions 0.89, June 1996, through 0.96, May 1997, are
Packit 0ba690
 * Copyright (c) 1996-1997 Andreas Dilger, are derived from libpng-0.88,
Packit 0ba690
 * and are distributed according to the same disclaimer and license as
Packit 0ba690
 * libpng-0.88, with the following individuals added to the list of
Packit 0ba690
 * Contributing Authors:
Packit 0ba690
 *
Packit 0ba690
 *    John Bowler
Packit 0ba690
 *    Kevin Bracey
Packit 0ba690
 *    Sam Bushell
Packit 0ba690
 *    Magnus Holmgren
Packit 0ba690
 *    Greg Roelofs
Packit 0ba690
 *    Tom Tanner
Packit 0ba690
 *
Packit 0ba690
 * libpng versions 0.5, May 1995, through 0.88, January 1996, are
Packit 0ba690
 * Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
Packit 0ba690
 *
Packit 0ba690
 * For the purposes of this copyright and license, "Contributing Authors"
Packit 0ba690
 * is defined as the following set of individuals:
Packit 0ba690
 *
Packit 0ba690
 *    Andreas Dilger
Packit 0ba690
 *    Dave Martindale
Packit 0ba690
 *    Guy Eric Schalnat
Packit 0ba690
 *    Paul Schmidt
Packit 0ba690
 *    Tim Wegner
Packit 0ba690
 *
Packit 0ba690
 * The PNG Reference Library is supplied "AS IS".  The Contributing Authors
Packit 0ba690
 * and Group 42, Inc. disclaim all warranties, expressed or implied,
Packit 0ba690
 * including, without limitation, the warranties of merchantability and of
Packit 0ba690
 * fitness for any purpose.  The Contributing Authors and Group 42, Inc.
Packit 0ba690
 * assume no liability for direct, indirect, incidental, special, exemplary,
Packit 0ba690
 * or consequential damages, which may result from the use of the PNG
Packit 0ba690
 * Reference Library, even if advised of the possibility of such damage.
Packit 0ba690
 *
Packit 0ba690
 * Permission is hereby granted to use, copy, modify, and distribute this
Packit 0ba690
 * source code, or portions hereof, for any purpose, without fee, subject
Packit 0ba690
 * to the following restrictions:
Packit 0ba690
 *
Packit 0ba690
 *   1. The origin of this source code must not be misrepresented.
Packit 0ba690
 *
Packit 0ba690
 *   2. Altered versions must be plainly marked as such and must not
Packit 0ba690
 *      be misrepresented as being the original source.
Packit 0ba690
 *
Packit 0ba690
 *   3. This Copyright notice may not be removed or altered from any
Packit 0ba690
 *      source or altered source distribution.
Packit 0ba690
 *
Packit 0ba690
 * The Contributing Authors and Group 42, Inc. specifically permit, without
Packit 0ba690
 * fee, and encourage the use of this source code as a component to
Packit 0ba690
 * supporting the PNG file format in commercial products.  If you use this
Packit 0ba690
 * source code in a product, acknowledgment is not required but would be
Packit 0ba690
 * appreciated.
Packit 0ba690
 *
Packit 0ba690
 * END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.
Packit 0ba690
 */
Packit 0ba690
Packit 0ba690
/*
Packit 0ba690
 * A "png_get_copyright" function is available, for convenient use in "about"
Packit 0ba690
 * boxes and the like:
Packit 0ba690
 *
Packit 0ba690
 *    printf("%s", png_get_copyright(NULL));
Packit 0ba690
 *
Packit 0ba690
 * Also, the PNG logo (in PNG format, of course) is supplied in the
Packit 0ba690
 * files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
Packit 0ba690
 */
Packit 0ba690
Packit 0ba690
/*
Packit 0ba690
 * Libpng is OSI Certified Open Source Software.  OSI Certified Open Source is
Packit 0ba690
 * a certification mark of the Open Source Initiative. OSI has not addressed
Packit 0ba690
 * the additional disclaimers inserted at version 1.0.7.
Packit 0ba690
 */
Packit 0ba690
Packit 0ba690
/*
Packit 0ba690
 * The contributing authors would like to thank all those who helped
Packit 0ba690
 * with testing, bug fixes, and patience.  This wouldn't have been
Packit 0ba690
 * possible without all of you.
Packit 0ba690
 *
Packit 0ba690
 * Thanks to Frank J. T. Wojcik for helping with the documentation.
Packit 0ba690
 */
Packit 0ba690
Packit 0ba690
/* Note about libpng version numbers:
Packit 0ba690
 *
Packit 0ba690
 *    Due to various miscommunications, unforeseen code incompatibilities
Packit 0ba690
 *    and occasional factors outside the authors' control, version numbering
Packit 0ba690
 *    on the library has not always been consistent and straightforward.
Packit 0ba690
 *    The following table summarizes matters since version 0.89c, which was
Packit 0ba690
 *    the first widely used release:
Packit 0ba690
 *
Packit 0ba690
 *    source                 png.h  png.h  shared-lib
Packit 0ba690
 *    version                string   int  version
Packit 0ba690
 *    -------                ------ -----  ----------
Packit 0ba690
 *    0.89c "1.0 beta 3"     0.89      89  1.0.89
Packit 0ba690
 *    0.90  "1.0 beta 4"     0.90      90  0.90  [should have been 2.0.90]
Packit 0ba690
 *    0.95  "1.0 beta 5"     0.95      95  0.95  [should have been 2.0.95]
Packit 0ba690
 *    0.96  "1.0 beta 6"     0.96      96  0.96  [should have been 2.0.96]
Packit 0ba690
 *    0.97b "1.00.97 beta 7" 1.00.97   97  1.0.1 [should have been 2.0.97]
Packit 0ba690
 *    0.97c                  0.97      97  2.0.97
Packit 0ba690
 *    0.98                   0.98      98  2.0.98
Packit 0ba690
 *    0.99                   0.99      98  2.0.99
Packit 0ba690
 *    0.99a-m                0.99      99  2.0.99
Packit 0ba690
 *    1.00                   1.00     100  2.1.0 [100 should be 10000]
Packit 0ba690
 *    1.0.0      (from here on, the   100  2.1.0 [100 should be 10000]
Packit 0ba690
 *    1.0.1       png.h string is   10001  2.1.0
Packit 0ba690
 *    1.0.1a-e    identical to the  10002  from here on, the shared library
Packit 0ba690
 *    1.0.2       source version)   10002  is 2.V where V is the source code
Packit 0ba690
 *    1.0.2a-b                      10003  version, except as noted.
Packit 0ba690
 *    1.0.3                         10003
Packit 0ba690
 *    1.0.3a-d                      10004
Packit 0ba690
 *    1.0.4                         10004
Packit 0ba690
 *    1.0.4a-f                      10005
Packit 0ba690
 *    1.0.5 (+ 2 patches)           10005
Packit 0ba690
 *    1.0.5a-d                      10006
Packit 0ba690
 *    1.0.5e-r                      10100 (not source compatible)
Packit 0ba690
 *    1.0.5s-v                      10006 (not binary compatible)
Packit 0ba690
 *    1.0.6 (+ 3 patches)           10006 (still binary incompatible)
Packit 0ba690
 *    1.0.6d-f                      10007 (still binary incompatible)
Packit 0ba690
 *    1.0.6g                        10007
Packit 0ba690
 *    1.0.6h                        10007  10.6h (testing xy.z so-numbering)
Packit 0ba690
 *    1.0.6i                        10007  10.6i
Packit 0ba690
 *    1.0.6j                        10007  2.1.0.6j (incompatible with 1.0.0)
Packit 0ba690
 *    1.0.7beta11-14        DLLNUM  10007  2.1.0.7beta11-14 (binary compatible)
Packit 0ba690
 *    1.0.7beta15-18           1    10007  2.1.0.7beta15-18 (binary compatible)
Packit 0ba690
 *    1.0.7rc1-2               1    10007  2.1.0.7rc1-2 (binary compatible)
Packit 0ba690
 *    1.0.7                    1    10007  (still compatible)
Packit 0ba690
 *    ...
Packit 0ba690
 *    1.0.19                  10    10019  10.so.0.19[.0]
Packit 0ba690
 *    ...
Packit 0ba690
 *    1.0.67                  10    10067  10.so.0.67[.0]
Packit 0ba690
 *    1.2.57                  13    10257  12.so.0.57[.0]
Packit 0ba690
 *
Packit 0ba690
 *    Henceforth the source version will match the shared-library major
Packit 0ba690
 *    and minor numbers; the shared-library major version number will be
Packit 0ba690
 *    used for changes in backward compatibility, as it is intended.  The
Packit 0ba690
 *    PNG_LIBPNG_VER macro, which is not used within libpng but is available
Packit 0ba690
 *    for applications, is an unsigned integer of the form xyyzz corresponding
Packit 0ba690
 *    to the source version x.y.z (leading zeros in y and z).  Beta versions
Packit 0ba690
 *    were given the previous public release number plus a letter, until
Packit 0ba690
 *    version 1.0.6j; from then on they were given the upcoming public
Packit 0ba690
 *    release number plus "betaNN" or "rcNN".
Packit 0ba690
 *
Packit 0ba690
 *    Binary incompatibility exists only when applications make direct access
Packit 0ba690
 *    to the info_ptr or png_ptr members through png.h, and the compiled
Packit 0ba690
 *    application is loaded with a different version of the library.
Packit 0ba690
 *
Packit 0ba690
 *    DLLNUM will change each time there are forward or backward changes
Packit 0ba690
 *    in binary compatibility (e.g., when a new feature is added).
Packit 0ba690
 *
Packit 0ba690
 * See libpng.txt or libpng.3 for more information.  The PNG specification
Packit 0ba690
 * is available as a W3C Recommendation and as an ISO Specification,
Packit 0ba690
 * 
Packit 0ba690
 */
Packit 0ba690
Packit 0ba690
/*
Packit 0ba690
 * Y2K compliance in libpng:
Packit 0ba690
 * =========================
Packit 0ba690
 *
Packit 0ba690
 *    December 29, 2016
Packit 0ba690
 *
Packit 0ba690
 *    Since the PNG Development group is an ad-hoc body, we can't make
Packit 0ba690
 *    an official declaration.
Packit 0ba690
 *
Packit 0ba690
 *    This is your unofficial assurance that libpng from version 0.71 and
Packit 0ba690
 *    upward through 1.2.57 are Y2K compliant.  It is my belief that earlier
Packit 0ba690
 *    versions were also Y2K compliant.
Packit 0ba690
 *
Packit 0ba690
 *    Libpng only has three year fields.  One is a 2-byte unsigned integer
Packit 0ba690
 *    that will hold years up to 65535.  The other two hold the date in text
Packit 0ba690
 *    format, and will hold years up to 9999.
Packit 0ba690
 *
Packit 0ba690
 *    The integer is
Packit 0ba690
 *        "png_uint_16 year" in png_time_struct.
Packit 0ba690
 *
Packit 0ba690
 *    The strings are
Packit 0ba690
 *        "png_charp time_buffer" in png_struct and
Packit 0ba690
 *        "near_time_buffer", which is a local character string in png.c.
Packit 0ba690
 *
Packit 0ba690
 *    There are seven time-related functions:
Packit 0ba690
 *        png.c: png_convert_to_rfc_1123() in png.c
Packit 0ba690
 *          (formerly png_convert_to_rfc_1152() in error)
Packit 0ba690
 *        png_convert_from_struct_tm() in pngwrite.c, called in pngwrite.c
Packit 0ba690
 *        png_convert_from_time_t() in pngwrite.c
Packit 0ba690
 *        png_get_tIME() in pngget.c
Packit 0ba690
 *        png_handle_tIME() in pngrutil.c, called in pngread.c
Packit 0ba690
 *        png_set_tIME() in pngset.c
Packit 0ba690
 *        png_write_tIME() in pngwutil.c, called in pngwrite.c
Packit 0ba690
 *
Packit 0ba690
 *    All handle dates properly in a Y2K environment.  The
Packit 0ba690
 *    png_convert_from_time_t() function calls gmtime() to convert from system
Packit 0ba690
 *    clock time, which returns (year - 1900), which we properly convert to
Packit 0ba690
 *    the full 4-digit year.  There is a possibility that applications using
Packit 0ba690
 *    libpng are not passing 4-digit years into the png_convert_to_rfc_1123()
Packit 0ba690
 *    function, or that they are incorrectly passing only a 2-digit year
Packit 0ba690
 *    instead of "year - 1900" into the png_convert_from_struct_tm() function,
Packit 0ba690
 *    but this is not under our control.  The libpng documentation has always
Packit 0ba690
 *    stated that it works with 4-digit years, and the APIs have been
Packit 0ba690
 *    documented as such.
Packit 0ba690
 *
Packit 0ba690
 *    The tIME chunk itself is also Y2K compliant.  It uses a 2-byte unsigned
Packit 0ba690
 *    integer to hold the year, and can hold years as large as 65535.
Packit 0ba690
 *
Packit 0ba690
 *    zlib, upon which libpng depends, is also Y2K compliant.  It contains
Packit 0ba690
 *    no date-related code.
Packit 0ba690
 *
Packit 0ba690
 *       Glenn Randers-Pehrson
Packit 0ba690
 *       libpng maintainer
Packit 0ba690
 *       PNG Development Group
Packit 0ba690
 */
Packit 0ba690
Packit 0ba690
#ifndef PNG_H
Packit 0ba690
#define PNG_H
Packit 0ba690
Packit 0ba690
/* This is not the place to learn how to use libpng.  The file libpng.txt
Packit 0ba690
 * describes how to use libpng, and the file example.c summarizes it
Packit 0ba690
 * with some code on which to build.  This file is useful for looking
Packit 0ba690
 * at the actual function definitions and structure components.
Packit 0ba690
 */
Packit 0ba690
Packit 0ba690
/* Version information for png.h - this should match the version in png.c */
Packit 0ba690
#define PNG_LIBPNG_VER_STRING "1.2.57"
Packit 0ba690
#define PNG_HEADER_VERSION_STRING \
Packit 0ba690
   " libpng version 1.2.57 - December 29, 2016\n"
Packit 0ba690
Packit 0ba690
#define PNG_LIBPNG_VER_SONUM   0
Packit 0ba690
#define PNG_LIBPNG_VER_DLLNUM  13
Packit 0ba690
Packit 0ba690
/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
Packit 0ba690
#define PNG_LIBPNG_VER_MAJOR   1
Packit 0ba690
#define PNG_LIBPNG_VER_MINOR   2
Packit 0ba690
#define PNG_LIBPNG_VER_RELEASE 57
Packit 0ba690
/* This should match the numeric part of the final component of
Packit 0ba690
 * PNG_LIBPNG_VER_STRING, omitting any leading zero:
Packit 0ba690
 */
Packit 0ba690
Packit 0ba690
#define PNG_LIBPNG_VER_BUILD  0
Packit 0ba690
Packit 0ba690
/* Release Status */
Packit 0ba690
#define PNG_LIBPNG_BUILD_ALPHA    1
Packit 0ba690
#define PNG_LIBPNG_BUILD_BETA     2
Packit 0ba690
#define PNG_LIBPNG_BUILD_RC       3
Packit 0ba690
#define PNG_LIBPNG_BUILD_STABLE   4
Packit 0ba690
#define PNG_LIBPNG_BUILD_RELEASE_STATUS_MASK 7
Packit 0ba690
Packit 0ba690
/* Release-Specific Flags */
Packit 0ba690
#define PNG_LIBPNG_BUILD_PATCH    8 /* Can be OR'ed with
Packit 0ba690
                                       PNG_LIBPNG_BUILD_STABLE only */
Packit 0ba690
#define PNG_LIBPNG_BUILD_PRIVATE 16 /* Cannot be OR'ed with
Packit 0ba690
                                       PNG_LIBPNG_BUILD_SPECIAL */
Packit 0ba690
#define PNG_LIBPNG_BUILD_SPECIAL 32 /* Cannot be OR'ed with
Packit 0ba690
                                       PNG_LIBPNG_BUILD_PRIVATE */
Packit 0ba690
Packit 0ba690
#define PNG_LIBPNG_BUILD_BASE_TYPE PNG_LIBPNG_BUILD_STABLE
Packit 0ba690
Packit 0ba690
/* Careful here.  At one time, Guy wanted to use 082, but that would be octal.
Packit 0ba690
 * We must not include leading zeros.
Packit 0ba690
 * Versions 0.7 through 1.0.0 were in the range 0 to 100 here (only
Packit 0ba690
 * version 1.0.0 was mis-numbered 100 instead of 10000).  From
Packit 0ba690
 * version 1.0.1 it's    xxyyzz, where x=major, y=minor, z=release
Packit 0ba690
 */
Packit 0ba690
#define PNG_LIBPNG_VER 10257 /* 1.2.57 */
Packit 0ba690
Packit 0ba690
#ifndef PNG_VERSION_INFO_ONLY
Packit 0ba690
/* Include the compression library's header */
Packit 0ba690
#include "zlib.h"
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* Include all user configurable info, including optional assembler routines */
Packit 0ba690
#include "pngconf.h"
Packit 0ba690
Packit 0ba690
/*
Packit 0ba690
 * Added at libpng-1.2.8 */
Packit 0ba690
/* Ref MSDN: Private as priority over Special
Packit 0ba690
 * VS_FF_PRIVATEBUILD File *was not* built using standard release
Packit 0ba690
 * procedures. If this value is given, the StringFileInfo block must
Packit 0ba690
 * contain a PrivateBuild string.
Packit 0ba690
 *
Packit 0ba690
 * VS_FF_SPECIALBUILD File *was* built by the original company using
Packit 0ba690
 * standard release procedures but is a variation of the standard
Packit 0ba690
 * file of the same version number. If this value is given, the
Packit 0ba690
 * StringFileInfo block must contain a SpecialBuild string.
Packit 0ba690
 */
Packit 0ba690
Packit 0ba690
#ifdef PNG_USER_PRIVATEBUILD
Packit 0ba690
#  define PNG_LIBPNG_BUILD_TYPE \
Packit 0ba690
          (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_PRIVATE)
Packit 0ba690
#else
Packit 0ba690
#  ifdef PNG_LIBPNG_SPECIALBUILD
Packit 0ba690
#    define PNG_LIBPNG_BUILD_TYPE \
Packit 0ba690
            (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_SPECIAL)
Packit 0ba690
#  else
Packit 0ba690
#    define PNG_LIBPNG_BUILD_TYPE (PNG_LIBPNG_BUILD_BASE_TYPE)
Packit 0ba690
#  endif
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifndef PNG_VERSION_INFO_ONLY
Packit 0ba690
Packit 0ba690
/* Inhibit C++ name-mangling for libpng functions but not for system calls. */
Packit 0ba690
#ifdef __cplusplus
Packit 0ba690
extern "C" {
Packit 0ba690
#endif /* __cplusplus */
Packit 0ba690
Packit 0ba690
/* This file is arranged in several sections.  The first section contains
Packit 0ba690
 * structure and type definitions.  The second section contains the external
Packit 0ba690
 * library functions, while the third has the internal library functions,
Packit 0ba690
 * which applications aren't expected to use directly.
Packit 0ba690
 */
Packit 0ba690
Packit 0ba690
#ifndef PNG_NO_TYPECAST_NULL
Packit 0ba690
#define int_p_NULL                (int *)NULL
Packit 0ba690
#define png_bytep_NULL            (png_bytep)NULL
Packit 0ba690
#define png_bytepp_NULL           (png_bytepp)NULL
Packit 0ba690
#define png_doublep_NULL          (png_doublep)NULL
Packit 0ba690
#define png_error_ptr_NULL        (png_error_ptr)NULL
Packit 0ba690
#define png_flush_ptr_NULL        (png_flush_ptr)NULL
Packit 0ba690
#define png_free_ptr_NULL         (png_free_ptr)NULL
Packit 0ba690
#define png_infopp_NULL           (png_infopp)NULL
Packit 0ba690
#define png_malloc_ptr_NULL       (png_malloc_ptr)NULL
Packit 0ba690
#define png_read_status_ptr_NULL  (png_read_status_ptr)NULL
Packit 0ba690
#define png_rw_ptr_NULL           (png_rw_ptr)NULL
Packit 0ba690
#define png_structp_NULL          (png_structp)NULL
Packit 0ba690
#define png_uint_16p_NULL         (png_uint_16p)NULL
Packit 0ba690
#define png_voidp_NULL            (png_voidp)NULL
Packit 0ba690
#define png_write_status_ptr_NULL (png_write_status_ptr)NULL
Packit 0ba690
#else
Packit 0ba690
#define int_p_NULL                NULL
Packit 0ba690
#define png_bytep_NULL            NULL
Packit 0ba690
#define png_bytepp_NULL           NULL
Packit 0ba690
#define png_doublep_NULL          NULL
Packit 0ba690
#define png_error_ptr_NULL        NULL
Packit 0ba690
#define png_flush_ptr_NULL        NULL
Packit 0ba690
#define png_free_ptr_NULL         NULL
Packit 0ba690
#define png_infopp_NULL           NULL
Packit 0ba690
#define png_malloc_ptr_NULL       NULL
Packit 0ba690
#define png_read_status_ptr_NULL  NULL
Packit 0ba690
#define png_rw_ptr_NULL           NULL
Packit 0ba690
#define png_structp_NULL          NULL
Packit 0ba690
#define png_uint_16p_NULL         NULL
Packit 0ba690
#define png_voidp_NULL            NULL
Packit 0ba690
#define png_write_status_ptr_NULL NULL
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* Variables declared in png.c - only it needs to define PNG_NO_EXTERN */
Packit 0ba690
#if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN)
Packit 0ba690
/* Version information for C files, stored in png.c.  This had better match
Packit 0ba690
 * the version above.
Packit 0ba690
 */
Packit 0ba690
#ifdef PNG_USE_GLOBAL_ARRAYS
Packit 0ba690
PNG_EXPORT_VAR (PNG_CONST char) png_libpng_ver[18];
Packit 0ba690
  /* Need room for 99.99.99beta99z */
Packit 0ba690
#else
Packit 0ba690
#define png_libpng_ver png_get_header_ver(NULL)
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_USE_GLOBAL_ARRAYS
Packit 0ba690
/* This was removed in version 1.0.5c */
Packit 0ba690
/* Structures to facilitate easy interlacing.  See png.c for more details */
Packit 0ba690
PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_start[7];
Packit 0ba690
PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_inc[7];
Packit 0ba690
PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_ystart[7];
Packit 0ba690
PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_yinc[7];
Packit 0ba690
PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_mask[7];
Packit 0ba690
PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_dsp_mask[7];
Packit 0ba690
/* This isn't currently used.  If you need it, see png.c for more details.
Packit 0ba690
PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_height[7];
Packit 0ba690
*/
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#endif /* PNG_NO_EXTERN */
Packit 0ba690
Packit 0ba690
/* Three color definitions.  The order of the red, green, and blue, (and the
Packit 0ba690
 * exact size) is not important, although the size of the fields need to
Packit 0ba690
 * be png_byte or png_uint_16 (as defined below).
Packit 0ba690
 */
Packit 0ba690
typedef struct png_color_struct
Packit 0ba690
{
Packit 0ba690
   png_byte red;
Packit 0ba690
   png_byte green;
Packit 0ba690
   png_byte blue;
Packit 0ba690
} png_color;
Packit 0ba690
typedef png_color FAR * png_colorp;
Packit 0ba690
typedef png_color FAR * FAR * png_colorpp;
Packit 0ba690
Packit 0ba690
typedef struct png_color_16_struct
Packit 0ba690
{
Packit 0ba690
   png_byte index;    /* used for palette files */
Packit 0ba690
   png_uint_16 red;   /* for use in red green blue files */
Packit 0ba690
   png_uint_16 green;
Packit 0ba690
   png_uint_16 blue;
Packit 0ba690
   png_uint_16 gray;  /* for use in grayscale files */
Packit 0ba690
} png_color_16;
Packit 0ba690
typedef png_color_16 FAR * png_color_16p;
Packit 0ba690
typedef png_color_16 FAR * FAR * png_color_16pp;
Packit 0ba690
Packit 0ba690
typedef struct png_color_8_struct
Packit 0ba690
{
Packit 0ba690
   png_byte red;   /* for use in red green blue files */
Packit 0ba690
   png_byte green;
Packit 0ba690
   png_byte blue;
Packit 0ba690
   png_byte gray;  /* for use in grayscale files */
Packit 0ba690
   png_byte alpha; /* for alpha channel files */
Packit 0ba690
} png_color_8;
Packit 0ba690
typedef png_color_8 FAR * png_color_8p;
Packit 0ba690
typedef png_color_8 FAR * FAR * png_color_8pp;
Packit 0ba690
Packit 0ba690
/*
Packit 0ba690
 * The following two structures are used for the in-core representation
Packit 0ba690
 * of sPLT chunks.
Packit 0ba690
 */
Packit 0ba690
typedef struct png_sPLT_entry_struct
Packit 0ba690
{
Packit 0ba690
   png_uint_16 red;
Packit 0ba690
   png_uint_16 green;
Packit 0ba690
   png_uint_16 blue;
Packit 0ba690
   png_uint_16 alpha;
Packit 0ba690
   png_uint_16 frequency;
Packit 0ba690
} png_sPLT_entry;
Packit 0ba690
typedef png_sPLT_entry FAR * png_sPLT_entryp;
Packit 0ba690
typedef png_sPLT_entry FAR * FAR * png_sPLT_entrypp;
Packit 0ba690
Packit 0ba690
/*  When the depth of the sPLT palette is 8 bits, the color and alpha samples
Packit 0ba690
 *  occupy the LSB of their respective members, and the MSB of each member
Packit 0ba690
 *  is zero-filled.  The frequency member always occupies the full 16 bits.
Packit 0ba690
 */
Packit 0ba690
Packit 0ba690
typedef struct png_sPLT_struct
Packit 0ba690
{
Packit 0ba690
   png_charp name;           /* palette name */
Packit 0ba690
   png_byte depth;           /* depth of palette samples */
Packit 0ba690
   png_sPLT_entryp entries;  /* palette entries */
Packit 0ba690
   png_int_32 nentries;      /* number of palette entries */
Packit 0ba690
} png_sPLT_t;
Packit 0ba690
typedef png_sPLT_t FAR * png_sPLT_tp;
Packit 0ba690
typedef png_sPLT_t FAR * FAR * png_sPLT_tpp;
Packit 0ba690
Packit 0ba690
#ifdef PNG_TEXT_SUPPORTED
Packit 0ba690
/* png_text holds the contents of a text/ztxt/itxt chunk in a PNG file,
Packit 0ba690
 * and whether that contents is compressed or not.  The "key" field
Packit 0ba690
 * points to a regular zero-terminated C string.  The "text", "lang", and
Packit 0ba690
 * "lang_key" fields can be regular C strings, empty strings, or NULL pointers.
Packit 0ba690
 * However, the * structure returned by png_get_text() will always contain
Packit 0ba690
 * regular zero-terminated C strings (possibly empty), never NULL pointers,
Packit 0ba690
 * so they can be safely used in printf() and other string-handling functions.
Packit 0ba690
 */
Packit 0ba690
typedef struct png_text_struct
Packit 0ba690
{
Packit 0ba690
   int  compression;       /* compression value:
Packit 0ba690
                             -1: tEXt, none
Packit 0ba690
                              0: zTXt, deflate
Packit 0ba690
                              1: iTXt, none
Packit 0ba690
                              2: iTXt, deflate  */
Packit 0ba690
   png_charp key;          /* keyword, 1-79 character description of "text" */
Packit 0ba690
   png_charp text;         /* comment, may be an empty string (ie "")
Packit 0ba690
                              or a NULL pointer */
Packit 0ba690
   png_size_t text_length; /* length of the text string */
Packit 0ba690
#ifdef PNG_iTXt_SUPPORTED
Packit 0ba690
   png_size_t itxt_length; /* length of the itxt string */
Packit 0ba690
   png_charp lang;         /* language code, 0-79 characters
Packit 0ba690
                              or a NULL pointer */
Packit 0ba690
   png_charp lang_key;     /* keyword translated UTF-8 string, 0 or more
Packit 0ba690
                              chars or a NULL pointer */
Packit 0ba690
#endif
Packit 0ba690
} png_text;
Packit 0ba690
typedef png_text FAR * png_textp;
Packit 0ba690
typedef png_text FAR * FAR * png_textpp;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* Supported compression types for text in PNG files (tEXt, and zTXt).
Packit 0ba690
 * The values of the PNG_TEXT_COMPRESSION_ defines should NOT be changed.
Packit 0ba690
 */
Packit 0ba690
#define PNG_TEXT_COMPRESSION_NONE_WR -3
Packit 0ba690
#define PNG_TEXT_COMPRESSION_zTXt_WR -2
Packit 0ba690
#define PNG_TEXT_COMPRESSION_NONE    -1
Packit 0ba690
#define PNG_TEXT_COMPRESSION_zTXt     0
Packit 0ba690
#define PNG_ITXT_COMPRESSION_NONE     1
Packit 0ba690
#define PNG_ITXT_COMPRESSION_zTXt     2
Packit 0ba690
#define PNG_TEXT_COMPRESSION_LAST     3  /* Not a valid value */
Packit 0ba690
Packit 0ba690
/* png_time is a way to hold the time in an machine independent way.
Packit 0ba690
 * Two conversions are provided, both from time_t and struct tm.  There
Packit 0ba690
 * is no portable way to convert to either of these structures, as far
Packit 0ba690
 * as I know.  If you know of a portable way, send it to me.  As a side
Packit 0ba690
 * note - PNG has always been Year 2000 compliant!
Packit 0ba690
 */
Packit 0ba690
typedef struct png_time_struct
Packit 0ba690
{
Packit 0ba690
   png_uint_16 year; /* full year, as in, 1995 */
Packit 0ba690
   png_byte month;   /* month of year, 1 - 12 */
Packit 0ba690
   png_byte day;     /* day of month, 1 - 31 */
Packit 0ba690
   png_byte hour;    /* hour of day, 0 - 23 */
Packit 0ba690
   png_byte minute;  /* minute of hour, 0 - 59 */
Packit 0ba690
   png_byte second;  /* second of minute, 0 - 60 (for leap seconds) */
Packit 0ba690
} png_time;
Packit 0ba690
typedef png_time FAR * png_timep;
Packit 0ba690
typedef png_time FAR * FAR * png_timepp;
Packit 0ba690
Packit 0ba690
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) || \
Packit 0ba690
 defined(PNG_HANDLE_AS_UNKNOWN_SUPPORTED)
Packit 0ba690
/* png_unknown_chunk is a structure to hold queued chunks for which there is
Packit 0ba690
 * no specific support.  The idea is that we can use this to queue
Packit 0ba690
 * up private chunks for output even though the library doesn't actually
Packit 0ba690
 * know about their semantics.
Packit 0ba690
 */
Packit 0ba690
#define PNG_CHUNK_NAME_LENGTH 5
Packit 0ba690
typedef struct png_unknown_chunk_t
Packit 0ba690
{
Packit 0ba690
    png_byte name[PNG_CHUNK_NAME_LENGTH];
Packit 0ba690
    png_byte *data;
Packit 0ba690
    png_size_t size;
Packit 0ba690
Packit 0ba690
    /* libpng-using applications should NOT directly modify this byte. */
Packit 0ba690
    png_byte location; /* mode of operation at read time */
Packit 0ba690
}
Packit 0ba690
png_unknown_chunk;
Packit 0ba690
typedef png_unknown_chunk FAR * png_unknown_chunkp;
Packit 0ba690
typedef png_unknown_chunk FAR * FAR * png_unknown_chunkpp;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* png_info is a structure that holds the information in a PNG file so
Packit 0ba690
 * that the application can find out the characteristics of the image.
Packit 0ba690
 * If you are reading the file, this structure will tell you what is
Packit 0ba690
 * in the PNG file.  If you are writing the file, fill in the information
Packit 0ba690
 * you want to put into the PNG file, then call png_write_info().
Packit 0ba690
 * The names chosen should be very close to the PNG specification, so
Packit 0ba690
 * consult that document for information about the meaning of each field.
Packit 0ba690
 *
Packit 0ba690
 * With libpng < 0.95, it was only possible to directly set and read the
Packit 0ba690
 * the values in the png_info_struct, which meant that the contents and
Packit 0ba690
 * order of the values had to remain fixed.  With libpng 0.95 and later,
Packit 0ba690
 * however, there are now functions that abstract the contents of
Packit 0ba690
 * png_info_struct from the application, so this makes it easier to use
Packit 0ba690
 * libpng with dynamic libraries, and even makes it possible to use
Packit 0ba690
 * libraries that don't have all of the libpng ancillary chunk-handing
Packit 0ba690
 * functionality.
Packit 0ba690
 *
Packit 0ba690
 * In any case, the order of the parameters in png_info_struct should NOT
Packit 0ba690
 * be changed for as long as possible to keep compatibility with applications
Packit 0ba690
 * that use the old direct-access method with png_info_struct.
Packit 0ba690
 *
Packit 0ba690
 * The following members may have allocated storage attached that should be
Packit 0ba690
 * cleaned up before the structure is discarded: palette, trans, text,
Packit 0ba690
 * pcal_purpose, pcal_units, pcal_params, hist, iccp_name, iccp_profile,
Packit 0ba690
 * splt_palettes, scal_unit, row_pointers, and unknowns.   By default, these
Packit 0ba690
 * are automatically freed when the info structure is deallocated, if they were
Packit 0ba690
 * allocated internally by libpng.  This behavior can be changed by means
Packit 0ba690
 * of the png_data_freer() function.
Packit 0ba690
 *
Packit 0ba690
 * More allocation details: all the chunk-reading functions that
Packit 0ba690
 * change these members go through the corresponding png_set_*
Packit 0ba690
 * functions.  A function to clear these members is available: see
Packit 0ba690
 * png_free_data().  The png_set_* functions do not depend on being
Packit 0ba690
 * able to point info structure members to any of the storage they are
Packit 0ba690
 * passed (they make their own copies), EXCEPT that the png_set_text
Packit 0ba690
 * functions use the same storage passed to them in the text_ptr or
Packit 0ba690
 * itxt_ptr structure argument, and the png_set_rows and png_set_unknowns
Packit 0ba690
 * functions do not make their own copies.
Packit 0ba690
 */
Packit 0ba690
typedef struct png_info_struct
Packit 0ba690
{
Packit 0ba690
   /* The following are necessary for every PNG file */
Packit 0ba690
   png_uint_32 width PNG_DEPSTRUCT;       /* width of image in pixels (from IHDR) */
Packit 0ba690
   png_uint_32 height PNG_DEPSTRUCT;      /* height of image in pixels (from IHDR) */
Packit 0ba690
   png_uint_32 valid PNG_DEPSTRUCT;       /* valid chunk data (see PNG_INFO_ below) */
Packit 0ba690
   png_uint_32 rowbytes PNG_DEPSTRUCT;    /* bytes needed to hold an untransformed row */
Packit 0ba690
   png_colorp palette PNG_DEPSTRUCT;      /* array of color values (valid & PNG_INFO_PLTE) */
Packit 0ba690
   png_uint_16 num_palette PNG_DEPSTRUCT; /* number of color entries in "palette" (PLTE) */
Packit 0ba690
   png_uint_16 num_trans PNG_DEPSTRUCT;   /* number of transparent palette color (tRNS) */
Packit 0ba690
   png_byte bit_depth PNG_DEPSTRUCT;      /* 1, 2, 4, 8, or 16 bits/channel (from IHDR) */
Packit 0ba690
   png_byte color_type PNG_DEPSTRUCT;     /* see PNG_COLOR_TYPE_ below (from IHDR) */
Packit 0ba690
   /* The following three should have been named *_method not *_type */
Packit 0ba690
   png_byte compression_type PNG_DEPSTRUCT; /* must be PNG_COMPRESSION_TYPE_BASE (IHDR) */
Packit 0ba690
   png_byte filter_type PNG_DEPSTRUCT;    /* must be PNG_FILTER_TYPE_BASE (from IHDR) */
Packit 0ba690
   png_byte interlace_type PNG_DEPSTRUCT; /* One of PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
Packit 0ba690
Packit 0ba690
   /* The following is informational only on read, and not used on writes. */
Packit 0ba690
   png_byte channels PNG_DEPSTRUCT;       /* number of data channels per pixel (1, 2, 3, 4) */
Packit 0ba690
   png_byte pixel_depth PNG_DEPSTRUCT;    /* number of bits per pixel */
Packit 0ba690
   png_byte spare_byte PNG_DEPSTRUCT;     /* to align the data, and for future use */
Packit 0ba690
   png_byte signature[8] PNG_DEPSTRUCT;   /* magic bytes read by libpng from start of file */
Packit 0ba690
Packit 0ba690
   /* The rest of the data is optional.  If you are reading, check the
Packit 0ba690
    * valid field to see if the information in these are valid.  If you
Packit 0ba690
    * are writing, set the valid field to those chunks you want written,
Packit 0ba690
    * and initialize the appropriate fields below.
Packit 0ba690
    */
Packit 0ba690
Packit 0ba690
#if defined(PNG_gAMA_SUPPORTED) && defined(PNG_FLOATING_POINT_SUPPORTED)
Packit 0ba690
   /* The gAMA chunk describes the gamma characteristics of the system
Packit 0ba690
    * on which the image was created, normally in the range [1.0, 2.5].
Packit 0ba690
    * Data is valid if (valid & PNG_INFO_gAMA) is non-zero.
Packit 0ba690
    */
Packit 0ba690
   float gamma PNG_DEPSTRUCT; /* gamma value of image, if (valid & PNG_INFO_gAMA) */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_sRGB_SUPPORTED
Packit 0ba690
    /* GR-P, 0.96a */
Packit 0ba690
    /* Data valid if (valid & PNG_INFO_sRGB) non-zero. */
Packit 0ba690
   png_byte srgb_intent PNG_DEPSTRUCT; /* sRGB rendering intent [0, 1, 2, or 3] */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_TEXT_SUPPORTED
Packit 0ba690
   /* The tEXt, and zTXt chunks contain human-readable textual data in
Packit 0ba690
    * uncompressed, compressed, and optionally compressed forms, respectively.
Packit 0ba690
    * The data in "text" is an array of pointers to uncompressed,
Packit 0ba690
    * null-terminated C strings. Each chunk has a keyword that describes the
Packit 0ba690
    * textual data contained in that chunk.  Keywords are not required to be
Packit 0ba690
    * unique, and the text string may be empty.  Any number of text chunks may
Packit 0ba690
    * be in an image.
Packit 0ba690
    */
Packit 0ba690
   int num_text PNG_DEPSTRUCT; /* number of comments read/to write */
Packit 0ba690
   int max_text PNG_DEPSTRUCT; /* current size of text array */
Packit 0ba690
   png_textp text PNG_DEPSTRUCT; /* array of comments read/to write */
Packit 0ba690
#endif /* PNG_TEXT_SUPPORTED */
Packit 0ba690
Packit 0ba690
#ifdef PNG_tIME_SUPPORTED
Packit 0ba690
   /* The tIME chunk holds the last time the displayed image data was
Packit 0ba690
    * modified.  See the png_time struct for the contents of this struct.
Packit 0ba690
    */
Packit 0ba690
   png_time mod_time PNG_DEPSTRUCT;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_sBIT_SUPPORTED
Packit 0ba690
   /* The sBIT chunk specifies the number of significant high-order bits
Packit 0ba690
    * in the pixel data.  Values are in the range [1, bit_depth], and are
Packit 0ba690
    * only specified for the channels in the pixel data.  The contents of
Packit 0ba690
    * the low-order bits is not specified.  Data is valid if
Packit 0ba690
    * (valid & PNG_INFO_sBIT) is non-zero.
Packit 0ba690
    */
Packit 0ba690
   png_color_8 sig_bit PNG_DEPSTRUCT; /* significant bits in color channels */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_EXPAND_SUPPORTED) || \
Packit 0ba690
defined(PNG_READ_BACKGROUND_SUPPORTED)
Packit 0ba690
   /* The tRNS chunk supplies transparency data for paletted images and
Packit 0ba690
    * other image types that don't need a full alpha channel.  There are
Packit 0ba690
    * "num_trans" transparency values for a paletted image, stored in the
Packit 0ba690
    * same order as the palette colors, starting from index 0.  Values
Packit 0ba690
    * for the data are in the range [0, 255], ranging from fully transparent
Packit 0ba690
    * to fully opaque, respectively.  For non-paletted images, there is a
Packit 0ba690
    * single color specified that should be treated as fully transparent.
Packit 0ba690
    * Data is valid if (valid & PNG_INFO_tRNS) is non-zero.
Packit 0ba690
    */
Packit 0ba690
   png_bytep trans PNG_DEPSTRUCT; /* transparent values for paletted image */
Packit 0ba690
   png_color_16 trans_values PNG_DEPSTRUCT; /* transparent color for non-palette image */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_bKGD_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
Packit 0ba690
   /* The bKGD chunk gives the suggested image background color if the
Packit 0ba690
    * display program does not have its own background color and the image
Packit 0ba690
    * is needs to composited onto a background before display.  The colors
Packit 0ba690
    * in "background" are normally in the same color space/depth as the
Packit 0ba690
    * pixel data.  Data is valid if (valid & PNG_INFO_bKGD) is non-zero.
Packit 0ba690
    */
Packit 0ba690
   png_color_16 background PNG_DEPSTRUCT;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_oFFs_SUPPORTED
Packit 0ba690
   /* The oFFs chunk gives the offset in "offset_unit_type" units rightwards
Packit 0ba690
    * and downwards from the top-left corner of the display, page, or other
Packit 0ba690
    * application-specific co-ordinate space.  See the PNG_OFFSET_ defines
Packit 0ba690
    * below for the unit types.  Valid if (valid & PNG_INFO_oFFs) non-zero.
Packit 0ba690
    */
Packit 0ba690
   png_int_32 x_offset PNG_DEPSTRUCT; /* x offset on page */
Packit 0ba690
   png_int_32 y_offset PNG_DEPSTRUCT; /* y offset on page */
Packit 0ba690
   png_byte offset_unit_type PNG_DEPSTRUCT; /* offset units type */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_pHYs_SUPPORTED
Packit 0ba690
   /* The pHYs chunk gives the physical pixel density of the image for
Packit 0ba690
    * display or printing in "phys_unit_type" units (see PNG_RESOLUTION_
Packit 0ba690
    * defines below).  Data is valid if (valid & PNG_INFO_pHYs) is non-zero.
Packit 0ba690
    */
Packit 0ba690
   png_uint_32 x_pixels_per_unit PNG_DEPSTRUCT; /* horizontal pixel density */
Packit 0ba690
   png_uint_32 y_pixels_per_unit PNG_DEPSTRUCT; /* vertical pixel density */
Packit 0ba690
   png_byte phys_unit_type PNG_DEPSTRUCT; /* resolution type (see PNG_RESOLUTION_ below) */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_hIST_SUPPORTED
Packit 0ba690
   /* The hIST chunk contains the relative frequency or importance of the
Packit 0ba690
    * various palette entries, so that a viewer can intelligently select a
Packit 0ba690
    * reduced-color palette, if required.  Data is an array of "num_palette"
Packit 0ba690
    * values in the range [0,65535]. Data valid if (valid & PNG_INFO_hIST)
Packit 0ba690
    * is non-zero.
Packit 0ba690
    */
Packit 0ba690
   png_uint_16p hist PNG_DEPSTRUCT;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_cHRM_SUPPORTED
Packit 0ba690
   /* The cHRM chunk describes the CIE color characteristics of the monitor
Packit 0ba690
    * on which the PNG was created.  This data allows the viewer to do gamut
Packit 0ba690
    * mapping of the input image to ensure that the viewer sees the same
Packit 0ba690
    * colors in the image as the creator.  Values are in the range
Packit 0ba690
    * [0.0, 0.8].  Data valid if (valid & PNG_INFO_cHRM) non-zero.
Packit 0ba690
    */
Packit 0ba690
#ifdef PNG_FLOATING_POINT_SUPPORTED
Packit 0ba690
   float x_white PNG_DEPSTRUCT;
Packit 0ba690
   float y_white PNG_DEPSTRUCT;
Packit 0ba690
   float x_red PNG_DEPSTRUCT;
Packit 0ba690
   float y_red PNG_DEPSTRUCT;
Packit 0ba690
   float x_green PNG_DEPSTRUCT;
Packit 0ba690
   float y_green PNG_DEPSTRUCT;
Packit 0ba690
   float x_blue PNG_DEPSTRUCT;
Packit 0ba690
   float y_blue PNG_DEPSTRUCT;
Packit 0ba690
#endif
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_pCAL_SUPPORTED
Packit 0ba690
   /* The pCAL chunk describes a transformation between the stored pixel
Packit 0ba690
    * values and original physical data values used to create the image.
Packit 0ba690
    * The integer range [0, 2^bit_depth - 1] maps to the floating-point
Packit 0ba690
    * range given by [pcal_X0, pcal_X1], and are further transformed by a
Packit 0ba690
    * (possibly non-linear) transformation function given by "pcal_type"
Packit 0ba690
    * and "pcal_params" into "pcal_units".  Please see the PNG_EQUATION_
Packit 0ba690
    * defines below, and the PNG-Group's PNG extensions document for a
Packit 0ba690
    * complete description of the transformations and how they should be
Packit 0ba690
    * implemented, and for a description of the ASCII parameter strings.
Packit 0ba690
    * Data values are valid if (valid & PNG_INFO_pCAL) non-zero.
Packit 0ba690
    */
Packit 0ba690
   png_charp pcal_purpose PNG_DEPSTRUCT;  /* pCAL chunk description string */
Packit 0ba690
   png_int_32 pcal_X0 PNG_DEPSTRUCT;      /* minimum value */
Packit 0ba690
   png_int_32 pcal_X1 PNG_DEPSTRUCT;      /* maximum value */
Packit 0ba690
   png_charp pcal_units PNG_DEPSTRUCT;    /* Latin-1 string giving physical units */
Packit 0ba690
   png_charpp pcal_params PNG_DEPSTRUCT;  /* ASCII strings containing parameter values */
Packit 0ba690
   png_byte pcal_type PNG_DEPSTRUCT;      /* equation type (see PNG_EQUATION_ below) */
Packit 0ba690
   png_byte pcal_nparams PNG_DEPSTRUCT;   /* number of parameters given in pcal_params */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* New members added in libpng-1.0.6 */
Packit 0ba690
#ifdef PNG_FREE_ME_SUPPORTED
Packit 0ba690
   png_uint_32 free_me PNG_DEPSTRUCT;     /* flags items libpng is responsible for freeing */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) || \
Packit 0ba690
 defined(PNG_HANDLE_AS_UNKNOWN_SUPPORTED)
Packit 0ba690
   /* Storage for unknown chunks that the library doesn't recognize. */
Packit 0ba690
   png_unknown_chunkp unknown_chunks PNG_DEPSTRUCT;
Packit 0ba690
   png_size_t unknown_chunks_num PNG_DEPSTRUCT;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_iCCP_SUPPORTED
Packit 0ba690
   /* iCCP chunk data. */
Packit 0ba690
   png_charp iccp_name PNG_DEPSTRUCT;     /* profile name */
Packit 0ba690
   png_charp iccp_profile PNG_DEPSTRUCT;  /* International Color Consortium profile data */
Packit 0ba690
                            /* Note to maintainer: should be png_bytep */
Packit 0ba690
   png_uint_32 iccp_proflen PNG_DEPSTRUCT;  /* ICC profile data length */
Packit 0ba690
   png_byte iccp_compression PNG_DEPSTRUCT; /* Always zero */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_sPLT_SUPPORTED
Packit 0ba690
   /* Data on sPLT chunks (there may be more than one). */
Packit 0ba690
   png_sPLT_tp splt_palettes PNG_DEPSTRUCT;
Packit 0ba690
   png_uint_32 splt_palettes_num PNG_DEPSTRUCT;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_sCAL_SUPPORTED
Packit 0ba690
   /* The sCAL chunk describes the actual physical dimensions of the
Packit 0ba690
    * subject matter of the graphic.  The chunk contains a unit specification
Packit 0ba690
    * a byte value, and two ASCII strings representing floating-point
Packit 0ba690
    * values.  The values are width and height corresponsing to one pixel
Packit 0ba690
    * in the image.  This external representation is converted to double
Packit 0ba690
    * here.  Data values are valid if (valid & PNG_INFO_sCAL) is non-zero.
Packit 0ba690
    */
Packit 0ba690
   png_byte scal_unit PNG_DEPSTRUCT;         /* unit of physical scale */
Packit 0ba690
#ifdef PNG_FLOATING_POINT_SUPPORTED
Packit 0ba690
   double scal_pixel_width PNG_DEPSTRUCT;    /* width of one pixel */
Packit 0ba690
   double scal_pixel_height PNG_DEPSTRUCT;   /* height of one pixel */
Packit 0ba690
#endif
Packit 0ba690
#ifdef PNG_FIXED_POINT_SUPPORTED
Packit 0ba690
   png_charp scal_s_width PNG_DEPSTRUCT;     /* string containing height */
Packit 0ba690
   png_charp scal_s_height PNG_DEPSTRUCT;    /* string containing width */
Packit 0ba690
#endif
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_INFO_IMAGE_SUPPORTED
Packit 0ba690
   /* Memory has been allocated if (valid & PNG_ALLOCATED_INFO_ROWS) non-zero */
Packit 0ba690
   /* Data valid if (valid & PNG_INFO_IDAT) non-zero */
Packit 0ba690
   png_bytepp row_pointers PNG_DEPSTRUCT;        /* the image bits */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_FIXED_POINT_SUPPORTED) && defined(PNG_gAMA_SUPPORTED)
Packit 0ba690
   png_fixed_point int_gamma PNG_DEPSTRUCT; /* gamma of image, if (valid & PNG_INFO_gAMA) */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_cHRM_SUPPORTED) && defined(PNG_FIXED_POINT_SUPPORTED)
Packit 0ba690
   png_fixed_point int_x_white PNG_DEPSTRUCT;
Packit 0ba690
   png_fixed_point int_y_white PNG_DEPSTRUCT;
Packit 0ba690
   png_fixed_point int_x_red PNG_DEPSTRUCT;
Packit 0ba690
   png_fixed_point int_y_red PNG_DEPSTRUCT;
Packit 0ba690
   png_fixed_point int_x_green PNG_DEPSTRUCT;
Packit 0ba690
   png_fixed_point int_y_green PNG_DEPSTRUCT;
Packit 0ba690
   png_fixed_point int_x_blue PNG_DEPSTRUCT;
Packit 0ba690
   png_fixed_point int_y_blue PNG_DEPSTRUCT;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
} png_info;
Packit 0ba690
Packit 0ba690
typedef png_info FAR * png_infop;
Packit 0ba690
typedef png_info FAR * FAR * png_infopp;
Packit 0ba690
Packit 0ba690
/* Maximum positive integer used in PNG is (2^31)-1 */
Packit 0ba690
#define PNG_UINT_31_MAX ((png_uint_32)0x7fffffffL)
Packit 0ba690
#define PNG_UINT_32_MAX ((png_uint_32)(-1))
Packit 0ba690
#define PNG_SIZE_MAX ((png_size_t)(-1))
Packit 0ba690
#if defined(PNG_1_0_X) || defined (PNG_1_2_X)
Packit 0ba690
/* PNG_MAX_UINT is deprecated; use PNG_UINT_31_MAX instead. */
Packit 0ba690
#define PNG_MAX_UINT PNG_UINT_31_MAX
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* These describe the color_type field in png_info. */
Packit 0ba690
/* color type masks */
Packit 0ba690
#define PNG_COLOR_MASK_PALETTE    1
Packit 0ba690
#define PNG_COLOR_MASK_COLOR      2
Packit 0ba690
#define PNG_COLOR_MASK_ALPHA      4
Packit 0ba690
Packit 0ba690
/* color types.  Note that not all combinations are legal */
Packit 0ba690
#define PNG_COLOR_TYPE_GRAY 0
Packit 0ba690
#define PNG_COLOR_TYPE_PALETTE  (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_PALETTE)
Packit 0ba690
#define PNG_COLOR_TYPE_RGB        (PNG_COLOR_MASK_COLOR)
Packit 0ba690
#define PNG_COLOR_TYPE_RGB_ALPHA  (PNG_COLOR_MASK_COLOR | PNG_COLOR_MASK_ALPHA)
Packit 0ba690
#define PNG_COLOR_TYPE_GRAY_ALPHA (PNG_COLOR_MASK_ALPHA)
Packit 0ba690
/* aliases */
Packit 0ba690
#define PNG_COLOR_TYPE_RGBA  PNG_COLOR_TYPE_RGB_ALPHA
Packit 0ba690
#define PNG_COLOR_TYPE_GA  PNG_COLOR_TYPE_GRAY_ALPHA
Packit 0ba690
Packit 0ba690
/* This is for compression type. PNG 1.0-1.2 only define the single type. */
Packit 0ba690
#define PNG_COMPRESSION_TYPE_BASE 0 /* Deflate method 8, 32K window */
Packit 0ba690
#define PNG_COMPRESSION_TYPE_DEFAULT PNG_COMPRESSION_TYPE_BASE
Packit 0ba690
Packit 0ba690
/* This is for filter type. PNG 1.0-1.2 only define the single type. */
Packit 0ba690
#define PNG_FILTER_TYPE_BASE      0 /* Single row per-byte filtering */
Packit 0ba690
#define PNG_INTRAPIXEL_DIFFERENCING 64 /* Used only in MNG datastreams */
Packit 0ba690
#define PNG_FILTER_TYPE_DEFAULT   PNG_FILTER_TYPE_BASE
Packit 0ba690
Packit 0ba690
/* These are for the interlacing type.  These values should NOT be changed. */
Packit 0ba690
#define PNG_INTERLACE_NONE        0 /* Non-interlaced image */
Packit 0ba690
#define PNG_INTERLACE_ADAM7       1 /* Adam7 interlacing */
Packit 0ba690
#define PNG_INTERLACE_LAST        2 /* Not a valid value */
Packit 0ba690
Packit 0ba690
/* These are for the oFFs chunk.  These values should NOT be changed. */
Packit 0ba690
#define PNG_OFFSET_PIXEL          0 /* Offset in pixels */
Packit 0ba690
#define PNG_OFFSET_MICROMETER     1 /* Offset in micrometers (1/10^6 meter) */
Packit 0ba690
#define PNG_OFFSET_LAST           2 /* Not a valid value */
Packit 0ba690
Packit 0ba690
/* These are for the pCAL chunk.  These values should NOT be changed. */
Packit 0ba690
#define PNG_EQUATION_LINEAR       0 /* Linear transformation */
Packit 0ba690
#define PNG_EQUATION_BASE_E       1 /* Exponential base e transform */
Packit 0ba690
#define PNG_EQUATION_ARBITRARY    2 /* Arbitrary base exponential transform */
Packit 0ba690
#define PNG_EQUATION_HYPERBOLIC   3 /* Hyperbolic sine transformation */
Packit 0ba690
#define PNG_EQUATION_LAST         4 /* Not a valid value */
Packit 0ba690
Packit 0ba690
/* These are for the sCAL chunk.  These values should NOT be changed. */
Packit 0ba690
#define PNG_SCALE_UNKNOWN         0 /* unknown unit (image scale) */
Packit 0ba690
#define PNG_SCALE_METER           1 /* meters per pixel */
Packit 0ba690
#define PNG_SCALE_RADIAN          2 /* radians per pixel */
Packit 0ba690
#define PNG_SCALE_LAST            3 /* Not a valid value */
Packit 0ba690
Packit 0ba690
/* These are for the pHYs chunk.  These values should NOT be changed. */
Packit 0ba690
#define PNG_RESOLUTION_UNKNOWN    0 /* pixels/unknown unit (aspect ratio) */
Packit 0ba690
#define PNG_RESOLUTION_METER      1 /* pixels/meter */
Packit 0ba690
#define PNG_RESOLUTION_LAST       2 /* Not a valid value */
Packit 0ba690
Packit 0ba690
/* These are for the sRGB chunk.  These values should NOT be changed. */
Packit 0ba690
#define PNG_sRGB_INTENT_PERCEPTUAL 0
Packit 0ba690
#define PNG_sRGB_INTENT_RELATIVE   1
Packit 0ba690
#define PNG_sRGB_INTENT_SATURATION 2
Packit 0ba690
#define PNG_sRGB_INTENT_ABSOLUTE   3
Packit 0ba690
#define PNG_sRGB_INTENT_LAST       4 /* Not a valid value */
Packit 0ba690
Packit 0ba690
/* This is for text chunks */
Packit 0ba690
#define PNG_KEYWORD_MAX_LENGTH     79
Packit 0ba690
Packit 0ba690
/* Maximum number of entries in PLTE/sPLT/tRNS arrays */
Packit 0ba690
#define PNG_MAX_PALETTE_LENGTH    256
Packit 0ba690
Packit 0ba690
/* These determine if an ancillary chunk's data has been successfully read
Packit 0ba690
 * from the PNG header, or if the application has filled in the corresponding
Packit 0ba690
 * data in the info_struct to be written into the output file.  The values
Packit 0ba690
 * of the PNG_INFO_<chunk> defines should NOT be changed.
Packit 0ba690
 */
Packit 0ba690
#define PNG_INFO_gAMA 0x0001
Packit 0ba690
#define PNG_INFO_sBIT 0x0002
Packit 0ba690
#define PNG_INFO_cHRM 0x0004
Packit 0ba690
#define PNG_INFO_PLTE 0x0008
Packit 0ba690
#define PNG_INFO_tRNS 0x0010
Packit 0ba690
#define PNG_INFO_bKGD 0x0020
Packit 0ba690
#define PNG_INFO_hIST 0x0040
Packit 0ba690
#define PNG_INFO_pHYs 0x0080
Packit 0ba690
#define PNG_INFO_oFFs 0x0100
Packit 0ba690
#define PNG_INFO_tIME 0x0200
Packit 0ba690
#define PNG_INFO_pCAL 0x0400
Packit 0ba690
#define PNG_INFO_sRGB 0x0800   /* GR-P, 0.96a */
Packit 0ba690
#define PNG_INFO_iCCP 0x1000   /* ESR, 1.0.6 */
Packit 0ba690
#define PNG_INFO_sPLT 0x2000   /* ESR, 1.0.6 */
Packit 0ba690
#define PNG_INFO_sCAL 0x4000   /* ESR, 1.0.6 */
Packit 0ba690
#define PNG_INFO_IDAT 0x8000L  /* ESR, 1.0.6 */
Packit 0ba690
Packit 0ba690
/* This is used for the transformation routines, as some of them
Packit 0ba690
 * change these values for the row.  It also should enable using
Packit 0ba690
 * the routines for other purposes.
Packit 0ba690
 */
Packit 0ba690
typedef struct png_row_info_struct
Packit 0ba690
{
Packit 0ba690
   png_uint_32 width; /* width of row */
Packit 0ba690
   png_uint_32 rowbytes; /* number of bytes in row */
Packit 0ba690
   png_byte color_type; /* color type of row */
Packit 0ba690
   png_byte bit_depth; /* bit depth of row */
Packit 0ba690
   png_byte channels; /* number of channels (1, 2, 3, or 4) */
Packit 0ba690
   png_byte pixel_depth; /* bits per pixel (depth * channels) */
Packit 0ba690
} png_row_info;
Packit 0ba690
Packit 0ba690
typedef png_row_info FAR * png_row_infop;
Packit 0ba690
typedef png_row_info FAR * FAR * png_row_infopp;
Packit 0ba690
Packit 0ba690
/* These are the function types for the I/O functions and for the functions
Packit 0ba690
 * that allow the user to override the default I/O functions with his or her
Packit 0ba690
 * own.  The png_error_ptr type should match that of user-supplied warning
Packit 0ba690
 * and error functions, while the png_rw_ptr type should match that of the
Packit 0ba690
 * user read/write data functions.
Packit 0ba690
 */
Packit 0ba690
typedef struct png_struct_def png_struct;
Packit 0ba690
typedef png_struct FAR * png_structp;
Packit 0ba690
Packit 0ba690
typedef void (PNGAPI *png_error_ptr) PNGARG((png_structp, png_const_charp));
Packit 0ba690
typedef void (PNGAPI *png_rw_ptr) PNGARG((png_structp, png_bytep, png_size_t));
Packit 0ba690
typedef void (PNGAPI *png_flush_ptr) PNGARG((png_structp));
Packit 0ba690
typedef void (PNGAPI *png_read_status_ptr) PNGARG((png_structp, png_uint_32,
Packit 0ba690
   int));
Packit 0ba690
typedef void (PNGAPI *png_write_status_ptr) PNGARG((png_structp, png_uint_32,
Packit 0ba690
   int));
Packit 0ba690
Packit 0ba690
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
Packit 0ba690
typedef void (PNGAPI *png_progressive_info_ptr) PNGARG((png_structp, png_infop));
Packit 0ba690
typedef void (PNGAPI *png_progressive_end_ptr) PNGARG((png_structp, png_infop));
Packit 0ba690
typedef void (PNGAPI *png_progressive_row_ptr) PNGARG((png_structp, png_bytep,
Packit 0ba690
   png_uint_32, int));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
Packit 0ba690
    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \
Packit 0ba690
    defined(PNG_LEGACY_SUPPORTED)
Packit 0ba690
typedef void (PNGAPI *png_user_transform_ptr) PNGARG((png_structp,
Packit 0ba690
    png_row_infop, png_bytep));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_USER_CHUNKS_SUPPORTED
Packit 0ba690
typedef int (PNGAPI *png_user_chunk_ptr) PNGARG((png_structp, png_unknown_chunkp));
Packit 0ba690
#endif
Packit 0ba690
#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED
Packit 0ba690
typedef void (PNGAPI *png_unknown_chunk_ptr) PNGARG((png_structp));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* Transform masks for the high-level interface */
Packit 0ba690
#define PNG_TRANSFORM_IDENTITY       0x0000    /* read and write */
Packit 0ba690
#define PNG_TRANSFORM_STRIP_16       0x0001    /* read only */
Packit 0ba690
#define PNG_TRANSFORM_STRIP_ALPHA    0x0002    /* read only */
Packit 0ba690
#define PNG_TRANSFORM_PACKING        0x0004    /* read and write */
Packit 0ba690
#define PNG_TRANSFORM_PACKSWAP       0x0008    /* read and write */
Packit 0ba690
#define PNG_TRANSFORM_EXPAND         0x0010    /* read only */
Packit 0ba690
#define PNG_TRANSFORM_INVERT_MONO    0x0020    /* read and write */
Packit 0ba690
#define PNG_TRANSFORM_SHIFT          0x0040    /* read and write */
Packit 0ba690
#define PNG_TRANSFORM_BGR            0x0080    /* read and write */
Packit 0ba690
#define PNG_TRANSFORM_SWAP_ALPHA     0x0100    /* read and write */
Packit 0ba690
#define PNG_TRANSFORM_SWAP_ENDIAN    0x0200    /* read and write */
Packit 0ba690
#define PNG_TRANSFORM_INVERT_ALPHA   0x0400    /* read and write */
Packit 0ba690
#define PNG_TRANSFORM_STRIP_FILLER   0x0800    /* write only, deprecated */
Packit 0ba690
/* Added to libpng-1.2.34 */
Packit 0ba690
#define PNG_TRANSFORM_STRIP_FILLER_BEFORE 0x0800  /* write only */
Packit 0ba690
#define PNG_TRANSFORM_STRIP_FILLER_AFTER  0x1000  /* write only */
Packit 0ba690
/* Added to libpng-1.2.41 */
Packit 0ba690
#define PNG_TRANSFORM_GRAY_TO_RGB   0x2000      /* read only */
Packit 0ba690
Packit 0ba690
/* Flags for MNG supported features */
Packit 0ba690
#define PNG_FLAG_MNG_EMPTY_PLTE     0x01
Packit 0ba690
#define PNG_FLAG_MNG_FILTER_64      0x04
Packit 0ba690
#define PNG_ALL_MNG_FEATURES        0x05
Packit 0ba690
Packit 0ba690
typedef png_voidp (*png_malloc_ptr) PNGARG((png_structp, png_size_t));
Packit 0ba690
typedef void (*png_free_ptr) PNGARG((png_structp, png_voidp));
Packit 0ba690
Packit 0ba690
/* The structure that holds the information to read and write PNG files.
Packit 0ba690
 * The only people who need to care about what is inside of this are the
Packit 0ba690
 * people who will be modifying the library for their own special needs.
Packit 0ba690
 * It should NOT be accessed directly by an application, except to store
Packit 0ba690
 * the jmp_buf.
Packit 0ba690
 */
Packit 0ba690
Packit 0ba690
struct png_struct_def
Packit 0ba690
{
Packit 0ba690
#ifdef PNG_SETJMP_SUPPORTED
Packit 0ba690
   jmp_buf jmpbuf;            /* used in png_error */
Packit 0ba690
#endif
Packit 0ba690
   png_error_ptr error_fn PNG_DEPSTRUCT;    /* function for printing errors and aborting */
Packit 0ba690
   png_error_ptr warning_fn PNG_DEPSTRUCT;  /* function for printing warnings */
Packit 0ba690
   png_voidp error_ptr PNG_DEPSTRUCT;       /* user supplied struct for error functions */
Packit 0ba690
   png_rw_ptr write_data_fn PNG_DEPSTRUCT;  /* function for writing output data */
Packit 0ba690
   png_rw_ptr read_data_fn PNG_DEPSTRUCT;   /* function for reading input data */
Packit 0ba690
   png_voidp io_ptr PNG_DEPSTRUCT;          /* ptr to application struct for I/O functions */
Packit 0ba690
Packit 0ba690
#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED
Packit 0ba690
   png_user_transform_ptr read_user_transform_fn PNG_DEPSTRUCT; /* user read transform */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED
Packit 0ba690
   png_user_transform_ptr write_user_transform_fn PNG_DEPSTRUCT; /* user write transform */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* These were added in libpng-1.0.2 */
Packit 0ba690
#ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED
Packit 0ba690
#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
Packit 0ba690
    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
Packit 0ba690
   png_voidp user_transform_ptr PNG_DEPSTRUCT; /* user supplied struct for user transform */
Packit 0ba690
   png_byte user_transform_depth PNG_DEPSTRUCT;    /* bit depth of user transformed pixels */
Packit 0ba690
   png_byte user_transform_channels PNG_DEPSTRUCT; /* channels in user transformed pixels */
Packit 0ba690
#endif
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
   png_uint_32 mode PNG_DEPSTRUCT;          /* tells us where we are in the PNG file */
Packit 0ba690
   png_uint_32 flags PNG_DEPSTRUCT;         /* flags indicating various things to libpng */
Packit 0ba690
   png_uint_32 transformations PNG_DEPSTRUCT; /* which transformations to perform */
Packit 0ba690
Packit 0ba690
   z_stream zstream PNG_DEPSTRUCT;          /* pointer to decompression structure (below) */
Packit 0ba690
   png_bytep zbuf PNG_DEPSTRUCT;            /* buffer for zlib */
Packit 0ba690
   png_size_t zbuf_size PNG_DEPSTRUCT;      /* size of zbuf */
Packit 0ba690
   int zlib_level PNG_DEPSTRUCT;            /* holds zlib compression level */
Packit 0ba690
   int zlib_method PNG_DEPSTRUCT;           /* holds zlib compression method */
Packit 0ba690
   int zlib_window_bits PNG_DEPSTRUCT;      /* holds zlib compression window bits */
Packit 0ba690
   int zlib_mem_level PNG_DEPSTRUCT;        /* holds zlib compression memory level */
Packit 0ba690
   int zlib_strategy PNG_DEPSTRUCT;         /* holds zlib compression strategy */
Packit 0ba690
Packit 0ba690
   png_uint_32 width PNG_DEPSTRUCT;         /* width of image in pixels */
Packit 0ba690
   png_uint_32 height PNG_DEPSTRUCT;        /* height of image in pixels */
Packit 0ba690
   png_uint_32 num_rows PNG_DEPSTRUCT;      /* number of rows in current pass */
Packit 0ba690
   png_uint_32 usr_width PNG_DEPSTRUCT;     /* width of row at start of write */
Packit 0ba690
   png_uint_32 rowbytes PNG_DEPSTRUCT;      /* size of row in bytes */
Packit 0ba690
#if 0 /* Replaced with the following in libpng-1.2.43 */
Packit 0ba690
   png_size_t irowbytes PNG_DEPSTRUCT;
Packit 0ba690
#endif
Packit 0ba690
/* Added in libpng-1.2.43 */
Packit 0ba690
#ifdef PNG_USER_LIMITS_SUPPORTED
Packit 0ba690
   /* Added in libpng-1.4.0: Total number of sPLT, text, and unknown
Packit 0ba690
    * chunks that can be stored (0 means unlimited).
Packit 0ba690
    */
Packit 0ba690
   png_uint_32 user_chunk_cache_max PNG_DEPSTRUCT;
Packit 0ba690
#endif
Packit 0ba690
   png_uint_32 iwidth PNG_DEPSTRUCT;        /* width of current interlaced row in pixels */
Packit 0ba690
   png_uint_32 row_number PNG_DEPSTRUCT;    /* current row in interlace pass */
Packit 0ba690
   png_bytep prev_row PNG_DEPSTRUCT;        /* buffer to save previous (unfiltered) row */
Packit 0ba690
   png_bytep row_buf PNG_DEPSTRUCT;         /* buffer to save current (unfiltered) row */
Packit 0ba690
#ifndef PNG_NO_WRITE_FILTER
Packit 0ba690
   png_bytep sub_row PNG_DEPSTRUCT;         /* buffer to save "sub" row when filtering */
Packit 0ba690
   png_bytep up_row PNG_DEPSTRUCT;          /* buffer to save "up" row when filtering */
Packit 0ba690
   png_bytep avg_row PNG_DEPSTRUCT;         /* buffer to save "avg" row when filtering */
Packit 0ba690
   png_bytep paeth_row PNG_DEPSTRUCT;       /* buffer to save "Paeth" row when filtering */
Packit 0ba690
#endif
Packit 0ba690
   png_row_info row_info PNG_DEPSTRUCT;     /* used for transformation routines */
Packit 0ba690
Packit 0ba690
   png_uint_32 idat_size PNG_DEPSTRUCT;     /* current IDAT size for read */
Packit 0ba690
   png_uint_32 crc PNG_DEPSTRUCT;           /* current chunk CRC value */
Packit 0ba690
   png_colorp palette PNG_DEPSTRUCT;        /* palette from the input file */
Packit 0ba690
   png_uint_16 num_palette PNG_DEPSTRUCT;   /* number of color entries in palette */
Packit 0ba690
   png_uint_16 num_trans PNG_DEPSTRUCT;     /* number of transparency values */
Packit 0ba690
   png_byte chunk_name[5] PNG_DEPSTRUCT;    /* null-terminated name of current chunk */
Packit 0ba690
   png_byte compression PNG_DEPSTRUCT;      /* file compression type (always 0) */
Packit 0ba690
   png_byte filter PNG_DEPSTRUCT;           /* file filter type (always 0) */
Packit 0ba690
   png_byte interlaced PNG_DEPSTRUCT;       /* PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
Packit 0ba690
   png_byte pass PNG_DEPSTRUCT;             /* current interlace pass (0 - 6) */
Packit 0ba690
   png_byte do_filter PNG_DEPSTRUCT;        /* row filter flags (see PNG_FILTER_ below ) */
Packit 0ba690
   png_byte color_type PNG_DEPSTRUCT;       /* color type of file */
Packit 0ba690
   png_byte bit_depth PNG_DEPSTRUCT;        /* bit depth of file */
Packit 0ba690
   png_byte usr_bit_depth PNG_DEPSTRUCT;    /* bit depth of users row */
Packit 0ba690
   png_byte pixel_depth PNG_DEPSTRUCT;      /* number of bits per pixel */
Packit 0ba690
   png_byte channels PNG_DEPSTRUCT;         /* number of channels in file */
Packit 0ba690
   png_byte usr_channels PNG_DEPSTRUCT;     /* channels at start of write */
Packit 0ba690
   png_byte sig_bytes PNG_DEPSTRUCT;        /* magic bytes read/written from start of file */
Packit 0ba690
Packit 0ba690
#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
Packit 0ba690
#ifdef PNG_LEGACY_SUPPORTED
Packit 0ba690
   png_byte filler PNG_DEPSTRUCT;           /* filler byte for pixel expansion */
Packit 0ba690
#else
Packit 0ba690
   png_uint_16 filler PNG_DEPSTRUCT;           /* filler bytes for pixel expansion */
Packit 0ba690
#endif
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_bKGD_SUPPORTED
Packit 0ba690
   png_byte background_gamma_type PNG_DEPSTRUCT;
Packit 0ba690
#  ifdef PNG_FLOATING_POINT_SUPPORTED
Packit 0ba690
   float background_gamma PNG_DEPSTRUCT;
Packit 0ba690
#  endif
Packit 0ba690
   png_color_16 background PNG_DEPSTRUCT;   /* background color in screen gamma space */
Packit 0ba690
#ifdef PNG_READ_GAMMA_SUPPORTED
Packit 0ba690
   png_color_16 background_1 PNG_DEPSTRUCT; /* background normalized to gamma 1.0 */
Packit 0ba690
#endif
Packit 0ba690
#endif /* PNG_bKGD_SUPPORTED */
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_FLUSH_SUPPORTED
Packit 0ba690
   png_flush_ptr output_flush_fn PNG_DEPSTRUCT; /* Function for flushing output */
Packit 0ba690
   png_uint_32 flush_dist PNG_DEPSTRUCT;    /* how many rows apart to flush, 0 - no flush */
Packit 0ba690
   png_uint_32 flush_rows PNG_DEPSTRUCT;    /* number of rows written since last flush */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
Packit 0ba690
   int gamma_shift PNG_DEPSTRUCT;      /* number of "insignificant" bits 16-bit gamma */
Packit 0ba690
#ifdef PNG_FLOATING_POINT_SUPPORTED
Packit 0ba690
   float gamma PNG_DEPSTRUCT;          /* file gamma value */
Packit 0ba690
   float screen_gamma PNG_DEPSTRUCT;   /* screen gamma value (display_exponent) */
Packit 0ba690
#endif
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
Packit 0ba690
   png_bytep gamma_table PNG_DEPSTRUCT;     /* gamma table for 8-bit depth files */
Packit 0ba690
   png_bytep gamma_from_1 PNG_DEPSTRUCT;    /* converts from 1.0 to screen */
Packit 0ba690
   png_bytep gamma_to_1 PNG_DEPSTRUCT;      /* converts from file to 1.0 */
Packit 0ba690
   png_uint_16pp gamma_16_table PNG_DEPSTRUCT; /* gamma table for 16-bit depth files */
Packit 0ba690
   png_uint_16pp gamma_16_from_1 PNG_DEPSTRUCT; /* converts from 1.0 to screen */
Packit 0ba690
   png_uint_16pp gamma_16_to_1 PNG_DEPSTRUCT; /* converts from file to 1.0 */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_sBIT_SUPPORTED)
Packit 0ba690
   png_color_8 sig_bit PNG_DEPSTRUCT;       /* significant bits in each available channel */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
Packit 0ba690
   png_color_8 shift PNG_DEPSTRUCT;         /* shift for significant bit tranformation */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) \
Packit 0ba690
 || defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
Packit 0ba690
   png_bytep trans PNG_DEPSTRUCT;           /* transparency values for paletted files */
Packit 0ba690
   png_color_16 trans_values PNG_DEPSTRUCT; /* transparency values for non-paletted files */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
   png_read_status_ptr read_row_fn PNG_DEPSTRUCT;   /* called after each row is decoded */
Packit 0ba690
   png_write_status_ptr write_row_fn PNG_DEPSTRUCT; /* called after each row is encoded */
Packit 0ba690
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
Packit 0ba690
   png_progressive_info_ptr info_fn PNG_DEPSTRUCT; /* called after header data fully read */
Packit 0ba690
   png_progressive_row_ptr row_fn PNG_DEPSTRUCT;   /* called after each prog. row is decoded */
Packit 0ba690
   png_progressive_end_ptr end_fn PNG_DEPSTRUCT;   /* called after image is complete */
Packit 0ba690
   png_bytep save_buffer_ptr PNG_DEPSTRUCT;        /* current location in save_buffer */
Packit 0ba690
   png_bytep save_buffer PNG_DEPSTRUCT;            /* buffer for previously read data */
Packit 0ba690
   png_bytep current_buffer_ptr PNG_DEPSTRUCT;     /* current location in current_buffer */
Packit 0ba690
   png_bytep current_buffer PNG_DEPSTRUCT;         /* buffer for recently used data */
Packit 0ba690
   png_uint_32 push_length PNG_DEPSTRUCT;          /* size of current input chunk */
Packit 0ba690
   png_uint_32 skip_length PNG_DEPSTRUCT;          /* bytes to skip in input data */
Packit 0ba690
   png_size_t save_buffer_size PNG_DEPSTRUCT;      /* amount of data now in save_buffer */
Packit 0ba690
   png_size_t save_buffer_max PNG_DEPSTRUCT;       /* total size of save_buffer */
Packit 0ba690
   png_size_t buffer_size PNG_DEPSTRUCT;           /* total amount of available input data */
Packit 0ba690
   png_size_t current_buffer_size PNG_DEPSTRUCT;   /* amount of data now in current_buffer */
Packit 0ba690
   int process_mode PNG_DEPSTRUCT;                 /* what push library is currently doing */
Packit 0ba690
   int cur_palette PNG_DEPSTRUCT;                  /* current push library palette index */
Packit 0ba690
Packit 0ba690
#  ifdef PNG_TEXT_SUPPORTED
Packit 0ba690
     png_size_t current_text_size PNG_DEPSTRUCT;   /* current size of text input data */
Packit 0ba690
     png_size_t current_text_left PNG_DEPSTRUCT;   /* how much text left to read in input */
Packit 0ba690
     png_charp current_text PNG_DEPSTRUCT;         /* current text chunk buffer */
Packit 0ba690
     png_charp current_text_ptr PNG_DEPSTRUCT;     /* current location in current_text */
Packit 0ba690
#  endif /* PNG_TEXT_SUPPORTED */
Packit 0ba690
#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
Packit 0ba690
Packit 0ba690
#if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__)
Packit 0ba690
/* for the Borland special 64K segment handler */
Packit 0ba690
   png_bytepp offset_table_ptr PNG_DEPSTRUCT;
Packit 0ba690
   png_bytep offset_table PNG_DEPSTRUCT;
Packit 0ba690
   png_uint_16 offset_table_number PNG_DEPSTRUCT;
Packit 0ba690
   png_uint_16 offset_table_count PNG_DEPSTRUCT;
Packit 0ba690
   png_uint_16 offset_table_count_free PNG_DEPSTRUCT;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_READ_DITHER_SUPPORTED
Packit 0ba690
   png_bytep palette_lookup PNG_DEPSTRUCT;         /* lookup table for dithering */
Packit 0ba690
   png_bytep dither_index PNG_DEPSTRUCT;           /* index translation for palette files */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_READ_DITHER_SUPPORTED) || defined(PNG_hIST_SUPPORTED)
Packit 0ba690
   png_uint_16p hist PNG_DEPSTRUCT;                /* histogram */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_TIME_RFC1123_SUPPORTED
Packit 0ba690
   png_charp time_buffer PNG_DEPSTRUCT;            /* String to hold RFC 1123 time text */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* New members added in libpng-1.0.6 */
Packit 0ba690
Packit 0ba690
#ifdef PNG_FREE_ME_SUPPORTED
Packit 0ba690
   png_uint_32 free_me PNG_DEPSTRUCT;   /* flags items libpng is responsible for freeing */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_USER_CHUNKS_SUPPORTED
Packit 0ba690
   png_voidp user_chunk_ptr PNG_DEPSTRUCT;
Packit 0ba690
   png_user_chunk_ptr read_user_chunk_fn PNG_DEPSTRUCT; /* user read chunk handler */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
Packit 0ba690
   int num_chunk_list PNG_DEPSTRUCT;
Packit 0ba690
   png_bytep chunk_list PNG_DEPSTRUCT;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* New members added in libpng-1.0.3 */
Packit 0ba690
#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
Packit 0ba690
   png_byte rgb_to_gray_status PNG_DEPSTRUCT;
Packit 0ba690
   /* These were changed from png_byte in libpng-1.0.6 */
Packit 0ba690
   png_uint_16 rgb_to_gray_red_coeff PNG_DEPSTRUCT;
Packit 0ba690
   png_uint_16 rgb_to_gray_green_coeff PNG_DEPSTRUCT;
Packit 0ba690
   png_uint_16 rgb_to_gray_blue_coeff PNG_DEPSTRUCT;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* New member added in libpng-1.0.4 (renamed in 1.0.9) */
Packit 0ba690
#if defined(PNG_MNG_FEATURES_SUPPORTED) || \
Packit 0ba690
    defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \
Packit 0ba690
    defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED)
Packit 0ba690
/* Changed from png_byte to png_uint_32 at version 1.2.0 */
Packit 0ba690
#ifdef PNG_1_0_X
Packit 0ba690
   png_byte mng_features_permitted PNG_DEPSTRUCT;
Packit 0ba690
#else
Packit 0ba690
   png_uint_32 mng_features_permitted PNG_DEPSTRUCT;
Packit 0ba690
#endif /* PNG_1_0_X */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* New member added in libpng-1.0.7 */
Packit 0ba690
#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
Packit 0ba690
   png_fixed_point int_gamma PNG_DEPSTRUCT;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* New member added in libpng-1.0.9, ifdef'ed out in 1.0.12, enabled in 1.2.0 */
Packit 0ba690
#ifdef PNG_MNG_FEATURES_SUPPORTED
Packit 0ba690
   png_byte filter_type PNG_DEPSTRUCT;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_1_0_X
Packit 0ba690
/* New member added in libpng-1.0.10, ifdef'ed out in 1.2.0 */
Packit 0ba690
   png_uint_32 row_buf_size PNG_DEPSTRUCT;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* New members added in libpng-1.2.0 */
Packit 0ba690
#ifdef PNG_ASSEMBLER_CODE_SUPPORTED
Packit 0ba690
#  ifndef PNG_1_0_X
Packit 0ba690
#    ifdef PNG_MMX_CODE_SUPPORTED
Packit 0ba690
   png_byte     mmx_bitdepth_threshold PNG_DEPSTRUCT;
Packit 0ba690
   png_uint_32  mmx_rowbytes_threshold PNG_DEPSTRUCT;
Packit 0ba690
#    endif
Packit 0ba690
   png_uint_32  asm_flags PNG_DEPSTRUCT;
Packit 0ba690
#  endif
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* New members added in libpng-1.0.2 but first enabled by default in 1.2.0 */
Packit 0ba690
#ifdef PNG_USER_MEM_SUPPORTED
Packit 0ba690
   png_voidp mem_ptr PNG_DEPSTRUCT;            /* user supplied struct for mem functions */
Packit 0ba690
   png_malloc_ptr malloc_fn PNG_DEPSTRUCT;     /* function for allocating memory */
Packit 0ba690
   png_free_ptr free_fn PNG_DEPSTRUCT;         /* function for freeing memory */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* New member added in libpng-1.0.13 and 1.2.0 */
Packit 0ba690
   png_bytep big_row_buf PNG_DEPSTRUCT;        /* buffer to save current (unfiltered) row */
Packit 0ba690
Packit 0ba690
#ifdef PNG_READ_DITHER_SUPPORTED
Packit 0ba690
/* The following three members were added at version 1.0.14 and 1.2.4 */
Packit 0ba690
   png_bytep dither_sort PNG_DEPSTRUCT;        /* working sort array */
Packit 0ba690
   png_bytep index_to_palette PNG_DEPSTRUCT;   /* where the original index currently is */
Packit 0ba690
                                 /* in the palette */
Packit 0ba690
   png_bytep palette_to_index PNG_DEPSTRUCT;   /* which original index points to this */
Packit 0ba690
                                 /* palette color */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* New members added in libpng-1.0.16 and 1.2.6 */
Packit 0ba690
   png_byte compression_type PNG_DEPSTRUCT;
Packit 0ba690
Packit 0ba690
#ifdef PNG_USER_LIMITS_SUPPORTED
Packit 0ba690
   png_uint_32 user_width_max PNG_DEPSTRUCT;
Packit 0ba690
   png_uint_32 user_height_max PNG_DEPSTRUCT;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* New member added in libpng-1.0.25 and 1.2.17 */
Packit 0ba690
#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED
Packit 0ba690
   /* Storage for unknown chunk that the library doesn't recognize. */
Packit 0ba690
   png_unknown_chunk unknown_chunk PNG_DEPSTRUCT;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* New members added in libpng-1.2.26 */
Packit 0ba690
  png_uint_32 old_big_row_buf_size PNG_DEPSTRUCT;
Packit 0ba690
  png_uint_32 old_prev_row_size PNG_DEPSTRUCT;
Packit 0ba690
Packit 0ba690
/* New member added in libpng-1.2.30 */
Packit 0ba690
  png_charp chunkdata PNG_DEPSTRUCT;  /* buffer for reading chunk data */
Packit 0ba690
Packit 0ba690
Packit 0ba690
};
Packit 0ba690
Packit 0ba690
Packit 0ba690
/* This triggers a compiler error in png.c, if png.c and png.h
Packit 0ba690
 * do not agree upon the version number.
Packit 0ba690
 */
Packit 0ba690
typedef png_structp version_1_2_57;
Packit 0ba690
Packit 0ba690
typedef png_struct FAR * FAR * png_structpp;
Packit 0ba690
Packit 0ba690
/* Here are the function definitions most commonly used.  This is not
Packit 0ba690
 * the place to find out how to use libpng.  See libpng.txt for the
Packit 0ba690
 * full explanation, see example.c for the summary.  This just provides
Packit 0ba690
 * a simple one line description of the use of each function.
Packit 0ba690
 */
Packit 0ba690
Packit 0ba690
/* Returns the version number of the library */
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_access_version_number) PNGARG((void));
Packit 0ba690
Packit 0ba690
/* Tell lib we have already handled the first <num_bytes> magic bytes.
Packit 0ba690
 * Handling more than 8 bytes from the beginning of the file is an error.
Packit 0ba690
 */
Packit 0ba690
extern PNG_EXPORT(void,png_set_sig_bytes) PNGARG((png_structp png_ptr,
Packit 0ba690
   int num_bytes));
Packit 0ba690
Packit 0ba690
/* Check sig[start] through sig[start + num_to_check - 1] to see if it's a
Packit 0ba690
 * PNG file.  Returns zero if the supplied bytes match the 8-byte PNG
Packit 0ba690
 * signature, and non-zero otherwise.  Having num_to_check == 0 or
Packit 0ba690
 * start > 7 will always fail (ie return non-zero).
Packit 0ba690
 */
Packit 0ba690
extern PNG_EXPORT(int,png_sig_cmp) PNGARG((png_bytep sig, png_size_t start,
Packit 0ba690
   png_size_t num_to_check));
Packit 0ba690
Packit 0ba690
/* Simple signature checking function.  This is the same as calling
Packit 0ba690
 * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n).
Packit 0ba690
 */
Packit 0ba690
extern PNG_EXPORT(int,png_check_sig) PNGARG((png_bytep sig, int num)) PNG_DEPRECATED;
Packit 0ba690
Packit 0ba690
/* Allocate and initialize png_ptr struct for reading, and any other memory. */
Packit 0ba690
extern PNG_EXPORT(png_structp,png_create_read_struct)
Packit 0ba690
   PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
Packit 0ba690
   png_error_ptr error_fn, png_error_ptr warn_fn)) PNG_ALLOCATED;
Packit 0ba690
Packit 0ba690
/* Allocate and initialize png_ptr struct for writing, and any other memory */
Packit 0ba690
extern PNG_EXPORT(png_structp,png_create_write_struct)
Packit 0ba690
   PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
Packit 0ba690
   png_error_ptr error_fn, png_error_ptr warn_fn)) PNG_ALLOCATED;
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_compression_buffer_size)
Packit 0ba690
   PNGARG((png_structp png_ptr));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void,png_set_compression_buffer_size)
Packit 0ba690
   PNGARG((png_structp png_ptr, png_uint_32 size));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* Reset the compression stream */
Packit 0ba690
extern PNG_EXPORT(int,png_reset_zstream) PNGARG((png_structp png_ptr));
Packit 0ba690
Packit 0ba690
/* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */
Packit 0ba690
#ifdef PNG_USER_MEM_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(png_structp,png_create_read_struct_2)
Packit 0ba690
   PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
Packit 0ba690
   png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr,
Packit 0ba690
   png_malloc_ptr malloc_fn, png_free_ptr free_fn)) PNG_ALLOCATED;
Packit 0ba690
extern PNG_EXPORT(png_structp,png_create_write_struct_2)
Packit 0ba690
   PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
Packit 0ba690
   png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr,
Packit 0ba690
   png_malloc_ptr malloc_fn, png_free_ptr free_fn)) PNG_ALLOCATED;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* Write a PNG chunk - size, type, (optional) data, CRC. */
Packit 0ba690
extern PNG_EXPORT(void,png_write_chunk) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_bytep chunk_name, png_bytep data, png_size_t length));
Packit 0ba690
Packit 0ba690
/* Write the start of a PNG chunk - length and chunk name. */
Packit 0ba690
extern PNG_EXPORT(void,png_write_chunk_start) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_bytep chunk_name, png_uint_32 length));
Packit 0ba690
Packit 0ba690
/* Write the data of a PNG chunk started with png_write_chunk_start(). */
Packit 0ba690
extern PNG_EXPORT(void,png_write_chunk_data) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_bytep data, png_size_t length));
Packit 0ba690
Packit 0ba690
/* Finish a chunk started with png_write_chunk_start() (includes CRC). */
Packit 0ba690
extern PNG_EXPORT(void,png_write_chunk_end) PNGARG((png_structp png_ptr));
Packit 0ba690
Packit 0ba690
/* Allocate and initialize the info structure */
Packit 0ba690
extern PNG_EXPORT(png_infop,png_create_info_struct)
Packit 0ba690
   PNGARG((png_structp png_ptr)) PNG_ALLOCATED;
Packit 0ba690
Packit 0ba690
#if defined(PNG_1_0_X) || defined (PNG_1_2_X)
Packit 0ba690
/* Initialize the info structure (old interface - DEPRECATED) */
Packit 0ba690
extern PNG_EXPORT(void,png_info_init) PNGARG((png_infop info_ptr))
Packit 0ba690
    PNG_DEPRECATED;
Packit 0ba690
#undef png_info_init
Packit 0ba690
#define png_info_init(info_ptr) png_info_init_3(&info_ptr,\
Packit 0ba690
    png_sizeof(png_info));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
extern PNG_EXPORT(void,png_info_init_3) PNGARG((png_infopp info_ptr,
Packit 0ba690
    png_size_t png_info_struct_size));
Packit 0ba690
Packit 0ba690
/* Writes all the PNG information before the image. */
Packit 0ba690
extern PNG_EXPORT(void,png_write_info_before_PLTE) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr));
Packit 0ba690
extern PNG_EXPORT(void,png_write_info) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr));
Packit 0ba690
Packit 0ba690
#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
Packit 0ba690
/* Read the information before the actual image data. */
Packit 0ba690
extern PNG_EXPORT(void,png_read_info) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_TIME_RFC1123_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(png_charp,png_convert_to_rfc1123)
Packit 0ba690
   PNGARG((png_structp png_ptr, png_timep ptime));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_CONVERT_tIME_SUPPORTED
Packit 0ba690
/* Convert from a struct tm to png_time */
Packit 0ba690
extern PNG_EXPORT(void,png_convert_from_struct_tm) PNGARG((png_timep ptime,
Packit 0ba690
   struct tm FAR * ttime));
Packit 0ba690
Packit 0ba690
/* Convert from time_t to png_time.  Uses gmtime() */
Packit 0ba690
extern PNG_EXPORT(void,png_convert_from_time_t) PNGARG((png_timep ptime,
Packit 0ba690
   time_t ttime));
Packit 0ba690
#endif /* PNG_CONVERT_tIME_SUPPORTED */
Packit 0ba690
Packit 0ba690
#ifdef PNG_READ_EXPAND_SUPPORTED
Packit 0ba690
/* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */
Packit 0ba690
extern PNG_EXPORT(void,png_set_expand) PNGARG((png_structp png_ptr));
Packit 0ba690
#ifndef PNG_1_0_X
Packit 0ba690
extern PNG_EXPORT(void,png_set_expand_gray_1_2_4_to_8) PNGARG((png_structp
Packit 0ba690
  png_ptr));
Packit 0ba690
#endif
Packit 0ba690
extern PNG_EXPORT(void,png_set_palette_to_rgb) PNGARG((png_structp png_ptr));
Packit 0ba690
extern PNG_EXPORT(void,png_set_tRNS_to_alpha) PNGARG((png_structp png_ptr));
Packit 0ba690
#if defined(PNG_1_0_X) || defined (PNG_1_2_X)
Packit 0ba690
/* Deprecated */
Packit 0ba690
extern PNG_EXPORT(void,png_set_gray_1_2_4_to_8) PNGARG((png_structp
Packit 0ba690
    png_ptr)) PNG_DEPRECATED;
Packit 0ba690
#endif
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
Packit 0ba690
/* Use blue, green, red order for pixels. */
Packit 0ba690
extern PNG_EXPORT(void,png_set_bgr) PNGARG((png_structp png_ptr));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
Packit 0ba690
/* Expand the grayscale to 24-bit RGB if necessary. */
Packit 0ba690
extern PNG_EXPORT(void,png_set_gray_to_rgb) PNGARG((png_structp png_ptr));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
Packit 0ba690
/* Reduce RGB to grayscale. */
Packit 0ba690
#ifdef PNG_FLOATING_POINT_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void,png_set_rgb_to_gray) PNGARG((png_structp png_ptr,
Packit 0ba690
   int error_action, double red, double green ));
Packit 0ba690
#endif
Packit 0ba690
extern PNG_EXPORT(void,png_set_rgb_to_gray_fixed) PNGARG((png_structp png_ptr,
Packit 0ba690
   int error_action, png_fixed_point red, png_fixed_point green ));
Packit 0ba690
extern PNG_EXPORT(png_byte,png_get_rgb_to_gray_status) PNGARG((png_structp
Packit 0ba690
   png_ptr));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
extern PNG_EXPORT(void,png_build_grayscale_palette) PNGARG((int bit_depth,
Packit 0ba690
   png_colorp palette));
Packit 0ba690
Packit 0ba690
#ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void,png_set_strip_alpha) PNGARG((png_structp png_ptr));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \
Packit 0ba690
    defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)
Packit 0ba690
extern PNG_EXPORT(void,png_set_swap_alpha) PNGARG((png_structp png_ptr));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \
Packit 0ba690
    defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
Packit 0ba690
extern PNG_EXPORT(void,png_set_invert_alpha) PNGARG((png_structp png_ptr));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
Packit 0ba690
/* Add a filler byte to 8-bit Gray or 24-bit RGB images. */
Packit 0ba690
extern PNG_EXPORT(void,png_set_filler) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_uint_32 filler, int flags));
Packit 0ba690
/* The values of the PNG_FILLER_ defines should NOT be changed */
Packit 0ba690
#define PNG_FILLER_BEFORE 0
Packit 0ba690
#define PNG_FILLER_AFTER 1
Packit 0ba690
/* Add an alpha byte to 8-bit Gray or 24-bit RGB images. */
Packit 0ba690
#ifndef PNG_1_0_X
Packit 0ba690
extern PNG_EXPORT(void,png_set_add_alpha) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_uint_32 filler, int flags));
Packit 0ba690
#endif
Packit 0ba690
#endif /* PNG_READ_FILLER_SUPPORTED || PNG_WRITE_FILLER_SUPPORTED */
Packit 0ba690
Packit 0ba690
#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
Packit 0ba690
/* Swap bytes in 16-bit depth files. */
Packit 0ba690
extern PNG_EXPORT(void,png_set_swap) PNGARG((png_structp png_ptr));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
Packit 0ba690
/* Use 1 byte per pixel in 1, 2, or 4-bit depth files. */
Packit 0ba690
extern PNG_EXPORT(void,png_set_packing) PNGARG((png_structp png_ptr));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_READ_PACKSWAP_SUPPORTED) || defined(PNG_WRITE_PACKSWAP_SUPPORTED)
Packit 0ba690
/* Swap packing order of pixels in bytes. */
Packit 0ba690
extern PNG_EXPORT(void,png_set_packswap) PNGARG((png_structp png_ptr));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
Packit 0ba690
/* Converts files to legal bit depths. */
Packit 0ba690
extern PNG_EXPORT(void,png_set_shift) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_color_8p true_bits));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_READ_INTERLACING_SUPPORTED) || \
Packit 0ba690
    defined(PNG_WRITE_INTERLACING_SUPPORTED)
Packit 0ba690
/* Have the code handle the interlacing.  Returns the number of passes. */
Packit 0ba690
extern PNG_EXPORT(int,png_set_interlace_handling) PNGARG((png_structp png_ptr));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED)
Packit 0ba690
/* Invert monochrome files */
Packit 0ba690
extern PNG_EXPORT(void,png_set_invert_mono) PNGARG((png_structp png_ptr));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_READ_BACKGROUND_SUPPORTED
Packit 0ba690
/* Handle alpha and tRNS by replacing with a background color. */
Packit 0ba690
#ifdef PNG_FLOATING_POINT_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void,png_set_background) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_color_16p background_color, int background_gamma_code,
Packit 0ba690
   int need_expand, double background_gamma));
Packit 0ba690
#endif
Packit 0ba690
#define PNG_BACKGROUND_GAMMA_UNKNOWN 0
Packit 0ba690
#define PNG_BACKGROUND_GAMMA_SCREEN  1
Packit 0ba690
#define PNG_BACKGROUND_GAMMA_FILE    2
Packit 0ba690
#define PNG_BACKGROUND_GAMMA_UNIQUE  3
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_READ_16_TO_8_SUPPORTED
Packit 0ba690
/* Strip the second byte of information from a 16-bit depth file. */
Packit 0ba690
extern PNG_EXPORT(void,png_set_strip_16) PNGARG((png_structp png_ptr));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_READ_DITHER_SUPPORTED
Packit 0ba690
/* Turn on dithering, and reduce the palette to the number of colors available. */
Packit 0ba690
extern PNG_EXPORT(void,png_set_dither) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_colorp palette, int num_palette, int maximum_colors,
Packit 0ba690
   png_uint_16p histogram, int full_dither));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_READ_GAMMA_SUPPORTED
Packit 0ba690
/* Handle gamma correction. Screen_gamma=(display_exponent) */
Packit 0ba690
#ifdef PNG_FLOATING_POINT_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void,png_set_gamma) PNGARG((png_structp png_ptr,
Packit 0ba690
   double screen_gamma, double default_file_gamma));
Packit 0ba690
#endif
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_1_0_X) || defined (PNG_1_2_X)
Packit 0ba690
#if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \
Packit 0ba690
    defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED)
Packit 0ba690
/* Permit or disallow empty PLTE (0: not permitted, 1: permitted) */
Packit 0ba690
/* Deprecated and will be removed.  Use png_permit_mng_features() instead. */
Packit 0ba690
extern PNG_EXPORT(void,png_permit_empty_plte) PNGARG((png_structp png_ptr,
Packit 0ba690
   int empty_plte_permitted)) PNG_DEPRECATED;
Packit 0ba690
#endif
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_FLUSH_SUPPORTED
Packit 0ba690
/* Set how many lines between output flushes - 0 for no flushing */
Packit 0ba690
extern PNG_EXPORT(void,png_set_flush) PNGARG((png_structp png_ptr, int nrows));
Packit 0ba690
/* Flush the current PNG output buffer */
Packit 0ba690
extern PNG_EXPORT(void,png_write_flush) PNGARG((png_structp png_ptr));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* Optional update palette with requested transformations */
Packit 0ba690
extern PNG_EXPORT(void,png_start_read_image) PNGARG((png_structp png_ptr));
Packit 0ba690
Packit 0ba690
/* Optional call to update the users info structure */
Packit 0ba690
extern PNG_EXPORT(void,png_read_update_info) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr));
Packit 0ba690
Packit 0ba690
#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
Packit 0ba690
/* Read one or more rows of image data. */
Packit 0ba690
extern PNG_EXPORT(void,png_read_rows) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_bytepp row, png_bytepp display_row, png_uint_32 num_rows));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
Packit 0ba690
/* Read a row of data. */
Packit 0ba690
extern PNG_EXPORT(void,png_read_row) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_bytep row,
Packit 0ba690
   png_bytep display_row));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
Packit 0ba690
/* Read the whole image into memory at once. */
Packit 0ba690
extern PNG_EXPORT(void,png_read_image) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_bytepp image));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* Write a row of image data */
Packit 0ba690
extern PNG_EXPORT(void,png_write_row) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_bytep row));
Packit 0ba690
Packit 0ba690
/* Write a few rows of image data */
Packit 0ba690
extern PNG_EXPORT(void,png_write_rows) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_bytepp row, png_uint_32 num_rows));
Packit 0ba690
Packit 0ba690
/* Write the image data */
Packit 0ba690
extern PNG_EXPORT(void,png_write_image) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_bytepp image));
Packit 0ba690
Packit 0ba690
/* Writes the end of the PNG file. */
Packit 0ba690
extern PNG_EXPORT(void,png_write_end) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr));
Packit 0ba690
Packit 0ba690
#ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
Packit 0ba690
/* Read the end of the PNG file. */
Packit 0ba690
extern PNG_EXPORT(void,png_read_end) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* Free any memory associated with the png_info_struct */
Packit 0ba690
extern PNG_EXPORT(void,png_destroy_info_struct) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infopp info_ptr_ptr));
Packit 0ba690
Packit 0ba690
/* Free any memory associated with the png_struct and the png_info_structs */
Packit 0ba690
extern PNG_EXPORT(void,png_destroy_read_struct) PNGARG((png_structpp
Packit 0ba690
   png_ptr_ptr, png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr));
Packit 0ba690
Packit 0ba690
/* Free all memory used by the read (old method - NOT DLL EXPORTED) */
Packit 0ba690
extern void png_read_destroy PNGARG((png_structp png_ptr, png_infop info_ptr,
Packit 0ba690
   png_infop end_info_ptr)) PNG_DEPRECATED;
Packit 0ba690
Packit 0ba690
/* Free any memory associated with the png_struct and the png_info_structs */
Packit 0ba690
extern PNG_EXPORT(void,png_destroy_write_struct)
Packit 0ba690
   PNGARG((png_structpp png_ptr_ptr, png_infopp info_ptr_ptr));
Packit 0ba690
Packit 0ba690
/* Free any memory used in png_ptr struct (old method - NOT DLL EXPORTED) */
Packit 0ba690
extern void png_write_destroy PNGARG((png_structp png_ptr)) PNG_DEPRECATED;
Packit 0ba690
Packit 0ba690
/* Set the libpng method of handling chunk CRC errors */
Packit 0ba690
extern PNG_EXPORT(void,png_set_crc_action) PNGARG((png_structp png_ptr,
Packit 0ba690
   int crit_action, int ancil_action));
Packit 0ba690
Packit 0ba690
/* Values for png_set_crc_action() to say how to handle CRC errors in
Packit 0ba690
 * ancillary and critical chunks, and whether to use the data contained
Packit 0ba690
 * therein.  Note that it is impossible to "discard" data in a critical
Packit 0ba690
 * chunk.  For versions prior to 0.90, the action was always error/quit,
Packit 0ba690
 * whereas in version 0.90 and later, the action for CRC errors in ancillary
Packit 0ba690
 * chunks is warn/discard.  These values should NOT be changed.
Packit 0ba690
 *
Packit 0ba690
 *      value                       action:critical     action:ancillary
Packit 0ba690
 */
Packit 0ba690
#define PNG_CRC_DEFAULT       0  /* error/quit          warn/discard data */
Packit 0ba690
#define PNG_CRC_ERROR_QUIT    1  /* error/quit          error/quit        */
Packit 0ba690
#define PNG_CRC_WARN_DISCARD  2  /* (INVALID)           warn/discard data */
Packit 0ba690
#define PNG_CRC_WARN_USE      3  /* warn/use data       warn/use data     */
Packit 0ba690
#define PNG_CRC_QUIET_USE     4  /* quiet/use data      quiet/use data    */
Packit 0ba690
#define PNG_CRC_NO_CHANGE     5  /* use current value   use current value */
Packit 0ba690
Packit 0ba690
/* These functions give the user control over the scan-line filtering in
Packit 0ba690
 * libpng and the compression methods used by zlib.  These functions are
Packit 0ba690
 * mainly useful for testing, as the defaults should work with most users.
Packit 0ba690
 * Those users who are tight on memory or want faster performance at the
Packit 0ba690
 * expense of compression can modify them.  See the compression library
Packit 0ba690
 * header file (zlib.h) for an explination of the compression functions.
Packit 0ba690
 */
Packit 0ba690
Packit 0ba690
/* Set the filtering method(s) used by libpng.  Currently, the only valid
Packit 0ba690
 * value for "method" is 0.
Packit 0ba690
 */
Packit 0ba690
extern PNG_EXPORT(void,png_set_filter) PNGARG((png_structp png_ptr, int method,
Packit 0ba690
   int filters));
Packit 0ba690
Packit 0ba690
/* Flags for png_set_filter() to say which filters to use.  The flags
Packit 0ba690
 * are chosen so that they don't conflict with real filter types
Packit 0ba690
 * below, in case they are supplied instead of the #defined constants.
Packit 0ba690
 * These values should NOT be changed.
Packit 0ba690
 */
Packit 0ba690
#define PNG_NO_FILTERS     0x00
Packit 0ba690
#define PNG_FILTER_NONE    0x08
Packit 0ba690
#define PNG_FILTER_SUB     0x10
Packit 0ba690
#define PNG_FILTER_UP      0x20
Packit 0ba690
#define PNG_FILTER_AVG     0x40
Packit 0ba690
#define PNG_FILTER_PAETH   0x80
Packit 0ba690
#define PNG_ALL_FILTERS (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP | \
Packit 0ba690
                         PNG_FILTER_AVG | PNG_FILTER_PAETH)
Packit 0ba690
Packit 0ba690
/* Filter values (not flags) - used in pngwrite.c, pngwutil.c for now.
Packit 0ba690
 * These defines should NOT be changed.
Packit 0ba690
 */
Packit 0ba690
#define PNG_FILTER_VALUE_NONE  0
Packit 0ba690
#define PNG_FILTER_VALUE_SUB   1
Packit 0ba690
#define PNG_FILTER_VALUE_UP    2
Packit 0ba690
#define PNG_FILTER_VALUE_AVG   3
Packit 0ba690
#define PNG_FILTER_VALUE_PAETH 4
Packit 0ba690
#define PNG_FILTER_VALUE_LAST  5
Packit 0ba690
Packit 0ba690
#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) /* DEPRECATED */
Packit 0ba690
#ifdef PNG_FLOATING_POINT_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void,png_set_filter_heuristics) PNGARG((png_structp png_ptr,
Packit 0ba690
   int heuristic_method, int num_weights, png_doublep filter_weights,
Packit 0ba690
   png_doublep filter_costs));
Packit 0ba690
#endif
Packit 0ba690
#endif /*  PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */
Packit 0ba690
Packit 0ba690
/* The following are no longer used and will be removed from libpng-1.7: */
Packit 0ba690
#define PNG_FILTER_HEURISTIC_DEFAULT    0  /* Currently "UNWEIGHTED" */
Packit 0ba690
#define PNG_FILTER_HEURISTIC_UNWEIGHTED 1  /* Used by libpng < 0.95 */
Packit 0ba690
#define PNG_FILTER_HEURISTIC_WEIGHTED   2  /* Experimental feature */
Packit 0ba690
#define PNG_FILTER_HEURISTIC_LAST       3  /* Not a valid value */
Packit 0ba690
Packit 0ba690
/* Set the library compression level.  Currently, valid values range from
Packit 0ba690
 * 0 - 9, corresponding directly to the zlib compression levels 0 - 9
Packit 0ba690
 * (0 - no compression, 9 - "maximal" compression).  Note that tests have
Packit 0ba690
 * shown that zlib compression levels 3-6 usually perform as well as level 9
Packit 0ba690
 * for PNG images, and do considerably fewer caclulations.  In the future,
Packit 0ba690
 * these values may not correspond directly to the zlib compression levels.
Packit 0ba690
 */
Packit 0ba690
extern PNG_EXPORT(void,png_set_compression_level) PNGARG((png_structp png_ptr,
Packit 0ba690
   int level));
Packit 0ba690
Packit 0ba690
extern PNG_EXPORT(void,png_set_compression_mem_level)
Packit 0ba690
   PNGARG((png_structp png_ptr, int mem_level));
Packit 0ba690
Packit 0ba690
extern PNG_EXPORT(void,png_set_compression_strategy)
Packit 0ba690
   PNGARG((png_structp png_ptr, int strategy));
Packit 0ba690
Packit 0ba690
extern PNG_EXPORT(void,png_set_compression_window_bits)
Packit 0ba690
   PNGARG((png_structp png_ptr, int window_bits));
Packit 0ba690
Packit 0ba690
extern PNG_EXPORT(void,png_set_compression_method) PNGARG((png_structp png_ptr,
Packit 0ba690
   int method));
Packit 0ba690
Packit 0ba690
/* These next functions are called for input/output, memory, and error
Packit 0ba690
 * handling.  They are in the file pngrio.c, pngwio.c, and pngerror.c,
Packit 0ba690
 * and call standard C I/O routines such as fread(), fwrite(), and
Packit 0ba690
 * fprintf().  These functions can be made to use other I/O routines
Packit 0ba690
 * at run time for those applications that need to handle I/O in a
Packit 0ba690
 * different manner by calling png_set_???_fn().  See libpng.txt for
Packit 0ba690
 * more information.
Packit 0ba690
 */
Packit 0ba690
Packit 0ba690
#ifdef PNG_STDIO_SUPPORTED
Packit 0ba690
/* Initialize the input/output for the PNG file to the default functions. */
Packit 0ba690
extern PNG_EXPORT(void,png_init_io) PNGARG((png_structp png_ptr, png_FILE_p fp));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* Replace the (error and abort), and warning functions with user
Packit 0ba690
 * supplied functions.  If no messages are to be printed you must still
Packit 0ba690
 * write and use replacement functions. The replacement error_fn should
Packit 0ba690
 * still do a longjmp to the last setjmp location if you are using this
Packit 0ba690
 * method of error handling.  If error_fn or warning_fn is NULL, the
Packit 0ba690
 * default function will be used.
Packit 0ba690
 */
Packit 0ba690
Packit 0ba690
extern PNG_EXPORT(void,png_set_error_fn) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_voidp error_ptr, png_error_ptr error_fn, png_error_ptr warning_fn));
Packit 0ba690
Packit 0ba690
/* Return the user pointer associated with the error functions */
Packit 0ba690
extern PNG_EXPORT(png_voidp,png_get_error_ptr) PNGARG((png_structp png_ptr));
Packit 0ba690
Packit 0ba690
/* Replace the default data output functions with a user supplied one(s).
Packit 0ba690
 * If buffered output is not used, then output_flush_fn can be set to NULL.
Packit 0ba690
 * If PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile time
Packit 0ba690
 * output_flush_fn will be ignored (and thus can be NULL).
Packit 0ba690
 * It is probably a mistake to use NULL for output_flush_fn if
Packit 0ba690
 * write_data_fn is not also NULL unless you have built libpng with
Packit 0ba690
 * PNG_WRITE_FLUSH_SUPPORTED undefined, because in this case libpng's
Packit 0ba690
 * default flush function, which uses the standard *FILE structure, will
Packit 0ba690
 * be used.
Packit 0ba690
 */
Packit 0ba690
extern PNG_EXPORT(void,png_set_write_fn) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_voidp io_ptr, png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn));
Packit 0ba690
Packit 0ba690
/* Replace the default data input function with a user supplied one. */
Packit 0ba690
extern PNG_EXPORT(void,png_set_read_fn) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_voidp io_ptr, png_rw_ptr read_data_fn));
Packit 0ba690
Packit 0ba690
/* Return the user pointer associated with the I/O functions */
Packit 0ba690
extern PNG_EXPORT(png_voidp,png_get_io_ptr) PNGARG((png_structp png_ptr));
Packit 0ba690
Packit 0ba690
extern PNG_EXPORT(void,png_set_read_status_fn) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_read_status_ptr read_row_fn));
Packit 0ba690
Packit 0ba690
extern PNG_EXPORT(void,png_set_write_status_fn) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_write_status_ptr write_row_fn));
Packit 0ba690
Packit 0ba690
#ifdef PNG_USER_MEM_SUPPORTED
Packit 0ba690
/* Replace the default memory allocation functions with user supplied one(s). */
Packit 0ba690
extern PNG_EXPORT(void,png_set_mem_fn) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn));
Packit 0ba690
/* Return the user pointer associated with the memory functions */
Packit 0ba690
extern PNG_EXPORT(png_voidp,png_get_mem_ptr) PNGARG((png_structp png_ptr));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
Packit 0ba690
    defined(PNG_LEGACY_SUPPORTED)
Packit 0ba690
extern PNG_EXPORT(void,png_set_read_user_transform_fn) PNGARG((png_structp
Packit 0ba690
   png_ptr, png_user_transform_ptr read_user_transform_fn));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \
Packit 0ba690
    defined(PNG_LEGACY_SUPPORTED)
Packit 0ba690
extern PNG_EXPORT(void,png_set_write_user_transform_fn) PNGARG((png_structp
Packit 0ba690
   png_ptr, png_user_transform_ptr write_user_transform_fn));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
Packit 0ba690
    defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \
Packit 0ba690
    defined(PNG_LEGACY_SUPPORTED)
Packit 0ba690
extern PNG_EXPORT(void,png_set_user_transform_info) PNGARG((png_structp
Packit 0ba690
   png_ptr, png_voidp user_transform_ptr, int user_transform_depth,
Packit 0ba690
   int user_transform_channels));
Packit 0ba690
/* Return the user pointer associated with the user transform functions */
Packit 0ba690
extern PNG_EXPORT(png_voidp,png_get_user_transform_ptr)
Packit 0ba690
   PNGARG((png_structp png_ptr));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_USER_CHUNKS_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void,png_set_read_user_chunk_fn) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn));
Packit 0ba690
extern PNG_EXPORT(png_voidp,png_get_user_chunk_ptr) PNGARG((png_structp
Packit 0ba690
   png_ptr));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
Packit 0ba690
/* Sets the function callbacks for the push reader, and a pointer to a
Packit 0ba690
 * user-defined structure available to the callback functions.
Packit 0ba690
 */
Packit 0ba690
extern PNG_EXPORT(void,png_set_progressive_read_fn) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_voidp progressive_ptr,
Packit 0ba690
   png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn,
Packit 0ba690
   png_progressive_end_ptr end_fn));
Packit 0ba690
Packit 0ba690
/* Returns the user pointer associated with the push read functions */
Packit 0ba690
extern PNG_EXPORT(png_voidp,png_get_progressive_ptr)
Packit 0ba690
   PNGARG((png_structp png_ptr));
Packit 0ba690
Packit 0ba690
/* Function to be called when data becomes available */
Packit 0ba690
extern PNG_EXPORT(void,png_process_data) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_bytep buffer, png_size_t buffer_size));
Packit 0ba690
Packit 0ba690
/* Function that combines rows.  Not very much different than the
Packit 0ba690
 * png_combine_row() call.  Is this even used?????
Packit 0ba690
 */
Packit 0ba690
extern PNG_EXPORT(void,png_progressive_combine_row) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_bytep old_row, png_bytep new_row));
Packit 0ba690
#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
Packit 0ba690
Packit 0ba690
extern PNG_EXPORT(png_voidp,png_malloc) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_uint_32 size)) PNG_ALLOCATED;
Packit 0ba690
Packit 0ba690
#ifdef PNG_1_0_X
Packit 0ba690
#  define png_malloc_warn png_malloc
Packit 0ba690
#else
Packit 0ba690
/* Added at libpng version 1.2.4 */
Packit 0ba690
extern PNG_EXPORT(png_voidp,png_malloc_warn) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_uint_32 size)) PNG_ALLOCATED;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* Frees a pointer allocated by png_malloc() */
Packit 0ba690
extern PNG_EXPORT(void,png_free) PNGARG((png_structp png_ptr, png_voidp ptr));
Packit 0ba690
Packit 0ba690
#ifdef PNG_1_0_X
Packit 0ba690
/* Function to allocate memory for zlib. */
Packit 0ba690
extern PNG_EXPORT(voidpf,png_zalloc) PNGARG((voidpf png_ptr, uInt items,
Packit 0ba690
   uInt size));
Packit 0ba690
Packit 0ba690
/* Function to free memory for zlib */
Packit 0ba690
extern PNG_EXPORT(void,png_zfree) PNGARG((voidpf png_ptr, voidpf ptr));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* Free data that was allocated internally */
Packit 0ba690
extern PNG_EXPORT(void,png_free_data) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_uint_32 free_me, int num));
Packit 0ba690
#ifdef PNG_FREE_ME_SUPPORTED
Packit 0ba690
/* Reassign responsibility for freeing existing data, whether allocated
Packit 0ba690
 * by libpng or by the application
Packit 0ba690
 */
Packit 0ba690
extern PNG_EXPORT(void,png_data_freer) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, int freer, png_uint_32 mask));
Packit 0ba690
#endif
Packit 0ba690
/* Assignments for png_data_freer */
Packit 0ba690
#define PNG_DESTROY_WILL_FREE_DATA 1
Packit 0ba690
#define PNG_SET_WILL_FREE_DATA 1
Packit 0ba690
#define PNG_USER_WILL_FREE_DATA 2
Packit 0ba690
/* Flags for png_ptr->free_me and info_ptr->free_me */
Packit 0ba690
#define PNG_FREE_HIST 0x0008
Packit 0ba690
#define PNG_FREE_ICCP 0x0010
Packit 0ba690
#define PNG_FREE_SPLT 0x0020
Packit 0ba690
#define PNG_FREE_ROWS 0x0040
Packit 0ba690
#define PNG_FREE_PCAL 0x0080
Packit 0ba690
#define PNG_FREE_SCAL 0x0100
Packit 0ba690
#define PNG_FREE_UNKN 0x0200
Packit 0ba690
#define PNG_FREE_LIST 0x0400
Packit 0ba690
#define PNG_FREE_PLTE 0x1000
Packit 0ba690
#define PNG_FREE_TRNS 0x2000
Packit 0ba690
#define PNG_FREE_TEXT 0x4000
Packit 0ba690
#define PNG_FREE_ALL  0x7fff
Packit 0ba690
#define PNG_FREE_MUL  0x4220 /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */
Packit 0ba690
Packit 0ba690
#ifdef PNG_USER_MEM_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(png_voidp,png_malloc_default) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_uint_32 size)) PNG_ALLOCATED;
Packit 0ba690
extern PNG_EXPORT(void,png_free_default) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_voidp ptr));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
extern PNG_EXPORT(png_voidp,png_memcpy_check) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_voidp s1, png_voidp s2, png_uint_32 size)) PNG_DEPRECATED;
Packit 0ba690
Packit 0ba690
extern PNG_EXPORT(png_voidp,png_memset_check) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_voidp s1, int value, png_uint_32 size)) PNG_DEPRECATED;
Packit 0ba690
Packit 0ba690
#if defined(USE_FAR_KEYWORD)  /* memory model conversion function */
Packit 0ba690
extern void *png_far_to_near PNGARG((png_structp png_ptr,png_voidp ptr,
Packit 0ba690
   int check));
Packit 0ba690
#endif /* USE_FAR_KEYWORD */
Packit 0ba690
Packit 0ba690
#ifndef PNG_NO_ERROR_TEXT
Packit 0ba690
/* Fatal error in PNG image of libpng - can't continue */
Packit 0ba690
extern PNG_EXPORT(void,png_error) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_const_charp error_message)) PNG_NORETURN;
Packit 0ba690
Packit 0ba690
/* The same, but the chunk name is prepended to the error string. */
Packit 0ba690
extern PNG_EXPORT(void,png_chunk_error) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_const_charp error_message)) PNG_NORETURN;
Packit 0ba690
#else
Packit 0ba690
/* Fatal error in PNG image of libpng - can't continue */
Packit 0ba690
extern PNG_EXPORT(void,png_err) PNGARG((png_structp png_ptr)) PNG_NORETURN;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifndef PNG_NO_WARNINGS
Packit 0ba690
/* Non-fatal error in libpng.  Can continue, but may have a problem. */
Packit 0ba690
extern PNG_EXPORT(void,png_warning) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_const_charp warning_message));
Packit 0ba690
Packit 0ba690
#ifdef PNG_READ_SUPPORTED
Packit 0ba690
/* Non-fatal error in libpng, chunk name is prepended to message. */
Packit 0ba690
extern PNG_EXPORT(void,png_chunk_warning) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_const_charp warning_message));
Packit 0ba690
#endif /* PNG_READ_SUPPORTED */
Packit 0ba690
#endif /* PNG_NO_WARNINGS */
Packit 0ba690
Packit 0ba690
/* The png_set_<chunk> functions are for storing values in the png_info_struct.
Packit 0ba690
 * Similarly, the png_get_<chunk> calls are used to read values from the
Packit 0ba690
 * png_info_struct, either storing the parameters in the passed variables, or
Packit 0ba690
 * setting pointers into the png_info_struct where the data is stored.  The
Packit 0ba690
 * png_get_<chunk> functions return a non-zero value if the data was available
Packit 0ba690
 * in info_ptr, or return zero and do not change any of the parameters if the
Packit 0ba690
 * data was not available.
Packit 0ba690
 *
Packit 0ba690
 * These functions should be used instead of directly accessing png_info
Packit 0ba690
 * to avoid problems with future changes in the size and internal layout of
Packit 0ba690
 * png_info_struct.
Packit 0ba690
 */
Packit 0ba690
/* Returns "flag" if chunk data is valid in info_ptr. */
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_valid) PNGARG((png_structp png_ptr,
Packit 0ba690
png_infop info_ptr, png_uint_32 flag));
Packit 0ba690
Packit 0ba690
/* Returns number of bytes needed to hold a transformed row. */
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_rowbytes) PNGARG((png_structp png_ptr,
Packit 0ba690
png_infop info_ptr));
Packit 0ba690
Packit 0ba690
#ifdef PNG_INFO_IMAGE_SUPPORTED
Packit 0ba690
/* Returns row_pointers, which is an array of pointers to scanlines that was
Packit 0ba690
 * returned from png_read_png().
Packit 0ba690
 */
Packit 0ba690
extern PNG_EXPORT(png_bytepp,png_get_rows) PNGARG((png_structp png_ptr,
Packit 0ba690
png_infop info_ptr));
Packit 0ba690
/* Set row_pointers, which is an array of pointers to scanlines for use
Packit 0ba690
 * by png_write_png().
Packit 0ba690
 */
Packit 0ba690
extern PNG_EXPORT(void,png_set_rows) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_bytepp row_pointers));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* Returns number of color channels in image. */
Packit 0ba690
extern PNG_EXPORT(png_byte,png_get_channels) PNGARG((png_structp png_ptr,
Packit 0ba690
png_infop info_ptr));
Packit 0ba690
Packit 0ba690
#ifdef PNG_EASY_ACCESS_SUPPORTED
Packit 0ba690
/* Returns image width in pixels. */
Packit 0ba690
extern PNG_EXPORT(png_uint_32, png_get_image_width) PNGARG((png_structp
Packit 0ba690
png_ptr, png_infop info_ptr));
Packit 0ba690
Packit 0ba690
/* Returns image height in pixels. */
Packit 0ba690
extern PNG_EXPORT(png_uint_32, png_get_image_height) PNGARG((png_structp
Packit 0ba690
png_ptr, png_infop info_ptr));
Packit 0ba690
Packit 0ba690
/* Returns image bit_depth. */
Packit 0ba690
extern PNG_EXPORT(png_byte, png_get_bit_depth) PNGARG((png_structp
Packit 0ba690
png_ptr, png_infop info_ptr));
Packit 0ba690
Packit 0ba690
/* Returns image color_type. */
Packit 0ba690
extern PNG_EXPORT(png_byte, png_get_color_type) PNGARG((png_structp
Packit 0ba690
png_ptr, png_infop info_ptr));
Packit 0ba690
Packit 0ba690
/* Returns image filter_type. */
Packit 0ba690
extern PNG_EXPORT(png_byte, png_get_filter_type) PNGARG((png_structp
Packit 0ba690
png_ptr, png_infop info_ptr));
Packit 0ba690
Packit 0ba690
/* Returns image interlace_type. */
Packit 0ba690
extern PNG_EXPORT(png_byte, png_get_interlace_type) PNGARG((png_structp
Packit 0ba690
png_ptr, png_infop info_ptr));
Packit 0ba690
Packit 0ba690
/* Returns image compression_type. */
Packit 0ba690
extern PNG_EXPORT(png_byte, png_get_compression_type) PNGARG((png_structp
Packit 0ba690
png_ptr, png_infop info_ptr));
Packit 0ba690
Packit 0ba690
/* Returns image resolution in pixels per meter, from pHYs chunk data. */
Packit 0ba690
extern PNG_EXPORT(png_uint_32, png_get_pixels_per_meter) PNGARG((png_structp
Packit 0ba690
png_ptr, png_infop info_ptr));
Packit 0ba690
extern PNG_EXPORT(png_uint_32, png_get_x_pixels_per_meter) PNGARG((png_structp
Packit 0ba690
png_ptr, png_infop info_ptr));
Packit 0ba690
extern PNG_EXPORT(png_uint_32, png_get_y_pixels_per_meter) PNGARG((png_structp
Packit 0ba690
png_ptr, png_infop info_ptr));
Packit 0ba690
Packit 0ba690
/* Returns pixel aspect ratio, computed from pHYs chunk data.  */
Packit 0ba690
#ifdef PNG_FLOATING_POINT_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(float, png_get_pixel_aspect_ratio) PNGARG((png_structp
Packit 0ba690
png_ptr, png_infop info_ptr));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* Returns image x, y offset in pixels or microns, from oFFs chunk data. */
Packit 0ba690
extern PNG_EXPORT(png_int_32, png_get_x_offset_pixels) PNGARG((png_structp
Packit 0ba690
png_ptr, png_infop info_ptr));
Packit 0ba690
extern PNG_EXPORT(png_int_32, png_get_y_offset_pixels) PNGARG((png_structp
Packit 0ba690
png_ptr, png_infop info_ptr));
Packit 0ba690
extern PNG_EXPORT(png_int_32, png_get_x_offset_microns) PNGARG((png_structp
Packit 0ba690
png_ptr, png_infop info_ptr));
Packit 0ba690
extern PNG_EXPORT(png_int_32, png_get_y_offset_microns) PNGARG((png_structp
Packit 0ba690
png_ptr, png_infop info_ptr));
Packit 0ba690
Packit 0ba690
#endif /* PNG_EASY_ACCESS_SUPPORTED */
Packit 0ba690
Packit 0ba690
/* Returns pointer to signature string read from PNG header */
Packit 0ba690
extern PNG_EXPORT(png_bytep,png_get_signature) PNGARG((png_structp png_ptr,
Packit 0ba690
png_infop info_ptr));
Packit 0ba690
Packit 0ba690
#ifdef PNG_bKGD_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_bKGD) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_color_16p *background));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_bKGD_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void,png_set_bKGD) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_color_16p background));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_cHRM_SUPPORTED
Packit 0ba690
#ifdef PNG_FLOATING_POINT_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_cHRM) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, double *white_x, double *white_y, double *red_x,
Packit 0ba690
   double *red_y, double *green_x, double *green_y, double *blue_x,
Packit 0ba690
   double *blue_y));
Packit 0ba690
#endif
Packit 0ba690
#ifdef PNG_FIXED_POINT_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_cHRM_fixed) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_fixed_point *int_white_x, png_fixed_point
Packit 0ba690
   *int_white_y, png_fixed_point *int_red_x, png_fixed_point *int_red_y,
Packit 0ba690
   png_fixed_point *int_green_x, png_fixed_point *int_green_y, png_fixed_point
Packit 0ba690
   *int_blue_x, png_fixed_point *int_blue_y));
Packit 0ba690
#endif
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_cHRM_SUPPORTED
Packit 0ba690
#ifdef PNG_FLOATING_POINT_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void,png_set_cHRM) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, double white_x, double white_y, double red_x,
Packit 0ba690
   double red_y, double green_x, double green_y, double blue_x, double blue_y));
Packit 0ba690
#endif
Packit 0ba690
#ifdef PNG_FIXED_POINT_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void,png_set_cHRM_fixed) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_fixed_point int_white_x, png_fixed_point int_white_y,
Packit 0ba690
   png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point
Packit 0ba690
   int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x,
Packit 0ba690
   png_fixed_point int_blue_y));
Packit 0ba690
#endif
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_gAMA_SUPPORTED
Packit 0ba690
#ifdef PNG_FLOATING_POINT_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_gAMA) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, double *file_gamma));
Packit 0ba690
#endif
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_gAMA_fixed) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_fixed_point *int_file_gamma));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_gAMA_SUPPORTED
Packit 0ba690
#ifdef PNG_FLOATING_POINT_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void,png_set_gAMA) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, double file_gamma));
Packit 0ba690
#endif
Packit 0ba690
extern PNG_EXPORT(void,png_set_gAMA_fixed) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_fixed_point int_file_gamma));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_hIST_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_hIST) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_uint_16p *hist));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_hIST_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void,png_set_hIST) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_uint_16p hist));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_IHDR) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_uint_32 *width, png_uint_32 *height,
Packit 0ba690
   int *bit_depth, int *color_type, int *interlace_method,
Packit 0ba690
   int *compression_method, int *filter_method));
Packit 0ba690
Packit 0ba690
extern PNG_EXPORT(void,png_set_IHDR) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth,
Packit 0ba690
   int color_type, int interlace_method, int compression_method,
Packit 0ba690
   int filter_method));
Packit 0ba690
Packit 0ba690
#ifdef PNG_oFFs_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_oFFs) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_int_32 *offset_x, png_int_32 *offset_y,
Packit 0ba690
   int *unit_type));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_oFFs_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void,png_set_oFFs) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_int_32 offset_x, png_int_32 offset_y,
Packit 0ba690
   int unit_type));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_pCAL_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_pCAL) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_charp *purpose, png_int_32 *X0, png_int_32 *X1,
Packit 0ba690
   int *type, int *nparams, png_charp *units, png_charpp *params));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_pCAL_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void,png_set_pCAL) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_charp purpose, png_int_32 X0, png_int_32 X1,
Packit 0ba690
   int type, int nparams, png_charp units, png_charpp params));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_pHYs_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_pHYs) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_pHYs_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void,png_set_pHYs) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_PLTE) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_colorp *palette, int *num_palette));
Packit 0ba690
Packit 0ba690
extern PNG_EXPORT(void,png_set_PLTE) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_colorp palette, int num_palette));
Packit 0ba690
Packit 0ba690
#ifdef PNG_sBIT_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_sBIT) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_color_8p *sig_bit));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_sBIT_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void,png_set_sBIT) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_color_8p sig_bit));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_sRGB_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_sRGB) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, int *intent));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_sRGB_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void,png_set_sRGB) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, int intent));
Packit 0ba690
extern PNG_EXPORT(void,png_set_sRGB_gAMA_and_cHRM) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, int intent));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_iCCP_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_iCCP) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_charpp name, int *compression_type,
Packit 0ba690
   png_charpp profile, png_uint_32 *proflen));
Packit 0ba690
   /* Note to maintainer: profile should be png_bytepp */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_iCCP_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void,png_set_iCCP) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_charp name, int compression_type,
Packit 0ba690
   png_charp profile, png_uint_32 proflen));
Packit 0ba690
   /* Note to maintainer: profile should be png_bytep */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_sPLT_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_sPLT) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_sPLT_tpp entries));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_sPLT_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void,png_set_sPLT) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_sPLT_tp entries, int nentries));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_TEXT_SUPPORTED
Packit 0ba690
/* png_get_text also returns the number of text chunks in *num_text */
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_text) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_textp *text_ptr, int *num_text));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/*
Packit 0ba690
 *  Note while png_set_text() will accept a structure whose text,
Packit 0ba690
 *  language, and  translated keywords are NULL pointers, the structure
Packit 0ba690
 *  returned by png_get_text will always contain regular
Packit 0ba690
 *  zero-terminated C strings.  They might be empty strings but
Packit 0ba690
 *  they will never be NULL pointers.
Packit 0ba690
 */
Packit 0ba690
Packit 0ba690
#ifdef PNG_TEXT_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void,png_set_text) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_textp text_ptr, int num_text));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_tIME_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_tIME) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_timep *mod_time));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_tIME_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void,png_set_tIME) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_timep mod_time));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_tRNS_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_tRNS) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_bytep *trans, int *num_trans,
Packit 0ba690
   png_color_16p *trans_values));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_tRNS_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void,png_set_tRNS) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_bytep trans, int num_trans,
Packit 0ba690
   png_color_16p trans_values));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_tRNS_SUPPORTED
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_sCAL_SUPPORTED
Packit 0ba690
#ifdef PNG_FLOATING_POINT_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_sCAL) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, int *unit, double *width, double *height));
Packit 0ba690
#else
Packit 0ba690
#ifdef PNG_FIXED_POINT_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_sCAL_s) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, int *unit, png_charpp swidth, png_charpp sheight));
Packit 0ba690
#endif
Packit 0ba690
#endif
Packit 0ba690
#endif /* PNG_sCAL_SUPPORTED */
Packit 0ba690
Packit 0ba690
#ifdef PNG_sCAL_SUPPORTED
Packit 0ba690
#ifdef PNG_FLOATING_POINT_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void,png_set_sCAL) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, int unit, double width, double height));
Packit 0ba690
#else
Packit 0ba690
#ifdef PNG_FIXED_POINT_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void,png_set_sCAL_s) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, int unit, png_charp swidth, png_charp sheight));
Packit 0ba690
#endif
Packit 0ba690
#endif
Packit 0ba690
#endif /* PNG_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */
Packit 0ba690
Packit 0ba690
#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
Packit 0ba690
/* Provide a list of chunks and how they are to be handled, if the built-in
Packit 0ba690
   handling or default unknown chunk handling is not desired.  Any chunks not
Packit 0ba690
   listed will be handled in the default manner.  The IHDR and IEND chunks
Packit 0ba690
   must not be listed.
Packit 0ba690
      keep = 0: follow default behaviour
Packit 0ba690
           = 1: do not keep
Packit 0ba690
           = 2: keep only if safe-to-copy
Packit 0ba690
           = 3: keep even if unsafe-to-copy
Packit 0ba690
*/
Packit 0ba690
extern PNG_EXPORT(void, png_set_keep_unknown_chunks) PNGARG((png_structp
Packit 0ba690
   png_ptr, int keep, png_bytep chunk_list, int num_chunks));
Packit 0ba690
PNG_EXPORT(int,png_handle_as_unknown) PNGARG((png_structp png_ptr, png_bytep
Packit 0ba690
   chunk_name));
Packit 0ba690
#endif
Packit 0ba690
#ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void, png_set_unknown_chunks) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns));
Packit 0ba690
extern PNG_EXPORT(void, png_set_unknown_chunk_location)
Packit 0ba690
   PNGARG((png_structp png_ptr, png_infop info_ptr, int chunk, int location));
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_unknown_chunks) PNGARG((png_structp
Packit 0ba690
   png_ptr, png_infop info_ptr, png_unknown_chunkpp entries));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* Png_free_data() will turn off the "valid" flag for anything it frees.
Packit 0ba690
 * If you need to turn it off for a chunk that your application has freed,
Packit 0ba690
 * you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK);
Packit 0ba690
 */
Packit 0ba690
extern PNG_EXPORT(void, png_set_invalid) PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, int mask));
Packit 0ba690
Packit 0ba690
#ifdef PNG_INFO_IMAGE_SUPPORTED
Packit 0ba690
/* The "params" pointer is currently not used and is for future expansion. */
Packit 0ba690
extern PNG_EXPORT(void, png_read_png) PNGARG((png_structp png_ptr,
Packit 0ba690
                        png_infop info_ptr,
Packit 0ba690
                        int transforms,
Packit 0ba690
                        png_voidp params));
Packit 0ba690
extern PNG_EXPORT(void, png_write_png) PNGARG((png_structp png_ptr,
Packit 0ba690
                        png_infop info_ptr,
Packit 0ba690
                        int transforms,
Packit 0ba690
                        png_voidp params));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* Define PNG_DEBUG at compile time for debugging information.  Higher
Packit 0ba690
 * numbers for PNG_DEBUG mean more debugging information.  This has
Packit 0ba690
 * only been added since version 0.95 so it is not implemented throughout
Packit 0ba690
 * libpng yet, but more support will be added as needed.
Packit 0ba690
 */
Packit 0ba690
#ifdef PNG_DEBUG
Packit 0ba690
#if (PNG_DEBUG > 0)
Packit 0ba690
#if !defined(PNG_DEBUG_FILE) && defined(_MSC_VER)
Packit 0ba690
#include <crtdbg.h>
Packit 0ba690
#if (PNG_DEBUG > 1)
Packit 0ba690
#ifndef _DEBUG
Packit 0ba690
#  define _DEBUG
Packit 0ba690
#endif
Packit 0ba690
#ifndef png_debug
Packit 0ba690
#define png_debug(l,m)  _RPT0(_CRT_WARN,m PNG_STRING_NEWLINE)
Packit 0ba690
#endif
Packit 0ba690
#ifndef png_debug1
Packit 0ba690
#define png_debug1(l,m,p1)  _RPT1(_CRT_WARN,m PNG_STRING_NEWLINE,p1)
Packit 0ba690
#endif
Packit 0ba690
#ifndef png_debug2
Packit 0ba690
#define png_debug2(l,m,p1,p2) _RPT2(_CRT_WARN,m PNG_STRING_NEWLINE,p1,p2)
Packit 0ba690
#endif
Packit 0ba690
#endif
Packit 0ba690
#else /* PNG_DEBUG_FILE || !_MSC_VER */
Packit 0ba690
#ifndef PNG_DEBUG_FILE
Packit 0ba690
#define PNG_DEBUG_FILE stderr
Packit 0ba690
#endif /* PNG_DEBUG_FILE */
Packit 0ba690
Packit 0ba690
#if (PNG_DEBUG > 1)
Packit 0ba690
/* Note: ["%s"m PNG_STRING_NEWLINE] probably does not work on non-ISO
Packit 0ba690
 * compilers.
Packit 0ba690
 */
Packit 0ba690
#  ifdef __STDC__
Packit 0ba690
#    ifndef png_debug
Packit 0ba690
#      define png_debug(l,m) \
Packit 0ba690
       { \
Packit 0ba690
       int num_tabs=l; \
Packit 0ba690
       fprintf(PNG_DEBUG_FILE,"%s" m PNG_STRING_NEWLINE,(num_tabs==1 ? "\t" : \
Packit 0ba690
         (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":"")))); \
Packit 0ba690
       }
Packit 0ba690
#    endif
Packit 0ba690
#    ifndef png_debug1
Packit 0ba690
#      define png_debug1(l,m,p1) \
Packit 0ba690
       { \
Packit 0ba690
       int num_tabs=l; \
Packit 0ba690
       fprintf(PNG_DEBUG_FILE,"%s" m PNG_STRING_NEWLINE,(num_tabs==1 ? "\t" : \
Packit 0ba690
         (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1); \
Packit 0ba690
       }
Packit 0ba690
#    endif
Packit 0ba690
#    ifndef png_debug2
Packit 0ba690
#      define png_debug2(l,m,p1,p2) \
Packit 0ba690
       { \
Packit 0ba690
       int num_tabs=l; \
Packit 0ba690
       fprintf(PNG_DEBUG_FILE,"%s" m PNG_STRING_NEWLINE,(num_tabs==1 ? "\t" : \
Packit 0ba690
         (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1,p2); \
Packit 0ba690
       }
Packit 0ba690
#    endif
Packit 0ba690
#  else /* __STDC __ */
Packit 0ba690
#    ifndef png_debug
Packit 0ba690
#      define png_debug(l,m) \
Packit 0ba690
       { \
Packit 0ba690
       int num_tabs=l; \
Packit 0ba690
       char format[256]; \
Packit 0ba690
       snprintf(format,256,"%s%s%s",(num_tabs==1 ? "\t" : \
Packit 0ba690
         (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))), \
Packit 0ba690
         m,PNG_STRING_NEWLINE); \
Packit 0ba690
       fprintf(PNG_DEBUG_FILE,format); \
Packit 0ba690
       }
Packit 0ba690
#    endif
Packit 0ba690
#    ifndef png_debug1
Packit 0ba690
#      define png_debug1(l,m,p1) \
Packit 0ba690
       { \
Packit 0ba690
       int num_tabs=l; \
Packit 0ba690
       char format[256]; \
Packit 0ba690
       snprintf(format,256,"%s%s%s",(num_tabs==1 ? "\t" : \
Packit 0ba690
         (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))), \
Packit 0ba690
         m,PNG_STRING_NEWLINE); \
Packit 0ba690
       fprintf(PNG_DEBUG_FILE,format,p1); \
Packit 0ba690
       }
Packit 0ba690
#    endif
Packit 0ba690
#    ifndef png_debug2
Packit 0ba690
#      define png_debug2(l,m,p1,p2) \
Packit 0ba690
       { \
Packit 0ba690
       int num_tabs=l; \
Packit 0ba690
       char format[256]; \
Packit 0ba690
       snprintf(format,256,"%s%s%s",(num_tabs==1 ? "\t" : \
Packit 0ba690
         (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))), \
Packit 0ba690
         m,PNG_STRING_NEWLINE); \
Packit 0ba690
       fprintf(PNG_DEBUG_FILE,format,p1,p2); \
Packit 0ba690
       }
Packit 0ba690
#    endif
Packit 0ba690
#  endif /* __STDC __ */
Packit 0ba690
#endif /* (PNG_DEBUG > 1) */
Packit 0ba690
Packit 0ba690
#endif /* _MSC_VER */
Packit 0ba690
#endif /* (PNG_DEBUG > 0) */
Packit 0ba690
#endif /* PNG_DEBUG */
Packit 0ba690
#ifndef png_debug
Packit 0ba690
#define png_debug(l, m)
Packit 0ba690
#endif
Packit 0ba690
#ifndef png_debug1
Packit 0ba690
#define png_debug1(l, m, p1)
Packit 0ba690
#endif
Packit 0ba690
#ifndef png_debug2
Packit 0ba690
#define png_debug2(l, m, p1, p2)
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
extern PNG_EXPORT(png_charp,png_get_copyright) PNGARG((png_structp png_ptr));
Packit 0ba690
extern PNG_EXPORT(png_charp,png_get_header_ver) PNGARG((png_structp png_ptr));
Packit 0ba690
extern PNG_EXPORT(png_charp,png_get_header_version) PNGARG((png_structp png_ptr));
Packit 0ba690
extern PNG_EXPORT(png_charp,png_get_libpng_ver) PNGARG((png_structp png_ptr));
Packit 0ba690
Packit 0ba690
#ifdef PNG_MNG_FEATURES_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_permit_mng_features) PNGARG((png_structp
Packit 0ba690
   png_ptr, png_uint_32 mng_features_permitted));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* For use in png_set_keep_unknown, added to version 1.2.6 */
Packit 0ba690
#define PNG_HANDLE_CHUNK_AS_DEFAULT   0
Packit 0ba690
#define PNG_HANDLE_CHUNK_NEVER        1
Packit 0ba690
#define PNG_HANDLE_CHUNK_IF_SAFE      2
Packit 0ba690
#define PNG_HANDLE_CHUNK_ALWAYS       3
Packit 0ba690
Packit 0ba690
/* Added to version 1.2.0 */
Packit 0ba690
#ifdef PNG_ASSEMBLER_CODE_SUPPORTED
Packit 0ba690
#ifdef PNG_MMX_CODE_SUPPORTED
Packit 0ba690
#define PNG_ASM_FLAG_MMX_SUPPORT_COMPILED  0x01  /* not user-settable */
Packit 0ba690
#define PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU    0x02  /* not user-settable */
Packit 0ba690
#define PNG_ASM_FLAG_MMX_READ_COMBINE_ROW  0x04
Packit 0ba690
#define PNG_ASM_FLAG_MMX_READ_INTERLACE    0x08
Packit 0ba690
#define PNG_ASM_FLAG_MMX_READ_FILTER_SUB   0x10
Packit 0ba690
#define PNG_ASM_FLAG_MMX_READ_FILTER_UP    0x20
Packit 0ba690
#define PNG_ASM_FLAG_MMX_READ_FILTER_AVG   0x40
Packit 0ba690
#define PNG_ASM_FLAG_MMX_READ_FILTER_PAETH 0x80
Packit 0ba690
#define PNG_ASM_FLAGS_INITIALIZED          0x80000000  /* not user-settable */
Packit 0ba690
Packit 0ba690
#define PNG_MMX_READ_FLAGS ( PNG_ASM_FLAG_MMX_READ_COMBINE_ROW  \
Packit 0ba690
                           | PNG_ASM_FLAG_MMX_READ_INTERLACE    \
Packit 0ba690
                           | PNG_ASM_FLAG_MMX_READ_FILTER_SUB   \
Packit 0ba690
                           | PNG_ASM_FLAG_MMX_READ_FILTER_UP    \
Packit 0ba690
                           | PNG_ASM_FLAG_MMX_READ_FILTER_AVG   \
Packit 0ba690
                           | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH )
Packit 0ba690
#define PNG_MMX_WRITE_FLAGS ( 0 )
Packit 0ba690
Packit 0ba690
#define PNG_MMX_FLAGS ( PNG_ASM_FLAG_MMX_SUPPORT_COMPILED \
Packit 0ba690
                      | PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU   \
Packit 0ba690
                      | PNG_MMX_READ_FLAGS                \
Packit 0ba690
                      | PNG_MMX_WRITE_FLAGS )
Packit 0ba690
Packit 0ba690
#define PNG_SELECT_READ   1
Packit 0ba690
#define PNG_SELECT_WRITE  2
Packit 0ba690
#endif /* PNG_MMX_CODE_SUPPORTED */
Packit 0ba690
Packit 0ba690
#ifndef PNG_1_0_X
Packit 0ba690
/* pngget.c */
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_mmx_flagmask)
Packit 0ba690
   PNGARG((int flag_select, int *compilerID));
Packit 0ba690
Packit 0ba690
/* pngget.c */
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_asm_flagmask)
Packit 0ba690
   PNGARG((int flag_select));
Packit 0ba690
Packit 0ba690
/* pngget.c */
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_asm_flags)
Packit 0ba690
   PNGARG((png_structp png_ptr));
Packit 0ba690
Packit 0ba690
/* pngget.c */
Packit 0ba690
extern PNG_EXPORT(png_byte,png_get_mmx_bitdepth_threshold)
Packit 0ba690
   PNGARG((png_structp png_ptr));
Packit 0ba690
Packit 0ba690
/* pngget.c */
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_mmx_rowbytes_threshold)
Packit 0ba690
   PNGARG((png_structp png_ptr));
Packit 0ba690
Packit 0ba690
/* pngset.c */
Packit 0ba690
extern PNG_EXPORT(void,png_set_asm_flags)
Packit 0ba690
   PNGARG((png_structp png_ptr, png_uint_32 asm_flags));
Packit 0ba690
Packit 0ba690
/* pngset.c */
Packit 0ba690
extern PNG_EXPORT(void,png_set_mmx_thresholds)
Packit 0ba690
   PNGARG((png_structp png_ptr, png_byte mmx_bitdepth_threshold,
Packit 0ba690
   png_uint_32 mmx_rowbytes_threshold));
Packit 0ba690
Packit 0ba690
#endif /* PNG_1_0_X */
Packit 0ba690
Packit 0ba690
#ifndef PNG_1_0_X
Packit 0ba690
/* png.c, pnggccrd.c, or pngvcrd.c */
Packit 0ba690
extern PNG_EXPORT(int,png_mmx_support) PNGARG((void));
Packit 0ba690
#endif /* PNG_1_0_X */
Packit 0ba690
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
Packit 0ba690
Packit 0ba690
/* Strip the prepended error numbers ("#nnn ") from error and warning
Packit 0ba690
 * messages before passing them to the error or warning handler.
Packit 0ba690
 */
Packit 0ba690
#ifdef PNG_ERROR_NUMBERS_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void,png_set_strip_error_numbers) PNGARG((png_structp
Packit 0ba690
   png_ptr, png_uint_32 strip_mode));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* Added at libpng-1.2.6 */
Packit 0ba690
#ifdef PNG_SET_USER_LIMITS_SUPPORTED
Packit 0ba690
extern PNG_EXPORT(void,png_set_user_limits) PNGARG((png_structp
Packit 0ba690
   png_ptr, png_uint_32 user_width_max, png_uint_32 user_height_max));
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_user_width_max) PNGARG((png_structp
Packit 0ba690
   png_ptr));
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_user_height_max) PNGARG((png_structp
Packit 0ba690
   png_ptr));
Packit 0ba690
#endif
Packit 0ba690
/* Maintainer: Put new public prototypes here ^, in libpng.3, and in
Packit 0ba690
 * project defs
Packit 0ba690
 */
Packit 0ba690
Packit 0ba690
#ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED
Packit 0ba690
/* With these routines we avoid an integer divide, which will be slower on
Packit 0ba690
 * most machines.  However, it does take more operations than the corresponding
Packit 0ba690
 * divide method, so it may be slower on a few RISC systems.  There are two
Packit 0ba690
 * shifts (by 8 or 16 bits) and an addition, versus a single integer divide.
Packit 0ba690
 *
Packit 0ba690
 * Note that the rounding factors are NOT supposed to be the same!  128 and
Packit 0ba690
 * 32768 are correct for the NODIV code; 127 and 32767 are correct for the
Packit 0ba690
 * standard method.
Packit 0ba690
 *
Packit 0ba690
 * [Optimized code by Greg Roelofs and Mark Adler...blame us for bugs. :-) ]
Packit 0ba690
 */
Packit 0ba690
Packit 0ba690
 /* fg and bg should be in `gamma 1.0' space; alpha is the opacity          */
Packit 0ba690
Packit 0ba690
#  define png_composite(composite, fg, alpha, bg)                            \
Packit 0ba690
     { png_uint_16 temp = (png_uint_16)((png_uint_16)(fg) * (png_uint_16)(alpha) \
Packit 0ba690
                        +        (png_uint_16)(bg)*(png_uint_16)(255 -       \
Packit 0ba690
                        (png_uint_16)(alpha)) + (png_uint_16)128);           \
Packit 0ba690
       (composite) = (png_byte)((temp + (temp >> 8)) >> 8); }
Packit 0ba690
Packit 0ba690
#  define png_composite_16(composite, fg, alpha, bg)                         \
Packit 0ba690
     { png_uint_32 temp = (png_uint_32)((png_uint_32)(fg) * (png_uint_32)(alpha) \
Packit 0ba690
                        + (png_uint_32)(bg)*(png_uint_32)(65535L -           \
Packit 0ba690
                        (png_uint_32)(alpha)) + (png_uint_32)32768L);        \
Packit 0ba690
       (composite) = (png_uint_16)((temp + (temp >> 16)) >> 16); }
Packit 0ba690
Packit 0ba690
#else  /* Standard method using integer division */
Packit 0ba690
Packit 0ba690
#  define png_composite(composite, fg, alpha, bg)                            \
Packit 0ba690
     (composite) = (png_byte)(((png_uint_16)(fg) * (png_uint_16)(alpha) +    \
Packit 0ba690
       (png_uint_16)(bg) * (png_uint_16)(255 - (png_uint_16)(alpha)) +       \
Packit 0ba690
       (png_uint_16)127) / 255)
Packit 0ba690
Packit 0ba690
#  define png_composite_16(composite, fg, alpha, bg)                         \
Packit 0ba690
     (composite) = (png_uint_16)(((png_uint_32)(fg) * (png_uint_32)(alpha) + \
Packit 0ba690
       (png_uint_32)(bg)*(png_uint_32)(65535L - (png_uint_32)(alpha)) +      \
Packit 0ba690
       (png_uint_32)32767) / (png_uint_32)65535L)
Packit 0ba690
Packit 0ba690
#endif /* PNG_READ_COMPOSITE_NODIV_SUPPORTED */
Packit 0ba690
Packit 0ba690
/* Inline macros to do direct reads of bytes from the input buffer.  These
Packit 0ba690
 * require that you are using an architecture that uses PNG byte ordering
Packit 0ba690
 * (MSB first) and supports unaligned data storage.  I think that PowerPC
Packit 0ba690
 * in big-endian mode and 680x0 are the only ones that will support this.
Packit 0ba690
 * The x86 line of processors definitely do not.  The png_get_int_32()
Packit 0ba690
 * routine also assumes we are using two's complement format for negative
Packit 0ba690
 * values, which is almost certainly true.
Packit 0ba690
 */
Packit 0ba690
#ifdef PNG_READ_BIG_ENDIAN_SUPPORTED
Packit 0ba690
#  define png_get_uint_32(buf) ( *((png_uint_32p) (buf)))
Packit 0ba690
#  define png_get_uint_16(buf) ( *((png_uint_16p) (buf)))
Packit 0ba690
#  define png_get_int_32(buf)  ( *((png_int_32p)  (buf)))
Packit 0ba690
#else
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_uint_32) PNGARG((png_bytep buf));
Packit 0ba690
extern PNG_EXPORT(png_uint_16,png_get_uint_16) PNGARG((png_bytep buf));
Packit 0ba690
extern PNG_EXPORT(png_int_32,png_get_int_32) PNGARG((png_bytep buf));
Packit 0ba690
#endif /* !PNG_READ_BIG_ENDIAN_SUPPORTED */
Packit 0ba690
extern PNG_EXPORT(png_uint_32,png_get_uint_31)
Packit 0ba690
  PNGARG((png_structp png_ptr, png_bytep buf));
Packit 0ba690
/* No png_get_int_16 -- may be added if there's a real need for it. */
Packit 0ba690
Packit 0ba690
/* Place a 32-bit number into a buffer in PNG byte order (big-endian).
Packit 0ba690
 */
Packit 0ba690
extern PNG_EXPORT(void,png_save_uint_32)
Packit 0ba690
   PNGARG((png_bytep buf, png_uint_32 i));
Packit 0ba690
extern PNG_EXPORT(void,png_save_int_32)
Packit 0ba690
   PNGARG((png_bytep buf, png_int_32 i));
Packit 0ba690
Packit 0ba690
/* Place a 16-bit number into a buffer in PNG byte order.
Packit 0ba690
 * The parameter is declared unsigned int, not png_uint_16,
Packit 0ba690
 * just to avoid potential problems on pre-ANSI C compilers.
Packit 0ba690
 */
Packit 0ba690
extern PNG_EXPORT(void,png_save_uint_16)
Packit 0ba690
   PNGARG((png_bytep buf, unsigned int i));
Packit 0ba690
/* No png_save_int_16 -- may be added if there's a real need for it. */
Packit 0ba690
Packit 0ba690
/* ************************************************************************* */
Packit 0ba690
Packit 0ba690
/* These next functions are used internally in the code.  They generally
Packit 0ba690
 * shouldn't be used unless you are writing code to add or replace some
Packit 0ba690
 * functionality in libpng.  More information about most functions can
Packit 0ba690
 * be found in the files where the functions are located.
Packit 0ba690
 */
Packit 0ba690
Packit 0ba690
Packit 0ba690
/* Various modes of operation, that are visible to applications because
Packit 0ba690
 * they are used for unknown chunk location.
Packit 0ba690
 */
Packit 0ba690
#define PNG_HAVE_IHDR               0x01
Packit 0ba690
#define PNG_HAVE_PLTE               0x02
Packit 0ba690
#define PNG_HAVE_IDAT               0x04
Packit 0ba690
#define PNG_AFTER_IDAT              0x08 /* Have complete zlib datastream */
Packit 0ba690
#define PNG_HAVE_IEND               0x10
Packit 0ba690
Packit 0ba690
#ifdef PNG_INTERNAL
Packit 0ba690
Packit 0ba690
/* More modes of operation.  Note that after an init, mode is set to
Packit 0ba690
 * zero automatically when the structure is created.
Packit 0ba690
 */
Packit 0ba690
#define PNG_HAVE_gAMA               0x20
Packit 0ba690
#define PNG_HAVE_cHRM               0x40
Packit 0ba690
#define PNG_HAVE_sRGB               0x80
Packit 0ba690
#define PNG_HAVE_CHUNK_HEADER      0x100
Packit 0ba690
#define PNG_WROTE_tIME             0x200
Packit 0ba690
#define PNG_WROTE_INFO_BEFORE_PLTE 0x400
Packit 0ba690
#define PNG_BACKGROUND_IS_GRAY     0x800
Packit 0ba690
#define PNG_HAVE_PNG_SIGNATURE    0x1000
Packit 0ba690
#define PNG_HAVE_CHUNK_AFTER_IDAT 0x2000 /* Have another chunk after IDAT */
Packit 0ba690
Packit 0ba690
/* Flags for the transformations the PNG library does on the image data */
Packit 0ba690
#define PNG_BGR                0x0001
Packit 0ba690
#define PNG_INTERLACE          0x0002
Packit 0ba690
#define PNG_PACK               0x0004
Packit 0ba690
#define PNG_SHIFT              0x0008
Packit 0ba690
#define PNG_SWAP_BYTES         0x0010
Packit 0ba690
#define PNG_INVERT_MONO        0x0020
Packit 0ba690
#define PNG_DITHER             0x0040
Packit 0ba690
#define PNG_BACKGROUND         0x0080
Packit 0ba690
#define PNG_BACKGROUND_EXPAND  0x0100
Packit 0ba690
                          /*   0x0200 unused */
Packit 0ba690
#define PNG_16_TO_8            0x0400
Packit 0ba690
#define PNG_RGBA               0x0800
Packit 0ba690
#define PNG_EXPAND             0x1000
Packit 0ba690
#define PNG_GAMMA              0x2000
Packit 0ba690
#define PNG_GRAY_TO_RGB        0x4000
Packit 0ba690
#define PNG_FILLER             0x8000L
Packit 0ba690
#define PNG_PACKSWAP          0x10000L
Packit 0ba690
#define PNG_SWAP_ALPHA        0x20000L
Packit 0ba690
#define PNG_STRIP_ALPHA       0x40000L
Packit 0ba690
#define PNG_INVERT_ALPHA      0x80000L
Packit 0ba690
#define PNG_USER_TRANSFORM   0x100000L
Packit 0ba690
#define PNG_RGB_TO_GRAY_ERR  0x200000L
Packit 0ba690
#define PNG_RGB_TO_GRAY_WARN 0x400000L
Packit 0ba690
#define PNG_RGB_TO_GRAY      0x600000L  /* two bits, RGB_TO_GRAY_ERR|WARN */
Packit 0ba690
                       /*    0x800000L     Unused */
Packit 0ba690
#define PNG_ADD_ALPHA       0x1000000L  /* Added to libpng-1.2.7 */
Packit 0ba690
#define PNG_EXPAND_tRNS     0x2000000L  /* Added to libpng-1.2.9 */
Packit 0ba690
#define PNG_PREMULTIPLY_ALPHA 0x4000000L  /* Added to libpng-1.2.41 */
Packit 0ba690
                                          /* by volker */
Packit 0ba690
                       /*   0x8000000L  unused */
Packit 0ba690
                       /*  0x10000000L  unused */
Packit 0ba690
                       /*  0x20000000L  unused */
Packit 0ba690
                       /*  0x40000000L  unused */
Packit 0ba690
Packit 0ba690
/* Flags for png_create_struct */
Packit 0ba690
#define PNG_STRUCT_PNG   0x0001
Packit 0ba690
#define PNG_STRUCT_INFO  0x0002
Packit 0ba690
Packit 0ba690
/* Scaling factor for filter heuristic weighting calculations */
Packit 0ba690
#define PNG_WEIGHT_SHIFT 8
Packit 0ba690
#define PNG_WEIGHT_FACTOR (1<<(PNG_WEIGHT_SHIFT))
Packit 0ba690
#define PNG_COST_SHIFT 3
Packit 0ba690
#define PNG_COST_FACTOR (1<<(PNG_COST_SHIFT))
Packit 0ba690
Packit 0ba690
/* Flags for the png_ptr->flags rather than declaring a byte for each one */
Packit 0ba690
#define PNG_FLAG_ZLIB_CUSTOM_STRATEGY     0x0001
Packit 0ba690
#define PNG_FLAG_ZLIB_CUSTOM_LEVEL        0x0002
Packit 0ba690
#define PNG_FLAG_ZLIB_CUSTOM_MEM_LEVEL    0x0004
Packit 0ba690
#define PNG_FLAG_ZLIB_CUSTOM_WINDOW_BITS  0x0008
Packit 0ba690
#define PNG_FLAG_ZLIB_CUSTOM_METHOD       0x0010
Packit 0ba690
#define PNG_FLAG_ZLIB_FINISHED            0x0020
Packit 0ba690
#define PNG_FLAG_ROW_INIT                 0x0040
Packit 0ba690
#define PNG_FLAG_FILLER_AFTER             0x0080
Packit 0ba690
#define PNG_FLAG_CRC_ANCILLARY_USE        0x0100
Packit 0ba690
#define PNG_FLAG_CRC_ANCILLARY_NOWARN     0x0200
Packit 0ba690
#define PNG_FLAG_CRC_CRITICAL_USE         0x0400
Packit 0ba690
#define PNG_FLAG_CRC_CRITICAL_IGNORE      0x0800
Packit 0ba690
#define PNG_FLAG_FREE_PLTE                0x1000
Packit 0ba690
#define PNG_FLAG_FREE_TRNS                0x2000
Packit 0ba690
#define PNG_FLAG_FREE_HIST                0x4000
Packit 0ba690
#define PNG_FLAG_KEEP_UNKNOWN_CHUNKS      0x8000L
Packit 0ba690
#define PNG_FLAG_KEEP_UNSAFE_CHUNKS       0x10000L
Packit 0ba690
#define PNG_FLAG_LIBRARY_MISMATCH         0x20000L
Packit 0ba690
#define PNG_FLAG_STRIP_ERROR_NUMBERS      0x40000L
Packit 0ba690
#define PNG_FLAG_STRIP_ERROR_TEXT         0x80000L
Packit 0ba690
#define PNG_FLAG_MALLOC_NULL_MEM_OK       0x100000L
Packit 0ba690
#define PNG_FLAG_ADD_ALPHA                0x200000L  /* Added to libpng-1.2.8 */
Packit 0ba690
#define PNG_FLAG_STRIP_ALPHA              0x400000L  /* Added to libpng-1.2.8 */
Packit 0ba690
                                  /*      0x800000L  unused */
Packit 0ba690
                                  /*     0x1000000L  unused */
Packit 0ba690
                                  /*     0x2000000L  unused */
Packit 0ba690
                                  /*     0x4000000L  unused */
Packit 0ba690
                                  /*     0x8000000L  unused */
Packit 0ba690
                                  /*    0x10000000L  unused */
Packit 0ba690
                                  /*    0x20000000L  unused */
Packit 0ba690
                                  /*    0x40000000L  unused */
Packit 0ba690
Packit 0ba690
#define PNG_FLAG_CRC_ANCILLARY_MASK (PNG_FLAG_CRC_ANCILLARY_USE | \
Packit 0ba690
                                     PNG_FLAG_CRC_ANCILLARY_NOWARN)
Packit 0ba690
Packit 0ba690
#define PNG_FLAG_CRC_CRITICAL_MASK  (PNG_FLAG_CRC_CRITICAL_USE | \
Packit 0ba690
                                     PNG_FLAG_CRC_CRITICAL_IGNORE)
Packit 0ba690
Packit 0ba690
#define PNG_FLAG_CRC_MASK           (PNG_FLAG_CRC_ANCILLARY_MASK | \
Packit 0ba690
                                     PNG_FLAG_CRC_CRITICAL_MASK)
Packit 0ba690
Packit 0ba690
/* Save typing and make code easier to understand */
Packit 0ba690
Packit 0ba690
#define PNG_COLOR_DIST(c1, c2) (abs((int)((c1).red) - (int)((c2).red)) + \
Packit 0ba690
   abs((int)((c1).green) - (int)((c2).green)) + \
Packit 0ba690
   abs((int)((c1).blue) - (int)((c2).blue)))
Packit 0ba690
Packit 0ba690
/* Added to libpng-1.2.6 JB */
Packit 0ba690
#define PNG_ROWBYTES(pixel_bits, width) \
Packit 0ba690
    ((pixel_bits) >= 8 ? \
Packit 0ba690
    ((width) * (((png_uint_32)(pixel_bits)) >> 3)) : \
Packit 0ba690
    (( ((width) * ((png_uint_32)(pixel_bits))) + 7) >> 3) )
Packit 0ba690
Packit 0ba690
/* PNG_OUT_OF_RANGE returns true if value is outside the range
Packit 0ba690
 * ideal-delta..ideal+delta.  Each argument is evaluated twice.
Packit 0ba690
 * "ideal" and "delta" should be constants, normally simple
Packit 0ba690
 * integers, "value" a variable. Added to libpng-1.2.6 JB
Packit 0ba690
 */
Packit 0ba690
#define PNG_OUT_OF_RANGE(value, ideal, delta) \
Packit 0ba690
        ( (value) < (ideal)-(delta) || (value) > (ideal)+(delta) )
Packit 0ba690
Packit 0ba690
/* Variables declared in png.c - only it needs to define PNG_NO_EXTERN */
Packit 0ba690
#if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN)
Packit 0ba690
/* Place to hold the signature string for a PNG file. */
Packit 0ba690
#ifdef PNG_USE_GLOBAL_ARRAYS
Packit 0ba690
   PNG_EXPORT_VAR (PNG_CONST png_byte FARDATA) png_sig[8];
Packit 0ba690
#else
Packit 0ba690
#endif
Packit 0ba690
#endif /* PNG_NO_EXTERN */
Packit 0ba690
Packit 0ba690
/* Constant strings for known chunk types.  If you need to add a chunk,
Packit 0ba690
 * define the name here, and add an invocation of the macro in png.c and
Packit 0ba690
 * wherever it's needed.
Packit 0ba690
 */
Packit 0ba690
#define PNG_IHDR png_byte png_IHDR[5] = { 73,  72,  68,  82, '\0'}
Packit 0ba690
#define PNG_IDAT png_byte png_IDAT[5] = { 73,  68,  65,  84, '\0'}
Packit 0ba690
#define PNG_IEND png_byte png_IEND[5] = { 73,  69,  78,  68, '\0'}
Packit 0ba690
#define PNG_PLTE png_byte png_PLTE[5] = { 80,  76,  84,  69, '\0'}
Packit 0ba690
#define PNG_bKGD png_byte png_bKGD[5] = { 98,  75,  71,  68, '\0'}
Packit 0ba690
#define PNG_cHRM png_byte png_cHRM[5] = { 99,  72,  82,  77, '\0'}
Packit 0ba690
#define PNG_gAMA png_byte png_gAMA[5] = {103,  65,  77,  65, '\0'}
Packit 0ba690
#define PNG_hIST png_byte png_hIST[5] = {104,  73,  83,  84, '\0'}
Packit 0ba690
#define PNG_iCCP png_byte png_iCCP[5] = {105,  67,  67,  80, '\0'}
Packit 0ba690
#define PNG_iTXt png_byte png_iTXt[5] = {105,  84,  88, 116, '\0'}
Packit 0ba690
#define PNG_oFFs png_byte png_oFFs[5] = {111,  70,  70, 115, '\0'}
Packit 0ba690
#define PNG_pCAL png_byte png_pCAL[5] = {112,  67,  65,  76, '\0'}
Packit 0ba690
#define PNG_sCAL png_byte png_sCAL[5] = {115,  67,  65,  76, '\0'}
Packit 0ba690
#define PNG_pHYs png_byte png_pHYs[5] = {112,  72,  89, 115, '\0'}
Packit 0ba690
#define PNG_sBIT png_byte png_sBIT[5] = {115,  66,  73,  84, '\0'}
Packit 0ba690
#define PNG_sPLT png_byte png_sPLT[5] = {115,  80,  76,  84, '\0'}
Packit 0ba690
#define PNG_sRGB png_byte png_sRGB[5] = {115,  82,  71,  66, '\0'}
Packit 0ba690
#define PNG_tEXt png_byte png_tEXt[5] = {116,  69,  88, 116, '\0'}
Packit 0ba690
#define PNG_tIME png_byte png_tIME[5] = {116,  73,  77,  69, '\0'}
Packit 0ba690
#define PNG_tRNS png_byte png_tRNS[5] = {116,  82,  78,  83, '\0'}
Packit 0ba690
#define PNG_zTXt png_byte png_zTXt[5] = {122,  84,  88, 116, '\0'}
Packit 0ba690
Packit 0ba690
#ifdef PNG_USE_GLOBAL_ARRAYS
Packit 0ba690
PNG_EXPORT_VAR (png_byte FARDATA) png_IHDR[5];
Packit 0ba690
PNG_EXPORT_VAR (png_byte FARDATA) png_IDAT[5];
Packit 0ba690
PNG_EXPORT_VAR (png_byte FARDATA) png_IEND[5];
Packit 0ba690
PNG_EXPORT_VAR (png_byte FARDATA) png_PLTE[5];
Packit 0ba690
PNG_EXPORT_VAR (png_byte FARDATA) png_bKGD[5];
Packit 0ba690
PNG_EXPORT_VAR (png_byte FARDATA) png_cHRM[5];
Packit 0ba690
PNG_EXPORT_VAR (png_byte FARDATA) png_gAMA[5];
Packit 0ba690
PNG_EXPORT_VAR (png_byte FARDATA) png_hIST[5];
Packit 0ba690
PNG_EXPORT_VAR (png_byte FARDATA) png_iCCP[5];
Packit 0ba690
PNG_EXPORT_VAR (png_byte FARDATA) png_iTXt[5];
Packit 0ba690
PNG_EXPORT_VAR (png_byte FARDATA) png_oFFs[5];
Packit 0ba690
PNG_EXPORT_VAR (png_byte FARDATA) png_pCAL[5];
Packit 0ba690
PNG_EXPORT_VAR (png_byte FARDATA) png_sCAL[5];
Packit 0ba690
PNG_EXPORT_VAR (png_byte FARDATA) png_pHYs[5];
Packit 0ba690
PNG_EXPORT_VAR (png_byte FARDATA) png_sBIT[5];
Packit 0ba690
PNG_EXPORT_VAR (png_byte FARDATA) png_sPLT[5];
Packit 0ba690
PNG_EXPORT_VAR (png_byte FARDATA) png_sRGB[5];
Packit 0ba690
PNG_EXPORT_VAR (png_byte FARDATA) png_tEXt[5];
Packit 0ba690
PNG_EXPORT_VAR (png_byte FARDATA) png_tIME[5];
Packit 0ba690
PNG_EXPORT_VAR (png_byte FARDATA) png_tRNS[5];
Packit 0ba690
PNG_EXPORT_VAR (png_byte FARDATA) png_zTXt[5];
Packit 0ba690
#endif /* PNG_USE_GLOBAL_ARRAYS */
Packit 0ba690
Packit 0ba690
#if defined(PNG_1_0_X) || defined (PNG_1_2_X)
Packit 0ba690
/* Initialize png_ptr struct for reading, and allocate any other memory.
Packit 0ba690
 * (old interface - DEPRECATED - use png_create_read_struct instead).
Packit 0ba690
 */
Packit 0ba690
extern PNG_EXPORT(void,png_read_init) PNGARG((png_structp png_ptr))
Packit 0ba690
    PNG_DEPRECATED;
Packit 0ba690
#undef png_read_init
Packit 0ba690
#define png_read_init(png_ptr) png_read_init_3(&png_ptr, \
Packit 0ba690
    PNG_LIBPNG_VER_STRING,  png_sizeof(png_struct));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
extern PNG_EXPORT(void,png_read_init_3) PNGARG((png_structpp ptr_ptr,
Packit 0ba690
    png_const_charp user_png_ver, png_size_t png_struct_size));
Packit 0ba690
#if defined(PNG_1_0_X) || defined (PNG_1_2_X)
Packit 0ba690
extern PNG_EXPORT(void,png_read_init_2) PNGARG((png_structp png_ptr,
Packit 0ba690
    png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t
Packit 0ba690
    png_info_size));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_1_0_X) || defined (PNG_1_2_X)
Packit 0ba690
/* Initialize png_ptr struct for writing, and allocate any other memory.
Packit 0ba690
 * (old interface - DEPRECATED - use png_create_write_struct instead).
Packit 0ba690
 */
Packit 0ba690
extern PNG_EXPORT(void,png_write_init) PNGARG((png_structp png_ptr))
Packit 0ba690
    PNG_DEPRECATED;
Packit 0ba690
#undef png_write_init
Packit 0ba690
#define png_write_init(png_ptr) png_write_init_3(&png_ptr, \
Packit 0ba690
    PNG_LIBPNG_VER_STRING, png_sizeof(png_struct));
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
extern PNG_EXPORT(void,png_write_init_3) PNGARG((png_structpp ptr_ptr,
Packit 0ba690
    png_const_charp user_png_ver, png_size_t png_struct_size));
Packit 0ba690
extern PNG_EXPORT(void,png_write_init_2) PNGARG((png_structp png_ptr,
Packit 0ba690
    png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t
Packit 0ba690
    png_info_size));
Packit 0ba690
Packit 0ba690
/* Allocate memory for an internal libpng struct */
Packit 0ba690
PNG_EXTERN png_voidp png_create_struct PNGARG((int type)) PNG_PRIVATE;
Packit 0ba690
Packit 0ba690
/* Free memory from internal libpng struct */
Packit 0ba690
PNG_EXTERN void png_destroy_struct PNGARG((png_voidp struct_ptr)) PNG_PRIVATE;
Packit 0ba690
Packit 0ba690
PNG_EXTERN png_voidp png_create_struct_2 PNGARG((int type, png_malloc_ptr
Packit 0ba690
  malloc_fn, png_voidp mem_ptr)) PNG_PRIVATE;
Packit 0ba690
PNG_EXTERN void png_destroy_struct_2 PNGARG((png_voidp struct_ptr,
Packit 0ba690
   png_free_ptr free_fn, png_voidp mem_ptr)) PNG_PRIVATE;
Packit 0ba690
Packit 0ba690
/* Free any memory that info_ptr points to and reset struct. */
Packit 0ba690
PNG_EXTERN void png_info_destroy PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr)) PNG_PRIVATE;
Packit 0ba690
Packit 0ba690
#ifndef PNG_1_0_X
Packit 0ba690
/* Function to allocate memory for zlib. */
Packit 0ba690
PNG_EXTERN voidpf png_zalloc PNGARG((voidpf png_ptr, uInt items,
Packit 0ba690
   uInt size)) PNG_PRIVATE;
Packit 0ba690
Packit 0ba690
/* Function to free memory for zlib */
Packit 0ba690
PNG_EXTERN void png_zfree PNGARG((voidpf png_ptr, voidpf ptr)) PNG_PRIVATE;
Packit 0ba690
Packit 0ba690
#ifdef PNG_SIZE_T
Packit 0ba690
/* Function to convert a sizeof an item to png_sizeof item */
Packit 0ba690
   PNG_EXTERN png_size_t PNGAPI png_convert_size PNGARG((size_t size))
Packit 0ba690
      PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* Next four functions are used internally as callbacks.  PNGAPI is required
Packit 0ba690
 * but not PNG_EXPORT.  PNGAPI added at libpng version 1.2.3.
Packit 0ba690
 */
Packit 0ba690
Packit 0ba690
PNG_EXTERN void PNGAPI png_default_read_data PNGARG((png_structp png_ptr,
Packit 0ba690
   png_bytep data, png_size_t length)) PNG_PRIVATE;
Packit 0ba690
Packit 0ba690
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
Packit 0ba690
PNG_EXTERN void PNGAPI png_push_fill_buffer PNGARG((png_structp png_ptr,
Packit 0ba690
   png_bytep buffer, png_size_t length)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
PNG_EXTERN void PNGAPI png_default_write_data PNGARG((png_structp png_ptr,
Packit 0ba690
   png_bytep data, png_size_t length)) PNG_PRIVATE;
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_FLUSH_SUPPORTED
Packit 0ba690
#ifdef PNG_STDIO_SUPPORTED
Packit 0ba690
PNG_EXTERN void PNGAPI png_default_flush PNGARG((png_structp png_ptr))
Packit 0ba690
   PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
#endif
Packit 0ba690
#else /* PNG_1_0_X */
Packit 0ba690
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_push_fill_buffer PNGARG((png_structp png_ptr,
Packit 0ba690
   png_bytep buffer, png_size_t length)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
#endif /* PNG_1_0_X */
Packit 0ba690
Packit 0ba690
/* Reset the CRC variable */
Packit 0ba690
PNG_EXTERN void png_reset_crc PNGARG((png_structp png_ptr)) PNG_PRIVATE;
Packit 0ba690
Packit 0ba690
/* Write the "data" buffer to whatever output you are using. */
Packit 0ba690
PNG_EXTERN void png_write_data PNGARG((png_structp png_ptr, png_bytep data,
Packit 0ba690
   png_size_t length)) PNG_PRIVATE;
Packit 0ba690
Packit 0ba690
/* Read data from whatever input you are using into the "data" buffer */
Packit 0ba690
PNG_EXTERN void png_read_data PNGARG((png_structp png_ptr, png_bytep data,
Packit 0ba690
   png_size_t length)) PNG_PRIVATE;
Packit 0ba690
Packit 0ba690
/* Read bytes into buf, and update png_ptr->crc */
Packit 0ba690
PNG_EXTERN void png_crc_read PNGARG((png_structp png_ptr, png_bytep buf,
Packit 0ba690
   png_size_t length)) PNG_PRIVATE;
Packit 0ba690
Packit 0ba690
/* Decompress data in a chunk that uses compression */
Packit 0ba690
#if defined(PNG_zTXt_SUPPORTED) || defined(PNG_iTXt_SUPPORTED) || \
Packit 0ba690
    defined(PNG_iCCP_SUPPORTED) || defined(PNG_sPLT_SUPPORTED)
Packit 0ba690
PNG_EXTERN void png_decompress_chunk PNGARG((png_structp png_ptr,
Packit 0ba690
   int comp_type, png_size_t chunklength,
Packit 0ba690
   png_size_t prefix_length, png_size_t *data_length)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* Read "skip" bytes, read the file crc, and (optionally) verify png_ptr->crc */
Packit 0ba690
PNG_EXTERN int png_crc_finish PNGARG((png_structp png_ptr, png_uint_32 skip)
Packit 0ba690
   PNG_PRIVATE);
Packit 0ba690
Packit 0ba690
/* Read the CRC from the file and compare it to the libpng calculated CRC */
Packit 0ba690
PNG_EXTERN int png_crc_error PNGARG((png_structp png_ptr)) PNG_PRIVATE;
Packit 0ba690
Packit 0ba690
/* Calculate the CRC over a section of data.  Note that we are only
Packit 0ba690
 * passing a maximum of 64K on systems that have this as a memory limit,
Packit 0ba690
 * since this is the maximum buffer size we can specify.
Packit 0ba690
 */
Packit 0ba690
PNG_EXTERN void png_calculate_crc PNGARG((png_structp png_ptr, png_bytep ptr,
Packit 0ba690
   png_size_t length)) PNG_PRIVATE;
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_FLUSH_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_flush PNGARG((png_structp png_ptr)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* Simple function to write the signature */
Packit 0ba690
PNG_EXTERN void png_write_sig PNGARG((png_structp png_ptr)) PNG_PRIVATE;
Packit 0ba690
Packit 0ba690
/* Write various chunks */
Packit 0ba690
Packit 0ba690
/* Write the IHDR chunk, and update the png_struct with the necessary
Packit 0ba690
 * information.
Packit 0ba690
 */
Packit 0ba690
PNG_EXTERN void png_write_IHDR PNGARG((png_structp png_ptr, png_uint_32 width,
Packit 0ba690
   png_uint_32 height,
Packit 0ba690
   int bit_depth, int color_type, int compression_method, int filter_method,
Packit 0ba690
   int interlace_method)) PNG_PRIVATE;
Packit 0ba690
Packit 0ba690
PNG_EXTERN void png_write_PLTE PNGARG((png_structp png_ptr, png_colorp palette,
Packit 0ba690
   png_uint_32 num_pal)) PNG_PRIVATE;
Packit 0ba690
Packit 0ba690
PNG_EXTERN void png_write_IDAT PNGARG((png_structp png_ptr, png_bytep data,
Packit 0ba690
   png_size_t length)) PNG_PRIVATE;
Packit 0ba690
Packit 0ba690
PNG_EXTERN void png_write_IEND PNGARG((png_structp png_ptr)) PNG_PRIVATE;
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_gAMA_SUPPORTED
Packit 0ba690
#ifdef PNG_FLOATING_POINT_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_write_gAMA PNGARG((png_structp png_ptr, double file_gamma))
Packit 0ba690
    PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
#ifdef PNG_FIXED_POINT_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_write_gAMA_fixed PNGARG((png_structp png_ptr,
Packit 0ba690
    png_fixed_point file_gamma)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_sBIT_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_write_sBIT PNGARG((png_structp png_ptr, png_color_8p sbit,
Packit 0ba690
   int color_type)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_cHRM_SUPPORTED
Packit 0ba690
#ifdef PNG_FLOATING_POINT_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_write_cHRM PNGARG((png_structp png_ptr,
Packit 0ba690
   double white_x, double white_y,
Packit 0ba690
   double red_x, double red_y, double green_x, double green_y,
Packit 0ba690
   double blue_x, double blue_y)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
#ifdef PNG_FIXED_POINT_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_write_cHRM_fixed PNGARG((png_structp png_ptr,
Packit 0ba690
   png_fixed_point int_white_x, png_fixed_point int_white_y,
Packit 0ba690
   png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point
Packit 0ba690
   int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x,
Packit 0ba690
   png_fixed_point int_blue_y)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_sRGB_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_write_sRGB PNGARG((png_structp png_ptr,
Packit 0ba690
   int intent)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_iCCP_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_write_iCCP PNGARG((png_structp png_ptr,
Packit 0ba690
   png_charp name, int compression_type,
Packit 0ba690
   png_charp profile, int proflen)) PNG_PRIVATE;
Packit 0ba690
   /* Note to maintainer: profile should be png_bytep */
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_sPLT_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_write_sPLT PNGARG((png_structp png_ptr,
Packit 0ba690
   png_sPLT_tp palette)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_tRNS_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_write_tRNS PNGARG((png_structp png_ptr, png_bytep trans,
Packit 0ba690
   png_color_16p values, int number, int color_type)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_bKGD_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_write_bKGD PNGARG((png_structp png_ptr,
Packit 0ba690
   png_color_16p values, int color_type)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_hIST_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_write_hIST PNGARG((png_structp png_ptr, png_uint_16p hist,
Packit 0ba690
   int num_hist)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_pCAL_SUPPORTED) || \
Packit 0ba690
    defined(PNG_WRITE_iCCP_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED)
Packit 0ba690
PNG_EXTERN png_size_t png_check_keyword PNGARG((png_structp png_ptr,
Packit 0ba690
   png_charp key, png_charpp new_key)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_tEXt_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_write_tEXt PNGARG((png_structp png_ptr, png_charp key,
Packit 0ba690
   png_charp text, png_size_t text_len)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_zTXt_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_write_zTXt PNGARG((png_structp png_ptr, png_charp key,
Packit 0ba690
   png_charp text, png_size_t text_len, int compression)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_iTXt_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_write_iTXt PNGARG((png_structp png_ptr,
Packit 0ba690
   int compression, png_charp key, png_charp lang, png_charp lang_key,
Packit 0ba690
   png_charp text)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_TEXT_SUPPORTED  /* Added at version 1.0.14 and 1.2.4 */
Packit 0ba690
PNG_EXTERN int png_set_text_2 PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr, png_textp text_ptr, int num_text)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_oFFs_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_write_oFFs PNGARG((png_structp png_ptr,
Packit 0ba690
   png_int_32 x_offset, png_int_32 y_offset, int unit_type)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_pCAL_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_write_pCAL PNGARG((png_structp png_ptr, png_charp purpose,
Packit 0ba690
   png_int_32 X0, png_int_32 X1, int type, int nparams,
Packit 0ba690
   png_charp units, png_charpp params)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_pHYs_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_write_pHYs PNGARG((png_structp png_ptr,
Packit 0ba690
   png_uint_32 x_pixels_per_unit, png_uint_32 y_pixels_per_unit,
Packit 0ba690
   int unit_type)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_tIME_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_write_tIME PNGARG((png_structp png_ptr,
Packit 0ba690
   png_timep mod_time)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_sCAL_SUPPORTED
Packit 0ba690
#if defined(PNG_FLOATING_POINT_SUPPORTED) && !defined(PNG_NO_STDIO)
Packit 0ba690
PNG_EXTERN void png_write_sCAL PNGARG((png_structp png_ptr,
Packit 0ba690
   int unit, double width, double height)) PNG_PRIVATE;
Packit 0ba690
#else
Packit 0ba690
#ifdef PNG_FIXED_POINT_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_write_sCAL_s PNGARG((png_structp png_ptr,
Packit 0ba690
   int unit, png_charp width, png_charp height)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
#endif
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* Called when finished processing a row of data */
Packit 0ba690
PNG_EXTERN void png_write_finish_row PNGARG((png_structp png_ptr)) PNG_PRIVATE;
Packit 0ba690
Packit 0ba690
/* Internal use only.   Called before first row of data */
Packit 0ba690
PNG_EXTERN void png_write_start_row PNGARG((png_structp png_ptr)) PNG_PRIVATE;
Packit 0ba690
Packit 0ba690
#ifdef PNG_READ_GAMMA_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_build_gamma_table PNGARG((png_structp png_ptr)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* Combine a row of data, dealing with alpha, etc. if requested */
Packit 0ba690
PNG_EXTERN void png_combine_row PNGARG((png_structp png_ptr, png_bytep row,
Packit 0ba690
   int mask)) PNG_PRIVATE;
Packit 0ba690
Packit 0ba690
#ifdef PNG_READ_INTERLACING_SUPPORTED
Packit 0ba690
/* Expand an interlaced row */
Packit 0ba690
/* OLD pre-1.0.9 interface:
Packit 0ba690
PNG_EXTERN void png_do_read_interlace PNGARG((png_row_infop row_info,
Packit 0ba690
   png_bytep row, int pass, png_uint_32 transformations)) PNG_PRIVATE;
Packit 0ba690
 */
Packit 0ba690
PNG_EXTERN void png_do_read_interlace PNGARG((png_structp png_ptr)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* GRR TO DO (2.0 or whenever):  simplify other internal calling interfaces */
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_INTERLACING_SUPPORTED
Packit 0ba690
/* Grab pixels out of a row for an interlaced pass */
Packit 0ba690
PNG_EXTERN void png_do_write_interlace PNGARG((png_row_infop row_info,
Packit 0ba690
   png_bytep row, int pass)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
/* Unfilter a row */
Packit 0ba690
PNG_EXTERN void png_read_filter_row PNGARG((png_structp png_ptr,
Packit 0ba690
   png_row_infop row_info, png_bytep row, png_bytep prev_row,
Packit 0ba690
   int filter)) PNG_PRIVATE;
Packit 0ba690
Packit 0ba690
/* Choose the best filter to use and filter the row data */
Packit 0ba690
PNG_EXTERN void png_write_find_filter PNGARG((png_structp png_ptr,
Packit 0ba690
   png_row_infop row_info)) PNG_PRIVATE;
Packit 0ba690
Packit 0ba690
/* Write out the filtered row. */
Packit 0ba690
PNG_EXTERN void png_write_filtered_row PNGARG((png_structp png_ptr,
Packit 0ba690
   png_bytep filtered_row)) PNG_PRIVATE;
Packit 0ba690
/* Finish a row while reading, dealing with interlacing passes, etc. */
Packit 0ba690
PNG_EXTERN void png_read_finish_row PNGARG((png_structp png_ptr));
Packit 0ba690
Packit 0ba690
/* Initialize the row buffers, etc. */
Packit 0ba690
PNG_EXTERN void png_read_start_row PNGARG((png_structp png_ptr)) PNG_PRIVATE;
Packit 0ba690
/* Optional call to update the users info structure */
Packit 0ba690
PNG_EXTERN void png_read_transform_info PNGARG((png_structp png_ptr,
Packit 0ba690
   png_infop info_ptr)) PNG_PRIVATE;
Packit 0ba690
Packit 0ba690
/* These are the functions that do the transformations */
Packit 0ba690
#ifdef PNG_READ_FILLER_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_do_read_filler PNGARG((png_row_infop row_info,
Packit 0ba690
   png_bytep row, png_uint_32 filler, png_uint_32 flags)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_READ_SWAP_ALPHA_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_do_read_swap_alpha PNGARG((png_row_infop row_info,
Packit 0ba690
   png_bytep row)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_SWAP_ALPHA_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_do_write_swap_alpha PNGARG((png_row_infop row_info,
Packit 0ba690
   png_bytep row)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_READ_INVERT_ALPHA_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_do_read_invert_alpha PNGARG((png_row_infop row_info,
Packit 0ba690
   png_bytep row)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#ifdef PNG_WRITE_INVERT_ALPHA_SUPPORTED
Packit 0ba690
PNG_EXTERN void png_do_write_invert_alpha PNGARG((png_row_infop row_info,
Packit 0ba690
   png_bytep row)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_WRITE_FILLER_SUPPORTED) || \
Packit 0ba690
    defined(PNG_READ_STRIP_ALPHA_SUPPORTED)
Packit 0ba690
PNG_EXTERN void png_do_strip_filler PNGARG((png_row_infop row_info,
Packit 0ba690
   png_bytep row, png_uint_32 flags)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit 0ba690
#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
Packit 0ba690
PNG_EXTERN void png_do_swap PNGARG((png_row_infop row_info,
Packit 0ba690
    png_bytep row)) PNG_PRIVATE;
Packit 0ba690
#endif
Packit 0ba690
Packit