src/3rdparty/libpng/png.h
branchGCC_SURGE
changeset 31 5daf16870df6
parent 30 5dc02b23752f
equal deleted inserted replaced
27:93b982ccede2 31:5daf16870df6
       
     1 
     1 /* png.h - header file for PNG reference library
     2 /* png.h - header file for PNG reference library
     2  *
     3  *
     3  * libpng version 1.2.40 - September 10, 2009
     4  * libpng version 1.4.0 - January 3, 2010
     4  * Copyright (c) 1998-2009 Glenn Randers-Pehrson
     5  * Copyright (c) 1998-2010 Glenn Randers-Pehrson
     5  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
     6  * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
     6  * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
     7  * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
     7  *
     8  *
     8  * This code is released under the libpng license (See LICENSE, below)
     9  * This code is released under the libpng license (See LICENSE, below)
     9  *
    10  *
    10  * Authors and maintainers:
    11  * Authors and maintainers:
    11  *  libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
    12  *  libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
    12  *  libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger
    13  *  libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger
    13  *  libpng versions 0.97, January 1998, through 1.2.40 - September 10, 2009: Glenn
    14  *  libpng versions 0.97, January 1998, through 1.4.0 - January 3, 2010: Glenn
    14  *  See also "Contributing Authors", below.
    15  *  See also "Contributing Authors", below.
    15  *
    16  *
    16  * Note about libpng version numbers:
    17  * Note about libpng version numbers:
    17  *
    18  *
    18  *    Due to various miscommunications, unforeseen code incompatibilities
    19  *    Due to various miscommunications, unforeseen code incompatibilities
   102  *    1.2.5                   13    10205  12.so.0.1.2.5
   103  *    1.2.5                   13    10205  12.so.0.1.2.5
   103  *    1.2.6beta1-4            13    10206  12.so.0.1.2.6beta1-4
   104  *    1.2.6beta1-4            13    10206  12.so.0.1.2.6beta1-4
   104  *    1.0.16                  10    10016  10.so.0.1.0.16
   105  *    1.0.16                  10    10016  10.so.0.1.0.16
   105  *    1.2.6                   13    10206  12.so.0.1.2.6
   106  *    1.2.6                   13    10206  12.so.0.1.2.6
   106  *    1.2.7beta1-2            13    10207  12.so.0.1.2.7beta1-2
   107  *    1.2.7beta1-2            13    10207  12.so.0.1.2.7beta1-2
   107  *    1.0.17rc1               10    10017  10.so.0.1.0.17rc1
   108  *    1.0.17rc1               10    10017  12.so.0.1.0.17rc1
   108  *    1.2.7rc1                13    10207  12.so.0.1.2.7rc1
   109  *    1.2.7rc1                13    10207  12.so.0.1.2.7rc1
   109  *    1.0.17                  10    10017  10.so.0.1.0.17
   110  *    1.0.17                  10    10017  12.so.0.1.0.17
   110  *    1.2.7                   13    10207  12.so.0.1.2.7
   111  *    1.2.7                   13    10207  12.so.0.1.2.7
   111  *    1.2.8beta1-5            13    10208  12.so.0.1.2.8beta1-5
   112  *    1.2.8beta1-5            13    10208  12.so.0.1.2.8beta1-5
   112  *    1.0.18rc1-5             10    10018  10.so.0.1.0.18rc1-5
   113  *    1.0.18rc1-5             10    10018  12.so.0.1.0.18rc1-5
   113  *    1.2.8rc1-5              13    10208  12.so.0.1.2.8rc1-5
   114  *    1.2.8rc1-5              13    10208  12.so.0.1.2.8rc1-5
   114  *    1.0.18                  10    10018  10.so.0.1.0.18
   115  *    1.0.18                  10    10018  12.so.0.1.0.18
   115  *    1.2.8                   13    10208  12.so.0.1.2.8
   116  *    1.2.8                   13    10208  12.so.0.1.2.8
   116  *    1.2.9beta1-3            13    10209  12.so.0.1.2.9beta1-3
   117  *    1.2.9beta1-3            13    10209  12.so.0.1.2.9beta1-3
   117  *    1.2.9beta4-11           13    10209  12.so.0.9[.0]
   118  *    1.2.9beta4-11           13    10209  12.so.0.9[.0]
   118  *    1.2.9rc1                13    10209  12.so.0.9[.0]
   119  *    1.2.9rc1                13    10209  12.so.0.9[.0]
   119  *    1.2.9                   13    10209  12.so.0.9[.0]
   120  *    1.2.9                   13    10209  12.so.0.9[.0]
   120  *    1.2.10beta1-8           13    10210  12.so.0.10[.0]
   121  *    1.2.10beta1-7           13    10210  12.so.0.10[.0]
   121  *    1.2.10rc1-3             13    10210  12.so.0.10[.0]
   122  *    1.2.10rc1-2             13    10210  12.so.0.10[.0]
   122  *    1.2.10                  13    10210  12.so.0.10[.0]
   123  *    1.2.10                  13    10210  12.so.0.10[.0]
       
   124  *    1.4.0beta1-5            14    10400  14.so.0.0[.0]
   123  *    1.2.11beta1-4           13    10211  12.so.0.11[.0]
   125  *    1.2.11beta1-4           13    10211  12.so.0.11[.0]
   124  *    1.0.19rc1-5             10    10019  10.so.0.19[.0]
   126  *    1.4.0beta7-8            14    10400  14.so.0.0[.0]
   125  *    1.2.11rc1-5             13    10211  12.so.0.11[.0]
       
   126  *    1.0.19                  10    10019  10.so.0.19[.0]
       
   127  *    1.2.11                  13    10211  12.so.0.11[.0]
   127  *    1.2.11                  13    10211  12.so.0.11[.0]
   128  *    1.0.20                  10    10020  10.so.0.20[.0]
       
   129  *    1.2.12                  13    10212  12.so.0.12[.0]
   128  *    1.2.12                  13    10212  12.so.0.12[.0]
   130  *    1.2.13beta1             13    10213  12.so.0.13[.0]
   129  *    1.4.0beta9-14           14    10400  14.so.0.0[.0]
   131  *    1.0.21                  10    10021  10.so.0.21[.0]
       
   132  *    1.2.13                  13    10213  12.so.0.13[.0]
   130  *    1.2.13                  13    10213  12.so.0.13[.0]
   133  *    1.2.14beta1-2           13    10214  12.so.0.14[.0]
   131  *    1.4.0beta15-36          14    10400  14.so.0.0[.0]
   134  *    1.0.22rc1               10    10022  10.so.0.22[.0]
   132  *    1.4.0beta37-87          14    10400  14.so.14.0[.0]
   135  *    1.2.14rc1               13    10214  12.so.0.14[.0]
   133  *    1.4.0rc01               14    10400  14.so.14.0[.0]
   136  *    1.0.22                  10    10022  10.so.0.22[.0]
   134  *    1.4.0beta88-109         14    10400  14.so.14.0[.0]
   137  *    1.2.14                  13    10214  12.so.0.14[.0]
   135  *    1.4.0rc02-08            14    10400  14.so.14.0[.0]
   138  *    1.2.15beta1-6           13    10215  12.so.0.15[.0]
   136  *    1.4.0                   14    10400  14.so.14.0[.0]
   139  *    1.0.23rc1-5             10    10023  10.so.0.23[.0]
       
   140  *    1.2.15rc1-5             13    10215  12.so.0.15[.0]
       
   141  *    1.0.23                  10    10023  10.so.0.23[.0]
       
   142  *    1.2.15                  13    10215  12.so.0.15[.0]
       
   143  *    1.2.16beta1-2           13    10216  12.so.0.16[.0]
       
   144  *    1.2.16rc1               13    10216  12.so.0.16[.0]
       
   145  *    1.0.24                  10    10024  10.so.0.24[.0]
       
   146  *    1.2.16                  13    10216  12.so.0.16[.0]
       
   147  *    1.2.17beta1-2           13    10217  12.so.0.17[.0]
       
   148  *    1.0.25rc1               10    10025  10.so.0.25[.0]
       
   149  *    1.2.17rc1-3             13    10217  12.so.0.17[.0]
       
   150  *    1.0.25                  10    10025  10.so.0.25[.0]
       
   151  *    1.2.17                  13    10217  12.so.0.17[.0]
       
   152  *    1.0.26                  10    10026  10.so.0.26[.0]
       
   153  *    1.2.18                  13    10218  12.so.0.18[.0]
       
   154  *    1.2.19beta1-31          13    10219  12.so.0.19[.0]
       
   155  *    1.0.27rc1-6             10    10027  10.so.0.27[.0]
       
   156  *    1.2.19rc1-6             13    10219  12.so.0.19[.0]
       
   157  *    1.0.27                  10    10027  10.so.0.27[.0]
       
   158  *    1.2.19                  13    10219  12.so.0.19[.0]
       
   159  *    1.2.20beta01-04         13    10220  12.so.0.20[.0]
       
   160  *    1.0.28rc1-6             10    10028  10.so.0.28[.0]
       
   161  *    1.2.20rc1-6             13    10220  12.so.0.20[.0]
       
   162  *    1.0.28                  10    10028  10.so.0.28[.0]
       
   163  *    1.2.20                  13    10220  12.so.0.20[.0]
       
   164  *    1.2.21beta1-2           13    10221  12.so.0.21[.0]
       
   165  *    1.2.21rc1-3             13    10221  12.so.0.21[.0]
       
   166  *    1.0.29                  10    10029  10.so.0.29[.0]
       
   167  *    1.2.21                  13    10221  12.so.0.21[.0]
       
   168  *    1.2.22beta1-4           13    10222  12.so.0.22[.0]
       
   169  *    1.0.30rc1               10    10030  10.so.0.30[.0]
       
   170  *    1.2.22rc1               13    10222  12.so.0.22[.0]
       
   171  *    1.0.30                  10    10030  10.so.0.30[.0]
       
   172  *    1.2.22                  13    10222  12.so.0.22[.0]
       
   173  *    1.2.23beta01-05         13    10223  12.so.0.23[.0]
       
   174  *    1.2.23rc01              13    10223  12.so.0.23[.0]
       
   175  *    1.2.23                  13    10223  12.so.0.23[.0]
       
   176  *    1.2.24beta01-02         13    10224  12.so.0.24[.0]
       
   177  *    1.2.24rc01              13    10224  12.so.0.24[.0]
       
   178  *    1.2.24                  13    10224  12.so.0.24[.0]
       
   179  *    1.2.25beta01-06         13    10225  12.so.0.25[.0]
       
   180  *    1.2.25rc01-02           13    10225  12.so.0.25[.0]
       
   181  *    1.0.31                  10    10031  10.so.0.31[.0]
       
   182  *    1.2.25                  13    10225  12.so.0.25[.0]
       
   183  *    1.2.26beta01-06         13    10226  12.so.0.26[.0]
       
   184  *    1.2.26rc01              13    10226  12.so.0.26[.0]
       
   185  *    1.2.26                  13    10226  12.so.0.26[.0]
       
   186  *    1.0.32                  10    10032  10.so.0.32[.0]
       
   187  *    1.2.27beta01-06         13    10227  12.so.0.27[.0]
       
   188  *    1.2.27rc01              13    10227  12.so.0.27[.0]
       
   189  *    1.0.33                  10    10033  10.so.0.33[.0]
       
   190  *    1.2.27                  13    10227  12.so.0.27[.0]
       
   191  *    1.0.34                  10    10034  10.so.0.34[.0]
       
   192  *    1.2.28                  13    10228  12.so.0.28[.0]
       
   193  *    1.2.29beta01-03         13    10229  12.so.0.29[.0]
       
   194  *    1.2.29rc01              13    10229  12.so.0.29[.0]
       
   195  *    1.0.35                  10    10035  10.so.0.35[.0]
       
   196  *    1.2.29                  13    10229  12.so.0.29[.0]
       
   197  *    1.0.37                  10    10037  10.so.0.37[.0]
       
   198  *    1.2.30beta01-04         13    10230  12.so.0.30[.0]
       
   199  *    1.0.38rc01-08           10    10038  10.so.0.38[.0]
       
   200  *    1.2.30rc01-08           13    10230  12.so.0.30[.0]
       
   201  *    1.0.38                  10    10038  10.so.0.38[.0]
       
   202  *    1.2.30                  13    10230  12.so.0.30[.0]
       
   203  *    1.0.39rc01-03           10    10039  10.so.0.39[.0]
       
   204  *    1.2.31rc01-03           13    10231  12.so.0.31[.0]
       
   205  *    1.0.39                  10    10039  10.so.0.39[.0]
       
   206  *    1.2.31                  13    10231  12.so.0.31[.0]
       
   207  *    1.2.32beta01-02         13    10232  12.so.0.32[.0]
       
   208  *    1.0.40rc01              10    10040  10.so.0.40[.0]
       
   209  *    1.2.32rc01              13    10232  12.so.0.32[.0]
       
   210  *    1.0.40                  10    10040  10.so.0.40[.0]
       
   211  *    1.2.32                  13    10232  12.so.0.32[.0]
       
   212  *    1.2.33beta01-02         13    10233  12.so.0.33[.0]
       
   213  *    1.2.33rc01-02           13    10233  12.so.0.33[.0]
       
   214  *    1.0.41rc01              10    10041  10.so.0.41[.0]
       
   215  *    1.2.33                  13    10233  12.so.0.33[.0]
       
   216  *    1.0.41                  10    10041  10.so.0.41[.0]
       
   217  *    1.2.34beta01-07         13    10234  12.so.0.34[.0]
       
   218  *    1.0.42rc01              10    10042  10.so.0.42[.0]
       
   219  *    1.2.34rc01              13    10234  12.so.0.34[.0]
       
   220  *    1.0.42                  10    10042  10.so.0.42[.0]
       
   221  *    1.2.34                  13    10234  12.so.0.34[.0]
       
   222  *    1.2.35beta01-03         13    10235  12.so.0.35[.0]
       
   223  *    1.0.43rc01-02           10    10043  10.so.0.43[.0]
       
   224  *    1.2.35rc01-02           13    10235  12.so.0.35[.0]
       
   225  *    1.0.43                  10    10043  10.so.0.43[.0]
       
   226  *    1.2.35                  13    10235  12.so.0.35[.0]
       
   227  *    1.2.36beta01-05         13    10236  12.so.0.36[.0]
       
   228  *    1.2.36rc01              13    10236  12.so.0.36[.0]
       
   229  *    1.0.44                  10    10044  10.so.0.44[.0]
       
   230  *    1.2.36                  13    10236  12.so.0.36[.0]
       
   231  *    1.2.37beta01-03         13    10237  12.so.0.37[.0]
       
   232  *    1.2.37rc01              13    10237  12.so.0.37[.0]
       
   233  *    1.2.37                  13    10237  12.so.0.37[.0]
       
   234  *    1.2.45                  10    10045  12.so.0.45[.0]
       
   235  *    1.0.46                  10    10046  10.so.0.46[.0]
       
   236  *    1.2.38beta01            13    10238  12.so.0.38[.0]
       
   237  *    1.2.38rc01-03           13    10238  12.so.0.38[.0]
       
   238  *    1.0.47                  10    10047  10.so.0.47[.0]
       
   239  *    1.2.38                  13    10238  12.so.0.38[.0]
       
   240  *    1.2.39beta01-05         13    10239  12.so.0.39[.0]
       
   241  *    1.2.39rc01              13    10239  12.so.0.39[.0]
       
   242  *    1.0.48                  10    10048  10.so.0.48[.0]
       
   243  *    1.2.39                  13    10239  12.so.0.39[.0]
       
   244  *    1.2.40beta01            13    10240  12.so.0.40[.0]
       
   245  *    1.2.40rc01              13    10240  12.so.0.40[.0]
       
   246  *    1.0.49                  10    10049  10.so.0.49[.0]
       
   247  *    1.2.40                  13    10240  12.so.0.40[.0]
       
   248  *
   137  *
   249  *    Henceforth the source version will match the shared-library major
   138  *    Henceforth the source version will match the shared-library major
   250  *    and minor numbers; the shared-library major version number will be
   139  *    and minor numbers; the shared-library major version number will be
   251  *    used for changes in backward compatibility, as it is intended.  The
   140  *    used for changes in backward compatibility, as it is intended.  The
   252  *    PNG_LIBPNG_VER macro, which is not used within libpng but is available
   141  *    PNG_LIBPNG_VER macro, which is not used within libpng but is available
   253  *    for applications, is an unsigned integer of the form xyyzz corresponding
   142  *    for applications, is an unsigned integer of the form xyyzz corresponding
   254  *    to the source version x.y.z (leading zeros in y and z).  Beta versions
   143  *    to the source version x.y.z (leading zeros in y and z).  Beta versions
   255  *    were given the previous public release number plus a letter, until
   144  *    were given the previous public release number plus a letter, until
   256  *    version 1.0.6j; from then on they were given the upcoming public
   145  *    version 1.0.6j; from then on they were given the upcoming public
   257  *    release number plus "betaNN" or "rcNN".
   146  *    release number plus "betaNN" or "rcN".
   258  *
   147  *
   259  *    Binary incompatibility exists only when applications make direct access
   148  *    Binary incompatibility exists only when applications make direct access
   260  *    to the info_ptr or png_ptr members through png.h, and the compiled
   149  *    to the info_ptr or png_ptr members through png.h, and the compiled
   261  *    application is loaded with a different version of the library.
   150  *    application is loaded with a different version of the library.
   262  *
   151  *
   274  * If you modify libpng you may insert additional notices immediately following
   163  * If you modify libpng you may insert additional notices immediately following
   275  * this sentence.
   164  * this sentence.
   276  *
   165  *
   277  * This code is released under the libpng license.
   166  * This code is released under the libpng license.
   278  *
   167  *
   279  * libpng versions 1.2.6, August 15, 2004, through 1.2.40, September 10, 2009, are
   168  * libpng versions 1.2.6, August 15, 2004, through 1.4.0, January 3, 2010, are
   280  * Copyright (c) 2004, 2006-2009 Glenn Randers-Pehrson, and are
   169  * Copyright (c) 2004, 2006-2010 Glenn Randers-Pehrson, and are
   281  * distributed according to the same disclaimer and license as libpng-1.2.5
   170  * distributed according to the same disclaimer and license as libpng-1.2.5
   282  * with the following individual added to the list of Contributing Authors:
   171  * with the following individual added to the list of Contributing Authors:
   283  *
   172  *
   284  *    Cosmin Truta
   173  *    Cosmin Truta
   285  *
   174  *
   363 
   252 
   364 /*
   253 /*
   365  * A "png_get_copyright" function is available, for convenient use in "about"
   254  * A "png_get_copyright" function is available, for convenient use in "about"
   366  * boxes and the like:
   255  * boxes and the like:
   367  *
   256  *
   368  * printf("%s",png_get_copyright(NULL));
   257  *     printf("%s",png_get_copyright(NULL));
   369  *
   258  *
   370  * Also, the PNG logo (in PNG format, of course) is supplied in the
   259  * Also, the PNG logo (in PNG format, of course) is supplied in the
   371  * files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
   260  * files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
   372  */
   261  */
   373 
   262 
   386 
   275 
   387 /*
   276 /*
   388  * Y2K compliance in libpng:
   277  * Y2K compliance in libpng:
   389  * =========================
   278  * =========================
   390  *
   279  *
   391  *    September 10, 2009
   280  *    January 3, 2010
   392  *
   281  *
   393  *    Since the PNG Development group is an ad-hoc body, we can't make
   282  *    Since the PNG Development group is an ad-hoc body, we can't make
   394  *    an official declaration.
   283  *    an official declaration.
   395  *
   284  *
   396  *    This is your unofficial assurance that libpng from version 0.71 and
   285  *    This is your unofficial assurance that libpng from version 0.71 and
   397  *    upward through 1.2.40 are Y2K compliant.  It is my belief that earlier
   286  *    upward through 1.4.0 are Y2K compliant.  It is my belief that earlier
   398  *    versions were also Y2K compliant.
   287  *    versions were also Y2K compliant.
   399  *
   288  *
   400  *    Libpng only has three year fields.  One is a 2-byte unsigned integer
   289  *    Libpng only has three year fields.  One is a 2-byte unsigned integer
   401  *    that will hold years up to 65535.  The other two hold the date in text
   290  *    that will hold years up to 65535.  The other two hold the date in text
   402  *    format, and will hold years up to 9999.
   291  *    format, and will hold years up to 9999.
   448  * with some code on which to build.  This file is useful for looking
   337  * with some code on which to build.  This file is useful for looking
   449  * at the actual function definitions and structure components.
   338  * at the actual function definitions and structure components.
   450  */
   339  */
   451 
   340 
   452 /* Version information for png.h - this should match the version in png.c */
   341 /* Version information for png.h - this should match the version in png.c */
   453 #define PNG_LIBPNG_VER_STRING "1.2.40"
   342 #define PNG_LIBPNG_VER_STRING "1.4.0"
   454 #define PNG_HEADER_VERSION_STRING \
   343 #define PNG_HEADER_VERSION_STRING \
   455    " libpng version 1.2.40 - September 10, 2009\n"
   344    " libpng version 1.4.0 - January 3, 2010\n"
   456 
   345 
   457 #define PNG_LIBPNG_VER_SONUM   0
   346 #define PNG_LIBPNG_VER_SONUM   14
   458 #define PNG_LIBPNG_VER_DLLNUM  13
   347 #define PNG_LIBPNG_VER_DLLNUM  14
   459 
   348 
   460 /* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
   349 /* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
   461 #define PNG_LIBPNG_VER_MAJOR   1
   350 #define PNG_LIBPNG_VER_MAJOR   1
   462 #define PNG_LIBPNG_VER_MINOR   2
   351 #define PNG_LIBPNG_VER_MINOR   4
   463 #define PNG_LIBPNG_VER_RELEASE 40
   352 #define PNG_LIBPNG_VER_RELEASE 0
   464 /* This should match the numeric part of the final component of
   353 /* This should match the numeric part of the final component of
   465  * PNG_LIBPNG_VER_STRING, omitting any leading zero:
   354  * PNG_LIBPNG_VER_STRING, omitting any leading zero:
   466  */
   355  */
   467 
   356 
   468 #define PNG_LIBPNG_VER_BUILD  0
   357 #define PNG_LIBPNG_VER_BUILD  0
   480 #define PNG_LIBPNG_BUILD_PRIVATE 16 /* Cannot be OR'ed with
   369 #define PNG_LIBPNG_BUILD_PRIVATE 16 /* Cannot be OR'ed with
   481                                        PNG_LIBPNG_BUILD_SPECIAL */
   370                                        PNG_LIBPNG_BUILD_SPECIAL */
   482 #define PNG_LIBPNG_BUILD_SPECIAL 32 /* Cannot be OR'ed with
   371 #define PNG_LIBPNG_BUILD_SPECIAL 32 /* Cannot be OR'ed with
   483                                        PNG_LIBPNG_BUILD_PRIVATE */
   372                                        PNG_LIBPNG_BUILD_PRIVATE */
   484 
   373 
   485 #define PNG_LIBPNG_BUILD_BASE_TYPE PNG_LIBPNG_BUILD_STABLE
   374 #define PNG_LIBPNG_BUILD_BASE_TYPE PNG_LIBPNG_BUILD_BETA
   486 
   375 
   487 /* Careful here.  At one time, Guy wanted to use 082, but that would be octal.
   376 /* Careful here.  At one time, Guy wanted to use 082, but that would be octal.
   488  * We must not include leading zeros.
   377  * We must not include leading zeros.
   489  * Versions 0.7 through 1.0.0 were in the range 0 to 100 here (only
   378  * Versions 0.7 through 1.0.0 were in the range 0 to 100 here (only
   490  * version 1.0.0 was mis-numbered 100 instead of 10000).  From
   379  * version 1.0.0 was mis-numbered 100 instead of 10000).  From
   491  * version 1.0.1 it's    xxyyzz, where x=major, y=minor, z=release
   380  * version 1.0.1 it's    xxyyzz, where x=major, y=minor, z=release
   492  */
   381  */
   493 #define PNG_LIBPNG_VER 10240 /* 1.2.40 */
   382 #define PNG_LIBPNG_VER 10400 /* 1.4.0 */
   494 
   383 
   495 #ifndef PNG_VERSION_INFO_ONLY
   384 #ifndef PNG_VERSION_INFO_ONLY
   496 /* Include the compression library's header */
   385 /* Include the compression library's header */
   497 #include "zlib.h"
   386 #include "zlib.h"
   498 #endif
   387 #endif
   499 
   388 
       
   389 #ifdef _AIX
       
   390 #define jmpbuf __jmpbuf
       
   391 #endif
       
   392 
   500 /* Include all user configurable info, including optional assembler routines */
   393 /* Include all user configurable info, including optional assembler routines */
   501 #include "pngconf.h"
   394 #include "pngconf.h"
   502 
   395 
   503 /*
   396 /*
   504  * Added at libpng-1.2.8 */
   397  * Added at libpng-1.2.8
   505 /* Ref MSDN: Private as priority over Special
   398  *
       
   399  * Ref MSDN: Private as priority over Special
   506  * VS_FF_PRIVATEBUILD File *was not* built using standard release
   400  * VS_FF_PRIVATEBUILD File *was not* built using standard release
   507  * procedures. If this value is given, the StringFileInfo block must
   401  * procedures. If this value is given, the StringFileInfo block must
   508  * contain a PrivateBuild string.
   402  * contain a PrivateBuild string.
   509  *
   403  *
   510  * VS_FF_SPECIALBUILD File *was* built by the original company using
   404  * VS_FF_SPECIALBUILD File *was* built by the original company using
   511  * standard release procedures but is a variation of the standard
   405  * standard release procedures but is a variation of the standard
   512  * file of the same version number. If this value is given, the
   406  * file of the same version number. If this value is given, the
   513  * StringFileInfo block must contain a SpecialBuild string.
   407  * StringFileInfo block must contain a SpecialBuild string.
   514  */
   408  */
   515 
   409 
   516 #if defined(PNG_USER_PRIVATEBUILD)
   410 #ifdef PNG_USER_PRIVATEBUILD
   517 #  define PNG_LIBPNG_BUILD_TYPE \
   411 #  define PNG_LIBPNG_BUILD_TYPE \
   518           (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_PRIVATE)
   412           (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_PRIVATE)
   519 #else
   413 #else
   520 #  if defined(PNG_LIBPNG_SPECIALBUILD)
   414 #  ifdef PNG_LIBPNG_SPECIALBUILD
   521 #    define PNG_LIBPNG_BUILD_TYPE \
   415 #    define PNG_LIBPNG_BUILD_TYPE \
   522             (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_SPECIAL)
   416             (PNG_LIBPNG_BUILD_BASE_TYPE | PNG_LIBPNG_BUILD_SPECIAL)
   523 #  else
   417 #  else
   524 #    define PNG_LIBPNG_BUILD_TYPE (PNG_LIBPNG_BUILD_BASE_TYPE)
   418 #    define PNG_LIBPNG_BUILD_TYPE (PNG_LIBPNG_BUILD_BASE_TYPE)
   525 #  endif
   419 #  endif
   536  * structure and type definitions.  The second section contains the external
   430  * structure and type definitions.  The second section contains the external
   537  * library functions, while the third has the internal library functions,
   431  * library functions, while the third has the internal library functions,
   538  * which applications aren't expected to use directly.
   432  * which applications aren't expected to use directly.
   539  */
   433  */
   540 
   434 
   541 #ifndef PNG_NO_TYPECAST_NULL
       
   542 #define int_p_NULL                (int *)NULL
       
   543 #define png_bytep_NULL            (png_bytep)NULL
       
   544 #define png_bytepp_NULL           (png_bytepp)NULL
       
   545 #define png_doublep_NULL          (png_doublep)NULL
       
   546 #define png_error_ptr_NULL        (png_error_ptr)NULL
       
   547 #define png_flush_ptr_NULL        (png_flush_ptr)NULL
       
   548 #define png_free_ptr_NULL         (png_free_ptr)NULL
       
   549 #define png_infopp_NULL           (png_infopp)NULL
       
   550 #define png_malloc_ptr_NULL       (png_malloc_ptr)NULL
       
   551 #define png_read_status_ptr_NULL  (png_read_status_ptr)NULL
       
   552 #define png_rw_ptr_NULL           (png_rw_ptr)NULL
       
   553 #define png_structp_NULL          (png_structp)NULL
       
   554 #define png_uint_16p_NULL         (png_uint_16p)NULL
       
   555 #define png_voidp_NULL            (png_voidp)NULL
       
   556 #define png_write_status_ptr_NULL (png_write_status_ptr)NULL
       
   557 #else
       
   558 #define int_p_NULL                NULL
       
   559 #define png_bytep_NULL            NULL
       
   560 #define png_bytepp_NULL           NULL
       
   561 #define png_doublep_NULL          NULL
       
   562 #define png_error_ptr_NULL        NULL
       
   563 #define png_flush_ptr_NULL        NULL
       
   564 #define png_free_ptr_NULL         NULL
       
   565 #define png_infopp_NULL           NULL
       
   566 #define png_malloc_ptr_NULL       NULL
       
   567 #define png_read_status_ptr_NULL  NULL
       
   568 #define png_rw_ptr_NULL           NULL
       
   569 #define png_structp_NULL          NULL
       
   570 #define png_uint_16p_NULL         NULL
       
   571 #define png_voidp_NULL            NULL
       
   572 #define png_write_status_ptr_NULL NULL
       
   573 #endif
       
   574 
       
   575 /* Variables declared in png.c - only it needs to define PNG_NO_EXTERN */
   435 /* Variables declared in png.c - only it needs to define PNG_NO_EXTERN */
   576 #if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN)
   436 #if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN)
   577 /* Version information for C files, stored in png.c.  This had better match
   437 /* Version information for C files, stored in png.c.  This had better match
   578  * the version above.
   438  * the version above.
   579  */
   439  */
   580 #ifdef PNG_USE_GLOBAL_ARRAYS
       
   581 PNG_EXPORT_VAR (PNG_CONST char) png_libpng_ver[18];
       
   582   /* Need room for 99.99.99beta99z */
       
   583 #else
       
   584 #define png_libpng_ver png_get_header_ver(NULL)
   440 #define png_libpng_ver png_get_header_ver(NULL)
   585 #endif
       
   586 
       
   587 #ifdef PNG_USE_GLOBAL_ARRAYS
       
   588 /* This was removed in version 1.0.5c */
       
   589 /* Structures to facilitate easy interlacing.  See png.c for more details */
       
   590 PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_start[7];
       
   591 PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_inc[7];
       
   592 PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_ystart[7];
       
   593 PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_yinc[7];
       
   594 PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_mask[7];
       
   595 PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_dsp_mask[7];
       
   596 /* This isn't currently used.  If you need it, see png.c for more details.
       
   597 PNG_EXPORT_VAR (PNG_CONST int FARDATA) png_pass_height[7];
       
   598 */
       
   599 #endif
       
   600 
   441 
   601 #endif /* PNG_NO_EXTERN */
   442 #endif /* PNG_NO_EXTERN */
   602 
   443 
   603 /* Three color definitions.  The order of the red, green, and blue, (and the
   444 /* Three color definitions.  The order of the red, green, and blue, (and the
   604  * exact size) is not important, although the size of the fields need to
   445  * exact size) is not important, although the size of the fields need to
   696 typedef png_text FAR * png_textp;
   537 typedef png_text FAR * png_textp;
   697 typedef png_text FAR * FAR * png_textpp;
   538 typedef png_text FAR * FAR * png_textpp;
   698 #endif
   539 #endif
   699 
   540 
   700 /* Supported compression types for text in PNG files (tEXt, and zTXt).
   541 /* Supported compression types for text in PNG files (tEXt, and zTXt).
   701  * The values of the PNG_TEXT_COMPRESSION_ defines should NOT be changed.
   542  * The values of the PNG_TEXT_COMPRESSION_ defines should NOT be changed. */
   702  */
       
   703 #define PNG_TEXT_COMPRESSION_NONE_WR -3
   543 #define PNG_TEXT_COMPRESSION_NONE_WR -3
   704 #define PNG_TEXT_COMPRESSION_zTXt_WR -2
   544 #define PNG_TEXT_COMPRESSION_zTXt_WR -2
   705 #define PNG_TEXT_COMPRESSION_NONE    -1
   545 #define PNG_TEXT_COMPRESSION_NONE    -1
   706 #define PNG_TEXT_COMPRESSION_zTXt     0
   546 #define PNG_TEXT_COMPRESSION_zTXt     0
   707 #define PNG_ITXT_COMPRESSION_NONE     1
   547 #define PNG_ITXT_COMPRESSION_NONE     1
   731 /* png_unknown_chunk is a structure to hold queued chunks for which there is
   571 /* png_unknown_chunk is a structure to hold queued chunks for which there is
   732  * no specific support.  The idea is that we can use this to queue
   572  * no specific support.  The idea is that we can use this to queue
   733  * up private chunks for output even though the library doesn't actually
   573  * up private chunks for output even though the library doesn't actually
   734  * know about their semantics.
   574  * know about their semantics.
   735  */
   575  */
   736 #define PNG_CHUNK_NAME_LENGTH 5
       
   737 typedef struct png_unknown_chunk_t
   576 typedef struct png_unknown_chunk_t
   738 {
   577 {
   739     png_byte name[PNG_CHUNK_NAME_LENGTH];
   578     png_byte name[5];
   740     png_byte *data;
   579     png_byte *data;
   741     png_size_t size;
   580     png_size_t size;
   742 
   581 
   743     /* libpng-using applications should NOT directly modify this byte. */
   582     /* libpng-using applications should NOT directly modify this byte. */
   744     png_byte location; /* mode of operation at read time */
   583     png_byte location; /* mode of operation at read time */
   787  * itxt_ptr structure argument, and the png_set_rows and png_set_unknowns
   626  * itxt_ptr structure argument, and the png_set_rows and png_set_unknowns
   788  * functions do not make their own copies.
   627  * functions do not make their own copies.
   789  */
   628  */
   790 typedef struct png_info_struct
   629 typedef struct png_info_struct
   791 {
   630 {
   792    /* The following are necessary for every PNG file */
   631    /* the following are necessary for every PNG file */
   793    png_uint_32 width;       /* width of image in pixels (from IHDR) */
   632    png_uint_32 width PNG_DEPSTRUCT;       /* width of image in pixels (from IHDR) */
   794    png_uint_32 height;      /* height of image in pixels (from IHDR) */
   633    png_uint_32 height PNG_DEPSTRUCT;      /* height of image in pixels (from IHDR) */
   795    png_uint_32 valid;       /* valid chunk data (see PNG_INFO_ below) */
   634    png_uint_32 valid PNG_DEPSTRUCT;       /* valid chunk data (see PNG_INFO_ below) */
   796    png_uint_32 rowbytes;    /* bytes needed to hold an untransformed row */
   635    png_size_t rowbytes PNG_DEPSTRUCT;     /* bytes needed to hold an untransformed row */
   797    png_colorp palette;      /* array of color values (valid & PNG_INFO_PLTE) */
   636    png_colorp palette PNG_DEPSTRUCT;      /* array of color values (valid & PNG_INFO_PLTE) */
   798    png_uint_16 num_palette; /* number of color entries in "palette" (PLTE) */
   637    png_uint_16 num_palette PNG_DEPSTRUCT; /* number of color entries in "palette" (PLTE) */
   799    png_uint_16 num_trans;   /* number of transparent palette color (tRNS) */
   638    png_uint_16 num_trans PNG_DEPSTRUCT;   /* number of transparent palette color (tRNS) */
   800    png_byte bit_depth;      /* 1, 2, 4, 8, or 16 bits/channel (from IHDR) */
   639    png_byte bit_depth PNG_DEPSTRUCT;      /* 1, 2, 4, 8, or 16 bits/channel (from IHDR) */
   801    png_byte color_type;     /* see PNG_COLOR_TYPE_ below (from IHDR) */
   640    png_byte color_type PNG_DEPSTRUCT;     /* see PNG_COLOR_TYPE_ below (from IHDR) */
   802    /* The following three should have been named *_method not *_type */
   641    /* The following three should have been named *_method not *_type */
   803    png_byte compression_type; /* must be PNG_COMPRESSION_TYPE_BASE (IHDR) */
   642    png_byte compression_type PNG_DEPSTRUCT; /* must be PNG_COMPRESSION_TYPE_BASE (IHDR) */
   804    png_byte filter_type;    /* must be PNG_FILTER_TYPE_BASE (from IHDR) */
   643    png_byte filter_type PNG_DEPSTRUCT;    /* must be PNG_FILTER_TYPE_BASE (from IHDR) */
   805    png_byte interlace_type; /* One of PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
   644    png_byte interlace_type PNG_DEPSTRUCT; /* One of PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
   806 
   645 
   807    /* The following is informational only on read, and not used on writes. */
   646    /* The following is informational only on read, and not used on writes. */
   808    png_byte channels;       /* number of data channels per pixel (1, 2, 3, 4) */
   647    png_byte channels PNG_DEPSTRUCT;       /* number of data channels per pixel (1, 2, 3, 4) */
   809    png_byte pixel_depth;    /* number of bits per pixel */
   648    png_byte pixel_depth PNG_DEPSTRUCT;    /* number of bits per pixel */
   810    png_byte spare_byte;     /* to align the data, and for future use */
   649    png_byte spare_byte PNG_DEPSTRUCT;     /* to align the data, and for future use */
   811    png_byte signature[8];   /* magic bytes read by libpng from start of file */
   650    png_byte signature[8] PNG_DEPSTRUCT;   /* magic bytes read by libpng from start of file */
   812 
   651 
   813    /* The rest of the data is optional.  If you are reading, check the
   652    /* The rest of the data is optional.  If you are reading, check the
   814     * valid field to see if the information in these are valid.  If you
   653     * valid field to see if the information in these are valid.  If you
   815     * are writing, set the valid field to those chunks you want written,
   654     * are writing, set the valid field to those chunks you want written,
   816     * and initialize the appropriate fields below.
   655     * and initialize the appropriate fields below.
   819 #if defined(PNG_gAMA_SUPPORTED) && defined(PNG_FLOATING_POINT_SUPPORTED)
   658 #if defined(PNG_gAMA_SUPPORTED) && defined(PNG_FLOATING_POINT_SUPPORTED)
   820    /* The gAMA chunk describes the gamma characteristics of the system
   659    /* The gAMA chunk describes the gamma characteristics of the system
   821     * on which the image was created, normally in the range [1.0, 2.5].
   660     * on which the image was created, normally in the range [1.0, 2.5].
   822     * Data is valid if (valid & PNG_INFO_gAMA) is non-zero.
   661     * Data is valid if (valid & PNG_INFO_gAMA) is non-zero.
   823     */
   662     */
   824    float gamma; /* gamma value of image, if (valid & PNG_INFO_gAMA) */
   663    float gamma PNG_DEPSTRUCT; /* gamma value of image, if (valid & PNG_INFO_gAMA) */
   825 #endif
   664 #endif
   826 
   665 
   827 #if defined(PNG_sRGB_SUPPORTED)
   666 #ifdef PNG_sRGB_SUPPORTED
   828     /* GR-P, 0.96a */
   667     /* GR-P, 0.96a */
   829     /* Data valid if (valid & PNG_INFO_sRGB) non-zero. */
   668     /* Data valid if (valid & PNG_INFO_sRGB) non-zero. */
   830    png_byte srgb_intent; /* sRGB rendering intent [0, 1, 2, or 3] */
   669    png_byte srgb_intent PNG_DEPSTRUCT; /* sRGB rendering intent [0, 1, 2, or 3] */
   831 #endif
   670 #endif
   832 
   671 
   833 #if defined(PNG_TEXT_SUPPORTED)
   672 #ifdef PNG_TEXT_SUPPORTED
   834    /* The tEXt, and zTXt chunks contain human-readable textual data in
   673    /* The tEXt, and zTXt chunks contain human-readable textual data in
   835     * uncompressed, compressed, and optionally compressed forms, respectively.
   674     * uncompressed, compressed, and optionally compressed forms, respectively.
   836     * The data in "text" is an array of pointers to uncompressed,
   675     * The data in "text" is an array of pointers to uncompressed,
   837     * null-terminated C strings. Each chunk has a keyword that describes the
   676     * null-terminated C strings. Each chunk has a keyword that describes the
   838     * textual data contained in that chunk.  Keywords are not required to be
   677     * textual data contained in that chunk.  Keywords are not required to be
   839     * unique, and the text string may be empty.  Any number of text chunks may
   678     * unique, and the text string may be empty.  Any number of text chunks may
   840     * be in an image.
   679     * be in an image.
   841     */
   680     */
   842    int num_text; /* number of comments read/to write */
   681    int num_text PNG_DEPSTRUCT; /* number of comments read/to write */
   843    int max_text; /* current size of text array */
   682    int max_text PNG_DEPSTRUCT; /* current size of text array */
   844    png_textp text; /* array of comments read/to write */
   683    png_textp text PNG_DEPSTRUCT; /* array of comments read/to write */
   845 #endif /* PNG_TEXT_SUPPORTED */
   684 #endif /* PNG_TEXT_SUPPORTED */
   846 
   685 
   847 #if defined(PNG_tIME_SUPPORTED)
   686 #ifdef PNG_tIME_SUPPORTED
   848    /* The tIME chunk holds the last time the displayed image data was
   687    /* The tIME chunk holds the last time the displayed image data was
   849     * modified.  See the png_time struct for the contents of this struct.
   688     * modified.  See the png_time struct for the contents of this struct.
   850     */
   689     */
   851    png_time mod_time;
   690    png_time mod_time PNG_DEPSTRUCT;
   852 #endif
   691 #endif
   853 
   692 
   854 #if defined(PNG_sBIT_SUPPORTED)
   693 #ifdef PNG_sBIT_SUPPORTED
   855    /* The sBIT chunk specifies the number of significant high-order bits
   694    /* The sBIT chunk specifies the number of significant high-order bits
   856     * in the pixel data.  Values are in the range [1, bit_depth], and are
   695     * in the pixel data.  Values are in the range [1, bit_depth], and are
   857     * only specified for the channels in the pixel data.  The contents of
   696     * only specified for the channels in the pixel data.  The contents of
   858     * the low-order bits is not specified.  Data is valid if
   697     * the low-order bits is not specified.  Data is valid if
   859     * (valid & PNG_INFO_sBIT) is non-zero.
   698     * (valid & PNG_INFO_sBIT) is non-zero.
   860     */
   699     */
   861    png_color_8 sig_bit; /* significant bits in color channels */
   700    png_color_8 sig_bit PNG_DEPSTRUCT; /* significant bits in color channels */
   862 #endif
   701 #endif
   863 
   702 
   864 #if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_EXPAND_SUPPORTED) || \
   703 #if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_EXPAND_SUPPORTED) || \
   865 defined(PNG_READ_BACKGROUND_SUPPORTED)
   704 defined(PNG_READ_BACKGROUND_SUPPORTED)
   866    /* The tRNS chunk supplies transparency data for paletted images and
   705    /* The tRNS chunk supplies transparency data for paletted images and
   870     * for the data are in the range [0, 255], ranging from fully transparent
   709     * for the data are in the range [0, 255], ranging from fully transparent
   871     * to fully opaque, respectively.  For non-paletted images, there is a
   710     * to fully opaque, respectively.  For non-paletted images, there is a
   872     * single color specified that should be treated as fully transparent.
   711     * single color specified that should be treated as fully transparent.
   873     * Data is valid if (valid & PNG_INFO_tRNS) is non-zero.
   712     * Data is valid if (valid & PNG_INFO_tRNS) is non-zero.
   874     */
   713     */
   875    png_bytep trans; /* transparent values for paletted image */
   714    png_bytep trans_alpha PNG_DEPSTRUCT;    /* alpha values for paletted image */
   876    png_color_16 trans_values; /* transparent color for non-palette image */
   715    png_color_16 trans_color PNG_DEPSTRUCT; /* transparent color for non-palette image */
   877 #endif
   716 #endif
   878 
   717 
   879 #if defined(PNG_bKGD_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
   718 #if defined(PNG_bKGD_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
   880    /* The bKGD chunk gives the suggested image background color if the
   719    /* The bKGD chunk gives the suggested image background color if the
   881     * display program does not have its own background color and the image
   720     * display program does not have its own background color and the image
   882     * is needs to composited onto a background before display.  The colors
   721     * is needs to composited onto a background before display.  The colors
   883     * in "background" are normally in the same color space/depth as the
   722     * in "background" are normally in the same color space/depth as the
   884     * pixel data.  Data is valid if (valid & PNG_INFO_bKGD) is non-zero.
   723     * pixel data.  Data is valid if (valid & PNG_INFO_bKGD) is non-zero.
   885     */
   724     */
   886    png_color_16 background;
   725    png_color_16 background PNG_DEPSTRUCT;
   887 #endif
   726 #endif
   888 
   727 
   889 #if defined(PNG_oFFs_SUPPORTED)
   728 #ifdef PNG_oFFs_SUPPORTED
   890    /* The oFFs chunk gives the offset in "offset_unit_type" units rightwards
   729    /* The oFFs chunk gives the offset in "offset_unit_type" units rightwards
   891     * and downwards from the top-left corner of the display, page, or other
   730     * and downwards from the top-left corner of the display, page, or other
   892     * application-specific co-ordinate space.  See the PNG_OFFSET_ defines
   731     * application-specific co-ordinate space.  See the PNG_OFFSET_ defines
   893     * below for the unit types.  Valid if (valid & PNG_INFO_oFFs) non-zero.
   732     * below for the unit types.  Valid if (valid & PNG_INFO_oFFs) non-zero.
   894     */
   733     */
   895    png_int_32 x_offset; /* x offset on page */
   734    png_int_32 x_offset PNG_DEPSTRUCT; /* x offset on page */
   896    png_int_32 y_offset; /* y offset on page */
   735    png_int_32 y_offset PNG_DEPSTRUCT; /* y offset on page */
   897    png_byte offset_unit_type; /* offset units type */
   736    png_byte offset_unit_type PNG_DEPSTRUCT; /* offset units type */
   898 #endif
   737 #endif
   899 
   738 
   900 #if defined(PNG_pHYs_SUPPORTED)
   739 #ifdef PNG_pHYs_SUPPORTED
   901    /* The pHYs chunk gives the physical pixel density of the image for
   740    /* The pHYs chunk gives the physical pixel density of the image for
   902     * display or printing in "phys_unit_type" units (see PNG_RESOLUTION_
   741     * display or printing in "phys_unit_type" units (see PNG_RESOLUTION_
   903     * defines below).  Data is valid if (valid & PNG_INFO_pHYs) is non-zero.
   742     * defines below).  Data is valid if (valid & PNG_INFO_pHYs) is non-zero.
   904     */
   743     */
   905    png_uint_32 x_pixels_per_unit; /* horizontal pixel density */
   744    png_uint_32 x_pixels_per_unit PNG_DEPSTRUCT; /* horizontal pixel density */
   906    png_uint_32 y_pixels_per_unit; /* vertical pixel density */
   745    png_uint_32 y_pixels_per_unit PNG_DEPSTRUCT; /* vertical pixel density */
   907    png_byte phys_unit_type; /* resolution type (see PNG_RESOLUTION_ below) */
   746    png_byte phys_unit_type PNG_DEPSTRUCT; /* resolution type (see PNG_RESOLUTION_ below) */
   908 #endif
   747 #endif
   909 
   748 
   910 #if defined(PNG_hIST_SUPPORTED)
   749 #ifdef PNG_hIST_SUPPORTED
   911    /* The hIST chunk contains the relative frequency or importance of the
   750    /* The hIST chunk contains the relative frequency or importance of the
   912     * various palette entries, so that a viewer can intelligently select a
   751     * various palette entries, so that a viewer can intelligently select a
   913     * reduced-color palette, if required.  Data is an array of "num_palette"
   752     * reduced-color palette, if required.  Data is an array of "num_palette"
   914     * values in the range [0,65535]. Data valid if (valid & PNG_INFO_hIST)
   753     * values in the range [0,65535]. Data valid if (valid & PNG_INFO_hIST)
   915     * is non-zero.
   754     * is non-zero.
   916     */
   755     */
   917    png_uint_16p hist;
   756    png_uint_16p hist PNG_DEPSTRUCT;
   918 #endif
   757 #endif
   919 
   758 
   920 #ifdef PNG_cHRM_SUPPORTED
   759 #ifdef PNG_cHRM_SUPPORTED
   921    /* The cHRM chunk describes the CIE color characteristics of the monitor
   760    /* The cHRM chunk describes the CIE color characteristics of the monitor
   922     * on which the PNG was created.  This data allows the viewer to do gamut
   761     * on which the PNG was created.  This data allows the viewer to do gamut
   923     * mapping of the input image to ensure that the viewer sees the same
   762     * mapping of the input image to ensure that the viewer sees the same
   924     * colors in the image as the creator.  Values are in the range
   763     * colors in the image as the creator.  Values are in the range
   925     * [0.0, 0.8].  Data valid if (valid & PNG_INFO_cHRM) non-zero.
   764     * [0.0, 0.8].  Data valid if (valid & PNG_INFO_cHRM) non-zero.
   926     */
   765     */
   927 #ifdef PNG_FLOATING_POINT_SUPPORTED
   766 #ifdef PNG_FLOATING_POINT_SUPPORTED
   928    float x_white;
   767    float x_white PNG_DEPSTRUCT;
   929    float y_white;
   768    float y_white PNG_DEPSTRUCT;
   930    float x_red;
   769    float x_red PNG_DEPSTRUCT;
   931    float y_red;
   770    float y_red PNG_DEPSTRUCT;
   932    float x_green;
   771    float x_green PNG_DEPSTRUCT;
   933    float y_green;
   772    float y_green PNG_DEPSTRUCT;
   934    float x_blue;
   773    float x_blue PNG_DEPSTRUCT;
   935    float y_blue;
   774    float y_blue PNG_DEPSTRUCT;
   936 #endif
   775 #endif
   937 #endif
   776 #endif
   938 
   777 
   939 #if defined(PNG_pCAL_SUPPORTED)
   778 #ifdef PNG_pCAL_SUPPORTED
   940    /* The pCAL chunk describes a transformation between the stored pixel
   779    /* The pCAL chunk describes a transformation between the stored pixel
   941     * values and original physical data values used to create the image.
   780     * values and original physical data values used to create the image.
   942     * The integer range [0, 2^bit_depth - 1] maps to the floating-point
   781     * The integer range [0, 2^bit_depth - 1] maps to the floating-point
   943     * range given by [pcal_X0, pcal_X1], and are further transformed by a
   782     * range given by [pcal_X0, pcal_X1], and are further transformed by a
   944     * (possibly non-linear) transformation function given by "pcal_type"
   783     * (possibly non-linear) transformation function given by "pcal_type"
   946     * defines below, and the PNG-Group's PNG extensions document for a
   785     * defines below, and the PNG-Group's PNG extensions document for a
   947     * complete description of the transformations and how they should be
   786     * complete description of the transformations and how they should be
   948     * implemented, and for a description of the ASCII parameter strings.
   787     * implemented, and for a description of the ASCII parameter strings.
   949     * Data values are valid if (valid & PNG_INFO_pCAL) non-zero.
   788     * Data values are valid if (valid & PNG_INFO_pCAL) non-zero.
   950     */
   789     */
   951    png_charp pcal_purpose;  /* pCAL chunk description string */
   790    png_charp pcal_purpose PNG_DEPSTRUCT;  /* pCAL chunk description string */
   952    png_int_32 pcal_X0;      /* minimum value */
   791    png_int_32 pcal_X0 PNG_DEPSTRUCT;      /* minimum value */
   953    png_int_32 pcal_X1;      /* maximum value */
   792    png_int_32 pcal_X1 PNG_DEPSTRUCT;      /* maximum value */
   954    png_charp pcal_units;    /* Latin-1 string giving physical units */
   793    png_charp pcal_units PNG_DEPSTRUCT;    /* Latin-1 string giving physical units */
   955    png_charpp pcal_params;  /* ASCII strings containing parameter values */
   794    png_charpp pcal_params PNG_DEPSTRUCT;  /* ASCII strings containing parameter values */
   956    png_byte pcal_type;      /* equation type (see PNG_EQUATION_ below) */
   795    png_byte pcal_type PNG_DEPSTRUCT;      /* equation type (see PNG_EQUATION_ below) */
   957    png_byte pcal_nparams;   /* number of parameters given in pcal_params */
   796    png_byte pcal_nparams PNG_DEPSTRUCT;   /* number of parameters given in pcal_params */
   958 #endif
   797 #endif
   959 
   798 
   960 /* New members added in libpng-1.0.6 */
   799 /* New members added in libpng-1.0.6 */
   961 #ifdef PNG_FREE_ME_SUPPORTED
   800    png_uint_32 free_me PNG_DEPSTRUCT;     /* flags items libpng is responsible for freeing */
   962    png_uint_32 free_me;     /* flags items libpng is responsible for freeing */
       
   963 #endif
       
   964 
   801 
   965 #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) || \
   802 #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) || \
   966  defined(PNG_HANDLE_AS_UNKNOWN_SUPPORTED)
   803  defined(PNG_HANDLE_AS_UNKNOWN_SUPPORTED)
   967    /* Storage for unknown chunks that the library doesn't recognize. */
   804    /* Storage for unknown chunks that the library doesn't recognize. */
   968    png_unknown_chunkp unknown_chunks;
   805    png_unknown_chunkp unknown_chunks PNG_DEPSTRUCT;
   969    png_size_t unknown_chunks_num;
   806    png_size_t unknown_chunks_num PNG_DEPSTRUCT;
   970 #endif
   807 #endif
   971 
   808 
   972 #if defined(PNG_iCCP_SUPPORTED)
   809 #ifdef PNG_iCCP_SUPPORTED
   973    /* iCCP chunk data. */
   810    /* iCCP chunk data. */
   974    png_charp iccp_name;     /* profile name */
   811    png_charp iccp_name PNG_DEPSTRUCT;     /* profile name */
   975    png_charp iccp_profile;  /* International Color Consortium profile data */
   812    png_charp iccp_profile PNG_DEPSTRUCT;  /* International Color Consortium profile data */
   976                             /* Note to maintainer: should be png_bytep */
   813                             /* Note to maintainer: should be png_bytep */
   977    png_uint_32 iccp_proflen;  /* ICC profile data length */
   814    png_uint_32 iccp_proflen PNG_DEPSTRUCT;  /* ICC profile data length */
   978    png_byte iccp_compression; /* Always zero */
   815    png_byte iccp_compression PNG_DEPSTRUCT; /* Always zero */
   979 #endif
   816 #endif
   980 
   817 
   981 #if defined(PNG_sPLT_SUPPORTED)
   818 #ifdef PNG_sPLT_SUPPORTED
   982    /* Data on sPLT chunks (there may be more than one). */
   819    /* Data on sPLT chunks (there may be more than one). */
   983    png_sPLT_tp splt_palettes;
   820    png_sPLT_tp splt_palettes PNG_DEPSTRUCT;
   984    png_uint_32 splt_palettes_num;
   821    png_uint_32 splt_palettes_num PNG_DEPSTRUCT;
   985 #endif
   822 #endif
   986 
   823 
   987 #if defined(PNG_sCAL_SUPPORTED)
   824 #ifdef PNG_sCAL_SUPPORTED
   988    /* The sCAL chunk describes the actual physical dimensions of the
   825    /* The sCAL chunk describes the actual physical dimensions of the
   989     * subject matter of the graphic.  The chunk contains a unit specification
   826     * subject matter of the graphic.  The chunk contains a unit specification
   990     * a byte value, and two ASCII strings representing floating-point
   827     * a byte value, and two ASCII strings representing floating-point
   991     * values.  The values are width and height corresponsing to one pixel
   828     * values.  The values are width and height corresponsing to one pixel
   992     * in the image.  This external representation is converted to double
   829     * in the image.  This external representation is converted to double
   993     * here.  Data values are valid if (valid & PNG_INFO_sCAL) is non-zero.
   830     * here.  Data values are valid if (valid & PNG_INFO_sCAL) is non-zero.
   994     */
   831     */
   995    png_byte scal_unit;         /* unit of physical scale */
   832    png_byte scal_unit PNG_DEPSTRUCT;         /* unit of physical scale */
   996 #ifdef PNG_FLOATING_POINT_SUPPORTED
   833 #ifdef PNG_FLOATING_POINT_SUPPORTED
   997    double scal_pixel_width;    /* width of one pixel */
   834    double scal_pixel_width PNG_DEPSTRUCT;    /* width of one pixel */
   998    double scal_pixel_height;   /* height of one pixel */
   835    double scal_pixel_height PNG_DEPSTRUCT;   /* height of one pixel */
   999 #endif
   836 #endif
  1000 #ifdef PNG_FIXED_POINT_SUPPORTED
   837 #ifdef PNG_FIXED_POINT_SUPPORTED
  1001    png_charp scal_s_width;     /* string containing height */
   838    png_charp scal_s_width PNG_DEPSTRUCT;     /* string containing height */
  1002    png_charp scal_s_height;    /* string containing width */
   839    png_charp scal_s_height PNG_DEPSTRUCT;    /* string containing width */
  1003 #endif
   840 #endif
  1004 #endif
   841 #endif
  1005 
   842 
  1006 #if defined(PNG_INFO_IMAGE_SUPPORTED)
   843 #ifdef PNG_INFO_IMAGE_SUPPORTED
  1007    /* Memory has been allocated if (valid & PNG_ALLOCATED_INFO_ROWS) non-zero */
   844    /* Memory has been allocated if (valid & PNG_ALLOCATED_INFO_ROWS) non-zero */
  1008    /* Data valid if (valid & PNG_INFO_IDAT) non-zero */
   845    /* Data valid if (valid & PNG_INFO_IDAT) non-zero */
  1009    png_bytepp row_pointers;        /* the image bits */
   846    png_bytepp row_pointers PNG_DEPSTRUCT;        /* the image bits */
  1010 #endif
   847 #endif
  1011 
   848 
  1012 #if defined(PNG_FIXED_POINT_SUPPORTED) && defined(PNG_gAMA_SUPPORTED)
   849 #if defined(PNG_FIXED_POINT_SUPPORTED) && defined(PNG_gAMA_SUPPORTED)
  1013    png_fixed_point int_gamma; /* gamma of image, if (valid & PNG_INFO_gAMA) */
   850    png_fixed_point int_gamma PNG_DEPSTRUCT; /* gamma of image, if (valid & PNG_INFO_gAMA) */
  1014 #endif
   851 #endif
  1015 
   852 
  1016 #if defined(PNG_cHRM_SUPPORTED) && defined(PNG_FIXED_POINT_SUPPORTED)
   853 #if defined(PNG_cHRM_SUPPORTED) && defined(PNG_FIXED_POINT_SUPPORTED)
  1017    png_fixed_point int_x_white;
   854    png_fixed_point int_x_white PNG_DEPSTRUCT;
  1018    png_fixed_point int_y_white;
   855    png_fixed_point int_y_white PNG_DEPSTRUCT;
  1019    png_fixed_point int_x_red;
   856    png_fixed_point int_x_red PNG_DEPSTRUCT;
  1020    png_fixed_point int_y_red;
   857    png_fixed_point int_y_red PNG_DEPSTRUCT;
  1021    png_fixed_point int_x_green;
   858    png_fixed_point int_x_green PNG_DEPSTRUCT;
  1022    png_fixed_point int_y_green;
   859    png_fixed_point int_y_green PNG_DEPSTRUCT;
  1023    png_fixed_point int_x_blue;
   860    png_fixed_point int_x_blue PNG_DEPSTRUCT;
  1024    png_fixed_point int_y_blue;
   861    png_fixed_point int_y_blue PNG_DEPSTRUCT;
  1025 #endif
   862 #endif
  1026 
   863 
  1027 } png_info;
   864 } png_info;
  1028 
   865 
  1029 typedef png_info FAR * png_infop;
   866 typedef png_info FAR * png_infop;
  1031 
   868 
  1032 /* Maximum positive integer used in PNG is (2^31)-1 */
   869 /* Maximum positive integer used in PNG is (2^31)-1 */
  1033 #define PNG_UINT_31_MAX ((png_uint_32)0x7fffffffL)
   870 #define PNG_UINT_31_MAX ((png_uint_32)0x7fffffffL)
  1034 #define PNG_UINT_32_MAX ((png_uint_32)(-1))
   871 #define PNG_UINT_32_MAX ((png_uint_32)(-1))
  1035 #define PNG_SIZE_MAX ((png_size_t)(-1))
   872 #define PNG_SIZE_MAX ((png_size_t)(-1))
  1036 #if defined(PNG_1_0_X) || defined (PNG_1_2_X)
       
  1037 /* PNG_MAX_UINT is deprecated; use PNG_UINT_31_MAX instead. */
       
  1038 #define PNG_MAX_UINT PNG_UINT_31_MAX
       
  1039 #endif
       
  1040 
   873 
  1041 /* These describe the color_type field in png_info. */
   874 /* These describe the color_type field in png_info. */
  1042 /* color type masks */
   875 /* color type masks */
  1043 #define PNG_COLOR_MASK_PALETTE    1
   876 #define PNG_COLOR_MASK_PALETTE    1
  1044 #define PNG_COLOR_MASK_COLOR      2
   877 #define PNG_COLOR_MASK_COLOR      2
  1131  * the routines for other purposes.
   964  * the routines for other purposes.
  1132  */
   965  */
  1133 typedef struct png_row_info_struct
   966 typedef struct png_row_info_struct
  1134 {
   967 {
  1135    png_uint_32 width; /* width of row */
   968    png_uint_32 width; /* width of row */
  1136    png_uint_32 rowbytes; /* number of bytes in row */
   969    png_size_t rowbytes; /* number of bytes in row */
  1137    png_byte color_type; /* color type of row */
   970    png_byte color_type; /* color type of row */
  1138    png_byte bit_depth; /* bit depth of row */
   971    png_byte bit_depth; /* bit depth of row */
  1139    png_byte channels; /* number of channels (1, 2, 3, or 4) */
   972    png_byte channels; /* number of channels (1, 2, 3, or 4) */
  1140    png_byte pixel_depth; /* bits per pixel (depth * channels) */
   973    png_byte pixel_depth; /* bits per pixel (depth * channels) */
  1141 } png_row_info;
   974 } png_row_info;
  1166 typedef void (PNGAPI *png_progressive_row_ptr) PNGARG((png_structp, png_bytep,
   999 typedef void (PNGAPI *png_progressive_row_ptr) PNGARG((png_structp, png_bytep,
  1167    png_uint_32, int));
  1000    png_uint_32, int));
  1168 #endif
  1001 #endif
  1169 
  1002 
  1170 #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
  1003 #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
  1171     defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \
  1004     defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
  1172     defined(PNG_LEGACY_SUPPORTED)
       
  1173 typedef void (PNGAPI *png_user_transform_ptr) PNGARG((png_structp,
  1005 typedef void (PNGAPI *png_user_transform_ptr) PNGARG((png_structp,
  1174     png_row_infop, png_bytep));
  1006     png_row_infop, png_bytep));
  1175 #endif
  1007 #endif
  1176 
  1008 
  1177 #if defined(PNG_USER_CHUNKS_SUPPORTED)
  1009 #ifdef PNG_USER_CHUNKS_SUPPORTED
  1178 typedef int (PNGAPI *png_user_chunk_ptr) PNGARG((png_structp, png_unknown_chunkp));
  1010 typedef int (PNGAPI *png_user_chunk_ptr) PNGARG((png_structp, png_unknown_chunkp));
  1179 #endif
  1011 #endif
  1180 #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
  1012 #ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED
  1181 typedef void (PNGAPI *png_unknown_chunk_ptr) PNGARG((png_structp));
  1013 typedef void (PNGAPI *png_unknown_chunk_ptr) PNGARG((png_structp));
       
  1014 #endif
       
  1015 #ifdef PNG_SETJMP_SUPPORTED
       
  1016 /* This must match the function definition in <setjmp.h>, and the
       
  1017  * application must include this before png.h to obtain the definition
       
  1018  * of jmp_buf.
       
  1019  */
       
  1020 typedef void (PNGAPI *png_longjmp_ptr) PNGARG((jmp_buf, int));
  1182 #endif
  1021 #endif
  1183 
  1022 
  1184 /* Transform masks for the high-level interface */
  1023 /* Transform masks for the high-level interface */
  1185 #define PNG_TRANSFORM_IDENTITY       0x0000    /* read and write */
  1024 #define PNG_TRANSFORM_IDENTITY       0x0000    /* read and write */
  1186 #define PNG_TRANSFORM_STRIP_16       0x0001    /* read only */
  1025 #define PNG_TRANSFORM_STRIP_16       0x0001    /* read only */
  1192 #define PNG_TRANSFORM_SHIFT          0x0040    /* read and write */
  1031 #define PNG_TRANSFORM_SHIFT          0x0040    /* read and write */
  1193 #define PNG_TRANSFORM_BGR            0x0080    /* read and write */
  1032 #define PNG_TRANSFORM_BGR            0x0080    /* read and write */
  1194 #define PNG_TRANSFORM_SWAP_ALPHA     0x0100    /* read and write */
  1033 #define PNG_TRANSFORM_SWAP_ALPHA     0x0100    /* read and write */
  1195 #define PNG_TRANSFORM_SWAP_ENDIAN    0x0200    /* read and write */
  1034 #define PNG_TRANSFORM_SWAP_ENDIAN    0x0200    /* read and write */
  1196 #define PNG_TRANSFORM_INVERT_ALPHA   0x0400    /* read and write */
  1035 #define PNG_TRANSFORM_INVERT_ALPHA   0x0400    /* read and write */
  1197 #define PNG_TRANSFORM_STRIP_FILLER   0x0800    /* write only, deprecated */
  1036 #define PNG_TRANSFORM_STRIP_FILLER   0x0800    /* write only */
  1198 /* Added to libpng-1.2.34 */
  1037 /* Added to libpng-1.2.34 */
  1199 #define PNG_TRANSFORM_STRIP_FILLER_BEFORE 0x0800  /* write only */
  1038 #define PNG_TRANSFORM_STRIP_FILLER_BEFORE PNG_TRANSFORM_STRIP_FILLER
  1200 #define PNG_TRANSFORM_STRIP_FILLER_AFTER  0x1000  /* write only */
  1039 #define PNG_TRANSFORM_STRIP_FILLER_AFTER 0x1000 /* write only */
       
  1040 /* Added to libpng-1.4.0 */
       
  1041 #define PNG_TRANSFORM_GRAY_TO_RGB   0x2000      /* read only */
  1201 
  1042 
  1202 /* Flags for MNG supported features */
  1043 /* Flags for MNG supported features */
  1203 #define PNG_FLAG_MNG_EMPTY_PLTE     0x01
  1044 #define PNG_FLAG_MNG_EMPTY_PLTE     0x01
  1204 #define PNG_FLAG_MNG_FILTER_64      0x04
  1045 #define PNG_FLAG_MNG_FILTER_64      0x04
  1205 #define PNG_ALL_MNG_FEATURES        0x05
  1046 #define PNG_ALL_MNG_FEATURES        0x05
  1206 
  1047 
  1207 typedef png_voidp (*png_malloc_ptr) PNGARG((png_structp, png_size_t));
  1048 typedef png_voidp (*png_malloc_ptr) PNGARG((png_structp, png_alloc_size_t));
  1208 typedef void (*png_free_ptr) PNGARG((png_structp, png_voidp));
  1049 typedef void (*png_free_ptr) PNGARG((png_structp, png_voidp));
  1209 
  1050 
  1210 /* The structure that holds the information to read and write PNG files.
  1051 /* The structure that holds the information to read and write PNG files.
  1211  * The only people who need to care about what is inside of this are the
  1052  * The only people who need to care about what is inside of this are the
  1212  * people who will be modifying the library for their own special needs.
  1053  * people who will be modifying the library for their own special needs.
  1215  */
  1056  */
  1216 
  1057 
  1217 struct png_struct_def
  1058 struct png_struct_def
  1218 {
  1059 {
  1219 #ifdef PNG_SETJMP_SUPPORTED
  1060 #ifdef PNG_SETJMP_SUPPORTED
  1220    jmp_buf jmpbuf;            /* used in png_error */
  1061    jmp_buf jmpbuf PNG_DEPSTRUCT;            /* used in png_error */
  1221 #endif
  1062    png_longjmp_ptr longjmp_fn PNG_DEPSTRUCT;/* setjmp non-local goto function. */
  1222    png_error_ptr error_fn;    /* function for printing errors and aborting */
  1063 #endif
  1223    png_error_ptr warning_fn;  /* function for printing warnings */
  1064    png_error_ptr error_fn PNG_DEPSTRUCT;    /* function for printing errors and aborting */
  1224    png_voidp error_ptr;       /* user supplied struct for error functions */
  1065    png_error_ptr warning_fn PNG_DEPSTRUCT;  /* function for printing warnings */
  1225    png_rw_ptr write_data_fn;  /* function for writing output data */
  1066    png_voidp error_ptr PNG_DEPSTRUCT;       /* user supplied struct for error functions */
  1226    png_rw_ptr read_data_fn;   /* function for reading input data */
  1067    png_rw_ptr write_data_fn PNG_DEPSTRUCT;  /* function for writing output data */
  1227    png_voidp io_ptr;          /* ptr to application struct for I/O functions */
  1068    png_rw_ptr read_data_fn PNG_DEPSTRUCT;   /* function for reading input data */
  1228 
  1069    png_voidp io_ptr PNG_DEPSTRUCT;          /* ptr to application struct for I/O functions */
  1229 #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED)
  1070 
  1230    png_user_transform_ptr read_user_transform_fn; /* user read transform */
  1071 #ifdef PNG_READ_USER_TRANSFORM_SUPPORTED
  1231 #endif
  1072    png_user_transform_ptr read_user_transform_fn PNG_DEPSTRUCT; /* user read transform */
  1232 
  1073 #endif
  1233 #if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
  1074 
  1234    png_user_transform_ptr write_user_transform_fn; /* user write transform */
  1075 #ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED
       
  1076    png_user_transform_ptr write_user_transform_fn PNG_DEPSTRUCT; /* user write transform */
  1235 #endif
  1077 #endif
  1236 
  1078 
  1237 /* These were added in libpng-1.0.2 */
  1079 /* These were added in libpng-1.0.2 */
  1238 #if defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)
  1080 #ifdef PNG_USER_TRANSFORM_PTR_SUPPORTED
  1239 #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
  1081 #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
  1240     defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
  1082     defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
  1241    png_voidp user_transform_ptr; /* user supplied struct for user transform */
  1083    png_voidp user_transform_ptr PNG_DEPSTRUCT; /* user supplied struct for user transform */
  1242    png_byte user_transform_depth;    /* bit depth of user transformed pixels */
  1084    png_byte user_transform_depth PNG_DEPSTRUCT;    /* bit depth of user transformed pixels */
  1243    png_byte user_transform_channels; /* channels in user transformed pixels */
  1085    png_byte user_transform_channels PNG_DEPSTRUCT; /* channels in user transformed pixels */
  1244 #endif
  1086 #endif
  1245 #endif
  1087 #endif
  1246 
  1088 
  1247    png_uint_32 mode;          /* tells us where we are in the PNG file */
  1089    png_uint_32 mode PNG_DEPSTRUCT;          /* tells us where we are in the PNG file */
  1248    png_uint_32 flags;         /* flags indicating various things to libpng */
  1090    png_uint_32 flags PNG_DEPSTRUCT;         /* flags indicating various things to libpng */
  1249    png_uint_32 transformations; /* which transformations to perform */
  1091    png_uint_32 transformations PNG_DEPSTRUCT; /* which transformations to perform */
  1250 
  1092 
  1251    z_stream zstream;          /* pointer to decompression structure (below) */
  1093    z_stream zstream PNG_DEPSTRUCT;          /* pointer to decompression structure (below) */
  1252    png_bytep zbuf;            /* buffer for zlib */
  1094    png_bytep zbuf PNG_DEPSTRUCT;            /* buffer for zlib */
  1253    png_size_t zbuf_size;      /* size of zbuf */
  1095    png_size_t zbuf_size PNG_DEPSTRUCT;      /* size of zbuf */
  1254    int zlib_level;            /* holds zlib compression level */
  1096    int zlib_level PNG_DEPSTRUCT;            /* holds zlib compression level */
  1255    int zlib_method;           /* holds zlib compression method */
  1097    int zlib_method PNG_DEPSTRUCT;           /* holds zlib compression method */
  1256    int zlib_window_bits;      /* holds zlib compression window bits */
  1098    int zlib_window_bits PNG_DEPSTRUCT;      /* holds zlib compression window bits */
  1257    int zlib_mem_level;        /* holds zlib compression memory level */
  1099    int zlib_mem_level PNG_DEPSTRUCT;        /* holds zlib compression memory level */
  1258    int zlib_strategy;         /* holds zlib compression strategy */
  1100    int zlib_strategy PNG_DEPSTRUCT;         /* holds zlib compression strategy */
  1259 
  1101 
  1260    png_uint_32 width;         /* width of image in pixels */
  1102    png_uint_32 width PNG_DEPSTRUCT;         /* width of image in pixels */
  1261    png_uint_32 height;        /* height of image in pixels */
  1103    png_uint_32 height PNG_DEPSTRUCT;        /* height of image in pixels */
  1262    png_uint_32 num_rows;      /* number of rows in current pass */
  1104    png_uint_32 num_rows PNG_DEPSTRUCT;      /* number of rows in current pass */
  1263    png_uint_32 usr_width;     /* width of row at start of write */
  1105    png_uint_32 usr_width PNG_DEPSTRUCT;     /* width of row at start of write */
  1264    png_uint_32 rowbytes;      /* size of row in bytes */
  1106    png_size_t rowbytes PNG_DEPSTRUCT;       /* size of row in bytes */
  1265    png_uint_32 irowbytes;     /* size of current interlaced row in bytes */
  1107    png_size_t irowbytes PNG_DEPSTRUCT;      /* size of current interlaced row in bytes */
  1266    png_uint_32 iwidth;        /* width of current interlaced row in pixels */
  1108    png_uint_32 iwidth PNG_DEPSTRUCT;        /* width of current interlaced row in pixels */
  1267    png_uint_32 row_number;    /* current row in interlace pass */
  1109    png_uint_32 row_number PNG_DEPSTRUCT;    /* current row in interlace pass */
  1268    png_bytep prev_row;        /* buffer to save previous (unfiltered) row */
  1110    png_bytep prev_row PNG_DEPSTRUCT;        /* buffer to save previous (unfiltered) row */
  1269    png_bytep row_buf;         /* buffer to save current (unfiltered) row */
  1111    png_bytep row_buf PNG_DEPSTRUCT;         /* buffer to save current (unfiltered) row */
  1270 #ifndef PNG_NO_WRITE_FILTER
  1112    png_bytep sub_row PNG_DEPSTRUCT;         /* buffer to save "sub" row when filtering */
  1271    png_bytep sub_row;         /* buffer to save "sub" row when filtering */
  1113    png_bytep up_row PNG_DEPSTRUCT;          /* buffer to save "up" row when filtering */
  1272    png_bytep up_row;          /* buffer to save "up" row when filtering */
  1114    png_bytep avg_row PNG_DEPSTRUCT;         /* buffer to save "avg" row when filtering */
  1273    png_bytep avg_row;         /* buffer to save "avg" row when filtering */
  1115    png_bytep paeth_row PNG_DEPSTRUCT;       /* buffer to save "Paeth" row when filtering */
  1274    png_bytep paeth_row;       /* buffer to save "Paeth" row when filtering */
  1116    png_row_info row_info PNG_DEPSTRUCT;     /* used for transformation routines */
  1275 #endif
  1117 
  1276    png_row_info row_info;     /* used for transformation routines */
  1118    png_uint_32 idat_size PNG_DEPSTRUCT;     /* current IDAT size for read */
  1277 
  1119    png_uint_32 crc PNG_DEPSTRUCT;           /* current chunk CRC value */
  1278    png_uint_32 idat_size;     /* current IDAT size for read */
  1120    png_colorp palette PNG_DEPSTRUCT;        /* palette from the input file */
  1279    png_uint_32 crc;           /* current chunk CRC value */
  1121    png_uint_16 num_palette PNG_DEPSTRUCT;   /* number of color entries in palette */
  1280    png_colorp palette;        /* palette from the input file */
  1122    png_uint_16 num_trans PNG_DEPSTRUCT;     /* number of transparency values */
  1281    png_uint_16 num_palette;   /* number of color entries in palette */
  1123    png_byte chunk_name[5] PNG_DEPSTRUCT;    /* null-terminated name of current chunk */
  1282    png_uint_16 num_trans;     /* number of transparency values */
  1124    png_byte compression PNG_DEPSTRUCT;      /* file compression type (always 0) */
  1283    png_byte chunk_name[5];    /* null-terminated name of current chunk */
  1125    png_byte filter PNG_DEPSTRUCT;           /* file filter type (always 0) */
  1284    png_byte compression;      /* file compression type (always 0) */
  1126    png_byte interlaced PNG_DEPSTRUCT;       /* PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
  1285    png_byte filter;           /* file filter type (always 0) */
  1127    png_byte pass PNG_DEPSTRUCT;             /* current interlace pass (0 - 6) */
  1286    png_byte interlaced;       /* PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
  1128    png_byte do_filter PNG_DEPSTRUCT;        /* row filter flags (see PNG_FILTER_ below ) */
  1287    png_byte pass;             /* current interlace pass (0 - 6) */
  1129    png_byte color_type PNG_DEPSTRUCT;       /* color type of file */
  1288    png_byte do_filter;        /* row filter flags (see PNG_FILTER_ below ) */
  1130    png_byte bit_depth PNG_DEPSTRUCT;        /* bit depth of file */
  1289    png_byte color_type;       /* color type of file */
  1131    png_byte usr_bit_depth PNG_DEPSTRUCT;    /* bit depth of users row */
  1290    png_byte bit_depth;        /* bit depth of file */
  1132    png_byte pixel_depth PNG_DEPSTRUCT;      /* number of bits per pixel */
  1291    png_byte usr_bit_depth;    /* bit depth of users row */
  1133    png_byte channels PNG_DEPSTRUCT;         /* number of channels in file */
  1292    png_byte pixel_depth;      /* number of bits per pixel */
  1134    png_byte usr_channels PNG_DEPSTRUCT;     /* channels at start of write */
  1293    png_byte channels;         /* number of channels in file */
  1135    png_byte sig_bytes PNG_DEPSTRUCT;        /* magic bytes read/written from start of file */
  1294    png_byte usr_channels;     /* channels at start of write */
       
  1295    png_byte sig_bytes;        /* magic bytes read/written from start of file */
       
  1296 
  1136 
  1297 #if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
  1137 #if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
  1298 #ifdef PNG_LEGACY_SUPPORTED
  1138    png_uint_16 filler PNG_DEPSTRUCT;           /* filler bytes for pixel expansion */
  1299    png_byte filler;           /* filler byte for pixel expansion */
  1139 #endif
  1300 #else
  1140 
  1301    png_uint_16 filler;           /* filler bytes for pixel expansion */
  1141 #ifdef PNG_bKGD_SUPPORTED
  1302 #endif
  1142    png_byte background_gamma_type PNG_DEPSTRUCT;
  1303 #endif
       
  1304 
       
  1305 #if defined(PNG_bKGD_SUPPORTED)
       
  1306    png_byte background_gamma_type;
       
  1307 #  ifdef PNG_FLOATING_POINT_SUPPORTED
  1143 #  ifdef PNG_FLOATING_POINT_SUPPORTED
  1308    float background_gamma;
  1144    float background_gamma PNG_DEPSTRUCT;
  1309 #  endif
  1145 #  endif
  1310    png_color_16 background;   /* background color in screen gamma space */
  1146    png_color_16 background PNG_DEPSTRUCT;   /* background color in screen gamma space */
  1311 #if defined(PNG_READ_GAMMA_SUPPORTED)
  1147 #ifdef PNG_READ_GAMMA_SUPPORTED
  1312    png_color_16 background_1; /* background normalized to gamma 1.0 */
  1148    png_color_16 background_1 PNG_DEPSTRUCT; /* background normalized to gamma 1.0 */
  1313 #endif
  1149 #endif
  1314 #endif /* PNG_bKGD_SUPPORTED */
  1150 #endif /* PNG_bKGD_SUPPORTED */
  1315 
  1151 
  1316 #if defined(PNG_WRITE_FLUSH_SUPPORTED)
  1152 #ifdef PNG_WRITE_FLUSH_SUPPORTED
  1317    png_flush_ptr output_flush_fn; /* Function for flushing output */
  1153    png_flush_ptr output_flush_fn PNG_DEPSTRUCT; /* Function for flushing output */
  1318    png_uint_32 flush_dist;    /* how many rows apart to flush, 0 - no flush */
  1154    png_uint_32 flush_dist PNG_DEPSTRUCT;    /* how many rows apart to flush, 0 - no flush */
  1319    png_uint_32 flush_rows;    /* number of rows written since last flush */
  1155    png_uint_32 flush_rows PNG_DEPSTRUCT;    /* number of rows written since last flush */
  1320 #endif
  1156 #endif
  1321 
  1157 
  1322 #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
  1158 #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
  1323    int gamma_shift;      /* number of "insignificant" bits 16-bit gamma */
  1159    int gamma_shift PNG_DEPSTRUCT;      /* number of "insignificant" bits 16-bit gamma */
  1324 #ifdef PNG_FLOATING_POINT_SUPPORTED
  1160 #ifdef PNG_FLOATING_POINT_SUPPORTED
  1325    float gamma;          /* file gamma value */
  1161    float gamma PNG_DEPSTRUCT;          /* file gamma value */
  1326    float screen_gamma;   /* screen gamma value (display_exponent) */
  1162    float screen_gamma PNG_DEPSTRUCT;   /* screen gamma value (display_exponent) */
  1327 #endif
  1163 #endif
  1328 #endif
  1164 #endif
  1329 
  1165 
  1330 #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
  1166 #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
  1331    png_bytep gamma_table;     /* gamma table for 8-bit depth files */
  1167    png_bytep gamma_table PNG_DEPSTRUCT;     /* gamma table for 8-bit depth files */
  1332    png_bytep gamma_from_1;    /* converts from 1.0 to screen */
  1168    png_bytep gamma_from_1 PNG_DEPSTRUCT;    /* converts from 1.0 to screen */
  1333    png_bytep gamma_to_1;      /* converts from file to 1.0 */
  1169    png_bytep gamma_to_1 PNG_DEPSTRUCT;      /* converts from file to 1.0 */
  1334    png_uint_16pp gamma_16_table; /* gamma table for 16-bit depth files */
  1170    png_uint_16pp gamma_16_table PNG_DEPSTRUCT; /* gamma table for 16-bit depth files */
  1335    png_uint_16pp gamma_16_from_1; /* converts from 1.0 to screen */
  1171    png_uint_16pp gamma_16_from_1 PNG_DEPSTRUCT; /* converts from 1.0 to screen */
  1336    png_uint_16pp gamma_16_to_1; /* converts from file to 1.0 */
  1172    png_uint_16pp gamma_16_to_1 PNG_DEPSTRUCT; /* converts from file to 1.0 */
  1337 #endif
  1173 #endif
  1338 
  1174 
  1339 #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_sBIT_SUPPORTED)
  1175 #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_sBIT_SUPPORTED)
  1340    png_color_8 sig_bit;       /* significant bits in each available channel */
  1176    png_color_8 sig_bit PNG_DEPSTRUCT;       /* significant bits in each available channel */
  1341 #endif
  1177 #endif
  1342 
  1178 
  1343 #if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
  1179 #if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
  1344    png_color_8 shift;         /* shift for significant bit tranformation */
  1180    png_color_8 shift PNG_DEPSTRUCT;         /* shift for significant bit tranformation */
  1345 #endif
  1181 #endif
  1346 
  1182 
  1347 #if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) \
  1183 #if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) \
  1348  || defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
  1184  || defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
  1349    png_bytep trans;           /* transparency values for paletted files */
  1185    png_bytep trans_alpha PNG_DEPSTRUCT;           /* alpha values for paletted files */
  1350    png_color_16 trans_values; /* transparency values for non-paletted files */
  1186    png_color_16 trans_color PNG_DEPSTRUCT;  /* transparent color for non-paletted files */
  1351 #endif
  1187 #endif
  1352 
  1188 
  1353    png_read_status_ptr read_row_fn;   /* called after each row is decoded */
  1189    png_read_status_ptr read_row_fn PNG_DEPSTRUCT;   /* called after each row is decoded */
  1354    png_write_status_ptr write_row_fn; /* called after each row is encoded */
  1190    png_write_status_ptr write_row_fn PNG_DEPSTRUCT; /* called after each row is encoded */
  1355 #ifdef PNG_PROGRESSIVE_READ_SUPPORTED
  1191 #ifdef PNG_PROGRESSIVE_READ_SUPPORTED
  1356    png_progressive_info_ptr info_fn; /* called after header data fully read */
  1192    png_progressive_info_ptr info_fn PNG_DEPSTRUCT; /* called after header data fully read */
  1357    png_progressive_row_ptr row_fn;   /* called after each prog. row is decoded */
  1193    png_progressive_row_ptr row_fn PNG_DEPSTRUCT;   /* called after each prog. row is decoded */
  1358    png_progressive_end_ptr end_fn;   /* called after image is complete */
  1194    png_progressive_end_ptr end_fn PNG_DEPSTRUCT;   /* called after image is complete */
  1359    png_bytep save_buffer_ptr;        /* current location in save_buffer */
  1195    png_bytep save_buffer_ptr PNG_DEPSTRUCT;        /* current location in save_buffer */
  1360    png_bytep save_buffer;            /* buffer for previously read data */
  1196    png_bytep save_buffer PNG_DEPSTRUCT;            /* buffer for previously read data */
  1361    png_bytep current_buffer_ptr;     /* current location in current_buffer */
  1197    png_bytep current_buffer_ptr PNG_DEPSTRUCT;     /* current location in current_buffer */
  1362    png_bytep current_buffer;         /* buffer for recently used data */
  1198    png_bytep current_buffer PNG_DEPSTRUCT;         /* buffer for recently used data */
  1363    png_uint_32 push_length;          /* size of current input chunk */
  1199    png_uint_32 push_length PNG_DEPSTRUCT;          /* size of current input chunk */
  1364    png_uint_32 skip_length;          /* bytes to skip in input data */
  1200    png_uint_32 skip_length PNG_DEPSTRUCT;          /* bytes to skip in input data */
  1365    png_size_t save_buffer_size;      /* amount of data now in save_buffer */
  1201    png_size_t save_buffer_size PNG_DEPSTRUCT;      /* amount of data now in save_buffer */
  1366    png_size_t save_buffer_max;       /* total size of save_buffer */
  1202    png_size_t save_buffer_max PNG_DEPSTRUCT;       /* total size of save_buffer */
  1367    png_size_t buffer_size;           /* total amount of available input data */
  1203    png_size_t buffer_size PNG_DEPSTRUCT;           /* total amount of available input data */
  1368    png_size_t current_buffer_size;   /* amount of data now in current_buffer */
  1204    png_size_t current_buffer_size PNG_DEPSTRUCT;   /* amount of data now in current_buffer */
  1369    int process_mode;                 /* what push library is currently doing */
  1205    int process_mode PNG_DEPSTRUCT;                 /* what push library is currently doing */
  1370    int cur_palette;                  /* current push library palette index */
  1206    int cur_palette PNG_DEPSTRUCT;                  /* current push library palette index */
  1371 
  1207 
  1372 #  if defined(PNG_TEXT_SUPPORTED)
  1208 #  ifdef PNG_TEXT_SUPPORTED
  1373      png_size_t current_text_size;   /* current size of text input data */
  1209      png_size_t current_text_size PNG_DEPSTRUCT;   /* current size of text input data */
  1374      png_size_t current_text_left;   /* how much text left to read in input */
  1210      png_size_t current_text_left PNG_DEPSTRUCT;   /* how much text left to read in input */
  1375      png_charp current_text;         /* current text chunk buffer */
  1211      png_charp current_text PNG_DEPSTRUCT;         /* current text chunk buffer */
  1376      png_charp current_text_ptr;     /* current location in current_text */
  1212      png_charp current_text_ptr PNG_DEPSTRUCT;     /* current location in current_text */
  1377 #  endif /* PNG_TEXT_SUPPORTED */
  1213 #  endif /* PNG_PROGRESSIVE_READ_SUPPORTED && PNG_TEXT_SUPPORTED */
       
  1214 
  1378 #endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
  1215 #endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
  1379 
  1216 
  1380 #if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__)
  1217 #if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__)
  1381 /* for the Borland special 64K segment handler */
  1218 /* For the Borland special 64K segment handler */
  1382    png_bytepp offset_table_ptr;
  1219    png_bytepp offset_table_ptr PNG_DEPSTRUCT;
  1383    png_bytep offset_table;
  1220    png_bytep offset_table PNG_DEPSTRUCT;
  1384    png_uint_16 offset_table_number;
  1221    png_uint_16 offset_table_number PNG_DEPSTRUCT;
  1385    png_uint_16 offset_table_count;
  1222    png_uint_16 offset_table_count PNG_DEPSTRUCT;
  1386    png_uint_16 offset_table_count_free;
  1223    png_uint_16 offset_table_count_free PNG_DEPSTRUCT;
  1387 #endif
  1224 #endif
  1388 
  1225 
  1389 #if defined(PNG_READ_DITHER_SUPPORTED)
  1226 #ifdef PNG_READ_DITHER_SUPPORTED
  1390    png_bytep palette_lookup;         /* lookup table for dithering */
  1227    png_bytep palette_lookup PNG_DEPSTRUCT;         /* lookup table for dithering */
  1391    png_bytep dither_index;           /* index translation for palette files */
  1228    png_bytep dither_index PNG_DEPSTRUCT;           /* index translation for palette files */
  1392 #endif
  1229 #endif
  1393 
  1230 
  1394 #if defined(PNG_READ_DITHER_SUPPORTED) || defined(PNG_hIST_SUPPORTED)
  1231 #if defined(PNG_READ_DITHER_SUPPORTED) || defined(PNG_hIST_SUPPORTED)
  1395    png_uint_16p hist;                /* histogram */
  1232    png_uint_16p hist PNG_DEPSTRUCT;                /* histogram */
  1396 #endif
  1233 #endif
  1397 
  1234 
  1398 #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED)
  1235 #ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
  1399    png_byte heuristic_method;        /* heuristic for row filter selection */
  1236    png_byte heuristic_method PNG_DEPSTRUCT;        /* heuristic for row filter selection */
  1400    png_byte num_prev_filters;        /* number of weights for previous rows */
  1237    png_byte num_prev_filters PNG_DEPSTRUCT;        /* number of weights for previous rows */
  1401    png_bytep prev_filters;           /* filter type(s) of previous row(s) */
  1238    png_bytep prev_filters PNG_DEPSTRUCT;           /* filter type(s) of previous row(s) */
  1402    png_uint_16p filter_weights;      /* weight(s) for previous line(s) */
  1239    png_uint_16p filter_weights PNG_DEPSTRUCT;      /* weight(s) for previous line(s) */
  1403    png_uint_16p inv_filter_weights;  /* 1/weight(s) for previous line(s) */
  1240    png_uint_16p inv_filter_weights PNG_DEPSTRUCT;  /* 1/weight(s) for previous line(s) */
  1404    png_uint_16p filter_costs;        /* relative filter calculation cost */
  1241    png_uint_16p filter_costs PNG_DEPSTRUCT;        /* relative filter calculation cost */
  1405    png_uint_16p inv_filter_costs;    /* 1/relative filter calculation cost */
  1242    png_uint_16p inv_filter_costs PNG_DEPSTRUCT;    /* 1/relative filter calculation cost */
  1406 #endif
  1243 #endif
  1407 
  1244 
  1408 #if defined(PNG_TIME_RFC1123_SUPPORTED)
  1245 #ifdef PNG_TIME_RFC1123_SUPPORTED
  1409    png_charp time_buffer;            /* String to hold RFC 1123 time text */
  1246    png_charp time_buffer PNG_DEPSTRUCT;            /* String to hold RFC 1123 time text */
  1410 #endif
  1247 #endif
  1411 
  1248 
  1412 /* New members added in libpng-1.0.6 */
  1249 /* New members added in libpng-1.0.6 */
  1413 
  1250 
  1414 #ifdef PNG_FREE_ME_SUPPORTED
  1251    png_uint_32 free_me PNG_DEPSTRUCT;     /* flags items libpng is responsible for freeing */
  1415    png_uint_32 free_me;   /* flags items libpng is responsible for freeing */
  1252 
  1416 #endif
  1253 #ifdef PNG_USER_CHUNKS_SUPPORTED
  1417 
  1254    png_voidp user_chunk_ptr PNG_DEPSTRUCT;
  1418 #if defined(PNG_USER_CHUNKS_SUPPORTED)
  1255    png_user_chunk_ptr read_user_chunk_fn PNG_DEPSTRUCT; /* user read chunk handler */
  1419    png_voidp user_chunk_ptr;
       
  1420    png_user_chunk_ptr read_user_chunk_fn; /* user read chunk handler */
       
  1421 #endif
  1256 #endif
  1422 
  1257 
  1423 #ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
  1258 #ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
  1424    int num_chunk_list;
  1259    int num_chunk_list PNG_DEPSTRUCT;
  1425    png_bytep chunk_list;
  1260    png_bytep chunk_list PNG_DEPSTRUCT;
  1426 #endif
  1261 #endif
  1427 
  1262 
  1428 /* New members added in libpng-1.0.3 */
  1263 /* New members added in libpng-1.0.3 */
  1429 #if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
  1264 #ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
  1430    png_byte rgb_to_gray_status;
  1265    png_byte rgb_to_gray_status PNG_DEPSTRUCT;
  1431    /* These were changed from png_byte in libpng-1.0.6 */
  1266    /* These were changed from png_byte in libpng-1.0.6 */
  1432    png_uint_16 rgb_to_gray_red_coeff;
  1267    png_uint_16 rgb_to_gray_red_coeff PNG_DEPSTRUCT;
  1433    png_uint_16 rgb_to_gray_green_coeff;
  1268    png_uint_16 rgb_to_gray_green_coeff PNG_DEPSTRUCT;
  1434    png_uint_16 rgb_to_gray_blue_coeff;
  1269    png_uint_16 rgb_to_gray_blue_coeff PNG_DEPSTRUCT;
  1435 #endif
  1270 #endif
  1436 
  1271 
  1437 /* New member added in libpng-1.0.4 (renamed in 1.0.9) */
  1272 /* New member added in libpng-1.0.4 (renamed in 1.0.9) */
  1438 #if defined(PNG_MNG_FEATURES_SUPPORTED) || \
  1273 #if defined(PNG_MNG_FEATURES_SUPPORTED) || \
  1439     defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \
  1274     defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \
  1440     defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED)
  1275     defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED)
  1441 /* Changed from png_byte to png_uint_32 at version 1.2.0 */
  1276 /* Changed from png_byte to png_uint_32 at version 1.2.0 */
  1442 #ifdef PNG_1_0_X
  1277    png_uint_32 mng_features_permitted PNG_DEPSTRUCT;
  1443    png_byte mng_features_permitted;
       
  1444 #else
       
  1445    png_uint_32 mng_features_permitted;
       
  1446 #endif /* PNG_1_0_X */
       
  1447 #endif
  1278 #endif
  1448 
  1279 
  1449 /* New member added in libpng-1.0.7 */
  1280 /* New member added in libpng-1.0.7 */
  1450 #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
  1281 #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
  1451    png_fixed_point int_gamma;
  1282    png_fixed_point int_gamma PNG_DEPSTRUCT;
  1452 #endif
  1283 #endif
  1453 
  1284 
  1454 /* New member added in libpng-1.0.9, ifdef'ed out in 1.0.12, enabled in 1.2.0 */
  1285 /* New member added in libpng-1.0.9, ifdef'ed out in 1.0.12, enabled in 1.2.0 */
  1455 #if defined(PNG_MNG_FEATURES_SUPPORTED)
  1286 #ifdef PNG_MNG_FEATURES_SUPPORTED
  1456    png_byte filter_type;
  1287    png_byte filter_type PNG_DEPSTRUCT;
  1457 #endif
       
  1458 
       
  1459 #if defined(PNG_1_0_X)
       
  1460 /* New member added in libpng-1.0.10, ifdef'ed out in 1.2.0 */
       
  1461    png_uint_32 row_buf_size;
       
  1462 #endif
  1288 #endif
  1463 
  1289 
  1464 /* New members added in libpng-1.2.0 */
  1290 /* New members added in libpng-1.2.0 */
  1465 #if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
       
  1466 #  if !defined(PNG_1_0_X)
       
  1467 #    if defined(PNG_MMX_CODE_SUPPORTED)
       
  1468    png_byte     mmx_bitdepth_threshold;
       
  1469    png_uint_32  mmx_rowbytes_threshold;
       
  1470 #    endif
       
  1471    png_uint_32  asm_flags;
       
  1472 #  endif
       
  1473 #endif
       
  1474 
  1291 
  1475 /* New members added in libpng-1.0.2 but first enabled by default in 1.2.0 */
  1292 /* New members added in libpng-1.0.2 but first enabled by default in 1.2.0 */
  1476 #ifdef PNG_USER_MEM_SUPPORTED
  1293 #ifdef PNG_USER_MEM_SUPPORTED
  1477    png_voidp mem_ptr;            /* user supplied struct for mem functions */
  1294    png_voidp mem_ptr PNG_DEPSTRUCT;                /* user supplied struct for mem functions */
  1478    png_malloc_ptr malloc_fn;     /* function for allocating memory */
  1295    png_malloc_ptr malloc_fn PNG_DEPSTRUCT;         /* function for allocating memory */
  1479    png_free_ptr free_fn;         /* function for freeing memory */
  1296    png_free_ptr free_fn PNG_DEPSTRUCT;             /* function for freeing memory */
  1480 #endif
  1297 #endif
  1481 
  1298 
  1482 /* New member added in libpng-1.0.13 and 1.2.0 */
  1299 /* New member added in libpng-1.0.13 and 1.2.0 */
  1483    png_bytep big_row_buf;        /* buffer to save current (unfiltered) row */
  1300    png_bytep big_row_buf PNG_DEPSTRUCT;         /* buffer to save current (unfiltered) row */
  1484 
  1301 
  1485 #if defined(PNG_READ_DITHER_SUPPORTED)
  1302 #ifdef PNG_READ_DITHER_SUPPORTED
  1486 /* The following three members were added at version 1.0.14 and 1.2.4 */
  1303 /* The following three members were added at version 1.0.14 and 1.2.4 */
  1487    png_bytep dither_sort;        /* working sort array */
  1304    png_bytep dither_sort PNG_DEPSTRUCT;            /* working sort array */
  1488    png_bytep index_to_palette;   /* where the original index currently is */
  1305    png_bytep index_to_palette PNG_DEPSTRUCT;       /* where the original index currently is */
  1489                                  /* in the palette */
  1306                                      /* in the palette */
  1490    png_bytep palette_to_index;   /* which original index points to this */
  1307    png_bytep palette_to_index PNG_DEPSTRUCT;       /* which original index points to this */
  1491                                  /* palette color */
  1308                                      /* palette color */
  1492 #endif
  1309 #endif
  1493 
  1310 
  1494 /* New members added in libpng-1.0.16 and 1.2.6 */
  1311 /* New members added in libpng-1.0.16 and 1.2.6 */
  1495    png_byte compression_type;
  1312    png_byte compression_type PNG_DEPSTRUCT;
  1496 
  1313 
  1497 #ifdef PNG_SET_USER_LIMITS_SUPPORTED
  1314 #ifdef PNG_SET_USER_LIMITS_SUPPORTED
  1498    png_uint_32 user_width_max;
  1315    png_uint_32 user_width_max PNG_DEPSTRUCT;
  1499    png_uint_32 user_height_max;
  1316    png_uint_32 user_height_max PNG_DEPSTRUCT;
       
  1317    /* Added in libpng-1.4.0: Total number of sPLT, text, and unknown
       
  1318     * chunks that can be stored (0x7fffffff means unlimited).
       
  1319     */
       
  1320    png_uint_32 user_chunk_cache_max PNG_DEPSTRUCT;
  1500 #endif
  1321 #endif
  1501 
  1322 
  1502 /* New member added in libpng-1.0.25 and 1.2.17 */
  1323 /* New member added in libpng-1.0.25 and 1.2.17 */
  1503 #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
  1324 #ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED
  1504    /* Storage for unknown chunk that the library doesn't recognize. */
  1325    /* Storage for unknown chunk that the library doesn't recognize. */
  1505    png_unknown_chunk unknown_chunk;
  1326    png_unknown_chunk unknown_chunk PNG_DEPSTRUCT;
  1506 #endif
  1327 #endif
  1507 
  1328 
  1508 /* New members added in libpng-1.2.26 */
  1329 /* New members added in libpng-1.2.26 */
  1509   png_uint_32 old_big_row_buf_size, old_prev_row_size;
  1330   png_uint_32 old_big_row_buf_size PNG_DEPSTRUCT;
       
  1331   png_uint_32 old_prev_row_size PNG_DEPSTRUCT;
  1510 
  1332 
  1511 /* New member added in libpng-1.2.30 */
  1333 /* New member added in libpng-1.2.30 */
  1512   png_charp chunkdata;  /* buffer for reading chunk data */
  1334   png_charp chunkdata PNG_DEPSTRUCT;  /* buffer for reading chunk data */
  1513 
  1335 
       
  1336 /* New member added in libpng-1.4.0 */
       
  1337 #ifdef PNG_IO_STATE_SUPPORTED
       
  1338    png_uint_32 io_state PNG_DEPSTRUCT;
       
  1339 #endif
  1514 };
  1340 };
  1515 
  1341 
  1516 
  1342 
  1517 /* This triggers a compiler error in png.c, if png.c and png.h
  1343 /* This triggers a compiler error in png.c, if png.c and png.h
  1518  * do not agree upon the version number.
  1344  * do not agree upon the version number.
  1519  */
  1345  */
  1520 typedef png_structp version_1_2_40;
  1346 typedef png_structp version_1_4_0;
  1521 
  1347 
  1522 typedef png_struct FAR * FAR * png_structpp;
  1348 typedef png_struct FAR * FAR * png_structpp;
  1523 
  1349 
  1524 /* Here are the function definitions most commonly used.  This is not
  1350 /* Here are the function definitions most commonly used.  This is not
  1525  * the place to find out how to use libpng.  See libpng.txt for the
  1351  * the place to find out how to use libpng.  See libpng.txt for the
  1542  * start > 7 will always fail (ie return non-zero).
  1368  * start > 7 will always fail (ie return non-zero).
  1543  */
  1369  */
  1544 extern PNG_EXPORT(int,png_sig_cmp) PNGARG((png_bytep sig, png_size_t start,
  1370 extern PNG_EXPORT(int,png_sig_cmp) PNGARG((png_bytep sig, png_size_t start,
  1545    png_size_t num_to_check));
  1371    png_size_t num_to_check));
  1546 
  1372 
  1547 /* Simple signature checking function.  This is the same as calling
       
  1548  * png_check_sig(sig, n) := !png_sig_cmp(sig, 0, n).
       
  1549  */
       
  1550 extern PNG_EXPORT(int,png_check_sig) PNGARG((png_bytep sig, int num));
       
  1551 
       
  1552 /* Allocate and initialize png_ptr struct for reading, and any other memory. */
  1373 /* Allocate and initialize png_ptr struct for reading, and any other memory. */
  1553 extern PNG_EXPORT(png_structp,png_create_read_struct)
  1374 extern PNG_EXPORT(png_structp,png_create_read_struct)
  1554    PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
  1375    PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
  1555    png_error_ptr error_fn, png_error_ptr warn_fn));
  1376    png_error_ptr error_fn, png_error_ptr warn_fn)) PNG_ALLOCATED;
  1556 
  1377 
  1557 /* Allocate and initialize png_ptr struct for writing, and any other memory */
  1378 /* Allocate and initialize png_ptr struct for writing, and any other memory */
  1558 extern PNG_EXPORT(png_structp,png_create_write_struct)
  1379 extern PNG_EXPORT(png_structp,png_create_write_struct)
  1559    PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
  1380    PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
  1560    png_error_ptr error_fn, png_error_ptr warn_fn));
  1381    png_error_ptr error_fn, png_error_ptr warn_fn)) PNG_ALLOCATED;
  1561 
  1382 
  1562 #ifdef PNG_WRITE_SUPPORTED
  1383 #ifdef PNG_WRITE_SUPPORTED
  1563 extern PNG_EXPORT(png_uint_32,png_get_compression_buffer_size)
  1384 extern PNG_EXPORT(png_size_t,png_get_compression_buffer_size)
  1564    PNGARG((png_structp png_ptr));
  1385    PNGARG((png_structp png_ptr));
  1565 #endif
  1386 #endif
  1566 
  1387 
  1567 #ifdef PNG_WRITE_SUPPORTED
  1388 #ifdef PNG_WRITE_SUPPORTED
  1568 extern PNG_EXPORT(void,png_set_compression_buffer_size)
  1389 extern PNG_EXPORT(void,png_set_compression_buffer_size)
  1569    PNGARG((png_structp png_ptr, png_uint_32 size));
  1390    PNGARG((png_structp png_ptr, png_size_t size));
       
  1391 #endif
       
  1392 
       
  1393 /* Moved from pngconf.h in 1.4.0 and modified to ensure setjmp/longjmp
       
  1394  * match up.
       
  1395  */
       
  1396 #ifdef PNG_SETJMP_SUPPORTED
       
  1397 /* This function returns the jmp_buf built in to *png_ptr.  It must be
       
  1398  * supplied with an appropriate 'longjmp' function to use on that jmp_buf
       
  1399  * unless the default error function is overridden in which case NULL is
       
  1400  * acceptable.  The size of the jmp_buf is checked against the actual size
       
  1401  * allocated by the library - the call will return NULL on a mismatch
       
  1402  * indicating an ABI mismatch.
       
  1403  */
       
  1404 extern PNG_EXPORT(jmp_buf*, png_set_longjmp_fn)
       
  1405    PNGARG((png_structp png_ptr, png_longjmp_ptr longjmp_fn, size_t jmp_buf_size));
       
  1406 #  define png_jmpbuf(png_ptr) \
       
  1407    (*png_set_longjmp_fn((png_ptr), longjmp, sizeof (jmp_buf)))
       
  1408 #else
       
  1409 #  define png_jmpbuf(png_ptr) \
       
  1410    (LIBPNG_WAS_COMPILED_WITH__PNG_NO_SETJMP)
  1570 #endif
  1411 #endif
  1571 
  1412 
  1572 /* Reset the compression stream */
  1413 /* Reset the compression stream */
  1573 extern PNG_EXPORT(int,png_reset_zstream) PNGARG((png_structp png_ptr));
  1414 extern PNG_EXPORT(int,png_reset_zstream) PNGARG((png_structp png_ptr));
  1574 
  1415 
  1575 /* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */
  1416 /* New functions added in libpng-1.0.2 (not enabled by default until 1.2.0) */
  1576 #ifdef PNG_USER_MEM_SUPPORTED
  1417 #ifdef PNG_USER_MEM_SUPPORTED
  1577 extern PNG_EXPORT(png_structp,png_create_read_struct_2)
  1418 extern PNG_EXPORT(png_structp,png_create_read_struct_2)
  1578    PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
  1419    PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
  1579    png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr,
  1420    png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr,
  1580    png_malloc_ptr malloc_fn, png_free_ptr free_fn));
  1421    png_malloc_ptr malloc_fn, png_free_ptr free_fn)) PNG_ALLOCATED;
  1581 extern PNG_EXPORT(png_structp,png_create_write_struct_2)
  1422 extern PNG_EXPORT(png_structp,png_create_write_struct_2)
  1582    PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
  1423    PNGARG((png_const_charp user_png_ver, png_voidp error_ptr,
  1583    png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr,
  1424    png_error_ptr error_fn, png_error_ptr warn_fn, png_voidp mem_ptr,
  1584    png_malloc_ptr malloc_fn, png_free_ptr free_fn));
  1425    png_malloc_ptr malloc_fn, png_free_ptr free_fn)) PNG_ALLOCATED;
  1585 #endif
  1426 #endif
       
  1427 
       
  1428 /* Write the PNG file signature. */
       
  1429 extern PNG_EXPORT(void,png_write_sig) PNGARG((png_structp png_ptr));
  1586 
  1430 
  1587 /* Write a PNG chunk - size, type, (optional) data, CRC. */
  1431 /* Write a PNG chunk - size, type, (optional) data, CRC. */
  1588 extern PNG_EXPORT(void,png_write_chunk) PNGARG((png_structp png_ptr,
  1432 extern PNG_EXPORT(void,png_write_chunk) PNGARG((png_structp png_ptr,
  1589    png_bytep chunk_name, png_bytep data, png_size_t length));
  1433    png_bytep chunk_name, png_bytep data, png_size_t length));
  1590 
  1434 
  1599 /* Finish a chunk started with png_write_chunk_start() (includes CRC). */
  1443 /* Finish a chunk started with png_write_chunk_start() (includes CRC). */
  1600 extern PNG_EXPORT(void,png_write_chunk_end) PNGARG((png_structp png_ptr));
  1444 extern PNG_EXPORT(void,png_write_chunk_end) PNGARG((png_structp png_ptr));
  1601 
  1445 
  1602 /* Allocate and initialize the info structure */
  1446 /* Allocate and initialize the info structure */
  1603 extern PNG_EXPORT(png_infop,png_create_info_struct)
  1447 extern PNG_EXPORT(png_infop,png_create_info_struct)
  1604    PNGARG((png_structp png_ptr));
  1448    PNGARG((png_structp png_ptr)) PNG_ALLOCATED;
  1605 
       
  1606 #if defined(PNG_1_0_X) || defined (PNG_1_2_X)
       
  1607 /* Initialize the info structure (old interface - DEPRECATED) */
       
  1608 extern PNG_EXPORT(void,png_info_init) PNGARG((png_infop info_ptr));
       
  1609 #undef png_info_init
       
  1610 #define png_info_init(info_ptr) png_info_init_3(&info_ptr,\
       
  1611     png_sizeof(png_info));
       
  1612 #endif
       
  1613 
  1449 
  1614 extern PNG_EXPORT(void,png_info_init_3) PNGARG((png_infopp info_ptr,
  1450 extern PNG_EXPORT(void,png_info_init_3) PNGARG((png_infopp info_ptr,
  1615     png_size_t png_info_struct_size));
  1451     png_size_t png_info_struct_size));
  1616 
  1452 
  1617 /* Writes all the PNG information before the image. */
  1453 /* Writes all the PNG information before the image. */
  1618 extern PNG_EXPORT(void,png_write_info_before_PLTE) PNGARG((png_structp png_ptr,
  1454 extern PNG_EXPORT(void,png_write_info_before_PLTE) PNGARG((png_structp png_ptr,
  1619    png_infop info_ptr));
  1455    png_infop info_ptr));
  1620 extern PNG_EXPORT(void,png_write_info) PNGARG((png_structp png_ptr,
  1456 extern PNG_EXPORT(void,png_write_info) PNGARG((png_structp png_ptr,
  1621    png_infop info_ptr));
  1457    png_infop info_ptr));
  1622 
  1458 
  1623 #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
  1459 #ifdef PNG_SEQUENTIAL_READ_SUPPORTED
  1624 /* Read the information before the actual image data. */
  1460 /* Read the information before the actual image data. */
  1625 extern PNG_EXPORT(void,png_read_info) PNGARG((png_structp png_ptr,
  1461 extern PNG_EXPORT(void,png_read_info) PNGARG((png_structp png_ptr,
  1626    png_infop info_ptr));
  1462    png_infop info_ptr));
  1627 #endif
  1463 #endif
  1628 
  1464 
  1629 #if defined(PNG_TIME_RFC1123_SUPPORTED)
  1465 #ifdef PNG_TIME_RFC1123_SUPPORTED
  1630 extern PNG_EXPORT(png_charp,png_convert_to_rfc1123)
  1466 extern PNG_EXPORT(png_charp,png_convert_to_rfc1123)
  1631    PNGARG((png_structp png_ptr, png_timep ptime));
  1467    PNGARG((png_structp png_ptr, png_timep ptime));
  1632 #endif
  1468 #endif
  1633 
  1469 
  1634 #if !defined(_WIN32_WCE)
  1470 #ifdef PNG_CONVERT_tIME_SUPPORTED
  1635 /* "time.h" functions are not supported on WindowsCE */
       
  1636 #if defined(PNG_WRITE_tIME_SUPPORTED)
       
  1637 /* Convert from a struct tm to png_time */
  1471 /* Convert from a struct tm to png_time */
  1638 extern PNG_EXPORT(void,png_convert_from_struct_tm) PNGARG((png_timep ptime,
  1472 extern PNG_EXPORT(void,png_convert_from_struct_tm) PNGARG((png_timep ptime,
  1639    struct tm FAR * ttime));
  1473    struct tm FAR * ttime));
  1640 
  1474 
  1641 /* Convert from time_t to png_time.  Uses gmtime() */
  1475 /* Convert from time_t to png_time.  Uses gmtime() */
  1642 extern PNG_EXPORT(void,png_convert_from_time_t) PNGARG((png_timep ptime,
  1476 extern PNG_EXPORT(void,png_convert_from_time_t) PNGARG((png_timep ptime,
  1643    time_t ttime));
  1477    time_t ttime));
  1644 #endif /* PNG_WRITE_tIME_SUPPORTED */
  1478 #endif /* PNG_CONVERT_tIME_SUPPORTED */
  1645 #endif /* _WIN32_WCE */
  1479 
  1646 
  1480 #ifdef PNG_READ_EXPAND_SUPPORTED
  1647 #if defined(PNG_READ_EXPAND_SUPPORTED)
       
  1648 /* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */
  1481 /* Expand data to 24-bit RGB, or 8-bit grayscale, with alpha if available. */
  1649 extern PNG_EXPORT(void,png_set_expand) PNGARG((png_structp png_ptr));
  1482 extern PNG_EXPORT(void,png_set_expand) PNGARG((png_structp png_ptr));
  1650 #if !defined(PNG_1_0_X)
       
  1651 extern PNG_EXPORT(void,png_set_expand_gray_1_2_4_to_8) PNGARG((png_structp
  1483 extern PNG_EXPORT(void,png_set_expand_gray_1_2_4_to_8) PNGARG((png_structp
  1652   png_ptr));
  1484   png_ptr));
  1653 #endif
       
  1654 extern PNG_EXPORT(void,png_set_palette_to_rgb) PNGARG((png_structp png_ptr));
  1485 extern PNG_EXPORT(void,png_set_palette_to_rgb) PNGARG((png_structp png_ptr));
  1655 extern PNG_EXPORT(void,png_set_tRNS_to_alpha) PNGARG((png_structp png_ptr));
  1486 extern PNG_EXPORT(void,png_set_tRNS_to_alpha) PNGARG((png_structp png_ptr));
  1656 #if defined(PNG_1_0_X) || defined (PNG_1_2_X)
       
  1657 /* Deprecated */
       
  1658 extern PNG_EXPORT(void,png_set_gray_1_2_4_to_8) PNGARG((png_structp png_ptr));
       
  1659 #endif
       
  1660 #endif
  1487 #endif
  1661 
  1488 
  1662 #if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
  1489 #if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
  1663 /* Use blue, green, red order for pixels. */
  1490 /* Use blue, green, red order for pixels. */
  1664 extern PNG_EXPORT(void,png_set_bgr) PNGARG((png_structp png_ptr));
  1491 extern PNG_EXPORT(void,png_set_bgr) PNGARG((png_structp png_ptr));
  1665 #endif
  1492 #endif
  1666 
  1493 
  1667 #if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)
  1494 #ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
  1668 /* Expand the grayscale to 24-bit RGB if necessary. */
  1495 /* Expand the grayscale to 24-bit RGB if necessary. */
  1669 extern PNG_EXPORT(void,png_set_gray_to_rgb) PNGARG((png_structp png_ptr));
  1496 extern PNG_EXPORT(void,png_set_gray_to_rgb) PNGARG((png_structp png_ptr));
  1670 #endif
  1497 #endif
  1671 
  1498 
  1672 #if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
  1499 #ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
  1673 /* Reduce RGB to grayscale. */
  1500 /* Reduce RGB to grayscale. */
  1674 #ifdef PNG_FLOATING_POINT_SUPPORTED
  1501 #ifdef PNG_FLOATING_POINT_SUPPORTED
  1675 extern PNG_EXPORT(void,png_set_rgb_to_gray) PNGARG((png_structp png_ptr,
  1502 extern PNG_EXPORT(void,png_set_rgb_to_gray) PNGARG((png_structp png_ptr,
  1676    int error_action, double red, double green ));
  1503    int error_action, double red, double green ));
  1677 #endif
  1504 #endif
  1682 #endif
  1509 #endif
  1683 
  1510 
  1684 extern PNG_EXPORT(void,png_build_grayscale_palette) PNGARG((int bit_depth,
  1511 extern PNG_EXPORT(void,png_build_grayscale_palette) PNGARG((int bit_depth,
  1685    png_colorp palette));
  1512    png_colorp palette));
  1686 
  1513 
  1687 #if defined(PNG_READ_STRIP_ALPHA_SUPPORTED)
  1514 #ifdef PNG_READ_STRIP_ALPHA_SUPPORTED
  1688 extern PNG_EXPORT(void,png_set_strip_alpha) PNGARG((png_structp png_ptr));
  1515 extern PNG_EXPORT(void,png_set_strip_alpha) PNGARG((png_structp png_ptr));
  1689 #endif
  1516 #endif
  1690 
  1517 
  1691 #if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \
  1518 #if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \
  1692     defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)
  1519     defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)
  1704    png_uint_32 filler, int flags));
  1531    png_uint_32 filler, int flags));
  1705 /* The values of the PNG_FILLER_ defines should NOT be changed */
  1532 /* The values of the PNG_FILLER_ defines should NOT be changed */
  1706 #define PNG_FILLER_BEFORE 0
  1533 #define PNG_FILLER_BEFORE 0
  1707 #define PNG_FILLER_AFTER 1
  1534 #define PNG_FILLER_AFTER 1
  1708 /* Add an alpha byte to 8-bit Gray or 24-bit RGB images. */
  1535 /* Add an alpha byte to 8-bit Gray or 24-bit RGB images. */
  1709 #if !defined(PNG_1_0_X)
       
  1710 extern PNG_EXPORT(void,png_set_add_alpha) PNGARG((png_structp png_ptr,
  1536 extern PNG_EXPORT(void,png_set_add_alpha) PNGARG((png_structp png_ptr,
  1711    png_uint_32 filler, int flags));
  1537    png_uint_32 filler, int flags));
  1712 #endif
       
  1713 #endif /* PNG_READ_FILLER_SUPPORTED || PNG_WRITE_FILLER_SUPPORTED */
  1538 #endif /* PNG_READ_FILLER_SUPPORTED || PNG_WRITE_FILLER_SUPPORTED */
  1714 
  1539 
  1715 #if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
  1540 #if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
  1716 /* Swap bytes in 16-bit depth files. */
  1541 /* Swap bytes in 16-bit depth files. */
  1717 extern PNG_EXPORT(void,png_set_swap) PNGARG((png_structp png_ptr));
  1542 extern PNG_EXPORT(void,png_set_swap) PNGARG((png_structp png_ptr));
  1742 #if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED)
  1567 #if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED)
  1743 /* Invert monochrome files */
  1568 /* Invert monochrome files */
  1744 extern PNG_EXPORT(void,png_set_invert_mono) PNGARG((png_structp png_ptr));
  1569 extern PNG_EXPORT(void,png_set_invert_mono) PNGARG((png_structp png_ptr));
  1745 #endif
  1570 #endif
  1746 
  1571 
  1747 #if defined(PNG_READ_BACKGROUND_SUPPORTED)
  1572 #ifdef PNG_READ_BACKGROUND_SUPPORTED
  1748 /* Handle alpha and tRNS by replacing with a background color. */
  1573 /* Handle alpha and tRNS by replacing with a background color. */
  1749 #ifdef PNG_FLOATING_POINT_SUPPORTED
  1574 #ifdef PNG_FLOATING_POINT_SUPPORTED
  1750 extern PNG_EXPORT(void,png_set_background) PNGARG((png_structp png_ptr,
  1575 extern PNG_EXPORT(void,png_set_background) PNGARG((png_structp png_ptr,
  1751    png_color_16p background_color, int background_gamma_code,
  1576    png_color_16p background_color, int background_gamma_code,
  1752    int need_expand, double background_gamma));
  1577    int need_expand, double background_gamma));
  1755 #define PNG_BACKGROUND_GAMMA_SCREEN  1
  1580 #define PNG_BACKGROUND_GAMMA_SCREEN  1
  1756 #define PNG_BACKGROUND_GAMMA_FILE    2
  1581 #define PNG_BACKGROUND_GAMMA_FILE    2
  1757 #define PNG_BACKGROUND_GAMMA_UNIQUE  3
  1582 #define PNG_BACKGROUND_GAMMA_UNIQUE  3
  1758 #endif
  1583 #endif
  1759 
  1584 
  1760 #if defined(PNG_READ_16_TO_8_SUPPORTED)
  1585 #ifdef PNG_READ_16_TO_8_SUPPORTED
  1761 /* Strip the second byte of information from a 16-bit depth file. */
  1586 /* Strip the second byte of information from a 16-bit depth file. */
  1762 extern PNG_EXPORT(void,png_set_strip_16) PNGARG((png_structp png_ptr));
  1587 extern PNG_EXPORT(void,png_set_strip_16) PNGARG((png_structp png_ptr));
  1763 #endif
  1588 #endif
  1764 
  1589 
  1765 #if defined(PNG_READ_DITHER_SUPPORTED)
  1590 #ifdef PNG_READ_DITHER_SUPPORTED
  1766 /* Turn on dithering, and reduce the palette to the number of colors available. */
  1591 /* Turn on dithering, and reduce the palette to the number of colors available. */
  1767 extern PNG_EXPORT(void,png_set_dither) PNGARG((png_structp png_ptr,
  1592 extern PNG_EXPORT(void,png_set_dither) PNGARG((png_structp png_ptr,
  1768    png_colorp palette, int num_palette, int maximum_colors,
  1593    png_colorp palette, int num_palette, int maximum_colors,
  1769    png_uint_16p histogram, int full_dither));
  1594    png_uint_16p histogram, int full_dither));
  1770 #endif
  1595 #endif
  1771 
  1596 
  1772 #if defined(PNG_READ_GAMMA_SUPPORTED)
  1597 #ifdef PNG_READ_GAMMA_SUPPORTED
  1773 /* Handle gamma correction. Screen_gamma=(display_exponent) */
  1598 /* Handle gamma correction. Screen_gamma=(display_exponent) */
  1774 #ifdef PNG_FLOATING_POINT_SUPPORTED
  1599 #ifdef PNG_FLOATING_POINT_SUPPORTED
  1775 extern PNG_EXPORT(void,png_set_gamma) PNGARG((png_structp png_ptr,
  1600 extern PNG_EXPORT(void,png_set_gamma) PNGARG((png_structp png_ptr,
  1776    double screen_gamma, double default_file_gamma));
  1601    double screen_gamma, double default_file_gamma));
  1777 #endif
  1602 #endif
  1778 #endif
  1603 #endif
  1779 
  1604 
  1780 #if defined(PNG_1_0_X) || defined (PNG_1_2_X)
  1605 
  1781 #if defined(PNG_READ_EMPTY_PLTE_SUPPORTED) || \
  1606 #ifdef PNG_WRITE_FLUSH_SUPPORTED
  1782     defined(PNG_WRITE_EMPTY_PLTE_SUPPORTED)
       
  1783 /* Permit or disallow empty PLTE (0: not permitted, 1: permitted) */
       
  1784 /* Deprecated and will be removed.  Use png_permit_mng_features() instead. */
       
  1785 extern PNG_EXPORT(void,png_permit_empty_plte) PNGARG((png_structp png_ptr,
       
  1786    int empty_plte_permitted));
       
  1787 #endif
       
  1788 #endif
       
  1789 
       
  1790 #if defined(PNG_WRITE_FLUSH_SUPPORTED)
       
  1791 /* Set how many lines between output flushes - 0 for no flushing */
  1607 /* Set how many lines between output flushes - 0 for no flushing */
  1792 extern PNG_EXPORT(void,png_set_flush) PNGARG((png_structp png_ptr, int nrows));
  1608 extern PNG_EXPORT(void,png_set_flush) PNGARG((png_structp png_ptr, int nrows));
  1793 /* Flush the current PNG output buffer */
  1609 /* Flush the current PNG output buffer */
  1794 extern PNG_EXPORT(void,png_write_flush) PNGARG((png_structp png_ptr));
  1610 extern PNG_EXPORT(void,png_write_flush) PNGARG((png_structp png_ptr));
  1795 #endif
  1611 #endif
  1799 
  1615 
  1800 /* Optional call to update the users info structure */
  1616 /* Optional call to update the users info structure */
  1801 extern PNG_EXPORT(void,png_read_update_info) PNGARG((png_structp png_ptr,
  1617 extern PNG_EXPORT(void,png_read_update_info) PNGARG((png_structp png_ptr,
  1802    png_infop info_ptr));
  1618    png_infop info_ptr));
  1803 
  1619 
  1804 #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
  1620 #ifdef PNG_SEQUENTIAL_READ_SUPPORTED
  1805 /* Read one or more rows of image data. */
  1621 /* Read one or more rows of image data. */
  1806 extern PNG_EXPORT(void,png_read_rows) PNGARG((png_structp png_ptr,
  1622 extern PNG_EXPORT(void,png_read_rows) PNGARG((png_structp png_ptr,
  1807    png_bytepp row, png_bytepp display_row, png_uint_32 num_rows));
  1623    png_bytepp row, png_bytepp display_row, png_uint_32 num_rows));
  1808 #endif
  1624 #endif
  1809 
  1625 
  1810 #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
  1626 #ifdef PNG_SEQUENTIAL_READ_SUPPORTED
  1811 /* Read a row of data. */
  1627 /* Read a row of data. */
  1812 extern PNG_EXPORT(void,png_read_row) PNGARG((png_structp png_ptr,
  1628 extern PNG_EXPORT(void,png_read_row) PNGARG((png_structp png_ptr,
  1813    png_bytep row,
  1629    png_bytep row,
  1814    png_bytep display_row));
  1630    png_bytep display_row));
  1815 #endif
  1631 #endif
  1816 
  1632 
  1817 #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
  1633 #ifdef PNG_SEQUENTIAL_READ_SUPPORTED
  1818 /* Read the whole image into memory at once. */
  1634 /* Read the whole image into memory at once. */
  1819 extern PNG_EXPORT(void,png_read_image) PNGARG((png_structp png_ptr,
  1635 extern PNG_EXPORT(void,png_read_image) PNGARG((png_structp png_ptr,
  1820    png_bytepp image));
  1636    png_bytepp image));
  1821 #endif
  1637 #endif
  1822 
  1638 
  1830 
  1646 
  1831 /* Write the image data */
  1647 /* Write the image data */
  1832 extern PNG_EXPORT(void,png_write_image) PNGARG((png_structp png_ptr,
  1648 extern PNG_EXPORT(void,png_write_image) PNGARG((png_structp png_ptr,
  1833    png_bytepp image));
  1649    png_bytepp image));
  1834 
  1650 
  1835 /* Writes the end of the PNG file. */
  1651 /* Write the end of the PNG file. */
  1836 extern PNG_EXPORT(void,png_write_end) PNGARG((png_structp png_ptr,
  1652 extern PNG_EXPORT(void,png_write_end) PNGARG((png_structp png_ptr,
  1837    png_infop info_ptr));
  1653    png_infop info_ptr));
  1838 
  1654 
  1839 #ifndef PNG_NO_SEQUENTIAL_READ_SUPPORTED
  1655 #ifdef PNG_SEQUENTIAL_READ_SUPPORTED
  1840 /* Read the end of the PNG file. */
  1656 /* Read the end of the PNG file. */
  1841 extern PNG_EXPORT(void,png_read_end) PNGARG((png_structp png_ptr,
  1657 extern PNG_EXPORT(void,png_read_end) PNGARG((png_structp png_ptr,
  1842    png_infop info_ptr));
  1658    png_infop info_ptr));
  1843 #endif
  1659 #endif
  1844 
  1660 
  1848 
  1664 
  1849 /* Free any memory associated with the png_struct and the png_info_structs */
  1665 /* Free any memory associated with the png_struct and the png_info_structs */
  1850 extern PNG_EXPORT(void,png_destroy_read_struct) PNGARG((png_structpp
  1666 extern PNG_EXPORT(void,png_destroy_read_struct) PNGARG((png_structpp
  1851    png_ptr_ptr, png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr));
  1667    png_ptr_ptr, png_infopp info_ptr_ptr, png_infopp end_info_ptr_ptr));
  1852 
  1668 
  1853 /* Free all memory used by the read (old method - NOT DLL EXPORTED) */
       
  1854 extern void png_read_destroy PNGARG((png_structp png_ptr, png_infop info_ptr,
       
  1855    png_infop end_info_ptr));
       
  1856 
       
  1857 /* Free any memory associated with the png_struct and the png_info_structs */
  1669 /* Free any memory associated with the png_struct and the png_info_structs */
  1858 extern PNG_EXPORT(void,png_destroy_write_struct)
  1670 extern PNG_EXPORT(void,png_destroy_write_struct)
  1859    PNGARG((png_structpp png_ptr_ptr, png_infopp info_ptr_ptr));
  1671    PNGARG((png_structpp png_ptr_ptr, png_infopp info_ptr_ptr));
  1860 
       
  1861 /* Free any memory used in png_ptr struct (old method - NOT DLL EXPORTED) */
       
  1862 extern void png_write_destroy PNGARG((png_structp png_ptr));
       
  1863 
  1672 
  1864 /* Set the libpng method of handling chunk CRC errors */
  1673 /* Set the libpng method of handling chunk CRC errors */
  1865 extern PNG_EXPORT(void,png_set_crc_action) PNGARG((png_structp png_ptr,
  1674 extern PNG_EXPORT(void,png_set_crc_action) PNGARG((png_structp png_ptr,
  1866    int crit_action, int ancil_action));
  1675    int crit_action, int ancil_action));
  1867 
  1676 
  1917 #define PNG_FILTER_VALUE_UP    2
  1726 #define PNG_FILTER_VALUE_UP    2
  1918 #define PNG_FILTER_VALUE_AVG   3
  1727 #define PNG_FILTER_VALUE_AVG   3
  1919 #define PNG_FILTER_VALUE_PAETH 4
  1728 #define PNG_FILTER_VALUE_PAETH 4
  1920 #define PNG_FILTER_VALUE_LAST  5
  1729 #define PNG_FILTER_VALUE_LAST  5
  1921 
  1730 
  1922 #if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) /* EXPERIMENTAL */
  1731 #ifdef PNG_WRITE_WEIGHTED_FILTER_SUPPORTED /* EXPERIMENTAL */
  1923 /* The "heuristic_method" is given by one of the PNG_FILTER_HEURISTIC_
  1732 /* The "heuristic_method" is given by one of the PNG_FILTER_HEURISTIC_
  1924  * defines, either the default (minimum-sum-of-absolute-differences), or
  1733  * defines, either the default (minimum-sum-of-absolute-differences), or
  1925  * the experimental method (weighted-minimum-sum-of-absolute-differences).
  1734  * the experimental method (weighted-minimum-sum-of-absolute-differences).
  1926  *
  1735  *
  1927  * Weights are factors >= 1.0, indicating how important it is to keep the
  1736  * Weights are factors >= 1.0, indicating how important it is to keep the
  1992  * at run time for those applications that need to handle I/O in a
  1801  * at run time for those applications that need to handle I/O in a
  1993  * different manner by calling png_set_???_fn().  See libpng.txt for
  1802  * different manner by calling png_set_???_fn().  See libpng.txt for
  1994  * more information.
  1803  * more information.
  1995  */
  1804  */
  1996 
  1805 
  1997 #if !defined(PNG_NO_STDIO)
  1806 #ifdef PNG_STDIO_SUPPORTED
  1998 /* Initialize the input/output for the PNG file to the default functions. */
  1807 /* Initialize the input/output for the PNG file to the default functions. */
  1999 extern PNG_EXPORT(void,png_init_io) PNGARG((png_structp png_ptr, png_FILE_p fp));
  1808 extern PNG_EXPORT(void,png_init_io) PNGARG((png_structp png_ptr, png_FILE_p fp));
  2000 #endif
  1809 #endif
  2001 
  1810 
  2002 /* Replace the (error and abort), and warning functions with user
  1811 /* Replace the (error and abort), and warning functions with user
  2045    png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn));
  1854    png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn));
  2046 /* Return the user pointer associated with the memory functions */
  1855 /* Return the user pointer associated with the memory functions */
  2047 extern PNG_EXPORT(png_voidp,png_get_mem_ptr) PNGARG((png_structp png_ptr));
  1856 extern PNG_EXPORT(png_voidp,png_get_mem_ptr) PNGARG((png_structp png_ptr));
  2048 #endif
  1857 #endif
  2049 
  1858 
  2050 #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
  1859 #ifdef PNG_READ_USER_TRANSFORM_SUPPORTED
  2051     defined(PNG_LEGACY_SUPPORTED)
       
  2052 extern PNG_EXPORT(void,png_set_read_user_transform_fn) PNGARG((png_structp
  1860 extern PNG_EXPORT(void,png_set_read_user_transform_fn) PNGARG((png_structp
  2053    png_ptr, png_user_transform_ptr read_user_transform_fn));
  1861    png_ptr, png_user_transform_ptr read_user_transform_fn));
  2054 #endif
  1862 #endif
  2055 
  1863 
  2056 #if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \
  1864 #ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED
  2057     defined(PNG_LEGACY_SUPPORTED)
       
  2058 extern PNG_EXPORT(void,png_set_write_user_transform_fn) PNGARG((png_structp
  1865 extern PNG_EXPORT(void,png_set_write_user_transform_fn) PNGARG((png_structp
  2059    png_ptr, png_user_transform_ptr write_user_transform_fn));
  1866    png_ptr, png_user_transform_ptr write_user_transform_fn));
  2060 #endif
  1867 #endif
  2061 
  1868 
  2062 #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
  1869 #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
  2063     defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED) || \
  1870     defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
  2064     defined(PNG_LEGACY_SUPPORTED)
       
  2065 extern PNG_EXPORT(void,png_set_user_transform_info) PNGARG((png_structp
  1871 extern PNG_EXPORT(void,png_set_user_transform_info) PNGARG((png_structp
  2066    png_ptr, png_voidp user_transform_ptr, int user_transform_depth,
  1872    png_ptr, png_voidp user_transform_ptr, int user_transform_depth,
  2067    int user_transform_channels));
  1873    int user_transform_channels));
  2068 /* Return the user pointer associated with the user transform functions */
  1874 /* Return the user pointer associated with the user transform functions */
  2069 extern PNG_EXPORT(png_voidp,png_get_user_transform_ptr)
  1875 extern PNG_EXPORT(png_voidp,png_get_user_transform_ptr)
  2100 extern PNG_EXPORT(void,png_progressive_combine_row) PNGARG((png_structp png_ptr,
  1906 extern PNG_EXPORT(void,png_progressive_combine_row) PNGARG((png_structp png_ptr,
  2101    png_bytep old_row, png_bytep new_row));
  1907    png_bytep old_row, png_bytep new_row));
  2102 #endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
  1908 #endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
  2103 
  1909 
  2104 extern PNG_EXPORT(png_voidp,png_malloc) PNGARG((png_structp png_ptr,
  1910 extern PNG_EXPORT(png_voidp,png_malloc) PNGARG((png_structp png_ptr,
  2105    png_uint_32 size));
  1911    png_alloc_size_t size)) PNG_ALLOCATED;
  2106 
  1912 /* Added at libpng version 1.4.0 */
  2107 #if defined(PNG_1_0_X)
  1913 extern PNG_EXPORT(png_voidp,png_calloc) PNGARG((png_structp png_ptr,
  2108 #  define png_malloc_warn png_malloc
  1914    png_alloc_size_t size)) PNG_ALLOCATED;
  2109 #else
  1915 
  2110 /* Added at libpng version 1.2.4 */
  1916 /* Added at libpng version 1.2.4 */
  2111 extern PNG_EXPORT(png_voidp,png_malloc_warn) PNGARG((png_structp png_ptr,
  1917 extern PNG_EXPORT(png_voidp,png_malloc_warn) PNGARG((png_structp png_ptr,
  2112    png_uint_32 size));
  1918    png_alloc_size_t size)) PNG_ALLOCATED;
  2113 #endif
       
  2114 
  1919 
  2115 /* Frees a pointer allocated by png_malloc() */
  1920 /* Frees a pointer allocated by png_malloc() */
  2116 extern PNG_EXPORT(void,png_free) PNGARG((png_structp png_ptr, png_voidp ptr));
  1921 extern PNG_EXPORT(void,png_free) PNGARG((png_structp png_ptr, png_voidp ptr));
  2117 
       
  2118 #if defined(PNG_1_0_X)
       
  2119 /* Function to allocate memory for zlib. */
       
  2120 extern PNG_EXPORT(voidpf,png_zalloc) PNGARG((voidpf png_ptr, uInt items,
       
  2121    uInt size));
       
  2122 
       
  2123 /* Function to free memory for zlib */
       
  2124 extern PNG_EXPORT(void,png_zfree) PNGARG((voidpf png_ptr, voidpf ptr));
       
  2125 #endif
       
  2126 
  1922 
  2127 /* Free data that was allocated internally */
  1923 /* Free data that was allocated internally */
  2128 extern PNG_EXPORT(void,png_free_data) PNGARG((png_structp png_ptr,
  1924 extern PNG_EXPORT(void,png_free_data) PNGARG((png_structp png_ptr,
  2129    png_infop info_ptr, png_uint_32 free_me, int num));
  1925    png_infop info_ptr, png_uint_32 free_me, int num));
  2130 #ifdef PNG_FREE_ME_SUPPORTED
       
  2131 /* Reassign responsibility for freeing existing data, whether allocated
  1926 /* Reassign responsibility for freeing existing data, whether allocated
  2132  * by libpng or by the application
  1927  * by libpng or by the application */
  2133  */
       
  2134 extern PNG_EXPORT(void,png_data_freer) PNGARG((png_structp png_ptr,
  1928 extern PNG_EXPORT(void,png_data_freer) PNGARG((png_structp png_ptr,
  2135    png_infop info_ptr, int freer, png_uint_32 mask));
  1929    png_infop info_ptr, int freer, png_uint_32 mask));
  2136 #endif
       
  2137 /* Assignments for png_data_freer */
  1930 /* Assignments for png_data_freer */
  2138 #define PNG_DESTROY_WILL_FREE_DATA 1
  1931 #define PNG_DESTROY_WILL_FREE_DATA 1
  2139 #define PNG_SET_WILL_FREE_DATA 1
  1932 #define PNG_SET_WILL_FREE_DATA 1
  2140 #define PNG_USER_WILL_FREE_DATA 2
  1933 #define PNG_USER_WILL_FREE_DATA 2
  2141 /* Flags for png_ptr->free_me and info_ptr->free_me */
  1934 /* Flags for png_ptr->free_me and info_ptr->free_me */
  2153 #define PNG_FREE_ALL  0x7fff
  1946 #define PNG_FREE_ALL  0x7fff
  2154 #define PNG_FREE_MUL  0x4220 /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */
  1947 #define PNG_FREE_MUL  0x4220 /* PNG_FREE_SPLT|PNG_FREE_TEXT|PNG_FREE_UNKN */
  2155 
  1948 
  2156 #ifdef PNG_USER_MEM_SUPPORTED
  1949 #ifdef PNG_USER_MEM_SUPPORTED
  2157 extern PNG_EXPORT(png_voidp,png_malloc_default) PNGARG((png_structp png_ptr,
  1950 extern PNG_EXPORT(png_voidp,png_malloc_default) PNGARG((png_structp png_ptr,
  2158    png_uint_32 size));
  1951    png_alloc_size_t size)) PNG_ALLOCATED;
  2159 extern PNG_EXPORT(void,png_free_default) PNGARG((png_structp png_ptr,
  1952 extern PNG_EXPORT(void,png_free_default) PNGARG((png_structp png_ptr,
  2160    png_voidp ptr));
  1953    png_voidp ptr));
  2161 #endif
  1954 #endif
  2162 
       
  2163 extern PNG_EXPORT(png_voidp,png_memcpy_check) PNGARG((png_structp png_ptr,
       
  2164    png_voidp s1, png_voidp s2, png_uint_32 size));
       
  2165 
       
  2166 extern PNG_EXPORT(png_voidp,png_memset_check) PNGARG((png_structp png_ptr,
       
  2167    png_voidp s1, int value, png_uint_32 size));
       
  2168 
       
  2169 #if defined(USE_FAR_KEYWORD)  /* memory model conversion function */
       
  2170 extern void *png_far_to_near PNGARG((png_structp png_ptr,png_voidp ptr,
       
  2171    int check));
       
  2172 #endif /* USE_FAR_KEYWORD */
       
  2173 
  1955 
  2174 #ifndef PNG_NO_ERROR_TEXT
  1956 #ifndef PNG_NO_ERROR_TEXT
  2175 /* Fatal error in PNG image of libpng - can't continue */
  1957 /* Fatal error in PNG image of libpng - can't continue */
  2176 extern PNG_EXPORT(void,png_error) PNGARG((png_structp png_ptr,
  1958 extern PNG_EXPORT(void,png_error) PNGARG((png_structp png_ptr,
  2177    png_const_charp error_message));
  1959    png_const_charp error_message)) PNG_NORETURN;
  2178 
  1960 
  2179 /* The same, but the chunk name is prepended to the error string. */
  1961 /* The same, but the chunk name is prepended to the error string. */
  2180 extern PNG_EXPORT(void,png_chunk_error) PNGARG((png_structp png_ptr,
  1962 extern PNG_EXPORT(void,png_chunk_error) PNGARG((png_structp png_ptr,
  2181    png_const_charp error_message));
  1963    png_const_charp error_message)) PNG_NORETURN;
       
  1964 
  2182 #else
  1965 #else
  2183 /* Fatal error in PNG image of libpng - can't continue */
  1966 /* Fatal error in PNG image of libpng - can't continue */
  2184 extern PNG_EXPORT(void,png_err) PNGARG((png_structp png_ptr));
  1967 extern PNG_EXPORT(void,png_err) PNGARG((png_structp png_ptr)) PNG_NORETURN;
  2185 #endif
  1968 #endif
  2186 
  1969 
  2187 #ifndef PNG_NO_WARNINGS
       
  2188 /* Non-fatal error in libpng.  Can continue, but may have a problem. */
  1970 /* Non-fatal error in libpng.  Can continue, but may have a problem. */
  2189 extern PNG_EXPORT(void,png_warning) PNGARG((png_structp png_ptr,
  1971 extern PNG_EXPORT(void,png_warning) PNGARG((png_structp png_ptr,
  2190    png_const_charp warning_message));
  1972    png_const_charp warning_message));
  2191 
  1973 
  2192 #ifdef PNG_READ_SUPPORTED
       
  2193 /* Non-fatal error in libpng, chunk name is prepended to message. */
  1974 /* Non-fatal error in libpng, chunk name is prepended to message. */
  2194 extern PNG_EXPORT(void,png_chunk_warning) PNGARG((png_structp png_ptr,
  1975 extern PNG_EXPORT(void,png_chunk_warning) PNGARG((png_structp png_ptr,
  2195    png_const_charp warning_message));
  1976    png_const_charp warning_message));
  2196 #endif /* PNG_READ_SUPPORTED */
  1977 
  2197 #endif /* PNG_NO_WARNINGS */
  1978 #ifdef PNG_BENIGN_ERRORS_SUPPORTED
       
  1979 /* Benign error in libpng.  Can continue, but may have a problem.
       
  1980  * User can choose whether to handle as a fatal error or as a warning. */
       
  1981 extern PNG_EXPORT(void,png_benign_error) PNGARG((png_structp png_ptr,
       
  1982    png_const_charp warning_message));
       
  1983 
       
  1984 /* Same, chunk name is prepended to message. */
       
  1985 extern PNG_EXPORT(void,png_chunk_benign_error) PNGARG((png_structp png_ptr,
       
  1986    png_const_charp warning_message));
       
  1987 
       
  1988 extern PNG_EXPORT(void,png_set_benign_errors) PNGARG((png_structp
       
  1989    png_ptr, int allowed));
       
  1990 #endif
  2198 
  1991 
  2199 /* The png_set_<chunk> functions are for storing values in the png_info_struct.
  1992 /* The png_set_<chunk> functions are for storing values in the png_info_struct.
  2200  * Similarly, the png_get_<chunk> calls are used to read values from the
  1993  * Similarly, the png_get_<chunk> calls are used to read values from the
  2201  * png_info_struct, either storing the parameters in the passed variables, or
  1994  * png_info_struct, either storing the parameters in the passed variables, or
  2202  * setting pointers into the png_info_struct where the data is stored.  The
  1995  * setting pointers into the png_info_struct where the data is stored.  The
  2211 /* Returns "flag" if chunk data is valid in info_ptr. */
  2004 /* Returns "flag" if chunk data is valid in info_ptr. */
  2212 extern PNG_EXPORT(png_uint_32,png_get_valid) PNGARG((png_structp png_ptr,
  2005 extern PNG_EXPORT(png_uint_32,png_get_valid) PNGARG((png_structp png_ptr,
  2213 png_infop info_ptr, png_uint_32 flag));
  2006 png_infop info_ptr, png_uint_32 flag));
  2214 
  2007 
  2215 /* Returns number of bytes needed to hold a transformed row. */
  2008 /* Returns number of bytes needed to hold a transformed row. */
  2216 extern PNG_EXPORT(png_uint_32,png_get_rowbytes) PNGARG((png_structp png_ptr,
  2009 extern PNG_EXPORT(png_size_t,png_get_rowbytes) PNGARG((png_structp png_ptr,
  2217 png_infop info_ptr));
  2010 png_infop info_ptr));
  2218 
  2011 
  2219 #if defined(PNG_INFO_IMAGE_SUPPORTED)
  2012 #ifdef PNG_INFO_IMAGE_SUPPORTED
  2220 /* Returns row_pointers, which is an array of pointers to scanlines that was
  2013 /* Returns row_pointers, which is an array of pointers to scanlines that was
  2221  * returned from png_read_png().
  2014  * returned from png_read_png().
  2222  */
  2015  */
  2223 extern PNG_EXPORT(png_bytepp,png_get_rows) PNGARG((png_structp png_ptr,
  2016 extern PNG_EXPORT(png_bytepp,png_get_rows) PNGARG((png_structp png_ptr,
  2224 png_infop info_ptr));
  2017 png_infop info_ptr));
  2290 
  2083 
  2291 /* Returns pointer to signature string read from PNG header */
  2084 /* Returns pointer to signature string read from PNG header */
  2292 extern PNG_EXPORT(png_bytep,png_get_signature) PNGARG((png_structp png_ptr,
  2085 extern PNG_EXPORT(png_bytep,png_get_signature) PNGARG((png_structp png_ptr,
  2293 png_infop info_ptr));
  2086 png_infop info_ptr));
  2294 
  2087 
  2295 #if defined(PNG_bKGD_SUPPORTED)
  2088 #ifdef PNG_bKGD_SUPPORTED
  2296 extern PNG_EXPORT(png_uint_32,png_get_bKGD) PNGARG((png_structp png_ptr,
  2089 extern PNG_EXPORT(png_uint_32,png_get_bKGD) PNGARG((png_structp png_ptr,
  2297    png_infop info_ptr, png_color_16p *background));
  2090    png_infop info_ptr, png_color_16p *background));
  2298 #endif
  2091 #endif
  2299 
  2092 
  2300 #if defined(PNG_bKGD_SUPPORTED)
  2093 #ifdef PNG_bKGD_SUPPORTED
  2301 extern PNG_EXPORT(void,png_set_bKGD) PNGARG((png_structp png_ptr,
  2094 extern PNG_EXPORT(void,png_set_bKGD) PNGARG((png_structp png_ptr,
  2302    png_infop info_ptr, png_color_16p background));
  2095    png_infop info_ptr, png_color_16p background));
  2303 #endif
  2096 #endif
  2304 
  2097 
  2305 #if defined(PNG_cHRM_SUPPORTED)
  2098 #ifdef PNG_cHRM_SUPPORTED
  2306 #ifdef PNG_FLOATING_POINT_SUPPORTED
  2099 #ifdef PNG_FLOATING_POINT_SUPPORTED
  2307 extern PNG_EXPORT(png_uint_32,png_get_cHRM) PNGARG((png_structp png_ptr,
  2100 extern PNG_EXPORT(png_uint_32,png_get_cHRM) PNGARG((png_structp png_ptr,
  2308    png_infop info_ptr, double *white_x, double *white_y, double *red_x,
  2101    png_infop info_ptr, double *white_x, double *white_y, double *red_x,
  2309    double *red_y, double *green_x, double *green_y, double *blue_x,
  2102    double *red_y, double *green_x, double *green_y, double *blue_x,
  2310    double *blue_y));
  2103    double *blue_y));
  2316    png_fixed_point *int_green_x, png_fixed_point *int_green_y, png_fixed_point
  2109    png_fixed_point *int_green_x, png_fixed_point *int_green_y, png_fixed_point
  2317    *int_blue_x, png_fixed_point *int_blue_y));
  2110    *int_blue_x, png_fixed_point *int_blue_y));
  2318 #endif
  2111 #endif
  2319 #endif
  2112 #endif
  2320 
  2113 
  2321 #if defined(PNG_cHRM_SUPPORTED)
  2114 #ifdef PNG_cHRM_SUPPORTED
  2322 #ifdef PNG_FLOATING_POINT_SUPPORTED
  2115 #ifdef PNG_FLOATING_POINT_SUPPORTED
  2323 extern PNG_EXPORT(void,png_set_cHRM) PNGARG((png_structp png_ptr,
  2116 extern PNG_EXPORT(void,png_set_cHRM) PNGARG((png_structp png_ptr,
  2324    png_infop info_ptr, double white_x, double white_y, double red_x,
  2117    png_infop info_ptr, double white_x, double white_y, double red_x,
  2325    double red_y, double green_x, double green_y, double blue_x, double blue_y));
  2118    double red_y, double green_x, double green_y, double blue_x, double blue_y));
  2326 #endif
  2119 #endif
  2331    int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x,
  2124    int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x,
  2332    png_fixed_point int_blue_y));
  2125    png_fixed_point int_blue_y));
  2333 #endif
  2126 #endif
  2334 #endif
  2127 #endif
  2335 
  2128 
  2336 #if defined(PNG_gAMA_SUPPORTED)
  2129 #ifdef PNG_gAMA_SUPPORTED
  2337 #ifdef PNG_FLOATING_POINT_SUPPORTED
  2130 #ifdef PNG_FLOATING_POINT_SUPPORTED
  2338 extern PNG_EXPORT(png_uint_32,png_get_gAMA) PNGARG((png_structp png_ptr,
  2131 extern PNG_EXPORT(png_uint_32,png_get_gAMA) PNGARG((png_structp png_ptr,
  2339    png_infop info_ptr, double *file_gamma));
  2132    png_infop info_ptr, double *file_gamma));
  2340 #endif
  2133 #endif
  2341 extern PNG_EXPORT(png_uint_32,png_get_gAMA_fixed) PNGARG((png_structp png_ptr,
  2134 extern PNG_EXPORT(png_uint_32,png_get_gAMA_fixed) PNGARG((png_structp png_ptr,
  2342    png_infop info_ptr, png_fixed_point *int_file_gamma));
  2135    png_infop info_ptr, png_fixed_point *int_file_gamma));
  2343 #endif
  2136 #endif
  2344 
  2137 
  2345 #if defined(PNG_gAMA_SUPPORTED)
  2138 #ifdef PNG_gAMA_SUPPORTED
  2346 #ifdef PNG_FLOATING_POINT_SUPPORTED
  2139 #ifdef PNG_FLOATING_POINT_SUPPORTED
  2347 extern PNG_EXPORT(void,png_set_gAMA) PNGARG((png_structp png_ptr,
  2140 extern PNG_EXPORT(void,png_set_gAMA) PNGARG((png_structp png_ptr,
  2348    png_infop info_ptr, double file_gamma));
  2141    png_infop info_ptr, double file_gamma));
  2349 #endif
  2142 #endif
  2350 extern PNG_EXPORT(void,png_set_gAMA_fixed) PNGARG((png_structp png_ptr,
  2143 extern PNG_EXPORT(void,png_set_gAMA_fixed) PNGARG((png_structp png_ptr,
  2351    png_infop info_ptr, png_fixed_point int_file_gamma));
  2144    png_infop info_ptr, png_fixed_point int_file_gamma));
  2352 #endif
  2145 #endif
  2353 
  2146 
  2354 #if defined(PNG_hIST_SUPPORTED)
  2147 #ifdef PNG_hIST_SUPPORTED
  2355 extern PNG_EXPORT(png_uint_32,png_get_hIST) PNGARG((png_structp png_ptr,
  2148 extern PNG_EXPORT(png_uint_32,png_get_hIST) PNGARG((png_structp png_ptr,
  2356    png_infop info_ptr, png_uint_16p *hist));
  2149    png_infop info_ptr, png_uint_16p *hist));
  2357 #endif
  2150 #endif
  2358 
  2151 
  2359 #if defined(PNG_hIST_SUPPORTED)
  2152 #ifdef PNG_hIST_SUPPORTED
  2360 extern PNG_EXPORT(void,png_set_hIST) PNGARG((png_structp png_ptr,
  2153 extern PNG_EXPORT(void,png_set_hIST) PNGARG((png_structp png_ptr,
  2361    png_infop info_ptr, png_uint_16p hist));
  2154    png_infop info_ptr, png_uint_16p hist));
  2362 #endif
  2155 #endif
  2363 
  2156 
  2364 extern PNG_EXPORT(png_uint_32,png_get_IHDR) PNGARG((png_structp png_ptr,
  2157 extern PNG_EXPORT(png_uint_32,png_get_IHDR) PNGARG((png_structp png_ptr,
  2369 extern PNG_EXPORT(void,png_set_IHDR) PNGARG((png_structp png_ptr,
  2162 extern PNG_EXPORT(void,png_set_IHDR) PNGARG((png_structp png_ptr,
  2370    png_infop info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth,
  2163    png_infop info_ptr, png_uint_32 width, png_uint_32 height, int bit_depth,
  2371    int color_type, int interlace_method, int compression_method,
  2164    int color_type, int interlace_method, int compression_method,
  2372    int filter_method));
  2165    int filter_method));
  2373 
  2166 
  2374 #if defined(PNG_oFFs_SUPPORTED)
  2167 #ifdef PNG_oFFs_SUPPORTED
  2375 extern PNG_EXPORT(png_uint_32,png_get_oFFs) PNGARG((png_structp png_ptr,
  2168 extern PNG_EXPORT(png_uint_32,png_get_oFFs) PNGARG((png_structp png_ptr,
  2376    png_infop info_ptr, png_int_32 *offset_x, png_int_32 *offset_y,
  2169    png_infop info_ptr, png_int_32 *offset_x, png_int_32 *offset_y,
  2377    int *unit_type));
  2170    int *unit_type));
  2378 #endif
  2171 #endif
  2379 
  2172 
  2380 #if defined(PNG_oFFs_SUPPORTED)
  2173 #ifdef PNG_oFFs_SUPPORTED
  2381 extern PNG_EXPORT(void,png_set_oFFs) PNGARG((png_structp png_ptr,
  2174 extern PNG_EXPORT(void,png_set_oFFs) PNGARG((png_structp png_ptr,
  2382    png_infop info_ptr, png_int_32 offset_x, png_int_32 offset_y,
  2175    png_infop info_ptr, png_int_32 offset_x, png_int_32 offset_y,
  2383    int unit_type));
  2176    int unit_type));
  2384 #endif
  2177 #endif
  2385 
  2178 
  2386 #if defined(PNG_pCAL_SUPPORTED)
  2179 #ifdef PNG_pCAL_SUPPORTED
  2387 extern PNG_EXPORT(png_uint_32,png_get_pCAL) PNGARG((png_structp png_ptr,
  2180 extern PNG_EXPORT(png_uint_32,png_get_pCAL) PNGARG((png_structp png_ptr,
  2388    png_infop info_ptr, png_charp *purpose, png_int_32 *X0, png_int_32 *X1,
  2181    png_infop info_ptr, png_charp *purpose, png_int_32 *X0, png_int_32 *X1,
  2389    int *type, int *nparams, png_charp *units, png_charpp *params));
  2182    int *type, int *nparams, png_charp *units, png_charpp *params));
  2390 #endif
  2183 #endif
  2391 
  2184 
  2392 #if defined(PNG_pCAL_SUPPORTED)
  2185 #ifdef PNG_pCAL_SUPPORTED
  2393 extern PNG_EXPORT(void,png_set_pCAL) PNGARG((png_structp png_ptr,
  2186 extern PNG_EXPORT(void,png_set_pCAL) PNGARG((png_structp png_ptr,
  2394    png_infop info_ptr, png_charp purpose, png_int_32 X0, png_int_32 X1,
  2187    png_infop info_ptr, png_charp purpose, png_int_32 X0, png_int_32 X1,
  2395    int type, int nparams, png_charp units, png_charpp params));
  2188    int type, int nparams, png_charp units, png_charpp params));
  2396 #endif
  2189 #endif
  2397 
  2190 
  2398 #if defined(PNG_pHYs_SUPPORTED)
  2191 #ifdef PNG_pHYs_SUPPORTED
  2399 extern PNG_EXPORT(png_uint_32,png_get_pHYs) PNGARG((png_structp png_ptr,
  2192 extern PNG_EXPORT(png_uint_32,png_get_pHYs) PNGARG((png_structp png_ptr,
  2400    png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type));
  2193    png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type));
  2401 #endif
  2194 #endif
  2402 
  2195 
  2403 #if defined(PNG_pHYs_SUPPORTED)
  2196 #ifdef PNG_pHYs_SUPPORTED
  2404 extern PNG_EXPORT(void,png_set_pHYs) PNGARG((png_structp png_ptr,
  2197 extern PNG_EXPORT(void,png_set_pHYs) PNGARG((png_structp png_ptr,
  2405    png_infop info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type));
  2198    png_infop info_ptr, png_uint_32 res_x, png_uint_32 res_y, int unit_type));
  2406 #endif
  2199 #endif
  2407 
  2200 
  2408 extern PNG_EXPORT(png_uint_32,png_get_PLTE) PNGARG((png_structp png_ptr,
  2201 extern PNG_EXPORT(png_uint_32,png_get_PLTE) PNGARG((png_structp png_ptr,
  2409    png_infop info_ptr, png_colorp *palette, int *num_palette));
  2202    png_infop info_ptr, png_colorp *palette, int *num_palette));
  2410 
  2203 
  2411 extern PNG_EXPORT(void,png_set_PLTE) PNGARG((png_structp png_ptr,
  2204 extern PNG_EXPORT(void,png_set_PLTE) PNGARG((png_structp png_ptr,
  2412    png_infop info_ptr, png_colorp palette, int num_palette));
  2205    png_infop info_ptr, png_colorp palette, int num_palette));
  2413 
  2206 
  2414 #if defined(PNG_sBIT_SUPPORTED)
  2207 #ifdef PNG_sBIT_SUPPORTED
  2415 extern PNG_EXPORT(png_uint_32,png_get_sBIT) PNGARG((png_structp png_ptr,
  2208 extern PNG_EXPORT(png_uint_32,png_get_sBIT) PNGARG((png_structp png_ptr,
  2416    png_infop info_ptr, png_color_8p *sig_bit));
  2209    png_infop info_ptr, png_color_8p *sig_bit));
  2417 #endif
  2210 #endif
  2418 
  2211 
  2419 #if defined(PNG_sBIT_SUPPORTED)
  2212 #ifdef PNG_sBIT_SUPPORTED
  2420 extern PNG_EXPORT(void,png_set_sBIT) PNGARG((png_structp png_ptr,
  2213 extern PNG_EXPORT(void,png_set_sBIT) PNGARG((png_structp png_ptr,
  2421    png_infop info_ptr, png_color_8p sig_bit));
  2214    png_infop info_ptr, png_color_8p sig_bit));
  2422 #endif
  2215 #endif
  2423 
  2216 
  2424 #if defined(PNG_sRGB_SUPPORTED)
  2217 #ifdef PNG_sRGB_SUPPORTED
  2425 extern PNG_EXPORT(png_uint_32,png_get_sRGB) PNGARG((png_structp png_ptr,
  2218 extern PNG_EXPORT(png_uint_32,png_get_sRGB) PNGARG((png_structp png_ptr,
  2426    png_infop info_ptr, int *intent));
  2219    png_infop info_ptr, int *intent));
  2427 #endif
  2220 #endif
  2428 
  2221 
  2429 #if defined(PNG_sRGB_SUPPORTED)
  2222 #ifdef PNG_sRGB_SUPPORTED
  2430 extern PNG_EXPORT(void,png_set_sRGB) PNGARG((png_structp png_ptr,
  2223 extern PNG_EXPORT(void,png_set_sRGB) PNGARG((png_structp png_ptr,
  2431    png_infop info_ptr, int intent));
  2224    png_infop info_ptr, int intent));
  2432 extern PNG_EXPORT(void,png_set_sRGB_gAMA_and_cHRM) PNGARG((png_structp png_ptr,
  2225 extern PNG_EXPORT(void,png_set_sRGB_gAMA_and_cHRM) PNGARG((png_structp png_ptr,
  2433    png_infop info_ptr, int intent));
  2226    png_infop info_ptr, int intent));
  2434 #endif
  2227 #endif
  2435 
  2228 
  2436 #if defined(PNG_iCCP_SUPPORTED)
  2229 #ifdef PNG_iCCP_SUPPORTED
  2437 extern PNG_EXPORT(png_uint_32,png_get_iCCP) PNGARG((png_structp png_ptr,
  2230 extern PNG_EXPORT(png_uint_32,png_get_iCCP) PNGARG((png_structp png_ptr,
  2438    png_infop info_ptr, png_charpp name, int *compression_type,
  2231    png_infop info_ptr, png_charpp name, int *compression_type,
  2439    png_charpp profile, png_uint_32 *proflen));
  2232    png_charpp profile, png_uint_32 *proflen));
  2440    /* Note to maintainer: profile should be png_bytepp */
  2233    /* Note to maintainer: profile should be png_bytepp */
  2441 #endif
  2234 #endif
  2442 
  2235 
  2443 #if defined(PNG_iCCP_SUPPORTED)
  2236 #ifdef PNG_iCCP_SUPPORTED
  2444 extern PNG_EXPORT(void,png_set_iCCP) PNGARG((png_structp png_ptr,
  2237 extern PNG_EXPORT(void,png_set_iCCP) PNGARG((png_structp png_ptr,
  2445    png_infop info_ptr, png_charp name, int compression_type,
  2238    png_infop info_ptr, png_charp name, int compression_type,
  2446    png_charp profile, png_uint_32 proflen));
  2239    png_charp profile, png_uint_32 proflen));
  2447    /* Note to maintainer: profile should be png_bytep */
  2240    /* Note to maintainer: profile should be png_bytep */
  2448 #endif
  2241 #endif
  2449 
  2242 
  2450 #if defined(PNG_sPLT_SUPPORTED)
  2243 #ifdef PNG_sPLT_SUPPORTED
  2451 extern PNG_EXPORT(png_uint_32,png_get_sPLT) PNGARG((png_structp png_ptr,
  2244 extern PNG_EXPORT(png_uint_32,png_get_sPLT) PNGARG((png_structp png_ptr,
  2452    png_infop info_ptr, png_sPLT_tpp entries));
  2245    png_infop info_ptr, png_sPLT_tpp entries));
  2453 #endif
  2246 #endif
  2454 
  2247 
  2455 #if defined(PNG_sPLT_SUPPORTED)
  2248 #ifdef PNG_sPLT_SUPPORTED
  2456 extern PNG_EXPORT(void,png_set_sPLT) PNGARG((png_structp png_ptr,
  2249 extern PNG_EXPORT(void,png_set_sPLT) PNGARG((png_structp png_ptr,
  2457    png_infop info_ptr, png_sPLT_tp entries, int nentries));
  2250    png_infop info_ptr, png_sPLT_tp entries, int nentries));
  2458 #endif
  2251 #endif
  2459 
  2252 
  2460 #if defined(PNG_TEXT_SUPPORTED)
  2253 #ifdef PNG_TEXT_SUPPORTED
  2461 /* png_get_text also returns the number of text chunks in *num_text */
  2254 /* png_get_text also returns the number of text chunks in *num_text */
  2462 extern PNG_EXPORT(png_uint_32,png_get_text) PNGARG((png_structp png_ptr,
  2255 extern PNG_EXPORT(png_uint_32,png_get_text) PNGARG((png_structp png_ptr,
  2463    png_infop info_ptr, png_textp *text_ptr, int *num_text));
  2256    png_infop info_ptr, png_textp *text_ptr, int *num_text));
  2464 #endif
  2257 #endif
  2465 
  2258 
  2466 /*
  2259 /* Note while png_set_text() will accept a structure whose text,
  2467  *  Note while png_set_text() will accept a structure whose text,
  2260  * language, and  translated keywords are NULL pointers, the structure
  2468  *  language, and  translated keywords are NULL pointers, the structure
  2261  * returned by png_get_text will always contain regular
  2469  *  returned by png_get_text will always contain regular
  2262  * zero-terminated C strings.  They might be empty strings but
  2470  *  zero-terminated C strings.  They might be empty strings but
  2263  * they will never be NULL pointers.
  2471  *  they will never be NULL pointers.
  2264  */
  2472  */
  2265 
  2473 
  2266 #ifdef PNG_TEXT_SUPPORTED
  2474 #if defined(PNG_TEXT_SUPPORTED)
       
  2475 extern PNG_EXPORT(void,png_set_text) PNGARG((png_structp png_ptr,
  2267 extern PNG_EXPORT(void,png_set_text) PNGARG((png_structp png_ptr,
  2476    png_infop info_ptr, png_textp text_ptr, int num_text));
  2268    png_infop info_ptr, png_textp text_ptr, int num_text));
  2477 #endif
  2269 #endif
  2478 
  2270 
  2479 #if defined(PNG_tIME_SUPPORTED)
  2271 #ifdef PNG_tIME_SUPPORTED
  2480 extern PNG_EXPORT(png_uint_32,png_get_tIME) PNGARG((png_structp png_ptr,
  2272 extern PNG_EXPORT(png_uint_32,png_get_tIME) PNGARG((png_structp png_ptr,
  2481    png_infop info_ptr, png_timep *mod_time));
  2273    png_infop info_ptr, png_timep *mod_time));
  2482 #endif
  2274 #endif
  2483 
  2275 
  2484 #if defined(PNG_tIME_SUPPORTED)
  2276 #ifdef PNG_tIME_SUPPORTED
  2485 extern PNG_EXPORT(void,png_set_tIME) PNGARG((png_structp png_ptr,
  2277 extern PNG_EXPORT(void,png_set_tIME) PNGARG((png_structp png_ptr,
  2486    png_infop info_ptr, png_timep mod_time));
  2278    png_infop info_ptr, png_timep mod_time));
  2487 #endif
  2279 #endif
  2488 
  2280 
  2489 #if defined(PNG_tRNS_SUPPORTED)
  2281 #ifdef PNG_tRNS_SUPPORTED
  2490 extern PNG_EXPORT(png_uint_32,png_get_tRNS) PNGARG((png_structp png_ptr,
  2282 extern PNG_EXPORT(png_uint_32,png_get_tRNS) PNGARG((png_structp png_ptr,
  2491    png_infop info_ptr, png_bytep *trans, int *num_trans,
  2283    png_infop info_ptr, png_bytep *trans_alpha, int *num_trans,
  2492    png_color_16p *trans_values));
  2284    png_color_16p *trans_color));
  2493 #endif
  2285 #endif
  2494 
  2286 
  2495 #if defined(PNG_tRNS_SUPPORTED)
  2287 #ifdef PNG_tRNS_SUPPORTED
  2496 extern PNG_EXPORT(void,png_set_tRNS) PNGARG((png_structp png_ptr,
  2288 extern PNG_EXPORT(void,png_set_tRNS) PNGARG((png_structp png_ptr,
  2497    png_infop info_ptr, png_bytep trans, int num_trans,
  2289    png_infop info_ptr, png_bytep trans_alpha, int num_trans,
  2498    png_color_16p trans_values));
  2290    png_color_16p trans_color));
  2499 #endif
  2291 #endif
  2500 
  2292 
  2501 #if defined(PNG_tRNS_SUPPORTED)
  2293 #ifdef PNG_tRNS_SUPPORTED
  2502 #endif
  2294 #endif
  2503 
  2295 
  2504 #if defined(PNG_sCAL_SUPPORTED)
  2296 #ifdef PNG_sCAL_SUPPORTED
  2505 #ifdef PNG_FLOATING_POINT_SUPPORTED
  2297 #ifdef PNG_FLOATING_POINT_SUPPORTED
  2506 extern PNG_EXPORT(png_uint_32,png_get_sCAL) PNGARG((png_structp png_ptr,
  2298 extern PNG_EXPORT(png_uint_32,png_get_sCAL) PNGARG((png_structp png_ptr,
  2507    png_infop info_ptr, int *unit, double *width, double *height));
  2299    png_infop info_ptr, int *unit, double *width, double *height));
  2508 #else
  2300 #else
  2509 #ifdef PNG_FIXED_POINT_SUPPORTED
  2301 #ifdef PNG_FIXED_POINT_SUPPORTED
  2511    png_infop info_ptr, int *unit, png_charpp swidth, png_charpp sheight));
  2303    png_infop info_ptr, int *unit, png_charpp swidth, png_charpp sheight));
  2512 #endif
  2304 #endif
  2513 #endif
  2305 #endif
  2514 #endif /* PNG_sCAL_SUPPORTED */
  2306 #endif /* PNG_sCAL_SUPPORTED */
  2515 
  2307 
  2516 #if defined(PNG_sCAL_SUPPORTED)
  2308 #ifdef PNG_sCAL_SUPPORTED
  2517 #ifdef PNG_FLOATING_POINT_SUPPORTED
  2309 #ifdef PNG_FLOATING_POINT_SUPPORTED
  2518 extern PNG_EXPORT(void,png_set_sCAL) PNGARG((png_structp png_ptr,
  2310 extern PNG_EXPORT(void,png_set_sCAL) PNGARG((png_structp png_ptr,
  2519    png_infop info_ptr, int unit, double width, double height));
  2311    png_infop info_ptr, int unit, double width, double height));
  2520 #else
  2312 #else
  2521 #ifdef PNG_FIXED_POINT_SUPPORTED
  2313 #ifdef PNG_FIXED_POINT_SUPPORTED
  2538 extern PNG_EXPORT(void, png_set_keep_unknown_chunks) PNGARG((png_structp
  2330 extern PNG_EXPORT(void, png_set_keep_unknown_chunks) PNGARG((png_structp
  2539    png_ptr, int keep, png_bytep chunk_list, int num_chunks));
  2331    png_ptr, int keep, png_bytep chunk_list, int num_chunks));
  2540 PNG_EXPORT(int,png_handle_as_unknown) PNGARG((png_structp png_ptr, png_bytep
  2332 PNG_EXPORT(int,png_handle_as_unknown) PNGARG((png_structp png_ptr, png_bytep
  2541    chunk_name));
  2333    chunk_name));
  2542 #endif
  2334 #endif
  2543 #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
  2335 #ifdef PNG_UNKNOWN_CHUNKS_SUPPORTED
  2544 extern PNG_EXPORT(void, png_set_unknown_chunks) PNGARG((png_structp png_ptr,
  2336 extern PNG_EXPORT(void, png_set_unknown_chunks) PNGARG((png_structp png_ptr,
  2545    png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns));
  2337    png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns));
  2546 extern PNG_EXPORT(void, png_set_unknown_chunk_location)
  2338 extern PNG_EXPORT(void, png_set_unknown_chunk_location)
  2547    PNGARG((png_structp png_ptr, png_infop info_ptr, int chunk, int location));
  2339    PNGARG((png_structp png_ptr, png_infop info_ptr, int chunk, int location));
  2548 extern PNG_EXPORT(png_uint_32,png_get_unknown_chunks) PNGARG((png_structp
  2340 extern PNG_EXPORT(png_uint_32,png_get_unknown_chunks) PNGARG((png_structp
  2554  * you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK);
  2346  * you can use png_set_invalid(png_ptr, info_ptr, PNG_INFO_CHNK);
  2555  */
  2347  */
  2556 extern PNG_EXPORT(void, png_set_invalid) PNGARG((png_structp png_ptr,
  2348 extern PNG_EXPORT(void, png_set_invalid) PNGARG((png_structp png_ptr,
  2557    png_infop info_ptr, int mask));
  2349    png_infop info_ptr, int mask));
  2558 
  2350 
  2559 #if defined(PNG_INFO_IMAGE_SUPPORTED)
  2351 #ifdef PNG_INFO_IMAGE_SUPPORTED
  2560 /* The "params" pointer is currently not used and is for future expansion. */
  2352 /* The "params" pointer is currently not used and is for future expansion. */
  2561 extern PNG_EXPORT(void, png_read_png) PNGARG((png_structp png_ptr,
  2353 extern PNG_EXPORT(void, png_read_png) PNGARG((png_structp png_ptr,
  2562                         png_infop info_ptr,
  2354                         png_infop info_ptr,
  2563                         int transforms,
  2355                         int transforms,
  2564                         png_voidp params));
  2356                         png_voidp params));
  2566                         png_infop info_ptr,
  2358                         png_infop info_ptr,
  2567                         int transforms,
  2359                         int transforms,
  2568                         png_voidp params));
  2360                         png_voidp params));
  2569 #endif
  2361 #endif
  2570 
  2362 
  2571 /* Define PNG_DEBUG at compile time for debugging information.  Higher
       
  2572  * numbers for PNG_DEBUG mean more debugging information.  This has
       
  2573  * only been added since version 0.95 so it is not implemented throughout
       
  2574  * libpng yet, but more support will be added as needed.
       
  2575  */
       
  2576 #ifdef PNG_DEBUG
       
  2577 #if (PNG_DEBUG > 0)
       
  2578 #if !defined(PNG_DEBUG_FILE) && defined(_MSC_VER)
       
  2579 #include <crtdbg.h>
       
  2580 #if (PNG_DEBUG > 1)
       
  2581 #ifndef _DEBUG
       
  2582 #  define _DEBUG
       
  2583 #endif
       
  2584 #ifndef png_debug
       
  2585 #define png_debug(l,m)  _RPT0(_CRT_WARN,m PNG_STRING_NEWLINE)
       
  2586 #endif
       
  2587 #ifndef png_debug1
       
  2588 #define png_debug1(l,m,p1)  _RPT1(_CRT_WARN,m PNG_STRING_NEWLINE,p1)
       
  2589 #endif
       
  2590 #ifndef png_debug2
       
  2591 #define png_debug2(l,m,p1,p2) _RPT2(_CRT_WARN,m PNG_STRING_NEWLINE,p1,p2)
       
  2592 #endif
       
  2593 #endif
       
  2594 #else /* PNG_DEBUG_FILE || !_MSC_VER */
       
  2595 #ifndef PNG_DEBUG_FILE
       
  2596 #define PNG_DEBUG_FILE stderr
       
  2597 #endif /* PNG_DEBUG_FILE */
       
  2598 
       
  2599 #if (PNG_DEBUG > 1)
       
  2600 /* Note: ["%s"m PNG_STRING_NEWLINE] probably does not work on non-ISO
       
  2601  * compilers.
       
  2602  */
       
  2603 #  ifdef __STDC__
       
  2604 #    ifndef png_debug
       
  2605 #      define png_debug(l,m) \
       
  2606        { \
       
  2607        int num_tabs=l; \
       
  2608        fprintf(PNG_DEBUG_FILE,"%s"m PNG_STRING_NEWLINE,(num_tabs==1 ? "\t" : \
       
  2609          (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":"")))); \
       
  2610        }
       
  2611 #    endif
       
  2612 #    ifndef png_debug1
       
  2613 #      define png_debug1(l,m,p1) \
       
  2614        { \
       
  2615        int num_tabs=l; \
       
  2616        fprintf(PNG_DEBUG_FILE,"%s"m PNG_STRING_NEWLINE,(num_tabs==1 ? "\t" : \
       
  2617          (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1); \
       
  2618        }
       
  2619 #    endif
       
  2620 #    ifndef png_debug2
       
  2621 #      define png_debug2(l,m,p1,p2) \
       
  2622        { \
       
  2623        int num_tabs=l; \
       
  2624        fprintf(PNG_DEBUG_FILE,"%s"m PNG_STRING_NEWLINE,(num_tabs==1 ? "\t" : \
       
  2625          (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))),p1,p2); \
       
  2626        }
       
  2627 #    endif
       
  2628 #  else /* __STDC __ */
       
  2629 #    ifndef png_debug
       
  2630 #      define png_debug(l,m) \
       
  2631        { \
       
  2632        int num_tabs=l; \
       
  2633        char format[256]; \
       
  2634        snprintf(format,256,"%s%s%s",(num_tabs==1 ? "\t" : \
       
  2635          (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))), \
       
  2636          m,PNG_STRING_NEWLINE); \
       
  2637        fprintf(PNG_DEBUG_FILE,format); \
       
  2638        }
       
  2639 #    endif
       
  2640 #    ifndef png_debug1
       
  2641 #      define png_debug1(l,m,p1) \
       
  2642        { \
       
  2643        int num_tabs=l; \
       
  2644        char format[256]; \
       
  2645        snprintf(format,256,"%s%s%s",(num_tabs==1 ? "\t" : \
       
  2646          (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))), \
       
  2647          m,PNG_STRING_NEWLINE); \
       
  2648        fprintf(PNG_DEBUG_FILE,format,p1); \
       
  2649        }
       
  2650 #    endif
       
  2651 #    ifndef png_debug2
       
  2652 #      define png_debug2(l,m,p1,p2) \
       
  2653        { \
       
  2654        int num_tabs=l; \
       
  2655        char format[256]; \
       
  2656        snprintf(format,256,"%s%s%s",(num_tabs==1 ? "\t" : \
       
  2657          (num_tabs==2 ? "\t\t":(num_tabs>2 ? "\t\t\t":""))), \
       
  2658          m,PNG_STRING_NEWLINE); \
       
  2659        fprintf(PNG_DEBUG_FILE,format,p1,p2); \
       
  2660        }
       
  2661 #    endif
       
  2662 #  endif /* __STDC __ */
       
  2663 #endif /* (PNG_DEBUG > 1) */
       
  2664 
       
  2665 #endif /* _MSC_VER */
       
  2666 #endif /* (PNG_DEBUG > 0) */
       
  2667 #endif /* PNG_DEBUG */
       
  2668 #ifndef png_debug
       
  2669 #define png_debug(l, m)
       
  2670 #endif
       
  2671 #ifndef png_debug1
       
  2672 #define png_debug1(l, m, p1)
       
  2673 #endif
       
  2674 #ifndef png_debug2
       
  2675 #define png_debug2(l, m, p1, p2)
       
  2676 #endif
       
  2677 
       
  2678 extern PNG_EXPORT(png_charp,png_get_copyright) PNGARG((png_structp png_ptr));
  2363 extern PNG_EXPORT(png_charp,png_get_copyright) PNGARG((png_structp png_ptr));
  2679 extern PNG_EXPORT(png_charp,png_get_header_ver) PNGARG((png_structp png_ptr));
  2364 extern PNG_EXPORT(png_charp,png_get_header_ver) PNGARG((png_structp png_ptr));
  2680 extern PNG_EXPORT(png_charp,png_get_header_version) PNGARG((png_structp png_ptr));
  2365 extern PNG_EXPORT(png_charp,png_get_header_version) PNGARG((png_structp png_ptr));
  2681 extern PNG_EXPORT(png_charp,png_get_libpng_ver) PNGARG((png_structp png_ptr));
  2366 extern PNG_EXPORT(png_charp,png_get_libpng_ver) PNGARG((png_structp png_ptr));
  2682 
  2367 
  2689 #define PNG_HANDLE_CHUNK_AS_DEFAULT   0
  2374 #define PNG_HANDLE_CHUNK_AS_DEFAULT   0
  2690 #define PNG_HANDLE_CHUNK_NEVER        1
  2375 #define PNG_HANDLE_CHUNK_NEVER        1
  2691 #define PNG_HANDLE_CHUNK_IF_SAFE      2
  2376 #define PNG_HANDLE_CHUNK_IF_SAFE      2
  2692 #define PNG_HANDLE_CHUNK_ALWAYS       3
  2377 #define PNG_HANDLE_CHUNK_ALWAYS       3
  2693 
  2378 
  2694 /* Added to version 1.2.0 */
       
  2695 #if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
       
  2696 #if defined(PNG_MMX_CODE_SUPPORTED)
       
  2697 #define PNG_ASM_FLAG_MMX_SUPPORT_COMPILED  0x01  /* not user-settable */
       
  2698 #define PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU    0x02  /* not user-settable */
       
  2699 #define PNG_ASM_FLAG_MMX_READ_COMBINE_ROW  0x04
       
  2700 #define PNG_ASM_FLAG_MMX_READ_INTERLACE    0x08
       
  2701 #define PNG_ASM_FLAG_MMX_READ_FILTER_SUB   0x10
       
  2702 #define PNG_ASM_FLAG_MMX_READ_FILTER_UP    0x20
       
  2703 #define PNG_ASM_FLAG_MMX_READ_FILTER_AVG   0x40
       
  2704 #define PNG_ASM_FLAG_MMX_READ_FILTER_PAETH 0x80
       
  2705 #define PNG_ASM_FLAGS_INITIALIZED          0x80000000  /* not user-settable */
       
  2706 
       
  2707 #define PNG_MMX_READ_FLAGS ( PNG_ASM_FLAG_MMX_READ_COMBINE_ROW  \
       
  2708                            | PNG_ASM_FLAG_MMX_READ_INTERLACE    \
       
  2709                            | PNG_ASM_FLAG_MMX_READ_FILTER_SUB   \
       
  2710                            | PNG_ASM_FLAG_MMX_READ_FILTER_UP    \
       
  2711                            | PNG_ASM_FLAG_MMX_READ_FILTER_AVG   \
       
  2712                            | PNG_ASM_FLAG_MMX_READ_FILTER_PAETH )
       
  2713 #define PNG_MMX_WRITE_FLAGS ( 0 )
       
  2714 
       
  2715 #define PNG_MMX_FLAGS ( PNG_ASM_FLAG_MMX_SUPPORT_COMPILED \
       
  2716                       | PNG_ASM_FLAG_MMX_SUPPORT_IN_CPU   \
       
  2717                       | PNG_MMX_READ_FLAGS                \
       
  2718                       | PNG_MMX_WRITE_FLAGS )
       
  2719 
       
  2720 #define PNG_SELECT_READ   1
       
  2721 #define PNG_SELECT_WRITE  2
       
  2722 #endif /* PNG_MMX_CODE_SUPPORTED */
       
  2723 
       
  2724 #if !defined(PNG_1_0_X)
       
  2725 /* pngget.c */
       
  2726 extern PNG_EXPORT(png_uint_32,png_get_mmx_flagmask)
       
  2727    PNGARG((int flag_select, int *compilerID));
       
  2728 
       
  2729 /* pngget.c */
       
  2730 extern PNG_EXPORT(png_uint_32,png_get_asm_flagmask)
       
  2731    PNGARG((int flag_select));
       
  2732 
       
  2733 /* pngget.c */
       
  2734 extern PNG_EXPORT(png_uint_32,png_get_asm_flags)
       
  2735    PNGARG((png_structp png_ptr));
       
  2736 
       
  2737 /* pngget.c */
       
  2738 extern PNG_EXPORT(png_byte,png_get_mmx_bitdepth_threshold)
       
  2739    PNGARG((png_structp png_ptr));
       
  2740 
       
  2741 /* pngget.c */
       
  2742 extern PNG_EXPORT(png_uint_32,png_get_mmx_rowbytes_threshold)
       
  2743    PNGARG((png_structp png_ptr));
       
  2744 
       
  2745 /* pngset.c */
       
  2746 extern PNG_EXPORT(void,png_set_asm_flags)
       
  2747    PNGARG((png_structp png_ptr, png_uint_32 asm_flags));
       
  2748 
       
  2749 /* pngset.c */
       
  2750 extern PNG_EXPORT(void,png_set_mmx_thresholds)
       
  2751    PNGARG((png_structp png_ptr, png_byte mmx_bitdepth_threshold,
       
  2752    png_uint_32 mmx_rowbytes_threshold));
       
  2753 
       
  2754 #endif /* PNG_1_0_X */
       
  2755 
       
  2756 #if !defined(PNG_1_0_X)
       
  2757 /* png.c, pnggccrd.c, or pngvcrd.c */
       
  2758 extern PNG_EXPORT(int,png_mmx_support) PNGARG((void));
       
  2759 #endif /* PNG_1_0_X */
       
  2760 #endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
       
  2761 
       
  2762 /* Strip the prepended error numbers ("#nnn ") from error and warning
  2379 /* Strip the prepended error numbers ("#nnn ") from error and warning
  2763  * messages before passing them to the error or warning handler.
  2380  * messages before passing them to the error or warning handler.
  2764  */
  2381  */
  2765 #ifdef PNG_ERROR_NUMBERS_SUPPORTED
  2382 #ifdef PNG_ERROR_NUMBERS_SUPPORTED
  2766 extern PNG_EXPORT(void,png_set_strip_error_numbers) PNGARG((png_structp
  2383 extern PNG_EXPORT(void,png_set_strip_error_numbers) PNGARG((png_structp
  2767    png_ptr, png_uint_32 strip_mode));
  2384    png_ptr, png_uint_32 strip_mode));
  2768 #endif
  2385 #endif
  2769 
  2386 
  2770 /* Added at libpng-1.2.6 */
  2387 /* Added in libpng-1.2.6 */
  2771 #ifdef PNG_SET_USER_LIMITS_SUPPORTED
  2388 #ifdef PNG_SET_USER_LIMITS_SUPPORTED
  2772 extern PNG_EXPORT(void,png_set_user_limits) PNGARG((png_structp
  2389 extern PNG_EXPORT(void,png_set_user_limits) PNGARG((png_structp
  2773    png_ptr, png_uint_32 user_width_max, png_uint_32 user_height_max));
  2390    png_ptr, png_uint_32 user_width_max, png_uint_32 user_height_max));
  2774 extern PNG_EXPORT(png_uint_32,png_get_user_width_max) PNGARG((png_structp
  2391 extern PNG_EXPORT(png_uint_32,png_get_user_width_max) PNGARG((png_structp
  2775    png_ptr));
  2392    png_ptr));
  2776 extern PNG_EXPORT(png_uint_32,png_get_user_height_max) PNGARG((png_structp
  2393 extern PNG_EXPORT(png_uint_32,png_get_user_height_max) PNGARG((png_structp
  2777    png_ptr));
  2394    png_ptr));
  2778 #endif
  2395 /* Added in libpng-1.4.0 */
  2779 
  2396 extern PNG_EXPORT(void,png_set_chunk_cache_max) PNGARG((png_structp
  2780 
  2397    png_ptr, png_uint_32 user_chunk_cache_max));
  2781 /* Maintainer: Put new public prototypes here ^, in libpng.3, and in
  2398 extern PNG_EXPORT(png_uint_32,png_get_chunk_cache_max)
  2782  * project defs
  2399    PNGARG((png_structp png_ptr));
       
  2400 #endif
       
  2401 
       
  2402 #if defined(PNG_INCH_CONVERSIONS) && defined(PNG_FLOATING_POINT_SUPPORTED)
       
  2403 PNG_EXPORT(png_uint_32,png_get_pixels_per_inch) PNGARG((png_structp png_ptr,
       
  2404 png_infop info_ptr));
       
  2405 
       
  2406 PNG_EXPORT(png_uint_32,png_get_x_pixels_per_inch) PNGARG((png_structp png_ptr,
       
  2407 png_infop info_ptr));
       
  2408 
       
  2409 PNG_EXPORT(png_uint_32,png_get_y_pixels_per_inch) PNGARG((png_structp png_ptr,
       
  2410 png_infop info_ptr));
       
  2411 
       
  2412 PNG_EXPORT(float,png_get_x_offset_inches) PNGARG((png_structp png_ptr,
       
  2413 png_infop info_ptr));
       
  2414 
       
  2415 PNG_EXPORT(float,png_get_y_offset_inches) PNGARG((png_structp png_ptr,
       
  2416 png_infop info_ptr));
       
  2417 
       
  2418 #ifdef PNG_pHYs_SUPPORTED
       
  2419 PNG_EXPORT(png_uint_32,png_get_pHYs_dpi) PNGARG((png_structp png_ptr,
       
  2420 png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type));
       
  2421 #endif /* PNG_pHYs_SUPPORTED */
       
  2422 #endif  /* PNG_INCH_CONVERSIONS && PNG_FLOATING_POINT_SUPPORTED */
       
  2423 
       
  2424 /* Added in libpng-1.4.0 */
       
  2425 #ifdef PNG_IO_STATE_SUPPORTED
       
  2426 extern PNG_EXPORT(png_uint_32,png_get_io_state) PNGARG((png_structp png_ptr));
       
  2427 
       
  2428 extern PNG_EXPORT(png_bytep,png_get_io_chunk_name)
       
  2429    PNGARG((png_structp png_ptr));
       
  2430 
       
  2431 /* The flags returned by png_get_io_state() are the following: */
       
  2432 #define PNG_IO_NONE        0x0000   /* no I/O at this moment */
       
  2433 #define PNG_IO_READING     0x0001   /* currently reading */
       
  2434 #define PNG_IO_WRITING     0x0002   /* currently writing */
       
  2435 #define PNG_IO_SIGNATURE   0x0010   /* currently at the file signature */
       
  2436 #define PNG_IO_CHUNK_HDR   0x0020   /* currently at the chunk header */
       
  2437 #define PNG_IO_CHUNK_DATA  0x0040   /* currently at the chunk data */
       
  2438 #define PNG_IO_CHUNK_CRC   0x0080   /* currently at the chunk crc */
       
  2439 #define PNG_IO_MASK_OP     0x000f   /* current operation: reading/writing */
       
  2440 #define PNG_IO_MASK_LOC    0x00f0   /* current location: sig/hdr/data/crc */
       
  2441 #endif /* ?PNG_IO_STATE_SUPPORTED */
       
  2442 
       
  2443 /* Maintainer: Put new public prototypes here ^, in libpng.3, and project
       
  2444  * defs
  2783  */
  2445  */
  2784 
  2446 
  2785 #ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED
  2447 #ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED
  2786 /* With these routines we avoid an integer divide, which will be slower on
  2448 /* With these routines we avoid an integer divide, which will be slower on
  2787  * most machines.  However, it does take more operations than the corresponding
  2449  * most machines.  However, it does take more operations than the corresponding
  2818 
  2480 
  2819 #  define png_composite_16(composite, fg, alpha, bg)                         \
  2481 #  define png_composite_16(composite, fg, alpha, bg)                         \
  2820      (composite) = (png_uint_16)(((png_uint_32)(fg) * (png_uint_32)(alpha) + \
  2482      (composite) = (png_uint_16)(((png_uint_32)(fg) * (png_uint_32)(alpha) + \
  2821        (png_uint_32)(bg)*(png_uint_32)(65535L - (png_uint_32)(alpha)) +      \
  2483        (png_uint_32)(bg)*(png_uint_32)(65535L - (png_uint_32)(alpha)) +      \
  2822        (png_uint_32)32767) / (png_uint_32)65535L)
  2484        (png_uint_32)32767) / (png_uint_32)65535L)
  2823 
       
  2824 #endif /* PNG_READ_COMPOSITE_NODIV_SUPPORTED */
  2485 #endif /* PNG_READ_COMPOSITE_NODIV_SUPPORTED */
  2825 
  2486 
  2826 /* Inline macros to do direct reads of bytes from the input buffer.  These
  2487 #ifdef PNG_USE_READ_MACROS
  2827  * require that you are using an architecture that uses PNG byte ordering
  2488 /* Inline macros to do direct reads of bytes from the input buffer.
  2828  * (MSB first) and supports unaligned data storage.  I think that PowerPC
  2489  * The png_get_int_32() routine assumes we are using two's complement
  2829  * in big-endian mode and 680x0 are the only ones that will support this.
  2490  * format for negative values, which is almost certainly true.
  2830  * The x86 line of processors definitely do not.  The png_get_int_32()
  2491  */
  2831  * routine also assumes we are using two's complement format for negative
  2492 /* We could make special-case BIG_ENDIAN macros that do direct reads here */
  2832  * values, which is almost certainly true.
  2493 #  define png_get_uint_32(buf) \
  2833  */
  2494      (((png_uint_32)(*(buf)) << 24) + \
  2834 #if defined(PNG_READ_BIG_ENDIAN_SUPPORTED)
  2495       ((png_uint_32)(*((buf) + 1)) << 16) + \
  2835 #  define png_get_uint_32(buf) ( *((png_uint_32p) (buf)))
  2496       ((png_uint_32)(*((buf) + 2)) << 8) + \
  2836 #  define png_get_uint_16(buf) ( *((png_uint_16p) (buf)))
  2497       ((png_uint_32)(*((buf) + 3))))
  2837 #  define png_get_int_32(buf)  ( *((png_int_32p)  (buf)))
  2498 #  define png_get_uint_16(buf) \
       
  2499      (((png_uint_32)(*(buf)) << 8) + \
       
  2500       ((png_uint_32)(*((buf) + 1))))
       
  2501 #ifdef PNG_GET_INT_32_SUPPORTED
       
  2502 #  define png_get_int_32(buf) \
       
  2503      (((png_int_32)(*(buf)) << 24) + \
       
  2504       ((png_int_32)(*((buf) + 1)) << 16) + \
       
  2505       ((png_int_32)(*((buf) + 2)) << 8) + \
       
  2506       ((png_int_32)(*((buf) + 3))))
       
  2507 #endif
  2838 #else
  2508 #else
  2839 extern PNG_EXPORT(png_uint_32,png_get_uint_32) PNGARG((png_bytep buf));
  2509 extern PNG_EXPORT(png_uint_32,png_get_uint_32) PNGARG((png_bytep buf));
  2840 extern PNG_EXPORT(png_uint_16,png_get_uint_16) PNGARG((png_bytep buf));
  2510 extern PNG_EXPORT(png_uint_16,png_get_uint_16) PNGARG((png_bytep buf));
       
  2511 #ifdef PNG_GET_INT_32_SUPPORTED
  2841 extern PNG_EXPORT(png_int_32,png_get_int_32) PNGARG((png_bytep buf));
  2512 extern PNG_EXPORT(png_int_32,png_get_int_32) PNGARG((png_bytep buf));
  2842 #endif /* !PNG_READ_BIG_ENDIAN_SUPPORTED */
  2513 #endif
       
  2514 #endif
  2843 extern PNG_EXPORT(png_uint_32,png_get_uint_31)
  2515 extern PNG_EXPORT(png_uint_32,png_get_uint_31)
  2844   PNGARG((png_structp png_ptr, png_bytep buf));
  2516   PNGARG((png_structp png_ptr, png_bytep buf));
  2845 /* No png_get_int_16 -- may be added if there's a real need for it. */
  2517 /* No png_get_int_16 -- may be added if there's a real need for it. */
  2846 
  2518 
  2847 /* Place a 32-bit number into a buffer in PNG byte order (big-endian).
  2519 /* Place a 32-bit number into a buffer in PNG byte order (big-endian). */
  2848  */
       
  2849 extern PNG_EXPORT(void,png_save_uint_32)
  2520 extern PNG_EXPORT(void,png_save_uint_32)
  2850    PNGARG((png_bytep buf, png_uint_32 i));
  2521    PNGARG((png_bytep buf, png_uint_32 i));
  2851 extern PNG_EXPORT(void,png_save_int_32)
  2522 extern PNG_EXPORT(void,png_save_int_32)
  2852    PNGARG((png_bytep buf, png_int_32 i));
  2523    PNGARG((png_bytep buf, png_int_32 i));
  2853 
  2524 
  2859    PNGARG((png_bytep buf, unsigned int i));
  2530    PNGARG((png_bytep buf, unsigned int i));
  2860 /* No png_save_int_16 -- may be added if there's a real need for it. */
  2531 /* No png_save_int_16 -- may be added if there's a real need for it. */
  2861 
  2532 
  2862 /* ************************************************************************* */
  2533 /* ************************************************************************* */
  2863 
  2534 
  2864 /* These next functions are used internally in the code.  They generally
  2535 /* Various modes of operation.  Note that after an init, mode is set to
  2865  * shouldn't be used unless you are writing code to add or replace some
  2536  * zero automatically when the structure is created.
  2866  * functionality in libpng.  More information about most functions can
       
  2867  * be found in the files where the functions are located.
       
  2868  */
       
  2869 
       
  2870 
       
  2871 /* Various modes of operation, that are visible to applications because
       
  2872  * they are used for unknown chunk location.
       
  2873  */
  2537  */
  2874 #define PNG_HAVE_IHDR               0x01
  2538 #define PNG_HAVE_IHDR               0x01
  2875 #define PNG_HAVE_PLTE               0x02
  2539 #define PNG_HAVE_PLTE               0x02
  2876 #define PNG_HAVE_IDAT               0x04
  2540 #define PNG_HAVE_IDAT               0x04
  2877 #define PNG_AFTER_IDAT              0x08 /* Have complete zlib datastream */
  2541 #define PNG_AFTER_IDAT              0x08 /* Have complete zlib datastream */
  2878 #define PNG_HAVE_IEND               0x10
  2542 #define PNG_HAVE_IEND               0x10
  2879 
       
  2880 #if defined(PNG_INTERNAL)
       
  2881 
       
  2882 /* More modes of operation.  Note that after an init, mode is set to
       
  2883  * zero automatically when the structure is created.
       
  2884  */
       
  2885 #define PNG_HAVE_gAMA               0x20
  2543 #define PNG_HAVE_gAMA               0x20
  2886 #define PNG_HAVE_cHRM               0x40
  2544 #define PNG_HAVE_cHRM               0x40
  2887 #define PNG_HAVE_sRGB               0x80
       
  2888 #define PNG_HAVE_CHUNK_HEADER      0x100
       
  2889 #define PNG_WROTE_tIME             0x200
       
  2890 #define PNG_WROTE_INFO_BEFORE_PLTE 0x400
       
  2891 #define PNG_BACKGROUND_IS_GRAY     0x800
       
  2892 #define PNG_HAVE_PNG_SIGNATURE    0x1000
       
  2893 #define PNG_HAVE_CHUNK_AFTER_IDAT 0x2000 /* Have another chunk after IDAT */
       
  2894 
       
  2895 /* Flags for the transformations the PNG library does on the image data */
       
  2896 #define PNG_BGR                0x0001
       
  2897 #define PNG_INTERLACE          0x0002
       
  2898 #define PNG_PACK               0x0004
       
  2899 #define PNG_SHIFT              0x0008
       
  2900 #define PNG_SWAP_BYTES         0x0010
       
  2901 #define PNG_INVERT_MONO        0x0020
       
  2902 #define PNG_DITHER             0x0040
       
  2903 #define PNG_BACKGROUND         0x0080
       
  2904 #define PNG_BACKGROUND_EXPAND  0x0100
       
  2905                           /*   0x0200 unused */
       
  2906 #define PNG_16_TO_8            0x0400
       
  2907 #define PNG_RGBA               0x0800
       
  2908 #define PNG_EXPAND             0x1000
       
  2909 #define PNG_GAMMA              0x2000
       
  2910 #define PNG_GRAY_TO_RGB        0x4000
       
  2911 #define PNG_FILLER             0x8000L
       
  2912 #define PNG_PACKSWAP          0x10000L
       
  2913 #define PNG_SWAP_ALPHA        0x20000L
       
  2914 #define PNG_STRIP_ALPHA       0x40000L
       
  2915 #define PNG_INVERT_ALPHA      0x80000L
       
  2916 #define PNG_USER_TRANSFORM   0x100000L
       
  2917 #define PNG_RGB_TO_GRAY_ERR  0x200000L
       
  2918 #define PNG_RGB_TO_GRAY_WARN 0x400000L
       
  2919 #define PNG_RGB_TO_GRAY      0x600000L  /* two bits, RGB_TO_GRAY_ERR|WARN */
       
  2920                        /*    0x800000L     Unused */
       
  2921 #define PNG_ADD_ALPHA       0x1000000L  /* Added to libpng-1.2.7 */
       
  2922 #define PNG_EXPAND_tRNS     0x2000000L  /* Added to libpng-1.2.9 */
       
  2923                        /*   0x4000000L  unused */
       
  2924                        /*   0x8000000L  unused */
       
  2925                        /*  0x10000000L  unused */
       
  2926                        /*  0x20000000L  unused */
       
  2927                        /*  0x40000000L  unused */
       
  2928 
       
  2929 /* Flags for png_create_struct */
       
  2930 #define PNG_STRUCT_PNG   0x0001
       
  2931 #define PNG_STRUCT_INFO  0x0002
       
  2932 
       
  2933 /* Scaling factor for filter heuristic weighting calculations */
       
  2934 #define PNG_WEIGHT_SHIFT 8
       
  2935 #define PNG_WEIGHT_FACTOR (1<<(PNG_WEIGHT_SHIFT))
       
  2936 #define PNG_COST_SHIFT 3
       
  2937 #define PNG_COST_FACTOR (1<<(PNG_COST_SHIFT))
       
  2938 
       
  2939 /* Flags for the png_ptr->flags rather than declaring a byte for each one */
       
  2940 #define PNG_FLAG_ZLIB_CUSTOM_STRATEGY     0x0001
       
  2941 #define PNG_FLAG_ZLIB_CUSTOM_LEVEL        0x0002
       
  2942 #define PNG_FLAG_ZLIB_CUSTOM_MEM_LEVEL    0x0004
       
  2943 #define PNG_FLAG_ZLIB_CUSTOM_WINDOW_BITS  0x0008
       
  2944 #define PNG_FLAG_ZLIB_CUSTOM_METHOD       0x0010
       
  2945 #define PNG_FLAG_ZLIB_FINISHED            0x0020
       
  2946 #define PNG_FLAG_ROW_INIT                 0x0040
       
  2947 #define PNG_FLAG_FILLER_AFTER             0x0080
       
  2948 #define PNG_FLAG_CRC_ANCILLARY_USE        0x0100
       
  2949 #define PNG_FLAG_CRC_ANCILLARY_NOWARN     0x0200
       
  2950 #define PNG_FLAG_CRC_CRITICAL_USE         0x0400
       
  2951 #define PNG_FLAG_CRC_CRITICAL_IGNORE      0x0800
       
  2952 #define PNG_FLAG_FREE_PLTE                0x1000
       
  2953 #define PNG_FLAG_FREE_TRNS                0x2000
       
  2954 #define PNG_FLAG_FREE_HIST                0x4000
       
  2955 #define PNG_FLAG_KEEP_UNKNOWN_CHUNKS      0x8000L
       
  2956 #define PNG_FLAG_KEEP_UNSAFE_CHUNKS       0x10000L
       
  2957 #define PNG_FLAG_LIBRARY_MISMATCH         0x20000L
       
  2958 #define PNG_FLAG_STRIP_ERROR_NUMBERS      0x40000L
       
  2959 #define PNG_FLAG_STRIP_ERROR_TEXT         0x80000L
       
  2960 #define PNG_FLAG_MALLOC_NULL_MEM_OK       0x100000L
       
  2961 #define PNG_FLAG_ADD_ALPHA                0x200000L  /* Added to libpng-1.2.8 */
       
  2962 #define PNG_FLAG_STRIP_ALPHA              0x400000L  /* Added to libpng-1.2.8 */
       
  2963                                   /*      0x800000L  unused */
       
  2964                                   /*     0x1000000L  unused */
       
  2965                                   /*     0x2000000L  unused */
       
  2966                                   /*     0x4000000L  unused */
       
  2967                                   /*     0x8000000L  unused */
       
  2968                                   /*    0x10000000L  unused */
       
  2969                                   /*    0x20000000L  unused */
       
  2970                                   /*    0x40000000L  unused */
       
  2971 
       
  2972 #define PNG_FLAG_CRC_ANCILLARY_MASK (PNG_FLAG_CRC_ANCILLARY_USE | \
       
  2973                                      PNG_FLAG_CRC_ANCILLARY_NOWARN)
       
  2974 
       
  2975 #define PNG_FLAG_CRC_CRITICAL_MASK  (PNG_FLAG_CRC_CRITICAL_USE | \
       
  2976                                      PNG_FLAG_CRC_CRITICAL_IGNORE)
       
  2977 
       
  2978 #define PNG_FLAG_CRC_MASK           (PNG_FLAG_CRC_ANCILLARY_MASK | \
       
  2979                                      PNG_FLAG_CRC_CRITICAL_MASK)
       
  2980 
       
  2981 /* Save typing and make code easier to understand */
       
  2982 
       
  2983 #define PNG_COLOR_DIST(c1, c2) (abs((int)((c1).red) - (int)((c2).red)) + \
       
  2984    abs((int)((c1).green) - (int)((c2).green)) + \
       
  2985    abs((int)((c1).blue) - (int)((c2).blue)))
       
  2986 
       
  2987 /* Added to libpng-1.2.6 JB */
       
  2988 #define PNG_ROWBYTES(pixel_bits, width) \
       
  2989     ((pixel_bits) >= 8 ? \
       
  2990     ((width) * (((png_uint_32)(pixel_bits)) >> 3)) : \
       
  2991     (( ((width) * ((png_uint_32)(pixel_bits))) + 7) >> 3) )
       
  2992 
       
  2993 /* PNG_OUT_OF_RANGE returns true if value is outside the range
       
  2994  * ideal-delta..ideal+delta.  Each argument is evaluated twice.
       
  2995  * "ideal" and "delta" should be constants, normally simple
       
  2996  * integers, "value" a variable. Added to libpng-1.2.6 JB
       
  2997  */
       
  2998 #define PNG_OUT_OF_RANGE(value, ideal, delta) \
       
  2999         ( (value) < (ideal)-(delta) || (value) > (ideal)+(delta) )
       
  3000 
       
  3001 /* Variables declared in png.c - only it needs to define PNG_NO_EXTERN */
       
  3002 #if !defined(PNG_NO_EXTERN) || defined(PNG_ALWAYS_EXTERN)
       
  3003 /* Place to hold the signature string for a PNG file. */
       
  3004 #ifdef PNG_USE_GLOBAL_ARRAYS
       
  3005    PNG_EXPORT_VAR (PNG_CONST png_byte FARDATA) png_sig[8];
       
  3006 #else
       
  3007 #endif
       
  3008 #endif /* PNG_NO_EXTERN */
       
  3009 
       
  3010 /* Constant strings for known chunk types.  If you need to add a chunk,
       
  3011  * define the name here, and add an invocation of the macro in png.c and
       
  3012  * wherever it's needed.
       
  3013  */
       
  3014 #define PNG_IHDR png_byte png_IHDR[5] = { 73,  72,  68,  82, '\0'}
       
  3015 #define PNG_IDAT png_byte png_IDAT[5] = { 73,  68,  65,  84, '\0'}
       
  3016 #define PNG_IEND png_byte png_IEND[5] = { 73,  69,  78,  68, '\0'}
       
  3017 #define PNG_PLTE png_byte png_PLTE[5] = { 80,  76,  84,  69, '\0'}
       
  3018 #define PNG_bKGD png_byte png_bKGD[5] = { 98,  75,  71,  68, '\0'}
       
  3019 #define PNG_cHRM png_byte png_cHRM[5] = { 99,  72,  82,  77, '\0'}
       
  3020 #define PNG_gAMA png_byte png_gAMA[5] = {103,  65,  77,  65, '\0'}
       
  3021 #define PNG_hIST png_byte png_hIST[5] = {104,  73,  83,  84, '\0'}
       
  3022 #define PNG_iCCP png_byte png_iCCP[5] = {105,  67,  67,  80, '\0'}
       
  3023 #define PNG_iTXt png_byte png_iTXt[5] = {105,  84,  88, 116, '\0'}
       
  3024 #define PNG_oFFs png_byte png_oFFs[5] = {111,  70,  70, 115, '\0'}
       
  3025 #define PNG_pCAL png_byte png_pCAL[5] = {112,  67,  65,  76, '\0'}
       
  3026 #define PNG_sCAL png_byte png_sCAL[5] = {115,  67,  65,  76, '\0'}
       
  3027 #define PNG_pHYs png_byte png_pHYs[5] = {112,  72,  89, 115, '\0'}
       
  3028 #define PNG_sBIT png_byte png_sBIT[5] = {115,  66,  73,  84, '\0'}
       
  3029 #define PNG_sPLT png_byte png_sPLT[5] = {115,  80,  76,  84, '\0'}
       
  3030 #define PNG_sRGB png_byte png_sRGB[5] = {115,  82,  71,  66, '\0'}
       
  3031 #define PNG_tEXt png_byte png_tEXt[5] = {116,  69,  88, 116, '\0'}
       
  3032 #define PNG_tIME png_byte png_tIME[5] = {116,  73,  77,  69, '\0'}
       
  3033 #define PNG_tRNS png_byte png_tRNS[5] = {116,  82,  78,  83, '\0'}
       
  3034 #define PNG_zTXt png_byte png_zTXt[5] = {122,  84,  88, 116, '\0'}
       
  3035 
       
  3036 #ifdef PNG_USE_GLOBAL_ARRAYS
       
  3037 PNG_EXPORT_VAR (png_byte FARDATA) png_IHDR[5];
       
  3038 PNG_EXPORT_VAR (png_byte FARDATA) png_IDAT[5];
       
  3039 PNG_EXPORT_VAR (png_byte FARDATA) png_IEND[5];
       
  3040 PNG_EXPORT_VAR (png_byte FARDATA) png_PLTE[5];
       
  3041 PNG_EXPORT_VAR (png_byte FARDATA) png_bKGD[5];
       
  3042 PNG_EXPORT_VAR (png_byte FARDATA) png_cHRM[5];
       
  3043 PNG_EXPORT_VAR (png_byte FARDATA) png_gAMA[5];
       
  3044 PNG_EXPORT_VAR (png_byte FARDATA) png_hIST[5];
       
  3045 PNG_EXPORT_VAR (png_byte FARDATA) png_iCCP[5];
       
  3046 PNG_EXPORT_VAR (png_byte FARDATA) png_iTXt[5];
       
  3047 PNG_EXPORT_VAR (png_byte FARDATA) png_oFFs[5];
       
  3048 PNG_EXPORT_VAR (png_byte FARDATA) png_pCAL[5];
       
  3049 PNG_EXPORT_VAR (png_byte FARDATA) png_sCAL[5];
       
  3050 PNG_EXPORT_VAR (png_byte FARDATA) png_pHYs[5];
       
  3051 PNG_EXPORT_VAR (png_byte FARDATA) png_sBIT[5];
       
  3052 PNG_EXPORT_VAR (png_byte FARDATA) png_sPLT[5];
       
  3053 PNG_EXPORT_VAR (png_byte FARDATA) png_sRGB[5];
       
  3054 PNG_EXPORT_VAR (png_byte FARDATA) png_tEXt[5];
       
  3055 PNG_EXPORT_VAR (png_byte FARDATA) png_tIME[5];
       
  3056 PNG_EXPORT_VAR (png_byte FARDATA) png_tRNS[5];
       
  3057 PNG_EXPORT_VAR (png_byte FARDATA) png_zTXt[5];
       
  3058 #endif /* PNG_USE_GLOBAL_ARRAYS */
       
  3059 
       
  3060 #if defined(PNG_1_0_X) || defined (PNG_1_2_X)
       
  3061 /* Initialize png_ptr struct for reading, and allocate any other memory.
       
  3062  * (old interface - DEPRECATED - use png_create_read_struct instead).
       
  3063  */
       
  3064 extern PNG_EXPORT(void,png_read_init) PNGARG((png_structp png_ptr));
       
  3065 #undef png_read_init
       
  3066 #define png_read_init(png_ptr) png_read_init_3(&png_ptr, \
       
  3067     PNG_LIBPNG_VER_STRING,  png_sizeof(png_struct));
       
  3068 #endif
       
  3069 
       
  3070 extern PNG_EXPORT(void,png_read_init_3) PNGARG((png_structpp ptr_ptr,
       
  3071     png_const_charp user_png_ver, png_size_t png_struct_size));
       
  3072 #if defined(PNG_1_0_X) || defined (PNG_1_2_X)
       
  3073 extern PNG_EXPORT(void,png_read_init_2) PNGARG((png_structp png_ptr,
       
  3074     png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t
       
  3075     png_info_size));
       
  3076 #endif
       
  3077 
       
  3078 #if defined(PNG_1_0_X) || defined (PNG_1_2_X)
       
  3079 /* Initialize png_ptr struct for writing, and allocate any other memory.
       
  3080  * (old interface - DEPRECATED - use png_create_write_struct instead).
       
  3081  */
       
  3082 extern PNG_EXPORT(void,png_write_init) PNGARG((png_structp png_ptr));
       
  3083 #undef png_write_init
       
  3084 #define png_write_init(png_ptr) png_write_init_3(&png_ptr, \
       
  3085     PNG_LIBPNG_VER_STRING, png_sizeof(png_struct));
       
  3086 #endif
       
  3087 
       
  3088 extern PNG_EXPORT(void,png_write_init_3) PNGARG((png_structpp ptr_ptr,
       
  3089     png_const_charp user_png_ver, png_size_t png_struct_size));
       
  3090 extern PNG_EXPORT(void,png_write_init_2) PNGARG((png_structp png_ptr,
       
  3091     png_const_charp user_png_ver, png_size_t png_struct_size, png_size_t
       
  3092     png_info_size));
       
  3093 
       
  3094 /* Allocate memory for an internal libpng struct */
       
  3095 PNG_EXTERN png_voidp png_create_struct PNGARG((int type));
       
  3096 
       
  3097 /* Free memory from internal libpng struct */
       
  3098 PNG_EXTERN void png_destroy_struct PNGARG((png_voidp struct_ptr));
       
  3099 
       
  3100 PNG_EXTERN png_voidp png_create_struct_2 PNGARG((int type, png_malloc_ptr
       
  3101   malloc_fn, png_voidp mem_ptr));
       
  3102 PNG_EXTERN void png_destroy_struct_2 PNGARG((png_voidp struct_ptr,
       
  3103    png_free_ptr free_fn, png_voidp mem_ptr));
       
  3104 
       
  3105 /* Free any memory that info_ptr points to and reset struct. */
       
  3106 PNG_EXTERN void png_info_destroy PNGARG((png_structp png_ptr,
       
  3107    png_infop info_ptr));
       
  3108 
       
  3109 #ifndef PNG_1_0_X
       
  3110 /* Function to allocate memory for zlib. */
       
  3111 PNG_EXTERN voidpf png_zalloc PNGARG((voidpf png_ptr, uInt items, uInt size));
       
  3112 
       
  3113 /* Function to free memory for zlib */
       
  3114 PNG_EXTERN void png_zfree PNGARG((voidpf png_ptr, voidpf ptr));
       
  3115 
       
  3116 #ifdef PNG_SIZE_T
       
  3117 /* Function to convert a sizeof an item to png_sizeof item */
       
  3118    PNG_EXTERN png_size_t PNGAPI png_convert_size PNGARG((size_t size));
       
  3119 #endif
       
  3120 
       
  3121 /* Next four functions are used internally as callbacks.  PNGAPI is required
       
  3122  * but not PNG_EXPORT.  PNGAPI added at libpng version 1.2.3.
       
  3123  */
       
  3124 
       
  3125 PNG_EXTERN void PNGAPI png_default_read_data PNGARG((png_structp png_ptr,
       
  3126    png_bytep data, png_size_t length));
       
  3127 
       
  3128 #ifdef PNG_PROGRESSIVE_READ_SUPPORTED
       
  3129 PNG_EXTERN void PNGAPI png_push_fill_buffer PNGARG((png_structp png_ptr,
       
  3130    png_bytep buffer, png_size_t length));
       
  3131 #endif
       
  3132 
       
  3133 PNG_EXTERN void PNGAPI png_default_write_data PNGARG((png_structp png_ptr,
       
  3134    png_bytep data, png_size_t length));
       
  3135 
       
  3136 #if defined(PNG_WRITE_FLUSH_SUPPORTED)
       
  3137 #if !defined(PNG_NO_STDIO)
       
  3138 PNG_EXTERN void PNGAPI png_default_flush PNGARG((png_structp png_ptr));
       
  3139 #endif
       
  3140 #endif
       
  3141 #else /* PNG_1_0_X */
       
  3142 #ifdef PNG_PROGRESSIVE_READ_SUPPORTED
       
  3143 PNG_EXTERN void png_push_fill_buffer PNGARG((png_structp png_ptr,
       
  3144    png_bytep buffer, png_size_t length));
       
  3145 #endif
       
  3146 #endif /* PNG_1_0_X */
       
  3147 
       
  3148 /* Reset the CRC variable */
       
  3149 PNG_EXTERN void png_reset_crc PNGARG((png_structp png_ptr));
       
  3150 
       
  3151 /* Write the "data" buffer to whatever output you are using. */
       
  3152 PNG_EXTERN void png_write_data PNGARG((png_structp png_ptr, png_bytep data,
       
  3153    png_size_t length));
       
  3154 
       
  3155 /* Read data from whatever input you are using into the "data" buffer */
       
  3156 PNG_EXTERN void png_read_data PNGARG((png_structp png_ptr, png_bytep data,
       
  3157    png_size_t length));
       
  3158 
       
  3159 /* Read bytes into buf, and update png_ptr->crc */
       
  3160 PNG_EXTERN void png_crc_read PNGARG((png_structp png_ptr, png_bytep buf,
       
  3161    png_size_t length));
       
  3162 
       
  3163 /* Decompress data in a chunk that uses compression */
       
  3164 #if defined(PNG_zTXt_SUPPORTED) || defined(PNG_iTXt_SUPPORTED) || \
       
  3165     defined(PNG_iCCP_SUPPORTED) || defined(PNG_sPLT_SUPPORTED)
       
  3166 PNG_EXTERN void png_decompress_chunk PNGARG((png_structp png_ptr,
       
  3167    int comp_type, png_size_t chunklength,
       
  3168    png_size_t prefix_length, png_size_t *data_length));
       
  3169 #endif
       
  3170 
       
  3171 /* Read "skip" bytes, read the file crc, and (optionally) verify png_ptr->crc */
       
  3172 PNG_EXTERN int png_crc_finish PNGARG((png_structp png_ptr, png_uint_32 skip));
       
  3173 
       
  3174 /* Read the CRC from the file and compare it to the libpng calculated CRC */
       
  3175 PNG_EXTERN int png_crc_error PNGARG((png_structp png_ptr));
       
  3176 
       
  3177 /* Calculate the CRC over a section of data.  Note that we are only
       
  3178  * passing a maximum of 64K on systems that have this as a memory limit,
       
  3179  * since this is the maximum buffer size we can specify.
       
  3180  */
       
  3181 PNG_EXTERN void png_calculate_crc PNGARG((png_structp png_ptr, png_bytep ptr,
       
  3182    png_size_t length));
       
  3183 
       
  3184 #if defined(PNG_WRITE_FLUSH_SUPPORTED)
       
  3185 PNG_EXTERN void png_flush PNGARG((png_structp png_ptr));
       
  3186 #endif
       
  3187 
       
  3188 /* Simple function to write the signature */
       
  3189 PNG_EXTERN void png_write_sig PNGARG((png_structp png_ptr));
       
  3190 
       
  3191 /* Write various chunks */
       
  3192 
       
  3193 /* Write the IHDR chunk, and update the png_struct with the necessary
       
  3194  * information.
       
  3195  */
       
  3196 PNG_EXTERN void png_write_IHDR PNGARG((png_structp png_ptr, png_uint_32 width,
       
  3197    png_uint_32 height,
       
  3198    int bit_depth, int color_type, int compression_method, int filter_method,
       
  3199    int interlace_method));
       
  3200 
       
  3201 PNG_EXTERN void png_write_PLTE PNGARG((png_structp png_ptr, png_colorp palette,
       
  3202    png_uint_32 num_pal));
       
  3203 
       
  3204 PNG_EXTERN void png_write_IDAT PNGARG((png_structp png_ptr, png_bytep data,
       
  3205    png_size_t length));
       
  3206 
       
  3207 PNG_EXTERN void png_write_IEND PNGARG((png_structp png_ptr));
       
  3208 
       
  3209 #if defined(PNG_WRITE_gAMA_SUPPORTED)
       
  3210 #ifdef PNG_FLOATING_POINT_SUPPORTED
       
  3211 PNG_EXTERN void png_write_gAMA PNGARG((png_structp png_ptr, double file_gamma));
       
  3212 #endif
       
  3213 #ifdef PNG_FIXED_POINT_SUPPORTED
       
  3214 PNG_EXTERN void png_write_gAMA_fixed PNGARG((png_structp png_ptr, png_fixed_point
       
  3215     file_gamma));
       
  3216 #endif
       
  3217 #endif
       
  3218 
       
  3219 #if defined(PNG_WRITE_sBIT_SUPPORTED)
       
  3220 PNG_EXTERN void png_write_sBIT PNGARG((png_structp png_ptr, png_color_8p sbit,
       
  3221    int color_type));
       
  3222 #endif
       
  3223 
       
  3224 #if defined(PNG_WRITE_cHRM_SUPPORTED)
       
  3225 #ifdef PNG_FLOATING_POINT_SUPPORTED
       
  3226 PNG_EXTERN void png_write_cHRM PNGARG((png_structp png_ptr,
       
  3227    double white_x, double white_y,
       
  3228    double red_x, double red_y, double green_x, double green_y,
       
  3229    double blue_x, double blue_y));
       
  3230 #endif
       
  3231 #ifdef PNG_FIXED_POINT_SUPPORTED
       
  3232 PNG_EXTERN void png_write_cHRM_fixed PNGARG((png_structp png_ptr,
       
  3233    png_fixed_point int_white_x, png_fixed_point int_white_y,
       
  3234    png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point
       
  3235    int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x,
       
  3236    png_fixed_point int_blue_y));
       
  3237 #endif
       
  3238 #endif
       
  3239 
       
  3240 #if defined(PNG_WRITE_sRGB_SUPPORTED)
       
  3241 PNG_EXTERN void png_write_sRGB PNGARG((png_structp png_ptr,
       
  3242    int intent));
       
  3243 #endif
       
  3244 
       
  3245 #if defined(PNG_WRITE_iCCP_SUPPORTED)
       
  3246 PNG_EXTERN void png_write_iCCP PNGARG((png_structp png_ptr,
       
  3247    png_charp name, int compression_type,
       
  3248    png_charp profile, int proflen));
       
  3249    /* Note to maintainer: profile should be png_bytep */
       
  3250 #endif
       
  3251 
       
  3252 #if defined(PNG_WRITE_sPLT_SUPPORTED)
       
  3253 PNG_EXTERN void png_write_sPLT PNGARG((png_structp png_ptr,
       
  3254    png_sPLT_tp palette));
       
  3255 #endif
       
  3256 
       
  3257 #if defined(PNG_WRITE_tRNS_SUPPORTED)
       
  3258 PNG_EXTERN void png_write_tRNS PNGARG((png_structp png_ptr, png_bytep trans,
       
  3259    png_color_16p values, int number, int color_type));
       
  3260 #endif
       
  3261 
       
  3262 #if defined(PNG_WRITE_bKGD_SUPPORTED)
       
  3263 PNG_EXTERN void png_write_bKGD PNGARG((png_structp png_ptr,
       
  3264    png_color_16p values, int color_type));
       
  3265 #endif
       
  3266 
       
  3267 #if defined(PNG_WRITE_hIST_SUPPORTED)
       
  3268 PNG_EXTERN void png_write_hIST PNGARG((png_structp png_ptr, png_uint_16p hist,
       
  3269    int num_hist));
       
  3270 #endif
       
  3271 
       
  3272 #if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_pCAL_SUPPORTED) || \
       
  3273     defined(PNG_WRITE_iCCP_SUPPORTED) || defined(PNG_WRITE_sPLT_SUPPORTED)
       
  3274 PNG_EXTERN png_size_t png_check_keyword PNGARG((png_structp png_ptr,
       
  3275    png_charp key, png_charpp new_key));
       
  3276 #endif
       
  3277 
       
  3278 #if defined(PNG_WRITE_tEXt_SUPPORTED)
       
  3279 PNG_EXTERN void png_write_tEXt PNGARG((png_structp png_ptr, png_charp key,
       
  3280    png_charp text, png_size_t text_len));
       
  3281 #endif
       
  3282 
       
  3283 #if defined(PNG_WRITE_zTXt_SUPPORTED)
       
  3284 PNG_EXTERN void png_write_zTXt PNGARG((png_structp png_ptr, png_charp key,
       
  3285    png_charp text, png_size_t text_len, int compression));
       
  3286 #endif
       
  3287 
       
  3288 #if defined(PNG_WRITE_iTXt_SUPPORTED)
       
  3289 PNG_EXTERN void png_write_iTXt PNGARG((png_structp png_ptr,
       
  3290    int compression, png_charp key, png_charp lang, png_charp lang_key,
       
  3291    png_charp text));
       
  3292 #endif
       
  3293 
       
  3294 #if defined(PNG_TEXT_SUPPORTED)  /* Added at version 1.0.14 and 1.2.4 */
       
  3295 PNG_EXTERN int png_set_text_2 PNGARG((png_structp png_ptr,
       
  3296    png_infop info_ptr, png_textp text_ptr, int num_text));
       
  3297 #endif
       
  3298 
       
  3299 #if defined(PNG_WRITE_oFFs_SUPPORTED)
       
  3300 PNG_EXTERN void png_write_oFFs PNGARG((png_structp png_ptr,
       
  3301    png_int_32 x_offset, png_int_32 y_offset, int unit_type));
       
  3302 #endif
       
  3303 
       
  3304 #if defined(PNG_WRITE_pCAL_SUPPORTED)
       
  3305 PNG_EXTERN void png_write_pCAL PNGARG((png_structp png_ptr, png_charp purpose,
       
  3306    png_int_32 X0, png_int_32 X1, int type, int nparams,
       
  3307    png_charp units, png_charpp params));
       
  3308 #endif
       
  3309 
       
  3310 #if defined(PNG_WRITE_pHYs_SUPPORTED)
       
  3311 PNG_EXTERN void png_write_pHYs PNGARG((png_structp png_ptr,
       
  3312    png_uint_32 x_pixels_per_unit, png_uint_32 y_pixels_per_unit,
       
  3313    int unit_type));
       
  3314 #endif
       
  3315 
       
  3316 #if defined(PNG_WRITE_tIME_SUPPORTED)
       
  3317 PNG_EXTERN void png_write_tIME PNGARG((png_structp png_ptr,
       
  3318    png_timep mod_time));
       
  3319 #endif
       
  3320 
       
  3321 #if defined(PNG_WRITE_sCAL_SUPPORTED)
       
  3322 #if defined(PNG_FLOATING_POINT_SUPPORTED) && !defined(PNG_NO_STDIO)
       
  3323 PNG_EXTERN void png_write_sCAL PNGARG((png_structp png_ptr,
       
  3324    int unit, double width, double height));
       
  3325 #else
       
  3326 #ifdef PNG_FIXED_POINT_SUPPORTED
       
  3327 PNG_EXTERN void png_write_sCAL_s PNGARG((png_structp png_ptr,
       
  3328    int unit, png_charp width, png_charp height));
       
  3329 #endif
       
  3330 #endif
       
  3331 #endif
       
  3332 
       
  3333 /* Called when finished processing a row of data */
       
  3334 PNG_EXTERN void png_write_finish_row PNGARG((png_structp png_ptr));
       
  3335 
       
  3336 /* Internal use only.   Called before first row of data */
       
  3337 PNG_EXTERN void png_write_start_row PNGARG((png_structp png_ptr));
       
  3338 
       
  3339 #if defined(PNG_READ_GAMMA_SUPPORTED)
       
  3340 PNG_EXTERN void png_build_gamma_table PNGARG((png_structp png_ptr));
       
  3341 #endif
       
  3342 
       
  3343 /* Combine a row of data, dealing with alpha, etc. if requested */
       
  3344 PNG_EXTERN void png_combine_row PNGARG((png_structp png_ptr, png_bytep row,
       
  3345    int mask));
       
  3346 
       
  3347 #if defined(PNG_READ_INTERLACING_SUPPORTED)
       
  3348 /* Expand an interlaced row */
       
  3349 /* OLD pre-1.0.9 interface:
       
  3350 PNG_EXTERN void png_do_read_interlace PNGARG((png_row_infop row_info,
       
  3351    png_bytep row, int pass, png_uint_32 transformations));
       
  3352  */
       
  3353 PNG_EXTERN void png_do_read_interlace PNGARG((png_structp png_ptr));
       
  3354 #endif
       
  3355 
       
  3356 /* GRR TO DO (2.0 or whenever):  simplify other internal calling interfaces */
       
  3357 
       
  3358 #if defined(PNG_WRITE_INTERLACING_SUPPORTED)
       
  3359 /* Grab pixels out of a row for an interlaced pass */
       
  3360 PNG_EXTERN void png_do_write_interlace PNGARG((png_row_infop row_info,
       
  3361    png_bytep row, int pass));
       
  3362 #endif
       
  3363 
       
  3364 /* Unfilter a row */
       
  3365 PNG_EXTERN void png_read_filter_row PNGARG((png_structp png_ptr,
       
  3366    png_row_infop row_info, png_bytep row, png_bytep prev_row, int filter));
       
  3367 
       
  3368 /* Choose the best filter to use and filter the row data */
       
  3369 PNG_EXTERN void png_write_find_filter PNGARG((png_structp png_ptr,
       
  3370    png_row_infop row_info));
       
  3371 
       
  3372 /* Write out the filtered row. */
       
  3373 PNG_EXTERN void png_write_filtered_row PNGARG((png_structp png_ptr,
       
  3374    png_bytep filtered_row));
       
  3375 /* Finish a row while reading, dealing with interlacing passes, etc. */
       
  3376 PNG_EXTERN void png_read_finish_row PNGARG((png_structp png_ptr));
       
  3377 
       
  3378 /* Initialize the row buffers, etc. */
       
  3379 PNG_EXTERN void png_read_start_row PNGARG((png_structp png_ptr));
       
  3380 /* Optional call to update the users info structure */
       
  3381 PNG_EXTERN void png_read_transform_info PNGARG((png_structp png_ptr,
       
  3382    png_infop info_ptr));
       
  3383 
       
  3384 /* These are the functions that do the transformations */
       
  3385 #if defined(PNG_READ_FILLER_SUPPORTED)
       
  3386 PNG_EXTERN void png_do_read_filler PNGARG((png_row_infop row_info,
       
  3387    png_bytep row, png_uint_32 filler, png_uint_32 flags));
       
  3388 #endif
       
  3389 
       
  3390 #if defined(PNG_READ_SWAP_ALPHA_SUPPORTED)
       
  3391 PNG_EXTERN void png_do_read_swap_alpha PNGARG((png_row_infop row_info,
       
  3392    png_bytep row));
       
  3393 #endif
       
  3394 
       
  3395 #if defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)
       
  3396 PNG_EXTERN void png_do_write_swap_alpha PNGARG((png_row_infop row_info,
       
  3397    png_bytep row));
       
  3398 #endif
       
  3399 
       
  3400 #if defined(PNG_READ_INVERT_ALPHA_SUPPORTED)
       
  3401 PNG_EXTERN void png_do_read_invert_alpha PNGARG((png_row_infop row_info,
       
  3402    png_bytep row));
       
  3403 #endif
       
  3404 
       
  3405 #if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
       
  3406 PNG_EXTERN void png_do_write_invert_alpha PNGARG((png_row_infop row_info,
       
  3407    png_bytep row));
       
  3408 #endif
       
  3409 
       
  3410 #if defined(PNG_WRITE_FILLER_SUPPORTED) || \
       
  3411     defined(PNG_READ_STRIP_ALPHA_SUPPORTED)
       
  3412 PNG_EXTERN void png_do_strip_filler PNGARG((png_row_infop row_info,
       
  3413    png_bytep row, png_uint_32 flags));
       
  3414 #endif
       
  3415 
       
  3416 #if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
       
  3417 PNG_EXTERN void png_do_swap PNGARG((png_row_infop row_info, png_bytep row));
       
  3418 #endif
       
  3419 
       
  3420 #if defined(PNG_READ_PACKSWAP_SUPPORTED) || defined(PNG_WRITE_PACKSWAP_SUPPORTED)
       
  3421 PNG_EXTERN void png_do_packswap PNGARG((png_row_infop row_info, png_bytep row));
       
  3422 #endif
       
  3423 
       
  3424 #if defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
       
  3425 PNG_EXTERN int png_do_rgb_to_gray PNGARG((png_structp png_ptr, png_row_infop
       
  3426    row_info, png_bytep row));
       
  3427 #endif
       
  3428 
       
  3429 #if defined(PNG_READ_GRAY_TO_RGB_SUPPORTED)
       
  3430 PNG_EXTERN void png_do_gray_to_rgb PNGARG((png_row_infop row_info,
       
  3431    png_bytep row));
       
  3432 #endif
       
  3433 
       
  3434 #if defined(PNG_READ_PACK_SUPPORTED)
       
  3435 PNG_EXTERN void png_do_unpack PNGARG((png_row_infop row_info, png_bytep row));
       
  3436 #endif
       
  3437 
       
  3438 #if defined(PNG_READ_SHIFT_SUPPORTED)
       
  3439 PNG_EXTERN void png_do_unshift PNGARG((png_row_infop row_info, png_bytep row,
       
  3440    png_color_8p sig_bits));
       
  3441 #endif
       
  3442 
       
  3443 #if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED)
       
  3444 PNG_EXTERN void png_do_invert PNGARG((png_row_infop row_info, png_bytep row));
       
  3445 #endif
       
  3446 
       
  3447 #if defined(PNG_READ_16_TO_8_SUPPORTED)
       
  3448 PNG_EXTERN void png_do_chop PNGARG((png_row_infop row_info, png_bytep row));
       
  3449 #endif
       
  3450 
       
  3451 #if defined(PNG_READ_DITHER_SUPPORTED)
       
  3452 PNG_EXTERN void png_do_dither PNGARG((png_row_infop row_info,
       
  3453    png_bytep row, png_bytep palette_lookup, png_bytep dither_lookup));
       
  3454 
       
  3455 #  if defined(PNG_CORRECT_PALETTE_SUPPORTED)
       
  3456 PNG_EXTERN void png_correct_palette PNGARG((png_structp png_ptr,
       
  3457    png_colorp palette, int num_palette));
       
  3458 #  endif
       
  3459 #endif
       
  3460 
       
  3461 #if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
       
  3462 PNG_EXTERN void png_do_bgr PNGARG((png_row_infop row_info, png_bytep row));
       
  3463 #endif
       
  3464 
       
  3465 #if defined(PNG_WRITE_PACK_SUPPORTED)
       
  3466 PNG_EXTERN void png_do_pack PNGARG((png_row_infop row_info,
       
  3467    png_bytep row, png_uint_32 bit_depth));
       
  3468 #endif
       
  3469 
       
  3470 #if defined(PNG_WRITE_SHIFT_SUPPORTED)
       
  3471 PNG_EXTERN void png_do_shift PNGARG((png_row_infop row_info, png_bytep row,
       
  3472    png_color_8p bit_depth));
       
  3473 #endif
       
  3474 
       
  3475 #if defined(PNG_READ_BACKGROUND_SUPPORTED)
       
  3476 #if defined(PNG_READ_GAMMA_SUPPORTED)
       
  3477 PNG_EXTERN void png_do_background PNGARG((png_row_infop row_info, png_bytep row,
       
  3478    png_color_16p trans_values, png_color_16p background,
       
  3479    png_color_16p background_1,
       
  3480    png_bytep gamma_table, png_bytep gamma_from_1, png_bytep gamma_to_1,
       
  3481    png_uint_16pp gamma_16, png_uint_16pp gamma_16_from_1,
       
  3482    png_uint_16pp gamma_16_to_1, int gamma_shift));
       
  3483 #else
       
  3484 PNG_EXTERN void png_do_background PNGARG((png_row_infop row_info, png_bytep row,
       
  3485    png_color_16p trans_values, png_color_16p background));
       
  3486 #endif
       
  3487 #endif
       
  3488 
       
  3489 #if defined(PNG_READ_GAMMA_SUPPORTED)
       
  3490 PNG_EXTERN void png_do_gamma PNGARG((png_row_infop row_info, png_bytep row,
       
  3491    png_bytep gamma_table, png_uint_16pp gamma_16_table,
       
  3492    int gamma_shift));
       
  3493 #endif
       
  3494 
       
  3495 #if defined(PNG_READ_EXPAND_SUPPORTED)
       
  3496 PNG_EXTERN void png_do_expand_palette PNGARG((png_row_infop row_info,
       
  3497    png_bytep row, png_colorp palette, png_bytep trans, int num_trans));
       
  3498 PNG_EXTERN void png_do_expand PNGARG((png_row_infop row_info,
       
  3499    png_bytep row, png_color_16p trans_value));
       
  3500 #endif
       
  3501 
       
  3502 /* The following decodes the appropriate chunks, and does error correction,
       
  3503  * then calls the appropriate callback for the chunk if it is valid.
       
  3504  */
       
  3505 
       
  3506 /* Decode the IHDR chunk */
       
  3507 PNG_EXTERN void png_handle_IHDR PNGARG((png_structp png_ptr, png_infop info_ptr,
       
  3508    png_uint_32 length));
       
  3509 PNG_EXTERN void png_handle_PLTE PNGARG((png_structp png_ptr, png_infop info_ptr,
       
  3510    png_uint_32 length));
       
  3511 PNG_EXTERN void png_handle_IEND PNGARG((png_structp png_ptr, png_infop info_ptr,
       
  3512    png_uint_32 length));
       
  3513 
       
  3514 #if defined(PNG_READ_bKGD_SUPPORTED)
       
  3515 PNG_EXTERN void png_handle_bKGD PNGARG((png_structp png_ptr, png_infop info_ptr,
       
  3516    png_uint_32 length));
       
  3517 #endif
       
  3518 
       
  3519 #if defined(PNG_READ_cHRM_SUPPORTED)
       
  3520 PNG_EXTERN void png_handle_cHRM PNGARG((png_structp png_ptr, png_infop info_ptr,
       
  3521    png_uint_32 length));
       
  3522 #endif
       
  3523 
       
  3524 #if defined(PNG_READ_gAMA_SUPPORTED)
       
  3525 PNG_EXTERN void png_handle_gAMA PNGARG((png_structp png_ptr, png_infop info_ptr,
       
  3526    png_uint_32 length));
       
  3527 #endif
       
  3528 
       
  3529 #if defined(PNG_READ_hIST_SUPPORTED)
       
  3530 PNG_EXTERN void png_handle_hIST PNGARG((png_structp png_ptr, png_infop info_ptr,
       
  3531    png_uint_32 length));
       
  3532 #endif
       
  3533 
       
  3534 #if defined(PNG_READ_iCCP_SUPPORTED)
       
  3535 extern void png_handle_iCCP PNGARG((png_structp png_ptr, png_infop info_ptr,
       
  3536    png_uint_32 length));
       
  3537 #endif /* PNG_READ_iCCP_SUPPORTED */
       
  3538 
       
  3539 #if defined(PNG_READ_iTXt_SUPPORTED)
       
  3540 PNG_EXTERN void png_handle_iTXt PNGARG((png_structp png_ptr, png_infop info_ptr,
       
  3541    png_uint_32 length));
       
  3542 #endif
       
  3543 
       
  3544 #if defined(PNG_READ_oFFs_SUPPORTED)
       
  3545 PNG_EXTERN void png_handle_oFFs PNGARG((png_structp png_ptr, png_infop info_ptr,
       
  3546    png_uint_32 length));
       
  3547 #endif
       
  3548 
       
  3549 #if defined(PNG_READ_pCAL_SUPPORTED)
       
  3550 PNG_EXTERN void png_handle_pCAL PNGARG((png_structp png_ptr, png_infop info_ptr,
       
  3551    png_uint_32 length));
       
  3552 #endif
       
  3553 
       
  3554 #if defined(PNG_READ_pHYs_SUPPORTED)
       
  3555 PNG_EXTERN void png_handle_pHYs PNGARG((png_structp png_ptr, png_infop info_ptr,
       
  3556    png_uint_32 length));
       
  3557 #endif
       
  3558 
       
  3559 #if defined(PNG_READ_sBIT_SUPPORTED)
       
  3560 PNG_EXTERN void png_handle_sBIT PNGARG((png_structp png_ptr, png_infop info_ptr,
       
  3561    png_uint_32 length));
       
  3562 #endif
       
  3563 
       
  3564 #if defined(PNG_READ_sCAL_SUPPORTED)
       
  3565 PNG_EXTERN void png_handle_sCAL PNGARG((png_structp png_ptr, png_infop info_ptr,
       
  3566    png_uint_32 length));
       
  3567 #endif
       
  3568 
       
  3569 #if defined(PNG_READ_sPLT_SUPPORTED)
       
  3570 extern void png_handle_sPLT PNGARG((png_structp png_ptr, png_infop info_ptr,
       
  3571    png_uint_32 length));
       
  3572 #endif /* PNG_READ_sPLT_SUPPORTED */
       
  3573 
       
  3574 #if defined(PNG_READ_sRGB_SUPPORTED)
       
  3575 PNG_EXTERN void png_handle_sRGB PNGARG((png_structp png_ptr, png_infop info_ptr,
       
  3576    png_uint_32 length));
       
  3577 #endif
       
  3578 
       
  3579 #if defined(PNG_READ_tEXt_SUPPORTED)
       
  3580 PNG_EXTERN void png_handle_tEXt PNGARG((png_structp png_ptr, png_infop info_ptr,
       
  3581    png_uint_32 length));
       
  3582 #endif
       
  3583 
       
  3584 #if defined(PNG_READ_tIME_SUPPORTED)
       
  3585 PNG_EXTERN void png_handle_tIME PNGARG((png_structp png_ptr, png_infop info_ptr,
       
  3586    png_uint_32 length));
       
  3587 #endif
       
  3588 
       
  3589 #if defined(PNG_READ_tRNS_SUPPORTED)
       
  3590 PNG_EXTERN void png_handle_tRNS PNGARG((png_structp png_ptr, png_infop info_ptr,
       
  3591    png_uint_32 length));
       
  3592 #endif
       
  3593 
       
  3594 #if defined(PNG_READ_zTXt_SUPPORTED)
       
  3595 PNG_EXTERN void png_handle_zTXt PNGARG((png_structp png_ptr, png_infop info_ptr,
       
  3596    png_uint_32 length));
       
  3597 #endif
       
  3598 
       
  3599 PNG_EXTERN void png_handle_unknown PNGARG((png_structp png_ptr,
       
  3600    png_infop info_ptr, png_uint_32 length));
       
  3601 
       
  3602 PNG_EXTERN void png_check_chunk_name PNGARG((png_structp png_ptr,
       
  3603    png_bytep chunk_name));
       
  3604 
       
  3605 /* Handle the transformations for reading and writing */
       
  3606 PNG_EXTERN void png_do_read_transformations PNGARG((png_structp png_ptr));
       
  3607 PNG_EXTERN void png_do_write_transformations PNGARG((png_structp png_ptr));
       
  3608 
       
  3609 PNG_EXTERN void png_init_read_transformations PNGARG((png_structp png_ptr));
       
  3610 
       
  3611 #ifdef PNG_PROGRESSIVE_READ_SUPPORTED
       
  3612 PNG_EXTERN void png_push_read_chunk PNGARG((png_structp png_ptr,
       
  3613    png_infop info_ptr));
       
  3614 PNG_EXTERN void png_push_read_sig PNGARG((png_structp png_ptr,
       
  3615    png_infop info_ptr));
       
  3616 PNG_EXTERN void png_push_check_crc PNGARG((png_structp png_ptr));
       
  3617 PNG_EXTERN void png_push_crc_skip PNGARG((png_structp png_ptr,
       
  3618    png_uint_32 length));
       
  3619 PNG_EXTERN void png_push_crc_finish PNGARG((png_structp png_ptr));
       
  3620 PNG_EXTERN void png_push_save_buffer PNGARG((png_structp png_ptr));
       
  3621 PNG_EXTERN void png_push_restore_buffer PNGARG((png_structp png_ptr,
       
  3622    png_bytep buffer, png_size_t buffer_length));
       
  3623 PNG_EXTERN void png_push_read_IDAT PNGARG((png_structp png_ptr));
       
  3624 PNG_EXTERN void png_process_IDAT_data PNGARG((png_structp png_ptr,
       
  3625    png_bytep buffer, png_size_t buffer_length));
       
  3626 PNG_EXTERN void png_push_process_row PNGARG((png_structp png_ptr));
       
  3627 PNG_EXTERN void png_push_handle_unknown PNGARG((png_structp png_ptr,
       
  3628    png_infop info_ptr, png_uint_32 length));
       
  3629 PNG_EXTERN void png_push_have_info PNGARG((png_structp png_ptr,
       
  3630    png_infop info_ptr));
       
  3631 PNG_EXTERN void png_push_have_end PNGARG((png_structp png_ptr,
       
  3632    png_infop info_ptr));
       
  3633 PNG_EXTERN void png_push_have_row PNGARG((png_structp png_ptr, png_bytep row));
       
  3634 PNG_EXTERN void png_push_read_end PNGARG((png_structp png_ptr,
       
  3635    png_infop info_ptr));
       
  3636 PNG_EXTERN void png_process_some_data PNGARG((png_structp png_ptr,
       
  3637    png_infop info_ptr));
       
  3638 PNG_EXTERN void png_read_push_finish_row PNGARG((png_structp png_ptr));
       
  3639 #if defined(PNG_READ_tEXt_SUPPORTED)
       
  3640 PNG_EXTERN void png_push_handle_tEXt PNGARG((png_structp png_ptr,
       
  3641    png_infop info_ptr, png_uint_32 length));
       
  3642 PNG_EXTERN void png_push_read_tEXt PNGARG((png_structp png_ptr,
       
  3643    png_infop info_ptr));
       
  3644 #endif
       
  3645 #if defined(PNG_READ_zTXt_SUPPORTED)
       
  3646 PNG_EXTERN void png_push_handle_zTXt PNGARG((png_structp png_ptr,
       
  3647    png_infop info_ptr, png_uint_32 length));
       
  3648 PNG_EXTERN void png_push_read_zTXt PNGARG((png_structp png_ptr,
       
  3649    png_infop info_ptr));
       
  3650 #endif
       
  3651 #if defined(PNG_READ_iTXt_SUPPORTED)
       
  3652 PNG_EXTERN void png_push_handle_iTXt PNGARG((png_structp png_ptr,
       
  3653    png_infop info_ptr, png_uint_32 length));
       
  3654 PNG_EXTERN void png_push_read_iTXt PNGARG((png_structp png_ptr,
       
  3655    png_infop info_ptr));
       
  3656 #endif
       
  3657 
       
  3658 #endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
       
  3659 
       
  3660 #ifdef PNG_MNG_FEATURES_SUPPORTED
       
  3661 PNG_EXTERN void png_do_read_intrapixel PNGARG((png_row_infop row_info,
       
  3662    png_bytep row));
       
  3663 PNG_EXTERN void png_do_write_intrapixel PNGARG((png_row_infop row_info,
       
  3664    png_bytep row));
       
  3665 #endif
       
  3666 
       
  3667 #if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
       
  3668 #if defined(PNG_MMX_CODE_SUPPORTED)
       
  3669 /* png.c */ /* PRIVATE */
       
  3670 PNG_EXTERN void png_init_mmx_flags PNGARG((png_structp png_ptr));
       
  3671 #endif
       
  3672 #endif
       
  3673 
       
  3674 #if defined(PNG_INCH_CONVERSIONS) && defined(PNG_FLOATING_POINT_SUPPORTED)
       
  3675 PNG_EXTERN png_uint_32 png_get_pixels_per_inch PNGARG((png_structp png_ptr,
       
  3676 png_infop info_ptr));
       
  3677 
       
  3678 PNG_EXTERN png_uint_32 png_get_x_pixels_per_inch PNGARG((png_structp png_ptr,
       
  3679 png_infop info_ptr));
       
  3680 
       
  3681 PNG_EXTERN png_uint_32 png_get_y_pixels_per_inch PNGARG((png_structp png_ptr,
       
  3682 png_infop info_ptr));
       
  3683 
       
  3684 PNG_EXTERN float png_get_x_offset_inches PNGARG((png_structp png_ptr,
       
  3685 png_infop info_ptr));
       
  3686 
       
  3687 PNG_EXTERN float png_get_y_offset_inches PNGARG((png_structp png_ptr,
       
  3688 png_infop info_ptr));
       
  3689 
       
  3690 #if defined(PNG_pHYs_SUPPORTED)
       
  3691 PNG_EXTERN png_uint_32 png_get_pHYs_dpi PNGARG((png_structp png_ptr,
       
  3692 png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type));
       
  3693 #endif /* PNG_pHYs_SUPPORTED */
       
  3694 #endif  /* PNG_INCH_CONVERSIONS && PNG_FLOATING_POINT_SUPPORTED */
       
  3695 
       
  3696 /* Read the chunk header (length + type name) */
       
  3697 PNG_EXTERN png_uint_32 png_read_chunk_header PNGARG((png_structp png_ptr));
       
  3698 
       
  3699 /* Added at libpng version 1.2.34 */
       
  3700 #if defined(PNG_cHRM_SUPPORTED)
       
  3701 PNG_EXTERN int png_check_cHRM_fixed  PNGARG((png_structp png_ptr,
       
  3702    png_fixed_point int_white_x, png_fixed_point int_white_y,
       
  3703    png_fixed_point int_red_x, png_fixed_point int_red_y, png_fixed_point
       
  3704    int_green_x, png_fixed_point int_green_y, png_fixed_point int_blue_x,
       
  3705    png_fixed_point int_blue_y));
       
  3706 #endif
       
  3707 
       
  3708 #if defined(PNG_cHRM_SUPPORTED)
       
  3709 #if !defined(PNG_NO_CHECK_cHRM)
       
  3710 /* Added at libpng version 1.2.34 */
       
  3711 PNG_EXTERN void png_64bit_product (long v1, long v2, unsigned long *hi_product,
       
  3712    unsigned long *lo_product);
       
  3713 #endif
       
  3714 #endif
       
  3715 
       
  3716 /* Maintainer: Put new private prototypes here ^ and in libpngpf.3 */
       
  3717 
       
  3718 #endif /* PNG_INTERNAL */
       
  3719 
  2545 
  3720 #ifdef __cplusplus
  2546 #ifdef __cplusplus
  3721 }
  2547 }
  3722 #endif
  2548 #endif
  3723 
  2549