Add libpng
This commit is contained in:
parent
13b65d6f89
commit
76cfb7b813
278
thirdparty/libpng/CHANGES
vendored
Normal file
278
thirdparty/libpng/CHANGES
vendored
Normal file
@ -0,0 +1,278 @@
|
|||||||
|
CHANGES - changes for libpng
|
||||||
|
|
||||||
|
version 0.2
|
||||||
|
added reader into png.h
|
||||||
|
fixed small problems in stub file
|
||||||
|
version 0.3
|
||||||
|
added pull reader
|
||||||
|
split up pngwrite.c to several files
|
||||||
|
added pnglib.txt
|
||||||
|
added example.c
|
||||||
|
cleaned up writer, adding a few new tranformations
|
||||||
|
fixed some bugs in writer
|
||||||
|
interfaced with zlib 0.5
|
||||||
|
added K&R support
|
||||||
|
added check for 64 KB blocks for 16 bit machines
|
||||||
|
version 0.4
|
||||||
|
cleaned up code and commented code
|
||||||
|
simplified time handling into png_time
|
||||||
|
created png_color_16 and png_color_8 to handle color needs
|
||||||
|
cleaned up color type defines
|
||||||
|
fixed various bugs
|
||||||
|
made various names more consistant
|
||||||
|
interfaced with zlib 0.71
|
||||||
|
cleaned up zTXt reader and writer (using zlib's Reset functions)
|
||||||
|
split transformations into pngrtran.c and pngwtran.c
|
||||||
|
version 0.5
|
||||||
|
interfaced with zlib 0.8
|
||||||
|
fixed many reading and writing bugs
|
||||||
|
saved using 3 spaces instead of tabs
|
||||||
|
version 0.6
|
||||||
|
added png_large_malloc() and png_large_free()
|
||||||
|
added png_size_t
|
||||||
|
cleaned up some compiler warnings
|
||||||
|
added png_start_read_image()
|
||||||
|
version 0.7
|
||||||
|
cleaned up lots of bugs
|
||||||
|
finished dithering and other stuff
|
||||||
|
added test program
|
||||||
|
changed name from pnglib to libpng
|
||||||
|
version 0.71 [June, 1995]
|
||||||
|
changed pngtest.png for zlib 0.93
|
||||||
|
fixed error in libpng.txt and example.c
|
||||||
|
version 0.8
|
||||||
|
cleaned up some bugs
|
||||||
|
added png_set_filler()
|
||||||
|
split up pngstub.c into pngmem.c, pngio.c, and pngerror.c
|
||||||
|
added #define's to remove unwanted code
|
||||||
|
moved png_info_init() to png.c
|
||||||
|
added old_size into png_realloc()
|
||||||
|
added functions to manually set filtering and compression info
|
||||||
|
changed compression parameters based on image type
|
||||||
|
optimized filter selection code
|
||||||
|
added version info
|
||||||
|
changed external functions passing floats to doubles (k&r problems?)
|
||||||
|
put all the configurable stuff in pngconf.h
|
||||||
|
enabled png_set_shift to work with paletted images on read
|
||||||
|
added png_read_update_info() - updates info structure with
|
||||||
|
transformations
|
||||||
|
version 0.81 [August, 1995]
|
||||||
|
incorporated Tim Wegner's medium model code (thanks, Tim)
|
||||||
|
version 0.82 [September, 1995]
|
||||||
|
[unspecified changes]
|
||||||
|
version 0.85 [December, 1995]
|
||||||
|
added more medium model code (almost everything's a far)
|
||||||
|
added i/o, error, and memory callback functions
|
||||||
|
fixed some bugs (16 bit, 4 bit interlaced, etc.)
|
||||||
|
added first run progressive reader (barely tested)
|
||||||
|
version 0.86 [January, 1996]
|
||||||
|
fixed bugs
|
||||||
|
improved documentation
|
||||||
|
version 0.87 [January, 1996]
|
||||||
|
fixed medium model bugs
|
||||||
|
fixed other bugs introduced in 0.85 and 0.86
|
||||||
|
added some minor documentation
|
||||||
|
version 0.88 [January, 1996]
|
||||||
|
fixed progressive bugs
|
||||||
|
replaced tabs with spaces
|
||||||
|
cleaned up documentation
|
||||||
|
added callbacks for read/write and warning/error functions
|
||||||
|
version 0.89 [July, 1996]
|
||||||
|
added new initialization API to make libpng work better with shared libs
|
||||||
|
we now have png_create_read_struct(), png_create_write_struct(),
|
||||||
|
png_create_info_struct(), png_destroy_read_struct(), and
|
||||||
|
png_destroy_write_struct() instead of the separate calls to
|
||||||
|
malloc and png_read_init(), png_info_init(), and png_write_init()
|
||||||
|
changed warning/error callback functions to fix bug - this means you
|
||||||
|
should use the new initialization API if you were using the old
|
||||||
|
png_set_message_fn() calls, and that the old API no longer exists
|
||||||
|
so that people are aware that they need to change their code
|
||||||
|
changed filter selection API to allow selection of multiple filters
|
||||||
|
since it didn't work in previous versions of libpng anyways
|
||||||
|
optimized filter selection code
|
||||||
|
fixed png_set_background() to allow using an arbitrary RGB color for
|
||||||
|
paletted images
|
||||||
|
fixed gamma and background correction for paletted images, so
|
||||||
|
png_correct_palette is not needed unless you are correcting an
|
||||||
|
external palette (you will need to #define PNG_CORRECT_PALETTE_SUPPORTED
|
||||||
|
in pngconf.h) - if nobody uses this, it may disappear in the future.
|
||||||
|
fixed bug with Borland 64K memory allocation (Alexander Lehmann)
|
||||||
|
fixed bug in interlace handling (Smarasderagd, I think)
|
||||||
|
added more error checking for writing and image to reduce invalid files
|
||||||
|
separated read and write functions so that they won't both be linked
|
||||||
|
into a binary when only reading or writing functionality is used
|
||||||
|
new pngtest image also has interlacing and zTXt
|
||||||
|
updated documentation to reflect new API
|
||||||
|
version 0.90 [January, 1997]
|
||||||
|
made CRC errors/warnings on critical and ancillary chunks configurable
|
||||||
|
libpng will use the zlib CRC routines by (compile-time) default
|
||||||
|
changed DOS small/medium model memory support - needs zlib 1.04 (Tim Wegner)
|
||||||
|
added external C++ wrapper statements to png.h (Gilles Dauphin)
|
||||||
|
allow PNG file to be read when some or all of file signature has already
|
||||||
|
been read from the beginning of the stream. ****This affects the size
|
||||||
|
of info_struct and invalidates all programs that use a shared libpng****
|
||||||
|
fixed png_filler() declarations
|
||||||
|
fixed? background color conversions
|
||||||
|
fixed order of error function pointers to match documentation
|
||||||
|
current chunk name is now available in png_struct to reduce the number
|
||||||
|
of nearly identical error messages (will simplify multi-lingual
|
||||||
|
support when available)
|
||||||
|
try to get ready for unknown-chunk callback functions:
|
||||||
|
- previously read critical chunks are flagged, so the chunk handling
|
||||||
|
routines can determine if the chunk is in the right place
|
||||||
|
- all chunk handling routines have the same prototypes, so we will
|
||||||
|
be able to handle all chunks via a callback mechanism
|
||||||
|
try to fix Linux "setjmp" buffer size problems
|
||||||
|
version 0.95 [March, 1997]
|
||||||
|
fixed bug in pngwutil.c allocating "up_row" twice and "avg_row" never
|
||||||
|
fixed bug in PNG file signature compares when start != 0
|
||||||
|
changed parameter type of png_set_filler(...filler...) from png_byte
|
||||||
|
to png_uint_32
|
||||||
|
added test for MACOS to ensure that both math.h and fp.h are not #included
|
||||||
|
added macros for libpng to be compiled as a Windows DLL (Andreas Kupries)
|
||||||
|
added "packswap" transformation, which changes the endianness of
|
||||||
|
packed-pixel bytes (Kevin Bracey)
|
||||||
|
added "strip_alpha" transformation, which removes the alpha channel of
|
||||||
|
input images without using it (not neccesarily a good idea)
|
||||||
|
added "swap_alpha" transformation, which puts the alpha channel in front
|
||||||
|
of the color bytes instead of after
|
||||||
|
removed all implicit variable tests which assume NULL == 0 (I think)
|
||||||
|
changed several variables to "png_size_t" to show 16/32-bit limitations
|
||||||
|
added new pCAL chunk read/write support
|
||||||
|
added experimental filter selection weighting (Greg Roelofs)
|
||||||
|
removed old png_set_rgbx() and png_set_xrgb() functions that have been
|
||||||
|
obsolete for about 2 years now (use png_set_filler() instead)
|
||||||
|
added macros to read 16- and 32-bit ints directly from buffer, to be
|
||||||
|
used only on those systems that support it (namely PowerPC and 680x0)
|
||||||
|
With some testing, this may become the default for MACOS/PPC systems.
|
||||||
|
only calculate CRC on data if we are going to use it
|
||||||
|
added macros for zTXt compression type PNG_zTXt_COMPRESSION_???
|
||||||
|
added macros for simple libpng debugging output selectable at compile time
|
||||||
|
removed PNG_READ_END_MODE in progressive reader (Smarasderagd)
|
||||||
|
more description of info_struct in libpng.txt and png.h
|
||||||
|
more instructions in example.c
|
||||||
|
more chunk types tested in pngtest.c
|
||||||
|
renamed pngrcb.c to pngset.c, and all png_read_<chunk> functions to be
|
||||||
|
png_set_<chunk>. We now have corresponding png_get_<chunk>
|
||||||
|
functions in pngget.c to get infomation in info_ptr. This isolates
|
||||||
|
the application from the internal organization of png_info_struct
|
||||||
|
(good for shared library implementations).
|
||||||
|
version 0.96 [May, 1997]
|
||||||
|
fixed serious bug with < 8bpp images introduced in 0.95
|
||||||
|
fixed 256-color transparency bug (Greg Roelofs)
|
||||||
|
fixed up documentation (Greg Roelofs, Laszlo Nyul)
|
||||||
|
fixed "error" in pngconf.h for Linux setjmp() behaviour
|
||||||
|
fixed DOS medium model support (Tim Wegner)
|
||||||
|
fixed png_check_keyword() for case with error in static string text
|
||||||
|
added read of CRC after IEND chunk for embedded PNGs (Laszlo Nyul)
|
||||||
|
added typecasts to quiet compiler errors
|
||||||
|
added more debugging info
|
||||||
|
version 0.97 [January, 1998]
|
||||||
|
removed PNG_USE_OWN_CRC capability
|
||||||
|
relocated png_set_crc_action from pngrutil.c to pngrtran.c
|
||||||
|
fixed typecasts of "new_key", etc. (Andreas Dilger)
|
||||||
|
added RFC 1152 [sic] date support
|
||||||
|
fixed bug in gamma handling of 4-bit grayscale
|
||||||
|
added 2-bit grayscale gamma handling (Glenn R-P)
|
||||||
|
added more typecasts. 65536L becomes (png_uint_32)65536L, etc. (Glenn R-P)
|
||||||
|
minor corrections in libpng.txt
|
||||||
|
added simple sRGB support (Glenn R-P)
|
||||||
|
easier conditional compiling, e.g. define PNG_READ/WRITE_NOT_FULLY_SUPPORTED;
|
||||||
|
all configurable options can be selected from command-line instead
|
||||||
|
of having to edit pngconf.h (Glenn R-P)
|
||||||
|
fixed memory leak in pngwrite.c (free info_ptr->text) (Glenn R-P)
|
||||||
|
added more conditions for png_do_background, to avoid changing
|
||||||
|
black pixels to background when a background is supplied and
|
||||||
|
no pixels are transparent
|
||||||
|
repaired PNG_NO_STDIO behaviour
|
||||||
|
tested NODIV support and made it default behaviour (Greg Roelofs)
|
||||||
|
added "-m" option and PNGTEST_DEBUG_MEMORY to pngtest (John Bowler)
|
||||||
|
regularized version numbering scheme and bumped shared-library major
|
||||||
|
version number to 2 to avoid problems with libpng 0.89 apps (Greg Roelofs)
|
||||||
|
version 0.98 [January, 1998]
|
||||||
|
cleaned up some typos in libpng.txt and in code documentation
|
||||||
|
fixed memory leaks in pCAL chunk processing (Glenn R-P and John Bowler)
|
||||||
|
cosmetic change "display_gamma" to "screen_gamma" in pngrtran.c
|
||||||
|
changed recommendation about file_gamma for PC images to .51 from .45,
|
||||||
|
in example.c and libpng.txt, added comments to distinguish between
|
||||||
|
screen_gamma, viewing_gamma, and display_gamma.
|
||||||
|
changed all references to RFC1152 to read RFC1123 and changed the
|
||||||
|
PNG_TIME_RFC1152_SUPPORTED macro to PNG_TIME_RFC1123_SUPPORTED
|
||||||
|
added png_invert_alpha capability (Glenn R-P -- suggestion by Jon Vincent)
|
||||||
|
changed srgb_intent from png_byte to int to avoid compiler bugs
|
||||||
|
version 0.99 [January 30, 1998]
|
||||||
|
free info_ptr->text instead of end_info_ptr->text in pngread.c (John Bowler)
|
||||||
|
fixed a longstanding "packswap" bug in pngtrans.c
|
||||||
|
fixed some inconsistencies in pngconf.h that prevented compiling with
|
||||||
|
PNG_READ_GAMMA_SUPPORTED and PNG_READ_hIST_SUPPORTED undefined
|
||||||
|
fixed some typos and made other minor rearrangement of libpng.txt (Andreas)
|
||||||
|
changed recommendation about file_gamma for PC images to .50 from .51 in
|
||||||
|
example.c and libpng.txt, and changed file_gamma for sRGB images to .45
|
||||||
|
added a number of functions to access information from the png structure
|
||||||
|
png_get_image_height(), etc. (Glenn R-P, suggestion by Brad Pettit)
|
||||||
|
added TARGET_MACOS similar to zlib-1.0.8
|
||||||
|
define PNG_ALWAYS_EXTERN when __MWERKS__ && WIN32 are defined
|
||||||
|
added type casting to all png_malloc() function calls
|
||||||
|
version 0.99a [January 31, 1998]
|
||||||
|
Added type casts and parentheses to all returns that return a value.(Tim W.)
|
||||||
|
version 0.99b [February 4, 1998]
|
||||||
|
Added type cast png_uint_32 on malloc function calls where needed.
|
||||||
|
Changed type of num_hist from png_uint_32 to int (same as num_palette).
|
||||||
|
Added checks for rowbytes overflow, in case png_size_t is less than 32 bits.
|
||||||
|
Renamed makefile.elf to makefile.lnx.
|
||||||
|
version 0.99c [February 7, 1998]
|
||||||
|
More type casting. Removed erroneous overflow test in pngmem.c.
|
||||||
|
Added png_buffered_memcpy() and png_buffered_memset(), apply them to rowbytes.
|
||||||
|
Added UNIX manual pages libpng.3 (incorporating libpng.txt) and png.5.
|
||||||
|
version 0.99d [February 11, 1998]
|
||||||
|
Renamed "far_to_near()" "png_far_to_near()"
|
||||||
|
Revised libpng.3
|
||||||
|
Version 99c "buffered" operations didn't work as intended. Replaced them
|
||||||
|
with png_memcpy_check() and png_memset_check().
|
||||||
|
Added many "if (png_ptr == NULL) return" to quell compiler warnings about
|
||||||
|
unused png_ptr, mostly in pngget.c and pngset.c.
|
||||||
|
Check for overlength tRNS chunk present when indexed-color PLTE is read.
|
||||||
|
Cleaned up spelling errors in libpng.3/libpng.txt
|
||||||
|
Corrected a problem with png_get_tRNS() which returned undefined trans array
|
||||||
|
version 0.99e [February 28, 1998]
|
||||||
|
Corrected png_get_tRNS() again.
|
||||||
|
Add parentheses for easier reading of pngget.c, fixed "||" should be "&&".
|
||||||
|
Touched up example.c to make more of it compileable, although the entire
|
||||||
|
file still can't be compiled (Willem van Schaik)
|
||||||
|
Fixed a bug in png_do_shift() (Bryan Tsai)
|
||||||
|
Added a space in png.h prototype for png_write_chunk_start()
|
||||||
|
Replaced pngtest.png with one created with zlib 1.1.1
|
||||||
|
Changed pngtest to report PASS even when file size is different (Jean-loup G.)
|
||||||
|
Corrected some logic errors in png_do_invert_alpha() (Chris Patterson)
|
||||||
|
version 0.99f [March 5, 1998]
|
||||||
|
Corrected a bug in pngpread() introduced in version 99c (Kevin Bracey)
|
||||||
|
Moved makefiles into a "scripts" directory, and added INSTALL instruction file
|
||||||
|
Added makefile.os2 and pngos2.def (A. Zabolotny) and makefile.s2x (W. Sebok)
|
||||||
|
Added pointers to "note on libpng versions" in makefile.lnx and README
|
||||||
|
Added row callback feature when reading and writing nonprogressive rows
|
||||||
|
and added a test of this feature in pngtest.c
|
||||||
|
Added user transform callbacks, with test of the feature in pngtest.c
|
||||||
|
version 0.99g [March 6, 1998, morning]
|
||||||
|
Minor changes to pngtest.c to suppress compiler warnings.
|
||||||
|
Removed "beta" language from documentation.
|
||||||
|
version 0.99h [March 6, 1998, evening]
|
||||||
|
Minor changes to previous minor changes to pngtest.c
|
||||||
|
Changed PNG_READ_NOT_FULLY_SUPPORTED to PNG_READ_TRANSFORMS_NOT_SUPPORTED
|
||||||
|
and added PNG_PROGRESSIVE_READ_NOT_SUPPORTED macro
|
||||||
|
version 1.00 [March 7, 1998]
|
||||||
|
Changed several typedefs in pngrutil.c
|
||||||
|
Added makefile.wat (Pawel Mrochen), updated makefile.tc3 (Willem van Schaik)
|
||||||
|
replaced "while(1)" with "for(;;)"
|
||||||
|
added PNGARG() to prototypes in pngtest.c and removed some prototypes
|
||||||
|
updated some of the makefiles (Tom Lane)
|
||||||
|
changed some typedefs (s_start, etc.) in pngrutil.c
|
||||||
|
fixed dimensions of "short_months" array in pngwrite.c
|
||||||
|
Replaced ansi2knr.c with the one from jpeg-v6
|
||||||
|
version 1.0.0 [March 8, 1998]
|
||||||
|
Changed name from 1.00 to 1.0.0 (Adam Costello)
|
||||||
|
Added smakefile.ppc (with SCOPTIONS.ppc) for Amiga PPC (Andreas Kleinert)
|
||||||
|
version 1.0.1 [March 9, 1998]
|
||||||
|
Fixed three bugs in pngrtran.c to make gamma+background handling consistent
|
||||||
|
(Greg Roelofs)
|
||||||
|
Changed format of the PNG_LIBPNG_VER integer to xyyyzzzz instead of xyz
|
||||||
|
for major, minor, and bugfix releases. This is 10000001L. (Adam Costello)
|
87
thirdparty/libpng/INSTALL
vendored
Normal file
87
thirdparty/libpng/INSTALL
vendored
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
|
||||||
|
Installing libpng version 1.0.1 March 9, 1998
|
||||||
|
|
||||||
|
Before installing libpng, you must first install zlib. zlib
|
||||||
|
can usually be found wherever you got libpng. zlib can be
|
||||||
|
placed in another directory, at the same level as libpng.
|
||||||
|
Note that your system might already have a preinstalled
|
||||||
|
zlib, but you will still need to have access to the
|
||||||
|
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.1 or "lpng100" and "zlib-1.1.1"
|
||||||
|
or "zlib111") so that you have directories called "zlib" and "libpng".
|
||||||
|
|
||||||
|
Your directory structure should look like this:
|
||||||
|
|
||||||
|
.. (the parent directory)
|
||||||
|
libpng (this directory)
|
||||||
|
INSTALL (this file)
|
||||||
|
README
|
||||||
|
*.h
|
||||||
|
*.c
|
||||||
|
scripts
|
||||||
|
makefile.*
|
||||||
|
pngtest.png
|
||||||
|
etc.
|
||||||
|
zlib
|
||||||
|
README
|
||||||
|
*.h
|
||||||
|
*.c
|
||||||
|
contrib
|
||||||
|
etc.
|
||||||
|
|
||||||
|
First enter the zlib directory and follow the instructions
|
||||||
|
in zlib/README. Then come back here and choose the
|
||||||
|
appropriate makefile.sys in the scripts directory.
|
||||||
|
The files that are presently available in the scripts directory
|
||||||
|
include
|
||||||
|
|
||||||
|
descrip.mms => VMS makefile for MMS or MMK
|
||||||
|
makefile.std => Generic UNIX makefile
|
||||||
|
makefile.knr => Archaic UNIX Makefile that converts files with ansi2knr
|
||||||
|
makefile.dec => DEC Alpha UNIX makefile
|
||||||
|
makefile.sgi => Silicon Graphics IRIX makefile
|
||||||
|
makefile.sun => Sun makefile
|
||||||
|
makefile.s2x => Solaris 2.X makefile (gcc, creates libpng.so.2.1.0)
|
||||||
|
makefile.lnx => Linux/ELF makefile (gcc, creates libpng.so.2.1.0)
|
||||||
|
makefile.mip => MIPS makefile
|
||||||
|
makefile.aco => Acorn makefile
|
||||||
|
makefile.ama => Amiga makefile
|
||||||
|
smakefile.ppc => AMIGA smakefile for SAS C V6.58/7.00 PPC compiler
|
||||||
|
(Requires SCOPTIONS, copied from scripts/SCOPTIONS.ppc)
|
||||||
|
makefile.atr => Atari makefile
|
||||||
|
makefile.bor => Borland makefile
|
||||||
|
build.bat => MS-DOS batch file for Borland compiler
|
||||||
|
makefile.dj2 => DJGPP 2 makefile
|
||||||
|
makefile.msc => Microsoft C makefile
|
||||||
|
makefile.tc3 => Turbo C 3.0 makefile
|
||||||
|
makefile.os2 => OS/2 Makefile (gcc and emx, requires pngos2.def)
|
||||||
|
pngos2.def => OS/2 module definition file used by makefile.os2
|
||||||
|
makefile.wat => Watcom 10a+ Makefile, 32-bit flat memory model
|
||||||
|
makevms.com => VMS build script
|
||||||
|
|
||||||
|
Copy the file (or files) that you need from the
|
||||||
|
scripts directory into this directory, for example
|
||||||
|
|
||||||
|
MSDOS example: copy scripts\makefile.msd makefile
|
||||||
|
UNIX example: cp scripts/makefile.std makefile
|
||||||
|
|
||||||
|
Read the makefile to see if you need to change any source or
|
||||||
|
target directories to match your preferences.
|
||||||
|
|
||||||
|
Then read pngconf.h to see if you want to make any configuration
|
||||||
|
changes.
|
||||||
|
|
||||||
|
Then just run "make test" which will create the libpng library in
|
||||||
|
this directory and run a quick test that reads the "pngtest.png"
|
||||||
|
file and writes a "pngout.png" file that should be identical to it.
|
||||||
|
|
||||||
|
Most of the makefiles will allow you to run "make install" to
|
||||||
|
put the library in its final resting place (if you want to
|
||||||
|
do that, run "make install" in the zlib directory first if necessary).
|
||||||
|
|
||||||
|
Further information can be found in the README and libpng.txt
|
||||||
|
files, in the individual makefiles, and in png.h, and the manual
|
||||||
|
pages libpng.3 and png.5.
|
194
thirdparty/libpng/README
vendored
Normal file
194
thirdparty/libpng/README
vendored
Normal file
@ -0,0 +1,194 @@
|
|||||||
|
README for libpng 1.0.1 (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.
|
||||||
|
|
||||||
|
This is the first official release of libpng. Don't let the fact that
|
||||||
|
it's the first release fool you. The libpng library has been in
|
||||||
|
extensive use and testing for about two and a half years. However, it's
|
||||||
|
finally gotten to the stage where there haven't been significant
|
||||||
|
changes to the API in some time, and people have a bad feeling about
|
||||||
|
libraries with versions < 1.0.
|
||||||
|
|
||||||
|
****
|
||||||
|
Note that some of the changes to the png_info structure render this
|
||||||
|
version of the library binary incompatible with libpng-0.89 or
|
||||||
|
earlier versions if you are using a shared library. The type of the
|
||||||
|
"filler" parameter for png_set_filler() has changed from png_byte to
|
||||||
|
png_uint_32, which will affect shared-library applications that use
|
||||||
|
this function.
|
||||||
|
|
||||||
|
To avoid problems with changes to the internals of png_info_struct,
|
||||||
|
new APIs have been made available in 0.95 to avoid direct application
|
||||||
|
access to info_ptr. These functions are the png_set_<chunk> and
|
||||||
|
png_get_<chunk> functions. These functions should be used when
|
||||||
|
accessing/storing the info_struct data, rather than manipulating it
|
||||||
|
directly, to avoid such problems in the future.
|
||||||
|
|
||||||
|
It is important to note that the APIs do not make current programs
|
||||||
|
that access the info struct directly incompatible with the new
|
||||||
|
library. However, it is strongly suggested that new programs use
|
||||||
|
the new APIs (as shown in example.c), and older programs be converted
|
||||||
|
to the new format, to facilitate upgrades in the future.
|
||||||
|
****
|
||||||
|
|
||||||
|
Additions since 0.90 include the ability to compile libpng as a
|
||||||
|
Windows DLL, and new APIs for accessing data in the info struct.
|
||||||
|
Experimental functions include the ability to set weighting and cost
|
||||||
|
factors for row filter selection, direct reads of integers from buffers
|
||||||
|
on big-endian processors that support misaligned data access, faster
|
||||||
|
methods of doing alpha composition, and more accurate 16->8 bit color
|
||||||
|
conversion.
|
||||||
|
|
||||||
|
The additions since 0.89 include the ability to read from a PNG stream
|
||||||
|
which has had some (or all) of the signature bytes read by the calling
|
||||||
|
application. This also allows the reading of embedded PNG streams that
|
||||||
|
do not have the PNG file signature. As well, it is now possible to set
|
||||||
|
the library action on the detection of chunk CRC errors. It is possible
|
||||||
|
to set different actions based on whether the CRC error occurred in a
|
||||||
|
critical or an ancillary chunk.
|
||||||
|
|
||||||
|
The changes made to the library, and bugs fixed are based on discussions
|
||||||
|
on the PNG implementation mailing list <png-implement@dworking.wustl.edu>
|
||||||
|
and not on material submitted to Guy.
|
||||||
|
|
||||||
|
For a detailed description on using libpng, read libpng.txt. For
|
||||||
|
examples of libpng in a program, see example.c and pngtest.c. For usage
|
||||||
|
information and restrictions (what little they are) on libpng, see
|
||||||
|
png.h. For a description on using zlib (the compression library used by
|
||||||
|
libpng) and zlib's restrictions, see zlib.h
|
||||||
|
|
||||||
|
I have included a general makefile, as well as several machine and
|
||||||
|
compiler specific ones, but you may have to modify one for your own needs.
|
||||||
|
|
||||||
|
You should use zlib 1.0.4 or later to run this, but it MAY work with
|
||||||
|
versions as old as zlib 0.95. Even so, there are bugs in older zlib
|
||||||
|
versions which can cause the output of invalid compression streams for
|
||||||
|
some images. You will definitely need zlib 1.0.4 or later if you are
|
||||||
|
taking advantage of the MS-DOS "far" structure allocation for the small
|
||||||
|
and medium memory models. You should also note that zlib is a
|
||||||
|
compression library that is useful for more things than just PNG files.
|
||||||
|
You can use zlib as a drop-in replacement for fread() and fwrite() if
|
||||||
|
you are so inclined.
|
||||||
|
|
||||||
|
zlib should be available at the same place that libpng is.
|
||||||
|
If not, it should be at ftp.uu.net in /graphics/png
|
||||||
|
Eventually, it will be at ftp.uu.net in /pub/archiving/zip/zlib
|
||||||
|
|
||||||
|
You may also want a copy of the PNG specification. It is available
|
||||||
|
as an RFC and a W3C Recommendation. Failing
|
||||||
|
these resources you can try ftp.uu.net in the /graphics/png directory.
|
||||||
|
|
||||||
|
This code is currently being archived at ftp.uu.net in the
|
||||||
|
/graphics/png directory, and on CompuServe, Lib 20 (PNG SUPPORT)
|
||||||
|
at GO GRAPHSUP. If you can't find it in any of those places,
|
||||||
|
e-mail me, and I'll help you find it.
|
||||||
|
|
||||||
|
If you have any code changes, requests, problems, etc., please e-mail
|
||||||
|
them to me. Also, I'd appreciate any make files or project files,
|
||||||
|
and any modifications you needed to make to get libpng to compile,
|
||||||
|
along with a #define variable to tell what compiler/system you are on.
|
||||||
|
If you needed to add transformations to libpng, or wish libpng would
|
||||||
|
provide the image in a different way, drop me a note (and code, if
|
||||||
|
possible), so I can consider supporting the transformation.
|
||||||
|
Finally, if you get any warning messages when compiling libpng
|
||||||
|
(note: not zlib), and they are easy to fix, I'd appreciate the
|
||||||
|
fix. Please mention "libpng" somewhere in the subject line. Thanks.
|
||||||
|
|
||||||
|
This release was created and will be supported by myself (of course
|
||||||
|
based in a large way on Guy's and Andreas' earlier work), and the PNG group.
|
||||||
|
|
||||||
|
randeg@alumni.rpi.edu
|
||||||
|
png-implement@dworkin.wustl.edu
|
||||||
|
|
||||||
|
You can't reach Guy, the original libpng author, at the addresses
|
||||||
|
given in previous versions of this document. He and Andreas will read mail
|
||||||
|
addressed to the png-implement list, however.
|
||||||
|
|
||||||
|
Please do not send general questions about PNG. Send them to
|
||||||
|
the address in the specification (png-group@w3.org). At the same
|
||||||
|
time, please do not send libpng questions to that address, send them to me
|
||||||
|
or to png-implement@dworkin.wustl.edu. I'll
|
||||||
|
get them in the end anyway. If you have a question about something
|
||||||
|
in the PNG specification that is related to using libpng, send it
|
||||||
|
to me. Send me any questions that start with "I was using libpng,
|
||||||
|
and ...". If in doubt, send questions to me. I'll bounce them
|
||||||
|
to others, if necessary.
|
||||||
|
|
||||||
|
Please do not send suggestions on how to change PNG. We have
|
||||||
|
been discussing PNG for three years now, and it is official and
|
||||||
|
finished. If you have suggestions for libpng, however, I'll
|
||||||
|
gladly listen. Even if your suggestion is not used for version
|
||||||
|
1.0, it may be used later.
|
||||||
|
|
||||||
|
Files in this distribution:
|
||||||
|
|
||||||
|
CHANGES => Description of changes between libpng versions
|
||||||
|
README => This file
|
||||||
|
TODO => Things not implemented in the current library
|
||||||
|
ansi2knr.1 => Manual page for ansi2knr
|
||||||
|
ansi2knr.c => Converts files to K&R style function declarations
|
||||||
|
build.bat => MS-DOS batch file for Borland compiler
|
||||||
|
descrip.mms => VMS project file
|
||||||
|
example.c => Example code for using libpng functions
|
||||||
|
libpng.3 => manual page for libpng
|
||||||
|
libpng.txt => Description of libpng and its functions
|
||||||
|
libpngpf.3 => manual page for libpng's private functions
|
||||||
|
png.5 => manual page for the PNG format
|
||||||
|
png.c => Basic interface functions common to library
|
||||||
|
png.h => Library function and interface declarations
|
||||||
|
pngconf.h => System specific library configuration
|
||||||
|
pngerror.c => Error/warning message I/O functions
|
||||||
|
pngget.c => Functions for retrieving info from struct
|
||||||
|
pngmem.c => Memory handling functions
|
||||||
|
pngpread.c => Progressive reading functions
|
||||||
|
pngread.c => Read data/helper high-level functions
|
||||||
|
pngrio.c => Lowest-level data read I/O functions
|
||||||
|
pngrtran.c => Read data transformation functions
|
||||||
|
pngrutil.c => Read data utility functions
|
||||||
|
pngset.c => Functions for storing data into the info_struct
|
||||||
|
pngtest.c => Library test program
|
||||||
|
pngtest.png => Library test sample image
|
||||||
|
pngtrans.c => Common data transformation functions
|
||||||
|
pngwio.c => Lowest-level write I/O functions
|
||||||
|
pngwrite.c => High-level write functions
|
||||||
|
pngwtran.c => Write data transformations
|
||||||
|
pngwutil.c => Write utility functions
|
||||||
|
scripts => Directory containing scripts for building libpng:
|
||||||
|
descrip.mms => VMS makefile for MMS or MMK
|
||||||
|
makefile.std => Generic UNIX makefile
|
||||||
|
makefile.knr => Archaic UNIX Makefile that converts files with ansi2knr
|
||||||
|
makefile.dec => DEC Alpha UNIX makefile
|
||||||
|
makefile.sgi => Silicon Graphics IRIX makefile
|
||||||
|
makefile.sun => Sun makefile
|
||||||
|
makefile.s2x => Solaris 2.X makefile (gcc, creates libpng.so.2.1.0)
|
||||||
|
makefile.lnx => Linux/ELF makefile (gcc, creates libpng.so.2.1.0)
|
||||||
|
makefile.mip => MIPS makefile
|
||||||
|
makefile.aco => Acorn makefile
|
||||||
|
makefile.ama => Amiga makefile
|
||||||
|
smakefile.ppc => AMIGA smakefile for SAS C V6.58/7.00 PPC compiler
|
||||||
|
(Requires SCOPTIONS, copied from scripts/SCOPTIONS.ppc)
|
||||||
|
makefile.atr => Atari makefile
|
||||||
|
makefile.bor => Borland makefile
|
||||||
|
build.bat => MS-DOS batch file for Borland compiler
|
||||||
|
makefile.dj2 => DJGPP 2 makefile
|
||||||
|
makefile.msc => Microsoft C makefile
|
||||||
|
makefile.tc3 => Turbo C 3.0 makefile
|
||||||
|
makefile.os2 => OS/2 Makefile (gcc and emx, requires pngos2.def)
|
||||||
|
makefile.wat => Watcom 10a+ Makefile, 32-bit flat memory model
|
||||||
|
pngos2.def => OS/2 module definition file used by makefile.os2
|
||||||
|
makevms.com => VMS build script
|
||||||
|
|
||||||
|
Good luck, and happy coding.
|
||||||
|
|
||||||
|
-Glenn Randers-Pehrson
|
||||||
|
Internet: randeg@alumni.rpi.edu
|
||||||
|
Web: http://www.rpi.edu/~randeg/index.html
|
||||||
|
|
||||||
|
-Andreas Eric Dilger
|
||||||
|
Internet: adilger@enel.ucalgary.ca
|
||||||
|
Web: http://www-mddsp.enel.ucalgary.ca/People/adilger/
|
||||||
|
|
||||||
|
-Guy Eric Schalnat
|
||||||
|
(formerly of Group 42, Inc)
|
||||||
|
Internet: gschal@infinet.com
|
21
thirdparty/libpng/TODO
vendored
Normal file
21
thirdparty/libpng/TODO
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
TODO - list of things to do for libpng
|
||||||
|
|
||||||
|
fix problem with C++ and EXTERN "C"
|
||||||
|
add "grayscale->palette" transformation and "palette->grayscale" detection
|
||||||
|
improved dithering
|
||||||
|
multi-lingual error and warning message support
|
||||||
|
sPLT chunk handling
|
||||||
|
cHRM transformation
|
||||||
|
complete sRGB transformation (presently it simply uses gamma=0.45)
|
||||||
|
man pages for function calls
|
||||||
|
high-level API for reading images
|
||||||
|
final bug fixes
|
||||||
|
better documentation
|
||||||
|
better filter selection
|
||||||
|
(counting huffman bits/precompression? filter inertia? filter costs?)
|
||||||
|
optional palette creation
|
||||||
|
histogram creation
|
||||||
|
support for application-defined chunk handlers
|
||||||
|
keep up with public chunks
|
||||||
|
better C++ wrapper/full C++ implementation?
|
||||||
|
text conversion between different code pages (Latin-1 -> Mac and DOS)
|
36
thirdparty/libpng/ansi2knr.1
vendored
Normal file
36
thirdparty/libpng/ansi2knr.1
vendored
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
.TH ANSI2KNR 1 "19 Jan 1996"
|
||||||
|
.SH NAME
|
||||||
|
ansi2knr \- convert ANSI C to Kernighan & Ritchie C
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.I ansi2knr
|
||||||
|
[--varargs] input_file [output_file]
|
||||||
|
.SH DESCRIPTION
|
||||||
|
If no output_file is supplied, output goes to stdout.
|
||||||
|
.br
|
||||||
|
There are no error messages.
|
||||||
|
.sp
|
||||||
|
.I ansi2knr
|
||||||
|
recognizes function definitions by seeing a non-keyword identifier at the left
|
||||||
|
margin, followed by a left parenthesis, with a right parenthesis as the last
|
||||||
|
character on the line, and with a left brace as the first token on the
|
||||||
|
following line (ignoring possible intervening comments). It will recognize a
|
||||||
|
multi-line header provided that no intervening line ends with a left or right
|
||||||
|
brace or a semicolon. These algorithms ignore whitespace and comments, except
|
||||||
|
that the function name must be the first thing on the line.
|
||||||
|
.sp
|
||||||
|
The following constructs will confuse it:
|
||||||
|
.br
|
||||||
|
- Any other construct that starts at the left margin and follows the
|
||||||
|
above syntax (such as a macro or function call).
|
||||||
|
.br
|
||||||
|
- Some macros that tinker with the syntax of the function header.
|
||||||
|
.sp
|
||||||
|
The --varargs switch is obsolete, and is recognized only for
|
||||||
|
backwards compatibility. The present version of
|
||||||
|
.I ansi2knr
|
||||||
|
will always attempt to convert a ... argument to va_alist and va_dcl.
|
||||||
|
.SH AUTHOR
|
||||||
|
L. Peter Deutsch <ghost@aladdin.com> wrote the original ansi2knr and
|
||||||
|
continues to maintain the current version; most of the code in the current
|
||||||
|
version is his work. ansi2knr also includes contributions by Francois
|
||||||
|
Pinard <pinard@iro.umontreal.ca> and Jim Avera <jima@netcom.com>.
|
693
thirdparty/libpng/ansi2knr.c
vendored
Normal file
693
thirdparty/libpng/ansi2knr.c
vendored
Normal file
@ -0,0 +1,693 @@
|
|||||||
|
/* ansi2knr.c */
|
||||||
|
/* Convert ANSI C function definitions to K&R ("traditional C") syntax */
|
||||||
|
|
||||||
|
/*
|
||||||
|
ansi2knr is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
WARRANTY. No author or distributor accepts responsibility to anyone for the
|
||||||
|
consequences of using it or for whether it serves any particular purpose or
|
||||||
|
works at all, unless he says so in writing. Refer to the GNU General Public
|
||||||
|
License (the "GPL") for full details.
|
||||||
|
|
||||||
|
Everyone is granted permission to copy, modify and redistribute ansi2knr,
|
||||||
|
but only under the conditions described in the GPL. A copy of this license
|
||||||
|
is supposed to have been given to you along with ansi2knr so you can know
|
||||||
|
your rights and responsibilities. It should be in a file named COPYLEFT.
|
||||||
|
[In the IJG distribution, the GPL appears below, not in a separate file.]
|
||||||
|
Among other things, the copyright notice and this notice must be preserved
|
||||||
|
on all copies.
|
||||||
|
|
||||||
|
We explicitly state here what we believe is already implied by the GPL: if
|
||||||
|
the ansi2knr program is distributed as a separate set of sources and a
|
||||||
|
separate executable file which are aggregated on a storage medium together
|
||||||
|
with another program, this in itself does not bring the other program under
|
||||||
|
the GPL, nor does the mere fact that such a program or the procedures for
|
||||||
|
constructing it invoke the ansi2knr executable bring any other part of the
|
||||||
|
program under the GPL.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
---------- Here is the GNU GPL file COPYLEFT, referred to above ----------
|
||||||
|
----- These terms do NOT apply to the JPEG software itself; see README ------
|
||||||
|
|
||||||
|
GHOSTSCRIPT GENERAL PUBLIC LICENSE
|
||||||
|
(Clarified 11 Feb 1988)
|
||||||
|
|
||||||
|
Copyright (C) 1988 Richard M. Stallman
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies of this
|
||||||
|
license, but changing it is not allowed. You can also use this wording
|
||||||
|
to make the terms for other programs.
|
||||||
|
|
||||||
|
The license agreements of most software companies keep you at the
|
||||||
|
mercy of those companies. By contrast, our general public license is
|
||||||
|
intended to give everyone the right to share Ghostscript. To make sure
|
||||||
|
that you get the rights we want you to have, we need to make
|
||||||
|
restrictions that forbid anyone to deny you these rights or to ask you
|
||||||
|
to surrender the rights. Hence this license agreement.
|
||||||
|
|
||||||
|
Specifically, we want to make sure that you have the right to give
|
||||||
|
away copies of Ghostscript, that you receive source code or else can get
|
||||||
|
it if you want it, that you can change Ghostscript or use pieces of it
|
||||||
|
in new free programs, and that you know you can do these things.
|
||||||
|
|
||||||
|
To make sure that everyone has such rights, we have to forbid you to
|
||||||
|
deprive anyone else of these rights. For example, if you distribute
|
||||||
|
copies of Ghostscript, you must give the recipients all the rights that
|
||||||
|
you have. You must make sure that they, too, receive or can get the
|
||||||
|
source code. And you must tell them their rights.
|
||||||
|
|
||||||
|
Also, for our own protection, we must make certain that everyone finds
|
||||||
|
out that there is no warranty for Ghostscript. If Ghostscript is
|
||||||
|
modified by someone else and passed on, we want its recipients to know
|
||||||
|
that what they have is not what we distributed, so that any problems
|
||||||
|
introduced by others will not reflect on our reputation.
|
||||||
|
|
||||||
|
Therefore we (Richard M. Stallman and the Free Software Foundation,
|
||||||
|
Inc.) make the following terms which say what you must do to be allowed
|
||||||
|
to distribute or change Ghostscript.
|
||||||
|
|
||||||
|
|
||||||
|
COPYING POLICIES
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of Ghostscript source
|
||||||
|
code as you receive it, in any medium, provided that you conspicuously
|
||||||
|
and appropriately publish on each copy a valid copyright and license
|
||||||
|
notice "Copyright (C) 1989 Aladdin Enterprises. All rights reserved.
|
||||||
|
Distributed by Free Software Foundation, Inc." (or with whatever year is
|
||||||
|
appropriate); keep intact the notices on all files that refer to this
|
||||||
|
License Agreement and to the absence of any warranty; and give any other
|
||||||
|
recipients of the Ghostscript program a copy of this License Agreement
|
||||||
|
along with the program. You may charge a distribution fee for the
|
||||||
|
physical act of transferring a copy.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of Ghostscript or any portion of
|
||||||
|
it, and copy and distribute such modifications under the terms of
|
||||||
|
Paragraph 1 above, provided that you also do the following:
|
||||||
|
|
||||||
|
a) cause the modified files to carry prominent notices stating
|
||||||
|
that you changed the files and the date of any change; and
|
||||||
|
|
||||||
|
b) cause the whole of any work that you distribute or publish,
|
||||||
|
that in whole or in part contains or is a derivative of Ghostscript
|
||||||
|
or any part thereof, to be licensed at no charge to all third
|
||||||
|
parties on terms identical to those contained in this License
|
||||||
|
Agreement (except that you may choose to grant more extensive
|
||||||
|
warranty protection to some or all third parties, at your option).
|
||||||
|
|
||||||
|
c) You may charge a distribution fee for the physical act of
|
||||||
|
transferring a copy, and you may at your option offer warranty
|
||||||
|
protection in exchange for a fee.
|
||||||
|
|
||||||
|
Mere aggregation of another unrelated program with this program (or its
|
||||||
|
derivative) on a volume of a storage or distribution medium does not bring
|
||||||
|
the other program under the scope of these terms.
|
||||||
|
|
||||||
|
3. You may copy and distribute Ghostscript (or a portion or derivative
|
||||||
|
of it, under Paragraph 2) in object code or executable form under the
|
||||||
|
terms of Paragraphs 1 and 2 above provided that you also do one of the
|
||||||
|
following:
|
||||||
|
|
||||||
|
a) accompany it with the complete corresponding machine-readable
|
||||||
|
source code, which must be distributed under the terms of
|
||||||
|
Paragraphs 1 and 2 above; or,
|
||||||
|
|
||||||
|
b) accompany it with a written offer, valid for at least three
|
||||||
|
years, to give any third party free (except for a nominal
|
||||||
|
shipping charge) a complete machine-readable copy of the
|
||||||
|
corresponding source code, to be distributed under the terms of
|
||||||
|
Paragraphs 1 and 2 above; or,
|
||||||
|
|
||||||
|
c) accompany it with the information you received as to where the
|
||||||
|
corresponding source code may be obtained. (This alternative is
|
||||||
|
allowed only for noncommercial distribution and only if you
|
||||||
|
received the program in object code or executable form alone.)
|
||||||
|
|
||||||
|
For an executable file, complete source code means all the source code for
|
||||||
|
all modules it contains; but, as a special exception, it need not include
|
||||||
|
source code for modules which are standard libraries that accompany the
|
||||||
|
operating system on which the executable file runs.
|
||||||
|
|
||||||
|
4. You may not copy, sublicense, distribute or transfer Ghostscript
|
||||||
|
except as expressly provided under this License Agreement. Any attempt
|
||||||
|
otherwise to copy, sublicense, distribute or transfer Ghostscript is
|
||||||
|
void and your rights to use the program under this License agreement
|
||||||
|
shall be automatically terminated. However, parties who have received
|
||||||
|
computer software programs from you with this License Agreement will not
|
||||||
|
have their licenses terminated so long as such parties remain in full
|
||||||
|
compliance.
|
||||||
|
|
||||||
|
5. If you wish to incorporate parts of Ghostscript into other free
|
||||||
|
programs whose distribution conditions are different, write to the Free
|
||||||
|
Software Foundation at 675 Mass Ave, Cambridge, MA 02139. We have not
|
||||||
|
yet worked out a simple rule that can be stated here, but we will often
|
||||||
|
permit this. We will be guided by the two goals of preserving the free
|
||||||
|
status of all derivatives of our free software and of promoting the
|
||||||
|
sharing and reuse of software.
|
||||||
|
|
||||||
|
Your comments and suggestions about our licensing policies and our
|
||||||
|
software are welcome! Please contact the Free Software Foundation,
|
||||||
|
Inc., 675 Mass Ave, Cambridge, MA 02139, or call (617) 876-3296.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
BECAUSE GHOSTSCRIPT IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY
|
||||||
|
NO WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW. EXCEPT
|
||||||
|
WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC, RICHARD
|
||||||
|
M. STALLMAN, ALADDIN ENTERPRISES, L. PETER DEUTSCH, AND/OR OTHER PARTIES
|
||||||
|
PROVIDE GHOSTSCRIPT "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
|
||||||
|
EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
|
||||||
|
ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF GHOSTSCRIPT IS WITH
|
||||||
|
YOU. SHOULD GHOSTSCRIPT PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
|
||||||
|
NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M.
|
||||||
|
STALLMAN, THE FREE SOFTWARE FOUNDATION, INC., L. PETER DEUTSCH, ALADDIN
|
||||||
|
ENTERPRISES, AND/OR ANY OTHER PARTY WHO MAY MODIFY AND REDISTRIBUTE
|
||||||
|
GHOSTSCRIPT AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING
|
||||||
|
ANY LOST PROFITS, LOST MONIES, OR OTHER SPECIAL, INCIDENTAL OR
|
||||||
|
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
|
||||||
|
(INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED
|
||||||
|
INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR A FAILURE OF THE
|
||||||
|
PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) GHOSTSCRIPT, EVEN IF YOU
|
||||||
|
HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM
|
||||||
|
BY ANY OTHER PARTY.
|
||||||
|
|
||||||
|
-------------------- End of file COPYLEFT ------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Usage:
|
||||||
|
ansi2knr input_file [output_file]
|
||||||
|
* If no output_file is supplied, output goes to stdout.
|
||||||
|
* There are no error messages.
|
||||||
|
*
|
||||||
|
* ansi2knr recognizes function definitions by seeing a non-keyword
|
||||||
|
* identifier at the left margin, followed by a left parenthesis,
|
||||||
|
* with a right parenthesis as the last character on the line,
|
||||||
|
* and with a left brace as the first token on the following line
|
||||||
|
* (ignoring possible intervening comments).
|
||||||
|
* It will recognize a multi-line header provided that no intervening
|
||||||
|
* line ends with a left or right brace or a semicolon.
|
||||||
|
* These algorithms ignore whitespace and comments, except that
|
||||||
|
* the function name must be the first thing on the line.
|
||||||
|
* The following constructs will confuse it:
|
||||||
|
* - Any other construct that starts at the left margin and
|
||||||
|
* follows the above syntax (such as a macro or function call).
|
||||||
|
* - Some macros that tinker with the syntax of the function header.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The original and principal author of ansi2knr is L. Peter Deutsch
|
||||||
|
* <ghost@aladdin.com>. Other authors are noted in the change history
|
||||||
|
* that follows (in reverse chronological order):
|
||||||
|
lpd 96-01-21 added code to cope with not HAVE_CONFIG_H and with
|
||||||
|
compilers that don't understand void, as suggested by
|
||||||
|
Tom Lane
|
||||||
|
lpd 96-01-15 changed to require that the first non-comment token
|
||||||
|
on the line following a function header be a left brace,
|
||||||
|
to reduce sensitivity to macros, as suggested by Tom Lane
|
||||||
|
<tgl@sss.pgh.pa.us>
|
||||||
|
lpd 95-06-22 removed #ifndefs whose sole purpose was to define
|
||||||
|
undefined preprocessor symbols as 0; changed all #ifdefs
|
||||||
|
for configuration symbols to #ifs
|
||||||
|
lpd 95-04-05 changed copyright notice to make it clear that
|
||||||
|
including ansi2knr in a program does not bring the entire
|
||||||
|
program under the GPL
|
||||||
|
lpd 94-12-18 added conditionals for systems where ctype macros
|
||||||
|
don't handle 8-bit characters properly, suggested by
|
||||||
|
Francois Pinard <pinard@iro.umontreal.ca>;
|
||||||
|
removed --varargs switch (this is now the default)
|
||||||
|
lpd 94-10-10 removed CONFIG_BROKETS conditional
|
||||||
|
lpd 94-07-16 added some conditionals to help GNU `configure',
|
||||||
|
suggested by Francois Pinard <pinard@iro.umontreal.ca>;
|
||||||
|
properly erase prototype args in function parameters,
|
||||||
|
contributed by Jim Avera <jima@netcom.com>;
|
||||||
|
correct error in writeblanks (it shouldn't erase EOLs)
|
||||||
|
lpd 89-xx-xx original version
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Most of the conditionals here are to make ansi2knr work with */
|
||||||
|
/* or without the GNU configure machinery. */
|
||||||
|
|
||||||
|
#if HAVE_CONFIG_H
|
||||||
|
# include <config.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
|
||||||
|
#if HAVE_CONFIG_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
For properly autoconfiguring ansi2knr, use AC_CONFIG_HEADER(config.h).
|
||||||
|
This will define HAVE_CONFIG_H and so, activate the following lines.
|
||||||
|
*/
|
||||||
|
|
||||||
|
# if STDC_HEADERS || HAVE_STRING_H
|
||||||
|
# include <string.h>
|
||||||
|
# else
|
||||||
|
# include <strings.h>
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#else /* not HAVE_CONFIG_H */
|
||||||
|
|
||||||
|
/* Otherwise do it the hard way */
|
||||||
|
|
||||||
|
# ifdef BSD
|
||||||
|
# include <strings.h>
|
||||||
|
# else
|
||||||
|
# ifdef VMS
|
||||||
|
extern int strlen(), strncmp();
|
||||||
|
# else
|
||||||
|
# include <string.h>
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#endif /* not HAVE_CONFIG_H */
|
||||||
|
|
||||||
|
#if STDC_HEADERS
|
||||||
|
# include <stdlib.h>
|
||||||
|
#else
|
||||||
|
/*
|
||||||
|
malloc and free should be declared in stdlib.h,
|
||||||
|
but if you've got a K&R compiler, they probably aren't.
|
||||||
|
*/
|
||||||
|
# ifdef MSDOS
|
||||||
|
# include <malloc.h>
|
||||||
|
# else
|
||||||
|
# ifdef VMS
|
||||||
|
extern char *malloc();
|
||||||
|
extern void free();
|
||||||
|
# else
|
||||||
|
extern char *malloc();
|
||||||
|
extern int free();
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The ctype macros don't always handle 8-bit characters correctly.
|
||||||
|
* Compensate for this here.
|
||||||
|
*/
|
||||||
|
#ifdef isascii
|
||||||
|
# undef HAVE_ISASCII /* just in case */
|
||||||
|
# define HAVE_ISASCII 1
|
||||||
|
#else
|
||||||
|
#endif
|
||||||
|
#if STDC_HEADERS || !HAVE_ISASCII
|
||||||
|
# define is_ascii(c) 1
|
||||||
|
#else
|
||||||
|
# define is_ascii(c) isascii(c)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define is_space(c) (is_ascii(c) && isspace(c))
|
||||||
|
#define is_alpha(c) (is_ascii(c) && isalpha(c))
|
||||||
|
#define is_alnum(c) (is_ascii(c) && isalnum(c))
|
||||||
|
|
||||||
|
/* Scanning macros */
|
||||||
|
#define isidchar(ch) (is_alnum(ch) || (ch) == '_')
|
||||||
|
#define isidfirstchar(ch) (is_alpha(ch) || (ch) == '_')
|
||||||
|
|
||||||
|
/* Forward references */
|
||||||
|
char *skipspace();
|
||||||
|
int writeblanks();
|
||||||
|
int test1();
|
||||||
|
int convert1();
|
||||||
|
|
||||||
|
/* The main program */
|
||||||
|
int
|
||||||
|
main(argc, argv)
|
||||||
|
int argc;
|
||||||
|
char *argv[];
|
||||||
|
{ FILE *in, *out;
|
||||||
|
#define bufsize 5000 /* arbitrary size */
|
||||||
|
char *buf;
|
||||||
|
char *line;
|
||||||
|
char *more;
|
||||||
|
/*
|
||||||
|
* In previous versions, ansi2knr recognized a --varargs switch.
|
||||||
|
* If this switch was supplied, ansi2knr would attempt to convert
|
||||||
|
* a ... argument to va_alist and va_dcl; if this switch was not
|
||||||
|
* supplied, ansi2knr would simply drop any such arguments.
|
||||||
|
* Now, ansi2knr always does this conversion, and we only
|
||||||
|
* check for this switch for backward compatibility.
|
||||||
|
*/
|
||||||
|
int convert_varargs = 1;
|
||||||
|
|
||||||
|
if ( argc > 1 && argv[1][0] == '-' )
|
||||||
|
{ if ( !strcmp(argv[1], "--varargs") )
|
||||||
|
{ convert_varargs = 1;
|
||||||
|
argc--;
|
||||||
|
argv++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ fprintf(stderr, "Unrecognized switch: %s\n", argv[1]);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
switch ( argc )
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
printf("Usage: ansi2knr input_file [output_file]\n");
|
||||||
|
exit(0);
|
||||||
|
case 2:
|
||||||
|
out = stdout;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
out = fopen(argv[2], "w");
|
||||||
|
if ( out == NULL )
|
||||||
|
{ fprintf(stderr, "Cannot open output file %s\n", argv[2]);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
in = fopen(argv[1], "r");
|
||||||
|
if ( in == NULL )
|
||||||
|
{ fprintf(stderr, "Cannot open input file %s\n", argv[1]);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
fprintf(out, "#line 1 \"%s\"\n", argv[1]);
|
||||||
|
buf = malloc(bufsize);
|
||||||
|
line = buf;
|
||||||
|
while ( fgets(line, (unsigned)(buf + bufsize - line), in) != NULL )
|
||||||
|
{
|
||||||
|
test: line += strlen(line);
|
||||||
|
switch ( test1(buf) )
|
||||||
|
{
|
||||||
|
case 2: /* a function header */
|
||||||
|
convert1(buf, out, 1, convert_varargs);
|
||||||
|
break;
|
||||||
|
case 1: /* a function */
|
||||||
|
/* Check for a { at the start of the next line. */
|
||||||
|
more = ++line;
|
||||||
|
f: if ( line >= buf + (bufsize - 1) ) /* overflow check */
|
||||||
|
goto wl;
|
||||||
|
if ( fgets(line, (unsigned)(buf + bufsize - line), in) == NULL )
|
||||||
|
goto wl;
|
||||||
|
switch ( *skipspace(more, 1) )
|
||||||
|
{
|
||||||
|
case '{':
|
||||||
|
/* Definitely a function header. */
|
||||||
|
convert1(buf, out, 0, convert_varargs);
|
||||||
|
fputs(more, out);
|
||||||
|
break;
|
||||||
|
case 0:
|
||||||
|
/* The next line was blank or a comment: */
|
||||||
|
/* keep scanning for a non-comment. */
|
||||||
|
line += strlen(line);
|
||||||
|
goto f;
|
||||||
|
default:
|
||||||
|
/* buf isn't a function header, but */
|
||||||
|
/* more might be. */
|
||||||
|
fputs(buf, out);
|
||||||
|
strcpy(buf, more);
|
||||||
|
line = buf;
|
||||||
|
goto test;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case -1: /* maybe the start of a function */
|
||||||
|
if ( line != buf + (bufsize - 1) ) /* overflow check */
|
||||||
|
continue;
|
||||||
|
/* falls through */
|
||||||
|
default: /* not a function */
|
||||||
|
wl: fputs(buf, out);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
line = buf;
|
||||||
|
}
|
||||||
|
if ( line != buf )
|
||||||
|
fputs(buf, out);
|
||||||
|
free(buf);
|
||||||
|
fclose(out);
|
||||||
|
fclose(in);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Skip over space and comments, in either direction. */
|
||||||
|
char *
|
||||||
|
skipspace(p, dir)
|
||||||
|
register char *p;
|
||||||
|
register int dir; /* 1 for forward, -1 for backward */
|
||||||
|
{ for ( ; ; )
|
||||||
|
{ while ( is_space(*p) )
|
||||||
|
p += dir;
|
||||||
|
if ( !(*p == '/' && p[dir] == '*') )
|
||||||
|
break;
|
||||||
|
p += dir; p += dir;
|
||||||
|
while ( !(*p == '*' && p[dir] == '/') )
|
||||||
|
{ if ( *p == 0 )
|
||||||
|
return p; /* multi-line comment?? */
|
||||||
|
p += dir;
|
||||||
|
}
|
||||||
|
p += dir; p += dir;
|
||||||
|
}
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Write blanks over part of a string.
|
||||||
|
* Don't overwrite end-of-line characters.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
writeblanks(start, end)
|
||||||
|
char *start;
|
||||||
|
char *end;
|
||||||
|
{ char *p;
|
||||||
|
for ( p = start; p < end; p++ )
|
||||||
|
if ( *p != '\r' && *p != '\n' )
|
||||||
|
*p = ' ';
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Test whether the string in buf is a function definition.
|
||||||
|
* The string may contain and/or end with a newline.
|
||||||
|
* Return as follows:
|
||||||
|
* 0 - definitely not a function definition;
|
||||||
|
* 1 - definitely a function definition;
|
||||||
|
* 2 - definitely a function prototype (NOT USED);
|
||||||
|
* -1 - may be the beginning of a function definition,
|
||||||
|
* append another line and look again.
|
||||||
|
* The reason we don't attempt to convert function prototypes is that
|
||||||
|
* Ghostscript's declaration-generating macros look too much like
|
||||||
|
* prototypes, and confuse the algorithms.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
test1(buf)
|
||||||
|
char *buf;
|
||||||
|
{ register char *p = buf;
|
||||||
|
char *bend;
|
||||||
|
char *endfn;
|
||||||
|
int contin;
|
||||||
|
|
||||||
|
if ( !isidfirstchar(*p) )
|
||||||
|
return 0; /* no name at left margin */
|
||||||
|
bend = skipspace(buf + strlen(buf) - 1, -1);
|
||||||
|
switch ( *bend )
|
||||||
|
{
|
||||||
|
case ';': contin = 0 /*2*/; break;
|
||||||
|
case ')': contin = 1; break;
|
||||||
|
case '{': return 0; /* not a function */
|
||||||
|
case '}': return 0; /* not a function */
|
||||||
|
default: contin = -1;
|
||||||
|
}
|
||||||
|
while ( isidchar(*p) )
|
||||||
|
p++;
|
||||||
|
endfn = p;
|
||||||
|
p = skipspace(p, 1);
|
||||||
|
if ( *p++ != '(' )
|
||||||
|
return 0; /* not a function */
|
||||||
|
p = skipspace(p, 1);
|
||||||
|
if ( *p == ')' )
|
||||||
|
return 0; /* no parameters */
|
||||||
|
/* Check that the apparent function name isn't a keyword. */
|
||||||
|
/* We only need to check for keywords that could be followed */
|
||||||
|
/* by a left parenthesis (which, unfortunately, is most of them). */
|
||||||
|
{ static char *words[] =
|
||||||
|
{ "asm", "auto", "case", "char", "const", "double",
|
||||||
|
"extern", "float", "for", "if", "int", "long",
|
||||||
|
"register", "return", "short", "signed", "sizeof",
|
||||||
|
"static", "switch", "typedef", "unsigned",
|
||||||
|
"void", "volatile", "while", 0
|
||||||
|
};
|
||||||
|
char **key = words;
|
||||||
|
char *kp;
|
||||||
|
int len = endfn - buf;
|
||||||
|
|
||||||
|
while ( (kp = *key) != 0 )
|
||||||
|
{ if ( strlen(kp) == len && !strncmp(kp, buf, len) )
|
||||||
|
return 0; /* name is a keyword */
|
||||||
|
key++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return contin;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Convert a recognized function definition or header to K&R syntax. */
|
||||||
|
int
|
||||||
|
convert1(buf, out, header, convert_varargs)
|
||||||
|
char *buf;
|
||||||
|
FILE *out;
|
||||||
|
int header; /* Boolean */
|
||||||
|
int convert_varargs; /* Boolean */
|
||||||
|
{ char *endfn;
|
||||||
|
register char *p;
|
||||||
|
char **breaks;
|
||||||
|
unsigned num_breaks = 2; /* for testing */
|
||||||
|
char **btop;
|
||||||
|
char **bp;
|
||||||
|
char **ap;
|
||||||
|
char *vararg = 0;
|
||||||
|
|
||||||
|
/* Pre-ANSI implementations don't agree on whether strchr */
|
||||||
|
/* is called strchr or index, so we open-code it here. */
|
||||||
|
for ( endfn = buf; *(endfn++) != '('; )
|
||||||
|
;
|
||||||
|
top: p = endfn;
|
||||||
|
breaks = (char **)malloc(sizeof(char *) * num_breaks * 2);
|
||||||
|
if ( breaks == 0 )
|
||||||
|
{ /* Couldn't allocate break table, give up */
|
||||||
|
fprintf(stderr, "Unable to allocate break table!\n");
|
||||||
|
fputs(buf, out);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
btop = breaks + num_breaks * 2 - 2;
|
||||||
|
bp = breaks;
|
||||||
|
/* Parse the argument list */
|
||||||
|
do
|
||||||
|
{ int level = 0;
|
||||||
|
char *lp = NULL;
|
||||||
|
char *rp;
|
||||||
|
char *end = NULL;
|
||||||
|
|
||||||
|
if ( bp >= btop )
|
||||||
|
{ /* Filled up break table. */
|
||||||
|
/* Allocate a bigger one and start over. */
|
||||||
|
free((char *)breaks);
|
||||||
|
num_breaks <<= 1;
|
||||||
|
goto top;
|
||||||
|
}
|
||||||
|
*bp++ = p;
|
||||||
|
/* Find the end of the argument */
|
||||||
|
for ( ; end == NULL; p++ )
|
||||||
|
{ switch(*p)
|
||||||
|
{
|
||||||
|
case ',':
|
||||||
|
if ( !level ) end = p;
|
||||||
|
break;
|
||||||
|
case '(':
|
||||||
|
if ( !level ) lp = p;
|
||||||
|
level++;
|
||||||
|
break;
|
||||||
|
case ')':
|
||||||
|
if ( --level < 0 ) end = p;
|
||||||
|
else rp = p;
|
||||||
|
break;
|
||||||
|
case '/':
|
||||||
|
p = skipspace(p, 1) - 1;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Erase any embedded prototype parameters. */
|
||||||
|
if ( lp )
|
||||||
|
writeblanks(lp + 1, rp);
|
||||||
|
p--; /* back up over terminator */
|
||||||
|
/* Find the name being declared. */
|
||||||
|
/* This is complicated because of procedure and */
|
||||||
|
/* array modifiers. */
|
||||||
|
for ( ; ; )
|
||||||
|
{ p = skipspace(p - 1, -1);
|
||||||
|
switch ( *p )
|
||||||
|
{
|
||||||
|
case ']': /* skip array dimension(s) */
|
||||||
|
case ')': /* skip procedure args OR name */
|
||||||
|
{ int level = 1;
|
||||||
|
while ( level )
|
||||||
|
switch ( *--p )
|
||||||
|
{
|
||||||
|
case ']': case ')': level++; break;
|
||||||
|
case '[': case '(': level--; break;
|
||||||
|
case '/': p = skipspace(p, -1) + 1; break;
|
||||||
|
default: ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( *p == '(' && *skipspace(p + 1, 1) == '*' )
|
||||||
|
{ /* We found the name being declared */
|
||||||
|
while ( !isidfirstchar(*p) )
|
||||||
|
p = skipspace(p, 1) + 1;
|
||||||
|
goto found;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
goto found;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
found: if ( *p == '.' && p[-1] == '.' && p[-2] == '.' )
|
||||||
|
{ if ( convert_varargs )
|
||||||
|
{ *bp++ = "va_alist";
|
||||||
|
vararg = p-2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ p++;
|
||||||
|
if ( bp == breaks + 1 ) /* sole argument */
|
||||||
|
writeblanks(breaks[0], p);
|
||||||
|
else
|
||||||
|
writeblanks(bp[-1] - 1, p);
|
||||||
|
bp--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ while ( isidchar(*p) ) p--;
|
||||||
|
*bp++ = p+1;
|
||||||
|
}
|
||||||
|
p = end;
|
||||||
|
}
|
||||||
|
while ( *p++ == ',' );
|
||||||
|
*bp = p;
|
||||||
|
/* Make a special check for 'void' arglist */
|
||||||
|
if ( bp == breaks+2 )
|
||||||
|
{ p = skipspace(breaks[0], 1);
|
||||||
|
if ( !strncmp(p, "void", 4) )
|
||||||
|
{ p = skipspace(p+4, 1);
|
||||||
|
if ( p == breaks[2] - 1 )
|
||||||
|
{ bp = breaks; /* yup, pretend arglist is empty */
|
||||||
|
writeblanks(breaks[0], p + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Put out the function name and left parenthesis. */
|
||||||
|
p = buf;
|
||||||
|
while ( p != endfn ) putc(*p, out), p++;
|
||||||
|
/* Put out the declaration. */
|
||||||
|
if ( header )
|
||||||
|
{ fputs(");", out);
|
||||||
|
for ( p = breaks[0]; *p; p++ )
|
||||||
|
if ( *p == '\r' || *p == '\n' )
|
||||||
|
putc(*p, out);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{ for ( ap = breaks+1; ap < bp; ap += 2 )
|
||||||
|
{ p = *ap;
|
||||||
|
while ( isidchar(*p) )
|
||||||
|
putc(*p, out), p++;
|
||||||
|
if ( ap < bp - 1 )
|
||||||
|
fputs(", ", out);
|
||||||
|
}
|
||||||
|
fputs(") ", out);
|
||||||
|
/* Put out the argument declarations */
|
||||||
|
for ( ap = breaks+2; ap <= bp; ap += 2 )
|
||||||
|
(*ap)[-1] = ';';
|
||||||
|
if ( vararg != 0 )
|
||||||
|
{ *vararg = 0;
|
||||||
|
fputs(breaks[0], out); /* any prior args */
|
||||||
|
fputs("va_dcl", out); /* the final arg */
|
||||||
|
fputs(bp[0], out);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fputs(breaks[0], out);
|
||||||
|
}
|
||||||
|
free((char *)breaks);
|
||||||
|
return 0;
|
||||||
|
}
|
688
thirdparty/libpng/example.c
vendored
Normal file
688
thirdparty/libpng/example.c
vendored
Normal file
@ -0,0 +1,688 @@
|
|||||||
|
|
||||||
|
/* example.c - an example of using libpng */
|
||||||
|
|
||||||
|
/* This is an example of how to use libpng to read and write PNG files.
|
||||||
|
* The file libpng.txt is much more verbose then this. If you have not
|
||||||
|
* read it, do so first. This was designed to be a starting point of an
|
||||||
|
* implementation. This is not officially part of libpng, and therefore
|
||||||
|
* does not require a copyright notice.
|
||||||
|
*
|
||||||
|
* This file does not currently compile, because it is missing certain
|
||||||
|
* parts, like allocating memory to hold an image. You will have to
|
||||||
|
* supply these parts to get it to compile. For an example of a minimal
|
||||||
|
* working PNG reader/writer, see pngtest.c, included in this distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "png.h"
|
||||||
|
|
||||||
|
/* Check to see if a file is a PNG file using png_sig_cmp(). Returns
|
||||||
|
* non-zero if the image is a PNG, and 0 if it isn't a PNG.
|
||||||
|
*
|
||||||
|
* If this call is successful, and you are going to keep the file open,
|
||||||
|
* you should call png_set_sig_bytes(png_ptr, PNG_BYTES_TO_CHECK); once
|
||||||
|
* you have created the png_ptr, so that libpng knows your application
|
||||||
|
* has read that many bytes from the start of the file. Make sure you
|
||||||
|
* don't call png_set_sig_bytes() with more than 8 bytes read or give it
|
||||||
|
* an incorrect number of bytes read, or you will either have read too
|
||||||
|
* many bytes (your fault), or you are telling libpng to read the wrong
|
||||||
|
* number of magic bytes (also your fault).
|
||||||
|
*
|
||||||
|
* Many applications already read the first 2 or 4 bytes from the start
|
||||||
|
* of the image to determine the file type, so it would be easiest just
|
||||||
|
* to pass the bytes to png_sig_cmp() or even skip that if you know
|
||||||
|
* you have a PNG file, and call png_set_sig_bytes().
|
||||||
|
*/
|
||||||
|
#define PNG_BYTES_TO_CHECK 4
|
||||||
|
int check_if_png(char *file_name, FILE **fp)
|
||||||
|
{
|
||||||
|
char buf[PNG_BYTES_TO_CHECK];
|
||||||
|
|
||||||
|
/* Open the prospective PNG file. */
|
||||||
|
if ((*fp = fopen(file_name, "rb")) != NULL);
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* Read in the signature bytes */
|
||||||
|
if (fread(buf, 1, PNG_BYTES_TO_CHECK, *fp) != PNG_BYTES_TO_CHECK)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* Compare the first PNG_BYTES_TO_CHECK bytes of the signature. */
|
||||||
|
return(png_sig_cmp(buf, (png_size_t)0, PNG_BYTES_TO_CHECK));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read a PNG file. You may want to return an error code if the read
|
||||||
|
* fails (depending upon the failure). There are two "prototypes" given
|
||||||
|
* here - one where we are given the filename, and we need to open the
|
||||||
|
* file, and the other where we are given an open file (possibly with
|
||||||
|
* some or all of the magic bytes read - see comments above).
|
||||||
|
*/
|
||||||
|
#ifdef open_file /* prototype 1 */
|
||||||
|
void read_png(char *file_name) /* We need to open the file */
|
||||||
|
{
|
||||||
|
png_structp png_ptr;
|
||||||
|
png_infop info_ptr;
|
||||||
|
unsigned int sig_read = 0;
|
||||||
|
png_uint_32 width, height;
|
||||||
|
int bit_depth, color_type, interlace_type;
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
if ((fp = fopen(file_name, "rb")) == NULL)
|
||||||
|
return;
|
||||||
|
#else no_open_file /* prototype 2 */
|
||||||
|
void read_png(FILE *fp, unsigned int sig_read) /* file is already open */
|
||||||
|
{
|
||||||
|
png_structp png_ptr;
|
||||||
|
png_infop info_ptr;
|
||||||
|
png_uint_32 width, height;
|
||||||
|
int bit_depth, color_type, interlace_type;
|
||||||
|
#endif no_open_file /* only use one prototype! */
|
||||||
|
|
||||||
|
/* Create and initialize the png_struct with the desired error handler
|
||||||
|
* functions. If you want to use the default stderr and longjump method,
|
||||||
|
* you can supply NULL for the last three parameters. We also supply the
|
||||||
|
* the compiler header file version, so that we know if the application
|
||||||
|
* was compiled with a compatible version of the library. REQUIRED
|
||||||
|
*/
|
||||||
|
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,
|
||||||
|
(void *)user_error_ptr, user_error_fn, user_warning_fn);
|
||||||
|
|
||||||
|
if (png_ptr == NULL)
|
||||||
|
{
|
||||||
|
fclose(fp);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Allocate/initialize the memory for image information. REQUIRED. */
|
||||||
|
info_ptr = png_create_info_struct(png_ptr);
|
||||||
|
if (info_ptr == NULL)
|
||||||
|
{
|
||||||
|
fclose(fp);
|
||||||
|
png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set error handling if you are using the setjmp/longjmp method (this is
|
||||||
|
* the normal method of doing things with libpng). REQUIRED unless you
|
||||||
|
* set up your own error handlers in the png_create_read_struct() earlier.
|
||||||
|
*/
|
||||||
|
if (setjmp(png_ptr->jmpbuf))
|
||||||
|
{
|
||||||
|
/* Free all of the memory associated with the png_ptr and info_ptr */
|
||||||
|
png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
|
||||||
|
fclose(fp);
|
||||||
|
/* If we get here, we had a problem reading the file */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* One of the following I/O initialization methods is REQUIRED */
|
||||||
|
#ifdef streams /* PNG file I/O method 1 */
|
||||||
|
/* Set up the input control if you are using standard C streams */
|
||||||
|
png_init_io(png_ptr, fp);
|
||||||
|
|
||||||
|
#else no_streams /* PNG file I/O method 2 */
|
||||||
|
/* If you are using replacement read functions, instead of calling
|
||||||
|
* png_init_io() here you would call:
|
||||||
|
*/
|
||||||
|
png_set_read_fn(png_ptr, (void *)user_io_ptr, user_read_fn);
|
||||||
|
/* where user_io_ptr is a structure you want available to the callbacks */
|
||||||
|
#endif no_streams /* Use only one I/O method! */
|
||||||
|
|
||||||
|
/* If we have already read some of the signature */
|
||||||
|
png_set_sig_bytes(png_ptr, sig_read);
|
||||||
|
|
||||||
|
/* The call to png_read_info() gives us all of the information from the
|
||||||
|
* PNG file before the first IDAT (image data chunk). REQUIRED
|
||||||
|
*/
|
||||||
|
png_read_info(png_ptr, info_ptr);
|
||||||
|
|
||||||
|
png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type,
|
||||||
|
&interlace_type, NULL, NULL);
|
||||||
|
|
||||||
|
/**** Set up the data transformations you want. Note that these are all
|
||||||
|
**** optional. Only call them if you want/need them. Many of the
|
||||||
|
**** transformations only work on specific types of images, and many
|
||||||
|
**** are mutually exclusive.
|
||||||
|
****/
|
||||||
|
|
||||||
|
/* tell libpng to strip 16 bit/color files down to 8 bits/color */
|
||||||
|
png_set_strip_16(png_ptr);
|
||||||
|
|
||||||
|
/* Strip alpha bytes from the input data without combining with th
|
||||||
|
* background (not recommended).
|
||||||
|
*/
|
||||||
|
png_set_strip_alpha(png_ptr);
|
||||||
|
|
||||||
|
/* Extract multiple pixels with bit depths of 1, 2, and 4 from a single
|
||||||
|
* byte into separate bytes (useful for paletted and grayscale images).
|
||||||
|
*/
|
||||||
|
png_set_packing(png_ptr);
|
||||||
|
|
||||||
|
/* Change the order of packed pixels to least significant bit first
|
||||||
|
* (not useful if you are using png_set_packing). */
|
||||||
|
png_set_packswap(png_ptr);
|
||||||
|
|
||||||
|
/* Expand paletted colors into true RGB triplets */
|
||||||
|
if (color_type == PNG_COLOR_TYPE_PALETTE)
|
||||||
|
png_set_expand(png_ptr);
|
||||||
|
|
||||||
|
/* Expand grayscale images to the full 8 bits from 1, 2, or 4 bits/pixel */
|
||||||
|
if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8)
|
||||||
|
png_set_expand(png_ptr);
|
||||||
|
|
||||||
|
/* Expand paletted or RGB images with transparency to full alpha channels
|
||||||
|
* so the data will be available as RGBA quartets.
|
||||||
|
*/
|
||||||
|
if (png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS))
|
||||||
|
png_set_expand(png_ptr);
|
||||||
|
|
||||||
|
/* Set the background color to draw transparent and alpha images over.
|
||||||
|
* It is possible to set the red, green, and blue components directly
|
||||||
|
* for paletted images instead of supplying a palette index. Note that
|
||||||
|
* even if the PNG file supplies a background, you are not required to
|
||||||
|
* use it - you should use the (solid) application background if it has one.
|
||||||
|
*/
|
||||||
|
|
||||||
|
png_color_16 my_background, *image_background;
|
||||||
|
|
||||||
|
if (png_get_bKGD(png_ptr, info_ptr, &image_background))
|
||||||
|
png_set_background(png_ptr, image_background,
|
||||||
|
PNG_BACKGROUND_GAMMA_FILE, 1, 1.0);
|
||||||
|
else
|
||||||
|
png_set_background(png_ptr, &my_background,
|
||||||
|
PNG_BACKGROUND_GAMMA_SCREEN, 0, 1.0);
|
||||||
|
|
||||||
|
/* Some suggestions as to how to get a screen gamma value */
|
||||||
|
|
||||||
|
/* Note that screen gamma is (display_gamma/viewing_gamma) */
|
||||||
|
if (/* We have a user-defined screen gamma value */)
|
||||||
|
{
|
||||||
|
screen_gamma = user-defined screen_gamma;
|
||||||
|
}
|
||||||
|
/* This is one way that applications share the same screen gamma value */
|
||||||
|
else if ((gamma_str = getenv("SCREEN_GAMMA")) != NULL)
|
||||||
|
{
|
||||||
|
screen_gamma = atof(gamma_str);
|
||||||
|
}
|
||||||
|
/* If we don't have another value */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
screen_gamma = 2.2; /* A good guess for a PC monitors in a dimly
|
||||||
|
lit room */
|
||||||
|
screen_gamma = 1.7 or 1.0; /* A good guess for Mac systems */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tell libpng to handle the gamma conversion for you. The second call
|
||||||
|
* is a good guess for PC generated images, but it should be configurable
|
||||||
|
* by the user at run time by the user. It is strongly suggested that
|
||||||
|
* your application support gamma correction.
|
||||||
|
*/
|
||||||
|
|
||||||
|
int intent;
|
||||||
|
|
||||||
|
if (png_get_sRGB(png_ptr, info_ptr, &intent))
|
||||||
|
png_set_sRGB(png_ptr, intent, 0);
|
||||||
|
else
|
||||||
|
if (png_get_gAMA(png_ptr, info_ptr, &image_gamma))
|
||||||
|
png_set_gamma(png_ptr, screen_gamma, image_gamma);
|
||||||
|
else
|
||||||
|
png_set_gamma(png_ptr, screen_gamma, 0.50);
|
||||||
|
|
||||||
|
/* Dither RGB files down to 8 bit palette or reduce palettes
|
||||||
|
* to the number of colors available on your screen.
|
||||||
|
*/
|
||||||
|
if (color_type & PNG_COLOR_MASK_COLOR)
|
||||||
|
{
|
||||||
|
png_uint_32 num_palette;
|
||||||
|
png_colorp palette;
|
||||||
|
|
||||||
|
/* This reduces the image to the application supplied palette */
|
||||||
|
if (/* we have our own palette */)
|
||||||
|
{
|
||||||
|
/* An array of colors to which the image should be dithered */
|
||||||
|
png_color std_color_cube[MAX_SCREEN_COLORS];
|
||||||
|
|
||||||
|
png_set_dither(png_ptr, std_color_cube, MAX_SCREEN_COLORS,
|
||||||
|
MAX_SCREEN_COLORS, NULL, 0);
|
||||||
|
}
|
||||||
|
/* This reduces the image to the palette supplied in the file */
|
||||||
|
else if (png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette))
|
||||||
|
{
|
||||||
|
png_color16p histogram;
|
||||||
|
|
||||||
|
png_get_hIST(png_ptr, info_ptr, &histogram);
|
||||||
|
|
||||||
|
png_set_dither(png_ptr, palette, num_palette,
|
||||||
|
max_screen_colors, histogram, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* invert monocrome files to have 0 as white and 1 as black */
|
||||||
|
png_set_invert_mono(png_ptr);
|
||||||
|
|
||||||
|
/* If you want to shift the pixel values from the range [0,255] or
|
||||||
|
* [0,65535] to the original [0,7] or [0,31], or whatever range the
|
||||||
|
* colors were originally in:
|
||||||
|
*/
|
||||||
|
if (png_get_valid(png_ptr, info_ptr, PNG_INFO_sBIT))
|
||||||
|
{
|
||||||
|
png_color8p sig_bit;
|
||||||
|
|
||||||
|
png_get_sBIT(png_ptr, info_ptr, &sig_bit);
|
||||||
|
png_set_shift(png_ptr, sig_bit);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* flip the RGB pixels to BGR (or RGBA to BGRA) */
|
||||||
|
png_set_bgr(png_ptr);
|
||||||
|
|
||||||
|
/* swap the RGBA or GA data to ARGB or AG (or BGRA to ABGR) */
|
||||||
|
png_set_swap_alpha(png_ptr);
|
||||||
|
|
||||||
|
/* swap bytes of 16 bit files to least significant byte first */
|
||||||
|
png_set_swap(png_ptr);
|
||||||
|
|
||||||
|
/* Add filler (or alpha) byte (before/after each RGB triplet) */
|
||||||
|
png_set_filler(png_ptr, 0xff, PNG_FILLER_AFTER);
|
||||||
|
|
||||||
|
/* Turn on interlace handling. REQUIRED if you are not using
|
||||||
|
* png_read_image(). To see how to handle interlacing passes,
|
||||||
|
* see the png_read_row() method below:
|
||||||
|
*/
|
||||||
|
number_passes = png_set_interlace_handling(png_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).
|
||||||
|
*/
|
||||||
|
png_read_update_info(png_ptr, info_ptr);
|
||||||
|
|
||||||
|
/* Allocate the memory to hold the image using the fields of info_ptr. */
|
||||||
|
|
||||||
|
/* The easiest way to read the image: */
|
||||||
|
png_bytep row_pointers[height];
|
||||||
|
|
||||||
|
for (row = 0; row < height; row++)
|
||||||
|
{
|
||||||
|
row_pointers[row] = malloc(png_get_rowbytes(png_ptr, info_ptr));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Now it's time to read the image. One of these methods is REQUIRED */
|
||||||
|
#ifdef entire /* Read the entire image in one go */
|
||||||
|
png_read_image(png_ptr, row_pointers);
|
||||||
|
|
||||||
|
#else no_entire /* Read the image one or more scanlines at a time */
|
||||||
|
/* The other way to read images - deal with interlacing: */
|
||||||
|
|
||||||
|
for (pass = 0; pass < number_passes; pass++)
|
||||||
|
{
|
||||||
|
#ifdef single /* Read the image a single row at a time */
|
||||||
|
for (y = 0; y < height; y++)
|
||||||
|
{
|
||||||
|
png_bytep row_pointers = row[y];
|
||||||
|
png_read_rows(png_ptr, &row_pointers, NULL, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else no_single /* Read the image several rows at a time */
|
||||||
|
for (y = 0; y < height; y += number_of_rows)
|
||||||
|
{
|
||||||
|
#ifdef sparkle /* Read the image using the "sparkle" effect. */
|
||||||
|
png_read_rows(png_ptr, row_pointers, NULL, number_of_rows);
|
||||||
|
|
||||||
|
#else no_sparkle /* Read the image using the "rectangle" effect */
|
||||||
|
png_read_rows(png_ptr, NULL, row_pointers, number_of_rows);
|
||||||
|
#endif no_sparkle /* use only one of these two methods */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* if you want to display the image after every pass, do
|
||||||
|
so here */
|
||||||
|
#endif no_single /* use only one of these two methods */
|
||||||
|
}
|
||||||
|
#endif no_entire /* use only one of these two methods */
|
||||||
|
|
||||||
|
/* read rest of file, and get additional chunks in info_ptr - REQUIRED */
|
||||||
|
png_read_end(png_ptr, info_ptr);
|
||||||
|
|
||||||
|
/* clean up after the read, and free any memory allocated - REQUIRED */
|
||||||
|
png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL);
|
||||||
|
|
||||||
|
/* close the file */
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
|
/* that's it */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* progressively read a file */
|
||||||
|
|
||||||
|
int
|
||||||
|
initialize_png_reader(png_structp *png_ptr, png_infop *info_ptr)
|
||||||
|
{
|
||||||
|
/* Create and initialize the png_struct with the desired error handler
|
||||||
|
* functions. If you want to use the default stderr and longjump method,
|
||||||
|
* you can supply NULL for the last three parameters. We also check that
|
||||||
|
* the library version is compatible in case we are using dynamically
|
||||||
|
* linked libraries.
|
||||||
|
*/
|
||||||
|
*png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,
|
||||||
|
(void *)user_error_ptr, user_error_fn, user_warning_fn);
|
||||||
|
|
||||||
|
if (*png_ptr == NULL)
|
||||||
|
{
|
||||||
|
*info_ptr = NULL;
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
*info_ptr = png_create_info_struct(png_ptr);
|
||||||
|
|
||||||
|
if (*info_ptr == NULL)
|
||||||
|
{
|
||||||
|
png_destroy_read_struct(png_ptr, info_ptr, (png_infopp)NULL);
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (setjmp((*png_ptr)->jmpbuf))
|
||||||
|
{
|
||||||
|
png_destroy_read_struct(png_ptr, info_ptr, (png_infopp)NULL);
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* this one's new. You will need to provide all three
|
||||||
|
* function callbacks, even if you aren't using them all.
|
||||||
|
* These functions shouldn't be dependent on global or
|
||||||
|
* static variables if you are decoding several images
|
||||||
|
* simultaneously. You should store stream specific data
|
||||||
|
* in a separate struct, given as the second parameter,
|
||||||
|
* and retrieve the pointer from inside the callbacks using
|
||||||
|
* the function png_get_progressive_ptr(png_ptr).
|
||||||
|
*/
|
||||||
|
png_set_progressive_read_fn(*png_ptr, (void *)stream_data,
|
||||||
|
info_callback, row_callback, end_callback);
|
||||||
|
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
process_data(png_structp *png_ptr, png_infop *info_ptr,
|
||||||
|
png_bytep buffer, png_uint_32 length)
|
||||||
|
{
|
||||||
|
if (setjmp((*png_ptr)->jmpbuf))
|
||||||
|
{
|
||||||
|
/* Free the png_ptr and info_ptr memory on error */
|
||||||
|
png_destroy_read_struct(png_ptr, info_ptr, (png_infopp)NULL);
|
||||||
|
return ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This one's new also. Simply give it chunks of data as
|
||||||
|
* they arrive from the data stream (in order, of course).
|
||||||
|
* On Segmented machines, don't give it any more than 64K.
|
||||||
|
* The library seems to run fine with sizes of 4K, although
|
||||||
|
* you can give it much less if necessary (I assume you can
|
||||||
|
* give it chunks of 1 byte, but I haven't tried with less
|
||||||
|
* than 256 bytes yet). When this function returns, you may
|
||||||
|
* want to display any rows that were generated in the row
|
||||||
|
* callback, if you aren't already displaying them there.
|
||||||
|
*/
|
||||||
|
png_process_data(*png_ptr, *info_ptr, buffer, length);
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
info_callback(png_structp png_ptr, png_infop info)
|
||||||
|
{
|
||||||
|
/* do any setup here, including setting any of the transformations
|
||||||
|
* mentioned in the Reading PNG files section. For now, you _must_
|
||||||
|
* call either png_start_read_image() or png_read_update_info()
|
||||||
|
* after all the transformations are set (even if you don't set
|
||||||
|
* any). You may start getting rows before png_process_data()
|
||||||
|
* returns, so this is your last chance to prepare for that.
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
row_callback(png_structp png_ptr, png_bytep new_row,
|
||||||
|
png_uint_32 row_num, int pass)
|
||||||
|
{
|
||||||
|
/* this function is called for every row in the image. If the
|
||||||
|
* image is interlacing, and you turned on the interlace handler,
|
||||||
|
* this function will be called for every row in every pass.
|
||||||
|
* Some of these rows will not be changed from the previous pass.
|
||||||
|
* When the row is not changed, the new_row variable will be NULL.
|
||||||
|
* The rows and passes are called in order, so you don't really
|
||||||
|
* need the row_num and pass, but I'm supplying them because it
|
||||||
|
* may make your life easier.
|
||||||
|
*
|
||||||
|
* For the non-NULL rows of interlaced images, you must call
|
||||||
|
* 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
|
||||||
|
* can just do this for all cases:
|
||||||
|
*/
|
||||||
|
|
||||||
|
png_progressive_combine_row(png_ptr, old_row, new_row);
|
||||||
|
|
||||||
|
/* where old_row is what was displayed for previous rows. Note
|
||||||
|
* that the first pass (pass == 0 really) will completely cover
|
||||||
|
* the old row, so the rows do not have to be initialized. After
|
||||||
|
* the first pass (and only for interlaced images), you will have
|
||||||
|
* to pass the current row, and the function will combine the
|
||||||
|
* old row and the new row.
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
end_callback(png_structp png_ptr, png_infop info)
|
||||||
|
{
|
||||||
|
/* this function is called when the whole image has been read,
|
||||||
|
* including any chunks after the image (up to and including
|
||||||
|
* the IEND). You will usually have the same info chunk as you
|
||||||
|
* had in the header, although some data may have been added
|
||||||
|
* to the comments and time fields.
|
||||||
|
*
|
||||||
|
* Most people won't do much here, perhaps setting a flag that
|
||||||
|
* marks the image as finished.
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/* write a png file */
|
||||||
|
void write_png(char *file_name /* , ... other image information ... */)
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
png_structp png_ptr;
|
||||||
|
png_infop info_ptr;
|
||||||
|
|
||||||
|
/* open the file */
|
||||||
|
fp = fopen(file_name, "wb");
|
||||||
|
if (fp == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* Create and initialize the png_struct with the desired error handler
|
||||||
|
* functions. If you want to use the default stderr and longjump method,
|
||||||
|
* you can supply NULL for the last three parameters. We also check that
|
||||||
|
* the library version is compatible with the one used at compile time,
|
||||||
|
* in case we are using dynamically linked libraries. REQUIRED.
|
||||||
|
*/
|
||||||
|
png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING,
|
||||||
|
(void *)user_error_ptr, user_error_fn, user_warning_fn);
|
||||||
|
|
||||||
|
if (png_ptr == NULL)
|
||||||
|
{
|
||||||
|
fclose(fp);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Allocate/initialize the image information data. REQUIRED */
|
||||||
|
info_ptr = png_create_info_struct(png_ptr);
|
||||||
|
if (info_ptr == NULL)
|
||||||
|
{
|
||||||
|
fclose(fp);
|
||||||
|
png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set error handling. REQUIRED if you aren't supplying your own
|
||||||
|
* error hadnling functions in the png_create_write_struct() call.
|
||||||
|
*/
|
||||||
|
if (setjmp(png_ptr->jmpbuf))
|
||||||
|
{
|
||||||
|
/* If we get here, we had a problem reading the file */
|
||||||
|
fclose(fp);
|
||||||
|
png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* One of the following I/O initialization functions is REQUIRED */
|
||||||
|
#ifdef streams /* I/O initialization method 1 */
|
||||||
|
/* set up the output control if you are using standard C streams */
|
||||||
|
png_init_io(png_ptr, fp);
|
||||||
|
#else no_streams /* I/O initialization method 2 */
|
||||||
|
/* If you are using replacement read functions, instead of calling
|
||||||
|
* png_init_io() here you would call */
|
||||||
|
png_set_write_fn(png_ptr, (void *)user_io_ptr, user_write_fn,
|
||||||
|
user_IO_flush_function);
|
||||||
|
/* where user_io_ptr is a structure you want available to the callbacks */
|
||||||
|
#endif no_streams /* only use one initialization method */
|
||||||
|
|
||||||
|
/* Set the image information here. Width and height are up to 2^31,
|
||||||
|
* bit_depth is one of 1, 2, 4, 8, or 16, but valid values also depend on
|
||||||
|
* the color_type selected. color_type is one of PNG_COLOR_TYPE_GRAY,
|
||||||
|
* PNG_COLOR_TYPE_GRAY_ALPHA, PNG_COLOR_TYPE_PALETTE, PNG_COLOR_TYPE_RGB,
|
||||||
|
* or PNG_COLOR_TYPE_RGB_ALPHA. interlace is either PNG_INTERLACE_NONE or
|
||||||
|
* PNG_INTERLACE_ADAM7, and the compression_type and filter_type MUST
|
||||||
|
* currently be PNG_COMPRESSION_TYPE_BASE and PNG_FILTER_TYPE_BASE. REQUIRED
|
||||||
|
*/
|
||||||
|
png_set_IHDR(png_ptr, info_ptr, width, height, bit_depth, PNG_COLOR_TYPE_???,
|
||||||
|
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, 256 * sizeof (png_color));
|
||||||
|
/* ... set palette colors ... */
|
||||||
|
png_set_PLTE(png_ptr, info_ptr, palette, 256);
|
||||||
|
|
||||||
|
/* optional significant bit chunk */
|
||||||
|
/* if we are dealing with a grayscale image then */
|
||||||
|
sig_bit.gray = true_bit_depth;
|
||||||
|
/* otherwise, if we are dealing with a color image then */
|
||||||
|
sig_bit.red = true_red_bit_depth;
|
||||||
|
sig_bit.green = true_green_bit_depth;
|
||||||
|
sig_bit.blue = true_blue_bit_depth;
|
||||||
|
/* if the image has an alpha channel then */
|
||||||
|
sig_bit.alpha = true_alpha_bit_depth;
|
||||||
|
png_set_sBIT(png_ptr, info_ptr, sig_bit);
|
||||||
|
|
||||||
|
|
||||||
|
/* Optional gamma chunk is strongly suggested if you have any guess
|
||||||
|
* as to the correct gamma of the image.
|
||||||
|
*/
|
||||||
|
png_set_gAMA(png_ptr, info_ptr, gamma);
|
||||||
|
|
||||||
|
/* Optionally write comments into the image */
|
||||||
|
text_ptr[0].key = "Title";
|
||||||
|
text_ptr[0].text = "Mona Lisa";
|
||||||
|
text_ptr[0].compression = PNG_TEXT_COMPRESSION_NONE;
|
||||||
|
text_ptr[1].key = "Author";
|
||||||
|
text_ptr[1].text = "Leonardo DaVinci";
|
||||||
|
text_ptr[1].compression = PNG_TEXT_COMPRESSION_NONE;
|
||||||
|
text_ptr[2].key = "Description";
|
||||||
|
text_ptr[2].text = "<long text>";
|
||||||
|
text_ptr[2].compression = PNG_TEXT_COMPRESSION_zTXt;
|
||||||
|
png_set_text(png_ptr, info_ptr, text_ptr, 2);
|
||||||
|
|
||||||
|
/* other optional chunks like cHRM, bKGD, tRNS, tIME, oFFs, pHYs, */
|
||||||
|
/* note that if sRGB is present the cHRM chunk must be ignored
|
||||||
|
* on read and must be written in accordance with the sRGB profile */
|
||||||
|
|
||||||
|
/* Write the file header information. REQUIRED */
|
||||||
|
png_write_info(png_ptr, info_ptr);
|
||||||
|
|
||||||
|
/* Once we write out the header, the compression type on the text
|
||||||
|
* chunks gets changed to PNG_TEXT_COMPRESSION_NONE_WR or
|
||||||
|
* PNG_TEXT_COMPRESSION_zTXt_WR, so it doesn't get written out again
|
||||||
|
* at the end.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* set up the transformations you want. Note that these are
|
||||||
|
* all optional. Only call them if you want them.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* invert monocrome pixels */
|
||||||
|
png_set_invert_mono(png_ptr);
|
||||||
|
|
||||||
|
/* Shift the pixels up to a legal bit depth and fill in
|
||||||
|
* as appropriate to correctly scale the image.
|
||||||
|
*/
|
||||||
|
png_set_shift(png_ptr, &sig_bit);
|
||||||
|
|
||||||
|
/* pack pixels into bytes */
|
||||||
|
png_set_packing(png_ptr);
|
||||||
|
|
||||||
|
/* swap location of alpha bytes from ARGB to RGBA */
|
||||||
|
png_set_swap_alpha(png_ptr);
|
||||||
|
|
||||||
|
/* Get rid of filler (OR ALPHA) bytes, pack XRGB/RGBX/ARGB/RGBA into
|
||||||
|
* RGB (4 channels -> 3 channels). The second parameter is not used.
|
||||||
|
*/
|
||||||
|
png_set_filler(png_ptr, 0, PNG_FILLER_BEFORE);
|
||||||
|
|
||||||
|
/* flip BGR pixels to RGB */
|
||||||
|
png_set_bgr(png_ptr);
|
||||||
|
|
||||||
|
/* swap bytes of 16-bit files to most significant byte first */
|
||||||
|
png_set_swap(png_ptr);
|
||||||
|
|
||||||
|
/* swap bits of 1, 2, 4 bit packed pixel formats */
|
||||||
|
png_set_packswap(png_ptr);
|
||||||
|
|
||||||
|
/* turn on interlace handling if you are not using png_write_image() */
|
||||||
|
if (interlacing)
|
||||||
|
number_passes = png_set_interlace_handling(png_ptr);
|
||||||
|
else
|
||||||
|
number_passes = 1;
|
||||||
|
|
||||||
|
/* The easiest way to write the image (you may have a different memory
|
||||||
|
* layout, however, so choose what fits your needs best). You need to
|
||||||
|
* use the first method if you aren't handling interlacing yourself.
|
||||||
|
*/
|
||||||
|
png_byte row_pointers[height][width];
|
||||||
|
|
||||||
|
/* One of the following output methods is REQUIRED */
|
||||||
|
#ifdef entire /* write out the entire image data in one call */
|
||||||
|
png_write_image(png_ptr, row_pointers);
|
||||||
|
|
||||||
|
/* the other way to write the image - deal with interlacing */
|
||||||
|
|
||||||
|
#else no_entire /* write out the image data by one or more scanlines */
|
||||||
|
/* The number of passes is either 1 for non-interlaced images,
|
||||||
|
* or 7 for interlaced images.
|
||||||
|
*/
|
||||||
|
for (pass = 0; pass < number_passes; pass++)
|
||||||
|
{
|
||||||
|
/* Write a few rows at a time. */
|
||||||
|
png_write_rows(png_ptr, row_pointers, number_of_rows);
|
||||||
|
|
||||||
|
/* If you are only writing one row at a time, this works */
|
||||||
|
for (y = 0; y < height; y++)
|
||||||
|
{
|
||||||
|
png_bytep row_pointers = row[y];
|
||||||
|
png_write_rows(png_ptr, &row_pointers, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif no_entire /* use only one output method */
|
||||||
|
|
||||||
|
/* You can write optional chunks like tEXt, zTXt, and tIME at the end
|
||||||
|
* as well.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* It is REQUIRED to call this to finish writing the rest of the file */
|
||||||
|
png_write_end(png_ptr, info_ptr);
|
||||||
|
|
||||||
|
/* if you malloced the palette, free it here */
|
||||||
|
free(info_ptr->palette);
|
||||||
|
|
||||||
|
/* if you allocated any text comments, free them here */
|
||||||
|
|
||||||
|
/* clean up after the write, and free any memory allocated */
|
||||||
|
png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
|
||||||
|
|
||||||
|
/* close the file */
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
|
/* that's it */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
2408
thirdparty/libpng/libpng.3
vendored
Normal file
2408
thirdparty/libpng/libpng.3
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1889
thirdparty/libpng/libpng.txt
vendored
Normal file
1889
thirdparty/libpng/libpng.txt
vendored
Normal file
File diff suppressed because it is too large
Load Diff
342
thirdparty/libpng/libpngpf.3
vendored
Normal file
342
thirdparty/libpng/libpngpf.3
vendored
Normal file
@ -0,0 +1,342 @@
|
|||||||
|
.TH LIBPNGPF 3 "March 9, 1998"
|
||||||
|
.SH NAME
|
||||||
|
libpng \- Portable Network Graphics (PNG) Reference Library
|
||||||
|
(private functions)
|
||||||
|
.SH SYNOPSIS
|
||||||
|
#include <png.h>
|
||||||
|
|
||||||
|
void png_build_gamma_table (png_structp png_ptr);
|
||||||
|
|
||||||
|
void png_build_grayscale_palette (int bit_depth, png_colorp
|
||||||
|
palette);
|
||||||
|
|
||||||
|
void png_calculate_crc (png_structp png_ptr, png_bytep ptr,
|
||||||
|
png_size_t length);
|
||||||
|
void png_check_chunk_name (png_structp png_ptr, png_bytep
|
||||||
|
chunk_name);
|
||||||
|
|
||||||
|
png_size_t png_check_keyword (png_structp png_ptr, png_charp
|
||||||
|
key, png_charpp new_key);
|
||||||
|
|
||||||
|
void png_combine_row (png_structp png_ptr, png_bytep row, int
|
||||||
|
mask);
|
||||||
|
|
||||||
|
void png_correct_palette (png_structp png_ptr, png_colorp
|
||||||
|
palette, int num_palette);
|
||||||
|
|
||||||
|
int png_crc_error (png_structp png_ptr);
|
||||||
|
|
||||||
|
int png_crc_finish (png_structp png_ptr, png_uint_32 skip);
|
||||||
|
|
||||||
|
void png_crc_read (png_structp png_ptr, png_bytep buf,
|
||||||
|
png_size_t length);
|
||||||
|
|
||||||
|
png_voidp png_create_struct (int type);
|
||||||
|
|
||||||
|
void png_destroy_struct (png_voidp struct_ptr);
|
||||||
|
|
||||||
|
void png_do_background (png_row_infop row_info, png_bytep row,
|
||||||
|
png_color_16p trans_values, png_color_16p background,
|
||||||
|
png_color_16p background_1, png_bytep gamma_table, png_bytep
|
||||||
|
gamma_from_1, png_bytep gamma_to_1, png_uint_16pp gamma_16,
|
||||||
|
png_uint_16pp gamma_16_from_1, png_uint_16pp gamma_16_to_1, int
|
||||||
|
gamma_shift);
|
||||||
|
|
||||||
|
void png_do_bgr (png_row_infop row_info, png_bytep row);
|
||||||
|
|
||||||
|
void png_do_chop (png_row_infop row_info, png_bytep row);
|
||||||
|
|
||||||
|
void png_do_dither (png_row_infop row_info, png_bytep row,
|
||||||
|
png_bytep palette_lookup, png_bytep dither_lookup);
|
||||||
|
|
||||||
|
void png_do_expand (png_row_infop row_info, png_bytep row,
|
||||||
|
png_color_16p trans_value);
|
||||||
|
|
||||||
|
void png_do_expand_palette (png_row_infop row_info, png_bytep
|
||||||
|
row, png_colorp palette, png_bytep trans, int num_trans);
|
||||||
|
|
||||||
|
void png_do_gamma (png_row_infop row_info, png_bytep row,
|
||||||
|
png_bytep gamma_table, png_uint_16pp gamma_16_table, int
|
||||||
|
gamma_shift);
|
||||||
|
|
||||||
|
void png_do_gray_to_rgb (png_row_infop row_info, png_bytep
|
||||||
|
row);
|
||||||
|
|
||||||
|
void png_do_invert (png_row_infop row_info, png_bytep row);
|
||||||
|
|
||||||
|
void png_do_pack (png_row_infop row_info, png_bytep row,
|
||||||
|
png_uint_32 bit_depth);
|
||||||
|
|
||||||
|
void png_do_packswap (png_row_infop row_info, png_bytep row);
|
||||||
|
|
||||||
|
void png_do_read_filler (png_row_infop row_info, png_bytep row,
|
||||||
|
png_uint_32 filler, png_uint_32 flags);
|
||||||
|
|
||||||
|
void png_do_read_interlace (png_row_infop row_info, png_bytep
|
||||||
|
row, int pass, png_uint_32 transformations);
|
||||||
|
|
||||||
|
void png_do_read_invert_alpha (png_row_infop row_info,
|
||||||
|
png_bytep row);
|
||||||
|
|
||||||
|
void png_do_read_swap_alpha (png_row_infop row_info, png_bytep
|
||||||
|
row);
|
||||||
|
|
||||||
|
void png_do_read_transformations (png_structp png_ptr);
|
||||||
|
|
||||||
|
void png_do_rgb_to_gray (png_row_infop row_info, png_bytep
|
||||||
|
row);
|
||||||
|
|
||||||
|
void png_do_shift (png_row_infop row_info, png_bytep row,
|
||||||
|
png_color_8p bit_depth);
|
||||||
|
|
||||||
|
void png_do_strip_filler (png_row_infop row_info, png_bytep
|
||||||
|
row, png_uint_32 flags);
|
||||||
|
|
||||||
|
void png_do_swap (png_row_infop row_info, png_bytep row);
|
||||||
|
|
||||||
|
void png_do_unpack (png_row_infop row_info, png_bytep row);
|
||||||
|
|
||||||
|
void png_do_unshift (png_row_infop row_info, png_bytep row,
|
||||||
|
png_color_8p sig_bits);
|
||||||
|
|
||||||
|
void png_do_write_interlace (png_row_infop row_info, png_bytep
|
||||||
|
row, int pass);
|
||||||
|
|
||||||
|
void png_do_write_invert_alpha (png_row_infop row_info,
|
||||||
|
png_bytep row);
|
||||||
|
|
||||||
|
void png_do_write_swap_alpha (png_row_infop row_info, png_bytep
|
||||||
|
row);
|
||||||
|
|
||||||
|
void png_do_write_transformations (png_structp png_ptr);
|
||||||
|
|
||||||
|
void *png_far_to_near (png_structp png_ptr,png_voidp ptr,
|
||||||
|
int check);
|
||||||
|
|
||||||
|
void png_flush (png_structp png_ptr);
|
||||||
|
|
||||||
|
png_int_32 png_get_int_32 (png_bytep buf);
|
||||||
|
|
||||||
|
png_uint_16 png_get_uint_16 (png_bytep buf);
|
||||||
|
|
||||||
|
png_uint_32 png_get_uint_32 (png_bytep buf);
|
||||||
|
|
||||||
|
void png_handle_bKGD (png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_uint_32 length);
|
||||||
|
|
||||||
|
void png_handle_cHRM (png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_uint_32 length);
|
||||||
|
|
||||||
|
void png_handle_gAMA (png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_uint_32 length);
|
||||||
|
|
||||||
|
void png_handle_hIST (png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_uint_32 length);
|
||||||
|
|
||||||
|
void png_handle_IEND (png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_uint_32 length);
|
||||||
|
|
||||||
|
void png_handle_IHDR (png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_uint_32 length);
|
||||||
|
|
||||||
|
void png_handle_oFFs (png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_uint_32 length);
|
||||||
|
|
||||||
|
void png_handle_pCAL (png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_uint_32 length);
|
||||||
|
|
||||||
|
void png_handle_pHYs (png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_uint_32 length);
|
||||||
|
|
||||||
|
void png_handle_PLTE (png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_uint_32 length);
|
||||||
|
|
||||||
|
void png_handle_sBIT (png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_uint_32 length);
|
||||||
|
|
||||||
|
void png_handle_sRGB (png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_uint_32 length);
|
||||||
|
|
||||||
|
void png_handle_tEXt (png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_uint_32 length);
|
||||||
|
|
||||||
|
void png_handle_tIME (png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_uint_32 length);
|
||||||
|
|
||||||
|
void png_handle_tRNS (png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_uint_32 length);
|
||||||
|
|
||||||
|
void png_handle_unknown (png_structp png_ptr, png_infop
|
||||||
|
info_ptr, png_uint_32 length);
|
||||||
|
|
||||||
|
void png_handle_zTXt (png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_uint_32 length);
|
||||||
|
|
||||||
|
void png_info_destroy (png_structp png_ptr, png_infop
|
||||||
|
info_ptr);
|
||||||
|
|
||||||
|
void png_init_read_transformations (png_structp png_ptr);
|
||||||
|
|
||||||
|
void png_process_IDAT_data (png_structp png_ptr, png_bytep
|
||||||
|
buffer, png_size_t buffer_length);
|
||||||
|
|
||||||
|
void png_process_some_data (png_structp png_ptr, png_infop
|
||||||
|
info_ptr);
|
||||||
|
|
||||||
|
void png_push_check_crc (png_structp png_ptr);
|
||||||
|
|
||||||
|
void png_push_crc_finish (png_structp png_ptr);
|
||||||
|
|
||||||
|
void png_push_crc_skip (png_structp png_ptr, png_uint_32
|
||||||
|
length);
|
||||||
|
|
||||||
|
void png_push_fill_buffer (png_structp png_ptr, png_bytep
|
||||||
|
buffer, png_size_t length);
|
||||||
|
|
||||||
|
void png_push_handle_tEXt (png_structp png_ptr, png_infop
|
||||||
|
info_ptr, png_uint_32 length);
|
||||||
|
|
||||||
|
void png_push_handle_unknown (png_structp png_ptr, png_infop
|
||||||
|
info_ptr, png_uint_32 length);
|
||||||
|
|
||||||
|
void png_push_handle_zTXt (png_structp png_ptr, png_infop
|
||||||
|
info_ptr, png_uint_32 length);
|
||||||
|
|
||||||
|
void png_push_have_end (png_structp png_ptr, png_infop
|
||||||
|
info_ptr);
|
||||||
|
|
||||||
|
void png_push_have_info (png_structp png_ptr, png_infop
|
||||||
|
info_ptr);
|
||||||
|
|
||||||
|
void png_push_have_row (png_structp png_ptr, png_bytep row);
|
||||||
|
|
||||||
|
void png_push_process_row (png_structp png_ptr);
|
||||||
|
|
||||||
|
void png_push_read_chunk (png_structp png_ptr, png_infop
|
||||||
|
info_ptr);
|
||||||
|
|
||||||
|
void png_push_read_end (png_structp png_ptr, png_infop
|
||||||
|
info_ptr);
|
||||||
|
|
||||||
|
void png_push_read_IDAT (png_structp png_ptr);
|
||||||
|
|
||||||
|
void png_push_read_sig (png_structp png_ptr, png_infop
|
||||||
|
info_ptr);
|
||||||
|
|
||||||
|
void png_push_read_tEXt (png_structp png_ptr, png_infop
|
||||||
|
info_ptr);
|
||||||
|
|
||||||
|
void png_push_read_zTXt (png_structp png_ptr, png_infop
|
||||||
|
info_ptr);
|
||||||
|
|
||||||
|
void png_push_restore_buffer (png_structp png_ptr, png_bytep
|
||||||
|
buffer, png_size_t buffer_length);
|
||||||
|
|
||||||
|
void png_push_save_buffer (png_structp png_ptr);
|
||||||
|
|
||||||
|
void png_read_data (png_structp png_ptr, png_bytep data,
|
||||||
|
png_size_t length);
|
||||||
|
|
||||||
|
void png_read_filter_row (png_structp png_ptr, png_row_infop
|
||||||
|
row_info, png_bytep row, png_bytep prev_row, int filter);
|
||||||
|
|
||||||
|
void png_read_finish_row (png_structp png_ptr);
|
||||||
|
|
||||||
|
void png_read_init (png_structp png_ptr);
|
||||||
|
|
||||||
|
void png_read_push_finish_row (png_structp png_ptr);
|
||||||
|
|
||||||
|
void png_read_start_row (png_structp png_ptr);
|
||||||
|
|
||||||
|
void png_read_transform_info (png_structp png_ptr, png_infop
|
||||||
|
info_ptr);
|
||||||
|
|
||||||
|
void png_reset_crc (png_structp png_ptr);
|
||||||
|
|
||||||
|
void png_save_int_32 (png_bytep buf, png_int_32 i);
|
||||||
|
|
||||||
|
void png_save_uint_16 (png_bytep buf, unsigned int i);
|
||||||
|
|
||||||
|
void png_save_uint_32 (png_bytep buf, png_uint_32 i);
|
||||||
|
|
||||||
|
void png_write_bKGD (png_structp png_ptr, png_color_16p values,
|
||||||
|
int color_type);
|
||||||
|
|
||||||
|
void png_write_cHRM (png_structp png_ptr, double white_x,
|
||||||
|
double white_y, double red_x, double red_y, double green_x,
|
||||||
|
double green_y, double blue_x, double blue_y);
|
||||||
|
|
||||||
|
void png_write_data (png_structp png_ptr, png_bytep data,
|
||||||
|
png_size_t length);
|
||||||
|
void png_write_filtered_row (png_structp png_ptr, png_bytep
|
||||||
|
filtered_row);
|
||||||
|
|
||||||
|
void png_write_find_filter (png_structp png_ptr, png_row_infop
|
||||||
|
row_info);
|
||||||
|
|
||||||
|
void png_write_finish_row (png_structp png_ptr);
|
||||||
|
|
||||||
|
void png_write_gAMA (png_structp png_ptr, double file_gamma);
|
||||||
|
|
||||||
|
void png_write_hIST (png_structp png_ptr, png_uint_16p hist,
|
||||||
|
int num_hist);
|
||||||
|
|
||||||
|
void png_write_init (png_structp png_ptr);
|
||||||
|
|
||||||
|
void png_write_IDAT (png_structp png_ptr, png_bytep data,
|
||||||
|
png_size_t length);
|
||||||
|
|
||||||
|
void png_write_IEND (png_structp png_ptr);
|
||||||
|
|
||||||
|
void png_write_IHDR (png_structp png_ptr, png_uint_32 width,
|
||||||
|
png_uint_32 height, int bit_depth, int color_type, int
|
||||||
|
compression_type, int filter_type, int interlace_type);
|
||||||
|
|
||||||
|
void png_write_oFFs (png_structp png_ptr, png_uint_32 x_offset,
|
||||||
|
png_uint_32 y_offset, int unit_type);
|
||||||
|
|
||||||
|
void png_write_pCAL (png_structp png_ptr, png_charp purpose,
|
||||||
|
png_int_32 X0, png_int_32 X1, int type, int nparams, png_charp
|
||||||
|
units, png_charpp params);
|
||||||
|
|
||||||
|
void png_write_pHYs (png_structp png_ptr, png_uint_32
|
||||||
|
x_pixels_per_unit, png_uint_32 y_pixels_per_unit, int
|
||||||
|
unit_type);
|
||||||
|
|
||||||
|
void png_write_PLTE (png_structp png_ptr, png_colorp palette,
|
||||||
|
png_uint_32 num_pal);
|
||||||
|
|
||||||
|
void png_write_sBIT (png_structp png_ptr, png_color_8p sbit,
|
||||||
|
int color_type);
|
||||||
|
|
||||||
|
void png_write_sig (png_structp png_ptr);
|
||||||
|
|
||||||
|
void png_write_sRGB (png_structp png_ptr, int intent);
|
||||||
|
|
||||||
|
void png_write_start_row (png_structp png_ptr);
|
||||||
|
|
||||||
|
void png_write_tEXt (png_structp png_ptr, png_charp key,
|
||||||
|
png_charp text, png_size_t text_len);
|
||||||
|
|
||||||
|
void png_write_tIME (png_structp png_ptr, png_timep mod_time);
|
||||||
|
|
||||||
|
void png_write_tRNS (png_structp png_ptr, png_bytep trans,
|
||||||
|
png_color_16p values, int number, int color_type);
|
||||||
|
|
||||||
|
void png_write_zTXt (png_structp png_ptr, png_charp key,
|
||||||
|
png_charp text, png_size_t text_len, int compression);
|
||||||
|
|
||||||
|
voidpf png_zalloc (voidpf png_ptr, uInt items, uInt size);
|
||||||
|
|
||||||
|
void png_zfree (voidpf png_ptr, voidpf ptr);
|
||||||
|
|
||||||
|
.SH DESCRIPTION
|
||||||
|
The functions listed above are used privately by libpng
|
||||||
|
and are not recommended for use by applications. They
|
||||||
|
are listed alphabetically here as an aid to libpng maintainers.
|
||||||
|
See png.h for more information on these functions.
|
||||||
|
|
||||||
|
.SH SEE ALSO
|
||||||
|
libpng(3), png(5)
|
||||||
|
.SH AUTHOR
|
||||||
|
Glenn Randers-Pehrson
|
68
thirdparty/libpng/makefile
vendored
Normal file
68
thirdparty/libpng/makefile
vendored
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
# makefile for libpng
|
||||||
|
# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
# For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
|
||||||
|
# Where the zlib library and include files are located
|
||||||
|
#ZLIBLIB=/usr/local/lib
|
||||||
|
#ZLIBINC=/usr/local/include
|
||||||
|
ZLIBLIB=../zlib
|
||||||
|
ZLIBINC=../zlib
|
||||||
|
|
||||||
|
CC=cc
|
||||||
|
CFLAGS=-I$(ZLIBINC) -O # -g -DPNG_DEBUG=1
|
||||||
|
LDFLAGS=-L. -L$(ZLIBLIB) -lpng -lz -lm
|
||||||
|
|
||||||
|
#RANLIB=echo
|
||||||
|
RANLIB=ranlib
|
||||||
|
|
||||||
|
# where make install puts libpng.a and png.h
|
||||||
|
prefix=/usr/local
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
all: libpng.a pngtest
|
||||||
|
|
||||||
|
libpng.a: $(OBJS)
|
||||||
|
ar rc $@ $(OBJS)
|
||||||
|
$(RANLIB) $@
|
||||||
|
|
||||||
|
pngtest: pngtest.o libpng.a
|
||||||
|
$(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
|
||||||
|
|
||||||
|
test: pngtest
|
||||||
|
./pngtest
|
||||||
|
|
||||||
|
install: libpng.a
|
||||||
|
-@mkdir $(prefix)/include
|
||||||
|
-@mkdir $(prefix)/lib
|
||||||
|
cp png.h $(prefix)/include
|
||||||
|
cp pngconf.h $(prefix)/include
|
||||||
|
chmod 644 $(prefix)/include/png.h
|
||||||
|
chmod 644 $(prefix)/include/pngconf.h
|
||||||
|
cp libpng.a $(prefix)/lib
|
||||||
|
chmod 644 $(prefix)/lib/libpng.a
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o libpng.a pngtest pngout.png
|
||||||
|
|
||||||
|
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||||
|
|
||||||
|
png.o: png.h pngconf.h
|
||||||
|
pngerror.o: png.h pngconf.h
|
||||||
|
pngrio.o: png.h pngconf.h
|
||||||
|
pngwio.o: png.h pngconf.h
|
||||||
|
pngmem.o: png.h pngconf.h
|
||||||
|
pngset.o: png.h pngconf.h
|
||||||
|
pngget.o: png.h pngconf.h
|
||||||
|
pngread.o: png.h pngconf.h
|
||||||
|
pngrtran.o: png.h pngconf.h
|
||||||
|
pngrutil.o: png.h pngconf.h
|
||||||
|
pngtest.o: png.h pngconf.h
|
||||||
|
pngtrans.o: png.h pngconf.h
|
||||||
|
pngwrite.o: png.h pngconf.h
|
||||||
|
pngwtran.o: png.h pngconf.h
|
||||||
|
pngwutil.o: png.h pngconf.h
|
||||||
|
pngpread.o: png.h pngconf.h
|
||||||
|
|
44
thirdparty/libpng/png.5
vendored
Normal file
44
thirdparty/libpng/png.5
vendored
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
.TH PNG 5 "March 9, 1998"
|
||||||
|
.SH NAME
|
||||||
|
png \- Portable Network Graphics (PNG) format
|
||||||
|
.SH DESCRIPTION
|
||||||
|
PNG (Portable Network Graphics) is an extensible file format for the
|
||||||
|
lossless, portable, well-compressed storage of raster images. PNG provides
|
||||||
|
a patent-free replacement for GIF and can also replace many
|
||||||
|
common uses of TIFF. Indexed-color, grayscale, and truecolor images are
|
||||||
|
supported, plus an optional alpha channel. Sample depths range from
|
||||||
|
1 to 16 bits.
|
||||||
|
.br
|
||||||
|
|
||||||
|
PNG is designed to work well in online viewing applications, such as the
|
||||||
|
World Wide Web, so it is fully streamable with a progressive display
|
||||||
|
option. PNG is robust, providing both full file integrity checking and
|
||||||
|
fast, simple detection of common transmission errors. Also, PNG can store
|
||||||
|
gamma and chromaticity data for improved color matching on heterogeneous
|
||||||
|
platforms.
|
||||||
|
|
||||||
|
.SH "SEE ALSO"
|
||||||
|
.IR libpng(3), zlib(3), deflate(5), and zlib(5)
|
||||||
|
.LP
|
||||||
|
PNG specification:
|
||||||
|
RFC 2083
|
||||||
|
.IP
|
||||||
|
.br
|
||||||
|
ftp://ds.internic.net/rfc/rfc2083.txt
|
||||||
|
.br
|
||||||
|
or (as a W3C Recommendation) at
|
||||||
|
.br
|
||||||
|
http://www.w3.org/TR/REC-png.html
|
||||||
|
.SH AUTHORS
|
||||||
|
This man page: Glenn Randers-Pehrson
|
||||||
|
.LP
|
||||||
|
Portable Network Graphics (PNG) Specification Version 1.0 (October 1, 1996):
|
||||||
|
Thomas Boutell and others (png-list@dworkin.wustl.edu).
|
||||||
|
.LP
|
||||||
|
|
||||||
|
.SH COPYRIGHT NOTICE
|
||||||
|
The PNG specification is copyright (c) 1996 Massachussets Institute of
|
||||||
|
Technology. See the specification for conditions of use and distribution.
|
||||||
|
.LP
|
||||||
|
.\" end of man page
|
||||||
|
|
304
thirdparty/libpng/png.c
vendored
Normal file
304
thirdparty/libpng/png.c
vendored
Normal file
@ -0,0 +1,304 @@
|
|||||||
|
|
||||||
|
/* png.c - location for general purpose libpng functions
|
||||||
|
*
|
||||||
|
* libpng 1.0.1
|
||||||
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
|
* March 9, 1998
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define PNG_INTERNAL
|
||||||
|
#define PNG_NO_EXTERN
|
||||||
|
#include "png.h"
|
||||||
|
|
||||||
|
/* Version information for C files. This had better match the version
|
||||||
|
* string defined in png.h.
|
||||||
|
*/
|
||||||
|
char png_libpng_ver[6] = "1.0.1";
|
||||||
|
|
||||||
|
/* Place to hold the signature string for a PNG file. */
|
||||||
|
png_byte FARDATA png_sig[8] = {137, 80, 78, 71, 13, 10, 26, 10};
|
||||||
|
|
||||||
|
/* Constant strings for known chunk types. If you need to add a chunk,
|
||||||
|
* add a string holding the name here. If you want to make the code
|
||||||
|
* portable to EBCDIC machines, use ASCII numbers, not characters.
|
||||||
|
*/
|
||||||
|
png_byte FARDATA png_IHDR[5] = { 73, 72, 68, 82, '\0'};
|
||||||
|
png_byte FARDATA png_IDAT[5] = { 73, 68, 65, 84, '\0'};
|
||||||
|
png_byte FARDATA png_IEND[5] = { 73, 69, 78, 68, '\0'};
|
||||||
|
png_byte FARDATA png_PLTE[5] = { 80, 76, 84, 69, '\0'};
|
||||||
|
png_byte FARDATA png_bKGD[5] = { 98, 75, 71, 68, '\0'};
|
||||||
|
png_byte FARDATA png_cHRM[5] = { 99, 72, 82, 77, '\0'};
|
||||||
|
png_byte FARDATA png_gAMA[5] = {103, 65, 77, 65, '\0'};
|
||||||
|
png_byte FARDATA png_hIST[5] = {104, 73, 83, 84, '\0'};
|
||||||
|
png_byte FARDATA png_oFFs[5] = {111, 70, 70, 115, '\0'};
|
||||||
|
png_byte FARDATA png_pCAL[5] = {112, 67, 65, 76, '\0'};
|
||||||
|
png_byte FARDATA png_pHYs[5] = {112, 72, 89, 115, '\0'};
|
||||||
|
png_byte FARDATA png_sBIT[5] = {115, 66, 73, 84, '\0'};
|
||||||
|
png_byte FARDATA png_sRGB[5] = {115, 82, 71, 66, '\0'};
|
||||||
|
png_byte FARDATA png_tEXt[5] = {116, 69, 88, 116, '\0'};
|
||||||
|
png_byte FARDATA png_tIME[5] = {116, 73, 77, 69, '\0'};
|
||||||
|
png_byte FARDATA png_tRNS[5] = {116, 82, 78, 83, '\0'};
|
||||||
|
png_byte FARDATA png_zTXt[5] = {122, 84, 88, 116, '\0'};
|
||||||
|
|
||||||
|
/* arrays to facilitate easy interlacing - use pass (0 - 6) as index */
|
||||||
|
|
||||||
|
/* start of interlace block */
|
||||||
|
int FARDATA png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
|
||||||
|
|
||||||
|
/* offset to next interlace block */
|
||||||
|
int FARDATA png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
|
||||||
|
|
||||||
|
/* start of interlace block in the y direction */
|
||||||
|
int FARDATA png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1};
|
||||||
|
|
||||||
|
/* offset to next interlace block in the y direction */
|
||||||
|
int FARDATA png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2};
|
||||||
|
|
||||||
|
/* Width of interlace block. This is not currently used - if you need
|
||||||
|
* it, uncomment it here and in png.h
|
||||||
|
int FARDATA png_pass_width[] = {8, 4, 4, 2, 2, 1, 1};
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Height of interlace block. This is not currently used - if you need
|
||||||
|
* it, uncomment it here and in png.h
|
||||||
|
int FARDATA png_pass_height[] = {8, 8, 4, 4, 2, 2, 1};
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Mask to determine which pixels are valid in a pass */
|
||||||
|
int FARDATA png_pass_mask[] = {0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, 0xff};
|
||||||
|
|
||||||
|
/* Mask to determine which pixels to overwrite while displaying */
|
||||||
|
int FARDATA png_pass_dsp_mask[] = {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55, 0xff};
|
||||||
|
|
||||||
|
|
||||||
|
/* Tells libpng that we have already handled the first "num_bytes" bytes
|
||||||
|
* of the PNG file signature. If the PNG data is embedded into another
|
||||||
|
* stream we can set num_bytes = 8 so that libpng will not attempt to read
|
||||||
|
* or write any of the magic bytes before it starts on the IHDR.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
png_set_sig_bytes(png_structp png_ptr, int num_bytes)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_set_sig_bytes\n");
|
||||||
|
if (num_bytes > 8)
|
||||||
|
png_error(png_ptr, "Too many bytes for PNG signature.");
|
||||||
|
|
||||||
|
png_ptr->sig_bytes = num_bytes < 0 ? 0 : num_bytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Checks whether the supplied bytes match the PNG signature. We allow
|
||||||
|
* checking less than the full 8-byte signature so that those apps that
|
||||||
|
* already read the first few bytes of a file to determine the file type
|
||||||
|
* can simply check the remaining bytes for extra assurance. Returns
|
||||||
|
* an integer less than, equal to, or greater than zero if sig is found,
|
||||||
|
* respectively, to be less than, to match, or be greater than the correct
|
||||||
|
* PNG signature (this is the same behaviour as strcmp, memcmp, etc).
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
png_sig_cmp(png_bytep sig, png_size_t start, png_size_t num_to_check)
|
||||||
|
{
|
||||||
|
if (num_to_check > 8)
|
||||||
|
num_to_check = 8;
|
||||||
|
else if (num_to_check < 1)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
if (start > 7)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
if (start + num_to_check > 8)
|
||||||
|
num_to_check = 8 - start;
|
||||||
|
|
||||||
|
return ((int)(png_memcmp(&sig[start], &png_sig[start], num_to_check)));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (Obsolete) function to check signature bytes. It does not allow one
|
||||||
|
* to check a partial signature. This function will be removed in the
|
||||||
|
* future - use png_sig_cmp().
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
png_check_sig(png_bytep sig, int num)
|
||||||
|
{
|
||||||
|
return ((int)!png_sig_cmp(sig, (png_size_t)0, (png_size_t)num));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Function to allocate memory for zlib. */
|
||||||
|
voidpf
|
||||||
|
png_zalloc(voidpf png_ptr, uInt items, uInt size)
|
||||||
|
{
|
||||||
|
png_voidp ptr;
|
||||||
|
png_uint_32 num_bytes;
|
||||||
|
|
||||||
|
num_bytes = (png_uint_32)items * size;
|
||||||
|
ptr = (png_voidp)png_malloc((png_structp)png_ptr, num_bytes);
|
||||||
|
if (num_bytes > (png_uint_32)0x8000)
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
return ((voidpf)ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* function to free memory for zlib */
|
||||||
|
void
|
||||||
|
png_zfree(voidpf png_ptr, voidpf ptr)
|
||||||
|
{
|
||||||
|
png_free((png_structp)png_ptr, (png_voidp)ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reset the CRC variable to 32 bits of 1's. Care must be taken
|
||||||
|
* in case CRC is > 32 bits to leave the top bits 0.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
png_reset_crc(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
png_ptr->crc = crc32(0, Z_NULL, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Calculate the CRC over a section of data. We can only pass as
|
||||||
|
* much data to this routine as the largest single buffer size. We
|
||||||
|
* also check that this data will actually be used before going to the
|
||||||
|
* trouble of calculating it.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
png_calculate_crc(png_structp png_ptr, png_bytep ptr, png_size_t length)
|
||||||
|
{
|
||||||
|
int need_crc = 1;
|
||||||
|
|
||||||
|
if (png_ptr->chunk_name[0] & 0x20) /* ancillary */
|
||||||
|
{
|
||||||
|
if ((png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_MASK) ==
|
||||||
|
(PNG_FLAG_CRC_ANCILLARY_USE | PNG_FLAG_CRC_ANCILLARY_NOWARN))
|
||||||
|
need_crc = 0;
|
||||||
|
}
|
||||||
|
else /* critical */
|
||||||
|
{
|
||||||
|
if (png_ptr->flags & PNG_FLAG_CRC_CRITICAL_IGNORE)
|
||||||
|
need_crc = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (need_crc)
|
||||||
|
png_ptr->crc = crc32(png_ptr->crc, ptr, (uInt)length);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Allocate the memory for an info_struct for the application. We don't
|
||||||
|
* really need the png_ptr, but it could potentially be useful in the
|
||||||
|
* future. This should be used in favour of malloc(sizeof(png_info))
|
||||||
|
* and png_info_init() so that applications that want to use a shared
|
||||||
|
* libpng don't have to be recompiled if png_info changes size.
|
||||||
|
*/
|
||||||
|
png_infop
|
||||||
|
png_create_info_struct(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
png_infop info_ptr;
|
||||||
|
|
||||||
|
png_debug(1, "in png_create_info_struct\n");
|
||||||
|
if(png_ptr == NULL) return (NULL);
|
||||||
|
if ((info_ptr = (png_infop)png_create_struct(PNG_STRUCT_INFO)) != NULL)
|
||||||
|
{
|
||||||
|
png_info_init(info_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (info_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This function frees the memory associated with a single info struct.
|
||||||
|
* Normally, one would use either png_destroy_read_struct() or
|
||||||
|
* png_destroy_write_struct() to free an info struct, but this may be
|
||||||
|
* useful for some applications.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
png_destroy_info_struct(png_structp png_ptr, png_infopp info_ptr_ptr)
|
||||||
|
{
|
||||||
|
png_infop info_ptr = NULL;
|
||||||
|
|
||||||
|
png_debug(1, "in png_destroy_info_struct\n");
|
||||||
|
if (info_ptr_ptr != NULL)
|
||||||
|
info_ptr = *info_ptr_ptr;
|
||||||
|
|
||||||
|
if (info_ptr != NULL)
|
||||||
|
{
|
||||||
|
png_info_destroy(png_ptr, info_ptr);
|
||||||
|
|
||||||
|
png_destroy_struct((png_voidp)info_ptr);
|
||||||
|
*info_ptr_ptr = (png_infop)NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Initialize the info structure. This is now an internal function (0.89)
|
||||||
|
* and applications using it are urged to use png_create_info_struct()
|
||||||
|
* instead.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
png_info_init(png_infop info_ptr)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_info_init\n");
|
||||||
|
/* set everything to 0 */
|
||||||
|
png_memset(info_ptr, 0, sizeof (png_info));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This is an internal routine to free any memory that the info struct is
|
||||||
|
* pointing to before re-using it or freeing the struct itself. Recall
|
||||||
|
* that png_free() checks for NULL pointers for us.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
png_info_destroy(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
#if defined(PNG_READ_tEXt_SUPPORTED) || defined(PNG_READ_zTXt_SUPPORTED)
|
||||||
|
int i;
|
||||||
|
|
||||||
|
png_debug(1, "in png_info_destroy\n");
|
||||||
|
if (info_ptr->text != NULL)
|
||||||
|
{
|
||||||
|
for (i = 0; i < info_ptr->num_text; i++)
|
||||||
|
{
|
||||||
|
png_free(png_ptr, info_ptr->text[i].key);
|
||||||
|
}
|
||||||
|
png_free(png_ptr, info_ptr->text);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_pCAL_SUPPORTED)
|
||||||
|
png_free(png_ptr, info_ptr->pcal_purpose);
|
||||||
|
png_free(png_ptr, info_ptr->pcal_units);
|
||||||
|
if (info_ptr->pcal_params != NULL)
|
||||||
|
{
|
||||||
|
for (i = 0; i < (int)info_ptr->pcal_nparams; i++)
|
||||||
|
{
|
||||||
|
png_free(png_ptr, info_ptr->pcal_params[i]);
|
||||||
|
}
|
||||||
|
png_free(png_ptr, info_ptr->pcal_params);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
png_info_init(info_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This function returns a pointer to the io_ptr associated with the user
|
||||||
|
* functions. The application should free any memory associated with this
|
||||||
|
* pointer before png_write_destroy() or png_read_destroy() are called.
|
||||||
|
*/
|
||||||
|
png_voidp
|
||||||
|
png_get_io_ptr(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
return (png_ptr->io_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !defined(PNG_NO_STDIO)
|
||||||
|
/* Initialize the default input/output functions for the PNG file. If you
|
||||||
|
* use your own read or write routines, you can call either png_set_read_fn()
|
||||||
|
* or png_set_write_fn() instead of png_init_io().
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
png_init_io(png_structp png_ptr, FILE *fp)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_init_io\n");
|
||||||
|
png_ptr->io_ptr = (png_voidp)fp;
|
||||||
|
}
|
||||||
|
#endif
|
2056
thirdparty/libpng/png.h
vendored
Normal file
2056
thirdparty/libpng/png.h
vendored
Normal file
File diff suppressed because it is too large
Load Diff
565
thirdparty/libpng/pngconf.h
vendored
Normal file
565
thirdparty/libpng/pngconf.h
vendored
Normal file
@ -0,0 +1,565 @@
|
|||||||
|
|
||||||
|
/* pngconf.h - machine configurable file for libpng
|
||||||
|
*
|
||||||
|
* libpng 1.0.1
|
||||||
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
|
* March 9, 1998
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Any machine specific code is near the front of this file, so if you
|
||||||
|
* are configuring libpng for a machine, you may want to read the section
|
||||||
|
* starting here down to where it starts to typedef png_color, png_text,
|
||||||
|
* and png_info.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PNGCONF_H
|
||||||
|
#define PNGCONF_H
|
||||||
|
|
||||||
|
/* This is the size of the compression buffer, and thus the size of
|
||||||
|
* an IDAT chunk. Make this whatever size you feel is best for your
|
||||||
|
* machine. One of these will be allocated per png_struct. When this
|
||||||
|
* is full, it writes the data to the disk, and does some other
|
||||||
|
* calculations. Making this an extremely small size will slow
|
||||||
|
* the library down, but you may want to experiment to determine
|
||||||
|
* where it becomes significant, if you are concerned with memory
|
||||||
|
* usage. Note that zlib allocates at least 32Kb also. For readers,
|
||||||
|
* this describes the size of the buffer available to read the data in.
|
||||||
|
* Unless this gets smaller than the size of a row (compressed),
|
||||||
|
* it should not make much difference how big this is.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PNG_ZBUF_SIZE
|
||||||
|
#define PNG_ZBUF_SIZE 8192
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* If you are running on a machine where you cannot allocate more
|
||||||
|
* than 64K of memory at once, uncomment this. While libpng will not
|
||||||
|
* normally need that much memory in a chunk (unless you load up a very
|
||||||
|
* large file), zlib needs to know how big of a chunk it can use, and
|
||||||
|
* libpng thus makes sure to check any memory allocation to verify it
|
||||||
|
* will fit into memory.
|
||||||
|
#define PNG_MAX_MALLOC_64K
|
||||||
|
*/
|
||||||
|
#if defined(MAXSEG_64K) && !defined(PNG_MAX_MALLOC_64K)
|
||||||
|
#define PNG_MAX_MALLOC_64K
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This protects us against compilers which run on a windowing system
|
||||||
|
* and thus don't have or would rather us not use the stdio types:
|
||||||
|
* stdin, stdout, and stderr. The only one currently used is stderr
|
||||||
|
* in png_error() and png_warning(). #defining PNG_NO_STDIO will
|
||||||
|
* prevent these from being compiled and used.
|
||||||
|
* #define PNG_NO_STDIO
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PNG_NO_STDIO
|
||||||
|
#include <stdio.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This macro protects us against machines that don't have function
|
||||||
|
* prototypes (ie K&R style headers). If your compiler does not handle
|
||||||
|
* function prototypes, define this macro and use the included ansi2knr.
|
||||||
|
* I've always been able to use _NO_PROTO as the indicator, but you may
|
||||||
|
* need to drag the empty declaration out in front of here, or change the
|
||||||
|
* ifdef to suit your own needs.
|
||||||
|
*/
|
||||||
|
#ifndef PNGARG
|
||||||
|
|
||||||
|
#ifdef OF /* zlib prototype munger */
|
||||||
|
#define PNGARG(arglist) OF(arglist)
|
||||||
|
#else
|
||||||
|
|
||||||
|
#ifdef _NO_PROTO
|
||||||
|
#define PNGARG(arglist) ()
|
||||||
|
#else
|
||||||
|
#define PNGARG(arglist) arglist
|
||||||
|
#endif /* _NO_PROTO */
|
||||||
|
|
||||||
|
#endif /* OF */
|
||||||
|
|
||||||
|
#endif /* PNGARG */
|
||||||
|
|
||||||
|
/* Try to determine if we are compiling on a Mac. Note that testing for
|
||||||
|
* just __MWERKS__ is not good enough, because the Codewarrior is now used
|
||||||
|
* on non-Mac platforms.
|
||||||
|
*/
|
||||||
|
#ifndef MACOS
|
||||||
|
#if (defined(__MWERKS__) && defined(macintosh)) || defined(applec) || \
|
||||||
|
defined(THINK_C) || defined(__SC__) || defined(TARGET_OS_MAC)
|
||||||
|
#define MACOS
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* enough people need this for various reasons to include it here */
|
||||||
|
#if !defined(MACOS) && !defined(RISCOS)
|
||||||
|
#include <sys/types.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This is an attempt to force a single setjmp behaviour on Linux. If
|
||||||
|
* the X config stuff didn't define _BSD_SOURCE we wouldn't need this.
|
||||||
|
*/
|
||||||
|
#ifdef __linux__
|
||||||
|
#ifdef _BSD_SOURCE
|
||||||
|
#define _PNG_SAVE_BSD_SOURCE
|
||||||
|
#undef _BSD_SOURCE
|
||||||
|
#endif
|
||||||
|
#ifdef _SETJMP_H
|
||||||
|
__png.h__ already includes setjmp.h
|
||||||
|
__dont__ include it again
|
||||||
|
#endif
|
||||||
|
#endif /* __linux__ */
|
||||||
|
|
||||||
|
/* include setjmp.h for error handling */
|
||||||
|
#include <setjmp.h>
|
||||||
|
|
||||||
|
#ifdef __linux__
|
||||||
|
#ifdef _PNG_SAVE_BSD_SOURCE
|
||||||
|
#define _BSD_SOURCE
|
||||||
|
#undef _PNG_SAVE_BSD_SOURCE
|
||||||
|
#endif
|
||||||
|
#endif /* __linux__ */
|
||||||
|
|
||||||
|
#ifdef BSD
|
||||||
|
#include <strings.h>
|
||||||
|
#else
|
||||||
|
#include <string.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Other defines for things like memory and the like can go here. */
|
||||||
|
#ifdef PNG_INTERNAL
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
/* The functions exported by PNG_EXTERN are PNG_INTERNAL functions, which
|
||||||
|
* aren't usually used outside the library (as far as I know), so it is
|
||||||
|
* debatable if they should be exported at all. In the future, when it is
|
||||||
|
* possible to have run-time registry of chunk-handling functions, some of
|
||||||
|
* these will be made available again.
|
||||||
|
#define PNG_EXTERN extern
|
||||||
|
*/
|
||||||
|
#define PNG_EXTERN
|
||||||
|
|
||||||
|
/* Other defines specific to compilers can go here. Try to keep
|
||||||
|
* them inside an appropriate ifdef/endif pair for portability.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(MACOS)
|
||||||
|
/* We need to check that <math.h> hasn't already been included earlier
|
||||||
|
* as it seems it doesn't agree with <fp.h>, yet we should really use
|
||||||
|
* <fp.h> if possible.
|
||||||
|
*/
|
||||||
|
#if !defined(__MATH_H__) && !defined(__MATH_H) && !defined(__cmath__)
|
||||||
|
#include <fp.h>
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#include <math.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Codewarrior on NT has linking problems without this. */
|
||||||
|
#if defined(__MWERKS__) && defined(WIN32)
|
||||||
|
#define PNG_ALWAYS_EXTERN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* For some reason, Borland C++ defines memcmp, etc. in mem.h, not
|
||||||
|
* stdlib.h like it should (I think). Or perhaps this is a C++
|
||||||
|
* "feature"?
|
||||||
|
*/
|
||||||
|
#ifdef __TURBOC__
|
||||||
|
#include <mem.h>
|
||||||
|
#include "alloc.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#include <malloc.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This controls how fine the dithering gets. As this allocates
|
||||||
|
* a largish chunk of memory (32K), those who are not as concerned
|
||||||
|
* with dithering quality can decrease some or all of these.
|
||||||
|
*/
|
||||||
|
#ifndef PNG_DITHER_RED_BITS
|
||||||
|
#define PNG_DITHER_RED_BITS 5
|
||||||
|
#endif
|
||||||
|
#ifndef PNG_DITHER_GREEN_BITS
|
||||||
|
#define PNG_DITHER_GREEN_BITS 5
|
||||||
|
#endif
|
||||||
|
#ifndef PNG_DITHER_BLUE_BITS
|
||||||
|
#define PNG_DITHER_BLUE_BITS 5
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This controls how fine the gamma correction becomes when you
|
||||||
|
* are only interested in 8 bits anyway. Increasing this value
|
||||||
|
* results in more memory being used, and more pow() functions
|
||||||
|
* being called to fill in the gamma tables. Don't set this value
|
||||||
|
* less then 8, and even that may not work (I haven't tested it).
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PNG_MAX_GAMMA_8
|
||||||
|
#define PNG_MAX_GAMMA_8 11
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This controls how much a difference in gamma we can tolerate before
|
||||||
|
* we actually start doing gamma conversion.
|
||||||
|
*/
|
||||||
|
#ifndef PNG_GAMMA_THRESHOLD
|
||||||
|
#define PNG_GAMMA_THRESHOLD 0.05
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* PNG_INTERNAL */
|
||||||
|
|
||||||
|
/* The following uses const char * instead of char * for error
|
||||||
|
* and warning message functions, so some compilers won't complain.
|
||||||
|
* If you do not want to use const, define PNG_NO_CONST here.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PNG_NO_CONST
|
||||||
|
# define PNG_CONST const
|
||||||
|
#else
|
||||||
|
# define PNG_CONST
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* The following defines give you the ability to remove code from the
|
||||||
|
* library that you will not be using. I wish I could figure out how to
|
||||||
|
* automate this, but I can't do that without making it seriously hard
|
||||||
|
* on the users. So if you are not using an ability, change the #define
|
||||||
|
* to and #undef, and that part of the library will not be compiled. If
|
||||||
|
* your linker can't find a function, you may want to make sure the
|
||||||
|
* ability is defined here. Some of these depend upon some others being
|
||||||
|
* defined. I haven't figured out all the interactions here, so you may
|
||||||
|
* have to experiment awhile to get everything to compile. If you are
|
||||||
|
* creating or using a shared library, you probably shouldn't touch this,
|
||||||
|
* as it will affect the size of the structures, and this will cause bad
|
||||||
|
* things to happen if the library and/or application ever change.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Any transformations you will not be using can be undef'ed here */
|
||||||
|
|
||||||
|
/* GR-P, 0.96a: Set "*TRANSFORMS_SUPPORTED as default but allow user
|
||||||
|
to turn it off with "*TRANSFORMS_NOT_SUPPORTED" on the compile line,
|
||||||
|
then pick and choose which ones to define without having to edit
|
||||||
|
this file. It is safe to use the *TRANSFORMS_NOT_SUPPORTED if you
|
||||||
|
only want to have a png-compliant reader/writer but don't need
|
||||||
|
any of the extra transformations. This saves about 80 kbytes in a
|
||||||
|
typical installation of the library.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef PNG_READ_TRANSFORMS_NOT_SUPPORTED
|
||||||
|
#define PNG_READ_TRANSFORMS_SUPPORTED
|
||||||
|
#endif
|
||||||
|
#ifndef PNG_WRITE_TRANSFORMS_NOT_SUPPORTED
|
||||||
|
#define PNG_WRITE_TRANSFORMS_SUPPORTED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef PNG_READ_TRANSFORMS_SUPPORTED
|
||||||
|
#define PNG_READ_EXPAND_SUPPORTED
|
||||||
|
#define PNG_READ_SHIFT_SUPPORTED
|
||||||
|
#define PNG_READ_PACK_SUPPORTED
|
||||||
|
#define PNG_READ_BGR_SUPPORTED
|
||||||
|
#define PNG_READ_SWAP_SUPPORTED
|
||||||
|
#define PNG_READ_PACKSWAP_SUPPORTED
|
||||||
|
#define PNG_READ_INVERT_SUPPORTED
|
||||||
|
#define PNG_READ_DITHER_SUPPORTED
|
||||||
|
#define PNG_READ_BACKGROUND_SUPPORTED
|
||||||
|
#define PNG_READ_16_TO_8_SUPPORTED
|
||||||
|
#define PNG_READ_FILLER_SUPPORTED
|
||||||
|
#define PNG_READ_GAMMA_SUPPORTED
|
||||||
|
#define PNG_READ_GRAY_TO_RGB_SUPPORTED
|
||||||
|
#define PNG_READ_SWAP_ALPHA_SUPPORTED
|
||||||
|
#define PNG_READ_INVERT_ALPHA_SUPPORTED
|
||||||
|
#define PNG_READ_STRIP_ALPHA_SUPPORTED
|
||||||
|
#define PNG_READ_USER_TRANSFORM_SUPPORTED
|
||||||
|
/* the following aren't implemented yet
|
||||||
|
#define PNG_READ_RGB_TO_GRAY_SUPPORTED
|
||||||
|
*/
|
||||||
|
#endif /* PNG_READ_TRANSFORMS_SUPPORTED */
|
||||||
|
|
||||||
|
#ifndef PNG_PROGRESSIVE_READ_NOT_SUPPORTED /* if you don't do progressive */
|
||||||
|
#define PNG_PROGRESSIVE_READ_SUPPORTED /* reading. This is not talking */
|
||||||
|
#endif /* about interlacing capability! You'll */
|
||||||
|
/* still have interlacing unless you change the following line: */
|
||||||
|
#define PNG_READ_INTERLACING_SUPPORTED /* required for PNG-compliant decoders */
|
||||||
|
#define PNG_READ_COMPOSITE_NODIV_SUPPORTED /* well tested on Intel and SGI */
|
||||||
|
|
||||||
|
#ifdef PNG_WRITE_TRANSFORMS_SUPPORTED
|
||||||
|
#define PNG_WRITE_SHIFT_SUPPORTED
|
||||||
|
#define PNG_WRITE_PACK_SUPPORTED
|
||||||
|
#define PNG_WRITE_BGR_SUPPORTED
|
||||||
|
#define PNG_WRITE_SWAP_SUPPORTED
|
||||||
|
#define PNG_WRITE_PACKSWAP_SUPPORTED
|
||||||
|
#define PNG_WRITE_INVERT_SUPPORTED
|
||||||
|
#define PNG_WRITE_FILLER_SUPPORTED /* This is the same as WRITE_STRIP_ALPHA */
|
||||||
|
#define PNG_WRITE_FLUSH_SUPPORTED
|
||||||
|
#define PNG_WRITE_SWAP_ALPHA_SUPPORTED
|
||||||
|
#define PNG_WRITE_INVERT_ALPHA_SUPPORTED
|
||||||
|
#define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
|
||||||
|
#define PNG_WRITE_USER_TRANSFORM_SUPPORTED
|
||||||
|
#endif /* PNG_WRITE_TRANSFORMS_SUPPORTED */
|
||||||
|
|
||||||
|
#define PNG_WRITE_INTERLACING_SUPPORTED /* not required for PNG-compliant
|
||||||
|
encoders, but can cause trouble
|
||||||
|
if left undefined */
|
||||||
|
|
||||||
|
#if !defined(PNG_NO_STDIO)
|
||||||
|
#define PNG_TIME_RFC1123_SUPPORTED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This adds extra functions in pngget.c for accessing data from the
|
||||||
|
* info pointer (added in version 0.99)
|
||||||
|
* png_get_image_width()
|
||||||
|
* png_get_image_height()
|
||||||
|
* png_get_bit_depth()
|
||||||
|
* png_get_color_type()
|
||||||
|
* png_get_compression_type()
|
||||||
|
* png_get_filter_type()
|
||||||
|
* png_get_interlace_type()
|
||||||
|
* png_get_pixel_aspect_ratio()
|
||||||
|
* png_get_pixels_per_meter()
|
||||||
|
* png_get_x_offset_pixels()
|
||||||
|
* png_get_y_offset_pixels()
|
||||||
|
* png_get_x_offset_microns()
|
||||||
|
* png_get_y_offset_microns()
|
||||||
|
*/
|
||||||
|
#if !defined(PNG_NO_EASY_ACCESS)
|
||||||
|
#define PNG_EASY_ACCESS_SUPPORTED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* These are currently experimental features, define them if you want */
|
||||||
|
|
||||||
|
/* very little testing */
|
||||||
|
/*
|
||||||
|
#define PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* This is only for PowerPC big-endian and 680x0 systems */
|
||||||
|
/* some testing */
|
||||||
|
/*
|
||||||
|
#define PNG_READ_BIG_ENDIAN_SUPPORTED
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* These functions are turned off by default, as they will be phased out. */
|
||||||
|
/*
|
||||||
|
#define PNG_USELESS_TESTS_SUPPORTED
|
||||||
|
#define PNG_CORRECT_PALETTE_SUPPORTED
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Any chunks you are not interested in, you can undef here. The
|
||||||
|
* ones that allocate memory may be expecially important (hIST,
|
||||||
|
* tEXt, zTXt, tRNS, pCAL). Others will just save time and make png_info
|
||||||
|
* a bit smaller.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PNG_READ_ANCILLARY_CHUNKS_NOT_SUPPORTED
|
||||||
|
#define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED
|
||||||
|
#endif
|
||||||
|
#ifndef PNG_WRITE_ANCILLARY_CHUNKS_NOT_SUPPORTED
|
||||||
|
#define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef PNG_READ_ANCILLARY_CHUNKS_SUPPORTED
|
||||||
|
#define PNG_READ_bKGD_SUPPORTED
|
||||||
|
#define PNG_READ_cHRM_SUPPORTED
|
||||||
|
#define PNG_READ_gAMA_SUPPORTED
|
||||||
|
#define PNG_READ_hIST_SUPPORTED
|
||||||
|
#define PNG_READ_oFFs_SUPPORTED
|
||||||
|
#define PNG_READ_pCAL_SUPPORTED
|
||||||
|
#define PNG_READ_pHYs_SUPPORTED
|
||||||
|
#define PNG_READ_sBIT_SUPPORTED
|
||||||
|
#define PNG_READ_sRGB_SUPPORTED
|
||||||
|
#define PNG_READ_tEXt_SUPPORTED
|
||||||
|
#define PNG_READ_tIME_SUPPORTED
|
||||||
|
#define PNG_READ_tRNS_SUPPORTED
|
||||||
|
#define PNG_READ_zTXt_SUPPORTED
|
||||||
|
#define PNG_READ_OPT_PLTE_SUPPORTED /* only affects support of the optional */
|
||||||
|
/* PLTE chunk in RGB and RGBA images */
|
||||||
|
#endif /* PNG_READ_ANCILLARY_CHUNKS_SUPPORTED */
|
||||||
|
|
||||||
|
#ifdef PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED
|
||||||
|
#define PNG_WRITE_bKGD_SUPPORTED
|
||||||
|
#define PNG_WRITE_cHRM_SUPPORTED
|
||||||
|
#define PNG_WRITE_gAMA_SUPPORTED
|
||||||
|
#define PNG_WRITE_hIST_SUPPORTED
|
||||||
|
#define PNG_WRITE_oFFs_SUPPORTED
|
||||||
|
#define PNG_WRITE_pCAL_SUPPORTED
|
||||||
|
#define PNG_WRITE_pHYs_SUPPORTED
|
||||||
|
#define PNG_WRITE_sBIT_SUPPORTED
|
||||||
|
#define PNG_WRITE_sRGB_SUPPORTED
|
||||||
|
#define PNG_WRITE_tEXt_SUPPORTED
|
||||||
|
#define PNG_WRITE_tIME_SUPPORTED
|
||||||
|
#define PNG_WRITE_tRNS_SUPPORTED
|
||||||
|
#define PNG_WRITE_zTXt_SUPPORTED
|
||||||
|
#endif /* PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED */
|
||||||
|
|
||||||
|
/* need the time information for reading tIME chunks */
|
||||||
|
#if defined(PNG_READ_tIME_SUPPORTED) || defined(PNG_WRITE_tIME_SUPPORTED)
|
||||||
|
#include <time.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Some typedefs to get us started. These should be safe on most of the
|
||||||
|
* common platforms. The typedefs should be at least as large as the
|
||||||
|
* numbers suggest (a png_uint_32 must be at least 32 bits long), but they
|
||||||
|
* don't have to be exactly that size. Some compilers dislike passing
|
||||||
|
* unsigned shorts as function parameters, so you may be better off using
|
||||||
|
* unsigned int for png_uint_16. Likewise, for 64-bit systems, you may
|
||||||
|
* want to have unsigned int for png_uint_32 instead of unsigned long.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef unsigned long png_uint_32;
|
||||||
|
typedef long png_int_32;
|
||||||
|
typedef unsigned short png_uint_16;
|
||||||
|
typedef short png_int_16;
|
||||||
|
typedef unsigned char png_byte;
|
||||||
|
|
||||||
|
/* This is usually size_t. It is typedef'ed just in case you need it to
|
||||||
|
change (I'm not sure if you will or not, so I thought I'd be safe) */
|
||||||
|
typedef size_t png_size_t;
|
||||||
|
|
||||||
|
/* The following is needed for medium model support. It cannot be in the
|
||||||
|
* PNG_INTERNAL section. Needs modification for other compilers besides
|
||||||
|
* MSC. Model independent support declares all arrays and pointers to be
|
||||||
|
* large using the far keyword. The zlib version used must also support
|
||||||
|
* model independent data. As of version zlib 1.0.4, the necessary changes
|
||||||
|
* have been made in zlib. The USE_FAR_KEYWORD define triggers other
|
||||||
|
* changes that are needed. (Tim Wegner)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Separate compiler dependencies (problem here is that zlib.h always
|
||||||
|
defines FAR. (SJT) */
|
||||||
|
#ifdef __BORLANDC__
|
||||||
|
#if defined(__LARGE__) || defined(__HUGE__) || defined(__COMPACT__)
|
||||||
|
#define LDATA 1
|
||||||
|
#else
|
||||||
|
#define LDATA 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(__WIN32__) && !defined(__FLAT__)
|
||||||
|
#define PNG_MAX_MALLOC_64K
|
||||||
|
#if (LDATA != 1)
|
||||||
|
#ifndef FAR
|
||||||
|
#define FAR __far
|
||||||
|
#endif
|
||||||
|
#define USE_FAR_KEYWORD
|
||||||
|
#endif /* LDATA != 1 */
|
||||||
|
|
||||||
|
/* Possibly useful for moving data out of default segment.
|
||||||
|
* Uncomment it if you want. Could also define FARDATA as
|
||||||
|
* const if your compiler supports it. (SJT)
|
||||||
|
# define FARDATA FAR
|
||||||
|
*/
|
||||||
|
#endif /* __WIN32__, __FLAT__ */
|
||||||
|
|
||||||
|
#endif /* __BORLANDC__ */
|
||||||
|
|
||||||
|
|
||||||
|
/* Suggest testing for specific compiler first before testing for
|
||||||
|
* FAR. The Watcom compiler defines both __MEDIUM__ and M_I86MM,
|
||||||
|
* making reliance oncertain keywords suspect. (SJT)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* MSC Medium model */
|
||||||
|
#if defined(FAR)
|
||||||
|
# if defined(M_I86MM)
|
||||||
|
# define USE_FAR_KEYWORD
|
||||||
|
# define FARDATA FAR
|
||||||
|
# include <dos.h>
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* SJT: default case */
|
||||||
|
#ifndef FAR
|
||||||
|
# define FAR
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* At this point FAR is always defined */
|
||||||
|
#ifndef FARDATA
|
||||||
|
#define FARDATA
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Add typedefs for pointers */
|
||||||
|
typedef void FAR * png_voidp;
|
||||||
|
typedef png_byte FAR * png_bytep;
|
||||||
|
typedef png_uint_32 FAR * png_uint_32p;
|
||||||
|
typedef png_int_32 FAR * png_int_32p;
|
||||||
|
typedef png_uint_16 FAR * png_uint_16p;
|
||||||
|
typedef png_int_16 FAR * png_int_16p;
|
||||||
|
typedef PNG_CONST char FAR * png_const_charp;
|
||||||
|
typedef char FAR * png_charp;
|
||||||
|
typedef double FAR * png_doublep;
|
||||||
|
|
||||||
|
/* Pointers to pointers; i.e. arrays */
|
||||||
|
typedef png_byte FAR * FAR * png_bytepp;
|
||||||
|
typedef png_uint_32 FAR * FAR * png_uint_32pp;
|
||||||
|
typedef png_int_32 FAR * FAR * png_int_32pp;
|
||||||
|
typedef png_uint_16 FAR * FAR * png_uint_16pp;
|
||||||
|
typedef png_int_16 FAR * FAR * png_int_16pp;
|
||||||
|
typedef PNG_CONST char FAR * FAR * png_const_charpp;
|
||||||
|
typedef char FAR * FAR * png_charpp;
|
||||||
|
typedef double FAR * FAR * png_doublepp;
|
||||||
|
|
||||||
|
/* Pointers to pointers to pointers; i.e. pointer to array */
|
||||||
|
typedef char FAR * FAR * FAR * png_charppp;
|
||||||
|
|
||||||
|
/* libpng typedefs for types in zlib. If zlib changes
|
||||||
|
* or another compression library is used, then change these.
|
||||||
|
* Eliminates need to change all the source files.
|
||||||
|
*/
|
||||||
|
typedef charf * png_zcharp;
|
||||||
|
typedef charf * FAR * png_zcharpp;
|
||||||
|
typedef z_stream FAR * png_zstreamp;
|
||||||
|
|
||||||
|
/* allow for compilation as dll under MS Windows */
|
||||||
|
#ifdef __WIN32DLL__
|
||||||
|
#define PNG_EXPORT(type,symbol) __declspec(dllexport) type symbol
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* allow for compilation as dll with BORLAND C++ 5.0 */
|
||||||
|
#if defined(__BORLANDC__) && defined(_Windows) && defined(__DLL__)
|
||||||
|
# define PNG_EXPORT(type,symbol) type _export symbol
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* allow for compilation as shared lib under BeOS */
|
||||||
|
#ifdef __BEOSDLL__
|
||||||
|
#define PNG_EXPORT(type,symbol) __declspec(export) type symbol
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef PNG_EXPORT
|
||||||
|
#define PNG_EXPORT(type,symbol) type symbol
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
/* User may want to use these so not in PNG_INTERNAL. Any library functions
|
||||||
|
* that are passed far data must be model independent.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(USE_FAR_KEYWORD) /* memory model independent fns */
|
||||||
|
/* use this to make far-to-near assignments */
|
||||||
|
# define CHECK 1
|
||||||
|
# define NOCHECK 0
|
||||||
|
# define CVT_PTR(ptr) (png_far_to_near(png_ptr,ptr,CHECK))
|
||||||
|
# define CVT_PTR_NOCHECK(ptr) (png_far_to_near(png_ptr,ptr,NOCHECK))
|
||||||
|
# define png_strlen _fstrlen
|
||||||
|
# define png_memcmp _fmemcmp /* SJT: added */
|
||||||
|
# define png_memcpy _fmemcpy
|
||||||
|
# define png_memset _fmemset
|
||||||
|
#else /* use the usual functions */
|
||||||
|
# define CVT_PTR(ptr) (ptr)
|
||||||
|
# define CVT_PTR_NOCHECK(ptr) (ptr)
|
||||||
|
# define png_strlen strlen
|
||||||
|
# define png_memcmp memcmp /* SJT: added */
|
||||||
|
# define png_memcpy memcpy
|
||||||
|
# define png_memset memset
|
||||||
|
#endif
|
||||||
|
/* End of memory model independent support */
|
||||||
|
|
||||||
|
/* Just a double check that someone hasn't tried to define something
|
||||||
|
* contradictory.
|
||||||
|
*/
|
||||||
|
#if (PNG_ZBUF_SIZE > 65536) && defined(PNG_MAX_MALLOC_64K)
|
||||||
|
#undef PNG_ZBUF_SIZE
|
||||||
|
#define PNG_ZBUF_SIZE 65536
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* PNGCONF_H */
|
||||||
|
|
174
thirdparty/libpng/pngerror.c
vendored
Normal file
174
thirdparty/libpng/pngerror.c
vendored
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
|
||||||
|
/* pngerror.c - stub functions for i/o and memory allocation
|
||||||
|
*
|
||||||
|
* libpng 1.0.1
|
||||||
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
|
* March 9, 1998
|
||||||
|
*
|
||||||
|
* This file provides a location for all error handling. Users which
|
||||||
|
* need special error handling are expected to write replacement functions
|
||||||
|
* and use png_set_error_fn() to use those functions. See the instructions
|
||||||
|
* at each function.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define PNG_INTERNAL
|
||||||
|
#include "png.h"
|
||||||
|
|
||||||
|
static void png_default_error PNGARG((png_structp png_ptr,
|
||||||
|
png_const_charp message));
|
||||||
|
static void png_default_warning PNGARG((png_structp png_ptr,
|
||||||
|
png_const_charp message));
|
||||||
|
|
||||||
|
/* This function is called whenever there is a fatal error. This function
|
||||||
|
* should not be changed. If there is a need to handle errors differently,
|
||||||
|
* you should supply a replacement error function and use png_set_error_fn()
|
||||||
|
* to replace the error function at run-time.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
png_error(png_structp png_ptr, png_const_charp message)
|
||||||
|
{
|
||||||
|
if (png_ptr->error_fn != NULL)
|
||||||
|
(*(png_ptr->error_fn))(png_ptr, message);
|
||||||
|
|
||||||
|
/* if the following returns or doesn't exist, use the default function,
|
||||||
|
which will not return */
|
||||||
|
png_default_error(png_ptr, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This function is called whenever there is a non-fatal error. This function
|
||||||
|
* should not be changed. If there is a need to handle warnings differently,
|
||||||
|
* you should supply a replacement warning function and use
|
||||||
|
* png_set_error_fn() to replace the warning function at run-time.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
png_warning(png_structp png_ptr, png_const_charp message)
|
||||||
|
{
|
||||||
|
if (png_ptr->warning_fn != NULL)
|
||||||
|
(*(png_ptr->warning_fn))(png_ptr, message);
|
||||||
|
else
|
||||||
|
png_default_warning(png_ptr, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* These utilities are used internally to build an error message which relates
|
||||||
|
* to the current chunk. The chunk name comes from png_ptr->chunk_name,
|
||||||
|
* this is used to prefix the message. The message is limited in length
|
||||||
|
* to 63 bytes, the name characters are output as hex digits wrapped in []
|
||||||
|
* if the character is invalid.
|
||||||
|
*/
|
||||||
|
#define isnonalpha(c) ((c) < 41 || (c) > 122 || ((c) > 90 && (c) < 97))
|
||||||
|
static PNG_CONST char png_digit[16] = {
|
||||||
|
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
|
||||||
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
png_format_buffer(png_structp png_ptr, png_charp buffer, png_const_charp message)
|
||||||
|
{
|
||||||
|
int iout = 0, iin = 0;
|
||||||
|
|
||||||
|
while (iin < 4) {
|
||||||
|
int c = png_ptr->chunk_name[iin++];
|
||||||
|
if (isnonalpha(c)) {
|
||||||
|
buffer[iout++] = '[';
|
||||||
|
buffer[iout++] = png_digit[(c & 0xf0) >> 4];
|
||||||
|
buffer[iout++] = png_digit[c & 0xf];
|
||||||
|
buffer[iout++] = ']';
|
||||||
|
} else {
|
||||||
|
buffer[iout++] = c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (message == NULL)
|
||||||
|
buffer[iout] = 0;
|
||||||
|
else {
|
||||||
|
buffer[iout++] = ':';
|
||||||
|
buffer[iout++] = ' ';
|
||||||
|
png_memcpy(buffer+iout, message, 64);
|
||||||
|
buffer[iout+63] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
png_chunk_error(png_structp png_ptr, png_const_charp message)
|
||||||
|
{
|
||||||
|
char msg[16+64];
|
||||||
|
png_format_buffer(png_ptr, msg, message);
|
||||||
|
png_error(png_ptr, msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
png_chunk_warning(png_structp png_ptr, png_const_charp message)
|
||||||
|
{
|
||||||
|
char msg[16+64];
|
||||||
|
png_format_buffer(png_ptr, msg, message);
|
||||||
|
png_warning(png_ptr, msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This is the default error handling function. Note that replacements for
|
||||||
|
* this function MUST NOT RETURN, or the program will likely crash. This
|
||||||
|
* function is used by default, or if the program supplies NULL for the
|
||||||
|
* error function pointer in png_set_error_fn().
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
png_default_error(png_structp png_ptr, png_const_charp message)
|
||||||
|
{
|
||||||
|
#ifndef PNG_NO_STDIO
|
||||||
|
fprintf(stderr, "libpng error: %s\n", message);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_FAR_KEYWORD
|
||||||
|
{
|
||||||
|
jmp_buf jmpbuf;
|
||||||
|
png_memcpy(jmpbuf,png_ptr->jmpbuf,sizeof(jmp_buf));
|
||||||
|
longjmp(jmpbuf, 1);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
longjmp(png_ptr->jmpbuf, 1);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This function is called when there is a warning, but the library thinks
|
||||||
|
* it can continue anyway. Replacement functions don't have to do anything
|
||||||
|
* here if you don't want to. In the default configuration, png_ptr is
|
||||||
|
* not used, but it is passed in case it may be useful.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
png_default_warning(png_structp png_ptr, png_const_charp message)
|
||||||
|
{
|
||||||
|
if (png_ptr == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
#ifndef PNG_NO_STDIO
|
||||||
|
fprintf(stderr, "libpng warning: %s\n", message);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This function is called when the application wants to use another method
|
||||||
|
* of handling errors and warnings. Note that the error function MUST NOT
|
||||||
|
* return to the calling routine or serious problems will occur. The return
|
||||||
|
* method used in the default routine calls longjmp(png_ptr->jmpbuf, 1)
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
png_set_error_fn(png_structp png_ptr, png_voidp error_ptr,
|
||||||
|
png_error_ptr error_fn, png_error_ptr warning_fn)
|
||||||
|
{
|
||||||
|
png_ptr->error_ptr = error_ptr;
|
||||||
|
png_ptr->error_fn = error_fn;
|
||||||
|
png_ptr->warning_fn = warning_fn;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* This function returns a pointer to the error_ptr associated with the user
|
||||||
|
* functions. The application should free any memory associated with this
|
||||||
|
* pointer before png_write_destroy and png_read_destroy are called.
|
||||||
|
*/
|
||||||
|
png_voidp
|
||||||
|
png_get_error_ptr(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
return ((png_voidp)png_ptr->error_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
644
thirdparty/libpng/pngget.c
vendored
Normal file
644
thirdparty/libpng/pngget.c
vendored
Normal file
@ -0,0 +1,644 @@
|
|||||||
|
|
||||||
|
/* pngget.c - retrieval of values from info struct
|
||||||
|
*
|
||||||
|
* libpng 1.0.1
|
||||||
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
|
* March 9, 1998
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define PNG_INTERNAL
|
||||||
|
#include "png.h"
|
||||||
|
|
||||||
|
png_uint_32
|
||||||
|
png_get_valid(png_structp png_ptr, png_infop info_ptr, png_uint_32 flag)
|
||||||
|
{
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL)
|
||||||
|
return(info_ptr->valid & flag);
|
||||||
|
else
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
png_uint_32
|
||||||
|
png_get_rowbytes(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL)
|
||||||
|
return(info_ptr->rowbytes);
|
||||||
|
else
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef PNG_EASY_ACCESS_SUPPORTED
|
||||||
|
/* easy access to info, added in libpng-0.99 */
|
||||||
|
png_uint_32
|
||||||
|
png_get_image_width(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL)
|
||||||
|
{
|
||||||
|
return info_ptr->width;
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
png_uint_32
|
||||||
|
png_get_image_height(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL)
|
||||||
|
{
|
||||||
|
return info_ptr->height;
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
png_byte
|
||||||
|
png_get_bit_depth(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL)
|
||||||
|
{
|
||||||
|
return info_ptr->bit_depth;
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
png_byte
|
||||||
|
png_get_color_type(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL)
|
||||||
|
{
|
||||||
|
return info_ptr->color_type;
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
png_byte
|
||||||
|
png_get_filter_type(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL)
|
||||||
|
{
|
||||||
|
return info_ptr->filter_type;
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
png_byte
|
||||||
|
png_get_interlace_type(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL)
|
||||||
|
{
|
||||||
|
return info_ptr->interlace_type;
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
png_byte
|
||||||
|
png_get_compression_type(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL)
|
||||||
|
{
|
||||||
|
return info_ptr->compression_type;
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
png_uint_32
|
||||||
|
png_get_x_pixels_per_meter(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
#if defined(PNG_READ_pHYs_SUPPORTED) || defined(PNG_WRITE_pHYs_SUPPORTED)
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs))
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s retrieval function\n", "png_get_x_pixels_per_meter");
|
||||||
|
if(info_ptr->phys_unit_type != PNG_RESOLUTION_METER)
|
||||||
|
return (0);
|
||||||
|
else return (info_ptr->x_pixels_per_unit);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
png_uint_32
|
||||||
|
png_get_y_pixels_per_meter(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
#if defined(PNG_READ_pHYs_SUPPORTED) || defined(PNG_WRITE_pHYs_SUPPORTED)
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs))
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s retrieval function\n", "png_get_y_pixels_per_meter");
|
||||||
|
if(info_ptr->phys_unit_type != PNG_RESOLUTION_METER)
|
||||||
|
return (0);
|
||||||
|
else return (info_ptr->y_pixels_per_unit);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
png_uint_32
|
||||||
|
png_get_pixels_per_meter(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
#if defined(PNG_READ_pHYs_SUPPORTED) || defined(PNG_WRITE_pHYs_SUPPORTED)
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs))
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s retrieval function\n", "png_get_pixels_per_meter");
|
||||||
|
if(info_ptr->phys_unit_type != PNG_RESOLUTION_METER ||
|
||||||
|
info_ptr->x_pixels_per_unit != info_ptr->y_pixels_per_unit)
|
||||||
|
return (0);
|
||||||
|
else return (info_ptr->x_pixels_per_unit);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
float
|
||||||
|
png_get_pixel_aspect_ratio(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
#if defined(PNG_READ_pHYs_SUPPORTED) || defined(PNG_WRITE_pHYs_SUPPORTED)
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_pHYs))
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s retrieval function\n", "png_get_aspect_ratio");
|
||||||
|
if (info_ptr->x_pixels_per_unit == 0)
|
||||||
|
return ((float)0.0);
|
||||||
|
else
|
||||||
|
return ((float)info_ptr->y_pixels_per_unit
|
||||||
|
/(float)info_ptr->x_pixels_per_unit);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
return ((float)0.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
png_uint_32
|
||||||
|
png_get_x_offset_microns(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
#if defined(PNG_READ_oFFs_SUPPORTED) || defined(PNG_WRITE_oFFs_SUPPORTED)
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs))
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s retrieval function\n", "png_get_x_offset_microns");
|
||||||
|
if(info_ptr->offset_unit_type != PNG_OFFSET_MICROMETER)
|
||||||
|
return (0);
|
||||||
|
else return (info_ptr->x_offset);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
png_uint_32
|
||||||
|
png_get_y_offset_microns(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
#if defined(PNG_READ_oFFs_SUPPORTED) || defined(PNG_WRITE_oFFs_SUPPORTED)
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs))
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s retrieval function\n", "png_get_y_offset_microns");
|
||||||
|
if(info_ptr->offset_unit_type != PNG_OFFSET_MICROMETER)
|
||||||
|
return (0);
|
||||||
|
else return (info_ptr->y_offset);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
png_uint_32
|
||||||
|
png_get_x_offset_pixels(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
#if defined(PNG_READ_oFFs_SUPPORTED) || defined(PNG_WRITE_oFFs_SUPPORTED)
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs))
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s retrieval function\n", "png_get_x_offset_microns");
|
||||||
|
if(info_ptr->offset_unit_type != PNG_OFFSET_PIXEL)
|
||||||
|
return (0);
|
||||||
|
else return (info_ptr->x_offset);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
png_uint_32
|
||||||
|
png_get_y_offset_pixels(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
#if defined(PNG_READ_oFFs_SUPPORTED) || defined(PNG_WRITE_oFFs_SUPPORTED)
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs))
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s retrieval function\n", "png_get_y_offset_microns");
|
||||||
|
if(info_ptr->offset_unit_type != PNG_OFFSET_PIXEL)
|
||||||
|
return (0);
|
||||||
|
else return (info_ptr->y_offset);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef PNG_INCH_CONVERSIONS
|
||||||
|
png_uint_32
|
||||||
|
png_get_pixels_per_inch(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
return ((png_uint_32)((float)png_get_pixels_per_meter(png_ptr, info_ptr)
|
||||||
|
*.03937 +.5)
|
||||||
|
}
|
||||||
|
|
||||||
|
png_uint_32
|
||||||
|
png_get_x_pixels_per_inch(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
return ((png_uint_32)((float)png_get_x_pixels_per_meter(png_ptr, info_ptr)
|
||||||
|
*.03937 +.5)
|
||||||
|
}
|
||||||
|
|
||||||
|
png_uint_32
|
||||||
|
png_get_y_pixels_per_inch(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
return ((png_uint_32)((float)png_get_y_pixels_per_meter(png_ptr, info_ptr)
|
||||||
|
*.03937 +.5)
|
||||||
|
}
|
||||||
|
|
||||||
|
float
|
||||||
|
png_get_x_offset_inches(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
return ((float)png_get_x_offset_microns(png_ptr, info_ptr)
|
||||||
|
*.03937/1.0.100. +.5)
|
||||||
|
}
|
||||||
|
|
||||||
|
float
|
||||||
|
png_get_y_offset_inches(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
return ((float)png_get_y_offset_microns(png_ptr, info_ptr)
|
||||||
|
*.03937/1.0.100. +.5)
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(PNG_READ_pHYs_SUPPORTED)
|
||||||
|
png_uint_32
|
||||||
|
png_get_pHYs_dpi(png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)
|
||||||
|
{
|
||||||
|
png_uint_32 retval = 0;
|
||||||
|
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL && info_ptr->valid & PNG_INFO_pHYs)
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s retrieval function\n", "pHYs");
|
||||||
|
if (res_x != NULL)
|
||||||
|
{
|
||||||
|
*res_x = info_ptr->x_pixels_per_unit;
|
||||||
|
retval |= PNG_INFO_pHYs;
|
||||||
|
}
|
||||||
|
if (res_y != NULL)
|
||||||
|
{
|
||||||
|
*res_y = info_ptr->y_pixels_per_unit;
|
||||||
|
retval |= PNG_INFO_pHYs;
|
||||||
|
}
|
||||||
|
if (unit_type != NULL)
|
||||||
|
{
|
||||||
|
*unit_type = (int)info_ptr->phys_unit_type;
|
||||||
|
retval |= PNG_INFO_pHYs;
|
||||||
|
if(unit_type == 1)
|
||||||
|
{
|
||||||
|
if (res_x != NULL) *res_x = (png_uint_32)(*res_x * 39.37 + .50);
|
||||||
|
if (res_y != NULL) *res_y = (png_uint_32)(*res_y * 39.37 + .50);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (retval);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* PNG_INCH_CONVERSIONS */
|
||||||
|
|
||||||
|
/* png_get_channels really belongs in here, too, but it's been around longer */
|
||||||
|
#endif /* PNG_EASY_ACCESS_SUPPORTED */
|
||||||
|
|
||||||
|
png_byte
|
||||||
|
png_get_channels(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL)
|
||||||
|
return(info_ptr->channels);
|
||||||
|
else
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
png_bytep
|
||||||
|
png_get_signature(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL)
|
||||||
|
return(info_ptr->signature);
|
||||||
|
else
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(PNG_READ_bKGD_SUPPORTED)
|
||||||
|
png_uint_32
|
||||||
|
png_get_bKGD(png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_color_16p *background)
|
||||||
|
{
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_bKGD)
|
||||||
|
&& background != NULL)
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s retrieval function\n", "bKGD");
|
||||||
|
*background = &(info_ptr->background);
|
||||||
|
return (PNG_INFO_bKGD);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_cHRM_SUPPORTED)
|
||||||
|
png_uint_32
|
||||||
|
png_get_cHRM(png_structp png_ptr, png_infop info_ptr,
|
||||||
|
double *white_x, double *white_y, double *red_x, double *red_y,
|
||||||
|
double *green_x, double *green_y, double *blue_x, double *blue_y)
|
||||||
|
{
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_cHRM))
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s retrieval function\n", "cHRM");
|
||||||
|
if (white_x != NULL)
|
||||||
|
*white_x = (double)info_ptr->x_white;
|
||||||
|
if (white_y != NULL)
|
||||||
|
*white_y = (double)info_ptr->y_white;
|
||||||
|
if (red_x != NULL)
|
||||||
|
*red_x = (double)info_ptr->x_red;
|
||||||
|
if (red_y != NULL)
|
||||||
|
*red_y = (double)info_ptr->y_red;
|
||||||
|
if (green_x != NULL)
|
||||||
|
*green_x = (double)info_ptr->x_green;
|
||||||
|
if (green_y != NULL)
|
||||||
|
*green_y = (double)info_ptr->y_green;
|
||||||
|
if (blue_x != NULL)
|
||||||
|
*blue_x = (double)info_ptr->x_blue;
|
||||||
|
if (blue_y != NULL)
|
||||||
|
*blue_y = (double)info_ptr->y_blue;
|
||||||
|
return (PNG_INFO_cHRM);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_gAMA_SUPPORTED)
|
||||||
|
png_uint_32
|
||||||
|
png_get_gAMA(png_structp png_ptr, png_infop info_ptr, double *file_gamma)
|
||||||
|
{
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_gAMA)
|
||||||
|
&& file_gamma != NULL)
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s retrieval function\n", "gAMA");
|
||||||
|
*file_gamma = (double)info_ptr->gamma;
|
||||||
|
return (PNG_INFO_gAMA);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_sRGB_SUPPORTED)
|
||||||
|
png_uint_32
|
||||||
|
png_get_sRGB(png_structp png_ptr, png_infop info_ptr, int *file_srgb_intent)
|
||||||
|
{
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_sRGB)
|
||||||
|
&& file_srgb_intent != NULL)
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s retrieval function\n", "sRGB");
|
||||||
|
*file_srgb_intent = (int)info_ptr->srgb_intent;
|
||||||
|
return (PNG_INFO_sRGB);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_hIST_SUPPORTED)
|
||||||
|
png_uint_32
|
||||||
|
png_get_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_16p *hist)
|
||||||
|
{
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_hIST)
|
||||||
|
&& hist != NULL)
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s retrieval function\n", "hIST");
|
||||||
|
*hist = info_ptr->hist;
|
||||||
|
return (PNG_INFO_hIST);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
png_uint_32
|
||||||
|
png_get_IHDR(png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_uint_32 *width, png_uint_32 *height, int *bit_depth,
|
||||||
|
int *color_type, int *interlace_type, int *compression_type,
|
||||||
|
int *filter_type)
|
||||||
|
|
||||||
|
{
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL && width != NULL && height != NULL &&
|
||||||
|
bit_depth != NULL && color_type != NULL)
|
||||||
|
{
|
||||||
|
int pixel_depth, channels;
|
||||||
|
png_uint_32 rowbytes_per_pixel;
|
||||||
|
|
||||||
|
png_debug1(1, "in %s retrieval function\n", "IHDR");
|
||||||
|
*width = info_ptr->width;
|
||||||
|
*height = info_ptr->height;
|
||||||
|
*bit_depth = info_ptr->bit_depth;
|
||||||
|
*color_type = info_ptr->color_type;
|
||||||
|
if (compression_type != NULL)
|
||||||
|
*compression_type = info_ptr->compression_type;
|
||||||
|
if (filter_type != NULL)
|
||||||
|
*filter_type = info_ptr->filter_type;
|
||||||
|
if (interlace_type != NULL)
|
||||||
|
*interlace_type = info_ptr->interlace_type;
|
||||||
|
|
||||||
|
/* check for potential overflow of rowbytes */
|
||||||
|
if (*color_type == PNG_COLOR_TYPE_PALETTE)
|
||||||
|
channels = 1;
|
||||||
|
else if (*color_type & PNG_COLOR_MASK_COLOR)
|
||||||
|
channels = 3;
|
||||||
|
else
|
||||||
|
channels = 1;
|
||||||
|
if (*color_type & PNG_COLOR_MASK_ALPHA)
|
||||||
|
channels++;
|
||||||
|
pixel_depth = *bit_depth * channels;
|
||||||
|
rowbytes_per_pixel = (pixel_depth + 7) >> 3;
|
||||||
|
if ((*width > (png_uint_32)2147483647L/rowbytes_per_pixel))
|
||||||
|
{
|
||||||
|
png_warning(png_ptr,
|
||||||
|
"Width too large for libpng to process image data.");
|
||||||
|
}
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(PNG_READ_oFFs_SUPPORTED)
|
||||||
|
png_uint_32
|
||||||
|
png_get_oFFs(png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_uint_32 *offset_x, png_uint_32 *offset_y, int *unit_type)
|
||||||
|
{
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL && (info_ptr->valid & PNG_INFO_oFFs)
|
||||||
|
&& offset_x != NULL && offset_y != NULL && unit_type != NULL)
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s retrieval function\n", "oFFs");
|
||||||
|
*offset_x = info_ptr->x_offset;
|
||||||
|
*offset_y = info_ptr->y_offset;
|
||||||
|
*unit_type = (int)info_ptr->offset_unit_type;
|
||||||
|
return (PNG_INFO_oFFs);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_pCAL_SUPPORTED)
|
||||||
|
png_uint_32
|
||||||
|
png_get_pCAL(png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_charp *purpose, png_int_32 *X0, png_int_32 *X1, int *type, int *nparams,
|
||||||
|
png_charp *units, png_charpp *params)
|
||||||
|
{
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL && info_ptr->valid & PNG_INFO_pCAL &&
|
||||||
|
purpose != NULL && X0 != NULL && X1 != NULL && type != NULL &&
|
||||||
|
nparams != NULL && units != NULL && params != NULL)
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s retrieval function\n", "pCAL");
|
||||||
|
*purpose = info_ptr->pcal_purpose;
|
||||||
|
*X0 = info_ptr->pcal_X0;
|
||||||
|
*X1 = info_ptr->pcal_X1;
|
||||||
|
*type = (int)info_ptr->pcal_type;
|
||||||
|
*nparams = (int)info_ptr->pcal_nparams;
|
||||||
|
*units = info_ptr->pcal_units;
|
||||||
|
*params = info_ptr->pcal_params;
|
||||||
|
return (PNG_INFO_pCAL);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_pHYs_SUPPORTED)
|
||||||
|
png_uint_32
|
||||||
|
png_get_pHYs(png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_uint_32 *res_x, png_uint_32 *res_y, int *unit_type)
|
||||||
|
{
|
||||||
|
png_uint_32 retval = 0;
|
||||||
|
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL && info_ptr->valid & PNG_INFO_pHYs)
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s retrieval function\n", "pHYs");
|
||||||
|
if (res_x != NULL)
|
||||||
|
{
|
||||||
|
*res_x = info_ptr->x_pixels_per_unit;
|
||||||
|
retval |= PNG_INFO_pHYs;
|
||||||
|
}
|
||||||
|
if (res_y != NULL)
|
||||||
|
{
|
||||||
|
*res_y = info_ptr->y_pixels_per_unit;
|
||||||
|
retval |= PNG_INFO_pHYs;
|
||||||
|
}
|
||||||
|
if (unit_type != NULL)
|
||||||
|
{
|
||||||
|
*unit_type = (int)info_ptr->phys_unit_type;
|
||||||
|
retval |= PNG_INFO_pHYs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (retval);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
png_uint_32
|
||||||
|
png_get_PLTE(png_structp png_ptr, png_infop info_ptr, png_colorp *palette,
|
||||||
|
int *num_palette)
|
||||||
|
{
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL && info_ptr->valid & PNG_INFO_PLTE &&
|
||||||
|
palette != NULL)
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s retrieval function\n", "PLTE");
|
||||||
|
*palette = info_ptr->palette;
|
||||||
|
*num_palette = info_ptr->num_palette;
|
||||||
|
png_debug1(3, "num_palette = %d\n", *num_palette);
|
||||||
|
return (PNG_INFO_PLTE);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(PNG_READ_sBIT_SUPPORTED)
|
||||||
|
png_uint_32
|
||||||
|
png_get_sBIT(png_structp png_ptr, png_infop info_ptr, png_color_8p *sig_bit)
|
||||||
|
{
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL && info_ptr->valid & PNG_INFO_sBIT &&
|
||||||
|
sig_bit != NULL)
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s retrieval function\n", "sBIT");
|
||||||
|
*sig_bit = &(info_ptr->sig_bit);
|
||||||
|
return (PNG_INFO_sBIT);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_tEXt_SUPPORTED) || defined(PNG_READ_zTXt_SUPPORTED)
|
||||||
|
png_uint_32
|
||||||
|
png_get_text(png_structp png_ptr, png_infop info_ptr, png_textp *text_ptr,
|
||||||
|
int *num_text)
|
||||||
|
{
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL && info_ptr->num_text > 0)
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s retrieval function\n",
|
||||||
|
(png_ptr->chunk_name[0] == '\0' ? "text"
|
||||||
|
: (png_const_charp)png_ptr->chunk_name));
|
||||||
|
if (text_ptr != NULL)
|
||||||
|
*text_ptr = info_ptr->text;
|
||||||
|
if (num_text != NULL)
|
||||||
|
*num_text = info_ptr->num_text;
|
||||||
|
return ((png_uint_32)info_ptr->num_text);
|
||||||
|
}
|
||||||
|
return(0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_tIME_SUPPORTED)
|
||||||
|
png_uint_32
|
||||||
|
png_get_tIME(png_structp png_ptr, png_infop info_ptr, png_timep *mod_time)
|
||||||
|
{
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL && info_ptr->valid & PNG_INFO_tIME &&
|
||||||
|
mod_time != NULL)
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s retrieval function\n", "tIME");
|
||||||
|
*mod_time = &(info_ptr->mod_time);
|
||||||
|
return (PNG_INFO_tIME);
|
||||||
|
}
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_tRNS_SUPPORTED)
|
||||||
|
png_uint_32
|
||||||
|
png_get_tRNS(png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_bytep *trans, int *num_trans, png_color_16p *trans_values)
|
||||||
|
{
|
||||||
|
png_uint_32 retval = 0;
|
||||||
|
if (png_ptr != NULL && info_ptr != NULL && info_ptr->valid & PNG_INFO_tRNS)
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s retrieval function\n", "tRNS");
|
||||||
|
if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
|
||||||
|
{
|
||||||
|
if (trans != NULL)
|
||||||
|
{
|
||||||
|
*trans = info_ptr->trans;
|
||||||
|
retval |= PNG_INFO_tRNS;
|
||||||
|
}
|
||||||
|
if (trans_values != NULL)
|
||||||
|
*trans_values = &(info_ptr->trans_values);
|
||||||
|
}
|
||||||
|
else /* if (info_ptr->color_type != PNG_COLOR_TYPE_PALETTE) */
|
||||||
|
{
|
||||||
|
if (trans_values != NULL)
|
||||||
|
{
|
||||||
|
*trans_values = &(info_ptr->trans_values);
|
||||||
|
retval |= PNG_INFO_tRNS;
|
||||||
|
}
|
||||||
|
if(trans != NULL)
|
||||||
|
*trans = NULL;
|
||||||
|
}
|
||||||
|
if(num_trans != NULL)
|
||||||
|
{
|
||||||
|
*num_trans = info_ptr->num_trans;
|
||||||
|
retval |= PNG_INFO_tRNS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (retval);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
360
thirdparty/libpng/pngmem.c
vendored
Normal file
360
thirdparty/libpng/pngmem.c
vendored
Normal file
@ -0,0 +1,360 @@
|
|||||||
|
|
||||||
|
/* pngmem.c - stub functions for memory allocation
|
||||||
|
*
|
||||||
|
* libpng 1.0.1
|
||||||
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
|
* March 9, 1998
|
||||||
|
*
|
||||||
|
* This file provides a location for all memory allocation. Users which
|
||||||
|
* need special memory handling are expected to modify the code in this file
|
||||||
|
* to meet their needs. See the instructions at each function.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define PNG_INTERNAL
|
||||||
|
#include "png.h"
|
||||||
|
|
||||||
|
/* The following "hides" PNG_MALLOC and PNG_FREE thus allowing the pngtest
|
||||||
|
application to put a wrapper on top of them. */
|
||||||
|
#ifdef PNGTEST_MEMORY_DEBUG
|
||||||
|
#define PNG_MALLOC png_debug_malloc
|
||||||
|
#define PNG_FREE png_debug_free
|
||||||
|
#else
|
||||||
|
#define PNG_MALLOC png_malloc
|
||||||
|
#define PNG_FREE png_free
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Borland DOS special memory handler */
|
||||||
|
#if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__)
|
||||||
|
/* if you change this, be sure to change the one in png.h also */
|
||||||
|
|
||||||
|
/* Allocate memory for a png_struct. The malloc and memset can be replaced
|
||||||
|
by a single call to calloc() if this is thought to improve performance. */
|
||||||
|
png_voidp
|
||||||
|
png_create_struct(int type)
|
||||||
|
{
|
||||||
|
png_size_t size;
|
||||||
|
png_voidp struct_ptr;
|
||||||
|
|
||||||
|
if (type == PNG_STRUCT_INFO)
|
||||||
|
size = sizeof(png_info);
|
||||||
|
else if (type == PNG_STRUCT_PNG)
|
||||||
|
size = sizeof(png_struct);
|
||||||
|
else
|
||||||
|
return ((png_voidp)NULL);
|
||||||
|
|
||||||
|
if ((struct_ptr = (png_voidp)farmalloc(size)) != NULL)
|
||||||
|
{
|
||||||
|
png_memset(struct_ptr, 0, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (struct_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Free memory allocated by a png_create_struct() call */
|
||||||
|
void
|
||||||
|
png_destroy_struct(png_voidp struct_ptr)
|
||||||
|
{
|
||||||
|
if (struct_ptr != NULL)
|
||||||
|
{
|
||||||
|
farfree (struct_ptr);
|
||||||
|
struct_ptr = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Allocate memory. For reasonable files, size should never exceed
|
||||||
|
* 64K. However, zlib may allocate more then 64K if you don't tell
|
||||||
|
* it not to. See zconf.h and png.h for more information. zlib does
|
||||||
|
* need to allocate exactly 64K, so whatever you call here must
|
||||||
|
* have the ability to do that.
|
||||||
|
*
|
||||||
|
* Borland seems to have a problem in DOS mode for exactly 64K.
|
||||||
|
* It gives you a segment with an offset of 8 (perhaps to store it's
|
||||||
|
* memory stuff). zlib doesn't like this at all, so we have to
|
||||||
|
* detect and deal with it. This code should not be needed in
|
||||||
|
* Windows or OS/2 modes, and only in 16 bit mode. This code has
|
||||||
|
* been updated by Alexander Lehmann for version 0.89 to waste less
|
||||||
|
* memory.
|
||||||
|
*
|
||||||
|
* Note that we can't use png_size_t for the "size" declaration,
|
||||||
|
* since on some systems a png_size_t is a 16-bit quantity, and as a
|
||||||
|
* result, we would be truncating potentially larger memory requests
|
||||||
|
* (which should cause a fatal error) and introducing major problems.
|
||||||
|
*/
|
||||||
|
png_voidp
|
||||||
|
PNG_MALLOC(png_structp png_ptr, png_uint_32 size)
|
||||||
|
{
|
||||||
|
png_voidp ret;
|
||||||
|
if (png_ptr == NULL || size == 0)
|
||||||
|
return ((png_voidp)NULL);
|
||||||
|
|
||||||
|
#ifdef PNG_MAX_MALLOC_64K
|
||||||
|
if (size > (png_uint_32)65536L)
|
||||||
|
png_error(png_ptr, "Cannot Allocate > 64K");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (size == (png_uint_32)65536L)
|
||||||
|
{
|
||||||
|
if (png_ptr->offset_table == NULL)
|
||||||
|
{
|
||||||
|
/* try to see if we need to do any of this fancy stuff */
|
||||||
|
ret = farmalloc(size);
|
||||||
|
if (ret == NULL || ((png_size_t)ret & 0xffff))
|
||||||
|
{
|
||||||
|
int num_blocks;
|
||||||
|
png_uint_32 total_size;
|
||||||
|
png_bytep table;
|
||||||
|
int i;
|
||||||
|
png_byte huge * hptr;
|
||||||
|
|
||||||
|
if (ret != NULL)
|
||||||
|
{
|
||||||
|
farfree(ret);
|
||||||
|
ret = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
num_blocks = (int)(1 << (png_ptr->zlib_window_bits - 14));
|
||||||
|
if (num_blocks < 1)
|
||||||
|
num_blocks = 1;
|
||||||
|
if (png_ptr->zlib_mem_level >= 7)
|
||||||
|
num_blocks += (int)(1 << (png_ptr->zlib_mem_level - 7));
|
||||||
|
else
|
||||||
|
num_blocks++;
|
||||||
|
|
||||||
|
total_size = ((png_uint_32)65536L) * (png_uint_32)num_blocks+16;
|
||||||
|
|
||||||
|
table = farmalloc(total_size);
|
||||||
|
|
||||||
|
if (table == NULL)
|
||||||
|
{
|
||||||
|
png_error(png_ptr, "Out Of Memory."); /* Note "O" and "M" */
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((png_size_t)table & 0xfff0)
|
||||||
|
{
|
||||||
|
png_error(png_ptr, "Farmalloc didn't return normalized pointer");
|
||||||
|
}
|
||||||
|
|
||||||
|
png_ptr->offset_table = table;
|
||||||
|
png_ptr->offset_table_ptr = farmalloc(num_blocks *
|
||||||
|
sizeof (png_bytep));
|
||||||
|
|
||||||
|
if (png_ptr->offset_table_ptr == NULL)
|
||||||
|
{
|
||||||
|
png_error(png_ptr, "Out Of memory.");
|
||||||
|
}
|
||||||
|
|
||||||
|
hptr = (png_byte huge *)table;
|
||||||
|
if ((png_size_t)hptr & 0xf)
|
||||||
|
{
|
||||||
|
hptr = (png_byte huge *)((long)(hptr) & 0xfffffff0L);
|
||||||
|
hptr += 16L;
|
||||||
|
}
|
||||||
|
for (i = 0; i < num_blocks; i++)
|
||||||
|
{
|
||||||
|
png_ptr->offset_table_ptr[i] = (png_bytep)hptr;
|
||||||
|
hptr += (png_uint_32)65536L;
|
||||||
|
}
|
||||||
|
|
||||||
|
png_ptr->offset_table_number = num_blocks;
|
||||||
|
png_ptr->offset_table_count = 0;
|
||||||
|
png_ptr->offset_table_count_free = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (png_ptr->offset_table_count >= png_ptr->offset_table_number)
|
||||||
|
png_error(png_ptr, "Out of Memory.");
|
||||||
|
|
||||||
|
ret = png_ptr->offset_table_ptr[png_ptr->offset_table_count++];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ret = farmalloc(size);
|
||||||
|
|
||||||
|
if (ret == NULL)
|
||||||
|
{
|
||||||
|
png_error(png_ptr, "Out of memory."); /* Note "o" and "m" */
|
||||||
|
}
|
||||||
|
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* free a pointer allocated by PNG_MALLOC(). In the default
|
||||||
|
configuration, png_ptr is not used, but is passed in case it
|
||||||
|
is needed. If ptr is NULL, return without taking any action. */
|
||||||
|
void
|
||||||
|
PNG_FREE(png_structp png_ptr, png_voidp ptr)
|
||||||
|
{
|
||||||
|
if (png_ptr == NULL || ptr == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (png_ptr->offset_table != NULL)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < png_ptr->offset_table_count; i++)
|
||||||
|
{
|
||||||
|
if (ptr == png_ptr->offset_table_ptr[i])
|
||||||
|
{
|
||||||
|
ptr = NULL;
|
||||||
|
png_ptr->offset_table_count_free++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (png_ptr->offset_table_count_free == png_ptr->offset_table_count)
|
||||||
|
{
|
||||||
|
farfree(png_ptr->offset_table);
|
||||||
|
farfree(png_ptr->offset_table_ptr);
|
||||||
|
png_ptr->offset_table = NULL;
|
||||||
|
png_ptr->offset_table_ptr = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ptr != NULL)
|
||||||
|
{
|
||||||
|
farfree(ptr);
|
||||||
|
ptr = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#else /* Not the Borland DOS special memory handler */
|
||||||
|
|
||||||
|
/* Allocate memory for a png_struct or a png_info. The malloc and
|
||||||
|
memset can be replaced by a single call to calloc() if this is thought
|
||||||
|
to improve performance noticably.*/
|
||||||
|
png_voidp
|
||||||
|
png_create_struct(int type)
|
||||||
|
{
|
||||||
|
png_size_t size;
|
||||||
|
png_voidp struct_ptr;
|
||||||
|
|
||||||
|
if (type == PNG_STRUCT_INFO)
|
||||||
|
size = sizeof(png_info);
|
||||||
|
else if (type == PNG_STRUCT_PNG)
|
||||||
|
size = sizeof(png_struct);
|
||||||
|
else
|
||||||
|
return ((png_voidp)NULL);
|
||||||
|
|
||||||
|
#if defined(__TURBOC__) && !defined(__FLAT__)
|
||||||
|
if ((struct_ptr = (png_voidp)farmalloc(size)) != NULL)
|
||||||
|
#else
|
||||||
|
# if defined(_MSC_VER) && defined(MAXSEG_64K)
|
||||||
|
if ((struct_ptr = (png_voidp)halloc(size,1)) != NULL)
|
||||||
|
# else
|
||||||
|
if ((struct_ptr = (png_voidp)malloc(size)) != NULL)
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
png_memset(struct_ptr, 0, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (struct_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Free memory allocated by a png_create_struct() call */
|
||||||
|
void
|
||||||
|
png_destroy_struct(png_voidp struct_ptr)
|
||||||
|
{
|
||||||
|
if (struct_ptr != NULL)
|
||||||
|
{
|
||||||
|
#if defined(__TURBOC__) && !defined(__FLAT__)
|
||||||
|
farfree(struct_ptr);
|
||||||
|
#else
|
||||||
|
# if defined(_MSC_VER) && defined(MAXSEG_64K)
|
||||||
|
hfree(struct_ptr);
|
||||||
|
# else
|
||||||
|
free(struct_ptr);
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Allocate memory. For reasonable files, size should never exceed
|
||||||
|
64K. However, zlib may allocate more then 64K if you don't tell
|
||||||
|
it not to. See zconf.h and png.h for more information. zlib does
|
||||||
|
need to allocate exactly 64K, so whatever you call here must
|
||||||
|
have the ability to do that. */
|
||||||
|
|
||||||
|
png_voidp
|
||||||
|
PNG_MALLOC(png_structp png_ptr, png_uint_32 size)
|
||||||
|
{
|
||||||
|
png_voidp ret;
|
||||||
|
|
||||||
|
if (png_ptr == NULL || size == 0)
|
||||||
|
return ((png_voidp)NULL);
|
||||||
|
|
||||||
|
#ifdef PNG_MAX_MALLOC_64K
|
||||||
|
if (size > (png_uint_32)65536L)
|
||||||
|
png_error(png_ptr, "Cannot Allocate > 64K");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__TURBOC__) && !defined(__FLAT__)
|
||||||
|
ret = farmalloc(size);
|
||||||
|
#else
|
||||||
|
# if defined(_MSC_VER) && defined(MAXSEG_64K)
|
||||||
|
ret = halloc(size, 1);
|
||||||
|
# else
|
||||||
|
ret = malloc((size_t)size);
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (ret == NULL)
|
||||||
|
{
|
||||||
|
png_error(png_ptr, "Out of Memory");
|
||||||
|
}
|
||||||
|
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Free a pointer allocated by PNG_MALLOC(). In the default
|
||||||
|
configuration, png_ptr is not used, but is passed in case it
|
||||||
|
is needed. If ptr is NULL, return without taking any action. */
|
||||||
|
void
|
||||||
|
PNG_FREE(png_structp png_ptr, png_voidp ptr)
|
||||||
|
{
|
||||||
|
if (png_ptr == NULL || ptr == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
#if defined(__TURBOC__) && !defined(__FLAT__)
|
||||||
|
farfree(ptr);
|
||||||
|
#else
|
||||||
|
# if defined(_MSC_VER) && defined(MAXSEG_64K)
|
||||||
|
hfree(ptr);
|
||||||
|
# else
|
||||||
|
free(ptr);
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* Not Borland DOS special memory handler */
|
||||||
|
|
||||||
|
png_voidp
|
||||||
|
png_memcpy_check (png_structp png_ptr, png_voidp s1, png_voidp s2,
|
||||||
|
png_uint_32 length)
|
||||||
|
{
|
||||||
|
png_size_t size;
|
||||||
|
|
||||||
|
size = (png_size_t)length;
|
||||||
|
if ((png_uint_32)size != length)
|
||||||
|
png_error(png_ptr,"Overflow in png_memcpy_check.");
|
||||||
|
|
||||||
|
return(png_memcpy (s1, s2, size));
|
||||||
|
}
|
||||||
|
|
||||||
|
png_voidp
|
||||||
|
png_memset_check (png_structp png_ptr, png_voidp s1, int value,
|
||||||
|
png_uint_32 length)
|
||||||
|
{
|
||||||
|
png_size_t size;
|
||||||
|
|
||||||
|
size = (png_size_t)length;
|
||||||
|
if ((png_uint_32)size != length)
|
||||||
|
png_error(png_ptr,"Overflow in png_memset_check.");
|
||||||
|
|
||||||
|
return (png_memset (s1, value, size));
|
||||||
|
|
||||||
|
}
|
1143
thirdparty/libpng/pngpread.c
vendored
Normal file
1143
thirdparty/libpng/pngpread.c
vendored
Normal file
File diff suppressed because it is too large
Load Diff
789
thirdparty/libpng/pngread.c
vendored
Normal file
789
thirdparty/libpng/pngread.c
vendored
Normal file
@ -0,0 +1,789 @@
|
|||||||
|
|
||||||
|
/* pngread.c - read a PNG file
|
||||||
|
*
|
||||||
|
* libpng 1.0.1
|
||||||
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
|
* March 9, 1998
|
||||||
|
*
|
||||||
|
* This file contains routines that an application calls directly to
|
||||||
|
* read a PNG file or stream.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define PNG_INTERNAL
|
||||||
|
#include "png.h"
|
||||||
|
|
||||||
|
/* Create a PNG structure for reading, and allocate any memory needed. */
|
||||||
|
png_structp
|
||||||
|
png_create_read_struct(png_const_charp user_png_ver, voidp error_ptr,
|
||||||
|
png_error_ptr error_fn, png_error_ptr warn_fn)
|
||||||
|
{
|
||||||
|
png_structp png_ptr;
|
||||||
|
#ifdef USE_FAR_KEYWORD
|
||||||
|
jmp_buf jmpbuf;
|
||||||
|
#endif
|
||||||
|
png_debug(1, "in png_create_read_struct\n");
|
||||||
|
if ((png_ptr = (png_structp)png_create_struct(PNG_STRUCT_PNG)) == NULL)
|
||||||
|
{
|
||||||
|
return (png_structp)NULL;
|
||||||
|
}
|
||||||
|
#ifdef USE_FAR_KEYWORD
|
||||||
|
if (setjmp(jmpbuf))
|
||||||
|
#else
|
||||||
|
if (setjmp(png_ptr->jmpbuf))
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
png_free(png_ptr, png_ptr->zbuf);
|
||||||
|
png_destroy_struct(png_ptr);
|
||||||
|
return (png_structp)NULL;
|
||||||
|
}
|
||||||
|
#ifdef USE_FAR_KEYWORD
|
||||||
|
png_memcpy(png_ptr->jmpbuf,jmpbuf,sizeof(jmp_buf));
|
||||||
|
#endif
|
||||||
|
png_set_error_fn(png_ptr, error_ptr, error_fn, warn_fn);
|
||||||
|
|
||||||
|
/* Libpng 0.90 and later are binary incompatible with libpng 0.89, so
|
||||||
|
* we must recompile any applications that use any older library version.
|
||||||
|
* For versions after libpng 1.0, we will be compatible, so we need
|
||||||
|
* only check the first digit.
|
||||||
|
*/
|
||||||
|
if (user_png_ver == NULL || user_png_ver[0] != png_libpng_ver[0] ||
|
||||||
|
(user_png_ver[0] == '0' && user_png_ver[2] < '9'))
|
||||||
|
{
|
||||||
|
png_error(png_ptr,
|
||||||
|
"Incompatible libpng version in application and library");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* initialize zbuf - compression buffer */
|
||||||
|
png_ptr->zbuf_size = PNG_ZBUF_SIZE;
|
||||||
|
png_ptr->zbuf = (png_bytep)png_malloc(png_ptr,
|
||||||
|
(png_uint_32)png_ptr->zbuf_size);
|
||||||
|
png_ptr->zstream.zalloc = png_zalloc;
|
||||||
|
png_ptr->zstream.zfree = png_zfree;
|
||||||
|
png_ptr->zstream.opaque = (voidpf)png_ptr;
|
||||||
|
|
||||||
|
switch (inflateInit(&png_ptr->zstream))
|
||||||
|
{
|
||||||
|
case Z_OK: /* Do nothing */ break;
|
||||||
|
case Z_MEM_ERROR:
|
||||||
|
case Z_STREAM_ERROR: png_error(png_ptr, "zlib memory error"); break;
|
||||||
|
case Z_VERSION_ERROR: png_error(png_ptr, "zlib version error"); break;
|
||||||
|
default: png_error(png_ptr, "Unknown zlib error");
|
||||||
|
}
|
||||||
|
|
||||||
|
png_ptr->zstream.next_out = png_ptr->zbuf;
|
||||||
|
png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
|
||||||
|
|
||||||
|
png_set_read_fn(png_ptr, NULL, NULL);
|
||||||
|
|
||||||
|
return (png_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Initialize PNG structure for reading, and allocate any memory needed.
|
||||||
|
This interface is depreciated in favour of the png_create_read_struct(),
|
||||||
|
and it will eventually disappear. */
|
||||||
|
void
|
||||||
|
png_read_init(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
jmp_buf tmp_jmp; /* to save current jump buffer */
|
||||||
|
|
||||||
|
png_debug(1, "in png_read_init\n");
|
||||||
|
/* save jump buffer and error functions */
|
||||||
|
png_memcpy(tmp_jmp, png_ptr->jmpbuf, sizeof (jmp_buf));
|
||||||
|
|
||||||
|
/* reset all variables to 0 */
|
||||||
|
png_memset(png_ptr, 0, sizeof (png_struct));
|
||||||
|
|
||||||
|
/* restore jump buffer */
|
||||||
|
png_memcpy(png_ptr->jmpbuf, tmp_jmp, sizeof (jmp_buf));
|
||||||
|
|
||||||
|
/* initialize zbuf - compression buffer */
|
||||||
|
png_ptr->zbuf_size = PNG_ZBUF_SIZE;
|
||||||
|
png_ptr->zbuf = (png_bytep)png_malloc(png_ptr,
|
||||||
|
(png_uint_32)png_ptr->zbuf_size);
|
||||||
|
png_ptr->zstream.zalloc = png_zalloc;
|
||||||
|
png_ptr->zstream.zfree = png_zfree;
|
||||||
|
png_ptr->zstream.opaque = (voidpf)png_ptr;
|
||||||
|
|
||||||
|
switch (inflateInit(&png_ptr->zstream))
|
||||||
|
{
|
||||||
|
case Z_OK: /* Do nothing */ break;
|
||||||
|
case Z_MEM_ERROR:
|
||||||
|
case Z_STREAM_ERROR: png_error(png_ptr, "zlib memory"); break;
|
||||||
|
case Z_VERSION_ERROR: png_error(png_ptr, "zlib version"); break;
|
||||||
|
default: png_error(png_ptr, "Unknown zlib error");
|
||||||
|
}
|
||||||
|
|
||||||
|
png_ptr->zstream.next_out = png_ptr->zbuf;
|
||||||
|
png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
|
||||||
|
|
||||||
|
png_set_read_fn(png_ptr, NULL, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read the information before the actual image data. This has been
|
||||||
|
* changed in v0.90 to allow reading a file which already has the magic
|
||||||
|
* bytes read from the stream. You can tell libpng how many bytes have
|
||||||
|
* been read from the beginning of the stream (up to the maxumum of 8)
|
||||||
|
* via png_set_sig_bytes(), and we will only check the remaining bytes
|
||||||
|
* here. The application can then have access to the signature bytes we
|
||||||
|
* read if it is determined that this isn't a valid PNG file.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
png_read_info(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_read_info\n");
|
||||||
|
/* save jump buffer and error functions */
|
||||||
|
/* If we haven't checked all of the PNG signature bytes, do so now. */
|
||||||
|
if (png_ptr->sig_bytes < 8)
|
||||||
|
{
|
||||||
|
png_size_t num_checked = png_ptr->sig_bytes,
|
||||||
|
num_to_check = 8 - num_checked;
|
||||||
|
|
||||||
|
png_read_data(png_ptr, &(info_ptr->signature[num_checked]), num_to_check);
|
||||||
|
png_ptr->sig_bytes = 8;
|
||||||
|
|
||||||
|
if (png_sig_cmp(info_ptr->signature, num_checked, num_to_check))
|
||||||
|
{
|
||||||
|
if (num_checked < 4 &&
|
||||||
|
png_sig_cmp(info_ptr->signature, num_checked, num_to_check - 4))
|
||||||
|
png_error(png_ptr, "Not a PNG file");
|
||||||
|
else
|
||||||
|
png_error(png_ptr, "PNG file corrupted by ASCII conversion");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(;;)
|
||||||
|
{
|
||||||
|
png_byte chunk_length[4];
|
||||||
|
png_uint_32 length;
|
||||||
|
|
||||||
|
png_read_data(png_ptr, chunk_length, 4);
|
||||||
|
length = png_get_uint_32(chunk_length);
|
||||||
|
|
||||||
|
png_reset_crc(png_ptr);
|
||||||
|
png_crc_read(png_ptr, png_ptr->chunk_name, 4);
|
||||||
|
|
||||||
|
png_debug1(0, "Reading %s chunk.\n", png_ptr->chunk_name);
|
||||||
|
|
||||||
|
/* This should be a binary subdivision search or a hash for
|
||||||
|
* matching the chunk name rather than a linear search.
|
||||||
|
*/
|
||||||
|
if (!png_memcmp(png_ptr->chunk_name, png_IHDR, 4))
|
||||||
|
png_handle_IHDR(png_ptr, info_ptr, length);
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4))
|
||||||
|
png_handle_PLTE(png_ptr, info_ptr, length);
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4))
|
||||||
|
png_handle_IEND(png_ptr, info_ptr, length);
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
|
||||||
|
{
|
||||||
|
if (!(png_ptr->mode & PNG_HAVE_IHDR))
|
||||||
|
png_error(png_ptr, "Missing IHDR before IDAT");
|
||||||
|
else if (png_ptr->color_type == PNG_COLOR_TYPE_PALETTE &&
|
||||||
|
!(png_ptr->mode & PNG_HAVE_PLTE))
|
||||||
|
png_error(png_ptr, "Missing PLTE before IDAT");
|
||||||
|
|
||||||
|
png_ptr->idat_size = length;
|
||||||
|
png_ptr->mode |= PNG_HAVE_IDAT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#if defined(PNG_READ_bKGD_SUPPORTED)
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_bKGD, 4))
|
||||||
|
png_handle_bKGD(png_ptr, info_ptr, length);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_cHRM_SUPPORTED)
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_cHRM, 4))
|
||||||
|
png_handle_cHRM(png_ptr, info_ptr, length);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_gAMA_SUPPORTED)
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_gAMA, 4))
|
||||||
|
png_handle_gAMA(png_ptr, info_ptr, length);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_hIST_SUPPORTED)
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_hIST, 4))
|
||||||
|
png_handle_hIST(png_ptr, info_ptr, length);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_oFFs_SUPPORTED)
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_oFFs, 4))
|
||||||
|
png_handle_oFFs(png_ptr, info_ptr, length);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_pCAL_SUPPORTED)
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_pCAL, 4))
|
||||||
|
png_handle_pCAL(png_ptr, info_ptr, length);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_pHYs_SUPPORTED)
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_pHYs, 4))
|
||||||
|
png_handle_pHYs(png_ptr, info_ptr, length);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_sBIT_SUPPORTED)
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_sBIT, 4))
|
||||||
|
png_handle_sBIT(png_ptr, info_ptr, length);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_sRGB_SUPPORTED)
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_sRGB, 4))
|
||||||
|
png_handle_sRGB(png_ptr, info_ptr, length);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_tEXt_SUPPORTED)
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_tEXt, 4))
|
||||||
|
png_handle_tEXt(png_ptr, info_ptr, length);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_tIME_SUPPORTED)
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_tIME, 4))
|
||||||
|
png_handle_tIME(png_ptr, info_ptr, length);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_tRNS_SUPPORTED)
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_tRNS, 4))
|
||||||
|
png_handle_tRNS(png_ptr, info_ptr, length);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_zTXt_SUPPORTED)
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_zTXt, 4))
|
||||||
|
png_handle_zTXt(png_ptr, info_ptr, length);
|
||||||
|
#endif
|
||||||
|
else
|
||||||
|
png_handle_unknown(png_ptr, info_ptr, length);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* optional call to update the users info_ptr structure */
|
||||||
|
void
|
||||||
|
png_read_update_info(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_read_update_info\n");
|
||||||
|
/* save jump buffer and error functions */
|
||||||
|
if (!(png_ptr->flags & PNG_FLAG_ROW_INIT))
|
||||||
|
png_read_start_row(png_ptr);
|
||||||
|
png_read_transform_info(png_ptr, info_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Initialize palette, background, etc, after transformations
|
||||||
|
* are set, but before any reading takes place. This allows
|
||||||
|
* the user to obtail a gamma corrected palette, for example.
|
||||||
|
* If the user doesn't call this, we will do it ourselves.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
png_start_read_image(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_start_read_image\n");
|
||||||
|
/* save jump buffer and error functions */
|
||||||
|
if (!(png_ptr->flags & PNG_FLAG_ROW_INIT))
|
||||||
|
png_read_start_row(png_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
png_read_row(png_structp png_ptr, png_bytep row, png_bytep dsp_row)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
png_debug2(1, "in png_read_row (row %d, pass %d)\n",
|
||||||
|
png_ptr->row_number, png_ptr->pass);
|
||||||
|
/* save jump buffer and error functions */
|
||||||
|
if (!(png_ptr->flags & PNG_FLAG_ROW_INIT))
|
||||||
|
png_read_start_row(png_ptr);
|
||||||
|
|
||||||
|
#if defined(PNG_READ_INTERLACING_SUPPORTED)
|
||||||
|
/* if interlaced and we do not need a new row, combine row and return */
|
||||||
|
if (png_ptr->interlaced && (png_ptr->transformations & PNG_INTERLACE))
|
||||||
|
{
|
||||||
|
switch (png_ptr->pass)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
if (png_ptr->row_number & 7)
|
||||||
|
{
|
||||||
|
if (dsp_row != NULL)
|
||||||
|
png_combine_row(png_ptr, dsp_row,
|
||||||
|
png_pass_dsp_mask[png_ptr->pass]);
|
||||||
|
png_read_finish_row(png_ptr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
if ((png_ptr->row_number & 7) || png_ptr->width < 5)
|
||||||
|
{
|
||||||
|
if (dsp_row != NULL)
|
||||||
|
png_combine_row(png_ptr, dsp_row,
|
||||||
|
png_pass_dsp_mask[png_ptr->pass]);
|
||||||
|
png_read_finish_row(png_ptr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if ((png_ptr->row_number & 7) != 4)
|
||||||
|
{
|
||||||
|
if (dsp_row != NULL && (png_ptr->row_number & 4))
|
||||||
|
png_combine_row(png_ptr, dsp_row,
|
||||||
|
png_pass_dsp_mask[png_ptr->pass]);
|
||||||
|
png_read_finish_row(png_ptr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
if ((png_ptr->row_number & 3) || png_ptr->width < 3)
|
||||||
|
{
|
||||||
|
if (dsp_row != NULL)
|
||||||
|
png_combine_row(png_ptr, dsp_row,
|
||||||
|
png_pass_dsp_mask[png_ptr->pass]);
|
||||||
|
png_read_finish_row(png_ptr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
if ((png_ptr->row_number & 3) != 2)
|
||||||
|
{
|
||||||
|
if (dsp_row != NULL && (png_ptr->row_number & 2))
|
||||||
|
png_combine_row(png_ptr, dsp_row,
|
||||||
|
png_pass_dsp_mask[png_ptr->pass]);
|
||||||
|
png_read_finish_row(png_ptr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
if ((png_ptr->row_number & 1) || png_ptr->width < 2)
|
||||||
|
{
|
||||||
|
if (dsp_row != NULL)
|
||||||
|
png_combine_row(png_ptr, dsp_row,
|
||||||
|
png_pass_dsp_mask[png_ptr->pass]);
|
||||||
|
png_read_finish_row(png_ptr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
if (!(png_ptr->row_number & 1))
|
||||||
|
{
|
||||||
|
png_read_finish_row(png_ptr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (!(png_ptr->mode & PNG_HAVE_IDAT))
|
||||||
|
png_error(png_ptr, "Invalid attempt to read row data");
|
||||||
|
|
||||||
|
png_ptr->zstream.next_out = png_ptr->row_buf;
|
||||||
|
png_ptr->zstream.avail_out = (uInt)png_ptr->irowbytes;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (!(png_ptr->zstream.avail_in))
|
||||||
|
{
|
||||||
|
while (!png_ptr->idat_size)
|
||||||
|
{
|
||||||
|
png_byte chunk_length[4];
|
||||||
|
|
||||||
|
png_crc_finish(png_ptr, 0);
|
||||||
|
|
||||||
|
png_read_data(png_ptr, chunk_length, 4);
|
||||||
|
png_ptr->idat_size = png_get_uint_32(chunk_length);
|
||||||
|
|
||||||
|
png_reset_crc(png_ptr);
|
||||||
|
png_crc_read(png_ptr, png_ptr->chunk_name, 4);
|
||||||
|
if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
|
||||||
|
png_error(png_ptr, "Not enough image data");
|
||||||
|
}
|
||||||
|
png_ptr->zstream.avail_in = (uInt)png_ptr->zbuf_size;
|
||||||
|
png_ptr->zstream.next_in = png_ptr->zbuf;
|
||||||
|
if (png_ptr->zbuf_size > png_ptr->idat_size)
|
||||||
|
png_ptr->zstream.avail_in = (uInt)png_ptr->idat_size;
|
||||||
|
png_crc_read(png_ptr, png_ptr->zbuf,
|
||||||
|
(png_size_t)png_ptr->zstream.avail_in);
|
||||||
|
png_ptr->idat_size -= png_ptr->zstream.avail_in;
|
||||||
|
}
|
||||||
|
ret = inflate(&png_ptr->zstream, Z_PARTIAL_FLUSH);
|
||||||
|
if (ret == Z_STREAM_END)
|
||||||
|
{
|
||||||
|
if (png_ptr->zstream.avail_out || png_ptr->zstream.avail_in ||
|
||||||
|
png_ptr->idat_size)
|
||||||
|
png_error(png_ptr, "Extra compressed data");
|
||||||
|
png_ptr->mode |= PNG_AFTER_IDAT;
|
||||||
|
png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (ret != Z_OK)
|
||||||
|
png_error(png_ptr, png_ptr->zstream.msg ? png_ptr->zstream.msg :
|
||||||
|
"Decompression error");
|
||||||
|
|
||||||
|
} while (png_ptr->zstream.avail_out);
|
||||||
|
|
||||||
|
png_ptr->row_info.color_type = png_ptr->color_type;
|
||||||
|
png_ptr->row_info.width = png_ptr->iwidth;
|
||||||
|
png_ptr->row_info.channels = png_ptr->channels;
|
||||||
|
png_ptr->row_info.bit_depth = png_ptr->bit_depth;
|
||||||
|
png_ptr->row_info.pixel_depth = png_ptr->pixel_depth;
|
||||||
|
{
|
||||||
|
png_ptr->row_info.rowbytes = ((png_ptr->row_info.width *
|
||||||
|
(png_uint_32)png_ptr->row_info.pixel_depth + 7) >> 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
png_read_filter_row(png_ptr, &(png_ptr->row_info),
|
||||||
|
png_ptr->row_buf + 1, png_ptr->prev_row + 1,
|
||||||
|
(int)(png_ptr->row_buf[0]));
|
||||||
|
|
||||||
|
png_memcpy_check(png_ptr, png_ptr->prev_row, png_ptr->row_buf,
|
||||||
|
png_ptr->rowbytes + 1);
|
||||||
|
|
||||||
|
if (png_ptr->transformations)
|
||||||
|
png_do_read_transformations(png_ptr);
|
||||||
|
|
||||||
|
#if defined(PNG_READ_INTERLACING_SUPPORTED)
|
||||||
|
/* blow up interlaced rows to full size */
|
||||||
|
if (png_ptr->interlaced &&
|
||||||
|
(png_ptr->transformations & PNG_INTERLACE))
|
||||||
|
{
|
||||||
|
if (png_ptr->pass < 6)
|
||||||
|
png_do_read_interlace(&(png_ptr->row_info),
|
||||||
|
png_ptr->row_buf + 1, png_ptr->pass, png_ptr->transformations);
|
||||||
|
|
||||||
|
if (dsp_row != NULL)
|
||||||
|
png_combine_row(png_ptr, dsp_row,
|
||||||
|
png_pass_dsp_mask[png_ptr->pass]);
|
||||||
|
if (row != NULL)
|
||||||
|
png_combine_row(png_ptr, row,
|
||||||
|
png_pass_mask[png_ptr->pass]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
if (row != NULL)
|
||||||
|
png_combine_row(png_ptr, row, 0xff);
|
||||||
|
if (dsp_row != NULL)
|
||||||
|
png_combine_row(png_ptr, dsp_row, 0xff);
|
||||||
|
}
|
||||||
|
png_read_finish_row(png_ptr);
|
||||||
|
|
||||||
|
if (png_ptr->read_row_fn != NULL)
|
||||||
|
(*(png_ptr->read_row_fn))(png_ptr, png_ptr->row_number, png_ptr->pass);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read one or more rows of image data. If the image is interlaced,
|
||||||
|
* and png_set_interlace_handling() has been called, the rows need to
|
||||||
|
* contain the contents of the rows from the previous pass. If the
|
||||||
|
* image has alpha or transparency, and png_handle_alpha() has been
|
||||||
|
* called, the rows contents must be initialized to the contents of the
|
||||||
|
* screen.
|
||||||
|
*
|
||||||
|
* "row" holds the actual image, and pixels are placed in it
|
||||||
|
* as they arrive. If the image is displayed after each pass, it will
|
||||||
|
* appear to "sparkle" in. "display_row" can be used to display a
|
||||||
|
* "chunky" progressive image, with finer detail added as it becomes
|
||||||
|
* available. If you do not want this "chunky" display, you may pass
|
||||||
|
* NULL for display_row. If you do not want the sparkle display, and
|
||||||
|
* you have not called png_handle_alpha(), you may pass NULL for rows.
|
||||||
|
* If you have called png_handle_alpha(), and the image has either an
|
||||||
|
* alpha channel or a transparency chunk, you must provide a buffer for
|
||||||
|
* rows. In this case, you do not have to provide a display_row buffer
|
||||||
|
* also, but you may. If the image is not interlaced, or if you have
|
||||||
|
* not called png_set_interlace_handling(), the display_row buffer will
|
||||||
|
* be ignored, so pass NULL to it.
|
||||||
|
*/
|
||||||
|
|
||||||
|
void
|
||||||
|
png_read_rows(png_structp png_ptr, png_bytepp row,
|
||||||
|
png_bytepp display_row, png_uint_32 num_rows)
|
||||||
|
{
|
||||||
|
png_uint_32 i;
|
||||||
|
png_bytepp rp;
|
||||||
|
png_bytepp dp;
|
||||||
|
|
||||||
|
png_debug(1, "in png_read_rows\n");
|
||||||
|
/* save jump buffer and error functions */
|
||||||
|
rp = row;
|
||||||
|
dp = display_row;
|
||||||
|
for (i = 0; i < num_rows; i++)
|
||||||
|
{
|
||||||
|
png_bytep rptr;
|
||||||
|
png_bytep dptr;
|
||||||
|
|
||||||
|
if (rp != NULL)
|
||||||
|
rptr = *rp;
|
||||||
|
else
|
||||||
|
rptr = NULL;
|
||||||
|
if (dp != NULL)
|
||||||
|
dptr = *dp;
|
||||||
|
else
|
||||||
|
dptr = NULL;
|
||||||
|
png_read_row(png_ptr, rptr, dptr);
|
||||||
|
if (row != NULL)
|
||||||
|
rp++;
|
||||||
|
if (display_row != NULL)
|
||||||
|
dp++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read the entire image. If the image has an alpha channel or a tRNS
|
||||||
|
* chunk, and you have called png_handle_alpha(), you will need to
|
||||||
|
* initialize the image to the current image that PNG will be overlaying.
|
||||||
|
* We set the num_rows again here, in case it was incorrectly set in
|
||||||
|
* png_read_start_row() by a call to png_read_update_info() or
|
||||||
|
* png_start_read_image() if png_set_interlace_handling() wasn't called
|
||||||
|
* prior to either of these functions like it should have been. You can
|
||||||
|
* only call this function once. If you desire to have an image for
|
||||||
|
* each pass of a interlaced image, use png_read_rows() instead.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
png_read_image(png_structp png_ptr, png_bytepp image)
|
||||||
|
{
|
||||||
|
png_uint_32 i;
|
||||||
|
int pass, j;
|
||||||
|
png_bytepp rp;
|
||||||
|
|
||||||
|
png_debug(1, "in png_read_image\n");
|
||||||
|
/* save jump buffer and error functions */
|
||||||
|
pass = png_set_interlace_handling(png_ptr);
|
||||||
|
|
||||||
|
png_ptr->num_rows = png_ptr->height; /* Make sure this is set correctly */
|
||||||
|
|
||||||
|
for (j = 0; j < pass; j++)
|
||||||
|
{
|
||||||
|
rp = image;
|
||||||
|
for (i = 0; i < png_ptr->height; i++)
|
||||||
|
{
|
||||||
|
png_read_row(png_ptr, *rp, NULL);
|
||||||
|
rp++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Read the end of the PNG file. Will not read past the end of the
|
||||||
|
* file, will verify the end is accurate, and will read any comments
|
||||||
|
* or time information at the end of the file, if info is not NULL.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
png_read_end(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
png_byte chunk_length[4];
|
||||||
|
png_uint_32 length;
|
||||||
|
|
||||||
|
png_debug(1, "in png_read_end\n");
|
||||||
|
/* save jump buffer and error functions */
|
||||||
|
png_crc_finish(png_ptr, 0); /* Finish off CRC from last IDAT chunk */
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
png_read_data(png_ptr, chunk_length, 4);
|
||||||
|
length = png_get_uint_32(chunk_length);
|
||||||
|
|
||||||
|
png_reset_crc(png_ptr);
|
||||||
|
png_crc_read(png_ptr, png_ptr->chunk_name, 4);
|
||||||
|
|
||||||
|
png_debug1(0, "Reading %s chunk.\n", png_ptr->chunk_name);
|
||||||
|
|
||||||
|
if (!png_memcmp(png_ptr->chunk_name, png_IHDR, 4))
|
||||||
|
png_handle_IHDR(png_ptr, info_ptr, length);
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
|
||||||
|
{
|
||||||
|
/* Zero length IDATs are legal after the last IDAT has been
|
||||||
|
* read, but not after other chunks have been read.
|
||||||
|
*/
|
||||||
|
if (length > 0 || png_ptr->mode & PNG_AFTER_IDAT)
|
||||||
|
png_error(png_ptr, "Too many IDAT's found");
|
||||||
|
else
|
||||||
|
png_crc_finish(png_ptr, 0);
|
||||||
|
}
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_PLTE, 4))
|
||||||
|
png_handle_PLTE(png_ptr, info_ptr, length);
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4))
|
||||||
|
png_handle_IEND(png_ptr, info_ptr, length);
|
||||||
|
#if defined(PNG_READ_bKGD_SUPPORTED)
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_bKGD, 4))
|
||||||
|
png_handle_bKGD(png_ptr, info_ptr, length);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_cHRM_SUPPORTED)
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_cHRM, 4))
|
||||||
|
png_handle_cHRM(png_ptr, info_ptr, length);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_gAMA_SUPPORTED)
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_gAMA, 4))
|
||||||
|
png_handle_gAMA(png_ptr, info_ptr, length);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_hIST_SUPPORTED)
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_hIST, 4))
|
||||||
|
png_handle_hIST(png_ptr, info_ptr, length);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_oFFs_SUPPORTED)
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_oFFs, 4))
|
||||||
|
png_handle_oFFs(png_ptr, info_ptr, length);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_pCAL_SUPPORTED)
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_pCAL, 4))
|
||||||
|
png_handle_pCAL(png_ptr, info_ptr, length);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_pHYs_SUPPORTED)
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_pHYs, 4))
|
||||||
|
png_handle_pHYs(png_ptr, info_ptr, length);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_sBIT_SUPPORTED)
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_sBIT, 4))
|
||||||
|
png_handle_sBIT(png_ptr, info_ptr, length);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_sRGB_SUPPORTED)
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_sRGB, 4))
|
||||||
|
png_handle_sRGB(png_ptr, info_ptr, length);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_tEXt_SUPPORTED)
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_tEXt, 4))
|
||||||
|
png_handle_tEXt(png_ptr, info_ptr, length);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_tIME_SUPPORTED)
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_tIME, 4))
|
||||||
|
png_handle_tIME(png_ptr, info_ptr, length);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_tRNS_SUPPORTED)
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_tRNS, 4))
|
||||||
|
png_handle_tRNS(png_ptr, info_ptr, length);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_zTXt_SUPPORTED)
|
||||||
|
else if (!png_memcmp(png_ptr->chunk_name, png_zTXt, 4))
|
||||||
|
png_handle_zTXt(png_ptr, info_ptr, length);
|
||||||
|
#endif
|
||||||
|
else
|
||||||
|
png_handle_unknown(png_ptr, info_ptr, length);
|
||||||
|
} while (!(png_ptr->mode & PNG_HAVE_IEND));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* free all memory used by the read */
|
||||||
|
void
|
||||||
|
png_destroy_read_struct(png_structpp png_ptr_ptr, png_infopp info_ptr_ptr,
|
||||||
|
png_infopp end_info_ptr_ptr)
|
||||||
|
{
|
||||||
|
png_structp png_ptr = NULL;
|
||||||
|
png_infop info_ptr = NULL, end_info_ptr = NULL;
|
||||||
|
|
||||||
|
png_debug(1, "in png_destroy_read_struct\n");
|
||||||
|
/* save jump buffer and error functions */
|
||||||
|
if (png_ptr_ptr != NULL)
|
||||||
|
png_ptr = *png_ptr_ptr;
|
||||||
|
|
||||||
|
if (info_ptr_ptr != NULL)
|
||||||
|
info_ptr = *info_ptr_ptr;
|
||||||
|
|
||||||
|
if (end_info_ptr_ptr != NULL)
|
||||||
|
end_info_ptr = *end_info_ptr_ptr;
|
||||||
|
|
||||||
|
png_read_destroy(png_ptr, info_ptr, end_info_ptr);
|
||||||
|
|
||||||
|
if (info_ptr != NULL)
|
||||||
|
{
|
||||||
|
#if defined(PNG_READ_tEXt_SUPPORTED) || defined(PNG_READ_zTXt_SUPPORTED)
|
||||||
|
png_free(png_ptr, info_ptr->text);
|
||||||
|
#endif
|
||||||
|
png_destroy_struct((png_voidp)info_ptr);
|
||||||
|
*info_ptr_ptr = (png_infop)NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (end_info_ptr != NULL)
|
||||||
|
{
|
||||||
|
#if defined(PNG_READ_tEXt_SUPPORTED) || defined(PNG_READ_zTXt_SUPPORTED)
|
||||||
|
png_free(png_ptr, end_info_ptr->text);
|
||||||
|
#endif
|
||||||
|
png_destroy_struct((png_voidp)end_info_ptr);
|
||||||
|
*end_info_ptr_ptr = (png_infop)NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (png_ptr != NULL)
|
||||||
|
{
|
||||||
|
png_destroy_struct((png_voidp)png_ptr);
|
||||||
|
*png_ptr_ptr = (png_structp)NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* free all memory used by the read (old method) */
|
||||||
|
void
|
||||||
|
png_read_destroy(png_structp png_ptr, png_infop info_ptr, png_infop end_info_ptr)
|
||||||
|
{
|
||||||
|
jmp_buf tmp_jmp;
|
||||||
|
png_error_ptr error_fn;
|
||||||
|
png_error_ptr warning_fn;
|
||||||
|
png_voidp error_ptr;
|
||||||
|
|
||||||
|
png_debug(1, "in png_read_destroy\n");
|
||||||
|
/* save jump buffer and error functions */
|
||||||
|
if (info_ptr != NULL)
|
||||||
|
png_info_destroy(png_ptr, info_ptr);
|
||||||
|
|
||||||
|
if (end_info_ptr != NULL)
|
||||||
|
png_info_destroy(png_ptr, end_info_ptr);
|
||||||
|
|
||||||
|
png_free(png_ptr, png_ptr->zbuf);
|
||||||
|
png_free(png_ptr, png_ptr->row_buf);
|
||||||
|
png_free(png_ptr, png_ptr->prev_row);
|
||||||
|
#if defined(PNG_READ_DITHER_SUPPORTED)
|
||||||
|
png_free(png_ptr, png_ptr->palette_lookup);
|
||||||
|
png_free(png_ptr, png_ptr->dither_index);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_GAMMA_SUPPORTED)
|
||||||
|
png_free(png_ptr, png_ptr->gamma_table);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_BACKGROUND_SUPPORTED)
|
||||||
|
png_free(png_ptr, png_ptr->gamma_from_1);
|
||||||
|
png_free(png_ptr, png_ptr->gamma_to_1);
|
||||||
|
#endif
|
||||||
|
if (png_ptr->flags & PNG_FLAG_FREE_PALETTE)
|
||||||
|
png_zfree(png_ptr, png_ptr->palette);
|
||||||
|
#if defined(PNG_READ_BACKGROUND_SUPPORTED) && defined(PNG_READ_bKGD_SUPPORTED)
|
||||||
|
if (png_ptr->flags & PNG_FLAG_FREE_TRANS)
|
||||||
|
png_free(png_ptr, png_ptr->trans);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_hIST_SUPPORTED)
|
||||||
|
if (png_ptr->flags & PNG_FLAG_FREE_HIST)
|
||||||
|
png_free(png_ptr, png_ptr->hist);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_GAMMA_SUPPORTED)
|
||||||
|
if (png_ptr->gamma_16_table != NULL)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < (1 << (8 - png_ptr->gamma_shift)); i++)
|
||||||
|
{
|
||||||
|
png_free(png_ptr, png_ptr->gamma_16_table[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_BACKGROUND_SUPPORTED)
|
||||||
|
png_free(png_ptr, png_ptr->gamma_16_table);
|
||||||
|
if (png_ptr->gamma_16_from_1 != NULL)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < (1 << (8 - png_ptr->gamma_shift)); i++)
|
||||||
|
{
|
||||||
|
png_free(png_ptr, png_ptr->gamma_16_from_1[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
png_free(png_ptr, png_ptr->gamma_16_from_1);
|
||||||
|
if (png_ptr->gamma_16_to_1 != NULL)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < (1 << (8 - png_ptr->gamma_shift)); i++)
|
||||||
|
{
|
||||||
|
png_free(png_ptr, png_ptr->gamma_16_to_1[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
png_free(png_ptr, png_ptr->gamma_16_to_1);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
inflateEnd(&png_ptr->zstream);
|
||||||
|
#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
|
||||||
|
png_free(png_ptr, png_ptr->save_buffer);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Save the important info out of the png_struct, in case it is
|
||||||
|
* being used again.
|
||||||
|
*/
|
||||||
|
png_memcpy(tmp_jmp, png_ptr->jmpbuf, sizeof (jmp_buf));
|
||||||
|
|
||||||
|
error_fn = png_ptr->error_fn;
|
||||||
|
warning_fn = png_ptr->warning_fn;
|
||||||
|
error_ptr = png_ptr->error_ptr;
|
||||||
|
|
||||||
|
png_memset(png_ptr, 0, sizeof (png_struct));
|
||||||
|
|
||||||
|
png_ptr->error_fn = error_fn;
|
||||||
|
png_ptr->warning_fn = warning_fn;
|
||||||
|
png_ptr->error_ptr = error_ptr;
|
||||||
|
|
||||||
|
png_memcpy(png_ptr->jmpbuf, tmp_jmp, sizeof (jmp_buf));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
png_set_read_status_fn(png_structp png_ptr, png_read_status_ptr read_row_fn)
|
||||||
|
{
|
||||||
|
png_ptr->read_row_fn = read_row_fn;
|
||||||
|
}
|
145
thirdparty/libpng/pngrio.c
vendored
Normal file
145
thirdparty/libpng/pngrio.c
vendored
Normal file
@ -0,0 +1,145 @@
|
|||||||
|
|
||||||
|
/* pngrio.c - functions for data input
|
||||||
|
*
|
||||||
|
* libpng 1.0.1
|
||||||
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
|
* March 9, 1998
|
||||||
|
*
|
||||||
|
* This file provides a location for all input. Users which need
|
||||||
|
* special handling are expected to write a function which has the same
|
||||||
|
* arguments as this, and perform a similar function, but possibly has
|
||||||
|
* a different input method. Note that you shouldn't change this
|
||||||
|
* function, but rather write a replacement function and then make
|
||||||
|
* libpng use it at run time with png_set_read_fn(...).
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define PNG_INTERNAL
|
||||||
|
#include "png.h"
|
||||||
|
|
||||||
|
/* Read the data from whatever input you are using. The default routine
|
||||||
|
reads from a file pointer. Note that this routine sometimes gets called
|
||||||
|
with very small lengths, so you should implement some kind of simple
|
||||||
|
buffering if you are using unbuffered reads. This should never be asked
|
||||||
|
to read more then 64K on a 16 bit machine. */
|
||||||
|
void
|
||||||
|
png_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
||||||
|
{
|
||||||
|
png_debug1(4,"reading %d bytes\n", length);
|
||||||
|
if (png_ptr->read_data_fn != NULL)
|
||||||
|
(*(png_ptr->read_data_fn))(png_ptr, data, length);
|
||||||
|
else
|
||||||
|
png_error(png_ptr, "Call to NULL read function");
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !defined(PNG_NO_STDIO)
|
||||||
|
/* This is the function which does the actual reading of data. If you are
|
||||||
|
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
|
||||||
|
png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
||||||
|
{
|
||||||
|
png_size_t check;
|
||||||
|
|
||||||
|
/* fread() returns 0 on error, so it is OK to store this in a png_size_t
|
||||||
|
* instead of an int, which is what fread() actually returns.
|
||||||
|
*/
|
||||||
|
check = (png_size_t)fread(data, (png_size_t)1, length,
|
||||||
|
(FILE *)png_ptr->io_ptr);
|
||||||
|
|
||||||
|
if (check != length)
|
||||||
|
{
|
||||||
|
png_error(png_ptr, "Read Error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
/* this is the model-independent version. Since the standard I/O library
|
||||||
|
can't handle far buffers in the medium and small models, we have to copy
|
||||||
|
the data.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define NEAR_BUF_SIZE 1024
|
||||||
|
#define MIN(a,b) (a <= b ? a : b)
|
||||||
|
|
||||||
|
static void
|
||||||
|
png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
||||||
|
{
|
||||||
|
int check;
|
||||||
|
png_byte *n_data;
|
||||||
|
FILE *io_ptr;
|
||||||
|
|
||||||
|
/* Check if data really is near. If so, use usual code. */
|
||||||
|
n_data = (png_byte *)CVT_PTR_NOCHECK(data);
|
||||||
|
io_ptr = (FILE *)CVT_PTR(png_ptr->io_ptr);
|
||||||
|
if ((png_bytep)n_data == data)
|
||||||
|
{
|
||||||
|
check = fread(n_data, 1, length, io_ptr);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
png_byte buf[NEAR_BUF_SIZE];
|
||||||
|
png_size_t read, remaining, err;
|
||||||
|
check = 0;
|
||||||
|
remaining = length;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
read = MIN(NEAR_BUF_SIZE, remaining);
|
||||||
|
err = fread(buf, (png_size_t)1, read, io_ptr);
|
||||||
|
png_memcpy(data, buf, read); /* copy far buffer to near buffer */
|
||||||
|
if(err != read)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
check += err;
|
||||||
|
data += read;
|
||||||
|
remaining -= read;
|
||||||
|
}
|
||||||
|
while (remaining != 0);
|
||||||
|
}
|
||||||
|
if ((png_uint_32)check != (png_uint_32)length)
|
||||||
|
{
|
||||||
|
png_error(png_ptr, "read Error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This function allows the application to supply a new input function
|
||||||
|
for libpng if standard C streams aren't being used.
|
||||||
|
|
||||||
|
This function takes as its arguments:
|
||||||
|
png_ptr - pointer to a png input data structure
|
||||||
|
io_ptr - pointer to user supplied structure containing info about
|
||||||
|
the input functions. May be NULL.
|
||||||
|
read_data_fn - pointer to a new input function which takes as it's
|
||||||
|
arguments a pointer to a png_struct, a pointer to
|
||||||
|
a location where input data can be stored, and a 32-bit
|
||||||
|
unsigned int which is the number of bytes to be read.
|
||||||
|
To exit and output any fatal error messages the new write
|
||||||
|
function should call png_error(png_ptr, "Error msg"). */
|
||||||
|
void
|
||||||
|
png_set_read_fn(png_structp png_ptr, png_voidp io_ptr,
|
||||||
|
png_rw_ptr read_data_fn)
|
||||||
|
{
|
||||||
|
png_ptr->io_ptr = io_ptr;
|
||||||
|
|
||||||
|
#if !defined(PNG_NO_STDIO)
|
||||||
|
if (read_data_fn != NULL)
|
||||||
|
png_ptr->read_data_fn = read_data_fn;
|
||||||
|
else
|
||||||
|
png_ptr->read_data_fn = png_default_read_data;
|
||||||
|
#else
|
||||||
|
png_ptr->read_data_fn = read_data_fn;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* It is an error to write to a read device */
|
||||||
|
png_ptr->write_data_fn = NULL;
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_FLUSH_SUPPORTED)
|
||||||
|
png_ptr->output_flush_fn = NULL;
|
||||||
|
#endif /* PNG_WRITE_FLUSH_SUPPORTED */
|
||||||
|
}
|
||||||
|
|
3430
thirdparty/libpng/pngrtran.c
vendored
Normal file
3430
thirdparty/libpng/pngrtran.c
vendored
Normal file
File diff suppressed because it is too large
Load Diff
2245
thirdparty/libpng/pngrutil.c
vendored
Normal file
2245
thirdparty/libpng/pngrutil.c
vendored
Normal file
File diff suppressed because it is too large
Load Diff
380
thirdparty/libpng/pngset.c
vendored
Normal file
380
thirdparty/libpng/pngset.c
vendored
Normal file
@ -0,0 +1,380 @@
|
|||||||
|
|
||||||
|
/* pngset.c - storage of image information into info struct
|
||||||
|
*
|
||||||
|
* libpng 1.0.1
|
||||||
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
|
* March 9, 1998
|
||||||
|
*
|
||||||
|
* The functions here are used during reads to store data from the file
|
||||||
|
* into the info struct, and during writes to store application data
|
||||||
|
* into the info struct for writing into the file. This abstracts the
|
||||||
|
* info struct and allows us to change the structure in the future.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define PNG_INTERNAL
|
||||||
|
#include "png.h"
|
||||||
|
|
||||||
|
#if defined(PNG_READ_bKGD_SUPPORTED) || defined(PNG_WRITE_bKGD_SUPPORTED)
|
||||||
|
void
|
||||||
|
png_set_bKGD(png_structp png_ptr, png_infop info_ptr, png_color_16p background)
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s storage function\n", "bKGD");
|
||||||
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
png_memcpy(&(info_ptr->background), background, sizeof(png_color_16));
|
||||||
|
info_ptr->valid |= PNG_INFO_bKGD;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_cHRM_SUPPORTED) || defined(PNG_WRITE_cHRM_SUPPORTED)
|
||||||
|
void
|
||||||
|
png_set_cHRM(png_structp png_ptr, png_infop info_ptr,
|
||||||
|
double white_x, double white_y, double red_x, double red_y,
|
||||||
|
double green_x, double green_y, double blue_x, double blue_y)
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s storage function\n", "cHRM");
|
||||||
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
info_ptr->x_white = (float)white_x;
|
||||||
|
info_ptr->y_white = (float)white_y;
|
||||||
|
info_ptr->x_red = (float)red_x;
|
||||||
|
info_ptr->y_red = (float)red_y;
|
||||||
|
info_ptr->x_green = (float)green_x;
|
||||||
|
info_ptr->y_green = (float)green_y;
|
||||||
|
info_ptr->x_blue = (float)blue_x;
|
||||||
|
info_ptr->y_blue = (float)blue_y;
|
||||||
|
info_ptr->valid |= PNG_INFO_cHRM;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_gAMA_SUPPORTED) || defined(PNG_WRITE_gAMA_SUPPORTED)
|
||||||
|
void
|
||||||
|
png_set_gAMA(png_structp png_ptr, png_infop info_ptr, double file_gamma)
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s storage function\n", "gAMA");
|
||||||
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
info_ptr->gamma = (float)file_gamma;
|
||||||
|
info_ptr->valid |= PNG_INFO_gAMA;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_hIST_SUPPORTED) || defined(PNG_WRITE_hIST_SUPPORTED)
|
||||||
|
void
|
||||||
|
png_set_hIST(png_structp png_ptr, png_infop info_ptr, png_uint_16p hist)
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s storage function\n", "hIST");
|
||||||
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
info_ptr->hist = hist;
|
||||||
|
info_ptr->valid |= PNG_INFO_hIST;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void
|
||||||
|
png_set_IHDR(png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_uint_32 width, png_uint_32 height, int bit_depth,
|
||||||
|
int color_type, int interlace_type, int compression_type,
|
||||||
|
int filter_type)
|
||||||
|
{
|
||||||
|
int rowbytes_per_pixel;
|
||||||
|
png_debug1(1, "in %s storage function\n", "IHDR");
|
||||||
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
info_ptr->width = width;
|
||||||
|
info_ptr->height = height;
|
||||||
|
info_ptr->bit_depth = (png_byte)bit_depth;
|
||||||
|
info_ptr->color_type =(png_byte) color_type;
|
||||||
|
info_ptr->compression_type = (png_byte)compression_type;
|
||||||
|
info_ptr->filter_type = (png_byte)filter_type;
|
||||||
|
info_ptr->interlace_type = (png_byte)interlace_type;
|
||||||
|
if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
|
||||||
|
info_ptr->channels = 1;
|
||||||
|
else if (info_ptr->color_type & PNG_COLOR_MASK_COLOR)
|
||||||
|
info_ptr->channels = 3;
|
||||||
|
else
|
||||||
|
info_ptr->channels = 1;
|
||||||
|
if (info_ptr->color_type & PNG_COLOR_MASK_ALPHA)
|
||||||
|
info_ptr->channels++;
|
||||||
|
info_ptr->pixel_depth = (png_byte)(info_ptr->channels * info_ptr->bit_depth);
|
||||||
|
|
||||||
|
/* check for overflow */
|
||||||
|
rowbytes_per_pixel = (info_ptr->pixel_depth + 7) >> 3;
|
||||||
|
info_ptr->rowbytes = info_ptr->width * rowbytes_per_pixel;
|
||||||
|
if (( width > (png_uint_32)2147483647L/rowbytes_per_pixel))
|
||||||
|
{
|
||||||
|
png_warning(png_ptr,
|
||||||
|
"Width too large to process image data; rowbytes will overflow.");
|
||||||
|
info_ptr->rowbytes = (png_size_t)0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(PNG_READ_oFFs_SUPPORTED) || defined(PNG_WRITE_oFFs_SUPPORTED)
|
||||||
|
void
|
||||||
|
png_set_oFFs(png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_uint_32 offset_x, png_uint_32 offset_y, int unit_type)
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s storage function\n", "oFFs");
|
||||||
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
info_ptr->x_offset = offset_x;
|
||||||
|
info_ptr->y_offset = offset_y;
|
||||||
|
info_ptr->offset_unit_type = (png_byte)unit_type;
|
||||||
|
info_ptr->valid |= PNG_INFO_oFFs;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_pCAL_SUPPORTED) || defined(PNG_WRITE_pCAL_SUPPORTED)
|
||||||
|
void
|
||||||
|
png_set_pCAL(png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_charp purpose, png_int_32 X0, png_int_32 X1, int type, int nparams,
|
||||||
|
png_charp units, png_charpp params)
|
||||||
|
{
|
||||||
|
png_uint_32 length;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
png_debug1(1, "in %s storage function\n", "pCAL");
|
||||||
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
length = png_strlen(purpose) + 1;
|
||||||
|
png_debug1(3, "allocating purpose for info (%d bytes)\n", length);
|
||||||
|
info_ptr->pcal_purpose = (png_charp)png_malloc(png_ptr, length);
|
||||||
|
png_memcpy(info_ptr->pcal_purpose, purpose, (png_size_t)length);
|
||||||
|
|
||||||
|
png_debug(3, "storing X0, X1, type, and nparams in info\n");
|
||||||
|
info_ptr->pcal_X0 = X0;
|
||||||
|
info_ptr->pcal_X1 = X1;
|
||||||
|
info_ptr->pcal_type = (png_byte)type;
|
||||||
|
info_ptr->pcal_nparams = (png_byte)nparams;
|
||||||
|
|
||||||
|
length = png_strlen(units) + 1;
|
||||||
|
png_debug1(3, "allocating units for info (%d bytes)\n", length);
|
||||||
|
info_ptr->pcal_units = (png_charp)png_malloc(png_ptr, length);
|
||||||
|
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)));
|
||||||
|
info_ptr->pcal_params[nparams] = NULL;
|
||||||
|
|
||||||
|
for (i = 0; i < nparams; i++)
|
||||||
|
{
|
||||||
|
length = png_strlen(params[i]) + 1;
|
||||||
|
png_debug2(3, "allocating parameter %d for info (%d 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
info_ptr->valid |= PNG_INFO_pCAL;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_pHYs_SUPPORTED) || defined(PNG_WRITE_pHYs_SUPPORTED)
|
||||||
|
void
|
||||||
|
png_set_pHYs(png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_uint_32 res_x, png_uint_32 res_y, int unit_type)
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s storage function\n", "pHYs");
|
||||||
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
info_ptr->x_pixels_per_unit = res_x;
|
||||||
|
info_ptr->y_pixels_per_unit = res_y;
|
||||||
|
info_ptr->phys_unit_type = (png_byte)unit_type;
|
||||||
|
info_ptr->valid |= PNG_INFO_pHYs;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void
|
||||||
|
png_set_PLTE(png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_colorp palette, int num_palette)
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s storage function\n", "PLTE");
|
||||||
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
info_ptr->palette = palette;
|
||||||
|
info_ptr->num_palette = (png_uint_16)num_palette;
|
||||||
|
info_ptr->valid |= PNG_INFO_PLTE;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(PNG_READ_sBIT_SUPPORTED) || defined(PNG_WRITE_sBIT_SUPPORTED)
|
||||||
|
void
|
||||||
|
png_set_sBIT(png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_color_8p sig_bit)
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s storage function\n", "sBIT");
|
||||||
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
png_memcpy(&(info_ptr->sig_bit), sig_bit, sizeof (png_color_8));
|
||||||
|
info_ptr->valid |= PNG_INFO_sBIT;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_sRGB_SUPPORTED) || defined(PNG_WRITE_sRGB_SUPPORTED)
|
||||||
|
void
|
||||||
|
png_set_sRGB(png_structp png_ptr, png_infop info_ptr, int intent)
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s storage function\n", "sRGB");
|
||||||
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
info_ptr->srgb_intent = (png_byte)intent;
|
||||||
|
info_ptr->valid |= PNG_INFO_sRGB;
|
||||||
|
}
|
||||||
|
void
|
||||||
|
png_set_sRGB_gAMA_and_cHRM(png_structp png_ptr, png_infop info_ptr,
|
||||||
|
int intent)
|
||||||
|
{
|
||||||
|
#if defined(PNG_READ_gAMA_SUPPORTED) || defined(PNG_WRITE_gAMA_SUPPORTED)
|
||||||
|
float file_gamma;
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_cHRM_SUPPORTED) || defined(PNG_WRITE_cHRM_SUPPORTED)
|
||||||
|
float white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y;
|
||||||
|
#endif
|
||||||
|
png_debug1(1, "in %s storage function\n", "sRGB_gAMA_and_cHRM");
|
||||||
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
png_set_sRGB(png_ptr, info_ptr, intent);
|
||||||
|
|
||||||
|
#if defined(PNG_READ_gAMA_SUPPORTED) || defined(PNG_WRITE_gAMA_SUPPORTED)
|
||||||
|
file_gamma = (float).45;
|
||||||
|
png_set_gAMA(png_ptr, info_ptr, file_gamma);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_cHRM_SUPPORTED) || defined(PNG_WRITE_cHRM_SUPPORTED)
|
||||||
|
white_x = (float).3127;
|
||||||
|
white_y = (float).3290;
|
||||||
|
red_x = (float).64;
|
||||||
|
red_y = (float).33;
|
||||||
|
green_x = (float).30;
|
||||||
|
green_y = (float).60;
|
||||||
|
blue_x = (float).15;
|
||||||
|
blue_y = (float).06;
|
||||||
|
|
||||||
|
png_set_cHRM(png_ptr, info_ptr,
|
||||||
|
white_x, white_y, red_x, red_y, green_x, green_y, blue_x, blue_y);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_tEXt_SUPPORTED) || defined(PNG_WRITE_tEXt_SUPPORTED) || \
|
||||||
|
defined(PNG_READ_zTXt_SUPPORTED) || defined(PNG_WRITE_zTXt_SUPPORTED)
|
||||||
|
void
|
||||||
|
png_set_text(png_structp png_ptr, png_infop info_ptr, png_textp text_ptr,
|
||||||
|
int num_text)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
png_debug1(1, "in %s storage function\n", (png_ptr->chunk_name[0] == '\0' ?
|
||||||
|
"text" : (png_const_charp)png_ptr->chunk_name));
|
||||||
|
|
||||||
|
if (png_ptr == NULL || info_ptr == NULL || num_text == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* Make sure we have enough space in the "text" array in info_struct
|
||||||
|
* to hold all of the incoming text_ptr objects.
|
||||||
|
*/
|
||||||
|
if (info_ptr->num_text + num_text > info_ptr->max_text)
|
||||||
|
{
|
||||||
|
if (info_ptr->text != NULL)
|
||||||
|
{
|
||||||
|
png_textp old_text;
|
||||||
|
int old_max;
|
||||||
|
|
||||||
|
old_max = info_ptr->max_text;
|
||||||
|
info_ptr->max_text = info_ptr->num_text + num_text + 8;
|
||||||
|
old_text = info_ptr->text;
|
||||||
|
info_ptr->text = (png_textp)png_malloc(png_ptr,
|
||||||
|
(png_uint_32)(info_ptr->max_text * sizeof (png_text)));
|
||||||
|
png_memcpy(info_ptr->text, old_text, (png_size_t)(old_max *
|
||||||
|
sizeof(png_text)));
|
||||||
|
png_free(png_ptr, old_text);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
info_ptr->max_text = num_text + 8;
|
||||||
|
info_ptr->num_text = 0;
|
||||||
|
info_ptr->text = (png_textp)png_malloc(png_ptr,
|
||||||
|
(png_uint_32)(info_ptr->max_text * sizeof (png_text)));
|
||||||
|
}
|
||||||
|
png_debug1(3, "allocated %d entries for info_ptr->text\n",
|
||||||
|
info_ptr->max_text);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < num_text; i++)
|
||||||
|
{
|
||||||
|
png_textp textp = &(info_ptr->text[info_ptr->num_text]);
|
||||||
|
|
||||||
|
if (text_ptr[i].text == NULL)
|
||||||
|
text_ptr[i].text = (png_charp)"";
|
||||||
|
|
||||||
|
if (text_ptr[i].text[0] == '\0')
|
||||||
|
{
|
||||||
|
textp->text_length = 0;
|
||||||
|
textp->compression = PNG_TEXT_COMPRESSION_NONE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
textp->text_length = png_strlen(text_ptr[i].text);
|
||||||
|
textp->compression = text_ptr[i].compression;
|
||||||
|
}
|
||||||
|
textp->text = text_ptr[i].text;
|
||||||
|
textp->key = text_ptr[i].key;
|
||||||
|
info_ptr->num_text++;
|
||||||
|
png_debug1(3, "transferred text chunk %d\n", info_ptr->num_text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_tIME_SUPPORTED) || defined(PNG_WRITE_tIME_SUPPORTED)
|
||||||
|
void
|
||||||
|
png_set_tIME(png_structp png_ptr, png_infop info_ptr, png_timep mod_time)
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s storage function\n", "tIME");
|
||||||
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
png_memcpy(&(info_ptr->mod_time), mod_time, sizeof (png_time));
|
||||||
|
info_ptr->valid |= PNG_INFO_tIME;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_tRNS_SUPPORTED) || defined(PNG_WRITE_tRNS_SUPPORTED)
|
||||||
|
void
|
||||||
|
png_set_tRNS(png_structp png_ptr, png_infop info_ptr,
|
||||||
|
png_bytep trans, int num_trans, png_color_16p trans_values)
|
||||||
|
{
|
||||||
|
png_debug1(1, "in %s storage function\n", "tRNS");
|
||||||
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (trans != NULL)
|
||||||
|
{
|
||||||
|
info_ptr->trans = trans;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (trans_values != NULL)
|
||||||
|
{
|
||||||
|
png_memcpy(&(info_ptr->trans_values), trans_values,
|
||||||
|
sizeof(png_color_16));
|
||||||
|
if (num_trans == 0)
|
||||||
|
num_trans = 1;
|
||||||
|
}
|
||||||
|
info_ptr->num_trans = (png_uint_16)num_trans;
|
||||||
|
info_ptr->valid |= PNG_INFO_tRNS;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
1036
thirdparty/libpng/pngtest.c
vendored
Normal file
1036
thirdparty/libpng/pngtest.c
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
thirdparty/libpng/pngtest.png
vendored
Normal file
BIN
thirdparty/libpng/pngtest.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 8.4 KiB |
577
thirdparty/libpng/pngtrans.c
vendored
Normal file
577
thirdparty/libpng/pngtrans.c
vendored
Normal file
@ -0,0 +1,577 @@
|
|||||||
|
|
||||||
|
/* pngtrans.c - transforms the data in a row (used by both readers and writers)
|
||||||
|
*
|
||||||
|
* libpng 1.0.1
|
||||||
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
|
* March 9, 1998
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define PNG_INTERNAL
|
||||||
|
#include "png.h"
|
||||||
|
|
||||||
|
#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
|
||||||
|
/* turn on bgr to rgb mapping */
|
||||||
|
void
|
||||||
|
png_set_bgr(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_set_bgr\n");
|
||||||
|
png_ptr->transformations |= PNG_BGR;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
|
||||||
|
/* turn on 16 bit byte swapping */
|
||||||
|
void
|
||||||
|
png_set_swap(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_set_swap\n");
|
||||||
|
if (png_ptr->bit_depth == 16)
|
||||||
|
png_ptr->transformations |= PNG_SWAP_BYTES;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_PACK_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
|
||||||
|
/* turn on pixel packing */
|
||||||
|
void
|
||||||
|
png_set_packing(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_set_packing\n");
|
||||||
|
if (png_ptr->bit_depth < 8)
|
||||||
|
{
|
||||||
|
png_ptr->transformations |= PNG_PACK;
|
||||||
|
png_ptr->usr_bit_depth = 8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_PACKSWAP_SUPPORTED)||defined(PNG_WRITE_PACKSWAP_SUPPORTED)
|
||||||
|
/* turn on packed pixel swapping */
|
||||||
|
void
|
||||||
|
png_set_packswap(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_set_packswap\n");
|
||||||
|
if (png_ptr->bit_depth < 8)
|
||||||
|
png_ptr->transformations |= PNG_PACKSWAP;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_SHIFT_SUPPORTED) || defined(PNG_WRITE_SHIFT_SUPPORTED)
|
||||||
|
void
|
||||||
|
png_set_shift(png_structp png_ptr, png_color_8p true_bits)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_set_shift\n");
|
||||||
|
png_ptr->transformations |= PNG_SHIFT;
|
||||||
|
png_ptr->shift = *true_bits;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_INTERLACING_SUPPORTED) || \
|
||||||
|
defined(PNG_WRITE_INTERLACING_SUPPORTED)
|
||||||
|
int
|
||||||
|
png_set_interlace_handling(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_set_interlace handling\n");
|
||||||
|
if (png_ptr->interlaced)
|
||||||
|
{
|
||||||
|
png_ptr->transformations |= PNG_INTERLACE;
|
||||||
|
return (7);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (1);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_FILLER_SUPPORTED) || defined(PNG_WRITE_FILLER_SUPPORTED)
|
||||||
|
/* Add a filler byte on read, or remove a filler or alpha byte on write.
|
||||||
|
* The filler type has changed in v0.95 to allow future 2-byte fillers
|
||||||
|
* for 48-bit input data, as well as avoiding problems with some compilers
|
||||||
|
* which don't like bytes as parameters.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
png_set_filler(png_structp png_ptr, png_uint_32 filler, int filler_loc)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_set_filler\n");
|
||||||
|
png_ptr->transformations |= PNG_FILLER;
|
||||||
|
png_ptr->filler = (png_byte)filler;
|
||||||
|
if (filler_loc == PNG_FILLER_AFTER)
|
||||||
|
png_ptr->flags |= PNG_FLAG_FILLER_AFTER;
|
||||||
|
else
|
||||||
|
png_ptr->flags &= ~PNG_FLAG_FILLER_AFTER;
|
||||||
|
|
||||||
|
/* This should probably go in the "do_filler" routine */
|
||||||
|
if (png_ptr->color_type == PNG_COLOR_TYPE_RGB && png_ptr->bit_depth == 8)
|
||||||
|
{
|
||||||
|
png_ptr->usr_channels = 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_SWAP_ALPHA_SUPPORTED) || \
|
||||||
|
defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)
|
||||||
|
void
|
||||||
|
png_set_swap_alpha(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_set_swap_alpha\n");
|
||||||
|
png_ptr->transformations |= PNG_SWAP_ALPHA;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_INVERT_ALPHA_SUPPORTED) || \
|
||||||
|
defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
|
||||||
|
void
|
||||||
|
png_set_invert_alpha(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_set_invert_alpha\n");
|
||||||
|
png_ptr->transformations |= PNG_INVERT_ALPHA;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_INVERT_SUPPORTED) || defined(PNG_WRITE_INVERT_SUPPORTED)
|
||||||
|
void
|
||||||
|
png_set_invert_mono(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_set_invert_mono\n");
|
||||||
|
png_ptr->transformations |= PNG_INVERT_MONO;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* invert monocrome grayscale data */
|
||||||
|
void
|
||||||
|
png_do_invert(png_row_infop row_info, png_bytep row)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_do_invert\n");
|
||||||
|
if (row_info->bit_depth == 1 &&
|
||||||
|
#if defined(PNG_USELESS_TESTS_SUPPORTED)
|
||||||
|
row != NULL && row_info != NULL &&
|
||||||
|
#endif
|
||||||
|
row_info->color_type == PNG_COLOR_TYPE_GRAY)
|
||||||
|
{
|
||||||
|
png_bytep rp;
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
for (i = 0, rp = row; i < row_info->rowbytes; i++, rp++)
|
||||||
|
{
|
||||||
|
*rp = (png_byte)(~(*rp));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_SWAP_SUPPORTED) || defined(PNG_WRITE_SWAP_SUPPORTED)
|
||||||
|
/* swaps byte order on 16 bit depth images */
|
||||||
|
void
|
||||||
|
png_do_swap(png_row_infop row_info, png_bytep row)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_do_swap\n");
|
||||||
|
if (
|
||||||
|
#if defined(PNG_USELESS_TESTS_SUPPORTED)
|
||||||
|
row != NULL && row_info != NULL &&
|
||||||
|
#endif
|
||||||
|
row_info->bit_depth == 16)
|
||||||
|
{
|
||||||
|
png_bytep rp;
|
||||||
|
png_byte t;
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
for (i = 0, rp = row;
|
||||||
|
i < row_info->width * row_info->channels;
|
||||||
|
i++, rp += 2)
|
||||||
|
{
|
||||||
|
t = *rp;
|
||||||
|
*rp = *(rp + 1);
|
||||||
|
*(rp + 1) = t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_PACKSWAP_SUPPORTED)||defined(PNG_WRITE_PACKSWAP_SUPPORTED)
|
||||||
|
static png_byte onebppswaptable[256] = {
|
||||||
|
0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0,
|
||||||
|
0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
|
||||||
|
0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8,
|
||||||
|
0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
|
||||||
|
0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4,
|
||||||
|
0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
|
||||||
|
0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC,
|
||||||
|
0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
|
||||||
|
0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2,
|
||||||
|
0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
|
||||||
|
0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA,
|
||||||
|
0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
|
||||||
|
0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6,
|
||||||
|
0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
|
||||||
|
0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE,
|
||||||
|
0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
|
||||||
|
0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1,
|
||||||
|
0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
|
||||||
|
0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9,
|
||||||
|
0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
|
||||||
|
0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5,
|
||||||
|
0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
|
||||||
|
0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED,
|
||||||
|
0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
|
||||||
|
0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3,
|
||||||
|
0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
|
||||||
|
0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB,
|
||||||
|
0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
|
||||||
|
0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7,
|
||||||
|
0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
|
||||||
|
0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF,
|
||||||
|
0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF
|
||||||
|
};
|
||||||
|
|
||||||
|
static png_byte twobppswaptable[256] = {
|
||||||
|
0x00, 0x40, 0x80, 0xC0, 0x10, 0x50, 0x90, 0xD0,
|
||||||
|
0x20, 0x60, 0xA0, 0xE0, 0x30, 0x70, 0xB0, 0xF0,
|
||||||
|
0x04, 0x44, 0x84, 0xC4, 0x14, 0x54, 0x94, 0xD4,
|
||||||
|
0x24, 0x64, 0xA4, 0xE4, 0x34, 0x74, 0xB4, 0xF4,
|
||||||
|
0x08, 0x48, 0x88, 0xC8, 0x18, 0x58, 0x98, 0xD8,
|
||||||
|
0x28, 0x68, 0xA8, 0xE8, 0x38, 0x78, 0xB8, 0xF8,
|
||||||
|
0x0C, 0x4C, 0x8C, 0xCC, 0x1C, 0x5C, 0x9C, 0xDC,
|
||||||
|
0x2C, 0x6C, 0xAC, 0xEC, 0x3C, 0x7C, 0xBC, 0xFC,
|
||||||
|
0x01, 0x41, 0x81, 0xC1, 0x11, 0x51, 0x91, 0xD1,
|
||||||
|
0x21, 0x61, 0xA1, 0xE1, 0x31, 0x71, 0xB1, 0xF1,
|
||||||
|
0x05, 0x45, 0x85, 0xC5, 0x15, 0x55, 0x95, 0xD5,
|
||||||
|
0x25, 0x65, 0xA5, 0xE5, 0x35, 0x75, 0xB5, 0xF5,
|
||||||
|
0x09, 0x49, 0x89, 0xC9, 0x19, 0x59, 0x99, 0xD9,
|
||||||
|
0x29, 0x69, 0xA9, 0xE9, 0x39, 0x79, 0xB9, 0xF9,
|
||||||
|
0x0D, 0x4D, 0x8D, 0xCD, 0x1D, 0x5D, 0x9D, 0xDD,
|
||||||
|
0x2D, 0x6D, 0xAD, 0xED, 0x3D, 0x7D, 0xBD, 0xFD,
|
||||||
|
0x02, 0x42, 0x82, 0xC2, 0x12, 0x52, 0x92, 0xD2,
|
||||||
|
0x22, 0x62, 0xA2, 0xE2, 0x32, 0x72, 0xB2, 0xF2,
|
||||||
|
0x06, 0x46, 0x86, 0xC6, 0x16, 0x56, 0x96, 0xD6,
|
||||||
|
0x26, 0x66, 0xA6, 0xE6, 0x36, 0x76, 0xB6, 0xF6,
|
||||||
|
0x0A, 0x4A, 0x8A, 0xCA, 0x1A, 0x5A, 0x9A, 0xDA,
|
||||||
|
0x2A, 0x6A, 0xAA, 0xEA, 0x3A, 0x7A, 0xBA, 0xFA,
|
||||||
|
0x0E, 0x4E, 0x8E, 0xCE, 0x1E, 0x5E, 0x9E, 0xDE,
|
||||||
|
0x2E, 0x6E, 0xAE, 0xEE, 0x3E, 0x7E, 0xBE, 0xFE,
|
||||||
|
0x03, 0x43, 0x83, 0xC3, 0x13, 0x53, 0x93, 0xD3,
|
||||||
|
0x23, 0x63, 0xA3, 0xE3, 0x33, 0x73, 0xB3, 0xF3,
|
||||||
|
0x07, 0x47, 0x87, 0xC7, 0x17, 0x57, 0x97, 0xD7,
|
||||||
|
0x27, 0x67, 0xA7, 0xE7, 0x37, 0x77, 0xB7, 0xF7,
|
||||||
|
0x0B, 0x4B, 0x8B, 0xCB, 0x1B, 0x5B, 0x9B, 0xDB,
|
||||||
|
0x2B, 0x6B, 0xAB, 0xEB, 0x3B, 0x7B, 0xBB, 0xFB,
|
||||||
|
0x0F, 0x4F, 0x8F, 0xCF, 0x1F, 0x5F, 0x9F, 0xDF,
|
||||||
|
0x2F, 0x6F, 0xAF, 0xEF, 0x3F, 0x7F, 0xBF, 0xFF
|
||||||
|
};
|
||||||
|
|
||||||
|
static png_byte fourbppswaptable[256] = {
|
||||||
|
0x00, 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70,
|
||||||
|
0x80, 0x90, 0xA0, 0xB0, 0xC0, 0xD0, 0xE0, 0xF0,
|
||||||
|
0x01, 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x71,
|
||||||
|
0x81, 0x91, 0xA1, 0xB1, 0xC1, 0xD1, 0xE1, 0xF1,
|
||||||
|
0x02, 0x12, 0x22, 0x32, 0x42, 0x52, 0x62, 0x72,
|
||||||
|
0x82, 0x92, 0xA2, 0xB2, 0xC2, 0xD2, 0xE2, 0xF2,
|
||||||
|
0x03, 0x13, 0x23, 0x33, 0x43, 0x53, 0x63, 0x73,
|
||||||
|
0x83, 0x93, 0xA3, 0xB3, 0xC3, 0xD3, 0xE3, 0xF3,
|
||||||
|
0x04, 0x14, 0x24, 0x34, 0x44, 0x54, 0x64, 0x74,
|
||||||
|
0x84, 0x94, 0xA4, 0xB4, 0xC4, 0xD4, 0xE4, 0xF4,
|
||||||
|
0x05, 0x15, 0x25, 0x35, 0x45, 0x55, 0x65, 0x75,
|
||||||
|
0x85, 0x95, 0xA5, 0xB5, 0xC5, 0xD5, 0xE5, 0xF5,
|
||||||
|
0x06, 0x16, 0x26, 0x36, 0x46, 0x56, 0x66, 0x76,
|
||||||
|
0x86, 0x96, 0xA6, 0xB6, 0xC6, 0xD6, 0xE6, 0xF6,
|
||||||
|
0x07, 0x17, 0x27, 0x37, 0x47, 0x57, 0x67, 0x77,
|
||||||
|
0x87, 0x97, 0xA7, 0xB7, 0xC7, 0xD7, 0xE7, 0xF7,
|
||||||
|
0x08, 0x18, 0x28, 0x38, 0x48, 0x58, 0x68, 0x78,
|
||||||
|
0x88, 0x98, 0xA8, 0xB8, 0xC8, 0xD8, 0xE8, 0xF8,
|
||||||
|
0x09, 0x19, 0x29, 0x39, 0x49, 0x59, 0x69, 0x79,
|
||||||
|
0x89, 0x99, 0xA9, 0xB9, 0xC9, 0xD9, 0xE9, 0xF9,
|
||||||
|
0x0A, 0x1A, 0x2A, 0x3A, 0x4A, 0x5A, 0x6A, 0x7A,
|
||||||
|
0x8A, 0x9A, 0xAA, 0xBA, 0xCA, 0xDA, 0xEA, 0xFA,
|
||||||
|
0x0B, 0x1B, 0x2B, 0x3B, 0x4B, 0x5B, 0x6B, 0x7B,
|
||||||
|
0x8B, 0x9B, 0xAB, 0xBB, 0xCB, 0xDB, 0xEB, 0xFB,
|
||||||
|
0x0C, 0x1C, 0x2C, 0x3C, 0x4C, 0x5C, 0x6C, 0x7C,
|
||||||
|
0x8C, 0x9C, 0xAC, 0xBC, 0xCC, 0xDC, 0xEC, 0xFC,
|
||||||
|
0x0D, 0x1D, 0x2D, 0x3D, 0x4D, 0x5D, 0x6D, 0x7D,
|
||||||
|
0x8D, 0x9D, 0xAD, 0xBD, 0xCD, 0xDD, 0xED, 0xFD,
|
||||||
|
0x0E, 0x1E, 0x2E, 0x3E, 0x4E, 0x5E, 0x6E, 0x7E,
|
||||||
|
0x8E, 0x9E, 0xAE, 0xBE, 0xCE, 0xDE, 0xEE, 0xFE,
|
||||||
|
0x0F, 0x1F, 0x2F, 0x3F, 0x4F, 0x5F, 0x6F, 0x7F,
|
||||||
|
0x8F, 0x9F, 0xAF, 0xBF, 0xCF, 0xDF, 0xEF, 0xFF
|
||||||
|
};
|
||||||
|
|
||||||
|
/* swaps pixel packing order within bytes */
|
||||||
|
void
|
||||||
|
png_do_packswap(png_row_infop row_info, png_bytep row)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_do_packswap\n");
|
||||||
|
if (
|
||||||
|
#if defined(PNG_USELESS_TESTS_SUPPORTED)
|
||||||
|
row != NULL && row_info != NULL &&
|
||||||
|
#endif
|
||||||
|
row_info->bit_depth < 8)
|
||||||
|
{
|
||||||
|
png_bytep rp, end, table;
|
||||||
|
|
||||||
|
end = row + row_info->rowbytes;
|
||||||
|
|
||||||
|
if (row_info->bit_depth == 1)
|
||||||
|
table = onebppswaptable;
|
||||||
|
else if (row_info->bit_depth == 2)
|
||||||
|
table = twobppswaptable;
|
||||||
|
else if (row_info->bit_depth == 4)
|
||||||
|
table = fourbppswaptable;
|
||||||
|
else
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (rp = row; rp < end; rp++)
|
||||||
|
*rp = table[*rp];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* PNG_READ_PACKSWAP_SUPPORTED or PNG_WRITE_PACKSWAP_SUPPORTED */
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_FILLER_SUPPORTED) || \
|
||||||
|
defined(PNG_READ_STRIP_ALPHA_SUPPORTED)
|
||||||
|
/* remove filler or alpha byte(s) */
|
||||||
|
void
|
||||||
|
png_do_strip_filler(png_row_infop row_info, png_bytep row, png_uint_32 flags)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_do_strip_filler\n");
|
||||||
|
#if defined(PNG_USELESS_TESTS_SUPPORTED)
|
||||||
|
if (row != NULL && row_info != NULL)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
if (row_info->color_type == PNG_COLOR_TYPE_RGB ||
|
||||||
|
row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
|
||||||
|
*/
|
||||||
|
if (row_info->channels == 4)
|
||||||
|
{
|
||||||
|
if (row_info->bit_depth == 8)
|
||||||
|
{
|
||||||
|
/* This converts from RGBX or RGBA to RGB */
|
||||||
|
if (flags & PNG_FLAG_FILLER_AFTER)
|
||||||
|
{
|
||||||
|
png_bytep sp, dp;
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
for (i = 1, sp = row + 4, dp = row + 3; i < row_info->width; i++)
|
||||||
|
{
|
||||||
|
*dp++ = *sp++;
|
||||||
|
*dp++ = *sp++;
|
||||||
|
*dp++ = *sp++;
|
||||||
|
sp++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* This converts from XRGB or ARGB to RGB */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
png_bytep sp, dp;
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
for (i = 0, sp = row, dp = row; i < row_info->width; i++)
|
||||||
|
{
|
||||||
|
sp++;
|
||||||
|
*dp++ = *sp++;
|
||||||
|
*dp++ = *sp++;
|
||||||
|
*dp++ = *sp++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
row_info->pixel_depth = 24;
|
||||||
|
row_info->rowbytes = row_info->width * 3;
|
||||||
|
}
|
||||||
|
else /* if (row_info->bit_depth == 16) */
|
||||||
|
{
|
||||||
|
if (flags & PNG_FLAG_FILLER_AFTER)
|
||||||
|
{
|
||||||
|
png_bytep sp, dp;
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
/* This converts from RRGGBBXX or RRGGBBAA to RRGGBB */
|
||||||
|
for (i = 1, sp = row + 8, dp = row + 6; i < row_info->width; i++)
|
||||||
|
{
|
||||||
|
/* This could be (although memcpy is probably slower):
|
||||||
|
png_memcpy(dp, sp, 6);
|
||||||
|
sp += 8;
|
||||||
|
dp += 6;
|
||||||
|
*/
|
||||||
|
*dp++ = *sp++;
|
||||||
|
*dp++ = *sp++;
|
||||||
|
*dp++ = *sp++;
|
||||||
|
*dp++ = *sp++;
|
||||||
|
*dp++ = *sp++;
|
||||||
|
*dp++ = *sp++;
|
||||||
|
sp += 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
png_bytep sp, dp;
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
/* This converts from XXRRGGBB or AARRGGBB to RRGGBB */
|
||||||
|
for (i = 0, sp = row + 2, dp = row; i < row_info->width; i++)
|
||||||
|
{
|
||||||
|
/* This could be (although memcpy is probably slower):
|
||||||
|
png_memcpy(dp, sp, 6);
|
||||||
|
sp += 8;
|
||||||
|
dp += 6;
|
||||||
|
*/
|
||||||
|
*dp++ = *sp++;
|
||||||
|
*dp++ = *sp++;
|
||||||
|
*dp++ = *sp++;
|
||||||
|
*dp++ = *sp++;
|
||||||
|
*dp++ = *sp++;
|
||||||
|
*dp++ = *sp++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
row_info->pixel_depth = 48;
|
||||||
|
row_info->rowbytes = row_info->width * 6;
|
||||||
|
}
|
||||||
|
row_info->channels = 3;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
else if (row_info->color_type == PNG_COLOR_TYPE_GRAY ||
|
||||||
|
row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
|
||||||
|
*/
|
||||||
|
else if (row_info->channels == 2)
|
||||||
|
{
|
||||||
|
if (row_info->bit_depth == 8)
|
||||||
|
{
|
||||||
|
/* This converts from GX or GA to G */
|
||||||
|
if (flags & PNG_FLAG_FILLER_AFTER)
|
||||||
|
{
|
||||||
|
png_bytep sp, dp;
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
for (i = 1, sp = row + 2, dp = row + 1; i < row_info->width; i++)
|
||||||
|
{
|
||||||
|
*dp++ = *sp++;
|
||||||
|
sp++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* This converts from XG or AG to G */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
png_bytep sp, dp;
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
for (i = 0, sp = row, dp = row; i < row_info->width; i++)
|
||||||
|
{
|
||||||
|
sp++;
|
||||||
|
*dp++ = *sp++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
row_info->pixel_depth = 8;
|
||||||
|
row_info->rowbytes = row_info->width;
|
||||||
|
}
|
||||||
|
else /* if (row_info->bit_depth == 16) */
|
||||||
|
{
|
||||||
|
if (flags & PNG_FLAG_FILLER_AFTER)
|
||||||
|
{
|
||||||
|
png_bytep sp, dp;
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
/* This converts from GGXX or GGAA to GG */
|
||||||
|
for (i = 1, sp = row + 4, dp = row + 2; i < row_info->width; i++)
|
||||||
|
{
|
||||||
|
*dp++ = *sp++;
|
||||||
|
*dp++ = *sp++;
|
||||||
|
sp += 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
png_bytep sp, dp;
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
/* This converts from XXGG or AAGG to GG */
|
||||||
|
for (i = 0, sp = row, dp = row; i < row_info->width; i++)
|
||||||
|
{
|
||||||
|
sp += 2;
|
||||||
|
*dp++ = *sp++;
|
||||||
|
*dp++ = *sp++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
row_info->pixel_depth = 16;
|
||||||
|
row_info->rowbytes = row_info->width * 2;
|
||||||
|
}
|
||||||
|
row_info->channels = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_READ_BGR_SUPPORTED) || defined(PNG_WRITE_BGR_SUPPORTED)
|
||||||
|
/* swaps red and blue bytes within a pixel */
|
||||||
|
void
|
||||||
|
png_do_bgr(png_row_infop row_info, png_bytep row)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_do_bgr\n");
|
||||||
|
if (
|
||||||
|
#if defined(PNG_USELESS_TESTS_SUPPORTED)
|
||||||
|
row != NULL && row_info != NULL &&
|
||||||
|
#endif
|
||||||
|
(row_info->color_type & PNG_COLOR_MASK_COLOR))
|
||||||
|
{
|
||||||
|
if (row_info->bit_depth == 8)
|
||||||
|
{
|
||||||
|
if (row_info->color_type == PNG_COLOR_TYPE_RGB)
|
||||||
|
{
|
||||||
|
png_bytep rp;
|
||||||
|
png_byte save;
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
for (i = 0, rp = row; i < row_info->width; i++, rp += 3)
|
||||||
|
{
|
||||||
|
save = *rp;
|
||||||
|
*rp = *(rp + 2);
|
||||||
|
*(rp + 2) = save;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
|
||||||
|
{
|
||||||
|
png_bytep rp;
|
||||||
|
png_byte save;
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
for (i = 0, rp = row; i < row_info->width; i++, rp += 4)
|
||||||
|
{
|
||||||
|
save = *rp;
|
||||||
|
*rp = *(rp + 2);
|
||||||
|
*(rp + 2) = save;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (row_info->bit_depth == 16)
|
||||||
|
{
|
||||||
|
if (row_info->color_type == PNG_COLOR_TYPE_RGB)
|
||||||
|
{
|
||||||
|
png_bytep rp;
|
||||||
|
png_byte save[2];
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
for (i = 0, rp = row; i < row_info->width; i++, rp += 6)
|
||||||
|
{
|
||||||
|
save[0] = *rp;
|
||||||
|
save[1] = *(rp + 1);
|
||||||
|
*rp = *(rp + 4);
|
||||||
|
*(rp + 1) = *(rp + 5);
|
||||||
|
*(rp + 4) = save[0];
|
||||||
|
*(rp + 5) = save[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
|
||||||
|
{
|
||||||
|
png_bytep rp;
|
||||||
|
png_byte save[2];
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
for (i = 0, rp = row; i < row_info->width; i++, rp += 8)
|
||||||
|
{
|
||||||
|
save[0] = *rp;
|
||||||
|
save[1] = *(rp + 1);
|
||||||
|
*rp = *(rp + 4);
|
||||||
|
*(rp + 1) = *(rp + 5);
|
||||||
|
*(rp + 4) = save[0];
|
||||||
|
*(rp + 5) = save[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* PNG_READ_BGR_SUPPORTED or PNG_WRITE_BGR_SUPPORTED */
|
||||||
|
|
207
thirdparty/libpng/pngwio.c
vendored
Normal file
207
thirdparty/libpng/pngwio.c
vendored
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
|
||||||
|
/* pngwio.c - functions for data output
|
||||||
|
*
|
||||||
|
* libpng 1.0.1
|
||||||
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
|
* March 9, 1998
|
||||||
|
*
|
||||||
|
* This file provides a location for all output. Users which need
|
||||||
|
* special handling are expected to write functions which have the same
|
||||||
|
* arguments as these, and perform similar functions, but possibly use
|
||||||
|
* different output methods. Note that you shouldn't change these
|
||||||
|
* functions, but rather write replacement functions and then change
|
||||||
|
* them at run time with png_set_write_fn(...).
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define PNG_INTERNAL
|
||||||
|
#include "png.h"
|
||||||
|
|
||||||
|
/* Write the data to whatever output you are using. The default routine
|
||||||
|
writes to a file pointer. Note that this routine sometimes gets called
|
||||||
|
with very small lengths, so you should implement some kind of simple
|
||||||
|
buffering if you are using unbuffered writes. This should never be asked
|
||||||
|
to write more then 64K on a 16 bit machine. */
|
||||||
|
|
||||||
|
void
|
||||||
|
png_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
||||||
|
{
|
||||||
|
if (png_ptr->write_data_fn != NULL )
|
||||||
|
(*(png_ptr->write_data_fn))(png_ptr, data, length);
|
||||||
|
else
|
||||||
|
png_error(png_ptr, "Call to NULL write function");
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !defined(PNG_NO_STDIO)
|
||||||
|
/* This is the function which does the actual writing of data. If you are
|
||||||
|
not writing to a standard C stream, you should create a replacement
|
||||||
|
write_data function and use it at run time with png_set_write_fn(), rather
|
||||||
|
than changing the library. */
|
||||||
|
#ifndef USE_FAR_KEYWORD
|
||||||
|
static void
|
||||||
|
png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
||||||
|
{
|
||||||
|
png_uint_32 check;
|
||||||
|
|
||||||
|
check = fwrite(data, 1, length, (FILE *)(png_ptr->io_ptr));
|
||||||
|
if (check != length)
|
||||||
|
{
|
||||||
|
png_error(png_ptr, "Write Error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
/* this is the model-independent version. Since the standard I/O library
|
||||||
|
can't handle far buffers in the medium and small models, we have to copy
|
||||||
|
the data.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define NEAR_BUF_SIZE 1024
|
||||||
|
#define MIN(a,b) (a <= b ? a : b)
|
||||||
|
|
||||||
|
static void
|
||||||
|
png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
|
||||||
|
{
|
||||||
|
png_uint_32 check;
|
||||||
|
png_byte *near_data; /* Needs to be "png_byte *" instead of "png_bytep" */
|
||||||
|
FILE *io_ptr;
|
||||||
|
|
||||||
|
/* Check if data really is near. If so, use usual code. */
|
||||||
|
near_data = (png_byte *)CVT_PTR_NOCHECK(data);
|
||||||
|
io_ptr = (FILE *)CVT_PTR(png_ptr->io_ptr);
|
||||||
|
if ((png_bytep)near_data == data)
|
||||||
|
{
|
||||||
|
check = fwrite(near_data, 1, length, io_ptr);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
png_byte buf[NEAR_BUF_SIZE];
|
||||||
|
png_size_t written, remaining, err;
|
||||||
|
check = 0;
|
||||||
|
remaining = length;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
written = MIN(NEAR_BUF_SIZE, remaining);
|
||||||
|
png_memcpy(buf, data, written); /* copy far buffer to near buffer */
|
||||||
|
err = fwrite(buf, 1, written, io_ptr);
|
||||||
|
if (err != written)
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
check += err;
|
||||||
|
data += written;
|
||||||
|
remaining -= written;
|
||||||
|
}
|
||||||
|
while (remaining != 0);
|
||||||
|
}
|
||||||
|
if (check != length)
|
||||||
|
{
|
||||||
|
png_error(png_ptr, "Write Error");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This function is called to output any data pending writing (normally
|
||||||
|
to disk). After png_flush is called, there should be no data pending
|
||||||
|
writing in any buffers. */
|
||||||
|
#if defined(PNG_WRITE_FLUSH_SUPPORTED)
|
||||||
|
void
|
||||||
|
png_flush(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
if (png_ptr->output_flush_fn != NULL)
|
||||||
|
(*(png_ptr->output_flush_fn))(png_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !defined(PNG_NO_STDIO)
|
||||||
|
static void
|
||||||
|
png_default_flush(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
FILE *io_ptr;
|
||||||
|
io_ptr = (FILE *)CVT_PTR((png_ptr->io_ptr));
|
||||||
|
if (io_ptr != NULL)
|
||||||
|
fflush(io_ptr);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This function allows the application to supply new output functions for
|
||||||
|
libpng if standard C streams aren't being used.
|
||||||
|
|
||||||
|
This function takes as its arguments:
|
||||||
|
png_ptr - pointer to a png output data structure
|
||||||
|
io_ptr - pointer to user supplied structure containing info about
|
||||||
|
the output functions. May be NULL.
|
||||||
|
write_data_fn - pointer to a new output function which takes as its
|
||||||
|
arguments a pointer to a png_struct, a pointer to
|
||||||
|
data to be written, and a 32-bit unsigned int which is
|
||||||
|
the number of bytes to be written. The new write
|
||||||
|
function should call png_error(png_ptr, "Error msg")
|
||||||
|
to exit and output any fatal error messages.
|
||||||
|
flush_data_fn - pointer to a new flush function which takes as its
|
||||||
|
arguments a pointer to a png_struct. After a call to
|
||||||
|
the flush function, there should be no data in any buffers
|
||||||
|
or pending transmission. If the output method doesn't do
|
||||||
|
any buffering of ouput, a function prototype must still be
|
||||||
|
supplied although it doesn't have to do anything. If
|
||||||
|
PNG_WRITE_FLUSH_SUPPORTED is not defined at libpng compile
|
||||||
|
time, output_flush_fn will be ignored, although it must be
|
||||||
|
supplied for compatibility. */
|
||||||
|
void
|
||||||
|
png_set_write_fn(png_structp png_ptr, png_voidp io_ptr,
|
||||||
|
png_rw_ptr write_data_fn, png_flush_ptr output_flush_fn)
|
||||||
|
{
|
||||||
|
png_ptr->io_ptr = io_ptr;
|
||||||
|
|
||||||
|
#if !defined(PNG_NO_STDIO)
|
||||||
|
if (write_data_fn != NULL)
|
||||||
|
png_ptr->write_data_fn = write_data_fn;
|
||||||
|
else
|
||||||
|
png_ptr->write_data_fn = png_default_write_data;
|
||||||
|
#else
|
||||||
|
png_ptr->write_data_fn = write_data_fn;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_FLUSH_SUPPORTED)
|
||||||
|
#if !defined(PNG_NO_STDIO)
|
||||||
|
if (output_flush_fn != NULL)
|
||||||
|
png_ptr->output_flush_fn = output_flush_fn;
|
||||||
|
else
|
||||||
|
png_ptr->output_flush_fn = png_default_flush;
|
||||||
|
#else
|
||||||
|
png_ptr->output_flush_fn = output_flush_fn;
|
||||||
|
#endif
|
||||||
|
#endif /* PNG_WRITE_FLUSH_SUPPORTED */
|
||||||
|
|
||||||
|
/* It is an error to read while writing a png file */
|
||||||
|
png_ptr->read_data_fn = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(USE_FAR_KEYWORD)
|
||||||
|
#if defined(_MSC_VER)
|
||||||
|
void *png_far_to_near(png_structp png_ptr,png_voidp ptr, int check)
|
||||||
|
{
|
||||||
|
void *near_ptr;
|
||||||
|
void FAR *far_ptr;
|
||||||
|
FP_OFF(near_ptr) = FP_OFF(ptr);
|
||||||
|
far_ptr = (void FAR *)near_ptr;
|
||||||
|
if(check != 0)
|
||||||
|
if(FP_SEG(ptr) != FP_SEG(far_ptr))
|
||||||
|
png_error(png_ptr,"segment lost in conversion");
|
||||||
|
return(near_ptr);
|
||||||
|
}
|
||||||
|
# else
|
||||||
|
void *png_far_to_near(png_structp png_ptr,png_voidp ptr, int check)
|
||||||
|
{
|
||||||
|
void *near_ptr;
|
||||||
|
void FAR *far_ptr;
|
||||||
|
near_ptr = (void FAR *)ptr;
|
||||||
|
far_ptr = (void FAR *)near_ptr;
|
||||||
|
if(check != 0)
|
||||||
|
if(far_ptr != ptr)
|
||||||
|
png_error(png_ptr,"segment lost in conversion");
|
||||||
|
return(near_ptr);
|
||||||
|
}
|
||||||
|
# endif
|
||||||
|
# endif
|
970
thirdparty/libpng/pngwrite.c
vendored
Normal file
970
thirdparty/libpng/pngwrite.c
vendored
Normal file
@ -0,0 +1,970 @@
|
|||||||
|
|
||||||
|
/* pngwrite.c - general routines to write a PNG file
|
||||||
|
*
|
||||||
|
* libpng 1.0.1
|
||||||
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
|
* March 9, 1998
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* get internal access to png.h */
|
||||||
|
#define PNG_INTERNAL
|
||||||
|
#include "png.h"
|
||||||
|
|
||||||
|
/* 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,
|
||||||
|
* and put it in the correct location here. If you want the chunk written
|
||||||
|
* after the image data, put it in png_write_end(). I strongly encurage
|
||||||
|
* you to supply a PNG_INFO_ flag, and check info_ptr->valid before writing
|
||||||
|
* the chunk, as that will keep the code from breaking if you want to just
|
||||||
|
* write a plain PNG file. If you have long comments, I suggest writing
|
||||||
|
* them in png_write_end(), and compressing them.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
png_write_info(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
#if defined(PNG_WRITE_tEXt_SUPPORTED) || defined(PNG_WRITE_zTXt_SUPPORTED)
|
||||||
|
int i;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
png_debug(1, "in png_write_info\n");
|
||||||
|
png_write_sig(png_ptr); /* write PNG signature */
|
||||||
|
/* write IHDR information. */
|
||||||
|
png_write_IHDR(png_ptr, info_ptr->width, info_ptr->height,
|
||||||
|
info_ptr->bit_depth, info_ptr->color_type, info_ptr->compression_type,
|
||||||
|
info_ptr->filter_type,
|
||||||
|
#if defined(PNG_WRITE_INTERLACING_SUPPORTED)
|
||||||
|
info_ptr->interlace_type);
|
||||||
|
#else
|
||||||
|
0);
|
||||||
|
#endif
|
||||||
|
/* the rest of these check to see if the valid field has the appropriate
|
||||||
|
flag set, and if it does, writes the chunk. */
|
||||||
|
#if defined(PNG_WRITE_gAMA_SUPPORTED)
|
||||||
|
if (info_ptr->valid & PNG_INFO_gAMA)
|
||||||
|
png_write_gAMA(png_ptr, info_ptr->gamma);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_WRITE_sRGB_SUPPORTED)
|
||||||
|
if (info_ptr->valid & PNG_INFO_sRGB)
|
||||||
|
png_write_sRGB(png_ptr, (int)info_ptr->srgb_intent);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_WRITE_sBIT_SUPPORTED)
|
||||||
|
if (info_ptr->valid & PNG_INFO_sBIT)
|
||||||
|
png_write_sBIT(png_ptr, &(info_ptr->sig_bit), info_ptr->color_type);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_WRITE_cHRM_SUPPORTED)
|
||||||
|
if (info_ptr->valid & PNG_INFO_cHRM)
|
||||||
|
png_write_cHRM(png_ptr,
|
||||||
|
info_ptr->x_white, info_ptr->y_white,
|
||||||
|
info_ptr->x_red, info_ptr->y_red,
|
||||||
|
info_ptr->x_green, info_ptr->y_green,
|
||||||
|
info_ptr->x_blue, info_ptr->y_blue);
|
||||||
|
#endif
|
||||||
|
if (info_ptr->valid & PNG_INFO_PLTE)
|
||||||
|
png_write_PLTE(png_ptr, info_ptr->palette,
|
||||||
|
(png_uint_32)info_ptr->num_palette);
|
||||||
|
else if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
|
||||||
|
png_error(png_ptr, "Valid palette required for paletted images\n");
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_tRNS_SUPPORTED)
|
||||||
|
if (info_ptr->valid & PNG_INFO_tRNS)
|
||||||
|
{
|
||||||
|
#if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
|
||||||
|
/* invert the alpha channel (in tRNS) */
|
||||||
|
if (png_ptr->transformations & PNG_INVERT_ALPHA &&
|
||||||
|
info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
|
||||||
|
{
|
||||||
|
int j;
|
||||||
|
for (j=0; j<(int)info_ptr->num_trans; j++)
|
||||||
|
info_ptr->trans[j] = 255 - info_ptr->trans[j];
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
png_write_tRNS(png_ptr, info_ptr->trans, &(info_ptr->trans_values),
|
||||||
|
info_ptr->num_trans, info_ptr->color_type);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_WRITE_bKGD_SUPPORTED)
|
||||||
|
if (info_ptr->valid & PNG_INFO_bKGD)
|
||||||
|
png_write_bKGD(png_ptr, &(info_ptr->background), info_ptr->color_type);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_WRITE_hIST_SUPPORTED)
|
||||||
|
if (info_ptr->valid & PNG_INFO_hIST)
|
||||||
|
png_write_hIST(png_ptr, info_ptr->hist, info_ptr->num_palette);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_WRITE_oFFs_SUPPORTED)
|
||||||
|
if (info_ptr->valid & PNG_INFO_oFFs)
|
||||||
|
png_write_oFFs(png_ptr, info_ptr->x_offset, info_ptr->y_offset,
|
||||||
|
info_ptr->offset_unit_type);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_WRITE_pCAL_SUPPORTED)
|
||||||
|
if (info_ptr->valid & PNG_INFO_pCAL)
|
||||||
|
png_write_pCAL(png_ptr, info_ptr->pcal_purpose, info_ptr->pcal_X0,
|
||||||
|
info_ptr->pcal_X1, info_ptr->pcal_type, info_ptr->pcal_nparams,
|
||||||
|
info_ptr->pcal_units, info_ptr->pcal_params);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_WRITE_pHYs_SUPPORTED)
|
||||||
|
if (info_ptr->valid & PNG_INFO_pHYs)
|
||||||
|
png_write_pHYs(png_ptr, info_ptr->x_pixels_per_unit,
|
||||||
|
info_ptr->y_pixels_per_unit, info_ptr->phys_unit_type);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_WRITE_tIME_SUPPORTED)
|
||||||
|
if (info_ptr->valid & PNG_INFO_tIME)
|
||||||
|
{
|
||||||
|
png_write_tIME(png_ptr, &(info_ptr->mod_time));
|
||||||
|
png_ptr->flags |= PNG_FLAG_WROTE_tIME;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_WRITE_tEXt_SUPPORTED) || defined(PNG_WRITE_zTXt_SUPPORTED)
|
||||||
|
/* Check to see if we need to write text chunks */
|
||||||
|
for (i = 0; i < info_ptr->num_text; i++)
|
||||||
|
{
|
||||||
|
png_debug2(2, "Writing header text chunk %d, type %d\n", i,
|
||||||
|
info_ptr->text[i].compression);
|
||||||
|
/* If we want a compressed text chunk */
|
||||||
|
if (info_ptr->text[i].compression >= PNG_TEXT_COMPRESSION_zTXt)
|
||||||
|
{
|
||||||
|
#if defined(PNG_WRITE_zTXt_SUPPORTED)
|
||||||
|
/* write compressed chunk */
|
||||||
|
png_write_zTXt(png_ptr, info_ptr->text[i].key,
|
||||||
|
info_ptr->text[i].text, info_ptr->text[i].text_length,
|
||||||
|
info_ptr->text[i].compression);
|
||||||
|
#else
|
||||||
|
png_warning(png_ptr, "Unable to write compressed text\n");
|
||||||
|
#endif
|
||||||
|
/* Mark this chunk as written */
|
||||||
|
info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_zTXt_WR;
|
||||||
|
}
|
||||||
|
else if (info_ptr->text[i].compression == PNG_TEXT_COMPRESSION_NONE)
|
||||||
|
{
|
||||||
|
#if defined(PNG_WRITE_tEXt_SUPPORTED)
|
||||||
|
/* write uncompressed chunk */
|
||||||
|
png_write_tEXt(png_ptr, info_ptr->text[i].key,
|
||||||
|
info_ptr->text[i].text, info_ptr->text[i].text_length);
|
||||||
|
#else
|
||||||
|
png_warning(png_ptr, "Unable to write uncompressed text\n");
|
||||||
|
#endif
|
||||||
|
/* Mark this chunk as written */
|
||||||
|
info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Writes the end of the PNG file. If you don't want to write comments or
|
||||||
|
* time information, you can pass NULL for info. If you already wrote these
|
||||||
|
* in png_write_info(), do not write them again here. If you have long
|
||||||
|
* comments, I suggest writing them here, and compressing them.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
png_write_end(png_structp png_ptr, png_infop info_ptr)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_write_end\n");
|
||||||
|
if (!(png_ptr->mode & PNG_HAVE_IDAT))
|
||||||
|
png_error(png_ptr, "No IDATs written into file");
|
||||||
|
|
||||||
|
/* see if user wants us to write information chunks */
|
||||||
|
if (info_ptr != NULL)
|
||||||
|
{
|
||||||
|
#if defined(PNG_WRITE_tEXt_SUPPORTED) || defined(PNG_WRITE_zTXt_SUPPORTED)
|
||||||
|
int i; /* local index variable */
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_WRITE_tIME_SUPPORTED)
|
||||||
|
/* check to see if user has supplied a time chunk */
|
||||||
|
if (info_ptr->valid & PNG_INFO_tIME &&
|
||||||
|
!(png_ptr->flags & PNG_FLAG_WROTE_tIME))
|
||||||
|
png_write_tIME(png_ptr, &(info_ptr->mod_time));
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_WRITE_tEXt_SUPPORTED) || defined(PNG_WRITE_zTXt_SUPPORTED)
|
||||||
|
/* loop through comment chunks */
|
||||||
|
for (i = 0; i < info_ptr->num_text; i++)
|
||||||
|
{
|
||||||
|
png_debug2(2, "Writing trailer text chunk %d, type %d\n", i,
|
||||||
|
info_ptr->text[i].compression);
|
||||||
|
if (info_ptr->text[i].compression >= PNG_TEXT_COMPRESSION_zTXt)
|
||||||
|
{
|
||||||
|
#if defined(PNG_WRITE_zTXt_SUPPORTED)
|
||||||
|
/* write compressed chunk */
|
||||||
|
png_write_zTXt(png_ptr, info_ptr->text[i].key,
|
||||||
|
info_ptr->text[i].text, info_ptr->text[i].text_length,
|
||||||
|
info_ptr->text[i].compression);
|
||||||
|
#else
|
||||||
|
png_warning(png_ptr, "Unable to write compressed text\n");
|
||||||
|
#endif
|
||||||
|
/* Mark this chunk as written */
|
||||||
|
info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_zTXt_WR;
|
||||||
|
}
|
||||||
|
else if (info_ptr->text[i].compression == PNG_TEXT_COMPRESSION_NONE)
|
||||||
|
{
|
||||||
|
#if defined(PNG_WRITE_tEXt_SUPPORTED)
|
||||||
|
/* write uncompressed chunk */
|
||||||
|
png_write_tEXt(png_ptr, info_ptr->text[i].key,
|
||||||
|
info_ptr->text[i].text, info_ptr->text[i].text_length);
|
||||||
|
#else
|
||||||
|
png_warning(png_ptr, "Unable to write uncompressed text\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Mark this chunk as written */
|
||||||
|
info_ptr->text[i].compression = PNG_TEXT_COMPRESSION_NONE_WR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
png_ptr->mode |= PNG_AFTER_IDAT;
|
||||||
|
|
||||||
|
/* write end of PNG file */
|
||||||
|
png_write_IEND(png_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(PNG_TIME_RFC1123_SUPPORTED)
|
||||||
|
/* Convert the supplied time into an RFC 1123 string suitable for use in
|
||||||
|
* a "Creation Time" or other text-based time string.
|
||||||
|
*/
|
||||||
|
png_charp
|
||||||
|
png_convert_to_rfc1123(png_structp png_ptr, png_timep ptime)
|
||||||
|
{
|
||||||
|
static PNG_CONST char short_months[12][4] =
|
||||||
|
{"Jan", "Feb", "Mar", "Apr", "May", "Jun",
|
||||||
|
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
|
||||||
|
|
||||||
|
if (png_ptr->time_buffer == NULL)
|
||||||
|
{
|
||||||
|
png_ptr->time_buffer = (png_charp)png_malloc(png_ptr, (png_uint_32)(29*
|
||||||
|
sizeof(char)));
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef USE_FAR_KEYWORD
|
||||||
|
{
|
||||||
|
char near_time_buf[29];
|
||||||
|
sprintf(near_time_buf, "%d %s %d %02d:%02d:%02d +0000",
|
||||||
|
ptime->day % 31, short_months[ptime->month],
|
||||||
|
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 % 31, short_months[ptime->month],
|
||||||
|
ptime->year, ptime->hour % 24, ptime->minute % 60,
|
||||||
|
ptime->second % 61);
|
||||||
|
#endif
|
||||||
|
return ((png_charp)png_ptr->time_buffer);
|
||||||
|
}
|
||||||
|
#endif /* PNG_TIME_RFC1123_SUPPORTED */
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_tIME_SUPPORTED)
|
||||||
|
void
|
||||||
|
png_convert_from_struct_tm(png_timep ptime, struct tm FAR * ttime)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_convert_from_struct_tm\n");
|
||||||
|
ptime->year = (png_uint_16)(1900 + ttime->tm_year);
|
||||||
|
ptime->month = (png_byte)(ttime->tm_mon + 1);
|
||||||
|
ptime->day = (png_byte)ttime->tm_mday;
|
||||||
|
ptime->hour = (png_byte)ttime->tm_hour;
|
||||||
|
ptime->minute = (png_byte)ttime->tm_min;
|
||||||
|
ptime->second = (png_byte)ttime->tm_sec;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
png_convert_from_time_t(png_timep ptime, time_t ttime)
|
||||||
|
{
|
||||||
|
struct tm *tbuf;
|
||||||
|
|
||||||
|
png_debug(1, "in png_convert_from_time_t\n");
|
||||||
|
tbuf = gmtime(&ttime);
|
||||||
|
png_convert_from_struct_tm(ptime, tbuf);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Initialize png_ptr structure, and allocate any memory needed */
|
||||||
|
png_structp
|
||||||
|
png_create_write_struct(png_const_charp user_png_ver, voidp error_ptr,
|
||||||
|
png_error_ptr error_fn, png_error_ptr warn_fn)
|
||||||
|
{
|
||||||
|
png_structp png_ptr;
|
||||||
|
#ifdef USE_FAR_KEYWORD
|
||||||
|
jmp_buf jmpbuf;
|
||||||
|
#endif
|
||||||
|
png_debug(1, "in png_create_write_struct\n");
|
||||||
|
if ((png_ptr = (png_structp)png_create_struct(PNG_STRUCT_PNG)) == NULL)
|
||||||
|
{
|
||||||
|
return ((png_structp)NULL);
|
||||||
|
}
|
||||||
|
#ifdef USE_FAR_KEYWORD
|
||||||
|
if (setjmp(jmpbuf))
|
||||||
|
#else
|
||||||
|
if (setjmp(png_ptr->jmpbuf))
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
png_free(png_ptr, png_ptr->zbuf);
|
||||||
|
png_destroy_struct(png_ptr);
|
||||||
|
return ((png_structp)NULL);
|
||||||
|
}
|
||||||
|
#ifdef USE_FAR_KEYWORD
|
||||||
|
png_memcpy(png_ptr->jmpbuf,jmpbuf,sizeof(jmp_buf));
|
||||||
|
#endif
|
||||||
|
png_set_error_fn(png_ptr, error_ptr, error_fn, warn_fn);
|
||||||
|
|
||||||
|
/* Libpng 0.90 and later are binary incompatible with libpng 0.89, so
|
||||||
|
* we must recompile any applications that use any older library version.
|
||||||
|
* For versions after libpng 1.0, we will be compatible, so we need
|
||||||
|
* only check the first digit.
|
||||||
|
*/
|
||||||
|
if (user_png_ver == NULL || user_png_ver[0] != png_libpng_ver[0] ||
|
||||||
|
(png_libpng_ver[0] == '0' && user_png_ver[2] < '9'))
|
||||||
|
{
|
||||||
|
png_error(png_ptr,
|
||||||
|
"Incompatible libpng version in application and library");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* initialize zbuf - compression buffer */
|
||||||
|
png_ptr->zbuf_size = PNG_ZBUF_SIZE;
|
||||||
|
png_ptr->zbuf = (png_bytep)png_malloc(png_ptr,
|
||||||
|
(png_uint_32)png_ptr->zbuf_size);
|
||||||
|
|
||||||
|
png_set_write_fn(png_ptr, NULL, NULL, NULL);
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED)
|
||||||
|
png_set_filter_heuristics(png_ptr, PNG_FILTER_HEURISTIC_DEFAULT,
|
||||||
|
1, NULL, NULL);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return ((png_structp)png_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Initialize png_ptr structure, and allocate any memory needed */
|
||||||
|
void
|
||||||
|
png_write_init(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
jmp_buf tmp_jmp; /* to save current jump buffer */
|
||||||
|
|
||||||
|
png_debug(1, "in png_write_init\n");
|
||||||
|
/* save jump buffer and error functions */
|
||||||
|
png_memcpy(tmp_jmp, png_ptr->jmpbuf, sizeof (jmp_buf));
|
||||||
|
|
||||||
|
/* reset all variables to 0 */
|
||||||
|
png_memset(png_ptr, 0, sizeof (png_struct));
|
||||||
|
|
||||||
|
/* restore jump buffer */
|
||||||
|
png_memcpy(png_ptr->jmpbuf, tmp_jmp, sizeof (jmp_buf));
|
||||||
|
|
||||||
|
/* initialize zbuf - compression buffer */
|
||||||
|
png_ptr->zbuf_size = PNG_ZBUF_SIZE;
|
||||||
|
png_ptr->zbuf = (png_bytep)png_malloc(png_ptr,
|
||||||
|
(png_uint_32)png_ptr->zbuf_size);
|
||||||
|
png_set_write_fn(png_ptr, NULL, NULL, NULL);
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED)
|
||||||
|
png_set_filter_heuristics(png_ptr, PNG_FILTER_HEURISTIC_DEFAULT,
|
||||||
|
1, NULL, NULL);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Write a few rows of image data. If the image is interlaced,
|
||||||
|
* either you will have to write the 7 sub images, or, if you
|
||||||
|
* have called png_set_interlace_handling(), you will have to
|
||||||
|
* "write" the image seven times.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
png_write_rows(png_structp png_ptr, png_bytepp row,
|
||||||
|
png_uint_32 num_rows)
|
||||||
|
{
|
||||||
|
png_uint_32 i; /* row counter */
|
||||||
|
png_bytepp rp; /* row pointer */
|
||||||
|
|
||||||
|
png_debug(1, "in png_write_rows\n");
|
||||||
|
/* loop through the rows */
|
||||||
|
for (i = 0, rp = row; i < num_rows; i++, rp++)
|
||||||
|
{
|
||||||
|
png_write_row(png_ptr, *rp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Write the image. You only need to call this function once, even
|
||||||
|
* if you are writing an interlaced image.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
png_write_image(png_structp png_ptr, png_bytepp image)
|
||||||
|
{
|
||||||
|
png_uint_32 i; /* row index */
|
||||||
|
int pass, num_pass; /* pass variables */
|
||||||
|
png_bytepp rp; /* points to current row */
|
||||||
|
|
||||||
|
png_debug(1, "in png_write_image\n");
|
||||||
|
#if defined(PNG_WRITE_INTERLACING_SUPPORTED)
|
||||||
|
/* intialize interlace handling. If image is not interlaced,
|
||||||
|
this will set pass to 1 */
|
||||||
|
num_pass = png_set_interlace_handling(png_ptr);
|
||||||
|
#else
|
||||||
|
num_pass = 1;
|
||||||
|
#endif
|
||||||
|
/* loop through passes */
|
||||||
|
for (pass = 0; pass < num_pass; pass++)
|
||||||
|
{
|
||||||
|
/* loop through image */
|
||||||
|
for (i = 0, rp = image; i < png_ptr->height; i++, rp++)
|
||||||
|
{
|
||||||
|
png_write_row(png_ptr, *rp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* called by user to write a row of image data */
|
||||||
|
void
|
||||||
|
png_write_row(png_structp png_ptr, png_bytep row)
|
||||||
|
{
|
||||||
|
png_debug2(1, "in png_write_row (row %ld, pass %d)\n",
|
||||||
|
png_ptr->row_number, png_ptr->pass);
|
||||||
|
/* initialize transformations and other stuff if first time */
|
||||||
|
if (png_ptr->row_number == 0 && png_ptr->pass == 0)
|
||||||
|
{
|
||||||
|
png_write_start_row(png_ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_INTERLACING_SUPPORTED)
|
||||||
|
/* if interlaced and not interested in row, return */
|
||||||
|
if (png_ptr->interlaced && (png_ptr->transformations & PNG_INTERLACE))
|
||||||
|
{
|
||||||
|
switch (png_ptr->pass)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
if (png_ptr->row_number & 7)
|
||||||
|
{
|
||||||
|
png_write_finish_row(png_ptr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
if ((png_ptr->row_number & 7) || png_ptr->width < 5)
|
||||||
|
{
|
||||||
|
png_write_finish_row(png_ptr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if ((png_ptr->row_number & 7) != 4)
|
||||||
|
{
|
||||||
|
png_write_finish_row(png_ptr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
if ((png_ptr->row_number & 3) || png_ptr->width < 3)
|
||||||
|
{
|
||||||
|
png_write_finish_row(png_ptr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
if ((png_ptr->row_number & 3) != 2)
|
||||||
|
{
|
||||||
|
png_write_finish_row(png_ptr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
if ((png_ptr->row_number & 1) || png_ptr->width < 2)
|
||||||
|
{
|
||||||
|
png_write_finish_row(png_ptr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
if (!(png_ptr->row_number & 1))
|
||||||
|
{
|
||||||
|
png_write_finish_row(png_ptr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* set up row info for transformations */
|
||||||
|
png_ptr->row_info.color_type = png_ptr->color_type;
|
||||||
|
png_ptr->row_info.width = png_ptr->usr_width;
|
||||||
|
png_ptr->row_info.channels = png_ptr->usr_channels;
|
||||||
|
png_ptr->row_info.bit_depth = png_ptr->usr_bit_depth;
|
||||||
|
png_ptr->row_info.pixel_depth = (png_byte)(png_ptr->row_info.bit_depth *
|
||||||
|
png_ptr->row_info.channels);
|
||||||
|
|
||||||
|
png_ptr->row_info.rowbytes = ((png_ptr->row_info.width *
|
||||||
|
(png_uint_32)png_ptr->row_info.pixel_depth + 7) >> 3);
|
||||||
|
|
||||||
|
png_debug1(3, "row_info->color_type = %d\n", png_ptr->row_info.color_type);
|
||||||
|
png_debug1(3, "row_info->width = %d\n", png_ptr->row_info.width);
|
||||||
|
png_debug1(3, "row_info->channels = %d\n", png_ptr->row_info.channels);
|
||||||
|
png_debug1(3, "row_info->bit_depth = %d\n", png_ptr->row_info.bit_depth);
|
||||||
|
png_debug1(3, "row_info->pixel_depth = %d\n", png_ptr->row_info.pixel_depth);
|
||||||
|
png_debug1(3, "row_info->rowbytes = %d\n", png_ptr->row_info.rowbytes);
|
||||||
|
|
||||||
|
/* Copy user's row into buffer, leaving room for filter byte. */
|
||||||
|
png_memcpy_check(png_ptr, png_ptr->row_buf + 1, row,
|
||||||
|
png_ptr->row_info.rowbytes);
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_INTERLACING_SUPPORTED)
|
||||||
|
/* handle interlacing */
|
||||||
|
if (png_ptr->interlaced && png_ptr->pass < 6 &&
|
||||||
|
(png_ptr->transformations & PNG_INTERLACE))
|
||||||
|
{
|
||||||
|
png_do_write_interlace(&(png_ptr->row_info),
|
||||||
|
png_ptr->row_buf + 1, png_ptr->pass);
|
||||||
|
/* this should always get caught above, but still ... */
|
||||||
|
if (!(png_ptr->row_info.width))
|
||||||
|
{
|
||||||
|
png_write_finish_row(png_ptr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* handle other transformations */
|
||||||
|
if (png_ptr->transformations)
|
||||||
|
png_do_write_transformations(png_ptr);
|
||||||
|
|
||||||
|
/* Find a filter if necessary, filter the row and write it out. */
|
||||||
|
png_write_find_filter(png_ptr, &(png_ptr->row_info));
|
||||||
|
|
||||||
|
if (png_ptr->write_row_fn != NULL)
|
||||||
|
(*(png_ptr->write_row_fn))(png_ptr, png_ptr->row_number, png_ptr->pass);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_FLUSH_SUPPORTED)
|
||||||
|
/* Set the automatic flush interval or 0 to turn flushing off */
|
||||||
|
void
|
||||||
|
png_set_flush(png_structp png_ptr, int nrows)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_set_flush\n");
|
||||||
|
png_ptr->flush_dist = (nrows < 0 ? 0 : nrows);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* flush the current output buffers now */
|
||||||
|
void
|
||||||
|
png_write_flush(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
int wrote_IDAT;
|
||||||
|
|
||||||
|
png_debug(1, "in png_write_flush\n");
|
||||||
|
/* We have already written out all of the data */
|
||||||
|
if (png_ptr->row_number >= png_ptr->num_rows)
|
||||||
|
return;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* compress the data */
|
||||||
|
ret = deflate(&png_ptr->zstream, Z_SYNC_FLUSH);
|
||||||
|
wrote_IDAT = 0;
|
||||||
|
|
||||||
|
/* check for compression errors */
|
||||||
|
if (ret != Z_OK)
|
||||||
|
{
|
||||||
|
if (png_ptr->zstream.msg != NULL)
|
||||||
|
png_error(png_ptr, png_ptr->zstream.msg);
|
||||||
|
else
|
||||||
|
png_error(png_ptr, "zlib error");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(png_ptr->zstream.avail_out))
|
||||||
|
{
|
||||||
|
/* write the IDAT and reset the zlib output buffer */
|
||||||
|
png_write_IDAT(png_ptr, png_ptr->zbuf,
|
||||||
|
png_ptr->zbuf_size);
|
||||||
|
png_ptr->zstream.next_out = png_ptr->zbuf;
|
||||||
|
png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
|
||||||
|
wrote_IDAT = 1;
|
||||||
|
}
|
||||||
|
} while(wrote_IDAT == 1);
|
||||||
|
|
||||||
|
/* If there is any data left to be output, write it into a new IDAT */
|
||||||
|
if (png_ptr->zbuf_size != png_ptr->zstream.avail_out)
|
||||||
|
{
|
||||||
|
/* write the IDAT and reset the zlib output buffer */
|
||||||
|
png_write_IDAT(png_ptr, png_ptr->zbuf,
|
||||||
|
png_ptr->zbuf_size - png_ptr->zstream.avail_out);
|
||||||
|
png_ptr->zstream.next_out = png_ptr->zbuf;
|
||||||
|
png_ptr->zstream.avail_out = (uInt)png_ptr->zbuf_size;
|
||||||
|
}
|
||||||
|
png_ptr->flush_rows = 0;
|
||||||
|
png_flush(png_ptr);
|
||||||
|
}
|
||||||
|
#endif /* PNG_WRITE_FLUSH_SUPPORTED */
|
||||||
|
|
||||||
|
/* free all memory used by the write */
|
||||||
|
void
|
||||||
|
png_destroy_write_struct(png_structpp png_ptr_ptr, png_infopp info_ptr_ptr)
|
||||||
|
{
|
||||||
|
png_structp png_ptr = NULL;
|
||||||
|
png_infop info_ptr = NULL;
|
||||||
|
|
||||||
|
png_debug(1, "in png_destroy_write_struct\n");
|
||||||
|
if (png_ptr_ptr != NULL)
|
||||||
|
png_ptr = *png_ptr_ptr;
|
||||||
|
|
||||||
|
if (info_ptr_ptr != NULL)
|
||||||
|
info_ptr = *info_ptr_ptr;
|
||||||
|
|
||||||
|
if (info_ptr != NULL)
|
||||||
|
{
|
||||||
|
#ifdef PNG_WRITE_tEXt_SUPPORTED
|
||||||
|
png_free(png_ptr, info_ptr->text);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_READ_pCAL_SUPPORTED)
|
||||||
|
png_free(png_ptr, info_ptr->pcal_purpose);
|
||||||
|
png_free(png_ptr, info_ptr->pcal_units);
|
||||||
|
if (info_ptr->pcal_params != NULL)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < (int)info_ptr->pcal_nparams; i++)
|
||||||
|
{
|
||||||
|
png_free(png_ptr, info_ptr->pcal_params[i]);
|
||||||
|
}
|
||||||
|
png_free(png_ptr, info_ptr->pcal_params);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
png_destroy_struct((png_voidp)info_ptr);
|
||||||
|
*info_ptr_ptr = (png_infop)NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (png_ptr != NULL)
|
||||||
|
{
|
||||||
|
png_write_destroy(png_ptr);
|
||||||
|
png_destroy_struct((png_voidp)png_ptr);
|
||||||
|
*png_ptr_ptr = (png_structp)NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Free any memory used in png_ptr struct (old method) */
|
||||||
|
void
|
||||||
|
png_write_destroy(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
jmp_buf tmp_jmp; /* save jump buffer */
|
||||||
|
png_error_ptr error_fn;
|
||||||
|
png_error_ptr warning_fn;
|
||||||
|
png_voidp error_ptr;
|
||||||
|
|
||||||
|
png_debug(1, "in png_write_destroy\n");
|
||||||
|
/* free any memory zlib uses */
|
||||||
|
deflateEnd(&png_ptr->zstream);
|
||||||
|
|
||||||
|
/* free our memory. png_free checks NULL for us. */
|
||||||
|
png_free(png_ptr, png_ptr->zbuf);
|
||||||
|
png_free(png_ptr, png_ptr->row_buf);
|
||||||
|
png_free(png_ptr, png_ptr->prev_row);
|
||||||
|
png_free(png_ptr, png_ptr->sub_row);
|
||||||
|
png_free(png_ptr, png_ptr->up_row);
|
||||||
|
png_free(png_ptr, png_ptr->avg_row);
|
||||||
|
png_free(png_ptr, png_ptr->paeth_row);
|
||||||
|
#if defined(PNG_TIME_RFC1123_SUPPORTED)
|
||||||
|
png_free(png_ptr, png_ptr->time_buffer);
|
||||||
|
#endif /* PNG_TIME_RFC1123_SUPPORTED */
|
||||||
|
#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED)
|
||||||
|
png_free(png_ptr, png_ptr->prev_filters);
|
||||||
|
png_free(png_ptr, png_ptr->filter_weights);
|
||||||
|
png_free(png_ptr, png_ptr->inv_filter_weights);
|
||||||
|
png_free(png_ptr, png_ptr->filter_costs);
|
||||||
|
png_free(png_ptr, png_ptr->inv_filter_costs);
|
||||||
|
#endif /* PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */
|
||||||
|
|
||||||
|
/* reset structure */
|
||||||
|
png_memcpy(tmp_jmp, png_ptr->jmpbuf, sizeof (jmp_buf));
|
||||||
|
|
||||||
|
error_fn = png_ptr->error_fn;
|
||||||
|
warning_fn = png_ptr->warning_fn;
|
||||||
|
error_ptr = png_ptr->error_ptr;
|
||||||
|
|
||||||
|
png_memset(png_ptr, 0, sizeof (png_struct));
|
||||||
|
|
||||||
|
png_ptr->error_fn = error_fn;
|
||||||
|
png_ptr->warning_fn = warning_fn;
|
||||||
|
png_ptr->error_ptr = error_ptr;
|
||||||
|
|
||||||
|
png_memcpy(png_ptr->jmpbuf, tmp_jmp, sizeof (jmp_buf));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Allow the application to select one or more row filters to use. */
|
||||||
|
void
|
||||||
|
png_set_filter(png_structp png_ptr, int method, int filters)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_set_filter\n");
|
||||||
|
/* We allow 'method' only for future expansion of the base filter method. */
|
||||||
|
if (method == PNG_FILTER_TYPE_BASE)
|
||||||
|
{
|
||||||
|
switch (filters & (PNG_ALL_FILTERS | 0x07))
|
||||||
|
{
|
||||||
|
case 5:
|
||||||
|
case 6:
|
||||||
|
case 7: png_warning(png_ptr, "Unknown row filter for method 0");
|
||||||
|
case PNG_FILTER_VALUE_NONE: png_ptr->do_filter=PNG_FILTER_NONE; break;
|
||||||
|
case PNG_FILTER_VALUE_SUB: png_ptr->do_filter=PNG_FILTER_SUB; break;
|
||||||
|
case PNG_FILTER_VALUE_UP: png_ptr->do_filter=PNG_FILTER_UP; break;
|
||||||
|
case PNG_FILTER_VALUE_AVG: png_ptr->do_filter=PNG_FILTER_AVG; break;
|
||||||
|
case PNG_FILTER_VALUE_PAETH: png_ptr->do_filter=PNG_FILTER_PAETH;break;
|
||||||
|
default: png_ptr->do_filter = (png_byte)filters; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If we have allocated the row_buf, this means we have already started
|
||||||
|
* with the image and we should have allocated all of the filter buffers
|
||||||
|
* that have been selected. If prev_row isn't already allocated, then
|
||||||
|
* it is too late to start using the filters that need it, since we
|
||||||
|
* will be missing the data in the previous row. If an application
|
||||||
|
* wants to start and stop using particular filters during compression,
|
||||||
|
* it should start out with all of the filters, and then add and
|
||||||
|
* remove them after the start of compression.
|
||||||
|
*/
|
||||||
|
if (png_ptr->row_buf != NULL)
|
||||||
|
{
|
||||||
|
if (png_ptr->do_filter & PNG_FILTER_SUB && png_ptr->sub_row == NULL)
|
||||||
|
{
|
||||||
|
png_ptr->sub_row = (png_bytep)png_malloc(png_ptr,
|
||||||
|
(png_ptr->rowbytes + 1));
|
||||||
|
png_ptr->sub_row[0] = PNG_FILTER_VALUE_SUB;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (png_ptr->do_filter & PNG_FILTER_UP && png_ptr->up_row == NULL)
|
||||||
|
{
|
||||||
|
if (png_ptr->prev_row == NULL)
|
||||||
|
{
|
||||||
|
png_warning(png_ptr, "Can't add Up filter after starting");
|
||||||
|
png_ptr->do_filter &= ~PNG_FILTER_UP;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
png_ptr->up_row = (png_bytep)png_malloc(png_ptr,
|
||||||
|
(png_ptr->rowbytes + 1));
|
||||||
|
png_ptr->up_row[0] = PNG_FILTER_VALUE_UP;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (png_ptr->do_filter & PNG_FILTER_AVG && png_ptr->avg_row == NULL)
|
||||||
|
{
|
||||||
|
if (png_ptr->prev_row == NULL)
|
||||||
|
{
|
||||||
|
png_warning(png_ptr, "Can't add Average filter after starting");
|
||||||
|
png_ptr->do_filter &= ~PNG_FILTER_AVG;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
png_ptr->avg_row = (png_bytep)png_malloc(png_ptr,
|
||||||
|
(png_ptr->rowbytes + 1));
|
||||||
|
png_ptr->avg_row[0] = PNG_FILTER_VALUE_AVG;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (png_ptr->do_filter & PNG_FILTER_PAETH &&
|
||||||
|
png_ptr->paeth_row == NULL)
|
||||||
|
{
|
||||||
|
if (png_ptr->prev_row == NULL)
|
||||||
|
{
|
||||||
|
png_warning(png_ptr, "Can't add Paeth filter after starting");
|
||||||
|
png_ptr->do_filter &= ~PNG_FILTER_PAETH;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
png_ptr->paeth_row = (png_bytep)png_malloc(png_ptr,
|
||||||
|
(png_ptr->rowbytes + 1));
|
||||||
|
png_ptr->paeth_row[0] = PNG_FILTER_VALUE_PAETH;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (png_ptr->do_filter == PNG_NO_FILTERS)
|
||||||
|
png_ptr->do_filter = PNG_FILTER_NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
png_error(png_ptr, "Unknown custom filter method");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* This allows us to influence the way in which libpng chooses the "best"
|
||||||
|
* filter for the current scanline. While the "minimum-sum-of-absolute-
|
||||||
|
* differences metric is relatively fast and effective, there is some
|
||||||
|
* question as to whether it can be improved upon by trying to keep the
|
||||||
|
* filtered data going to zlib more consistent, hopefully resulting in
|
||||||
|
* better compression.
|
||||||
|
*/
|
||||||
|
#if defined(PNG_WRITE_WEIGHTED_FILTER_SUPPORTED) /* GRR 970116 */
|
||||||
|
void
|
||||||
|
png_set_filter_heuristics(png_structp png_ptr, int heuristic_method,
|
||||||
|
int num_weights, png_doublep filter_weights,
|
||||||
|
png_doublep filter_costs)
|
||||||
|
{
|
||||||
|
#if defined(PNG_WRITE_tEXt_SUPPORTED) || defined(PNG_WRITE_zTXt_SUPPORTED)
|
||||||
|
int i;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
png_debug(1, "in png_set_filter_heuristics\n");
|
||||||
|
if (heuristic_method >= PNG_FILTER_HEURISTIC_LAST)
|
||||||
|
{
|
||||||
|
png_warning(png_ptr, "Unknown filter heuristic method");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (heuristic_method == PNG_FILTER_HEURISTIC_DEFAULT)
|
||||||
|
{
|
||||||
|
heuristic_method = PNG_FILTER_HEURISTIC_UNWEIGHTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (num_weights < 0 || filter_weights == NULL ||
|
||||||
|
heuristic_method == PNG_FILTER_HEURISTIC_UNWEIGHTED)
|
||||||
|
{
|
||||||
|
num_weights = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
png_ptr->num_prev_filters = num_weights;
|
||||||
|
png_ptr->heuristic_method = heuristic_method;
|
||||||
|
|
||||||
|
if (num_weights > 0)
|
||||||
|
{
|
||||||
|
if (png_ptr->prev_filters == NULL)
|
||||||
|
{
|
||||||
|
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++)
|
||||||
|
{
|
||||||
|
png_ptr->prev_filters[i] = 255;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (png_ptr->filter_weights == NULL)
|
||||||
|
{
|
||||||
|
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_uint_32)(sizeof(png_uint_16) * num_weights));
|
||||||
|
|
||||||
|
for (i = 0; i < num_weights; i++)
|
||||||
|
{
|
||||||
|
png_ptr->inv_filter_weights[i] =
|
||||||
|
png_ptr->filter_weights[i] = PNG_WEIGHT_FACTOR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < num_weights; i++)
|
||||||
|
{
|
||||||
|
if (filter_weights[i] < 0.0)
|
||||||
|
{
|
||||||
|
png_ptr->inv_filter_weights[i] =
|
||||||
|
png_ptr->filter_weights[i] = PNG_WEIGHT_FACTOR;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
png_ptr->inv_filter_weights[i] =
|
||||||
|
(png_uint_16)((double)PNG_WEIGHT_FACTOR*filter_weights[i]+0.5);
|
||||||
|
png_ptr->filter_weights[i] =
|
||||||
|
(png_uint_16)((double)PNG_WEIGHT_FACTOR/filter_weights[i]+0.5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If, in the future, there are other filter methods, this would
|
||||||
|
* need to be based on png_ptr->filter.
|
||||||
|
*/
|
||||||
|
if (png_ptr->filter_costs == NULL)
|
||||||
|
{
|
||||||
|
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_uint_32)(sizeof(png_uint_16) * PNG_FILTER_VALUE_LAST));
|
||||||
|
|
||||||
|
for (i = 0; i < PNG_FILTER_VALUE_LAST; i++)
|
||||||
|
{
|
||||||
|
png_ptr->inv_filter_costs[i] =
|
||||||
|
png_ptr->filter_costs[i] = PNG_COST_FACTOR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Here is where we set the relative costs of the different filters. We
|
||||||
|
* should take the desired compression level into account when setting
|
||||||
|
* the costs, so that Paeth, for instance, has a high relative cost at low
|
||||||
|
* compression levels, while it has a lower relative cost at higher
|
||||||
|
* compression settings. The filter types are in order of increasing
|
||||||
|
* relative cost, so it would be possible to do this with an algorithm.
|
||||||
|
*/
|
||||||
|
for (i = 0; i < PNG_FILTER_VALUE_LAST; i++)
|
||||||
|
{
|
||||||
|
if (filter_costs == NULL || filter_costs[i] < 0.0)
|
||||||
|
{
|
||||||
|
png_ptr->inv_filter_costs[i] =
|
||||||
|
png_ptr->filter_costs[i] = PNG_COST_FACTOR;
|
||||||
|
}
|
||||||
|
else if (filter_costs[i] >= 1.0)
|
||||||
|
{
|
||||||
|
png_ptr->inv_filter_costs[i] =
|
||||||
|
(png_uint_16)((double)PNG_COST_FACTOR / filter_costs[i] + 0.5);
|
||||||
|
png_ptr->filter_costs[i] =
|
||||||
|
(png_uint_16)((double)PNG_COST_FACTOR * filter_costs[i] + 0.5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* PNG_WRITE_WEIGHTED_FILTER_SUPPORTED */
|
||||||
|
|
||||||
|
void
|
||||||
|
png_set_compression_level(png_structp png_ptr, int level)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_set_compression_level\n");
|
||||||
|
png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_LEVEL;
|
||||||
|
png_ptr->zlib_level = level;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
png_set_compression_mem_level(png_structp png_ptr, int mem_level)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_set_compression_mem_level\n");
|
||||||
|
png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_MEM_LEVEL;
|
||||||
|
png_ptr->zlib_mem_level = mem_level;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
png_set_compression_strategy(png_structp png_ptr, int strategy)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_set_compression_strategy\n");
|
||||||
|
png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_STRATEGY;
|
||||||
|
png_ptr->zlib_strategy = strategy;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
png_set_compression_window_bits(png_structp png_ptr, int window_bits)
|
||||||
|
{
|
||||||
|
if (window_bits > 15)
|
||||||
|
png_warning(png_ptr, "Only compression windows <= 32k supported by PNG");
|
||||||
|
png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_WINDOW_BITS;
|
||||||
|
png_ptr->zlib_window_bits = window_bits;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
png_set_compression_method(png_structp png_ptr, int method)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_set_compression_method\n");
|
||||||
|
if (method != 8)
|
||||||
|
png_warning(png_ptr, "Only compression method 8 is supported by PNG");
|
||||||
|
png_ptr->flags |= PNG_FLAG_ZLIB_CUSTOM_METHOD;
|
||||||
|
png_ptr->zlib_method = method;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
png_set_write_status_fn(png_structp png_ptr, png_write_status_ptr write_row_fn)
|
||||||
|
{
|
||||||
|
png_ptr->write_row_fn = write_row_fn;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
|
||||||
|
void
|
||||||
|
png_set_write_user_transform_fn(png_structp png_ptr, png_user_transform_ptr
|
||||||
|
write_user_transform_fn)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_set_write_user_transform_fn\n");
|
||||||
|
png_ptr->transformations |= PNG_USER_TRANSFORM;
|
||||||
|
png_ptr->write_user_transform_fn = write_user_transform_fn;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
495
thirdparty/libpng/pngwtran.c
vendored
Normal file
495
thirdparty/libpng/pngwtran.c
vendored
Normal file
@ -0,0 +1,495 @@
|
|||||||
|
|
||||||
|
/* pngwtran.c - transforms the data in a row for PNG writers
|
||||||
|
*
|
||||||
|
* libpng 1.0.1
|
||||||
|
* For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
* Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
* Copyright (c) 1996, 1997 Andreas Dilger
|
||||||
|
* Copyright (c) 1998, Glenn Randers-Pehrson
|
||||||
|
* March 9, 1998
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define PNG_INTERNAL
|
||||||
|
#include "png.h"
|
||||||
|
|
||||||
|
/* Transform the data according to the users wishes. The order of
|
||||||
|
* transformations is significant.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
png_do_write_transformations(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_do_write_transformations\n");
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_USER_TRANSFORM_SUPPORTED)
|
||||||
|
if (png_ptr->transformations & PNG_USER_TRANSFORM)
|
||||||
|
if(png_ptr->write_user_transform_fn != NULL)
|
||||||
|
(*(png_ptr->write_user_transform_fn)) /* user write transform function */
|
||||||
|
(png_ptr, /* png_ptr */
|
||||||
|
&(png_ptr->row_info), /* row_info: */
|
||||||
|
/* png_uint_32 width; width of row */
|
||||||
|
/* png_uint_32 rowbytes; number of bytes in row */
|
||||||
|
/* png_byte color_type; color type of pixels */
|
||||||
|
/* png_byte bit_depth; bit depth of samples */
|
||||||
|
/* png_byte channels; number of channels (1-4) */
|
||||||
|
/* png_byte pixel_depth; bits per pixel (depth*channels) */
|
||||||
|
png_ptr->row_buf + 1); /* start of pixel data for row */
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_WRITE_FILLER_SUPPORTED)
|
||||||
|
if (png_ptr->transformations & PNG_FILLER)
|
||||||
|
png_do_strip_filler(&(png_ptr->row_info), png_ptr->row_buf + 1,
|
||||||
|
png_ptr->flags);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_WRITE_PACKSWAP_SUPPORTED)
|
||||||
|
if (png_ptr->transformations & PNG_PACKSWAP)
|
||||||
|
png_do_packswap(&(png_ptr->row_info), png_ptr->row_buf + 1);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_WRITE_PACK_SUPPORTED)
|
||||||
|
if (png_ptr->transformations & PNG_PACK)
|
||||||
|
png_do_pack(&(png_ptr->row_info), png_ptr->row_buf + 1,
|
||||||
|
(png_uint_32)png_ptr->bit_depth);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_WRITE_SHIFT_SUPPORTED)
|
||||||
|
if (png_ptr->transformations & PNG_SHIFT)
|
||||||
|
png_do_shift(&(png_ptr->row_info), png_ptr->row_buf + 1,
|
||||||
|
&(png_ptr->shift));
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_WRITE_SWAP_SUPPORTED)
|
||||||
|
if (png_ptr->transformations & PNG_SWAP_BYTES)
|
||||||
|
png_do_swap(&(png_ptr->row_info), png_ptr->row_buf + 1);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
|
||||||
|
if (png_ptr->transformations & PNG_INVERT_ALPHA)
|
||||||
|
png_do_write_invert_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)
|
||||||
|
if (png_ptr->transformations & PNG_SWAP_ALPHA)
|
||||||
|
png_do_write_swap_alpha(&(png_ptr->row_info), png_ptr->row_buf + 1);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_WRITE_BGR_SUPPORTED)
|
||||||
|
if (png_ptr->transformations & PNG_BGR)
|
||||||
|
png_do_bgr(&(png_ptr->row_info), png_ptr->row_buf + 1);
|
||||||
|
#endif
|
||||||
|
#if defined(PNG_WRITE_INVERT_SUPPORTED)
|
||||||
|
if (png_ptr->transformations & PNG_INVERT_MONO)
|
||||||
|
png_do_invert(&(png_ptr->row_info), png_ptr->row_buf + 1);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_PACK_SUPPORTED)
|
||||||
|
/* Pack pixels into bytes. Pass the true bit depth in bit_depth. The
|
||||||
|
* row_info bit depth should be 8 (one pixel per byte). The channels
|
||||||
|
* should be 1 (this only happens on grayscale and paletted images).
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
png_do_pack(png_row_infop row_info, png_bytep row, png_uint_32 bit_depth)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_do_pack\n");
|
||||||
|
if (row_info->bit_depth == 8 &&
|
||||||
|
#if defined(PNG_USELESS_TESTS_SUPPORTED)
|
||||||
|
row != NULL && row_info != NULL &&
|
||||||
|
#endif
|
||||||
|
row_info->channels == 1)
|
||||||
|
{
|
||||||
|
switch ((int)bit_depth)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
png_bytep sp, dp;
|
||||||
|
int mask, v;
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
sp = row;
|
||||||
|
dp = row;
|
||||||
|
mask = 0x80;
|
||||||
|
v = 0;
|
||||||
|
for (i = 0; i < row_info->width; i++)
|
||||||
|
{
|
||||||
|
if (*sp != 0)
|
||||||
|
v |= mask;
|
||||||
|
sp++;
|
||||||
|
if (mask > 1)
|
||||||
|
mask >>= 1;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mask = 0x80;
|
||||||
|
*dp = (png_byte)v;
|
||||||
|
dp++;
|
||||||
|
v = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (mask != 0x80)
|
||||||
|
*dp = (png_byte)v;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
png_bytep sp, dp;
|
||||||
|
int shift, v;
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
sp = row;
|
||||||
|
dp = row;
|
||||||
|
shift = 6;
|
||||||
|
v = 0;
|
||||||
|
for (i = 0; i < row_info->width; i++)
|
||||||
|
{
|
||||||
|
png_byte value;
|
||||||
|
|
||||||
|
value = (png_byte)(*sp & 0x3);
|
||||||
|
v |= (value << shift);
|
||||||
|
if (shift == 0)
|
||||||
|
{
|
||||||
|
shift = 6;
|
||||||
|
*dp = (png_byte)v;
|
||||||
|
dp++;
|
||||||
|
v = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
shift -= 2;
|
||||||
|
sp++;
|
||||||
|
}
|
||||||
|
if (shift != 6)
|
||||||
|
*dp = (png_byte)v;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4:
|
||||||
|
{
|
||||||
|
png_bytep sp, dp;
|
||||||
|
int shift, v;
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
sp = row;
|
||||||
|
dp = row;
|
||||||
|
shift = 4;
|
||||||
|
v = 0;
|
||||||
|
for (i = 0; i < row_info->width; i++)
|
||||||
|
{
|
||||||
|
png_byte value;
|
||||||
|
|
||||||
|
value = (png_byte)(*sp & 0xf);
|
||||||
|
v |= (value << shift);
|
||||||
|
|
||||||
|
if (shift == 0)
|
||||||
|
{
|
||||||
|
shift = 4;
|
||||||
|
*dp = (png_byte)v;
|
||||||
|
dp++;
|
||||||
|
v = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
shift -= 4;
|
||||||
|
|
||||||
|
sp++;
|
||||||
|
}
|
||||||
|
if (shift != 4)
|
||||||
|
*dp = (png_byte)v;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
row_info->bit_depth = (png_byte)bit_depth;
|
||||||
|
row_info->pixel_depth = (png_byte)(bit_depth * row_info->channels);
|
||||||
|
row_info->rowbytes =
|
||||||
|
((row_info->width * row_info->pixel_depth + 7) >> 3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_SHIFT_SUPPORTED)
|
||||||
|
/* Shift pixel values to take advantage of whole range. Pass the
|
||||||
|
* true number of bits in bit_depth. The row should be packed
|
||||||
|
* according to row_info->bit_depth. Thus, if you had a row of
|
||||||
|
* bit depth 4, but the pixels only had values from 0 to 7, you
|
||||||
|
* would pass 3 as bit_depth, and this routine would translate the
|
||||||
|
* data to 0 to 15.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
png_do_shift(png_row_infop row_info, png_bytep row, png_color_8p bit_depth)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_do_shift\n");
|
||||||
|
#if defined(PNG_USELESS_TESTS_SUPPORTED)
|
||||||
|
if (row != NULL && row_info != NULL &&
|
||||||
|
#else
|
||||||
|
if (
|
||||||
|
#endif
|
||||||
|
row_info->color_type != PNG_COLOR_TYPE_PALETTE)
|
||||||
|
{
|
||||||
|
int shift_start[4], shift_dec[4];
|
||||||
|
png_uint_32 channels;
|
||||||
|
|
||||||
|
channels = 0;
|
||||||
|
if (row_info->color_type & PNG_COLOR_MASK_COLOR)
|
||||||
|
{
|
||||||
|
shift_start[channels] = row_info->bit_depth - bit_depth->red;
|
||||||
|
shift_dec[channels] = bit_depth->red;
|
||||||
|
channels++;
|
||||||
|
shift_start[channels] = row_info->bit_depth - bit_depth->green;
|
||||||
|
shift_dec[channels] = bit_depth->green;
|
||||||
|
channels++;
|
||||||
|
shift_start[channels] = row_info->bit_depth - bit_depth->blue;
|
||||||
|
shift_dec[channels] = bit_depth->blue;
|
||||||
|
channels++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
shift_start[channels] = row_info->bit_depth - bit_depth->gray;
|
||||||
|
shift_dec[channels] = bit_depth->gray;
|
||||||
|
channels++;
|
||||||
|
}
|
||||||
|
if (row_info->color_type & PNG_COLOR_MASK_ALPHA)
|
||||||
|
{
|
||||||
|
shift_start[channels] = row_info->bit_depth - bit_depth->alpha;
|
||||||
|
shift_dec[channels] = bit_depth->alpha;
|
||||||
|
channels++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* with low row depths, could only be grayscale, so one channel */
|
||||||
|
if (row_info->bit_depth < 8)
|
||||||
|
{
|
||||||
|
png_bytep bp;
|
||||||
|
png_uint_32 i;
|
||||||
|
png_byte mask;
|
||||||
|
|
||||||
|
if (bit_depth->gray == 1 && row_info->bit_depth == 2)
|
||||||
|
mask = 0x55;
|
||||||
|
else if (row_info->bit_depth == 4 && bit_depth->gray == 3)
|
||||||
|
mask = 0x11;
|
||||||
|
else
|
||||||
|
mask = 0xff;
|
||||||
|
|
||||||
|
for (bp = row, i = 0; i < row_info->rowbytes; i++, bp++)
|
||||||
|
{
|
||||||
|
png_uint_16 v;
|
||||||
|
int j;
|
||||||
|
|
||||||
|
v = *bp;
|
||||||
|
*bp = 0;
|
||||||
|
for (j = shift_start[0]; j > -shift_dec[0]; j -= shift_dec[0])
|
||||||
|
{
|
||||||
|
if (j > 0)
|
||||||
|
*bp |= (png_byte)((v << j) & 0xff);
|
||||||
|
else
|
||||||
|
*bp |= (png_byte)((v >> (-j)) & mask);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (row_info->bit_depth == 8)
|
||||||
|
{
|
||||||
|
png_bytep bp;
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
for (bp = row, i = 0; i < row_info->width; i++)
|
||||||
|
{
|
||||||
|
png_uint_32 c;
|
||||||
|
|
||||||
|
for (c = 0; c < channels; c++, bp++)
|
||||||
|
{
|
||||||
|
png_uint_16 v;
|
||||||
|
int j;
|
||||||
|
|
||||||
|
v = *bp;
|
||||||
|
*bp = 0;
|
||||||
|
for (j = shift_start[c]; j > -shift_dec[c]; j -= shift_dec[c])
|
||||||
|
{
|
||||||
|
if (j > 0)
|
||||||
|
*bp |= (png_byte)((v << j) & 0xff);
|
||||||
|
else
|
||||||
|
*bp |= (png_byte)((v >> (-j)) & 0xff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
png_bytep bp;
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
for (bp = row, i = 0; i < row_info->width * row_info->channels; i++)
|
||||||
|
{
|
||||||
|
png_uint_32 c;
|
||||||
|
|
||||||
|
for (c = 0; c < channels; c++, bp += 2)
|
||||||
|
{
|
||||||
|
png_uint_16 value, v;
|
||||||
|
int j;
|
||||||
|
|
||||||
|
v = ((png_uint_16)(*bp) << 8) + *(bp + 1);
|
||||||
|
value = 0;
|
||||||
|
for (j = shift_start[c]; j > -shift_dec[c]; j -= shift_dec[c])
|
||||||
|
{
|
||||||
|
if (j > 0)
|
||||||
|
value |= (png_uint_16)((v << j) & (png_uint_16)0xffff);
|
||||||
|
else
|
||||||
|
value |= (png_uint_16)((v >> (-j)) & (png_uint_16)0xffff);
|
||||||
|
}
|
||||||
|
*bp = (png_byte)(value >> 8);
|
||||||
|
*(bp + 1) = (png_byte)(value & 0xff);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_SWAP_ALPHA_SUPPORTED)
|
||||||
|
void
|
||||||
|
png_do_write_swap_alpha(png_row_infop row_info, png_bytep row)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_do_write_swap_alpha\n");
|
||||||
|
#if defined(PNG_USELESS_TESTS_SUPPORTED)
|
||||||
|
if (row != NULL && row_info != NULL)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
|
||||||
|
{
|
||||||
|
/* This converts from ARGB to RGBA */
|
||||||
|
if (row_info->bit_depth == 8)
|
||||||
|
{
|
||||||
|
png_bytep sp, dp;
|
||||||
|
png_byte save;
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
for (i = 0, sp = dp = row; i < row_info->width; i++)
|
||||||
|
{
|
||||||
|
save = *(sp++);
|
||||||
|
*(dp++) = *(sp++);
|
||||||
|
*(dp++) = *(sp++);
|
||||||
|
*(dp++) = *(sp++);
|
||||||
|
*(dp++) = save;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* This converts from AARRGGBB to RRGGBBAA */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
png_bytep sp, dp;
|
||||||
|
png_byte save[2];
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
for (i = 0, sp = dp = row; i < row_info->width; i++)
|
||||||
|
{
|
||||||
|
save[0] = *(sp++);
|
||||||
|
save[1] = *(sp++);
|
||||||
|
*(dp++) = *(sp++);
|
||||||
|
*(dp++) = *(sp++);
|
||||||
|
*(dp++) = *(sp++);
|
||||||
|
*(dp++) = *(sp++);
|
||||||
|
*(dp++) = *(sp++);
|
||||||
|
*(dp++) = *(sp++);
|
||||||
|
*(dp++) = save[0];
|
||||||
|
*(dp++) = save[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
|
||||||
|
{
|
||||||
|
/* This converts from AG to GA */
|
||||||
|
if (row_info->bit_depth == 8)
|
||||||
|
{
|
||||||
|
png_bytep sp, dp;
|
||||||
|
png_byte save;
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
for (i = 0, sp = dp = row; i < row_info->width; i++)
|
||||||
|
{
|
||||||
|
save = *(sp++);
|
||||||
|
*(dp++) = *(sp++);
|
||||||
|
*(dp++) = save;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* This converts from AAGG to GGAA */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
png_bytep sp, dp;
|
||||||
|
png_byte save[2];
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
for (i = 0, sp = dp = row; i < row_info->width; i++)
|
||||||
|
{
|
||||||
|
save[0] = *(sp++);
|
||||||
|
save[1] = *(sp++);
|
||||||
|
*(dp++) = *(sp++);
|
||||||
|
*(dp++) = *(sp++);
|
||||||
|
*(dp++) = save[0];
|
||||||
|
*(dp++) = save[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_INVERT_ALPHA_SUPPORTED)
|
||||||
|
void
|
||||||
|
png_do_write_invert_alpha(png_row_infop row_info, png_bytep row)
|
||||||
|
{
|
||||||
|
png_debug(1, "in png_do_write_invert_alpha\n");
|
||||||
|
#if defined(PNG_USELESS_TESTS_SUPPORTED)
|
||||||
|
if (row != NULL && row_info != NULL)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
|
||||||
|
{
|
||||||
|
/* This inverts the alpha channel in RGBA */
|
||||||
|
if (row_info->bit_depth == 8)
|
||||||
|
{
|
||||||
|
png_bytep sp, dp;
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
for (i = 0, sp = dp = row; i < row_info->width; i++)
|
||||||
|
{
|
||||||
|
*(dp++) = *(sp++);
|
||||||
|
*(dp++) = *(sp++);
|
||||||
|
*(dp++) = *(sp++);
|
||||||
|
*(dp++) = 255 - *(sp++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* This inverts the alpha channel in RRGGBBAA */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
png_bytep sp, dp;
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
for (i = 0, sp = dp = row; i < row_info->width; i++)
|
||||||
|
{
|
||||||
|
*(dp++) = *(sp++);
|
||||||
|
*(dp++) = *(sp++);
|
||||||
|
*(dp++) = *(sp++);
|
||||||
|
*(dp++) = *(sp++);
|
||||||
|
*(dp++) = *(sp++);
|
||||||
|
*(dp++) = *(sp++);
|
||||||
|
*(dp++) = 255 - *(sp++);
|
||||||
|
*(dp++) = 255 - *(sp++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
|
||||||
|
{
|
||||||
|
/* This inverts the alpha channel in GA */
|
||||||
|
if (row_info->bit_depth == 8)
|
||||||
|
{
|
||||||
|
png_bytep sp, dp;
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
for (i = 0, sp = dp = row; i < row_info->width; i++)
|
||||||
|
{
|
||||||
|
*(dp++) = *(sp++);
|
||||||
|
*(dp++) = 255 - *(sp++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* This inverts the alpha channel in GGAA */
|
||||||
|
else
|
||||||
|
{
|
||||||
|
png_bytep sp, dp;
|
||||||
|
png_uint_32 i;
|
||||||
|
|
||||||
|
for (i = 0, sp = dp = row; i < row_info->width; i++)
|
||||||
|
{
|
||||||
|
*(dp++) = *(sp++);
|
||||||
|
*(dp++) = *(sp++);
|
||||||
|
*(dp++) = 255 - *(sp++);
|
||||||
|
*(dp++) = 255 - *(sp++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
1934
thirdparty/libpng/pngwutil.c
vendored
Normal file
1934
thirdparty/libpng/pngwutil.c
vendored
Normal file
File diff suppressed because it is too large
Load Diff
7
thirdparty/libpng/scripts/SCOPTIONS.ppc
vendored
Normal file
7
thirdparty/libpng/scripts/SCOPTIONS.ppc
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
OPTIMIZE
|
||||||
|
OPTPEEP
|
||||||
|
OPTTIME
|
||||||
|
OPTSCHED
|
||||||
|
AUTOREGISTER
|
||||||
|
PARMS=REGISTERS
|
||||||
|
INCLUDEDIR=hlp:ppc/include
|
2
thirdparty/libpng/scripts/build.bat
vendored
Normal file
2
thirdparty/libpng/scripts/build.bat
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
make -fmakefile.bor -B -DMODEL=m %1 %2 %3 libpng >buildm.out
|
||||||
|
make -fmakefile.bor -B -DMODEL=l %1 %2 %3 libpng >buildl.out
|
52
thirdparty/libpng/scripts/descrip.mms
vendored
Normal file
52
thirdparty/libpng/scripts/descrip.mms
vendored
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
|
||||||
|
cc_defs = /inc=$(ZLIBSRC)
|
||||||
|
c_deb =
|
||||||
|
|
||||||
|
.ifdef __DECC__
|
||||||
|
pref = /prefix=all
|
||||||
|
.endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
OBJS = png.obj, pngset.obj, pngget.obj, pngrutil.obj, pngtrans.obj,\
|
||||||
|
pngwutil.obj, pngread.obj, pngmem.obj, pngwrite.obj, pngrtran.obj,\
|
||||||
|
pngwtran.obj, pngrio.obj, pngwio.obj, pngerror.obj, pngpread.obj
|
||||||
|
|
||||||
|
|
||||||
|
CFLAGS= $(C_DEB) $(CC_DEFS) $(PREF)
|
||||||
|
|
||||||
|
all : pngtest.exe libpng.olb
|
||||||
|
@ write sys$output " pngtest available"
|
||||||
|
|
||||||
|
libpng.olb : libpng.olb($(OBJS))
|
||||||
|
@ write sys$output " Libpng available"
|
||||||
|
|
||||||
|
|
||||||
|
pngtest.exe : pngtest.obj libpng.olb
|
||||||
|
link pngtest,libpng.olb/lib,$(ZLIBSRC)libz.olb/lib
|
||||||
|
|
||||||
|
test : pngtest.exe
|
||||||
|
run pngtest
|
||||||
|
|
||||||
|
clean :
|
||||||
|
delete *.obj;*,*.exe;*
|
||||||
|
|
||||||
|
|
||||||
|
# Other dependencies.
|
||||||
|
png.obj : png.h, pngconf.h
|
||||||
|
pngpread.obj : png.h, pngconf.h
|
||||||
|
pngset.obj : png.h, pngconf.h
|
||||||
|
pngget.obj : png.h, pngconf.h
|
||||||
|
pngread.obj : png.h, pngconf.h
|
||||||
|
pngrtran.obj : png.h, pngconf.h
|
||||||
|
pngrutil.obj : png.h, pngconf.h
|
||||||
|
pngerror.obj : png.h, pngconf.h
|
||||||
|
pngmem.obj : png.h, pngconf.h
|
||||||
|
pngrio.obj : png.h, pngconf.h
|
||||||
|
pngwio.obj : png.h, pngconf.h
|
||||||
|
pngtest.obj : png.h, pngconf.h
|
||||||
|
pngtrans.obj : png.h, pngconf.h
|
||||||
|
pngwrite.obj : png.h, pngconf.h
|
||||||
|
pngwtran.obj : png.h, pngconf.h
|
||||||
|
pngwutil.obj : png.h, pngconf.h
|
||||||
|
|
221
thirdparty/libpng/scripts/makefile.aco
vendored
Normal file
221
thirdparty/libpng/scripts/makefile.aco
vendored
Normal file
@ -0,0 +1,221 @@
|
|||||||
|
# Project: libpng
|
||||||
|
|
||||||
|
|
||||||
|
# Toolflags:
|
||||||
|
CCflags = -c -depend !Depend -IC:,Zlib: -g -throwback -DRISCOS -fnah
|
||||||
|
C++flags = -c -depend !Depend -IC: -throwback
|
||||||
|
Linkflags = -aif -c++ -o $@
|
||||||
|
ObjAsmflags = -throwback -NoCache -depend !Depend
|
||||||
|
CMHGflags =
|
||||||
|
LibFileflags = -c -l -o $@
|
||||||
|
Squeezeflags = -o $@
|
||||||
|
|
||||||
|
|
||||||
|
# Final targets:
|
||||||
|
@.libpng-lib: @.o.png @.o.pngerror @.o.pngrio @.o.pngwio @.o.pngmem \
|
||||||
|
@.o.pngpread @.o.pngset @.o.pngget @.o.pngread @.o.pngrtran \
|
||||||
|
@.o.pngrutil @.o.pngtrans @.o.pngwrite @.o.pngwtran @.o.pngwutil
|
||||||
|
LibFile $(LibFileflags) @.o.png @.o.pngerror @.o.pngrio @.o.pngrtran \
|
||||||
|
@.o.pngmem @.o.pngpread @.o.pngset @.o.pngget @.o.pngread @.o.pngwio \
|
||||||
|
@.o.pngrutil @.o.pngtrans @.o.pngwrite @.o.pngwtran @.o.pngwutil
|
||||||
|
@.mm-libpng-lib: @.mm.png @.mm.pngerror @.mm.pngrio @.mm.pngwio @.mm.pngmem \
|
||||||
|
@.mm.pngpread @.mm.pngset @.mm.pngget @.mm.pngread @.mm.pngrtran \
|
||||||
|
@.mm.pngrutil @.mm.pngtrans @.mm.pngwrite @.mm.pngwtran @.mm.pngwutil
|
||||||
|
LibFile $(LibFileflags) @.mm.png @.mm.pngerror @.mm.pngrio \
|
||||||
|
@.mm.pngwio @.mm.pngmem @.mm.pngpread @.mm.pngset @.mm.pngget \
|
||||||
|
@.mm.pngread @.mm.pngrtran @.mm.pngrutil @.mm.pngtrans @.mm.pngwrite \
|
||||||
|
@.mm.pngwtran @.mm.pngwutil
|
||||||
|
|
||||||
|
|
||||||
|
# User-editable dependencies:
|
||||||
|
# (C) Copyright 1997 Tom Tanner
|
||||||
|
Test: @.pngtest
|
||||||
|
<Prefix$Dir>.pngtest
|
||||||
|
@remove <Prefix$Dir>.pngtest
|
||||||
|
|
||||||
|
#It would be nice if you could stop "make" listing from here on!
|
||||||
|
@.pngtest: @.o.pngtest @.libpng-lib C:o.Stubs Zlib:zlib_lib
|
||||||
|
Link $(Linkflags) @.o.pngtest @.libpng-lib C:o.Stubs Zlib:zlib_lib
|
||||||
|
|
||||||
|
.SUFFIXES: .o .mm .c
|
||||||
|
|
||||||
|
.c.mm:
|
||||||
|
MemCheck.CC cc $(ccflags) -o $@ LibPng:$<
|
||||||
|
.c.o:
|
||||||
|
cc $(ccflags) -o $@ $<
|
||||||
|
|
||||||
|
|
||||||
|
# Static dependencies:
|
||||||
|
|
||||||
|
|
||||||
|
# Dynamic dependencies:
|
||||||
|
o.pngtest: c.pngtest
|
||||||
|
o.pngtest: h.png
|
||||||
|
o.pngtest: Zlib:h.zlib
|
||||||
|
o.pngtest: Zlib:h.zconf
|
||||||
|
o.pngtest: h.pngconf
|
||||||
|
mm.png: LibPng:c.png
|
||||||
|
mm.png: LibPng:h.png
|
||||||
|
mm.png: Zlib:h.zlib
|
||||||
|
mm.png: Zlib:h.zconf
|
||||||
|
mm.png: LibPng:h.pngconf
|
||||||
|
mm.png: MemCheck:ANSI.h.stdio
|
||||||
|
mm.pngerror: LibPng:c.pngerror
|
||||||
|
mm.pngerror: LibPng:h.png
|
||||||
|
mm.pngerror: Zlib:h.zlib
|
||||||
|
mm.pngerror: Zlib:h.zconf
|
||||||
|
mm.pngerror: LibPng:h.pngconf
|
||||||
|
mm.pngerror: MemCheck:ANSI.h.stdio
|
||||||
|
mm.pngrio: LibPng:c.pngrio
|
||||||
|
mm.pngrio: LibPng:h.png
|
||||||
|
mm.pngrio: Zlib:h.zlib
|
||||||
|
mm.pngrio: Zlib:h.zconf
|
||||||
|
mm.pngrio: LibPng:h.pngconf
|
||||||
|
mm.pngrio: MemCheck:ANSI.h.stdio
|
||||||
|
mm.pngwio: LibPng:c.pngwio
|
||||||
|
mm.pngwio: LibPng:h.png
|
||||||
|
mm.pngwio: Zlib:h.zlib
|
||||||
|
mm.pngwio: Zlib:h.zconf
|
||||||
|
mm.pngwio: LibPng:h.pngconf
|
||||||
|
mm.pngwio: MemCheck:ANSI.h.stdio
|
||||||
|
mm.pngmem: LibPng:c.pngmem
|
||||||
|
mm.pngmem: LibPng:h.png
|
||||||
|
mm.pngmem: Zlib:h.zlib
|
||||||
|
mm.pngmem: Zlib:h.zconf
|
||||||
|
mm.pngmem: LibPng:h.pngconf
|
||||||
|
mm.pngmem: MemCheck:ANSI.h.stdio
|
||||||
|
mm.pngpread: LibPng:c.pngpread
|
||||||
|
mm.pngpread: LibPng:h.png
|
||||||
|
mm.pngpread: Zlib:h.zlib
|
||||||
|
mm.pngpread: Zlib:h.zconf
|
||||||
|
mm.pngpread: LibPng:h.pngconf
|
||||||
|
mm.pngpread: MemCheck:ANSI.h.stdio
|
||||||
|
mm.pngset: LibPng:c.pngset
|
||||||
|
mm.pngset: LibPng:h.png
|
||||||
|
mm.pngset: Zlib:h.zlib
|
||||||
|
mm.pngset: Zlib:h.zconf
|
||||||
|
mm.pngset: LibPng:h.pngconf
|
||||||
|
mm.pngset: MemCheck:ANSI.h.stdio
|
||||||
|
mm.pngget: LibPng:c.pngget
|
||||||
|
mm.pngget: LibPng:h.png
|
||||||
|
mm.pngget: Zlib:h.zlib
|
||||||
|
mm.pngget: Zlib:h.zconf
|
||||||
|
mm.pngget: LibPng:h.pngconf
|
||||||
|
mm.pngget: MemCheck:ANSI.h.stdio
|
||||||
|
mm.pngread: LibPng:c.pngread
|
||||||
|
mm.pngread: LibPng:h.png
|
||||||
|
mm.pngread: Zlib:h.zlib
|
||||||
|
mm.pngread: Zlib:h.zconf
|
||||||
|
mm.pngread: LibPng:h.pngconf
|
||||||
|
mm.pngread: MemCheck:ANSI.h.stdio
|
||||||
|
mm.pngrtran: LibPng:c.pngrtran
|
||||||
|
mm.pngrtran: LibPng:h.png
|
||||||
|
mm.pngrtran: Zlib:h.zlib
|
||||||
|
mm.pngrtran: Zlib:h.zconf
|
||||||
|
mm.pngrtran: LibPng:h.pngconf
|
||||||
|
mm.pngrtran: MemCheck:ANSI.h.stdio
|
||||||
|
mm.pngrutil: LibPng:c.pngrutil
|
||||||
|
mm.pngrutil: LibPng:h.png
|
||||||
|
mm.pngrutil: Zlib:h.zlib
|
||||||
|
mm.pngrutil: Zlib:h.zconf
|
||||||
|
mm.pngrutil: LibPng:h.pngconf
|
||||||
|
mm.pngrutil: MemCheck:ANSI.h.stdio
|
||||||
|
mm.pngtrans: LibPng:c.pngtrans
|
||||||
|
mm.pngtrans: LibPng:h.png
|
||||||
|
mm.pngtrans: Zlib:h.zlib
|
||||||
|
mm.pngtrans: Zlib:h.zconf
|
||||||
|
mm.pngtrans: LibPng:h.pngconf
|
||||||
|
mm.pngtrans: MemCheck:ANSI.h.stdio
|
||||||
|
mm.pngwrite: LibPng:c.pngwrite
|
||||||
|
mm.pngwrite: LibPng:h.png
|
||||||
|
mm.pngwrite: Zlib:h.zlib
|
||||||
|
mm.pngwrite: Zlib:h.zconf
|
||||||
|
mm.pngwrite: LibPng:h.pngconf
|
||||||
|
mm.pngwrite: MemCheck:ANSI.h.stdio
|
||||||
|
mm.pngwtran: LibPng:c.pngwtran
|
||||||
|
mm.pngwtran: LibPng:h.png
|
||||||
|
mm.pngwtran: Zlib:h.zlib
|
||||||
|
mm.pngwtran: Zlib:h.zconf
|
||||||
|
mm.pngwtran: LibPng:h.pngconf
|
||||||
|
mm.pngwtran: MemCheck:ANSI.h.stdio
|
||||||
|
mm.pngwutil: LibPng:c.pngwutil
|
||||||
|
mm.pngwutil: LibPng:h.png
|
||||||
|
mm.pngwutil: Zlib:h.zlib
|
||||||
|
mm.pngwutil: Zlib:h.zconf
|
||||||
|
mm.pngwutil: LibPng:h.pngconf
|
||||||
|
mm.pngwutil: MemCheck:ANSI.h.stdio
|
||||||
|
o.png: c.png
|
||||||
|
o.png: h.png
|
||||||
|
o.png: Zlib:h.zlib
|
||||||
|
o.png: Zlib:h.zconf
|
||||||
|
o.png: h.pngconf
|
||||||
|
o.pngerror: c.pngerror
|
||||||
|
o.pngerror: h.png
|
||||||
|
o.pngerror: Zlib:h.zlib
|
||||||
|
o.pngerror: Zlib:h.zconf
|
||||||
|
o.pngerror: h.pngconf
|
||||||
|
o.pngrio: c.pngrio
|
||||||
|
o.pngrio: h.png
|
||||||
|
o.pngrio: Zlib:h.zlib
|
||||||
|
o.pngrio: Zlib:h.zconf
|
||||||
|
o.pngrio: h.pngconf
|
||||||
|
o.pngwio: c.pngwio
|
||||||
|
o.pngwio: h.png
|
||||||
|
o.pngwio: Zlib:h.zlib
|
||||||
|
o.pngwio: Zlib:h.zconf
|
||||||
|
o.pngwio: h.pngconf
|
||||||
|
o.pngmem: c.pngmem
|
||||||
|
o.pngmem: h.png
|
||||||
|
o.pngmem: Zlib:h.zlib
|
||||||
|
o.pngmem: Zlib:h.zconf
|
||||||
|
o.pngmem: h.pngconf
|
||||||
|
o.pngpread: c.pngpread
|
||||||
|
o.pngpread: h.png
|
||||||
|
o.pngpread: Zlib:h.zlib
|
||||||
|
o.pngpread: Zlib:h.zconf
|
||||||
|
o.pngpread: h.pngconf
|
||||||
|
o.pngset: c.pngset
|
||||||
|
o.pngset: h.png
|
||||||
|
o.pngset: Zlib:h.zlib
|
||||||
|
o.pngset: Zlib:h.zconf
|
||||||
|
o.pngset: h.pngconf
|
||||||
|
o.pngget: c.pngget
|
||||||
|
o.pngget: h.png
|
||||||
|
o.pngget: Zlib:h.zlib
|
||||||
|
o.pngget: Zlib:h.zconf
|
||||||
|
o.pngget: h.pngconf
|
||||||
|
o.pngread: c.pngread
|
||||||
|
o.pngread: h.png
|
||||||
|
o.pngread: Zlib:h.zlib
|
||||||
|
o.pngread: Zlib:h.zconf
|
||||||
|
o.pngread: h.pngconf
|
||||||
|
o.pngrtran: c.pngrtran
|
||||||
|
o.pngrtran: h.png
|
||||||
|
o.pngrtran: Zlib:h.zlib
|
||||||
|
o.pngrtran: Zlib:h.zconf
|
||||||
|
o.pngrtran: h.pngconf
|
||||||
|
o.pngrutil: c.pngrutil
|
||||||
|
o.pngrutil: h.png
|
||||||
|
o.pngrutil: Zlib:h.zlib
|
||||||
|
o.pngrutil: Zlib:h.zconf
|
||||||
|
o.pngrutil: h.pngconf
|
||||||
|
o.pngtrans: c.pngtrans
|
||||||
|
o.pngtrans: h.png
|
||||||
|
o.pngtrans: Zlib:h.zlib
|
||||||
|
o.pngtrans: Zlib:h.zconf
|
||||||
|
o.pngtrans: h.pngconf
|
||||||
|
o.pngwrite: c.pngwrite
|
||||||
|
o.pngwrite: h.png
|
||||||
|
o.pngwrite: Zlib:h.zlib
|
||||||
|
o.pngwrite: Zlib:h.zconf
|
||||||
|
o.pngwrite: h.pngconf
|
||||||
|
o.pngwtran: c.pngwtran
|
||||||
|
o.pngwtran: h.png
|
||||||
|
o.pngwtran: Zlib:h.zlib
|
||||||
|
o.pngwtran: Zlib:h.zconf
|
||||||
|
o.pngwtran: h.pngconf
|
||||||
|
o.pngwutil: c.pngwutil
|
||||||
|
o.pngwutil: h.png
|
||||||
|
o.pngwutil: Zlib:h.zlib
|
||||||
|
o.pngwutil: Zlib:h.zconf
|
||||||
|
o.pngwutil: h.pngconf
|
42
thirdparty/libpng/scripts/makefile.ama
vendored
Normal file
42
thirdparty/libpng/scripts/makefile.ama
vendored
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
# Commodore Amiga Makefile
|
||||||
|
# makefile for libpng and SAS C V6.55 compiler
|
||||||
|
# Copyright (C) 1995 Wolf Faust
|
||||||
|
|
||||||
|
#compiler
|
||||||
|
CC=sc
|
||||||
|
#compiler flags
|
||||||
|
# WARNING: a bug in V6.51 causes bad code with OPTGO
|
||||||
|
# So use V6.55 or set NOOPTGO!!!!!!!!!
|
||||||
|
CFLAGS= NOSTKCHK PARMS=REG OPTIMIZE OPTGO OPTPEEP OPTINLOCAL OPTINL\
|
||||||
|
OPTLOOP OPTRDEP=4 OPTDEP=4 OPTCOMP=4 DEFINE=PNG_INTERNAL
|
||||||
|
#linker flags
|
||||||
|
LDFLAGS= SD ND BATCH
|
||||||
|
#link libs
|
||||||
|
LDLIBS= libpng.lib libgz.lib LIB:scm.lib LIB:sc.lib Lib:amiga.lib
|
||||||
|
# linker
|
||||||
|
LN= slink
|
||||||
|
# file deletion command
|
||||||
|
RM= delete quiet
|
||||||
|
# library (.lib) file creation command
|
||||||
|
AR= oml
|
||||||
|
# make directory command
|
||||||
|
MKDIR= makedir
|
||||||
|
|
||||||
|
OBJS = png.o pngset.o pngget.o pngrutil.o pngtrans.o pngwutil.o pngpread.o \
|
||||||
|
pngread.o pngerror.o pngwrite.o pngrtran.o pngwtran.o pngrio.o pngwio.o pngmem.o
|
||||||
|
|
||||||
|
all: libpng.lib pngtest
|
||||||
|
|
||||||
|
libpng.lib: $(OBJS)
|
||||||
|
-$(RM) libpng.lib
|
||||||
|
$(AR) libpng.lib r $(OBJS)
|
||||||
|
|
||||||
|
pngtest: pngtest.o libpng.lib
|
||||||
|
$(LN) <WITH <
|
||||||
|
$(LDFLAGS)
|
||||||
|
TO pngtest
|
||||||
|
FROM LIB:c.o pngtest.o
|
||||||
|
LIB $(LDLIBS)
|
||||||
|
<
|
||||||
|
|
||||||
|
|
31
thirdparty/libpng/scripts/makefile.atr
vendored
Normal file
31
thirdparty/libpng/scripts/makefile.atr
vendored
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# makefile for libpng
|
||||||
|
# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
# For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
# modified for LC56/ATARI assumes libz.lib is in same dir and uses default
|
||||||
|
# rules for library management
|
||||||
|
#
|
||||||
|
CFLAGS=-I..\zlib -O
|
||||||
|
LBR = png.lib
|
||||||
|
LDFLAGS=-lpng -lz -lm
|
||||||
|
|
||||||
|
# where make install puts libpng.a and png.h
|
||||||
|
|
||||||
|
OBJS = $(LBR)(png.o) $(LBR)(pngset.o) $(LBR)(pngget.o) $(LBR)(pngrutil.o)\
|
||||||
|
$(LBR)(pngtrans.o) $(LBR)(pngwutil.o)\
|
||||||
|
$(LBR)(pngread.o) $(LBR)(pngerror.o) $(LBR)(pngwrite.o)\
|
||||||
|
$(LBR)(pngrtran.o) $(LBR)(pngwtran.o)\
|
||||||
|
$(LBR)(pngmem.o) $(LBR)(pngrio.o) $(LBR)(pngwio.o) $(LBR)(pngpread.o)
|
||||||
|
|
||||||
|
all: $(LBR) pngtest.ttp
|
||||||
|
|
||||||
|
$(LBR): $(OBJS)
|
||||||
|
|
||||||
|
pngtest.ttp: pngtest.o $(LBR)
|
||||||
|
$(CC) $(CFLAGS) $(LDFLAGS) -o$@ pngtest.o
|
||||||
|
|
||||||
|
install: libpng.a
|
||||||
|
-@mkdir $(prefix)/include
|
||||||
|
-@mkdir $(prefix)/lib
|
||||||
|
cp png.h $(prefix)/include
|
||||||
|
cp pngconf.h $(prefix)/include
|
||||||
|
chmod 644 $(prefix)/include/p
|
168
thirdparty/libpng/scripts/makefile.bor
vendored
Normal file
168
thirdparty/libpng/scripts/makefile.bor
vendored
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
# Makefile for libpng
|
||||||
|
# Borland C++ 4.5 (Note: All modules are compiled in C mode)
|
||||||
|
# Will work with C++ 4.02 also
|
||||||
|
# To build the library, do:
|
||||||
|
# "make -fmakefile.bor -DMODEL=m"
|
||||||
|
# or: "make -fmakefile.bor -DMODEL=l"
|
||||||
|
#
|
||||||
|
# ------------- Borland C++ 4.5 -------------
|
||||||
|
|
||||||
|
### Absolutely necessary for this makefile to work
|
||||||
|
.AUTODEPEND
|
||||||
|
|
||||||
|
## Useful user options
|
||||||
|
|
||||||
|
# Usually defined in builtins.mak or the environment
|
||||||
|
# Currently unused.
|
||||||
|
!ifndef BCROOT
|
||||||
|
BCROOT=N:\BC45
|
||||||
|
!endif
|
||||||
|
|
||||||
|
# Where zlib.h and zconf.h and zlib.lib are
|
||||||
|
ZLIB_PATH=..\zlib
|
||||||
|
|
||||||
|
!ifndef MODEL
|
||||||
|
MODEL=l
|
||||||
|
!endif
|
||||||
|
|
||||||
|
#TARGET_CPU=3
|
||||||
|
# 2 = 286, 3 = 386, etc.
|
||||||
|
!ifndef TARGET_CPU
|
||||||
|
TARGET_CPU=2
|
||||||
|
!endif
|
||||||
|
|
||||||
|
|
||||||
|
# Use this if you don't want Borland's fancy exception handling.
|
||||||
|
NOEHLIB=noeh$(MODEL).lib
|
||||||
|
|
||||||
|
!ifdef DEBUG
|
||||||
|
CDEBUG=-v
|
||||||
|
LDEBUG=-v
|
||||||
|
!else
|
||||||
|
CDEBUG=
|
||||||
|
LDEBUG=
|
||||||
|
!endif
|
||||||
|
|
||||||
|
# STACKOFLOW=1
|
||||||
|
!ifdef STACKOFLOW
|
||||||
|
CDEBUG=$(CDEBUG) -N
|
||||||
|
LDEBUG=$(LDEBUG) -N
|
||||||
|
!endif
|
||||||
|
|
||||||
|
|
||||||
|
## Compiler, linker, and lib stuff
|
||||||
|
CC=bcc
|
||||||
|
LD=bcc
|
||||||
|
LIB=tlib
|
||||||
|
|
||||||
|
MODELARG=-m$(MODEL)
|
||||||
|
|
||||||
|
# -X- turns on dependency generation in the object file
|
||||||
|
# -w sets all warnings on
|
||||||
|
# -O2 optimize for speed
|
||||||
|
# -Z global optimization
|
||||||
|
CFLAGS=-O2 -Z -X- -w -I$(ZLIB_PATH) -$(TARGET_CPU) $(MODELARG) $(CDEBUG)
|
||||||
|
|
||||||
|
# -M generate map file
|
||||||
|
LDFLAGS=-M $(LDEBUG)
|
||||||
|
|
||||||
|
O=obj
|
||||||
|
|
||||||
|
## variables
|
||||||
|
OBJS = \
|
||||||
|
png.$(O) \
|
||||||
|
pngerror.$(O) \
|
||||||
|
pngmem.$(O) \
|
||||||
|
pngpread.$(O) \
|
||||||
|
pngset.$(O) \
|
||||||
|
pngget.$(O) \
|
||||||
|
pngread.$(O) \
|
||||||
|
pngrio.$(O) \
|
||||||
|
pngrtran.$(O) \
|
||||||
|
pngrutil.$(O) \
|
||||||
|
pngtrans.$(O) \
|
||||||
|
pngwrite.$(O) \
|
||||||
|
pngwtran.$(O) \
|
||||||
|
pngwio.$(O) \
|
||||||
|
pngwutil.$(O)
|
||||||
|
|
||||||
|
LIBOBJS = \
|
||||||
|
+png.$(O) \
|
||||||
|
+pngerror.$(O) \
|
||||||
|
+pngmem.$(O) \
|
||||||
|
+pngpread.$(O) \
|
||||||
|
+pngread.$(O) \
|
||||||
|
+pngset.$(O) \
|
||||||
|
+pngget.$(O) \
|
||||||
|
+pngrio.$(O) \
|
||||||
|
+pngrtran.$(O) \
|
||||||
|
+pngrutil.$(O) \
|
||||||
|
+pngtrans.$(O) \
|
||||||
|
+pngwrite.$(O) \
|
||||||
|
+pngwtran.$(O) \
|
||||||
|
+pngwio.$(O)
|
||||||
|
+pngwutil.$(O)
|
||||||
|
|
||||||
|
LIBNAME=libpng$(MODEL).lib
|
||||||
|
|
||||||
|
|
||||||
|
## Implicit rules
|
||||||
|
# Braces let make "batch" calls to the compiler,
|
||||||
|
# 2 calls instead of 12; space is important.
|
||||||
|
.c.obj:
|
||||||
|
$(CC) $(CFLAGS) -c {$*.c }
|
||||||
|
|
||||||
|
.c.exe:
|
||||||
|
$(CC) $(CFLAGS) $(LDFLAGS) $*.c
|
||||||
|
|
||||||
|
|
||||||
|
## Major targets
|
||||||
|
libpng: $(LIBNAME)
|
||||||
|
|
||||||
|
pngtest: pngtest$(MODEL).exe
|
||||||
|
|
||||||
|
test:
|
||||||
|
pngtest$(MODEL)
|
||||||
|
|
||||||
|
|
||||||
|
## Minor Targets
|
||||||
|
|
||||||
|
png.obj: png.c
|
||||||
|
pngset.obj: pngset.c
|
||||||
|
pngget.obj: pngget.c
|
||||||
|
pngread.obj: pngread.c
|
||||||
|
pngpread.obj: pngpread.c
|
||||||
|
pngrtran.obj: pngrtran.c
|
||||||
|
pngrutil.obj: pngrutil.c
|
||||||
|
pngerror.obj: pngerror.c
|
||||||
|
pngmem.obj: pngmem.c
|
||||||
|
pngrio.obj: pngrio.c
|
||||||
|
pngwio.obj: pngwio.c
|
||||||
|
pngtrans.obj: pngtrans.c
|
||||||
|
pngwrite.obj: pngwrite.c
|
||||||
|
pngwtran.obj: pngwtran.c
|
||||||
|
pngwutil.obj: pngwutil.c
|
||||||
|
|
||||||
|
|
||||||
|
$(LIBNAME): $(OBJS)
|
||||||
|
-del $(LIBNAME)
|
||||||
|
$(LIB) $(LIBNAME) @&&|
|
||||||
|
$(LIBOBJS), libpng$(MODEL)
|
||||||
|
|
|
||||||
|
|
||||||
|
|
||||||
|
pngtest$(MODEL).obj: pngtest.c
|
||||||
|
$(CC) $(CFLAGS) -opngtest$(MODEL) -c pngtest.c
|
||||||
|
|
||||||
|
pngtest$(MODEL).exe: pngtest$(MODEL).obj
|
||||||
|
$(CC) $(MODELARG) $(LDFLAGS) -L$(ZLIB_PATH) pngtest$(MODEL).obj $(LIBNAME) zlib$(MODEL).lib $(NOEHLIB)
|
||||||
|
|
||||||
|
|
||||||
|
# Clean up anything else you want
|
||||||
|
clean:
|
||||||
|
-del *.obj
|
||||||
|
-del *.lib
|
||||||
|
-del *.lst
|
||||||
|
|
||||||
|
|
||||||
|
# End of makefile for libpng
|
68
thirdparty/libpng/scripts/makefile.dec
vendored
Normal file
68
thirdparty/libpng/scripts/makefile.dec
vendored
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
# makefile for libpng on DEC Alpha Unix
|
||||||
|
# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
# For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
|
||||||
|
# Where the zlib library and include files are located
|
||||||
|
#ZLIBLIB=/usr/local/lib
|
||||||
|
#ZLIBINC=/usr/local/include
|
||||||
|
ZLIBLIB=../zlib
|
||||||
|
ZLIBINC=../zlib
|
||||||
|
|
||||||
|
CC=cc
|
||||||
|
CFLAGS=-std -w1 -I$(ZLIBINC) -O # -g -DPNG_DEBUG=1
|
||||||
|
LDFLAGS=-L. -L$(ZLIBLIB) -lpng -lz -lm
|
||||||
|
|
||||||
|
#RANLIB=echo
|
||||||
|
RANLIB=ranlib
|
||||||
|
|
||||||
|
# where make install puts libpng.a and png.h
|
||||||
|
prefix=/usr/local
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
all: libpng.a pngtest
|
||||||
|
|
||||||
|
libpng.a: $(OBJS)
|
||||||
|
ar rc $@ $(OBJS)
|
||||||
|
$(RANLIB) $@
|
||||||
|
|
||||||
|
pngtest: pngtest.o libpng.a
|
||||||
|
$(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
|
||||||
|
|
||||||
|
test: pngtest
|
||||||
|
./pngtest
|
||||||
|
|
||||||
|
install: libpng.a
|
||||||
|
-@mkdir $(prefix)/include
|
||||||
|
-@mkdir $(prefix)/lib
|
||||||
|
cp png.h $(prefix)/include
|
||||||
|
cp pngconf.h $(prefix)/include
|
||||||
|
chmod 644 $(prefix)/include/png.h
|
||||||
|
chmod 644 $(prefix)/include/pngconf.h
|
||||||
|
cp libpng.a $(prefix)/lib
|
||||||
|
chmod 644 $(prefix)/lib/libpng.a
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o libpng.a pngtest pngout.png
|
||||||
|
|
||||||
|
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||||
|
|
||||||
|
png.o: png.h pngconf.h
|
||||||
|
pngerror.o: png.h pngconf.h
|
||||||
|
pngrio.o: png.h pngconf.h
|
||||||
|
pngwio.o: png.h pngconf.h
|
||||||
|
pngmem.o: png.h pngconf.h
|
||||||
|
pngset.o: png.h pngconf.h
|
||||||
|
pngget.o: png.h pngconf.h
|
||||||
|
pngread.o: png.h pngconf.h
|
||||||
|
pngrtran.o: png.h pngconf.h
|
||||||
|
pngrutil.o: png.h pngconf.h
|
||||||
|
pngtest.o: png.h pngconf.h
|
||||||
|
pngtrans.o: png.h pngconf.h
|
||||||
|
pngwrite.o: png.h pngconf.h
|
||||||
|
pngwtran.o: png.h pngconf.h
|
||||||
|
pngwutil.o: png.h pngconf.h
|
||||||
|
pngpread.o: png.h pngconf.h
|
||||||
|
|
52
thirdparty/libpng/scripts/makefile.dj2
vendored
Normal file
52
thirdparty/libpng/scripts/makefile.dj2
vendored
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
# DJGPP (DOS gcc) makefile for libpng
|
||||||
|
# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
# For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
|
||||||
|
CC=gcc
|
||||||
|
CFLAGS=-I../zlib -O
|
||||||
|
LDFLAGS=-L. -L../zlib/ -lpng -lz -lm
|
||||||
|
|
||||||
|
RANLIB=ranlib
|
||||||
|
|
||||||
|
# where make install puts libpng.a and png.h
|
||||||
|
#prefix=/usr/local
|
||||||
|
prefix=.
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
all: libpng.a pngtest
|
||||||
|
|
||||||
|
libpng.a: $(OBJS)
|
||||||
|
ar rc $@ $(OBJS)
|
||||||
|
$(RANLIB) $@
|
||||||
|
|
||||||
|
pngtest: pngtest.o libpng.a
|
||||||
|
$(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
|
||||||
|
coff2exe pngtest
|
||||||
|
|
||||||
|
test: pngtest
|
||||||
|
./pngtest
|
||||||
|
clean:
|
||||||
|
rm -f *.o libpng.a pngtest pngout.png
|
||||||
|
|
||||||
|
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||||
|
|
||||||
|
png.o: png.h pngconf.h
|
||||||
|
pngerror.o: png.h pngconf.h
|
||||||
|
pngrio.o: png.h pngconf.h
|
||||||
|
pngwio.o: png.h pngconf.h
|
||||||
|
pngmem.o: png.h pngconf.h
|
||||||
|
pngset.o: png.h pngconf.h
|
||||||
|
pngget.o: png.h pngconf.h
|
||||||
|
pngread.o: png.h pngconf.h
|
||||||
|
pngpread.o: png.h pngconf.h
|
||||||
|
pngrtran.o: png.h pngconf.h
|
||||||
|
pngrutil.o: png.h pngconf.h
|
||||||
|
pngtest.o: png.h pngconf.h
|
||||||
|
pngtrans.o: png.h pngconf.h
|
||||||
|
pngwrite.o: png.h pngconf.h
|
||||||
|
pngwtran.o: png.h pngconf.h
|
||||||
|
pngwutil.o: png.h pngconf.h
|
||||||
|
|
73
thirdparty/libpng/scripts/makefile.knr
vendored
Normal file
73
thirdparty/libpng/scripts/makefile.knr
vendored
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
# makefile for libpng
|
||||||
|
# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
# For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
|
||||||
|
CC=cc
|
||||||
|
CFLAGS=-I../zlib -O
|
||||||
|
LDFLAGS=-L. -L../zlib/ -lpng -lz -lm
|
||||||
|
# flags for ansi2knr
|
||||||
|
ANSI2KNRFLAGS=
|
||||||
|
|
||||||
|
RANLIB=ranlib
|
||||||
|
#RANLIB=echo
|
||||||
|
|
||||||
|
# where make install puts libpng.a and png.h
|
||||||
|
prefix=/usr/local
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
all: ansi2knr libpng.a pngtest
|
||||||
|
|
||||||
|
# general rule to allow ansi2knr to work
|
||||||
|
.c.o:
|
||||||
|
./ansi2knr $*.c T$*.c
|
||||||
|
$(CC) $(CFLAGS) -c T$*.c
|
||||||
|
rm -f T$*.c $*.o
|
||||||
|
mv T$*.o $*.o
|
||||||
|
|
||||||
|
ansi2knr: ansi2knr.c
|
||||||
|
$(CC) $(CFLAGS) $(ANSI2KNRFLAGS) -o ansi2knr ansi2knr.c
|
||||||
|
|
||||||
|
libpng.a: ansi2knr $(OBJS)
|
||||||
|
ar rc $@ $(OBJS)
|
||||||
|
$(RANLIB) $@
|
||||||
|
|
||||||
|
pngtest: pngtest.o libpng.a
|
||||||
|
$(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
|
||||||
|
|
||||||
|
test: pngtest
|
||||||
|
./pngtest
|
||||||
|
|
||||||
|
install: libpng.a
|
||||||
|
-@mkdir $(prefix)/include
|
||||||
|
-@mkdir $(prefix)/lib
|
||||||
|
cp png.h $(prefix)/include
|
||||||
|
cp pngconf.h $(prefix)/include
|
||||||
|
chmod 644 $(prefix)/include/png.h
|
||||||
|
chmod 644 $(prefix)/include/pngconf.h
|
||||||
|
cp libpng.a $(prefix)/lib
|
||||||
|
chmod 644 $(prefix)/lib/libpng.a
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o libpng.a pngtest pngout.png ansi2knr
|
||||||
|
|
||||||
|
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||||
|
|
||||||
|
png.o: png.h pngconf.h
|
||||||
|
pngerror.o: png.h pngconf.h
|
||||||
|
pngrio.o: png.h pngconf.h
|
||||||
|
pngwio.o: png.h pngconf.h
|
||||||
|
pngmem.o: png.h pngconf.h
|
||||||
|
pngset.o: png.h pngconf.h
|
||||||
|
pngget.o: png.h pngconf.h
|
||||||
|
pngread.o: png.h pngconf.h
|
||||||
|
pngpread.o: png.h pngconf.h
|
||||||
|
pngrtran.o: png.h pngconf.h
|
||||||
|
pngrutil.o: png.h pngconf.h
|
||||||
|
pngtest.o: png.h pngconf.h
|
||||||
|
pngtrans.o: png.h pngconf.h
|
||||||
|
pngwrite.o: png.h pngconf.h
|
||||||
|
pngwtran.o: png.h pngconf.h
|
||||||
|
pngwutil.o: png.h pngconf.h
|
99
thirdparty/libpng/scripts/makefile.lnx
vendored
Normal file
99
thirdparty/libpng/scripts/makefile.lnx
vendored
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
# makefile for libpng on Linux ELF with gcc
|
||||||
|
# Copyright (C) 1996, 1997 Andreas Dilger
|
||||||
|
# Copyright (C) 1998 Greg Roelofs
|
||||||
|
# For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
|
||||||
|
CC=gcc
|
||||||
|
|
||||||
|
# Where the zlib library and include files are located
|
||||||
|
#ZLIBLIB=/usr/local/lib
|
||||||
|
#ZLIBINC=/usr/local/include
|
||||||
|
ZLIBLIB=../zlib
|
||||||
|
ZLIBINC=../zlib
|
||||||
|
|
||||||
|
WARNMORE=-Wwrite-strings -Wpointer-arith -Wshadow \
|
||||||
|
-Wmissing-declarations -Wtraditional -Wcast-align \
|
||||||
|
-Wstrict-prototypes -Wmissing-prototypes #-Wconversion
|
||||||
|
CFLAGS=-I$(ZLIBINC) -Wall -O3 -funroll-loops -malign-loops=2 \
|
||||||
|
-malign-functions=2 #$(WARNMORE) -g -DPNG_DEBUG=5
|
||||||
|
LDFLAGS=-L. -Wl,-rpath,. -L$(ZLIBLIB) -Wl,-rpath,$(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
|
||||||
|
PNGVER = $(PNGMAJ).$(PNGMIN)
|
||||||
|
|
||||||
|
# where make install puts libpng.a, libpng.so*, and png.h
|
||||||
|
prefix=/usr/local
|
||||||
|
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.so pngtest
|
||||||
|
|
||||||
|
libpng.a: $(OBJS)
|
||||||
|
ar rc $@ $(OBJS)
|
||||||
|
$(RANLIB) $@
|
||||||
|
|
||||||
|
libpng.so: libpng.so.$(PNGMAJ)
|
||||||
|
ln -sf libpng.so.$(PNGMAJ) libpng.so
|
||||||
|
|
||||||
|
libpng.so.$(PNGMAJ): libpng.so.$(PNGVER)
|
||||||
|
ln -sf libpng.so.$(PNGVER) libpng.so.$(PNGMAJ)
|
||||||
|
|
||||||
|
libpng.so.$(PNGVER): $(OBJSDLL)
|
||||||
|
$(CC) -shared -Wl,-soname,libpng.so.$(PNGMAJ) -o libpng.so.$(PNGVER) \
|
||||||
|
$(OBJSDLL)
|
||||||
|
|
||||||
|
pngtest: pngtest.o libpng.so
|
||||||
|
$(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
|
||||||
|
|
||||||
|
test: pngtest
|
||||||
|
./pngtest
|
||||||
|
|
||||||
|
install: libpng.a libpng.so.$(PNGVER)
|
||||||
|
-@mkdir $(INCPATH) $(LIBPATH)
|
||||||
|
cp png.h pngconf.h $(INCPATH)
|
||||||
|
chmod 644 $(INCPATH)/png.h $(INCPATH)/pngconf.h
|
||||||
|
cp libpng.a libpng.so.$(PNGVER) $(LIBPATH)
|
||||||
|
chmod 755 $(LIBPATH)/libpng.so.$(PNGVER)
|
||||||
|
-@/bin/rm -f $(LIBPATH)/libpng.so.$(PNGMAJ) $(LIBPATH)/libpng.so
|
||||||
|
(cd $(LIBPATH); ln -sf libpng.so.$(PNGVER) libpng.so.$(PNGMAJ); \
|
||||||
|
ln -sf libpng.so.$(PNGMAJ) libpng.so)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
/bin/rm -f *.o libpng.a libpng.so* pngtest pngout.png
|
||||||
|
|
||||||
|
# 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
|
62
thirdparty/libpng/scripts/makefile.mip
vendored
Normal file
62
thirdparty/libpng/scripts/makefile.mip
vendored
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
# makefile for libpng
|
||||||
|
# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
# For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
|
||||||
|
CC=cc
|
||||||
|
CFLAGS=-I../zlib -O -systype sysv -DSYSV -w -Dmips
|
||||||
|
#CFLAGS=-O
|
||||||
|
LDFLAGS=-L. -L../zlib/ -lpng -lz -lm
|
||||||
|
|
||||||
|
#RANLIB=ranlib
|
||||||
|
RANLIB=echo
|
||||||
|
|
||||||
|
# where make install puts libpng.a and png.h
|
||||||
|
prefix=/usr/local
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
all: libpng.a pngtest
|
||||||
|
|
||||||
|
libpng.a: $(OBJS)
|
||||||
|
ar rc $@ $(OBJS)
|
||||||
|
$(RANLIB) $@
|
||||||
|
|
||||||
|
pngtest: pngtest.o libpng.a
|
||||||
|
$(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
|
||||||
|
|
||||||
|
test: pngtest
|
||||||
|
./pngtest
|
||||||
|
|
||||||
|
install: libpng.a
|
||||||
|
-@mkdir $(prefix)/include
|
||||||
|
-@mkdir $(prefix)/lib
|
||||||
|
cp png.h $(prefix)/include
|
||||||
|
cp pngconf.h $(prefix)/include
|
||||||
|
chmod 644 $(prefix)/include/png.h
|
||||||
|
chmod 644 $(prefix)/include/pngconf.h
|
||||||
|
cp libpng.a $(prefix)/lib
|
||||||
|
chmod 644 $(prefix)/lib/libpng.a
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o libpng.a pngtest pngout.png
|
||||||
|
|
||||||
|
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||||
|
|
||||||
|
png.o: png.h pngconf.h
|
||||||
|
pngerror.o: png.h pngconf.h
|
||||||
|
pngrio.o: png.h pngconf.h
|
||||||
|
pngwio.o: png.h pngconf.h
|
||||||
|
pngmem.o: png.h pngconf.h
|
||||||
|
pngset.o: png.h pngconf.h
|
||||||
|
pngget.o: png.h pngconf.h
|
||||||
|
pngread.o: png.h pngconf.h
|
||||||
|
pngpread.o: png.h pngconf.h
|
||||||
|
pngrtran.o: png.h pngconf.h
|
||||||
|
pngrutil.o: png.h pngconf.h
|
||||||
|
pngtest.o: png.h pngconf.h
|
||||||
|
pngtrans.o: png.h pngconf.h
|
||||||
|
pngwrite.o: png.h pngconf.h
|
||||||
|
pngwtran.o: png.h pngconf.h
|
||||||
|
pngwutil.o: png.h pngconf.h
|
86
thirdparty/libpng/scripts/makefile.msc
vendored
Normal file
86
thirdparty/libpng/scripts/makefile.msc
vendored
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
# makefile for libpng
|
||||||
|
# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
# For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
# Assumes that zlib.lib, zconf.h, and zlib.h have been copied to ..\zlib
|
||||||
|
|
||||||
|
# ------------- Microsoft C 5.1 and later -------------
|
||||||
|
MODEL=-AL
|
||||||
|
CFLAGS=-Oait -Gs -nologo -W3 $(MODEL) -I..\zlib
|
||||||
|
#-Ox generates bad code with MSC 5.1
|
||||||
|
CC=cl
|
||||||
|
LD=link
|
||||||
|
LDFLAGS=/e/st:0x1500/noe
|
||||||
|
O=.obj
|
||||||
|
|
||||||
|
#uncomment next to put error messages in a file
|
||||||
|
ERRFILE= >> pngerrs
|
||||||
|
|
||||||
|
# variables
|
||||||
|
OBJS1 = png$(O) pngset$(O) pngget$(O) pngrutil$(O) pngtrans$(O) pngwutil$(O)
|
||||||
|
OBJS2 = pngmem$(O) pngpread$(O) pngread$(O) pngerror$(O) pngwrite$(O)
|
||||||
|
OBJS3 = pngrtran$(O) pngwtran$(O) pngrio$(O) pngwio$(O)
|
||||||
|
|
||||||
|
all: libpng.lib
|
||||||
|
|
||||||
|
png$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngset$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngget$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngread$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngpread$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngrtran$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngrutil$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngerror$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngmem$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngrio$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngwio$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngtest$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngtrans$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngwrite$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngwtran$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngwutil$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
libpng.lib: $(OBJS1) $(OBJS2) $(OBJS3)
|
||||||
|
del libpng.lib
|
||||||
|
lib libpng $(OBJS1);
|
||||||
|
lib libpng $(OBJS2);
|
||||||
|
lib libpng $(OBJS3);
|
||||||
|
|
||||||
|
pngtest.exe: pngtest.obj libpng.lib
|
||||||
|
$(LD) $(LDFLAGS) pngtest.obj,,,libpng.lib ..\zlib\zlib.lib ;
|
||||||
|
|
||||||
|
test: pngtest.exe
|
||||||
|
pngtest
|
||||||
|
|
||||||
|
# End of makefile for libpng
|
||||||
|
|
69
thirdparty/libpng/scripts/makefile.os2
vendored
Normal file
69
thirdparty/libpng/scripts/makefile.os2
vendored
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
# makefile for libpng on OS/2 with gcc
|
||||||
|
# For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
|
||||||
|
# Related files: pngos2.def
|
||||||
|
|
||||||
|
CC=gcc -Zomf -s
|
||||||
|
|
||||||
|
# Where the zlib library and include files are located
|
||||||
|
ZLIBLIB=../zlib
|
||||||
|
ZLIBINC=../zlib
|
||||||
|
|
||||||
|
WARNMORE=-Wwrite-strings -Wpointer-arith -Wshadow \
|
||||||
|
-Wmissing-declarations -Wtraditional -Wcast-align \
|
||||||
|
-Wstrict-prototypes -Wmissing-prototypes #-Wconversion
|
||||||
|
CFLAGS=-I$(ZLIBINC) -Wall -O6 -funroll-loops -malign-loops=2 \
|
||||||
|
-malign-functions=2 #$(WARNMORE) -g -DPNG_DEBUG=5
|
||||||
|
LDFLAGS=-L. -L$(ZLIBLIB) -lpng -lzdll -Zcrtdll
|
||||||
|
AR=emxomfar
|
||||||
|
|
||||||
|
PNGLIB=png.lib
|
||||||
|
IMPLIB=emximp
|
||||||
|
SHAREDLIB=png.dll
|
||||||
|
SHAREDLIBIMP=pngdll.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
|
||||||
|
|
||||||
|
.SUFFIXES: .c .o
|
||||||
|
|
||||||
|
all: $(PNGLIB) $(SHAREDLIB) $(SHAREDLIBIMP)
|
||||||
|
|
||||||
|
$(PNGLIB): $(OBJS)
|
||||||
|
$(AR) rc $@ $(OBJS)
|
||||||
|
|
||||||
|
$(SHAREDLIB): $(OBJS) pngos2.def
|
||||||
|
$(CC) $(LDFLAGS) -Zdll -o $@ $^
|
||||||
|
|
||||||
|
$(SHAREDLIBIMP): pngos2.def
|
||||||
|
$(IMPLIB) -o $@ $^
|
||||||
|
|
||||||
|
pngtest.exe: pngtest.o png.dll pngdll.lib
|
||||||
|
$(CC) -o $@ $(CFLAGS) $< $(LDFLAGS)
|
||||||
|
|
||||||
|
test: pngtest.exe
|
||||||
|
./pngtest.exe
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o $(PNGLIB) png.dll pngdll.lib pngtest.exe pngout.png
|
||||||
|
|
||||||
|
# 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
|
98
thirdparty/libpng/scripts/makefile.s2x
vendored
Normal file
98
thirdparty/libpng/scripts/makefile.s2x
vendored
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
makefile for libpng on Solaris 2.x with gcc
|
||||||
|
# Contributed by William L. Sebok, based on makefile.lnx
|
||||||
|
# Copyright (C) 1996, 1997 Andreas Dilger
|
||||||
|
# Copyright (C) 1998 Greg Roelofs
|
||||||
|
# For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
|
||||||
|
CC=gcc
|
||||||
|
|
||||||
|
# Where the zlib library and include files are located
|
||||||
|
ZLIBLIB=/usr/local/lib
|
||||||
|
ZLIBINC=/usr/local/include
|
||||||
|
|
||||||
|
WARNMORE=-Wwrite-strings -Wpointer-arith -Wshadow \
|
||||||
|
-Wmissing-declarations -Wtraditional -Wcast-align \
|
||||||
|
-Wstrict-prototypes -Wmissing-prototypes #-Wconversion
|
||||||
|
CFLAGS=-I$(ZLIBINC) -Wall -O3 \
|
||||||
|
#$(WARNMORE) -g -DPNG_DEBUG=5
|
||||||
|
LDFLAGS=-L. -R. -L$(ZLIBLIB) -R$(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
|
||||||
|
PNGVER = $(PNGMAJ).$(PNGMIN)
|
||||||
|
|
||||||
|
# where make install puts libpng.a, libpng.so*, and png.h
|
||||||
|
prefix=/local
|
||||||
|
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.so pngtest
|
||||||
|
|
||||||
|
libpng.a: $(OBJS)
|
||||||
|
ar rc $@ $(OBJS)
|
||||||
|
$(RANLIB) $@
|
||||||
|
|
||||||
|
libpng.so: libpng.so.$(PNGMAJ)
|
||||||
|
ln -sf libpng.so.$(PNGMAJ) libpng.so
|
||||||
|
|
||||||
|
libpng.so.$(PNGMAJ): libpng.so.$(PNGVER)
|
||||||
|
ln -sf libpng.so.$(PNGVER) libpng.so.$(PNGMAJ)
|
||||||
|
|
||||||
|
libpng.so.$(PNGVER): $(OBJSDLL)
|
||||||
|
$(LD) -G -L$(LIBPATH) -R$(LIBPATH) -h libpng.so.$(PNGMAJ) \
|
||||||
|
-o libpng.so.$(PNGVER) $(OBJSDLL) -lz
|
||||||
|
|
||||||
|
pngtest: pngtest.o libpng.so
|
||||||
|
$(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
|
||||||
|
|
||||||
|
test: pngtest
|
||||||
|
./pngtest
|
||||||
|
|
||||||
|
install: libpng.a libpng.so.$(PNGVER)
|
||||||
|
-@mkdir $(INCPATH) $(LIBPATH)
|
||||||
|
cp png.h pngconf.h $(INCPATH)
|
||||||
|
chmod 644 $(INCPATH)/png.h $(INCPATH)/pngconf.h
|
||||||
|
cp libpng.a libpng.so.$(PNGVER) $(LIBPATH)
|
||||||
|
chmod 755 $(LIBPATH)/libpng.so.$(PNGVER)
|
||||||
|
-@/bin/rm -f $(LIBPATH)/libpng.so.$(PNGMAJ) $(LIBPATH)/libpng.so
|
||||||
|
(cd $(LIBPATH); ln -sf libpng.so.$(PNGVER) libpng.so.$(PNGMAJ); \
|
||||||
|
ln -sf libpng.so.$(PNGMAJ) libpng.so)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
/bin/rm -f *.o libpng.a libpng.so* pngtest pngout.png
|
||||||
|
|
||||||
|
# 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
|
69
thirdparty/libpng/scripts/makefile.sgi
vendored
Normal file
69
thirdparty/libpng/scripts/makefile.sgi
vendored
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
# makefile for libpng
|
||||||
|
# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
# For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
|
||||||
|
# Where the zlib library and include files are located
|
||||||
|
#ZLIBLIB=/usr/local/lib
|
||||||
|
#ZLIBINC=/usr/local/include
|
||||||
|
ZLIBLIB=../zlib
|
||||||
|
ZLIBINC=../zlib
|
||||||
|
|
||||||
|
CC=cc
|
||||||
|
|
||||||
|
CFLAGS=-I$(ZLIBINC) -O -fullwarn # -g -DPNG_DEBUG=1
|
||||||
|
LDFLAGS=-L. -L$(ZLIBLIB) -lpng -lz -lm
|
||||||
|
|
||||||
|
RANLIB=echo
|
||||||
|
#RANLIB=ranlib
|
||||||
|
|
||||||
|
# where make install puts libpng.a and png.h
|
||||||
|
prefix=/usr/local
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
all: libpng.a pngtest
|
||||||
|
|
||||||
|
libpng.a: $(OBJS)
|
||||||
|
ar rc $@ $(OBJS)
|
||||||
|
$(RANLIB) $@
|
||||||
|
|
||||||
|
pngtest: pngtest.o libpng.a
|
||||||
|
$(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
|
||||||
|
|
||||||
|
test: pngtest
|
||||||
|
./pngtest
|
||||||
|
|
||||||
|
install: libpng.a
|
||||||
|
-@mkdir $(prefix)/include
|
||||||
|
-@mkdir $(prefix)/lib
|
||||||
|
cp png.h $(prefix)/include
|
||||||
|
cp pngconf.h $(prefix)/include
|
||||||
|
chmod 644 $(prefix)/include/png.h
|
||||||
|
chmod 644 $(prefix)/include/pngconf.h
|
||||||
|
cp libpng.a $(prefix)/lib
|
||||||
|
chmod 644 $(prefix)/lib/libpng.a
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o libpng.a pngtest pngout.png
|
||||||
|
|
||||||
|
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||||
|
|
||||||
|
png.o: png.h pngconf.h
|
||||||
|
pngerror.o: png.h pngconf.h
|
||||||
|
pngrio.o: png.h pngconf.h
|
||||||
|
pngwio.o: png.h pngconf.h
|
||||||
|
pngmem.o: png.h pngconf.h
|
||||||
|
pngset.o: png.h pngconf.h
|
||||||
|
pngget.o: png.h pngconf.h
|
||||||
|
pngread.o: png.h pngconf.h
|
||||||
|
pngrtran.o: png.h pngconf.h
|
||||||
|
pngrutil.o: png.h pngconf.h
|
||||||
|
pngtest.o: png.h pngconf.h
|
||||||
|
pngtrans.o: png.h pngconf.h
|
||||||
|
pngwrite.o: png.h pngconf.h
|
||||||
|
pngwtran.o: png.h pngconf.h
|
||||||
|
pngwutil.o: png.h pngconf.h
|
||||||
|
pngpread.o: png.h pngconf.h
|
||||||
|
|
68
thirdparty/libpng/scripts/makefile.std
vendored
Normal file
68
thirdparty/libpng/scripts/makefile.std
vendored
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
# makefile for libpng
|
||||||
|
# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
# For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
|
||||||
|
# Where the zlib library and include files are located
|
||||||
|
#ZLIBLIB=/usr/local/lib
|
||||||
|
#ZLIBINC=/usr/local/include
|
||||||
|
ZLIBLIB=../zlib
|
||||||
|
ZLIBINC=../zlib
|
||||||
|
|
||||||
|
CC=cc
|
||||||
|
CFLAGS=-I$(ZLIBINC) -O # -g -DPNG_DEBUG=1
|
||||||
|
LDFLAGS=-L. -L$(ZLIBLIB) -lpng -lz -lm
|
||||||
|
|
||||||
|
#RANLIB=echo
|
||||||
|
RANLIB=ranlib
|
||||||
|
|
||||||
|
# where make install puts libpng.a and png.h
|
||||||
|
prefix=/usr/local
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
all: libpng.a pngtest
|
||||||
|
|
||||||
|
libpng.a: $(OBJS)
|
||||||
|
ar rc $@ $(OBJS)
|
||||||
|
$(RANLIB) $@
|
||||||
|
|
||||||
|
pngtest: pngtest.o libpng.a
|
||||||
|
$(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
|
||||||
|
|
||||||
|
test: pngtest
|
||||||
|
./pngtest
|
||||||
|
|
||||||
|
install: libpng.a
|
||||||
|
-@mkdir $(prefix)/include
|
||||||
|
-@mkdir $(prefix)/lib
|
||||||
|
cp png.h $(prefix)/include
|
||||||
|
cp pngconf.h $(prefix)/include
|
||||||
|
chmod 644 $(prefix)/include/png.h
|
||||||
|
chmod 644 $(prefix)/include/pngconf.h
|
||||||
|
cp libpng.a $(prefix)/lib
|
||||||
|
chmod 644 $(prefix)/lib/libpng.a
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o libpng.a pngtest pngout.png
|
||||||
|
|
||||||
|
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||||
|
|
||||||
|
png.o: png.h pngconf.h
|
||||||
|
pngerror.o: png.h pngconf.h
|
||||||
|
pngrio.o: png.h pngconf.h
|
||||||
|
pngwio.o: png.h pngconf.h
|
||||||
|
pngmem.o: png.h pngconf.h
|
||||||
|
pngset.o: png.h pngconf.h
|
||||||
|
pngget.o: png.h pngconf.h
|
||||||
|
pngread.o: png.h pngconf.h
|
||||||
|
pngrtran.o: png.h pngconf.h
|
||||||
|
pngrutil.o: png.h pngconf.h
|
||||||
|
pngtest.o: png.h pngconf.h
|
||||||
|
pngtrans.o: png.h pngconf.h
|
||||||
|
pngwrite.o: png.h pngconf.h
|
||||||
|
pngwtran.o: png.h pngconf.h
|
||||||
|
pngwutil.o: png.h pngconf.h
|
||||||
|
pngpread.o: png.h pngconf.h
|
||||||
|
|
72
thirdparty/libpng/scripts/makefile.sun
vendored
Normal file
72
thirdparty/libpng/scripts/makefile.sun
vendored
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
# makefile for libpng
|
||||||
|
# Copyright (C) 1995 Guy Eric Schalnat, Group 42, Inc.
|
||||||
|
# For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
|
||||||
|
# Where the zlib library and include files are located
|
||||||
|
#ZLIBLIB=/usr/local/lib
|
||||||
|
#ZLIBINC=/usr/local/include
|
||||||
|
ZLIBLIB=../zlib
|
||||||
|
ZLIBINC=../zlib
|
||||||
|
|
||||||
|
|
||||||
|
WARNMORE=-Wwrite-strings -Wpointer-arith -Wshadow -Wconversion \
|
||||||
|
-Wmissing-declarations -Wtraditional -Wcast-align \
|
||||||
|
-Wstrict-prototypes -Wmissing-prototypes
|
||||||
|
CC=gcc
|
||||||
|
CFLAGS=-I$(ZLIBINC) -O $(WARNMORE) -DPNG_DEBUG=4
|
||||||
|
LDFLAGS=-L. -L$(ZLIBLIB) -lpng -lz -lm
|
||||||
|
|
||||||
|
RANLIB=ranlib
|
||||||
|
#RANLIB=echo
|
||||||
|
|
||||||
|
# where make install puts libpng.a and png.h
|
||||||
|
prefix=/usr/local
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
all: libpng.a pngtest
|
||||||
|
|
||||||
|
libpng.a: $(OBJS)
|
||||||
|
ar rc $@ $(OBJS)
|
||||||
|
$(RANLIB) $@
|
||||||
|
|
||||||
|
pngtest: pngtest.o libpng.a
|
||||||
|
$(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
|
||||||
|
|
||||||
|
test: pngtest
|
||||||
|
./pngtest
|
||||||
|
|
||||||
|
install: libpng.a
|
||||||
|
-@mkdir $(prefix)/include
|
||||||
|
-@mkdir $(prefix)/lib
|
||||||
|
cp png.h $(prefix)/include
|
||||||
|
cp pngconf.h $(prefix)/include
|
||||||
|
chmod 644 $(prefix)/include/png.h
|
||||||
|
chmod 644 $(prefix)/include/pngconf.h
|
||||||
|
cp libpng.a $(prefix)/lib
|
||||||
|
chmod 644 $(prefix)/lib/libpng.a
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f *.o libpng.a pngtest pngout.png
|
||||||
|
|
||||||
|
# DO NOT DELETE THIS LINE -- make depend depends on it.
|
||||||
|
|
||||||
|
png.o: png.h pngconf.h
|
||||||
|
pngerror.o: png.h pngconf.h
|
||||||
|
pngrio.o: png.h pngconf.h
|
||||||
|
pngwio.o: png.h pngconf.h
|
||||||
|
pngmem.o: png.h pngconf.h
|
||||||
|
pngset.o: png.h pngconf.h
|
||||||
|
pngget.o: png.h pngconf.h
|
||||||
|
pngread.o: png.h pngconf.h
|
||||||
|
pngrtran.o: png.h pngconf.h
|
||||||
|
pngrutil.o: png.h pngconf.h
|
||||||
|
pngtest.o: png.h pngconf.h
|
||||||
|
pngtrans.o: png.h pngconf.h
|
||||||
|
pngwrite.o: png.h pngconf.h
|
||||||
|
pngwtran.o: png.h pngconf.h
|
||||||
|
pngwutil.o: png.h pngconf.h
|
||||||
|
pngpread.o: png.h pngconf.h
|
||||||
|
|
82
thirdparty/libpng/scripts/makefile.tc3
vendored
Normal file
82
thirdparty/libpng/scripts/makefile.tc3
vendored
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
# Makefile for libpng
|
||||||
|
# TurboC++ 3.0 (Note: All modules are compiled in C mode)
|
||||||
|
|
||||||
|
# To use, do "make -fmakefile.tc3"
|
||||||
|
|
||||||
|
# ------------- Turbo C++ 3.0 -------------
|
||||||
|
MODEL=-ml
|
||||||
|
CFLAGS=-O2 -Z $(MODEL) -I..\zlib
|
||||||
|
CC=tcc
|
||||||
|
LD=tcc
|
||||||
|
LIB=tlib
|
||||||
|
LDFLAGS=$(MODEL) -L..\zlib
|
||||||
|
O=.obj
|
||||||
|
E=.exe
|
||||||
|
|
||||||
|
# variables
|
||||||
|
OBJS1 = png$(O) pngset$(O) pngget$(O) pngrutil$(O) pngtrans$(O) pngwutil$(O)
|
||||||
|
OBJS2 = pngmem$(O) pngpread$(O) pngread$(O) pngerror$(O) pngwrite$(O)
|
||||||
|
OBJS3 = pngrtran$(O) pngwtran$(O) pngrio$(O) pngwio$(O)
|
||||||
|
OBJSL1 = +png$(O) +pngset$(O) +pngget$(O) +pngrutil$(O) +pngtrans$(O)
|
||||||
|
OBJSL2 = +pngwutil$(O) +pngmem$(O) +pngpread$(O) +pngread$(O) +pngerror$(O)
|
||||||
|
OBJSL3 = +pngwrite$(O) +pngrtran$(O) +pngwtran$(O) +pngrio$(O) +pngwio$(O)
|
||||||
|
|
||||||
|
all: libpng.lib pngtest.exe
|
||||||
|
|
||||||
|
png$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
pngset$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
pngget$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
pngread$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
pngpread$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
pngrtran$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
pngrutil$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
pngerror$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
pngmem$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
pngrio$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
pngwio$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
pngtest$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
pngtrans$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
pngwrite$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
pngwtran$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
pngwutil$(O): png.h pngconf.h
|
||||||
|
$(CC) -c $(CFLAGS) $*.c
|
||||||
|
|
||||||
|
libpng.lib: $(OBJS1) $(OBJS2) $(OBJS3)
|
||||||
|
$(LIB) libpng +$(OBJSL1)
|
||||||
|
$(LIB) libpng +$(OBJSL2)
|
||||||
|
$(LIB) libpng +$(OBJSL3)
|
||||||
|
|
||||||
|
pngtest$(E): pngtest$(O) libpng.lib
|
||||||
|
$(CC) $(LDFLAGS) pngtest.obj libpng.lib zlib.lib
|
||||||
|
|
||||||
|
# End of makefile for libpng
|
88
thirdparty/libpng/scripts/makefile.wat
vendored
Normal file
88
thirdparty/libpng/scripts/makefile.wat
vendored
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
# Makefile for libpng
|
||||||
|
# Watcom 10a and later 32-bit protected mode flat memory model
|
||||||
|
|
||||||
|
# Adapted by Pawel Mrochen, based on makefile.msc
|
||||||
|
# For conditions of distribution and use, see copyright notice in png.h
|
||||||
|
# Assumes that zlib.lib, zconf.h, and zlib.h have been copied to ..\zlib
|
||||||
|
|
||||||
|
# To use, do "wmake -f makefile.wat"
|
||||||
|
|
||||||
|
# ------------- Watcom 10a and later -------------
|
||||||
|
MODEL=-mf
|
||||||
|
CFLAGS= $(MODEL) -fpi87 -fp5 -5r -oaeilmnrt -s -zp4 -i=..\zlib
|
||||||
|
CC=wcc386
|
||||||
|
LD=wcl386
|
||||||
|
LIB=wlib -b -c
|
||||||
|
LDFLAGS=
|
||||||
|
O=.obj
|
||||||
|
|
||||||
|
#uncomment next to put error messages in a file
|
||||||
|
#ERRFILE= >> pngerrs
|
||||||
|
|
||||||
|
# variables
|
||||||
|
OBJS1 = png$(O) pngset$(O) pngget$(O) pngrutil$(O) pngtrans$(O) pngwutil$(O)
|
||||||
|
OBJS2 = pngmem$(O) pngpread$(O) pngread$(O) pngerror$(O) pngwrite$(O)
|
||||||
|
OBJS3 = pngrtran$(O) pngwtran$(O) pngrio$(O) pngwio$(O)
|
||||||
|
|
||||||
|
all: test
|
||||||
|
|
||||||
|
png$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngset$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngget$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngread$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngpread$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngrtran$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngrutil$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngerror$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngmem$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngrio$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngwio$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngtest$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngtrans$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngwrite$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngwtran$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
pngwutil$(O): png.h pngconf.h
|
||||||
|
$(CC) $(CFLAGS) $*.c $(ERRFILE)
|
||||||
|
|
||||||
|
libpng.lib: $(OBJS1) $(OBJS2) $(OBJS3)
|
||||||
|
$(LIB) -n libpng.lib +$(OBJS1)
|
||||||
|
$(LIB) libpng.lib +$(OBJS2)
|
||||||
|
$(LIB) libpng.lib +$(OBJS3)
|
||||||
|
|
||||||
|
pngtest.exe: pngtest.obj libpng.lib
|
||||||
|
$(LD) $(LDFLAGS) pngtest.obj libpng.lib ..\zlib\zlib.lib
|
||||||
|
|
||||||
|
test: pngtest.exe
|
||||||
|
pngtest
|
||||||
|
|
||||||
|
# End of makefile for libpng
|
125
thirdparty/libpng/scripts/makevms.com
vendored
Normal file
125
thirdparty/libpng/scripts/makevms.com
vendored
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
$! make libpng under VMS
|
||||||
|
$!
|
||||||
|
$!
|
||||||
|
$! Look for the compiler used
|
||||||
|
$!
|
||||||
|
$ zlibsrc = "[-.zlib]"
|
||||||
|
$ ccopt="/include=''zlibsrc'"
|
||||||
|
$ if f$getsyi("HW_MODEL").ge.1024
|
||||||
|
$ then
|
||||||
|
$ ccopt = "/prefix=all"+ccopt
|
||||||
|
$ comp = "__decc__=1"
|
||||||
|
$ if f$trnlnm("SYS").eqs."" then define sys sys$library:
|
||||||
|
$ else
|
||||||
|
$ if f$search("SYS$SYSTEM:DECC$COMPILER.EXE").eqs.""
|
||||||
|
$ then
|
||||||
|
$ if f$trnlnm("SYS").eqs."" then define sys sys$library:
|
||||||
|
$ if f$search("SYS$SYSTEM:VAXC.EXE").eqs.""
|
||||||
|
$ then
|
||||||
|
$ comp = "__gcc__=1"
|
||||||
|
$ CC :== GCC
|
||||||
|
$ else
|
||||||
|
$ comp = "__vaxc__=1"
|
||||||
|
$ endif
|
||||||
|
$ else
|
||||||
|
$ if f$trnlnm("SYS").eqs."" then define sys decc$library_include:
|
||||||
|
$ ccopt = "/decc/prefix=all"+ccopt
|
||||||
|
$ comp = "__decc__=1"
|
||||||
|
$ endif
|
||||||
|
$ endif
|
||||||
|
$!
|
||||||
|
$! Build the thing plain or with mms
|
||||||
|
$!
|
||||||
|
$ write sys$output "Compiling Libpng sources ..."
|
||||||
|
$ if f$search("SYS$SYSTEM:MMS.EXE").eqs.""
|
||||||
|
$ then
|
||||||
|
$ dele pngtest.obj;*
|
||||||
|
$ CALL MAKE png.OBJ "cc ''CCOPT' png" -
|
||||||
|
png.c png.h pngconf.h
|
||||||
|
$ CALL MAKE pngpread.OBJ "cc ''CCOPT' pngpread" -
|
||||||
|
pngpread.c png.h pngconf.h
|
||||||
|
$ CALL MAKE pngset.OBJ "cc ''CCOPT' pngset" -
|
||||||
|
pngset.c png.h pngconf.h
|
||||||
|
$ CALL MAKE pngget.OBJ "cc ''CCOPT' pngget" -
|
||||||
|
pngget.c png.h pngconf.h
|
||||||
|
$ CALL MAKE pngread.OBJ "cc ''CCOPT' pngread" -
|
||||||
|
pngread.c png.h pngconf.h
|
||||||
|
$ CALL MAKE pngpread.OBJ "cc ''CCOPT' pngpread" -
|
||||||
|
pngpread.c png.h pngconf.h
|
||||||
|
$ CALL MAKE pngrtran.OBJ "cc ''CCOPT' pngrtran" -
|
||||||
|
pngrtran.c png.h pngconf.h
|
||||||
|
$ CALL MAKE pngrutil.OBJ "cc ''CCOPT' pngrutil" -
|
||||||
|
pngrutil.c png.h pngconf.h
|
||||||
|
$ CALL MAKE pngerror.OBJ "cc ''CCOPT' pngerror" -
|
||||||
|
pngerror.c png.h pngconf.h
|
||||||
|
$ CALL MAKE pngmem.OBJ "cc ''CCOPT' pngmem" -
|
||||||
|
pngmem.c png.h pngconf.h
|
||||||
|
$ CALL MAKE pngrio.OBJ "cc ''CCOPT' pngrio" -
|
||||||
|
pngrio.c png.h pngconf.h
|
||||||
|
$ CALL MAKE pngwio.OBJ "cc ''CCOPT' pngwio" -
|
||||||
|
pngwio.c png.h pngconf.h
|
||||||
|
$ CALL MAKE pngtrans.OBJ "cc ''CCOPT' pngtrans" -
|
||||||
|
pngtrans.c png.h pngconf.h
|
||||||
|
$ CALL MAKE pngwrite.OBJ "cc ''CCOPT' pngwrite" -
|
||||||
|
pngwrite.c png.h pngconf.h
|
||||||
|
$ CALL MAKE pngwtran.OBJ "cc ''CCOPT' pngwtran" -
|
||||||
|
pngwtran.c png.h pngconf.h
|
||||||
|
$ CALL MAKE pngwutil.OBJ "cc ''CCOPT' pngwutil" -
|
||||||
|
pngwutil.c png.h pngconf.h
|
||||||
|
$ write sys$output "Building Libpng ..."
|
||||||
|
$ CALL MAKE libpng.OLB "lib/crea libpng.olb *.obj" *.OBJ
|
||||||
|
$ write sys$output "Building pngtest..."
|
||||||
|
$ CALL MAKE pngtest.OBJ "cc ''CCOPT' pngtest" -
|
||||||
|
pngtest.c png.h pngconf.h
|
||||||
|
$ call make pngtest.exe -
|
||||||
|
"LINK pngtest,libpng.olb/lib,''zlibsrc'libgz.olb/lib" -
|
||||||
|
pngtest.obj libpng.olb
|
||||||
|
$ write sys$output "Testing Libpng..."
|
||||||
|
$ run pngtest
|
||||||
|
$ else
|
||||||
|
$ mms/macro=('comp',zlibsrc='zlibsrc')
|
||||||
|
$ endif
|
||||||
|
$ write sys$output "Libpng build completed"
|
||||||
|
$ exit
|
||||||
|
$!
|
||||||
|
$!
|
||||||
|
$MAKE: SUBROUTINE !SUBROUTINE TO CHECK DEPENDENCIES
|
||||||
|
$ V = 'F$Verify(0)
|
||||||
|
$! P1 = What we are trying to make
|
||||||
|
$! P2 = Command to make it
|
||||||
|
$! P3 - P8 What it depends on
|
||||||
|
$
|
||||||
|
$ If F$Search(P1) .Eqs. "" Then Goto Makeit
|
||||||
|
$ Time = F$CvTime(F$File(P1,"RDT"))
|
||||||
|
$arg=3
|
||||||
|
$Loop:
|
||||||
|
$ Argument = P'arg
|
||||||
|
$ If Argument .Eqs. "" Then Goto Exit
|
||||||
|
$ El=0
|
||||||
|
$Loop2:
|
||||||
|
$ File = F$Element(El," ",Argument)
|
||||||
|
$ If File .Eqs. " " Then Goto Endl
|
||||||
|
$ AFile = ""
|
||||||
|
$Loop3:
|
||||||
|
$ OFile = AFile
|
||||||
|
$ AFile = F$Search(File)
|
||||||
|
$ If AFile .Eqs. "" .Or. AFile .Eqs. OFile Then Goto NextEl
|
||||||
|
$ If F$CvTime(F$File(AFile,"RDT")) .Ges. Time Then Goto Makeit
|
||||||
|
$ Goto Loop3
|
||||||
|
$NextEL:
|
||||||
|
$ El = El + 1
|
||||||
|
$ Goto Loop2
|
||||||
|
$EndL:
|
||||||
|
$ arg=arg+1
|
||||||
|
$ If arg .Le. 8 Then Goto Loop
|
||||||
|
$ Goto Exit
|
||||||
|
$
|
||||||
|
$Makeit:
|
||||||
|
$ VV=F$VERIFY(0)
|
||||||
|
$ write sys$output P2
|
||||||
|
$ 'P2
|
||||||
|
$ VV='F$Verify(VV)
|
||||||
|
$Exit:
|
||||||
|
$ If V Then Set Verify
|
||||||
|
$ENDSUBROUTINE
|
||||||
|
|
286
thirdparty/libpng/scripts/pngos2.def
vendored
Normal file
286
thirdparty/libpng/scripts/pngos2.def
vendored
Normal file
@ -0,0 +1,286 @@
|
|||||||
|
;----------------------------------------
|
||||||
|
; PNGLIB module definition file for OS/2
|
||||||
|
;----------------------------------------
|
||||||
|
|
||||||
|
LIBRARY PNG
|
||||||
|
DESCRIPTION "PNG image compression library for OS/2"
|
||||||
|
CODE PRELOAD MOVEABLE DISCARDABLE
|
||||||
|
DATA PRELOAD MOVEABLE MULTIPLE
|
||||||
|
|
||||||
|
EXPORTS
|
||||||
|
png_set_sig_bytes
|
||||||
|
png_sig_cmp
|
||||||
|
png_check_sig
|
||||||
|
png_create_read_struct
|
||||||
|
png_create_write_struct
|
||||||
|
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_read_info
|
||||||
|
png_convert_to_rfc1123
|
||||||
|
png_convert_from_struct_tm
|
||||||
|
png_convert_from_time_t
|
||||||
|
png_set_expand
|
||||||
|
png_set_bgr
|
||||||
|
png_set_gray_to_rgb
|
||||||
|
; png_set_rgb_to_gray
|
||||||
|
png_build_grayscale_palette
|
||||||
|
png_set_strip_alpha
|
||||||
|
png_set_swap_alpha
|
||||||
|
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_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_set_error_fn
|
||||||
|
png_get_error_ptr
|
||||||
|
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_debug_malloc
|
||||||
|
; png_debug_free
|
||||||
|
; 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_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_get_gAMA
|
||||||
|
png_set_gAMA
|
||||||
|
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_sRGB
|
||||||
|
png_set_sRGB_gAMA_and_cHRM
|
||||||
|
png_get_text
|
||||||
|
png_set_text
|
||||||
|
png_get_tIME
|
||||||
|
png_set_tIME
|
||||||
|
png_get_tRNS
|
||||||
|
png_set_tRNS
|
||||||
|
|
||||||
|
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_gAMA
|
||||||
|
png_write_sBIT
|
||||||
|
png_write_cHRM
|
||||||
|
png_write_sRGB
|
||||||
|
png_write_tRNS
|
||||||
|
png_write_bKGD
|
||||||
|
png_write_hIST
|
||||||
|
png_check_keyword
|
||||||
|
png_write_tEXt
|
||||||
|
png_write_zTXt
|
||||||
|
png_write_oFFs
|
||||||
|
png_write_pCAL
|
||||||
|
png_write_pHYs
|
||||||
|
png_write_tIME
|
||||||
|
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_gAMA
|
||||||
|
png_handle_sBIT
|
||||||
|
png_handle_cHRM
|
||||||
|
png_handle_sRGB
|
||||||
|
png_handle_tRNS
|
||||||
|
png_handle_bKGD
|
||||||
|
png_handle_hIST
|
||||||
|
png_handle_oFFs
|
||||||
|
png_handle_pCAL
|
||||||
|
png_handle_pHYs
|
||||||
|
png_handle_tIME
|
||||||
|
png_handle_tEXt
|
||||||
|
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
|
||||||
|
|
||||||
|
png_libpng_ver
|
||||||
|
png_pass_start
|
||||||
|
png_pass_inc
|
||||||
|
png_pass_ystart
|
||||||
|
png_pass_yinc
|
||||||
|
png_pass_mask
|
||||||
|
png_pass_dsp_mask
|
||||||
|
; png_pass_width
|
||||||
|
; png_pass_height
|
||||||
|
|
||||||
|
png_IHDR
|
||||||
|
png_IDAT
|
||||||
|
png_IEND
|
||||||
|
png_PLTE
|
||||||
|
png_bKGD
|
||||||
|
png_cHRM
|
||||||
|
png_gAMA
|
||||||
|
png_hIST
|
||||||
|
png_oFFs
|
||||||
|
png_pCAL
|
||||||
|
png_pHYs
|
||||||
|
png_sBIT
|
||||||
|
png_sRGB
|
||||||
|
png_tEXt
|
||||||
|
png_tIME
|
||||||
|
png_tRNS
|
||||||
|
png_zTXt
|
29
thirdparty/libpng/scripts/smakefile.ppc
vendored
Normal file
29
thirdparty/libpng/scripts/smakefile.ppc
vendored
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# Amiga powerUP (TM) Makefile
|
||||||
|
# makefile for libpng and SAS C V6.58/7.00 PPC compiler
|
||||||
|
# Copyright (C) 1998 by Andreas R. Kleinert
|
||||||
|
|
||||||
|
CC = scppc
|
||||||
|
CFLAGS = NOSTKCHK NOSINT OPTIMIZE OPTGO OPTPEEP OPTINLOCAL OPTINL IDIR /zlib \
|
||||||
|
OPTLOOP OPTRDEP=8 OPTDEP=8 OPTCOMP=8
|
||||||
|
LIBNAME = libpng.a
|
||||||
|
AR = ppc-amigaos-ar
|
||||||
|
AR_FLAGS = cr
|
||||||
|
RANLIB = ppc-amigaos-ranlib
|
||||||
|
LDFLAGS = -r -o
|
||||||
|
LDLIBS = ../zlib/libzip.a LIB:scppc.a
|
||||||
|
LN = ppc-amigaos-ld
|
||||||
|
RM = delete quiet
|
||||||
|
MKDIR = makedir
|
||||||
|
|
||||||
|
OBJS = png.o pngset.o pngget.o pngrutil.o pngtrans.o pngwutil.o pngread.o \
|
||||||
|
pngerror.o pngpread.o pngwrite.o pngrtran.o pngwtran.o pngrio.o pngwio.o pngmem.o
|
||||||
|
|
||||||
|
all: $(LIBNAME) pngtest
|
||||||
|
|
||||||
|
$(LIBNAME): $(OBJS)
|
||||||
|
$(AR) $(AR_FLAGS) $@ $(OBJS)
|
||||||
|
$(RANLIB) $@
|
||||||
|
|
||||||
|
pngtest: pngtest.o $(LIBNAME)
|
||||||
|
$(LN) $(LDFLAGS) pngtest LIB:c_ppc.o pngtest.o $(LIBNAME) $(LDLIBS) \
|
||||||
|
LIB:end.o
|
Loading…
x
Reference in New Issue
Block a user