Imported from libpng-1.0.10beta1.tar

This commit is contained in:
Glenn Randers-Pehrson 2001-03-14 07:08:39 -06:00
parent d4e8109a48
commit 1909560348
52 changed files with 1171 additions and 694 deletions

View File

@ -1,58 +1,21 @@
Libpng 1.0.9 - January 31, 2001 Libpng 1.0.10beta1 - March 14, 2001
This is a public release of libpng, intended for use in production codes. This is a public release of libpng, intended for use in production codes.
Changes since the last public release (1.0.8): Changes since the last public release (1.0.9):
Fixed typo in scripts/makefile.hpux Revised makefile.dec
Fixed seqence-point bug in contrib/pngminus/png2pnm (Martin Zinser) Reformatted libpng.3 to eliminate bad line breaks.
Updated makevms.com in scripts and contrib/* and contrib/* (Martin Zinser) Added checks for _mmx_supported in the read_filter_row function of pnggccrd.c
Changed "cdrom.com" in documentation to "libpng.org" Added prototype for png_mmx_support() near the top of pnggccrd.c
Revised pnggccrd.c to get it all working, and updated makefile.gcmmx (Greg). Moved some error checking from png_handle_IHDR to png_set_IHDR.
Changed type of "params" from voidp to png_voidp in png_read|write_png(). Added PNG_NO_READ_SUPPORTED and PNG_NO_WRITE_SUPPORTED macros.
Added MNG_EXTENSIONS_SUPPORTED macro and support for some proposed MNG Revised png_mmx_support() function in pnggccrd.c
features, for testing purposes. Restored version 1.0.8 PNG_WRITE_EMPTY_PLTE_SUPPORTED behavior in pngwutil.c
Make sure PNGAPI and PNG_IMPEXP are defined in pngconf.h. Fixed memory leak in contrib/visupng/PngFile.c
Revised the 3 instances of WRITEFILE in pngtest.c. Fixed bugs in png_combine_row() in pnggccrd.c and pngvcrd.c (C version)
Updated png.rc in dll/msvc project Added warnings when retrieving or setting gamma=0.
Revised makefile.dec to define and use LIBPATH and INCPATH
Increased size of global png_libpng_ver[] array from 12 to 18 chars.
Made global png_libpng_ver[], png_sig[] and png_pass_*[] arrays const.
Removed duplicate png_crc_finish() from png_handle_bKGD() function.
Added a warning when application calls png_read_update_info() multiple times.
Revised makefile.cygwin
Fixed bugs in iCCP support in pngrutil.c and pngwutil.c.
Replaced png_set_empty_plte_permitted() with png_permit_mng_features().
Relocated "msvc" and "wince" project subdirectories into "projects"
subdirectory and added projects/borland project subdirectory.
Set VS_FF_PRERELEASE and VS_FF_PATCHED flags in msvc/png.rc when appropriate.
Add error message in png_set_compression_buffer_size() when malloc fails.
Revised PNG_LIBPNG_BUILD_TYPE macro in png.h, used in the msvc project.
Removed the png_flush() in pngwrite.c that crashes some applications
that don't set png_output_flush_fn.
Added makefile.macosx and makefile.aix to scripts directory.
Change png_chunk_warning to png_warning in png_check_keyword().
Increased the first part of msg buffer from 16 to 18 in png_chunk_error().
Added support for filter method 64 (for PNG datastreams embedded in MNG)
Revised png_set_filter() to accept filter method 64 when appropriate.
Added new PNG_HAVE_PNG_SIGNATURE bit to png_ptr->mode and use it to
help prevent applications from using MNG features in PNG datastreams.
Revised libpng.3/libpng.txt. Changed "filter type" to "filter method".
Fixed error handling of unknown compression type in png_decompress_chunk().
In pngconf.h, define __cdecl when _MSC_VER is defined.
Changed PNG_TEXT_COMPRESSION_zTXt to PNG_COMPRESSION_TYPE_BASE several places.
Revised memory management in png_set_hIST and png_handle_hIST in a backward
compatible manner. PLTE and tRNS were revised similarly.
Revised the iCCP chunk reader to ignore trailing garbage.
Moved pngasmrd.h into pngconf.h.
Improved handling of out-of-spec garbage iCCP chunks generated by PhotoShop.
Added png_set_invalid to wince and msvc project module definition files.
Fixed bug with progressive reading of narrow interlaced images in pngpread.c
Do not typedef png_FILE_io in pngconf.h when PNG_NO_STDIO is defined.
Updated makefile.sgi to make shared library.
Added check of cygwin's ALL_STATIC in pngconf.h
Added "-nommx" parameter to contrib/gregbook/rpng2-win and rpng2-x demos.
Send comments/corrections/commendations to Send comments/corrections/commendations to
png-implement@ccrc.wustl.edu or to randeg@alum.rpi.edu png-implement@ccrc.wustl.edu or to randeg@alum.rpi.edu

13
CHANGES
View File

@ -893,6 +893,19 @@ version 1.0.9rc2 [January 22, 2001]
version 1.0.9 [January 31, 2001] version 1.0.9 [January 31, 2001]
Added check of cygwin's ALL_STATIC in pngconf.h Added check of cygwin's ALL_STATIC in pngconf.h
Added "-nommx" parameter to contrib/gregbook/rpng2-win and rpng2-x demos. Added "-nommx" parameter to contrib/gregbook/rpng2-win and rpng2-x demos.
version 1.0.10beta1 [March 14, 2001]
Revised makefile.dec, makefile.sgi, and makefile.sggcc; added makefile.hpgcc.
Reformatted libpng.3 to eliminate bad line breaks.
Added checks for _mmx_supported in the read_filter_row function of pnggccrd.c
Added prototype for png_mmx_support() near the top of pnggccrd.c
Moved some error checking from png_handle_IHDR to png_set_IHDR.
Added PNG_NO_READ_SUPPORTED and PNG_NO_WRITE_SUPPORTED macros.
Revised png_mmx_support() function in pnggccrd.c
Restored version 1.0.8 PNG_WRITE_EMPTY_PLTE_SUPPORTED behavior in pngwutil.c
Fixed memory leak in contrib/visupng/PngFile.c
Fixed bugs in png_combine_row() in pnggccrd.c and pngvcrd.c (C version)
Added warnings when retrieving or setting gamma=0.
Increased the first part of msg buffer from 16 to 18 in png_chunk_warning().
Send comments/corrections/commendations to Send comments/corrections/commendations to
png-implement@ccrc.wustl.edu or to randeg@alum.rpi.edu png-implement@ccrc.wustl.edu or to randeg@alum.rpi.edu

13
INSTALL
View File

@ -1,5 +1,5 @@
Installing libpng version 1.0.9 - January 31, 2001 Installing libpng version 1.0.10beta1 - March 14, 2001
Before installing libpng, you must first install zlib. zlib Before installing libpng, you must first install zlib. zlib
can usually be found wherever you got libpng. zlib can be can usually be found wherever you got libpng. zlib can be
@ -10,7 +10,7 @@ zlib.h and zconf.h include files that correspond to the
version of zlib that's installed. version of zlib that's installed.
You can rename the directories that you downloaded (they You can rename the directories that you downloaded (they
might be called "libpng-1.0.9" or "lpng109" and "zlib-1.1.3" might be called "libpng-1.0.10beta1" or "lpng109" and "zlib-1.1.3"
or "zlib113") so that you have directories called "zlib" and "libpng". or "zlib113") so that you have directories called "zlib" and "libpng".
Your directory structure should look like this: Your directory structure should look like this:
@ -59,8 +59,8 @@ The files that are presently available in the scripts directory
include include
makefile.std => Generic UNIX makefile (cc, creates static libpng.a) makefile.std => Generic UNIX makefile (cc, creates static libpng.a)
makefile.linux => Linux/ELF makefile (gcc, creates libpng.so.2.1.0.9) makefile.linux => Linux/ELF makefile (gcc, creates libpng.so.2.1.0.10beta1)
makefile.gcmmx => Linux/ELF makefile (gcc, creates libpng.so.2.1.0.9, makefile.gcmmx => Linux/ELF makefile (gcc, creates libpng.so.2.1.0.10beta1,
uses assembler code tuned for Intel MMX platform) uses assembler code tuned for Intel MMX platform)
makefile.gcc => Generic makefile (gcc, creates static libpng.a) makefile.gcc => Generic makefile (gcc, creates static libpng.a)
makefile.knr => Archaic UNIX Makefile that converts files with makefile.knr => Archaic UNIX Makefile that converts files with
@ -69,15 +69,16 @@ include
makefile.aix => AIX makefile makefile.aix => AIX makefile
makefile.cygwin => Cygwin/gcc makefile makefile.cygwin => Cygwin/gcc makefile
makefile.dec => DEC Alpha UNIX makefile makefile.dec => DEC Alpha UNIX makefile
makefile.hpgcc => HPUX makefile using gcc
makefile.hpux => HPUX (10.20 and 11.00) makefile makefile.hpux => HPUX (10.20 and 11.00) makefile
makefile.ibmc => IBM C/C++ version 3.x for Win32 and OS/2 (static) makefile.ibmc => IBM C/C++ version 3.x for Win32 and OS/2 (static)
makefile.intel => Intel C/C++ version 4.0 and later makefile.intel => Intel C/C++ version 4.0 and later
libpng.icc => Project file for IBM VisualAge/C++ version 4.0 or later libpng.icc => Project file for IBM VisualAge/C++ version 4.0 or later
makefile.macosx => MACOS X Makefile makefile.macosx => MACOS X Makefile
makefile.sgi => Silicon Graphics IRIX makefile (cc, creates static lib) makefile.sgi => Silicon Graphics IRIX makefile (cc, creates static lib)
makefile.sggcc => Silicon Graphics (gcc, creates libpng.so.2.1.0.9) makefile.sggcc => Silicon Graphics (gcc, creates libpng.so.2.1.0.10beta1)
makefile.sunos => Sun makefile makefile.sunos => Sun makefile
makefile.solaris => Solaris 2.X makefile (gcc, creates libpng.so.2.1.0.9) makefile.solaris => Solaris 2.X makefile (gcc, creates libpng.so.2.1.0.10beta1)
makefile.sco => For SCO OSr5 ELF and Unixware 7 with Native cc makefile.sco => For SCO OSr5 ELF and Unixware 7 with Native cc
makefile.mips => MIPS makefile makefile.mips => MIPS makefile
makefile.acorn => Acorn makefile makefile.acorn => Acorn makefile

View File

@ -1,4 +1,4 @@
Known bugs in libpng-1.0.9 Known bugs in libpng-1.0.10
None. None as of March 14, 2001.

14
LICENSE
View File

@ -8,8 +8,8 @@ COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
If you modify libpng you may insert additional notices immediately following If you modify libpng you may insert additional notices immediately following
this sentence. this sentence.
libpng versions 1.0.7, July 1, 2000, through 1.0.9, January 31, 2001, are libpng versions 1.0.7, July 1, 2000, through 1.0.10beta1, March 14, 2001, are
Copyright (c) 2000 Glenn Randers-Pehrson Copyright (c) 2000, 2001 Glenn Randers-Pehrson
and are distributed according to the same disclaimer and license as libpng-1.0.6 and are distributed according to the same disclaimer and license as libpng-1.0.6
with the following individuals added to the list of Contributing Authors with the following individuals added to the list of Contributing Authors
@ -73,11 +73,11 @@ to the following restrictions:
1. The origin of this source code must not be misrepresented. 1. The origin of this source code must not be misrepresented.
2. Altered versions must be plainly marked as such and must not 2. Altered versions must be plainly marked as such and
be misrepresented as being the original source. must not be misrepresented as being the original source.
3. This Copyright notice may not be removed or altered from any 3. This Copyright notice may not be removed or altered from
source or altered source distribution. any source or altered source distribution.
The Contributing Authors and Group 42, Inc. specifically permit, without The Contributing Authors and Group 42, Inc. specifically permit, without
fee, and encourage the use of this source code as a component to fee, and encourage the use of this source code as a component to
@ -99,4 +99,4 @@ certification mark of the Open Source Initiative.
Glenn Randers-Pehrson Glenn Randers-Pehrson
randeg@alum.rpi.edu randeg@alum.rpi.edu
January 31, 2001 March 14, 2001

11
README
View File

@ -1,4 +1,4 @@
README for libpng 1.0.9 - January 31, 2001 (shared library 2.1) README for libpng 1.0.10beta1 - March 14, 2001 (shared library 2.1)
See the note about version numbers near the top of png.h See the note about version numbers near the top of png.h
See INSTALL for instructions on how to install libpng. See INSTALL for instructions on how to install libpng.
@ -182,9 +182,9 @@ Files in this distribution:
descrip.mms => VMS makefile for MMS or MMK descrip.mms => VMS makefile for MMS or MMK
makefile.std => Generic UNIX makefile (cc, creates static libpng.a) makefile.std => Generic UNIX makefile (cc, creates static libpng.a)
makefile.linux => Linux/ELF makefile makefile.linux => Linux/ELF makefile
(gcc, creates libpng.so.2.1.0.9) (gcc, creates libpng.so.2.1.0.10beta1)
makefile.gcmmx => Linux/ELF makefile (gcc, creates makefile.gcmmx => Linux/ELF makefile (gcc, creates
libpng.so.2.1.0.9, uses assembler code libpng.so.2.1.0.10beta1, uses assembler code
tuned for Intel MMX platform) tuned for Intel MMX platform)
makefile.gcc => Generic makefile (gcc, creates static libpng.a) makefile.gcc => Generic makefile (gcc, creates static libpng.a)
makefile.knr => Archaic UNIX Makefile that converts files with makefile.knr => Archaic UNIX Makefile that converts files with
@ -193,16 +193,17 @@ Files in this distribution:
makefile.aix => AIX makefile makefile.aix => AIX makefile
makefile.cygwin => Cygwin/gcc makefile makefile.cygwin => Cygwin/gcc makefile
makefile.dec => DEC Alpha UNIX makefile makefile.dec => DEC Alpha UNIX makefile
makefile.hpgcc => HPUX makefile using gcc
makefile.hpux => HPUX (10.20 and 11.00) makefile makefile.hpux => HPUX (10.20 and 11.00) makefile
makefile.ibmc => IBM C/C++ version 3.x for Win32 and OS/2 (static) makefile.ibmc => IBM C/C++ version 3.x for Win32 and OS/2 (static)
makefile.intel => Intel C/C++ version 4.0 and later makefile.intel => Intel C/C++ version 4.0 and later
libpng.icc => Project file, IBM VisualAge/C++ 4.0 or later libpng.icc => Project file, IBM VisualAge/C++ 4.0 or later
makefile.macosx => MACOS X Makefile makefile.macosx => MACOS X Makefile
makefile.sgi => Silicon Graphics IRIX (cc, creates static lib) makefile.sgi => Silicon Graphics IRIX (cc, creates static lib)
makefile.sggcc => Silicon Graphics (gcc, creates libpng.so.2.1.0.9) makefile.sggcc => Silicon Graphics (gcc, creates libpng.so.2.1.0.10beta1)
makefile.sunos => Sun makefile makefile.sunos => Sun makefile
makefile.solaris => Solaris 2.X makefile makefile.solaris => Solaris 2.X makefile
(gcc, creates libpng.so.2.1.0.9) (gcc, creates libpng.so.2.1.0.10beta1)
makefile.sco => For SCO OSr5 ELF and Unixware 7 with Native cc makefile.sco => For SCO OSr5 ELF and Unixware 7 with Native cc
makefile.mips => MIPS makefile makefile.mips => MIPS makefile
makefile.acorn => Acorn makefile makefile.acorn => Acorn makefile

View File

@ -1,13 +1,13 @@
Y2K compliance in libpng: Y2K compliance in libpng:
========================= =========================
January 31, 2001 March 14, 2001
Since the PNG Development group is an ad-hoc body, we can't make Since the PNG Development group is an ad-hoc body, we can't make
an official declaration. an official declaration.
This is your unofficial assurance that libpng from version 0.71 and This is your unofficial assurance that libpng from version 0.71 and
upward through 1.0.9 are Y2K compliant. It is my belief that earlier upward through 1.0.10beta1 are Y2K compliant. It is my belief that earlier
versions were also Y2K compliant. versions were also Y2K compliant.
Libpng only has three year fields. One is a 2-byte unsigned integer Libpng only has three year fields. One is a 2-byte unsigned integer

2
configure vendored
View File

@ -1,5 +1,5 @@
echo " echo "
There is no \"configure\" script for Libpng-1.0.9. Instead, please There is no \"configure\" script for Libpng-1.0.10beta1. Instead, please
copy the appropriate makefile for your system from the \"scripts\" copy the appropriate makefile for your system from the \"scripts\"
directory. Read the INSTALL file for more details. directory. Read the INSTALL file for more details.
" "

View File

@ -370,14 +370,14 @@ BOOL PngSaveImage (PTSTR pstrFileName, png_byte *pDiData,
// clean up after the write, and free any memory allocated // clean up after the write, and free any memory allocated
png_destroy_write_struct(&png_ptr, (png_infopp) NULL); png_destroy_write_struct(&png_ptr, &info_ptr);
// yepp, done // yepp, done
} }
Catch (msg) Catch (msg)
{ {
png_destroy_write_struct(&png_ptr, (png_infopp) NULL); png_destroy_write_struct(&png_ptr, &info_ptr);
if(ppbRowPointers) if(ppbRowPointers)
free (ppbRowPointers); free (ppbRowPointers);

323
libpng.3
View File

@ -1,6 +1,6 @@
.TH LIBPNG 3 "January 31, 2001" .TH LIBPNG 3 "March 14, 2001"
.SH NAME .SH NAME
libpng \- Portable Network Graphics (PNG) Reference Library 1.0.9 libpng \- Portable Network Graphics (PNG) Reference Library 1.0.10beta1
.SH SYNOPSIS .SH SYNOPSIS
\fI\fB \fI\fB
@ -747,7 +747,7 @@ Following is a copy of the libpng.txt file that accompanies libpng.
.SH LIBPNG.TXT .SH LIBPNG.TXT
libpng.txt - A description on how to use and modify libpng libpng.txt - A description on how to use and modify libpng
libpng version 1.0.9 - January 31, 2001 libpng version 1.0.10beta1 - March 14, 2001
Updated and distributed by Glenn Randers-Pehrson Updated and distributed by Glenn Randers-Pehrson
<randeg@alum.rpi.edu> <randeg@alum.rpi.edu>
Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
@ -1004,10 +1004,11 @@ input stream. You must supply the function
png_byte name[5]; png_byte name[5];
png_byte *data; png_byte *data;
png_size_t size; png_size_t size;
/* Note that libpng has already taken care of the /* Note that libpng has already taken care of
CRC handling */ the CRC handling */
/* put your code here. Return one of the following: */ /* put your code here. Return one of the
following: */
return (-n); /* chunk had an error */ return (-n); /* chunk had an error */
return (0); /* did not recognize */ return (0); /* did not recognize */
@ -1078,16 +1079,23 @@ the entire image into memory, and (b) the input transformations
you want to do are limited to the following set: you want to do are limited to the following set:
PNG_TRANSFORM_IDENTITY No transformation PNG_TRANSFORM_IDENTITY No transformation
PNG_TRANSFORM_STRIP_16 Strip 16-bit samples to 8 bits PNG_TRANSFORM_STRIP_16 Strip 16-bit samples to
8 bits
PNG_TRANSFORM_STRIP_ALPHA Discard the alpha channel PNG_TRANSFORM_STRIP_ALPHA Discard the alpha channel
PNG_TRANSFORM_PACKING Expand 1, 2 and 4-bit samples to bytes PNG_TRANSFORM_PACKING Expand 1, 2 and 4-bit
PNG_TRANSFORM_PACKSWAP Change order of packed pixels to LSB first samples to bytes
PNG_TRANSFORM_PACKSWAP Change order of packed
pixels to LSB first
PNG_TRANSFORM_EXPAND Perform set_expand() PNG_TRANSFORM_EXPAND Perform set_expand()
PNG_TRANSFORM_INVERT_MONO Invert monochrome images PNG_TRANSFORM_INVERT_MONO Invert monochrome images
PNG_TRANSFORM_SHIFT Normalize pixels to the sBIT depth PNG_TRANSFORM_SHIFT Normalize pixels to the
PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA to BGRA sBIT depth
PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA to AG PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA
PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity to transparency to BGRA
PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA
to AG
PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity
to transparency
PNG_TRANSFORM_SWAP_ENDIAN Byte-swap 16-bit samples PNG_TRANSFORM_SWAP_ENDIAN Byte-swap 16-bit samples
(This excludes setting a background color, doing gamma transformation, (This excludes setting a background color, doing gamma transformation,
@ -1115,9 +1123,11 @@ where row_pointers is an array of pointers to the pixel data for each row:
If you know your image size and pixel size ahead of time, you can allocate If you know your image size and pixel size ahead of time, you can allocate
row_pointers prior to calling png_read_png() with row_pointers prior to calling png_read_png() with
row_pointers = png_malloc(png_ptr, height*sizeof(png_bytep)); row_pointers = png_malloc(png_ptr,
height*sizeof(png_bytep));
for (int i=0; i<height, i++) for (int i=0; i<height, i++)
row_pointers[i]=png_malloc(png_ptr, width*pixel_size); row_pointers[i]=png_malloc(png_ptr,
width*pixel_size);
png_set_rows(png_ptr, info_ptr, &row_pointers); png_set_rows(png_ptr, info_ptr, &row_pointers);
Alternatively you could allocate your image in one big block and define Alternatively you could allocate your image in one big block and define
@ -1249,14 +1259,15 @@ into the info_ptr is returned for any complex types.
implies specific values of gAMA and implies specific values of gAMA and
cHRM. cHRM.
png_get_iCCP(png_ptr, info_ptr, &name, &compression_type, png_get_iCCP(png_ptr, info_ptr, &name,
&profile, &proflen); &compression_type, &profile, &proflen);
name - The profile name. name - The profile name.
compression - The compression type; always PNG_COMPRESSION_TYPE_BASE compression - The compression type; always
for PNG 1.0. You may give NULL to this argument PNG_COMPRESSION_TYPE_BASE for PNG 1.0.
to ignore it. You may give NULL to this argument to
profile - International Color Consortium color profile ignore it.
data. May contain NULs. profile - International Color Consortium color
profile data. May contain NULs.
proflen - length of profile data in bytes. proflen - length of profile data in bytes.
png_get_sBIT(png_ptr, info_ptr, &sig_bit); png_get_sBIT(png_ptr, info_ptr, &sig_bit);
@ -1312,17 +1323,20 @@ into the info_ptr is returned for any complex types.
string for unknown). string for unknown).
text_ptr[i].translated_keyword - keyword in UTF-8 text_ptr[i].translated_keyword - keyword in UTF-8
(empty string for unknown). (empty string for unknown).
num_text - number of comments (same as num_comments; num_text - number of comments (same as
you can put NULL here to avoid the duplication) num_comments; you can put NULL here
Note while png_set_text() will accept text, language, and to avoid the duplication)
translated keywords that can be NULL pointers, the structure Note while png_set_text() will accept text, language,
returned by png_get_text will always contain regular and translated keywords that can be NULL pointers, the
zero-terminated C strings. They might be empty strings but structure returned by png_get_text will always contain
they will never be NULL pointers. regular zero-terminated C strings. They might be
empty strings but they will never be NULL pointers.
num_spalettes = png_get_sPLT(png_ptr, info_ptr, &palette_ptr); num_spalettes = png_get_sPLT(png_ptr, info_ptr,
&palette_ptr);
palette_ptr - array of palette structures holding palette_ptr - array of palette structures holding
contents of one or more sPLT chunks read. contents of one or more sPLT chunks
read.
num_spalettes - number of sPLT chunks read. num_spalettes - number of sPLT chunks read.
png_get_oFFs(png_ptr, info_ptr, &offset_x, &offset_y, png_get_oFFs(png_ptr, info_ptr, &offset_x, &offset_y,
@ -1342,29 +1356,32 @@ into the info_ptr is returned for any complex types.
unit_type - PNG_RESOLUTION_UNKNOWN, unit_type - PNG_RESOLUTION_UNKNOWN,
PNG_RESOLUTION_METER PNG_RESOLUTION_METER
png_get_sCAL(png_ptr, info_ptr, &unit, &width, &height) png_get_sCAL(png_ptr, info_ptr, &unit, &width,
&height)
unit - physical scale units (an integer) unit - physical scale units (an integer)
width - width of a pixel in physical scale units width - width of a pixel in physical scale units
height - height of a pixel in physical scale units height - height of a pixel in physical scale units
(width and height are doubles) (width and height are doubles)
png_get_sCAL_s(png_ptr, info_ptr, &unit, &width, &height) png_get_sCAL_s(png_ptr, info_ptr, &unit, &width,
&height)
unit - physical scale units (an integer) unit - physical scale units (an integer)
width - width of a pixel in physical scale units width - width of a pixel in physical scale units
height - height of a pixel in physical scale units height - height of a pixel in physical scale units
(width and height are strings like "2.54") (width and height are strings like "2.54")
num_unknown_chunks = png_get_unknown_chunks(png_ptr, info_ptr, num_unknown_chunks = png_get_unknown_chunks(png_ptr,
&unknowns) info_ptr, &unknowns)
unknowns - array of png_unknown_chunk structures holding unknowns - array of png_unknown_chunk
unknown chunks structures holding unknown chunks
unknowns[i].name - name of unknown chunk unknowns[i].name - name of unknown chunk
unknowns[i].data - data of unknown chunk unknowns[i].data - data of unknown chunk
unknowns[i].size - size of unknown chunk's data unknowns[i].size - size of unknown chunk's data
unknowns[i].location - position of chunk in file unknowns[i].location - position of chunk in file
The value of "i" corresponds to the order in which the chunks were read The value of "i" corresponds to the order in which the
from the PNG file or inserted with the png_set_unknown_chunks() function. chunks were read from the PNG file or inserted with the
png_set_unknown_chunks() function.
The data from the pHYs chunk can be retrieved in several convenient The data from the pHYs chunk can be retrieved in several convenient
forms: forms:
@ -1397,8 +1414,8 @@ forms:
y_offset = png_get_y_offset_inches(png_ptr, info_ptr); y_offset = png_get_y_offset_inches(png_ptr, info_ptr);
(Each of these returns 0 [signifying "unknown" if both (Each of these returns 0 [signifying "unknown" if both
x and y are 0] if the data is not present or if the chunk x and y are 0] if the data is not present or if the
is present but the unit is the pixel) chunk is present but the unit is the pixel)
For more information, see the png_info definition in png.h and the For more information, see the png_info definition in png.h and the
PNG specification for chunk contents. Be careful with trusting PNG specification for chunk contents. Be careful with trusting
@ -1932,7 +1949,7 @@ When you are done, you can free all memory allocated by libpng like this:
It is also possible to individually free the info_ptr members that It is also possible to individually free the info_ptr members that
point to libpng-allocated storage with the following function: point to libpng-allocated storage with the following function:
png_free_data(png_ptr, info_ptr, mask, n) png_free_data(png_ptr, info_ptr, mask, seq)
mask - identifies data to be freed, a mask mask - identifies data to be freed, a mask
containing the logical OR of one or containing the logical OR of one or
more of more of
@ -1942,16 +1959,17 @@ point to libpng-allocated storage with the following function:
PNG_FREE_SCAL, PNG_FREE_SPLT, PNG_FREE_SCAL, PNG_FREE_SPLT,
PNG_FREE_TEXT, PNG_FREE_UNKN, PNG_FREE_TEXT, PNG_FREE_UNKN,
or simply PNG_FREE_ALL or simply PNG_FREE_ALL
n - sequence number of item to be freed seq - sequence number of item to be freed
(-1 for all items) (-1 for all items)
This function may be safely called when the relevant storage has This function may be safely called when the relevant storage has
already been freed, or has not yet been allocated, or was allocated already been freed, or has not yet been allocated, or was allocated
by the user and not by libpng, and will in those by the user and not by libpng, and will in those
cases do nothing. The "n" parameter is ignored if only one item cases do nothing. The "seq" parameter is ignored if only one item
of the selected data type, such as PLTE, is allowed. If "n" is not of the selected data type, such as PLTE, is allowed. If "seq" is not
-1, and multiple items are allowed for the data type identified in -1, and multiple items are allowed for the data type identified in
the mask, such as text or sPLT, only the n'th item is freed. the mask, such as text or sPLT, only the n'th item in the structure
is freed, where n is "seq".
The default behavior is only to free data that was allocated internally The default behavior is only to free data that was allocated internally
by libpng. This can be changed, so that libpng will not free the data, by libpng. This can be changed, so that libpng will not free the data,
@ -2124,6 +2142,7 @@ png_infop info_ptr;
/* This function is called when each row of image /* This function is called when each row of image
data is complete */ data is complete */
void void
row_callback(png_structp png_ptr, png_bytep new_row, row_callback(png_structp png_ptr, png_bytep new_row,
png_uint_32 row_num, int pass) png_uint_32 row_num, int pass)
@ -2270,7 +2289,8 @@ called after each row has been written, which you can use to control
a progress meter or the like. It's demonstrated in pngtest.c. a progress meter or the like. It's demonstrated in pngtest.c.
You must supply a function You must supply a function
void write_row_callback(png_ptr, png_uint_32 row, int pass); void write_row_callback(png_ptr, png_uint_32 row,
int pass);
{ {
/* put your code here */ /* put your code here */
} }
@ -2298,8 +2318,9 @@ types.
/* turn on or off filtering, and/or choose /* turn on or off filtering, and/or choose
specific filters. You can use either a single PNG_FILTER_VALUE_NAME specific filters. You can use either a single
or the logical OR of one or more PNG_FILTER_NAME masks. */ PNG_FILTER_VALUE_NAME or the logical OR of one
or more PNG_FILTER_NAME masks. */
png_set_filter(png_ptr, 0, png_set_filter(png_ptr, 0,
PNG_FILTER_NONE | PNG_FILTER_VALUE_NONE | PNG_FILTER_NONE | PNG_FILTER_VALUE_NONE |
PNG_FILTER_SUB | PNG_FILTER_VALUE_SUB | PNG_FILTER_SUB | PNG_FILTER_VALUE_SUB |
@ -2435,11 +2456,12 @@ Some of the more important parts of the png_info are:
png_set_iCCP(png_ptr, info_ptr, name, compression_type, png_set_iCCP(png_ptr, info_ptr, name, compression_type,
profile, proflen); profile, proflen);
name - The profile name. name - The profile name.
compression - The compression type; always PNG_COMPRESSION_TYPE_BASE compression - The compression type; always
for PNG 1.0. You may give NULL to this argument PNG_COMPRESSION_TYPE_BASE for PNG 1.0.
to ignore it. You may give NULL to this argument to
profile - International Color Consortium color profile ignore it.
data. May contain NULs. profile - International Color Consortium color
profile data. May contain NULs.
proflen - length of profile data in bytes. proflen - length of profile data in bytes.
png_set_sBIT(png_ptr, info_ptr, sig_bit); png_set_sBIT(png_ptr, info_ptr, sig_bit);
@ -2493,11 +2515,13 @@ Some of the more important parts of the png_info are:
or empty for unknown). or empty for unknown).
num_text - number of comments num_text - number of comments
png_set_sPLT(png_ptr, info_ptr, &palette_ptr, num_spalettes); png_set_sPLT(png_ptr, info_ptr, &palette_ptr,
palette_ptr - array of png_sPLT_struct structures to be num_spalettes);
added to the list of palettes in the info palette_ptr - array of png_sPLT_struct structures
structure. to be added to the list of palettes
num_spalettes - number of palette structures to be added. in the info structure.
num_spalettes - number of palette structures to be
added.
png_set_oFFs(png_ptr, info_ptr, offset_x, offset_y, png_set_oFFs(png_ptr, info_ptr, offset_x, offset_y,
unit_type); unit_type);
@ -2528,9 +2552,10 @@ Some of the more important parts of the png_info are:
height - height of a pixel in physical scale units height - height of a pixel in physical scale units
(width and height are strings like "2.54") (width and height are strings like "2.54")
png_set_unknown_chunks(png_ptr, info_ptr, &unknowns, num_unknowns) png_set_unknown_chunks(png_ptr, info_ptr, &unknowns,
unknowns - array of png_unknown_chunk structures holding num_unknowns)
unknown chunks unknowns - array of png_unknown_chunk
structures holding unknown chunks
unknowns[i].name - name of unknown chunk unknowns[i].name - name of unknown chunk
unknowns[i].data - data of unknown chunk unknowns[i].data - data of unknown chunk
unknowns[i].size - size of unknown chunk's data unknowns[i].size - size of unknown chunk's data
@ -2539,14 +2564,15 @@ Some of the more important parts of the png_info are:
PNG_HAVE_IHDR: before PLTE PNG_HAVE_IHDR: before PLTE
PNG_HAVE_PLTE: before IDAT PNG_HAVE_PLTE: before IDAT
PNG_AFTER_IDAT: after IDAT PNG_AFTER_IDAT: after IDAT
The "location" member is set automatically according to
what part of the output file has already been written. The "location" member is set automatically according to
You can change its value after calling png_set_unknown_chunks() what part of the output file has already been written.
as demonstrated in pngtest.c. Within each of the "locations", You can change its value after calling png_set_unknown_chunks()
the chunks are sequenced according to their position in the as demonstrated in pngtest.c. Within each of the "locations",
structure (that is, the value of "i", which is the order in which the chunks are sequenced according to their position in the
the chunk was either read from the input file or defined with structure (that is, the value of "i", which is the order in which
png_set_unknown_chunks). the chunk was either read from the input file or defined with
png_set_unknown_chunks).
A quick word about text and num_text. text is an array of png_text A quick word about text and num_text. text is an array of png_text
structures. num_text is the number of valid structures in the array. structures. num_text is the number of valid structures in the array.
@ -2647,12 +2673,17 @@ transformations are permitted, enabled by the following masks.
PNG_TRANSFORM_IDENTITY No transformation PNG_TRANSFORM_IDENTITY No transformation
PNG_TRANSFORM_PACKING Pack 1, 2 and 4-bit samples PNG_TRANSFORM_PACKING Pack 1, 2 and 4-bit samples
PNG_TRANSFORM_PACKSWAP Change order of packed pixels to LSB first PNG_TRANSFORM_PACKSWAP Change order of packed
pixels to LSB first
PNG_TRANSFORM_INVERT_MONO Invert monochrome images PNG_TRANSFORM_INVERT_MONO Invert monochrome images
PNG_TRANSFORM_SHIFT Normalize pixels to the sBIT depth PNG_TRANSFORM_SHIFT Normalize pixels to the
PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA to BGRA sBIT depth
PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA to AG PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA
PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity to transparency to BGRA
PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA
to AG
PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity
to transparency
PNG_TRANSFORM_SWAP_ENDIAN Byte-swap 16-bit samples PNG_TRANSFORM_SWAP_ENDIAN Byte-swap 16-bit samples
PNG_TRANSFORM_STRIP_FILLER Strip out filler bytes. PNG_TRANSFORM_STRIP_FILLER Strip out filler bytes.
@ -2916,7 +2947,7 @@ When you are done, you can free all memory used by libpng like this:
It is also possible to individually free the info_ptr members that It is also possible to individually free the info_ptr members that
point to libpng-allocated storage with the following function: point to libpng-allocated storage with the following function:
png_free_data(png_ptr, info_ptr, mask, n) png_free_data(png_ptr, info_ptr, mask, seq)
mask - identifies data to be freed, a mask mask - identifies data to be freed, a mask
containing the logical OR of one or containing the logical OR of one or
more of more of
@ -2926,16 +2957,17 @@ point to libpng-allocated storage with the following function:
PNG_FREE_SCAL, PNG_FREE_SPLT, PNG_FREE_SCAL, PNG_FREE_SPLT,
PNG_FREE_TEXT, PNG_FREE_UNKN, PNG_FREE_TEXT, PNG_FREE_UNKN,
or simply PNG_FREE_ALL or simply PNG_FREE_ALL
n - sequence number of item to be freed seq - sequence number of item to be freed
(-1 for all items) (-1 for all items)
This function may be safely called when the relevant storage has This function may be safely called when the relevant storage has
already been freed, or has not yet been allocated, or was allocated already been freed, or has not yet been allocated, or was allocated
by the user and not by libpng, and will in those by the user and not by libpng, and will in those
cases do nothing. The "n" parameter is ignored if only one item cases do nothing. The "seq" parameter is ignored if only one item
of the selected data type, such as PLTE, is allowed. If "n" is not of the selected data type, such as PLTE, is allowed. If "seq" is not
-1, and multiple items are allowed for the data type identified in -1, and multiple items are allowed for the data type identified in
the mask, such as text or sPLT, only the n'th item is freed. the mask, such as text or sPLT, only the n'th item in the structure
is freed, where n is "seq".
If you allocated data such as a palette that you passed If you allocated data such as a palette that you passed
in to libpng with png_set_*, you must not free it until just before the call to in to libpng with png_set_*, you must not free it until just before the call to
@ -3016,8 +3048,8 @@ memory allocation on a platform will change between applications, these
functions must be modified in the library at compile time. If you prefer functions must be modified in the library at compile time. If you prefer
to use a different method of allocating and freeing data, you can use to use a different method of allocating and freeing data, you can use
png_set_mem_fn(png_structp png_ptr, png_voidp mem_ptr, png_malloc_ptr png_set_mem_fn(png_structp png_ptr, png_voidp mem_ptr,
malloc_fn, png_free_ptr free_fn) png_malloc_ptr malloc_fn, png_free_ptr free_fn)
This function also provides a void pointer that can be retrieved via This function also provides a void pointer that can be retrieved via
@ -3025,7 +3057,8 @@ This function also provides a void pointer that can be retrieved via
Your replacement memory functions must have prototypes as follows: Your replacement memory functions must have prototypes as follows:
png_voidp malloc_fn(png_structp png_ptr, png_uint_32 size); png_voidp malloc_fn(png_structp png_ptr,
png_uint_32 size);
void free_fn(png_structp png_ptr, png_voidp ptr); void free_fn(png_structp png_ptr, png_voidp ptr);
Input/Output in libpng is done through png_read() and png_write(), Input/Output in libpng is done through png_read() and png_write(),
@ -3237,10 +3270,12 @@ structures appropriately for all of the filter types.
png_set_filter(png_ptr, PNG_FILTER_TYPE_BASE, png_set_filter(png_ptr, PNG_FILTER_TYPE_BASE,
filters); filters);
The second parameter can also be PNG_INTRAPIXEL_DIFFERENCING The second parameter can also be
if you are writing a PNG to be embedded in a MNG PNG_INTRAPIXEL_DIFFERENCING if you are
datastream. This parameter must be the same as the writing a PNG to be embedded in a MNG
value of filter_method used in png_set_IHDR(). datastream. This parameter must be the
same as the value of filter_method used
in png_set_IHDR().
It is also possible to influence how libpng chooses from among the It is also possible to influence how libpng chooses from among the
available filters. This is done in two ways - by telling it how available filters. This is done in two ways - by telling it how
@ -3429,13 +3464,13 @@ application:
.SH VIII. Y2K Compliance in libpng .SH VIII. Y2K Compliance in libpng
January 31, 2001 March 14, 2001
Since the PNG Development group is an ad-hoc body, we can't make Since the PNG Development group is an ad-hoc body, we can't make
an official declaration. an official declaration.
This is your unofficial assurance that libpng from version 0.71 and This is your unofficial assurance that libpng from version 0.71 and
upward through 1.0.9 are Y2K compliant. It is my belief that earlier upward through 1.0.10beta1 are Y2K compliant. It is my belief that earlier
versions were also Y2K compliant. versions were also Y2K compliant.
Libpng only has three year fields. One is a 2-byte unsigned integer that Libpng only has three year fields. One is a 2-byte unsigned integer that
@ -3453,7 +3488,8 @@ There are seven time-related functions:
png_convert_to_rfc_1123() in png.c png_convert_to_rfc_1123() in png.c
(formerly png_convert_to_rfc_1152() in error) (formerly png_convert_to_rfc_1152() in error)
png_convert_from_struct_tm() in pngwrite.c, called in pngwrite.c png_convert_from_struct_tm() in pngwrite.c, called
in pngwrite.c
png_convert_from_time_t() in pngwrite.c png_convert_from_time_t() in pngwrite.c
png_get_tIME() in pngget.c png_get_tIME() in pngget.c
png_handle_tIME() in pngrutil.c, called in pngread.c png_handle_tIME() in pngrutil.c, called in pngread.c
@ -3495,40 +3531,60 @@ the first widely used release:
source png.h png.h shared-lib source png.h png.h shared-lib
version string int version version string int version
------- ------ ----- ---------- ------- ------ ----- ----------
0.89c ("1.0 beta 3") 0.89 89 1.0.89 0.89c ("beta 3") 0.89 89 1.0.89
0.90 ("1.0 beta 4") 0.90 90 0.90 [should have been 2.0.90] 0.90 ("beta 4") 0.90 90 0.90
0.95 ("1.0 beta 5") 0.95 95 0.95 [should have been 2.0.95] 0.95 ("beta 5") 0.95 95 0.95
0.96 ("1.0 beta 6") 0.96 96 0.96 [should have been 2.0.96] 0.96 ("beta 6") 0.96 96 0.96
0.97b ("1.00.97 beta 7") 1.00.97 97 1.0.1 [should have been 2.0.97] 0.97b ("beta 7") 1.00.97 97 1.0.1
0.97c 0.97 97 2.0.97 0.97c 0.97 97 2.0.97
0.98 0.98 98 2.0.98 0.98 0.98 98 2.0.98
0.99 0.99 98 2.0.99 0.99 0.99 98 2.0.99
0.99a-m 0.99 99 2.0.99 0.99a-m 0.99 99 2.0.99
1.00 1.00 100 2.1.0 [100 should be 10000] 1.00 1.00 100 2.1.0
1.0.0 1.0.0 100 2.1.0 [100 should be 10000] 1.0.0 1.0.0 100 2.1.0
1.0.1 1.0.1 10001 2.1.0 1.0.0 (from here on, the 100 2.1.0
1.0.1a-e 1.0.1a-e 10002 2.1.0.1a-e 1.0.1 png.h string is 10001 2.1.0
1.0.2 1.0.2 10002 2.1.0.2 1.0.1a-e identical to the 10002 from here on, the
1.0.2a-b 1.0.2a-b 10003 2.1.0.2a-b 1.0.2 source version) 10002 shared library is 2.V
1.0.3 1.0.3 10003 2.1.0.3 1.0.2a-b 10003 where V is the source
1.0.3a-d 1.0.3a-d 10004 2.1.0.3a-d 1.0.1 10001 code version except as
1.0.4 1.0.4 10004 2.1.0.4 1.0.1a-e 10002 2.1.0.1a-e noted.
1.0.4a-f 1.0.4a-f 10005 2.1.0.4a-f 1.0.2 10002 2.1.0.2
1.0.5 (+ 2 patches) 1.0.5 10005 2.1.0.5 1.0.2a-b 10003 2.1.0.2a-b
1.0.5a-d 1.0.5a-d 10006 2.1.0.5a-d 1.0.3 10003 2.1.0.3
1.0.5e-r 1.0.5e-r 10100 2.1.0.5e-r (not compatible) 1.0.3a-d 10004 2.1.0.3a-d
1.0.5s-v 1.0.5s-v 10006 2.1.0.5s-v (compatible) 1.0.4 10004 2.1.0.4
1.0.6 (+ 3 patches) 1.0.6 10006 2.1.0.6 1.0.4a-f 10005 2.1.0.4a-f
1.0.6d 1.0.6d 10007 2.1.0.6d 1.0.5 (+ 2 patches) 10005 2.1.0.5
1.0.7 1.0.7 10007 2.1.0.7 (still compatible) 1.0.5a-d 10006 2.1.0.5a-d
1.0.5e-r 10100 2.1.0.5e-r
1.0.5s-v 10006 2.1.0.5s-v
1.0.6 (+ 3 patches) 10006 2.1.0.6
1.0.6d-g 10007 2.1.0.6d-g
1.0.6h 10007 10.6h
1.0.6i 10007 10.6i
1.0.6j 10007 2.1.0.6j
1.0.7beta11-14 DLLNUM 10007 2.1.0.7beta11-14
1.0.7beta15-18 1 10007 2.1.0.7beta15-18
1.0.7rc1-2 1 10007 2.1.0.7rc1-2
1.0.7 1 10007 2.1.0.7
1.0.8beta1-4 1 10008 2.1.0.8beta1-4
1.0.8rc1 1 10008 2.1.0.8rc1
1.0.8 1 10008 2.1.0.8
1.0.9beta1-6 1 10009 2.1.0.9beta1-6
1.0.9rc1 1 10009 2.1.0.9rc1
1.0.9beta7-10 1 10009 2.1.0.9beta7-10
1.0.9rc2 1 10009 2.1.0.9rc2
1.0.9 1 10009 2.1.0.9
1.0.10rc1 1 10010 2.1.0.10rc1
Henceforth the source version will match the shared-library minor Henceforth the source version will match the shared-library minor
and patch numbers; the shared-library major version number will be and patch numbers; the shared-library major version number will be
used for changes in backward compatibility, as it is intended. The used for changes in backward compatibility, as it is intended. The
PNG_PNGLIB_VER macro, which is not used within libpng but is available PNG_PNGLIB_VER macro, which is not used within libpng but is available
for applications, is an unsigned integer of the form xyyzz corresponding for applications, is an unsigned integer of the form xyyzz corresponding
to the source version x.y.z (leading zeros in y and z). Beta versions to the source version x.y.z (leading zeros in y and z). Beta versions
are given the previous public release number plus a letter or two. are given the previous public release number plus a letter or two.
.SH "SEE ALSO" .SH "SEE ALSO"
libpngpf(3), png(5) libpngpf(3), png(5)
@ -3576,7 +3632,7 @@ possible without all of you.
Thanks to Frank J. T. Wojcik for helping with the documentation. Thanks to Frank J. T. Wojcik for helping with the documentation.
Libpng version 1.0.9 - January 31, 2001: Libpng version 1.0.10beta1 - March 14, 2001:
Initially created in 1995 by Guy Eric Schalnat, then of Group 42, Inc. Initially created in 1995 by Guy Eric Schalnat, then of Group 42, Inc.
Currently maintained by Glenn Randers-Pehrson (randeg@alum.rpi.edu). Currently maintained by Glenn Randers-Pehrson (randeg@alum.rpi.edu).
@ -3593,8 +3649,8 @@ included in the libpng distribution, the latter shall prevail.)
If you modify libpng you may insert additional notices immediately following If you modify libpng you may insert additional notices immediately following
this sentence. this sentence.
libpng versions 1.0.7, July 1, 2000, through 1.0.9, January 31, 2001, are libpng versions 1.0.7, July 1, 2000, through 1.0.10beta1, March 14, 2001, are
Copyright (c) 2000 Glenn Randers-Pehrson, and are Copyright (c) 2000-2001 Glenn Randers-Pehrson, and are
distributed according to the same disclaimer and license as libpng-1.0.6 distributed according to the same disclaimer and license as libpng-1.0.6
with the following individuals added to the list of Contributing Authors with the following individuals added to the list of Contributing Authors
@ -3604,12 +3660,13 @@ with the following individuals added to the list of Contributing Authors
and with the following additions to the disclaimer: and with the following additions to the disclaimer:
There is no warranty against interference with your enjoyment of the There is no warranty against interference with your
library or against infringement. There is no warranty that our enjoyment of the library or against infringement.
efforts or the library will fulfill any of your particular purposes There is no warranty that our efforts or the library
or needs. This library is provided with all faults, and the entire will fulfill any of your particular purposes or needs.
risk of satisfactory quality, performance, accuracy, and effort is with This library is provided with all faults, and the entire
the user. risk of satisfactory quality, performance, accuracy, and
effort is with the user.
libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
Copyright (c) 1998, 1999 Glenn Randers-Pehrson Copyright (c) 1998, 1999 Glenn Randers-Pehrson
@ -3658,11 +3715,11 @@ to the following restrictions:
1. The origin of this source code must not be misrepresented. 1. The origin of this source code must not be misrepresented.
2. Altered versions must be plainly marked as such and must not 2. Altered versions must be plainly marked as such and
be misrepresented as being the original source. must not be misrepresented as being the original source.
3. This Copyright notice may not be removed or altered from any 3. This Copyright notice may not be removed or altered from
source or altered source distribution. any source or altered source distribution.
The Contributing Authors and Group 42, Inc. specifically permit, without The Contributing Authors and Group 42, Inc. specifically permit, without
fee, and encourage the use of this source code as a component to fee, and encourage the use of this source code as a component to
@ -3684,7 +3741,7 @@ certification mark of the Open Source Initiative.
Glenn Randers-Pehrson Glenn Randers-Pehrson
randeg@alum.rpi.edu randeg@alum.rpi.edu
January 31, 2001 March 14, 2001
.\" end of man page .\" end of man page

View File

@ -1,6 +1,6 @@
libpng.txt - A description on how to use and modify libpng libpng.txt - A description on how to use and modify libpng
libpng version 1.0.9 - January 31, 2001 libpng version 1.0.10beta1 - March 14, 2001
Updated and distributed by Glenn Randers-Pehrson Updated and distributed by Glenn Randers-Pehrson
<randeg@alum.rpi.edu> <randeg@alum.rpi.edu>
Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
@ -257,10 +257,11 @@ input stream. You must supply the function
png_byte name[5]; png_byte name[5];
png_byte *data; png_byte *data;
png_size_t size; png_size_t size;
/* Note that libpng has already taken care of the /* Note that libpng has already taken care of
CRC handling */ the CRC handling */
/* put your code here. Return one of the following: */ /* put your code here. Return one of the
following: */
return (-n); /* chunk had an error */ return (-n); /* chunk had an error */
return (0); /* did not recognize */ return (0); /* did not recognize */
@ -331,16 +332,23 @@ the entire image into memory, and (b) the input transformations
you want to do are limited to the following set: you want to do are limited to the following set:
PNG_TRANSFORM_IDENTITY No transformation PNG_TRANSFORM_IDENTITY No transformation
PNG_TRANSFORM_STRIP_16 Strip 16-bit samples to 8 bits PNG_TRANSFORM_STRIP_16 Strip 16-bit samples to
8 bits
PNG_TRANSFORM_STRIP_ALPHA Discard the alpha channel PNG_TRANSFORM_STRIP_ALPHA Discard the alpha channel
PNG_TRANSFORM_PACKING Expand 1, 2 and 4-bit samples to bytes PNG_TRANSFORM_PACKING Expand 1, 2 and 4-bit
PNG_TRANSFORM_PACKSWAP Change order of packed pixels to LSB first samples to bytes
PNG_TRANSFORM_PACKSWAP Change order of packed
pixels to LSB first
PNG_TRANSFORM_EXPAND Perform set_expand() PNG_TRANSFORM_EXPAND Perform set_expand()
PNG_TRANSFORM_INVERT_MONO Invert monochrome images PNG_TRANSFORM_INVERT_MONO Invert monochrome images
PNG_TRANSFORM_SHIFT Normalize pixels to the sBIT depth PNG_TRANSFORM_SHIFT Normalize pixels to the
PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA to BGRA sBIT depth
PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA to AG PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA
PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity to transparency to BGRA
PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA
to AG
PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity
to transparency
PNG_TRANSFORM_SWAP_ENDIAN Byte-swap 16-bit samples PNG_TRANSFORM_SWAP_ENDIAN Byte-swap 16-bit samples
(This excludes setting a background color, doing gamma transformation, (This excludes setting a background color, doing gamma transformation,
@ -368,9 +376,11 @@ where row_pointers is an array of pointers to the pixel data for each row:
If you know your image size and pixel size ahead of time, you can allocate If you know your image size and pixel size ahead of time, you can allocate
row_pointers prior to calling png_read_png() with row_pointers prior to calling png_read_png() with
row_pointers = png_malloc(png_ptr, height*sizeof(png_bytep)); row_pointers = png_malloc(png_ptr,
height*sizeof(png_bytep));
for (int i=0; i<height, i++) for (int i=0; i<height, i++)
row_pointers[i]=png_malloc(png_ptr, width*pixel_size); row_pointers[i]=png_malloc(png_ptr,
width*pixel_size);
png_set_rows(png_ptr, info_ptr, &row_pointers); png_set_rows(png_ptr, info_ptr, &row_pointers);
Alternatively you could allocate your image in one big block and define Alternatively you could allocate your image in one big block and define
@ -502,14 +512,15 @@ into the info_ptr is returned for any complex types.
implies specific values of gAMA and implies specific values of gAMA and
cHRM. cHRM.
png_get_iCCP(png_ptr, info_ptr, &name, &compression_type, png_get_iCCP(png_ptr, info_ptr, &name,
&profile, &proflen); &compression_type, &profile, &proflen);
name - The profile name. name - The profile name.
compression - The compression type; always PNG_COMPRESSION_TYPE_BASE compression - The compression type; always
for PNG 1.0. You may give NULL to this argument PNG_COMPRESSION_TYPE_BASE for PNG 1.0.
to ignore it. You may give NULL to this argument to
profile - International Color Consortium color profile ignore it.
data. May contain NULs. profile - International Color Consortium color
profile data. May contain NULs.
proflen - length of profile data in bytes. proflen - length of profile data in bytes.
png_get_sBIT(png_ptr, info_ptr, &sig_bit); png_get_sBIT(png_ptr, info_ptr, &sig_bit);
@ -565,17 +576,20 @@ into the info_ptr is returned for any complex types.
string for unknown). string for unknown).
text_ptr[i].translated_keyword - keyword in UTF-8 text_ptr[i].translated_keyword - keyword in UTF-8
(empty string for unknown). (empty string for unknown).
num_text - number of comments (same as num_comments; num_text - number of comments (same as
you can put NULL here to avoid the duplication) num_comments; you can put NULL here
Note while png_set_text() will accept text, language, and to avoid the duplication)
translated keywords that can be NULL pointers, the structure Note while png_set_text() will accept text, language,
returned by png_get_text will always contain regular and translated keywords that can be NULL pointers, the
zero-terminated C strings. They might be empty strings but structure returned by png_get_text will always contain
they will never be NULL pointers. regular zero-terminated C strings. They might be
empty strings but they will never be NULL pointers.
num_spalettes = png_get_sPLT(png_ptr, info_ptr, &palette_ptr); num_spalettes = png_get_sPLT(png_ptr, info_ptr,
&palette_ptr);
palette_ptr - array of palette structures holding palette_ptr - array of palette structures holding
contents of one or more sPLT chunks read. contents of one or more sPLT chunks
read.
num_spalettes - number of sPLT chunks read. num_spalettes - number of sPLT chunks read.
png_get_oFFs(png_ptr, info_ptr, &offset_x, &offset_y, png_get_oFFs(png_ptr, info_ptr, &offset_x, &offset_y,
@ -595,29 +609,32 @@ into the info_ptr is returned for any complex types.
unit_type - PNG_RESOLUTION_UNKNOWN, unit_type - PNG_RESOLUTION_UNKNOWN,
PNG_RESOLUTION_METER PNG_RESOLUTION_METER
png_get_sCAL(png_ptr, info_ptr, &unit, &width, &height) png_get_sCAL(png_ptr, info_ptr, &unit, &width,
&height)
unit - physical scale units (an integer) unit - physical scale units (an integer)
width - width of a pixel in physical scale units width - width of a pixel in physical scale units
height - height of a pixel in physical scale units height - height of a pixel in physical scale units
(width and height are doubles) (width and height are doubles)
png_get_sCAL_s(png_ptr, info_ptr, &unit, &width, &height) png_get_sCAL_s(png_ptr, info_ptr, &unit, &width,
&height)
unit - physical scale units (an integer) unit - physical scale units (an integer)
width - width of a pixel in physical scale units width - width of a pixel in physical scale units
height - height of a pixel in physical scale units height - height of a pixel in physical scale units
(width and height are strings like "2.54") (width and height are strings like "2.54")
num_unknown_chunks = png_get_unknown_chunks(png_ptr, info_ptr, num_unknown_chunks = png_get_unknown_chunks(png_ptr,
&unknowns) info_ptr, &unknowns)
unknowns - array of png_unknown_chunk structures holding unknowns - array of png_unknown_chunk
unknown chunks structures holding unknown chunks
unknowns[i].name - name of unknown chunk unknowns[i].name - name of unknown chunk
unknowns[i].data - data of unknown chunk unknowns[i].data - data of unknown chunk
unknowns[i].size - size of unknown chunk's data unknowns[i].size - size of unknown chunk's data
unknowns[i].location - position of chunk in file unknowns[i].location - position of chunk in file
The value of "i" corresponds to the order in which the chunks were read The value of "i" corresponds to the order in which the
from the PNG file or inserted with the png_set_unknown_chunks() function. chunks were read from the PNG file or inserted with the
png_set_unknown_chunks() function.
The data from the pHYs chunk can be retrieved in several convenient The data from the pHYs chunk can be retrieved in several convenient
forms: forms:
@ -650,8 +667,8 @@ forms:
y_offset = png_get_y_offset_inches(png_ptr, info_ptr); y_offset = png_get_y_offset_inches(png_ptr, info_ptr);
(Each of these returns 0 [signifying "unknown" if both (Each of these returns 0 [signifying "unknown" if both
x and y are 0] if the data is not present or if the chunk x and y are 0] if the data is not present or if the
is present but the unit is the pixel) chunk is present but the unit is the pixel)
For more information, see the png_info definition in png.h and the For more information, see the png_info definition in png.h and the
PNG specification for chunk contents. Be careful with trusting PNG specification for chunk contents. Be careful with trusting
@ -1185,7 +1202,7 @@ When you are done, you can free all memory allocated by libpng like this:
It is also possible to individually free the info_ptr members that It is also possible to individually free the info_ptr members that
point to libpng-allocated storage with the following function: point to libpng-allocated storage with the following function:
png_free_data(png_ptr, info_ptr, mask, n) png_free_data(png_ptr, info_ptr, mask, seq)
mask - identifies data to be freed, a mask mask - identifies data to be freed, a mask
containing the logical OR of one or containing the logical OR of one or
more of more of
@ -1195,16 +1212,17 @@ point to libpng-allocated storage with the following function:
PNG_FREE_SCAL, PNG_FREE_SPLT, PNG_FREE_SCAL, PNG_FREE_SPLT,
PNG_FREE_TEXT, PNG_FREE_UNKN, PNG_FREE_TEXT, PNG_FREE_UNKN,
or simply PNG_FREE_ALL or simply PNG_FREE_ALL
n - sequence number of item to be freed seq - sequence number of item to be freed
(-1 for all items) (-1 for all items)
This function may be safely called when the relevant storage has This function may be safely called when the relevant storage has
already been freed, or has not yet been allocated, or was allocated already been freed, or has not yet been allocated, or was allocated
by the user and not by libpng, and will in those by the user and not by libpng, and will in those
cases do nothing. The "n" parameter is ignored if only one item cases do nothing. The "seq" parameter is ignored if only one item
of the selected data type, such as PLTE, is allowed. If "n" is not of the selected data type, such as PLTE, is allowed. If "seq" is not
-1, and multiple items are allowed for the data type identified in -1, and multiple items are allowed for the data type identified in
the mask, such as text or sPLT, only the n'th item is freed. the mask, such as text or sPLT, only the n'th item in the structure
is freed, where n is "seq".
The default behavior is only to free data that was allocated internally The default behavior is only to free data that was allocated internally
by libpng. This can be changed, so that libpng will not free the data, by libpng. This can be changed, so that libpng will not free the data,
@ -1377,6 +1395,7 @@ png_infop info_ptr;
/* This function is called when each row of image /* This function is called when each row of image
data is complete */ data is complete */
void void
row_callback(png_structp png_ptr, png_bytep new_row, row_callback(png_structp png_ptr, png_bytep new_row,
png_uint_32 row_num, int pass) png_uint_32 row_num, int pass)
@ -1523,7 +1542,8 @@ called after each row has been written, which you can use to control
a progress meter or the like. It's demonstrated in pngtest.c. a progress meter or the like. It's demonstrated in pngtest.c.
You must supply a function You must supply a function
void write_row_callback(png_ptr, png_uint_32 row, int pass); void write_row_callback(png_ptr, png_uint_32 row,
int pass);
{ {
/* put your code here */ /* put your code here */
} }
@ -1551,8 +1571,9 @@ types.
/* turn on or off filtering, and/or choose /* turn on or off filtering, and/or choose
specific filters. You can use either a single PNG_FILTER_VALUE_NAME specific filters. You can use either a single
or the logical OR of one or more PNG_FILTER_NAME masks. */ PNG_FILTER_VALUE_NAME or the logical OR of one
or more PNG_FILTER_NAME masks. */
png_set_filter(png_ptr, 0, png_set_filter(png_ptr, 0,
PNG_FILTER_NONE | PNG_FILTER_VALUE_NONE | PNG_FILTER_NONE | PNG_FILTER_VALUE_NONE |
PNG_FILTER_SUB | PNG_FILTER_VALUE_SUB | PNG_FILTER_SUB | PNG_FILTER_VALUE_SUB |
@ -1688,11 +1709,12 @@ Some of the more important parts of the png_info are:
png_set_iCCP(png_ptr, info_ptr, name, compression_type, png_set_iCCP(png_ptr, info_ptr, name, compression_type,
profile, proflen); profile, proflen);
name - The profile name. name - The profile name.
compression - The compression type; always PNG_COMPRESSION_TYPE_BASE compression - The compression type; always
for PNG 1.0. You may give NULL to this argument PNG_COMPRESSION_TYPE_BASE for PNG 1.0.
to ignore it. You may give NULL to this argument to
profile - International Color Consortium color profile ignore it.
data. May contain NULs. profile - International Color Consortium color
profile data. May contain NULs.
proflen - length of profile data in bytes. proflen - length of profile data in bytes.
png_set_sBIT(png_ptr, info_ptr, sig_bit); png_set_sBIT(png_ptr, info_ptr, sig_bit);
@ -1746,11 +1768,13 @@ Some of the more important parts of the png_info are:
or empty for unknown). or empty for unknown).
num_text - number of comments num_text - number of comments
png_set_sPLT(png_ptr, info_ptr, &palette_ptr, num_spalettes); png_set_sPLT(png_ptr, info_ptr, &palette_ptr,
palette_ptr - array of png_sPLT_struct structures to be num_spalettes);
added to the list of palettes in the info palette_ptr - array of png_sPLT_struct structures
structure. to be added to the list of palettes
num_spalettes - number of palette structures to be added. in the info structure.
num_spalettes - number of palette structures to be
added.
png_set_oFFs(png_ptr, info_ptr, offset_x, offset_y, png_set_oFFs(png_ptr, info_ptr, offset_x, offset_y,
unit_type); unit_type);
@ -1781,9 +1805,10 @@ Some of the more important parts of the png_info are:
height - height of a pixel in physical scale units height - height of a pixel in physical scale units
(width and height are strings like "2.54") (width and height are strings like "2.54")
png_set_unknown_chunks(png_ptr, info_ptr, &unknowns, num_unknowns) png_set_unknown_chunks(png_ptr, info_ptr, &unknowns,
unknowns - array of png_unknown_chunk structures holding num_unknowns)
unknown chunks unknowns - array of png_unknown_chunk
structures holding unknown chunks
unknowns[i].name - name of unknown chunk unknowns[i].name - name of unknown chunk
unknowns[i].data - data of unknown chunk unknowns[i].data - data of unknown chunk
unknowns[i].size - size of unknown chunk's data unknowns[i].size - size of unknown chunk's data
@ -1792,14 +1817,15 @@ Some of the more important parts of the png_info are:
PNG_HAVE_IHDR: before PLTE PNG_HAVE_IHDR: before PLTE
PNG_HAVE_PLTE: before IDAT PNG_HAVE_PLTE: before IDAT
PNG_AFTER_IDAT: after IDAT PNG_AFTER_IDAT: after IDAT
The "location" member is set automatically according to
what part of the output file has already been written. The "location" member is set automatically according to
You can change its value after calling png_set_unknown_chunks() what part of the output file has already been written.
as demonstrated in pngtest.c. Within each of the "locations", You can change its value after calling png_set_unknown_chunks()
the chunks are sequenced according to their position in the as demonstrated in pngtest.c. Within each of the "locations",
structure (that is, the value of "i", which is the order in which the chunks are sequenced according to their position in the
the chunk was either read from the input file or defined with structure (that is, the value of "i", which is the order in which
png_set_unknown_chunks). the chunk was either read from the input file or defined with
png_set_unknown_chunks).
A quick word about text and num_text. text is an array of png_text A quick word about text and num_text. text is an array of png_text
structures. num_text is the number of valid structures in the array. structures. num_text is the number of valid structures in the array.
@ -1900,12 +1926,17 @@ transformations are permitted, enabled by the following masks.
PNG_TRANSFORM_IDENTITY No transformation PNG_TRANSFORM_IDENTITY No transformation
PNG_TRANSFORM_PACKING Pack 1, 2 and 4-bit samples PNG_TRANSFORM_PACKING Pack 1, 2 and 4-bit samples
PNG_TRANSFORM_PACKSWAP Change order of packed pixels to LSB first PNG_TRANSFORM_PACKSWAP Change order of packed
pixels to LSB first
PNG_TRANSFORM_INVERT_MONO Invert monochrome images PNG_TRANSFORM_INVERT_MONO Invert monochrome images
PNG_TRANSFORM_SHIFT Normalize pixels to the sBIT depth PNG_TRANSFORM_SHIFT Normalize pixels to the
PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA to BGRA sBIT depth
PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA to AG PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA
PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity to transparency to BGRA
PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA
to AG
PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity
to transparency
PNG_TRANSFORM_SWAP_ENDIAN Byte-swap 16-bit samples PNG_TRANSFORM_SWAP_ENDIAN Byte-swap 16-bit samples
PNG_TRANSFORM_STRIP_FILLER Strip out filler bytes. PNG_TRANSFORM_STRIP_FILLER Strip out filler bytes.
@ -2169,7 +2200,7 @@ When you are done, you can free all memory used by libpng like this:
It is also possible to individually free the info_ptr members that It is also possible to individually free the info_ptr members that
point to libpng-allocated storage with the following function: point to libpng-allocated storage with the following function:
png_free_data(png_ptr, info_ptr, mask, n) png_free_data(png_ptr, info_ptr, mask, seq)
mask - identifies data to be freed, a mask mask - identifies data to be freed, a mask
containing the logical OR of one or containing the logical OR of one or
more of more of
@ -2179,16 +2210,17 @@ point to libpng-allocated storage with the following function:
PNG_FREE_SCAL, PNG_FREE_SPLT, PNG_FREE_SCAL, PNG_FREE_SPLT,
PNG_FREE_TEXT, PNG_FREE_UNKN, PNG_FREE_TEXT, PNG_FREE_UNKN,
or simply PNG_FREE_ALL or simply PNG_FREE_ALL
n - sequence number of item to be freed seq - sequence number of item to be freed
(-1 for all items) (-1 for all items)
This function may be safely called when the relevant storage has This function may be safely called when the relevant storage has
already been freed, or has not yet been allocated, or was allocated already been freed, or has not yet been allocated, or was allocated
by the user and not by libpng, and will in those by the user and not by libpng, and will in those
cases do nothing. The "n" parameter is ignored if only one item cases do nothing. The "seq" parameter is ignored if only one item
of the selected data type, such as PLTE, is allowed. If "n" is not of the selected data type, such as PLTE, is allowed. If "seq" is not
-1, and multiple items are allowed for the data type identified in -1, and multiple items are allowed for the data type identified in
the mask, such as text or sPLT, only the n'th item is freed. the mask, such as text or sPLT, only the n'th item in the structure
is freed, where n is "seq".
If you allocated data such as a palette that you passed If you allocated data such as a palette that you passed
in to libpng with png_set_*, you must not free it until just before the call to in to libpng with png_set_*, you must not free it until just before the call to
@ -2269,8 +2301,8 @@ memory allocation on a platform will change between applications, these
functions must be modified in the library at compile time. If you prefer functions must be modified in the library at compile time. If you prefer
to use a different method of allocating and freeing data, you can use to use a different method of allocating and freeing data, you can use
png_set_mem_fn(png_structp png_ptr, png_voidp mem_ptr, png_malloc_ptr png_set_mem_fn(png_structp png_ptr, png_voidp mem_ptr,
malloc_fn, png_free_ptr free_fn) png_malloc_ptr malloc_fn, png_free_ptr free_fn)
This function also provides a void pointer that can be retrieved via This function also provides a void pointer that can be retrieved via
@ -2278,7 +2310,8 @@ This function also provides a void pointer that can be retrieved via
Your replacement memory functions must have prototypes as follows: Your replacement memory functions must have prototypes as follows:
png_voidp malloc_fn(png_structp png_ptr, png_uint_32 size); png_voidp malloc_fn(png_structp png_ptr,
png_uint_32 size);
void free_fn(png_structp png_ptr, png_voidp ptr); void free_fn(png_structp png_ptr, png_voidp ptr);
Input/Output in libpng is done through png_read() and png_write(), Input/Output in libpng is done through png_read() and png_write(),
@ -2490,10 +2523,12 @@ structures appropriately for all of the filter types.
png_set_filter(png_ptr, PNG_FILTER_TYPE_BASE, png_set_filter(png_ptr, PNG_FILTER_TYPE_BASE,
filters); filters);
The second parameter can also be PNG_INTRAPIXEL_DIFFERENCING The second parameter can also be
if you are writing a PNG to be embedded in a MNG PNG_INTRAPIXEL_DIFFERENCING if you are
datastream. This parameter must be the same as the writing a PNG to be embedded in a MNG
value of filter_method used in png_set_IHDR(). datastream. This parameter must be the
same as the value of filter_method used
in png_set_IHDR().
It is also possible to influence how libpng chooses from among the It is also possible to influence how libpng chooses from among the
available filters. This is done in two ways - by telling it how available filters. This is done in two ways - by telling it how
@ -2682,13 +2717,13 @@ application:
VIII. Y2K Compliance in libpng VIII. Y2K Compliance in libpng
January 31, 2001 March 14, 2001
Since the PNG Development group is an ad-hoc body, we can't make Since the PNG Development group is an ad-hoc body, we can't make
an official declaration. an official declaration.
This is your unofficial assurance that libpng from version 0.71 and This is your unofficial assurance that libpng from version 0.71 and
upward through 1.0.9 are Y2K compliant. It is my belief that earlier upward through 1.0.10beta1 are Y2K compliant. It is my belief that earlier
versions were also Y2K compliant. versions were also Y2K compliant.
Libpng only has three year fields. One is a 2-byte unsigned integer that Libpng only has three year fields. One is a 2-byte unsigned integer that
@ -2706,7 +2741,8 @@ There are seven time-related functions:
png_convert_to_rfc_1123() in png.c png_convert_to_rfc_1123() in png.c
(formerly png_convert_to_rfc_1152() in error) (formerly png_convert_to_rfc_1152() in error)
png_convert_from_struct_tm() in pngwrite.c, called in pngwrite.c png_convert_from_struct_tm() in pngwrite.c, called
in pngwrite.c
png_convert_from_time_t() in pngwrite.c png_convert_from_time_t() in pngwrite.c
png_get_tIME() in pngget.c png_get_tIME() in pngget.c
png_handle_tIME() in pngrutil.c, called in pngread.c png_handle_tIME() in pngrutil.c, called in pngread.c

View File

@ -1,6 +1,6 @@
.TH LIBPNGPF 3 "January 31, 2001" .TH LIBPNGPF 3 "March 14, 2001"
.SH NAME .SH NAME
libpng \- Portable Network Graphics (PNG) Reference Library 1.0.9 libpng \- Portable Network Graphics (PNG) Reference Library 1.0.10beta1
(private functions) (private functions)
.SH SYNOPSIS .SH SYNOPSIS
\fB#include <png.h>\fP \fB#include <png.h>\fP

2
png.5
View File

@ -1,4 +1,4 @@
.TH PNG 5 "January 31, 2001" .TH PNG 5 "March 14, 2001"
.SH NAME .SH NAME
png \- Portable Network Graphics (PNG) format png \- Portable Network Graphics (PNG) format
.SH DESCRIPTION .SH DESCRIPTION

14
png.c
View File

@ -1,7 +1,7 @@
/* png.c - location for general purpose libpng functions /* png.c - location for general purpose libpng functions
* *
* libpng version 1.0.9 - January 31, 2001 * libpng version 1.0.10beta1 - March 14, 2001
* Copyright (c) 1998-2001 Glenn Randers-Pehrson * Copyright (c) 1998-2001 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
@ -13,14 +13,14 @@
#include "png.h" #include "png.h"
/* Generate a compiler error if there is an old png.h in the search path. */ /* Generate a compiler error if there is an old png.h in the search path. */
typedef version_1_0_9 Your_png_h_is_not_version_1_0_9; typedef version_1_0_10beta1 Your_png_h_is_not_version_1_0_10beta1;
/* Version information for C files. This had better match the version /* Version information for C files. This had better match the version
* string defined in png.h. */ * string defined in png.h. */
#ifdef PNG_USE_GLOBAL_ARRAYS #ifdef PNG_USE_GLOBAL_ARRAYS
/* png_libpng_ver was changed to a function in version 1.0.5c */ /* png_libpng_ver was changed to a function in version 1.0.5c */
const char png_libpng_ver[18] = "1.0.9"; const char png_libpng_ver[18] = "1.0.10beta1";
/* png_sig was changed to a function in version 1.0.5c */ /* png_sig was changed to a function in version 1.0.5c */
/* Place to hold the signature string for a PNG file. */ /* Place to hold the signature string for a PNG file. */
@ -626,7 +626,7 @@ png_charp PNGAPI
png_get_copyright(png_structp png_ptr) png_get_copyright(png_structp png_ptr)
{ {
if (png_ptr != NULL || png_ptr == NULL) /* silence compiler warning */ if (png_ptr != NULL || png_ptr == NULL) /* silence compiler warning */
return ((png_charp) "\n libpng version 1.0.9 - January 31, 2001\n\ return ((png_charp) "\n libpng version 1.0.10beta1 - March 14, 2001\n\
Copyright (c) 1998-2001 Glenn Randers-Pehrson\n\ Copyright (c) 1998-2001 Glenn Randers-Pehrson\n\
Copyright (c) 1996, 1997 Andreas Dilger\n\ Copyright (c) 1996, 1997 Andreas Dilger\n\
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.\n"); Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.\n");
@ -644,8 +644,8 @@ png_get_libpng_ver(png_structp png_ptr)
{ {
/* Version of *.c files used when building libpng */ /* Version of *.c files used when building libpng */
if(png_ptr != NULL) /* silence compiler warning about unused png_ptr */ if(png_ptr != NULL) /* silence compiler warning about unused png_ptr */
return((png_charp) "1.0.9"); return((png_charp) "1.0.10beta1");
return((png_charp) "1.0.9"); return((png_charp) "1.0.10beta1");
} }
png_charp PNGAPI png_charp PNGAPI
@ -695,7 +695,7 @@ png_uint_32 PNGAPI
png_access_version_number(void) png_access_version_number(void)
{ {
/* Version of *.c files used when building libpng */ /* Version of *.c files used when building libpng */
return((png_uint_32) 10009L); return((png_uint_32) 10010L);
} }

105
png.h
View File

@ -1,7 +1,7 @@
/* png.h - header file for PNG reference library /* png.h - header file for PNG reference library
* *
* libpng version 1.0.9 - January 31, 2001 * libpng version 1.0.10beta1 - March 14, 2001
* Copyright (c) 1998-2001 Glenn Randers-Pehrson * Copyright (c) 1998-2001 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.) * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
@ -9,7 +9,7 @@
* Authors and maintainers: * Authors and maintainers:
* libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat * libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
* libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger * libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger
* libpng versions 0.97, January 1998, through 1.0.9 - January 31, 2001: Glenn * libpng versions 0.97, January 1998, through 1.0.10beta1 - March 14, 2001: Glenn
* See also "Contributing Authors", below. * See also "Contributing Authors", below.
* *
* Note about libpng version numbers: * Note about libpng version numbers:
@ -64,6 +64,7 @@
* 1.0.9beta7-10 1 10009 2.1.0.9beta7-10 * 1.0.9beta7-10 1 10009 2.1.0.9beta7-10
* 1.0.9rc2 1 10009 2.1.0.9rc2 * 1.0.9rc2 1 10009 2.1.0.9rc2
* 1.0.9 1 10009 2.1.0.9 * 1.0.9 1 10009 2.1.0.9
* 1.0.10beta1 1 10010 2.1.0.10beta1
* *
* Henceforth the source version will match the shared-library major * Henceforth the source version will match the shared-library major
* and minor numbers; the shared-library major version number will be * and minor numbers; the shared-library major version number will be
@ -93,7 +94,7 @@
* If you modify libpng you may insert additional notices immediately following * If you modify libpng you may insert additional notices immediately following
* this sentence. * this sentence.
* *
* libpng versions 1.0.7, July 1, 2000, through 1.0.9, January 31, 2001, are * libpng versions 1.0.7, July 1, 2000, through 1.0.10beta1, March 14, 2001, are
* Copyright (c) 2000, 2001 Glenn Randers-Pehrson, and are * Copyright (c) 2000, 2001 Glenn Randers-Pehrson, and are
* distributed according to the same disclaimer and license as libpng-1.0.6 * distributed according to the same disclaimer and license as libpng-1.0.6
* with the following individuals added to the list of Contributing Authors * with the following individuals added to the list of Contributing Authors
@ -158,11 +159,11 @@
* *
* 1. The origin of this source code must not be misrepresented. * 1. The origin of this source code must not be misrepresented.
* *
* 2. Altered versions must be plainly marked as such and must not * 2. Altered versions must be plainly marked as such and
* be misrepresented as being the original source. * must not be misrepresented as being the original source.
* *
* 3. This Copyright notice may not be removed or altered from any * 3. This Copyright notice may not be removed or altered from
* source or altered source distribution. * any source or altered source distribution.
* *
* The Contributing Authors and Group 42, Inc. specifically permit, without * The Contributing Authors and Group 42, Inc. specifically permit, without
* fee, and encourage the use of this source code as a component to * fee, and encourage the use of this source code as a component to
@ -198,13 +199,13 @@
* Y2K compliance in libpng: * Y2K compliance in libpng:
* ========================= * =========================
* *
* January 31, 2001 * March 14, 2001
* *
* Since the PNG Development group is an ad-hoc body, we can't make * Since the PNG Development group is an ad-hoc body, we can't make
* an official declaration. * an official declaration.
* *
* This is your unofficial assurance that libpng from version 0.71 and * This is your unofficial assurance that libpng from version 0.71 and
* upward through 1.0.9 are Y2K compliant. It is my belief that earlier * upward through 1.0.10beta1 are Y2K compliant. It is my belief that earlier
* versions were also Y2K compliant. * versions were also Y2K compliant.
* *
* Libpng only has three year fields. One is a 2-byte unsigned integer * Libpng only has three year fields. One is a 2-byte unsigned integer
@ -260,7 +261,7 @@
*/ */
/* Version information for png.h - this should match the version in png.c */ /* Version information for png.h - this should match the version in png.c */
#define PNG_LIBPNG_VER_STRING "1.0.9" #define PNG_LIBPNG_VER_STRING "1.0.10beta1"
#define PNG_LIBPNG_VER_SONUM 2 #define PNG_LIBPNG_VER_SONUM 2
#define PNG_LIBPNG_VER_DLLNUM %DLLNUM% #define PNG_LIBPNG_VER_DLLNUM %DLLNUM%
@ -268,11 +269,11 @@
/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */ /* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
#define PNG_LIBPNG_VER_MAJOR 1 #define PNG_LIBPNG_VER_MAJOR 1
#define PNG_LIBPNG_VER_MINOR 0 #define PNG_LIBPNG_VER_MINOR 0
#define PNG_LIBPNG_VER_RELEASE 9 #define PNG_LIBPNG_VER_RELEASE 10
/* This should match the numeric part of the final component of /* This should match the numeric part of the final component of
* PNG_LIBPNG_VER_STRING, omitting any leading zero: */ * PNG_LIBPNG_VER_STRING, omitting any leading zero: */
#define PNG_LIBPNG_VER_BUILD 0 #define PNG_LIBPNG_VER_BUILD 1
#define PNG_LIBPNG_BUILD_ALPHA 1 #define PNG_LIBPNG_BUILD_ALPHA 1
#define PNG_LIBPNG_BUILD_BETA 2 #define PNG_LIBPNG_BUILD_BETA 2
@ -280,14 +281,14 @@
#define PNG_LIBPNG_BUILD_STABLE 4 #define PNG_LIBPNG_BUILD_STABLE 4
#define PNG_LIBPNG_BUILD_TYPEMASK 7 #define PNG_LIBPNG_BUILD_TYPEMASK 7
#define PNG_LIBPNG_BUILD_PATCH 8 /* Can be OR'ed with STABLE only */ #define PNG_LIBPNG_BUILD_PATCH 8 /* Can be OR'ed with STABLE only */
#define PNG_LIBPNG_BUILD_TYPE 4 #define PNG_LIBPNG_BUILD_TYPE 2
/* Careful here. At one time, Guy wanted to use 082, but that would be octal. /* Careful here. At one time, Guy wanted to use 082, but that would be octal.
* We must not include leading zeros. * We must not include leading zeros.
* Versions 0.7 through 1.0.0 were in the range 0 to 100 here (only * Versions 0.7 through 1.0.0 were in the range 0 to 100 here (only
* version 1.0.0 was mis-numbered 100 instead of 10000). From * version 1.0.0 was mis-numbered 100 instead of 10000). From
* version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release */ * version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release */
#define PNG_LIBPNG_VER 10009 /* 1.0.9 */ #define PNG_LIBPNG_VER 10010 /* 1.0.10 */
#ifndef PNG_VERSION_INFO_ONLY #ifndef PNG_VERSION_INFO_ONLY
@ -902,10 +903,10 @@ typedef void (PNGAPI *png_user_transform_ptr) PNGARG((png_structp,
png_row_infop, png_bytep)); png_row_infop, png_bytep));
#endif #endif
#if defined(PNG_READ_USER_CHUNKS_SUPPORTED) #if defined(PNG_USER_CHUNKS_SUPPORTED)
typedef int (PNGAPI *png_user_chunk_ptr) PNGARG((png_structp, png_unknown_chunkp)); typedef int (PNGAPI *png_user_chunk_ptr) PNGARG((png_structp, png_unknown_chunkp));
#endif #endif
#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
typedef void (PNGAPI *png_unknown_chunk_ptr) PNGARG((png_structp)); typedef void (PNGAPI *png_unknown_chunk_ptr) PNGARG((png_structp));
#endif #endif
@ -1025,7 +1026,7 @@ struct png_struct_def
#endif #endif
#endif #endif
#if defined(PNG_READ_bKGD_SUPPORTED) #if defined(PNG_bKGD_SUPPORTED)
png_byte background_gamma_type; png_byte background_gamma_type;
# ifdef PNG_FLOATING_POINT_SUPPORTED # ifdef PNG_FLOATING_POINT_SUPPORTED
float background_gamma; float background_gamma;
@ -1033,8 +1034,8 @@ struct png_struct_def
png_color_16 background; /* background color in screen gamma space */ png_color_16 background; /* background color in screen gamma space */
# if defined(PNG_READ_GAMMA_SUPPORTED) # if defined(PNG_READ_GAMMA_SUPPORTED)
png_color_16 background_1; /* background normalized to gamma 1.0 */ png_color_16 background_1; /* background normalized to gamma 1.0 */
# endif /* PNG_READ_GAMMA && PNG_READ_bKGD_SUPPORTED */ # endif /* PNG_READ_GAMMA && PNG_bKGD_SUPPORTED */
#endif /* PNG_READ_bKGD_SUPPORTED */ #endif /* PNG_bKGD_SUPPORTED */
#if defined(PNG_WRITE_FLUSH_SUPPORTED) #if defined(PNG_WRITE_FLUSH_SUPPORTED)
png_flush_ptr output_flush_fn;/* Function for flushing output */ png_flush_ptr output_flush_fn;/* Function for flushing output */
@ -1059,7 +1060,7 @@ struct png_struct_def
png_uint_16pp gamma_16_to_1; /* converts from file to 1.0 */ png_uint_16pp gamma_16_to_1; /* converts from file to 1.0 */
#endif #endif
#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_sBIT_SUPPORTED) #if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_sBIT_SUPPORTED)
png_color_8 sig_bit; /* significant bits in each available channel */ png_color_8 sig_bit; /* significant bits in each available channel */
#endif #endif
@ -1067,7 +1068,7 @@ struct png_struct_def
png_color_8 shift; /* shift for significant bit tranformation */ png_color_8 shift; /* shift for significant bit tranformation */
#endif #endif
#if defined(PNG_READ_tRNS_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) \ #if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) \
|| defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) || defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
png_bytep trans; /* transparency values for paletted files */ png_bytep trans; /* transparency values for paletted files */
png_color_16 trans_values; /* transparency values for non-paletted files */ png_color_16 trans_values; /* transparency values for non-paletted files */
@ -1092,12 +1093,12 @@ struct png_struct_def
int process_mode; /* what push library is currently doing */ int process_mode; /* what push library is currently doing */
int cur_palette; /* current push library palette index */ int cur_palette; /* current push library palette index */
# if defined(PNG_READ_TEXT_SUPPORTED) # if defined(PNG_TEXT_SUPPORTED)
png_size_t current_text_size; /* current size of text input data */ png_size_t current_text_size; /* current size of text input data */
png_size_t current_text_left; /* how much text left to read in input */ png_size_t current_text_left; /* how much text left to read in input */
png_charp current_text; /* current text chunk buffer */ png_charp current_text; /* current text chunk buffer */
png_charp current_text_ptr; /* current location in current_text */ png_charp current_text_ptr; /* current location in current_text */
# endif /* PNG_PROGRESSIVE_READ_SUPPORTED && PNG_READ_TEXT_SUPPORTED */ # endif /* PNG_PROGRESSIVE_READ_SUPPORTED && PNG_TEXT_SUPPORTED */
#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ #endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
@ -1115,7 +1116,7 @@ struct png_struct_def
png_bytep dither_index; /* index translation for palette files */ png_bytep dither_index; /* index translation for palette files */
#endif #endif
#if defined(PNG_READ_DITHER_SUPPORTED) || defined(PNG_READ_hIST_SUPPORTED) #if defined(PNG_READ_DITHER_SUPPORTED) || defined(PNG_hIST_SUPPORTED)
png_uint_16p hist; /* histogram */ png_uint_16p hist; /* histogram */
#endif #endif
@ -1145,7 +1146,7 @@ struct png_struct_def
png_uint_32 free_me; /* flags items libpng is responsible for freeing */ png_uint_32 free_me; /* flags items libpng is responsible for freeing */
#endif #endif
#if defined(PNG_READ_USER_CHUNKS_SUPPORTED) #if defined(PNG_USER_CHUNKS_SUPPORTED)
png_voidp user_chunk_ptr; png_voidp user_chunk_ptr;
png_user_chunk_ptr read_user_chunk_fn; /* user read chunk handler */ png_user_chunk_ptr read_user_chunk_fn; /* user read chunk handler */
#endif #endif
@ -1175,13 +1176,15 @@ struct png_struct_def
png_byte filter_type; png_byte filter_type;
png_uint_32 row_buf_size;
}; };
/* This prevents a compiler error in png_get_copyright() in png.c if png.c /* This prevents a compiler error in png_get_copyright() in png.c if png.c
and png.h are both at * version 1.0.9 and png.h are both at * version 1.0.10beta1
*/ */
typedef png_structp version_1_0_9; typedef png_structp version_1_0_10beta1;
typedef png_struct FAR * FAR * png_structpp; typedef png_struct FAR * FAR * png_structpp;
@ -1695,7 +1698,7 @@ extern PNG_EXPORT(png_voidp,png_get_user_transform_ptr)
PNGARG((png_structp png_ptr)); PNGARG((png_structp png_ptr));
#endif #endif
#ifdef PNG_READ_USER_CHUNKS_SUPPORTED #ifdef PNG_USER_CHUNKS_SUPPORTED
extern PNG_EXPORT(void,png_set_read_user_chunk_fn) PNGARG((png_structp png_ptr, extern PNG_EXPORT(void,png_set_read_user_chunk_fn) PNGARG((png_structp png_ptr,
png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn)); png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn));
extern PNG_EXPORT(png_voidp,png_get_user_chunk_ptr) PNGARG((png_structp extern PNG_EXPORT(png_voidp,png_get_user_chunk_ptr) PNGARG((png_structp
@ -1888,7 +1891,7 @@ png_ptr, png_infop info_ptr));
extern PNG_EXPORT(png_bytep,png_get_signature) PNGARG((png_structp png_ptr, extern PNG_EXPORT(png_bytep,png_get_signature) PNGARG((png_structp png_ptr,
png_infop info_ptr)); png_infop info_ptr));
#if defined(PNG_READ_bKGD_SUPPORTED) #if defined(PNG_bKGD_SUPPORTED)
extern PNG_EXPORT(png_uint_32,png_get_bKGD) PNGARG((png_structp png_ptr, extern PNG_EXPORT(png_uint_32,png_get_bKGD) PNGARG((png_structp png_ptr,
png_infop info_ptr, png_color_16p *background)); png_infop info_ptr, png_color_16p *background));
#endif #endif
@ -1898,7 +1901,7 @@ extern PNG_EXPORT(void,png_set_bKGD) PNGARG((png_structp png_ptr,
png_infop info_ptr, png_color_16p background)); png_infop info_ptr, png_color_16p background));
#endif #endif
#if defined(PNG_READ_cHRM_SUPPORTED) #if defined(PNG_cHRM_SUPPORTED)
#ifdef PNG_FLOATING_POINT_SUPPORTED #ifdef PNG_FLOATING_POINT_SUPPORTED
extern PNG_EXPORT(png_uint_32,png_get_cHRM) PNGARG((png_structp png_ptr, extern PNG_EXPORT(png_uint_32,png_get_cHRM) PNGARG((png_structp png_ptr,
png_infop info_ptr, double *white_x, double *white_y, double *red_x, png_infop info_ptr, double *white_x, double *white_y, double *red_x,
@ -1929,7 +1932,7 @@ extern PNG_EXPORT(void,png_set_cHRM_fixed) PNGARG((png_structp png_ptr,
#endif #endif
#endif #endif
#if defined(PNG_READ_gAMA_SUPPORTED) #if defined(PNG_gAMA_SUPPORTED)
#ifdef PNG_FLOATING_POINT_SUPPORTED #ifdef PNG_FLOATING_POINT_SUPPORTED
extern PNG_EXPORT(png_uint_32,png_get_gAMA) PNGARG((png_structp png_ptr, extern PNG_EXPORT(png_uint_32,png_get_gAMA) PNGARG((png_structp png_ptr,
png_infop info_ptr, double *file_gamma)); png_infop info_ptr, double *file_gamma));
@ -1947,7 +1950,7 @@ extern PNG_EXPORT(void,png_set_gAMA_fixed) PNGARG((png_structp png_ptr,
png_infop info_ptr, png_fixed_point int_file_gamma)); png_infop info_ptr, png_fixed_point int_file_gamma));
#endif #endif
#if defined(PNG_READ_hIST_SUPPORTED) #if defined(PNG_hIST_SUPPORTED)
extern PNG_EXPORT(png_uint_32,png_get_hIST) PNGARG((png_structp png_ptr, extern PNG_EXPORT(png_uint_32,png_get_hIST) PNGARG((png_structp png_ptr,
png_infop info_ptr, png_uint_16p *hist)); png_infop info_ptr, png_uint_16p *hist));
#endif #endif
@ -1967,7 +1970,7 @@ extern PNG_EXPORT(void,png_set_IHDR) PNGARG((png_structp png_ptr,
int color_type, int interlace_method, int compression_method, int color_type, int interlace_method, int compression_method,
int filter_method)); int filter_method));
#if defined(PNG_READ_oFFs_SUPPORTED) #if defined(PNG_oFFs_SUPPORTED)
extern PNG_EXPORT(png_uint_32,png_get_oFFs) PNGARG((png_structp png_ptr, extern PNG_EXPORT(png_uint_32,png_get_oFFs) PNGARG((png_structp png_ptr,
png_infop info_ptr, png_int_32 *offset_x, png_int_32 *offset_y, png_infop info_ptr, png_int_32 *offset_x, png_int_32 *offset_y,
int *unit_type)); int *unit_type));
@ -1979,7 +1982,7 @@ extern PNG_EXPORT(void,png_set_oFFs) PNGARG((png_structp png_ptr,
int unit_type)); int unit_type));
#endif #endif
#if defined(PNG_READ_pCAL_SUPPORTED) #if defined(PNG_pCAL_SUPPORTED)
extern PNG_EXPORT(png_uint_32,png_get_pCAL) PNGARG((png_structp png_ptr, extern PNG_EXPORT(png_uint_32,png_get_pCAL) PNGARG((png_structp png_ptr,
png_infop info_ptr, png_charp *purpose, png_int_32 *X0, png_int_32 *X1, png_infop info_ptr, png_charp *purpose, png_int_32 *X0, png_int_32 *X1,
int *type, int *nparams, png_charp *units, png_charpp *params)); int *type, int *nparams, png_charp *units, png_charpp *params));
@ -1991,7 +1994,7 @@ extern PNG_EXPORT(void,png_set_pCAL) PNGARG((png_structp png_ptr,
int type, int nparams, png_charp units, png_charpp params)); int type, int nparams, png_charp units, png_charpp params));
#endif #endif
#if defined(PNG_READ_pHYs_SUPPORTED) #if defined(PNG_pHYs_SUPPORTED)
extern PNG_EXPORT(png_uint_32,png_get_pHYs) PNGARG((png_structp png_ptr, extern PNG_EXPORT(png_uint_32,png_get_pHYs) PNGARG((png_structp png_ptr,
png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)); png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type));
#endif #endif
@ -2007,7 +2010,7 @@ extern PNG_EXPORT(png_uint_32,png_get_PLTE) PNGARG((png_structp png_ptr,
extern PNG_EXPORT(void,png_set_PLTE) PNGARG((png_structp png_ptr, extern PNG_EXPORT(void,png_set_PLTE) PNGARG((png_structp png_ptr,
png_infop info_ptr, png_colorp palette, int num_palette)); png_infop info_ptr, png_colorp palette, int num_palette));
#if defined(PNG_READ_sBIT_SUPPORTED) #if defined(PNG_sBIT_SUPPORTED)
extern PNG_EXPORT(png_uint_32,png_get_sBIT) PNGARG((png_structp png_ptr, extern PNG_EXPORT(png_uint_32,png_get_sBIT) PNGARG((png_structp png_ptr,
png_infop info_ptr, png_color_8p *sig_bit)); png_infop info_ptr, png_color_8p *sig_bit));
#endif #endif
@ -2017,7 +2020,7 @@ extern PNG_EXPORT(void,png_set_sBIT) PNGARG((png_structp png_ptr,
png_infop info_ptr, png_color_8p sig_bit)); png_infop info_ptr, png_color_8p sig_bit));
#endif #endif
#if defined(PNG_READ_sRGB_SUPPORTED) #if defined(PNG_sRGB_SUPPORTED)
extern PNG_EXPORT(png_uint_32,png_get_sRGB) PNGARG((png_structp png_ptr, extern PNG_EXPORT(png_uint_32,png_get_sRGB) PNGARG((png_structp png_ptr,
png_infop info_ptr, int *intent)); png_infop info_ptr, int *intent));
#endif #endif
@ -2029,7 +2032,7 @@ extern PNG_EXPORT(void,png_set_sRGB_gAMA_and_cHRM) PNGARG((png_structp png_ptr,
png_infop info_ptr, int intent)); png_infop info_ptr, int intent));
#endif #endif
#if defined(PNG_READ_iCCP_SUPPORTED) #if defined(PNG_iCCP_SUPPORTED)
extern PNG_EXPORT(png_uint_32,png_get_iCCP) PNGARG((png_structp png_ptr, extern PNG_EXPORT(png_uint_32,png_get_iCCP) PNGARG((png_structp png_ptr,
png_infop info_ptr, png_charpp name, int *compression_type, png_infop info_ptr, png_charpp name, int *compression_type,
png_charpp profile, png_uint_32 *proflen)); png_charpp profile, png_uint_32 *proflen));
@ -2043,7 +2046,7 @@ extern PNG_EXPORT(void,png_set_iCCP) PNGARG((png_structp png_ptr,
/* Note to maintainer: profile should be png_bytep */ /* Note to maintainer: profile should be png_bytep */
#endif #endif
#if defined(PNG_READ_sPLT_SUPPORTED) #if defined(PNG_sPLT_SUPPORTED)
extern PNG_EXPORT(png_uint_32,png_get_sPLT) PNGARG((png_structp png_ptr, extern PNG_EXPORT(png_uint_32,png_get_sPLT) PNGARG((png_structp png_ptr,
png_infop info_ptr, png_sPLT_tpp entries)); png_infop info_ptr, png_sPLT_tpp entries));
#endif #endif
@ -2053,7 +2056,7 @@ extern PNG_EXPORT(void,png_set_sPLT) PNGARG((png_structp png_ptr,
png_infop info_ptr, png_sPLT_tp entries, int nentries)); png_infop info_ptr, png_sPLT_tp entries, int nentries));
#endif #endif
#if defined(PNG_READ_TEXT_SUPPORTED) #if defined(PNG_TEXT_SUPPORTED)
/* png_get_text also returns the number of text chunks in *num_text */ /* png_get_text also returns the number of text chunks in *num_text */
extern PNG_EXPORT(png_uint_32,png_get_text) PNGARG((png_structp png_ptr, extern PNG_EXPORT(png_uint_32,png_get_text) PNGARG((png_structp png_ptr,
png_infop info_ptr, png_textp *text_ptr, int *num_text)); png_infop info_ptr, png_textp *text_ptr, int *num_text));
@ -2072,7 +2075,7 @@ extern PNG_EXPORT(void,png_set_text) PNGARG((png_structp png_ptr,
png_infop info_ptr, png_textp text_ptr, int num_text)); png_infop info_ptr, png_textp text_ptr, int num_text));
#endif #endif
#if defined(PNG_READ_tIME_SUPPORTED) #if defined(PNG_tIME_SUPPORTED)
extern PNG_EXPORT(png_uint_32,png_get_tIME) PNGARG((png_structp png_ptr, extern PNG_EXPORT(png_uint_32,png_get_tIME) PNGARG((png_structp png_ptr,
png_infop info_ptr, png_timep *mod_time)); png_infop info_ptr, png_timep *mod_time));
#endif #endif
@ -2082,7 +2085,7 @@ extern PNG_EXPORT(void,png_set_tIME) PNGARG((png_structp png_ptr,
png_infop info_ptr, png_timep mod_time)); png_infop info_ptr, png_timep mod_time));
#endif #endif
#if defined(PNG_READ_tRNS_SUPPORTED) #if defined(PNG_tRNS_SUPPORTED)
extern PNG_EXPORT(png_uint_32,png_get_tRNS) PNGARG((png_structp png_ptr, extern PNG_EXPORT(png_uint_32,png_get_tRNS) PNGARG((png_structp png_ptr,
png_infop info_ptr, png_bytep *trans, int *num_trans, png_infop info_ptr, png_bytep *trans, int *num_trans,
png_color_16p *trans_values)); png_color_16p *trans_values));
@ -2097,7 +2100,7 @@ extern PNG_EXPORT(void,png_set_tRNS) PNGARG((png_structp png_ptr,
#if defined(PNG_tRNS_SUPPORTED) #if defined(PNG_tRNS_SUPPORTED)
#endif #endif
#if defined(PNG_READ_sCAL_SUPPORTED) #if defined(PNG_sCAL_SUPPORTED)
#ifdef PNG_FLOATING_POINT_SUPPORTED #ifdef PNG_FLOATING_POINT_SUPPORTED
extern PNG_EXPORT(png_uint_32,png_get_sCAL) PNGARG((png_structp png_ptr, extern PNG_EXPORT(png_uint_32,png_get_sCAL) PNGARG((png_structp png_ptr,
png_infop info_ptr, int *unit, double *width, double *height)); png_infop info_ptr, int *unit, double *width, double *height));
@ -2107,7 +2110,7 @@ extern PNG_EXPORT(png_uint_32,png_get_sCAL_s) PNGARG((png_structp png_ptr,
png_infop info_ptr, int *unit, png_charpp swidth, png_charpp sheight)); png_infop info_ptr, int *unit, png_charpp swidth, png_charpp sheight));
#endif #endif
#endif #endif
#endif /* PNG_READ_sCAL_SUPPORTED */ #endif /* PNG_sCAL_SUPPORTED */
#if defined(PNG_sCAL_SUPPORTED) #if defined(PNG_sCAL_SUPPORTED)
#ifdef PNG_FLOATING_POINT_SUPPORTED #ifdef PNG_FLOATING_POINT_SUPPORTED
@ -2118,7 +2121,7 @@ extern PNG_EXPORT(void,png_set_sCAL) PNGARG((png_structp png_ptr,
extern PNG_EXPORT(void,png_set_sCAL_s) PNGARG((png_structp png_ptr, extern PNG_EXPORT(void,png_set_sCAL_s) PNGARG((png_structp png_ptr,
png_infop info_ptr, int unit, png_charp swidth, png_charp sheight)); png_infop info_ptr, int unit, png_charp swidth, png_charp sheight));
#endif #endif
#endif /* PNG_READ_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */ #endif /* PNG_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
/* provide a list of chunks and how they are to be handled, if the built-in /* provide a list of chunks and how they are to be handled, if the built-in
@ -2229,7 +2232,7 @@ extern PNG_EXPORT(int,png_mmx_support) PNGARG((void));
/* Maintainer: Put new public prototypes here ^, in libpng.3, and project defs */ /* Maintainer: Put new public prototypes here ^, in libpng.3, and project defs */
#define PNG_HEADER_VERSION_STRING \ #define PNG_HEADER_VERSION_STRING \
" libpng version 1.0.9 - January 31, 2001 (header)\n" " libpng version 1.0.10beta1 - March 14, 2001 (header)\n"
#ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED #ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED
/* With these routines we avoid an integer divide, which will be slower on /* With these routines we avoid an integer divide, which will be slower on
@ -2443,13 +2446,13 @@ PNG_EXPORT_VAR (const png_byte FARDATA) png_zTXt[5];
* values, which is almost certainly true. * values, which is almost certainly true.
*/ */
#if defined(PNG_READ_BIG_ENDIAN_SUPPORTED) #if defined(PNG_READ_BIG_ENDIAN_SUPPORTED)
# if defined(PNG_READ_pCAL_SUPPORTED) || defined(PNG_READ_oFFs_SUPPORTED) # if defined(PNG_pCAL_SUPPORTED) || defined(PNG_oFFs_SUPPORTED)
# define png_get_int_32(buf) ( *((png_int_32p) (buf))) # define png_get_int_32(buf) ( *((png_int_32p) (buf)))
# endif # endif
# define png_get_uint_32(buf) ( *((png_uint_32p) (buf))) # define png_get_uint_32(buf) ( *((png_uint_32p) (buf)))
# define png_get_uint_16(buf) ( *((png_uint_16p) (buf))) # define png_get_uint_16(buf) ( *((png_uint_16p) (buf)))
#else #else
# if defined(PNG_READ_pCAL_SUPPORTED) || defined(PNG_READ_oFFs_SUPPORTED) # if defined(PNG_pCAL_SUPPORTED) || defined(PNG_oFFs_SUPPORTED)
PNG_EXTERN png_int_32 png_get_int_32 PNGARG((png_bytep buf)); PNG_EXTERN png_int_32 png_get_int_32 PNGARG((png_bytep buf));
# endif # endif
PNG_EXTERN png_uint_32 png_get_uint_32 PNGARG((png_bytep buf)); PNG_EXTERN png_uint_32 png_get_uint_32 PNGARG((png_bytep buf));
@ -2513,8 +2516,8 @@ PNG_EXTERN void png_crc_read PNGARG((png_structp png_ptr, png_bytep buf,
png_size_t length)); png_size_t length));
/* Decompress data in a chunk that uses compression */ /* Decompress data in a chunk that uses compression */
#if defined(PNG_READ_zTXt_SUPPORTED) || defined(PNG_READ_iTXt_SUPPORTED) || \ #if defined(PNG_zTXt_SUPPORTED) || defined(PNG_iTXt_SUPPORTED) || \
defined(PNG_READ_iCCP_SUPPORTED) || defined(PNG_READ_sPLT_SUPPORTED) defined(PNG_iCCP_SUPPORTED) || defined(PNG_sPLT_SUPPORTED)
PNG_EXTERN png_charp png_decompress_chunk PNGARG((png_structp png_ptr, PNG_EXTERN png_charp png_decompress_chunk PNGARG((png_structp png_ptr,
int comp_type, png_charp chunkdata, png_size_t chunklength, int comp_type, png_charp chunkdata, png_size_t chunklength,
png_size_t prefix_length, png_size_t *data_length)); png_size_t prefix_length, png_size_t *data_length));
@ -2709,7 +2712,7 @@ PNG_EXTERN void png_combine_row PNGARG((png_structp png_ptr, png_bytep row,
#if defined(PNG_READ_INTERLACING_SUPPORTED) #if defined(PNG_READ_INTERLACING_SUPPORTED)
/* expand an interlaced row */ /* expand an interlaced row */
/* OLD interface: /* OLD pre-1.0.9 interface:
PNG_EXTERN void png_do_read_interlace PNGARG((png_row_infop row_info, PNG_EXTERN void png_do_read_interlace PNGARG((png_row_infop row_info,
png_bytep row, int pass, png_uint_32 transformations)); png_bytep row, int pass, png_uint_32 transformations));
*/ */

View File

@ -1,6 +1,6 @@
/* pngasmrd.h - assembler version of utilities to read a PNG file /* pngasmrd.h - assembler version of utilities to read a PNG file
* *
* libpng 1.0.9 - January 31, 2001 * libpng 1.0.10beta1 - March 14, 2001
* For conditions of distribution and use, see copyright notice in png.h * For conditions of distribution and use, see copyright notice in png.h
* Copyright (c) 2001 Glenn Randers-Pehrson * Copyright (c) 2001 Glenn Randers-Pehrson
* *

View File

@ -1,6 +1,6 @@
/* pngconf.h - machine configurable file for libpng /* pngconf.h - machine configurable file for libpng
* *
* libpng 1.0.9 - January 31, 2001 * libpng 1.0.10beta1 - March 14, 2001
* For conditions of distribution and use, see copyright notice in png.h * For conditions of distribution and use, see copyright notice in png.h
* Copyright (c) 1998-2001 Glenn Randers-Pehrson * Copyright (c) 1998-2001 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
@ -33,8 +33,32 @@
# define PNG_ZBUF_SIZE 8192 # define PNG_ZBUF_SIZE 8192
#endif #endif
/* Enable if you want a write-only libpng */
#ifndef PNG_NO_READ_SUPPORTED
# define PNG_READ_SUPPORTED
#endif
/* Enable if you want a read-only libpng */
#ifndef PNG_NO_WRITE_SUPPORTED
# define PNG_WRITE_SUPPORTED
#endif
/* Enable if you need to support PNGs that are embedded in MNG
datastreams */
/*
#ifndef PNG_NO_MNG_FEATURES
# ifndef PNG_MNG_FEATURES_SUPPORTED
# define PNG_MNG_FEATURES_SUPPORTED
# endif
#endif
*/
#ifndef PNG_NO_FLOATING_POINT_SUPPORTED #ifndef PNG_NO_FLOATING_POINT_SUPPORTED
# ifndef PNG_FLOATING_POINT_SUPPORTED
# define PNG_FLOATING_POINT_SUPPORTED # define PNG_FLOATING_POINT_SUPPORTED
# endif
#endif #endif
/* If you are running on a machine where you cannot allocate more /* If you are running on a machine where you cannot allocate more
@ -367,7 +391,7 @@
* iTXt is supported. It is turned off by default, to support old apps * iTXt is supported. It is turned off by default, to support old apps
* that malloc the png_text structure instead of calling png_set_text() * that malloc the png_text structure instead of calling png_set_text()
* and letting libpng malloc it. It will be turned on by default in * and letting libpng malloc it. It will be turned on by default in
* libpng-2.0.0. * libpng-1.3.0.
*/ */
#ifndef PNG_iTXt_SUPPORTED #ifndef PNG_iTXt_SUPPORTED
@ -418,14 +442,12 @@
# define PNG_FREE_ME_SUPPORTED # define PNG_FREE_ME_SUPPORTED
#endif #endif
#if defined(PNG_READ_SUPPORTED)
#if !defined(PNG_READ_TRANSFORMS_NOT_SUPPORTED) && \ #if !defined(PNG_READ_TRANSFORMS_NOT_SUPPORTED) && \
!defined(PNG_NO_READ_TRANSFORMS) !defined(PNG_NO_READ_TRANSFORMS)
# define PNG_READ_TRANSFORMS_SUPPORTED # define PNG_READ_TRANSFORMS_SUPPORTED
#endif #endif
#if !defined(PNG_WRITE_TRANSFORMS_NOT_SUPPORTED) && \
!defined(PNG_NO_WRITE_TRANSFORMS)
# define PNG_WRITE_TRANSFORMS_SUPPORTED
#endif
#ifdef PNG_READ_TRANSFORMS_SUPPORTED #ifdef PNG_READ_TRANSFORMS_SUPPORTED
# ifndef PNG_NO_READ_EXPAND # ifndef PNG_NO_READ_EXPAND
@ -498,19 +520,21 @@
# endif # endif
#endif #endif
/* Enable if you need to support PNGs that are embedded in MNG /* Deprecated, will be removed from version 2.0.0.
datastreams */ Use PNG_MNG_FEATURES_SUPPORTED instead. */
/*
#ifndef PNG_NO_MNG_FEATURES
# define PNG_MNG_FEATURES_SUPPORTED
#endif
*/
/* Deprecated, will be removed from version 2.0.0 */
#ifndef PNG_NO_READ_EMPTY_PLTE #ifndef PNG_NO_READ_EMPTY_PLTE
# define PNG_READ_EMPTY_PLTE_SUPPORTED # define PNG_READ_EMPTY_PLTE_SUPPORTED
#endif #endif
#endif /* PNG_READ_SUPPORTED */
#if defined(PNG_WRITE_SUPPORTED)
# if !defined(PNG_WRITE_TRANSFORMS_NOT_SUPPORTED) && \
!defined(PNG_NO_WRITE_TRANSFORMS)
# define PNG_WRITE_TRANSFORMS_SUPPORTED
#endif
#ifdef PNG_WRITE_TRANSFORMS_SUPPORTED #ifdef PNG_WRITE_TRANSFORMS_SUPPORTED
# ifndef PNG_NO_WRITE_SHIFT # ifndef PNG_NO_WRITE_SHIFT
# define PNG_WRITE_SHIFT_SUPPORTED # define PNG_WRITE_SHIFT_SUPPORTED
@ -569,6 +593,8 @@
# define PNG_WRITE_EMPTY_PLTE_SUPPORTED # define PNG_WRITE_EMPTY_PLTE_SUPPORTED
#endif #endif
#endif /* PNG_WRITE_SUPPORTED */
#ifndef PNG_NO_STDIO #ifndef PNG_NO_STDIO
# define PNG_TIME_RFC1123_SUPPORTED # define PNG_TIME_RFC1123_SUPPORTED
#endif #endif
@ -595,18 +621,26 @@
/* PNG_ASSEMBLER_CODE will be enabled by default in version 1.2.0 /* PNG_ASSEMBLER_CODE will be enabled by default in version 1.2.0
even when PNG_USE_PNGVCRD or PNG_USE_PNGGCCRD is not defined */ even when PNG_USE_PNGVCRD or PNG_USE_PNGGCCRD is not defined */
#ifndef PNG_NO_ASSEMBLER_CODE #if defined(PNG_READ_SUPPORTED) && !defined(PNG_NO_ASSEMBLER_CODE)
# if defined(PNG_USE_PNGVCRD) || defined(PNG_USE_PNGGCCRD) # if defined(PNG_USE_PNGVCRD) || defined(PNG_USE_PNGGCCRD)
# ifndef PNG_ASSEMBLER_CODE_SUPPORTED
# define PNG_ASSEMBLER_CODE_SUPPORTED # define PNG_ASSEMBLER_CODE_SUPPORTED
# endif
# if !defined(PNG_MMX_CODE_SUPPORTED) && !defined(PNG_NO_MMX_CODE)
# define PNG_MMX_CODE_SUPPORTED # define PNG_MMX_CODE_SUPPORTED
# endif # endif
# endif
#endif #endif
/* These are currently experimental features, define them if you want */ /* These are currently experimental features, define them if you want */
/* very little testing */ /* very little testing */
/* /*
#define PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED #ifdef PNG_READ_SUPPORTED
# ifndef PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
# define PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
# endif
#endif
#ifndef PNG_NO_USER_MEM #ifndef PNG_NO_USER_MEM
# define PNG_USER_MEM_SUPPORTED # define PNG_USER_MEM_SUPPORTED
#endif #endif
@ -618,7 +652,11 @@
/* This is only for PowerPC big-endian and 680x0 systems */ /* This is only for PowerPC big-endian and 680x0 systems */
/* some testing */ /* some testing */
/* /*
#define PNG_READ_BIG_ENDIAN_SUPPORTED #ifdef PNG_READ_SUPPORTED
# ifndef PNG_PNG_READ_BIG_ENDIAN_SUPPORTED
# define PNG_READ_BIG_ENDIAN_SUPPORTED
# endif
#endif
*/ */
/* Buggy compilers (e.g., gcc 2.7.2.2) need this */ /* Buggy compilers (e.g., gcc 2.7.2.2) need this */
@ -638,11 +676,14 @@
* a bit smaller. * a bit smaller.
*/ */
#if !defined(PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \ #if defined(PNG_READ_SUPPORTED) && \
!defined(PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \
!defined(PNG_NO_READ_ANCILLARY_CHUNKS) !defined(PNG_NO_READ_ANCILLARY_CHUNKS)
# define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED # define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED
#endif #endif
#if !defined(PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \
#if defined(PNG_WRITE_SUPPORTED) && \
!defined(PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \
!defined(PNG_NO_WRITE_ANCILLARY_CHUNKS) !defined(PNG_NO_WRITE_ANCILLARY_CHUNKS)
# define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED # define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED
#endif #endif
@ -1221,8 +1262,9 @@ typedef z_stream FAR * png_zstreamp;
# define PNG_ZBUF_SIZE 65536 # define PNG_ZBUF_SIZE 65536
#endif #endif
#ifdef PNG_READ_SUPPORTED
/* Prior to libpng-1.0.9, this block was in pngasmrd.h */ /* Prior to libpng-1.0.9, this block was in pngasmrd.h */
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) && defined(PNG_INTERNAL) #if defined(PNG_INTERNAL)
/* These are the default thresholds before the MMX code kicks in; if either /* These are the default thresholds before the MMX code kicks in; if either
* rowbytes or bitdepth is below the threshold, plain C code is used. These * rowbytes or bitdepth is below the threshold, plain C code is used. These
@ -1258,7 +1300,8 @@ typedef z_stream FAR * png_zstreamp;
#endif #endif
/* - see pnggccrd.c for info about what is currently enabled */ /* - see pnggccrd.c for info about what is currently enabled */
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */ #endif /* PNG_INTERNAL */
#endif /* PNG_READ_SUPPORTED */
#endif /* PNGCONF_H */ #endif /* PNGCONF_H */

View File

@ -1,7 +1,7 @@
/* pngerror.c - stub functions for i/o and memory allocation /* pngerror.c - stub functions for i/o and memory allocation
* *
* libpng 1.0.9 - January 31, 2001 * libpng 1.0.10beta1 - March 14, 2001
* For conditions of distribution and use, see copyright notice in png.h * For conditions of distribution and use, see copyright notice in png.h
* Copyright (c) 1998-2001 Glenn Randers-Pehrson * Copyright (c) 1998-2001 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
@ -107,7 +107,7 @@ png_chunk_error(png_structp png_ptr, png_const_charp message)
void PNGAPI void PNGAPI
png_chunk_warning(png_structp png_ptr, png_const_charp message) png_chunk_warning(png_structp png_ptr, png_const_charp message)
{ {
char msg[16+64]; char msg[18+64];
png_format_buffer(png_ptr, msg, message); png_format_buffer(png_ptr, msg, message);
png_warning(png_ptr, msg); png_warning(png_ptr, msg);
} }

View File

@ -6,7 +6,7 @@
* and http://www.intel.com/drg/pentiumII/appnotes/923/923.htm * and http://www.intel.com/drg/pentiumII/appnotes/923/923.htm
* for Intel's performance analysis of the MMX vs. non-MMX code. * for Intel's performance analysis of the MMX vs. non-MMX code.
* *
* libpng 1.0.9 - January 31, 2001 * libpng version 1.0.10beta1 - March 14, 2001
* For conditions of distribution and use, see copyright notice in png.h * For conditions of distribution and use, see copyright notice in png.h
* Copyright (c) 1998-2001 Glenn Randers-Pehrson * Copyright (c) 1998-2001 Glenn Randers-Pehrson
* Copyright (c) 1998, Intel Corporation * Copyright (c) 1998, Intel Corporation
@ -95,11 +95,11 @@
* variables, not the other way around. Hence _const4, _mask8_0, etc. * variables, not the other way around. Hence _const4, _mask8_0, etc.
* *
* 19991024: * 19991024:
* - fixed mmxsupport()/png_do_interlace() first-row bug * - fixed mmxsupport()/png_do_read_interlace() first-row bug
* This one was severely weird: even though mmxsupport() doesn't touch * This one was severely weird: even though mmxsupport() doesn't touch
* ebx (where "row" pointer was stored), it nevertheless managed to zero * ebx (where "row" pointer was stored), it nevertheless managed to zero
* the register (even in static/non-fPIC code--see below), which in turn * the register (even in static/non-fPIC code--see below), which in turn
* caused png_do_interlace() to return prematurely on the first row of * caused png_do_read_interlace() to return prematurely on the first row of
* interlaced images (i.e., without expanding the interlaced pixels). * interlaced images (i.e., without expanding the interlaced pixels).
* Inspection of the generated assembly code didn't turn up any clues, * Inspection of the generated assembly code didn't turn up any clues,
* although it did point at a minor optimization (i.e., get rid of * although it did point at a minor optimization (i.e., get rid of
@ -212,6 +212,9 @@
* within MMX version of png_read_filter_row()) so no longer necessary to * within MMX version of png_read_filter_row()) so no longer necessary to
* compile it into pngrutil.o * compile it into pngrutil.o
* *
* 20010310:
* - fixed buffer-overrun bug in png_combine_row() C code (non-MMX)
*
* STILL TO DO: * STILL TO DO:
* - test png_do_read_interlace() 64-bit case (pixel_bytes == 8) * - test png_do_read_interlace() 64-bit case (pixel_bytes == 8)
* - write MMX code for 48-bit case (pixel_bytes == 6) * - write MMX code for 48-bit case (pixel_bytes == 6)
@ -226,12 +229,18 @@
* - add support for runtime enable/disable/query of various MMX routines * - add support for runtime enable/disable/query of various MMX routines
*/ */
//#define PNG_DEBUG 2 // GRR /*
#ifndef PNG_DEBUG
# define PNG_DEBUG 0
#endif
*/
#define PNG_INTERNAL #define PNG_INTERNAL
#include "png.h" #include "png.h"
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) && defined(PNG_USE_PNGGCCRD) #if defined(PNG_USE_PNGGCCRD)
int PNGAPI png_mmx_support(void);
#ifdef PNG_USE_LOCAL_ARRAYS #ifdef PNG_USE_LOCAL_ARRAYS
static const int FARDATA png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0}; static const int FARDATA png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
@ -239,8 +248,9 @@ static const int FARDATA png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
static const int FARDATA png_pass_width[7] = {8, 4, 4, 2, 2, 1, 1}; static const int FARDATA png_pass_width[7] = {8, 4, 4, 2, 2, 1, 1};
#endif #endif
// djgpp, Win32, and Cygwin add their own underscores to global variables, #if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
// so define them without: /* djgpp, Win32, and Cygwin add their own underscores to global variables,
* so define them without: */
#if defined(__DJGPP__) || defined(WIN32) || defined(__CYGWIN__) #if defined(__DJGPP__) || defined(WIN32) || defined(__CYGWIN__)
# define _mmx_supported mmx_supported # define _mmx_supported mmx_supported
# define _unmask unmask # define _unmask unmask
@ -277,7 +287,6 @@ static const int FARDATA png_pass_width[7] = {8, 4, 4, 2, 2, 1, 1};
# define _pctemp pctemp # define _pctemp pctemp
#endif #endif
static int _mmx_supported = 2;
/* These constants are used in the inlined MMX assembly code. /* These constants are used in the inlined MMX assembly code.
Ignore gcc's "At top level: defined but not used" warnings. */ Ignore gcc's "At top level: defined but not used" warnings. */
@ -324,18 +333,24 @@ static int _dif;
static int _patemp; // temp variables for Paeth routine static int _patemp; // temp variables for Paeth routine
static int _pbtemp; static int _pbtemp;
static int _pctemp; static int _pctemp;
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
static int _mmx_supported = 2;
/*===========================================================================*/
/* */
//===========================================================================// /* P N G _ C O M B I N E _ R O W */
// // /* */
// P N G _ C O M B I N E _ R O W // /*===========================================================================*/
// //
//===========================================================================//
#if defined(PNG_HAVE_ASSEMBLER_COMBINE_ROW) #if defined(PNG_HAVE_ASSEMBLER_COMBINE_ROW)
#define BPP2 2
#define BPP3 3 /* bytes per pixel (a.k.a. pixel_bytes) */
#define BPP4 4
#define BPP6 6 /* (defined only to help avoid cut-and-paste errors) */
#define BPP8 8
/* Combines the row recently read in with the previous row. /* Combines the row recently read in with the previous row.
This routine takes care of alpha and transparency if requested. This routine takes care of alpha and transparency if requested.
This routine also handles the two methods of progressive display This routine also handles the two methods of progressive display
@ -353,7 +368,7 @@ static int _pctemp;
void /* PRIVATE */ void /* PRIVATE */
png_combine_row(png_structp png_ptr, png_bytep row, int mask) png_combine_row(png_structp png_ptr, png_bytep row, int mask)
{ {
png_debug(1,"in png_combine_row_asm\n"); png_debug(1, "in png_combine_row (pnggccrd.c)\n");
if (_mmx_supported == 2) { if (_mmx_supported == 2) {
png_mmx_support(); png_mmx_support();
@ -361,15 +376,15 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
if (mask == 0xff) if (mask == 0xff)
{ {
png_debug(2,"mask == 0xff: doing single png_memcpy()\n");
png_memcpy(row, png_ptr->row_buf + 1, png_memcpy(row, png_ptr->row_buf + 1,
(png_size_t)((png_ptr->width * png_ptr->row_info.pixel_depth + 7) >> 3)); (png_size_t)((png_ptr->width * png_ptr->row_info.pixel_depth + 7) >> 3));
} }
/* GRR: png_combine_row() never called with mask == 0 */ else /* (png_combine_row() is never called with mask == 0) */
else
{ {
switch (png_ptr->row_info.pixel_depth) switch (png_ptr->row_info.pixel_depth)
{ {
case 1: // png_ptr->row_info.pixel_depth case 1: /* png_ptr->row_info.pixel_depth */
{ {
png_bytep sp; png_bytep sp;
png_bytep dp; png_bytep dp;
@ -426,7 +441,7 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
break; break;
} }
case 2: // png_ptr->row_info.pixel_depth case 2: /* png_ptr->row_info.pixel_depth */
{ {
png_bytep sp; png_bytep sp;
png_bytep dp; png_bytep dp;
@ -481,7 +496,7 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
break; break;
} }
case 4: // png_ptr->row_info.pixel_depth case 4: /* png_ptr->row_info.pixel_depth */
{ {
png_bytep sp; png_bytep sp;
png_bytep dp; png_bytep dp;
@ -535,11 +550,12 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
break; break;
} }
case 8: // png_ptr->row_info.pixel_depth case 8: /* png_ptr->row_info.pixel_depth */
{ {
png_bytep srcptr; png_bytep srcptr;
png_bytep dstptr; png_bytep dstptr;
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
if ( _mmx_supported ) if ( _mmx_supported )
{ {
png_uint_32 len; png_uint_32 len;
@ -553,7 +569,7 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
srcptr = png_ptr->row_buf + 1; srcptr = png_ptr->row_buf + 1;
dstptr = row; dstptr = row;
len = png_ptr->width &~7; // reduce to multiple of 8 len = png_ptr->width &~7; // reduce to multiple of 8
diff = png_ptr->width & 7; // amount lost diff = (int) (png_ptr->width & 7); // amount lost
__asm__ __volatile__ ( __asm__ __volatile__ (
"movd _unmask, %%mm7 \n\t" // load bit pattern "movd _unmask, %%mm7 \n\t" // load bit pattern
@ -627,15 +643,18 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
); );
} }
else /* mmx _not supported - Use modified C routine */ else /* mmx _not supported - Use modified C routine */
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
{ {
register png_uint_32 i; register png_uint_32 i;
png_uint_32 initial_val = png_pass_start[png_ptr->pass]; png_uint_32 initial_val = png_pass_start[png_ptr->pass];
// png.c: png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; /* png.c: png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; */
register int stride = png_pass_inc[png_ptr->pass]; register int stride = png_pass_inc[png_ptr->pass];
// png.c: png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; /* png.c: png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; */
register int rep_bytes = png_pass_width[png_ptr->pass]; register int rep_bytes = png_pass_width[png_ptr->pass];
// png.c: png_pass_width[] = {8, 4, 4, 2, 2, 1, 1}; /* png.c: png_pass_width[] = {8, 4, 4, 2, 2, 1, 1}; */
register png_uint_32 final_val = png_ptr->width; png_uint_32 len = png_ptr->width &~7; /* reduce to mult. of 8 */
int diff = (int) (png_ptr->width & 7); /* amount lost */
register png_uint_32 final_val = len; /* GRR bugfix */
srcptr = png_ptr->row_buf + 1 + initial_val; srcptr = png_ptr->row_buf + 1 + initial_val;
dstptr = row + initial_val; dstptr = row + initial_val;
@ -646,16 +665,30 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
srcptr += stride; srcptr += stride;
dstptr += stride; dstptr += stride;
} }
} /* end of else */ if (diff) /* number of leftover pixels: 3 for pngtest */
{
final_val+=diff /* *BPP1 */ ;
for (; i < final_val; i += stride)
{
if (rep_bytes > (int)(final_val-i))
rep_bytes = (int)(final_val-i);
png_memcpy(dstptr, srcptr, rep_bytes);
srcptr += stride;
dstptr += stride;
}
}
} /* end of else (_mmx_supported) */
break; break;
} // end 8 bpp } /* end 8 bpp */
case 16: // png_ptr->row_info.pixel_depth case 16: /* png_ptr->row_info.pixel_depth */
{ {
png_bytep srcptr; png_bytep srcptr;
png_bytep dstptr; png_bytep dstptr;
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
if ( _mmx_supported ) if ( _mmx_supported )
{ {
png_uint_32 len; png_uint_32 len;
@ -669,7 +702,7 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
srcptr = png_ptr->row_buf + 1; srcptr = png_ptr->row_buf + 1;
dstptr = row; dstptr = row;
len = png_ptr->width &~7; // reduce to multiple of 8 len = png_ptr->width &~7; // reduce to multiple of 8
diff = png_ptr->width & 7; // amount lost diff = (int) (png_ptr->width & 7); // amount lost //
__asm__ __volatile__ ( __asm__ __volatile__ (
"movd _unmask, %%mm7 \n\t" // load bit pattern "movd _unmask, %%mm7 \n\t" // load bit pattern
@ -759,15 +792,18 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
); );
} }
else /* mmx _not supported - Use modified C routine */ else /* mmx _not supported - Use modified C routine */
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
{ {
register png_uint_32 i; register png_uint_32 i;
png_uint_32 initial_val = 2 * png_pass_start[png_ptr->pass]; png_uint_32 initial_val = BPP2 * png_pass_start[png_ptr->pass];
// png.c: png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; /* png.c: png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; */
register int stride = 2 * png_pass_inc[png_ptr->pass]; register int stride = BPP2 * png_pass_inc[png_ptr->pass];
// png.c: png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; /* png.c: png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; */
register int rep_bytes = 2 * png_pass_width[png_ptr->pass]; register int rep_bytes = BPP2 * png_pass_width[png_ptr->pass];
// png.c: png_pass_width[] = {8, 4, 4, 2, 2, 1, 1}; /* png.c: png_pass_width[] = {8, 4, 4, 2, 2, 1, 1}; */
register png_uint_32 final_val = 2 * png_ptr->width; png_uint_32 len = png_ptr->width &~7; /* reduce to mult. of 8 */
int diff = (int) (png_ptr->width & 7); /* amount lost */
register png_uint_32 final_val = BPP2 * len; /* GRR bugfix */
srcptr = png_ptr->row_buf + 1 + initial_val; srcptr = png_ptr->row_buf + 1 + initial_val;
dstptr = row + initial_val; dstptr = row + initial_val;
@ -778,16 +814,29 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
srcptr += stride; srcptr += stride;
dstptr += stride; dstptr += stride;
} }
} /* end of else */ if (diff) /* number of leftover pixels: 3 for pngtest */
{
final_val+=diff*BPP2;
for (; i < final_val; i += stride)
{
if (rep_bytes > (int)(final_val-i))
rep_bytes = (int)(final_val-i);
png_memcpy(dstptr, srcptr, rep_bytes);
srcptr += stride;
dstptr += stride;
}
}
} /* end of else (_mmx_supported) */
break; break;
} // end 16 bpp } /* end 16 bpp */
case 24: // png_ptr->row_info.pixel_depth case 24: /* png_ptr->row_info.pixel_depth */
{ {
png_bytep srcptr; png_bytep srcptr;
png_bytep dstptr; png_bytep dstptr;
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
if ( _mmx_supported ) if ( _mmx_supported )
{ {
png_uint_32 len; png_uint_32 len;
@ -801,7 +850,7 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
srcptr = png_ptr->row_buf + 1; srcptr = png_ptr->row_buf + 1;
dstptr = row; dstptr = row;
len = png_ptr->width &~7; // reduce to multiple of 8 len = png_ptr->width &~7; // reduce to multiple of 8
diff = png_ptr->width & 7; // amount lost diff = (int) (png_ptr->width & 7); // amount lost //
__asm__ __volatile__ ( __asm__ __volatile__ (
"movd _unmask, %%mm7 \n\t" // load bit pattern "movd _unmask, %%mm7 \n\t" // load bit pattern
@ -906,15 +955,18 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
); );
} }
else /* mmx _not supported - Use modified C routine */ else /* mmx _not supported - Use modified C routine */
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
{ {
register png_uint_32 i; register png_uint_32 i;
png_uint_32 initial_val = 3 * png_pass_start[png_ptr->pass]; png_uint_32 initial_val = BPP3 * png_pass_start[png_ptr->pass];
// png.c: png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; /* png.c: png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; */
register int stride = 3 * png_pass_inc[png_ptr->pass]; register int stride = BPP3 * png_pass_inc[png_ptr->pass];
// png.c: png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; /* png.c: png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; */
register int rep_bytes = 3 * png_pass_width[png_ptr->pass]; register int rep_bytes = BPP3 * png_pass_width[png_ptr->pass];
// png.c: png_pass_width[] = {8, 4, 4, 2, 2, 1, 1}; /* png.c: png_pass_width[] = {8, 4, 4, 2, 2, 1, 1}; */
register png_uint_32 final_val = 3 * png_ptr->width; png_uint_32 len = png_ptr->width &~7; /* reduce to mult. of 8 */
int diff = (int) (png_ptr->width & 7); /* amount lost */
register png_uint_32 final_val = BPP3 * len; /* GRR bugfix */
srcptr = png_ptr->row_buf + 1 + initial_val; srcptr = png_ptr->row_buf + 1 + initial_val;
dstptr = row + initial_val; dstptr = row + initial_val;
@ -925,16 +977,29 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
srcptr += stride; srcptr += stride;
dstptr += stride; dstptr += stride;
} }
} /* end of else */ if (diff) /* number of leftover pixels: 3 for pngtest */
{
final_val+=diff*BPP3;
for (; i < final_val; i += stride)
{
if (rep_bytes > (int)(final_val-i))
rep_bytes = (int)(final_val-i);
png_memcpy(dstptr, srcptr, rep_bytes);
srcptr += stride;
dstptr += stride;
}
}
} /* end of else (_mmx_supported) */
break; break;
} // end 24 bpp } /* end 24 bpp */
case 32: // png_ptr->row_info.pixel_depth case 32: /* png_ptr->row_info.pixel_depth */
{ {
png_bytep srcptr; png_bytep srcptr;
png_bytep dstptr; png_bytep dstptr;
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
if ( _mmx_supported ) if ( _mmx_supported )
{ {
png_uint_32 len; png_uint_32 len;
@ -948,7 +1013,7 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
srcptr = png_ptr->row_buf + 1; srcptr = png_ptr->row_buf + 1;
dstptr = row; dstptr = row;
len = png_ptr->width &~7; // reduce to multiple of 8 len = png_ptr->width &~7; // reduce to multiple of 8
diff = png_ptr->width & 7; // amount lost diff = (int) (png_ptr->width & 7); // amount lost //
__asm__ __volatile__ ( __asm__ __volatile__ (
"movd _unmask, %%mm7 \n\t" // load bit pattern "movd _unmask, %%mm7 \n\t" // load bit pattern
@ -1060,15 +1125,18 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
); );
} }
else /* mmx _not supported - Use modified C routine */ else /* mmx _not supported - Use modified C routine */
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
{ {
register png_uint_32 i; register png_uint_32 i;
png_uint_32 initial_val = 4 * png_pass_start[png_ptr->pass]; png_uint_32 initial_val = BPP4 * png_pass_start[png_ptr->pass];
// png.c: png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; /* png.c: png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; */
register int stride = 4 * png_pass_inc[png_ptr->pass]; register int stride = BPP4 * png_pass_inc[png_ptr->pass];
// png.c: png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; /* png.c: png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; */
register int rep_bytes = 4 * png_pass_width[png_ptr->pass]; register int rep_bytes = BPP4 * png_pass_width[png_ptr->pass];
// png.c: png_pass_width[] = {8, 4, 4, 2, 2, 1, 1}; /* png.c: png_pass_width[] = {8, 4, 4, 2, 2, 1, 1}; */
register png_uint_32 final_val = 4 * png_ptr->width; png_uint_32 len = png_ptr->width &~7; /* reduce to mult. of 8 */
int diff = (int) (png_ptr->width & 7); /* amount lost */
register png_uint_32 final_val = BPP4 * len; /* GRR bugfix */
srcptr = png_ptr->row_buf + 1 + initial_val; srcptr = png_ptr->row_buf + 1 + initial_val;
dstptr = row + initial_val; dstptr = row + initial_val;
@ -1079,16 +1147,29 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
srcptr += stride; srcptr += stride;
dstptr += stride; dstptr += stride;
} }
} /* end of else */ if (diff) /* number of leftover pixels: 3 for pngtest */
{
final_val+=diff*BPP4;
for (; i < final_val; i += stride)
{
if (rep_bytes > (int)(final_val-i))
rep_bytes = (int)(final_val-i);
png_memcpy(dstptr, srcptr, rep_bytes);
srcptr += stride;
dstptr += stride;
}
}
} /* end of else (_mmx_supported) */
break; break;
} // end 32 bpp } /* end 32 bpp */
case 48: // png_ptr->row_info.pixel_depth case 48: /* png_ptr->row_info.pixel_depth */
{ {
png_bytep srcptr; png_bytep srcptr;
png_bytep dstptr; png_bytep dstptr;
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
if ( _mmx_supported ) if ( _mmx_supported )
{ {
png_uint_32 len; png_uint_32 len;
@ -1102,7 +1183,7 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
srcptr = png_ptr->row_buf + 1; srcptr = png_ptr->row_buf + 1;
dstptr = row; dstptr = row;
len = png_ptr->width &~7; // reduce to multiple of 8 len = png_ptr->width &~7; // reduce to multiple of 8
diff = png_ptr->width & 7; // amount lost diff = (int) (png_ptr->width & 7); // amount lost //
__asm__ __volatile__ ( __asm__ __volatile__ (
"movd _unmask, %%mm7 \n\t" // load bit pattern "movd _unmask, %%mm7 \n\t" // load bit pattern
@ -1231,15 +1312,18 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
); );
} }
else /* mmx _not supported - Use modified C routine */ else /* mmx _not supported - Use modified C routine */
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
{ {
register png_uint_32 i; register png_uint_32 i;
png_uint_32 initial_val = 6 * png_pass_start[png_ptr->pass]; png_uint_32 initial_val = BPP6 * png_pass_start[png_ptr->pass];
// png.c: png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; /* png.c: png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; */
register int stride = 6 * png_pass_inc[png_ptr->pass]; register int stride = BPP6 * png_pass_inc[png_ptr->pass];
// png.c: png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; /* png.c: png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; */
register int rep_bytes = 6 * png_pass_width[png_ptr->pass]; register int rep_bytes = BPP6 * png_pass_width[png_ptr->pass];
// png.c: png_pass_width[] = {8, 4, 4, 2, 2, 1, 1}; /* png.c: png_pass_width[] = {8, 4, 4, 2, 2, 1, 1}; */
register png_uint_32 final_val = 6 * png_ptr->width; png_uint_32 len = png_ptr->width &~7; /* reduce to mult. of 8 */
int diff = (int) (png_ptr->width & 7); /* amount lost */
register png_uint_32 final_val = BPP6 * len; /* GRR bugfix */
srcptr = png_ptr->row_buf + 1 + initial_val; srcptr = png_ptr->row_buf + 1 + initial_val;
dstptr = row + initial_val; dstptr = row + initial_val;
@ -1250,23 +1334,37 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
srcptr += stride; srcptr += stride;
dstptr += stride; dstptr += stride;
} }
} /* end of else */ if (diff) /* number of leftover pixels: 3 for pngtest */
{
final_val+=diff*BPP6;
for (; i < final_val; i += stride)
{
if (rep_bytes > (int)(final_val-i))
rep_bytes = (int)(final_val-i);
png_memcpy(dstptr, srcptr, rep_bytes);
srcptr += stride;
dstptr += stride;
}
}
} /* end of else (_mmx_supported) */
break; break;
} // end 48 bpp } /* end 48 bpp */
case 64: // png_ptr->row_info.pixel_depth case 64: /* png_ptr->row_info.pixel_depth */
{ {
png_bytep srcptr; png_bytep srcptr;
png_bytep dstptr; png_bytep dstptr;
register png_uint_32 i; register png_uint_32 i;
png_uint_32 initial_val = 8 * png_pass_start[png_ptr->pass]; png_uint_32 initial_val = BPP8 * png_pass_start[png_ptr->pass];
// png.c: png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; /* png.c: png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; */
register int stride = 8 * png_pass_inc[png_ptr->pass]; register int stride = BPP8 * png_pass_inc[png_ptr->pass];
// png.c: png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; /* png.c: png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; */
register int rep_bytes = 8 * png_pass_width[png_ptr->pass]; register int rep_bytes = BPP8 * png_pass_width[png_ptr->pass];
// png.c: png_pass_width[] = {8, 4, 4, 2, 2, 1, 1}; /* png.c: png_pass_width[] = {8, 4, 4, 2, 2, 1, 1}; */
register png_uint_32 final_val = 8 * png_ptr->width; png_uint_32 len = png_ptr->width &~7; /* reduce to mult. of 8 */
int diff = (int) (png_ptr->width & 7); /* amount lost */
register png_uint_32 final_val = BPP8 * len; /* GRR bugfix */
srcptr = png_ptr->row_buf + 1 + initial_val; srcptr = png_ptr->row_buf + 1 + initial_val;
dstptr = row + initial_val; dstptr = row + initial_val;
@ -1277,12 +1375,25 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
srcptr += stride; srcptr += stride;
dstptr += stride; dstptr += stride;
} }
break; if (diff) /* number of leftover pixels: 3 for pngtest */
} // end 64 bpp
default: // png_ptr->row_info.pixel_depth != 1,2,4,8,16,24,32,48,64
{ {
// this should never happen final_val+=diff*BPP8;
for (; i < final_val; i += stride)
{
if (rep_bytes > (int)(final_val-i))
rep_bytes = (int)(final_val-i);
png_memcpy(dstptr, srcptr, rep_bytes);
srcptr += stride;
dstptr += stride;
}
}
break;
} /* end 64 bpp */
default: /* png_ptr->row_info.pixel_depth != 1,2,4,8,16,24,32,48,64 */
{
/* this should never happen */
fprintf(stderr, fprintf(stderr,
"libpng internal error: png_ptr->row_info.pixel_depth = %d\n", "libpng internal error: png_ptr->row_info.pixel_depth = %d\n",
png_ptr->row_info.pixel_depth); png_ptr->row_info.pixel_depth);
@ -1300,11 +1411,11 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
//===========================================================================// /*===========================================================================*/
// // /* */
// P N G _ D O _ R E A D _ I N T E R L A C E // /* P N G _ D O _ R E A D _ I N T E R L A C E */
// // /* */
//===========================================================================// /*===========================================================================*/
#if defined(PNG_READ_INTERLACING_SUPPORTED) #if defined(PNG_READ_INTERLACING_SUPPORTED)
#if defined(PNG_HAVE_ASSEMBLER_READ_INTERLACE) #if defined(PNG_HAVE_ASSEMBLER_READ_INTERLACE)
@ -1319,9 +1430,11 @@ png_do_read_interlace(png_structp png_ptr)
png_row_infop row_info = &(png_ptr->row_info); png_row_infop row_info = &(png_ptr->row_info);
png_bytep row = png_ptr->row_buf + 1; png_bytep row = png_ptr->row_buf + 1;
int pass = png_ptr->pass; int pass = png_ptr->pass;
#if defined(PNG_READ_PACKSWAP_SUPPORTED)
png_uint_32 transformations = png_ptr->transformations; png_uint_32 transformations = png_ptr->transformations;
#endif
png_debug(1,"in png_do_read_interlace\n"); png_debug(1, "in png_do_read_interlace (pnggccrd.c)\n");
if (_mmx_supported == 2) { if (_mmx_supported == 2) {
png_mmx_support(); png_mmx_support();
@ -1505,29 +1618,32 @@ png_do_read_interlace(png_structp png_ptr)
break; break;
} }
//==================================================================== /*====================================================================*/
default: // 8-bit or larger (this is where the routine is modified) default: /* 8-bit or larger (this is where the routine is modified) */
{ {
#if 0
// static unsigned long long _const4 = 0x0000000000FFFFFFLL; no good // static unsigned long long _const4 = 0x0000000000FFFFFFLL; no good
// static unsigned long long const4 = 0x0000000000FFFFFFLL; no good // static unsigned long long const4 = 0x0000000000FFFFFFLL; no good
// unsigned long long _const4 = 0x0000000000FFFFFFLL; no good // unsigned long long _const4 = 0x0000000000FFFFFFLL; no good
// unsigned long long const4 = 0x0000000000FFFFFFLL; no good // unsigned long long const4 = 0x0000000000FFFFFFLL; no good
#endif
png_bytep sptr, dp; png_bytep sptr, dp;
png_uint_32 i; png_uint_32 i;
png_size_t pixel_bytes; png_size_t pixel_bytes;
int width = row_info->width; int width = (int)row_info->width;
pixel_bytes = (row_info->pixel_depth >> 3); pixel_bytes = (row_info->pixel_depth >> 3);
// point sptr at the last pixel in the pre-expanded row: /* point sptr at the last pixel in the pre-expanded row: */
sptr = row + (width - 1) * pixel_bytes; sptr = row + (width - 1) * pixel_bytes;
// point dp at the last pixel position in the expanded row: /* point dp at the last pixel position in the expanded row: */
dp = row + (final_width - 1) * pixel_bytes; dp = row + (final_width - 1) * pixel_bytes;
// New code by Nirav Chhatrapati - Intel Corporation /* New code by Nirav Chhatrapati - Intel Corporation */
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
if ( _mmx_supported ) if ( _mmx_supported )
{ {
//-------------------------------------------------------------- //--------------------------------------------------------------
@ -1779,7 +1895,9 @@ png_do_read_interlace(png_structp png_ptr)
*/ */
for (j = 0; j < png_pass_inc[pass]; j++) for (j = 0; j < png_pass_inc[pass]; j++)
{
*dp-- = *sptr; *dp-- = *sptr;
}
--sptr; --sptr;
} }
} }
@ -1832,7 +1950,9 @@ png_do_read_interlace(png_structp png_ptr)
int j; int j;
for (j = 0; j < png_pass_inc[pass]; j++) for (j = 0; j < png_pass_inc[pass]; j++)
{
*dp-- = *sptr; *dp-- = *sptr;
}
--sptr; --sptr;
} }
} }
@ -1884,7 +2004,9 @@ png_do_read_interlace(png_structp png_ptr)
int j; int j;
for (j = 0; j < png_pass_inc[pass]; j++) for (j = 0; j < png_pass_inc[pass]; j++)
{
*dp-- = *sptr; *dp-- = *sptr;
}
--sptr; --sptr;
} }
} }
@ -2413,6 +2535,7 @@ png_do_read_interlace(png_structp png_ptr)
/* GRR 19991007: does it? or should pixel_bytes in each /* GRR 19991007: does it? or should pixel_bytes in each
* block be replaced with immediate value (e.g., 1)? */ * block be replaced with immediate value (e.g., 1)? */
/* GRR 19991017: replaced with constants in each case */ /* GRR 19991017: replaced with constants in each case */
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
{ {
if (pixel_bytes == 1) if (pixel_bytes == 1)
{ {
@ -2420,7 +2543,9 @@ png_do_read_interlace(png_structp png_ptr)
{ {
int j; int j;
for (j = 0; j < png_pass_inc[pass]; j++) for (j = 0; j < png_pass_inc[pass]; j++)
{
*dp-- = *sptr; *dp-- = *sptr;
}
--sptr; --sptr;
} }
} }
@ -2463,6 +2588,14 @@ png_do_read_interlace(png_structp png_ptr)
png_memcpy(v, sptr, 4); png_memcpy(v, sptr, 4);
for (j = 0; j < png_pass_inc[pass]; j++) for (j = 0; j < png_pass_inc[pass]; j++)
{ {
#ifdef PNG_DEBUG
if (dp < row || dp+3 > row+png_ptr->row_buf_size)
{
printf("dp out of bounds: row=%d, dp=%d, rp=%d\n",row, dp,
row+png_ptr->row_buf_size);
printf("row_buf=%d\n",png_ptr->row_buf_size);
}
#endif
png_memcpy(dp, v, 4); png_memcpy(dp, v, 4);
dp -= 4; dp -= 4;
} }
@ -2499,7 +2632,7 @@ png_do_read_interlace(png_structp png_ptr)
sptr -= 8; sptr -= 8;
} }
} }
else // GRR: should never be reached else /* GRR: should never be reached */
{ {
for (i = width; i; i--) for (i = width; i; i--)
{ {
@ -2533,6 +2666,8 @@ png_do_read_interlace(png_structp png_ptr)
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
// These variables are utilized in the functions below. They are declared // These variables are utilized in the functions below. They are declared
// globally here to ensure alignment on 8-byte boundaries. // globally here to ensure alignment on 8-byte boundaries.
@ -2545,7 +2680,6 @@ union uAll {
//===========================================================================// //===========================================================================//
// // // //
// P N G _ R E A D _ F I L T E R _ R O W _ M M X _ A V G // // P N G _ R E A D _ F I L T E R _ R O W _ M M X _ A V G //
@ -4739,14 +4873,16 @@ png_read_filter_row_mmx_up(png_row_infop row_info, png_bytep row,
} // end of png_read_filter_row_mmx_up() } // end of png_read_filter_row_mmx_up()
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
//===========================================================================//
// // /*===========================================================================*/
// P N G _ R E A D _ F I L T E R _ R O W // /* */
// // /* P N G _ R E A D _ F I L T E R _ R O W */
//===========================================================================// /* */
/*===========================================================================*/
#if defined(PNG_HAVE_ASSEMBLER_READ_FILTER_ROW) #if defined(PNG_HAVE_ASSEMBLER_READ_FILTER_ROW)
@ -4760,6 +4896,7 @@ png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep
char filnm[10]; char filnm[10];
#endif #endif
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
/* GRR: these are superseded by png_ptr->asm_flags: */ /* GRR: these are superseded by png_ptr->asm_flags: */
#define UseMMX_sub 1 // GRR: converted 20000730 #define UseMMX_sub 1 // GRR: converted 20000730
#define UseMMX_up 1 // GRR: converted 20000729 #define UseMMX_up 1 // GRR: converted 20000729
@ -4769,9 +4906,10 @@ png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep
if (_mmx_supported == 2) { if (_mmx_supported == 2) {
png_mmx_support(); png_mmx_support();
} }
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
#ifdef PNG_DEBUG #ifdef PNG_DEBUG
png_debug(1, "in png_read_filter_row\n"); png_debug(1, "in png_read_filter_row (pnggccrd.c)\n");
switch (filter) switch (filter)
{ {
case 0: sprintf(filnm, "none"); case 0: sprintf(filnm, "none");
@ -4800,13 +4938,15 @@ png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep
break; break;
case PNG_FILTER_VALUE_SUB: case PNG_FILTER_VALUE_SUB:
if ( #if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
if ( _mmx_supported &&
(row_info->pixel_depth >= PNG_MMX_BITDEPTH_THRESHOLD_DEFAULT) && (row_info->pixel_depth >= PNG_MMX_BITDEPTH_THRESHOLD_DEFAULT) &&
(row_info->rowbytes >= PNG_MMX_ROWBYTES_THRESHOLD_DEFAULT)) (row_info->rowbytes >= PNG_MMX_ROWBYTES_THRESHOLD_DEFAULT))
{ {
png_read_filter_row_mmx_sub(row_info, row); png_read_filter_row_mmx_sub(row_info, row);
} }
else else
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
{ {
png_uint_32 i; png_uint_32 i;
png_uint_32 istop = row_info->rowbytes; png_uint_32 istop = row_info->rowbytes;
@ -4823,13 +4963,15 @@ png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep
break; break;
case PNG_FILTER_VALUE_UP: case PNG_FILTER_VALUE_UP:
if ( #if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
if ( _mmx_supported &&
(row_info->pixel_depth >= PNG_MMX_BITDEPTH_THRESHOLD_DEFAULT) && (row_info->pixel_depth >= PNG_MMX_BITDEPTH_THRESHOLD_DEFAULT) &&
(row_info->rowbytes >= PNG_MMX_ROWBYTES_THRESHOLD_DEFAULT)) (row_info->rowbytes >= PNG_MMX_ROWBYTES_THRESHOLD_DEFAULT))
{ {
png_read_filter_row_mmx_up(row_info, row, prev_row); png_read_filter_row_mmx_up(row_info, row, prev_row);
} }
else else
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
{ {
png_uint_32 i; png_uint_32 i;
png_uint_32 istop = row_info->rowbytes; png_uint_32 istop = row_info->rowbytes;
@ -4845,13 +4987,15 @@ png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep
break; break;
case PNG_FILTER_VALUE_AVG: case PNG_FILTER_VALUE_AVG:
if ( #if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
if ( _mmx_supported &&
(row_info->pixel_depth >= PNG_MMX_BITDEPTH_THRESHOLD_DEFAULT) && (row_info->pixel_depth >= PNG_MMX_BITDEPTH_THRESHOLD_DEFAULT) &&
(row_info->rowbytes >= PNG_MMX_ROWBYTES_THRESHOLD_DEFAULT)) (row_info->rowbytes >= PNG_MMX_ROWBYTES_THRESHOLD_DEFAULT))
{ {
png_read_filter_row_mmx_avg(row_info, row, prev_row); png_read_filter_row_mmx_avg(row_info, row, prev_row);
} }
else else
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
{ {
png_uint_32 i; png_uint_32 i;
png_bytep rp = row; png_bytep rp = row;
@ -4877,13 +5021,15 @@ png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep
break; break;
case PNG_FILTER_VALUE_PAETH: case PNG_FILTER_VALUE_PAETH:
if ( #if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
if ( _mmx_supported &&
(row_info->pixel_depth >= PNG_MMX_BITDEPTH_THRESHOLD_DEFAULT) && (row_info->pixel_depth >= PNG_MMX_BITDEPTH_THRESHOLD_DEFAULT) &&
(row_info->rowbytes >= PNG_MMX_ROWBYTES_THRESHOLD_DEFAULT)) (row_info->rowbytes >= PNG_MMX_ROWBYTES_THRESHOLD_DEFAULT))
{ {
png_read_filter_row_mmx_paeth(row_info, row, prev_row); png_read_filter_row_mmx_paeth(row_info, row, prev_row);
} }
else else
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
{ {
png_uint_32 i; png_uint_32 i;
png_bytep rp = row; png_bytep rp = row;
@ -4947,30 +5093,27 @@ png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep
#endif /* PNG_HAVE_ASSEMBLER_READ_FILTER_ROW */ #endif /* PNG_HAVE_ASSEMBLER_READ_FILTER_ROW */
/*===========================================================================*/
/* */
/* P N G _ M M X _ S U P P O R T */
/* */
/*===========================================================================*/
/* GRR NOTES: (1) the following code assumes 386 or better (pushfl/popfl)
//===========================================================================// * (2) all instructions compile with gcc 2.7.2.3 and later
// // * (3) the function is moved down here to prevent gcc from
// P N G _ M M X _ S U P P O R T // * inlining it in multiple places and then barfing be-
// // * cause the ".NOT_SUPPORTED" label is multiply defined
//===========================================================================// * [is there a way to signal that a *single* function should
* not be inlined? is there a way to modify the label for
// GRR NOTES: (1) the following code assumes 386 or better (pushfl/popfl) * each inlined instance, e.g., by appending _1, _2, etc.?
// (2) all instructions compile with gcc 2.7.2.3 and later * maybe if don't use leading "." in label name? (nope...sigh)]
// (3) the function is moved down here to prevent gcc from */
// inlining it in multiple places and then barfing be-
// cause the ".NOT_SUPPORTED" label is multiply defined
// [is there a way to signal that a *single* function should
// not be inlined? is there a way to modify the label for
// each inlined instance, e.g., by appending _1, _2, etc.?
// maybe if don't use leading "." in label name? (nope...sigh)]
// GRR TO DO: make sure PNGAPI doesn't do/require anything screwy here
// [looks OK for everybody except possibly Cygwin (__cdecl)]
int PNGAPI int PNGAPI
png_mmx_support(void) png_mmx_support(void)
{ {
#if defined(PNG_MMX_CODE_SUPPORTED)
__asm__ __volatile__ ( __asm__ __volatile__ (
"pushl %%ebx \n\t" // ebx gets clobbered by CPUID instruction "pushl %%ebx \n\t" // ebx gets clobbered by CPUID instruction
"pushl %%ecx \n\t" // so does ecx... "pushl %%ecx \n\t" // so does ecx...
@ -5008,15 +5151,15 @@ png_mmx_support(void)
"movl %%eax, _mmx_supported \n\t" // save in global static variable, too "movl %%eax, _mmx_supported \n\t" // save in global static variable, too
"popl %%edx \n\t" // restore edx "popl %%edx \n\t" // restore edx
"popl %%ecx \n\t" // restore ecx "popl %%ecx \n\t" // restore ecx
"popl %%ebx \n\t" // restore ebx ("row" in png_do_interlace) "popl %%ebx \n\t" // restore ebx
"ret \n\t" // DONE: have MMX support "ret \n\t" // DONE: have MMX support
".NOT_SUPPORTED: \n\t" // target label for jump instructions ".NOT_SUPPORTED: \n\t" // target label for jump instructions
"movl $0, %%eax \n\t" // set return value to 0 "movl $0, %%eax \n\t" // set return value to 0
"movl %%eax, _mmx_supported \n\t" // save in global static variable, too // "movl %%eax, _mmx_supported \n\t" // save in global static variable, too
"popl %%edx \n\t" // restore edx "popl %%edx \n\t" // restore edx
"popl %%ecx \n\t" // restore ecx "popl %%ecx \n\t" // restore ecx
"popl %%ebx \n\t" // restore ebx ("row" in png_do_interlace) "popl %%ebx \n\t" // restore ebx
// "ret \n\t" // DONE: no MMX support // "ret \n\t" // DONE: no MMX support
// (fall through to standard C "ret") // (fall through to standard C "ret")
@ -5029,8 +5172,10 @@ png_mmx_support(void)
// , "memory" // if write to a variable gcc thought was in a reg // , "memory" // if write to a variable gcc thought was in a reg
// , "cc" // "condition codes" (flag bits) // , "cc" // "condition codes" (flag bits)
); );
#endif /* PNG_MMX_CODE_SUPPORTED */
// return %%eax; _mmx_supported = 0;
return 0;
} }
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED && PNG_USE_PNGGCCRD */ #endif /* PNG_USE_PNGGCCRD */

View File

@ -1,7 +1,7 @@
/* pngget.c - retrieval of values from info struct /* pngget.c - retrieval of values from info struct
* *
* libpng 1.0.9 - January 31, 2001 * libpng 1.0.10beta1 - March 14, 2001
* For conditions of distribution and use, see copyright notice in png.h * For conditions of distribution and use, see copyright notice in png.h
* Copyright (c) 1998-2001 Glenn Randers-Pehrson * Copyright (c) 1998-2001 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
@ -297,7 +297,7 @@ png_get_y_offset_inches(png_structp png_ptr, png_infop info_ptr)
*.00003937); *.00003937);
} }
#if defined(PNG_READ_pHYs_SUPPORTED) #if defined(PNG_pHYs_SUPPORTED)
png_uint_32 PNGAPI png_uint_32 PNGAPI
png_get_pHYs_dpi(png_structp png_ptr, png_infop info_ptr, png_get_pHYs_dpi(png_structp png_ptr, png_infop info_ptr,
png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type) png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)
@ -330,7 +330,7 @@ png_get_pHYs_dpi(png_structp png_ptr, png_infop info_ptr,
} }
return (retval); return (retval);
} }
#endif /* PNG_READ_pHYs_SUPPORTED */ #endif /* PNG_pHYs_SUPPORTED */
#endif /* PNG_INCH_CONVERSIONS && PNG_FLOATING_POINT_SUPPORTED */ #endif /* PNG_INCH_CONVERSIONS && PNG_FLOATING_POINT_SUPPORTED */
/* png_get_channels really belongs in here, too, but it's been around longer */ /* png_get_channels really belongs in here, too, but it's been around longer */
@ -355,7 +355,7 @@ png_get_signature(png_structp png_ptr, png_infop info_ptr)
return (NULL); return (NULL);
} }
#if defined(PNG_READ_bKGD_SUPPORTED) #if defined(PNG_bKGD_SUPPORTED)
png_uint_32 PNGAPI png_uint_32 PNGAPI
png_get_bKGD(png_structp png_ptr, png_infop info_ptr, png_get_bKGD(png_structp png_ptr, png_infop info_ptr,
png_color_16p *background) png_color_16p *background)
@ -371,7 +371,7 @@ png_get_bKGD(png_structp png_ptr, png_infop info_ptr,
} }
#endif #endif
#if defined(PNG_READ_cHRM_SUPPORTED) #if defined(PNG_cHRM_SUPPORTED)
#ifdef PNG_FLOATING_POINT_SUPPORTED #ifdef PNG_FLOATING_POINT_SUPPORTED
png_uint_32 PNGAPI png_uint_32 PNGAPI
png_get_cHRM(png_structp png_ptr, png_infop info_ptr, png_get_cHRM(png_structp png_ptr, png_infop info_ptr,
@ -435,7 +435,7 @@ png_get_cHRM_fixed(png_structp png_ptr, png_infop info_ptr,
#endif #endif
#endif #endif
#if defined(PNG_READ_gAMA_SUPPORTED) #if defined(PNG_gAMA_SUPPORTED)
#ifdef PNG_FLOATING_POINT_SUPPORTED #ifdef PNG_FLOATING_POINT_SUPPORTED
png_uint_32 PNGAPI png_uint_32 PNGAPI
png_get_gAMA(png_structp png_ptr, png_infop info_ptr, double *file_gamma) png_get_gAMA(png_structp png_ptr, png_infop info_ptr, double *file_gamma)
@ -467,7 +467,7 @@ png_get_gAMA_fixed(png_structp png_ptr, png_infop info_ptr,
#endif #endif
#endif #endif
#if defined(PNG_READ_sRGB_SUPPORTED) #if defined(PNG_sRGB_SUPPORTED)
png_uint_32 PNGAPI png_uint_32 PNGAPI
png_get_sRGB(png_structp png_ptr, png_infop info_ptr, int *file_srgb_intent) png_get_sRGB(png_structp png_ptr, png_infop info_ptr, int *file_srgb_intent)
{ {
@ -482,7 +482,7 @@ png_get_sRGB(png_structp png_ptr, png_infop info_ptr, int *file_srgb_intent)
} }
#endif #endif
#if defined(PNG_READ_iCCP_SUPPORTED) #if defined(PNG_iCCP_SUPPORTED)
png_uint_32 PNGAPI png_uint_32 PNGAPI
png_get_iCCP(png_structp png_ptr, png_infop info_ptr, png_get_iCCP(png_structp png_ptr, png_infop info_ptr,
png_charpp name, int *compression_type, png_charpp name, int *compression_type,
@ -504,7 +504,7 @@ png_get_iCCP(png_structp png_ptr, png_infop info_ptr,
} }
#endif #endif
#if defined(PNG_READ_sPLT_SUPPORTED) #if defined(PNG_sPLT_SUPPORTED)
png_uint_32 PNGAPI png_uint_32 PNGAPI
png_get_sPLT(png_structp png_ptr, png_infop info_ptr, png_get_sPLT(png_structp png_ptr, png_infop info_ptr,
png_sPLT_tpp spalettes) png_sPLT_tpp spalettes)
@ -515,7 +515,7 @@ png_get_sPLT(png_structp png_ptr, png_infop info_ptr,
} }
#endif #endif
#if defined(PNG_READ_hIST_SUPPORTED) #if defined(PNG_hIST_SUPPORTED)
png_uint_32 PNGAPI png_uint_32 PNGAPI
png_get_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_16p *hist) png_get_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_16p *hist)
{ {
@ -576,7 +576,7 @@ png_get_IHDR(png_structp png_ptr, png_infop info_ptr,
return (0); return (0);
} }
#if defined(PNG_READ_oFFs_SUPPORTED) #if defined(PNG_oFFs_SUPPORTED)
png_uint_32 PNGAPI png_uint_32 PNGAPI
png_get_oFFs(png_structp png_ptr, png_infop info_ptr, png_get_oFFs(png_structp png_ptr, png_infop info_ptr,
png_int_32 *offset_x, png_int_32 *offset_y, int *unit_type) png_int_32 *offset_x, png_int_32 *offset_y, int *unit_type)
@ -594,7 +594,7 @@ png_get_oFFs(png_structp png_ptr, png_infop info_ptr,
} }
#endif #endif
#if defined(PNG_READ_pCAL_SUPPORTED) #if defined(PNG_pCAL_SUPPORTED)
png_uint_32 PNGAPI png_uint_32 PNGAPI
png_get_pCAL(png_structp png_ptr, png_infop info_ptr, png_get_pCAL(png_structp png_ptr, png_infop info_ptr,
png_charp *purpose, png_int_32 *X0, png_int_32 *X1, int *type, int *nparams, png_charp *purpose, png_int_32 *X0, png_int_32 *X1, int *type, int *nparams,
@ -618,7 +618,7 @@ png_get_pCAL(png_structp png_ptr, png_infop info_ptr,
} }
#endif #endif
#if defined(PNG_READ_sCAL_SUPPORTED) || defined(PNG_WRITE_sCAL_SUPPORTED) #if defined(PNG_sCAL_SUPPORTED)
#ifdef PNG_FLOATING_POINT_SUPPORTED #ifdef PNG_FLOATING_POINT_SUPPORTED
png_uint_32 PNGAPI png_uint_32 PNGAPI
png_get_sCAL(png_structp png_ptr, png_infop info_ptr, png_get_sCAL(png_structp png_ptr, png_infop info_ptr,
@ -654,7 +654,7 @@ png_get_sCAL_s(png_structp png_ptr, png_infop info_ptr,
#endif #endif
#endif #endif
#if defined(PNG_READ_pHYs_SUPPORTED) #if defined(PNG_pHYs_SUPPORTED)
png_uint_32 PNGAPI png_uint_32 PNGAPI
png_get_pHYs(png_structp png_ptr, png_infop info_ptr, png_get_pHYs(png_structp png_ptr, png_infop info_ptr,
png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type) png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)
@ -701,7 +701,7 @@ png_get_PLTE(png_structp png_ptr, png_infop info_ptr, png_colorp *palette,
return (0); return (0);
} }
#if defined(PNG_READ_sBIT_SUPPORTED) #if defined(PNG_sBIT_SUPPORTED)
png_uint_32 PNGAPI png_uint_32 PNGAPI
png_get_sBIT(png_structp png_ptr, png_infop info_ptr, png_color_8p *sig_bit) png_get_sBIT(png_structp png_ptr, png_infop info_ptr, png_color_8p *sig_bit)
{ {
@ -716,7 +716,7 @@ png_get_sBIT(png_structp png_ptr, png_infop info_ptr, png_color_8p *sig_bit)
} }
#endif #endif
#if defined(PNG_READ_TEXT_SUPPORTED) #if defined(PNG_TEXT_SUPPORTED)
png_uint_32 PNGAPI png_uint_32 PNGAPI
png_get_text(png_structp png_ptr, png_infop info_ptr, png_textp *text_ptr, png_get_text(png_structp png_ptr, png_infop info_ptr, png_textp *text_ptr,
int *num_text) int *num_text)
@ -738,7 +738,7 @@ png_get_text(png_structp png_ptr, png_infop info_ptr, png_textp *text_ptr,
} }
#endif #endif
#if defined(PNG_READ_tIME_SUPPORTED) #if defined(PNG_tIME_SUPPORTED)
png_uint_32 PNGAPI png_uint_32 PNGAPI
png_get_tIME(png_structp png_ptr, png_infop info_ptr, png_timep *mod_time) png_get_tIME(png_structp png_ptr, png_infop info_ptr, png_timep *mod_time)
{ {
@ -753,7 +753,7 @@ png_get_tIME(png_structp png_ptr, png_infop info_ptr, png_timep *mod_time)
} }
#endif #endif
#if defined(PNG_READ_tRNS_SUPPORTED) #if defined(PNG_tRNS_SUPPORTED)
png_uint_32 PNGAPI png_uint_32 PNGAPI
png_get_tRNS(png_structp png_ptr, png_infop info_ptr, png_get_tRNS(png_structp png_ptr, png_infop info_ptr,
png_bytep *trans, int *num_trans, png_color_16p *trans_values) png_bytep *trans, int *num_trans, png_color_16p *trans_values)
@ -792,7 +792,7 @@ png_get_tRNS(png_structp png_ptr, png_infop info_ptr,
} }
#endif #endif
#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
png_uint_32 PNGAPI png_uint_32 PNGAPI
png_get_unknown_chunks(png_structp png_ptr, png_infop info_ptr, png_get_unknown_chunks(png_structp png_ptr, png_infop info_ptr,
png_unknown_chunkpp unknowns) png_unknown_chunkpp unknowns)
@ -811,7 +811,7 @@ png_get_rgb_to_gray_status (png_structp png_ptr)
} }
#endif #endif
#if defined(PNG_READ_USER_CHUNKS_SUPPORTED) #if defined(PNG_USER_CHUNKS_SUPPORTED)
png_voidp PNGAPI png_voidp PNGAPI
png_get_user_chunk_ptr(png_structp png_ptr) png_get_user_chunk_ptr(png_structp png_ptr)
{ {

View File

@ -1,7 +1,7 @@
/* pngmem.c - stub functions for memory allocation /* pngmem.c - stub functions for memory allocation
* *
* libpng 1.0.9 - January 31, 2001 * libpng 1.0.10beta1 - March 14, 2001
* For conditions of distribution and use, see copyright notice in png.h * For conditions of distribution and use, see copyright notice in png.h
* Copyright (c) 1998-2001 Glenn Randers-Pehrson * Copyright (c) 1998-2001 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)

View File

@ -1,7 +1,7 @@
/* pngpread.c - read a png file in push mode /* pngpread.c - read a png file in push mode
* *
* libpng 1.0.9 - January 31, 2001 * libpng 1.0.10beta1 - March 14, 2001
* For conditions of distribution and use, see copyright notice in png.h * For conditions of distribution and use, see copyright notice in png.h
* Copyright (c) 1998-2001 Glenn Randers-Pehrson * Copyright (c) 1998-2001 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)

View File

@ -1,7 +1,7 @@
/* pngread.c - read a PNG file /* pngread.c - read a PNG file
* *
* libpng 1.0.9 - January 31, 2001 * libpng 1.0.10beta1 - March 14, 2001
* For conditions of distribution and use, see copyright notice in png.h * For conditions of distribution and use, see copyright notice in png.h
* Copyright (c) 1998-2001 Glenn Randers-Pehrson * Copyright (c) 1998-2001 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
@ -715,7 +715,7 @@ png_read_row(png_structp png_ptr, png_bytep row, png_bytep dsp_row)
* not called png_set_interlace_handling(), the display_row buffer will * not called png_set_interlace_handling(), the display_row buffer will
* be ignored, so pass NULL to it. * be ignored, so pass NULL to it.
* *
* [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.9 * [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.10beta1
*/ */
void PNGAPI void PNGAPI
@ -764,7 +764,7 @@ png_read_rows(png_structp png_ptr, png_bytepp row,
* only call this function once. If you desire to have an image for * only call this function once. If you desire to have an image for
* each pass of a interlaced image, use png_read_rows() instead. * each pass of a interlaced image, use png_read_rows() instead.
* *
* [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.9 * [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.10beta1
*/ */
void PNGAPI void PNGAPI
png_read_image(png_structp png_ptr, png_bytepp image) png_read_image(png_structp png_ptr, png_bytepp image)

View File

@ -1,7 +1,7 @@
/* pngrio.c - functions for data input /* pngrio.c - functions for data input
* *
* libpng 1.0.9 - January 31, 2001 * libpng 1.0.10beta1 - March 14, 2001
* For conditions of distribution and use, see copyright notice in png.h * For conditions of distribution and use, see copyright notice in png.h
* Copyright (c) 1998-2001 Glenn Randers-Pehrson * Copyright (c) 1998-2001 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)

View File

@ -1,7 +1,7 @@
/* pngrtran.c - transforms the data in a row for PNG readers /* pngrtran.c - transforms the data in a row for PNG readers
* *
* libpng 1.0.9 - January 31, 2001 * libpng 1.0.10beta1 - March 14, 2001
* For conditions of distribution and use, see copyright notice in png.h * For conditions of distribution and use, see copyright notice in png.h
* Copyright (c) 1998-2001 Glenn Randers-Pehrson * Copyright (c) 1998-2001 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)

View File

@ -1,7 +1,7 @@
/* pngrutil.c - utilities to read a PNG file /* pngrutil.c - utilities to read a PNG file
* *
* libpng 1.0.9 - January 31, 2001 * libpng 1.0.10beta1 - March 14, 2001
* For conditions of distribution and use, see copyright notice in png.h * For conditions of distribution and use, see copyright notice in png.h
* Copyright (c) 1998-2001 Glenn Randers-Pehrson * Copyright (c) 1998-2001 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
@ -332,59 +332,6 @@ png_handle_IHDR(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
filter_type = buf[11]; filter_type = buf[11];
interlace_type = buf[12]; interlace_type = buf[12];
/* check for width and height valid values */
if (width == 0 || width > PNG_MAX_UINT || height == 0 ||
height > PNG_MAX_UINT)
png_error(png_ptr, "Invalid image size in IHDR");
/* check other values */
if (bit_depth != 1 && bit_depth != 2 && bit_depth != 4 &&
bit_depth != 8 && bit_depth != 16)
png_error(png_ptr, "Invalid bit depth in IHDR");
if (color_type < 0 || color_type == 1 ||
color_type == 5 || color_type > 6)
png_error(png_ptr, "Invalid color type in IHDR");
if (((color_type == PNG_COLOR_TYPE_PALETTE) && bit_depth > 8) ||
((color_type == PNG_COLOR_TYPE_RGB ||
color_type == PNG_COLOR_TYPE_GRAY_ALPHA ||
color_type == PNG_COLOR_TYPE_RGB_ALPHA) && bit_depth < 8))
png_error(png_ptr, "Invalid color type/bit depth combination in IHDR");
if (interlace_type >= PNG_INTERLACE_LAST)
png_error(png_ptr, "Unknown interlace method in IHDR");
if (compression_type != PNG_COMPRESSION_TYPE_BASE)
png_error(png_ptr, "Unknown compression method in IHDR");
#if defined(PNG_MNG_FEATURES_SUPPORTED)
/* Accept filter_method 64 (intrapixel differencing) only if
* 1. Libpng was compiled with PNG_MNG_FEATURES_SUPPORTED and
* 2. Libpng did not read a PNG signature (this filter_method is only
* used in PNG datastreams that are embedded in MNG datastreams) and
* 3. The application called png_permit_mng_features with a mask that
* included PNG_FLAG_MNG_FILTER_64 and
* 4. The filter_method is 64 and
* 5. The color_type is RGB or RGBA
*/
if((png_ptr->mode&PNG_HAVE_PNG_SIGNATURE)&&png_ptr->mng_features_permitted)
png_warning(png_ptr,"MNG features are not allowed in a PNG datastream\n");
if(filter_type != PNG_FILTER_TYPE_BASE)
{
if(!((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) &&
(filter_type == PNG_INTRAPIXEL_DIFFERENCING) &&
((png_ptr->mode&PNG_HAVE_PNG_SIGNATURE) == 0) &&
(color_type == PNG_COLOR_TYPE_RGB ||
color_type == PNG_COLOR_TYPE_RGB_ALPHA)))
png_error(png_ptr, "Unknown filter method in IHDR");
if(png_ptr->mode&PNG_HAVE_PNG_SIGNATURE)
png_warning(png_ptr, "Invalid filter method in IHDR");
}
#else
if(filter_type != PNG_FILTER_TYPE_BASE)
png_error(png_ptr, "Unknown filter method in IHDR");
#endif
/* set internal variables */ /* set internal variables */
png_ptr->width = width; png_ptr->width = width;
@ -628,7 +575,11 @@ png_handle_gAMA(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
igamma = (png_fixed_point)png_get_uint_32(buf); igamma = (png_fixed_point)png_get_uint_32(buf);
/* check for zero gamma */ /* check for zero gamma */
if (igamma == 0) if (igamma == 0)
{
png_warning(png_ptr,
"Ignoring gAMA chunk with gamma=0");
return; return;
}
#if defined(PNG_READ_sRGB_SUPPORTED) #if defined(PNG_READ_sRGB_SUPPORTED)
if (info_ptr->valid & PNG_INFO_sRGB) if (info_ptr->valid & PNG_INFO_sRGB)
@ -2371,6 +2322,10 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
#ifdef PNG_READ_INTERLACING_SUPPORTED #ifdef PNG_READ_INTERLACING_SUPPORTED
#ifndef PNG_HAVE_ASSEMBLER_READ_INTERLACE /* else in pngvcrd.c, pnggccrd.c */ #ifndef PNG_HAVE_ASSEMBLER_READ_INTERLACE /* else in pngvcrd.c, pnggccrd.c */
/* OLD pre-1.0.9 interface:
void png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass,
png_uint_32 transformations)
*/
void /* PRIVATE */ void /* PRIVATE */
png_do_read_interlace(png_structp png_ptr) png_do_read_interlace(png_structp png_ptr)
{ {
@ -3008,6 +2963,7 @@ defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)
png_error(png_ptr, "This image requires a row greater than 64KB"); png_error(png_ptr, "This image requires a row greater than 64KB");
#endif #endif
png_ptr->row_buf = (png_bytep)png_malloc(png_ptr, row_bytes); png_ptr->row_buf = (png_bytep)png_malloc(png_ptr, row_bytes);
png_ptr->row_buf_size = row_bytes;
#ifdef PNG_MAX_MALLOC_64K #ifdef PNG_MAX_MALLOC_64K
if ((png_uint_32)png_ptr->rowbytes + 1 > (png_uint_32)65536L) if ((png_uint_32)png_ptr->rowbytes + 1 > (png_uint_32)65536L)

View File

@ -1,7 +1,7 @@
/* pngset.c - storage of image information into info struct /* pngset.c - storage of image information into info struct
* *
* libpng 1.0.9 - January 31, 2001 * libpng 1.0.10beta1 - March 14, 2001
* For conditions of distribution and use, see copyright notice in png.h * For conditions of distribution and use, see copyright notice in png.h
* Copyright (c) 1998-2001 Glenn Randers-Pehrson * Copyright (c) 1998-2001 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
@ -109,9 +109,10 @@ png_set_gAMA(png_structp png_ptr, png_infop info_ptr, double file_gamma)
info_ptr->int_gamma = (int)(file_gamma*100000.+.5); info_ptr->int_gamma = (int)(file_gamma*100000.+.5);
#endif #endif
info_ptr->valid |= PNG_INFO_gAMA; info_ptr->valid |= PNG_INFO_gAMA;
if(file_gamma == 0.0)
png_warning(png_ptr, "Setting gamma=0");
} }
#endif #endif
#endif
void PNGAPI void PNGAPI
png_set_gAMA_fixed(png_structp png_ptr, png_infop info_ptr, png_fixed_point png_set_gAMA_fixed(png_structp png_ptr, png_infop info_ptr, png_fixed_point
int_gamma) int_gamma)
@ -127,7 +128,10 @@ png_set_gAMA_fixed(png_structp png_ptr, png_infop info_ptr, png_fixed_point
info_ptr->int_gamma = int_gamma; info_ptr->int_gamma = int_gamma;
#endif #endif
info_ptr->valid |= PNG_INFO_gAMA; info_ptr->valid |= PNG_INFO_gAMA;
if(int_gamma == 0)
png_warning(png_ptr, "Setting gamma=0");
} }
#endif
#if defined(PNG_hIST_SUPPORTED) #if defined(PNG_hIST_SUPPORTED)
void PNGAPI void PNGAPI
@ -172,6 +176,61 @@ png_set_IHDR(png_structp png_ptr, png_infop info_ptr,
if (png_ptr == NULL || info_ptr == NULL) if (png_ptr == NULL || info_ptr == NULL)
return; return;
/* check for width and height valid values */
if (width == 0 || height == 0)
png_error(png_ptr, "Image width or height is zero in IHDR");
if (width > PNG_MAX_UINT || height > PNG_MAX_UINT)
png_error(png_ptr, "Invalid image size in IHDR");
/* check other values */
if (bit_depth != 1 && bit_depth != 2 && bit_depth != 4 &&
bit_depth != 8 && bit_depth != 16)
png_error(png_ptr, "Invalid bit depth in IHDR");
if (color_type < 0 || color_type == 1 ||
color_type == 5 || color_type > 6)
png_error(png_ptr, "Invalid color type in IHDR");
if (((color_type == PNG_COLOR_TYPE_PALETTE) && bit_depth > 8) ||
((color_type == PNG_COLOR_TYPE_RGB ||
color_type == PNG_COLOR_TYPE_GRAY_ALPHA ||
color_type == PNG_COLOR_TYPE_RGB_ALPHA) && bit_depth < 8))
png_error(png_ptr, "Invalid color type/bit depth combination in IHDR");
if (interlace_type >= PNG_INTERLACE_LAST)
png_error(png_ptr, "Unknown interlace method in IHDR");
if (compression_type != PNG_COMPRESSION_TYPE_BASE)
png_error(png_ptr, "Unknown compression method in IHDR");
#if defined(PNG_MNG_FEATURES_SUPPORTED)
/* Accept filter_method 64 (intrapixel differencing) only if
* 1. Libpng was compiled with PNG_MNG_FEATURES_SUPPORTED and
* 2. Libpng did not read a PNG signature (this filter_method is only
* used in PNG datastreams that are embedded in MNG datastreams) and
* 3. The application called png_permit_mng_features with a mask that
* included PNG_FLAG_MNG_FILTER_64 and
* 4. The filter_method is 64 and
* 5. The color_type is RGB or RGBA
*/
if((png_ptr->mode&PNG_HAVE_PNG_SIGNATURE)&&png_ptr->mng_features_permitted)
png_warning(png_ptr,"MNG features are not allowed in a PNG datastream\n");
if(filter_type != PNG_FILTER_TYPE_BASE)
{
if(!((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) &&
(filter_type == PNG_INTRAPIXEL_DIFFERENCING) &&
((png_ptr->mode&PNG_HAVE_PNG_SIGNATURE) == 0) &&
(color_type == PNG_COLOR_TYPE_RGB ||
color_type == PNG_COLOR_TYPE_RGB_ALPHA)))
png_error(png_ptr, "Unknown filter method in IHDR");
if(png_ptr->mode&PNG_HAVE_PNG_SIGNATURE)
png_warning(png_ptr, "Invalid filter method in IHDR");
}
#else
if(filter_type != PNG_FILTER_TYPE_BASE)
png_error(png_ptr, "Unknown filter method in IHDR");
#endif
info_ptr->width = width; info_ptr->width = width;
info_ptr->height = height; info_ptr->height = height;
info_ptr->bit_depth = (png_byte)bit_depth; info_ptr->bit_depth = (png_byte)bit_depth;
@ -738,7 +797,7 @@ png_set_sPLT(png_structp png_ptr,
} }
#endif /* PNG_sPLT_SUPPORTED */ #endif /* PNG_sPLT_SUPPORTED */
#if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED) #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
void PNGAPI void PNGAPI
png_set_unknown_chunks(png_structp png_ptr, png_set_unknown_chunks(png_structp png_ptr,
png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns) png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns)
@ -883,7 +942,6 @@ png_set_rows(png_structp png_ptr, png_infop info_ptr, png_bytepp row_pointers)
info_ptr->row_pointers = row_pointers; info_ptr->row_pointers = row_pointers;
if(row_pointers) if(row_pointers)
info_ptr->valid |= PNG_INFO_IDAT; info_ptr->valid |= PNG_INFO_IDAT;
} }
#endif #endif

View File

@ -1,7 +1,7 @@
/* pngtest.c - a simple test program to test libpng /* pngtest.c - a simple test program to test libpng
* *
* libpng 1.0.9 - January 31, 2001 * libpng 1.0.10beta1 - March 14, 2001
* For conditions of distribution and use, see copyright notice in png.h * For conditions of distribution and use, see copyright notice in png.h
* Copyright (c) 1998-2001 Glenn Randers-Pehrson * Copyright (c) 1998-2001 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
@ -51,16 +51,20 @@
#endif #endif
#if defined(PNG_NO_STDIO) #if defined(PNG_NO_STDIO)
#if defined(_WIN32_WCE) # if defined(_WIN32_WCE)
typedef HANDLE png_FILE_p; typedef HANDLE png_FILE_p;
#else # else
typedef FILE * png_FILE_p; typedef FILE * png_FILE_p;
#endif # endif
#endif #endif
/* Makes pngtest verbose so we can find problems (needs to be before png.h) */ /* Makes pngtest verbose so we can find problems (needs to be before png.h) */
#ifndef PNG_DEBUG #ifndef PNG_DEBUG
#define PNG_DEBUG 0 # define PNG_DEBUG 0
#endif
#if !PNG_DEBUG
# define SINGLE_ROWBUF_ALLOC /* makes buffer overruns easier to nail */
#endif #endif
/* Turn on CPU timing /* Turn on CPU timing
@ -279,7 +283,7 @@ pngtest_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
if (check != length) if (check != length)
{ {
png_error(png_ptr, "Read Error"); png_error(png_ptr, "Read Error!");
} }
} }
#else #else
@ -564,8 +568,17 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
{ {
static png_FILE_p fpin; static png_FILE_p fpin;
static png_FILE_p fpout; /* "static" prevents setjmp corruption */ static png_FILE_p fpout; /* "static" prevents setjmp corruption */
png_structp read_ptr, write_ptr; png_structp read_ptr;
png_infop read_info_ptr, write_info_ptr, end_info_ptr, write_end_info_ptr; png_infop read_info_ptr, end_info_ptr;
#ifdef PNG_WRITE_SUPPORTED
png_structp write_ptr;
png_infop write_info_ptr;
png_infop write_end_info_ptr;
#else
png_structp write_ptr = NULL;
png_infop write_info_ptr = NULL;
png_infop write_end_info_ptr = NULL;
#endif
png_bytep row_buf; png_bytep row_buf;
png_uint_32 y; png_uint_32 y;
png_uint_32 width, height; png_uint_32 width, height;
@ -620,6 +633,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
png_set_error_fn(read_ptr, (png_voidp)inname, pngtest_error, png_set_error_fn(read_ptr, (png_voidp)inname, pngtest_error,
pngtest_warning); pngtest_warning);
#endif #endif
#ifdef PNG_WRITE_SUPPORTED
#ifdef PNG_USER_MEM_SUPPORTED #ifdef PNG_USER_MEM_SUPPORTED
write_ptr = png_create_write_struct_2(PNG_LIBPNG_VER_STRING, (png_voidp)NULL, write_ptr = png_create_write_struct_2(PNG_LIBPNG_VER_STRING, (png_voidp)NULL,
(png_error_ptr)NULL, (png_error_ptr)NULL, (png_voidp)NULL, (png_error_ptr)NULL, (png_error_ptr)NULL, (png_voidp)NULL,
@ -631,13 +645,14 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
#if defined(PNG_NO_STDIO) #if defined(PNG_NO_STDIO)
png_set_error_fn(write_ptr, (png_voidp)inname, pngtest_error, png_set_error_fn(write_ptr, (png_voidp)inname, pngtest_error,
pngtest_warning); pngtest_warning);
#endif
#endif #endif
png_debug(0, "Allocating read_info, write_info and end_info structures\n"); png_debug(0, "Allocating read_info, write_info and end_info structures\n");
read_info_ptr = png_create_info_struct(read_ptr); read_info_ptr = png_create_info_struct(read_ptr);
write_info_ptr = png_create_info_struct(write_ptr);
end_info_ptr = png_create_info_struct(read_ptr); end_info_ptr = png_create_info_struct(read_ptr);
#ifdef PNG_WRITE_SUPPORTED
write_info_ptr = png_create_info_struct(write_ptr);
write_end_info_ptr = png_create_info_struct(write_ptr); write_end_info_ptr = png_create_info_struct(write_ptr);
#ifdef PNG_USER_MEM_SUPPORTED
#endif #endif
#ifdef PNG_SETJMP_SUPPORTED #ifdef PNG_SETJMP_SUPPORTED
@ -650,8 +665,10 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
{ {
fprintf(STDERR, "%s -> %s: libpng read error\n", inname, outname); fprintf(STDERR, "%s -> %s: libpng read error\n", inname, outname);
png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr); png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr);
#ifdef PNG_WRITE_SUPPORTED
png_destroy_info_struct(write_ptr, &write_end_info_ptr); png_destroy_info_struct(write_ptr, &write_end_info_ptr);
png_destroy_write_struct(&write_ptr, &write_info_ptr); png_destroy_write_struct(&write_ptr, &write_info_ptr);
#endif
FCLOSE(fpin); FCLOSE(fpin);
FCLOSE(fpout); FCLOSE(fpout);
return (1); return (1);
@ -660,6 +677,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
png_memcpy(png_jmpbuf(read_ptr),jmpbuf,sizeof(jmp_buf)); png_memcpy(png_jmpbuf(read_ptr),jmpbuf,sizeof(jmp_buf));
#endif #endif
#ifdef PNG_WRITE_SUPPORTED
png_debug(0, "Setting jmpbuf for write struct\n"); png_debug(0, "Setting jmpbuf for write struct\n");
#ifdef USE_FAR_KEYWORD #ifdef USE_FAR_KEYWORD
if (setjmp(jmpbuf)) if (setjmp(jmpbuf))
@ -670,7 +688,9 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
fprintf(STDERR, "%s -> %s: libpng write error\n", inname, outname); fprintf(STDERR, "%s -> %s: libpng write error\n", inname, outname);
png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr); png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr);
png_destroy_info_struct(write_ptr, &write_end_info_ptr); png_destroy_info_struct(write_ptr, &write_end_info_ptr);
#ifdef PNG_WRITE_SUPPORTED
png_destroy_write_struct(&write_ptr, &write_info_ptr); png_destroy_write_struct(&write_ptr, &write_info_ptr);
#endif
FCLOSE(fpin); FCLOSE(fpin);
FCLOSE(fpout); FCLOSE(fpout);
return (1); return (1);
@ -678,29 +698,38 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
#ifdef USE_FAR_KEYWORD #ifdef USE_FAR_KEYWORD
png_memcpy(png_jmpbuf(write_ptr),jmpbuf,sizeof(jmp_buf)); png_memcpy(png_jmpbuf(write_ptr),jmpbuf,sizeof(jmp_buf));
#endif #endif
#endif
#endif #endif
png_debug(0, "Initializing input and output streams\n"); png_debug(0, "Initializing input and output streams\n");
#if !defined(PNG_NO_STDIO) #if !defined(PNG_NO_STDIO)
png_init_io(read_ptr, fpin); png_init_io(read_ptr, fpin);
# ifdef PNG_WRITE_SUPPORTED
png_init_io(write_ptr, fpout); png_init_io(write_ptr, fpout);
# endif
#else #else
png_set_read_fn(read_ptr, (png_voidp)fpin, pngtest_read_data); png_set_read_fn(read_ptr, (png_voidp)fpin, pngtest_read_data);
#ifdef PNG_WRITE_SUPPORTED
png_set_write_fn(write_ptr, (png_voidp)fpout, pngtest_write_data, png_set_write_fn(write_ptr, (png_voidp)fpout, pngtest_write_data,
#if defined(PNG_WRITE_FLUSH_SUPPORTED) #if defined(PNG_WRITE_FLUSH_SUPPORTED)
pngtest_flush); pngtest_flush);
#else #else
#endif
NULL); NULL);
#endif #endif
#endif #endif
if(status_dots_requested == 1) if(status_dots_requested == 1)
{ {
#ifdef PNG_WRITE_SUPPORTED
png_set_write_status_fn(write_ptr, write_row_callback); png_set_write_status_fn(write_ptr, write_row_callback);
#endif
png_set_read_status_fn(read_ptr, read_row_callback); png_set_read_status_fn(read_ptr, read_row_callback);
} }
else else
{ {
#ifdef PNG_WRITE_SUPPORTED
png_set_write_status_fn(write_ptr, NULL); png_set_write_status_fn(write_ptr, NULL);
#endif
png_set_read_status_fn(read_ptr, NULL); png_set_read_status_fn(read_ptr, NULL);
} }
@ -984,32 +1013,41 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
} }
#endif #endif
#ifdef PNG_WRITE_SUPPORTED
png_debug(0, "\nWriting info struct\n"); png_debug(0, "\nWriting info struct\n");
/* If we wanted, we could write info in two steps: /* If we wanted, we could write info in two steps:
png_write_info_before_PLTE(write_ptr, write_info_ptr); png_write_info_before_PLTE(write_ptr, write_info_ptr);
*/ */
png_write_info(write_ptr, write_info_ptr); png_write_info(write_ptr, write_info_ptr);
#endif
png_debug(0, "\nAllocating row buffer \n"); #ifdef SINGLE_ROWBUF_ALLOC
png_debug(0, "\nAllocating row buffer...");
row_buf = (png_bytep)png_malloc(read_ptr, row_buf = (png_bytep)png_malloc(read_ptr,
png_get_rowbytes(read_ptr, read_info_ptr)); png_get_rowbytes(read_ptr, read_info_ptr));
png_debug1(0, "0x%08lx\n\n", (unsigned long)row_buf);
if (row_buf == NULL) if (row_buf == NULL)
{ {
fprintf(STDERR, "No memory to allocate row buffer\n"); fprintf(STDERR, "No memory to allocate row buffer\n");
png_destroy_read_struct(&read_ptr, &read_info_ptr, (png_infopp)NULL); png_destroy_read_struct(&read_ptr, &read_info_ptr, (png_infopp)NULL);
#ifdef PNG_WRITE_SUPPORTED
png_destroy_info_struct(write_ptr, &write_end_info_ptr); png_destroy_info_struct(write_ptr, &write_end_info_ptr);
png_destroy_write_struct(&write_ptr, &write_info_ptr); png_destroy_write_struct(&write_ptr, &write_info_ptr);
#endif
FCLOSE(fpin); FCLOSE(fpin);
FCLOSE(fpout); FCLOSE(fpout);
return (1); return (1);
} }
#endif /* SINGLE_ROWBUF_ALLOC */
png_debug(0, "Writing row data\n"); png_debug(0, "Writing row data\n");
#if defined(PNG_READ_INTERLACING_SUPPORTED) || \ #if defined(PNG_READ_INTERLACING_SUPPORTED) || \
defined(PNG_WRITE_INTERLACING_SUPPORTED) defined(PNG_WRITE_INTERLACING_SUPPORTED)
num_pass = png_set_interlace_handling(read_ptr); num_pass = png_set_interlace_handling(read_ptr);
# ifdef PNG_WRITE_SUPPORTED
png_set_interlace_handling(write_ptr); png_set_interlace_handling(write_ptr);
# endif
#else #else
num_pass=1; num_pass=1;
#endif #endif
@ -1024,7 +1062,16 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
png_debug1(0, "Writing row data for pass %d\n",pass); png_debug1(0, "Writing row data for pass %d\n",pass);
for (y = 0; y < height; y++) for (y = 0; y < height; y++)
{ {
#ifndef SINGLE_ROWBUF_ALLOC
png_debug2(0, "\nAllocating row buffer (pass %d, y = %ld)...", pass,y);
row_buf = (png_bytep)png_malloc(read_ptr,
png_get_rowbytes(read_ptr, read_info_ptr));
png_debug2(0, "0x%08lx (%ld bytes)\n", (unsigned long)row_buf,
png_get_rowbytes(read_ptr, read_info_ptr));
#endif /* !SINGLE_ROWBUF_ALLOC */
png_read_rows(read_ptr, (png_bytepp)&row_buf, (png_bytepp)NULL, 1); png_read_rows(read_ptr, (png_bytepp)&row_buf, (png_bytepp)NULL, 1);
#ifdef PNG_WRITE_SUPPORTED
#ifdef PNGTEST_TIMING #ifdef PNGTEST_TIMING
t_stop = (float)clock(); t_stop = (float)clock();
t_decode += (t_stop - t_start); t_decode += (t_stop - t_start);
@ -1036,6 +1083,12 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
t_encode += (t_stop - t_start); t_encode += (t_stop - t_start);
t_start = t_stop; t_start = t_stop;
#endif #endif
#endif /* PNG_WRITE_SUPPORTED */
#ifndef SINGLE_ROWBUF_ALLOC
png_debug2(0, "Freeing row buffer (pass %d, y = %ld)\n\n", pass, y);
png_free(read_ptr, row_buf);
#endif /* !SINGLE_ROWBUF_ALLOC */
} }
} }
@ -1098,7 +1151,9 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
} }
} }
#endif #endif
#ifdef PNG_WRITE_SUPPORTED
png_write_end(write_ptr, write_end_info_ptr); png_write_end(write_ptr, write_end_info_ptr);
#endif
#ifdef PNG_EASY_ACCESS_SUPPORTED #ifdef PNG_EASY_ACCESS_SUPPORTED
if(verbose) if(verbose)
@ -1112,11 +1167,20 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
#endif #endif
png_debug(0, "Destroying data structs\n"); png_debug(0, "Destroying data structs\n");
#ifdef SINGLE_ROWBUF_ALLOC
png_debug(1, "destroying row_buf for read_ptr\n");
png_free(read_ptr, row_buf); png_free(read_ptr, row_buf);
row_buf=NULL; row_buf=NULL;
#endif /* SINGLE_ROWBUF_ALLOC */
png_debug(1, "destroying read_ptr, read_info_ptr, end_info_ptr\n");
png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr); png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr);
#ifdef PNG_WRITE_SUPPORTED
png_debug(1, "destroying write_end_info_ptr\n");
png_destroy_info_struct(write_ptr, &write_end_info_ptr); png_destroy_info_struct(write_ptr, &write_end_info_ptr);
png_debug(1, "destroying write_ptr, write_info_ptr\n");
png_destroy_write_struct(&write_ptr, &write_info_ptr); png_destroy_write_struct(&write_ptr, &write_info_ptr);
#endif
png_debug(0, "Destruction complete.\n");
FCLOSE(fpin); FCLOSE(fpin);
FCLOSE(fpout); FCLOSE(fpout);
@ -1458,4 +1522,4 @@ main(int argc, char *argv[])
} }
/* Generate a compiler error if there is an old png.h in the search path. */ /* Generate a compiler error if there is an old png.h in the search path. */
typedef version_1_0_9 your_png_h_is_not_version_1_0_9; typedef version_1_0_10beta1 your_png_h_is_not_version_1_0_10beta1;

View File

@ -1,7 +1,7 @@
/* pngtrans.c - transforms the data in a row (used by both readers and writers) /* pngtrans.c - transforms the data in a row (used by both readers and writers)
* *
* libpng 1.0.9 - January 31, 2001 * libpng 1.0.10beta1 - March 14, 2001
* For conditions of distribution and use, see copyright notice in png.h * For conditions of distribution and use, see copyright notice in png.h
* Copyright (c) 1998-2001 Glenn Randers-Pehrson * Copyright (c) 1998-2001 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)

View File

@ -2,7 +2,7 @@
* *
* For Intel x86 CPU and Microsoft Visual C++ compiler * For Intel x86 CPU and Microsoft Visual C++ compiler
* *
* libpng 1.0.9 - January 31, 2001 * libpng 1.0.10beta1 - March 14, 2001
* For conditions of distribution and use, see copyright notice in png.h * For conditions of distribution and use, see copyright notice in png.h
* Copyright (c) 1998-2001 Glenn Randers-Pehrson * Copyright (c) 1998-2001 Glenn Randers-Pehrson
* Copyright (c) 1998, Intel Corporation * Copyright (c) 1998, Intel Corporation
@ -382,6 +382,8 @@ end8:
incr1 = (disp)*pixel_bytes; incr1 = (disp)*pixel_bytes;
for (i = initial_val; i < final_val; i += incr1) for (i = initial_val; i < final_val; i += incr1)
{ {
if (pixel_bytes > (png_size_t)(final_val-i))
pixel_bytes = (png_size_t)(final_val-i);
png_memcpy(dstptr, srcptr, pixel_bytes); png_memcpy(dstptr, srcptr, pixel_bytes);
srcptr += incr1; srcptr += incr1;
dstptr += incr1; dstptr += incr1;
@ -493,6 +495,8 @@ end16:
incr1 = (disp)*pixel_bytes; incr1 = (disp)*pixel_bytes;
for (i = initial_val; i < final_val; i += incr1) for (i = initial_val; i < final_val; i += incr1)
{ {
if (pixel_bytes > (png_size_t)(final_val-i))
pixel_bytes = (png_size_t)(final_val-i);
png_memcpy(dstptr, srcptr, pixel_bytes); png_memcpy(dstptr, srcptr, pixel_bytes);
srcptr += incr1; srcptr += incr1;
dstptr += incr1; dstptr += incr1;
@ -623,6 +627,8 @@ end24:
incr1 = (disp)*pixel_bytes; incr1 = (disp)*pixel_bytes;
for (i = initial_val; i < final_val; i += incr1) for (i = initial_val; i < final_val; i += incr1)
{ {
if (pixel_bytes > (png_size_t)(final_val-i))
pixel_bytes = (png_size_t)(final_val-i);
png_memcpy(dstptr, srcptr, pixel_bytes); png_memcpy(dstptr, srcptr, pixel_bytes);
srcptr += incr1; srcptr += incr1;
dstptr += incr1; dstptr += incr1;
@ -762,6 +768,8 @@ end32:
incr1 = (disp)*pixel_bytes; incr1 = (disp)*pixel_bytes;
for (i = initial_val; i < final_val; i += incr1) for (i = initial_val; i < final_val; i += incr1)
{ {
if (pixel_bytes > (png_size_t)(final_val-i))
pixel_bytes = (png_size_t)(final_val-i);
png_memcpy(dstptr, srcptr, pixel_bytes); png_memcpy(dstptr, srcptr, pixel_bytes);
srcptr += incr1; srcptr += incr1;
dstptr += incr1; dstptr += incr1;
@ -919,6 +927,8 @@ end48:
incr1 = (disp)*pixel_bytes; incr1 = (disp)*pixel_bytes;
for (i = initial_val; i < final_val; i += incr1) for (i = initial_val; i < final_val; i += incr1)
{ {
if (pixel_bytes > (png_size_t)(final_val-i))
pixel_bytes = (png_size_t)(final_val-i);
png_memcpy(dstptr, srcptr, pixel_bytes); png_memcpy(dstptr, srcptr, pixel_bytes);
srcptr += incr1; srcptr += incr1;
dstptr += incr1; dstptr += incr1;
@ -947,6 +957,8 @@ end48:
incr1 = (disp)*pixel_bytes; incr1 = (disp)*pixel_bytes;
for (i = initial_val; i < final_val; i += incr1) for (i = initial_val; i < final_val; i += incr1)
{ {
if (pixel_bytes > (png_size_t)(final_val-i))
pixel_bytes = (png_size_t)(final_val-i);
png_memcpy(dp, sptr, pixel_bytes); png_memcpy(dp, sptr, pixel_bytes);
sptr += incr1; sptr += incr1;
dp += incr1; dp += incr1;

View File

@ -1,7 +1,7 @@
/* pngwio.c - functions for data output /* pngwio.c - functions for data output
* *
* libpng 1.0.9 - January 31, 2001 * libpng 1.0.10beta1 - March 14, 2001
* For conditions of distribution and use, see copyright notice in png.h * For conditions of distribution and use, see copyright notice in png.h
* Copyright (c) 1998-2001 Glenn Randers-Pehrson * Copyright (c) 1998-2001 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
@ -17,6 +17,7 @@
#define PNG_INTERNAL #define PNG_INTERNAL
#include "png.h" #include "png.h"
#ifdef PNG_WRITE_SUPPORTED
/* Write the data to whatever output you are using. The default routine /* Write the data to whatever output you are using. The default routine
writes to a file pointer. Note that this routine sometimes gets called writes to a file pointer. Note that this routine sometimes gets called
@ -224,3 +225,4 @@ void *png_far_to_near(png_structp png_ptr,png_voidp ptr, int check)
} }
# endif # endif
# endif # endif
#endif /* PNG_WRITE_SUPPORTED */

View File

@ -1,7 +1,7 @@
/* pngwrite.c - general routines to write a PNG file /* pngwrite.c - general routines to write a PNG file
* *
* libpng 1.0.9 - January 31, 2001 * libpng 1.0.10beta1 - March 14, 2001
* For conditions of distribution and use, see copyright notice in png.h * For conditions of distribution and use, see copyright notice in png.h
* Copyright (c) 1998-2001 Glenn Randers-Pehrson * Copyright (c) 1998-2001 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
@ -11,6 +11,7 @@
/* get internal access to png.h */ /* get internal access to png.h */
#define PNG_INTERNAL #define PNG_INTERNAL
#include "png.h" #include "png.h"
#ifdef PNG_WRITE_SUPPORTED
/* Writes all the PNG information. This is the suggested way to use the /* Writes all the PNG information. This is the suggested way to use the
* library. If you have a new chunk to add, make a function to write it, * library. If you have a new chunk to add, make a function to write it,
@ -1363,3 +1364,4 @@ png_write_png(png_structp png_ptr, png_infop info_ptr,
/* quiet compiler warnings */ return; /* quiet compiler warnings */ return;
} }
#endif #endif
#endif /* PNG_WRITE_SUPPORTED */

View File

@ -1,7 +1,7 @@
/* pngwtran.c - transforms the data in a row for PNG writers /* pngwtran.c - transforms the data in a row for PNG writers
* *
* libpng 1.0.9 - January 31, 2001 * libpng 1.0.10beta1 - March 14, 2001
* For conditions of distribution and use, see copyright notice in png.h * For conditions of distribution and use, see copyright notice in png.h
* Copyright (c) 1998-2001 Glenn Randers-Pehrson * Copyright (c) 1998-2001 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
@ -10,6 +10,7 @@
#define PNG_INTERNAL #define PNG_INTERNAL
#include "png.h" #include "png.h"
#ifdef PNG_WRITE_SUPPORTED
/* Transform the data according to the user's wishes. The order of /* Transform the data according to the user's wishes. The order of
* transformations is significant. * transformations is significant.
@ -559,3 +560,4 @@ png_do_write_intrapixel(png_row_infop row_info, png_bytep row)
} }
} }
#endif /* PNG_MNG_FEATURES_SUPPORTED */ #endif /* PNG_MNG_FEATURES_SUPPORTED */
#endif /* PNG_WRITE_SUPPORTED */

View File

@ -1,7 +1,7 @@
/* pngwutil.c - utilities to write a PNG file /* pngwutil.c - utilities to write a PNG file
* *
* libpng 1.0.9 - January 31, 2001 * libpng 1.0.10beta1 - March 14, 2001
* For conditions of distribution and use, see copyright notice in png.h * For conditions of distribution and use, see copyright notice in png.h
* Copyright (c) 1998-2001 Glenn Randers-Pehrson * Copyright (c) 1998-2001 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger) * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
@ -10,6 +10,7 @@
#define PNG_INTERNAL #define PNG_INTERNAL
#include "png.h" #include "png.h"
#ifdef PNG_WRITE_SUPPORTED
/* Place a 32-bit number into a buffer in PNG byte order. We work /* Place a 32-bit number into a buffer in PNG byte order. We work
* with unsigned numbers for convenience, although one supported * with unsigned numbers for convenience, although one supported
@ -534,7 +535,8 @@ png_write_PLTE(png_structp png_ptr, png_colorp palette, png_uint_32 num_pal)
png_debug(1, "in png_write_PLTE\n"); png_debug(1, "in png_write_PLTE\n");
if (( if ((
#if defined(PNG_MNG_FEATURES_SUPPORTED) #if defined(PNG_MNG_FEATURES_SUPPORTED) || \
defined (PNG_WRITE_EMPTY_PLTE_SUPPORTED)
!(png_ptr->mng_features_permitted & PNG_FLAG_MNG_EMPTY_PLTE) && !(png_ptr->mng_features_permitted & PNG_FLAG_MNG_EMPTY_PLTE) &&
#endif #endif
num_pal == 0) || num_pal > 256) num_pal == 0) || num_pal > 256)
@ -1017,7 +1019,8 @@ png_write_bKGD(png_structp png_ptr, png_color_16p back, int color_type)
if (color_type == PNG_COLOR_TYPE_PALETTE) if (color_type == PNG_COLOR_TYPE_PALETTE)
{ {
if ( if (
#if defined(PNG_MNG_FEATURES_SUPPORTED) #if defined(PNG_MNG_FEATURES_SUPPORTED) || \
defined (PNG_WRITE_EMPTY_PLTE_SUPPORTED)
(png_ptr->num_palette || (png_ptr->num_palette ||
(!(png_ptr->mng_features_permitted & PNG_FLAG_MNG_EMPTY_PLTE))) && (!(png_ptr->mng_features_permitted & PNG_FLAG_MNG_EMPTY_PLTE))) &&
#endif #endif
@ -2631,3 +2634,4 @@ png_write_filtered_row(png_structp png_ptr, png_bytep filtered_row)
} }
#endif #endif
} }
#endif /* PNG_WRITE_SUPPORTED */

View File

@ -1,5 +1,5 @@
Microsoft Developer Studio Build File, Format Version 6.00 for Microsoft Developer Studio Build File, Format Version 6.00 for
libpng 1.0.9 (January 31, 2001) and zlib libpng 1.0.10beta1 (March 14, 2001) and zlib
Copyright (C) 2000 Simon-Pierre Cadieux Copyright (C) 2000 Simon-Pierre Cadieux
For conditions of distribution and use, see copyright notice in png.h For conditions of distribution and use, see copyright notice in png.h

View File

@ -6,7 +6,7 @@ LIBRARY
DESCRIPTION "PNG image compression library for Windows" DESCRIPTION "PNG image compression library for Windows"
EXPORTS EXPORTS
;Version 1.0.9 ;Version 1.0.10beta1
png_build_grayscale_palette @1 png_build_grayscale_palette @1
png_check_sig @2 png_check_sig @2
png_chunk_error @3 png_chunk_error @3

View File

@ -8,9 +8,9 @@ libpng for WindowsCE Rel.1.0
Introduction Introduction
============ ============
This is libpng 1.0.9 ported to WindowsCE 2.0 and 2.11. This is libpng 1.0.10beta1 ported to WindowsCE 2.0 and 2.11.
libpng 1.0.9 is a PNG reference library. libpng 1.0.10beta1 is a PNG reference library.
See README, a document of original libpng 1.0.9. See README, a document of original libpng 1.0.10beta1.
zlib for WindowsCE zlib for WindowsCE
================== ==================
@ -23,7 +23,7 @@ This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
arising from the use of this software. arising from the use of this software.
See README and LICENSE, documents of original libpng 1.0.9, for conditions See README and LICENSE, documents of original libpng 1.0.10beta1, for conditions
of use and distribution. of use and distribution.
Files Files

View File

@ -24,7 +24,7 @@ libpng
になったいかなる被害についても、作者、配布者、その他利用者以外の人物、 になったいかなる被害についても、作者、配布者、その他利用者以外の人物、
団体に責任をとる義務はないものとします。 団体に責任をとる義務はないものとします。
その他、このソフトウェアの利用条件については、原版である libpng 1.0.9 その他、このソフトウェアの利用条件については、原版である libpng 1.0.10beta1
準拠するものとします。詳しくは、付属の README,LICENSE をお読みください。 準拠するものとします。詳しくは、付属の README,LICENSE をお読みください。
収録内容 収録内容

View File

@ -5,7 +5,7 @@
LIBRARY lpngce LIBRARY lpngce
EXPORTS EXPORTS
;Version 1.0.9 ;Version 1.0.10beta1
png_build_grayscale_palette @1 png_build_grayscale_palette @1
png_check_sig @2 png_check_sig @2
png_chunk_error @3 png_chunk_error @3

View File

@ -18,7 +18,7 @@ RM = rm -f
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not # read libpng.txt or png.h to see why PNGMAJ is 2. You should not
# have to change it. # have to change it.
PNGMAJ = 2 PNGMAJ = 2
PNGMIN = 1.0.9 PNGMIN = 1.0.10beta1
PNGVER = $(PNGMAJ).$(PNGMIN) PNGVER = $(PNGMAJ).$(PNGMIN)
prefix=/usr/local prefix=/usr/local

View File

@ -13,7 +13,7 @@ ZLIBINC=/usr/local/include
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not # read libpng.txt or png.h to see why PNGMAJ is 2. You should not
# have to change it. # have to change it.
PNGMAJ = 2 PNGMAJ = 2
PNGMIN = 1.0.9 PNGMIN = 1.0.10beta1
PNGVER = $(PNGMAJ).$(PNGMIN) PNGVER = $(PNGMAJ).$(PNGMIN)
ALIGN= ALIGN=

View File

@ -39,9 +39,9 @@ CFLAGS=-I$(ZLIBINC) -Wall -O3 $(ALIGN) -funroll-loops \
# have to change it. # have to change it.
PNGMAJ = 2 PNGMAJ = 2
#PNGDLL = $%DLLNUM% # msvc #PNGDLL = $%DLLNUM% # msvc
PNGDLL = 2 # cygwin 1.0.9 PNGDLL = 2 # cygwin 1.0.10beta1
PNGMIN = 1.0.9 PNGMIN = 1.0.10beta1
PNGMIN_BASE = 1.0.9 PNGMIN_BASE = 1.0.10
PNGVER = $(PNGMAJ).$(PNGMIN) PNGVER = $(PNGMAJ).$(PNGMIN)
SHAREDLIB=cygpng$(PNGDLL).dll SHAREDLIB=cygpng$(PNGDLL).dll

View File

@ -17,7 +17,7 @@ ZLIBINC=../zlib
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not # read libpng.txt or png.h to see why PNGMAJ is 2. You should not
# have to change it. # have to change it.
PNGMAJ = 2 PNGMAJ = 2
PNGMIN = 1.0.9 PNGMIN = 1.0.10beta1
PNGVER = $(PNGMAJ).$(PNGMIN) PNGVER = $(PNGMAJ).$(PNGMIN)
CC=cc CC=cc
@ -64,7 +64,7 @@ install: libpng.a libpng.so.$(PNGVER)
chmod 644 $(LIBPATH)/libpng.a chmod 644 $(LIBPATH)/libpng.a
chmod 644 $(LIBPATH)/libpng.so.$(PNGVER) chmod 644 $(LIBPATH)/libpng.so.$(PNGVER)
-@/bin/rm -f $(LIBPATH)/libpng.so.$(PNGMAJ) $(LIBPATH)/libpng.so -@/bin/rm -f $(LIBPATH)/libpng.so.$(PNGMAJ) $(LIBPATH)/libpng.so
(cd $(LIBPATH)); ln -f -s libpng.so.$(PNGVER) libpng.so.$(PNGMAJ); \ (cd $(LIBPATH); ln -f -s libpng.so.$(PNGVER) libpng.so.$(PNGMAJ); \
ln -f -s libpng.so.$(PNGMAJ) libpng.so) ln -f -s libpng.so.$(PNGMAJ) libpng.so)
clean: clean:

View File

@ -51,7 +51,7 @@ RANLIB=ranlib
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not # read libpng.txt or png.h to see why PNGMAJ is 2. You should not
# have to change it. # have to change it.
PNGMAJ = 2 PNGMAJ = 2
PNGMIN = 1.0.9 PNGMIN = 1.0.10beta1
PNGVER = $(PNGMAJ).$(PNGMIN) PNGVER = $(PNGMAJ).$(PNGMIN)
INCPATH=$(prefix)/include INCPATH=$(prefix)/include

112
scripts/makefile.hpgcc Normal file
View File

@ -0,0 +1,112 @@
# makefile for libpng on HP-UX using GCC
# Copyright (C) 2001, Laurent faillie
# Copyright (C) 1998, 1999 Greg Roelofs
# Copyright (C) 1996, 1997 Andreas Dilger
# For conditions of distribution and use, see copyright notice in png.h
CC=gcc
# where "make install" puts libpng.a, libpng.so*, png.h and pngconf.h
prefix=/usr/local
# Where the zlib library and include files are located
ZLIBLIB=/opt/zlib/lib
ZLIBINC=/opt/zlib/include
ALIGN=
# for i386:
#ALIGN=-malign-loops=2 -malign-functions=2
WARNMORE=-Wwrite-strings -Wpointer-arith -Wshadow \
-Wmissing-declarations -Wtraditional -Wcast-align \
-Wstrict-prototypes -Wmissing-prototypes #-Wconversion
# for pgcc version 2.95.1, -O3 is buggy; don't use it.
CFLAGS=-I$(ZLIBINC) -Wall -O3 -funroll-loops \
$(ALIGN) # $(WARNMORE) -g -DPNG_DEBUG=5
#LDFLAGS=-L. -Wl,-rpath,. -L$(ZLIBLIB) -Wl,-rpath,$(ZLIBLIB) -lpng -lz -lm
LDFLAGS=-L. -L$(ZLIBLIB) -lpng -lz -lm
RANLIB=ranlib
#RANLIB=echo
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not
# have to change it.
PNGMAJ = 2
PNGMIN = 1.0.10beta1
PNGVER = $(PNGMAJ).$(PNGMIN)
INCPATH=$(prefix)/include
LIBPATH=$(prefix)/lib
OBJS = png.o pngset.o pngget.o pngrutil.o pngtrans.o pngwutil.o \
pngread.o pngrio.o pngwio.o pngwrite.o pngrtran.o \
pngwtran.o pngmem.o pngerror.o pngpread.o
OBJSDLL = $(OBJS:.o=.pic.o)
.SUFFIXES: .c .o .pic.o
.c.pic.o:
$(CC) -c $(CFLAGS) -fPIC -o $@ $*.c
all: libpng.a libpng.sl pngtest
libpng.a: $(OBJS)
ar rc $@ $(OBJS)
$(RANLIB) $@
libpng.sl: libpng.sl.$(PNGMAJ)
ln -f -s libpng.sl.$(PNGMAJ) libpng.sl
libpng.sl.$(PNGMAJ): libpng.sl.$(PNGVER)
ln -f -s libpng.sl.$(PNGVER) libpng.sl.$(PNGMAJ)
libpng.sl.$(PNGVER): $(OBJSDLL)
$(LD) -b -L$(ZLIBLIB) +s +b $(ZLIBLIB) \
+h libpng.sl.$(PNGMAJ) -o libpng.sl.$(PNGVER) $(OBJSDLL) -lz
pngtest: pngtest.o libpng.sl
$(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
test: pngtest
./pngtest
install: libpng.a libpng.sl.$(PNGVER)
-@if [ ! -d $(INCPATH) ]; then mkdir $(INCPATH); fi
-@if [ ! -d $(LIBPATH) ]; then mkdir $(LIBPATH); fi
cp png.h pngconf.h $(INCPATH)
chmod 644 $(INCPATH)/png.h $(INCPATH)/pngconf.h
cp libpng.a libpng.sl.$(PNGVER) $(LIBPATH)
chmod 755 $(LIBPATH)/libpng.sl.$(PNGVER)
-@/bin/rm -f $(LIBPATH)/libpng.sl.$(PNGMAJ) $(LIBPATH)/libpng.sl
(cd $(LIBPATH); ln -sf libpng.sl.$(PNGVER) libpng.sl.$(PNGMAJ); \
ln -sf libpng.sl.$(PNGMAJ) libpng.sl)
clean:
/bin/rm -f *.o libpng.a libpng.sl* pngtest pngout.png
DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
writelock:
chmod a-w *.[ch35] $(DOCS) scripts/*
# DO NOT DELETE THIS LINE -- make depend depends on it.
png.o png.pic.o: png.h pngconf.h
pngerror.o pngerror.pic.o: png.h pngconf.h
pngrio.o pngrio.pic.o: png.h pngconf.h
pngwio.o pngwio.pic.o: png.h pngconf.h
pngmem.o pngmem.pic.o: png.h pngconf.h
pngset.o pngset.pic.o: png.h pngconf.h
pngget.o pngget.pic.o: png.h pngconf.h
pngread.o pngread.pic.o: png.h pngconf.h
pngrtran.o pngrtran.pic.o: png.h pngconf.h
pngrutil.o pngrutil.pic.o: png.h pngconf.h
pngtrans.o pngtrans.pic.o: png.h pngconf.h
pngwrite.o pngwrite.pic.o: png.h pngconf.h
pngwtran.o pngwtran.pic.o: png.h pngconf.h
pngwutil.o pngwutil.pic.o: png.h pngconf.h
pngpread.o pngpread.pic.o: png.h pngconf.h
pngtest.o: png.h pngconf.h

View File

@ -10,6 +10,7 @@ ZLIBINC=/opt/zlib/include
CC=cc CC=cc
CFLAGS=-I$(ZLIBINC) -O -Ae +DA1.1 +DS2.0 CFLAGS=-I$(ZLIBINC) -O -Ae +DA1.1 +DS2.0
# Caution: be sure you have built zlib with the same CFLAGS.
CCFLAGS=-I$(ZLIBINC) -O -Ae +DA1.1 +DS2.0 CCFLAGS=-I$(ZLIBINC) -O -Ae +DA1.1 +DS2.0
LDFLAGS=-L. -L$(ZLIBLIB) -lpng -lz -lm LDFLAGS=-L. -L$(ZLIBLIB) -lpng -lz -lm
@ -18,7 +19,7 @@ RANLIB=ranlib
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not # read libpng.txt or png.h to see why PNGMAJ is 2. You should not
# have to change it. # have to change it.
PNGMAJ = 2 PNGMAJ = 2
PNGMIN = 1.0.9 PNGMIN = 1.0.10beta1
PNGVER = $(PNGMAJ).$(PNGMIN) PNGVER = $(PNGMAJ).$(PNGMIN)
# where make install puts libpng.a and png.h # where make install puts libpng.a and png.h

View File

@ -34,7 +34,7 @@ RANLIB=ranlib
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not # read libpng.txt or png.h to see why PNGMAJ is 2. You should not
# have to change it. # have to change it.
PNGMAJ = 2 PNGMAJ = 2
PNGMIN = 1.0.9 PNGMIN = 1.0.10beta1
PNGVER = $(PNGMAJ).$(PNGMIN) PNGVER = $(PNGMAJ).$(PNGMIN)
INCPATH=$(prefix)/include INCPATH=$(prefix)/include

View File

@ -25,7 +25,7 @@ RANLIB=echo
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not # read libpng.txt or png.h to see why PNGMAJ is 2. You should not
# have to change it. # have to change it.
PNGMAJ = 2 PNGMAJ = 2
PNGMIN = 1.0.9 PNGMIN = 1.0.10beta1
PNGVER = $(PNGMAJ).$(PNGMIN) PNGVER = $(PNGMAJ).$(PNGMIN)
INCPATH=$(prefix)/include INCPATH=$(prefix)/include

View File

@ -19,8 +19,8 @@ CFLAGS=-I$(ZLIBINC) -O2 $(WARNMORE) -fPIC -mabi=n32
LDFLAGS=-L. -L$(ZLIBLIB) -lpng -lz -lm LDFLAGS=-L. -L$(ZLIBLIB) -lpng -lz -lm
LDSHARED=gcc -shared LDSHARED=gcc -shared
VER=1.0.9 VER=1.0.10beta1
LIBS=libpng.so.1.0.9 LIBS=libpng.so.1.0.10beta1
SHAREDLIB=libpng.so SHAREDLIB=libpng.so
libdir=$(prefix)/lib32 libdir=$(prefix)/lib32
@ -59,12 +59,12 @@ install: libpng.a
cp libpng.a $(prefix)/lib cp libpng.a $(prefix)/lib
chmod 644 $(prefix)/lib/libpng.a chmod 644 $(prefix)/lib/libpng.a
cp $(SHAREDLIB).$(VER) $(libdir); chmod 755 $(SHAREDLIB).$(VER) cp $(SHAREDLIB).$(VER) $(libdir); chmod 755 $(SHAREDLIB).$(VER)
cd $(libdir); if test -f $(SHAREDLIB).$(VER); then \ (cd $(libdir); if test -f $(SHAREDLIB).$(VER); then \
rm -f $(SHAREDLIB) $(SHAREDLIB).1; \ rm -f $(SHAREDLIB) $(SHAREDLIB).1; \
ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB); \ ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB); \
ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB).1; \ ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB).1; \
(ldconfig || true) >/dev/null 2>&1; \ (ldconfig || true) >/dev/null 2>&1; \
fi fi)
clean: clean:
rm -f *.o libpng.a pngtest pngout.png rm -f *.o libpng.a pngtest pngout.png

View File

@ -20,11 +20,12 @@ CC=cc
WARNMORE=-fullwarn WARNMORE=-fullwarn
# You can add the -n32 option; then zlib must also be compiled with -n32 # You can add the -n32 option; then zlib must also be compiled with -n32
# Note: -KPIC is the default anyhow # Note: -KPIC is the default anyhow
CFLAGS=-I$(ZLIBINC) -O $(WARNMORE) -KPIC # -g -DPNG_DEBUG=5 #CFLAGS=-I$(ZLIBINC) -O $(WARNMORE) -KPIC -DPNG_USE_PNGGCCRD # -g -DPNG_DEBUG=5
CFLAGS=-I$(ZLIBINC) -O $(WARNMORE) -DPNG_USE_PNGGCCRD -DPNG_NO_ASSEMBLER_CODE
LDFLAGS=-L. -L$(ZLIBLIB) -lpng -lz -lm LDFLAGS=-L. -L$(ZLIBLIB) -lpng -lz -lm
LDSHARED=cc -shared LDSHARED=cc -shared
VER=1.0.9 VER=1.0.10beta1
SONUM=2 SONUM=2
SHAREDLIB=libpng.so SHAREDLIB=libpng.so
libdir=$(prefix) libdir=$(prefix)
@ -33,7 +34,7 @@ libdir=$(prefix)
RANLIB=echo RANLIB=echo
#RANLIB=ranlib #RANLIB=ranlib
OBJS = png.o pngset.o pngget.o pngrutil.o pngtrans.o pngwutil.o \ OBJS = pnggccrd.o png.o pngset.o pngget.o pngrutil.o pngtrans.o pngwutil.o \
pngread.o pngrio.o pngwio.o pngwrite.o pngrtran.o \ pngread.o pngrio.o pngwio.o pngwrite.o pngrtran.o \
pngwtran.o pngmem.o pngerror.o pngpread.o pngwtran.o pngmem.o pngerror.o pngpread.o
@ -68,12 +69,12 @@ install: libpng.a
chmod 644 $(prefix)/lib/libpng.a chmod 644 $(prefix)/lib/libpng.a
install-shared: $(SHAREDLIB).$(SONUM).$(VER) install-shared: $(SHAREDLIB).$(SONUM).$(VER)
cp $(SHAREDLIB).$(SONUM).$(VER) $(libdir); cp $(SHAREDLIB).$(SONUM).$(VER) $(libdir)
chmod 755 $(SHAREDLIB).$(SONUM).$(VER) chmod 755 $(SHAREDLIB).$(SONUM).$(VER)
cd $(libdir); (cd $(libdir)
rm -f $(SHAREDLIB) $(SHAREDLIB).$(SONUM); rm -f $(SHAREDLIB) $(SHAREDLIB).$(SONUM)
ln -s $(SHAREDLIB).$(SONUM).$(VER) $(SHAREDLIB).$(SONUM); ln -s $(SHAREDLIB).$(SONUM).$(VER) $(SHAREDLIB).$(SONUM)
ln -s $(SHAREDLIB).$(SONUM) $(SHAREDLIB); ln -s $(SHAREDLIB).$(SONUM) $(SHAREDLIB))
clean: clean:
rm -f *.o libpng.a pngtest pngout.png $(SHAREDLIB).* rm -f *.o libpng.a pngtest pngout.png $(SHAREDLIB).*
@ -100,4 +101,5 @@ pngwrite.o: png.h pngconf.h
pngwtran.o: png.h pngconf.h pngwtran.o: png.h pngconf.h
pngwutil.o: png.h pngconf.h pngwutil.o: png.h pngconf.h
pngpread.o: png.h pngconf.h pngpread.o: png.h pngconf.h
pnggccrd.o: png.h pngconf.h

View File

@ -31,7 +31,7 @@ RANLIB=echo
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not # read libpng.txt or png.h to see why PNGMAJ is 2. You should not
# have to change it. # have to change it.
PNGMAJ = 2 PNGMAJ = 2
PNGMIN = 1.0.9 PNGMIN = 1.0.10beta1
PNGVER = $(PNGMAJ).$(PNGMIN) PNGVER = $(PNGMAJ).$(PNGMIN)
INCPATH=$(prefix)/include INCPATH=$(prefix)/include

View File

@ -5,8 +5,8 @@ unit pngdef;
interface interface
const const
PNG_LIBPNG_VER_STRING = '1.0.9'; PNG_LIBPNG_VER_STRING = '1.0.10beta1';
PNG_LIBPNG_VER = 10009; PNG_LIBPNG_VER = 10010;
type type
png_uint_32 = Cardinal; png_uint_32 = Cardinal;