提交 fbbb5ecb 编写于 作者: G Glenn Randers-Pehrson

Imported from libpng-1.0.9beta10.tar

上级 5e5c1e1f
Libpng 1.0.9beta1 - November 10, 2000 Libpng 1.0.9beta10 - January 16, 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.
...@@ -15,7 +15,6 @@ Changes since the last public release (1.0.8): ...@@ -15,7 +15,6 @@ Changes since the last public release (1.0.8):
features, for testing purposes. features, for testing purposes.
Make sure PNGAPI and PNG_IMPEXP are defined in pngconf.h. Make sure PNGAPI and PNG_IMPEXP are defined in pngconf.h.
Revised the 3 instances of WRITEFILE in pngtest.c. Revised the 3 instances of WRITEFILE in pngtest.c.
Relocated "msvc" and "wince" project subdirectories into "dll" subdirectory.
Updated png.rc in dll/msvc project Updated png.rc in dll/msvc project
Revised makefile.dec to define and use LIBPATH and INCPATH Revised makefile.dec to define and use LIBPATH and INCPATH
Increased size of global png_libpng_ver[] array from 12 to 18 chars. Increased size of global png_libpng_ver[] array from 12 to 18 chars.
...@@ -25,6 +24,33 @@ Changes since the last public release (1.0.8): ...@@ -25,6 +24,33 @@ Changes since the last public release (1.0.8):
Revised makefile.cygwin Revised makefile.cygwin
Fixed bugs in iCCP support in pngrutil.c and pngwutil.c. Fixed bugs in iCCP support in pngrutil.c and pngwutil.c.
Replaced png_set_empty_plte_permitted() with png_permit_mng_features(). 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, png_permit_mng_features, and png_mmx_supported 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.
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
......
...@@ -379,7 +379,7 @@ version 1.0.2a [December 30, 1998] ...@@ -379,7 +379,7 @@ version 1.0.2a [December 30, 1998]
Changed "ln -sf" to "ln -s -f" in makefile.s2x, makefile.lnx, and makefile.sco. Changed "ln -sf" to "ln -s -f" in makefile.s2x, makefile.lnx, and makefile.sco.
Removed lines after Dynamic Dependencies" in makefile.aco . Removed lines after Dynamic Dependencies" in makefile.aco .
Revised makefile.dec to make a shared library (Jeremie Petit). Revised makefile.dec to make a shared library (Jeremie Petit).
Removed trailing blanks from all files. Removed trailing blanks from all files.
version 1.0.2a [January 6, 1999] version 1.0.2a [January 6, 1999]
Removed misplaced #endif and #ifdef PNG_NO_EXTERN near the end of png.h Removed misplaced #endif and #ifdef PNG_NO_EXTERN near the end of png.h
Added "if" tests to silence complaints about unused png_ptr in png.h and png.c Added "if" tests to silence complaints about unused png_ptr in png.h and png.c
...@@ -718,7 +718,7 @@ version 1.0.6i [May 2, 2000] ...@@ -718,7 +718,7 @@ version 1.0.6i [May 2, 2000]
the high-level interface, and unknown chunks support (all new in 1.0.6). the high-level interface, and unknown chunks support (all new in 1.0.6).
This was necessary because of old applications that allocate the structs This was necessary because of old applications that allocate the structs
directly as authors were instructed to do in libpng-0.88 and earlier, directly as authors were instructed to do in libpng-0.88 and earlier,
instead of using png_create_*(). instead of using png_create_*().
Added modes PNG_CREATED_READ_STRUCT and PNG_CREATED_WRITE_STRUCT which Added modes PNG_CREATED_READ_STRUCT and PNG_CREATED_WRITE_STRUCT which
can be used to detect codes that directly allocate the structs, and can be used to detect codes that directly allocate the structs, and
code to check these modes in png_read_init() and png_write_init() and code to check these modes in png_read_init() and png_write_init() and
...@@ -798,7 +798,6 @@ version 1.0.7rc2 [June 28, 2000] ...@@ -798,7 +798,6 @@ version 1.0.7rc2 [June 28, 2000]
Fixed "DJBPP" typo in pnggccrd.c introduced in beta18. Fixed "DJBPP" typo in pnggccrd.c introduced in beta18.
version 1.0.7 [July 1, 2000] version 1.0.7 [July 1, 2000]
Revised the definition of "trans_values" in libpng.3/libpng.txt Revised the definition of "trans_values" in libpng.3/libpng.txt
version 1.0.9beta1 [November 10, 2000]
version 1.0.8beta1 [July 8, 2000] version 1.0.8beta1 [July 8, 2000]
Added png_free(png_ptr, key) two places in pngpread.c to stop memory leaks. Added png_free(png_ptr, key) two places in pngpread.c to stop memory leaks.
Changed PNG_NO_STDIO to PNG_NO_CONSOLE_IO, several places in pngrutil.c and Changed PNG_NO_STDIO to PNG_NO_CONSOLE_IO, several places in pngrutil.c and
...@@ -843,6 +842,46 @@ version 1.0.9beta1 [November 10, 2000] ...@@ -843,6 +842,46 @@ version 1.0.9beta1 [November 10, 2000]
Revised makefile.cygwin Revised makefile.cygwin
Fixed bugs in iCCP support in pngrutil.c and pngwutil.c. Fixed bugs in iCCP support in pngrutil.c and pngwutil.c.
Replaced png_set_empty_plte_permitted() with png_permit_mng_features(). Replaced png_set_empty_plte_permitted() with png_permit_mng_features().
version 1.0.9beta2 [November 19, 2000]
Renamed the "dll" subdirectory "projects".
Added borland project files to "projects" 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.
version 1.0.9beta3 [November 23, 2000]
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.
version 1.0.9beta4 [December 1, 2000]
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().
version 1.0.9beta5 [December 15, 2000]
Added support for filter method 64 (for PNG datastreams embedded in MNG)
version 1.0.9beta6 [December 18, 2000]
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".
version 1.0.9rc1 [December 23, 2000]
Revised test for PNG_HAVE_PNG_SIGNATURE in pngrutil.c
Fixed error handling of unknown compression type in png_decompress_chunk().
In pngconf.h, define __cdecl when _MSC_VER is defined.
version 1.0.9beta7 [December 28, 2000]
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.
version 1.0.9beta8 [January 12, 2001]
Moved pngasmrd.h into pngconf.h.
Improved handling of out-of-spec garbage iCCP chunks generated by PhotoShop.
version 1.0.9beta9 [January 15, 2001]
Added png_set_invalid, png_permit_mng_features, and png_mmx_supported to
wince and msvc project module definition files.
Minor revision of makefile.cygwin.
Fixed bug with progressive reading of narrow interlaced images in pngpread.c
version 1.0.9beta10 [January 16, 2001]
Do not typedef png_FILE_io in pngconf.h when PNG_NO_STDIO is defined.
Fixe "png_mmx_supported" typo in project definition files
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
......
Installing libpng version 1.0.9beta1 - November 10, 2000 Installing libpng version 1.0.9beta10 - January 16, 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 ...@@ -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.9beta1" or "lpng109" and "zlib-1.1.3" might be called "libpng-1.0.9beta10" 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:
...@@ -27,7 +27,8 @@ Your directory structure should look like this: ...@@ -27,7 +27,8 @@ Your directory structure should look like this:
pngminus pngminus
pngsuite pngsuite
visupng visupng
dll projects
borland
msvc msvc
wince wince
scripts scripts
...@@ -52,29 +53,31 @@ instructions in the README* files. ...@@ -52,29 +53,31 @@ instructions in the README* files.
Else enter the zlib directory and follow the instructions in zlib/README, Else enter the zlib directory and follow the instructions in zlib/README,
then come back here and choose the appropriate makefile.sys in the scripts then come back here and choose the appropriate makefile.sys in the scripts
directory. directory.
The files that are presently available in the scripts directory 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.9beta1) makefile.linux => Linux/ELF makefile (gcc, creates libpng.so.2.1.0.9beta10)
makefile.gcmmx => Linux/ELF makefile (gcc, creates libpng.so.2.1.0.9beta1, makefile.gcmmx => Linux/ELF makefile (gcc, creates libpng.so.2.1.0.9beta10,
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
ansi2knr (Requires ansi2knr.c from ansi2knr (Requires ansi2knr.c from
ftp://ftp.cs.wisc.edu/ghost) ftp://ftp.cs.wisc.edu/ghost)
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.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.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.9beta1) makefile.sggcc => Silicon Graphics (gcc, creates libpng.so.2.1.0.9beta10)
makefile.sunos => Sun makefile makefile.sunos => Sun makefile
makefile.solaris => Solaris 2.X makefile (gcc, creates libpng.so.2.1.0.9beta1) makefile.solaris => Solaris 2.X makefile (gcc, creates libpng.so.2.1.0.9beta10)
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
...@@ -128,4 +131,4 @@ do that, run "make install" in the zlib directory first if necessary). ...@@ -128,4 +131,4 @@ do that, run "make install" in the zlib directory first if necessary).
Further information can be found in the README and libpng.txt Further information can be found in the README and libpng.txt
files, in the individual makefiles, in png.h, in the README files in files, in the individual makefiles, in png.h, in the README files in
subdirectories of the dll directory, and the manual pages libpng.3 and png.5. subdirectories of the LIB directory, and the manual pages libpng.3 and png.5.
Known bugs and suggested enhancements in libpng-1.0.8 Known bugs in libpng-1.0.9
0: November 3, 2000 -- BUG -- incorrect iCCP chunk is written 1: January 16, 2001 -- BUG -- progressive reading narrow interlaced PNGs
The compression_type byte in the iCCP chunk written by libpng is A crash occurs in Mozilla when reading a 2x533 interlaced RGB image.
usually incorrect.
Status: Fixed in libpng-1.0.9beta1
1. October 12, 2000 -- BUG -- pngtest fails
The three WRITEFILE calls in pngtest.c are incorrect. They must be
changed to read
WRITEFILE((png_FILE_p)png_ptr->io_ptr, data, length, check);
WRITEFILE(io_ptr, near_data, length, check);
WRITEFILE(io_ptr, buf, written, err);
2. August 28, 2000 -- BUG -- pnggccrd.c
The interlacing() function has still not been fully converted and
will not compile under gcc-2.95.2; it is currently ifdef'ed out.
STATUS: Fixed in libpng-1.0.9. There were also bugs in pngvcrd.c
which have been fixed. The replacement files are available at the
PNG web site (http://www.libpng.org/pub/png).
3. March 15, 1998 -- OPTIMIZATION -- Kevin Bracey
Loops need to be optimized everywhere
Make them count down instead of up -- Kevin Bracey
Optimizing compilers don't need this, and making
the change would be error prone -- Tom Lane, Glenn R-P
Question whether i-- or --i is better.
STATUS: Under investigation, postponed until after
libpng-2.0.0. About 160 loops will be turned around
in libpng-2.0.x betaxx, for testing.
4. July 4, 1998 -- ENHANCEMENT -- Glenn R-P
libpng-1.0.5 and earlier transform colors to gamma=1.0 space for
merging with background, and then back to the image's gamma. The
bit_depth of the intermediate (gamma=1.0) representation is probably
not sufficient. In the typical gamma=1/2.2 situation, the linear
pixels need about 4 more bits than the gamma-encoded ones, to avoid
loss of precision. A similar situation exists with the rgb_to_gray
operation.
STATUS: under development.
5. September 1999 -- ENHANCEMENT --
It should be possible to use libpng without floating-point arithmetic.
STATUS: Under investigation, implementation postponed until after
libpng-2.0.0.
Much of this was completed in libpng-1.0.6, but gamma compensation
is not yet done in fixed-point arithmetic.
Status: Under investigation. It appears that pngpread.c is not
taking care to skip empty passes.
...@@ -8,7 +8,7 @@ COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: ...@@ -8,7 +8,7 @@ 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.9beta1, November 10, 2000, are libpng versions 1.0.7, July 1, 2000, through 1.0.9beta10, January 16, 2001, are
Copyright (c) 2000 Glenn Randers-Pehrson Copyright (c) 2000 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
...@@ -99,4 +99,4 @@ certification mark of the Open Source Initiative. ...@@ -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
November 10, 2000 January 16, 2001
README for libpng 1.0.9beta1 - November 10, 2000 (shared library 2.1) README for libpng 1.0.9beta10 - January 16, 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.
...@@ -171,7 +171,9 @@ Files in this distribution: ...@@ -171,7 +171,9 @@ Files in this distribution:
pngminus => Simple pnm2png and png2pnm programs pngminus => Simple pnm2png and png2pnm programs
pngsuite => Test images pngsuite => Test images
visupng => Contains a MSVC workspace for VisualPng visupng => Contains a MSVC workspace for VisualPng
dll => Contains project files and workspaces for building DLL projects => Contains project files and workspaces for building DLL
borland => Contains a Borland workspace for building libpng
and zlib
msvc => Contains a Microsoft Visual C++ (MSVC) workspace msvc => Contains a Microsoft Visual C++ (MSVC) workspace
for building libpng and zlib for building libpng and zlib
wince => Contains a Microsoft Visual C++ (Windows CD Toolkit) wince => Contains a Microsoft Visual C++ (Windows CD Toolkit)
...@@ -180,25 +182,27 @@ Files in this distribution: ...@@ -180,25 +182,27 @@ 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.9beta1) (gcc, creates libpng.so.2.1.0.9beta10)
makefile.gcmmx => Linux/ELF makefile (gcc, creates makefile.gcmmx => Linux/ELF makefile (gcc, creates
libpng.so.2.1.0.9beta1, uses assembler code libpng.so.2.1.0.9beta10, 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
ansi2knr (Requires ansi2knr.c from ansi2knr (Requires ansi2knr.c from
ftp://ftp.cs.wisc.edu/ghost) ftp://ftp.cs.wisc.edu/ghost)
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.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.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.9beta1) makefile.sggcc => Silicon Graphics (gcc, creates libpng.so.2.1.0.9beta10)
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.9beta1) (gcc, creates libpng.so.2.1.0.9beta10)
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
......
...@@ -17,3 +17,8 @@ Better filter selection ...@@ -17,3 +17,8 @@ Better filter selection
(counting huffman bits/precompression? filter inertia? filter costs?). (counting huffman bits/precompression? filter inertia? filter costs?).
Histogram creation. Histogram creation.
Text conversion between different code pages (Latin-1 -> Mac and DOS). Text conversion between different code pages (Latin-1 -> Mac and DOS).
Should we always malloc 2^bit_depth PLTE/tRNS/hIST entries for safety?
Build gamma tables using fixed point (and do away with floating point entirely).
Use greater precision when changing to linear gamma for compositing against
background and doing rgb-to-gray transformation.
Investigate pre-incremented loop counters and other loop constructions.
Y2K compliance in libpng: Y2K compliance in libpng:
========================= =========================
November 10, 2000 January 16, 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.9beta1 are Y2K compliant. It is my belief that earlier upward through 1.0.9beta10 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
......
echo " echo "
There is no \"configure\" script for Libpng-1.0.9beta1. Instead, please There is no \"configure\" script for Libpng-1.0.9beta10. 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.
" "
......
# Sample makefile for rpng-x / rpng2-x / wpng for SGI using cc and make.
# Greg Roelofs
# Last modified: 16 January 1000
#
# The programs built by this makefile are described in the book,
# "PNG: The Definitive Guide," by Greg Roelofs (O'Reilly and
# Associates, 1999). Go buy a copy, eh? Buy some for friends
# and family, too. (Not that this is a blatant plug or anything.)
#
# Invoke this makefile from a shell prompt in the usual way; for example:
#
# make -f Makefile.sgi
#
# This makefile assumes libpng and zlib have already been built or downloaded
# and are both installed in /usr/local/{include,lib} (as indicated by the
# PNG* and Z* macros below). Edit as appropriate--choose only ONE each of
# the PNGINC, PNGLIB, ZINC and ZLIB lines.
#
# This makefile builds dynamically linked executables (against libpng and zlib,
# that is), but that can be changed by uncommenting the appropriate PNGLIB and
# ZLIB lines.
# macros --------------------------------------------------------------------
PNGINC = -I/usr/local/include
PNGLIB = -L/usr/local/lib -lpng # dynamically linked against libpng
#PNGLIB = /usr/local/lib/libpng.a # statically linked against libpng
# or:
#PNGINC = -I../..
#PNGLIB = -L../.. -lpng
#PNGLIB = ../../libpng.a
ZINC = -I/usr/local/include
ZLIB = -L/usr/local/lib -lz # dynamically linked against zlib
#ZLIB = /usr/local/lib/libz.a # statically linked against zlib
#ZINC = -I../zlib
#ZLIB = -L../zlib -lz
#ZLIB = ../../../zlib/libz.a
XINC = -I/usr/include/X11 # old-style, stock X distributions
XLIB = -L/usr/lib/X11 -lX11
#XINC = -I/usr/openwin/include # Sun workstations (OpenWindows)
#XLIB = -L/usr/openwin/lib -lX11
#XINC = -I/usr/X11R6/include # new X distributions (XFree86, etc.)
#XLIB = -L/usr/X11R6/lib -lX11
INCS = $(PNGINC) $(ZINC) $(XINC)
RLIBS = $(PNGLIB) $(ZLIB) $(XLIB) -lm
WLIBS = $(PNGLIB) $(ZLIB)
CC = cc
LD = cc
RM = rm -f
CFLAGS = -O -fullwarn $(INCS)
LDFLAGS =
O = .o
E =
RPNG = rpng-x
RPNG2 = rpng2-x
WPNG = wpng
ROBJS = $(RPNG)$(O) readpng$(O)
ROBJS2 = $(RPNG2)$(O) readpng2$(O)
WOBJS = $(WPNG)$(O) writepng$(O)
EXES = $(RPNG)$(E) $(RPNG2)$(E) $(WPNG)$(E)
# implicit make rules -------------------------------------------------------
.c$(O):
$(CC) -c $(CFLAGS) $<
# dependencies --------------------------------------------------------------
all: $(EXES)
$(RPNG)$(E): $(ROBJS)
$(LD) $(LDFLAGS) -o $@ $(ROBJS) $(RLIBS)
$(RPNG2)$(E): $(ROBJS2)
$(LD) $(LDFLAGS) -o $@ $(ROBJS2) $(RLIBS)
$(WPNG)$(E): $(WOBJS)
$(LD) $(LDFLAGS) -o $@ $(WOBJS) $(WLIBS)
$(RPNG)$(O): $(RPNG).c readpng.h
$(RPNG2)$(O): $(RPNG2).c readpng2.h
$(WPNG)$(O): $(WPNG).c writepng.h
readpng$(O): readpng.c readpng.h
readpng2$(O): readpng2.c readpng2.h
writepng$(O): writepng.c writepng.h
# maintenance ---------------------------------------------------------------
clean:
$(RM) $(EXES) $(ROBJS) $(ROBJS2) $(WOBJS)
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
Copyright (c) 1998-2000 Greg Roelofs. All rights reserved. Copyright (c) 1998-2001 Greg Roelofs. All rights reserved.
This software is provided "as is," without warranty of any kind, This software is provided "as is," without warranty of any kind,
express or implied. In no event shall the author or contributors express or implied. In no event shall the author or contributors
...@@ -51,6 +51,7 @@ void readpng2_version_info(void) ...@@ -51,6 +51,7 @@ void readpng2_version_info(void)
{ {
fprintf(stderr, " Compiled with libpng %s; using libpng %s.\n", fprintf(stderr, " Compiled with libpng %s; using libpng %s.\n",
PNG_LIBPNG_VER_STRING, png_libpng_ver); PNG_LIBPNG_VER_STRING, png_libpng_ver);
fprintf(stderr, " Compiled with zlib %s; using zlib %s.\n", fprintf(stderr, " Compiled with zlib %s; using zlib %s.\n",
ZLIB_VERSION, zlib_version); ZLIB_VERSION, zlib_version);
} }
...@@ -110,7 +111,6 @@ int readpng2_init(mainprog_info *mainprog_ptr) ...@@ -110,7 +111,6 @@ int readpng2_init(mainprog_info *mainprog_ptr)
png_set_progressive_read_fn(png_ptr, mainprog_ptr, png_set_progressive_read_fn(png_ptr, mainprog_ptr,
readpng2_info_callback, readpng2_row_callback, readpng2_end_callback); readpng2_info_callback, readpng2_row_callback, readpng2_end_callback);
/* make sure we save our pointers for use in readpng2_decode_data() */ /* make sure we save our pointers for use in readpng2_decode_data() */
mainprog_ptr->png_ptr = png_ptr; mainprog_ptr->png_ptr = png_ptr;
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
Copyright (c) 1998-2000 Greg Roelofs. All rights reserved. Copyright (c) 1998-2001 Greg Roelofs. All rights reserved.
This software is provided "as is," without warranty of any kind, This software is provided "as is," without warranty of any kind,
express or implied. In no event shall the author or contributors express or implied. In no event shall the author or contributors
...@@ -66,6 +66,11 @@ typedef struct _mainprog_info { ...@@ -66,6 +66,11 @@ typedef struct _mainprog_info {
int rowbytes; int rowbytes;
int channels; int channels;
int need_bgcolor; int need_bgcolor;
#if (defined(__i386__) || defined(_M_IX86))
int nommxfilters;
int nommxcombine;
int nommxinterlace;
#endif
int done; int done;
uch bg_red; uch bg_red;
uch bg_green; uch bg_green;
......
...@@ -11,7 +11,6 @@ ...@@ -11,7 +11,6 @@
Meulen for the "diamond" and "radial waves" patterns, respectively. Meulen for the "diamond" and "radial waves" patterns, respectively.
to do: to do:
- stdout/stderr don't work! need message window (maybe scrollable?)
- handle quoted command-line args (especially filenames with spaces) - handle quoted command-line args (especially filenames with spaces)
- finish resizable checkerboard-gradient (sizes 4-128?) - finish resizable checkerboard-gradient (sizes 4-128?)
- use %.1023s to simplify truncation of title-bar string? - use %.1023s to simplify truncation of title-bar string?
...@@ -25,10 +24,12 @@ ...@@ -25,10 +24,12 @@
- 1.03: modified to allow abbreviated options - 1.03: modified to allow abbreviated options
- 1.04: removed bogus extra argument from usage fprintf() [Glenn R-P?]; - 1.04: removed bogus extra argument from usage fprintf() [Glenn R-P?];
fixed command-line parsing bug fixed command-line parsing bug
- 1.10: enabled "message window" (console), thanks to David Geldreich
- 1.20: added runtime MMX-enabling/disabling and new -mmx* options
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
Copyright (c) 1998-2000 Greg Roelofs. All rights reserved. Copyright (c) 1998-2001 Greg Roelofs. All rights reserved.
This software is provided "as is," without warranty of any kind, This software is provided "as is," without warranty of any kind,
express or implied. In no event shall the author or contributors express or implied. In no event shall the author or contributors
...@@ -55,7 +56,7 @@ ...@@ -55,7 +56,7 @@
#define PROGNAME "rpng2-win" #define PROGNAME "rpng2-win"
#define LONGNAME "Progressive PNG Viewer for Windows" #define LONGNAME "Progressive PNG Viewer for Windows"
#define VERSION "1.04 of 19 March 2000" #define VERSION "1.20 of 4 January 2001"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
...@@ -64,6 +65,7 @@ ...@@ -64,6 +65,7 @@
#include <time.h> #include <time.h>
#include <math.h> /* only for PvdM background code */ #include <math.h> /* only for PvdM background code */
#include <windows.h> #include <windows.h>
#include <conio.h> /* only for _getch() */
/* all for PvdM background code: */ /* all for PvdM background code: */
#ifndef PI #ifndef PI
...@@ -239,6 +241,16 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode) ...@@ -239,6 +241,16 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
memset(&rpng2_info, 0, sizeof(mainprog_info)); memset(&rpng2_info, 0, sizeof(mainprog_info));
/* Next reenable console output, which normally goes to the bit bucket
* for windowed apps. Closing the console window will terminate the
* app. Thanks to David.Geldreich@realviz.com for supplying the magical
* incantation. */
AllocConsole();
freopen("CONOUT$", "a", stderr);
freopen("CONOUT$", "a", stdout);
/* Set the default value for our display-system exponent, i.e., the /* Set the default value for our display-system exponent, i.e., the
* product of the CRT exponent and the exponent corresponding to * product of the CRT exponent and the exponent corresponding to
* the frame-buffer's lookup table (LUT), if any. This is not an * the frame-buffer's lookup table (LUT), if any. This is not an
...@@ -354,6 +366,14 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode) ...@@ -354,6 +366,14 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
} }
} else if (!strncmp(*argv, "-timing", 2)) { } else if (!strncmp(*argv, "-timing", 2)) {
timing = TRUE; timing = TRUE;
#if (defined(__i386__) || defined(_M_IX86))
} else if (!strncmp(*argv, "-nommxfilters", 7)) {
rpng2_info.nommxfilters = TRUE;
} else if (!strncmp(*argv, "-nommxcombine", 7)) {
rpng2_info.nommxcombine = TRUE;
} else if (!strncmp(*argv, "-nommxinterlace", 7)) {
rpng2_info.nommxinterlace = TRUE;
#endif
} else { } else {
if (**argv != '-') { if (**argv != '-') {
filename = *argv; filename = *argv;
...@@ -401,25 +421,47 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode) ...@@ -401,25 +421,47 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
/* usage screen */ /* usage screen */
if (error) { if (error) {
fprintf(stderr, "\n%s %s: %s\n", PROGNAME, VERSION, appname); int ch;
fprintf(stderr, "\n%s %s: %s\n\n", PROGNAME, VERSION, appname);
readpng2_version_info(); readpng2_version_info();
fprintf(stderr, "\n" fprintf(stderr, "\n"
"Usage: %s [-gamma exp] [-bgcolor bg | -bgpat pat] [-timing]" "Usage: %s [-gamma exp] [-bgcolor bg | -bgpat pat] [-timing]\n"
" file.png\n\n" #if (defined(__i386__) || defined(_M_IX86))
" %*s [-nommxfilters] [-nommxcombine] [-nommxinterlace]\n"
#endif
" %*s file.png\n\n"
" exp \ttransfer-function exponent (``gamma'') of the display\n" " exp \ttransfer-function exponent (``gamma'') of the display\n"
"\t\t system in floating-point format (e.g., ``%.1f''); equal\n" "\t\t system in floating-point format (e.g., ``%.1f''); equal\n"
"\t\t to the product of the lookup-table exponent (varies)\n" "\t\t to the product of the lookup-table exponent (varies)\n"
"\t\t and the CRT exponent (usually 2.2); must be positive\n" "\t\t and the CRT exponent (usually 2.2); must be positive\n"
" bg \tdesired background color in 7-character hex RGB format\n" " bg \tdesired background color in 7-character hex RGB format\n"
"\t\t (e.g., ``#ff7700'' for orange: same as HTML colors);\n" "\t\t (e.g., ``#ff7700'' for orange: same as HTML colors);\n"
"\t\t used with transparent images; overrides -bgpat\n" "\t\t used with transparent images; overrides -bgpat option\n"
" pat \tdesired background pattern number (1-%d); used with\n" " pat \tdesired background pattern number (1-%d); used with\n"
"\t\t transparent images; overrides -bgcolor\n" "\t\t transparent images; overrides -bgcolor option\n"
" -timing\tenables delay for every block read, to simulate modem\n" " -timing\tenables delay for every block read, to simulate modem\n"
"\t\t download of image (~36 Kbps)\n" "\t\t download of image (~36 Kbps)\n"
#if (defined(__i386__) || defined(_M_IX86))
" -nommx*\tdisable optimized MMX routines for decoding row filters,\n"
"\t\t combining rows, and expanding interlacing, respectively\n"
#endif
"\nPress Q, Esc or mouse button 1 after image is displayed to quit.\n" "\nPress Q, Esc or mouse button 1 after image is displayed to quit.\n"
"\n", PROGNAME, default_display_exponent, num_bgpat); "Press Q or Esc to quit this usage screen.\n"
"\n", PROGNAME,
#if (defined(__i386__) || defined(_M_IX86))
strlen(PROGNAME), " ",
#endif
strlen(PROGNAME), " ", default_display_exponent, num_bgpat);
do
ch = _getch();
while (ch != 'q' && ch != 'Q' && ch != 0x1B);
exit(1); exit(1);
} else {
fprintf(stderr, "\n%s %s: %s\n", PROGNAME, VERSION, appname);
fprintf(stderr,
"\n [console window: closing this window will terminate %s]\n\n",
PROGNAME);
} }
......
...@@ -25,10 +25,11 @@ ...@@ -25,10 +25,11 @@
- 1.10: added support for non-default visuals; fixed X pixel-conversion - 1.10: added support for non-default visuals; fixed X pixel-conversion
- 1.11: added -usleep option for demos; fixed command-line parsing bug - 1.11: added -usleep option for demos; fixed command-line parsing bug
- 1.12: added -pause option for demos and testing - 1.12: added -pause option for demos and testing
- 1.20: added runtime MMX-enabling/disabling and new -mmx* options
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
Copyright (c) 1998-2000 Greg Roelofs. All rights reserved. Copyright (c) 1998-2001 Greg Roelofs. All rights reserved.
This software is provided "as is," without warranty of any kind, This software is provided "as is," without warranty of any kind,
express or implied. In no event shall the author or contributors express or implied. In no event shall the author or contributors
...@@ -55,7 +56,7 @@ ...@@ -55,7 +56,7 @@
#define PROGNAME "rpng2-x" #define PROGNAME "rpng2-x"
#define LONGNAME "Progressive PNG Viewer for X" #define LONGNAME "Progressive PNG Viewer for X"
#define VERSION "1.12 of 19 March 2000" #define VERSION "1.20 of 4 January 2001"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
...@@ -359,6 +360,14 @@ int main(int argc, char **argv) ...@@ -359,6 +360,14 @@ int main(int argc, char **argv)
pause_after_pass = TRUE; pause_after_pass = TRUE;
} else if (!strncmp(*argv, "-timing", 2)) { } else if (!strncmp(*argv, "-timing", 2)) {
timing = TRUE; timing = TRUE;
#if (defined(__i386__) || defined(_M_IX86))
} else if (!strncmp(*argv, "-nommxfilters", 7)) {
rpng2_info.nommxfilters = TRUE;
} else if (!strncmp(*argv, "-nommxcombine", 7)) {
rpng2_info.nommxcombine = TRUE;
} else if (!strncmp(*argv, "-nommxinterlace", 7)) {
rpng2_info.nommxinterlace = TRUE;
#endif
} else { } else {
if (**argv != '-') { if (**argv != '-') {
filename = *argv; filename = *argv;
...@@ -414,10 +423,13 @@ int main(int argc, char **argv) ...@@ -414,10 +423,13 @@ int main(int argc, char **argv)
/* usage screen */ /* usage screen */
if (error) { if (error) {
fprintf(stderr, "\n%s %s: %s\n", PROGNAME, VERSION, appname); fprintf(stderr, "\n%s %s: %s\n\n", PROGNAME, VERSION, appname);
readpng2_version_info(); readpng2_version_info();
fprintf(stderr, "\n" fprintf(stderr, "\n"
"Usage: %s [-display xdpy] [-gamma exp] [-bgcolor bg | -bgpat pat]\n" "Usage: %s [-display xdpy] [-gamma exp] [-bgcolor bg | -bgpat pat]\n"
#if (defined(__i386__) || defined(_M_IX86))
" %*s [-nommxfilters] [-nommxcombine] [-nommxinterlace]\n"
#endif
" %*s [-usleep dur | -timing] [-pause] file.png\n\n" " %*s [-usleep dur | -timing] [-pause] file.png\n\n"
" xdpy\tname of the target X display (e.g., ``hostname:0'')\n" " xdpy\tname of the target X display (e.g., ``hostname:0'')\n"
" exp \ttransfer-function exponent (``gamma'') of the display\n" " exp \ttransfer-function exponent (``gamma'') of the display\n"
...@@ -429,6 +441,10 @@ int main(int argc, char **argv) ...@@ -429,6 +441,10 @@ int main(int argc, char **argv)
"\t\t used with transparent images; overrides -bgpat\n" "\t\t used with transparent images; overrides -bgpat\n"
" pat \tdesired background pattern number (1-%d); used with\n" " pat \tdesired background pattern number (1-%d); used with\n"
"\t\t transparent images; overrides -bgcolor\n" "\t\t transparent images; overrides -bgcolor\n"
#if (defined(__i386__) || defined(_M_IX86))
" -nommx*\tdisable optimized MMX routines for decoding row filters,\n"
"\t\t combining rows, and expanding interlacing, respectively\n"
#endif
" dur \tduration in microseconds to wait after displaying each\n" " dur \tduration in microseconds to wait after displaying each\n"
"\t\t row (for demo purposes)\n" "\t\t row (for demo purposes)\n"
" -timing\tenables delay for every block read, to simulate modem\n" " -timing\tenables delay for every block read, to simulate modem\n"
...@@ -436,8 +452,11 @@ int main(int argc, char **argv) ...@@ -436,8 +452,11 @@ int main(int argc, char **argv)
" -pause\tpauses after displaying each pass until key pressed\n" " -pause\tpauses after displaying each pass until key pressed\n"
"\nPress Q, Esc or mouse button 1 (within image window, after image\n" "\nPress Q, Esc or mouse button 1 (within image window, after image\n"
"is displayed) to quit.\n" "is displayed) to quit.\n"
"\n", PROGNAME, strlen(PROGNAME), " ", default_display_exponent, "\n", PROGNAME,
num_bgpat); #if (defined(__i386__) || defined(_M_IX86))
strlen(PROGNAME), " ",
#endif
strlen(PROGNAME), " ", default_display_exponent, num_bgpat);
exit(1); exit(1);
} }
......
Microsoft Developer Studio Build File, Format Version 6.00 for Microsoft Developer Studio Build File, Format Version 6.00 for
msvctest msvctest
Assumes that libpng DLLs and LIBs are in ..\..\dll\msvc\win32\libpng Assumes that libpng DLLs and LIBs are in ..\..\projects\msvc\win32\libpng
Assumes that zlib DLLs and LIBs are in ..\..\dll\msvc\win32\zlib Assumes that zlib DLLs and LIBs are in ..\..\projects\msvc\win32\zlib
To build: To build:
......
...@@ -54,12 +54,12 @@ BSC32=bscmake.exe ...@@ -54,12 +54,12 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 /nologo /subsystem:console /machine:I386 # ADD BASE LINK32 /nologo /subsystem:console /machine:I386
# ADD LINK32 ..\..\dll\msvc\win32\libpng\dll\libpng1.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 ..\..\projects\msvc\win32\libpng\dll\libpng1.lib /nologo /subsystem:console /machine:I386
# Begin Special Build Tool # Begin Special Build Tool
OutDir=.\dll OutDir=.\dll
SOURCE="$(InputPath)" SOURCE="$(InputPath)"
PostBuild_Desc=[Run Test] PostBuild_Desc=[Run Test]
PostBuild_Cmds=set path=..\..\dll\msvc\win32\libpng\dll;..\..\dll\msvc\win32\zlib\dll; $(outdir)\msvctest.exe ..\..\pngtest.png PostBuild_Cmds=set path=..\..\projects\msvc\win32\libpng\dll;..\..\projects\msvc\win32\zlib\dll; $(outdir)\msvctest.exe ..\..\pngtest.png
# End Special Build Tool # End Special Build Tool
!ELSEIF "$(CFG)" == "msvctest - Win32 Debug DLL" !ELSEIF "$(CFG)" == "msvctest - Win32 Debug DLL"
...@@ -84,12 +84,12 @@ BSC32=bscmake.exe ...@@ -84,12 +84,12 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD BASE LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 ..\..\dll\msvc\win32\libpng\dll_dbg\libpng1d.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 ..\..\projects\msvc\win32\libpng\dll_dbg\libpng1d.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# Begin Special Build Tool # Begin Special Build Tool
OutDir=.\dll_dbg OutDir=.\dll_dbg
SOURCE="$(InputPath)" SOURCE="$(InputPath)"
PostBuild_Desc=[Run Test] PostBuild_Desc=[Run Test]
PostBuild_Cmds=set path=..\..\dll\msvc\win32\libpng\dll_dbg;..\..\dll\msvc\win32\zlib\dll_dbg; $(outdir)\msvctest.exe ..\..\pngtest.png PostBuild_Cmds=set path=..\..\projects\msvc\win32\libpng\dll_dbg;..\..\projects\msvc\win32\zlib\dll_dbg; $(outdir)\msvctest.exe ..\..\pngtest.png
# End Special Build Tool # End Special Build Tool
!ELSEIF "$(CFG)" == "msvctest - Win32 ASM DLL" !ELSEIF "$(CFG)" == "msvctest - Win32 ASM DLL"
...@@ -114,12 +114,12 @@ BSC32=bscmake.exe ...@@ -114,12 +114,12 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 /nologo /subsystem:console /machine:I386 # ADD BASE LINK32 /nologo /subsystem:console /machine:I386
# ADD LINK32 ..\..\dll\msvc\win32\libpng\dll_asm\libpng1a.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 ..\..\projects\msvc\win32\libpng\dll_asm\libpng1a.lib /nologo /subsystem:console /machine:I386
# Begin Special Build Tool # Begin Special Build Tool
OutDir=.\dll_asm OutDir=.\dll_asm
SOURCE="$(InputPath)" SOURCE="$(InputPath)"
PostBuild_Desc=[Run Test] PostBuild_Desc=[Run Test]
PostBuild_Cmds=set path=..\..\dll\msvc\win32\libpng\dll_asm;..\..\dll\msvc\win32\zlib\dll_asm; $(outdir)\msvctest.exe ..\..\pngtest.png PostBuild_Cmds=set path=..\..\projects\msvc\win32\libpng\dll_asm;..\..\projects\msvc\win32\zlib\dll_asm; $(outdir)\msvctest.exe ..\..\pngtest.png
# End Special Build Tool # End Special Build Tool
!ELSEIF "$(CFG)" == "msvctest - Win32 Debug ASM DLL" !ELSEIF "$(CFG)" == "msvctest - Win32 Debug ASM DLL"
...@@ -144,12 +144,12 @@ BSC32=bscmake.exe ...@@ -144,12 +144,12 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD BASE LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 ..\..\dll\msvc\win32\libpng\dll_dbga\libpng1b.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 ..\..\projects\msvc\win32\libpng\dll_dbga\libpng1b.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# Begin Special Build Tool # Begin Special Build Tool
OutDir=.\dll_dbga OutDir=.\dll_dbga
SOURCE="$(InputPath)" SOURCE="$(InputPath)"
PostBuild_Desc=[Run Test] PostBuild_Desc=[Run Test]
PostBuild_Cmds=set path=..\..\dll\msvc\win32\libpng\dll_dbga;..\..\dll\msvc\win32\zlib\dll_dbga; $(outdir)\msvctest.exe ..\..\pngtest.png PostBuild_Cmds=set path=..\..\projects\msvc\win32\libpng\dll_dbga;..\..\projects\msvc\win32\zlib\dll_dbga; $(outdir)\msvctest.exe ..\..\pngtest.png
# End Special Build Tool # End Special Build Tool
!ELSEIF "$(CFG)" == "msvctest - Win32 LIB" !ELSEIF "$(CFG)" == "msvctest - Win32 LIB"
...@@ -174,7 +174,7 @@ BSC32=bscmake.exe ...@@ -174,7 +174,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 /nologo /subsystem:console /machine:I386 # ADD BASE LINK32 /nologo /subsystem:console /machine:I386
# ADD LINK32 ..\..\dll\msvc\win32\libpng\lib\libpng.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 ..\..\projects\msvc\win32\libpng\lib\libpng.lib /nologo /subsystem:console /machine:I386
# Begin Special Build Tool # Begin Special Build Tool
OutDir=.\lib OutDir=.\lib
SOURCE="$(InputPath)" SOURCE="$(InputPath)"
...@@ -204,7 +204,7 @@ BSC32=bscmake.exe ...@@ -204,7 +204,7 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD BASE LINK32 /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 ..\..\dll\msvc\win32\libpng\lib_dbg\libpng.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 ..\..\projects\msvc\win32\libpng\lib_dbg\libpng.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# Begin Special Build Tool # Begin Special Build Tool
OutDir=.\lib_dbg OutDir=.\lib_dbg
SOURCE="$(InputPath)" SOURCE="$(InputPath)"
......
...@@ -13,8 +13,8 @@ binaries, go to "http://www.schaik.com/png/visualpng.html". ...@@ -13,8 +13,8 @@ binaries, go to "http://www.schaik.com/png/visualpng.html".
Assumes that Assumes that
libpng DLLs and LIBs are in ..\..\dll\msvc\win32\libpng libpng DLLs and LIBs are in ..\..\projects\msvc\win32\libpng
zlib DLLs and LIBs are in ..\..\dll\msvc\win32\zlib zlib DLLs and LIBs are in ..\..\projects\msvc\win32\zlib
libpng header files are in ..\..\..\libpng libpng header files are in ..\..\..\libpng
zlib header files are in ..\..\..\zlib zlib header files are in ..\..\..\zlib
the pngsuite images are in ..\pngsuite the pngsuite images are in ..\pngsuite
......
...@@ -60,11 +60,11 @@ BSC32=bscmake.exe ...@@ -60,11 +60,11 @@ BSC32=bscmake.exe
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 libpng1.lib zlibd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 /libpath:"libpng" /libpath:"zlib" # ADD BASE LINK32 libpng1.lib zlibd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 /libpath:"libpng" /libpath:"zlib"
# ADD LINK32 libpng1.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 /libpath:"..\..\dll\msvc\win32\libpng\dll" # ADD LINK32 libpng1.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 /libpath:"..\..\projects\msvc\win32\libpng\dll"
# Begin Special Build Tool # Begin Special Build Tool
OutDir=.\dll OutDir=.\dll
SOURCE="$(InputPath)" SOURCE="$(InputPath)"
PostBuild_Cmds=set path=..\..\dll\msvc\win32\libpng\dll;..\..\dll\msvc\win32\zlib\dll; $(outdir)\VisualPng.exe ..\..\contrib\pngsuite\basn6a16.png PostBuild_Cmds=set path=..\..\projects\msvc\win32\libpng\dll;..\..\projects\msvc\win32\zlib\dll; $(outdir)\VisualPng.exe ..\..\contrib\pngsuite\basn6a16.png
# End Special Build Tool # End Special Build Tool
!ELSEIF "$(CFG)" == "VisualPng - Win32 Debug DLL" !ELSEIF "$(CFG)" == "VisualPng - Win32 Debug DLL"
...@@ -94,12 +94,12 @@ BSC32=bscmake.exe ...@@ -94,12 +94,12 @@ BSC32=bscmake.exe
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 libpng1.lib zlibd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libc" /pdbtype:sept /libpath:"libpng" /libpath:"zlib" # ADD BASE LINK32 libpng1.lib zlibd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libc" /pdbtype:sept /libpath:"libpng" /libpath:"zlib"
# SUBTRACT BASE LINK32 /nodefaultlib # SUBTRACT BASE LINK32 /nodefaultlib
# ADD LINK32 libpng1d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libc" /pdbtype:sept /libpath:"..\..\dll\msvc\win32\libpng\dll_dbg" # ADD LINK32 libpng1d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libc" /pdbtype:sept /libpath:"..\..\projects\msvc\win32\libpng\dll_dbg"
# SUBTRACT LINK32 /nodefaultlib # SUBTRACT LINK32 /nodefaultlib
# Begin Special Build Tool # Begin Special Build Tool
OutDir=.\dll_dbg OutDir=.\dll_dbg
SOURCE="$(InputPath)" SOURCE="$(InputPath)"
PostBuild_Cmds=set path=..\..\dll\msvc\win32\libpng\dll_dbg;..\..\dll\msvc\win32\zlib\dll_dbg; $(outdir)\VisualPng.exe ..\..\contrib\pngsuite\basn6a16.png PostBuild_Cmds=set path=..\..\projects\msvc\win32\libpng\dll_dbg;..\..\projects\msvc\win32\zlib\dll_dbg; $(outdir)\VisualPng.exe ..\..\contrib\pngsuite\basn6a16.png
# End Special Build Tool # End Special Build Tool
!ELSEIF "$(CFG)" == "VisualPng - Win32 LIB" !ELSEIF "$(CFG)" == "VisualPng - Win32 LIB"
...@@ -128,8 +128,8 @@ BSC32=bscmake.exe ...@@ -128,8 +128,8 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo # ADD BASE BSC32 /nologo
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 libpng1.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 /libpath:"..\..\dll\msvc\win32\libpng\dll" # ADD BASE LINK32 libpng1.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 /libpath:"..\..\projects\msvc\win32\libpng\dll"
# ADD LINK32 libpng.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 /libpath:"..\..\dll\msvc\win32\libpng\lib" # ADD LINK32 libpng.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386 /libpath:"..\..\projects\msvc\win32\libpng\lib"
# Begin Special Build Tool # Begin Special Build Tool
OutDir=.\lib OutDir=.\lib
SOURCE="$(InputPath)" SOURCE="$(InputPath)"
...@@ -161,9 +161,9 @@ BSC32=bscmake.exe ...@@ -161,9 +161,9 @@ BSC32=bscmake.exe
# ADD BASE BSC32 /nologo # ADD BASE BSC32 /nologo
# ADD BSC32 /nologo # ADD BSC32 /nologo
LINK32=link.exe LINK32=link.exe
# ADD BASE LINK32 libpng1d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libc" /pdbtype:sept /libpath:"..\..\dll\msvc\win32\libpng\dll_dbg" # ADD BASE LINK32 libpng1d.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libc" /pdbtype:sept /libpath:"..\..\projects\msvc\win32\libpng\dll_dbg"
# SUBTRACT BASE LINK32 /nodefaultlib # SUBTRACT BASE LINK32 /nodefaultlib
# ADD LINK32 libpng.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libc" /pdbtype:sept /libpath:"..\..\dll\msvc\win32\libpng\lib_dbg" # ADD LINK32 libpng.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /nodefaultlib:"libc" /pdbtype:sept /libpath:"..\..\projects\msvc\win32\libpng\lib_dbg"
# SUBTRACT LINK32 /nodefaultlib # SUBTRACT LINK32 /nodefaultlib
# Begin Special Build Tool # Begin Special Build Tool
OutDir=.\lib_dbg OutDir=.\lib_dbg
......
...@@ -267,7 +267,7 @@ void read_png(FILE *fp, unsigned int sig_read) /* file is already open */ ...@@ -267,7 +267,7 @@ void read_png(FILE *fp, unsigned int sig_read) /* file is already open */
*/ */
if (color_type & PNG_COLOR_MASK_COLOR) if (color_type & PNG_COLOR_MASK_COLOR)
{ {
png_uint_32 num_palette; int num_palette;
png_colorp palette; png_colorp palette;
/* This reduces the image to the application supplied palette */ /* This reduces the image to the application supplied palette */
...@@ -603,9 +603,9 @@ void write_png(char *file_name /* , ... other image information ... */) ...@@ -603,9 +603,9 @@ void write_png(char *file_name /* , ... other image information ... */)
PNG_INTERLACE_????, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); PNG_INTERLACE_????, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
/* set the palette if there is one. REQUIRED for indexed-color images */ /* set the palette if there is one. REQUIRED for indexed-color images */
palette = (png_colorp)png_malloc(png_ptr, 256 * sizeof (png_color)); palette = (png_colorp)png_malloc(png_ptr, PNG_MAX_PALETTE_LENGTH * sizeof (png_color));
/* ... set palette colors ... */ /* ... set palette colors ... */
png_set_PLTE(png_ptr, info_ptr, palette, 256); png_set_PLTE(png_ptr, info_ptr, palette, PNG_MAX_PALETTE_LENGTH);
/* You must not free palette here, because png_set_PLTE only makes a link to /* You must not free palette here, because png_set_PLTE only makes a link to
the palette that you malloced. Wait until you are about to destroy the palette that you malloced. Wait until you are about to destroy
the png structure. */ the png structure. */
......
.TH LIBPNG 3 "November 10, 2000" .TH LIBPNG 3 "January 16, 2001"
.SH NAME .SH NAME
libpng \- Portable Network Graphics (PNG) Reference Library 1.0.9beta1 libpng \- Portable Network Graphics (PNG) Reference Library 1.0.9beta10
.SH SYNOPSIS .SH SYNOPSIS
\fI\fB \fI\fB
...@@ -100,6 +100,10 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.0.9beta1 ...@@ -100,6 +100,10 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.0.9beta1
\fI\fB \fI\fB
\fBpng_uint_32 png_get_asm_flags (png_structp \fIpng_ptr\fP\fB);\fP
\fI\fB
\fBpng_byte png_get_bit_depth (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP \fBpng_byte png_get_bit_depth (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
\fI\fB \fI\fB
...@@ -334,6 +338,10 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.0.9beta1 ...@@ -334,6 +338,10 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.0.9beta1
\fI\fB \fI\fB
\fBint png_mmx_support \fI(void\fP\fB);\fP
\fI\fB
\fBvoid png_permit_empty_plte (png_structp \fP\fIpng_ptr\fP\fB, int \fIempty_plte_permitted\fP\fB);\fP \fBvoid png_permit_empty_plte (png_structp \fP\fIpng_ptr\fP\fB, int \fIempty_plte_permitted\fP\fB);\fP
\fI\fB \fI\fB
...@@ -384,6 +392,10 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.0.9beta1 ...@@ -384,6 +392,10 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.0.9beta1
\fI\fB \fI\fB
\fBpng_set_asm_flags (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fIasm_flags\fP\fB);\fP
\fI\fB
\fBvoid png_set_background (png_structp \fP\fIpng_ptr\fP\fB, png_color_16p \fP\fIbackground_color\fP\fB, int \fP\fIbackground_gamma_code\fP\fB, int \fP\fIneed_expand\fP\fB, double \fIbackground_gamma\fP\fB);\fP \fBvoid png_set_background (png_structp \fP\fIpng_ptr\fP\fB, png_color_16p \fP\fIbackground_color\fP\fB, int \fP\fIbackground_gamma_code\fP\fB, int \fP\fIneed_expand\fP\fB, double \fIbackground_gamma\fP\fB);\fP
\fI\fB \fI\fB
...@@ -747,7 +759,7 @@ Following is a copy of the libpng.txt file that accompanies libpng. ...@@ -747,7 +759,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.9beta1 - November 10, 2000 libpng version 1.0.9beta10 - January 16, 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
...@@ -814,7 +826,7 @@ majority of the needs of its users. ...@@ -814,7 +826,7 @@ majority of the needs of its users.
Libpng uses zlib for its compression and decompression of PNG files. Libpng uses zlib for its compression and decompression of PNG files.
Further information about zlib, and the latest version of zlib, can Further information about zlib, and the latest version of zlib, can
be found at the zlib home page, <ftp://ftp.freesoftware.com/pub/infozip/zlib/>. be found at the zlib home page, <http://www.info-zip.org/pub/infozip/zlib/>.
The zlib compression utility is a general purpose utility that is The zlib compression utility is a general purpose utility that is
useful for more than PNG files, and can be used without libpng. useful for more than PNG files, and can be used without libpng.
See the documentation delivered with zlib for more details. See the documentation delivered with zlib for more details.
...@@ -1118,7 +1130,7 @@ row_pointers prior to calling png_read_png() with ...@@ -1118,7 +1130,7 @@ 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
row_pointers[i] to point into the proper places in your block. row_pointers[i] to point into the proper places in your block.
...@@ -1147,7 +1159,7 @@ in until png_read_end() has read the chunk data following the image. ...@@ -1147,7 +1159,7 @@ in until png_read_end() has read the chunk data following the image.
png_get_IHDR(png_ptr, info_ptr, &width, &height, png_get_IHDR(png_ptr, info_ptr, &width, &height,
&bit_depth, &color_type, &interlace_type, &bit_depth, &color_type, &interlace_type,
&compression_type, &filter_type); &compression_type, &filter_method);
width - holds the width of the image width - holds the width of the image
in pixels (up to 2^31). in pixels (up to 2^31).
...@@ -1175,15 +1187,18 @@ in until png_read_end() has read the chunk data following the image. ...@@ -1175,15 +1187,18 @@ in until png_read_end() has read the chunk data following the image.
PNG_COLOR_MASK_COLOR PNG_COLOR_MASK_COLOR
PNG_COLOR_MASK_ALPHA PNG_COLOR_MASK_ALPHA
filter_type - (must be PNG_FILTER_TYPE_BASE filter_method - (must be PNG_FILTER_TYPE_BASE
for PNG 1.0) for PNG 1.0, and can also be
PNG_INTRAPIXEL_DIFFERENCING if
the PNG datastream is embedded in
a MNG-1.0 datastream)
compression_type - (must be PNG_COMPRESSION_TYPE_BASE compression_type - (must be PNG_COMPRESSION_TYPE_BASE
for PNG 1.0) for PNG 1.0)
interlace_type - (PNG_INTERLACE_NONE or interlace_type - (PNG_INTERLACE_NONE or
PNG_INTERLACE_ADAM7) PNG_INTERLACE_ADAM7)
Any or all of interlace_type, compression_type, of Any or all of interlace_type, compression_type, of
filter_type can be NULL if you are not filter_method can be NULL if you are
interested in their values. not interested in their values.
channels = png_get_channels(png_ptr, info_ptr); channels = png_get_channels(png_ptr, info_ptr);
channels - number of channels of info for the channels - number of channels of info for the
...@@ -1213,7 +1228,7 @@ in until png_read_end() has read the chunk data following the image. ...@@ -1213,7 +1228,7 @@ in until png_read_end() has read the chunk data following the image.
info_ptr); info_ptr);
color_type = png_get_color_type(png_ptr, color_type = png_get_color_type(png_ptr,
info_ptr); info_ptr);
filter_type = png_get_filter_type(png_ptr, filter_method = png_get_filter_type(png_ptr,
info_ptr); info_ptr);
compression_type = png_get_compression_type(png_ptr, compression_type = png_get_compression_type(png_ptr,
info_ptr); info_ptr);
...@@ -1311,7 +1326,7 @@ into the info_ptr is returned for any complex types. ...@@ -1311,7 +1326,7 @@ into the info_ptr is returned for any complex types.
(empty string for unknown). (empty string for unknown).
num_text - number of comments (same as num_comments; num_text - number of comments (same as num_comments;
you can put NULL here to avoid the duplication) you can put NULL here to avoid the duplication)
Note while png_set_text() will accept text, language, and Note while png_set_text() will accept text, language, and
translated keywords that can be NULL pointers, the structure translated keywords that can be NULL pointers, the structure
returned by png_get_text will always contain regular returned by png_get_text will always contain regular
zero-terminated C strings. They might be empty strings but zero-terminated C strings. They might be empty strings but
...@@ -1706,7 +1721,7 @@ histogram, it may not do as good a job. ...@@ -1706,7 +1721,7 @@ histogram, it may not do as good a job.
if (png_get_valid(png_ptr, info_ptr, if (png_get_valid(png_ptr, info_ptr,
PNG_INFO_PLTE)) PNG_INFO_PLTE))
{ {
png_color_16p histogram; png_uint_16p histogram;
png_get_hIST(png_ptr, info_ptr, png_get_hIST(png_ptr, info_ptr,
&histogram); &histogram);
...@@ -1994,7 +2009,7 @@ application instead of by libpng, you can use ...@@ -1994,7 +2009,7 @@ application instead of by libpng, you can use
png_set_invalid(png_ptr, info_ptr, mask); png_set_invalid(png_ptr, info_ptr, mask);
mask - identifies the chunks to be made invalid, mask - identifies the chunks to be made invalid,
containing the logical OR of one or containing the logical OR of one or
more of more of
PNG_INFO_gAMA, PNG_INFO_sBIT, PNG_INFO_gAMA, PNG_INFO_sBIT,
PNG_INFO_cHRM, PNG_INFO_PLTE, PNG_INFO_cHRM, PNG_INFO_PLTE,
PNG_INFO_tRNS, PNG_INFO_bKGD, PNG_INFO_tRNS, PNG_INFO_bKGD,
...@@ -2286,10 +2301,11 @@ maximum possible compression at the expense of slower writing. If you ...@@ -2286,10 +2301,11 @@ maximum possible compression at the expense of slower writing. If you
have no special needs in this area, let the library do what it wants by have no special needs in this area, let the library do what it wants by
not calling this function at all, as it has been tuned to deliver a good not calling this function at all, as it has been tuned to deliver a good
speed/compression ratio. The second parameter to png_set_filter() is speed/compression ratio. The second parameter to png_set_filter() is
the filter method, for which the only valid value is '0' (as of the the filter method, for which the only valid values are 0 (as of the
July 1999 PNG specification, version 1.2). The third parameter is a July 1999 PNG specification, version 1.2) or 64 (if you are writing
flag that indicates which filter type(s) are to be tested for each a PNG datastream that is to be embedded in a MNG datastream). The third
scanline. See the PNG specification for details on the specific filter parameter is a flag that indicates which filter type(s) are to be tested
for each scanline. See the PNG specification for details on the specific filter
types. types.
...@@ -2310,6 +2326,9 @@ it should start out with all of the filters (to ensure that the previous ...@@ -2310,6 +2326,9 @@ it should start out with all of the filters (to ensure that the previous
row of pixels will be stored in case it's needed later), and then add row of pixels will be stored in case it's needed later), and then add
and remove them after the start of compression. and remove them after the start of compression.
If you are writing a PNG datastream that is to be embedded in a MNG
datastream, the second parameter can be either 0 or 64.
The png_set_compression_*() functions interface to the zlib compression The png_set_compression_*() functions interface to the zlib compression
library, and should mostly be ignored unless you really know what you are library, and should mostly be ignored unless you really know what you are
doing. The only generally useful call is png_set_compression_level() doing. The only generally useful call is png_set_compression_level()
...@@ -2348,7 +2367,7 @@ Some of the more important parts of the png_info are: ...@@ -2348,7 +2367,7 @@ Some of the more important parts of the png_info are:
png_set_IHDR(png_ptr, info_ptr, width, height, png_set_IHDR(png_ptr, info_ptr, width, height,
bit_depth, color_type, interlace_type, bit_depth, color_type, interlace_type,
compression_type, filter_type) compression_type, filter_method)
width - holds the width of the image width - holds the width of the image
in pixels (up to 2^31). in pixels (up to 2^31).
height - holds the height of the image height - holds the height of the image
...@@ -2380,7 +2399,11 @@ Some of the more important parts of the png_info are: ...@@ -2380,7 +2399,11 @@ Some of the more important parts of the png_info are:
PNG_INTERLACE_ADAM7 PNG_INTERLACE_ADAM7
compression_type - (must be compression_type - (must be
PNG_COMPRESSION_TYPE_DEFAULT) PNG_COMPRESSION_TYPE_DEFAULT)
filter_type - (must be PNG_FILTER_TYPE_DEFAULT) filter_method - (must be PNG_FILTER_TYPE_DEFAULT
or, if you are writing a PNG to
be embedded in a MNG datastream,
can also be
PNG_INTRAPIXEL_DIFFERENCING)
png_set_PLTE(png_ptr, info_ptr, palette, png_set_PLTE(png_ptr, info_ptr, palette,
num_palette); num_palette);
...@@ -2978,13 +3001,22 @@ For a more compact example of writing a PNG image, see the file example.c. ...@@ -2978,13 +3001,22 @@ For a more compact example of writing a PNG image, see the file example.c.
.SH V. Modifying/Customizing libpng: .SH V. Modifying/Customizing libpng:
There are two issues here. The first is changing how libpng does There are three issues here. The first is changing how libpng does
standard things like memory allocation, input/output, and error handling. standard things like memory allocation, input/output, and error handling.
The second deals with more complicated things like adding new chunks, The second deals with more complicated things like adding new chunks,
adding new transformations, and generally changing how libpng works. adding new transformations, and generally changing how libpng works.
Both of those are compile-time issues; that is, they are generally
determined at the time the code is written, and there is rarely a need
to provide the user with a means of changing them. The third is a
run-time issue: choosing between and/or tuning one or more alternate
versions of computationally intensive routines; specifically, optimized
assembly-language (and therefore compiler- and platform-dependent)
versions.
Memory allocation, input/output, and error handling
All of the memory allocation, input/output, and error handling in libpng All of the memory allocation, input/output, and error handling in libpng
goes through callbacks that are user settable. The default routines are goes through callbacks that are user-settable. The default routines are
in pngmem.c, pngrio.c, pngwio.c, and pngerror.c, respectively. To change in pngmem.c, pngrio.c, pngwio.c, and pngerror.c, respectively. To change
these functions, call the appropriate png_set_*_fn() function. these functions, call the appropriate png_set_*_fn() function.
...@@ -3217,6 +3249,10 @@ structures appropriately for all of the filter types. ...@@ -3217,6 +3249,10 @@ 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
if you are writing a PNG to be embedded in a MNG
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
...@@ -3328,7 +3364,33 @@ When PNG_DEBUG = 1, the macros are defined, but only png_debug statements ...@@ -3328,7 +3364,33 @@ When PNG_DEBUG = 1, the macros are defined, but only png_debug statements
having level = 0 will be printed. There aren't any such statements in having level = 0 will be printed. There aren't any such statements in
this version of libpng, but if you insert some they will be printed. this version of libpng, but if you insert some they will be printed.
.SH VI. Changes to Libpng from version 0.88
.SH VI. MNG support
The MNG specification (available at http://www.libpng.org/pub/mng) allows
certain extensions to PNG for PNG images that are embedded in MNG datastreams.
Libpng can support some of these extensions. To enable them, use the
png_permit_mng_features() function:
feature_set = png_permit_mng_features(png_ptr, mask)
mask is a png_uint_32 containing the logical OR of the
features you want to enable. These include
PNG_FLAG_MNG_EMPTY_PLTE
PNG_FLAG_MNG_FILTER_64
PNG_ALL_MNG_FEATURES
feature_set is a png_32_uint that is the logical AND of
your mask with the set of MNG features that is
supported by the version of libpng that you are using.
It is an error to use this function when reading or writing a standalone
PNG file with the PNG 8-byte signature. The PNG datastream must be wrapped
in a MNG datastream. As a minimum, it must have the MNG 8-byte signature
and the MHDR and MEND chunks. Libpng does not provide support for these
or any other MNG chunks; your application must provide its own support for
them. You may wish to consider using libmng (available at
http://www.libmng.com) instead.
.SH VII. Changes to Libpng from version 0.88
It should be noted that versions of libpng later than 0.96 are not It should be noted that versions of libpng later than 0.96 are not
distributed by the original libpng author, Guy Schalnat, nor by distributed by the original libpng author, Guy Schalnat, nor by
...@@ -3377,15 +3439,15 @@ application: ...@@ -3377,15 +3439,15 @@ application:
png_uint_32 application_vn = PNG_LIBPNG_VER; png_uint_32 application_vn = PNG_LIBPNG_VER;
.SH VII. Y2K Compliance in libpng .SH VIII. Y2K Compliance in libpng
November 10, 2000 January 16, 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.9beta1 are Y2K compliant. It is my belief that earlier upward through 1.0.9beta10 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
...@@ -3526,7 +3588,7 @@ possible without all of you. ...@@ -3526,7 +3588,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.9beta1 - November 10, 2000: Libpng version 1.0.9beta10 - January 16, 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).
...@@ -3543,7 +3605,7 @@ included in the libpng distribution, the latter shall prevail.) ...@@ -3543,7 +3605,7 @@ 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.9beta1, November 10, 2000, are libpng versions 1.0.7, July 1, 2000, through 1.0.9beta10, January 16, 2001, are
Copyright (c) 2000 Glenn Randers-Pehrson, and are Copyright (c) 2000 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
...@@ -3634,7 +3696,7 @@ certification mark of the Open Source Initiative. ...@@ -3634,7 +3696,7 @@ certification mark of the Open Source Initiative.
Glenn Randers-Pehrson Glenn Randers-Pehrson
randeg@alum.rpi.edu randeg@alum.rpi.edu
November 10, 2000 January 16, 2001
.\" end of man page .\" end of man page
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.9beta1 - November 10, 2000 libpng version 1.0.9beta10 - January 16, 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
...@@ -67,7 +67,7 @@ majority of the needs of its users. ...@@ -67,7 +67,7 @@ majority of the needs of its users.
Libpng uses zlib for its compression and decompression of PNG files. Libpng uses zlib for its compression and decompression of PNG files.
Further information about zlib, and the latest version of zlib, can Further information about zlib, and the latest version of zlib, can
be found at the zlib home page, <ftp://ftp.freesoftware.com/pub/infozip/zlib/>. be found at the zlib home page, <http://www.info-zip.org/pub/infozip/zlib/>.
The zlib compression utility is a general purpose utility that is The zlib compression utility is a general purpose utility that is
useful for more than PNG files, and can be used without libpng. useful for more than PNG files, and can be used without libpng.
See the documentation delivered with zlib for more details. See the documentation delivered with zlib for more details.
...@@ -371,7 +371,7 @@ row_pointers prior to calling png_read_png() with ...@@ -371,7 +371,7 @@ 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
row_pointers[i] to point into the proper places in your block. row_pointers[i] to point into the proper places in your block.
...@@ -400,7 +400,7 @@ in until png_read_end() has read the chunk data following the image. ...@@ -400,7 +400,7 @@ in until png_read_end() has read the chunk data following the image.
png_get_IHDR(png_ptr, info_ptr, &width, &height, png_get_IHDR(png_ptr, info_ptr, &width, &height,
&bit_depth, &color_type, &interlace_type, &bit_depth, &color_type, &interlace_type,
&compression_type, &filter_type); &compression_type, &filter_method);
width - holds the width of the image width - holds the width of the image
in pixels (up to 2^31). in pixels (up to 2^31).
...@@ -428,15 +428,18 @@ in until png_read_end() has read the chunk data following the image. ...@@ -428,15 +428,18 @@ in until png_read_end() has read the chunk data following the image.
PNG_COLOR_MASK_COLOR PNG_COLOR_MASK_COLOR
PNG_COLOR_MASK_ALPHA PNG_COLOR_MASK_ALPHA
filter_type - (must be PNG_FILTER_TYPE_BASE filter_method - (must be PNG_FILTER_TYPE_BASE
for PNG 1.0) for PNG 1.0, and can also be
PNG_INTRAPIXEL_DIFFERENCING if
the PNG datastream is embedded in
a MNG-1.0 datastream)
compression_type - (must be PNG_COMPRESSION_TYPE_BASE compression_type - (must be PNG_COMPRESSION_TYPE_BASE
for PNG 1.0) for PNG 1.0)
interlace_type - (PNG_INTERLACE_NONE or interlace_type - (PNG_INTERLACE_NONE or
PNG_INTERLACE_ADAM7) PNG_INTERLACE_ADAM7)
Any or all of interlace_type, compression_type, of Any or all of interlace_type, compression_type, of
filter_type can be NULL if you are not filter_method can be NULL if you are
interested in their values. not interested in their values.
channels = png_get_channels(png_ptr, info_ptr); channels = png_get_channels(png_ptr, info_ptr);
channels - number of channels of info for the channels - number of channels of info for the
...@@ -466,7 +469,7 @@ in until png_read_end() has read the chunk data following the image. ...@@ -466,7 +469,7 @@ in until png_read_end() has read the chunk data following the image.
info_ptr); info_ptr);
color_type = png_get_color_type(png_ptr, color_type = png_get_color_type(png_ptr,
info_ptr); info_ptr);
filter_type = png_get_filter_type(png_ptr, filter_method = png_get_filter_type(png_ptr,
info_ptr); info_ptr);
compression_type = png_get_compression_type(png_ptr, compression_type = png_get_compression_type(png_ptr,
info_ptr); info_ptr);
...@@ -564,7 +567,7 @@ into the info_ptr is returned for any complex types. ...@@ -564,7 +567,7 @@ into the info_ptr is returned for any complex types.
(empty string for unknown). (empty string for unknown).
num_text - number of comments (same as num_comments; num_text - number of comments (same as num_comments;
you can put NULL here to avoid the duplication) you can put NULL here to avoid the duplication)
Note while png_set_text() will accept text, language, and Note while png_set_text() will accept text, language, and
translated keywords that can be NULL pointers, the structure translated keywords that can be NULL pointers, the structure
returned by png_get_text will always contain regular returned by png_get_text will always contain regular
zero-terminated C strings. They might be empty strings but zero-terminated C strings. They might be empty strings but
...@@ -959,7 +962,7 @@ histogram, it may not do as good a job. ...@@ -959,7 +962,7 @@ histogram, it may not do as good a job.
if (png_get_valid(png_ptr, info_ptr, if (png_get_valid(png_ptr, info_ptr,
PNG_INFO_PLTE)) PNG_INFO_PLTE))
{ {
png_color_16p histogram; png_uint_16p histogram;
png_get_hIST(png_ptr, info_ptr, png_get_hIST(png_ptr, info_ptr,
&histogram); &histogram);
...@@ -1247,7 +1250,7 @@ application instead of by libpng, you can use ...@@ -1247,7 +1250,7 @@ application instead of by libpng, you can use
png_set_invalid(png_ptr, info_ptr, mask); png_set_invalid(png_ptr, info_ptr, mask);
mask - identifies the chunks to be made invalid, mask - identifies the chunks to be made invalid,
containing the logical OR of one or containing the logical OR of one or
more of more of
PNG_INFO_gAMA, PNG_INFO_sBIT, PNG_INFO_gAMA, PNG_INFO_sBIT,
PNG_INFO_cHRM, PNG_INFO_PLTE, PNG_INFO_cHRM, PNG_INFO_PLTE,
PNG_INFO_tRNS, PNG_INFO_bKGD, PNG_INFO_tRNS, PNG_INFO_bKGD,
...@@ -1539,10 +1542,11 @@ maximum possible compression at the expense of slower writing. If you ...@@ -1539,10 +1542,11 @@ maximum possible compression at the expense of slower writing. If you
have no special needs in this area, let the library do what it wants by have no special needs in this area, let the library do what it wants by
not calling this function at all, as it has been tuned to deliver a good not calling this function at all, as it has been tuned to deliver a good
speed/compression ratio. The second parameter to png_set_filter() is speed/compression ratio. The second parameter to png_set_filter() is
the filter method, for which the only valid value is '0' (as of the the filter method, for which the only valid values are 0 (as of the
July 1999 PNG specification, version 1.2). The third parameter is a July 1999 PNG specification, version 1.2) or 64 (if you are writing
flag that indicates which filter type(s) are to be tested for each a PNG datastream that is to be embedded in a MNG datastream). The third
scanline. See the PNG specification for details on the specific filter parameter is a flag that indicates which filter type(s) are to be tested
for each scanline. See the PNG specification for details on the specific filter
types. types.
...@@ -1563,6 +1567,9 @@ it should start out with all of the filters (to ensure that the previous ...@@ -1563,6 +1567,9 @@ it should start out with all of the filters (to ensure that the previous
row of pixels will be stored in case it's needed later), and then add row of pixels will be stored in case it's needed later), and then add
and remove them after the start of compression. and remove them after the start of compression.
If you are writing a PNG datastream that is to be embedded in a MNG
datastream, the second parameter can be either 0 or 64.
The png_set_compression_*() functions interface to the zlib compression The png_set_compression_*() functions interface to the zlib compression
library, and should mostly be ignored unless you really know what you are library, and should mostly be ignored unless you really know what you are
doing. The only generally useful call is png_set_compression_level() doing. The only generally useful call is png_set_compression_level()
...@@ -1601,7 +1608,7 @@ Some of the more important parts of the png_info are: ...@@ -1601,7 +1608,7 @@ Some of the more important parts of the png_info are:
png_set_IHDR(png_ptr, info_ptr, width, height, png_set_IHDR(png_ptr, info_ptr, width, height,
bit_depth, color_type, interlace_type, bit_depth, color_type, interlace_type,
compression_type, filter_type) compression_type, filter_method)
width - holds the width of the image width - holds the width of the image
in pixels (up to 2^31). in pixels (up to 2^31).
height - holds the height of the image height - holds the height of the image
...@@ -1633,7 +1640,11 @@ Some of the more important parts of the png_info are: ...@@ -1633,7 +1640,11 @@ Some of the more important parts of the png_info are:
PNG_INTERLACE_ADAM7 PNG_INTERLACE_ADAM7
compression_type - (must be compression_type - (must be
PNG_COMPRESSION_TYPE_DEFAULT) PNG_COMPRESSION_TYPE_DEFAULT)
filter_type - (must be PNG_FILTER_TYPE_DEFAULT) filter_method - (must be PNG_FILTER_TYPE_DEFAULT
or, if you are writing a PNG to
be embedded in a MNG datastream,
can also be
PNG_INTRAPIXEL_DIFFERENCING)
png_set_PLTE(png_ptr, info_ptr, palette, png_set_PLTE(png_ptr, info_ptr, palette,
num_palette); num_palette);
...@@ -2231,13 +2242,22 @@ For a more compact example of writing a PNG image, see the file example.c. ...@@ -2231,13 +2242,22 @@ For a more compact example of writing a PNG image, see the file example.c.
V. Modifying/Customizing libpng: V. Modifying/Customizing libpng:
There are two issues here. The first is changing how libpng does There are three issues here. The first is changing how libpng does
standard things like memory allocation, input/output, and error handling. standard things like memory allocation, input/output, and error handling.
The second deals with more complicated things like adding new chunks, The second deals with more complicated things like adding new chunks,
adding new transformations, and generally changing how libpng works. adding new transformations, and generally changing how libpng works.
Both of those are compile-time issues; that is, they are generally
determined at the time the code is written, and there is rarely a need
to provide the user with a means of changing them. The third is a
run-time issue: choosing between and/or tuning one or more alternate
versions of computationally intensive routines; specifically, optimized
assembly-language (and therefore compiler- and platform-dependent)
versions.
Memory allocation, input/output, and error handling
All of the memory allocation, input/output, and error handling in libpng All of the memory allocation, input/output, and error handling in libpng
goes through callbacks that are user settable. The default routines are goes through callbacks that are user-settable. The default routines are
in pngmem.c, pngrio.c, pngwio.c, and pngerror.c, respectively. To change in pngmem.c, pngrio.c, pngwio.c, and pngerror.c, respectively. To change
these functions, call the appropriate png_set_*_fn() function. these functions, call the appropriate png_set_*_fn() function.
...@@ -2470,6 +2490,10 @@ structures appropriately for all of the filter types. ...@@ -2470,6 +2490,10 @@ 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
if you are writing a PNG to be embedded in a MNG
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
...@@ -2581,7 +2605,33 @@ When PNG_DEBUG = 1, the macros are defined, but only png_debug statements ...@@ -2581,7 +2605,33 @@ When PNG_DEBUG = 1, the macros are defined, but only png_debug statements
having level = 0 will be printed. There aren't any such statements in having level = 0 will be printed. There aren't any such statements in
this version of libpng, but if you insert some they will be printed. this version of libpng, but if you insert some they will be printed.
VI. Changes to Libpng from version 0.88
VI. MNG support
The MNG specification (available at http://www.libpng.org/pub/mng) allows
certain extensions to PNG for PNG images that are embedded in MNG datastreams.
Libpng can support some of these extensions. To enable them, use the
png_permit_mng_features() function:
feature_set = png_permit_mng_features(png_ptr, mask)
mask is a png_uint_32 containing the logical OR of the
features you want to enable. These include
PNG_FLAG_MNG_EMPTY_PLTE
PNG_FLAG_MNG_FILTER_64
PNG_ALL_MNG_FEATURES
feature_set is a png_32_uint that is the logical AND of
your mask with the set of MNG features that is
supported by the version of libpng that you are using.
It is an error to use this function when reading or writing a standalone
PNG file with the PNG 8-byte signature. The PNG datastream must be wrapped
in a MNG datastream. As a minimum, it must have the MNG 8-byte signature
and the MHDR and MEND chunks. Libpng does not provide support for these
or any other MNG chunks; your application must provide its own support for
them. You may wish to consider using libmng (available at
http://www.libmng.com) instead.
VII. Changes to Libpng from version 0.88
It should be noted that versions of libpng later than 0.96 are not It should be noted that versions of libpng later than 0.96 are not
distributed by the original libpng author, Guy Schalnat, nor by distributed by the original libpng author, Guy Schalnat, nor by
...@@ -2630,15 +2680,15 @@ application: ...@@ -2630,15 +2680,15 @@ application:
png_uint_32 application_vn = PNG_LIBPNG_VER; png_uint_32 application_vn = PNG_LIBPNG_VER;
VII. Y2K Compliance in libpng VIII. Y2K Compliance in libpng
November 10, 2000 January 16, 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.9beta1 are Y2K compliant. It is my belief that earlier upward through 1.0.9beta10 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
......
.TH LIBPNGPF 3 "November 10, 2000" .TH LIBPNGPF 3 "January 16, 2001"
.SH NAME .SH NAME
libpng \- Portable Network Graphics (PNG) Reference Library 1.0.9beta1 libpng \- Portable Network Graphics (PNG) Reference Library 1.0.9beta10
(private functions) (private functions)
.SH SYNOPSIS .SH SYNOPSIS
\fB#include <png.h>\fP \fB#include <png.h>\fP
......
.TH PNG 5 "November 10, 2000" .TH PNG 5 "January 16, 2001"
.SH NAME .SH NAME
png \- Portable Network Graphics (PNG) format png \- Portable Network Graphics (PNG) format
.SH DESCRIPTION .SH DESCRIPTION
......
/* png.c - location for general purpose libpng functions /* png.c - location for general purpose libpng functions
* *
* libpng version 1.0.9beta1 - November 10, 2000 * libpng version 1.0.9beta10 - January 16, 2001
* Copyright (c) 1998, 1999, 2000 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 @@ ...@@ -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_9beta1 Your_png_h_is_not_version_1_0_9beta1; typedef version_1_0_9beta10 Your_png_h_is_not_version_1_0_9beta10;
/* 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.9beta1"; const char png_libpng_ver[18] = "1.0.9beta10";
/* 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. */
...@@ -526,7 +526,7 @@ png_info_destroy(png_structp png_ptr, png_infop info_ptr) ...@@ -526,7 +526,7 @@ png_info_destroy(png_structp png_ptr, png_infop info_ptr)
png_debug(1, "in png_info_destroy\n"); png_debug(1, "in png_info_destroy\n");
png_free_data(png_ptr, info_ptr, PNG_FREE_ALL, -1); png_free_data(png_ptr, info_ptr, PNG_FREE_ALL, -1);
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED) #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
if (png_ptr->num_chunk_list) if (png_ptr->num_chunk_list)
{ {
...@@ -626,8 +626,8 @@ png_charp PNGAPI ...@@ -626,8 +626,8 @@ 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.9beta1 - November 10, 2000\n\ return ((png_charp) "\n libpng version 1.0.9beta10 - January 16, 2001\n\
Copyright (c) 1998-2000 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");
return ((png_charp) ""); return ((png_charp) "");
...@@ -644,8 +644,8 @@ png_get_libpng_ver(png_structp png_ptr) ...@@ -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.9beta1"); return((png_charp) "1.0.9beta10");
return((png_charp) "1.0.9beta1"); return((png_charp) "1.0.9beta10");
} }
png_charp PNGAPI png_charp PNGAPI
...@@ -697,3 +697,13 @@ png_access_version_number(void) ...@@ -697,3 +697,13 @@ 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) 10009L);
} }
/* this function was added to libpng 1.0.9 (porting aid to libpng-1.2.0) */
#ifndef PNG_ASSEMBLER_CODE_SUPPORTED
int PNGAPI
png_mmx_support(void)
{
return -1;
}
#endif
/* png.h - header file for PNG reference library /* png.h - header file for PNG reference library
* *
* libpng version 1.0.9beta1 - November 10, 2000 * libpng version 1.0.9beta10 - January 16, 2001
* Copyright (c) 1998, 1999, 2000 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.)
* *
* 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.9beta1 - November 10, 2000: Glenn * libpng versions 0.97, January 1998, through 1.0.9beta10 - January 16, 2001: Glenn
* See also "Contributing Authors", below. * See also "Contributing Authors", below.
* *
* Note about libpng version numbers: * Note about libpng version numbers:
...@@ -58,12 +58,14 @@ ...@@ -58,12 +58,14 @@
* 1.0.8beta1-4 10008 2.1.0.8beta1-4 * 1.0.8beta1-4 10008 2.1.0.8beta1-4
* 1.0.8rc1 10008 2.1.0.8rc1 * 1.0.8rc1 10008 2.1.0.8rc1
* 1.0.8 10008 2.1.0.8 * 1.0.8 10008 2.1.0.8
* 1.0.9beta1 10009 2.1.0.9 * 1.0.9beta1-6 10009 2.1.0.9beta1-6
* 1.0.9rc1 10009 2.1.0.9rc1
* 1.0.9beta7-10 10009 2.1.0.9beta7-10
* *
* 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
* 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_LIBPNG_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
* were given the previous public release number plus a letter, until * were given the previous public release number plus a letter, until
...@@ -85,8 +87,8 @@ ...@@ -85,8 +87,8 @@
* 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.9beta1, November 10, 2000, are * libpng versions 1.0.7, July 1, 2000, through 1.0.9beta10, January 16, 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
* *
...@@ -190,13 +192,13 @@ ...@@ -190,13 +192,13 @@
* Y2K compliance in libpng: * Y2K compliance in libpng:
* ========================= * =========================
* *
* November 10, 2000 * January 16, 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.9beta1 are Y2K compliant. It is my belief that earlier * upward through 1.0.9beta10 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
...@@ -252,7 +254,7 @@ ...@@ -252,7 +254,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.9beta1" #define PNG_LIBPNG_VER_STRING "1.0.9beta10"
#define PNG_LIBPNG_VER_SONUM 2 #define PNG_LIBPNG_VER_SONUM 2
...@@ -262,7 +264,16 @@ ...@@ -262,7 +264,16 @@
#define PNG_LIBPNG_VER_RELEASE 9 #define PNG_LIBPNG_VER_RELEASE 9
/* 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 1
#define PNG_LIBPNG_VER_BUILD 10
#define PNG_LIBPNG_BUILD_ALPHA 1
#define PNG_LIBPNG_BUILD_BETA 2
#define PNG_LIBPNG_BUILD_RC 3
#define PNG_LIBPNG_BUILD_STABLE 4
#define PNG_LIBPNG_BUILD_TYPEMASK 7
#define PNG_LIBPNG_BUILD_PATCH 8 /* Can be OR'ed with STABLE only */
#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.
...@@ -271,21 +282,14 @@ ...@@ -271,21 +282,14 @@
* 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 10009 /* 1.0.9 */
/* Note to maintainer: update this number in scripts/pngdef.pas as well */
#ifndef PNG_VERSION_INFO_ONLY #ifndef PNG_VERSION_INFO_ONLY
/* include the compression library's header */ /* include the compression library's header */
#include "zlib.h" #include "zlib.h"
/* include all user configurable info */ /* include all user configurable info, including optional assembler routines */
#include "pngconf.h" #include "pngconf.h"
/* macros for optional assembler routines */
#if defined(PNG_INTERNAL) && defined(PNG_ASSEMBLER_CODE_SUPPORTED)
# include "pngasmrd.h"
#endif
/* Inhibit C++ name-mangling for libpng functions but not for system calls. */ /* Inhibit C++ name-mangling for libpng functions but not for system calls. */
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
...@@ -439,7 +443,7 @@ typedef png_text FAR * FAR * png_textpp; ...@@ -439,7 +443,7 @@ typedef png_text FAR * FAR * png_textpp;
* Two conversions are provided, both from time_t and struct tm. There * Two conversions are provided, both from time_t and struct tm. There
* is no portable way to convert to either of these structures, as far * is no portable way to convert to either of these structures, as far
* as I know. If you know of a portable way, send it to me. As a side * as I know. If you know of a portable way, send it to me. As a side
* note - PNG is Year 2000 compliant! * note - PNG has always been Year 2000 compliant!
*/ */
typedef struct png_time_struct typedef struct png_time_struct
{ {
...@@ -497,20 +501,20 @@ typedef png_unknown_chunk FAR * FAR * png_unknown_chunkpp; ...@@ -497,20 +501,20 @@ typedef png_unknown_chunk FAR * FAR * png_unknown_chunkpp;
* The following members may have allocated storage attached that should be * The following members may have allocated storage attached that should be
* cleaned up before the structure is discarded: palette, trans, text, * cleaned up before the structure is discarded: palette, trans, text,
* pcal_purpose, pcal_units, pcal_params, hist, iccp_name, iccp_profile, * pcal_purpose, pcal_units, pcal_params, hist, iccp_name, iccp_profile,
* splt_palettes, scal_unit, row_pointers, and unknowns. By default, these are * splt_palettes, scal_unit, row_pointers, and unknowns. By default, these
* automatically freed when the info structure is deallocated, if they were * are automatically freed when the info structure is deallocated, if they were
* allocated internally by libpng. This behavior can be changed by means * allocated internally by libpng. This behavior can be changed by means
* of the png_data_freer() function. * of the png_data_freer() function.
* *
* More allocation details: all the chunk-reading functions that change these * More allocation details: all the chunk-reading functions that
* members go through the corresponding png_set_* functions. A function to * change these members go through the corresponding png_set_*
* clear these members is available: see png_free_data(). Some of the * functions. A function to clear these members is available: see
* png_set_* functions do not depend on being able to point info structure * png_free_data(). The png_set_* functions do not depend on being
* members to any of the storage they are passed (they make their own copies), * able to point info structure members to any of the storage they are
* EXCEPT that the png_set_text functions use the same storage passed to them * passed (they make their own copies), EXCEPT that the png_set_text
* in the text_ptr or itxt_ptr structure argument, and the png_set_tRNS, * functions use the same storage passed to them in the text_ptr or
* png_set_PLTE, png_set_hIST, png_set_iCCP, png_set_rows, png_set_sPLT, * itxt_ptr structure argument, and the png_set_rows and png_set_unknowns
* and png_set_unknowns do not make their own copies. * functions do not make their own copies.
*/ */
typedef struct png_info_struct typedef struct png_info_struct
{ {
...@@ -696,6 +700,7 @@ defined(PNG_READ_BACKGROUND_SUPPORTED) ...@@ -696,6 +700,7 @@ defined(PNG_READ_BACKGROUND_SUPPORTED)
/* iCCP chunk data. */ /* iCCP chunk data. */
png_charp iccp_name; /* profile name */ png_charp iccp_name; /* profile name */
png_charp iccp_profile; /* International Color Consortium profile data */ png_charp iccp_profile; /* International Color Consortium profile data */
/* Note to maintainer: should be png_bytep */
png_uint_32 iccp_proflen; /* ICC profile data length */ png_uint_32 iccp_proflen; /* ICC profile data length */
png_byte iccp_compression; /* Always zero */ png_byte iccp_compression; /* Always zero */
#endif #endif
...@@ -776,6 +781,7 @@ typedef png_info FAR * FAR * png_infopp; ...@@ -776,6 +781,7 @@ typedef png_info FAR * FAR * png_infopp;
/* This is for filter type. PNG 1.0-1.2 only define the single type. */ /* This is for filter type. PNG 1.0-1.2 only define the single type. */
#define PNG_FILTER_TYPE_BASE 0 /* Single row per-byte filtering */ #define PNG_FILTER_TYPE_BASE 0 /* Single row per-byte filtering */
#define PNG_INTRAPIXEL_DIFFERENCING 64 /* Used only in MNG datastreams */
#define PNG_FILTER_TYPE_DEFAULT PNG_FILTER_TYPE_BASE #define PNG_FILTER_TYPE_DEFAULT PNG_FILTER_TYPE_BASE
/* These are for the interlacing type. These values should NOT be changed. */ /* These are for the interlacing type. These values should NOT be changed. */
...@@ -816,6 +822,8 @@ typedef png_info FAR * FAR * png_infopp; ...@@ -816,6 +822,8 @@ typedef png_info FAR * FAR * png_infopp;
/* This is for text chunks */ /* This is for text chunks */
#define PNG_KEYWORD_MAX_LENGTH 79 #define PNG_KEYWORD_MAX_LENGTH 79
/* Maximum number of entries in PLTE/sPLT/tRNS arrays */
#define PNG_MAX_PALETTE_LENGTH 256
/* These determine if an ancillary chunk's data has been successfully read /* These determine if an ancillary chunk's data has been successfully read
* from the PNG header, or if the application has filled in the corresponding * from the PNG header, or if the application has filled in the corresponding
...@@ -910,8 +918,9 @@ typedef void (PNGAPI *png_unknown_chunk_ptr) PNGARG((png_structp)); ...@@ -910,8 +918,9 @@ typedef void (PNGAPI *png_unknown_chunk_ptr) PNGARG((png_structp));
#define PNG_TRANSFORM_STRIP_FILLER 0x0800 /* WRITE only */ #define PNG_TRANSFORM_STRIP_FILLER 0x0800 /* WRITE only */
/* Flags for MNG supported features */ /* Flags for MNG supported features */
#define PNG_FLAG_MNG_EMPTY_PLTE 0x01 #define PNG_FLAG_MNG_EMPTY_PLTE 0x01
#define PNG_ALL_MNG_FEATURES 0x01 #define PNG_FLAG_MNG_FILTER_64 0x04
#define PNG_ALL_MNG_FEATURES 0x05
typedef png_voidp (*png_malloc_ptr) PNGARG((png_structp, png_size_t)); typedef png_voidp (*png_malloc_ptr) PNGARG((png_structp, png_size_t));
typedef void (*png_free_ptr) PNGARG((png_structp, png_voidp)); typedef void (*png_free_ptr) PNGARG((png_structp, png_voidp));
...@@ -1157,12 +1166,15 @@ struct png_struct_def ...@@ -1157,12 +1166,15 @@ struct png_struct_def
png_fixed_point int_gamma; png_fixed_point int_gamma;
#endif #endif
png_byte filter_type;
}; };
/* 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.9beta1 and png.h are both at * version 1.0.9beta10
*/ */
typedef png_structp version_1_0_9beta1; typedef png_structp version_1_0_9beta10;
typedef png_struct FAR * FAR * png_structpp; typedef png_struct FAR * FAR * png_structpp;
...@@ -2014,12 +2026,14 @@ extern PNG_EXPORT(void,png_set_sRGB_gAMA_and_cHRM) PNGARG((png_structp png_ptr, ...@@ -2014,12 +2026,14 @@ extern PNG_EXPORT(void,png_set_sRGB_gAMA_and_cHRM) PNGARG((png_structp png_ptr,
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));
/* Note to maintainer: profile should be png_bytepp */
#endif #endif
#if defined(PNG_iCCP_SUPPORTED) #if defined(PNG_iCCP_SUPPORTED)
extern PNG_EXPORT(void,png_set_iCCP) PNGARG((png_structp png_ptr, extern PNG_EXPORT(void,png_set_iCCP) PNGARG((png_structp png_ptr,
png_infop info_ptr, png_charp name, int compression_type, png_infop info_ptr, png_charp name, int compression_type,
png_charp profile, png_uint_32 proflen)); png_charp profile, png_uint_32 proflen));
/* Note to maintainer: profile should be png_bytep */
#endif #endif
#if defined(PNG_READ_sPLT_SUPPORTED) #if defined(PNG_READ_sPLT_SUPPORTED)
...@@ -2200,8 +2214,13 @@ extern PNG_EXPORT(png_uint_32,png_permit_mng_features) PNGARG((png_structp ...@@ -2200,8 +2214,13 @@ extern PNG_EXPORT(png_uint_32,png_permit_mng_features) PNGARG((png_structp
png_ptr, png_uint_32 mng_features_permitted)); png_ptr, png_uint_32 mng_features_permitted));
#endif #endif
/* png.c, pnggccrd.c, or pngvcrd.c */
extern PNG_EXPORT(int,png_mmx_support) PNGARG((void));
/* 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.9beta1 - November 10, 2000 (header)\n" " libpng version 1.0.9beta10 - January 16, 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
...@@ -2267,6 +2286,7 @@ extern PNG_EXPORT(png_uint_32,png_permit_mng_features) PNGARG((png_structp ...@@ -2267,6 +2286,7 @@ extern PNG_EXPORT(png_uint_32,png_permit_mng_features) PNGARG((png_structp
#define PNG_WROTE_tIME 0x200 #define PNG_WROTE_tIME 0x200
#define PNG_WROTE_INFO_BEFORE_PLTE 0x400 #define PNG_WROTE_INFO_BEFORE_PLTE 0x400
#define PNG_BACKGROUND_IS_GRAY 0x800 #define PNG_BACKGROUND_IS_GRAY 0x800
#define PNG_HAVE_PNG_SIGNATURE 0x1000
/* flags for the transformations the PNG library does on the image data */ /* flags for the transformations the PNG library does on the image data */
#define PNG_BGR 0x0001 #define PNG_BGR 0x0001
...@@ -2428,7 +2448,7 @@ PNG_EXTERN png_uint_16 png_get_uint_16 PNGARG((png_bytep buf)); ...@@ -2428,7 +2448,7 @@ PNG_EXTERN png_uint_16 png_get_uint_16 PNGARG((png_bytep buf));
#endif /* !PNG_READ_BIG_ENDIAN_SUPPORTED */ #endif /* !PNG_READ_BIG_ENDIAN_SUPPORTED */
/* Initialize png_ptr struct for reading, and allocate any other memory. /* Initialize png_ptr struct for reading, and allocate any other memory.
* (old interface - DEPRECATED). * (old interface - DEPRECATED - use png_create_read_struct instead).
*/ */
extern PNG_EXPORT(void,png_read_init) PNGARG((png_structp png_ptr)); extern PNG_EXPORT(void,png_read_init) PNGARG((png_structp png_ptr));
#define png_read_init(png_ptr) png_read_init_2(png_ptr, \ #define png_read_init(png_ptr) png_read_init_2(png_ptr, \
...@@ -2438,7 +2458,7 @@ extern PNG_EXPORT(void,png_read_init_2) PNGARG((png_structp png_ptr, ...@@ -2438,7 +2458,7 @@ extern PNG_EXPORT(void,png_read_init_2) PNGARG((png_structp png_ptr,
png_info_size)); png_info_size));
/* Initialize png_ptr struct for writing, and allocate any other memory. /* Initialize png_ptr struct for writing, and allocate any other memory.
* (old interface - DEPRECATED). * (old interface - DEPRECATED - use png_create_write_struct instead).
*/ */
extern PNG_EXPORT(void,png_write_init) PNGARG((png_structp png_ptr)); extern PNG_EXPORT(void,png_write_init) PNGARG((png_structp png_ptr));
#define png_write_init(png_ptr) png_write_init_2(png_ptr, \ #define png_write_init(png_ptr) png_write_init_2(png_ptr, \
...@@ -2585,6 +2605,7 @@ PNG_EXTERN void png_write_sRGB PNGARG((png_structp png_ptr, ...@@ -2585,6 +2605,7 @@ PNG_EXTERN void png_write_sRGB PNGARG((png_structp png_ptr,
PNG_EXTERN void png_write_iCCP PNGARG((png_structp png_ptr, PNG_EXTERN void png_write_iCCP PNGARG((png_structp png_ptr,
png_charp name, int compression_type, png_charp name, int compression_type,
png_charp profile, int proflen)); png_charp profile, int proflen));
/* Note to maintainer: profile should be png_bytep */
#endif #endif
#if defined(PNG_WRITE_sPLT_SUPPORTED) #if defined(PNG_WRITE_sPLT_SUPPORTED)
...@@ -2679,10 +2700,15 @@ PNG_EXTERN void png_combine_row PNGARG((png_structp png_ptr, png_bytep row, ...@@ -2679,10 +2700,15 @@ 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:
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));
*/
PNG_EXTERN void png_do_read_interlace PNGARG((png_structp png_ptr));
#endif #endif
/* GRR TO DO (2.0 or whenever): simplify other internal calling interfaces */
#if defined(PNG_WRITE_INTERLACING_SUPPORTED) #if defined(PNG_WRITE_INTERLACING_SUPPORTED)
/* grab pixels out of a row for an interlaced pass */ /* grab pixels out of a row for an interlaced pass */
PNG_EXTERN void png_do_write_interlace PNGARG((png_row_infop row_info, PNG_EXTERN void png_do_write_interlace PNGARG((png_row_infop row_info,
...@@ -2987,6 +3013,15 @@ PNG_EXTERN void png_push_read_iTXt PNGARG((png_structp png_ptr, ...@@ -2987,6 +3013,15 @@ PNG_EXTERN void png_push_read_iTXt PNGARG((png_structp png_ptr,
#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */ #endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
#ifdef PNG_MNG_FEATURES_SUPPORTED
PNG_EXTERN void png_do_read_intrapixel PNGARG((png_row_infop row_info,
png_bytep row));
PNG_EXTERN void png_do_write_intrapixel PNGARG((png_row_infop row_info,
png_bytep row));
#endif
/* Maintainer: Put new private prototypes here ^ and in libpngpf.3 */
#endif /* PNG_INTERNAL */ #endif /* PNG_INTERNAL */
#ifdef __cplusplus #ifdef __cplusplus
......
/* 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.9beta1 - November 10, 2000 * libpng 1.0.9beta10 - January 16, 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) 1999, 2000 Glenn Randers-Pehrson * Copyright (c) 2001 Glenn Randers-Pehrson
* *
*/ */
#ifndef PNGASMRD_H /* This file is obsolete in libpng-1.0.9 and later; its contents now appear
#define PNGASMRD_H * at the end of pngconf.h.
#ifdef PNG_ASSEMBLER_CODE_SUPPORTED
/* Set this in the makefile for VC++ on Pentium, not in pngconf.h */
/* Platform must be Pentium. Makefile must assemble and load pngvcrd.c .
* MMX will be detected at run time and used if present.
*/
#ifdef PNG_USE_PNGVCRD
# define PNG_HAVE_ASSEMBLER_COMBINE_ROW
# define PNG_HAVE_ASSEMBLER_READ_INTERLACE
# define PNG_HAVE_ASSEMBLER_READ_FILTER_ROW
#endif
/* Set this in the makefile for gcc/as on Pentium, not in pngconf.h */
/* Platform must be Pentium. Makefile must assemble and load pnggccrd.c .
* MMX will be detected at run time and used if present.
*/
#ifdef PNG_USE_PNGGCCRD
# define PNG_HAVE_ASSEMBLER_COMBINE_ROW
# define PNG_HAVE_ASSEMBLER_READ_INTERLACE
# define PNG_HAVE_ASSEMBLER_READ_FILTER_ROW
#endif
/*
GRR notes:
- see pnggccrd.c for info about what is currently enabled
*/ */
#endif
#endif /* PNGASMRD_H */
此差异已折叠。
/* pngerror.c - stub functions for i/o and memory allocation /* pngerror.c - stub functions for i/o and memory allocation
* *
* libpng 1.0.9beta1 - November 10, 2000 * libpng 1.0.9beta10 - January 16, 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, 1999, 2000 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.)
* *
...@@ -99,7 +99,7 @@ png_format_buffer(png_structp png_ptr, png_charp buffer, png_const_charp message ...@@ -99,7 +99,7 @@ png_format_buffer(png_structp png_ptr, png_charp buffer, png_const_charp message
void PNGAPI void PNGAPI
png_chunk_error(png_structp png_ptr, png_const_charp message) png_chunk_error(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_error(png_ptr, msg); png_error(png_ptr, msg);
} }
......
此差异已折叠。
/* pngget.c - retrieval of values from info struct /* pngget.c - retrieval of values from info struct
* *
* libpng 1.0.9beta1 - November 10, 2000 * libpng 1.0.9beta10 - January 16, 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, 1999, 2000 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.)
*/ */
...@@ -807,7 +807,7 @@ png_get_unknown_chunks(png_structp png_ptr, png_infop info_ptr, ...@@ -807,7 +807,7 @@ png_get_unknown_chunks(png_structp png_ptr, png_infop info_ptr,
png_byte PNGAPI png_byte PNGAPI
png_get_rgb_to_gray_status (png_structp png_ptr) png_get_rgb_to_gray_status (png_structp png_ptr)
{ {
return png_ptr->rgb_to_gray_status; return (png_byte)(png_ptr? png_ptr->rgb_to_gray_status : 0);
} }
#endif #endif
...@@ -815,7 +815,7 @@ png_get_rgb_to_gray_status (png_structp png_ptr) ...@@ -815,7 +815,7 @@ png_get_rgb_to_gray_status (png_structp png_ptr)
png_voidp PNGAPI png_voidp PNGAPI
png_get_user_chunk_ptr(png_structp png_ptr) png_get_user_chunk_ptr(png_structp png_ptr)
{ {
return (png_ptr->user_chunk_ptr); return (png_ptr? png_ptr->user_chunk_ptr : NULL);
} }
#endif #endif
...@@ -823,5 +823,6 @@ png_get_user_chunk_ptr(png_structp png_ptr) ...@@ -823,5 +823,6 @@ png_get_user_chunk_ptr(png_structp png_ptr)
png_uint_32 PNGAPI png_uint_32 PNGAPI
png_get_compression_buffer_size(png_structp png_ptr) png_get_compression_buffer_size(png_structp png_ptr)
{ {
return(png_ptr->zbuf_size); return (png_uint_32)(png_ptr? png_ptr->zbuf_size : 0L);
} }
/* pngmem.c - stub functions for memory allocation /* pngmem.c - stub functions for memory allocation
* *
* libpng 1.0.9beta1 - November 10, 2000 * libpng 1.0.9beta10 - January 16, 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, 1999, 2000 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.)
* *
......
/* pngpread.c - read a png file in push mode /* pngpread.c - read a png file in push mode
* *
* libpng 1.0.9beta1 - November 10, 2000 * libpng 1.0.9beta10 - January 16, 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, 1999, 2000 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.)
*/ */
...@@ -772,18 +772,29 @@ png_push_process_row(png_structp png_ptr) ...@@ -772,18 +772,29 @@ png_push_process_row(png_structp png_ptr)
if (png_ptr->interlaced && (png_ptr->transformations & PNG_INTERLACE)) if (png_ptr->interlaced && (png_ptr->transformations & PNG_INTERLACE))
{ {
if (png_ptr->pass < 6) if (png_ptr->pass < 6)
/* old interface (pre-1.0.9):
png_do_read_interlace(&(png_ptr->row_info), png_do_read_interlace(&(png_ptr->row_info),
png_ptr->row_buf + 1, png_ptr->pass, png_ptr->transformations); png_ptr->row_buf + 1, png_ptr->pass, png_ptr->transformations);
*/
png_do_read_interlace(png_ptr);
switch (png_ptr->pass) switch (png_ptr->pass)
{ {
case 0: case 0:
{ {
int i; int i;
for (i = 0; i < 8 && png_ptr->pass == 0; i++) for (i = 0; i < 8 && png_ptr->pass == 0; i++)
{ {
png_push_have_row(png_ptr, png_ptr->row_buf + 1); png_push_have_row(png_ptr, png_ptr->row_buf + 1);
png_read_push_finish_row(png_ptr); png_read_push_finish_row(png_ptr); /* updates png_ptr->pass */
}
if (png_ptr->pass == 2) /* pass 1 might be empty */
{
for (i = 0; i < 4 && png_ptr->pass == 2; i++)
{
png_push_have_row(png_ptr, NULL);
png_read_push_finish_row(png_ptr);
}
} }
break; break;
} }
...@@ -795,7 +806,7 @@ png_push_process_row(png_structp png_ptr) ...@@ -795,7 +806,7 @@ png_push_process_row(png_structp png_ptr)
png_push_have_row(png_ptr, png_ptr->row_buf + 1); png_push_have_row(png_ptr, png_ptr->row_buf + 1);
png_read_push_finish_row(png_ptr); png_read_push_finish_row(png_ptr);
} }
if (png_ptr->pass == 2) if (png_ptr->pass == 2) /* skip top 4 generated rows */
{ {
for (i = 0; i < 4 && png_ptr->pass == 2; i++) for (i = 0; i < 4 && png_ptr->pass == 2; i++)
{ {
...@@ -818,6 +829,14 @@ png_push_process_row(png_structp png_ptr) ...@@ -818,6 +829,14 @@ png_push_process_row(png_structp png_ptr)
png_push_have_row(png_ptr, NULL); png_push_have_row(png_ptr, NULL);
png_read_push_finish_row(png_ptr); png_read_push_finish_row(png_ptr);
} }
if (png_ptr->pass == 4) /* pass 3 might be empty */
{
for (i = 0; i < 2 && png_ptr->pass == 4; i++)
{
png_push_have_row(png_ptr, NULL);
png_read_push_finish_row(png_ptr);
}
}
break; break;
} }
case 3: case 3:
...@@ -828,7 +847,7 @@ png_push_process_row(png_structp png_ptr) ...@@ -828,7 +847,7 @@ png_push_process_row(png_structp png_ptr)
png_push_have_row(png_ptr, png_ptr->row_buf + 1); png_push_have_row(png_ptr, png_ptr->row_buf + 1);
png_read_push_finish_row(png_ptr); png_read_push_finish_row(png_ptr);
} }
if (png_ptr->pass == 4) if (png_ptr->pass == 4) /* skip top two generated rows */
{ {
for (i = 0; i < 2 && png_ptr->pass == 4; i++) for (i = 0; i < 2 && png_ptr->pass == 4; i++)
{ {
...@@ -851,6 +870,11 @@ png_push_process_row(png_structp png_ptr) ...@@ -851,6 +870,11 @@ png_push_process_row(png_structp png_ptr)
png_push_have_row(png_ptr, NULL); png_push_have_row(png_ptr, NULL);
png_read_push_finish_row(png_ptr); png_read_push_finish_row(png_ptr);
} }
if (png_ptr->pass == 6) /* pass 5 might be empty */
{
png_push_have_row(png_ptr, NULL);
png_read_push_finish_row(png_ptr);
}
break; break;
} }
case 5: case 5:
...@@ -861,7 +885,7 @@ png_push_process_row(png_structp png_ptr) ...@@ -861,7 +885,7 @@ png_push_process_row(png_structp png_ptr)
png_push_have_row(png_ptr, png_ptr->row_buf + 1); png_push_have_row(png_ptr, png_ptr->row_buf + 1);
png_read_push_finish_row(png_ptr); png_read_push_finish_row(png_ptr);
} }
if (png_ptr->pass == 6) if (png_ptr->pass == 6) /* skip top generated row */
{ {
png_push_have_row(png_ptr, NULL); png_push_have_row(png_ptr, NULL);
png_read_push_finish_row(png_ptr); png_read_push_finish_row(png_ptr);
...@@ -928,6 +952,11 @@ png_read_push_finish_row(png_structp png_ptr) ...@@ -928,6 +952,11 @@ png_read_push_finish_row(png_structp png_ptr)
do do
{ {
png_ptr->pass++; png_ptr->pass++;
if ((png_ptr->pass == 1 && png_ptr->width < 5) ||
(png_ptr->pass == 3 && png_ptr->width < 3) ||
(png_ptr->pass == 5 && png_ptr->width < 2))
png_ptr->pass++;
if (png_ptr->pass >= 7) if (png_ptr->pass >= 7)
break; break;
......
/* pngread.c - read a PNG file /* pngread.c - read a PNG file
* *
* libpng 1.0.9beta1 - November 10, 2000 * libpng 1.0.9beta10 - January 16, 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, 1999, 2000 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.)
* *
...@@ -103,7 +103,7 @@ png_create_read_struct_2(png_const_charp user_png_ver, png_voidp error_ptr, ...@@ -103,7 +103,7 @@ png_create_read_struct_2(png_const_charp user_png_ver, png_voidp error_ptr,
removed from version 2.0.0 and beyond because the previous test removed from version 2.0.0 and beyond because the previous test
would have already rejected it. */ would have already rejected it. */
if (user_png_ver[4] == '6' && user_png_ver[2] == '0' && if (user_png_ver[4] == '6' && user_png_ver[2] == '0' &&
user_png_ver[0] == '1' && user_png_ver[5] == '\0') user_png_ver[0] == '1' && user_png_ver[5] == '\0')
{ {
png_error(png_ptr, png_error(png_ptr,
...@@ -246,6 +246,8 @@ png_read_info(png_structp png_ptr, png_infop info_ptr) ...@@ -246,6 +246,8 @@ png_read_info(png_structp png_ptr, png_infop info_ptr)
else else
png_error(png_ptr, "PNG file corrupted by ASCII conversion"); png_error(png_ptr, "PNG file corrupted by ASCII conversion");
} }
if (num_checked < 3)
png_ptr->mode |= PNG_HAVE_PNG_SIGNATURE;
} }
for(;;) for(;;)
...@@ -646,6 +648,15 @@ png_read_row(png_structp png_ptr, png_bytep row, png_bytep dsp_row) ...@@ -646,6 +648,15 @@ png_read_row(png_structp png_ptr, png_bytep row, png_bytep dsp_row)
png_memcpy_check(png_ptr, png_ptr->prev_row, png_ptr->row_buf, png_memcpy_check(png_ptr, png_ptr->prev_row, png_ptr->row_buf,
png_ptr->rowbytes + 1); png_ptr->rowbytes + 1);
#if defined(PNG_MNG_FEATURES_SUPPORTED)
if((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) &&
(png_ptr->filter_type == PNG_INTRAPIXEL_DIFFERENCING))
{
/* Intrapixel differencing */
png_do_read_intrapixel(&(png_ptr->row_info), png_ptr->row_buf + 1);
}
#endif
if (png_ptr->transformations) if (png_ptr->transformations)
png_do_read_transformations(png_ptr); png_do_read_transformations(png_ptr);
...@@ -656,8 +667,11 @@ png_read_row(png_structp png_ptr, png_bytep row, png_bytep dsp_row) ...@@ -656,8 +667,11 @@ png_read_row(png_structp png_ptr, png_bytep row, png_bytep dsp_row)
(png_ptr->transformations & PNG_INTERLACE)) (png_ptr->transformations & PNG_INTERLACE))
{ {
if (png_ptr->pass < 6) if (png_ptr->pass < 6)
/* old interface (pre-1.0.9):
png_do_read_interlace(&(png_ptr->row_info), png_do_read_interlace(&(png_ptr->row_info),
png_ptr->row_buf + 1, png_ptr->pass, png_ptr->transformations); png_ptr->row_buf + 1, png_ptr->pass, png_ptr->transformations);
*/
png_do_read_interlace(png_ptr);
if (dsp_row != NULL) if (dsp_row != NULL)
png_combine_row(png_ptr, dsp_row, png_combine_row(png_ptr, dsp_row,
...@@ -701,7 +715,7 @@ png_read_row(png_structp png_ptr, png_bytep row, png_bytep dsp_row) ...@@ -701,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.9beta1 * [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.9beta10
*/ */
void PNGAPI void PNGAPI
...@@ -750,7 +764,7 @@ png_read_rows(png_structp png_ptr, png_bytepp row, ...@@ -750,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.9beta1 * [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.9beta10
*/ */
void PNGAPI void PNGAPI
png_read_image(png_structp png_ptr, png_bytepp image) png_read_image(png_structp png_ptr, png_bytepp image)
......
/* pngrio.c - functions for data input /* pngrio.c - functions for data input
* *
* libpng 1.0.9beta1 - November 10, 2000 * libpng 1.0.9beta10 - January 16, 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, 1999, 2000 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.)
* *
......
/* 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.9beta1 - November 10, 2000 * libpng 1.0.9beta10 - January 16, 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, 1999, 2000 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.)
* *
...@@ -4053,3 +4053,63 @@ png_build_gamma_table(png_structp png_ptr) ...@@ -4053,3 +4053,63 @@ png_build_gamma_table(png_structp png_ptr)
/* To do: install integer version of png_build_gamma_table here */ /* To do: install integer version of png_build_gamma_table here */
#endif #endif
#if defined(PNG_MNG_FEATURES_SUPPORTED)
/* undoes intrapixel differencing */
void /* PRIVATE */
png_do_read_intrapixel(png_row_infop row_info, png_bytep row)
{
png_debug(1, "in png_do_read_intrapixel\n");
if (
#if defined(PNG_USELESS_TESTS_SUPPORTED)
row != NULL && row_info != NULL &&
#endif
(row_info->color_type & PNG_COLOR_MASK_COLOR))
{
int bytes_per_pixel;
png_uint_32 row_width = row_info->width;
if (row_info->bit_depth == 8)
{
png_bytep rp;
png_uint_32 i;
if (row_info->color_type == PNG_COLOR_TYPE_RGB)
bytes_per_pixel = 3;
else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
bytes_per_pixel = 4;
else
return;
for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel)
{
*(rp) = (png_byte)((256 + *rp + *(rp+1))&0xff);
*(rp+2) = (png_byte)((256 + *(rp+2) + *(rp+1))&0xff);
}
}
else if (row_info->bit_depth == 16)
{
png_bytep rp;
png_uint_32 i;
if (row_info->color_type == PNG_COLOR_TYPE_RGB)
bytes_per_pixel = 6;
else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
bytes_per_pixel = 8;
else
return;
for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel)
{
png_uint_32 s0=*(rp )<<8 | *(rp+1);
png_uint_32 s1=*(rp+2)<<8 | *(rp+3);
png_uint_32 s2=*(rp+4)<<8 | *(rp+5);
png_uint_32 red=(65536+s0+s1)&0xffff;
png_uint_32 blue=(65536+s2+s1)&0xffff;
*(rp ) = (png_byte)((red>>8)&0xff);
*(rp+1) = (png_byte)(red&0xff);
*(rp+4) = (png_byte)((blue>>8)&0xff);
*(rp+5) = (png_byte)(blue&0xff);
}
}
}
}
#endif /* PNG_MNG_FEATURES_SUPPORTED */
/* pngrutil.c - utilities to read a PNG file /* pngrutil.c - utilities to read a PNG file
* *
* libpng 1.0.9beta1 - November 10, 2000 * libpng 1.0.9beta10 - January 16, 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, 1999, 2000 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.)
* *
...@@ -174,7 +174,7 @@ png_decompress_chunk(png_structp png_ptr, int comp_type, ...@@ -174,7 +174,7 @@ png_decompress_chunk(png_structp png_ptr, int comp_type,
png_charp text = NULL; png_charp text = NULL;
png_size_t text_size; png_size_t text_size;
if (comp_type == PNG_TEXT_COMPRESSION_zTXt) if (comp_type == PNG_COMPRESSION_TYPE_BASE)
{ {
int ret = Z_OK; int ret = Z_OK;
png_ptr->zstream.next_in = (png_bytep)(chunkdata + prefix_size); png_ptr->zstream.next_in = (png_bytep)(chunkdata + prefix_size);
...@@ -266,6 +266,13 @@ png_decompress_chunk(png_structp png_ptr, int comp_type, ...@@ -266,6 +266,13 @@ png_decompress_chunk(png_structp png_ptr, int comp_type,
png_warning(png_ptr, png_warning(png_ptr,
"Incomplete compressed datastream in chunk other than IDAT"); "Incomplete compressed datastream in chunk other than IDAT");
#endif #endif
text_size=prefix_size;
if (text == NULL)
{
text = (png_charp)png_malloc(png_ptr, text_size+1);
png_memcpy(text, chunkdata, prefix_size);
}
*(text + text_size) = 0x00;
} }
inflateReset(&png_ptr->zstream); inflateReset(&png_ptr->zstream);
...@@ -275,7 +282,7 @@ png_decompress_chunk(png_structp png_ptr, int comp_type, ...@@ -275,7 +282,7 @@ png_decompress_chunk(png_structp png_ptr, int comp_type,
chunkdata = text; chunkdata = text;
*newlength=text_size; *newlength=text_size;
} }
else /* if (comp_type != PNG_TEXT_COMPRESSION_zTXt) */ else /* if (comp_type != PNG_COMPRESSION_TYPE_BASE) */
{ {
#if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE) #if !defined(PNG_NO_STDIO) && !defined(_WIN32_WCE)
char umsg[50]; char umsg[50];
...@@ -286,10 +293,8 @@ png_decompress_chunk(png_structp png_ptr, int comp_type, ...@@ -286,10 +293,8 @@ png_decompress_chunk(png_structp png_ptr, int comp_type,
png_warning(png_ptr, "Unknown zTXt compression type"); png_warning(png_ptr, "Unknown zTXt compression type");
#endif #endif
/* Copy what we can of the error message into the text chunk */ *(chunkdata + prefix_size) = 0x00;
text_size = (png_size_t)(chunklength - (text - chunkdata)); *newlength=prefix_size;
text_size = sizeof(msg) > text_size ? text_size : sizeof(msg);
png_memcpy(text, msg, text_size);
} }
return chunkdata; return chunkdata;
...@@ -353,8 +358,33 @@ png_handle_IHDR(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) ...@@ -353,8 +358,33 @@ png_handle_IHDR(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
if (compression_type != PNG_COMPRESSION_TYPE_BASE) if (compression_type != PNG_COMPRESSION_TYPE_BASE)
png_error(png_ptr, "Unknown compression method in IHDR"); png_error(png_ptr, "Unknown compression method in IHDR");
if (filter_type != PNG_FILTER_TYPE_BASE) #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"); png_error(png_ptr, "Unknown filter method in IHDR");
#endif
/* set internal variables */ /* set internal variables */
png_ptr->width = width; png_ptr->width = width;
...@@ -362,6 +392,7 @@ png_handle_IHDR(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) ...@@ -362,6 +392,7 @@ png_handle_IHDR(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
png_ptr->bit_depth = (png_byte)bit_depth; png_ptr->bit_depth = (png_byte)bit_depth;
png_ptr->interlaced = (png_byte)interlace_type; png_ptr->interlaced = (png_byte)interlace_type;
png_ptr->color_type = (png_byte)color_type; png_ptr->color_type = (png_byte)color_type;
png_ptr->filter_type = (png_byte)filter_type;
/* find number of channels */ /* find number of channels */
switch (png_ptr->color_type) switch (png_ptr->color_type)
...@@ -397,7 +428,7 @@ png_handle_IHDR(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) ...@@ -397,7 +428,7 @@ png_handle_IHDR(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
void /* PRIVATE */ void /* PRIVATE */
png_handle_PLTE(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) png_handle_PLTE(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
{ {
png_colorp palette; png_color palette[PNG_MAX_PALETTE_LENGTH];
int num, i; int num, i;
#ifndef PNG_NO_POINTER_INDEXING #ifndef PNG_NO_POINTER_INDEXING
png_colorp pal_ptr; png_colorp pal_ptr;
...@@ -426,7 +457,7 @@ png_handle_PLTE(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) ...@@ -426,7 +457,7 @@ png_handle_PLTE(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
} }
#endif #endif
if (length > 768 || length % 3) if (length > 3*PNG_MAX_PALETTE_LENGTH || length % 3)
{ {
if (png_ptr->color_type != PNG_COLOR_TYPE_PALETTE) if (png_ptr->color_type != PNG_COLOR_TYPE_PALETTE)
{ {
...@@ -442,8 +473,6 @@ png_handle_PLTE(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) ...@@ -442,8 +473,6 @@ png_handle_PLTE(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
num = (int)length / 3; num = (int)length / 3;
palette = (png_colorp)png_zalloc(png_ptr, (uInt)num, sizeof (png_color));
#ifndef PNG_NO_POINTER_INDEXING #ifndef PNG_NO_POINTER_INDEXING
for (i = 0, pal_ptr = palette; i < num; i++, pal_ptr++) for (i = 0, pal_ptr = palette; i < num; i++, pal_ptr++)
{ {
...@@ -493,7 +522,6 @@ png_handle_PLTE(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) ...@@ -493,7 +522,6 @@ png_handle_PLTE(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
else else
{ {
png_chunk_warning(png_ptr, "CRC error"); png_chunk_warning(png_ptr, "CRC error");
png_zfree(png_ptr, palette);
return; return;
} }
} }
...@@ -504,15 +532,7 @@ png_handle_PLTE(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) ...@@ -504,15 +532,7 @@ png_handle_PLTE(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
} }
} }
#endif #endif
png_ptr->palette = palette;
png_ptr->num_palette = (png_uint_16)num;
#ifdef PNG_FREE_ME_SUPPORTED
png_free_data(png_ptr, info_ptr, PNG_FREE_PLTE, 0);
png_ptr->free_me |= PNG_FREE_PLTE;
#else
png_ptr->flags |= PNG_FLAG_FREE_PLTE;
#endif
png_set_PLTE(png_ptr, info_ptr, palette, num); png_set_PLTE(png_ptr, info_ptr, palette, num);
#if defined(PNG_READ_tRNS_SUPPORTED) #if defined(PNG_READ_tRNS_SUPPORTED)
...@@ -1050,6 +1070,8 @@ png_handle_iCCP(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) ...@@ -1050,6 +1070,8 @@ png_handle_iCCP(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
slength, prefix_length, &data_length); slength, prefix_length, &data_length);
profile_length = data_length - prefix_length; profile_length = data_length - prefix_length;
/* Check the profile_size recorded in the first 32 bits of the ICC profile */
profile_size = ((*(chunkdata+prefix_length))<<24) | profile_size = ((*(chunkdata+prefix_length))<<24) |
((*(chunkdata+prefix_length+1))<<16) | ((*(chunkdata+prefix_length+1))<<16) |
((*(chunkdata+prefix_length+2))<< 8) | ((*(chunkdata+prefix_length+2))<< 8) |
...@@ -1065,7 +1087,7 @@ png_handle_iCCP(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) ...@@ -1065,7 +1087,7 @@ png_handle_iCCP(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
} }
png_set_iCCP(png_ptr, info_ptr, chunkdata, compression_type, png_set_iCCP(png_ptr, info_ptr, chunkdata, compression_type,
chunkdata + prefix_length, data_length-prefix_length); chunkdata + prefix_length, profile_length);
png_free(png_ptr, chunkdata); png_free(png_ptr, chunkdata);
} }
#endif /* PNG_READ_iCCP_SUPPORTED */ #endif /* PNG_READ_iCCP_SUPPORTED */
...@@ -1202,6 +1224,8 @@ png_handle_sPLT(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) ...@@ -1202,6 +1224,8 @@ png_handle_sPLT(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
void /* PRIVATE */ void /* PRIVATE */
png_handle_tRNS(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) png_handle_tRNS(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
{ {
png_byte readbuf[PNG_MAX_PALETTE_LENGTH];
png_debug(1, "in png_handle_tRNS\n"); png_debug(1, "in png_handle_tRNS\n");
if (!(png_ptr->mode & PNG_HAVE_IHDR)) if (!(png_ptr->mode & PNG_HAVE_IHDR))
...@@ -1239,8 +1263,7 @@ png_handle_tRNS(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) ...@@ -1239,8 +1263,7 @@ png_handle_tRNS(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
return; return;
} }
png_ptr->trans = (png_bytep)png_malloc(png_ptr, length); png_crc_read(png_ptr, readbuf, (png_size_t)length);
png_crc_read(png_ptr, png_ptr->trans, (png_size_t)length);
png_ptr->num_trans = (png_uint_16)length; png_ptr->num_trans = (png_uint_16)length;
} }
else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB) else if (png_ptr->color_type == PNG_COLOR_TYPE_RGB)
...@@ -1285,15 +1308,7 @@ png_handle_tRNS(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) ...@@ -1285,15 +1308,7 @@ png_handle_tRNS(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
if (png_crc_finish(png_ptr, 0)) if (png_crc_finish(png_ptr, 0))
return; return;
#ifdef PNG_FREE_ME_SUPPORTED png_set_tRNS(png_ptr, info_ptr, readbuf, png_ptr->num_trans,
png_free_data(png_ptr, info_ptr, PNG_FREE_TRNS, 0);
if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
png_ptr->free_me |= PNG_FREE_TRNS;
#else
if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
png_ptr->flags |= PNG_FLAG_FREE_TRNS;
#endif
png_set_tRNS(png_ptr, info_ptr, png_ptr->trans, png_ptr->num_trans,
&(png_ptr->trans_values)); &(png_ptr->trans_values));
} }
#endif #endif
...@@ -1392,6 +1407,7 @@ void /* PRIVATE */ ...@@ -1392,6 +1407,7 @@ void /* PRIVATE */
png_handle_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) png_handle_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
{ {
int num, i; int num, i;
png_uint_16 readbuf[PNG_MAX_PALETTE_LENGTH];
png_debug(1, "in png_handle_hIST\n"); png_debug(1, "in png_handle_hIST\n");
...@@ -1416,34 +1432,26 @@ png_handle_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) ...@@ -1416,34 +1432,26 @@ png_handle_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
return; return;
} }
if (length != (png_uint_32)(2 * png_ptr->num_palette)) num = (int)length / 2 ;
if (num != png_ptr->num_palette)
{ {
png_warning(png_ptr, "Incorrect hIST chunk length"); png_warning(png_ptr, "Incorrect hIST chunk length");
png_crc_finish(png_ptr, length); png_crc_finish(png_ptr, length);
return; return;
} }
num = (int)length / 2 ;
png_ptr->hist = (png_uint_16p)png_malloc(png_ptr,
(png_uint_32)(num * sizeof (png_uint_16)));
for (i = 0; i < num; i++) for (i = 0; i < num; i++)
{ {
png_byte buf[2]; png_byte buf[2];
png_crc_read(png_ptr, buf, 2); png_crc_read(png_ptr, buf, 2);
png_ptr->hist[i] = png_get_uint_16(buf); readbuf[i] = png_get_uint_16(buf);
} }
if (png_crc_finish(png_ptr, 0)) if (png_crc_finish(png_ptr, 0))
return; return;
#ifdef PNG_FREE_ME_SUPPORTED png_set_hIST(png_ptr, info_ptr, readbuf);
png_free_data(png_ptr, info_ptr, PNG_FREE_HIST, 0);
png_ptr->free_me |= PNG_FREE_HIST;
#else
png_ptr->flags |= PNG_FLAG_FREE_HIST;
#endif
png_set_hIST(png_ptr, info_ptr, png_ptr->hist);
} }
#endif #endif
...@@ -1922,6 +1930,11 @@ png_handle_zTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length) ...@@ -1922,6 +1930,11 @@ png_handle_zTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
else else
{ {
comp_type = *(++text); comp_type = *(++text);
if (comp_type != PNG_TEXT_COMPRESSION_zTXt)
{
png_warning(png_ptr, "Unknown compression type in zTXt chunk");
comp_type = PNG_TEXT_COMPRESSION_zTXt;
}
text++; /* skip the compression_method byte */ text++; /* skip the compression_method byte */
} }
prefix_len = text - chunkdata; prefix_len = text - chunkdata;
...@@ -2152,13 +2165,9 @@ png_check_chunk_name(png_structp png_ptr, png_bytep chunk_name) ...@@ -2152,13 +2165,9 @@ png_check_chunk_name(png_structp png_ptr, png_bytep chunk_name)
a zero indicates the pixel is to be skipped. This is in addition a zero indicates the pixel is to be skipped. This is in addition
to any alpha or transparency value associated with the pixel. If to any alpha or transparency value associated with the pixel. If
you want all pixels to be combined, pass 0xff (255) in mask. */ you want all pixels to be combined, pass 0xff (255) in mask. */
#ifndef PNG_HAVE_ASSEMBLER_COMBINE_ROW
void /* PRIVATE */ void /* PRIVATE */
#ifdef PNG_HAVE_ASSEMBLER_COMBINE_ROW png_combine_row(png_structp png_ptr, png_bytep row, int mask)
png_combine_row_c
#else
png_combine_row
#endif /* PNG_HAVE_ASSEMBLER_COMBINE_ROW */
(png_structp png_ptr, png_bytep row, int mask)
{ {
png_debug(1,"in png_combine_row\n"); png_debug(1,"in png_combine_row\n");
if (mask == 0xff) if (mask == 0xff)
...@@ -2358,25 +2367,24 @@ png_combine_row ...@@ -2358,25 +2367,24 @@ png_combine_row
} }
} }
} }
#endif /* !PNG_HAVE_ASSEMBLER_COMBINE_ROW */
#if defined(PNG_READ_INTERLACING_SUPPORTED) #ifdef PNG_READ_INTERLACING_SUPPORTED
#ifndef PNG_HAVE_ASSEMBLER_READ_INTERLACE /* else in pngvcrd.c, pnggccrd.c */
void /* PRIVATE */ void /* PRIVATE */
#ifdef PNG_HAVE_ASSEMBLER_READ_INTERLACE png_do_read_interlace(png_structp png_ptr)
png_do_read_interlace_c
#else
png_do_read_interlace
#endif /* PNG_HAVE_ASSEMBLER_READ_INTERLACE */
(png_row_infop row_info, png_bytep row, int pass,
png_uint_32 transformations)
{ {
png_row_infop row_info = &(png_ptr->row_info);
png_bytep row = png_ptr->row_buf + 1;
int pass = png_ptr->pass;
png_uint_32 transformations = png_ptr->transformations;
#ifdef PNG_USE_LOCAL_ARRAYS #ifdef PNG_USE_LOCAL_ARRAYS
/* arrays to facilitate easy interlacing - use pass (0 - 6) as index */ /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */
/* offset to next interlace block */ /* offset to next interlace block */
const int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1}; const int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
#endif #endif
png_debug(1,"in png_do_read_interlace\n"); png_debug(1,"in png_do_read_interlace (stock C version)\n");
if (row != NULL && row_info != NULL) if (row != NULL && row_info != NULL)
{ {
png_uint_32 final_width; png_uint_32 final_width;
...@@ -2586,15 +2594,12 @@ png_do_read_interlace ...@@ -2586,15 +2594,12 @@ png_do_read_interlace
return; return;
#endif #endif
} }
#endif #endif /* !PNG_HAVE_ASSEMBLER_READ_INTERLACE */
#endif /* PNG_READ_INTERLACING_SUPPORTED */
#ifndef PNG_HAVE_ASSEMBLER_READ_FILTER_ROW
void /* PRIVATE */ void /* PRIVATE */
#ifdef PNG_HAVE_ASSEMBLER_READ_FILTER_ROW png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep row,
png_read_filter_row_c
#else
png_read_filter_row
#endif /* PNG_HAVE_ASSEMBLER_READ_FILTER_ROW */
(png_structp png_ptr, png_row_infop row_info, png_bytep row,
png_bytep prev_row, int filter) png_bytep prev_row, int filter)
{ {
png_debug(1, "in png_read_filter_row\n"); png_debug(1, "in png_read_filter_row\n");
...@@ -2715,6 +2720,7 @@ png_read_filter_row ...@@ -2715,6 +2720,7 @@ png_read_filter_row
break; break;
} }
} }
#endif /* !PNG_HAVE_ASSEMBLER_READ_FILTER_ROW */
void /* PRIVATE */ void /* PRIVATE */
png_read_finish_row(png_structp png_ptr) png_read_finish_row(png_structp png_ptr)
......
/* pngset.c - storage of image information into info struct /* pngset.c - storage of image information into info struct
* *
* libpng 1.0.9beta1 - November 10, 2000 * libpng 1.0.9beta10 - January 16, 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, 1999, 2000 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.)
* *
...@@ -133,12 +133,31 @@ png_set_gAMA_fixed(png_structp png_ptr, png_infop info_ptr, png_fixed_point ...@@ -133,12 +133,31 @@ png_set_gAMA_fixed(png_structp png_ptr, png_infop info_ptr, png_fixed_point
void PNGAPI void PNGAPI
png_set_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_16p hist) png_set_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_16p hist)
{ {
int i;
png_debug1(1, "in %s storage function\n", "hIST"); png_debug1(1, "in %s storage function\n", "hIST");
if (png_ptr == NULL || info_ptr == NULL) if (png_ptr == NULL || info_ptr == NULL)
return; return;
if (info_ptr->num_palette == 0)
png_warning(png_ptr,
"Palette size 0, hIST allocation skipped.");
#ifdef PNG_FREE_ME_SUPPORTED
png_free_data(png_ptr, info_ptr, PNG_FREE_HIST, 0);
#endif
png_ptr->hist = (png_uint_16p)png_malloc(png_ptr,
(png_uint_32)(info_ptr->num_palette * sizeof (png_uint_16)));
info_ptr->hist = hist; for (i = 0; i < info_ptr->num_palette; i++)
png_ptr->hist[i] = hist[i];
info_ptr->hist = png_ptr->hist;
info_ptr->valid |= PNG_INFO_hIST; info_ptr->valid |= PNG_INFO_hIST;
#ifdef PNG_FREE_ME_SUPPORTED
info_ptr->free_me |= PNG_FREE_HIST;
#else
png_ptr->flags |= PNG_FLAG_FREE_HIST;
#endif
} }
#endif #endif
...@@ -320,9 +339,26 @@ png_set_PLTE(png_structp png_ptr, png_infop info_ptr, ...@@ -320,9 +339,26 @@ png_set_PLTE(png_structp png_ptr, png_infop info_ptr,
if (png_ptr == NULL || info_ptr == NULL) if (png_ptr == NULL || info_ptr == NULL)
return; return;
info_ptr->palette = palette; /*
* It may not actually be necessary to set png_ptr->palette here;
* we do it for backward compatibility with the way the png_handle_tRNS
* function used to do the allocation.
*/
#ifdef PNG_FREE_ME_SUPPORTED
png_free_data(png_ptr, info_ptr, PNG_FREE_PLTE, 0);
#endif
png_ptr->palette = (png_colorp)png_zalloc(png_ptr, (uInt)num_palette,
sizeof (png_color));
memcpy(png_ptr->palette, palette, num_palette * sizeof (png_color));
info_ptr->palette = png_ptr->palette;
info_ptr->num_palette = png_ptr->num_palette = (png_uint_16)num_palette;
#ifdef PNG_FREE_ME_SUPPORTED
info_ptr->free_me |= PNG_FREE_PLTE;
#else
png_ptr->flags |= PNG_FLAG_FREE_PLTE;
#endif
info_ptr->num_palette = (png_uint_16)num_palette;
info_ptr->valid |= PNG_INFO_PLTE; info_ptr->valid |= PNG_INFO_PLTE;
} }
...@@ -631,7 +667,23 @@ png_set_tRNS(png_structp png_ptr, png_infop info_ptr, ...@@ -631,7 +667,23 @@ png_set_tRNS(png_structp png_ptr, png_infop info_ptr,
return; return;
if (trans != NULL) if (trans != NULL)
info_ptr->trans = trans; {
/*
* It may not actually be necessary to set png_ptr->trans here;
* we do it for backward compatibility with the way the png_handle_tRNS
* function used to do the allocation.
*/
#ifdef PNG_FREE_ME_SUPPORTED
png_free_data(png_ptr, info_ptr, PNG_FREE_TRNS, 0);
#endif
png_ptr->trans = info_ptr->trans = png_malloc(png_ptr, num_trans);
memcpy(info_ptr->trans, trans, num_trans);
#ifdef PNG_FREE_ME_SUPPORTED
info_ptr->free_me |= PNG_FREE_TRNS;
#else
png_ptr->flags |= PNG_FLAG_FREE_TRNS;
#endif
}
if (trans_values != NULL) if (trans_values != NULL)
{ {
...@@ -730,7 +782,7 @@ void PNGAPI ...@@ -730,7 +782,7 @@ void PNGAPI
png_set_unknown_chunk_location(png_structp png_ptr, png_infop info_ptr, png_set_unknown_chunk_location(png_structp png_ptr, png_infop info_ptr,
int chunk, int location) int chunk, int location)
{ {
if(png_ptr != NULL && info_ptr != NULL && chunk >= 0 && chunk < if(png_ptr != NULL && info_ptr != NULL && chunk >= 0 && chunk <
(int)info_ptr->unknown_chunks_num) (int)info_ptr->unknown_chunks_num)
info_ptr->unknown_chunks[chunk].location = (png_byte)location; info_ptr->unknown_chunks[chunk].location = (png_byte)location;
} }
...@@ -842,6 +894,8 @@ png_set_compression_buffer_size(png_structp png_ptr, png_uint_32 size) ...@@ -842,6 +894,8 @@ png_set_compression_buffer_size(png_structp png_ptr, png_uint_32 size)
png_free(png_ptr, png_ptr->zbuf); png_free(png_ptr, png_ptr->zbuf);
png_ptr->zbuf_size = (png_size_t)size; png_ptr->zbuf_size = (png_size_t)size;
png_ptr->zbuf = (png_bytep)png_malloc(png_ptr, size); png_ptr->zbuf = (png_bytep)png_malloc(png_ptr, size);
if(!png_ptr->zbuf)
png_error(png_ptr,"Unable to malloc zbuf");
png_ptr->zstream.next_out = png_ptr->zbuf; png_ptr->zstream.next_out = png_ptr->zbuf;
png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size; png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
} }
...@@ -852,3 +906,4 @@ png_set_invalid(png_structp png_ptr, png_infop info_ptr, int mask) ...@@ -852,3 +906,4 @@ png_set_invalid(png_structp png_ptr, png_infop info_ptr, int mask)
if (png_ptr && info_ptr) if (png_ptr && info_ptr)
info_ptr->valid &= ~(mask); info_ptr->valid &= ~(mask);
} }
/* pngtest.c - a simple test program to test libpng /* pngtest.c - a simple test program to test libpng
* *
* libpng 1.0.9beta1 - November 10, 2000 * libpng 1.0.9beta10 - January 16, 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, 1999, 2000 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.)
* *
...@@ -50,6 +50,14 @@ ...@@ -50,6 +50,14 @@
# define FCLOSE(file) fclose(file) # define FCLOSE(file) fclose(file)
#endif #endif
#if defined(PNG_NO_STDIO)
#if defined(_WIN32_WCE)
typedef HANDLE png_FILE_p;
#else
typedef FILE * png_FILE_p;
#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
...@@ -257,6 +265,7 @@ static int wrote_question = 0; ...@@ -257,6 +265,7 @@ static int wrote_question = 0;
not reading from a standard C stream, you should create a replacement not reading from a standard C stream, you should create a replacement
read_data function and use it at run time with png_set_read_fn(), rather read_data function and use it at run time with png_set_read_fn(), rather
than changing the library. */ than changing the library. */
#ifndef USE_FAR_KEYWORD #ifndef USE_FAR_KEYWORD
static void static void
pngtest_read_data(png_structp png_ptr, png_bytep data, png_size_t length) pngtest_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
...@@ -1449,4 +1458,4 @@ main(int argc, char *argv[]) ...@@ -1449,4 +1458,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_9beta1 your_png_h_is_not_version_1_0_9beta1; typedef version_1_0_9beta10 your_png_h_is_not_version_1_0_9beta10;
/* 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.9beta1 - November 10, 2000 * libpng 1.0.9beta10 - January 16, 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, 1999, 2000 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.)
*/ */
...@@ -606,3 +606,4 @@ png_get_user_transform_ptr(png_structp png_ptr) ...@@ -606,3 +606,4 @@ png_get_user_transform_ptr(png_structp png_ptr)
return (NULL); return (NULL);
#endif #endif
} }
...@@ -2,13 +2,20 @@ ...@@ -2,13 +2,20 @@
* *
* For Intel x86 CPU and Microsoft Visual C++ compiler * For Intel x86 CPU and Microsoft Visual C++ compiler
* *
* libpng 1.0.9beta1 - November 10, 2000 * libpng 1.0.9beta10 - January 16, 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, 1999, 2000 Glenn Randers-Pehrson * Copyright (c) 1998-2001 Glenn Randers-Pehrson
* Copyright (c) 1998, Intel Corporation * Copyright (c) 1998, Intel Corporation
* *
* Contributed by Nirav Chhatrapati, Intel Corporation, 1998 * Contributed by Nirav Chhatrapati, Intel Corporation, 1998
* Interface to libpng contributed by Gilles Vollant, 1999 * Interface to libpng contributed by Gilles Vollant, 1999
* Debugging and cleanup by Greg Roelofs, 2000, 2001
*
* In png_do_read_interlace() in libpng versions 1.0.3a through 1.0.4d,
* a sign error in the post-MMX cleanup code for each pixel_depth resulted
* in bad pixels at the beginning of some rows of some images, and also
* (due to out-of-range memory reads and writes) caused heap corruption
* when compiled with MSVC 6.0. The error was fixed in version 1.0.4e.
* *
* [png_read_filter_row_mmx_avg() bpp == 2 bugfix, GRR 20000916] * [png_read_filter_row_mmx_avg() bpp == 2 bugfix, GRR 20000916]
* *
...@@ -19,19 +26,11 @@ ...@@ -19,19 +26,11 @@
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) && defined(PNG_USE_PNGVCRD) #if defined(PNG_ASSEMBLER_CODE_SUPPORTED) && defined(PNG_USE_PNGVCRD)
/*
One of these might need to be defined.
#define DISABLE_PNGVCRD_COMBINE
#define DISABLE_PNGVCRD_INTERLACE
*/
static int mmx_supported=2; static int mmx_supported=2;
void /* PRIVATE */
png_read_filter_row_c(png_structp png_ptr, png_row_infop row_info,
png_bytep row, png_bytep prev_row, int filter);
static int mmxsupport() int PNGAPI
png_mmx_support(void)
{ {
int mmx_supported_local = 0; int mmx_supported_local = 0;
_asm { _asm {
...@@ -83,6 +82,7 @@ NOT_SUPPORTED: ...@@ -83,6 +82,7 @@ NOT_SUPPORTED:
//mmx_supported_local=0; // test code for force don't support MMX //mmx_supported_local=0; // test code for force don't support MMX
//printf("MMX : %u (1=MMX supported)\n",mmx_supported_local); //printf("MMX : %u (1=MMX supported)\n",mmx_supported_local);
mmx_supported = mmx_supported_local;
return mmx_supported_local; return mmx_supported_local;
} }
...@@ -106,19 +106,12 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask) ...@@ -106,19 +106,12 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
#ifdef PNG_USE_LOCAL_ARRAYS #ifdef PNG_USE_LOCAL_ARRAYS
const int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1}; const int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
#endif #endif
#ifdef DISABLE_PNGVCRD_COMBINE
int save_mmx_supported = mmx_supported;
#endif
png_debug(1,"in png_combine_row_asm\n"); png_debug(1,"in png_combine_row_asm\n");
#ifdef DISABLE_PNGVCRD_COMBINE if (mmx_supported == 2) {
if ((png_ptr->transformations & PNG_INTERLACE) && png_ptr->pass != 6) png_mmx_support();
mmx_supported = 0; }
else
#endif
if (mmx_supported == 2)
mmx_supported = mmxsupport();
if (mask == 0xff) if (mask == 0xff)
{ {
...@@ -307,7 +300,7 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask) ...@@ -307,7 +300,7 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
__int64 mask0=0x0102040810204080; __int64 mask0=0x0102040810204080;
if (mmx_supported) if ( mmx_supported )
{ {
srcptr = png_ptr->row_buf + 1; srcptr = png_ptr->row_buf + 1;
dstptr = row; dstptr = row;
...@@ -407,7 +400,7 @@ end8: ...@@ -407,7 +400,7 @@ end8:
__int64 mask1=0x0101020204040808, __int64 mask1=0x0101020204040808,
mask0=0x1010202040408080; mask0=0x1010202040408080;
if (mmx_supported) if ( mmx_supported )
{ {
srcptr = png_ptr->row_buf + 1; srcptr = png_ptr->row_buf + 1;
dstptr = row; dstptr = row;
...@@ -527,7 +520,7 @@ end16: ...@@ -527,7 +520,7 @@ end16:
len = (png_ptr->width)&~7; len = (png_ptr->width)&~7;
diff = (png_ptr->width)&7; diff = (png_ptr->width)&7;
if (mmx_supported) if ( mmx_supported )
{ {
_asm _asm
{ {
...@@ -658,7 +651,7 @@ end24: ...@@ -658,7 +651,7 @@ end24:
len = (png_ptr->width)&~7; len = (png_ptr->width)&~7;
diff = (png_ptr->width)&7; diff = (png_ptr->width)&7;
if (mmx_supported) if ( mmx_supported )
{ {
_asm _asm
{ {
...@@ -792,7 +785,7 @@ end32: ...@@ -792,7 +785,7 @@ end32:
mask1=0x2020202040404040, mask1=0x2020202040404040,
mask0=0x4040808080808080; mask0=0x4040808080808080;
if (mmx_supported) if ( mmx_supported )
{ {
srcptr = png_ptr->row_buf + 1; srcptr = png_ptr->row_buf + 1;
dstptr = row; dstptr = row;
...@@ -963,43 +956,27 @@ end48: ...@@ -963,43 +956,27 @@ end48:
} /* end switch (png_ptr->row_info.pixel_depth) */ } /* end switch (png_ptr->row_info.pixel_depth) */
} /* end if (non-trivial mask) */ } /* end if (non-trivial mask) */
#ifdef DISABLE_PNGVCRD_COMBINE
mmx_supported = save_mmx_supported;
#endif
} /* end png_combine_row() */ } /* end png_combine_row() */
#if defined(PNG_READ_INTERLACING_SUPPORTED) #if defined(PNG_READ_INTERLACING_SUPPORTED)
void /* PRIVATE */ void /* PRIVATE */
png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass, png_do_read_interlace(png_structp png_ptr)
png_uint_32 transformations)
{ {
png_row_infop row_info = &(png_ptr->row_info);
png_bytep row = png_ptr->row_buf + 1;
int pass = png_ptr->pass;
png_uint_32 transformations = png_ptr->transformations;
#ifdef PNG_USE_LOCAL_ARRAYS #ifdef PNG_USE_LOCAL_ARRAYS
const int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1}; const int png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
#endif #endif
#ifdef DISABLE_PNGVCRD_INTERLACE
int save_mmx_supported = mmx_supported;
#endif
png_debug(1,"in png_do_read_interlace\n"); png_debug(1,"in png_do_read_interlace\n");
#ifdef DISABLE_PNGVCRD_INTERLACE if (mmx_supported == 2) {
/* In libpng versions 1.0.3a through 1.0.4d, png_mmx_support();
* a sign error in the post-MMX cleanup code for each pixel_depth resulted }
* in bad pixels at the beginning of some rows of some images, and also
* (due to out-of-range memory reads and writes) caused heap corruption
* when compiled with MSVC 6.0. The error was fixed in version 1.0.4e,
* and the code appears to work completely correctly, so it is enabled
* by default.
*/
if (1) /* all passes caused a heap problem in the old code */
mmx_supported = 0;
else
#endif
if (mmx_supported == 2)
mmx_supported = mmxsupport();
if (row != NULL && row_info != NULL) if (row != NULL && row_info != NULL)
{ {
...@@ -1197,7 +1174,8 @@ png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass, ...@@ -1197,7 +1174,8 @@ png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass,
// sign fix by GRR // sign fix by GRR
// NOTE: there is NO MMX code for 48-bit and 64-bit images // NOTE: there is NO MMX code for 48-bit and 64-bit images
if (mmx_supported) // use MMX routine if machine supports it // use MMX routine if machine supports it
if ( mmx_supported )
{ {
if (pixel_bytes == 3) if (pixel_bytes == 3)
{ {
...@@ -1885,9 +1863,6 @@ loop4_pass4: ...@@ -1885,9 +1863,6 @@ loop4_pass4:
(png_uint_32)row_info->pixel_depth + 7) >> 3); (png_uint_32)row_info->pixel_depth + 7) >> 3);
} }
#ifdef DISABLE_PNGVCRD_INTERLACE
mmx_supported = save_mmx_supported;
#endif
} }
#endif /* PNG_READ_INTERLACING_SUPPORTED */ #endif /* PNG_READ_INTERLACING_SUPPORTED */
...@@ -3323,7 +3298,7 @@ dsub3lp: ...@@ -3323,7 +3298,7 @@ dsub3lp:
case 1: case 1:
{ {
// Placed here just in case this is a duplicate of the // Placed here just in case this is a duplicate of the
// non-MMX code for the SUB filter in png_read_filter_row above // non-MMX code for the SUB filter in png_read_filter_row below
// //
// png_bytep rp; // png_bytep rp;
// png_bytep lp; // png_bytep lp;
...@@ -3658,61 +3633,50 @@ png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep ...@@ -3658,61 +3633,50 @@ png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep
row, png_bytep prev_row, int filter) row, png_bytep prev_row, int filter)
{ {
#ifdef PNG_DEBUG #ifdef PNG_DEBUG
char filnm[6]; char filnm[10];
#endif #endif
#define UseMMX 1
if (mmx_supported == 2) if (mmx_supported == 2) {
mmx_supported = mmxsupport(); png_mmx_support();
if (!mmx_supported)
{
png_read_filter_row_c(png_ptr, row_info, row, prev_row, filter);
return ;
} }
#ifdef PNG_DEBUG #ifdef PNG_DEBUG
png_debug(1, "in png_read_filter_row\n"); png_debug(1, "in png_read_filter_row\n");
# if (UseMMX == 1)
png_debug1(0,"%s, ", "MMX");
# else
png_debug1(0,"%s, ", "x86");
# endif
switch (filter) switch (filter)
{ {
case 0: sprintf(filnm, "None "); case 0: sprintf(filnm, "none");
break; break;
case 1: sprintf(filnm, "Sub "); case 1: sprintf(filnm, "sub-%s", "MMX");
break; break;
case 2: sprintf(filnm, "Up "); case 2: sprintf(filnm, "up-%s", "MMX");
break; break;
case 3: sprintf(filnm, "Avg "); case 3: sprintf(filnm, "avg-%s", "MMX");
break; break;
case 4: sprintf(filnm, "Paeth"); case 4: sprintf(filnm, "Paeth-%s", "MMX");
break; break;
default: sprintf(filnm, "Unknw"); default: sprintf(filnm, "unknw");
break; break;
} }
png_debug2(0,"row=%5d, %s, ", png_ptr->row_number, filnm); png_debug2(0,"row=%5d, %s, ", png_ptr->row_number, filnm);
png_debug2(0, "pd=%2d, b=%d, ", (int)row_info->pixel_depth, png_debug2(0, "pd=%2d, b=%d, ", (int)row_info->pixel_depth,
(int)((row_info->pixel_depth + 7) >> 3)); (int)((row_info->pixel_depth + 7) >> 3));
png_debug1(0,"len=%8d, ", row_info->rowbytes); png_debug1(0,"len=%8d, ", row_info->rowbytes);
#endif #endif /* PNG_DEBUG */
switch (filter) switch (filter)
{ {
case PNG_FILTER_VALUE_NONE: case PNG_FILTER_VALUE_NONE:
break; break;
case PNG_FILTER_VALUE_SUB: case PNG_FILTER_VALUE_SUB:
{ {
#if (UseMMX == 1) if (
if ((row_info->pixel_depth > 8) && (row_info->pixel_depth >= PNG_MMX_BITDEPTH_THRESHOLD_DEFAULT) &&
(row_info->rowbytes >= 128) ) (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_uint_32 i; png_uint_32 i;
png_uint_32 istop = row_info->rowbytes; png_uint_32 istop = row_info->rowbytes;
...@@ -3725,41 +3689,43 @@ png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep ...@@ -3725,41 +3689,43 @@ png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep
*rp = (png_byte)(((int)(*rp) + (int)(*lp++)) & 0xff); *rp = (png_byte)(((int)(*rp) + (int)(*lp++)) & 0xff);
rp++; rp++;
} }
} //end !UseMMX }
break; break;
} }
case PNG_FILTER_VALUE_UP: case PNG_FILTER_VALUE_UP:
{ {
#if (UseMMX == 1) if (
if ((row_info->pixel_depth > 8) && (row_info->pixel_depth >= PNG_MMX_BITDEPTH_THRESHOLD_DEFAULT) &&
(row_info->rowbytes >= 128) ) (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);
} //end if UseMMX }
else else
#endif
{ {
png_bytep rp;
png_bytep pp;
png_uint_32 i; png_uint_32 i;
for (i = 0, rp = row, pp = prev_row; png_uint_32 istop = row_info->rowbytes;
i < row_info->rowbytes; i++, rp++, pp++) png_bytep rp = row;
png_bytep pp = prev_row;
for (i = 0; i < istop; ++i)
{ {
*rp = (png_byte)(((int)(*rp) + (int)(*pp)) & 0xff); *rp = (png_byte)(((int)(*rp) + (int)(*pp++)) & 0xff);
rp++;
} }
} //end !UseMMX }
break; break;
} }
case PNG_FILTER_VALUE_AVG: case PNG_FILTER_VALUE_AVG:
{ {
#if (UseMMX == 1) if (
if ((row_info->pixel_depth > 8) && (row_info->pixel_depth >= PNG_MMX_BITDEPTH_THRESHOLD_DEFAULT) &&
(row_info->rowbytes >= 128) ) (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);
} //end if UseMMX }
else else
#endif
{ {
png_uint_32 i; png_uint_32 i;
png_bytep rp = row; png_bytep rp = row;
...@@ -3781,19 +3747,19 @@ png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep ...@@ -3781,19 +3747,19 @@ png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep
((int)(*pp++ + *lp++) >> 1)) & 0xff); ((int)(*pp++ + *lp++) >> 1)) & 0xff);
rp++; rp++;
} }
} //end !UseMMX }
break; break;
} }
case PNG_FILTER_VALUE_PAETH: case PNG_FILTER_VALUE_PAETH:
{ {
#if (UseMMX == 1) if (
if ((row_info->pixel_depth > 8) && (row_info->pixel_depth >= PNG_MMX_BITDEPTH_THRESHOLD_DEFAULT) &&
(row_info->rowbytes >= 128) ) (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);
} //end if UseMMX }
else else
#endif
{ {
png_uint_32 i; png_uint_32 i;
png_bytep rp = row; png_bytep rp = row;
...@@ -3844,13 +3810,15 @@ png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep ...@@ -3844,13 +3810,15 @@ png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep
*rp = (png_byte)(((int)(*rp) + p) & 0xff); *rp = (png_byte)(((int)(*rp) + p) & 0xff);
rp++; rp++;
} }
} //end !UseMMX }
break; break;
} }
default: default:
png_warning(png_ptr, "Ignoring bad adaptive filter type"); png_warning(png_ptr, "Ignoring bad row filter type");
*row=0; *row=0;
break; break;
} }
} }
#endif
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED && PNG_USE_PNGVCRD */
/* pngwio.c - functions for data output /* pngwio.c - functions for data output
* *
* libpng 1.0.9beta1 - November 10, 2000 * libpng 1.0.9beta10 - January 16, 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, 1999, 2000 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.)
* *
......
/* pngwrite.c - general routines to write a PNG file /* pngwrite.c - general routines to write a PNG file
* *
* libpng 1.0.9beta1 - November 10, 2000 * libpng 1.0.9beta10 - January 16, 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, 1999, 2000 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.)
*/ */
...@@ -28,6 +28,13 @@ png_write_info_before_PLTE(png_structp png_ptr, png_infop info_ptr) ...@@ -28,6 +28,13 @@ png_write_info_before_PLTE(png_structp png_ptr, png_infop info_ptr)
if (!(png_ptr->mode & PNG_WROTE_INFO_BEFORE_PLTE)) if (!(png_ptr->mode & PNG_WROTE_INFO_BEFORE_PLTE))
{ {
png_write_sig(png_ptr); /* write PNG signature */ png_write_sig(png_ptr); /* write PNG signature */
#if defined(PNG_MNG_FEATURES_SUPPORTED)
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");
png_ptr->mng_features_permitted=0;
}
#endif
/* write IHDR information. */ /* write IHDR information. */
png_write_IHDR(png_ptr, info_ptr->width, info_ptr->height, png_write_IHDR(png_ptr, info_ptr->width, info_ptr->height,
info_ptr->bit_depth, info_ptr->color_type, info_ptr->compression_type, info_ptr->bit_depth, info_ptr->color_type, info_ptr->compression_type,
...@@ -57,7 +64,7 @@ png_write_info_before_PLTE(png_structp png_ptr, png_infop info_ptr) ...@@ -57,7 +64,7 @@ png_write_info_before_PLTE(png_structp png_ptr, png_infop info_ptr)
#endif #endif
#if defined(PNG_WRITE_iCCP_SUPPORTED) #if defined(PNG_WRITE_iCCP_SUPPORTED)
if (info_ptr->valid & PNG_INFO_iCCP) if (info_ptr->valid & PNG_INFO_iCCP)
png_write_iCCP(png_ptr, info_ptr->iccp_name, PNG_TEXT_COMPRESSION_zTXt, png_write_iCCP(png_ptr, info_ptr->iccp_name, PNG_COMPRESSION_TYPE_BASE,
info_ptr->iccp_profile, (int)info_ptr->iccp_proflen); info_ptr->iccp_profile, (int)info_ptr->iccp_proflen);
#endif #endif
#if defined(PNG_WRITE_sBIT_SUPPORTED) #if defined(PNG_WRITE_sBIT_SUPPORTED)
...@@ -375,7 +382,11 @@ png_write_end(png_structp png_ptr, png_infop info_ptr) ...@@ -375,7 +382,11 @@ png_write_end(png_structp png_ptr, png_infop info_ptr)
/* write end of PNG file */ /* write end of PNG file */
png_write_IEND(png_ptr); png_write_IEND(png_ptr);
#if 0
/* This flush, added in libpng-1.0.8, causes some applications to crash
because they do not set png_ptr->output_flush_fn */
png_flush(png_ptr); png_flush(png_ptr);
#endif
} }
#if defined(PNG_WRITE_tIME_SUPPORTED) #if defined(PNG_WRITE_tIME_SUPPORTED)
...@@ -488,7 +499,7 @@ png_create_write_struct_2(png_const_charp user_png_ver, png_voidp error_ptr, ...@@ -488,7 +499,7 @@ png_create_write_struct_2(png_const_charp user_png_ver, png_voidp error_ptr,
removed from version 2.0.0 and beyond because the previous test removed from version 2.0.0 and beyond because the previous test
would have already rejected it. */ would have already rejected it. */
if (user_png_ver[4] == '6' && user_png_ver[2] == '0' && if (user_png_ver[4] == '6' && user_png_ver[2] == '0' &&
user_png_ver[0] == '1' && user_png_ver[5] == '\0') user_png_ver[0] == '1' && user_png_ver[5] == '\0')
{ {
png_error(png_ptr, png_error(png_ptr,
...@@ -769,6 +780,24 @@ png_write_row(png_structp png_ptr, png_bytep row) ...@@ -769,6 +780,24 @@ png_write_row(png_structp png_ptr, png_bytep row)
if (png_ptr->transformations) if (png_ptr->transformations)
png_do_write_transformations(png_ptr); png_do_write_transformations(png_ptr);
#if defined(PNG_MNG_FEATURES_SUPPORTED)
/* Write filter_method 64 (intrapixel differencing) only if
* 1. Libpng was compiled with PNG_MNG_FEATURES_SUPPORTED and
* 2. Libpng did not write 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->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) &&
(png_ptr->filter_type == PNG_INTRAPIXEL_DIFFERENCING))
{
/* Intrapixel differencing */
png_do_write_intrapixel(&(png_ptr->row_info), png_ptr->row_buf + 1);
}
#endif
/* Find a filter if necessary, filter the row and write it out. */ /* Find a filter if necessary, filter the row and write it out. */
png_write_find_filter(png_ptr, &(png_ptr->row_info)); png_write_find_filter(png_ptr, &(png_ptr->row_info));
...@@ -964,6 +993,11 @@ void PNGAPI ...@@ -964,6 +993,11 @@ void PNGAPI
png_set_filter(png_structp png_ptr, int method, int filters) png_set_filter(png_structp png_ptr, int method, int filters)
{ {
png_debug(1, "in png_set_filter\n"); png_debug(1, "in png_set_filter\n");
#if defined(PNG_MNG_FEATURES_SUPPORTED)
if((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) &&
(method == PNG_INTRAPIXEL_DIFFERENCING))
method = PNG_FILTER_TYPE_BASE;
#endif
if (method == PNG_FILTER_TYPE_BASE) if (method == PNG_FILTER_TYPE_BASE)
{ {
switch (filters & (PNG_ALL_FILTERS | 0x07)) switch (filters & (PNG_ALL_FILTERS | 0x07))
......
/* 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.9beta1 - November 10, 2000 * libpng 1.0.9beta10 - January 16, 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, 1999, 2000 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.)
*/ */
...@@ -498,3 +498,64 @@ png_do_write_invert_alpha(png_row_infop row_info, png_bytep row) ...@@ -498,3 +498,64 @@ png_do_write_invert_alpha(png_row_infop row_info, png_bytep row)
} }
} }
#endif #endif
#if defined(PNG_MNG_FEATURES_SUPPORTED)
/* undoes intrapixel differencing */
void /* PRIVATE */
png_do_write_intrapixel(png_row_infop row_info, png_bytep row)
{
png_debug(1, "in png_do_write_intrapixel\n");
if (
#if defined(PNG_USELESS_TESTS_SUPPORTED)
row != NULL && row_info != NULL &&
#endif
(row_info->color_type & PNG_COLOR_MASK_COLOR))
{
int bytes_per_pixel;
png_uint_32 row_width = row_info->width;
if (row_info->bit_depth == 8)
{
png_bytep rp;
png_uint_32 i;
if (row_info->color_type == PNG_COLOR_TYPE_RGB)
bytes_per_pixel = 3;
else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
bytes_per_pixel = 4;
else
return;
for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel)
{
*(rp) = (png_byte)((*rp - *(rp+1))&0xff);
*(rp+2) = (png_byte)((*(rp+2) - *(rp+1))&0xff);
}
}
else if (row_info->bit_depth == 16)
{
png_bytep rp;
png_uint_32 i;
if (row_info->color_type == PNG_COLOR_TYPE_RGB)
bytes_per_pixel = 6;
else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
bytes_per_pixel = 8;
else
return;
for (i = 0, rp = row; i < row_width; i++, rp += bytes_per_pixel)
{
png_uint_32 s0=*(rp )<<8 | *(rp+1);
png_uint_32 s1=*(rp+2)<<8 | *(rp+3);
png_uint_32 s2=*(rp+4)<<8 | *(rp+5);
png_uint_32 red=(s0-s1)&0xffff;
png_uint_32 blue=(s2-s1)&0xffff;
*(rp ) = (png_byte)((red>>8)&0xff);
*(rp+1) = (png_byte)(red&0xff);
*(rp+4) = (png_byte)((blue>>8)&0xff);
*(rp+5) = (png_byte)(blue&0xff);
}
}
}
}
#endif /* PNG_MNG_FEATURES_SUPPORTED */
/* pngwutil.c - utilities to write a PNG file /* pngwutil.c - utilities to write a PNG file
* *
* libpng 1.0.9beta1 - November 10, 2000 * libpng 1.0.9beta10 - January 16, 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, 1999, 2000 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.)
*/ */
...@@ -131,6 +131,8 @@ png_write_sig(png_structp png_ptr) ...@@ -131,6 +131,8 @@ png_write_sig(png_structp png_ptr)
/* write the rest of the 8 byte signature */ /* write the rest of the 8 byte signature */
png_write_data(png_ptr, &png_signature[png_ptr->sig_bytes], png_write_data(png_ptr, &png_signature[png_ptr->sig_bytes],
(png_size_t)8 - png_ptr->sig_bytes); (png_size_t)8 - png_ptr->sig_bytes);
if(png_ptr->sig_bytes < 3)
png_ptr->mode |= PNG_HAVE_PNG_SIGNATURE;
} }
#if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_iCCP_SUPPORTED) #if defined(PNG_WRITE_TEXT_SUPPORTED) || defined(PNG_WRITE_iCCP_SUPPORTED)
...@@ -419,7 +421,24 @@ png_write_IHDR(png_structp png_ptr, png_uint_32 width, png_uint_32 height, ...@@ -419,7 +421,24 @@ png_write_IHDR(png_structp png_ptr, png_uint_32 width, png_uint_32 height,
compression_type = PNG_COMPRESSION_TYPE_BASE; compression_type = PNG_COMPRESSION_TYPE_BASE;
} }
if (filter_type != PNG_FILTER_TYPE_BASE) /* Write filter_method 64 (intrapixel differencing) only if
* 1. Libpng was compiled with PNG_MNG_FEATURES_SUPPORTED and
* 2. Libpng did not write 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 (
#if defined(PNG_MNG_FEATURES_SUPPORTED)
!((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) &&
((png_ptr->mode&PNG_HAVE_PNG_SIGNATURE) == 0) &&
(color_type == PNG_COLOR_TYPE_RGB ||
color_type == PNG_COLOR_TYPE_RGB_ALPHA) &&
(filter_type == PNG_INTRAPIXEL_DIFFERENCING)) &&
#endif
filter_type != PNG_FILTER_TYPE_BASE)
{ {
png_warning(png_ptr, "Invalid filter type specified"); png_warning(png_ptr, "Invalid filter type specified");
filter_type = PNG_FILTER_TYPE_BASE; filter_type = PNG_FILTER_TYPE_BASE;
...@@ -440,6 +459,7 @@ png_write_IHDR(png_structp png_ptr, png_uint_32 width, png_uint_32 height, ...@@ -440,6 +459,7 @@ png_write_IHDR(png_structp png_ptr, png_uint_32 width, png_uint_32 height,
png_ptr->bit_depth = (png_byte)bit_depth; png_ptr->bit_depth = (png_byte)bit_depth;
png_ptr->color_type = (png_byte)color_type; png_ptr->color_type = (png_byte)color_type;
png_ptr->interlaced = (png_byte)interlace_type; png_ptr->interlaced = (png_byte)interlace_type;
png_ptr->filter_type = (png_byte)filter_type;
png_ptr->width = width; png_ptr->width = width;
png_ptr->height = height; png_ptr->height = height;
...@@ -657,7 +677,7 @@ png_write_iCCP(png_structp png_ptr, png_charp name, int compression_type, ...@@ -657,7 +677,7 @@ png_write_iCCP(png_structp png_ptr, png_charp name, int compression_type,
return; return;
} }
if (compression_type) if (compression_type != PNG_COMPRESSION_TYPE_BASE)
png_warning(png_ptr, "Unknown compression type in iCCP chunk"); png_warning(png_ptr, "Unknown compression type in iCCP chunk");
if (profile == NULL) if (profile == NULL)
...@@ -665,7 +685,7 @@ png_write_iCCP(png_structp png_ptr, png_charp name, int compression_type, ...@@ -665,7 +685,7 @@ png_write_iCCP(png_structp png_ptr, png_charp name, int compression_type,
if (profile_len) if (profile_len)
profile_len = png_text_compress(png_ptr, profile, (png_size_t)profile_len, profile_len = png_text_compress(png_ptr, profile, (png_size_t)profile_len,
PNG_TEXT_COMPRESSION_zTXt, &comp); PNG_COMPRESSION_TYPE_BASE, &comp);
/* make sure we include the NULL after the name and the compression type */ /* make sure we include the NULL after the name and the compression type */
png_write_chunk_start(png_ptr, (png_bytep)png_iCCP, png_write_chunk_start(png_ptr, (png_bytep)png_iCCP,
...@@ -1072,13 +1092,14 @@ png_check_keyword(png_structp png_ptr, png_charp key, png_charpp new_key) ...@@ -1072,13 +1092,14 @@ png_check_keyword(png_structp png_ptr, png_charp key, png_charpp new_key)
png_size_t key_len; png_size_t key_len;
png_charp kp, dp; png_charp kp, dp;
int kflag; int kflag;
int kwarn=0;
png_debug(1, "in png_check_keyword\n"); png_debug(1, "in png_check_keyword\n");
*new_key = NULL; *new_key = NULL;
if (key == NULL || (key_len = png_strlen(key)) == 0) if (key == NULL || (key_len = png_strlen(key)) == 0)
{ {
png_chunk_warning(png_ptr, "zero length keyword"); png_warning(png_ptr, "zero length keyword");
return ((png_size_t)0); return ((png_size_t)0);
} }
...@@ -1095,9 +1116,9 @@ png_check_keyword(png_structp png_ptr, png_charp key, png_charpp new_key) ...@@ -1095,9 +1116,9 @@ png_check_keyword(png_structp png_ptr, png_charp key, png_charpp new_key)
char msg[40]; char msg[40];
sprintf(msg, "invalid keyword character 0x%02X", *kp); sprintf(msg, "invalid keyword character 0x%02X", *kp);
png_chunk_warning(png_ptr, msg); png_warning(png_ptr, msg);
#else #else
png_chunk_warning(png_ptr, "invalid character in keyword"); png_warning(png_ptr, "invalid character in keyword");
#endif #endif
*dp = ' '; *dp = ' ';
} }
...@@ -1112,7 +1133,7 @@ png_check_keyword(png_structp png_ptr, png_charp key, png_charpp new_key) ...@@ -1112,7 +1133,7 @@ png_check_keyword(png_structp png_ptr, png_charp key, png_charpp new_key)
kp = *new_key + key_len - 1; kp = *new_key + key_len - 1;
if (*kp == ' ') if (*kp == ' ')
{ {
png_chunk_warning(png_ptr, "trailing spaces removed from keyword"); png_warning(png_ptr, "trailing spaces removed from keyword");
while (*kp == ' ') while (*kp == ' ')
{ {
...@@ -1125,7 +1146,7 @@ png_check_keyword(png_structp png_ptr, png_charp key, png_charpp new_key) ...@@ -1125,7 +1146,7 @@ png_check_keyword(png_structp png_ptr, png_charp key, png_charpp new_key)
kp = *new_key; kp = *new_key;
if (*kp == ' ') if (*kp == ' ')
{ {
png_chunk_warning(png_ptr, "leading spaces removed from keyword"); png_warning(png_ptr, "leading spaces removed from keyword");
while (*kp == ' ') while (*kp == ' ')
{ {
...@@ -1147,6 +1168,7 @@ png_check_keyword(png_structp png_ptr, png_charp key, png_charpp new_key) ...@@ -1147,6 +1168,7 @@ png_check_keyword(png_structp png_ptr, png_charp key, png_charpp new_key)
else if (*kp == ' ') else if (*kp == ' ')
{ {
key_len--; key_len--;
kwarn=1;
} }
else else
{ {
...@@ -1155,17 +1177,19 @@ png_check_keyword(png_structp png_ptr, png_charp key, png_charpp new_key) ...@@ -1155,17 +1177,19 @@ png_check_keyword(png_structp png_ptr, png_charp key, png_charpp new_key)
} }
} }
*dp = '\0'; *dp = '\0';
if(kwarn)
png_warning(png_ptr, "extra interior spaces removed from keyword");
if (key_len == 0) if (key_len == 0)
{ {
png_free(png_ptr, *new_key); png_free(png_ptr, *new_key);
*new_key=NULL; *new_key=NULL;
png_chunk_warning(png_ptr, "Zero length keyword"); png_warning(png_ptr, "Zero length keyword");
} }
if (key_len > 79) if (key_len > 79)
{ {
png_chunk_warning(png_ptr, "keyword length must be 1 - 79 characters"); png_warning(png_ptr, "keyword length must be 1 - 79 characters");
new_key[79] = '\0'; new_key[79] = '\0';
key_len = 79; key_len = 79;
} }
......
USEUNIT("libpng.cpp");
USEUNIT("..\..\pngwutil.c");
USEUNIT("..\..\pngerror.c");
USEUNIT("..\..\pngget.c");
USEUNIT("..\..\pngmem.c");
USEUNIT("..\..\pngpread.c");
USEUNIT("..\..\pngread.c");
USEUNIT("..\..\pngrio.c");
USEUNIT("..\..\pngrtran.c");
USEUNIT("..\..\pngrutil.c");
USEUNIT("..\..\pngset.c");
USEUNIT("..\..\pngtrans.c");
USEUNIT("..\..\pngwio.c");
USEUNIT("..\..\pngwrite.c");
USEUNIT("..\..\pngwtran.c");
USEUNIT("..\..\png.c");
USELIB("zlib.lib");
//---------------------------------------------------------------------------
This file is used by the project manager only and should be treated like the project file
DllEntryPoint
\ No newline at end of file
#------------------------------------------------------------------------------
VERSION = BWS.01
#------------------------------------------------------------------------------
!ifndef ROOT
ROOT = $(MAKEDIR)\..
!endif
#------------------------------------------------------------------------------
MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$**
DCC = $(ROOT)\bin\dcc32.exe $**
BRCC = $(ROOT)\bin\brcc32.exe $**
#------------------------------------------------------------------------------
PROJECTS = libpngstat.lib libpng.dll
#------------------------------------------------------------------------------
default: $(PROJECTS)
#------------------------------------------------------------------------------
libpngstat.lib: libpngstat.bpr
$(ROOT)\bin\bpr2mak -t$(ROOT)\bin\deflib.bmk $**
$(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak
libpng.dll: libpng.bpr
$(ROOT)\bin\bpr2mak $**
$(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak
<?xml version='1.0' encoding='utf-8' ?>
<!-- C++Builder XML Project -->
<PROJECT>
<MACROS>
<VERSION value="BCB.05.03"/>
<PROJECT value="libpng.dll"/>
<OBJFILES value="libpng.obj ..\..\pngwutil.obj ..\..\pngerror.obj ..\..\pngget.obj
..\..\pngmem.obj ..\..\pngpread.obj ..\..\pngread.obj ..\..\pngrio.obj
..\..\pngrtran.obj ..\..\pngrutil.obj ..\..\pngset.obj ..\..\pngtrans.obj
..\..\pngwio.obj ..\..\pngwrite.obj ..\..\pngwtran.obj ..\..\png.obj"/>
<RESFILES value=""/>
<DEFFILE value=""/>
<RESDEPEN value="$(RESFILES)"/>
<LIBFILES value="zlib.lib"/>
<LIBRARIES value="bcbsmp50.lib dclocx50.lib NMFast50.lib Tee50.lib Vclx50.lib Vcl50.lib"/>
<SPARELIBS value="Vcl50.lib Vclx50.lib Tee50.lib NMFast50.lib dclocx50.lib bcbsmp50.lib"/>
<PACKAGES value="Vcl50.bpi Vclx50.bpi bcbsmp50.bpi Qrpt50.bpi Vcldb50.bpi Vclbde50.bpi
ibsmp50.bpi vcldbx50.bpi TeeUI50.bpi TeeDB50.bpi Tee50.bpi TeeQR50.bpi
VCLIB50.bpi bcbie50.bpi vclie50.bpi Inetdb50.bpi Inet50.bpi NMFast50.bpi
dclocx50.bpi bcb97axserver50.bpi SIMULUSCOMPONENTS.bpi Simulus2.bpi"/>
<PATHCPP value=".;..\.."/>
<PATHPAS value=".;"/>
<PATHRC value=".;"/>
<PATHASM value=".;"/>
<DEBUGLIBPATH value="$(BCB)\lib\debug"/>
<RELEASELIBPATH value="$(BCB)\lib\release"/>
<LINKER value="tlink32"/>
<USERDEFINES value="ZLIB_DLL;Z_PREFIX;PNG_BUILD_DLL;PNG_NO_MODULEDEF"/>
<SYSDEFINES value="NO_STRICT;_NO_VCL;_RTLDLL"/>
<MAINSOURCE value="libpng.bpf"/>
<INCLUDEPATH value="..\..;..\..\..\zlib;$(BCB)\include"/>
<LIBPATH value="..\..;$(BCB)\lib\obj;$(BCB)\lib"/>
<WARNINGS value="-w8092 -w8091 -w8090 -w8089 -w8087 -wprc -wucp -wstv -wstu -wsig -wpin
-wnod -wnak -wdef -wcln -wbbf -wasm -wamp -wamb"/>
</MACROS>
<OPTIONS>
<CFLAG1 value="-WD -O2 -w -Vx -Ve -x- -RT- -X- -a8 -5 -b- -d -k- -vi -tWD -tWM -c"/>
<PFLAGS value="-$Y- -$L- -$D- -$C- -v -JPHNE -M"/>
<RFLAGS value=""/>
<AFLAGS value="/mx /w2 /zn"/>
<LFLAGS value="-D&quot;&quot; -aa -Tpd -x -Gn -Gi -w"/>
</OPTIONS>
<LINKER>
<ALLOBJ value="c0d32.obj $(OBJFILES)"/>
<ALLRES value="$(RESFILES)"/>
<ALLLIB value="$(LIBFILES) $(LIBRARIES) import32.lib cw32mti.lib"/>
</LINKER>
<IDEOPTIONS>
[Version Info]
IncludeVerInfo=0
AutoIncBuild=0
MajorVer=1
MinorVer=0
Release=0
Build=0
Debug=0
PreRelease=0
Special=0
Private=0
DLL=1
Locale=2057
CodePage=1252
[Version Info Keys]
CompanyName=
FileDescription=
FileVersion=1.0.0.0
InternalName=
LegalCopyright=
LegalTrademarks=
OriginalFilename=
ProductName=
ProductVersion=
Comments=
[HistoryLists\hlIncludePath]
Count=18
Item0=..\..;..\..\..\zlib;$(BCB)\include
Item1=..\..;P:\My Documents\Source\PNG+ZLib\zlib;$(BCB)\include
Item2=..\..;..\Source\ThirdParty\PortableNetworkGraphics\external;..\Source\ThirdParty\PortableNetworkGraphics;..\Source\ThirdParty\ZLibCompression\external;$(BCB)\include
Item3=..\Source\ThirdParty\PortableNetworkGraphics\external;..\Source\ThirdParty\PortableNetworkGraphics;..\Source\ThirdParty\ZLibCompression\external;$(BCB)\include
Item4=..\Source\ThirdParty\PortableNetworkGraphics\external;..\Source\ThirdParty\PortableNetworkGraphics;..\Source\ThirdParty\ZLibCompression;$(BCB)\include
Item5=..\Source\ThirdParty\PortableNetworkGraphics;..\Source\ThirdParty\ZLibCompression;$(BCB)\include
Item6=..\Source\ThirdParty\PortableNetworkGraphics;P:\Development\Source\ThirdParty\ZLibCompression;$(BCB)\include
Item7=..\Source\ThirdParty\PortableNetworkGraphics;$(BCB)\include
Item8=$(BCB)\include
Item9=..\Source;..\Source\General\Templates;..\Source\SIMUtilities;$(BCB)\include;$(BCB)\include\vcl
Item10=P:\Development\Source\;P:\Development\Source\General\Templates\;P:\Development\Source\SIMUtilities\;$(BCB)\include;$(BCB)\include\vcl
Item11=P:\Development\Source;P:\Development\Source\General\Templates\;P:\Development\Source\SIMUtilities\;$(BCB)\include;$(BCB)\include\vcl
Item12=P:\Development\Source\General\Templates\;P:\Development\Source\SIMUtilities\;$(BCB)\include;$(BCB)\include\vcl
Item13=P:\Development\Source\General\Templates\;P:\Development\Source\SIMUtilities;$(BCB)\include;$(BCB)\include\vcl
Item14=P:\Development\Source\General\Templates\;$(BCB)\include;$(BCB)\include\vcl
Item15=P:\Development\Source\General\Templates;$(BCB)\include;$(BCB)\include\vcl
Item16=P:\Development\Source;$(BCB)\include;$(BCB)\include\vcl
Item17=$(BCB)\include;$(BCB)\include\vcl
[HistoryLists\hlLibraryPath]
Count=10
Item0=..\..;$(BCB)\lib\obj;$(BCB)\lib
Item1=..\..;..\Source\ThirdParty\PortableNetworkGraphics\external;..\Source\ThirdParty\PortableNetworkGraphics;$(BCB)\lib\obj;$(BCB)\lib
Item2=..\Source\ThirdParty\PortableNetworkGraphics\external;..\Source\ThirdParty\PortableNetworkGraphics;$(BCB)\lib\obj;$(BCB)\lib
Item3=..\Source\ThirdParty\PortableNetworkGraphics;$(BCB)\lib\obj;$(BCB)\lib
Item4=$(BCB)\lib\obj;$(BCB)\lib
Item5=..\Source\SIMUtilities;..\Source;$(BCB)\lib\obj;$(BCB)\lib
Item6=P:\Development\Source\SIMUtilities\;P:\Development\Source\;$(BCB)\lib\obj;$(BCB)\lib
Item7=P:\Development\Source\SIMUtilities;P:\Development\Source\;$(BCB)\lib\obj;$(BCB)\lib
Item8=P:\Development\Source\;$(BCB)\lib\obj;$(BCB)\lib
Item9=P:\Development\Source;$(BCB)\lib\obj;$(BCB)\lib
[HistoryLists\hlDebugSourcePath]
Count=1
Item0=$(BCB)\source\vcl
[HistoryLists\hlConditionals]
Count=20
Item0=ZLIB_DLL;Z_PREFIX;PNG_BUILD_DLL;PNG_NO_MODULEDEF
Item1=_DEBUG;ZLIB_DLL;Z_PREFIX;PNG_BUILD_DLL;PNG_NO_MODULEDEF
Item2=PNG_BUILD_DLL;ZLIB_DLL;_DEBUG;PNG_NO_MODULEDEF
Item3=PNG_BUILD_DLL;ZLIB_DLL;_DEBUG;PNG_DEBUG=5;PNG_NO_MODULEDEF;PNG_NO_GLOBAL_ARRAYS
Item4=PNG_BUILD_DLL;ZLIB_DLL;_DEBUG;PNG_DEBUG=5;PNG_NO_MODULEDEF;PNG_SETJMP_NOT_SUPPORTED;PNG_DEBUG_FILE=stderr
Item5=PNG_BUILD_DLL;ZLIB_DLL;_DEBUG;PNG_DEBUG;PNG_NO_MODULEDEF;PNG_SETJMP_NOT_SUPPORTED
Item6=PNG_BUILD_DLL;ZLIB_DLL;_DEBUG;PNG_DEBUG=5;PNG_NO_MODULEDEF;PNG_SETJMP_NOT_SUPPORTED
Item7=PNG_BUILD_DLL;ZLIB_DLL;_DEBUG;PNG_DEBUG=5;PNG_NO_MODULEDEF
Item8=PNG_BUILD_DLL;ZLIB_DLL;_DEBUG;PNG_DEBUG=5
Item9=PNG_BUILD_DLL;ZLIB_DLL;_DEBUG
Item10=PNG_BUILD_DLL;ZLIB_DLL
Item11=PNG_BUILD_DLL
Item12=PNG_DLL;PNG_BUILD_DLL;ZLIB_DLL
Item13=PNG_DLL;PNG_BUILD_DLL;PNG_NO_GLOBAL_ARRAYS;ZLIB_DLL
Item14=PNG_DLL;PNG_BUILD_DLL;PNG_NO_GLOBAL_ARRAYS
Item15=PNG_DLL;PNG_BUILD_DLL
Item16=PNG_DLL;PNG_BUILD_DLL;PNG_MODULEDEF
Item17=_HTML_FORM
Item18=_DEBUG;_HTML_FORM
Item19=_DEBUG
[HistoryLists\hlIntOutputDir]
Count=2
Item0=..\Obj
Item1=P:\Development\Obj
[Debugging]
DebugSourceDirs=
[Parameters]
RunParams=
HostApplication=P:\Development\Executables\LibPNGTestApp.exe
RemoteHost=
RemotePath=
RemoteDebug=0
[Compiler]
ShowInfoMsgs=0
LinkDebugVcl=0
LinkCGLIB=0
</IDEOPTIONS>
</PROJECT>
\ No newline at end of file
//---------------------------------------------------------------------------
#include <windows.h>
//---------------------------------------------------------------------------
// Important note about DLL memory management when your DLL uses the
// static version of the RunTime Library:
//
// If your DLL exports any functions that pass String objects (or structs/
// classes containing nested Strings) as parameter or function results,
// you will need to add the library MEMMGR.LIB to both the DLL project and
// any other projects that use the DLL. You will also need to use MEMMGR.LIB
// if any other projects which use the DLL will be performing new or delete
// operations on any non-TObject-derived classes which are exported from the
// DLL. Adding MEMMGR.LIB to your project will change the DLL and its calling
// EXE's to use the BORLNDMM.DLL as their memory manager. In these cases,
// the file BORLNDMM.DLL should be deployed along with your DLL.
//
// To avoid using BORLNDMM.DLL, pass string information using "char *" or
// ShortString parameters.
//
// If your DLL uses the dynamic version of the RTL, you do not need to
// explicitly add MEMMGR.LIB as this will be done implicitly for you
//---------------------------------------------------------------------------
int WINAPI DllEntryPoint(HINSTANCE, unsigned long, void*)
{
return 1;
}
//---------------------------------------------------------------------------
\ No newline at end of file
Project files to build libpng using Borland C++ Builder v5.0
To use this dll, you will need to:
1) add the following conditional defines to your project
PNG_USE_DLL
Z_PREFIX
2) add the paths to png.h and zlib.h to your include path
3) add libpng.lib or libpngstat.lib to the project.
If you are using libpng.dll, libpng.dll and zlib.dll will be required for the code to run.
Alternatively, the libpng.dll can be built using zlibstat.lib to produce one dll containing both the zlib and png code.
See the libpng documentation for instructions on how to use the code.
USELIB("zlibstat.lib");
USEUNIT("..\..\pngerror.c");
USEUNIT("..\..\png.c");
USEUNIT("..\..\pngwutil.c");
USEUNIT("..\..\pngmem.c");
USEUNIT("..\..\pngpread.c");
USEUNIT("..\..\pngread.c");
USEUNIT("..\..\pngrio.c");
USEUNIT("..\..\pngrtran.c");
USEUNIT("..\..\pngrutil.c");
USEUNIT("..\..\pngset.c");
USEUNIT("..\..\pngtrans.c");
USEUNIT("..\..\pngwio.c");
USEUNIT("..\..\pngwrite.c");
USEUNIT("..\..\pngwtran.c");
USEUNIT("..\..\pngget.c");
//---------------------------------------------------------------------------
#define Library
// To add a file to the library use the Project menu 'Add to Project'.
\ No newline at end of file
此差异已折叠。
#------------------------------------------------------------------------------
VERSION = BWS.01
#------------------------------------------------------------------------------
!ifndef ROOT
ROOT = $(MAKEDIR)\..
!endif
#------------------------------------------------------------------------------
MAKE = $(ROOT)\bin\make.exe -$(MAKEFLAGS) -f$**
DCC = $(ROOT)\bin\dcc32.exe $**
BRCC = $(ROOT)\bin\brcc32.exe $**
#------------------------------------------------------------------------------
PROJECTS = zlibstat.lib libpngstat.lib zlib.dll libpng.dll
#------------------------------------------------------------------------------
default: $(PROJECTS)
#------------------------------------------------------------------------------
libpng.dll: libpng.bpr
$(ROOT)\bin\bpr2mak $**
$(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak
zlibstat.lib: zlibstat.bpr
$(ROOT)\bin\bpr2mak -t$(ROOT)\bin\deflib.bmk $**
$(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak
zlib.dll: zlib.bpr
$(ROOT)\bin\bpr2mak $**
$(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak
libpngstat.lib: libpngstat.bpr
$(ROOT)\bin\bpr2mak -t$(ROOT)\bin\deflib.bmk $**
$(ROOT)\bin\make -$(MAKEFLAGS) -f$*.mak
USEUNIT("zlib.cpp");
USEUNIT("..\..\..\zlib\zutil.c");
USEUNIT("..\..\..\zlib\compress.c");
USEUNIT("..\..\..\zlib\crc32.c");
USEUNIT("..\..\..\zlib\deflate.c");
USEUNIT("..\..\..\zlib\gzio.c");
USEUNIT("..\..\..\zlib\infblock.c");
USEUNIT("..\..\..\zlib\infcodes.c");
USEUNIT("..\..\..\zlib\inffast.c");
USEUNIT("..\..\..\zlib\inflate.c");
USEUNIT("..\..\..\zlib\inftrees.c");
USEUNIT("..\..\..\zlib\infutil.c");
USEUNIT("..\..\..\zlib\trees.c");
USEUNIT("..\..\..\zlib\uncompr.c");
USEUNIT("..\..\..\zlib\adler32.c");
//---------------------------------------------------------------------------
This file is used by the project manager only and should be treated like the project file
DllEntryPoint
\ No newline at end of file
此差异已折叠。
此差异已折叠。
此差异已折叠。
USEUNIT("..\..\..\zlib\zutil.c");
USEUNIT("..\..\..\zlib\compress.c");
USEUNIT("..\..\..\zlib\crc32.c");
USEUNIT("..\..\..\zlib\deflate.c");
USEUNIT("..\..\..\zlib\gzio.c");
USEUNIT("..\..\..\zlib\infblock.c");
USEUNIT("..\..\..\zlib\infcodes.c");
USEUNIT("..\..\..\zlib\inffast.c");
USEUNIT("..\..\..\zlib\inflate.c");
USEUNIT("..\..\..\zlib\inftrees.c");
USEUNIT("..\..\..\zlib\infutil.c");
USEUNIT("..\..\..\zlib\trees.c");
USEUNIT("..\..\..\zlib\uncompr.c");
USEUNIT("..\..\..\zlib\adler32.c");
//---------------------------------------------------------------------------
#define Library
// To add a file to the library use the Project menu 'Add to Project'.
\ No newline at end of file
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册