mirror of
https://git.code.sf.net/p/libpng/code.git
synced 2025-07-10 18:04:09 +02:00
Compare commits
9 Commits
v1.0.9beta
...
v1.0.11bet
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e1eff58f87 | ||
|
|
f64a06f5ec | ||
|
|
87c6bc984a | ||
|
|
13cfbac075 | ||
|
|
e164447858 | ||
|
|
1909560348 | ||
|
|
d4e8109a48 | ||
|
|
be9de0f428 | ||
|
|
cdf140beec |
52
ANNOUNCE
52
ANNOUNCE
@@ -1,52 +1,16 @@
|
||||
|
||||
Libpng 1.0.9beta8 - January 12, 2001
|
||||
Libpng 1.0.11beta3 - April 15, 2001
|
||||
|
||||
This is a public release of libpng, intended for use in production codes.
|
||||
|
||||
Changes since the last public release (1.0.8):
|
||||
Changes since the last public release (1.0.10):
|
||||
|
||||
Fixed typo in scripts/makefile.hpux
|
||||
Fixed seqence-point bug in contrib/pngminus/png2pnm (Martin Zinser)
|
||||
Updated makevms.com in scripts and contrib/* and contrib/* (Martin Zinser)
|
||||
Changed "cdrom.com" in documentation to "libpng.org"
|
||||
Revised pnggccrd.c to get it all working, and updated makefile.gcmmx (Greg).
|
||||
Changed type of "params" from voidp to png_voidp in png_read|write_png().
|
||||
Added MNG_EXTENSIONS_SUPPORTED macro and support for some proposed MNG
|
||||
features, for testing purposes.
|
||||
Make sure PNGAPI and PNG_IMPEXP are defined in pngconf.h.
|
||||
Revised the 3 instances of WRITEFILE in pngtest.c.
|
||||
Updated png.rc in dll/msvc project
|
||||
Revised makefile.dec to define and use LIBPATH and INCPATH
|
||||
Increased size of global png_libpng_ver[] array from 12 to 18 chars.
|
||||
Made global png_libpng_ver[], png_sig[] and png_pass_*[] arrays const.
|
||||
Removed duplicate png_crc_finish() from png_handle_bKGD() function.
|
||||
Added a warning when application calls png_read_update_info() multiple times.
|
||||
Revised makefile.cygwin
|
||||
Fixed bugs in iCCP support in pngrutil.c and pngwutil.c.
|
||||
Replaced png_set_empty_plte_permitted() with png_permit_mng_features().
|
||||
Relocated "msvc" and "wince" project subdirectories into "projects"
|
||||
subdirectory and added projects/borland project subdirectory.
|
||||
Set VS_FF_PRERELEASE and VS_FF_PATCHED flags in msvc/png.rc when appropriate.
|
||||
Add error message in png_set_compression_buffer_size() when malloc fails.
|
||||
Revised PNG_LIBPNG_BUILD_TYPE macro in png.h, used in the msvc project.
|
||||
Removed the png_flush() in pngwrite.c that crashes some applications
|
||||
that don't set png_output_flush_fn.
|
||||
Added makefile.macosx and makefile.aix to scripts directory.
|
||||
Change png_chunk_warning to png_warning in png_check_keyword().
|
||||
Increased the first part of msg buffer from 16 to 18 in png_chunk_error().
|
||||
Added support for filter method 64 (for PNG datastreams embedded in MNG)
|
||||
Revised png_set_filter() to accept filter method 64 when appropriate.
|
||||
Added new PNG_HAVE_PNG_SIGNATURE bit to png_ptr->mode and use it to
|
||||
help prevent applications from using MNG features in PNG datastreams.
|
||||
Revised libpng.3/libpng.txt. Changed "filter type" to "filter method".
|
||||
Fixed error handling of unknown compression type in png_decompress_chunk().
|
||||
In pngconf.h, define __cdecl when _MSC_VER is defined.
|
||||
Changed PNG_TEXT_COMPRESSION_zTXt to PNG_COMPRESSION_TYPE_BASE several places.
|
||||
Revised memory management in png_set_hIST and png_handle_hIST in a backward
|
||||
compatible manner. PLTE and tRNS were revised similarly.
|
||||
Revised the iCCP chunk reader to ignore trailing garbage.
|
||||
Moved pngasmrd.h into pngconf.h.
|
||||
Improved handling of out-of-spec garbage iCCP chunks generated by PhotoShop.
|
||||
Added type casts on several png_malloc() calls (Dimitri Papadapoulos).
|
||||
Removed a no-longer needed AIX work-around from pngconf.h
|
||||
Changed several "//" single-line comments to C-style in pnggccrd.c
|
||||
Removed PNGAPI from private functions whose prototypes did not have PNGAPI.
|
||||
Updated scripts/pngos2.def
|
||||
Added checking the results of many instances of png_malloc() for NULL
|
||||
|
||||
Send comments/corrections/commendations to
|
||||
png-implement@ccrc.wustl.edu or to randeg@alum.rpi.edu
|
||||
|
||||
51
CHANGES
51
CHANGES
@@ -856,11 +856,12 @@ 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)
|
||||
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.
|
||||
Added png_permit_mng_features() function.
|
||||
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
|
||||
@@ -874,6 +875,54 @@ version 1.0.9beta7 [December 28, 2000]
|
||||
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_p in pngconf.h when PNG_NO_STDIO is defined.
|
||||
Fixed "png_mmx_supported" typo in project definition files.
|
||||
version 1.0.9beta11 [January 19, 2001]
|
||||
Updated makefile.sgi to make shared library.
|
||||
Removed png_mmx_support() function and disabled PNG_MNG_FEATURES_SUPPORTED
|
||||
by default, for the benefit of DLL forward compatibility. These will
|
||||
be re-enabled in version 1.2.0.
|
||||
version 1.0.9rc2 [January 22, 2001]
|
||||
Revised cygwin support.
|
||||
version 1.0.9 [January 31, 2001]
|
||||
Added check of cygwin's ALL_STATIC in pngconf.h
|
||||
Added "-nommx" parameter to contrib/gregbook/rpng2-win and rpng2-x demos.
|
||||
version 1.0.10beta1 [March 14, 2001]
|
||||
Revised makefile.dec, makefile.sgi, and makefile.sggcc; added makefile.hpgcc.
|
||||
Reformatted libpng.3 to eliminate bad line breaks.
|
||||
Added checks for _mmx_supported in the read_filter_row function of pnggccrd.c
|
||||
Added prototype for png_mmx_support() near the top of pnggccrd.c
|
||||
Moved some error checking from png_handle_IHDR to png_set_IHDR.
|
||||
Added PNG_NO_READ_SUPPORTED and PNG_NO_WRITE_SUPPORTED macros.
|
||||
Revised png_mmx_support() function in pnggccrd.c
|
||||
Restored version 1.0.8 PNG_WRITE_EMPTY_PLTE_SUPPORTED behavior in pngwutil.c
|
||||
Fixed memory leak in contrib/visupng/PngFile.c
|
||||
Fixed bugs in png_combine_row() in pnggccrd.c and pngvcrd.c (C version)
|
||||
Added warnings when retrieving or setting gamma=0.
|
||||
Increased the first part of msg buffer from 16 to 18 in png_chunk_warning().
|
||||
version 1.0.10rc1 [March 23, 2001]
|
||||
Changed all instances of memcpy, strcpy, and strlen to png_memcpy, png_strcpy,
|
||||
and png_strlen.
|
||||
Revised png_mmx_supported() function in pnggccrd.c to return proper value.
|
||||
Fixed bug in progressive reading (pngpread.c) with small images (height < 8).
|
||||
version 1.0.10 [March 30, 2001]
|
||||
Deleted extraneous space (introduced in 1.0.9) from line 42 of makefile.cygwin
|
||||
Added beos project files (Chris Herborth)
|
||||
version 1.0.11beta1 [April 3, 2001]
|
||||
Added type casts on several png_malloc() calls (Dimitri Papadapoulos).
|
||||
Removed a no-longer needed AIX work-around from pngconf.h
|
||||
Changed several "//" single-line comments to C-style in pnggccrd.c
|
||||
version 1.0.11beta2 [April 11, 2001]
|
||||
Removed PNGAPI from several functions whose prototypes did not have PNGAPI.
|
||||
Updated scripts/pngos2.def
|
||||
version 1.0.11beta3 [April 15, 2001]
|
||||
Added checking the results of many instances of png_malloc() for NULL
|
||||
|
||||
Send comments/corrections/commendations to
|
||||
png-implement@ccrc.wustl.edu or to randeg@alum.rpi.edu
|
||||
|
||||
14
INSTALL
14
INSTALL
@@ -1,5 +1,5 @@
|
||||
|
||||
Installing libpng version 1.0.9beta8 - January 12, 2001
|
||||
Installing libpng version 1.0.11beta3 - April 15, 2001
|
||||
|
||||
Before installing libpng, you must first install zlib. zlib
|
||||
can usually be found wherever you got libpng. zlib can be
|
||||
@@ -10,7 +10,7 @@ zlib.h and zconf.h include files that correspond to the
|
||||
version of zlib that's installed.
|
||||
|
||||
You can rename the directories that you downloaded (they
|
||||
might be called "libpng-1.0.9beta8" or "lpng109" and "zlib-1.1.3"
|
||||
might be called "libpng-1.0.11beta3" or "lpng109" and "zlib-1.1.3"
|
||||
or "zlib113") so that you have directories called "zlib" and "libpng".
|
||||
|
||||
Your directory structure should look like this:
|
||||
@@ -28,6 +28,7 @@ Your directory structure should look like this:
|
||||
pngsuite
|
||||
visupng
|
||||
projects
|
||||
beos
|
||||
borland
|
||||
msvc
|
||||
wince
|
||||
@@ -59,8 +60,8 @@ The files that are presently available in the scripts directory
|
||||
include
|
||||
|
||||
makefile.std => Generic UNIX makefile (cc, creates static libpng.a)
|
||||
makefile.linux => Linux/ELF makefile (gcc, creates libpng.so.2.1.0.9beta8)
|
||||
makefile.gcmmx => Linux/ELF makefile (gcc, creates libpng.so.2.1.0.9beta8,
|
||||
makefile.linux => Linux/ELF makefile (gcc, creates libpng.so.2.1.0.11beta3)
|
||||
makefile.gcmmx => Linux/ELF makefile (gcc, creates libpng.so.2.1.0.11beta3,
|
||||
uses assembler code tuned for Intel MMX platform)
|
||||
makefile.gcc => Generic makefile (gcc, creates static libpng.a)
|
||||
makefile.knr => Archaic UNIX Makefile that converts files with
|
||||
@@ -69,15 +70,16 @@ include
|
||||
makefile.aix => AIX makefile
|
||||
makefile.cygwin => Cygwin/gcc makefile
|
||||
makefile.dec => DEC Alpha UNIX makefile
|
||||
makefile.hpgcc => HPUX makefile using gcc
|
||||
makefile.hpux => HPUX (10.20 and 11.00) makefile
|
||||
makefile.ibmc => IBM C/C++ version 3.x for Win32 and OS/2 (static)
|
||||
makefile.intel => Intel C/C++ version 4.0 and 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.sggcc => Silicon Graphics (gcc, creates libpng.so.2.1.0.9beta8)
|
||||
makefile.sggcc => Silicon Graphics (gcc, creates libpng.so.2.1.0.11beta3)
|
||||
makefile.sunos => Sun makefile
|
||||
makefile.solaris => Solaris 2.X makefile (gcc, creates libpng.so.2.1.0.9beta8)
|
||||
makefile.solaris => Solaris 2.X makefile (gcc, creates libpng.so.2.1.0.11beta3)
|
||||
makefile.sco => For SCO OSr5 ELF and Unixware 7 with Native cc
|
||||
makefile.mips => MIPS makefile
|
||||
makefile.acorn => Acorn makefile
|
||||
|
||||
28
KNOWNBUG
28
KNOWNBUG
@@ -1,4 +1,28 @@
|
||||
|
||||
Known bugs in libpng-1.0.9
|
||||
Known bugs in libpng-1.0.10
|
||||
|
||||
None as of January 12, 2001.
|
||||
1. April 1, 2001: Missing type casts on png_malloc() calls (Dimitri Papadopolous)
|
||||
|
||||
A call to png_malloc() in pngread.c is missing the (png_bytep) type cast,
|
||||
and four calls in pngset.c are missing type casts, (png_charp), (png_charp),
|
||||
(png_bytep), and (png_bytep), respectively.
|
||||
|
||||
STATUS: fixed in libpng-1.0.11beta1.
|
||||
|
||||
2. April 3, 2001: "//" comments cause the SGI compiler (o32) to fail to
|
||||
compile pnggccrd.c (Richard Kettlewell).
|
||||
|
||||
STATUS: fixed in libpng-1.0.11beta1.
|
||||
|
||||
3. April 5, 2001: The prototypes don't match several functions.
|
||||
|
||||
Functions png_info_init, png_zalloc, and several others have PNGAPI
|
||||
in the C functions but not in the prototypes in png.h. The functions
|
||||
involved are all either deprecated or intended only for internal use.
|
||||
|
||||
STATUS: PNGAPI was removed from the C code in libpng-1.0.11beta2.
|
||||
|
||||
4. April 14, 2001: Many instances of png_malloc() are not followed by
|
||||
a check to make sure it didn't return NULL.
|
||||
|
||||
STATUS: tests were added in libpng-1.0.11beta3.
|
||||
|
||||
14
LICENSE
14
LICENSE
@@ -8,8 +8,8 @@ COPYRIGHT NOTICE, DISCLAIMER, and LICENSE:
|
||||
If you modify libpng you may insert additional notices immediately following
|
||||
this sentence.
|
||||
|
||||
libpng versions 1.0.7, July 1, 2000, through 1.0.9beta8, January 12, 2001, are
|
||||
Copyright (c) 2000 Glenn Randers-Pehrson
|
||||
libpng versions 1.0.7, July 1, 2000, through 1.0.11beta3, April 15, 2001, are
|
||||
Copyright (c) 2000, 2001 Glenn Randers-Pehrson
|
||||
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
|
||||
|
||||
@@ -73,11 +73,11 @@ to the following restrictions:
|
||||
|
||||
1. The origin of this source code must not be misrepresented.
|
||||
|
||||
2. Altered versions must be plainly marked as such and must not
|
||||
be misrepresented as being the original source.
|
||||
2. Altered versions must be plainly marked as such and
|
||||
must not be misrepresented as being the original source.
|
||||
|
||||
3. This Copyright notice may not be removed or altered from any
|
||||
source or altered source distribution.
|
||||
3. This Copyright notice may not be removed or altered from
|
||||
any source or altered source distribution.
|
||||
|
||||
The Contributing Authors and Group 42, Inc. specifically permit, without
|
||||
fee, and encourage the use of this source code as a component to
|
||||
@@ -99,4 +99,4 @@ certification mark of the Open Source Initiative.
|
||||
|
||||
Glenn Randers-Pehrson
|
||||
randeg@alum.rpi.edu
|
||||
January 12, 2001
|
||||
April 15, 2001
|
||||
|
||||
12
README
12
README
@@ -1,4 +1,4 @@
|
||||
README for libpng 1.0.9beta8 - January 12, 2001 (shared library 2.1)
|
||||
README for libpng 1.0.11beta3 - April 15, 2001 (shared library 2.1)
|
||||
See the note about version numbers near the top of png.h
|
||||
|
||||
See INSTALL for instructions on how to install libpng.
|
||||
@@ -172,6 +172,7 @@ Files in this distribution:
|
||||
pngsuite => Test images
|
||||
visupng => Contains a MSVC workspace for VisualPng
|
||||
projects => Contains project files and workspaces for building DLL
|
||||
beos => Contains a Beos workspace for building libpng
|
||||
borland => Contains a Borland workspace for building libpng
|
||||
and zlib
|
||||
msvc => Contains a Microsoft Visual C++ (MSVC) workspace
|
||||
@@ -182,9 +183,9 @@ Files in this distribution:
|
||||
descrip.mms => VMS makefile for MMS or MMK
|
||||
makefile.std => Generic UNIX makefile (cc, creates static libpng.a)
|
||||
makefile.linux => Linux/ELF makefile
|
||||
(gcc, creates libpng.so.2.1.0.9beta8)
|
||||
(gcc, creates libpng.so.2.1.0.11beta3)
|
||||
makefile.gcmmx => Linux/ELF makefile (gcc, creates
|
||||
libpng.so.2.1.0.9beta8, uses assembler code
|
||||
libpng.so.2.1.0.11beta3, uses assembler code
|
||||
tuned for Intel MMX platform)
|
||||
makefile.gcc => Generic makefile (gcc, creates static libpng.a)
|
||||
makefile.knr => Archaic UNIX Makefile that converts files with
|
||||
@@ -193,16 +194,17 @@ Files in this distribution:
|
||||
makefile.aix => AIX makefile
|
||||
makefile.cygwin => Cygwin/gcc makefile
|
||||
makefile.dec => DEC Alpha UNIX makefile
|
||||
makefile.hpgcc => HPUX makefile using gcc
|
||||
makefile.hpux => HPUX (10.20 and 11.00) makefile
|
||||
makefile.ibmc => IBM C/C++ version 3.x for Win32 and OS/2 (static)
|
||||
makefile.intel => Intel C/C++ version 4.0 and 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.sggcc => Silicon Graphics (gcc, creates libpng.so.2.1.0.9beta8)
|
||||
makefile.sggcc => Silicon Graphics (gcc, creates libpng.so.2.1.0.11beta3)
|
||||
makefile.sunos => Sun makefile
|
||||
makefile.solaris => Solaris 2.X makefile
|
||||
(gcc, creates libpng.so.2.1.0.9beta8)
|
||||
(gcc, creates libpng.so.2.1.0.11beta3)
|
||||
makefile.sco => For SCO OSr5 ELF and Unixware 7 with Native cc
|
||||
makefile.mips => MIPS makefile
|
||||
makefile.acorn => Acorn makefile
|
||||
|
||||
4
Y2KINFO
4
Y2KINFO
@@ -1,13 +1,13 @@
|
||||
Y2K compliance in libpng:
|
||||
=========================
|
||||
|
||||
January 12, 2001
|
||||
April 15, 2001
|
||||
|
||||
Since the PNG Development group is an ad-hoc body, we can't make
|
||||
an official declaration.
|
||||
|
||||
This is your unofficial assurance that libpng from version 0.71 and
|
||||
upward through 1.0.9beta8 are Y2K compliant. It is my belief that earlier
|
||||
upward through 1.0.11beta3 are Y2K compliant. It is my belief that earlier
|
||||
versions were also Y2K compliant.
|
||||
|
||||
Libpng only has three year fields. One is a 2-byte unsigned integer
|
||||
|
||||
2
configure
vendored
2
configure
vendored
@@ -1,5 +1,5 @@
|
||||
echo "
|
||||
There is no \"configure\" script for Libpng-1.0.9beta8. Instead, please
|
||||
There is no \"configure\" script for Libpng-1.0.11beta3. Instead, please
|
||||
copy the appropriate makefile for your system from the \"scripts\"
|
||||
directory. Read the INSTALL file for more details.
|
||||
"
|
||||
|
||||
102
contrib/gregbook/Makefile.sgi
Normal file
102
contrib/gregbook/Makefile.sgi
Normal file
@@ -0,0 +1,102 @@
|
||||
# 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)
|
||||
@@ -56,7 +56,7 @@
|
||||
|
||||
#define PROGNAME "rpng2-win"
|
||||
#define LONGNAME "Progressive PNG Viewer for Windows"
|
||||
#define VERSION "1.20 of 4 January 2001"
|
||||
#define VERSION "1.20 of 29 January 2001"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@@ -373,6 +373,10 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
||||
rpng2_info.nommxcombine = TRUE;
|
||||
} else if (!strncmp(*argv, "-nommxinterlace", 7)) {
|
||||
rpng2_info.nommxinterlace = TRUE;
|
||||
} else if (!strcmp(*argv, "-nommx")) {
|
||||
rpng2_info.nommxfilters = TRUE;
|
||||
rpng2_info.nommxcombine = TRUE;
|
||||
rpng2_info.nommxinterlace = TRUE;
|
||||
#endif
|
||||
} else {
|
||||
if (**argv != '-') {
|
||||
@@ -428,7 +432,7 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, PSTR cmd, int showmode)
|
||||
fprintf(stderr, "\n"
|
||||
"Usage: %s [-gamma exp] [-bgcolor bg | -bgpat pat] [-timing]\n"
|
||||
#if (defined(__i386__) || defined(_M_IX86))
|
||||
" %*s [-nommxfilters] [-nommxcombine] [-nommxinterlace]\n"
|
||||
" %*s [[-nommxfilters] [-nommxcombine] [-nommxinterlace] | -nommx]\n"
|
||||
#endif
|
||||
" %*s file.png\n\n"
|
||||
" exp \ttransfer-function exponent (``gamma'') of the display\n"
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
|
||||
#define PROGNAME "rpng2-x"
|
||||
#define LONGNAME "Progressive PNG Viewer for X"
|
||||
#define VERSION "1.20 of 4 January 2001"
|
||||
#define VERSION "1.20 of 29 January 2001"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
@@ -367,6 +367,10 @@ int main(int argc, char **argv)
|
||||
rpng2_info.nommxcombine = TRUE;
|
||||
} else if (!strncmp(*argv, "-nommxinterlace", 7)) {
|
||||
rpng2_info.nommxinterlace = TRUE;
|
||||
} else if (!strcmp(*argv, "-nommx")) {
|
||||
rpng2_info.nommxfilters = TRUE;
|
||||
rpng2_info.nommxcombine = TRUE;
|
||||
rpng2_info.nommxinterlace = TRUE;
|
||||
#endif
|
||||
} else {
|
||||
if (**argv != '-') {
|
||||
@@ -428,7 +432,7 @@ int main(int argc, char **argv)
|
||||
fprintf(stderr, "\n"
|
||||
"Usage: %s [-display xdpy] [-gamma exp] [-bgcolor bg | -bgpat pat]\n"
|
||||
#if (defined(__i386__) || defined(_M_IX86))
|
||||
" %*s [-nommxfilters] [-nommxcombine] [-nommxinterlace]\n"
|
||||
" %*s [[-nommxfilters] [-nommxcombine] [-nommxinterlace] | -nommx]\n"
|
||||
#endif
|
||||
" %*s [-usleep dur | -timing] [-pause] file.png\n\n"
|
||||
" xdpy\tname of the target X display (e.g., ``hostname:0'')\n"
|
||||
|
||||
@@ -370,14 +370,14 @@ BOOL PngSaveImage (PTSTR pstrFileName, png_byte *pDiData,
|
||||
|
||||
// clean up after the write, and free any memory allocated
|
||||
|
||||
png_destroy_write_struct(&png_ptr, (png_infopp) NULL);
|
||||
png_destroy_write_struct(&png_ptr, &info_ptr);
|
||||
|
||||
// yepp, done
|
||||
}
|
||||
|
||||
Catch (msg)
|
||||
{
|
||||
png_destroy_write_struct(&png_ptr, (png_infopp) NULL);
|
||||
png_destroy_write_struct(&png_ptr, &info_ptr);
|
||||
|
||||
if(ppbRowPointers)
|
||||
free (ppbRowPointers);
|
||||
|
||||
@@ -494,7 +494,7 @@ row_callback(png_structp png_ptr, png_bytep new_row,
|
||||
* png_progressive_combine_row() passing in the row and the
|
||||
* old row. You can call this function for NULL rows (it will
|
||||
* just return) and for non-interlaced images (it just does the
|
||||
* memcpy for you) if it will make the code easier. Thus, you
|
||||
* png_memcpy for you) if it will make the code easier. Thus, you
|
||||
* can just do this for all cases:
|
||||
*/
|
||||
|
||||
@@ -603,7 +603,10 @@ void write_png(char *file_name /* , ... other image information ... */)
|
||||
PNG_INTERLACE_????, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
|
||||
|
||||
/* set the palette if there is one. REQUIRED for indexed-color images */
|
||||
palette = (png_colorp)png_malloc(png_ptr, PNG_MAX_PALETTE_LENGTH * sizeof (png_color));
|
||||
palette = (png_colorp)png_malloc(png_ptr, PNG_MAX_PALETTE_LENGTH
|
||||
* sizeof (png_color));
|
||||
if (palette == NULL)
|
||||
png_error(png_ptr, "Example: malloc of palette failed");
|
||||
/* ... set palette colors ... */
|
||||
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
|
||||
|
||||
378
libpng.3
378
libpng.3
@@ -1,6 +1,6 @@
|
||||
.TH LIBPNG 3 "January 12, 2001"
|
||||
.TH LIBPNG 3 "April 15, 2001"
|
||||
.SH NAME
|
||||
libpng \- Portable Network Graphics (PNG) Reference Library 1.0.9beta8
|
||||
libpng \- Portable Network Graphics (PNG) Reference Library 1.0.11beta3
|
||||
.SH SYNOPSIS
|
||||
\fI\fB
|
||||
|
||||
@@ -100,10 +100,6 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.0.9beta8
|
||||
|
||||
\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
|
||||
|
||||
\fI\fB
|
||||
@@ -338,10 +334,6 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.0.9beta8
|
||||
|
||||
\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
|
||||
|
||||
\fI\fB
|
||||
@@ -392,10 +384,6 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.0.9beta8
|
||||
|
||||
\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
|
||||
|
||||
\fI\fB
|
||||
@@ -759,7 +747,7 @@ Following is a copy of the libpng.txt file that accompanies libpng.
|
||||
.SH LIBPNG.TXT
|
||||
libpng.txt - A description on how to use and modify libpng
|
||||
|
||||
libpng version 1.0.9beta8 - January 12, 2001
|
||||
libpng version 1.0.11beta3 - April 15, 2001
|
||||
Updated and distributed by Glenn Randers-Pehrson
|
||||
<randeg@alum.rpi.edu>
|
||||
Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||
@@ -1016,10 +1004,11 @@ input stream. You must supply the function
|
||||
png_byte name[5];
|
||||
png_byte *data;
|
||||
png_size_t size;
|
||||
/* Note that libpng has already taken care of the
|
||||
CRC handling */
|
||||
/* Note that libpng has already taken care of
|
||||
the CRC handling */
|
||||
|
||||
/* put your code here. Return one of the following: */
|
||||
/* put your code here. Return one of the
|
||||
following: */
|
||||
|
||||
return (-n); /* chunk had an error */
|
||||
return (0); /* did not recognize */
|
||||
@@ -1090,16 +1079,23 @@ the entire image into memory, and (b) the input transformations
|
||||
you want to do are limited to the following set:
|
||||
|
||||
PNG_TRANSFORM_IDENTITY No transformation
|
||||
PNG_TRANSFORM_STRIP_16 Strip 16-bit samples to 8 bits
|
||||
PNG_TRANSFORM_STRIP_16 Strip 16-bit samples to
|
||||
8 bits
|
||||
PNG_TRANSFORM_STRIP_ALPHA Discard the alpha channel
|
||||
PNG_TRANSFORM_PACKING Expand 1, 2 and 4-bit samples to bytes
|
||||
PNG_TRANSFORM_PACKSWAP Change order of packed pixels to LSB first
|
||||
PNG_TRANSFORM_PACKING Expand 1, 2 and 4-bit
|
||||
samples to bytes
|
||||
PNG_TRANSFORM_PACKSWAP Change order of packed
|
||||
pixels to LSB first
|
||||
PNG_TRANSFORM_EXPAND Perform set_expand()
|
||||
PNG_TRANSFORM_INVERT_MONO Invert monochrome images
|
||||
PNG_TRANSFORM_SHIFT Normalize pixels to the sBIT depth
|
||||
PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA to BGRA
|
||||
PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA to AG
|
||||
PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity to transparency
|
||||
PNG_TRANSFORM_SHIFT Normalize pixels to the
|
||||
sBIT depth
|
||||
PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA
|
||||
to BGRA
|
||||
PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA
|
||||
to AG
|
||||
PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity
|
||||
to transparency
|
||||
PNG_TRANSFORM_SWAP_ENDIAN Byte-swap 16-bit samples
|
||||
|
||||
(This excludes setting a background color, doing gamma transformation,
|
||||
@@ -1127,9 +1123,11 @@ where row_pointers is an array of pointers to the pixel data for each row:
|
||||
If you know your image size and pixel size ahead of time, you can allocate
|
||||
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++)
|
||||
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);
|
||||
|
||||
Alternatively you could allocate your image in one big block and define
|
||||
@@ -1197,8 +1195,8 @@ in until png_read_end() has read the chunk data following the image.
|
||||
interlace_type - (PNG_INTERLACE_NONE or
|
||||
PNG_INTERLACE_ADAM7)
|
||||
Any or all of interlace_type, compression_type, of
|
||||
filter_method can be NULL if you are
|
||||
not interested in their values.
|
||||
filter_method can be NULL if you are
|
||||
not interested in their values.
|
||||
|
||||
channels = png_get_channels(png_ptr, info_ptr);
|
||||
channels - number of channels of info for the
|
||||
@@ -1261,14 +1259,15 @@ into the info_ptr is returned for any complex types.
|
||||
implies specific values of gAMA and
|
||||
cHRM.
|
||||
|
||||
png_get_iCCP(png_ptr, info_ptr, &name, &compression_type,
|
||||
&profile, &proflen);
|
||||
png_get_iCCP(png_ptr, info_ptr, &name,
|
||||
&compression_type, &profile, &proflen);
|
||||
name - The profile name.
|
||||
compression - The compression type; always PNG_COMPRESSION_TYPE_BASE
|
||||
for PNG 1.0. You may give NULL to this argument
|
||||
to ignore it.
|
||||
profile - International Color Consortium color profile
|
||||
data. May contain NULs.
|
||||
compression - The compression type; always
|
||||
PNG_COMPRESSION_TYPE_BASE for PNG 1.0.
|
||||
You may give NULL to this argument to
|
||||
ignore it.
|
||||
profile - International Color Consortium color
|
||||
profile data. May contain NULs.
|
||||
proflen - length of profile data in bytes.
|
||||
|
||||
png_get_sBIT(png_ptr, info_ptr, &sig_bit);
|
||||
@@ -1324,21 +1323,24 @@ into the info_ptr is returned for any complex types.
|
||||
string for unknown).
|
||||
text_ptr[i].translated_keyword - keyword in UTF-8
|
||||
(empty string for unknown).
|
||||
num_text - number of comments (same as num_comments;
|
||||
you can put NULL here to avoid the duplication)
|
||||
Note while png_set_text() will accept text, language, and
|
||||
translated keywords that can be NULL pointers, the structure
|
||||
returned by png_get_text will always contain regular
|
||||
zero-terminated C strings. They might be empty strings but
|
||||
they will never be NULL pointers.
|
||||
num_text - number of comments (same as
|
||||
num_comments; you can put NULL here
|
||||
to avoid the duplication)
|
||||
Note while png_set_text() will accept text, language,
|
||||
and translated keywords that can be NULL pointers, the
|
||||
structure returned by png_get_text will always contain
|
||||
regular zero-terminated C strings. They might be
|
||||
empty strings but they will never be NULL pointers.
|
||||
|
||||
num_spalettes = png_get_sPLT(png_ptr, info_ptr, &palette_ptr);
|
||||
num_spalettes = png_get_sPLT(png_ptr, info_ptr,
|
||||
&palette_ptr);
|
||||
palette_ptr - array of palette structures holding
|
||||
contents of one or more sPLT chunks read.
|
||||
contents of one or more sPLT chunks
|
||||
read.
|
||||
num_spalettes - number of sPLT chunks read.
|
||||
|
||||
png_get_oFFs(png_ptr, info_ptr, &offset_x, &offset_y,
|
||||
&unit_type);
|
||||
&unit_type);
|
||||
offset_x - positive offset from the left edge
|
||||
of the screen
|
||||
offset_y - positive offset from the top edge
|
||||
@@ -1346,7 +1348,7 @@ into the info_ptr is returned for any complex types.
|
||||
unit_type - PNG_OFFSET_PIXEL, PNG_OFFSET_MICROMETER
|
||||
|
||||
png_get_pHYs(png_ptr, info_ptr, &res_x, &res_y,
|
||||
&unit_type);
|
||||
&unit_type);
|
||||
res_x - pixels/unit physical resolution in
|
||||
x direction
|
||||
res_y - pixels/unit physical resolution in
|
||||
@@ -1354,47 +1356,50 @@ into the info_ptr is returned for any complex types.
|
||||
unit_type - PNG_RESOLUTION_UNKNOWN,
|
||||
PNG_RESOLUTION_METER
|
||||
|
||||
png_get_sCAL(png_ptr, info_ptr, &unit, &width, &height)
|
||||
png_get_sCAL(png_ptr, info_ptr, &unit, &width,
|
||||
&height)
|
||||
unit - physical scale units (an integer)
|
||||
width - width of a pixel in physical scale units
|
||||
height - height of a pixel in physical scale units
|
||||
(width and height are doubles)
|
||||
|
||||
png_get_sCAL_s(png_ptr, info_ptr, &unit, &width, &height)
|
||||
png_get_sCAL_s(png_ptr, info_ptr, &unit, &width,
|
||||
&height)
|
||||
unit - physical scale units (an integer)
|
||||
width - width of a pixel in physical scale units
|
||||
height - height of a pixel in physical scale units
|
||||
(width and height are strings like "2.54")
|
||||
|
||||
num_unknown_chunks = png_get_unknown_chunks(png_ptr, info_ptr,
|
||||
&unknowns)
|
||||
unknowns - array of png_unknown_chunk structures holding
|
||||
unknown chunks
|
||||
num_unknown_chunks = png_get_unknown_chunks(png_ptr,
|
||||
info_ptr, &unknowns)
|
||||
unknowns - array of png_unknown_chunk
|
||||
structures holding unknown chunks
|
||||
unknowns[i].name - name of unknown chunk
|
||||
unknowns[i].data - data of unknown chunk
|
||||
unknowns[i].size - size of unknown chunk's data
|
||||
unknowns[i].location - position of chunk in file
|
||||
|
||||
The value of "i" corresponds to the order in which the chunks were read
|
||||
from the PNG file or inserted with the png_set_unknown_chunks() function.
|
||||
The value of "i" corresponds to the order in which the
|
||||
chunks were read from the PNG file or inserted with the
|
||||
png_set_unknown_chunks() function.
|
||||
|
||||
The data from the pHYs chunk can be retrieved in several convenient
|
||||
forms:
|
||||
|
||||
res_x = png_get_x_pixels_per_meter(png_ptr,
|
||||
info_ptr)
|
||||
info_ptr)
|
||||
res_y = png_get_y_pixels_per_meter(png_ptr,
|
||||
info_ptr)
|
||||
info_ptr)
|
||||
res_x_and_y = png_get_pixels_per_meter(png_ptr,
|
||||
info_ptr)
|
||||
info_ptr)
|
||||
res_x = png_get_x_pixels_per_inch(png_ptr,
|
||||
info_ptr)
|
||||
info_ptr)
|
||||
res_y = png_get_y_pixels_per_inch(png_ptr,
|
||||
info_ptr)
|
||||
info_ptr)
|
||||
res_x_and_y = png_get_pixels_per_inch(png_ptr,
|
||||
info_ptr)
|
||||
info_ptr)
|
||||
aspect_ratio = png_get_pixel_aspect_ratio(png_ptr,
|
||||
info_ptr)
|
||||
info_ptr)
|
||||
|
||||
(Each of these returns 0 [signifying "unknown"] if
|
||||
the data is not present or if res_x is 0;
|
||||
@@ -1409,8 +1414,8 @@ forms:
|
||||
y_offset = png_get_y_offset_inches(png_ptr, info_ptr);
|
||||
|
||||
(Each of these returns 0 [signifying "unknown" if both
|
||||
x and y are 0] if the data is not present or if the chunk
|
||||
is present but the unit is the pixel)
|
||||
x and y are 0] if the data is not present or if the
|
||||
chunk is present but the unit is the pixel)
|
||||
|
||||
For more information, see the png_info definition in png.h and the
|
||||
PNG specification for chunk contents. Be careful with trusting
|
||||
@@ -1944,7 +1949,7 @@ When you are done, you can free all memory allocated by libpng like this:
|
||||
It is also possible to individually free the info_ptr members that
|
||||
point to libpng-allocated storage with the following function:
|
||||
|
||||
png_free_data(png_ptr, info_ptr, mask, n)
|
||||
png_free_data(png_ptr, info_ptr, mask, seq)
|
||||
mask - identifies data to be freed, a mask
|
||||
containing the logical OR of one or
|
||||
more of
|
||||
@@ -1954,16 +1959,17 @@ point to libpng-allocated storage with the following function:
|
||||
PNG_FREE_SCAL, PNG_FREE_SPLT,
|
||||
PNG_FREE_TEXT, PNG_FREE_UNKN,
|
||||
or simply PNG_FREE_ALL
|
||||
n - sequence number of item to be freed
|
||||
seq - sequence number of item to be freed
|
||||
(-1 for all items)
|
||||
|
||||
This function may be safely called when the relevant storage has
|
||||
already been freed, or has not yet been allocated, or was allocated
|
||||
by the user and not by libpng, and will in those
|
||||
cases do nothing. The "n" parameter is ignored if only one item
|
||||
of the selected data type, such as PLTE, is allowed. If "n" is not
|
||||
cases do nothing. The "seq" parameter is ignored if only one item
|
||||
of the selected data type, such as PLTE, is allowed. If "seq" is not
|
||||
-1, and multiple items are allowed for the data type identified in
|
||||
the mask, such as text or sPLT, only the n'th item is freed.
|
||||
the mask, such as text or sPLT, only the n'th item in the structure
|
||||
is freed, where n is "seq".
|
||||
|
||||
The default behavior is only to free data that was allocated internally
|
||||
by libpng. This can be changed, so that libpng will not free the data,
|
||||
@@ -2136,9 +2142,10 @@ png_infop info_ptr;
|
||||
|
||||
/* This function is called when each row of image
|
||||
data is complete */
|
||||
|
||||
void
|
||||
row_callback(png_structp png_ptr, png_bytep new_row,
|
||||
png_uint_32 row_num, int pass)
|
||||
png_uint_32 row_num, int pass)
|
||||
{
|
||||
/* If the image is interlaced, and you turned
|
||||
on the interlace handler, this function will
|
||||
@@ -2282,7 +2289,8 @@ called after each row has been written, which you can use to control
|
||||
a progress meter or the like. It's demonstrated in pngtest.c.
|
||||
You must supply a function
|
||||
|
||||
void write_row_callback(png_ptr, png_uint_32 row, int pass);
|
||||
void write_row_callback(png_ptr, png_uint_32 row,
|
||||
int pass);
|
||||
{
|
||||
/* put your code here */
|
||||
}
|
||||
@@ -2310,8 +2318,9 @@ types.
|
||||
|
||||
|
||||
/* turn on or off filtering, and/or choose
|
||||
specific filters. You can use either a single PNG_FILTER_VALUE_NAME
|
||||
or the logical OR of one or more PNG_FILTER_NAME masks. */
|
||||
specific filters. You can use either a single
|
||||
PNG_FILTER_VALUE_NAME or the logical OR of one
|
||||
or more PNG_FILTER_NAME masks. */
|
||||
png_set_filter(png_ptr, 0,
|
||||
PNG_FILTER_NONE | PNG_FILTER_VALUE_NONE |
|
||||
PNG_FILTER_SUB | PNG_FILTER_VALUE_SUB |
|
||||
@@ -2447,11 +2456,12 @@ Some of the more important parts of the png_info are:
|
||||
png_set_iCCP(png_ptr, info_ptr, name, compression_type,
|
||||
profile, proflen);
|
||||
name - The profile name.
|
||||
compression - The compression type; always PNG_COMPRESSION_TYPE_BASE
|
||||
for PNG 1.0. You may give NULL to this argument
|
||||
to ignore it.
|
||||
profile - International Color Consortium color profile
|
||||
data. May contain NULs.
|
||||
compression - The compression type; always
|
||||
PNG_COMPRESSION_TYPE_BASE for PNG 1.0.
|
||||
You may give NULL to this argument to
|
||||
ignore it.
|
||||
profile - International Color Consortium color
|
||||
profile data. May contain NULs.
|
||||
proflen - length of profile data in bytes.
|
||||
|
||||
png_set_sBIT(png_ptr, info_ptr, sig_bit);
|
||||
@@ -2505,11 +2515,13 @@ Some of the more important parts of the png_info are:
|
||||
or empty for unknown).
|
||||
num_text - number of comments
|
||||
|
||||
png_set_sPLT(png_ptr, info_ptr, &palette_ptr, num_spalettes);
|
||||
palette_ptr - array of png_sPLT_struct structures to be
|
||||
added to the list of palettes in the info
|
||||
structure.
|
||||
num_spalettes - number of palette structures to be added.
|
||||
png_set_sPLT(png_ptr, info_ptr, &palette_ptr,
|
||||
num_spalettes);
|
||||
palette_ptr - array of png_sPLT_struct structures
|
||||
to be added to the list of palettes
|
||||
in the info structure.
|
||||
num_spalettes - number of palette structures to be
|
||||
added.
|
||||
|
||||
png_set_oFFs(png_ptr, info_ptr, offset_x, offset_y,
|
||||
unit_type);
|
||||
@@ -2540,9 +2552,10 @@ Some of the more important parts of the png_info are:
|
||||
height - height of a pixel in physical scale units
|
||||
(width and height are strings like "2.54")
|
||||
|
||||
png_set_unknown_chunks(png_ptr, info_ptr, &unknowns, num_unknowns)
|
||||
unknowns - array of png_unknown_chunk structures holding
|
||||
unknown chunks
|
||||
png_set_unknown_chunks(png_ptr, info_ptr, &unknowns,
|
||||
num_unknowns)
|
||||
unknowns - array of png_unknown_chunk
|
||||
structures holding unknown chunks
|
||||
unknowns[i].name - name of unknown chunk
|
||||
unknowns[i].data - data of unknown chunk
|
||||
unknowns[i].size - size of unknown chunk's data
|
||||
@@ -2551,14 +2564,15 @@ Some of the more important parts of the png_info are:
|
||||
PNG_HAVE_IHDR: before PLTE
|
||||
PNG_HAVE_PLTE: before IDAT
|
||||
PNG_AFTER_IDAT: after IDAT
|
||||
The "location" member is set automatically according to
|
||||
what part of the output file has already been written.
|
||||
You can change its value after calling png_set_unknown_chunks()
|
||||
as demonstrated in pngtest.c. Within each of the "locations",
|
||||
the chunks are sequenced according to their position in the
|
||||
structure (that is, the value of "i", which is the order in which
|
||||
the chunk was either read from the input file or defined with
|
||||
png_set_unknown_chunks).
|
||||
|
||||
The "location" member is set automatically according to
|
||||
what part of the output file has already been written.
|
||||
You can change its value after calling png_set_unknown_chunks()
|
||||
as demonstrated in pngtest.c. Within each of the "locations",
|
||||
the chunks are sequenced according to their position in the
|
||||
structure (that is, the value of "i", which is the order in which
|
||||
the chunk was either read from the input file or defined with
|
||||
png_set_unknown_chunks).
|
||||
|
||||
A quick word about text and num_text. text is an array of png_text
|
||||
structures. num_text is the number of valid structures in the array.
|
||||
@@ -2659,12 +2673,17 @@ transformations are permitted, enabled by the following masks.
|
||||
|
||||
PNG_TRANSFORM_IDENTITY No transformation
|
||||
PNG_TRANSFORM_PACKING Pack 1, 2 and 4-bit samples
|
||||
PNG_TRANSFORM_PACKSWAP Change order of packed pixels to LSB first
|
||||
PNG_TRANSFORM_PACKSWAP Change order of packed
|
||||
pixels to LSB first
|
||||
PNG_TRANSFORM_INVERT_MONO Invert monochrome images
|
||||
PNG_TRANSFORM_SHIFT Normalize pixels to the sBIT depth
|
||||
PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA to BGRA
|
||||
PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA to AG
|
||||
PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity to transparency
|
||||
PNG_TRANSFORM_SHIFT Normalize pixels to the
|
||||
sBIT depth
|
||||
PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA
|
||||
to BGRA
|
||||
PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA
|
||||
to AG
|
||||
PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity
|
||||
to transparency
|
||||
PNG_TRANSFORM_SWAP_ENDIAN Byte-swap 16-bit samples
|
||||
PNG_TRANSFORM_STRIP_FILLER Strip out filler bytes.
|
||||
|
||||
@@ -2928,7 +2947,7 @@ When you are done, you can free all memory used by libpng like this:
|
||||
It is also possible to individually free the info_ptr members that
|
||||
point to libpng-allocated storage with the following function:
|
||||
|
||||
png_free_data(png_ptr, info_ptr, mask, n)
|
||||
png_free_data(png_ptr, info_ptr, mask, seq)
|
||||
mask - identifies data to be freed, a mask
|
||||
containing the logical OR of one or
|
||||
more of
|
||||
@@ -2938,16 +2957,17 @@ point to libpng-allocated storage with the following function:
|
||||
PNG_FREE_SCAL, PNG_FREE_SPLT,
|
||||
PNG_FREE_TEXT, PNG_FREE_UNKN,
|
||||
or simply PNG_FREE_ALL
|
||||
n - sequence number of item to be freed
|
||||
seq - sequence number of item to be freed
|
||||
(-1 for all items)
|
||||
|
||||
This function may be safely called when the relevant storage has
|
||||
already been freed, or has not yet been allocated, or was allocated
|
||||
by the user and not by libpng, and will in those
|
||||
cases do nothing. The "n" parameter is ignored if only one item
|
||||
of the selected data type, such as PLTE, is allowed. If "n" is not
|
||||
cases do nothing. The "seq" parameter is ignored if only one item
|
||||
of the selected data type, such as PLTE, is allowed. If "seq" is not
|
||||
-1, and multiple items are allowed for the data type identified in
|
||||
the mask, such as text or sPLT, only the n'th item is freed.
|
||||
the mask, such as text or sPLT, only the n'th item in the structure
|
||||
is freed, where n is "seq".
|
||||
|
||||
If you allocated data such as a palette that you passed
|
||||
in to libpng with png_set_*, you must not free it until just before the call to
|
||||
@@ -3028,8 +3048,8 @@ memory allocation on a platform will change between applications, these
|
||||
functions must be modified in the library at compile time. If you prefer
|
||||
to use a different method of allocating and freeing data, you can use
|
||||
|
||||
png_set_mem_fn(png_structp png_ptr, png_voidp mem_ptr, png_malloc_ptr
|
||||
malloc_fn, png_free_ptr free_fn)
|
||||
png_set_mem_fn(png_structp png_ptr, png_voidp mem_ptr,
|
||||
png_malloc_ptr malloc_fn, png_free_ptr free_fn)
|
||||
|
||||
This function also provides a void pointer that can be retrieved via
|
||||
|
||||
@@ -3037,7 +3057,8 @@ This function also provides a void pointer that can be retrieved via
|
||||
|
||||
Your replacement memory functions must have prototypes as follows:
|
||||
|
||||
png_voidp malloc_fn(png_structp png_ptr, png_uint_32 size);
|
||||
png_voidp malloc_fn(png_structp png_ptr,
|
||||
png_uint_32 size);
|
||||
void free_fn(png_structp png_ptr, png_voidp ptr);
|
||||
|
||||
Input/Output in libpng is done through png_read() and png_write(),
|
||||
@@ -3249,10 +3270,12 @@ structures appropriately for all of the filter types.
|
||||
|
||||
png_set_filter(png_ptr, PNG_FILTER_TYPE_BASE,
|
||||
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().
|
||||
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
|
||||
available filters. This is done in two ways - by telling it how
|
||||
@@ -3441,13 +3464,13 @@ application:
|
||||
|
||||
.SH VIII. Y2K Compliance in libpng
|
||||
|
||||
January 12, 2001
|
||||
April 15, 2001
|
||||
|
||||
Since the PNG Development group is an ad-hoc body, we can't make
|
||||
an official declaration.
|
||||
|
||||
This is your unofficial assurance that libpng from version 0.71 and
|
||||
upward through 1.0.9beta8 are Y2K compliant. It is my belief that earlier
|
||||
upward through 1.0.11beta3 are Y2K compliant. It is my belief that earlier
|
||||
versions were also Y2K compliant.
|
||||
|
||||
Libpng only has three year fields. One is a 2-byte unsigned integer that
|
||||
@@ -3465,7 +3488,8 @@ There are seven time-related functions:
|
||||
|
||||
png_convert_to_rfc_1123() in png.c
|
||||
(formerly png_convert_to_rfc_1152() in error)
|
||||
png_convert_from_struct_tm() in pngwrite.c, called in pngwrite.c
|
||||
png_convert_from_struct_tm() in pngwrite.c, called
|
||||
in pngwrite.c
|
||||
png_convert_from_time_t() in pngwrite.c
|
||||
png_get_tIME() in pngget.c
|
||||
png_handle_tIME() in pngrutil.c, called in pngread.c
|
||||
@@ -3504,43 +3528,68 @@ on the library has not always been consistent and straightforward.
|
||||
The following table summarizes matters since version 0.89c, which was
|
||||
the first widely used release:
|
||||
|
||||
source png.h png.h shared-lib
|
||||
version string int version
|
||||
------- ------ ----- ----------
|
||||
0.89c ("1.0 beta 3") 0.89 89 1.0.89
|
||||
0.90 ("1.0 beta 4") 0.90 90 0.90 [should have been 2.0.90]
|
||||
0.95 ("1.0 beta 5") 0.95 95 0.95 [should have been 2.0.95]
|
||||
0.96 ("1.0 beta 6") 0.96 96 0.96 [should have been 2.0.96]
|
||||
0.97b ("1.00.97 beta 7") 1.00.97 97 1.0.1 [should have been 2.0.97]
|
||||
0.97c 0.97 97 2.0.97
|
||||
0.98 0.98 98 2.0.98
|
||||
0.99 0.99 98 2.0.99
|
||||
0.99a-m 0.99 99 2.0.99
|
||||
1.00 1.00 100 2.1.0 [100 should be 10000]
|
||||
1.0.0 1.0.0 100 2.1.0 [100 should be 10000]
|
||||
1.0.1 1.0.1 10001 2.1.0
|
||||
1.0.1a-e 1.0.1a-e 10002 2.1.0.1a-e
|
||||
1.0.2 1.0.2 10002 2.1.0.2
|
||||
1.0.2a-b 1.0.2a-b 10003 2.1.0.2a-b
|
||||
1.0.3 1.0.3 10003 2.1.0.3
|
||||
1.0.3a-d 1.0.3a-d 10004 2.1.0.3a-d
|
||||
1.0.4 1.0.4 10004 2.1.0.4
|
||||
1.0.4a-f 1.0.4a-f 10005 2.1.0.4a-f
|
||||
1.0.5 (+ 2 patches) 1.0.5 10005 2.1.0.5
|
||||
1.0.5a-d 1.0.5a-d 10006 2.1.0.5a-d
|
||||
1.0.5e-r 1.0.5e-r 10100 2.1.0.5e-r (not compatible)
|
||||
1.0.5s-v 1.0.5s-v 10006 2.1.0.5s-v (compatible)
|
||||
1.0.6 (+ 3 patches) 1.0.6 10006 2.1.0.6
|
||||
1.0.6d 1.0.6d 10007 2.1.0.6d
|
||||
1.0.7 1.0.7 10007 2.1.0.7 (still compatible)
|
||||
source png.h png.h shared-lib
|
||||
version string int version
|
||||
------- ------ ----- ----------
|
||||
0.89c ("beta 3") 0.89 89 1.0.89
|
||||
0.90 ("beta 4") 0.90 90 0.90
|
||||
0.95 ("beta 5") 0.95 95 0.95
|
||||
0.96 ("beta 6") 0.96 96 0.96
|
||||
0.97b ("beta 7") 1.00.97 97 1.0.1
|
||||
0.97c 0.97 97 2.0.97
|
||||
0.98 0.98 98 2.0.98
|
||||
0.99 0.99 98 2.0.99
|
||||
0.99a-m 0.99 99 2.0.99
|
||||
1.00 1.00 100 2.1.0
|
||||
1.0.0 1.0.0 100 2.1.0
|
||||
1.0.0 (from here on, the 100 2.1.0
|
||||
1.0.1 png.h string is 10001 2.1.0
|
||||
1.0.1a-e identical to the 10002 from here on, the
|
||||
1.0.2 source version) 10002 shared library is 2.V
|
||||
1.0.2a-b 10003 where V is the source
|
||||
1.0.1 10001 code version except as
|
||||
1.0.1a-e 10002 2.1.0.1a-e noted.
|
||||
1.0.2 10002 2.1.0.2
|
||||
1.0.2a-b 10003 2.1.0.2a-b
|
||||
1.0.3 10003 2.1.0.3
|
||||
1.0.3a-d 10004 2.1.0.3a-d
|
||||
1.0.4 10004 2.1.0.4
|
||||
1.0.4a-f 10005 2.1.0.4a-f
|
||||
1.0.5 (+ 2 patches) 10005 2.1.0.5
|
||||
1.0.5a-d 10006 2.1.0.5a-d
|
||||
1.0.5e-r 10100 2.1.0.5e-r
|
||||
1.0.5s-v 10006 2.1.0.5s-v
|
||||
1.0.6 (+ 3 patches) 10006 2.1.0.6
|
||||
1.0.6d-g 10007 2.1.0.6d-g
|
||||
1.0.6h 10007 10.6h
|
||||
1.0.6i 10007 10.6i
|
||||
1.0.6j 10007 2.1.0.6j
|
||||
1.0.7beta11-14 DLLNUM 10007 2.1.0.7beta11-14
|
||||
1.0.7beta15-18 1 10007 2.1.0.7beta15-18
|
||||
1.0.7rc1-2 1 10007 2.1.0.7rc1-2
|
||||
1.0.7 1 10007 2.1.0.7
|
||||
1.0.8beta1-4 1 10008 2.1.0.8beta1-4
|
||||
1.0.8rc1 1 10008 2.1.0.8rc1
|
||||
1.0.8 1 10008 2.1.0.8
|
||||
1.0.9beta1-6 1 10009 2.1.0.9beta1-6
|
||||
1.0.9rc1 1 10009 2.1.0.9rc1
|
||||
1.0.9beta7-10 1 10009 2.1.0.9beta7-10
|
||||
1.0.9rc2 1 10009 2.1.0.9rc2
|
||||
1.0.9 1 10009 2.1.0.9
|
||||
1.0.10beta1 1 10010 2.1.0.10beta1
|
||||
1.0.10rc1 1 10010 2.1.0.10rc1
|
||||
1.0.10 1 10010 2.1.0.10
|
||||
1.0.11beta1-3 1 10011 2.1.0.11beta1-3
|
||||
|
||||
Henceforth the source version will match the shared-library minor
|
||||
and patch numbers; the shared-library major version number will be
|
||||
used for changes in backward compatibility, as it is intended. The
|
||||
PNG_PNGLIB_VER macro, which is not used within libpng but is available
|
||||
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
|
||||
are given the previous public release number plus a letter or two.
|
||||
Henceforth the source version will match the shared-library minor
|
||||
and patch numbers; the shared-library major version number will be
|
||||
used for changes in backward compatibility, as it is intended. The
|
||||
PNG_PNGLIB_VER macro, which is not used within libpng but is available
|
||||
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
|
||||
were given the previous public release number plus a letter, until
|
||||
version 1.0.6j; from then on they were given the upcoming public
|
||||
release number plus "betaNN" or "rcN".
|
||||
|
||||
.SH "SEE ALSO"
|
||||
libpngpf(3), png(5)
|
||||
@@ -3588,7 +3637,7 @@ possible without all of you.
|
||||
|
||||
Thanks to Frank J. T. Wojcik for helping with the documentation.
|
||||
|
||||
Libpng version 1.0.9beta8 - January 12, 2001:
|
||||
Libpng version 1.0.11beta3 - April 15, 2001:
|
||||
Initially created in 1995 by Guy Eric Schalnat, then of Group 42, Inc.
|
||||
Currently maintained by Glenn Randers-Pehrson (randeg@alum.rpi.edu).
|
||||
|
||||
@@ -3605,8 +3654,8 @@ included in the libpng distribution, the latter shall prevail.)
|
||||
If you modify libpng you may insert additional notices immediately following
|
||||
this sentence.
|
||||
|
||||
libpng versions 1.0.7, July 1, 2000, through 1.0.9beta8, January 12, 2001, are
|
||||
Copyright (c) 2000 Glenn Randers-Pehrson, and are
|
||||
libpng versions 1.0.7, July 1, 2000, through 1.0.11beta3, April 15, 2001, are
|
||||
Copyright (c) 2000-2001 Glenn Randers-Pehrson, 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
|
||||
|
||||
@@ -3616,12 +3665,13 @@ with the following individuals added to the list of Contributing Authors
|
||||
|
||||
and with the following additions to the disclaimer:
|
||||
|
||||
There is no warranty against interference with your enjoyment of the
|
||||
library or against infringement. There is no warranty that our
|
||||
efforts or the library will fulfill any of your particular purposes
|
||||
or needs. This library is provided with all faults, and the entire
|
||||
risk of satisfactory quality, performance, accuracy, and effort is with
|
||||
the user.
|
||||
There is no warranty against interference with your
|
||||
enjoyment of the library or against infringement.
|
||||
There is no warranty that our efforts or the library
|
||||
will fulfill any of your particular purposes or needs.
|
||||
This library is provided with all faults, and the entire
|
||||
risk of satisfactory quality, performance, accuracy, and
|
||||
effort is with the user.
|
||||
|
||||
libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
|
||||
Copyright (c) 1998, 1999 Glenn Randers-Pehrson
|
||||
@@ -3670,11 +3720,11 @@ to the following restrictions:
|
||||
|
||||
1. The origin of this source code must not be misrepresented.
|
||||
|
||||
2. Altered versions must be plainly marked as such and must not
|
||||
be misrepresented as being the original source.
|
||||
2. Altered versions must be plainly marked as such and
|
||||
must not be misrepresented as being the original source.
|
||||
|
||||
3. This Copyright notice may not be removed or altered from any
|
||||
source or altered source distribution.
|
||||
3. This Copyright notice may not be removed or altered from
|
||||
any source or altered source distribution.
|
||||
|
||||
The Contributing Authors and Group 42, Inc. specifically permit, without
|
||||
fee, and encourage the use of this source code as a component to
|
||||
@@ -3696,7 +3746,7 @@ certification mark of the Open Source Initiative.
|
||||
|
||||
Glenn Randers-Pehrson
|
||||
randeg@alum.rpi.edu
|
||||
January 12, 2001
|
||||
April 15, 2001
|
||||
|
||||
.\" end of man page
|
||||
|
||||
|
||||
236
libpng.txt
236
libpng.txt
@@ -1,6 +1,6 @@
|
||||
libpng.txt - A description on how to use and modify libpng
|
||||
|
||||
libpng version 1.0.9beta8 - January 12, 2001
|
||||
libpng version 1.0.11beta3 - April 15, 2001
|
||||
Updated and distributed by Glenn Randers-Pehrson
|
||||
<randeg@alum.rpi.edu>
|
||||
Copyright (c) 1998, 1999, 2000 Glenn Randers-Pehrson
|
||||
@@ -257,10 +257,11 @@ input stream. You must supply the function
|
||||
png_byte name[5];
|
||||
png_byte *data;
|
||||
png_size_t size;
|
||||
/* Note that libpng has already taken care of the
|
||||
CRC handling */
|
||||
/* Note that libpng has already taken care of
|
||||
the CRC handling */
|
||||
|
||||
/* put your code here. Return one of the following: */
|
||||
/* put your code here. Return one of the
|
||||
following: */
|
||||
|
||||
return (-n); /* chunk had an error */
|
||||
return (0); /* did not recognize */
|
||||
@@ -331,16 +332,23 @@ the entire image into memory, and (b) the input transformations
|
||||
you want to do are limited to the following set:
|
||||
|
||||
PNG_TRANSFORM_IDENTITY No transformation
|
||||
PNG_TRANSFORM_STRIP_16 Strip 16-bit samples to 8 bits
|
||||
PNG_TRANSFORM_STRIP_16 Strip 16-bit samples to
|
||||
8 bits
|
||||
PNG_TRANSFORM_STRIP_ALPHA Discard the alpha channel
|
||||
PNG_TRANSFORM_PACKING Expand 1, 2 and 4-bit samples to bytes
|
||||
PNG_TRANSFORM_PACKSWAP Change order of packed pixels to LSB first
|
||||
PNG_TRANSFORM_PACKING Expand 1, 2 and 4-bit
|
||||
samples to bytes
|
||||
PNG_TRANSFORM_PACKSWAP Change order of packed
|
||||
pixels to LSB first
|
||||
PNG_TRANSFORM_EXPAND Perform set_expand()
|
||||
PNG_TRANSFORM_INVERT_MONO Invert monochrome images
|
||||
PNG_TRANSFORM_SHIFT Normalize pixels to the sBIT depth
|
||||
PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA to BGRA
|
||||
PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA to AG
|
||||
PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity to transparency
|
||||
PNG_TRANSFORM_SHIFT Normalize pixels to the
|
||||
sBIT depth
|
||||
PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA
|
||||
to BGRA
|
||||
PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA
|
||||
to AG
|
||||
PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity
|
||||
to transparency
|
||||
PNG_TRANSFORM_SWAP_ENDIAN Byte-swap 16-bit samples
|
||||
|
||||
(This excludes setting a background color, doing gamma transformation,
|
||||
@@ -368,9 +376,11 @@ where row_pointers is an array of pointers to the pixel data for each row:
|
||||
If you know your image size and pixel size ahead of time, you can allocate
|
||||
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++)
|
||||
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);
|
||||
|
||||
Alternatively you could allocate your image in one big block and define
|
||||
@@ -438,8 +448,8 @@ in until png_read_end() has read the chunk data following the image.
|
||||
interlace_type - (PNG_INTERLACE_NONE or
|
||||
PNG_INTERLACE_ADAM7)
|
||||
Any or all of interlace_type, compression_type, of
|
||||
filter_method can be NULL if you are
|
||||
not interested in their values.
|
||||
filter_method can be NULL if you are
|
||||
not interested in their values.
|
||||
|
||||
channels = png_get_channels(png_ptr, info_ptr);
|
||||
channels - number of channels of info for the
|
||||
@@ -502,14 +512,15 @@ into the info_ptr is returned for any complex types.
|
||||
implies specific values of gAMA and
|
||||
cHRM.
|
||||
|
||||
png_get_iCCP(png_ptr, info_ptr, &name, &compression_type,
|
||||
&profile, &proflen);
|
||||
png_get_iCCP(png_ptr, info_ptr, &name,
|
||||
&compression_type, &profile, &proflen);
|
||||
name - The profile name.
|
||||
compression - The compression type; always PNG_COMPRESSION_TYPE_BASE
|
||||
for PNG 1.0. You may give NULL to this argument
|
||||
to ignore it.
|
||||
profile - International Color Consortium color profile
|
||||
data. May contain NULs.
|
||||
compression - The compression type; always
|
||||
PNG_COMPRESSION_TYPE_BASE for PNG 1.0.
|
||||
You may give NULL to this argument to
|
||||
ignore it.
|
||||
profile - International Color Consortium color
|
||||
profile data. May contain NULs.
|
||||
proflen - length of profile data in bytes.
|
||||
|
||||
png_get_sBIT(png_ptr, info_ptr, &sig_bit);
|
||||
@@ -565,21 +576,24 @@ into the info_ptr is returned for any complex types.
|
||||
string for unknown).
|
||||
text_ptr[i].translated_keyword - keyword in UTF-8
|
||||
(empty string for unknown).
|
||||
num_text - number of comments (same as num_comments;
|
||||
you can put NULL here to avoid the duplication)
|
||||
Note while png_set_text() will accept text, language, and
|
||||
translated keywords that can be NULL pointers, the structure
|
||||
returned by png_get_text will always contain regular
|
||||
zero-terminated C strings. They might be empty strings but
|
||||
they will never be NULL pointers.
|
||||
num_text - number of comments (same as
|
||||
num_comments; you can put NULL here
|
||||
to avoid the duplication)
|
||||
Note while png_set_text() will accept text, language,
|
||||
and translated keywords that can be NULL pointers, the
|
||||
structure returned by png_get_text will always contain
|
||||
regular zero-terminated C strings. They might be
|
||||
empty strings but they will never be NULL pointers.
|
||||
|
||||
num_spalettes = png_get_sPLT(png_ptr, info_ptr, &palette_ptr);
|
||||
num_spalettes = png_get_sPLT(png_ptr, info_ptr,
|
||||
&palette_ptr);
|
||||
palette_ptr - array of palette structures holding
|
||||
contents of one or more sPLT chunks read.
|
||||
contents of one or more sPLT chunks
|
||||
read.
|
||||
num_spalettes - number of sPLT chunks read.
|
||||
|
||||
png_get_oFFs(png_ptr, info_ptr, &offset_x, &offset_y,
|
||||
&unit_type);
|
||||
&unit_type);
|
||||
offset_x - positive offset from the left edge
|
||||
of the screen
|
||||
offset_y - positive offset from the top edge
|
||||
@@ -587,7 +601,7 @@ into the info_ptr is returned for any complex types.
|
||||
unit_type - PNG_OFFSET_PIXEL, PNG_OFFSET_MICROMETER
|
||||
|
||||
png_get_pHYs(png_ptr, info_ptr, &res_x, &res_y,
|
||||
&unit_type);
|
||||
&unit_type);
|
||||
res_x - pixels/unit physical resolution in
|
||||
x direction
|
||||
res_y - pixels/unit physical resolution in
|
||||
@@ -595,47 +609,50 @@ into the info_ptr is returned for any complex types.
|
||||
unit_type - PNG_RESOLUTION_UNKNOWN,
|
||||
PNG_RESOLUTION_METER
|
||||
|
||||
png_get_sCAL(png_ptr, info_ptr, &unit, &width, &height)
|
||||
png_get_sCAL(png_ptr, info_ptr, &unit, &width,
|
||||
&height)
|
||||
unit - physical scale units (an integer)
|
||||
width - width of a pixel in physical scale units
|
||||
height - height of a pixel in physical scale units
|
||||
(width and height are doubles)
|
||||
|
||||
png_get_sCAL_s(png_ptr, info_ptr, &unit, &width, &height)
|
||||
png_get_sCAL_s(png_ptr, info_ptr, &unit, &width,
|
||||
&height)
|
||||
unit - physical scale units (an integer)
|
||||
width - width of a pixel in physical scale units
|
||||
height - height of a pixel in physical scale units
|
||||
(width and height are strings like "2.54")
|
||||
|
||||
num_unknown_chunks = png_get_unknown_chunks(png_ptr, info_ptr,
|
||||
&unknowns)
|
||||
unknowns - array of png_unknown_chunk structures holding
|
||||
unknown chunks
|
||||
num_unknown_chunks = png_get_unknown_chunks(png_ptr,
|
||||
info_ptr, &unknowns)
|
||||
unknowns - array of png_unknown_chunk
|
||||
structures holding unknown chunks
|
||||
unknowns[i].name - name of unknown chunk
|
||||
unknowns[i].data - data of unknown chunk
|
||||
unknowns[i].size - size of unknown chunk's data
|
||||
unknowns[i].location - position of chunk in file
|
||||
|
||||
The value of "i" corresponds to the order in which the chunks were read
|
||||
from the PNG file or inserted with the png_set_unknown_chunks() function.
|
||||
The value of "i" corresponds to the order in which the
|
||||
chunks were read from the PNG file or inserted with the
|
||||
png_set_unknown_chunks() function.
|
||||
|
||||
The data from the pHYs chunk can be retrieved in several convenient
|
||||
forms:
|
||||
|
||||
res_x = png_get_x_pixels_per_meter(png_ptr,
|
||||
info_ptr)
|
||||
info_ptr)
|
||||
res_y = png_get_y_pixels_per_meter(png_ptr,
|
||||
info_ptr)
|
||||
info_ptr)
|
||||
res_x_and_y = png_get_pixels_per_meter(png_ptr,
|
||||
info_ptr)
|
||||
info_ptr)
|
||||
res_x = png_get_x_pixels_per_inch(png_ptr,
|
||||
info_ptr)
|
||||
info_ptr)
|
||||
res_y = png_get_y_pixels_per_inch(png_ptr,
|
||||
info_ptr)
|
||||
info_ptr)
|
||||
res_x_and_y = png_get_pixels_per_inch(png_ptr,
|
||||
info_ptr)
|
||||
info_ptr)
|
||||
aspect_ratio = png_get_pixel_aspect_ratio(png_ptr,
|
||||
info_ptr)
|
||||
info_ptr)
|
||||
|
||||
(Each of these returns 0 [signifying "unknown"] if
|
||||
the data is not present or if res_x is 0;
|
||||
@@ -650,8 +667,8 @@ forms:
|
||||
y_offset = png_get_y_offset_inches(png_ptr, info_ptr);
|
||||
|
||||
(Each of these returns 0 [signifying "unknown" if both
|
||||
x and y are 0] if the data is not present or if the chunk
|
||||
is present but the unit is the pixel)
|
||||
x and y are 0] if the data is not present or if the
|
||||
chunk is present but the unit is the pixel)
|
||||
|
||||
For more information, see the png_info definition in png.h and the
|
||||
PNG specification for chunk contents. Be careful with trusting
|
||||
@@ -1185,7 +1202,7 @@ When you are done, you can free all memory allocated by libpng like this:
|
||||
It is also possible to individually free the info_ptr members that
|
||||
point to libpng-allocated storage with the following function:
|
||||
|
||||
png_free_data(png_ptr, info_ptr, mask, n)
|
||||
png_free_data(png_ptr, info_ptr, mask, seq)
|
||||
mask - identifies data to be freed, a mask
|
||||
containing the logical OR of one or
|
||||
more of
|
||||
@@ -1195,16 +1212,17 @@ point to libpng-allocated storage with the following function:
|
||||
PNG_FREE_SCAL, PNG_FREE_SPLT,
|
||||
PNG_FREE_TEXT, PNG_FREE_UNKN,
|
||||
or simply PNG_FREE_ALL
|
||||
n - sequence number of item to be freed
|
||||
seq - sequence number of item to be freed
|
||||
(-1 for all items)
|
||||
|
||||
This function may be safely called when the relevant storage has
|
||||
already been freed, or has not yet been allocated, or was allocated
|
||||
by the user and not by libpng, and will in those
|
||||
cases do nothing. The "n" parameter is ignored if only one item
|
||||
of the selected data type, such as PLTE, is allowed. If "n" is not
|
||||
cases do nothing. The "seq" parameter is ignored if only one item
|
||||
of the selected data type, such as PLTE, is allowed. If "seq" is not
|
||||
-1, and multiple items are allowed for the data type identified in
|
||||
the mask, such as text or sPLT, only the n'th item is freed.
|
||||
the mask, such as text or sPLT, only the n'th item in the structure
|
||||
is freed, where n is "seq".
|
||||
|
||||
The default behavior is only to free data that was allocated internally
|
||||
by libpng. This can be changed, so that libpng will not free the data,
|
||||
@@ -1377,9 +1395,10 @@ png_infop info_ptr;
|
||||
|
||||
/* This function is called when each row of image
|
||||
data is complete */
|
||||
|
||||
void
|
||||
row_callback(png_structp png_ptr, png_bytep new_row,
|
||||
png_uint_32 row_num, int pass)
|
||||
png_uint_32 row_num, int pass)
|
||||
{
|
||||
/* If the image is interlaced, and you turned
|
||||
on the interlace handler, this function will
|
||||
@@ -1523,7 +1542,8 @@ called after each row has been written, which you can use to control
|
||||
a progress meter or the like. It's demonstrated in pngtest.c.
|
||||
You must supply a function
|
||||
|
||||
void write_row_callback(png_ptr, png_uint_32 row, int pass);
|
||||
void write_row_callback(png_ptr, png_uint_32 row,
|
||||
int pass);
|
||||
{
|
||||
/* put your code here */
|
||||
}
|
||||
@@ -1551,8 +1571,9 @@ types.
|
||||
|
||||
|
||||
/* turn on or off filtering, and/or choose
|
||||
specific filters. You can use either a single PNG_FILTER_VALUE_NAME
|
||||
or the logical OR of one or more PNG_FILTER_NAME masks. */
|
||||
specific filters. You can use either a single
|
||||
PNG_FILTER_VALUE_NAME or the logical OR of one
|
||||
or more PNG_FILTER_NAME masks. */
|
||||
png_set_filter(png_ptr, 0,
|
||||
PNG_FILTER_NONE | PNG_FILTER_VALUE_NONE |
|
||||
PNG_FILTER_SUB | PNG_FILTER_VALUE_SUB |
|
||||
@@ -1688,11 +1709,12 @@ Some of the more important parts of the png_info are:
|
||||
png_set_iCCP(png_ptr, info_ptr, name, compression_type,
|
||||
profile, proflen);
|
||||
name - The profile name.
|
||||
compression - The compression type; always PNG_COMPRESSION_TYPE_BASE
|
||||
for PNG 1.0. You may give NULL to this argument
|
||||
to ignore it.
|
||||
profile - International Color Consortium color profile
|
||||
data. May contain NULs.
|
||||
compression - The compression type; always
|
||||
PNG_COMPRESSION_TYPE_BASE for PNG 1.0.
|
||||
You may give NULL to this argument to
|
||||
ignore it.
|
||||
profile - International Color Consortium color
|
||||
profile data. May contain NULs.
|
||||
proflen - length of profile data in bytes.
|
||||
|
||||
png_set_sBIT(png_ptr, info_ptr, sig_bit);
|
||||
@@ -1746,11 +1768,13 @@ Some of the more important parts of the png_info are:
|
||||
or empty for unknown).
|
||||
num_text - number of comments
|
||||
|
||||
png_set_sPLT(png_ptr, info_ptr, &palette_ptr, num_spalettes);
|
||||
palette_ptr - array of png_sPLT_struct structures to be
|
||||
added to the list of palettes in the info
|
||||
structure.
|
||||
num_spalettes - number of palette structures to be added.
|
||||
png_set_sPLT(png_ptr, info_ptr, &palette_ptr,
|
||||
num_spalettes);
|
||||
palette_ptr - array of png_sPLT_struct structures
|
||||
to be added to the list of palettes
|
||||
in the info structure.
|
||||
num_spalettes - number of palette structures to be
|
||||
added.
|
||||
|
||||
png_set_oFFs(png_ptr, info_ptr, offset_x, offset_y,
|
||||
unit_type);
|
||||
@@ -1781,9 +1805,10 @@ Some of the more important parts of the png_info are:
|
||||
height - height of a pixel in physical scale units
|
||||
(width and height are strings like "2.54")
|
||||
|
||||
png_set_unknown_chunks(png_ptr, info_ptr, &unknowns, num_unknowns)
|
||||
unknowns - array of png_unknown_chunk structures holding
|
||||
unknown chunks
|
||||
png_set_unknown_chunks(png_ptr, info_ptr, &unknowns,
|
||||
num_unknowns)
|
||||
unknowns - array of png_unknown_chunk
|
||||
structures holding unknown chunks
|
||||
unknowns[i].name - name of unknown chunk
|
||||
unknowns[i].data - data of unknown chunk
|
||||
unknowns[i].size - size of unknown chunk's data
|
||||
@@ -1792,14 +1817,15 @@ Some of the more important parts of the png_info are:
|
||||
PNG_HAVE_IHDR: before PLTE
|
||||
PNG_HAVE_PLTE: before IDAT
|
||||
PNG_AFTER_IDAT: after IDAT
|
||||
The "location" member is set automatically according to
|
||||
what part of the output file has already been written.
|
||||
You can change its value after calling png_set_unknown_chunks()
|
||||
as demonstrated in pngtest.c. Within each of the "locations",
|
||||
the chunks are sequenced according to their position in the
|
||||
structure (that is, the value of "i", which is the order in which
|
||||
the chunk was either read from the input file or defined with
|
||||
png_set_unknown_chunks).
|
||||
|
||||
The "location" member is set automatically according to
|
||||
what part of the output file has already been written.
|
||||
You can change its value after calling png_set_unknown_chunks()
|
||||
as demonstrated in pngtest.c. Within each of the "locations",
|
||||
the chunks are sequenced according to their position in the
|
||||
structure (that is, the value of "i", which is the order in which
|
||||
the chunk was either read from the input file or defined with
|
||||
png_set_unknown_chunks).
|
||||
|
||||
A quick word about text and num_text. text is an array of png_text
|
||||
structures. num_text is the number of valid structures in the array.
|
||||
@@ -1900,12 +1926,17 @@ transformations are permitted, enabled by the following masks.
|
||||
|
||||
PNG_TRANSFORM_IDENTITY No transformation
|
||||
PNG_TRANSFORM_PACKING Pack 1, 2 and 4-bit samples
|
||||
PNG_TRANSFORM_PACKSWAP Change order of packed pixels to LSB first
|
||||
PNG_TRANSFORM_PACKSWAP Change order of packed
|
||||
pixels to LSB first
|
||||
PNG_TRANSFORM_INVERT_MONO Invert monochrome images
|
||||
PNG_TRANSFORM_SHIFT Normalize pixels to the sBIT depth
|
||||
PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA to BGRA
|
||||
PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA to AG
|
||||
PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity to transparency
|
||||
PNG_TRANSFORM_SHIFT Normalize pixels to the
|
||||
sBIT depth
|
||||
PNG_TRANSFORM_BGR Flip RGB to BGR, RGBA
|
||||
to BGRA
|
||||
PNG_TRANSFORM_SWAP_ALPHA Flip RGBA to ARGB or GA
|
||||
to AG
|
||||
PNG_TRANSFORM_INVERT_ALPHA Change alpha from opacity
|
||||
to transparency
|
||||
PNG_TRANSFORM_SWAP_ENDIAN Byte-swap 16-bit samples
|
||||
PNG_TRANSFORM_STRIP_FILLER Strip out filler bytes.
|
||||
|
||||
@@ -2169,7 +2200,7 @@ When you are done, you can free all memory used by libpng like this:
|
||||
It is also possible to individually free the info_ptr members that
|
||||
point to libpng-allocated storage with the following function:
|
||||
|
||||
png_free_data(png_ptr, info_ptr, mask, n)
|
||||
png_free_data(png_ptr, info_ptr, mask, seq)
|
||||
mask - identifies data to be freed, a mask
|
||||
containing the logical OR of one or
|
||||
more of
|
||||
@@ -2179,16 +2210,17 @@ point to libpng-allocated storage with the following function:
|
||||
PNG_FREE_SCAL, PNG_FREE_SPLT,
|
||||
PNG_FREE_TEXT, PNG_FREE_UNKN,
|
||||
or simply PNG_FREE_ALL
|
||||
n - sequence number of item to be freed
|
||||
seq - sequence number of item to be freed
|
||||
(-1 for all items)
|
||||
|
||||
This function may be safely called when the relevant storage has
|
||||
already been freed, or has not yet been allocated, or was allocated
|
||||
by the user and not by libpng, and will in those
|
||||
cases do nothing. The "n" parameter is ignored if only one item
|
||||
of the selected data type, such as PLTE, is allowed. If "n" is not
|
||||
cases do nothing. The "seq" parameter is ignored if only one item
|
||||
of the selected data type, such as PLTE, is allowed. If "seq" is not
|
||||
-1, and multiple items are allowed for the data type identified in
|
||||
the mask, such as text or sPLT, only the n'th item is freed.
|
||||
the mask, such as text or sPLT, only the n'th item in the structure
|
||||
is freed, where n is "seq".
|
||||
|
||||
If you allocated data such as a palette that you passed
|
||||
in to libpng with png_set_*, you must not free it until just before the call to
|
||||
@@ -2269,8 +2301,8 @@ memory allocation on a platform will change between applications, these
|
||||
functions must be modified in the library at compile time. If you prefer
|
||||
to use a different method of allocating and freeing data, you can use
|
||||
|
||||
png_set_mem_fn(png_structp png_ptr, png_voidp mem_ptr, png_malloc_ptr
|
||||
malloc_fn, png_free_ptr free_fn)
|
||||
png_set_mem_fn(png_structp png_ptr, png_voidp mem_ptr,
|
||||
png_malloc_ptr malloc_fn, png_free_ptr free_fn)
|
||||
|
||||
This function also provides a void pointer that can be retrieved via
|
||||
|
||||
@@ -2278,7 +2310,8 @@ This function also provides a void pointer that can be retrieved via
|
||||
|
||||
Your replacement memory functions must have prototypes as follows:
|
||||
|
||||
png_voidp malloc_fn(png_structp png_ptr, png_uint_32 size);
|
||||
png_voidp malloc_fn(png_structp png_ptr,
|
||||
png_uint_32 size);
|
||||
void free_fn(png_structp png_ptr, png_voidp ptr);
|
||||
|
||||
Input/Output in libpng is done through png_read() and png_write(),
|
||||
@@ -2490,10 +2523,12 @@ structures appropriately for all of the filter types.
|
||||
|
||||
png_set_filter(png_ptr, PNG_FILTER_TYPE_BASE,
|
||||
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().
|
||||
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
|
||||
available filters. This is done in two ways - by telling it how
|
||||
@@ -2682,13 +2717,13 @@ application:
|
||||
|
||||
VIII. Y2K Compliance in libpng
|
||||
|
||||
January 12, 2001
|
||||
April 15, 2001
|
||||
|
||||
Since the PNG Development group is an ad-hoc body, we can't make
|
||||
an official declaration.
|
||||
|
||||
This is your unofficial assurance that libpng from version 0.71 and
|
||||
upward through 1.0.9beta8 are Y2K compliant. It is my belief that earlier
|
||||
upward through 1.0.11beta3 are Y2K compliant. It is my belief that earlier
|
||||
versions were also Y2K compliant.
|
||||
|
||||
Libpng only has three year fields. One is a 2-byte unsigned integer that
|
||||
@@ -2706,7 +2741,8 @@ There are seven time-related functions:
|
||||
|
||||
png_convert_to_rfc_1123() in png.c
|
||||
(formerly png_convert_to_rfc_1152() in error)
|
||||
png_convert_from_struct_tm() in pngwrite.c, called in pngwrite.c
|
||||
png_convert_from_struct_tm() in pngwrite.c, called
|
||||
in pngwrite.c
|
||||
png_convert_from_time_t() in pngwrite.c
|
||||
png_get_tIME() in pngget.c
|
||||
png_handle_tIME() in pngrutil.c, called in pngread.c
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
.TH LIBPNGPF 3 "January 12, 2001"
|
||||
.TH LIBPNGPF 3 "April 15, 2001"
|
||||
.SH NAME
|
||||
libpng \- Portable Network Graphics (PNG) Reference Library 1.0.9beta8
|
||||
libpng \- Portable Network Graphics (PNG) Reference Library 1.0.11beta3
|
||||
(private functions)
|
||||
.SH SYNOPSIS
|
||||
\fB#include <png.h>\fP
|
||||
|
||||
2
png.5
2
png.5
@@ -1,4 +1,4 @@
|
||||
.TH PNG 5 "January 12, 2001"
|
||||
.TH PNG 5 "April 15, 2001"
|
||||
.SH NAME
|
||||
png \- Portable Network Graphics (PNG) format
|
||||
.SH DESCRIPTION
|
||||
|
||||
92
png.c
92
png.c
@@ -1,8 +1,8 @@
|
||||
|
||||
/* png.c - location for general purpose libpng functions
|
||||
*
|
||||
* libpng version 1.0.9beta8 - January 12, 2001
|
||||
* Copyright (c) 1998, 1999, 2000, 2001 Glenn Randers-Pehrson
|
||||
* libpng version 1.0.11beta3 - April 15, 2001
|
||||
* Copyright (c) 1998-2001 Glenn Randers-Pehrson
|
||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||
*
|
||||
@@ -13,14 +13,14 @@
|
||||
#include "png.h"
|
||||
|
||||
/* Generate a compiler error if there is an old png.h in the search path. */
|
||||
typedef version_1_0_9beta8 Your_png_h_is_not_version_1_0_9beta8;
|
||||
typedef version_1_0_11beta3 Your_png_h_is_not_version_1_0_11beta3;
|
||||
|
||||
/* Version information for C files. This had better match the version
|
||||
* string defined in png.h. */
|
||||
|
||||
#ifdef PNG_USE_GLOBAL_ARRAYS
|
||||
/* png_libpng_ver was changed to a function in version 1.0.5c */
|
||||
const char png_libpng_ver[18] = "1.0.9beta8";
|
||||
const char png_libpng_ver[18] = "1.0.11beta3";
|
||||
|
||||
/* png_sig was changed to a function in version 1.0.5c */
|
||||
/* Place to hold the signature string for a PNG file. */
|
||||
@@ -135,29 +135,32 @@ png_check_sig(png_bytep sig, int num)
|
||||
}
|
||||
|
||||
/* Function to allocate memory for zlib and clear it to 0. */
|
||||
voidpf PNGAPI
|
||||
voidpf /* PRIVATE */
|
||||
png_zalloc(voidpf png_ptr, uInt items, uInt size)
|
||||
{
|
||||
png_uint_32 num_bytes = (png_uint_32)items * size;
|
||||
png_voidp ptr = (png_voidp)png_malloc((png_structp)png_ptr, num_bytes);
|
||||
|
||||
#ifndef PNG_NO_ZALLOC_ZERO
|
||||
if (num_bytes > (png_uint_32)0x8000L)
|
||||
if (ptr)
|
||||
{
|
||||
png_memset(ptr, 0, (png_size_t)0x8000L);
|
||||
png_memset((png_bytep)ptr + (png_size_t)0x8000L, 0,
|
||||
(png_size_t)(num_bytes - (png_uint_32)0x8000L));
|
||||
}
|
||||
else
|
||||
{
|
||||
png_memset(ptr, 0, (png_size_t)num_bytes);
|
||||
if (num_bytes > (png_uint_32)0x8000L)
|
||||
{
|
||||
png_memset(ptr, 0, (png_size_t)0x8000L);
|
||||
png_memset((png_bytep)ptr + (png_size_t)0x8000L, 0,
|
||||
(png_size_t)(num_bytes - (png_uint_32)0x8000L));
|
||||
}
|
||||
else
|
||||
{
|
||||
png_memset(ptr, 0, (png_size_t)num_bytes);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return ((voidpf)ptr);
|
||||
}
|
||||
|
||||
/* function to free memory for zlib */
|
||||
void PNGAPI
|
||||
void /* PRIVATE */
|
||||
png_zfree(voidpf png_ptr, voidpf ptr)
|
||||
{
|
||||
png_free((png_structp)png_ptr, (png_voidp)ptr);
|
||||
@@ -255,7 +258,7 @@ png_destroy_info_struct(png_structp png_ptr, png_infopp info_ptr_ptr)
|
||||
* and applications using it are urged to use png_create_info_struct()
|
||||
* instead.
|
||||
*/
|
||||
void PNGAPI
|
||||
void /* PRIVATE */
|
||||
png_info_init(png_infop info_ptr)
|
||||
{
|
||||
png_debug(1, "in png_info_init\n");
|
||||
@@ -581,34 +584,39 @@ png_convert_to_rfc1123(png_structp png_ptr, png_timep ptime)
|
||||
sizeof(char)));
|
||||
}
|
||||
|
||||
if (png_ptr->time_buffer == NULL)
|
||||
png_warning(png_ptr, "Malloc of buffer for tIME chunk failed");
|
||||
else
|
||||
{
|
||||
#if defined(_WIN32_WCE)
|
||||
{
|
||||
wchar_t time_buf[29];
|
||||
wsprintf(time_buf, TEXT("%d %S %d %02d:%02d:%02d +0000"),
|
||||
ptime->day % 32, short_months[(ptime->month - 1) % 12],
|
||||
ptime->year, ptime->hour % 24, ptime->minute % 60,
|
||||
ptime->second % 61);
|
||||
WideCharToMultiByte(CP_ACP, 0, time_buf, -1, png_ptr->time_buffer, 29,
|
||||
NULL, NULL);
|
||||
}
|
||||
{
|
||||
wchar_t time_buf[29];
|
||||
wsprintf(time_buf, TEXT("%d %S %d %02d:%02d:%02d +0000"),
|
||||
ptime->day % 32, short_months[(ptime->month - 1) % 12],
|
||||
ptime->year, ptime->hour % 24, ptime->minute % 60,
|
||||
ptime->second % 61);
|
||||
WideCharToMultiByte(CP_ACP, 0, time_buf, -1, png_ptr->time_buffer, 29,
|
||||
NULL, NULL);
|
||||
}
|
||||
#else
|
||||
#ifdef USE_FAR_KEYWORD
|
||||
{
|
||||
char near_time_buf[29];
|
||||
sprintf(near_time_buf, "%d %s %d %02d:%02d:%02d +0000",
|
||||
ptime->day % 32, short_months[(ptime->month - 1) % 12],
|
||||
ptime->year, ptime->hour % 24, ptime->minute % 60,
|
||||
ptime->second % 61);
|
||||
png_memcpy(png_ptr->time_buffer, near_time_buf,
|
||||
29*sizeof(char));
|
||||
}
|
||||
{
|
||||
char near_time_buf[29];
|
||||
sprintf(near_time_buf, "%d %s %d %02d:%02d:%02d +0000",
|
||||
ptime->day % 32, short_months[(ptime->month - 1) % 12],
|
||||
ptime->year, ptime->hour % 24, ptime->minute % 60,
|
||||
ptime->second % 61);
|
||||
png_memcpy(png_ptr->time_buffer, near_time_buf,
|
||||
29*sizeof(char));
|
||||
}
|
||||
#else
|
||||
sprintf(png_ptr->time_buffer, "%d %s %d %02d:%02d:%02d +0000",
|
||||
ptime->day % 32, short_months[(ptime->month - 1) % 12],
|
||||
ptime->year, ptime->hour % 24, ptime->minute % 60,
|
||||
ptime->second % 61);
|
||||
ptime->day % 32, short_months[(ptime->month - 1) % 12],
|
||||
ptime->year, ptime->hour % 24, ptime->minute % 60,
|
||||
ptime->second % 61);
|
||||
#endif
|
||||
#endif /* _WIN32_WCE */
|
||||
}
|
||||
return ((png_charp)png_ptr->time_buffer);
|
||||
}
|
||||
#endif /* PNG_TIME_RFC1123_SUPPORTED */
|
||||
@@ -626,7 +634,7 @@ png_charp PNGAPI
|
||||
png_get_copyright(png_structp png_ptr)
|
||||
{
|
||||
if (png_ptr != NULL || png_ptr == NULL) /* silence compiler warning */
|
||||
return ((png_charp) "\n libpng version 1.0.9beta8 - January 12, 2001\n\
|
||||
return ((png_charp) "\n libpng version 1.0.11beta3 - April 15, 2001\n\
|
||||
Copyright (c) 1998-2001 Glenn Randers-Pehrson\n\
|
||||
Copyright (c) 1996, 1997 Andreas Dilger\n\
|
||||
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.\n");
|
||||
@@ -644,8 +652,8 @@ png_get_libpng_ver(png_structp png_ptr)
|
||||
{
|
||||
/* Version of *.c files used when building libpng */
|
||||
if(png_ptr != NULL) /* silence compiler warning about unused png_ptr */
|
||||
return((png_charp) "1.0.9beta8");
|
||||
return((png_charp) "1.0.9beta8");
|
||||
return((png_charp) "1.0.11beta3");
|
||||
return((png_charp) "1.0.11beta3");
|
||||
}
|
||||
|
||||
png_charp PNGAPI
|
||||
@@ -667,7 +675,7 @@ png_get_header_version(png_structp png_ptr)
|
||||
}
|
||||
|
||||
#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
|
||||
int PNGAPI
|
||||
int /* PRIVATE */
|
||||
png_handle_as_unknown(png_structp png_ptr, png_bytep chunk_name)
|
||||
{
|
||||
/* check chunk_name and return "keep" value if it's on the list, else 0 */
|
||||
@@ -695,10 +703,11 @@ png_uint_32 PNGAPI
|
||||
png_access_version_number(void)
|
||||
{
|
||||
/* Version of *.c files used when building libpng */
|
||||
return((png_uint_32) 10009L);
|
||||
return((png_uint_32) 10011L);
|
||||
}
|
||||
|
||||
|
||||
#if 0 /* delay this until version 1.2.0 */
|
||||
/* this function was added to libpng 1.0.9 (porting aid to libpng-1.2.0) */
|
||||
#ifndef PNG_ASSEMBLER_CODE_SUPPORTED
|
||||
int PNGAPI
|
||||
@@ -707,3 +716,4 @@ png_mmx_support(void)
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
#endif /* 0 */
|
||||
|
||||
139
png.h
139
png.h
@@ -1,15 +1,15 @@
|
||||
|
||||
/* png.h - header file for PNG reference library
|
||||
*
|
||||
* libpng version 1.0.9beta8 - January 12, 2001
|
||||
* Copyright (c) 1998, 1999, 2000, 2001 Glenn Randers-Pehrson
|
||||
* libpng version 1.0.11beta3 - April 15, 2001
|
||||
* Copyright (c) 1998-2001 Glenn Randers-Pehrson
|
||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||
*
|
||||
* Authors and maintainers:
|
||||
* 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.97, January 1998, through 1.0.9beta8 - January 12, 2001: Glenn
|
||||
* libpng versions 0.97, January 1998, through 1.0.11beta3 - April 15, 2001: Glenn
|
||||
* See also "Contributing Authors", below.
|
||||
*
|
||||
* Note about libpng version numbers:
|
||||
@@ -52,20 +52,27 @@
|
||||
* 1.0.6h 10007 10.6h (testing xy.z so-numbering)
|
||||
* 1.0.6i 10007 10.6i
|
||||
* 1.0.6j 10007 2.1.0.6j (incompatible with 1.0.0)
|
||||
* 1.0.7beta11-18 10007 2.1.0.7beta11-18 (binary compatible)
|
||||
* 1.0.7rc1-2 10007 2.1.0.7rc1-2 (binary compatible)
|
||||
* 1.0.7 10007 (still compatible)
|
||||
* 1.0.8beta1-4 10008 2.1.0.8beta1-4
|
||||
* 1.0.8rc1 10008 2.1.0.8rc1
|
||||
* 1.0.8 10008 2.1.0.8
|
||||
* 1.0.9beta1-6 10009 2.1.0.9beta1-6
|
||||
* 1.0.9rc1 10009 2.1.0.9rc1
|
||||
* 1.0.9beta7-8 10009 2.1.0.9beta7-8
|
||||
* 1.0.7beta11-14 DLLNUM 10007 2.1.0.7beta11-14 (binary compatible)
|
||||
* 1.0.7beta15-18 1 10007 2.1.0.7beta15-18 (binary compatible)
|
||||
* 1.0.7rc1-2 1 10007 2.1.0.7rc1-2 (binary compatible)
|
||||
* 1.0.7 1 10007 (still compatible)
|
||||
* 1.0.8beta1-4 1 10008 2.1.0.8beta1-4
|
||||
* 1.0.8rc1 1 10008 2.1.0.8rc1
|
||||
* 1.0.8 1 10008 2.1.0.8
|
||||
* 1.0.9beta1-6 1 10009 2.1.0.9beta1-6
|
||||
* 1.0.9rc1 1 10009 2.1.0.9rc1
|
||||
* 1.0.9beta7-10 1 10009 2.1.0.9beta7-10
|
||||
* 1.0.9rc2 1 10009 2.1.0.9rc2
|
||||
* 1.0.9 1 10009 2.1.0.9
|
||||
* 1.0.10beta1 1 10010 2.1.0.10beta1
|
||||
* 1.0.10rc1 1 10010 2.1.0.10rc1
|
||||
* 1.0.10 1 10010 2.1.0.10
|
||||
* 1.0.11beta1-3 1 10011 2.1.0.11beta1-3
|
||||
*
|
||||
* Henceforth the source version will match the shared-library major
|
||||
* and minor numbers; the shared-library major version number will be
|
||||
* 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
|
||||
* 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
|
||||
@@ -76,6 +83,9 @@
|
||||
* to the info_ptr or png_ptr members through png.h, and the compiled
|
||||
* application is loaded with a different version of the library.
|
||||
*
|
||||
* DLLNUM will change each time there are forward or backward changes
|
||||
* in binary compatibility (e.g., when a new feature is added).
|
||||
*
|
||||
* See libpng.txt or libpng.3 for more information. The PNG specification
|
||||
* is available as RFC 2083 <ftp://ftp.uu.net/graphics/png/documents/>
|
||||
* and as a W3C Recommendation <http://www.w3.org/TR/REC.png.html>
|
||||
@@ -87,7 +97,7 @@
|
||||
* If you modify libpng you may insert additional notices immediately following
|
||||
* this sentence.
|
||||
*
|
||||
* libpng versions 1.0.7, July 1, 2000, through 1.0.9beta8, January 12, 2001, are
|
||||
* libpng versions 1.0.7, July 1, 2000, through 1.0.11beta3, April 15, 2001, are
|
||||
* Copyright (c) 2000, 2001 Glenn Randers-Pehrson, 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
|
||||
@@ -152,11 +162,11 @@
|
||||
*
|
||||
* 1. The origin of this source code must not be misrepresented.
|
||||
*
|
||||
* 2. Altered versions must be plainly marked as such and must not
|
||||
* be misrepresented as being the original source.
|
||||
* 2. Altered versions must be plainly marked as such and
|
||||
* must not be misrepresented as being the original source.
|
||||
*
|
||||
* 3. This Copyright notice may not be removed or altered from any
|
||||
* source or altered source distribution.
|
||||
* 3. This Copyright notice may not be removed or altered from
|
||||
* any source or altered source distribution.
|
||||
*
|
||||
* The Contributing Authors and Group 42, Inc. specifically permit, without
|
||||
* fee, and encourage the use of this source code as a component to
|
||||
@@ -192,13 +202,13 @@
|
||||
* Y2K compliance in libpng:
|
||||
* =========================
|
||||
*
|
||||
* January 12, 2001
|
||||
* April 15, 2001
|
||||
*
|
||||
* Since the PNG Development group is an ad-hoc body, we can't make
|
||||
* an official declaration.
|
||||
*
|
||||
* This is your unofficial assurance that libpng from version 0.71 and
|
||||
* upward through 1.0.9beta8 are Y2K compliant. It is my belief that earlier
|
||||
* upward through 1.0.11beta3 are Y2K compliant. It is my belief that earlier
|
||||
* versions were also Y2K compliant.
|
||||
*
|
||||
* Libpng only has three year fields. One is a 2-byte unsigned integer
|
||||
@@ -254,18 +264,19 @@
|
||||
*/
|
||||
|
||||
/* Version information for png.h - this should match the version in png.c */
|
||||
#define PNG_LIBPNG_VER_STRING "1.0.9beta8"
|
||||
#define PNG_LIBPNG_VER_STRING "1.0.11beta3"
|
||||
|
||||
#define PNG_LIBPNG_VER_SONUM 2
|
||||
#define PNG_LIBPNG_VER_DLLNUM %DLLNUM%
|
||||
|
||||
/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
|
||||
#define PNG_LIBPNG_VER_MAJOR 1
|
||||
#define PNG_LIBPNG_VER_MINOR 0
|
||||
#define PNG_LIBPNG_VER_RELEASE 9
|
||||
#define PNG_LIBPNG_VER_RELEASE 11
|
||||
/* This should match the numeric part of the final component of
|
||||
* PNG_LIBPNG_VER_STRING, omitting any leading zero: */
|
||||
|
||||
#define PNG_LIBPNG_VER_BUILD 8
|
||||
#define PNG_LIBPNG_VER_BUILD 3
|
||||
|
||||
#define PNG_LIBPNG_BUILD_ALPHA 1
|
||||
#define PNG_LIBPNG_BUILD_BETA 2
|
||||
@@ -280,7 +291,7 @@
|
||||
* Versions 0.7 through 1.0.0 were in the range 0 to 100 here (only
|
||||
* version 1.0.0 was mis-numbered 100 instead of 10000). From
|
||||
* version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release */
|
||||
#define PNG_LIBPNG_VER 10009 /* 1.0.9 */
|
||||
#define PNG_LIBPNG_VER 10011 /* 1.0.11 */
|
||||
|
||||
#ifndef PNG_VERSION_INFO_ONLY
|
||||
|
||||
@@ -895,10 +906,10 @@ typedef void (PNGAPI *png_user_transform_ptr) PNGARG((png_structp,
|
||||
png_row_infop, png_bytep));
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_USER_CHUNKS_SUPPORTED)
|
||||
#if defined(PNG_USER_CHUNKS_SUPPORTED)
|
||||
typedef int (PNGAPI *png_user_chunk_ptr) PNGARG((png_structp, png_unknown_chunkp));
|
||||
#endif
|
||||
#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
|
||||
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
|
||||
typedef void (PNGAPI *png_unknown_chunk_ptr) PNGARG((png_structp));
|
||||
#endif
|
||||
|
||||
@@ -1018,7 +1029,7 @@ struct png_struct_def
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_bKGD_SUPPORTED)
|
||||
#if defined(PNG_bKGD_SUPPORTED)
|
||||
png_byte background_gamma_type;
|
||||
# ifdef PNG_FLOATING_POINT_SUPPORTED
|
||||
float background_gamma;
|
||||
@@ -1026,8 +1037,8 @@ struct png_struct_def
|
||||
png_color_16 background; /* background color in screen gamma space */
|
||||
# if defined(PNG_READ_GAMMA_SUPPORTED)
|
||||
png_color_16 background_1; /* background normalized to gamma 1.0 */
|
||||
# endif /* PNG_READ_GAMMA && PNG_READ_bKGD_SUPPORTED */
|
||||
#endif /* PNG_READ_bKGD_SUPPORTED */
|
||||
# endif /* PNG_READ_GAMMA && PNG_bKGD_SUPPORTED */
|
||||
#endif /* PNG_bKGD_SUPPORTED */
|
||||
|
||||
#if defined(PNG_WRITE_FLUSH_SUPPORTED)
|
||||
png_flush_ptr output_flush_fn;/* Function for flushing output */
|
||||
@@ -1052,7 +1063,7 @@ struct png_struct_def
|
||||
png_uint_16pp gamma_16_to_1; /* converts from file to 1.0 */
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_READ_sBIT_SUPPORTED)
|
||||
#if defined(PNG_READ_GAMMA_SUPPORTED) || defined(PNG_sBIT_SUPPORTED)
|
||||
png_color_8 sig_bit; /* significant bits in each available channel */
|
||||
#endif
|
||||
|
||||
@@ -1060,7 +1071,7 @@ struct png_struct_def
|
||||
png_color_8 shift; /* shift for significant bit tranformation */
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_tRNS_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) \
|
||||
#if defined(PNG_tRNS_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) \
|
||||
|| defined(PNG_READ_EXPAND_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED)
|
||||
png_bytep trans; /* transparency values for paletted files */
|
||||
png_color_16 trans_values; /* transparency values for non-paletted files */
|
||||
@@ -1085,12 +1096,12 @@ struct png_struct_def
|
||||
int process_mode; /* what push library is currently doing */
|
||||
int cur_palette; /* current push library palette index */
|
||||
|
||||
# if defined(PNG_READ_TEXT_SUPPORTED)
|
||||
# if defined(PNG_TEXT_SUPPORTED)
|
||||
png_size_t current_text_size; /* current size of text input data */
|
||||
png_size_t current_text_left; /* how much text left to read in input */
|
||||
png_charp current_text; /* current text chunk buffer */
|
||||
png_charp current_text_ptr; /* current location in current_text */
|
||||
# endif /* PNG_PROGRESSIVE_READ_SUPPORTED && PNG_READ_TEXT_SUPPORTED */
|
||||
# endif /* PNG_PROGRESSIVE_READ_SUPPORTED && PNG_TEXT_SUPPORTED */
|
||||
|
||||
#endif /* PNG_PROGRESSIVE_READ_SUPPORTED */
|
||||
|
||||
@@ -1108,7 +1119,7 @@ struct png_struct_def
|
||||
png_bytep dither_index; /* index translation for palette files */
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_DITHER_SUPPORTED) || defined(PNG_READ_hIST_SUPPORTED)
|
||||
#if defined(PNG_READ_DITHER_SUPPORTED) || defined(PNG_hIST_SUPPORTED)
|
||||
png_uint_16p hist; /* histogram */
|
||||
#endif
|
||||
|
||||
@@ -1138,7 +1149,7 @@ struct png_struct_def
|
||||
png_uint_32 free_me; /* flags items libpng is responsible for freeing */
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_USER_CHUNKS_SUPPORTED)
|
||||
#if defined(PNG_USER_CHUNKS_SUPPORTED)
|
||||
png_voidp user_chunk_ptr;
|
||||
png_user_chunk_ptr read_user_chunk_fn; /* user read chunk handler */
|
||||
#endif
|
||||
@@ -1168,13 +1179,15 @@ struct png_struct_def
|
||||
|
||||
png_byte filter_type;
|
||||
|
||||
png_uint_32 row_buf_size;
|
||||
|
||||
};
|
||||
|
||||
|
||||
/* This prevents a compiler error in png_get_copyright() in png.c if png.c
|
||||
and png.h are both at * version 1.0.9beta8
|
||||
and png.h are both at * version 1.0.11beta3
|
||||
*/
|
||||
typedef png_structp version_1_0_9beta8;
|
||||
typedef png_structp version_1_0_11beta3;
|
||||
|
||||
typedef png_struct FAR * FAR * png_structpp;
|
||||
|
||||
@@ -1688,7 +1701,7 @@ extern PNG_EXPORT(png_voidp,png_get_user_transform_ptr)
|
||||
PNGARG((png_structp png_ptr));
|
||||
#endif
|
||||
|
||||
#ifdef PNG_READ_USER_CHUNKS_SUPPORTED
|
||||
#ifdef PNG_USER_CHUNKS_SUPPORTED
|
||||
extern PNG_EXPORT(void,png_set_read_user_chunk_fn) PNGARG((png_structp png_ptr,
|
||||
png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn));
|
||||
extern PNG_EXPORT(png_voidp,png_get_user_chunk_ptr) PNGARG((png_structp
|
||||
@@ -1881,7 +1894,7 @@ png_ptr, png_infop info_ptr));
|
||||
extern PNG_EXPORT(png_bytep,png_get_signature) PNGARG((png_structp png_ptr,
|
||||
png_infop info_ptr));
|
||||
|
||||
#if defined(PNG_READ_bKGD_SUPPORTED)
|
||||
#if defined(PNG_bKGD_SUPPORTED)
|
||||
extern PNG_EXPORT(png_uint_32,png_get_bKGD) PNGARG((png_structp png_ptr,
|
||||
png_infop info_ptr, png_color_16p *background));
|
||||
#endif
|
||||
@@ -1891,7 +1904,7 @@ extern PNG_EXPORT(void,png_set_bKGD) PNGARG((png_structp png_ptr,
|
||||
png_infop info_ptr, png_color_16p background));
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_cHRM_SUPPORTED)
|
||||
#if defined(PNG_cHRM_SUPPORTED)
|
||||
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
||||
extern PNG_EXPORT(png_uint_32,png_get_cHRM) PNGARG((png_structp png_ptr,
|
||||
png_infop info_ptr, double *white_x, double *white_y, double *red_x,
|
||||
@@ -1922,7 +1935,7 @@ extern PNG_EXPORT(void,png_set_cHRM_fixed) PNGARG((png_structp png_ptr,
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_gAMA_SUPPORTED)
|
||||
#if defined(PNG_gAMA_SUPPORTED)
|
||||
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
||||
extern PNG_EXPORT(png_uint_32,png_get_gAMA) PNGARG((png_structp png_ptr,
|
||||
png_infop info_ptr, double *file_gamma));
|
||||
@@ -1940,7 +1953,7 @@ extern PNG_EXPORT(void,png_set_gAMA_fixed) PNGARG((png_structp png_ptr,
|
||||
png_infop info_ptr, png_fixed_point int_file_gamma));
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_hIST_SUPPORTED)
|
||||
#if defined(PNG_hIST_SUPPORTED)
|
||||
extern PNG_EXPORT(png_uint_32,png_get_hIST) PNGARG((png_structp png_ptr,
|
||||
png_infop info_ptr, png_uint_16p *hist));
|
||||
#endif
|
||||
@@ -1960,7 +1973,7 @@ extern PNG_EXPORT(void,png_set_IHDR) PNGARG((png_structp png_ptr,
|
||||
int color_type, int interlace_method, int compression_method,
|
||||
int filter_method));
|
||||
|
||||
#if defined(PNG_READ_oFFs_SUPPORTED)
|
||||
#if defined(PNG_oFFs_SUPPORTED)
|
||||
extern PNG_EXPORT(png_uint_32,png_get_oFFs) PNGARG((png_structp png_ptr,
|
||||
png_infop info_ptr, png_int_32 *offset_x, png_int_32 *offset_y,
|
||||
int *unit_type));
|
||||
@@ -1972,7 +1985,7 @@ extern PNG_EXPORT(void,png_set_oFFs) PNGARG((png_structp png_ptr,
|
||||
int unit_type));
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_pCAL_SUPPORTED)
|
||||
#if defined(PNG_pCAL_SUPPORTED)
|
||||
extern PNG_EXPORT(png_uint_32,png_get_pCAL) PNGARG((png_structp png_ptr,
|
||||
png_infop info_ptr, png_charp *purpose, png_int_32 *X0, png_int_32 *X1,
|
||||
int *type, int *nparams, png_charp *units, png_charpp *params));
|
||||
@@ -1984,7 +1997,7 @@ extern PNG_EXPORT(void,png_set_pCAL) PNGARG((png_structp png_ptr,
|
||||
int type, int nparams, png_charp units, png_charpp params));
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_pHYs_SUPPORTED)
|
||||
#if defined(PNG_pHYs_SUPPORTED)
|
||||
extern PNG_EXPORT(png_uint_32,png_get_pHYs) PNGARG((png_structp png_ptr,
|
||||
png_infop info_ptr, png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type));
|
||||
#endif
|
||||
@@ -2000,7 +2013,7 @@ extern PNG_EXPORT(png_uint_32,png_get_PLTE) PNGARG((png_structp png_ptr,
|
||||
extern PNG_EXPORT(void,png_set_PLTE) PNGARG((png_structp png_ptr,
|
||||
png_infop info_ptr, png_colorp palette, int num_palette));
|
||||
|
||||
#if defined(PNG_READ_sBIT_SUPPORTED)
|
||||
#if defined(PNG_sBIT_SUPPORTED)
|
||||
extern PNG_EXPORT(png_uint_32,png_get_sBIT) PNGARG((png_structp png_ptr,
|
||||
png_infop info_ptr, png_color_8p *sig_bit));
|
||||
#endif
|
||||
@@ -2010,7 +2023,7 @@ extern PNG_EXPORT(void,png_set_sBIT) PNGARG((png_structp png_ptr,
|
||||
png_infop info_ptr, png_color_8p sig_bit));
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_sRGB_SUPPORTED)
|
||||
#if defined(PNG_sRGB_SUPPORTED)
|
||||
extern PNG_EXPORT(png_uint_32,png_get_sRGB) PNGARG((png_structp png_ptr,
|
||||
png_infop info_ptr, int *intent));
|
||||
#endif
|
||||
@@ -2022,7 +2035,7 @@ extern PNG_EXPORT(void,png_set_sRGB_gAMA_and_cHRM) PNGARG((png_structp png_ptr,
|
||||
png_infop info_ptr, int intent));
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_iCCP_SUPPORTED)
|
||||
#if defined(PNG_iCCP_SUPPORTED)
|
||||
extern PNG_EXPORT(png_uint_32,png_get_iCCP) PNGARG((png_structp png_ptr,
|
||||
png_infop info_ptr, png_charpp name, int *compression_type,
|
||||
png_charpp profile, png_uint_32 *proflen));
|
||||
@@ -2036,7 +2049,7 @@ extern PNG_EXPORT(void,png_set_iCCP) PNGARG((png_structp png_ptr,
|
||||
/* Note to maintainer: profile should be png_bytep */
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_sPLT_SUPPORTED)
|
||||
#if defined(PNG_sPLT_SUPPORTED)
|
||||
extern PNG_EXPORT(png_uint_32,png_get_sPLT) PNGARG((png_structp png_ptr,
|
||||
png_infop info_ptr, png_sPLT_tpp entries));
|
||||
#endif
|
||||
@@ -2046,7 +2059,7 @@ extern PNG_EXPORT(void,png_set_sPLT) PNGARG((png_structp png_ptr,
|
||||
png_infop info_ptr, png_sPLT_tp entries, int nentries));
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_TEXT_SUPPORTED)
|
||||
#if defined(PNG_TEXT_SUPPORTED)
|
||||
/* png_get_text also returns the number of text chunks in *num_text */
|
||||
extern PNG_EXPORT(png_uint_32,png_get_text) PNGARG((png_structp png_ptr,
|
||||
png_infop info_ptr, png_textp *text_ptr, int *num_text));
|
||||
@@ -2065,7 +2078,7 @@ extern PNG_EXPORT(void,png_set_text) PNGARG((png_structp png_ptr,
|
||||
png_infop info_ptr, png_textp text_ptr, int num_text));
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_tIME_SUPPORTED)
|
||||
#if defined(PNG_tIME_SUPPORTED)
|
||||
extern PNG_EXPORT(png_uint_32,png_get_tIME) PNGARG((png_structp png_ptr,
|
||||
png_infop info_ptr, png_timep *mod_time));
|
||||
#endif
|
||||
@@ -2075,7 +2088,7 @@ extern PNG_EXPORT(void,png_set_tIME) PNGARG((png_structp png_ptr,
|
||||
png_infop info_ptr, png_timep mod_time));
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_tRNS_SUPPORTED)
|
||||
#if defined(PNG_tRNS_SUPPORTED)
|
||||
extern PNG_EXPORT(png_uint_32,png_get_tRNS) PNGARG((png_structp png_ptr,
|
||||
png_infop info_ptr, png_bytep *trans, int *num_trans,
|
||||
png_color_16p *trans_values));
|
||||
@@ -2090,7 +2103,7 @@ extern PNG_EXPORT(void,png_set_tRNS) PNGARG((png_structp png_ptr,
|
||||
#if defined(PNG_tRNS_SUPPORTED)
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_sCAL_SUPPORTED)
|
||||
#if defined(PNG_sCAL_SUPPORTED)
|
||||
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
||||
extern PNG_EXPORT(png_uint_32,png_get_sCAL) PNGARG((png_structp png_ptr,
|
||||
png_infop info_ptr, int *unit, double *width, double *height));
|
||||
@@ -2100,7 +2113,7 @@ extern PNG_EXPORT(png_uint_32,png_get_sCAL_s) PNGARG((png_structp png_ptr,
|
||||
png_infop info_ptr, int *unit, png_charpp swidth, png_charpp sheight));
|
||||
#endif
|
||||
#endif
|
||||
#endif /* PNG_READ_sCAL_SUPPORTED */
|
||||
#endif /* PNG_sCAL_SUPPORTED */
|
||||
|
||||
#if defined(PNG_sCAL_SUPPORTED)
|
||||
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
||||
@@ -2111,7 +2124,7 @@ extern PNG_EXPORT(void,png_set_sCAL) PNGARG((png_structp png_ptr,
|
||||
extern PNG_EXPORT(void,png_set_sCAL_s) PNGARG((png_structp png_ptr,
|
||||
png_infop info_ptr, int unit, png_charp swidth, png_charp sheight));
|
||||
#endif
|
||||
#endif /* PNG_READ_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */
|
||||
#endif /* PNG_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */
|
||||
|
||||
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
|
||||
/* provide a list of chunks and how they are to be handled, if the built-in
|
||||
@@ -2214,13 +2227,15 @@ extern PNG_EXPORT(png_uint_32,png_permit_mng_features) PNGARG((png_structp
|
||||
png_ptr, png_uint_32 mng_features_permitted));
|
||||
#endif
|
||||
|
||||
#if 0 /* delay these until version 1.2.0 */
|
||||
/* png.c, pnggccrd.c, or pngvcrd.c */
|
||||
extern PNG_EXPORT(int,png_mmx_support) PNGARG((void));
|
||||
#endif
|
||||
|
||||
/* Maintainer: Put new public prototypes here ^ and in libpng.3 */
|
||||
/* Maintainer: Put new public prototypes here ^, in libpng.3, and project defs */
|
||||
|
||||
#define PNG_HEADER_VERSION_STRING \
|
||||
" libpng version 1.0.9beta8 - January 12, 2001 (header)\n"
|
||||
" libpng version 1.0.11beta3 - April 15, 2001 (header)\n"
|
||||
|
||||
#ifdef PNG_READ_COMPOSITE_NODIV_SUPPORTED
|
||||
/* With these routines we avoid an integer divide, which will be slower on
|
||||
@@ -2434,13 +2449,13 @@ PNG_EXPORT_VAR (const png_byte FARDATA) png_zTXt[5];
|
||||
* values, which is almost certainly true.
|
||||
*/
|
||||
#if defined(PNG_READ_BIG_ENDIAN_SUPPORTED)
|
||||
# if defined(PNG_READ_pCAL_SUPPORTED) || defined(PNG_READ_oFFs_SUPPORTED)
|
||||
# if defined(PNG_pCAL_SUPPORTED) || defined(PNG_oFFs_SUPPORTED)
|
||||
# define png_get_int_32(buf) ( *((png_int_32p) (buf)))
|
||||
# endif
|
||||
# define png_get_uint_32(buf) ( *((png_uint_32p) (buf)))
|
||||
# define png_get_uint_16(buf) ( *((png_uint_16p) (buf)))
|
||||
#else
|
||||
# if defined(PNG_READ_pCAL_SUPPORTED) || defined(PNG_READ_oFFs_SUPPORTED)
|
||||
# if defined(PNG_pCAL_SUPPORTED) || defined(PNG_oFFs_SUPPORTED)
|
||||
PNG_EXTERN png_int_32 png_get_int_32 PNGARG((png_bytep buf));
|
||||
# endif
|
||||
PNG_EXTERN png_uint_32 png_get_uint_32 PNGARG((png_bytep buf));
|
||||
@@ -2504,8 +2519,8 @@ PNG_EXTERN void png_crc_read PNGARG((png_structp png_ptr, png_bytep buf,
|
||||
png_size_t length));
|
||||
|
||||
/* Decompress data in a chunk that uses compression */
|
||||
#if defined(PNG_READ_zTXt_SUPPORTED) || defined(PNG_READ_iTXt_SUPPORTED) || \
|
||||
defined(PNG_READ_iCCP_SUPPORTED) || defined(PNG_READ_sPLT_SUPPORTED)
|
||||
#if defined(PNG_zTXt_SUPPORTED) || defined(PNG_iTXt_SUPPORTED) || \
|
||||
defined(PNG_iCCP_SUPPORTED) || defined(PNG_sPLT_SUPPORTED)
|
||||
PNG_EXTERN png_charp png_decompress_chunk PNGARG((png_structp png_ptr,
|
||||
int comp_type, png_charp chunkdata, png_size_t chunklength,
|
||||
png_size_t prefix_length, png_size_t *data_length));
|
||||
@@ -2700,7 +2715,7 @@ PNG_EXTERN void png_combine_row PNGARG((png_structp png_ptr, png_bytep row,
|
||||
|
||||
#if defined(PNG_READ_INTERLACING_SUPPORTED)
|
||||
/* expand an interlaced row */
|
||||
/* OLD interface:
|
||||
/* OLD pre-1.0.9 interface:
|
||||
PNG_EXTERN void png_do_read_interlace PNGARG((png_row_infop row_info,
|
||||
png_bytep row, int pass, png_uint_32 transformations));
|
||||
*/
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* pngasmrd.h - assembler version of utilities to read a PNG file
|
||||
*
|
||||
* libpng 1.0.9beta8 - January 12, 2001
|
||||
* libpng 1.0.11beta3 - April 15, 2001
|
||||
* For conditions of distribution and use, see copyright notice in png.h
|
||||
* Copyright (c) 2001 Glenn Randers-Pehrson
|
||||
*
|
||||
|
||||
129
pngconf.h
129
pngconf.h
@@ -1,8 +1,8 @@
|
||||
/* pngconf.h - machine configurable file for libpng
|
||||
*
|
||||
* libpng 1.0.9beta8 - January 12, 2001
|
||||
* libpng 1.0.11beta3 - April 15, 2001
|
||||
* For conditions of distribution and use, see copyright notice in png.h
|
||||
* Copyright (c) 1998, 1999, 2000, 2001 Glenn Randers-Pehrson
|
||||
* Copyright (c) 1998-2001 Glenn Randers-Pehrson
|
||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||
*/
|
||||
@@ -33,8 +33,32 @@
|
||||
# define PNG_ZBUF_SIZE 8192
|
||||
#endif
|
||||
|
||||
/* Enable if you want a write-only libpng */
|
||||
|
||||
#ifndef PNG_NO_READ_SUPPORTED
|
||||
# define PNG_READ_SUPPORTED
|
||||
#endif
|
||||
|
||||
/* Enable if you want a read-only libpng */
|
||||
|
||||
#ifndef PNG_NO_WRITE_SUPPORTED
|
||||
# define PNG_WRITE_SUPPORTED
|
||||
#endif
|
||||
|
||||
/* Enable if you need to support PNGs that are embedded in MNG
|
||||
datastreams */
|
||||
/*
|
||||
#ifndef PNG_NO_MNG_FEATURES
|
||||
# ifndef PNG_MNG_FEATURES_SUPPORTED
|
||||
# define PNG_MNG_FEATURES_SUPPORTED
|
||||
# endif
|
||||
#endif
|
||||
*/
|
||||
|
||||
#ifndef PNG_NO_FLOATING_POINT_SUPPORTED
|
||||
# define PNG_FLOATING_POINT_SUPPORTED
|
||||
# ifndef PNG_FLOATING_POINT_SUPPORTED
|
||||
# define PNG_FLOATING_POINT_SUPPORTED
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* If you are running on a machine where you cannot allocate more
|
||||
@@ -59,7 +83,9 @@
|
||||
* PNG_BUILD_DLL -- building the dll
|
||||
* (no define) -- building an application, linking to the dll
|
||||
* PNG_STATIC -- building the static lib, or building an application
|
||||
* which links to the static lib.
|
||||
* that links to the static lib.
|
||||
* ALL_STATIC -- building various static libs, or building an application
|
||||
* that links to the static libs.
|
||||
* Thus,
|
||||
* a cygwin user should define either PNG_BUILD_DLL or PNG_STATIC, and
|
||||
* this bit of #ifdefs will define the 'correct' config variables based on
|
||||
@@ -78,6 +104,9 @@
|
||||
# undef PNG_STATIC
|
||||
# endif
|
||||
# else
|
||||
# if defined(ALL_STATIC)
|
||||
# define PNG_STATIC
|
||||
# endif
|
||||
# if defined(PNG_STATIC)
|
||||
# if defined(PNG_USE_DLL)
|
||||
# undef PNG_USE_DLL
|
||||
@@ -219,12 +248,6 @@
|
||||
# endif /* __linux__ */
|
||||
#endif /* PNG_SETJMP_SUPPORTED */
|
||||
|
||||
#if defined(_AIX) && defined(__xlC__)
|
||||
/* This prevents "AIX/xlC" from generating an "index(s,c)" macro in strings.h
|
||||
* that conflicts with libpng's png_color_16.index */
|
||||
# undef __STR__
|
||||
#endif
|
||||
|
||||
#ifdef BSD
|
||||
# include <strings.h>
|
||||
#else
|
||||
@@ -362,7 +385,7 @@
|
||||
* iTXt is supported. It is turned off by default, to support old apps
|
||||
* that malloc the png_text structure instead of calling png_set_text()
|
||||
* and letting libpng malloc it. It will be turned on by default in
|
||||
* libpng-2.0.0.
|
||||
* libpng-1.3.0.
|
||||
*/
|
||||
|
||||
#ifndef PNG_iTXt_SUPPORTED
|
||||
@@ -413,14 +436,12 @@
|
||||
# define PNG_FREE_ME_SUPPORTED
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_SUPPORTED)
|
||||
|
||||
#if !defined(PNG_READ_TRANSFORMS_NOT_SUPPORTED) && \
|
||||
!defined(PNG_NO_READ_TRANSFORMS)
|
||||
!defined(PNG_NO_READ_TRANSFORMS)
|
||||
# define PNG_READ_TRANSFORMS_SUPPORTED
|
||||
#endif
|
||||
#if !defined(PNG_WRITE_TRANSFORMS_NOT_SUPPORTED) && \
|
||||
!defined(PNG_NO_WRITE_TRANSFORMS)
|
||||
# define PNG_WRITE_TRANSFORMS_SUPPORTED
|
||||
#endif
|
||||
|
||||
#ifdef PNG_READ_TRANSFORMS_SUPPORTED
|
||||
# ifndef PNG_NO_READ_EXPAND
|
||||
@@ -493,17 +514,21 @@
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* Disable if you don't need to support PNGs that are embedded in MNG
|
||||
datastreams */
|
||||
#ifndef PNG_NO_MNG_FEATURES
|
||||
# define PNG_MNG_FEATURES_SUPPORTED
|
||||
#endif
|
||||
|
||||
/* Deprecated, will be removed */
|
||||
/* Deprecated, will be removed from version 2.0.0.
|
||||
Use PNG_MNG_FEATURES_SUPPORTED instead. */
|
||||
#ifndef PNG_NO_READ_EMPTY_PLTE
|
||||
# define PNG_READ_EMPTY_PLTE_SUPPORTED
|
||||
#endif
|
||||
|
||||
#endif /* PNG_READ_SUPPORTED */
|
||||
|
||||
#if defined(PNG_WRITE_SUPPORTED)
|
||||
|
||||
# if !defined(PNG_WRITE_TRANSFORMS_NOT_SUPPORTED) && \
|
||||
!defined(PNG_NO_WRITE_TRANSFORMS)
|
||||
# define PNG_WRITE_TRANSFORMS_SUPPORTED
|
||||
#endif
|
||||
|
||||
#ifdef PNG_WRITE_TRANSFORMS_SUPPORTED
|
||||
# ifndef PNG_NO_WRITE_SHIFT
|
||||
# define PNG_WRITE_SHIFT_SUPPORTED
|
||||
@@ -562,6 +587,8 @@
|
||||
# define PNG_WRITE_EMPTY_PLTE_SUPPORTED
|
||||
#endif
|
||||
|
||||
#endif /* PNG_WRITE_SUPPORTED */
|
||||
|
||||
#ifndef PNG_NO_STDIO
|
||||
# define PNG_TIME_RFC1123_SUPPORTED
|
||||
#endif
|
||||
@@ -586,10 +613,16 @@
|
||||
# define PNG_EASY_ACCESS_SUPPORTED
|
||||
#endif
|
||||
|
||||
#ifndef PNG_NO_ASSEMBLER_CODE
|
||||
# define PNG_ASSEMBLER_CODE_SUPPORTED
|
||||
/* PNG_ASSEMBLER_CODE will be enabled by default in version 1.2.0
|
||||
even when PNG_USE_PNGVCRD or PNG_USE_PNGGCCRD is not defined */
|
||||
#if defined(PNG_READ_SUPPORTED) && !defined(PNG_NO_ASSEMBLER_CODE)
|
||||
# if defined(PNG_USE_PNGVCRD) || defined(PNG_USE_PNGGCCRD)
|
||||
# define PNG_MMX_CODE_SUPPORTED
|
||||
# ifndef PNG_ASSEMBLER_CODE_SUPPORTED
|
||||
# define PNG_ASSEMBLER_CODE_SUPPORTED
|
||||
# endif
|
||||
# if !defined(PNG_MMX_CODE_SUPPORTED) && !defined(PNG_NO_MMX_CODE)
|
||||
# define PNG_MMX_CODE_SUPPORTED
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
|
||||
@@ -597,7 +630,11 @@
|
||||
|
||||
/* very little testing */
|
||||
/*
|
||||
#define PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
|
||||
#ifdef PNG_READ_SUPPORTED
|
||||
# ifndef PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
|
||||
# define PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
|
||||
# endif
|
||||
#endif
|
||||
#ifndef PNG_NO_USER_MEM
|
||||
# define PNG_USER_MEM_SUPPORTED
|
||||
#endif
|
||||
@@ -609,7 +646,11 @@
|
||||
/* This is only for PowerPC big-endian and 680x0 systems */
|
||||
/* some testing */
|
||||
/*
|
||||
#define PNG_READ_BIG_ENDIAN_SUPPORTED
|
||||
#ifdef PNG_READ_SUPPORTED
|
||||
# ifndef PNG_PNG_READ_BIG_ENDIAN_SUPPORTED
|
||||
# define PNG_READ_BIG_ENDIAN_SUPPORTED
|
||||
# endif
|
||||
#endif
|
||||
*/
|
||||
|
||||
/* Buggy compilers (e.g., gcc 2.7.2.2) need this */
|
||||
@@ -629,11 +670,14 @@
|
||||
* a bit smaller.
|
||||
*/
|
||||
|
||||
#if !defined(PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \
|
||||
#if defined(PNG_READ_SUPPORTED) && \
|
||||
!defined(PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \
|
||||
!defined(PNG_NO_READ_ANCILLARY_CHUNKS)
|
||||
# define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED
|
||||
#endif
|
||||
#if !defined(PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \
|
||||
|
||||
#if defined(PNG_WRITE_SUPPORTED) && \
|
||||
!defined(PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED) && \
|
||||
!defined(PNG_NO_WRITE_ANCILLARY_CHUNKS)
|
||||
# define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED
|
||||
#endif
|
||||
@@ -982,11 +1026,15 @@ typedef png_int_16 FAR * png_int_16p;
|
||||
typedef PNG_CONST char FAR * png_const_charp;
|
||||
typedef char FAR * png_charp;
|
||||
typedef png_fixed_point FAR * png_fixed_point_p;
|
||||
|
||||
#ifndef PNG_NO_STDIO
|
||||
#if defined(_WIN32_WCE)
|
||||
typedef HANDLE png_FILE_p;
|
||||
#else
|
||||
typedef FILE * png_FILE_p;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
||||
typedef double FAR * png_doublep;
|
||||
#endif
|
||||
@@ -1020,7 +1068,7 @@ typedef z_stream FAR * png_zstreamp;
|
||||
* LIBPNG DLL.
|
||||
*
|
||||
* Define PNG_USE_DLL if you want to *link* to the Windows LIBPNG DLL.
|
||||
* It is equivalent to Microsoft predefined macro _DLL which is
|
||||
* It is equivalent to Microsoft predefined macro _DLL that is
|
||||
* automatically defined when you compile using the share
|
||||
* version of the CRT (C Run-Time library)
|
||||
*
|
||||
@@ -1137,10 +1185,15 @@ typedef z_stream FAR * png_zstreamp;
|
||||
# endif
|
||||
# define PNGAPI __cdecl
|
||||
# else
|
||||
# if 0 /* ... other platforms, with other meanings */
|
||||
# if (defined(__IBMC__) || defined(IBMCPP__)) && defined(__OS2__)
|
||||
# define PNGAPI _System
|
||||
# define PNG_IMPEXP
|
||||
# else
|
||||
# define PNGAPI
|
||||
# define PNG_IMPEXP
|
||||
# if 0 /* ... other platforms, with other meanings */
|
||||
# else
|
||||
# define PNGAPI
|
||||
# define PNG_IMPEXP
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
@@ -1208,13 +1261,14 @@ typedef z_stream FAR * png_zstreamp;
|
||||
# define PNG_ZBUF_SIZE 65536
|
||||
#endif
|
||||
|
||||
#ifdef PNG_READ_SUPPORTED
|
||||
/* Prior to libpng-1.0.9, this block was in pngasmrd.h */
|
||||
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) && defined(PNG_INTERNAL)
|
||||
#if defined(PNG_INTERNAL)
|
||||
|
||||
/* These are the default thresholds before the MMX code kicks in; if either
|
||||
* rowbytes or bitdepth is below the threshold, plain C code is used. These
|
||||
* can be overridden at runtime via the png_set_mmx_thresholds() call in
|
||||
* libpng 1.0.9 and later. The values below were chosen by Intel.
|
||||
* libpng 1.2.0 and later. The values below were chosen by Intel.
|
||||
*/
|
||||
|
||||
#ifndef PNG_MMX_ROWBYTES_THRESHOLD_DEFAULT
|
||||
@@ -1245,7 +1299,8 @@ typedef z_stream FAR * png_zstreamp;
|
||||
#endif
|
||||
/* - see pnggccrd.c for info about what is currently enabled */
|
||||
|
||||
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
|
||||
#endif /* PNG_INTERNAL */
|
||||
#endif /* PNG_READ_SUPPORTED */
|
||||
|
||||
#endif /* PNGCONF_H */
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
|
||||
/* pngerror.c - stub functions for i/o and memory allocation
|
||||
*
|
||||
* libpng 1.0.9beta8 - January 12, 2001
|
||||
* libpng 1.0.11beta3 - April 15, 2001
|
||||
* For conditions of distribution and use, see copyright notice in png.h
|
||||
* Copyright (c) 1998, 1999, 2000, 2001 Glenn Randers-Pehrson
|
||||
* Copyright (c) 1998-2001 Glenn Randers-Pehrson
|
||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||
*
|
||||
@@ -107,7 +107,7 @@ png_chunk_error(png_structp png_ptr, png_const_charp message)
|
||||
void PNGAPI
|
||||
png_chunk_warning(png_structp png_ptr, png_const_charp message)
|
||||
{
|
||||
char msg[16+64];
|
||||
char msg[18+64];
|
||||
png_format_buffer(png_ptr, msg, message);
|
||||
png_warning(png_ptr, msg);
|
||||
}
|
||||
|
||||
434
pnggccrd.c
434
pnggccrd.c
@@ -6,9 +6,9 @@
|
||||
* and http://www.intel.com/drg/pentiumII/appnotes/923/923.htm
|
||||
* for Intel's performance analysis of the MMX vs. non-MMX code.
|
||||
*
|
||||
* libpng 1.0.9beta8 - January 12, 2001
|
||||
* libpng version 1.0.11beta3 - April 15, 2001
|
||||
* For conditions of distribution and use, see copyright notice in png.h
|
||||
* Copyright (c) 1998, 1999, 2000, 2001 Glenn Randers-Pehrson
|
||||
* Copyright (c) 1998-2001 Glenn Randers-Pehrson
|
||||
* Copyright (c) 1998, Intel Corporation
|
||||
*
|
||||
* Based on MSVC code contributed by Nirav Chhatrapati, Intel Corp., 1998.
|
||||
@@ -95,11 +95,11 @@
|
||||
* variables, not the other way around. Hence _const4, _mask8_0, etc.
|
||||
*
|
||||
* 19991024:
|
||||
* - fixed mmxsupport()/png_do_interlace() first-row bug
|
||||
* - fixed mmxsupport()/png_do_read_interlace() first-row bug
|
||||
* This one was severely weird: even though mmxsupport() doesn't touch
|
||||
* ebx (where "row" pointer was stored), it nevertheless managed to zero
|
||||
* the register (even in static/non-fPIC code--see below), which in turn
|
||||
* caused png_do_interlace() to return prematurely on the first row of
|
||||
* caused png_do_read_interlace() to return prematurely on the first row of
|
||||
* interlaced images (i.e., without expanding the interlaced pixels).
|
||||
* Inspection of the generated assembly code didn't turn up any clues,
|
||||
* although it did point at a minor optimization (i.e., get rid of
|
||||
@@ -212,6 +212,9 @@
|
||||
* within MMX version of png_read_filter_row()) so no longer necessary to
|
||||
* compile it into pngrutil.o
|
||||
*
|
||||
* 20010310:
|
||||
* - fixed buffer-overrun bug in png_combine_row() C code (non-MMX)
|
||||
*
|
||||
* STILL TO DO:
|
||||
* - test png_do_read_interlace() 64-bit case (pixel_bytes == 8)
|
||||
* - write MMX code for 48-bit case (pixel_bytes == 6)
|
||||
@@ -223,15 +226,21 @@
|
||||
* x pick one version of mmxsupport() and get rid of the other
|
||||
* - add error messages to any remaining bogus default cases
|
||||
* - enable pixel_depth == 8 cases in png_read_filter_row()? (test speed)
|
||||
* x add support for runtime enable/disable/query of various MMX routines
|
||||
* - add support for runtime enable/disable/query of various MMX routines
|
||||
*/
|
||||
|
||||
//#define PNG_DEBUG 2 // GRR
|
||||
/*
|
||||
#ifndef PNG_DEBUG
|
||||
# define PNG_DEBUG 0
|
||||
#endif
|
||||
*/
|
||||
|
||||
#define PNG_INTERNAL
|
||||
#include "png.h"
|
||||
|
||||
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED) && defined(PNG_USE_PNGGCCRD)
|
||||
#if defined(PNG_USE_PNGGCCRD)
|
||||
|
||||
int PNGAPI png_mmx_support(void);
|
||||
|
||||
#ifdef PNG_USE_LOCAL_ARRAYS
|
||||
static const int FARDATA png_pass_start[7] = {0, 4, 0, 2, 0, 1, 0};
|
||||
@@ -239,8 +248,9 @@ static const int FARDATA png_pass_inc[7] = {8, 8, 4, 4, 2, 2, 1};
|
||||
static const int FARDATA png_pass_width[7] = {8, 4, 4, 2, 2, 1, 1};
|
||||
#endif
|
||||
|
||||
// djgpp, Win32, and Cygwin add their own underscores to global variables,
|
||||
// so define them without:
|
||||
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
|
||||
/* djgpp, Win32, and Cygwin add their own underscores to global variables,
|
||||
* so define them without: */
|
||||
#if defined(__DJGPP__) || defined(WIN32) || defined(__CYGWIN__)
|
||||
# define _mmx_supported mmx_supported
|
||||
# define _unmask unmask
|
||||
@@ -277,7 +287,6 @@ static const int FARDATA png_pass_width[7] = {8, 4, 4, 2, 2, 1, 1};
|
||||
# define _pctemp pctemp
|
||||
#endif
|
||||
|
||||
static int _mmx_supported = 2;
|
||||
|
||||
/* These constants are used in the inlined MMX assembly code.
|
||||
Ignore gcc's "At top level: defined but not used" warnings. */
|
||||
@@ -324,18 +333,24 @@ static int _dif;
|
||||
static int _patemp; // temp variables for Paeth routine
|
||||
static int _pbtemp;
|
||||
static int _pctemp;
|
||||
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
|
||||
|
||||
static int _mmx_supported = 2;
|
||||
|
||||
|
||||
|
||||
//===========================================================================//
|
||||
// //
|
||||
// P N G _ C O M B I N E _ R O W //
|
||||
// //
|
||||
//===========================================================================//
|
||||
/*===========================================================================*/
|
||||
/* */
|
||||
/* P N G _ C O M B I N E _ R O W */
|
||||
/* */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if defined(PNG_HAVE_ASSEMBLER_COMBINE_ROW)
|
||||
|
||||
#define BPP2 2
|
||||
#define BPP3 3 /* bytes per pixel (a.k.a. pixel_bytes) */
|
||||
#define BPP4 4
|
||||
#define BPP6 6 /* (defined only to help avoid cut-and-paste errors) */
|
||||
#define BPP8 8
|
||||
|
||||
/* Combines the row recently read in with the previous row.
|
||||
This routine takes care of alpha and transparency if requested.
|
||||
This routine also handles the two methods of progressive display
|
||||
@@ -353,7 +368,7 @@ static int _pctemp;
|
||||
void /* PRIVATE */
|
||||
png_combine_row(png_structp png_ptr, png_bytep row, int mask)
|
||||
{
|
||||
png_debug(1,"in png_combine_row_asm\n");
|
||||
png_debug(1, "in png_combine_row (pnggccrd.c)\n");
|
||||
|
||||
if (_mmx_supported == 2) {
|
||||
png_mmx_support();
|
||||
@@ -361,15 +376,15 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
|
||||
|
||||
if (mask == 0xff)
|
||||
{
|
||||
png_debug(2,"mask == 0xff: doing single png_memcpy()\n");
|
||||
png_memcpy(row, png_ptr->row_buf + 1,
|
||||
(png_size_t)((png_ptr->width * png_ptr->row_info.pixel_depth + 7) >> 3));
|
||||
}
|
||||
/* GRR: png_combine_row() never called with mask == 0 */
|
||||
else
|
||||
else /* (png_combine_row() is never called with mask == 0) */
|
||||
{
|
||||
switch (png_ptr->row_info.pixel_depth)
|
||||
{
|
||||
case 1: // png_ptr->row_info.pixel_depth
|
||||
case 1: /* png_ptr->row_info.pixel_depth */
|
||||
{
|
||||
png_bytep sp;
|
||||
png_bytep dp;
|
||||
@@ -426,7 +441,7 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
|
||||
break;
|
||||
}
|
||||
|
||||
case 2: // png_ptr->row_info.pixel_depth
|
||||
case 2: /* png_ptr->row_info.pixel_depth */
|
||||
{
|
||||
png_bytep sp;
|
||||
png_bytep dp;
|
||||
@@ -481,7 +496,7 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
|
||||
break;
|
||||
}
|
||||
|
||||
case 4: // png_ptr->row_info.pixel_depth
|
||||
case 4: /* png_ptr->row_info.pixel_depth */
|
||||
{
|
||||
png_bytep sp;
|
||||
png_bytep dp;
|
||||
@@ -535,11 +550,12 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
|
||||
break;
|
||||
}
|
||||
|
||||
case 8: // png_ptr->row_info.pixel_depth
|
||||
case 8: /* png_ptr->row_info.pixel_depth */
|
||||
{
|
||||
png_bytep srcptr;
|
||||
png_bytep dstptr;
|
||||
|
||||
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
|
||||
if ( _mmx_supported )
|
||||
{
|
||||
png_uint_32 len;
|
||||
@@ -553,7 +569,7 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
|
||||
srcptr = png_ptr->row_buf + 1;
|
||||
dstptr = row;
|
||||
len = png_ptr->width &~7; // reduce to multiple of 8
|
||||
diff = png_ptr->width & 7; // amount lost
|
||||
diff = (int) (png_ptr->width & 7); // amount lost
|
||||
|
||||
__asm__ __volatile__ (
|
||||
"movd _unmask, %%mm7 \n\t" // load bit pattern
|
||||
@@ -627,15 +643,18 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
|
||||
);
|
||||
}
|
||||
else /* mmx _not supported - Use modified C routine */
|
||||
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
|
||||
{
|
||||
register png_uint_32 i;
|
||||
png_uint_32 initial_val = png_pass_start[png_ptr->pass];
|
||||
// png.c: png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
|
||||
/* png.c: png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; */
|
||||
register int stride = png_pass_inc[png_ptr->pass];
|
||||
// png.c: png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
|
||||
/* png.c: png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; */
|
||||
register int rep_bytes = png_pass_width[png_ptr->pass];
|
||||
// png.c: png_pass_width[] = {8, 4, 4, 2, 2, 1, 1};
|
||||
register png_uint_32 final_val = png_ptr->width;
|
||||
/* png.c: png_pass_width[] = {8, 4, 4, 2, 2, 1, 1}; */
|
||||
png_uint_32 len = png_ptr->width &~7; /* reduce to mult. of 8 */
|
||||
int diff = (int) (png_ptr->width & 7); /* amount lost */
|
||||
register png_uint_32 final_val = len; /* GRR bugfix */
|
||||
|
||||
srcptr = png_ptr->row_buf + 1 + initial_val;
|
||||
dstptr = row + initial_val;
|
||||
@@ -646,16 +665,30 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
|
||||
srcptr += stride;
|
||||
dstptr += stride;
|
||||
}
|
||||
} /* end of else */
|
||||
if (diff) /* number of leftover pixels: 3 for pngtest */
|
||||
{
|
||||
final_val+=diff /* *BPP1 */ ;
|
||||
for (; i < final_val; i += stride)
|
||||
{
|
||||
if (rep_bytes > (int)(final_val-i))
|
||||
rep_bytes = (int)(final_val-i);
|
||||
png_memcpy(dstptr, srcptr, rep_bytes);
|
||||
srcptr += stride;
|
||||
dstptr += stride;
|
||||
}
|
||||
}
|
||||
|
||||
} /* end of else (_mmx_supported) */
|
||||
|
||||
break;
|
||||
} // end 8 bpp
|
||||
} /* end 8 bpp */
|
||||
|
||||
case 16: // png_ptr->row_info.pixel_depth
|
||||
case 16: /* png_ptr->row_info.pixel_depth */
|
||||
{
|
||||
png_bytep srcptr;
|
||||
png_bytep dstptr;
|
||||
|
||||
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
|
||||
if ( _mmx_supported )
|
||||
{
|
||||
png_uint_32 len;
|
||||
@@ -669,7 +702,7 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
|
||||
srcptr = png_ptr->row_buf + 1;
|
||||
dstptr = row;
|
||||
len = png_ptr->width &~7; // reduce to multiple of 8
|
||||
diff = png_ptr->width & 7; // amount lost
|
||||
diff = (int) (png_ptr->width & 7); // amount lost //
|
||||
|
||||
__asm__ __volatile__ (
|
||||
"movd _unmask, %%mm7 \n\t" // load bit pattern
|
||||
@@ -759,15 +792,18 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
|
||||
);
|
||||
}
|
||||
else /* mmx _not supported - Use modified C routine */
|
||||
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
|
||||
{
|
||||
register png_uint_32 i;
|
||||
png_uint_32 initial_val = 2 * png_pass_start[png_ptr->pass];
|
||||
// png.c: png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
|
||||
register int stride = 2 * png_pass_inc[png_ptr->pass];
|
||||
// png.c: png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
|
||||
register int rep_bytes = 2 * png_pass_width[png_ptr->pass];
|
||||
// png.c: png_pass_width[] = {8, 4, 4, 2, 2, 1, 1};
|
||||
register png_uint_32 final_val = 2 * png_ptr->width;
|
||||
png_uint_32 initial_val = BPP2 * png_pass_start[png_ptr->pass];
|
||||
/* png.c: png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; */
|
||||
register int stride = BPP2 * png_pass_inc[png_ptr->pass];
|
||||
/* png.c: png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; */
|
||||
register int rep_bytes = BPP2 * png_pass_width[png_ptr->pass];
|
||||
/* png.c: png_pass_width[] = {8, 4, 4, 2, 2, 1, 1}; */
|
||||
png_uint_32 len = png_ptr->width &~7; /* reduce to mult. of 8 */
|
||||
int diff = (int) (png_ptr->width & 7); /* amount lost */
|
||||
register png_uint_32 final_val = BPP2 * len; /* GRR bugfix */
|
||||
|
||||
srcptr = png_ptr->row_buf + 1 + initial_val;
|
||||
dstptr = row + initial_val;
|
||||
@@ -778,16 +814,29 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
|
||||
srcptr += stride;
|
||||
dstptr += stride;
|
||||
}
|
||||
} /* end of else */
|
||||
if (diff) /* number of leftover pixels: 3 for pngtest */
|
||||
{
|
||||
final_val+=diff*BPP2;
|
||||
for (; i < final_val; i += stride)
|
||||
{
|
||||
if (rep_bytes > (int)(final_val-i))
|
||||
rep_bytes = (int)(final_val-i);
|
||||
png_memcpy(dstptr, srcptr, rep_bytes);
|
||||
srcptr += stride;
|
||||
dstptr += stride;
|
||||
}
|
||||
}
|
||||
} /* end of else (_mmx_supported) */
|
||||
|
||||
break;
|
||||
} // end 16 bpp
|
||||
} /* end 16 bpp */
|
||||
|
||||
case 24: // png_ptr->row_info.pixel_depth
|
||||
case 24: /* png_ptr->row_info.pixel_depth */
|
||||
{
|
||||
png_bytep srcptr;
|
||||
png_bytep dstptr;
|
||||
|
||||
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
|
||||
if ( _mmx_supported )
|
||||
{
|
||||
png_uint_32 len;
|
||||
@@ -801,7 +850,7 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
|
||||
srcptr = png_ptr->row_buf + 1;
|
||||
dstptr = row;
|
||||
len = png_ptr->width &~7; // reduce to multiple of 8
|
||||
diff = png_ptr->width & 7; // amount lost
|
||||
diff = (int) (png_ptr->width & 7); // amount lost //
|
||||
|
||||
__asm__ __volatile__ (
|
||||
"movd _unmask, %%mm7 \n\t" // load bit pattern
|
||||
@@ -906,15 +955,18 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
|
||||
);
|
||||
}
|
||||
else /* mmx _not supported - Use modified C routine */
|
||||
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
|
||||
{
|
||||
register png_uint_32 i;
|
||||
png_uint_32 initial_val = 3 * png_pass_start[png_ptr->pass];
|
||||
// png.c: png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
|
||||
register int stride = 3 * png_pass_inc[png_ptr->pass];
|
||||
// png.c: png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
|
||||
register int rep_bytes = 3 * png_pass_width[png_ptr->pass];
|
||||
// png.c: png_pass_width[] = {8, 4, 4, 2, 2, 1, 1};
|
||||
register png_uint_32 final_val = 3 * png_ptr->width;
|
||||
png_uint_32 initial_val = BPP3 * png_pass_start[png_ptr->pass];
|
||||
/* png.c: png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; */
|
||||
register int stride = BPP3 * png_pass_inc[png_ptr->pass];
|
||||
/* png.c: png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; */
|
||||
register int rep_bytes = BPP3 * png_pass_width[png_ptr->pass];
|
||||
/* png.c: png_pass_width[] = {8, 4, 4, 2, 2, 1, 1}; */
|
||||
png_uint_32 len = png_ptr->width &~7; /* reduce to mult. of 8 */
|
||||
int diff = (int) (png_ptr->width & 7); /* amount lost */
|
||||
register png_uint_32 final_val = BPP3 * len; /* GRR bugfix */
|
||||
|
||||
srcptr = png_ptr->row_buf + 1 + initial_val;
|
||||
dstptr = row + initial_val;
|
||||
@@ -925,16 +977,29 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
|
||||
srcptr += stride;
|
||||
dstptr += stride;
|
||||
}
|
||||
} /* end of else */
|
||||
if (diff) /* number of leftover pixels: 3 for pngtest */
|
||||
{
|
||||
final_val+=diff*BPP3;
|
||||
for (; i < final_val; i += stride)
|
||||
{
|
||||
if (rep_bytes > (int)(final_val-i))
|
||||
rep_bytes = (int)(final_val-i);
|
||||
png_memcpy(dstptr, srcptr, rep_bytes);
|
||||
srcptr += stride;
|
||||
dstptr += stride;
|
||||
}
|
||||
}
|
||||
} /* end of else (_mmx_supported) */
|
||||
|
||||
break;
|
||||
} // end 24 bpp
|
||||
} /* end 24 bpp */
|
||||
|
||||
case 32: // png_ptr->row_info.pixel_depth
|
||||
case 32: /* png_ptr->row_info.pixel_depth */
|
||||
{
|
||||
png_bytep srcptr;
|
||||
png_bytep dstptr;
|
||||
|
||||
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
|
||||
if ( _mmx_supported )
|
||||
{
|
||||
png_uint_32 len;
|
||||
@@ -948,7 +1013,7 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
|
||||
srcptr = png_ptr->row_buf + 1;
|
||||
dstptr = row;
|
||||
len = png_ptr->width &~7; // reduce to multiple of 8
|
||||
diff = png_ptr->width & 7; // amount lost
|
||||
diff = (int) (png_ptr->width & 7); // amount lost //
|
||||
|
||||
__asm__ __volatile__ (
|
||||
"movd _unmask, %%mm7 \n\t" // load bit pattern
|
||||
@@ -1060,15 +1125,18 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
|
||||
);
|
||||
}
|
||||
else /* mmx _not supported - Use modified C routine */
|
||||
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
|
||||
{
|
||||
register png_uint_32 i;
|
||||
png_uint_32 initial_val = 4 * png_pass_start[png_ptr->pass];
|
||||
// png.c: png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
|
||||
register int stride = 4 * png_pass_inc[png_ptr->pass];
|
||||
// png.c: png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
|
||||
register int rep_bytes = 4 * png_pass_width[png_ptr->pass];
|
||||
// png.c: png_pass_width[] = {8, 4, 4, 2, 2, 1, 1};
|
||||
register png_uint_32 final_val = 4 * png_ptr->width;
|
||||
png_uint_32 initial_val = BPP4 * png_pass_start[png_ptr->pass];
|
||||
/* png.c: png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; */
|
||||
register int stride = BPP4 * png_pass_inc[png_ptr->pass];
|
||||
/* png.c: png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; */
|
||||
register int rep_bytes = BPP4 * png_pass_width[png_ptr->pass];
|
||||
/* png.c: png_pass_width[] = {8, 4, 4, 2, 2, 1, 1}; */
|
||||
png_uint_32 len = png_ptr->width &~7; /* reduce to mult. of 8 */
|
||||
int diff = (int) (png_ptr->width & 7); /* amount lost */
|
||||
register png_uint_32 final_val = BPP4 * len; /* GRR bugfix */
|
||||
|
||||
srcptr = png_ptr->row_buf + 1 + initial_val;
|
||||
dstptr = row + initial_val;
|
||||
@@ -1079,16 +1147,29 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
|
||||
srcptr += stride;
|
||||
dstptr += stride;
|
||||
}
|
||||
} /* end of else */
|
||||
if (diff) /* number of leftover pixels: 3 for pngtest */
|
||||
{
|
||||
final_val+=diff*BPP4;
|
||||
for (; i < final_val; i += stride)
|
||||
{
|
||||
if (rep_bytes > (int)(final_val-i))
|
||||
rep_bytes = (int)(final_val-i);
|
||||
png_memcpy(dstptr, srcptr, rep_bytes);
|
||||
srcptr += stride;
|
||||
dstptr += stride;
|
||||
}
|
||||
}
|
||||
} /* end of else (_mmx_supported) */
|
||||
|
||||
break;
|
||||
} // end 32 bpp
|
||||
} /* end 32 bpp */
|
||||
|
||||
case 48: // png_ptr->row_info.pixel_depth
|
||||
case 48: /* png_ptr->row_info.pixel_depth */
|
||||
{
|
||||
png_bytep srcptr;
|
||||
png_bytep dstptr;
|
||||
|
||||
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
|
||||
if ( _mmx_supported )
|
||||
{
|
||||
png_uint_32 len;
|
||||
@@ -1102,7 +1183,7 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
|
||||
srcptr = png_ptr->row_buf + 1;
|
||||
dstptr = row;
|
||||
len = png_ptr->width &~7; // reduce to multiple of 8
|
||||
diff = png_ptr->width & 7; // amount lost
|
||||
diff = (int) (png_ptr->width & 7); // amount lost //
|
||||
|
||||
__asm__ __volatile__ (
|
||||
"movd _unmask, %%mm7 \n\t" // load bit pattern
|
||||
@@ -1231,15 +1312,18 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
|
||||
);
|
||||
}
|
||||
else /* mmx _not supported - Use modified C routine */
|
||||
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
|
||||
{
|
||||
register png_uint_32 i;
|
||||
png_uint_32 initial_val = 6 * png_pass_start[png_ptr->pass];
|
||||
// png.c: png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
|
||||
register int stride = 6 * png_pass_inc[png_ptr->pass];
|
||||
// png.c: png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
|
||||
register int rep_bytes = 6 * png_pass_width[png_ptr->pass];
|
||||
// png.c: png_pass_width[] = {8, 4, 4, 2, 2, 1, 1};
|
||||
register png_uint_32 final_val = 6 * png_ptr->width;
|
||||
png_uint_32 initial_val = BPP6 * png_pass_start[png_ptr->pass];
|
||||
/* png.c: png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; */
|
||||
register int stride = BPP6 * png_pass_inc[png_ptr->pass];
|
||||
/* png.c: png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; */
|
||||
register int rep_bytes = BPP6 * png_pass_width[png_ptr->pass];
|
||||
/* png.c: png_pass_width[] = {8, 4, 4, 2, 2, 1, 1}; */
|
||||
png_uint_32 len = png_ptr->width &~7; /* reduce to mult. of 8 */
|
||||
int diff = (int) (png_ptr->width & 7); /* amount lost */
|
||||
register png_uint_32 final_val = BPP6 * len; /* GRR bugfix */
|
||||
|
||||
srcptr = png_ptr->row_buf + 1 + initial_val;
|
||||
dstptr = row + initial_val;
|
||||
@@ -1250,23 +1334,37 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
|
||||
srcptr += stride;
|
||||
dstptr += stride;
|
||||
}
|
||||
} /* end of else */
|
||||
if (diff) /* number of leftover pixels: 3 for pngtest */
|
||||
{
|
||||
final_val+=diff*BPP6;
|
||||
for (; i < final_val; i += stride)
|
||||
{
|
||||
if (rep_bytes > (int)(final_val-i))
|
||||
rep_bytes = (int)(final_val-i);
|
||||
png_memcpy(dstptr, srcptr, rep_bytes);
|
||||
srcptr += stride;
|
||||
dstptr += stride;
|
||||
}
|
||||
}
|
||||
} /* end of else (_mmx_supported) */
|
||||
|
||||
break;
|
||||
} // end 48 bpp
|
||||
} /* end 48 bpp */
|
||||
|
||||
case 64: // png_ptr->row_info.pixel_depth
|
||||
case 64: /* png_ptr->row_info.pixel_depth */
|
||||
{
|
||||
png_bytep srcptr;
|
||||
png_bytep dstptr;
|
||||
register png_uint_32 i;
|
||||
png_uint_32 initial_val = 8 * png_pass_start[png_ptr->pass];
|
||||
// png.c: png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
|
||||
register int stride = 8 * png_pass_inc[png_ptr->pass];
|
||||
// png.c: png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
|
||||
register int rep_bytes = 8 * png_pass_width[png_ptr->pass];
|
||||
// png.c: png_pass_width[] = {8, 4, 4, 2, 2, 1, 1};
|
||||
register png_uint_32 final_val = 8 * png_ptr->width;
|
||||
png_uint_32 initial_val = BPP8 * png_pass_start[png_ptr->pass];
|
||||
/* png.c: png_pass_start[] = {0, 4, 0, 2, 0, 1, 0}; */
|
||||
register int stride = BPP8 * png_pass_inc[png_ptr->pass];
|
||||
/* png.c: png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1}; */
|
||||
register int rep_bytes = BPP8 * png_pass_width[png_ptr->pass];
|
||||
/* png.c: png_pass_width[] = {8, 4, 4, 2, 2, 1, 1}; */
|
||||
png_uint_32 len = png_ptr->width &~7; /* reduce to mult. of 8 */
|
||||
int diff = (int) (png_ptr->width & 7); /* amount lost */
|
||||
register png_uint_32 final_val = BPP8 * len; /* GRR bugfix */
|
||||
|
||||
srcptr = png_ptr->row_buf + 1 + initial_val;
|
||||
dstptr = row + initial_val;
|
||||
@@ -1277,12 +1375,25 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
|
||||
srcptr += stride;
|
||||
dstptr += stride;
|
||||
}
|
||||
break;
|
||||
} // end 64 bpp
|
||||
if (diff) /* number of leftover pixels: 3 for pngtest */
|
||||
{
|
||||
final_val+=diff*BPP8;
|
||||
for (; i < final_val; i += stride)
|
||||
{
|
||||
if (rep_bytes > (int)(final_val-i))
|
||||
rep_bytes = (int)(final_val-i);
|
||||
png_memcpy(dstptr, srcptr, rep_bytes);
|
||||
srcptr += stride;
|
||||
dstptr += stride;
|
||||
}
|
||||
}
|
||||
|
||||
default: // png_ptr->row_info.pixel_depth != 1,2,4,8,16,24,32,48,64
|
||||
break;
|
||||
} /* end 64 bpp */
|
||||
|
||||
default: /* png_ptr->row_info.pixel_depth != 1,2,4,8,16,24,32,48,64 */
|
||||
{
|
||||
// this should never happen
|
||||
/* this should never happen */
|
||||
fprintf(stderr,
|
||||
"libpng internal error: png_ptr->row_info.pixel_depth = %d\n",
|
||||
png_ptr->row_info.pixel_depth);
|
||||
@@ -1300,11 +1411,11 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
|
||||
|
||||
|
||||
|
||||
//===========================================================================//
|
||||
// //
|
||||
// P N G _ D O _ R E A D _ I N T E R L A C E //
|
||||
// //
|
||||
//===========================================================================//
|
||||
/*===========================================================================*/
|
||||
/* */
|
||||
/* P N G _ D O _ R E A D _ I N T E R L A C E */
|
||||
/* */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if defined(PNG_READ_INTERLACING_SUPPORTED)
|
||||
#if defined(PNG_HAVE_ASSEMBLER_READ_INTERLACE)
|
||||
@@ -1319,9 +1430,11 @@ png_do_read_interlace(png_structp png_ptr)
|
||||
png_row_infop row_info = &(png_ptr->row_info);
|
||||
png_bytep row = png_ptr->row_buf + 1;
|
||||
int pass = png_ptr->pass;
|
||||
#if defined(PNG_READ_PACKSWAP_SUPPORTED)
|
||||
png_uint_32 transformations = png_ptr->transformations;
|
||||
#endif
|
||||
|
||||
png_debug(1,"in png_do_read_interlace\n");
|
||||
png_debug(1, "in png_do_read_interlace (pnggccrd.c)\n");
|
||||
|
||||
if (_mmx_supported == 2) {
|
||||
png_mmx_support();
|
||||
@@ -1505,29 +1618,32 @@ png_do_read_interlace(png_structp png_ptr)
|
||||
break;
|
||||
}
|
||||
|
||||
//====================================================================
|
||||
/*====================================================================*/
|
||||
|
||||
default: // 8-bit or larger (this is where the routine is modified)
|
||||
default: /* 8-bit or larger (this is where the routine is modified) */
|
||||
{
|
||||
#if 0
|
||||
// static unsigned long long _const4 = 0x0000000000FFFFFFLL; no good
|
||||
// static unsigned long long const4 = 0x0000000000FFFFFFLL; no good
|
||||
// unsigned long long _const4 = 0x0000000000FFFFFFLL; no good
|
||||
// unsigned long long const4 = 0x0000000000FFFFFFLL; no good
|
||||
#endif
|
||||
png_bytep sptr, dp;
|
||||
png_uint_32 i;
|
||||
png_size_t pixel_bytes;
|
||||
int width = row_info->width;
|
||||
int width = (int)row_info->width;
|
||||
|
||||
pixel_bytes = (row_info->pixel_depth >> 3);
|
||||
|
||||
// point sptr at the last pixel in the pre-expanded row:
|
||||
/* point sptr at the last pixel in the pre-expanded row: */
|
||||
sptr = row + (width - 1) * pixel_bytes;
|
||||
|
||||
// point dp at the last pixel position in the expanded row:
|
||||
/* point dp at the last pixel position in the expanded row: */
|
||||
dp = row + (final_width - 1) * pixel_bytes;
|
||||
|
||||
// New code by Nirav Chhatrapati - Intel Corporation
|
||||
/* New code by Nirav Chhatrapati - Intel Corporation */
|
||||
|
||||
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
|
||||
if ( _mmx_supported )
|
||||
{
|
||||
//--------------------------------------------------------------
|
||||
@@ -1779,7 +1895,9 @@ png_do_read_interlace(png_structp png_ptr)
|
||||
*/
|
||||
|
||||
for (j = 0; j < png_pass_inc[pass]; j++)
|
||||
{
|
||||
*dp-- = *sptr;
|
||||
}
|
||||
--sptr;
|
||||
}
|
||||
}
|
||||
@@ -1832,7 +1950,9 @@ png_do_read_interlace(png_structp png_ptr)
|
||||
int j;
|
||||
|
||||
for (j = 0; j < png_pass_inc[pass]; j++)
|
||||
{
|
||||
*dp-- = *sptr;
|
||||
}
|
||||
--sptr;
|
||||
}
|
||||
}
|
||||
@@ -1884,7 +2004,9 @@ png_do_read_interlace(png_structp png_ptr)
|
||||
int j;
|
||||
|
||||
for (j = 0; j < png_pass_inc[pass]; j++)
|
||||
{
|
||||
*dp-- = *sptr;
|
||||
}
|
||||
--sptr;
|
||||
}
|
||||
}
|
||||
@@ -2409,10 +2531,11 @@ png_do_read_interlace(png_structp png_ptr)
|
||||
} // end of _mmx_supported ========================================
|
||||
|
||||
else /* MMX not supported: use modified C code - takes advantage
|
||||
* of inlining of memcpy for a constant */
|
||||
* of inlining of png_memcpy for a constant */
|
||||
/* GRR 19991007: does it? or should pixel_bytes in each
|
||||
* block be replaced with immediate value (e.g., 1)? */
|
||||
/* GRR 19991017: replaced with constants in each case */
|
||||
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
|
||||
{
|
||||
if (pixel_bytes == 1)
|
||||
{
|
||||
@@ -2420,7 +2543,9 @@ png_do_read_interlace(png_structp png_ptr)
|
||||
{
|
||||
int j;
|
||||
for (j = 0; j < png_pass_inc[pass]; j++)
|
||||
{
|
||||
*dp-- = *sptr;
|
||||
}
|
||||
--sptr;
|
||||
}
|
||||
}
|
||||
@@ -2463,6 +2588,14 @@ png_do_read_interlace(png_structp png_ptr)
|
||||
png_memcpy(v, sptr, 4);
|
||||
for (j = 0; j < png_pass_inc[pass]; j++)
|
||||
{
|
||||
#ifdef PNG_DEBUG
|
||||
if (dp < row || dp+3 > row+png_ptr->row_buf_size)
|
||||
{
|
||||
printf("dp out of bounds: row=%d, dp=%d, rp=%d\n",row, dp,
|
||||
row+png_ptr->row_buf_size);
|
||||
printf("row_buf=%d\n",png_ptr->row_buf_size);
|
||||
}
|
||||
#endif
|
||||
png_memcpy(dp, v, 4);
|
||||
dp -= 4;
|
||||
}
|
||||
@@ -2499,7 +2632,7 @@ png_do_read_interlace(png_structp png_ptr)
|
||||
sptr -= 8;
|
||||
}
|
||||
}
|
||||
else // GRR: should never be reached
|
||||
else /* GRR: should never be reached */
|
||||
{
|
||||
for (i = width; i; i--)
|
||||
{
|
||||
@@ -2533,6 +2666,8 @@ png_do_read_interlace(png_structp png_ptr)
|
||||
|
||||
|
||||
|
||||
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
|
||||
|
||||
// These variables are utilized in the functions below. They are declared
|
||||
// globally here to ensure alignment on 8-byte boundaries.
|
||||
|
||||
@@ -2545,7 +2680,6 @@ union uAll {
|
||||
|
||||
|
||||
|
||||
|
||||
//===========================================================================//
|
||||
// //
|
||||
// P N G _ R E A D _ F I L T E R _ R O W _ M M X _ A V G //
|
||||
@@ -4739,18 +4873,20 @@ png_read_filter_row_mmx_up(png_row_infop row_info, png_bytep row,
|
||||
|
||||
} // end of png_read_filter_row_mmx_up()
|
||||
|
||||
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
|
||||
|
||||
|
||||
|
||||
//===========================================================================//
|
||||
// //
|
||||
// P N G _ R E A D _ F I L T E R _ R O W //
|
||||
// //
|
||||
//===========================================================================//
|
||||
|
||||
/*===========================================================================*/
|
||||
/* */
|
||||
/* P N G _ R E A D _ F I L T E R _ R O W */
|
||||
/* */
|
||||
/*===========================================================================*/
|
||||
|
||||
#if defined(PNG_HAVE_ASSEMBLER_READ_FILTER_ROW)
|
||||
|
||||
// Optimized png_read_filter_row routines
|
||||
/* Optimized png_read_filter_row routines */
|
||||
|
||||
void /* PRIVATE */
|
||||
png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep
|
||||
@@ -4760,6 +4896,7 @@ png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep
|
||||
char filnm[10];
|
||||
#endif
|
||||
|
||||
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
|
||||
/* GRR: these are superseded by png_ptr->asm_flags: */
|
||||
#define UseMMX_sub 1 // GRR: converted 20000730
|
||||
#define UseMMX_up 1 // GRR: converted 20000729
|
||||
@@ -4769,9 +4906,10 @@ png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep
|
||||
if (_mmx_supported == 2) {
|
||||
png_mmx_support();
|
||||
}
|
||||
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
|
||||
|
||||
#ifdef PNG_DEBUG
|
||||
png_debug(1, "in png_read_filter_row\n");
|
||||
png_debug(1, "in png_read_filter_row (pnggccrd.c)\n");
|
||||
switch (filter)
|
||||
{
|
||||
case 0: sprintf(filnm, "none");
|
||||
@@ -4800,13 +4938,15 @@ png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep
|
||||
break;
|
||||
|
||||
case PNG_FILTER_VALUE_SUB:
|
||||
if (
|
||||
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
|
||||
if ( _mmx_supported &&
|
||||
(row_info->pixel_depth >= PNG_MMX_BITDEPTH_THRESHOLD_DEFAULT) &&
|
||||
(row_info->rowbytes >= PNG_MMX_ROWBYTES_THRESHOLD_DEFAULT))
|
||||
{
|
||||
png_read_filter_row_mmx_sub(row_info, row);
|
||||
}
|
||||
else
|
||||
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
|
||||
{
|
||||
png_uint_32 i;
|
||||
png_uint_32 istop = row_info->rowbytes;
|
||||
@@ -4819,17 +4959,19 @@ png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep
|
||||
*rp = (png_byte)(((int)(*rp) + (int)(*lp++)) & 0xff);
|
||||
rp++;
|
||||
}
|
||||
} //end !UseMMX_sub
|
||||
} /* end !UseMMX_sub */
|
||||
break;
|
||||
|
||||
case PNG_FILTER_VALUE_UP:
|
||||
if (
|
||||
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
|
||||
if ( _mmx_supported &&
|
||||
(row_info->pixel_depth >= PNG_MMX_BITDEPTH_THRESHOLD_DEFAULT) &&
|
||||
(row_info->rowbytes >= PNG_MMX_ROWBYTES_THRESHOLD_DEFAULT))
|
||||
{
|
||||
png_read_filter_row_mmx_up(row_info, row, prev_row);
|
||||
}
|
||||
else
|
||||
else
|
||||
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
|
||||
{
|
||||
png_uint_32 i;
|
||||
png_uint_32 istop = row_info->rowbytes;
|
||||
@@ -4841,17 +4983,19 @@ png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep
|
||||
*rp = (png_byte)(((int)(*rp) + (int)(*pp++)) & 0xff);
|
||||
rp++;
|
||||
}
|
||||
} //end !UseMMX_up
|
||||
} /* end !UseMMX_up */
|
||||
break;
|
||||
|
||||
case PNG_FILTER_VALUE_AVG:
|
||||
if (
|
||||
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
|
||||
if ( _mmx_supported &&
|
||||
(row_info->pixel_depth >= PNG_MMX_BITDEPTH_THRESHOLD_DEFAULT) &&
|
||||
(row_info->rowbytes >= PNG_MMX_ROWBYTES_THRESHOLD_DEFAULT))
|
||||
{
|
||||
png_read_filter_row_mmx_avg(row_info, row, prev_row);
|
||||
}
|
||||
else
|
||||
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
|
||||
{
|
||||
png_uint_32 i;
|
||||
png_bytep rp = row;
|
||||
@@ -4873,17 +5017,19 @@ png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep
|
||||
((int)(*pp++ + *lp++) >> 1)) & 0xff);
|
||||
rp++;
|
||||
}
|
||||
} //end !UseMMX_avg
|
||||
} /* end !UseMMX_avg */
|
||||
break;
|
||||
|
||||
case PNG_FILTER_VALUE_PAETH:
|
||||
if (
|
||||
#if defined(PNG_ASSEMBLER_CODE_SUPPORTED)
|
||||
if ( _mmx_supported &&
|
||||
(row_info->pixel_depth >= PNG_MMX_BITDEPTH_THRESHOLD_DEFAULT) &&
|
||||
(row_info->rowbytes >= PNG_MMX_ROWBYTES_THRESHOLD_DEFAULT))
|
||||
{
|
||||
png_read_filter_row_mmx_paeth(row_info, row, prev_row);
|
||||
}
|
||||
else
|
||||
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED */
|
||||
{
|
||||
png_uint_32 i;
|
||||
png_bytep rp = row;
|
||||
@@ -4934,7 +5080,7 @@ png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep
|
||||
*rp = (png_byte)(((int)(*rp) + p) & 0xff);
|
||||
rp++;
|
||||
}
|
||||
} //end !UseMMX_paeth
|
||||
} /* end !UseMMX_paeth */
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -4947,30 +5093,27 @@ png_read_filter_row(png_structp png_ptr, png_row_infop row_info, png_bytep
|
||||
#endif /* PNG_HAVE_ASSEMBLER_READ_FILTER_ROW */
|
||||
|
||||
|
||||
/*===========================================================================*/
|
||||
/* */
|
||||
/* P N G _ M M X _ S U P P O R T */
|
||||
/* */
|
||||
/*===========================================================================*/
|
||||
|
||||
|
||||
//===========================================================================//
|
||||
// //
|
||||
// M M X S U P P O R T //
|
||||
// //
|
||||
//===========================================================================//
|
||||
|
||||
// GRR NOTES: (1) the following code assumes 386 or better (pushfl/popfl)
|
||||
// (2) all instructions compile with gcc 2.7.2.3 and later
|
||||
// (3) the function is moved down here to prevent gcc from
|
||||
// inlining it in multiple places and then barfing be-
|
||||
// cause the ".NOT_SUPPORTED" label is multiply defined
|
||||
// [is there a way to signal that a *single* function should
|
||||
// not be inlined? is there a way to modify the label for
|
||||
// each inlined instance, e.g., by appending _1, _2, etc.?
|
||||
// maybe if don't use leading "." in label name? (nope...sigh)]
|
||||
|
||||
// GRR TO DO: make sure PNGAPI doesn't do/require anything screwy here
|
||||
// [looks OK for everybody except possibly Cygwin (__cdecl)]
|
||||
/* GRR NOTES: (1) the following code assumes 386 or better (pushfl/popfl)
|
||||
* (2) all instructions compile with gcc 2.7.2.3 and later
|
||||
* (3) the function is moved down here to prevent gcc from
|
||||
* inlining it in multiple places and then barfing be-
|
||||
* cause the ".NOT_SUPPORTED" label is multiply defined
|
||||
* [is there a way to signal that a *single* function should
|
||||
* not be inlined? is there a way to modify the label for
|
||||
* each inlined instance, e.g., by appending _1, _2, etc.?
|
||||
* maybe if don't use leading "." in label name? (nope...sigh)]
|
||||
*/
|
||||
|
||||
int PNGAPI
|
||||
png_mmx_support(void)
|
||||
{
|
||||
#if defined(PNG_MMX_CODE_SUPPORTED)
|
||||
__asm__ __volatile__ (
|
||||
"pushl %%ebx \n\t" // ebx gets clobbered by CPUID instruction
|
||||
"pushl %%ecx \n\t" // so does ecx...
|
||||
@@ -5005,18 +5148,16 @@ png_mmx_support(void)
|
||||
"jz .NOT_SUPPORTED \n\t" // non-zero = yes, MMX IS supported
|
||||
|
||||
"movl $1, %%eax \n\t" // set return value to 1
|
||||
"movl %%eax, _mmx_supported \n\t" // save in global static variable, too
|
||||
"popl %%edx \n\t" // restore edx
|
||||
"popl %%ecx \n\t" // restore ecx
|
||||
"popl %%ebx \n\t" // restore ebx ("row" in png_do_interlace)
|
||||
"ret \n\t" // DONE: have MMX support
|
||||
"jmp .RETURN \n\t" // DONE: have MMX support
|
||||
|
||||
".NOT_SUPPORTED: \n\t" // target label for jump instructions
|
||||
"movl $0, %%eax \n\t" // set return value to 0
|
||||
".RETURN: \n\t" // target label for jump instructions
|
||||
"movl %%eax, _mmx_supported \n\t" // save in global static variable, too
|
||||
"popl %%edx \n\t" // restore edx
|
||||
"popl %%ecx \n\t" // restore ecx
|
||||
"popl %%ebx \n\t" // restore ebx ("row" in png_do_interlace)
|
||||
"popl %%ebx \n\t" // restore ebx
|
||||
|
||||
// "ret \n\t" // DONE: no MMX support
|
||||
// (fall through to standard C "ret")
|
||||
|
||||
@@ -5029,8 +5170,11 @@ png_mmx_support(void)
|
||||
// , "memory" // if write to a variable gcc thought was in a reg
|
||||
// , "cc" // "condition codes" (flag bits)
|
||||
);
|
||||
#else
|
||||
_mmx_supported = 0;
|
||||
#endif /* PNG_MMX_CODE_SUPPORTED */
|
||||
|
||||
// return %%eax;
|
||||
return _mmx_supported;
|
||||
}
|
||||
|
||||
#endif /* PNG_ASSEMBLER_CODE_SUPPORTED && PNG_USE_PNGGCCRD */
|
||||
#endif /* PNG_USE_PNGGCCRD */
|
||||
|
||||
42
pngget.c
42
pngget.c
@@ -1,9 +1,9 @@
|
||||
|
||||
/* pngget.c - retrieval of values from info struct
|
||||
*
|
||||
* libpng 1.0.9beta8 - January 12, 2001
|
||||
* libpng 1.0.11beta3 - April 15, 2001
|
||||
* For conditions of distribution and use, see copyright notice in png.h
|
||||
* Copyright (c) 1998, 1999, 2000, 2001 Glenn Randers-Pehrson
|
||||
* Copyright (c) 1998-2001 Glenn Randers-Pehrson
|
||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||
*/
|
||||
@@ -297,7 +297,7 @@ png_get_y_offset_inches(png_structp png_ptr, png_infop info_ptr)
|
||||
*.00003937);
|
||||
}
|
||||
|
||||
#if defined(PNG_READ_pHYs_SUPPORTED)
|
||||
#if defined(PNG_pHYs_SUPPORTED)
|
||||
png_uint_32 PNGAPI
|
||||
png_get_pHYs_dpi(png_structp png_ptr, png_infop info_ptr,
|
||||
png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)
|
||||
@@ -330,7 +330,7 @@ png_get_pHYs_dpi(png_structp png_ptr, png_infop info_ptr,
|
||||
}
|
||||
return (retval);
|
||||
}
|
||||
#endif /* PNG_READ_pHYs_SUPPORTED */
|
||||
#endif /* PNG_pHYs_SUPPORTED */
|
||||
#endif /* PNG_INCH_CONVERSIONS && PNG_FLOATING_POINT_SUPPORTED */
|
||||
|
||||
/* png_get_channels really belongs in here, too, but it's been around longer */
|
||||
@@ -355,7 +355,7 @@ png_get_signature(png_structp png_ptr, png_infop info_ptr)
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
#if defined(PNG_READ_bKGD_SUPPORTED)
|
||||
#if defined(PNG_bKGD_SUPPORTED)
|
||||
png_uint_32 PNGAPI
|
||||
png_get_bKGD(png_structp png_ptr, png_infop info_ptr,
|
||||
png_color_16p *background)
|
||||
@@ -371,7 +371,7 @@ png_get_bKGD(png_structp png_ptr, png_infop info_ptr,
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_cHRM_SUPPORTED)
|
||||
#if defined(PNG_cHRM_SUPPORTED)
|
||||
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
||||
png_uint_32 PNGAPI
|
||||
png_get_cHRM(png_structp png_ptr, png_infop info_ptr,
|
||||
@@ -435,7 +435,7 @@ png_get_cHRM_fixed(png_structp png_ptr, png_infop info_ptr,
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_gAMA_SUPPORTED)
|
||||
#if defined(PNG_gAMA_SUPPORTED)
|
||||
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
||||
png_uint_32 PNGAPI
|
||||
png_get_gAMA(png_structp png_ptr, png_infop info_ptr, double *file_gamma)
|
||||
@@ -467,7 +467,7 @@ png_get_gAMA_fixed(png_structp png_ptr, png_infop info_ptr,
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_sRGB_SUPPORTED)
|
||||
#if defined(PNG_sRGB_SUPPORTED)
|
||||
png_uint_32 PNGAPI
|
||||
png_get_sRGB(png_structp png_ptr, png_infop info_ptr, int *file_srgb_intent)
|
||||
{
|
||||
@@ -482,7 +482,7 @@ png_get_sRGB(png_structp png_ptr, png_infop info_ptr, int *file_srgb_intent)
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_iCCP_SUPPORTED)
|
||||
#if defined(PNG_iCCP_SUPPORTED)
|
||||
png_uint_32 PNGAPI
|
||||
png_get_iCCP(png_structp png_ptr, png_infop info_ptr,
|
||||
png_charpp name, int *compression_type,
|
||||
@@ -504,7 +504,7 @@ png_get_iCCP(png_structp png_ptr, png_infop info_ptr,
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_sPLT_SUPPORTED)
|
||||
#if defined(PNG_sPLT_SUPPORTED)
|
||||
png_uint_32 PNGAPI
|
||||
png_get_sPLT(png_structp png_ptr, png_infop info_ptr,
|
||||
png_sPLT_tpp spalettes)
|
||||
@@ -515,7 +515,7 @@ png_get_sPLT(png_structp png_ptr, png_infop info_ptr,
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_hIST_SUPPORTED)
|
||||
#if defined(PNG_hIST_SUPPORTED)
|
||||
png_uint_32 PNGAPI
|
||||
png_get_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_16p *hist)
|
||||
{
|
||||
@@ -576,7 +576,7 @@ png_get_IHDR(png_structp png_ptr, png_infop info_ptr,
|
||||
return (0);
|
||||
}
|
||||
|
||||
#if defined(PNG_READ_oFFs_SUPPORTED)
|
||||
#if defined(PNG_oFFs_SUPPORTED)
|
||||
png_uint_32 PNGAPI
|
||||
png_get_oFFs(png_structp png_ptr, png_infop info_ptr,
|
||||
png_int_32 *offset_x, png_int_32 *offset_y, int *unit_type)
|
||||
@@ -594,7 +594,7 @@ png_get_oFFs(png_structp png_ptr, png_infop info_ptr,
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_pCAL_SUPPORTED)
|
||||
#if defined(PNG_pCAL_SUPPORTED)
|
||||
png_uint_32 PNGAPI
|
||||
png_get_pCAL(png_structp png_ptr, png_infop info_ptr,
|
||||
png_charp *purpose, png_int_32 *X0, png_int_32 *X1, int *type, int *nparams,
|
||||
@@ -618,7 +618,7 @@ png_get_pCAL(png_structp png_ptr, png_infop info_ptr,
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_sCAL_SUPPORTED) || defined(PNG_WRITE_sCAL_SUPPORTED)
|
||||
#if defined(PNG_sCAL_SUPPORTED)
|
||||
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
||||
png_uint_32 PNGAPI
|
||||
png_get_sCAL(png_structp png_ptr, png_infop info_ptr,
|
||||
@@ -654,7 +654,7 @@ png_get_sCAL_s(png_structp png_ptr, png_infop info_ptr,
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_pHYs_SUPPORTED)
|
||||
#if defined(PNG_pHYs_SUPPORTED)
|
||||
png_uint_32 PNGAPI
|
||||
png_get_pHYs(png_structp png_ptr, png_infop info_ptr,
|
||||
png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)
|
||||
@@ -701,7 +701,7 @@ png_get_PLTE(png_structp png_ptr, png_infop info_ptr, png_colorp *palette,
|
||||
return (0);
|
||||
}
|
||||
|
||||
#if defined(PNG_READ_sBIT_SUPPORTED)
|
||||
#if defined(PNG_sBIT_SUPPORTED)
|
||||
png_uint_32 PNGAPI
|
||||
png_get_sBIT(png_structp png_ptr, png_infop info_ptr, png_color_8p *sig_bit)
|
||||
{
|
||||
@@ -716,7 +716,7 @@ png_get_sBIT(png_structp png_ptr, png_infop info_ptr, png_color_8p *sig_bit)
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_TEXT_SUPPORTED)
|
||||
#if defined(PNG_TEXT_SUPPORTED)
|
||||
png_uint_32 PNGAPI
|
||||
png_get_text(png_structp png_ptr, png_infop info_ptr, png_textp *text_ptr,
|
||||
int *num_text)
|
||||
@@ -738,7 +738,7 @@ png_get_text(png_structp png_ptr, png_infop info_ptr, png_textp *text_ptr,
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_tIME_SUPPORTED)
|
||||
#if defined(PNG_tIME_SUPPORTED)
|
||||
png_uint_32 PNGAPI
|
||||
png_get_tIME(png_structp png_ptr, png_infop info_ptr, png_timep *mod_time)
|
||||
{
|
||||
@@ -753,7 +753,7 @@ png_get_tIME(png_structp png_ptr, png_infop info_ptr, png_timep *mod_time)
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_tRNS_SUPPORTED)
|
||||
#if defined(PNG_tRNS_SUPPORTED)
|
||||
png_uint_32 PNGAPI
|
||||
png_get_tRNS(png_structp png_ptr, png_infop info_ptr,
|
||||
png_bytep *trans, int *num_trans, png_color_16p *trans_values)
|
||||
@@ -792,7 +792,7 @@ png_get_tRNS(png_structp png_ptr, png_infop info_ptr,
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
|
||||
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
|
||||
png_uint_32 PNGAPI
|
||||
png_get_unknown_chunks(png_structp png_ptr, png_infop info_ptr,
|
||||
png_unknown_chunkpp unknowns)
|
||||
@@ -811,7 +811,7 @@ png_get_rgb_to_gray_status (png_structp png_ptr)
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(PNG_READ_USER_CHUNKS_SUPPORTED)
|
||||
#if defined(PNG_USER_CHUNKS_SUPPORTED)
|
||||
png_voidp PNGAPI
|
||||
png_get_user_chunk_ptr(png_structp png_ptr)
|
||||
{
|
||||
|
||||
4
pngmem.c
4
pngmem.c
@@ -1,9 +1,9 @@
|
||||
|
||||
/* pngmem.c - stub functions for memory allocation
|
||||
*
|
||||
* libpng 1.0.9beta8 - January 12, 2001
|
||||
* libpng 1.0.11beta3 - April 15, 2001
|
||||
* For conditions of distribution and use, see copyright notice in png.h
|
||||
* Copyright (c) 1998, 1999, 2000, 2001 Glenn Randers-Pehrson
|
||||
* Copyright (c) 1998-2001 Glenn Randers-Pehrson
|
||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||
*
|
||||
|
||||
201
pngpread.c
201
pngpread.c
@@ -1,9 +1,9 @@
|
||||
|
||||
/* pngpread.c - read a png file in push mode
|
||||
*
|
||||
* libpng 1.0.9beta8 - January 12, 2001
|
||||
* libpng 1.0.11beta3 - April 15, 2001
|
||||
* For conditions of distribution and use, see copyright notice in png.h
|
||||
* Copyright (c) 1998, 1999, 2000, 2001 Glenn Randers-Pehrson
|
||||
* Copyright (c) 1998-2001 Glenn Randers-Pehrson
|
||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||
*/
|
||||
@@ -585,9 +585,18 @@ png_push_save_buffer(png_structp png_ptr)
|
||||
old_buffer = png_ptr->save_buffer;
|
||||
png_ptr->save_buffer = (png_bytep)png_malloc(png_ptr,
|
||||
(png_uint_32)new_max);
|
||||
png_memcpy(png_ptr->save_buffer, old_buffer, png_ptr->save_buffer_size);
|
||||
png_free(png_ptr, old_buffer);
|
||||
png_ptr->save_buffer_max = new_max;
|
||||
if (png_ptr->save_buffer == (png_bytep)NULL)
|
||||
{
|
||||
png_warning(png_ptr, "Malloc of save buffer failed");
|
||||
png_ptr->save_buffer=old_buffer;
|
||||
png_ptr->current_buffer_size = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
png_memcpy(png_ptr->save_buffer, old_buffer, png_ptr->save_buffer_size);
|
||||
png_free(png_ptr, old_buffer);
|
||||
png_ptr->save_buffer_max = new_max;
|
||||
}
|
||||
}
|
||||
if (png_ptr->current_buffer_size)
|
||||
{
|
||||
@@ -778,15 +787,36 @@ png_push_process_row(png_structp png_ptr)
|
||||
*/
|
||||
png_do_read_interlace(png_ptr);
|
||||
|
||||
switch (png_ptr->pass)
|
||||
{
|
||||
switch (png_ptr->pass)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < 8 && png_ptr->pass == 0; i++)
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
if (png_ptr->pass == 4 && png_ptr->height <= 4)
|
||||
{
|
||||
for (i = 0; i < 2 && png_ptr->pass == 4; i++)
|
||||
{
|
||||
png_push_have_row(png_ptr, NULL);
|
||||
png_read_push_finish_row(png_ptr);
|
||||
}
|
||||
}
|
||||
if (png_ptr->pass == 6 && png_ptr->height <= 4)
|
||||
{
|
||||
png_push_have_row(png_ptr, NULL);
|
||||
png_read_push_finish_row(png_ptr);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -798,7 +828,7 @@ png_push_process_row(png_structp png_ptr)
|
||||
png_push_have_row(png_ptr, png_ptr->row_buf + 1);
|
||||
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++)
|
||||
{
|
||||
@@ -821,6 +851,14 @@ png_push_process_row(png_structp png_ptr)
|
||||
png_push_have_row(png_ptr, NULL);
|
||||
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;
|
||||
}
|
||||
case 3:
|
||||
@@ -831,7 +869,7 @@ png_push_process_row(png_structp png_ptr)
|
||||
png_push_have_row(png_ptr, png_ptr->row_buf + 1);
|
||||
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++)
|
||||
{
|
||||
@@ -854,6 +892,11 @@ png_push_process_row(png_structp png_ptr)
|
||||
png_push_have_row(png_ptr, NULL);
|
||||
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;
|
||||
}
|
||||
case 5:
|
||||
@@ -864,7 +907,7 @@ png_push_process_row(png_structp png_ptr)
|
||||
png_push_have_row(png_ptr, png_ptr->row_buf + 1);
|
||||
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_read_push_finish_row(png_ptr);
|
||||
@@ -931,6 +974,11 @@ png_read_push_finish_row(png_structp png_ptr)
|
||||
do
|
||||
{
|
||||
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)
|
||||
break;
|
||||
|
||||
@@ -978,6 +1026,12 @@ png_push_handle_tEXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length
|
||||
|
||||
png_ptr->current_text = (png_charp)png_malloc(png_ptr,
|
||||
(png_uint_32)(length+1));
|
||||
if (png_ptr->current_text == (png_charp)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "malloc of current text failed");
|
||||
png_ptr->skip_length=length;
|
||||
return;
|
||||
}
|
||||
png_ptr->current_text[length] = '\0';
|
||||
png_ptr->current_text_ptr = png_ptr->current_text;
|
||||
png_ptr->current_text_size = (png_size_t)length;
|
||||
@@ -1029,6 +1083,11 @@ png_push_read_tEXt(png_structp png_ptr, png_infop info_ptr)
|
||||
text++;
|
||||
|
||||
text_ptr = (png_textp)png_malloc(png_ptr, (png_uint_32)sizeof(png_text));
|
||||
if (text_ptr == (png_textp)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "malloc of text buffer failed");
|
||||
return;
|
||||
}
|
||||
text_ptr->compression = PNG_TEXT_COMPRESSION_NONE;
|
||||
text_ptr->key = key;
|
||||
#ifdef PNG_iTXt_SUPPORTED
|
||||
@@ -1071,6 +1130,12 @@ png_push_handle_zTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length
|
||||
|
||||
png_ptr->current_text = (png_charp)png_malloc(png_ptr,
|
||||
(png_uint_32)(length+1));
|
||||
if (png_ptr->current_text == (png_charp)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "malloc of zTXt buffer failed");
|
||||
png_push_crc_skip(png_ptr, length);
|
||||
return;
|
||||
}
|
||||
png_ptr->current_text[length] = '\0';
|
||||
png_ptr->current_text_ptr = png_ptr->current_text;
|
||||
png_ptr->current_text_size = (png_size_t)length;
|
||||
@@ -1161,12 +1226,17 @@ png_push_read_zTXt(png_structp png_ptr, png_infop info_ptr)
|
||||
text = (png_charp)png_malloc(png_ptr,
|
||||
(png_uint_32)(png_ptr->zbuf_size - png_ptr->zstream.avail_out +
|
||||
key_size + 1));
|
||||
png_memcpy(text + key_size, png_ptr->zbuf,
|
||||
png_ptr->zbuf_size - png_ptr->zstream.avail_out);
|
||||
png_memcpy(text, key, key_size);
|
||||
text_size = key_size + png_ptr->zbuf_size -
|
||||
png_ptr->zstream.avail_out;
|
||||
*(text + text_size) = '\0';
|
||||
if (text == (png_charp)NULL)
|
||||
png_warning(png_ptr, "Malloc of text block failed");
|
||||
else
|
||||
{
|
||||
png_memcpy(text + key_size, png_ptr->zbuf,
|
||||
png_ptr->zbuf_size - png_ptr->zstream.avail_out);
|
||||
png_memcpy(text, key, key_size);
|
||||
text_size = key_size + png_ptr->zbuf_size -
|
||||
png_ptr->zstream.avail_out;
|
||||
*(text + text_size) = '\0';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1176,12 +1246,17 @@ png_push_read_zTXt(png_structp png_ptr, png_infop info_ptr)
|
||||
text = (png_charp)png_malloc(png_ptr, text_size +
|
||||
(png_uint_32)(png_ptr->zbuf_size - png_ptr->zstream.avail_out
|
||||
+ 1));
|
||||
png_memcpy(text, tmp, text_size);
|
||||
png_free(png_ptr, tmp);
|
||||
png_memcpy(text + text_size, png_ptr->zbuf,
|
||||
png_ptr->zbuf_size - png_ptr->zstream.avail_out);
|
||||
text_size += png_ptr->zbuf_size - png_ptr->zstream.avail_out;
|
||||
*(text + text_size) = '\0';
|
||||
if (text != (png_charp)NULL)
|
||||
png_warning(png_ptr, "Malloc of new text block failed");
|
||||
else
|
||||
{
|
||||
png_memcpy(text, tmp, text_size);
|
||||
png_free(png_ptr, tmp);
|
||||
png_memcpy(text + text_size, png_ptr->zbuf,
|
||||
png_ptr->zbuf_size - png_ptr->zstream.avail_out);
|
||||
text_size += png_ptr->zbuf_size - png_ptr->zstream.avail_out;
|
||||
*(text + text_size) = '\0';
|
||||
}
|
||||
}
|
||||
if (ret != Z_STREAM_END)
|
||||
{
|
||||
@@ -1213,18 +1288,23 @@ png_push_read_zTXt(png_structp png_ptr, png_infop info_ptr)
|
||||
text += key_size;
|
||||
|
||||
text_ptr = (png_textp)png_malloc(png_ptr, (png_uint_32)sizeof(png_text));
|
||||
text_ptr->compression = PNG_TEXT_COMPRESSION_zTXt;
|
||||
text_ptr->key = key;
|
||||
if (text_ptr == (png_textp)NULL)
|
||||
png_warning (png_ptr, "Malloc of iTXt failed");
|
||||
else
|
||||
{
|
||||
text_ptr->compression = PNG_TEXT_COMPRESSION_zTXt;
|
||||
text_ptr->key = key;
|
||||
#ifdef PNG_iTXt_SUPPORTED
|
||||
text_ptr->lang = (char *)NULL;
|
||||
text_ptr->lang_key = (char *)NULL;
|
||||
text_ptr->lang = (char *)NULL;
|
||||
text_ptr->lang_key = (char *)NULL;
|
||||
#endif
|
||||
text_ptr->text = text;
|
||||
text_ptr->text = text;
|
||||
|
||||
png_set_text(png_ptr, info_ptr, text_ptr, 1);
|
||||
png_set_text(png_ptr, info_ptr, text_ptr, 1);
|
||||
|
||||
png_free(png_ptr, text_ptr);
|
||||
}
|
||||
png_free(png_ptr, key);
|
||||
png_free(png_ptr, text_ptr);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -1253,11 +1333,16 @@ png_push_handle_iTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length
|
||||
|
||||
png_ptr->current_text = (png_charp)png_malloc(png_ptr,
|
||||
(png_uint_32)(length+1));
|
||||
png_ptr->current_text[length] = '\0';
|
||||
png_ptr->current_text_ptr = png_ptr->current_text;
|
||||
png_ptr->current_text_size = (png_size_t)length;
|
||||
png_ptr->current_text_left = (png_size_t)length;
|
||||
png_ptr->process_mode = PNG_READ_iTXt_MODE;
|
||||
if (png_ptr->current_text == (png_charp)NULL)
|
||||
png_warning (png_ptr, "malloc of iTXt buffer failed");
|
||||
else
|
||||
{
|
||||
png_ptr->current_text[length] = '\0';
|
||||
png_ptr->current_text_ptr = png_ptr->current_text;
|
||||
png_ptr->current_text_size = (png_size_t)length;
|
||||
png_ptr->current_text_left = (png_size_t)length;
|
||||
png_ptr->process_mode = PNG_READ_iTXt_MODE;
|
||||
}
|
||||
}
|
||||
|
||||
void /* PRIVATE */
|
||||
@@ -1321,6 +1406,10 @@ png_push_read_iTXt(png_structp png_ptr, png_infop info_ptr)
|
||||
text++;
|
||||
|
||||
text_ptr = (png_textp)png_malloc(png_ptr, (png_uint_32)sizeof(png_text));
|
||||
if(text_ptr == (png_textp)NULL)
|
||||
png_warning (png_ptr, "Malloc of iTXt pointer failed");
|
||||
else
|
||||
{
|
||||
text_ptr->compression = comp_flag + 2;
|
||||
text_ptr->key = key;
|
||||
text_ptr->lang = lang;
|
||||
@@ -1332,6 +1421,7 @@ png_push_read_iTXt(png_structp png_ptr, png_infop info_ptr)
|
||||
png_set_text(png_ptr, info_ptr, text_ptr, 1);
|
||||
|
||||
png_free(png_ptr, text_ptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -1377,27 +1467,32 @@ png_push_handle_unknown(png_structp png_ptr, png_infop info_ptr, png_uint_32 len
|
||||
}
|
||||
#endif
|
||||
|
||||
strcpy((png_charp)chunk.name, (png_charp)png_ptr->chunk_name);
|
||||
png_strcpy((png_charp)chunk.name, (png_charp)png_ptr->chunk_name);
|
||||
chunk.data = (png_bytep)png_malloc(png_ptr, length);
|
||||
png_crc_read(png_ptr, chunk.data, length);
|
||||
chunk.size = length;
|
||||
#if defined(PNG_READ_USER_CHUNKS_SUPPORTED)
|
||||
if(png_ptr->read_user_chunk_fn != (png_user_chunk_ptr)NULL)
|
||||
{
|
||||
/* callback to user unknown chunk handler */
|
||||
if ((*(png_ptr->read_user_chunk_fn)) (png_ptr, &chunk) <= 0)
|
||||
{
|
||||
if (!(png_ptr->chunk_name[0] & 0x20))
|
||||
if(png_handle_as_unknown(png_ptr, png_ptr->chunk_name) !=
|
||||
HANDLE_CHUNK_ALWAYS)
|
||||
png_chunk_error(png_ptr, "unknown critical chunk");
|
||||
}
|
||||
png_set_unknown_chunks(png_ptr, info_ptr, &chunk, 1);
|
||||
}
|
||||
if (chunk.data == (png_bytep)NULL)
|
||||
png_warning (png_ptr, "Malloc of unknown chunk data failed");
|
||||
else
|
||||
{
|
||||
png_crc_read(png_ptr, chunk.data, length);
|
||||
chunk.size = length;
|
||||
#if defined(PNG_READ_USER_CHUNKS_SUPPORTED)
|
||||
if(png_ptr->read_user_chunk_fn != (png_user_chunk_ptr)NULL)
|
||||
{
|
||||
/* callback to user unknown chunk handler */
|
||||
if ((*(png_ptr->read_user_chunk_fn)) (png_ptr, &chunk) <= 0)
|
||||
{
|
||||
if (!(png_ptr->chunk_name[0] & 0x20))
|
||||
if(png_handle_as_unknown(png_ptr, png_ptr->chunk_name) !=
|
||||
HANDLE_CHUNK_ALWAYS)
|
||||
png_chunk_error(png_ptr, "unknown critical chunk");
|
||||
}
|
||||
png_set_unknown_chunks(png_ptr, info_ptr, &chunk, 1);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
png_set_unknown_chunks(png_ptr, info_ptr, &chunk, 1);
|
||||
png_free(png_ptr, chunk.data);
|
||||
png_set_unknown_chunks(png_ptr, info_ptr, &chunk, 1);
|
||||
png_free(png_ptr, chunk.data);
|
||||
}
|
||||
}
|
||||
else
|
||||
#endif
|
||||
|
||||
33
pngread.c
33
pngread.c
@@ -1,9 +1,9 @@
|
||||
|
||||
/* pngread.c - read a PNG file
|
||||
*
|
||||
* libpng 1.0.9beta8 - January 12, 2001
|
||||
* libpng 1.0.11beta3 - April 15, 2001
|
||||
* For conditions of distribution and use, see copyright notice in png.h
|
||||
* Copyright (c) 1998, 1999, 2000, 2001 Glenn Randers-Pehrson
|
||||
* Copyright (c) 1998-2001 Glenn Randers-Pehrson
|
||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||
*
|
||||
@@ -115,6 +115,8 @@ png_create_read_struct_2(png_const_charp user_png_ver, png_voidp error_ptr,
|
||||
png_ptr->zbuf_size = PNG_ZBUF_SIZE;
|
||||
png_ptr->zbuf = (png_bytep)png_malloc(png_ptr,
|
||||
(png_uint_32)png_ptr->zbuf_size);
|
||||
if (png_ptr->zbuf == (png_bytep)NULL)
|
||||
png_error(png_ptr, "Could not allocate zbuf");
|
||||
png_ptr->zstream.zalloc = png_zalloc;
|
||||
png_ptr->zstream.zfree = png_zfree;
|
||||
png_ptr->zstream.opaque = (voidpf)png_ptr;
|
||||
@@ -197,6 +199,8 @@ png_read_init_2(png_structp png_ptr, png_const_charp user_png_ver,
|
||||
png_ptr->zbuf_size = PNG_ZBUF_SIZE;
|
||||
png_ptr->zbuf = (png_bytep)png_malloc(png_ptr,
|
||||
(png_uint_32)png_ptr->zbuf_size);
|
||||
if (png_ptr->zbuf == (png_bytep)NULL)
|
||||
png_error(png_ptr, "Could not allocate zbuf");
|
||||
png_ptr->zstream.zalloc = png_zalloc;
|
||||
png_ptr->zstream.zfree = png_zfree;
|
||||
png_ptr->zstream.opaque = (voidpf)png_ptr;
|
||||
@@ -715,7 +719,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
|
||||
* be ignored, so pass NULL to it.
|
||||
*
|
||||
* [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.9beta8
|
||||
* [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.11beta3
|
||||
*/
|
||||
|
||||
void PNGAPI
|
||||
@@ -764,7 +768,7 @@ png_read_rows(png_structp png_ptr, png_bytepp row,
|
||||
* only call this function once. If you desire to have an image for
|
||||
* each pass of a interlaced image, use png_read_rows() instead.
|
||||
*
|
||||
* [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.9beta8
|
||||
* [*] png_handle_alpha() does not exist yet, as of libpng version 1.0.11beta3
|
||||
*/
|
||||
void PNGAPI
|
||||
png_read_image(png_structp png_ptr, png_bytepp image)
|
||||
@@ -1052,7 +1056,7 @@ png_destroy_read_struct(png_structpp png_ptr_ptr, png_infopp info_ptr_ptr,
|
||||
}
|
||||
|
||||
/* free all memory used by the read (old method) */
|
||||
void PNGAPI
|
||||
void /* PRIVATE */
|
||||
png_read_destroy(png_structp png_ptr, png_infop info_ptr, png_infop end_info_ptr)
|
||||
{
|
||||
#ifdef PNG_SETJMP_SUPPORTED
|
||||
@@ -1305,7 +1309,7 @@ png_read_png(png_structp png_ptr, png_infop info_ptr,
|
||||
|
||||
/* Optional call to gamma correct and add the background to the palette
|
||||
* and update info structure. REQUIRED if you are expecting libpng to
|
||||
* update the palette for you (ie you selected such a transform above).
|
||||
* update the palette for you (i.e., you selected such a transform above).
|
||||
*/
|
||||
png_read_update_info(png_ptr, info_ptr);
|
||||
|
||||
@@ -1317,13 +1321,26 @@ png_read_png(png_structp png_ptr, png_infop info_ptr,
|
||||
if(info_ptr->row_pointers == NULL)
|
||||
{
|
||||
info_ptr->row_pointers = (png_bytepp)png_malloc(png_ptr,
|
||||
info_ptr->height * sizeof(png_bytep));
|
||||
info_ptr->height * sizeof(png_bytep));
|
||||
if (info_ptr->row_pointers)
|
||||
png_error(png_ptr, "png_read_png could not allocate row pointers");
|
||||
#ifdef PNG_FREE_ME_SUPPORTED
|
||||
info_ptr->free_me |= PNG_FREE_ROWS;
|
||||
#endif
|
||||
for (row = 0; row < (int)info_ptr->height; row++)
|
||||
info_ptr->row_pointers[row] = png_malloc(png_ptr,
|
||||
{
|
||||
info_ptr->row_pointers[row] = (png_bytep)png_malloc(png_ptr,
|
||||
png_get_rowbytes(png_ptr, info_ptr));
|
||||
if (info_ptr->row_pointers)
|
||||
{
|
||||
int allocated_row;
|
||||
for (allocated_row=0; allocated_row < row; allocated_row++)
|
||||
png_free(png_ptr, info_ptr->row_pointers[allocated_row]);
|
||||
if (info_ptr->free_me & !(PNG_FREE_ROWS))
|
||||
png_free (png_ptr, info_ptr->row_pointers);
|
||||
png_error(png_ptr, "png_read_png could not allocate row pointer");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
png_read_image(png_ptr, info_ptr->row_pointers);
|
||||
|
||||
4
pngrio.c
4
pngrio.c
@@ -1,9 +1,9 @@
|
||||
|
||||
/* pngrio.c - functions for data input
|
||||
*
|
||||
* libpng 1.0.9beta8 - January 12, 2001
|
||||
* libpng 1.0.11beta3 - April 15, 2001
|
||||
* For conditions of distribution and use, see copyright notice in png.h
|
||||
* Copyright (c) 1998, 1999, 2000, 2001 Glenn Randers-Pehrson
|
||||
* Copyright (c) 1998-2001 Glenn Randers-Pehrson
|
||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||
*
|
||||
|
||||
115
pngrtran.c
115
pngrtran.c
@@ -1,9 +1,9 @@
|
||||
|
||||
/* pngrtran.c - transforms the data in a row for PNG readers
|
||||
*
|
||||
* libpng 1.0.9beta8 - January 12, 2001
|
||||
* libpng 1.0.11beta3 - April 15, 2001
|
||||
* For conditions of distribution and use, see copyright notice in png.h
|
||||
* Copyright (c) 1998, 1999, 2000, 2001 Glenn Randers-Pehrson
|
||||
* Copyright (c) 1998-2001 Glenn Randers-Pehrson
|
||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||
*
|
||||
@@ -155,6 +155,11 @@ png_set_dither(png_structp png_ptr, png_colorp palette,
|
||||
|
||||
png_ptr->dither_index = (png_bytep)png_malloc(png_ptr,
|
||||
(png_uint_32)(num_palette * sizeof (png_byte)));
|
||||
if (png_ptr->dither_index == (png_bytep)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Malloc of dither index failed");
|
||||
return;
|
||||
}
|
||||
for (i = 0; i < num_palette; i++)
|
||||
png_ptr->dither_index[i] = (png_byte)i;
|
||||
}
|
||||
@@ -172,6 +177,12 @@ png_set_dither(png_structp png_ptr, png_colorp palette,
|
||||
/* initialize an array to sort colors */
|
||||
sort = (png_bytep)png_malloc(png_ptr, (png_uint_32)(num_palette
|
||||
* sizeof (png_byte)));
|
||||
if (sort == (png_bytep)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Malloc of sort array for dither failed");
|
||||
png_free (png_ptr, png_ptr->dither_index);
|
||||
return;
|
||||
}
|
||||
|
||||
/* initialize the sort array */
|
||||
for (i = 0; i < num_palette; i++)
|
||||
@@ -302,6 +313,14 @@ png_set_dither(png_structp png_ptr, png_colorp palette,
|
||||
(png_uint_32)(num_palette * sizeof (png_byte)));
|
||||
palette_to_index = (png_bytep)png_malloc(png_ptr,
|
||||
(png_uint_32)(num_palette * sizeof (png_byte)));
|
||||
if (index_to_palette == (png_bytep)NULL || palette_to_index ==
|
||||
(png_bytep)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Malloc of index array for dither failed");
|
||||
png_free (png_ptr, index_to_palette);
|
||||
png_free (png_ptr, png_ptr->dither_index);
|
||||
return;
|
||||
}
|
||||
|
||||
/* initialize the sort array */
|
||||
for (i = 0; i < num_palette; i++)
|
||||
@@ -312,6 +331,14 @@ png_set_dither(png_structp png_ptr, png_colorp palette,
|
||||
|
||||
hash = (png_dsortpp)png_malloc(png_ptr, (png_uint_32)(769 *
|
||||
sizeof (png_dsortp)));
|
||||
if (hash == (png_dsortpp)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Malloc of hash array for dither failed");
|
||||
png_free (png_ptr, palette_to_index);
|
||||
png_free (png_ptr, index_to_palette);
|
||||
png_free (png_ptr, png_ptr->dither_index);
|
||||
return;
|
||||
}
|
||||
for (i = 0; i < 769; i++)
|
||||
hash[i] = NULL;
|
||||
/* png_memset(hash, 0, 769 * sizeof (png_dsortp)); */
|
||||
@@ -346,10 +373,13 @@ png_set_dither(png_structp png_ptr, png_colorp palette,
|
||||
|
||||
t = (png_dsortp)png_malloc(png_ptr, (png_uint_32)(sizeof
|
||||
(png_dsort)));
|
||||
if (t != (png_dsortp)NULL)
|
||||
{
|
||||
t->next = hash[d];
|
||||
t->left = (png_byte)i;
|
||||
t->right = (png_byte)j;
|
||||
hash[d] = t;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -456,16 +486,25 @@ png_set_dither(png_structp png_ptr, png_colorp palette,
|
||||
|
||||
png_ptr->palette_lookup = (png_bytep )png_malloc(png_ptr,
|
||||
(png_uint_32)(num_entries * sizeof (png_byte)));
|
||||
|
||||
png_memset(png_ptr->palette_lookup, 0, num_entries * sizeof (png_byte));
|
||||
if (png_ptr->palette_lookup == (png_bytep)NULL)
|
||||
{
|
||||
png_warning(png_ptr, "Malloc of palette_lookup for dither failed");
|
||||
}
|
||||
else
|
||||
png_memset(png_ptr->palette_lookup, 0, num_entries * sizeof (png_byte));
|
||||
|
||||
distance = (png_bytep)png_malloc(png_ptr, (png_uint_32)(num_entries *
|
||||
sizeof(png_byte)));
|
||||
|
||||
png_memset(distance, 0xff, num_entries * sizeof(png_byte));
|
||||
|
||||
for (i = 0; i < num_palette; i++)
|
||||
if (distance == (png_bytep)NULL)
|
||||
{
|
||||
png_warning(png_ptr, "Malloc of distance array for dither failed");
|
||||
}
|
||||
else
|
||||
{
|
||||
png_memset(distance, 0xff, num_entries * sizeof(png_byte));
|
||||
|
||||
for (i = 0; i < num_palette; i++)
|
||||
{
|
||||
int ir, ig, ib;
|
||||
int r = (palette[i].red >> (8 - PNG_DITHER_RED_BITS));
|
||||
int g = (palette[i].green >> (8 - PNG_DITHER_GREEN_BITS));
|
||||
@@ -496,11 +535,12 @@ png_set_dither(png_structp png_ptr, png_colorp palette,
|
||||
png_ptr->palette_lookup[d_index] = (png_byte)i;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
png_free(png_ptr, distance);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -3858,6 +3898,11 @@ png_build_gamma_table(png_structp png_ptr)
|
||||
|
||||
png_ptr->gamma_table = (png_bytep)png_malloc(png_ptr,
|
||||
(png_uint_32)256);
|
||||
if (png_ptr->gamma_table == (png_bytep)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Malloc of gamma table failed");
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
@@ -3874,6 +3919,11 @@ png_build_gamma_table(png_structp png_ptr)
|
||||
|
||||
png_ptr->gamma_to_1 = (png_bytep)png_malloc(png_ptr,
|
||||
(png_uint_32)256);
|
||||
if (png_ptr->gamma_to_1 == (png_bytep)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Malloc of gamma_to_1 table failed");
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
@@ -3884,6 +3934,11 @@ png_build_gamma_table(png_structp png_ptr)
|
||||
|
||||
png_ptr->gamma_from_1 = (png_bytep)png_malloc(png_ptr,
|
||||
(png_uint_32)256);
|
||||
if (png_ptr->gamma_from_1 == (png_bytep)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Malloc of gamma_from_1 table failed");
|
||||
return;
|
||||
}
|
||||
|
||||
if(png_ptr->screen_gamma > 0.000001)
|
||||
g = 1.0 / png_ptr->screen_gamma;
|
||||
@@ -3946,6 +4001,11 @@ png_build_gamma_table(png_structp png_ptr)
|
||||
|
||||
png_ptr->gamma_16_table = (png_uint_16pp)png_malloc(png_ptr,
|
||||
(png_uint_32)(num * sizeof (png_uint_16p)));
|
||||
if (png_ptr->gamma_16_table == (png_uint_16pp)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Malloc of gamma_16 table failed");
|
||||
return;
|
||||
}
|
||||
|
||||
if (png_ptr->transformations & (PNG_16_TO_8 | PNG_BACKGROUND))
|
||||
{
|
||||
@@ -3956,6 +4016,11 @@ png_build_gamma_table(png_structp png_ptr)
|
||||
{
|
||||
png_ptr->gamma_16_table[i] = (png_uint_16p)png_malloc(png_ptr,
|
||||
(png_uint_32)(256 * sizeof (png_uint_16)));
|
||||
if (png_ptr->gamma_16_table[i] == (png_uint_16p)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Malloc of gamma_16 table entry failed");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
g = 1.0 / g;
|
||||
@@ -3986,6 +4051,11 @@ png_build_gamma_table(png_structp png_ptr)
|
||||
{
|
||||
png_ptr->gamma_16_table[i] = (png_uint_16p)png_malloc(png_ptr,
|
||||
(png_uint_32)(256 * sizeof (png_uint_16)));
|
||||
if (png_ptr->gamma_16_table[i] == (png_uint_16p)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Malloc of gamma_16 table entry failed");
|
||||
return;
|
||||
}
|
||||
|
||||
ig = (((png_uint_32)i * (png_uint_32)png_gamma_shift[shift]) >> 4);
|
||||
for (j = 0; j < 256; j++)
|
||||
@@ -4006,11 +4076,22 @@ png_build_gamma_table(png_structp png_ptr)
|
||||
|
||||
png_ptr->gamma_16_to_1 = (png_uint_16pp)png_malloc(png_ptr,
|
||||
(png_uint_32)(num * sizeof (png_uint_16p )));
|
||||
if (png_ptr->gamma_16_to_1 == (png_uint_16pp)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Malloc of gamma_16_to_1 table failed");
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < num; i++)
|
||||
{
|
||||
png_ptr->gamma_16_to_1[i] = (png_uint_16p)png_malloc(png_ptr,
|
||||
(png_uint_32)(256 * sizeof (png_uint_16)));
|
||||
if (png_ptr->gamma_16_to_1[i] == (png_uint_16p)NULL)
|
||||
{
|
||||
png_warning (png_ptr,
|
||||
"Malloc of gamma_16_to_1 table entry failed");
|
||||
return;
|
||||
}
|
||||
|
||||
ig = (((png_uint_32)i *
|
||||
(png_uint_32)png_gamma_shift[shift]) >> 4);
|
||||
@@ -4029,11 +4110,23 @@ png_build_gamma_table(png_structp png_ptr)
|
||||
|
||||
png_ptr->gamma_16_from_1 = (png_uint_16pp)png_malloc(png_ptr,
|
||||
(png_uint_32)(num * sizeof (png_uint_16p)));
|
||||
if (png_ptr->gamma_16_from_1 == (png_uint_16pp)NULL)
|
||||
{
|
||||
png_warning (png_ptr,
|
||||
"Malloc of gamma_16_from_1 table failed");
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < num; i++)
|
||||
{
|
||||
png_ptr->gamma_16_from_1[i] = (png_uint_16p)png_malloc(png_ptr,
|
||||
(png_uint_32)(256 * sizeof (png_uint_16)));
|
||||
if (png_ptr->gamma_16_from_1[i] == (png_uint_16p)NULL)
|
||||
{
|
||||
png_warning (png_ptr,
|
||||
"Malloc of gamma_16_from_1 table failed");
|
||||
return;
|
||||
}
|
||||
|
||||
ig = (((png_uint_32)i *
|
||||
(png_uint_32)png_gamma_shift[shift]) >> 4);
|
||||
|
||||
278
pngrutil.c
278
pngrutil.c
@@ -1,9 +1,9 @@
|
||||
|
||||
/* pngrutil.c - utilities to read a PNG file
|
||||
*
|
||||
* libpng 1.0.9beta8 - January 12, 2001
|
||||
* libpng 1.0.11beta3 - April 15, 2001
|
||||
* For conditions of distribution and use, see copyright notice in png.h
|
||||
* Copyright (c) 1998, 1999, 2000, 2001 Glenn Randers-Pehrson
|
||||
* Copyright (c) 1998-2001 Glenn Randers-Pehrson
|
||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||
*
|
||||
@@ -30,7 +30,7 @@ __inline double strtod(const char *nptr, char **endptr)
|
||||
MultiByteToWideChar(CP_ACP, 0, nptr, -1, str, len);
|
||||
result = wcstod(str, &end);
|
||||
len = WideCharToMultiByte(CP_ACP, 0, end, -1, NULL, 0, NULL, NULL);
|
||||
*endptr = (char *)nptr + (strlen(nptr) - len + 1);
|
||||
*endptr = (char *)nptr + (png_strlen(nptr) - len + 1);
|
||||
free(str);
|
||||
}
|
||||
return result;
|
||||
@@ -201,15 +201,19 @@ png_decompress_chunk(png_structp png_ptr, int comp_type,
|
||||
{
|
||||
text_size = prefix_size + sizeof(msg) + 1;
|
||||
text = (png_charp)png_malloc(png_ptr, text_size);
|
||||
png_memcpy(text, chunkdata, prefix_size);
|
||||
if (text != NULL)
|
||||
png_memcpy(text, chunkdata, prefix_size);
|
||||
}
|
||||
|
||||
text[text_size - 1] = 0x00;
|
||||
if (text != NULL)
|
||||
{
|
||||
text[text_size - 1] = 0x00;
|
||||
|
||||
/* Copy what we can of the error message into the text chunk */
|
||||
text_size = (png_size_t)(chunklength - (text - chunkdata) - 1);
|
||||
text_size = sizeof(msg) > text_size ? text_size : sizeof(msg);
|
||||
png_memcpy(text + prefix_size, msg, text_size + 1);
|
||||
/* Copy what we can of the error message into the text chunk */
|
||||
text_size = (png_size_t)(chunklength - (text - chunkdata) - 1);
|
||||
text_size = sizeof(msg) > text_size ? text_size : sizeof(msg);
|
||||
png_memcpy(text + prefix_size, msg, text_size + 1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (!png_ptr->zstream.avail_out || ret == Z_STREAM_END)
|
||||
@@ -219,10 +223,13 @@ png_decompress_chunk(png_structp png_ptr, int comp_type,
|
||||
text_size = prefix_size +
|
||||
png_ptr->zbuf_size - png_ptr->zstream.avail_out;
|
||||
text = (png_charp)png_malloc(png_ptr, text_size + 1);
|
||||
png_memcpy(text + prefix_size, png_ptr->zbuf,
|
||||
if (text != NULL)
|
||||
{
|
||||
png_memcpy(text + prefix_size, png_ptr->zbuf,
|
||||
text_size - prefix_size);
|
||||
png_memcpy(text, chunkdata, prefix_size);
|
||||
*(text + text_size) = 0x00;
|
||||
png_memcpy(text, chunkdata, prefix_size);
|
||||
*(text + text_size) = 0x00;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -231,12 +238,20 @@ png_decompress_chunk(png_structp png_ptr, int comp_type,
|
||||
tmp = text;
|
||||
text = (png_charp)png_malloc(png_ptr, (png_uint_32)(text_size +
|
||||
png_ptr->zbuf_size - png_ptr->zstream.avail_out + 1));
|
||||
if (text != NULL)
|
||||
{
|
||||
png_memcpy(text, tmp, text_size);
|
||||
png_free(png_ptr, tmp);
|
||||
png_memcpy(text + text_size, png_ptr->zbuf,
|
||||
(png_ptr->zbuf_size - png_ptr->zstream.avail_out));
|
||||
text_size += png_ptr->zbuf_size - png_ptr->zstream.avail_out;
|
||||
*(text + text_size) = 0x00;
|
||||
}
|
||||
else
|
||||
{
|
||||
png_warning (png_ptr, "Could not malloc text buffer");
|
||||
text=tmp;
|
||||
}
|
||||
}
|
||||
if (ret == Z_STREAM_END)
|
||||
break;
|
||||
@@ -270,9 +285,13 @@ png_decompress_chunk(png_structp png_ptr, int comp_type,
|
||||
if (text == NULL)
|
||||
{
|
||||
text = (png_charp)png_malloc(png_ptr, text_size+1);
|
||||
png_memcpy(text, chunkdata, prefix_size);
|
||||
if (text != NULL)
|
||||
png_memcpy(text, chunkdata, prefix_size);
|
||||
else
|
||||
png_warning(png_ptr, "Could not malloc text chunkdata");
|
||||
}
|
||||
*(text + text_size) = 0x00;
|
||||
if (text != NULL)
|
||||
*(text + text_size) = 0x00;
|
||||
}
|
||||
|
||||
inflateReset(&png_ptr->zstream);
|
||||
@@ -332,59 +351,6 @@ png_handle_IHDR(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
||||
filter_type = buf[11];
|
||||
interlace_type = buf[12];
|
||||
|
||||
/* check for width and height valid values */
|
||||
if (width == 0 || width > PNG_MAX_UINT || height == 0 ||
|
||||
height > PNG_MAX_UINT)
|
||||
png_error(png_ptr, "Invalid image size in IHDR");
|
||||
|
||||
/* check other values */
|
||||
if (bit_depth != 1 && bit_depth != 2 && bit_depth != 4 &&
|
||||
bit_depth != 8 && bit_depth != 16)
|
||||
png_error(png_ptr, "Invalid bit depth in IHDR");
|
||||
|
||||
if (color_type < 0 || color_type == 1 ||
|
||||
color_type == 5 || color_type > 6)
|
||||
png_error(png_ptr, "Invalid color type in IHDR");
|
||||
|
||||
if (((color_type == PNG_COLOR_TYPE_PALETTE) && bit_depth > 8) ||
|
||||
((color_type == PNG_COLOR_TYPE_RGB ||
|
||||
color_type == PNG_COLOR_TYPE_GRAY_ALPHA ||
|
||||
color_type == PNG_COLOR_TYPE_RGB_ALPHA) && bit_depth < 8))
|
||||
png_error(png_ptr, "Invalid color type/bit depth combination in IHDR");
|
||||
|
||||
if (interlace_type >= PNG_INTERLACE_LAST)
|
||||
png_error(png_ptr, "Unknown interlace method in IHDR");
|
||||
|
||||
if (compression_type != PNG_COMPRESSION_TYPE_BASE)
|
||||
png_error(png_ptr, "Unknown compression method in IHDR");
|
||||
|
||||
#if defined(PNG_MNG_FEATURES_SUPPORTED)
|
||||
/* Accept filter_method 64 (intrapixel differencing) only if
|
||||
* 1. Libpng was compiled with PNG_MNG_FEATURES_SUPPORTED and
|
||||
* 2. Libpng did not read a PNG signature (this filter_method is only
|
||||
* used in PNG datastreams that are embedded in MNG datastreams) and
|
||||
* 3. The application called png_permit_mng_features with a mask that
|
||||
* included PNG_FLAG_MNG_FILTER_64 and
|
||||
* 4. The filter_method is 64 and
|
||||
* 5. The color_type is RGB or RGBA
|
||||
*/
|
||||
if((png_ptr->mode&PNG_HAVE_PNG_SIGNATURE)&&png_ptr->mng_features_permitted)
|
||||
png_warning(png_ptr,"MNG features are not allowed in a PNG datastream\n");
|
||||
if(filter_type != PNG_FILTER_TYPE_BASE)
|
||||
{
|
||||
if(!((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) &&
|
||||
(filter_type == PNG_INTRAPIXEL_DIFFERENCING) &&
|
||||
((png_ptr->mode&PNG_HAVE_PNG_SIGNATURE) == 0) &&
|
||||
(color_type == PNG_COLOR_TYPE_RGB ||
|
||||
color_type == PNG_COLOR_TYPE_RGB_ALPHA)))
|
||||
png_error(png_ptr, "Unknown filter method in IHDR");
|
||||
if(png_ptr->mode&PNG_HAVE_PNG_SIGNATURE)
|
||||
png_warning(png_ptr, "Invalid filter method in IHDR");
|
||||
}
|
||||
#else
|
||||
if(filter_type != PNG_FILTER_TYPE_BASE)
|
||||
png_error(png_ptr, "Unknown filter method in IHDR");
|
||||
#endif
|
||||
|
||||
/* set internal variables */
|
||||
png_ptr->width = width;
|
||||
@@ -628,7 +594,11 @@ png_handle_gAMA(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
||||
igamma = (png_fixed_point)png_get_uint_32(buf);
|
||||
/* check for zero gamma */
|
||||
if (igamma == 0)
|
||||
return;
|
||||
{
|
||||
png_warning(png_ptr,
|
||||
"Ignoring gAMA chunk with gamma=0");
|
||||
return;
|
||||
}
|
||||
|
||||
#if defined(PNG_READ_sRGB_SUPPORTED)
|
||||
if (info_ptr->valid & PNG_INFO_sRGB)
|
||||
@@ -1032,7 +1002,14 @@ png_handle_iCCP(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
||||
|
||||
chunkdata = (png_charp)png_malloc(png_ptr, length + 1);
|
||||
slength = (png_size_t)length;
|
||||
png_crc_read(png_ptr, (png_bytep)chunkdata, slength);
|
||||
if (chunkdata != (png_charp)NULL)
|
||||
png_crc_read(png_ptr, (png_bytep)chunkdata, slength);
|
||||
else
|
||||
{
|
||||
png_warning(png_ptr, "Could not allocate memory for iCCP chunk");
|
||||
png_crc_finish(png_ptr, slength);
|
||||
return;
|
||||
}
|
||||
|
||||
if (png_crc_finish(png_ptr, skip))
|
||||
{
|
||||
@@ -1128,8 +1105,16 @@ png_handle_sPLT(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
||||
#endif
|
||||
|
||||
chunkdata = (png_bytep)png_malloc(png_ptr, length + 1);
|
||||
slength = (png_size_t)length;
|
||||
png_crc_read(png_ptr, chunkdata, slength);
|
||||
if (chunkdata != (png_bytep)NULL)
|
||||
{
|
||||
slength = (png_size_t)length;
|
||||
png_crc_read(png_ptr, (png_bytep)chunkdata, slength);
|
||||
}
|
||||
else
|
||||
{
|
||||
png_warning(png_ptr, "Could not allocate memory for sPLT chunk");
|
||||
skip = (png_size_t)length;
|
||||
}
|
||||
|
||||
if (png_crc_finish(png_ptr, skip))
|
||||
{
|
||||
@@ -1159,12 +1144,19 @@ png_handle_sPLT(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
||||
if (data_length % entry_size)
|
||||
{
|
||||
png_free(png_ptr, chunkdata);
|
||||
png_error(png_ptr, "sPLT chunk has bad length");
|
||||
png_warning(png_ptr, "sPLT chunk has bad length");
|
||||
return;
|
||||
}
|
||||
|
||||
new_palette.nentries = data_length / entry_size;
|
||||
new_palette.entries = (png_sPLT_entryp)png_malloc(
|
||||
png_ptr, new_palette.nentries * sizeof(png_sPLT_entry));
|
||||
if (new_palette.entries == (png_sPLT_entryp)NULL)
|
||||
{
|
||||
png_free(png_ptr, chunkdata);
|
||||
png_warning (png_ptr, "Could not allocate sPLT entries");
|
||||
return;
|
||||
}
|
||||
|
||||
#ifndef PNG_NO_POINTER_INDEXING
|
||||
for (i = 0; i < new_palette.nentries; i++)
|
||||
@@ -1574,6 +1566,12 @@ png_handle_pCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
||||
png_debug1(2, "Allocating and reading pCAL chunk data (%lu bytes)\n",
|
||||
length + 1);
|
||||
purpose = (png_charp)png_malloc(png_ptr, length + 1);
|
||||
if (purpose == (png_charp)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Could not allocate memory for pCAL purpose");
|
||||
png_crc_finish(png_ptr, length);
|
||||
return;
|
||||
}
|
||||
slength = (png_size_t)length;
|
||||
png_crc_read(png_ptr, (png_bytep)purpose, slength);
|
||||
|
||||
@@ -1630,6 +1628,11 @@ png_handle_pCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
||||
png_debug(3, "Allocating pCAL parameters array\n");
|
||||
params = (png_charpp)png_malloc(png_ptr, (png_uint_32)(nparams
|
||||
*sizeof(png_charp))) ;
|
||||
if (params == (png_charpp)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Could not allocate pCAL parameters array");
|
||||
nparams=0;
|
||||
}
|
||||
|
||||
/* Get pointers to the start of each parameter string. */
|
||||
for (i = 0; i < (int)nparams; i++)
|
||||
@@ -1694,6 +1697,12 @@ png_handle_sCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
||||
png_debug1(2, "Allocating and reading sCAL chunk data (%lu bytes)\n",
|
||||
length + 1);
|
||||
buffer = (png_charp)png_malloc(png_ptr, length + 1);
|
||||
if (buffer == (png_charp)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Could not allocate memory for sCAL buffer");
|
||||
png_crc_finish(png_ptr, length);
|
||||
return;
|
||||
}
|
||||
slength = (png_size_t)length;
|
||||
png_crc_read(png_ptr, (png_bytep)buffer, slength);
|
||||
|
||||
@@ -1716,8 +1725,9 @@ png_handle_sCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
||||
}
|
||||
#else
|
||||
#ifdef PNG_FIXED_POINT_SUPPORTED
|
||||
swidth = (png_charp)png_malloc(png_ptr, strlen(ep) + 1);
|
||||
png_memcpy(swidth, ep, (png_size_t)strlen(ep));
|
||||
swidth = (png_charp)png_malloc(png_ptr, png_strlen(ep) + 1);
|
||||
if (swidth != (png_charp)NULL)
|
||||
png_memcpy(swidth, ep, (png_size_t)png_strlen(ep));
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -1734,8 +1744,9 @@ png_handle_sCAL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
||||
}
|
||||
#else
|
||||
#ifdef PNG_FIXED_POINT_SUPPORTED
|
||||
sheight = (png_charp)png_malloc(png_ptr, strlen(ep) + 1);
|
||||
png_memcpy(sheight, ep, (png_size_t)strlen(ep));
|
||||
sheight = (png_charp)png_malloc(png_ptr, png_strlen(ep) + 1);
|
||||
if (sheight != (png_charp)NULL)
|
||||
png_memcpy(sheight, ep, (png_size_t)png_strlen(ep));
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -1844,7 +1855,14 @@ png_handle_tEXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
||||
|
||||
key = (png_charp)png_malloc(png_ptr, length + 1);
|
||||
slength = (png_size_t)length;
|
||||
png_crc_read(png_ptr, (png_bytep)key, slength);
|
||||
if (key == (png_charp)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Could not allocate memory for tEXt chunk");
|
||||
png_crc_finish(png_ptr, slength);
|
||||
return;
|
||||
}
|
||||
else
|
||||
png_crc_read(png_ptr, (png_bytep)key, slength);
|
||||
|
||||
if (png_crc_finish(png_ptr, skip))
|
||||
{
|
||||
@@ -1861,6 +1879,8 @@ png_handle_tEXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
||||
text++;
|
||||
|
||||
text_ptr = (png_textp)png_malloc(png_ptr, (png_uint_32)sizeof(png_text));
|
||||
if (text_ptr != (png_textp)NULL)
|
||||
{
|
||||
text_ptr->compression = PNG_TEXT_COMPRESSION_NONE;
|
||||
text_ptr->key = key;
|
||||
#ifdef PNG_iTXt_SUPPORTED
|
||||
@@ -1873,8 +1893,11 @@ png_handle_tEXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
||||
|
||||
png_set_text(png_ptr, info_ptr, text_ptr, 1);
|
||||
|
||||
png_free(png_ptr, key);
|
||||
png_free(png_ptr, text_ptr);
|
||||
}
|
||||
else
|
||||
png_warning(png_ptr, "Could not allocate iTXt pointer");
|
||||
png_free(png_ptr, key);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1908,8 +1931,17 @@ png_handle_zTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
||||
#endif
|
||||
|
||||
chunkdata = (png_charp)png_malloc(png_ptr, length + 1);
|
||||
slength = (png_size_t)length;
|
||||
png_crc_read(png_ptr, (png_bytep)chunkdata, slength);
|
||||
if (chunkdata != (png_charp)NULL)
|
||||
{
|
||||
slength = (png_size_t)length;
|
||||
png_crc_read(png_ptr, (png_bytep)chunkdata, slength);
|
||||
}
|
||||
else
|
||||
{
|
||||
png_warning (png_ptr, "Could not allocate memory for zTXt chunk data");
|
||||
png_crc_finish(png_ptr, length);
|
||||
return;
|
||||
}
|
||||
if (png_crc_finish(png_ptr, 0))
|
||||
{
|
||||
png_free(png_ptr, chunkdata);
|
||||
@@ -1943,19 +1975,24 @@ png_handle_zTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
||||
(png_size_t)length, prefix_len, &data_len);
|
||||
|
||||
text_ptr = (png_textp)png_malloc(png_ptr, (png_uint_32)sizeof(png_text));
|
||||
text_ptr->compression = comp_type;
|
||||
text_ptr->key = chunkdata;
|
||||
if (text_ptr != (png_textp)NULL)
|
||||
{
|
||||
text_ptr->compression = comp_type;
|
||||
text_ptr->key = chunkdata;
|
||||
#ifdef PNG_iTXt_SUPPORTED
|
||||
text_ptr->lang = NULL;
|
||||
text_ptr->lang_key = NULL;
|
||||
text_ptr->itxt_length = 0;
|
||||
text_ptr->lang = NULL;
|
||||
text_ptr->lang_key = NULL;
|
||||
text_ptr->itxt_length = 0;
|
||||
#endif
|
||||
text_ptr->text = chunkdata + prefix_len;
|
||||
text_ptr->text_length = data_len;
|
||||
text_ptr->text = chunkdata + prefix_len;
|
||||
text_ptr->text_length = data_len;
|
||||
|
||||
png_set_text(png_ptr, info_ptr, text_ptr, 1);
|
||||
png_set_text(png_ptr, info_ptr, text_ptr, 1);
|
||||
|
||||
png_free(png_ptr, text_ptr);
|
||||
png_free(png_ptr, text_ptr);
|
||||
}
|
||||
else
|
||||
png_warning (png_ptr, "Could not allocate memory for zTXt data");
|
||||
png_free(png_ptr, chunkdata);
|
||||
}
|
||||
#endif
|
||||
@@ -1992,8 +2029,17 @@ png_handle_iTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
||||
#endif
|
||||
|
||||
chunkdata = (png_charp)png_malloc(png_ptr, length + 1);
|
||||
slength = (png_size_t)length;
|
||||
png_crc_read(png_ptr, (png_bytep)chunkdata, slength);
|
||||
if (chunkdata != (png_charp)NULL)
|
||||
{
|
||||
slength = (png_size_t)length;
|
||||
png_crc_read(png_ptr, (png_bytep)chunkdata, slength);
|
||||
}
|
||||
else
|
||||
{
|
||||
png_warning (png_ptr, "Could not allocate memory for iTXt chunk data");
|
||||
png_crc_finish(png_ptr, length);
|
||||
return;
|
||||
}
|
||||
if (png_crc_finish(png_ptr, 0))
|
||||
{
|
||||
png_free(png_ptr, chunkdata);
|
||||
@@ -2038,17 +2084,22 @@ png_handle_iTXt(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
||||
else
|
||||
data_len=png_strlen(chunkdata + prefix_len);
|
||||
text_ptr = (png_textp)png_malloc(png_ptr, (png_uint_32)sizeof(png_text));
|
||||
text_ptr->compression = (int)comp_flag + 1;
|
||||
text_ptr->lang_key = chunkdata+(lang_key-key);
|
||||
text_ptr->lang = chunkdata+(lang-key);
|
||||
text_ptr->itxt_length = data_len;
|
||||
text_ptr->text_length = 0;
|
||||
text_ptr->key = chunkdata;
|
||||
text_ptr->text = chunkdata + prefix_len;
|
||||
if (text_ptr != (png_textp)NULL)
|
||||
{
|
||||
text_ptr->compression = (int)comp_flag + 1;
|
||||
text_ptr->lang_key = chunkdata+(lang_key-key);
|
||||
text_ptr->lang = chunkdata+(lang-key);
|
||||
text_ptr->itxt_length = data_len;
|
||||
text_ptr->text_length = 0;
|
||||
text_ptr->key = chunkdata;
|
||||
text_ptr->text = chunkdata + prefix_len;
|
||||
|
||||
png_set_text(png_ptr, info_ptr, text_ptr, 1);
|
||||
png_set_text(png_ptr, info_ptr, text_ptr, 1);
|
||||
|
||||
png_free(png_ptr, text_ptr);
|
||||
png_free(png_ptr, text_ptr);
|
||||
}
|
||||
else
|
||||
png_warning (png_ptr, "Could not allocate memory for iTXt chunk data");
|
||||
png_free(png_ptr, chunkdata);
|
||||
}
|
||||
#endif
|
||||
@@ -2102,10 +2153,19 @@ png_handle_unknown(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
|
||||
length = (png_uint_32)65535L;
|
||||
}
|
||||
#endif
|
||||
strcpy((png_charp)chunk.name, (png_charp)png_ptr->chunk_name);
|
||||
png_strcpy((png_charp)chunk.name, (png_charp)png_ptr->chunk_name);
|
||||
chunk.data = (png_bytep)png_malloc(png_ptr, length);
|
||||
png_crc_read(png_ptr, chunk.data, length);
|
||||
chunk.size = length;
|
||||
if (chunk.data != (png_bytep)NULL)
|
||||
{
|
||||
chunk.size = (png_size_t)length;
|
||||
png_crc_read(png_ptr, (png_bytep)chunk.data, length);
|
||||
}
|
||||
else
|
||||
{
|
||||
png_warning (png_ptr, "Could not allocate memory for iTXt chunk data");
|
||||
png_crc_finish(png_ptr, length);
|
||||
return;
|
||||
}
|
||||
#if defined(PNG_READ_USER_CHUNKS_SUPPORTED)
|
||||
if(png_ptr->read_user_chunk_fn != (png_user_chunk_ptr)NULL)
|
||||
{
|
||||
@@ -2371,6 +2431,10 @@ png_combine_row(png_structp png_ptr, png_bytep row, int mask)
|
||||
|
||||
#ifdef PNG_READ_INTERLACING_SUPPORTED
|
||||
#ifndef PNG_HAVE_ASSEMBLER_READ_INTERLACE /* else in pngvcrd.c, pnggccrd.c */
|
||||
/* OLD pre-1.0.9 interface:
|
||||
void png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass,
|
||||
png_uint_32 transformations)
|
||||
*/
|
||||
void /* PRIVATE */
|
||||
png_do_read_interlace(png_structp png_ptr)
|
||||
{
|
||||
@@ -3008,6 +3072,9 @@ defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)
|
||||
png_error(png_ptr, "This image requires a row greater than 64KB");
|
||||
#endif
|
||||
png_ptr->row_buf = (png_bytep)png_malloc(png_ptr, row_bytes);
|
||||
if (png_ptr->row_buf == (png_bytep)NULL)
|
||||
png_error (png_ptr, "Could not allocate memory for row buffer");
|
||||
png_ptr->row_buf_size = row_bytes;
|
||||
|
||||
#ifdef PNG_MAX_MALLOC_64K
|
||||
if ((png_uint_32)png_ptr->rowbytes + 1 > (png_uint_32)65536L)
|
||||
@@ -3015,6 +3082,11 @@ defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)
|
||||
#endif
|
||||
png_ptr->prev_row = (png_bytep)png_malloc(png_ptr, (png_uint_32)(
|
||||
png_ptr->rowbytes + 1));
|
||||
if (png_ptr->prev_row == (png_bytep)NULL)
|
||||
{
|
||||
png_free (png_ptr, png_ptr->row_buf);
|
||||
png_error (png_ptr, "Could not allocate memory for previous row buffer");
|
||||
}
|
||||
|
||||
png_memset_check(png_ptr, png_ptr->prev_row, 0, png_ptr->rowbytes + 1);
|
||||
|
||||
|
||||
209
pngset.c
209
pngset.c
@@ -1,9 +1,9 @@
|
||||
|
||||
/* pngset.c - storage of image information into info struct
|
||||
*
|
||||
* libpng 1.0.9beta8 - January 12, 2001
|
||||
* libpng 1.0.11beta3 - April 15, 2001
|
||||
* For conditions of distribution and use, see copyright notice in png.h
|
||||
* Copyright (c) 1998, 1999, 2000, 2001 Glenn Randers-Pehrson
|
||||
* Copyright (c) 1998-2001 Glenn Randers-Pehrson
|
||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||
*
|
||||
@@ -109,9 +109,10 @@ png_set_gAMA(png_structp png_ptr, png_infop info_ptr, double file_gamma)
|
||||
info_ptr->int_gamma = (int)(file_gamma*100000.+.5);
|
||||
#endif
|
||||
info_ptr->valid |= PNG_INFO_gAMA;
|
||||
if(file_gamma == 0.0)
|
||||
png_warning(png_ptr, "Setting gamma=0");
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
void PNGAPI
|
||||
png_set_gAMA_fixed(png_structp png_ptr, png_infop info_ptr, png_fixed_point
|
||||
int_gamma)
|
||||
@@ -127,7 +128,10 @@ png_set_gAMA_fixed(png_structp png_ptr, png_infop info_ptr, png_fixed_point
|
||||
info_ptr->int_gamma = int_gamma;
|
||||
#endif
|
||||
info_ptr->valid |= PNG_INFO_gAMA;
|
||||
if(int_gamma == 0)
|
||||
png_warning(png_ptr, "Setting gamma=0");
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(PNG_hIST_SUPPORTED)
|
||||
void PNGAPI
|
||||
@@ -139,14 +143,22 @@ png_set_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_16p hist)
|
||||
if (png_ptr == NULL || info_ptr == NULL)
|
||||
return;
|
||||
if (info_ptr->num_palette == 0)
|
||||
{
|
||||
png_warning(png_ptr,
|
||||
"Palette size 0, hIST allocation skipped.");
|
||||
"Palette size 0, hIST allocation skipped.");
|
||||
return;
|
||||
}
|
||||
|
||||
#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)));
|
||||
if (png_ptr->hist == (png_uint_16p)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Could not allocate memory for histogram");
|
||||
return;
|
||||
}
|
||||
|
||||
for (i = 0; i < info_ptr->num_palette; i++)
|
||||
png_ptr->hist[i] = hist[i];
|
||||
@@ -172,6 +184,61 @@ png_set_IHDR(png_structp png_ptr, png_infop info_ptr,
|
||||
if (png_ptr == NULL || info_ptr == NULL)
|
||||
return;
|
||||
|
||||
/* check for width and height valid values */
|
||||
if (width == 0 || height == 0)
|
||||
png_error(png_ptr, "Image width or height is zero in IHDR");
|
||||
if (width > PNG_MAX_UINT || height > PNG_MAX_UINT)
|
||||
png_error(png_ptr, "Invalid image size in IHDR");
|
||||
|
||||
/* check other values */
|
||||
if (bit_depth != 1 && bit_depth != 2 && bit_depth != 4 &&
|
||||
bit_depth != 8 && bit_depth != 16)
|
||||
png_error(png_ptr, "Invalid bit depth in IHDR");
|
||||
|
||||
if (color_type < 0 || color_type == 1 ||
|
||||
color_type == 5 || color_type > 6)
|
||||
png_error(png_ptr, "Invalid color type in IHDR");
|
||||
|
||||
if (((color_type == PNG_COLOR_TYPE_PALETTE) && bit_depth > 8) ||
|
||||
((color_type == PNG_COLOR_TYPE_RGB ||
|
||||
color_type == PNG_COLOR_TYPE_GRAY_ALPHA ||
|
||||
color_type == PNG_COLOR_TYPE_RGB_ALPHA) && bit_depth < 8))
|
||||
png_error(png_ptr, "Invalid color type/bit depth combination in IHDR");
|
||||
|
||||
if (interlace_type >= PNG_INTERLACE_LAST)
|
||||
png_error(png_ptr, "Unknown interlace method in IHDR");
|
||||
|
||||
if (compression_type != PNG_COMPRESSION_TYPE_BASE)
|
||||
png_error(png_ptr, "Unknown compression method in IHDR");
|
||||
|
||||
#if defined(PNG_MNG_FEATURES_SUPPORTED)
|
||||
/* Accept filter_method 64 (intrapixel differencing) only if
|
||||
* 1. Libpng was compiled with PNG_MNG_FEATURES_SUPPORTED and
|
||||
* 2. Libpng did not read a PNG signature (this filter_method is only
|
||||
* used in PNG datastreams that are embedded in MNG datastreams) and
|
||||
* 3. The application called png_permit_mng_features with a mask that
|
||||
* included PNG_FLAG_MNG_FILTER_64 and
|
||||
* 4. The filter_method is 64 and
|
||||
* 5. The color_type is RGB or RGBA
|
||||
*/
|
||||
if((png_ptr->mode&PNG_HAVE_PNG_SIGNATURE)&&png_ptr->mng_features_permitted)
|
||||
png_warning(png_ptr,"MNG features are not allowed in a PNG datastream\n");
|
||||
if(filter_type != PNG_FILTER_TYPE_BASE)
|
||||
{
|
||||
if(!((png_ptr->mng_features_permitted & PNG_FLAG_MNG_FILTER_64) &&
|
||||
(filter_type == PNG_INTRAPIXEL_DIFFERENCING) &&
|
||||
((png_ptr->mode&PNG_HAVE_PNG_SIGNATURE) == 0) &&
|
||||
(color_type == PNG_COLOR_TYPE_RGB ||
|
||||
color_type == PNG_COLOR_TYPE_RGB_ALPHA)))
|
||||
png_error(png_ptr, "Unknown filter method in IHDR");
|
||||
if(png_ptr->mode&PNG_HAVE_PNG_SIGNATURE)
|
||||
png_warning(png_ptr, "Invalid filter method in IHDR");
|
||||
}
|
||||
#else
|
||||
if(filter_type != PNG_FILTER_TYPE_BASE)
|
||||
png_error(png_ptr, "Unknown filter method in IHDR");
|
||||
#endif
|
||||
|
||||
info_ptr->width = width;
|
||||
info_ptr->height = height;
|
||||
info_ptr->bit_depth = (png_byte)bit_depth;
|
||||
@@ -233,6 +300,11 @@ png_set_pCAL(png_structp png_ptr, png_infop info_ptr,
|
||||
length = png_strlen(purpose) + 1;
|
||||
png_debug1(3, "allocating purpose for info (%lu bytes)\n", length);
|
||||
info_ptr->pcal_purpose = (png_charp)png_malloc(png_ptr, length);
|
||||
if (info_ptr->pcal_purpose == (png_charp)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Could not allocate memory for pCAL");
|
||||
return;
|
||||
}
|
||||
png_memcpy(info_ptr->pcal_purpose, purpose, (png_size_t)length);
|
||||
|
||||
png_debug(3, "storing X0, X1, type, and nparams in info\n");
|
||||
@@ -244,10 +316,24 @@ png_set_pCAL(png_structp png_ptr, png_infop info_ptr,
|
||||
length = png_strlen(units) + 1;
|
||||
png_debug1(3, "allocating units for info (%lu bytes)\n", length);
|
||||
info_ptr->pcal_units = (png_charp)png_malloc(png_ptr, length);
|
||||
if (info_ptr->pcal_units == (png_charp)NULL)
|
||||
{
|
||||
png_free (png_ptr, info_ptr->pcal_purpose);
|
||||
png_warning (png_ptr, "Could not allocate memory for pCAL units");
|
||||
return;
|
||||
}
|
||||
png_memcpy(info_ptr->pcal_units, units, (png_size_t)length);
|
||||
|
||||
info_ptr->pcal_params = (png_charpp)png_malloc(png_ptr,
|
||||
(png_uint_32)((nparams + 1) * sizeof(png_charp)));
|
||||
if (info_ptr->pcal_params == (png_charpp)NULL)
|
||||
{
|
||||
png_free (png_ptr, info_ptr->pcal_purpose);
|
||||
png_free (png_ptr, info_ptr->pcal_units);
|
||||
png_warning (png_ptr, "Could not allocate memory for pCAL params");
|
||||
return;
|
||||
}
|
||||
|
||||
info_ptr->pcal_params[nparams] = NULL;
|
||||
|
||||
for (i = 0; i < nparams; i++)
|
||||
@@ -255,7 +341,13 @@ png_set_pCAL(png_structp png_ptr, png_infop info_ptr,
|
||||
length = png_strlen(params[i]) + 1;
|
||||
png_debug2(3, "allocating parameter %d for info (%lu bytes)\n", i, length);
|
||||
info_ptr->pcal_params[i] = (png_charp)png_malloc(png_ptr, length);
|
||||
png_memcpy(info_ptr->pcal_params[i], params[i], (png_size_t)length);
|
||||
if (info_ptr->pcal_params[i] == (png_charp)NULL)
|
||||
{
|
||||
nparams=i;
|
||||
png_warning (png_ptr, "Could not allocate memory for pCAL params");
|
||||
}
|
||||
else
|
||||
png_memcpy(info_ptr->pcal_params[i], params[i], (png_size_t)length);
|
||||
}
|
||||
|
||||
info_ptr->valid |= PNG_INFO_pCAL;
|
||||
@@ -298,12 +390,14 @@ png_set_sCAL_s(png_structp png_ptr, png_infop info_ptr,
|
||||
length = png_strlen(swidth) + 1;
|
||||
png_debug1(3, "allocating unit for info (%d bytes)\n", length);
|
||||
info_ptr->scal_s_width = (png_charp)png_malloc(png_ptr, length);
|
||||
png_memcpy(info_ptr->scal_s_width, swidth, (png_size_t)length);
|
||||
if (info_ptr->scal_s_width != (png_charp)NULL)
|
||||
png_memcpy(info_ptr->scal_s_width, swidth, (png_size_t)length);
|
||||
|
||||
length = png_strlen(sheight) + 1;
|
||||
png_debug1(3, "allocating unit for info (%d bytes)\n", length);
|
||||
info_ptr->scal_s_width = (png_charp)png_malloc(png_ptr, length);
|
||||
png_memcpy(info_ptr->scal_s_height, sheight, (png_size_t)length);
|
||||
info_ptr->scal_s_height = (png_charp)png_malloc(png_ptr, length);
|
||||
if (info_ptr->scal_s_height != (png_charp)NULL)
|
||||
png_memcpy(info_ptr->scal_s_height, sheight, (png_size_t)length);
|
||||
|
||||
info_ptr->valid |= PNG_INFO_sCAL;
|
||||
#ifdef PNG_FREE_ME_SUPPORTED
|
||||
@@ -349,7 +443,12 @@ png_set_PLTE(png_structp png_ptr, png_infop info_ptr,
|
||||
#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));
|
||||
if (png_ptr->palette == (png_colorp)NULL)
|
||||
{
|
||||
png_warning(png_ptr, "Unable to allocate palette");
|
||||
return;
|
||||
}
|
||||
png_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;
|
||||
|
||||
@@ -472,9 +571,20 @@ png_set_iCCP(png_structp png_ptr, png_infop info_ptr,
|
||||
if (png_ptr == NULL || info_ptr == NULL || name == NULL || profile == NULL)
|
||||
return;
|
||||
|
||||
new_iccp_name = png_malloc(png_ptr, png_strlen(name)+1);
|
||||
strcpy(new_iccp_name, name);
|
||||
new_iccp_profile = png_malloc(png_ptr, proflen);
|
||||
new_iccp_name = (png_charp)png_malloc(png_ptr, png_strlen(name)+1);
|
||||
if (new_iccp_name == (png_charp)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Could not allocate memory for ICC profile name");
|
||||
return;
|
||||
}
|
||||
png_strcpy(new_iccp_name, name);
|
||||
new_iccp_profile = (png_charp)png_malloc(png_ptr, proflen);
|
||||
if (new_iccp_profile == (png_charp)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Could not allocate memory for ICC profile");
|
||||
png_free (png_ptr, new_iccp_name);
|
||||
return;
|
||||
}
|
||||
png_memcpy(new_iccp_profile, profile, (png_size_t)proflen);
|
||||
|
||||
png_free_data(png_ptr, info_ptr, PNG_FREE_ICCP, 0);
|
||||
@@ -520,6 +630,12 @@ png_set_text(png_structp png_ptr, png_infop info_ptr, png_textp text_ptr,
|
||||
old_text = info_ptr->text;
|
||||
info_ptr->text = (png_textp)png_malloc(png_ptr,
|
||||
(png_uint_32)(info_ptr->max_text * sizeof (png_text)));
|
||||
if (info_ptr->text == (png_textp)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Could not allocate memory for text");
|
||||
info_ptr->text = old_text;
|
||||
return;
|
||||
}
|
||||
png_memcpy(info_ptr->text, old_text, (png_size_t)(old_max *
|
||||
sizeof(png_text)));
|
||||
png_free(png_ptr, old_text);
|
||||
@@ -530,6 +646,11 @@ png_set_text(png_structp png_ptr, png_infop info_ptr, png_textp text_ptr,
|
||||
info_ptr->num_text = 0;
|
||||
info_ptr->text = (png_textp)png_malloc(png_ptr,
|
||||
(png_uint_32)(info_ptr->max_text * sizeof (png_text)));
|
||||
if (info_ptr->text == (png_textp)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Could not allocate memory for text");
|
||||
return;
|
||||
}
|
||||
#ifdef PNG_FREE_ME_SUPPORTED
|
||||
info_ptr->free_me |= PNG_FREE_TEXT;
|
||||
#endif
|
||||
@@ -591,6 +712,11 @@ png_set_text(png_structp png_ptr, png_infop info_ptr, png_textp text_ptr,
|
||||
|
||||
textp->key = (png_charp)png_malloc(png_ptr,
|
||||
(png_uint_32)(key_len + text_length + lang_len + lang_key_len + 4));
|
||||
if (textp->key == (png_charp)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Could not allocate memory for text pointer");
|
||||
return;
|
||||
}
|
||||
png_debug2(2, "Allocated %d bytes at %x in png_set_text\n",
|
||||
key_len + lang_len + lang_key_len + text_length + 4, (int)textp->key);
|
||||
|
||||
@@ -676,8 +802,14 @@ png_set_tRNS(png_structp png_ptr, png_infop info_ptr,
|
||||
#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);
|
||||
png_ptr->trans = info_ptr->trans = (png_bytep)png_malloc(png_ptr,
|
||||
num_trans);
|
||||
if (png_ptr->trans == (png_bytep)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Could not allocate memory for tRNS array");
|
||||
return;
|
||||
}
|
||||
png_memcpy(info_ptr->trans, trans, num_trans);
|
||||
#ifdef PNG_FREE_ME_SUPPORTED
|
||||
info_ptr->free_me |= PNG_FREE_TRNS;
|
||||
#else
|
||||
@@ -707,6 +839,11 @@ png_set_sPLT(png_structp png_ptr,
|
||||
|
||||
np = (png_sPLT_tp)png_malloc(png_ptr,
|
||||
(info_ptr->splt_palettes_num + nentries) * sizeof(png_sPLT_t));
|
||||
if (np == (png_sPLT_tp)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Could not allocate memory for sPLT");
|
||||
return;
|
||||
}
|
||||
|
||||
png_memcpy(np, info_ptr->splt_palettes,
|
||||
info_ptr->splt_palettes_num * sizeof(png_sPLT_t));
|
||||
@@ -719,14 +856,22 @@ png_set_sPLT(png_structp png_ptr,
|
||||
png_sPLT_tp from = entries + i;
|
||||
|
||||
to->name = (png_charp)png_malloc(png_ptr,
|
||||
png_strlen(from->name) + 1);
|
||||
png_strlen(from->name) + 1);
|
||||
png_strcpy(to->name, from->name);
|
||||
to->entries = (png_sPLT_entryp)png_malloc(png_ptr,
|
||||
from->nentries * sizeof(png_sPLT_t));
|
||||
png_memcpy(to->entries, from->entries,
|
||||
from->nentries * sizeof(png_sPLT_t));
|
||||
if (to->entries == (png_sPLT_entryp)NULL)
|
||||
{
|
||||
png_warning(png_ptr, "Could not allocate memory for sPLT entry");
|
||||
nentries=i;
|
||||
}
|
||||
else
|
||||
{
|
||||
png_memcpy(to->entries, from->entries,
|
||||
from->nentries * sizeof(png_sPLT_t));
|
||||
to->nentries = from->nentries;
|
||||
to->depth = from->depth;
|
||||
to->nentries = from->nentries;
|
||||
to->depth = from->depth;
|
||||
}
|
||||
}
|
||||
|
||||
info_ptr->splt_palettes = np;
|
||||
@@ -738,7 +883,7 @@ png_set_sPLT(png_structp png_ptr,
|
||||
}
|
||||
#endif /* PNG_sPLT_SUPPORTED */
|
||||
|
||||
#if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)
|
||||
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
|
||||
void PNGAPI
|
||||
png_set_unknown_chunks(png_structp png_ptr,
|
||||
png_infop info_ptr, png_unknown_chunkp unknowns, int num_unknowns)
|
||||
@@ -752,6 +897,11 @@ png_set_unknown_chunks(png_structp png_ptr,
|
||||
np = (png_unknown_chunkp)png_malloc(png_ptr,
|
||||
(info_ptr->unknown_chunks_num + num_unknowns) *
|
||||
sizeof(png_unknown_chunk));
|
||||
if (np == (png_unknown_chunkp)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Could not allocate memory for unknown chunk");
|
||||
return;
|
||||
}
|
||||
|
||||
png_memcpy(np, info_ptr->unknown_chunks,
|
||||
info_ptr->unknown_chunks_num * sizeof(png_unknown_chunk));
|
||||
@@ -765,11 +915,19 @@ png_set_unknown_chunks(png_structp png_ptr,
|
||||
|
||||
png_strcpy((png_charp)to->name, (png_charp)from->name);
|
||||
to->data = (png_bytep)png_malloc(png_ptr, from->size);
|
||||
png_memcpy(to->data, from->data, from->size);
|
||||
to->size = from->size;
|
||||
if (to->data == (png_bytep)NULL)
|
||||
{
|
||||
png_warning(png_ptr, "Could not allocate memory for unknown entry");
|
||||
num_unknowns=i;
|
||||
}
|
||||
else
|
||||
{
|
||||
png_memcpy(to->data, from->data, from->size);
|
||||
to->size = from->size;
|
||||
|
||||
/* note our location in the read or write sequence */
|
||||
to->location = (png_byte)(png_ptr->mode & 0xff);
|
||||
/* note our location in the read or write sequence */
|
||||
to->location = (png_byte)(png_ptr->mode & 0xff);
|
||||
}
|
||||
}
|
||||
|
||||
info_ptr->unknown_chunks = np;
|
||||
@@ -840,7 +998,7 @@ png_set_keep_unknown_chunks(png_structp png_ptr, int keep, png_bytep
|
||||
if (chunk_list == NULL)
|
||||
return;
|
||||
old_num_chunks=png_ptr->num_chunk_list;
|
||||
new_list=png_malloc(png_ptr,5*(num_chunks+old_num_chunks));
|
||||
new_list=(png_bytep)png_malloc(png_ptr,5*(num_chunks+old_num_chunks));
|
||||
if(png_ptr->chunk_list != (png_bytep)NULL)
|
||||
{
|
||||
png_memcpy(new_list, png_ptr->chunk_list, 5*old_num_chunks);
|
||||
@@ -883,7 +1041,6 @@ png_set_rows(png_structp png_ptr, png_infop info_ptr, png_bytepp row_pointers)
|
||||
info_ptr->row_pointers = row_pointers;
|
||||
if(row_pointers)
|
||||
info_ptr->valid |= PNG_INFO_IDAT;
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
100
pngtest.c
100
pngtest.c
@@ -1,9 +1,9 @@
|
||||
|
||||
/* pngtest.c - a simple test program to test libpng
|
||||
*
|
||||
* libpng 1.0.9beta8 - January 12, 2001
|
||||
* libpng 1.0.11beta3 - April 15, 2001
|
||||
* For conditions of distribution and use, see copyright notice in png.h
|
||||
* Copyright (c) 1998, 1999, 2000, 2001 Glenn Randers-Pehrson
|
||||
* Copyright (c) 1998-2001 Glenn Randers-Pehrson
|
||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||
*
|
||||
@@ -50,9 +50,21 @@
|
||||
# define FCLOSE(file) fclose(file)
|
||||
#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) */
|
||||
#ifndef PNG_DEBUG
|
||||
#define PNG_DEBUG 0
|
||||
# define PNG_DEBUG 0
|
||||
#endif
|
||||
|
||||
#if !PNG_DEBUG
|
||||
# define SINGLE_ROWBUF_ALLOC /* makes buffer overruns easier to nail */
|
||||
#endif
|
||||
|
||||
/* Turn on CPU timing
|
||||
@@ -257,6 +269,7 @@ static int wrote_question = 0;
|
||||
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
|
||||
than changing the library. */
|
||||
|
||||
#ifndef USE_FAR_KEYWORD
|
||||
static void
|
||||
pngtest_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
||||
@@ -270,7 +283,7 @@ pngtest_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
||||
|
||||
if (check != length)
|
||||
{
|
||||
png_error(png_ptr, "Read Error");
|
||||
png_error(png_ptr, "Read Error!");
|
||||
}
|
||||
}
|
||||
#else
|
||||
@@ -475,14 +488,15 @@ png_debug_malloc(png_structp png_ptr, png_uint_32 size)
|
||||
/* This calls the library allocator twice, once to get the requested
|
||||
buffer and once to get a new free list entry. */
|
||||
{
|
||||
memory_infop pinfo = png_malloc_default(png_ptr, sizeof *pinfo);
|
||||
memory_infop pinfo = (memory_infop)png_malloc_default(png_ptr,
|
||||
sizeof *pinfo);
|
||||
pinfo->size = size;
|
||||
current_allocation += size;
|
||||
total_allocation += size;
|
||||
num_allocations ++;
|
||||
if (current_allocation > maximum_allocation)
|
||||
maximum_allocation = current_allocation;
|
||||
pinfo->pointer = png_malloc_default(png_ptr, size);
|
||||
pinfo->pointer = (png_voidp)png_malloc_default(png_ptr, size);
|
||||
pinfo->next = pinformation;
|
||||
pinformation = pinfo;
|
||||
/* Make sure the caller isn't assuming zeroed memory. */
|
||||
@@ -524,7 +538,7 @@ png_debug_free(png_structp png_ptr, png_voidp ptr)
|
||||
fprintf(STDERR, "Duplicate free of memory\n");
|
||||
/* We must free the list element too, but first kill
|
||||
the memory that is to be freed. */
|
||||
memset(ptr, 0x55, pinfo->size);
|
||||
png_memset(ptr, 0x55, pinfo->size);
|
||||
png_free_default(png_ptr, pinfo);
|
||||
pinfo=NULL;
|
||||
break;
|
||||
@@ -555,8 +569,17 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
||||
{
|
||||
static png_FILE_p fpin;
|
||||
static png_FILE_p fpout; /* "static" prevents setjmp corruption */
|
||||
png_structp read_ptr, write_ptr;
|
||||
png_infop read_info_ptr, write_info_ptr, end_info_ptr, write_end_info_ptr;
|
||||
png_structp read_ptr;
|
||||
png_infop read_info_ptr, end_info_ptr;
|
||||
#ifdef PNG_WRITE_SUPPORTED
|
||||
png_structp write_ptr;
|
||||
png_infop write_info_ptr;
|
||||
png_infop write_end_info_ptr;
|
||||
#else
|
||||
png_structp write_ptr = NULL;
|
||||
png_infop write_info_ptr = NULL;
|
||||
png_infop write_end_info_ptr = NULL;
|
||||
#endif
|
||||
png_bytep row_buf;
|
||||
png_uint_32 y;
|
||||
png_uint_32 width, height;
|
||||
@@ -611,6 +634,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
||||
png_set_error_fn(read_ptr, (png_voidp)inname, pngtest_error,
|
||||
pngtest_warning);
|
||||
#endif
|
||||
#ifdef PNG_WRITE_SUPPORTED
|
||||
#ifdef PNG_USER_MEM_SUPPORTED
|
||||
write_ptr = png_create_write_struct_2(PNG_LIBPNG_VER_STRING, (png_voidp)NULL,
|
||||
(png_error_ptr)NULL, (png_error_ptr)NULL, (png_voidp)NULL,
|
||||
@@ -622,13 +646,14 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
||||
#if defined(PNG_NO_STDIO)
|
||||
png_set_error_fn(write_ptr, (png_voidp)inname, pngtest_error,
|
||||
pngtest_warning);
|
||||
#endif
|
||||
#endif
|
||||
png_debug(0, "Allocating read_info, write_info and end_info structures\n");
|
||||
read_info_ptr = png_create_info_struct(read_ptr);
|
||||
write_info_ptr = png_create_info_struct(write_ptr);
|
||||
end_info_ptr = png_create_info_struct(read_ptr);
|
||||
#ifdef PNG_WRITE_SUPPORTED
|
||||
write_info_ptr = png_create_info_struct(write_ptr);
|
||||
write_end_info_ptr = png_create_info_struct(write_ptr);
|
||||
#ifdef PNG_USER_MEM_SUPPORTED
|
||||
#endif
|
||||
|
||||
#ifdef PNG_SETJMP_SUPPORTED
|
||||
@@ -641,8 +666,10 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
||||
{
|
||||
fprintf(STDERR, "%s -> %s: libpng read error\n", inname, outname);
|
||||
png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr);
|
||||
#ifdef PNG_WRITE_SUPPORTED
|
||||
png_destroy_info_struct(write_ptr, &write_end_info_ptr);
|
||||
png_destroy_write_struct(&write_ptr, &write_info_ptr);
|
||||
#endif
|
||||
FCLOSE(fpin);
|
||||
FCLOSE(fpout);
|
||||
return (1);
|
||||
@@ -651,6 +678,7 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
||||
png_memcpy(png_jmpbuf(read_ptr),jmpbuf,sizeof(jmp_buf));
|
||||
#endif
|
||||
|
||||
#ifdef PNG_WRITE_SUPPORTED
|
||||
png_debug(0, "Setting jmpbuf for write struct\n");
|
||||
#ifdef USE_FAR_KEYWORD
|
||||
if (setjmp(jmpbuf))
|
||||
@@ -661,7 +689,9 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
||||
fprintf(STDERR, "%s -> %s: libpng write error\n", inname, outname);
|
||||
png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr);
|
||||
png_destroy_info_struct(write_ptr, &write_end_info_ptr);
|
||||
#ifdef PNG_WRITE_SUPPORTED
|
||||
png_destroy_write_struct(&write_ptr, &write_info_ptr);
|
||||
#endif
|
||||
FCLOSE(fpin);
|
||||
FCLOSE(fpout);
|
||||
return (1);
|
||||
@@ -669,29 +699,38 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
||||
#ifdef USE_FAR_KEYWORD
|
||||
png_memcpy(png_jmpbuf(write_ptr),jmpbuf,sizeof(jmp_buf));
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
|
||||
png_debug(0, "Initializing input and output streams\n");
|
||||
#if !defined(PNG_NO_STDIO)
|
||||
png_init_io(read_ptr, fpin);
|
||||
# ifdef PNG_WRITE_SUPPORTED
|
||||
png_init_io(write_ptr, fpout);
|
||||
# endif
|
||||
#else
|
||||
png_set_read_fn(read_ptr, (png_voidp)fpin, pngtest_read_data);
|
||||
#ifdef PNG_WRITE_SUPPORTED
|
||||
png_set_write_fn(write_ptr, (png_voidp)fpout, pngtest_write_data,
|
||||
#if defined(PNG_WRITE_FLUSH_SUPPORTED)
|
||||
pngtest_flush);
|
||||
#else
|
||||
#endif
|
||||
NULL);
|
||||
#endif
|
||||
#endif
|
||||
if(status_dots_requested == 1)
|
||||
{
|
||||
#ifdef PNG_WRITE_SUPPORTED
|
||||
png_set_write_status_fn(write_ptr, write_row_callback);
|
||||
#endif
|
||||
png_set_read_status_fn(read_ptr, read_row_callback);
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef PNG_WRITE_SUPPORTED
|
||||
png_set_write_status_fn(write_ptr, NULL);
|
||||
#endif
|
||||
png_set_read_status_fn(read_ptr, NULL);
|
||||
}
|
||||
|
||||
@@ -975,32 +1014,41 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef PNG_WRITE_SUPPORTED
|
||||
png_debug(0, "\nWriting info struct\n");
|
||||
|
||||
/* If we wanted, we could write info in two steps:
|
||||
png_write_info_before_PLTE(write_ptr, write_info_ptr);
|
||||
*/
|
||||
png_write_info(write_ptr, write_info_ptr);
|
||||
#endif
|
||||
|
||||
png_debug(0, "\nAllocating row buffer \n");
|
||||
#ifdef SINGLE_ROWBUF_ALLOC
|
||||
png_debug(0, "\nAllocating row buffer...");
|
||||
row_buf = (png_bytep)png_malloc(read_ptr,
|
||||
png_get_rowbytes(read_ptr, read_info_ptr));
|
||||
png_debug1(0, "0x%08lx\n\n", (unsigned long)row_buf);
|
||||
if (row_buf == NULL)
|
||||
{
|
||||
fprintf(STDERR, "No memory to allocate row buffer\n");
|
||||
png_destroy_read_struct(&read_ptr, &read_info_ptr, (png_infopp)NULL);
|
||||
#ifdef PNG_WRITE_SUPPORTED
|
||||
png_destroy_info_struct(write_ptr, &write_end_info_ptr);
|
||||
png_destroy_write_struct(&write_ptr, &write_info_ptr);
|
||||
#endif
|
||||
FCLOSE(fpin);
|
||||
FCLOSE(fpout);
|
||||
return (1);
|
||||
}
|
||||
#endif /* SINGLE_ROWBUF_ALLOC */
|
||||
png_debug(0, "Writing row data\n");
|
||||
|
||||
#if defined(PNG_READ_INTERLACING_SUPPORTED) || \
|
||||
defined(PNG_WRITE_INTERLACING_SUPPORTED)
|
||||
num_pass = png_set_interlace_handling(read_ptr);
|
||||
# ifdef PNG_WRITE_SUPPORTED
|
||||
png_set_interlace_handling(write_ptr);
|
||||
# endif
|
||||
#else
|
||||
num_pass=1;
|
||||
#endif
|
||||
@@ -1015,7 +1063,16 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
||||
png_debug1(0, "Writing row data for pass %d\n",pass);
|
||||
for (y = 0; y < height; y++)
|
||||
{
|
||||
#ifndef SINGLE_ROWBUF_ALLOC
|
||||
png_debug2(0, "\nAllocating row buffer (pass %d, y = %ld)...", pass,y);
|
||||
row_buf = (png_bytep)png_malloc(read_ptr,
|
||||
png_get_rowbytes(read_ptr, read_info_ptr));
|
||||
png_debug2(0, "0x%08lx (%ld bytes)\n", (unsigned long)row_buf,
|
||||
png_get_rowbytes(read_ptr, read_info_ptr));
|
||||
#endif /* !SINGLE_ROWBUF_ALLOC */
|
||||
png_read_rows(read_ptr, (png_bytepp)&row_buf, (png_bytepp)NULL, 1);
|
||||
|
||||
#ifdef PNG_WRITE_SUPPORTED
|
||||
#ifdef PNGTEST_TIMING
|
||||
t_stop = (float)clock();
|
||||
t_decode += (t_stop - t_start);
|
||||
@@ -1027,6 +1084,12 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
||||
t_encode += (t_stop - t_start);
|
||||
t_start = t_stop;
|
||||
#endif
|
||||
#endif /* PNG_WRITE_SUPPORTED */
|
||||
|
||||
#ifndef SINGLE_ROWBUF_ALLOC
|
||||
png_debug2(0, "Freeing row buffer (pass %d, y = %ld)\n\n", pass, y);
|
||||
png_free(read_ptr, row_buf);
|
||||
#endif /* !SINGLE_ROWBUF_ALLOC */
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1089,7 +1152,9 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#ifdef PNG_WRITE_SUPPORTED
|
||||
png_write_end(write_ptr, write_end_info_ptr);
|
||||
#endif
|
||||
|
||||
#ifdef PNG_EASY_ACCESS_SUPPORTED
|
||||
if(verbose)
|
||||
@@ -1103,11 +1168,20 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
||||
#endif
|
||||
|
||||
png_debug(0, "Destroying data structs\n");
|
||||
#ifdef SINGLE_ROWBUF_ALLOC
|
||||
png_debug(1, "destroying row_buf for read_ptr\n");
|
||||
png_free(read_ptr, row_buf);
|
||||
row_buf=NULL;
|
||||
#endif /* SINGLE_ROWBUF_ALLOC */
|
||||
png_debug(1, "destroying read_ptr, read_info_ptr, end_info_ptr\n");
|
||||
png_destroy_read_struct(&read_ptr, &read_info_ptr, &end_info_ptr);
|
||||
#ifdef PNG_WRITE_SUPPORTED
|
||||
png_debug(1, "destroying write_end_info_ptr\n");
|
||||
png_destroy_info_struct(write_ptr, &write_end_info_ptr);
|
||||
png_debug(1, "destroying write_ptr, write_info_ptr\n");
|
||||
png_destroy_write_struct(&write_ptr, &write_info_ptr);
|
||||
#endif
|
||||
png_debug(0, "Destruction complete.\n");
|
||||
|
||||
FCLOSE(fpin);
|
||||
FCLOSE(fpout);
|
||||
@@ -1449,4 +1523,4 @@ main(int argc, char *argv[])
|
||||
}
|
||||
|
||||
/* Generate a compiler error if there is an old png.h in the search path. */
|
||||
typedef version_1_0_9beta8 your_png_h_is_not_version_1_0_9beta8;
|
||||
typedef version_1_0_11beta3 your_png_h_is_not_version_1_0_11beta3;
|
||||
|
||||
10
pngtrans.c
10
pngtrans.c
@@ -1,9 +1,9 @@
|
||||
|
||||
/* pngtrans.c - transforms the data in a row (used by both readers and writers)
|
||||
*
|
||||
* libpng 1.0.9beta8 - January 12, 2001
|
||||
* libpng 1.0.11beta3 - April 15, 2001
|
||||
* For conditions of distribution and use, see copyright notice in png.h
|
||||
* Copyright (c) 1998, 1999, 2000, 2001 Glenn Randers-Pehrson
|
||||
* Copyright (c) 1998-2001 Glenn Randers-Pehrson
|
||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||
*/
|
||||
@@ -392,11 +392,12 @@ png_do_strip_filler(png_row_infop row_info, png_bytep row, png_uint_32 flags)
|
||||
sp += 8; dp += 6;
|
||||
for (i = 1; i < row_width; i++)
|
||||
{
|
||||
/* This could be (although memcpy is probably slower):
|
||||
/* This could be (although png_memcpy is probably slower):
|
||||
png_memcpy(dp, sp, 6);
|
||||
sp += 8;
|
||||
dp += 6;
|
||||
*/
|
||||
|
||||
*dp++ = *sp++;
|
||||
*dp++ = *sp++;
|
||||
*dp++ = *sp++;
|
||||
@@ -411,11 +412,12 @@ png_do_strip_filler(png_row_infop row_info, png_bytep row, png_uint_32 flags)
|
||||
/* This converts from XXRRGGBB or AARRGGBB to RRGGBB */
|
||||
for (i = 0; i < row_width; i++)
|
||||
{
|
||||
/* This could be (although memcpy is probably slower):
|
||||
/* This could be (although png_memcpy is probably slower):
|
||||
png_memcpy(dp, sp, 6);
|
||||
sp += 8;
|
||||
dp += 6;
|
||||
*/
|
||||
|
||||
sp+=2;
|
||||
*dp++ = *sp++;
|
||||
*dp++ = *sp++;
|
||||
|
||||
20
pngvcrd.c
20
pngvcrd.c
@@ -2,9 +2,9 @@
|
||||
*
|
||||
* For Intel x86 CPU and Microsoft Visual C++ compiler
|
||||
*
|
||||
* libpng 1.0.9beta8 - January 12, 2001
|
||||
* libpng 1.0.11beta3 - April 15, 2001
|
||||
* For conditions of distribution and use, see copyright notice in png.h
|
||||
* Copyright (c) 1998, 1999, 2000, 2001 Glenn Randers-Pehrson
|
||||
* Copyright (c) 1998-2001 Glenn Randers-Pehrson
|
||||
* Copyright (c) 1998, Intel Corporation
|
||||
*
|
||||
* Contributed by Nirav Chhatrapati, Intel Corporation, 1998
|
||||
@@ -19,8 +19,6 @@
|
||||
*
|
||||
* [png_read_filter_row_mmx_avg() bpp == 2 bugfix, GRR 20000916]
|
||||
*
|
||||
* [runtime MMX configuration, GRR 20010102]
|
||||
*
|
||||
*/
|
||||
|
||||
#define PNG_INTERNAL
|
||||
@@ -384,6 +382,8 @@ end8:
|
||||
incr1 = (disp)*pixel_bytes;
|
||||
for (i = initial_val; i < final_val; i += incr1)
|
||||
{
|
||||
if (pixel_bytes > (png_size_t)(final_val-i))
|
||||
pixel_bytes = (png_size_t)(final_val-i);
|
||||
png_memcpy(dstptr, srcptr, pixel_bytes);
|
||||
srcptr += incr1;
|
||||
dstptr += incr1;
|
||||
@@ -495,6 +495,8 @@ end16:
|
||||
incr1 = (disp)*pixel_bytes;
|
||||
for (i = initial_val; i < final_val; i += incr1)
|
||||
{
|
||||
if (pixel_bytes > (png_size_t)(final_val-i))
|
||||
pixel_bytes = (png_size_t)(final_val-i);
|
||||
png_memcpy(dstptr, srcptr, pixel_bytes);
|
||||
srcptr += incr1;
|
||||
dstptr += incr1;
|
||||
@@ -625,6 +627,8 @@ end24:
|
||||
incr1 = (disp)*pixel_bytes;
|
||||
for (i = initial_val; i < final_val; i += incr1)
|
||||
{
|
||||
if (pixel_bytes > (png_size_t)(final_val-i))
|
||||
pixel_bytes = (png_size_t)(final_val-i);
|
||||
png_memcpy(dstptr, srcptr, pixel_bytes);
|
||||
srcptr += incr1;
|
||||
dstptr += incr1;
|
||||
@@ -764,6 +768,8 @@ end32:
|
||||
incr1 = (disp)*pixel_bytes;
|
||||
for (i = initial_val; i < final_val; i += incr1)
|
||||
{
|
||||
if (pixel_bytes > (png_size_t)(final_val-i))
|
||||
pixel_bytes = (png_size_t)(final_val-i);
|
||||
png_memcpy(dstptr, srcptr, pixel_bytes);
|
||||
srcptr += incr1;
|
||||
dstptr += incr1;
|
||||
@@ -921,6 +927,8 @@ end48:
|
||||
incr1 = (disp)*pixel_bytes;
|
||||
for (i = initial_val; i < final_val; i += incr1)
|
||||
{
|
||||
if (pixel_bytes > (png_size_t)(final_val-i))
|
||||
pixel_bytes = (png_size_t)(final_val-i);
|
||||
png_memcpy(dstptr, srcptr, pixel_bytes);
|
||||
srcptr += incr1;
|
||||
dstptr += incr1;
|
||||
@@ -949,6 +957,8 @@ end48:
|
||||
incr1 = (disp)*pixel_bytes;
|
||||
for (i = initial_val; i < final_val; i += incr1)
|
||||
{
|
||||
if (pixel_bytes > (png_size_t)(final_val-i))
|
||||
pixel_bytes = (png_size_t)(final_val-i);
|
||||
png_memcpy(dp, sptr, pixel_bytes);
|
||||
sptr += incr1;
|
||||
dp += incr1;
|
||||
@@ -1767,7 +1777,7 @@ loop4_pass4:
|
||||
} /* end of mmx_supported */
|
||||
|
||||
else /* MMX not supported: use modified C code - takes advantage
|
||||
* of inlining of memcpy for a constant */
|
||||
* of inlining of png_memcpy for a constant */
|
||||
{
|
||||
if (pixel_bytes == 1)
|
||||
{
|
||||
|
||||
6
pngwio.c
6
pngwio.c
@@ -1,9 +1,9 @@
|
||||
|
||||
/* pngwio.c - functions for data output
|
||||
*
|
||||
* libpng 1.0.9beta8 - January 12, 2001
|
||||
* libpng 1.0.11beta3 - April 15, 2001
|
||||
* For conditions of distribution and use, see copyright notice in png.h
|
||||
* Copyright (c) 1998, 1999, 2000, 2001 Glenn Randers-Pehrson
|
||||
* Copyright (c) 1998-2001 Glenn Randers-Pehrson
|
||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||
*
|
||||
@@ -17,6 +17,7 @@
|
||||
|
||||
#define PNG_INTERNAL
|
||||
#include "png.h"
|
||||
#ifdef PNG_WRITE_SUPPORTED
|
||||
|
||||
/* Write the data to whatever output you are using. The default routine
|
||||
writes to a file pointer. Note that this routine sometimes gets called
|
||||
@@ -224,3 +225,4 @@ void *png_far_to_near(png_structp png_ptr,png_voidp ptr, int check)
|
||||
}
|
||||
# endif
|
||||
# endif
|
||||
#endif /* PNG_WRITE_SUPPORTED */
|
||||
|
||||
57
pngwrite.c
57
pngwrite.c
@@ -1,9 +1,9 @@
|
||||
|
||||
/* pngwrite.c - general routines to write a PNG file
|
||||
*
|
||||
* libpng 1.0.9beta8 - January 12, 2001
|
||||
* libpng 1.0.11beta3 - April 15, 2001
|
||||
* For conditions of distribution and use, see copyright notice in png.h
|
||||
* Copyright (c) 1998, 1999, 2000, 2001 Glenn Randers-Pehrson
|
||||
* Copyright (c) 1998-2001 Glenn Randers-Pehrson
|
||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||
*/
|
||||
@@ -11,6 +11,7 @@
|
||||
/* get internal access to png.h */
|
||||
#define PNG_INTERNAL
|
||||
#include "png.h"
|
||||
#ifdef PNG_WRITE_SUPPORTED
|
||||
|
||||
/* Writes all the PNG information. This is the suggested way to use the
|
||||
* library. If you have a new chunk to add, make a function to write it,
|
||||
@@ -511,6 +512,8 @@ png_create_write_struct_2(png_const_charp user_png_ver, png_voidp error_ptr,
|
||||
png_ptr->zbuf_size = PNG_ZBUF_SIZE;
|
||||
png_ptr->zbuf = (png_bytep)png_malloc(png_ptr,
|
||||
(png_uint_32)png_ptr->zbuf_size);
|
||||
if (png_ptr->zbuf == (png_bytep)NULL)
|
||||
png_error(png_ptr, "Could not allocate zbuf for writing");
|
||||
|
||||
png_set_write_fn(png_ptr, NULL, NULL, NULL);
|
||||
|
||||
@@ -580,6 +583,8 @@ png_write_init_2(png_structp png_ptr, png_const_charp user_png_ver,
|
||||
png_ptr->zbuf_size = PNG_ZBUF_SIZE;
|
||||
png_ptr->zbuf = (png_bytep)png_malloc(png_ptr,
|
||||
(png_uint_32)png_ptr->zbuf_size);
|
||||
if (png_ptr->zbuf == (png_bytep)NULL)
|
||||
png_error(png_ptr, "Could not allocate zbuf for writing");
|
||||
png_set_write_fn(png_ptr, NULL, NULL, NULL);
|
||||
|
||||
#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED)
|
||||
@@ -924,7 +929,7 @@ png_destroy_write_struct(png_structpp png_ptr_ptr, png_infopp info_ptr_ptr)
|
||||
|
||||
|
||||
/* Free any memory used in png_ptr struct (old method) */
|
||||
void PNGAPI
|
||||
void /* PRIVATE */
|
||||
png_write_destroy(png_structp png_ptr)
|
||||
{
|
||||
#ifdef PNG_SETJMP_SUPPORTED
|
||||
@@ -1028,6 +1033,8 @@ png_set_filter(png_structp png_ptr, int method, int filters)
|
||||
{
|
||||
png_ptr->sub_row = (png_bytep)png_malloc(png_ptr,
|
||||
(png_ptr->rowbytes + 1));
|
||||
if (png_ptr->sub_row == (png_bytep)NULL)
|
||||
png_error(png_ptr, "Could not allocate sub_row");
|
||||
png_ptr->sub_row[0] = PNG_FILTER_VALUE_SUB;
|
||||
}
|
||||
|
||||
@@ -1042,6 +1049,10 @@ png_set_filter(png_structp png_ptr, int method, int filters)
|
||||
{
|
||||
png_ptr->up_row = (png_bytep)png_malloc(png_ptr,
|
||||
(png_ptr->rowbytes + 1));
|
||||
if (png_ptr->up_row == (png_bytep)NULL)
|
||||
{
|
||||
png_error(png_ptr, "Could not allocate sub_row");
|
||||
}
|
||||
png_ptr->up_row[0] = PNG_FILTER_VALUE_UP;
|
||||
}
|
||||
}
|
||||
@@ -1057,6 +1068,8 @@ png_set_filter(png_structp png_ptr, int method, int filters)
|
||||
{
|
||||
png_ptr->avg_row = (png_bytep)png_malloc(png_ptr,
|
||||
(png_ptr->rowbytes + 1));
|
||||
if (png_ptr->avg_row == (png_bytep)NULL)
|
||||
png_error(png_ptr, "Could not allocate avg_row");
|
||||
png_ptr->avg_row[0] = PNG_FILTER_VALUE_AVG;
|
||||
}
|
||||
}
|
||||
@@ -1073,6 +1086,8 @@ png_set_filter(png_structp png_ptr, int method, int filters)
|
||||
{
|
||||
png_ptr->paeth_row = (png_bytep)png_malloc(png_ptr,
|
||||
(png_ptr->rowbytes + 1));
|
||||
if (png_ptr->paeth_row == (png_bytep)NULL)
|
||||
png_error(png_ptr, "Could not allocate avg_row");
|
||||
png_ptr->paeth_row[0] = PNG_FILTER_VALUE_PAETH;
|
||||
}
|
||||
}
|
||||
@@ -1128,26 +1143,39 @@ png_set_filter_heuristics(png_structp png_ptr, int heuristic_method,
|
||||
png_ptr->prev_filters = (png_bytep)png_malloc(png_ptr,
|
||||
(png_uint_32)(sizeof(png_byte) * num_weights));
|
||||
|
||||
/* To make sure that the weighting starts out fairly */
|
||||
for (i = 0; i < num_weights; i++)
|
||||
if (png_ptr->prev_filters != (png_bytep)NULL)
|
||||
{
|
||||
png_ptr->prev_filters[i] = 255;
|
||||
/* To make sure that the weighting starts out fairly */
|
||||
for (i = 0; i < num_weights; i++)
|
||||
{
|
||||
png_ptr->prev_filters[i] = 255;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (png_ptr->filter_weights == NULL)
|
||||
{
|
||||
png_ptr->filter_weights = (png_uint_16p) png_malloc(png_ptr,
|
||||
png_ptr->filter_weights = (png_uint_16p)png_malloc(png_ptr,
|
||||
(png_uint_32)(sizeof(png_uint_16) * num_weights));
|
||||
|
||||
png_ptr->inv_filter_weights = (png_uint_16p) png_malloc(png_ptr,
|
||||
png_ptr->inv_filter_weights = (png_uint_16p)png_malloc(png_ptr,
|
||||
(png_uint_32)(sizeof(png_uint_16) * num_weights));
|
||||
|
||||
for (i = 0; i < num_weights; i++)
|
||||
if (png_ptr->inv_filter_weights == (png_uint_16p)NULL)
|
||||
{
|
||||
png_ptr->inv_filter_weights[i] =
|
||||
png_ptr->filter_weights[i] = PNG_WEIGHT_FACTOR;
|
||||
png_free(png_ptr, png_ptr->filter_weights);
|
||||
png_ptr->filter_weights = NULL;
|
||||
}
|
||||
if (png_ptr->filter_weights != (png_uint_16p)NULL &&
|
||||
png_ptr->inv_filter_weights != (png_uint_16p)NULL)
|
||||
{
|
||||
for (i = 0; i < num_weights; i++)
|
||||
{
|
||||
png_ptr->inv_filter_weights[i] =
|
||||
png_ptr->filter_weights[i] = PNG_WEIGHT_FACTOR;
|
||||
}
|
||||
}
|
||||
else
|
||||
num_weights=0;
|
||||
}
|
||||
|
||||
for (i = 0; i < num_weights; i++)
|
||||
@@ -1172,10 +1200,10 @@ png_set_filter_heuristics(png_structp png_ptr, int heuristic_method,
|
||||
*/
|
||||
if (png_ptr->filter_costs == NULL)
|
||||
{
|
||||
png_ptr->filter_costs = (png_uint_16p) png_malloc(png_ptr,
|
||||
png_ptr->filter_costs = (png_uint_16p)png_malloc(png_ptr,
|
||||
(png_uint_32)(sizeof(png_uint_16) * PNG_FILTER_VALUE_LAST));
|
||||
|
||||
png_ptr->inv_filter_costs = (png_uint_16p) png_malloc(png_ptr,
|
||||
png_ptr->inv_filter_costs = (png_uint_16p)png_malloc(png_ptr,
|
||||
(png_uint_32)(sizeof(png_uint_16) * PNG_FILTER_VALUE_LAST));
|
||||
|
||||
for (i = 0; i < PNG_FILTER_VALUE_LAST; i++)
|
||||
@@ -1363,3 +1391,4 @@ png_write_png(png_structp png_ptr, png_infop info_ptr,
|
||||
/* quiet compiler warnings */ return;
|
||||
}
|
||||
#endif
|
||||
#endif /* PNG_WRITE_SUPPORTED */
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
|
||||
/* pngwtran.c - transforms the data in a row for PNG writers
|
||||
*
|
||||
* libpng 1.0.9beta8 - January 12, 2001
|
||||
* libpng 1.0.11beta3 - April 15, 2001
|
||||
* For conditions of distribution and use, see copyright notice in png.h
|
||||
* Copyright (c) 1998, 1999, 2000, 2001 Glenn Randers-Pehrson
|
||||
* Copyright (c) 1998-2001 Glenn Randers-Pehrson
|
||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||
*/
|
||||
|
||||
#define PNG_INTERNAL
|
||||
#include "png.h"
|
||||
#ifdef PNG_WRITE_SUPPORTED
|
||||
|
||||
/* Transform the data according to the user's wishes. The order of
|
||||
* transformations is significant.
|
||||
@@ -559,3 +560,4 @@ png_do_write_intrapixel(png_row_infop row_info, png_bytep row)
|
||||
}
|
||||
}
|
||||
#endif /* PNG_MNG_FEATURES_SUPPORTED */
|
||||
#endif /* PNG_WRITE_SUPPORTED */
|
||||
|
||||
88
pngwutil.c
88
pngwutil.c
@@ -1,15 +1,16 @@
|
||||
|
||||
/* pngwutil.c - utilities to write a PNG file
|
||||
*
|
||||
* libpng 1.0.9beta8 - January 12, 2001
|
||||
* libpng 1.0.11beta3 - April 15, 2001
|
||||
* For conditions of distribution and use, see copyright notice in png.h
|
||||
* Copyright (c) 1998, 1999, 2000, 2001 Glenn Randers-Pehrson
|
||||
* Copyright (c) 1998-2001 Glenn Randers-Pehrson
|
||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||
*/
|
||||
|
||||
#define PNG_INTERNAL
|
||||
#include "png.h"
|
||||
#ifdef PNG_WRITE_SUPPORTED
|
||||
|
||||
/* Place a 32-bit number into a buffer in PNG byte order. We work
|
||||
* with unsigned numbers for convenience, although one supported
|
||||
@@ -234,21 +235,35 @@ png_text_compress(png_structp png_ptr,
|
||||
old_ptr = comp->output_ptr;
|
||||
comp->output_ptr = (png_charpp)png_malloc(png_ptr,
|
||||
(png_uint_32)(comp->max_output_ptr * sizeof (png_charpp)));
|
||||
png_memcpy(comp->output_ptr, old_ptr,
|
||||
old_max * sizeof (png_charp));
|
||||
if (comp->output_ptr == (png_charpp)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Cannot allocate compression buffer");
|
||||
comp->output_ptr=old_ptr;
|
||||
}
|
||||
png_memcpy(comp->output_ptr, old_ptr, old_max
|
||||
* sizeof (png_charp));
|
||||
png_free(png_ptr, old_ptr);
|
||||
}
|
||||
else
|
||||
comp->output_ptr = (png_charpp)png_malloc(png_ptr,
|
||||
(png_uint_32)(comp->max_output_ptr * sizeof (png_charp)));
|
||||
if (comp->output_ptr == (png_charpp)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Cannot allocate compression buffer");
|
||||
}
|
||||
}
|
||||
|
||||
/* save the data */
|
||||
comp->output_ptr[comp->num_output_ptr] = (png_charp)png_malloc(png_ptr,
|
||||
(png_uint_32)png_ptr->zbuf_size);
|
||||
png_memcpy(comp->output_ptr[comp->num_output_ptr], png_ptr->zbuf,
|
||||
png_ptr->zbuf_size);
|
||||
comp->num_output_ptr++;
|
||||
if (comp->output_ptr[comp->num_output_ptr] == (png_charp)NULL)
|
||||
png_warning (png_ptr, "Cannot allocate compression buffer");
|
||||
else
|
||||
{
|
||||
png_memcpy(comp->output_ptr[comp->num_output_ptr], png_ptr->zbuf,
|
||||
png_ptr->zbuf_size);
|
||||
comp->num_output_ptr++;
|
||||
}
|
||||
|
||||
/* and reset the buffer */
|
||||
png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
|
||||
@@ -283,8 +298,9 @@ png_text_compress(png_structp png_ptr,
|
||||
/* This could be optimized to realloc() */
|
||||
comp->output_ptr = (png_charpp)png_malloc(png_ptr,
|
||||
(png_uint_32)(comp->max_output_ptr * sizeof (png_charpp)));
|
||||
png_memcpy(comp->output_ptr, old_ptr,
|
||||
old_max * sizeof (png_charp));
|
||||
if (comp->output_ptr != (png_charpp)NULL)
|
||||
png_memcpy(comp->output_ptr, old_ptr,
|
||||
old_max * sizeof (png_charp));
|
||||
png_free(png_ptr, old_ptr);
|
||||
}
|
||||
else
|
||||
@@ -295,9 +311,14 @@ png_text_compress(png_structp png_ptr,
|
||||
/* save off the data */
|
||||
comp->output_ptr[comp->num_output_ptr] =
|
||||
(png_charp)png_malloc(png_ptr, (png_uint_32)png_ptr->zbuf_size);
|
||||
png_memcpy(comp->output_ptr[comp->num_output_ptr], png_ptr->zbuf,
|
||||
png_ptr->zbuf_size);
|
||||
comp->num_output_ptr++;
|
||||
if (comp->output_ptr[comp->num_output_ptr] == (png_charp)NULL)
|
||||
png_warning (png_ptr, "Cannot allocate compression buffer");
|
||||
else
|
||||
{
|
||||
png_memcpy(comp->output_ptr[comp->num_output_ptr], png_ptr->zbuf,
|
||||
png_ptr->zbuf_size);
|
||||
comp->num_output_ptr++;
|
||||
}
|
||||
|
||||
/* and reset the buffer pointers */
|
||||
png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
|
||||
@@ -534,7 +555,8 @@ png_write_PLTE(png_structp png_ptr, png_colorp palette, png_uint_32 num_pal)
|
||||
|
||||
png_debug(1, "in png_write_PLTE\n");
|
||||
if ((
|
||||
#if defined(PNG_MNG_FEATURES_SUPPORTED)
|
||||
#if defined(PNG_MNG_FEATURES_SUPPORTED) || \
|
||||
defined (PNG_WRITE_EMPTY_PLTE_SUPPORTED)
|
||||
!(png_ptr->mng_features_permitted & PNG_FLAG_MNG_EMPTY_PLTE) &&
|
||||
#endif
|
||||
num_pal == 0) || num_pal > 256)
|
||||
@@ -728,7 +750,7 @@ png_write_sPLT(png_structp png_ptr, png_sPLT_tp spalette)
|
||||
}
|
||||
|
||||
/* make sure we include the NULL after the name */
|
||||
png_write_chunk_start(png_ptr, (png_bytep) png_sPLT,
|
||||
png_write_chunk_start(png_ptr, (png_bytep)png_sPLT,
|
||||
(png_uint_32)(name_len + 2 + palette_size));
|
||||
png_write_chunk_data(png_ptr, (png_bytep)new_name, name_len + 1);
|
||||
png_write_chunk_data(png_ptr, (png_bytep)&spalette->depth, 1);
|
||||
@@ -1017,7 +1039,8 @@ png_write_bKGD(png_structp png_ptr, png_color_16p back, int color_type)
|
||||
if (color_type == PNG_COLOR_TYPE_PALETTE)
|
||||
{
|
||||
if (
|
||||
#if defined(PNG_MNG_FEATURES_SUPPORTED)
|
||||
#if defined(PNG_MNG_FEATURES_SUPPORTED) || \
|
||||
defined (PNG_WRITE_EMPTY_PLTE_SUPPORTED)
|
||||
(png_ptr->num_palette ||
|
||||
(!(png_ptr->mng_features_permitted & PNG_FLAG_MNG_EMPTY_PLTE))) &&
|
||||
#endif
|
||||
@@ -1106,6 +1129,12 @@ png_check_keyword(png_structp png_ptr, png_charp key, png_charpp new_key)
|
||||
png_debug1(2, "Keyword to be checked is '%s'\n", key);
|
||||
|
||||
*new_key = (png_charp)png_malloc(png_ptr, (png_uint_32)(key_len + 2));
|
||||
|
||||
if (*new_key == (png_charp)NULL)
|
||||
{
|
||||
png_warning(png_ptr, "Could not allocate new key; keyword not checked");
|
||||
return key_len;
|
||||
}
|
||||
|
||||
/* Replace non-printing characters with a blank and print a warning */
|
||||
for (kp = key, dp = *new_key; *kp != '\0'; kp++, dp++)
|
||||
@@ -1422,6 +1451,12 @@ png_write_pCAL(png_structp png_ptr, png_charp purpose, png_int_32 X0,
|
||||
params_len = (png_uint_32p)png_malloc(png_ptr, (png_uint_32)(nparams
|
||||
*sizeof(png_uint_32)));
|
||||
|
||||
if (params_len == (png_uint_32p)NULL)
|
||||
{
|
||||
png_warning (png_ptr, "Could not allocate params for pCAL");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Find the length of each parameter, making sure we don't count the
|
||||
null terminator for the last parameter. */
|
||||
for (i = 0; i < nparams; i++)
|
||||
@@ -1486,8 +1521,8 @@ png_write_sCAL(png_structp png_ptr, int unit, double width,double height)
|
||||
png_debug1(3, "sCAL total length = %d\n", total_len);
|
||||
png_write_chunk_start(png_ptr, (png_bytep)png_sCAL, (png_uint_32)total_len);
|
||||
png_write_chunk_data(png_ptr, (png_bytep)&unit, 1);
|
||||
png_write_chunk_data(png_ptr, (png_bytep)wbuf, strlen(wbuf)+1);
|
||||
png_write_chunk_data(png_ptr, (png_bytep)hbuf, strlen(hbuf));
|
||||
png_write_chunk_data(png_ptr, (png_bytep)wbuf, png_strlen(wbuf)+1);
|
||||
png_write_chunk_data(png_ptr, (png_bytep)hbuf, png_strlen(hbuf));
|
||||
|
||||
png_write_chunk_end(png_ptr);
|
||||
}
|
||||
@@ -1505,15 +1540,15 @@ png_write_sCAL_s(png_structp png_ptr, int unit, png_charp width,
|
||||
|
||||
png_debug(1, "in png_write_sCAL_s\n");
|
||||
|
||||
strcpy(wbuf,(const char *)width);
|
||||
strcpy(hbuf,(const char *)height);
|
||||
png_strcpy(wbuf,(const char *)width);
|
||||
png_strcpy(hbuf,(const char *)height);
|
||||
total_len = 1 + png_strlen(wbuf)+1 + png_strlen(hbuf);
|
||||
|
||||
png_debug1(3, "sCAL total length = %d\n", total_len);
|
||||
png_write_chunk_start(png_ptr, (png_bytep)png_sCAL, (png_uint_32)total_len);
|
||||
png_write_chunk_data(png_ptr, (png_bytep)&unit, 1);
|
||||
png_write_chunk_data(png_ptr, (png_bytep)wbuf, strlen(wbuf)+1);
|
||||
png_write_chunk_data(png_ptr, (png_bytep)hbuf, strlen(hbuf));
|
||||
png_write_chunk_data(png_ptr, (png_bytep)wbuf, png_strlen(wbuf)+1);
|
||||
png_write_chunk_data(png_ptr, (png_bytep)hbuf, png_strlen(hbuf));
|
||||
|
||||
png_write_chunk_end(png_ptr);
|
||||
}
|
||||
@@ -1605,6 +1640,8 @@ png_write_start_row(png_structp png_ptr)
|
||||
|
||||
/* set up row buffer */
|
||||
png_ptr->row_buf = (png_bytep)png_malloc(png_ptr, (png_uint_32)buf_size);
|
||||
if (png_ptr->row_buf == (png_bytep)NULL)
|
||||
png_error(png_ptr, "Could not allocate row buffer");
|
||||
png_ptr->row_buf[0] = PNG_FILTER_VALUE_NONE;
|
||||
|
||||
/* set up filtering buffer, if using this filter */
|
||||
@@ -1612,6 +1649,8 @@ png_write_start_row(png_structp png_ptr)
|
||||
{
|
||||
png_ptr->sub_row = (png_bytep)png_malloc(png_ptr,
|
||||
(png_ptr->rowbytes + 1));
|
||||
if (png_ptr->sub_row == (png_bytep)NULL)
|
||||
png_error(png_ptr, "Could not allocate sub row buffer");
|
||||
png_ptr->sub_row[0] = PNG_FILTER_VALUE_SUB;
|
||||
}
|
||||
|
||||
@@ -1626,6 +1665,8 @@ png_write_start_row(png_structp png_ptr)
|
||||
{
|
||||
png_ptr->up_row = (png_bytep )png_malloc(png_ptr,
|
||||
(png_ptr->rowbytes + 1));
|
||||
if (png_ptr->up_row == (png_bytep)NULL)
|
||||
png_error(png_ptr, "Could not allocate up row buffer");
|
||||
png_ptr->up_row[0] = PNG_FILTER_VALUE_UP;
|
||||
}
|
||||
|
||||
@@ -1633,6 +1674,8 @@ png_write_start_row(png_structp png_ptr)
|
||||
{
|
||||
png_ptr->avg_row = (png_bytep)png_malloc(png_ptr,
|
||||
(png_ptr->rowbytes + 1));
|
||||
if (png_ptr->avg_row == (png_bytep)NULL)
|
||||
png_error(png_ptr, "Could not allocate avg row buffer");
|
||||
png_ptr->avg_row[0] = PNG_FILTER_VALUE_AVG;
|
||||
}
|
||||
|
||||
@@ -1640,6 +1683,8 @@ png_write_start_row(png_structp png_ptr)
|
||||
{
|
||||
png_ptr->paeth_row = (png_bytep )png_malloc(png_ptr,
|
||||
(png_ptr->rowbytes + 1));
|
||||
if (png_ptr->paeth_row == (png_bytep)NULL)
|
||||
png_error(png_ptr, "Could not allocate paeth row buffer");
|
||||
png_ptr->paeth_row[0] = PNG_FILTER_VALUE_PAETH;
|
||||
}
|
||||
}
|
||||
@@ -2631,3 +2676,4 @@ png_write_filtered_row(png_structp png_ptr, png_bytep filtered_row)
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif /* PNG_WRITE_SUPPORTED */
|
||||
|
||||
BIN
projects/beos/x86-shared.proj
Normal file
BIN
projects/beos/x86-shared.proj
Normal file
Binary file not shown.
22
projects/beos/x86-shared.txt
Normal file
22
projects/beos/x86-shared.txt
Normal file
@@ -0,0 +1,22 @@
|
||||
This project builds a shared library version of libpng on x86 BeOS.
|
||||
|
||||
It defines PNG_USE_PNGGCCRD, which activates the assembly code in
|
||||
pnggccrd.c; this hasn't been extensively tested on BeOS.
|
||||
|
||||
To install:
|
||||
|
||||
1) build
|
||||
|
||||
Note: As of version 1.0.10, you'll get a fair number of warnings when
|
||||
you compile pnggccrd.c. As far as I know, these are harmless,
|
||||
but it would be better if someone fixed them.
|
||||
|
||||
2) copy and png.h, pngconf.h somewhere; /boot/home/config/include (which
|
||||
you'll have to make) is a good choice
|
||||
|
||||
3) copy libpng.so to /boot/home/config/lib
|
||||
|
||||
4) build your libpng.so applications (remember to include libz.a as
|
||||
well when you link)
|
||||
|
||||
- Chris Herborth, March 27, 2001
|
||||
BIN
projects/beos/x86-static.proj
Normal file
BIN
projects/beos/x86-static.proj
Normal file
Binary file not shown.
22
projects/beos/x86-static.txt
Normal file
22
projects/beos/x86-static.txt
Normal file
@@ -0,0 +1,22 @@
|
||||
This project builds a static library version of libpng on x86 BeOS.
|
||||
|
||||
It defines PNG_USE_PNGGCCRD, which activates the assembly code in
|
||||
pnggccrd.c; this hasn't been extensively tested on BeOS.
|
||||
|
||||
To install:
|
||||
|
||||
1) build
|
||||
|
||||
Note: As of version 1.0.10, you'll get a fair number of warnings when
|
||||
you compile pnggccrd.c. As far as I know, these are harmless,
|
||||
but it would be better if someone fixed them.
|
||||
|
||||
2) copy and png.h, pngconf.h somewhere; /boot/home/config/include (which
|
||||
you'll have to make) is a good choice
|
||||
|
||||
3) copy libpng.a to /boot/home/config/lib
|
||||
|
||||
4) build your libpng.a applications (remember to include libz.a as
|
||||
well when you link)
|
||||
|
||||
- Chris Herborth, March 27, 2001
|
||||
@@ -1,5 +1,5 @@
|
||||
Microsoft Developer Studio Build File, Format Version 6.00 for
|
||||
libpng 1.0.9beta8 (January 12, 2001) and zlib
|
||||
libpng 1.0.11beta3 (April 15, 2001) and zlib
|
||||
|
||||
Copyright (C) 2000 Simon-Pierre Cadieux
|
||||
For conditions of distribution and use, see copyright notice in png.h
|
||||
@@ -25,9 +25,9 @@ This project will build the PNG Development Group's "official" versions of
|
||||
libpng and zlib libraries:
|
||||
|
||||
libpng1.dll (default version, currently C code only)
|
||||
libpng1a.dll (C + Assembler version)
|
||||
libpng1b.dll (C + Assembler debug version)
|
||||
libpng1d.dll (C code debug version)
|
||||
libpng1.dll (C + Assembler version)
|
||||
libpng1.dll (C + Assembler debug version)
|
||||
libpng1.dll (C code debug version)
|
||||
libpng1[c,e-m].dll (reserved for official versions)
|
||||
libpng1[n-z].dll (available for private versions)
|
||||
zlib.dll (default version, currently C code only)
|
||||
|
||||
@@ -6,7 +6,7 @@ LIBRARY
|
||||
DESCRIPTION "PNG image compression library for Windows"
|
||||
|
||||
EXPORTS
|
||||
;Version 1.0.9beta8
|
||||
;Version 1.0.11beta3
|
||||
png_build_grayscale_palette @1
|
||||
png_check_sig @2
|
||||
png_chunk_error @3
|
||||
@@ -83,7 +83,7 @@ EXPORTS
|
||||
png_read_end @74
|
||||
png_read_image @75
|
||||
png_read_info @76
|
||||
png_read_init @77
|
||||
png_read_init @77 ; deprecated
|
||||
png_read_png @78
|
||||
png_read_row @79
|
||||
png_read_rows @80
|
||||
@@ -168,7 +168,7 @@ EXPORTS
|
||||
png_write_image @159
|
||||
png_write_info @160
|
||||
png_write_info_before_PLTE @161
|
||||
png_write_init @162
|
||||
png_write_init @162 ; deprecated
|
||||
png_write_png @163
|
||||
png_write_row @164
|
||||
png_write_rows @165
|
||||
@@ -176,3 +176,11 @@ EXPORTS
|
||||
png_write_init_2 @167
|
||||
png_access_version_number @168
|
||||
; png_sig_bytes @169
|
||||
; png_libpng_ver @170
|
||||
png_init_io @171
|
||||
png_convert_to_rfc1123 @172
|
||||
png_set_invalid @173
|
||||
;To be added at version 1.2.0
|
||||
; png_permit_mng_features @174
|
||||
;To be added at version 1.2.0
|
||||
; png_mmx_support @175
|
||||
|
||||
@@ -8,9 +8,9 @@ libpng for WindowsCE Rel.1.0
|
||||
|
||||
Introduction
|
||||
============
|
||||
This is libpng 1.0.9beta8 ported to WindowsCE 2.0 and 2.11.
|
||||
libpng 1.0.9beta8 is a PNG reference library.
|
||||
See README, a document of original libpng 1.0.9beta8.
|
||||
This is libpng 1.0.11beta3 ported to WindowsCE 2.0 and 2.11.
|
||||
libpng 1.0.11beta3 is a PNG reference library.
|
||||
See README, a document of original libpng 1.0.11beta3.
|
||||
|
||||
zlib for WindowsCE
|
||||
==================
|
||||
@@ -23,7 +23,7 @@ This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
See README and LICENSE, documents of original libpng 1.0.9beta8, for conditions
|
||||
See README and LICENSE, documents of original libpng 1.0.11beta3, for conditions
|
||||
of use and distribution.
|
||||
|
||||
Files
|
||||
|
||||
@@ -24,7 +24,7 @@ libpng
|
||||
<EFBFBD>ɂȂ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Q<EFBFBD>ɂ<EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>ҁA<EFBFBD>z<EFBFBD>z<EFBFBD>ҁA<EFBFBD><EFBFBD><EFBFBD>̑<EFBFBD><EFBFBD><EFBFBD><EFBFBD>p<EFBFBD>҈ȊO<EFBFBD>̐l<EFBFBD><EFBFBD><EFBFBD>A
|
||||
<EFBFBD>c<EFBFBD>̂ɐӔC<EFBFBD><EFBFBD><EFBFBD>Ƃ<EFBFBD><EFBFBD>`<60><><EFBFBD>͂Ȃ<CD82><C882><EFBFBD><EFBFBD>̂Ƃ<CC82><C682>܂<EFBFBD><DC82>B
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD>̑<EFBFBD><EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>̃\<5C>t<EFBFBD>g<EFBFBD>E<EFBFBD>F<EFBFBD>A<EFBFBD>̗<EFBFBD><CC97>p<EFBFBD><70><EFBFBD><EFBFBD><EFBFBD>ɂ<C982><C282>ẮA<CD81><41><EFBFBD>łł<C582><C582><EFBFBD> libpng 1.0.9beta8<EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD>̑<EFBFBD><EFBFBD>A<EFBFBD><EFBFBD><EFBFBD>̃\<5C>t<EFBFBD>g<EFBFBD>E<EFBFBD>F<EFBFBD>A<EFBFBD>̗<EFBFBD><CC97>p<EFBFBD><70><EFBFBD><EFBFBD><EFBFBD>ɂ<C982><C282>ẮA<CD81><41><EFBFBD>łł<C582><C582><EFBFBD> libpng 1.0.11beta3<EFBFBD><EFBFBD>
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂Ƃ<EFBFBD><EFBFBD>܂<EFBFBD><EFBFBD>B<EFBFBD>ڂ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>́A<EFBFBD>t<EFBFBD><EFBFBD><EFBFBD><EFBFBD> README,LICENSE <20><><EFBFBD><EFBFBD><EFBFBD>ǂ݂<C782><DD82><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>B
|
||||
|
||||
<EFBFBD><EFBFBD><EFBFBD>^<5E><><EFBFBD>e
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
LIBRARY lpngce
|
||||
|
||||
EXPORTS
|
||||
;Version 1.0.9beta8
|
||||
;Version 1.0.11beta3
|
||||
png_build_grayscale_palette @1
|
||||
png_check_sig @2
|
||||
png_chunk_error @3
|
||||
@@ -82,7 +82,7 @@ EXPORTS
|
||||
png_read_end @74
|
||||
png_read_image @75
|
||||
png_read_info @76
|
||||
png_read_init @77
|
||||
png_read_init @77 ; deprecated
|
||||
png_read_png @78
|
||||
png_read_row @79
|
||||
png_read_rows @80
|
||||
@@ -167,7 +167,7 @@ EXPORTS
|
||||
png_write_image @159
|
||||
png_write_info @160
|
||||
png_write_info_before_PLTE @161
|
||||
png_write_init @162
|
||||
png_write_init @162 ; deprecated
|
||||
png_write_png @163
|
||||
png_write_row @164
|
||||
png_write_rows @165
|
||||
@@ -178,3 +178,8 @@ EXPORTS
|
||||
png_libpng_ver @170
|
||||
png_init_io @171
|
||||
png_convert_to_rfc1123 @172
|
||||
png_set_invalid @173
|
||||
;To be added at version 1.2.0
|
||||
; png_permit_mng_features @174
|
||||
;To be added at version 1.2.0
|
||||
; png_mmx_support @175
|
||||
|
||||
@@ -18,7 +18,7 @@ RM = rm -f
|
||||
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not
|
||||
# have to change it.
|
||||
PNGMAJ = 2
|
||||
PNGMIN = 1.0.9beta8
|
||||
PNGMIN = 1.0.11beta3
|
||||
PNGVER = $(PNGMAJ).$(PNGMIN)
|
||||
|
||||
prefix=/usr/local
|
||||
|
||||
@@ -10,6 +10,12 @@ CC=gcc
|
||||
ZLIBLIB=/usr/local/lib
|
||||
ZLIBINC=/usr/local/include
|
||||
|
||||
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not
|
||||
# have to change it.
|
||||
PNGMAJ = 2
|
||||
PNGMIN = 1.0.11beta3
|
||||
PNGVER = $(PNGMAJ).$(PNGMIN)
|
||||
|
||||
ALIGN=
|
||||
# For i386:
|
||||
# ALIGN=-malign-loops=2 -malign-functions=2
|
||||
@@ -28,12 +34,6 @@ LDFLAGS=-L. -Wl,-soname=libpng.so.$(PNGMAJ) -L$(ZLIBLIB) -lz -lm
|
||||
RANLIB=ranlib
|
||||
#RANLIB=echo
|
||||
|
||||
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not
|
||||
# have to change it.
|
||||
PNGMAJ = 2
|
||||
PNGMIN = 1.0.9beta8
|
||||
PNGVER = $(PNGMAJ).$(PNGMIN)
|
||||
|
||||
# where make install puts libpng.a, libpng.so*, and png.h
|
||||
prefix=/usr/local
|
||||
INCPATH=$(prefix)/include
|
||||
|
||||
@@ -38,10 +38,13 @@ CFLAGS=-I$(ZLIBINC) -Wall -O3 $(ALIGN) -funroll-loops \
|
||||
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not
|
||||
# have to change it.
|
||||
PNGMAJ = 2
|
||||
PNGMIN = 1.0.9beta8
|
||||
#PNGDLL = $1# msvc
|
||||
PNGDLL = 2# cygwin 1.0.11beta3
|
||||
PNGMIN = 1.0.11beta3
|
||||
PNGMIN_BASE = 1.0.11
|
||||
PNGVER = $(PNGMAJ).$(PNGMIN)
|
||||
|
||||
SHAREDLIB=cygpng$(PNGMAJ).dll
|
||||
SHAREDLIB=cygpng$(PNGDLL).dll
|
||||
STATLIB=libpng.a
|
||||
IMPLIB=libpng.dll.a
|
||||
SHAREDDEF=libpng.def
|
||||
@@ -60,7 +63,7 @@ LIBPATH=$(prefix)/lib
|
||||
BINPATH=$(prefix)/bin
|
||||
MANPATH=$(prefix)/man
|
||||
MAN3PATH=$(MANPATH)/man3
|
||||
DOCPATH=$(prefix)/doc/libpng-$(PNGMIN)
|
||||
DOCPATH=$(prefix)/doc/libpng-$(PNGMIN_BASE)
|
||||
|
||||
OBJS = png.o pngset.o pngget.o pngrutil.o pngtrans.o pngwutil.o \
|
||||
pngread.o pngrio.o pngwio.o pngwrite.o pngrtran.o \
|
||||
@@ -104,7 +107,7 @@ $(STATLIB): $(OBJS)
|
||||
ar rc $@ $(OBJS)
|
||||
$(RANLIB) $@
|
||||
|
||||
$(SHAREDDEF): msvc/png32ms.def
|
||||
$(SHAREDDEF): projects/msvc/png32ms.def
|
||||
cat $< | sed -e '1{G;s/^\(.*\)\(\n\)/EXPORTS/;};2,/^EXPORTS/d' > $@
|
||||
|
||||
$(SHAREDLIB): $(OBJSDLL) $(SHAREDDEF)
|
||||
|
||||
@@ -17,7 +17,7 @@ ZLIBINC=../zlib
|
||||
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not
|
||||
# have to change it.
|
||||
PNGMAJ = 2
|
||||
PNGMIN = 1.0.9beta8
|
||||
PNGMIN = 1.0.11beta3
|
||||
PNGVER = $(PNGMAJ).$(PNGMIN)
|
||||
|
||||
CC=cc
|
||||
@@ -64,7 +64,7 @@ install: libpng.a libpng.so.$(PNGVER)
|
||||
chmod 644 $(LIBPATH)/libpng.a
|
||||
chmod 644 $(LIBPATH)/libpng.so.$(PNGVER)
|
||||
-@/bin/rm -f $(LIBPATH)/libpng.so.$(PNGMAJ) $(LIBPATH)/libpng.so
|
||||
(cd $(LIBPATH)); ln -f -s libpng.so.$(PNGVER) libpng.so.$(PNGMAJ); \
|
||||
(cd $(LIBPATH); ln -f -s libpng.so.$(PNGVER) libpng.so.$(PNGMAJ); \
|
||||
ln -f -s libpng.so.$(PNGMAJ) libpng.so)
|
||||
|
||||
clean:
|
||||
|
||||
@@ -51,7 +51,7 @@ RANLIB=ranlib
|
||||
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not
|
||||
# have to change it.
|
||||
PNGMAJ = 2
|
||||
PNGMIN = 1.0.9beta8
|
||||
PNGMIN = 1.0.11beta3
|
||||
PNGVER = $(PNGMAJ).$(PNGMIN)
|
||||
|
||||
INCPATH=$(prefix)/include
|
||||
|
||||
112
scripts/makefile.hpgcc
Normal file
112
scripts/makefile.hpgcc
Normal file
@@ -0,0 +1,112 @@
|
||||
# makefile for libpng on HP-UX using GCC
|
||||
# Copyright (C) 2001, Laurent faillie
|
||||
# Copyright (C) 1998, 1999 Greg Roelofs
|
||||
# Copyright (C) 1996, 1997 Andreas Dilger
|
||||
# For conditions of distribution and use, see copyright notice in png.h
|
||||
|
||||
CC=gcc
|
||||
|
||||
# where "make install" puts libpng.a, libpng.so*, png.h and pngconf.h
|
||||
prefix=/usr/local
|
||||
|
||||
# Where the zlib library and include files are located
|
||||
ZLIBLIB=/opt/zlib/lib
|
||||
ZLIBINC=/opt/zlib/include
|
||||
|
||||
ALIGN=
|
||||
# for i386:
|
||||
#ALIGN=-malign-loops=2 -malign-functions=2
|
||||
|
||||
WARNMORE=-Wwrite-strings -Wpointer-arith -Wshadow \
|
||||
-Wmissing-declarations -Wtraditional -Wcast-align \
|
||||
-Wstrict-prototypes -Wmissing-prototypes #-Wconversion
|
||||
|
||||
# for pgcc version 2.95.1, -O3 is buggy; don't use it.
|
||||
|
||||
CFLAGS=-I$(ZLIBINC) -Wall -O3 -funroll-loops \
|
||||
$(ALIGN) # $(WARNMORE) -g -DPNG_DEBUG=5
|
||||
#LDFLAGS=-L. -Wl,-rpath,. -L$(ZLIBLIB) -Wl,-rpath,$(ZLIBLIB) -lpng -lz -lm
|
||||
LDFLAGS=-L. -L$(ZLIBLIB) -lpng -lz -lm
|
||||
|
||||
RANLIB=ranlib
|
||||
#RANLIB=echo
|
||||
|
||||
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not
|
||||
# have to change it.
|
||||
PNGMAJ = 2
|
||||
PNGMIN = 1.0.11beta3
|
||||
PNGVER = $(PNGMAJ).$(PNGMIN)
|
||||
|
||||
INCPATH=$(prefix)/include
|
||||
LIBPATH=$(prefix)/lib
|
||||
|
||||
OBJS = png.o pngset.o pngget.o pngrutil.o pngtrans.o pngwutil.o \
|
||||
pngread.o pngrio.o pngwio.o pngwrite.o pngrtran.o \
|
||||
pngwtran.o pngmem.o pngerror.o pngpread.o
|
||||
|
||||
OBJSDLL = $(OBJS:.o=.pic.o)
|
||||
|
||||
.SUFFIXES: .c .o .pic.o
|
||||
|
||||
.c.pic.o:
|
||||
$(CC) -c $(CFLAGS) -fPIC -o $@ $*.c
|
||||
|
||||
all: libpng.a libpng.sl pngtest
|
||||
|
||||
libpng.a: $(OBJS)
|
||||
ar rc $@ $(OBJS)
|
||||
$(RANLIB) $@
|
||||
|
||||
libpng.sl: libpng.sl.$(PNGMAJ)
|
||||
ln -f -s libpng.sl.$(PNGMAJ) libpng.sl
|
||||
|
||||
libpng.sl.$(PNGMAJ): libpng.sl.$(PNGVER)
|
||||
ln -f -s libpng.sl.$(PNGVER) libpng.sl.$(PNGMAJ)
|
||||
|
||||
libpng.sl.$(PNGVER): $(OBJSDLL)
|
||||
$(LD) -b -L$(ZLIBLIB) +s +b $(ZLIBLIB) \
|
||||
+h libpng.sl.$(PNGMAJ) -o libpng.sl.$(PNGVER) $(OBJSDLL) -lz
|
||||
|
||||
pngtest: pngtest.o libpng.sl
|
||||
$(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
|
||||
|
||||
test: pngtest
|
||||
./pngtest
|
||||
|
||||
install: libpng.a libpng.sl.$(PNGVER)
|
||||
-@if [ ! -d $(INCPATH) ]; then mkdir $(INCPATH); fi
|
||||
-@if [ ! -d $(LIBPATH) ]; then mkdir $(LIBPATH); fi
|
||||
cp png.h pngconf.h $(INCPATH)
|
||||
chmod 644 $(INCPATH)/png.h $(INCPATH)/pngconf.h
|
||||
cp libpng.a libpng.sl.$(PNGVER) $(LIBPATH)
|
||||
chmod 755 $(LIBPATH)/libpng.sl.$(PNGVER)
|
||||
-@/bin/rm -f $(LIBPATH)/libpng.sl.$(PNGMAJ) $(LIBPATH)/libpng.sl
|
||||
(cd $(LIBPATH); ln -sf libpng.sl.$(PNGVER) libpng.sl.$(PNGMAJ); \
|
||||
ln -sf libpng.sl.$(PNGMAJ) libpng.sl)
|
||||
|
||||
clean:
|
||||
/bin/rm -f *.o libpng.a libpng.sl* pngtest pngout.png
|
||||
|
||||
DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
|
||||
writelock:
|
||||
chmod a-w *.[ch35] $(DOCS) scripts/*
|
||||
|
||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||
|
||||
png.o png.pic.o: png.h pngconf.h
|
||||
pngerror.o pngerror.pic.o: png.h pngconf.h
|
||||
pngrio.o pngrio.pic.o: png.h pngconf.h
|
||||
pngwio.o pngwio.pic.o: png.h pngconf.h
|
||||
pngmem.o pngmem.pic.o: png.h pngconf.h
|
||||
pngset.o pngset.pic.o: png.h pngconf.h
|
||||
pngget.o pngget.pic.o: png.h pngconf.h
|
||||
pngread.o pngread.pic.o: png.h pngconf.h
|
||||
pngrtran.o pngrtran.pic.o: png.h pngconf.h
|
||||
pngrutil.o pngrutil.pic.o: png.h pngconf.h
|
||||
pngtrans.o pngtrans.pic.o: png.h pngconf.h
|
||||
pngwrite.o pngwrite.pic.o: png.h pngconf.h
|
||||
pngwtran.o pngwtran.pic.o: png.h pngconf.h
|
||||
pngwutil.o pngwutil.pic.o: png.h pngconf.h
|
||||
pngpread.o pngpread.pic.o: png.h pngconf.h
|
||||
|
||||
pngtest.o: png.h pngconf.h
|
||||
@@ -10,6 +10,7 @@ ZLIBINC=/opt/zlib/include
|
||||
|
||||
CC=cc
|
||||
CFLAGS=-I$(ZLIBINC) -O -Ae +DA1.1 +DS2.0
|
||||
# Caution: be sure you have built zlib with the same CFLAGS.
|
||||
CCFLAGS=-I$(ZLIBINC) -O -Ae +DA1.1 +DS2.0
|
||||
LDFLAGS=-L. -L$(ZLIBLIB) -lpng -lz -lm
|
||||
|
||||
@@ -18,7 +19,7 @@ RANLIB=ranlib
|
||||
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not
|
||||
# have to change it.
|
||||
PNGMAJ = 2
|
||||
PNGMIN = 1.0.9beta8
|
||||
PNGMIN = 1.0.11beta3
|
||||
PNGVER = $(PNGMAJ).$(PNGMIN)
|
||||
|
||||
# where make install puts libpng.a and png.h
|
||||
|
||||
@@ -34,7 +34,7 @@ RANLIB=ranlib
|
||||
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not
|
||||
# have to change it.
|
||||
PNGMAJ = 2
|
||||
PNGMIN = 1.0.9beta8
|
||||
PNGMIN = 1.0.11beta3
|
||||
PNGVER = $(PNGMAJ).$(PNGMIN)
|
||||
|
||||
INCPATH=$(prefix)/include
|
||||
|
||||
@@ -25,7 +25,7 @@ RANLIB=echo
|
||||
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not
|
||||
# have to change it.
|
||||
PNGMAJ = 2
|
||||
PNGMIN = 1.0.9beta8
|
||||
PNGMIN = 1.0.11beta3
|
||||
PNGVER = $(PNGMAJ).$(PNGMIN)
|
||||
|
||||
INCPATH=$(prefix)/include
|
||||
|
||||
@@ -19,8 +19,8 @@ CFLAGS=-I$(ZLIBINC) -O2 $(WARNMORE) -fPIC -mabi=n32
|
||||
LDFLAGS=-L. -L$(ZLIBLIB) -lpng -lz -lm
|
||||
LDSHARED=gcc -shared
|
||||
|
||||
VER=1.0.9beta8
|
||||
LIBS=libpng.so.1.0.9beta8
|
||||
VER=1.0.11beta3
|
||||
LIBS=libpng.so.1.0.11beta3
|
||||
SHAREDLIB=libpng.so
|
||||
libdir=$(prefix)/lib32
|
||||
|
||||
@@ -59,12 +59,12 @@ install: libpng.a
|
||||
cp libpng.a $(prefix)/lib
|
||||
chmod 644 $(prefix)/lib/libpng.a
|
||||
cp $(SHAREDLIB).$(VER) $(libdir); chmod 755 $(SHAREDLIB).$(VER)
|
||||
cd $(libdir); if test -f $(SHAREDLIB).$(VER); then \
|
||||
(cd $(libdir); if test -f $(SHAREDLIB).$(VER); then \
|
||||
rm -f $(SHAREDLIB) $(SHAREDLIB).1; \
|
||||
ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB); \
|
||||
ln -s $(SHAREDLIB).$(VER) $(SHAREDLIB).1; \
|
||||
(ldconfig || true) >/dev/null 2>&1; \
|
||||
fi
|
||||
fi)
|
||||
|
||||
clean:
|
||||
rm -f *.o libpng.a pngtest pngout.png
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
# makefile for libpng
|
||||
# makefile for libpng (.a and .so), SGI IRIX with 'cc'
|
||||
# Copyright (C) 2001 Glenn Randers-Pehrson
|
||||
# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc.
|
||||
# For conditions of distribution and use, see copyright notice in png.h
|
||||
|
||||
@@ -6,6 +7,9 @@
|
||||
prefix=/usr/local
|
||||
|
||||
# Where the zlib library and include files are located
|
||||
# You can add the -n32 option; then zlib must also be compiled with -n32
|
||||
#ZLIBLIB=/usr/local/lib32
|
||||
#ZLIBINC=/usr/local/include
|
||||
#ZLIBLIB=/usr/local/lib
|
||||
#ZLIBINC=/usr/local/include
|
||||
ZLIBLIB=../zlib
|
||||
@@ -15,22 +19,39 @@ CC=cc
|
||||
|
||||
WARNMORE=-fullwarn
|
||||
# You can add the -n32 option; then zlib must also be compiled with -n32
|
||||
CFLAGS=-I$(ZLIBINC) -O $(WARNMORE) # -g -DPNG_DEBUG=5
|
||||
# Note: -KPIC is the default anyhow
|
||||
#CFLAGS=-I$(ZLIBINC) -O $(WARNMORE) -KPIC -DPNG_USE_PNGGCCRD # -g -DPNG_DEBUG=5
|
||||
CFLAGS=-I$(ZLIBINC) -O $(WARNMORE) -DPNG_USE_PNGGCCRD -DPNG_NO_ASSEMBLER_CODE
|
||||
LDFLAGS=-L. -L$(ZLIBLIB) -lpng -lz -lm
|
||||
LDSHARED=cc -shared
|
||||
|
||||
VER=1.0.11beta3
|
||||
SONUM=2
|
||||
SHAREDLIB=libpng.so
|
||||
libdir=$(prefix)
|
||||
#libdir=$(prefix)/lib32
|
||||
|
||||
RANLIB=echo
|
||||
#RANLIB=ranlib
|
||||
|
||||
OBJS = png.o pngset.o pngget.o pngrutil.o pngtrans.o pngwutil.o \
|
||||
OBJS = pnggccrd.o png.o pngset.o pngget.o pngrutil.o pngtrans.o pngwutil.o \
|
||||
pngread.o pngrio.o pngwio.o pngwrite.o pngrtran.o \
|
||||
pngwtran.o pngmem.o pngerror.o pngpread.o
|
||||
|
||||
all: libpng.a pngtest
|
||||
all: libpng.a pngtest shared
|
||||
|
||||
shared: $(SHAREDLIB).$(SONUM).$(VER)
|
||||
|
||||
libpng.a: $(OBJS)
|
||||
ar rc $@ $(OBJS)
|
||||
$(RANLIB) $@
|
||||
|
||||
$(SHAREDLIB).$(SONUM).$(VER): $(OBJS)
|
||||
$(LDSHARED) -o $@ $(OBJS)
|
||||
rm -f $(SHAREDLIB) $(SHAREDLIB).?
|
||||
ln -s $@ $(SHAREDLIB)
|
||||
ln -s $@ $(SHAREDLIB).$(SONUM)
|
||||
|
||||
pngtest: pngtest.o libpng.a
|
||||
$(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
|
||||
|
||||
@@ -47,8 +68,16 @@ install: libpng.a
|
||||
cp libpng.a $(prefix)/lib
|
||||
chmod 644 $(prefix)/lib/libpng.a
|
||||
|
||||
install-shared: $(SHAREDLIB).$(SONUM).$(VER)
|
||||
cp $(SHAREDLIB).$(SONUM).$(VER) $(libdir)
|
||||
chmod 755 $(SHAREDLIB).$(SONUM).$(VER)
|
||||
(cd $(libdir)
|
||||
rm -f $(SHAREDLIB) $(SHAREDLIB).$(SONUM)
|
||||
ln -s $(SHAREDLIB).$(SONUM).$(VER) $(SHAREDLIB).$(SONUM)
|
||||
ln -s $(SHAREDLIB).$(SONUM) $(SHAREDLIB))
|
||||
|
||||
clean:
|
||||
rm -f *.o libpng.a pngtest pngout.png
|
||||
rm -f *.o libpng.a pngtest pngout.png $(SHAREDLIB).*
|
||||
|
||||
DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
|
||||
writelock:
|
||||
@@ -72,4 +101,5 @@ pngwrite.o: png.h pngconf.h
|
||||
pngwtran.o: png.h pngconf.h
|
||||
pngwutil.o: png.h pngconf.h
|
||||
pngpread.o: png.h pngconf.h
|
||||
pnggccrd.o: png.h pngconf.h
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ RANLIB=echo
|
||||
# read libpng.txt or png.h to see why PNGMAJ is 2. You should not
|
||||
# have to change it.
|
||||
PNGMAJ = 2
|
||||
PNGMIN = 1.0.9beta8
|
||||
PNGMIN = 1.0.11beta3
|
||||
PNGVER = $(PNGMAJ).$(PNGMIN)
|
||||
|
||||
INCPATH=$(prefix)/include
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
unit pngdef;
|
||||
|
||||
// Caution: this file is probably out of date.
|
||||
// Caution: this file has fallen out of date since version 1.0.5. Write to
|
||||
// png-implement@ccrc.wustl.edu or to randeg@alum.rpi.edu about bringing
|
||||
// it up to date.
|
||||
|
||||
interface
|
||||
|
||||
const
|
||||
PNG_LIBPNG_VER_STRING = '1.0.9beta8';
|
||||
PNG_LIBPNG_VER = 10009;
|
||||
PNG_LIBPNG_VER_STRING = '1.0.11beta3';
|
||||
PNG_LIBPNG_VER = 10011;
|
||||
|
||||
type
|
||||
png_uint_32 = Cardinal;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
; PNG.LIB module definition file for OS/2
|
||||
;----------------------------------------
|
||||
|
||||
; Caution: This file is probably out of date.
|
||||
; Version 1.0.11beta3
|
||||
|
||||
LIBRARY PNG
|
||||
DESCRIPTION "PNG image compression library for OS/2"
|
||||
@@ -10,284 +10,187 @@ CODE PRELOAD MOVEABLE DISCARDABLE
|
||||
DATA PRELOAD MOVEABLE MULTIPLE
|
||||
|
||||
EXPORTS
|
||||
png_set_sig_bytes
|
||||
png_sig_cmp
|
||||
|
||||
|
||||
png_build_grayscale_palette
|
||||
png_check_sig
|
||||
png_create_read_struct
|
||||
; png_create_read_struct_2
|
||||
png_create_write_struct
|
||||
; png_create_write_struct_2
|
||||
png_write_chunk
|
||||
png_write_chunk_start
|
||||
png_write_chunk_data
|
||||
png_write_chunk_end
|
||||
png_create_info_struct
|
||||
png_info_init
|
||||
png_write_info
|
||||
png_write_info_before_PLTE
|
||||
png_read_info
|
||||
png_convert_to_rfc1123
|
||||
png_chunk_error
|
||||
png_chunk_warning
|
||||
png_convert_from_struct_tm
|
||||
png_convert_from_time_t
|
||||
png_set_expand
|
||||
png_create_info_struct
|
||||
png_create_read_struct
|
||||
png_create_write_struct
|
||||
png_data_freer
|
||||
png_destroy_info_struct
|
||||
png_destroy_read_struct
|
||||
png_destroy_write_struct
|
||||
png_error
|
||||
png_free
|
||||
png_free_data
|
||||
png_get_IHDR
|
||||
png_get_PLTE
|
||||
png_get_bKGD
|
||||
png_get_bit_depth
|
||||
png_get_cHRM
|
||||
png_get_cHRM_fixed
|
||||
png_get_channels
|
||||
png_get_color_type
|
||||
png_get_compression_buffer_size
|
||||
png_get_compression_type
|
||||
png_get_copyright
|
||||
png_get_error_ptr
|
||||
png_get_filter_type
|
||||
png_get_gAMA
|
||||
png_get_gAMA_fixed
|
||||
png_get_hIST
|
||||
png_get_header_ver
|
||||
png_get_header_version
|
||||
png_get_iCCP
|
||||
png_get_image_height
|
||||
png_get_image_width
|
||||
png_get_interlace_type
|
||||
png_get_io_ptr
|
||||
png_get_libpng_ver
|
||||
png_get_oFFs
|
||||
png_get_pCAL
|
||||
png_get_pHYs
|
||||
png_get_pixel_aspect_ratio
|
||||
png_get_pixels_per_meter
|
||||
png_get_progressive_ptr
|
||||
png_get_rgb_to_gray_status
|
||||
png_get_rowbytes
|
||||
png_get_rows
|
||||
png_get_sBIT
|
||||
png_get_sCAL
|
||||
png_get_sPLT
|
||||
png_get_sRGB
|
||||
png_get_signature
|
||||
png_get_tIME
|
||||
png_get_tRNS
|
||||
png_get_text
|
||||
png_get_unknown_chunks
|
||||
png_get_user_chunk_ptr
|
||||
png_get_user_transform_ptr
|
||||
png_get_valid
|
||||
png_get_x_offset_microns
|
||||
png_get_x_offset_pixels
|
||||
png_get_x_pixels_per_meter
|
||||
png_get_y_offset_microns
|
||||
png_get_y_offset_pixels
|
||||
png_get_y_pixels_per_meter
|
||||
png_malloc
|
||||
png_memcpy_check
|
||||
png_memset_check
|
||||
png_permit_empty_plte
|
||||
png_process_data
|
||||
png_progressive_combine_row
|
||||
png_read_end
|
||||
png_read_image
|
||||
png_read_info
|
||||
png_read_init ; deprecated
|
||||
png_read_png
|
||||
png_read_row
|
||||
png_read_rows
|
||||
png_read_update_info
|
||||
png_reset_zstream
|
||||
png_set_IHDR
|
||||
png_set_PLTE
|
||||
png_set_bKGD
|
||||
png_set_background
|
||||
png_set_bgr
|
||||
png_set_cHRM
|
||||
png_set_cHRM_fixed
|
||||
png_set_compression_buffer_size
|
||||
png_set_compression_level
|
||||
png_set_compression_mem_level
|
||||
png_set_compression_method
|
||||
png_set_compression_strategy
|
||||
png_set_compression_window_bits
|
||||
png_set_crc_action
|
||||
png_set_dither
|
||||
png_set_error_fn
|
||||
png_set_expand
|
||||
png_set_filler
|
||||
png_set_filter
|
||||
png_set_filter_heuristics
|
||||
png_set_flush
|
||||
png_set_gAMA
|
||||
png_set_gAMA_fixed
|
||||
png_set_gamma
|
||||
png_set_gray_1_2_4_to_8
|
||||
png_set_gray_to_rgb
|
||||
png_set_hIST
|
||||
png_set_iCCP
|
||||
png_set_interlace_handling
|
||||
png_set_invert_alpha
|
||||
png_set_invert_mono
|
||||
png_set_keep_unknown_chunks
|
||||
png_set_oFFs
|
||||
png_set_pCAL
|
||||
png_set_pHYs
|
||||
png_set_packing
|
||||
png_set_packswap
|
||||
png_set_palette_to_rgb
|
||||
png_set_progressive_read_fn
|
||||
png_set_read_fn
|
||||
png_set_read_status_fn
|
||||
png_set_read_user_chunk_fn
|
||||
png_set_read_user_transform_fn
|
||||
png_set_rgb_to_gray
|
||||
png_set_rgb_to_gray_fixed
|
||||
png_set_rows
|
||||
png_build_grayscale_palette
|
||||
png_set_strip_alpha
|
||||
png_set_swap_alpha
|
||||
png_set_invalid
|
||||
png_set_invert_alpha
|
||||
png_set_filler
|
||||
png_set_swap
|
||||
png_set_packing
|
||||
png_set_packswap
|
||||
png_set_shift
|
||||
png_set_interlace_handling
|
||||
png_set_invert_mono
|
||||
png_set_background
|
||||
png_set_strip_16
|
||||
png_set_dither
|
||||
png_set_gamma
|
||||
png_set_flush
|
||||
png_set_user_chunk_fn
|
||||
png_write_flush
|
||||
png_start_read_image
|
||||
png_read_update_info
|
||||
png_read_rows
|
||||
png_read_row
|
||||
png_read_image
|
||||
png_write_row
|
||||
png_write_rows
|
||||
png_write_image
|
||||
png_write_end
|
||||
png_read_end
|
||||
png_destroy_info_struct
|
||||
png_destroy_read_struct
|
||||
png_read_destroy
|
||||
png_destroy_write_struct
|
||||
; png_write_destroy_info
|
||||
png_write_destroy
|
||||
png_set_crc_action
|
||||
png_set_filter
|
||||
png_set_filter_heuristics
|
||||
png_set_compression_level
|
||||
png_set_compression_mem_level
|
||||
png_set_compression_strategy
|
||||
png_set_compression_window_bits
|
||||
png_set_compression_method
|
||||
png_init_io
|
||||
png_get_copyright
|
||||
png_set_error_fn
|
||||
png_get_error_ptr
|
||||
png_get_header_ver
|
||||
png_get_header_version
|
||||
png_get_libpng_ver
|
||||
png_get_user_chunk_ptr
|
||||
; png_get_mem_fn
|
||||
; png_set_mem_fn
|
||||
png_set_write_fn
|
||||
png_set_read_fn
|
||||
png_set_write_status_fn
|
||||
png_set_read_status_fn
|
||||
png_get_io_ptr
|
||||
png_set_progressive_read_fn
|
||||
png_set_read_status_fn
|
||||
png_set_read_user_transform_fn
|
||||
png_set_write_status_fn
|
||||
png_set_write_user_transform_fn
|
||||
png_get_progressive_ptr
|
||||
png_process_data
|
||||
png_progressive_combine_row
|
||||
png_malloc
|
||||
png_free
|
||||
png_memcpy_check
|
||||
png_memset_check
|
||||
; png_malloc_default
|
||||
; png_free_default
|
||||
; png_far_to_near
|
||||
png_error
|
||||
png_chunk_error
|
||||
png_warning
|
||||
png_chunk_warning
|
||||
png_get_valid
|
||||
png_get_rowbytes
|
||||
png_get_channels
|
||||
png_get_image_width
|
||||
png_get_image_height
|
||||
png_get_bit_depth
|
||||
png_get_color_type
|
||||
png_get_filter_type
|
||||
png_get_interlace_type
|
||||
png_get_compression_type
|
||||
png_get_pixels_per_meter
|
||||
png_get_pixel_aspect_ratio
|
||||
png_get_rgb_to_gray_status
|
||||
png_get_rows
|
||||
png_get_x_offset_pixels
|
||||
png_get_y_offset_pixels
|
||||
png_get_x_offset_microns
|
||||
png_get_y_offset_microns
|
||||
png_get_signature
|
||||
png_get_bKGD
|
||||
png_set_bKGD
|
||||
png_get_cHRM
|
||||
png_set_cHRM
|
||||
png_set_cHRM_fixed
|
||||
png_get_gAMA
|
||||
png_set_gAMA
|
||||
png_set_gAMA_fixed
|
||||
png_get_hIST
|
||||
png_set_hIST
|
||||
png_get_IHDR
|
||||
png_set_IHDR
|
||||
png_get_oFFs
|
||||
png_set_oFFs
|
||||
png_get_pCAL
|
||||
png_set_pCAL
|
||||
png_get_pHYs
|
||||
png_set_pHYs
|
||||
png_get_PLTE
|
||||
png_set_PLTE
|
||||
png_get_sBIT
|
||||
png_set_sBIT
|
||||
png_get_sRGB
|
||||
png_set_sCAL
|
||||
png_set_sPLT
|
||||
png_set_sRGB
|
||||
png_set_sRGB_gAMA_and_cHRM
|
||||
png_get_text
|
||||
png_set_text
|
||||
png_get_tIME
|
||||
png_set_shift
|
||||
png_set_sig_bytes
|
||||
png_set_strip_16
|
||||
png_set_strip_alpha
|
||||
png_set_swap
|
||||
png_set_swap_alpha
|
||||
png_set_tIME
|
||||
png_get_tRNS
|
||||
png_set_tRNS
|
||||
png_set_gray_1_2_4_to_8
|
||||
png_set_tRNS_to_alpha
|
||||
png_set_palette_to_rgb
|
||||
png_set_text
|
||||
png_set_unknown_chunk_location
|
||||
png_set_unknown_chunks
|
||||
png_set_user_transform_info
|
||||
png_set_write_fn
|
||||
png_set_write_status_fn
|
||||
png_set_write_user_transform_fn
|
||||
png_sig_cmp
|
||||
png_start_read_image
|
||||
png_warning
|
||||
png_write_chunk
|
||||
png_write_chunk_data
|
||||
png_write_chunk_end
|
||||
png_write_chunk_start
|
||||
png_write_end
|
||||
png_write_flush
|
||||
png_write_image
|
||||
png_write_info
|
||||
png_write_info_before_PLTE
|
||||
png_write_init ; deprecated
|
||||
png_write_png
|
||||
png_write_row
|
||||
png_write_rows
|
||||
png_read_init_2
|
||||
png_write_init_2
|
||||
png_access_version_number
|
||||
png_init_io
|
||||
png_convert_to_rfc1123
|
||||
png_set_invalid
|
||||
|
||||
png_create_struct
|
||||
png_destroy_struct
|
||||
png_info_destroy
|
||||
png_zalloc
|
||||
png_zfree
|
||||
png_reset_crc
|
||||
png_write_data
|
||||
png_read_data
|
||||
png_crc_read
|
||||
png_crc_finish
|
||||
png_crc_error
|
||||
png_calculate_crc
|
||||
png_flush
|
||||
png_save_uint_32
|
||||
png_save_int_32
|
||||
png_save_uint_16
|
||||
png_write_sig
|
||||
png_write_IHDR
|
||||
png_write_PLTE
|
||||
png_write_IDAT
|
||||
png_write_IEND
|
||||
png_write_bKGD
|
||||
png_write_cHRM
|
||||
png_write_gAMA
|
||||
png_write_hIST
|
||||
png_write_iCCP
|
||||
png_write_iTXt
|
||||
png_write_oFFs
|
||||
png_write_pCAL
|
||||
png_write_pHYs
|
||||
png_write_sBIT
|
||||
png_write_sCAL
|
||||
png_write_sPLT
|
||||
png_write_sRGB
|
||||
png_check_keyword
|
||||
png_write_tEXt
|
||||
png_write_tIME
|
||||
png_write_tRNS
|
||||
png_write_zTXt
|
||||
png_write_finish_row
|
||||
png_write_start_row
|
||||
png_build_gamma_table
|
||||
png_combine_row
|
||||
png_do_read_interlace
|
||||
png_do_write_interlace
|
||||
png_read_filter_row
|
||||
png_write_find_filter
|
||||
png_write_filtered_row
|
||||
png_read_finish_row
|
||||
png_read_start_row
|
||||
png_read_transform_info
|
||||
png_do_read_filler
|
||||
png_do_read_swap_alpha
|
||||
png_do_write_swap_alpha
|
||||
png_do_read_invert_alpha
|
||||
png_do_write_invert_alpha
|
||||
png_do_strip_filler
|
||||
png_do_swap
|
||||
png_do_packswap
|
||||
png_do_rgb_to_gray
|
||||
png_do_gray_to_rgb
|
||||
png_do_unpack
|
||||
png_do_unshift
|
||||
png_do_invert
|
||||
png_do_chop
|
||||
png_do_dither
|
||||
; png_correct_palette
|
||||
png_do_bgr
|
||||
png_do_pack
|
||||
png_do_shift
|
||||
png_do_background
|
||||
png_do_gamma
|
||||
png_do_expand_palette
|
||||
png_do_expand
|
||||
png_handle_IHDR
|
||||
png_handle_PLTE
|
||||
png_handle_IEND
|
||||
png_handle_bKGD
|
||||
png_handle_cHRM
|
||||
png_handle_gAMA
|
||||
png_handle_hIST
|
||||
png_handle_iCCP
|
||||
png_handle_iTXt
|
||||
png_handle_oFFs
|
||||
png_handle_pCAL
|
||||
png_handle_pHYs
|
||||
png_handle_sBIT
|
||||
png_handle_sCAL
|
||||
png_handle_sPLT
|
||||
png_handle_sRGB
|
||||
png_handle_tEXt
|
||||
png_handle_tIME
|
||||
png_handle_tRNS
|
||||
png_handle_zTXt
|
||||
png_handle_unknown
|
||||
png_check_chunk_name
|
||||
png_do_read_transformations
|
||||
png_do_write_transformations
|
||||
png_init_read_transformations
|
||||
png_push_read_chunk
|
||||
png_push_read_sig
|
||||
; png_push_check_crc
|
||||
png_push_crc_skip
|
||||
png_push_crc_finish
|
||||
png_push_fill_buffer
|
||||
png_push_save_buffer
|
||||
png_push_restore_buffer
|
||||
png_push_read_IDAT
|
||||
png_process_IDAT_data
|
||||
png_push_process_row
|
||||
png_push_handle_unknown
|
||||
png_push_have_info
|
||||
png_push_have_end
|
||||
png_push_have_row
|
||||
; png_push_read_end
|
||||
png_process_some_data
|
||||
png_read_push_finish_row
|
||||
png_push_handle_tEXt
|
||||
png_push_read_tEXt
|
||||
png_push_handle_zTXt
|
||||
png_push_read_zTXt
|
||||
;To be added at version 1.2.0
|
||||
; png_permit_mng_features
|
||||
|
||||
;To be added at version 1.2.0
|
||||
; png_mmx_support
|
||||
|
||||
; These are not present when libpng is compiled with PNG_NO_GLOBAL_ARRAYS
|
||||
png_libpng_ver
|
||||
png_pass_start
|
||||
png_pass_inc
|
||||
@@ -297,13 +200,8 @@ EXPORTS
|
||||
png_pass_dsp_mask
|
||||
; png_pass_width
|
||||
; png_pass_height
|
||||
png_get_iCCP
|
||||
png_get_sCAL
|
||||
png_get_sPLT
|
||||
png_set_iCCP
|
||||
png_set_sPLT
|
||||
png_free_data
|
||||
|
||||
; These are not present when libpng is compiled with PNG_NO_GLOBAL_ARRAYS
|
||||
png_IHDR
|
||||
png_IDAT
|
||||
png_IEND
|
||||
|
||||
Reference in New Issue
Block a user