mirror of
https://git.code.sf.net/p/libpng/code.git
synced 2025-07-10 18:04:09 +02:00
Compare commits
150 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
847e9efb66 | ||
|
|
db56fa18c2 | ||
|
|
bc8e40d611 | ||
|
|
2b87a54d07 | ||
|
|
b23afad4a1 | ||
|
|
f5d7f438e5 | ||
|
|
b4ec1f8451 | ||
|
|
f5f1206778 | ||
|
|
497e7319f4 | ||
|
|
d5dd93f5d1 | ||
|
|
7f9a49aa65 | ||
|
|
573c9d434f | ||
|
|
56a1a66656 | ||
|
|
d992e05da8 | ||
|
|
870beb5279 | ||
|
|
b0d97356ce | ||
|
|
04d4e38ac2 | ||
|
|
67a46d17d8 | ||
|
|
bbc29a858d | ||
|
|
3948b94700 | ||
|
|
746bc7d883 | ||
|
|
f260f6d156 | ||
|
|
18dd07e3e6 | ||
|
|
0486b17fbd | ||
|
|
aa22442a9c | ||
|
|
4a43182924 | ||
|
|
810b6e51e4 | ||
|
|
88610994da | ||
|
|
1b9b970598 | ||
|
|
43f0311b57 | ||
|
|
421f95deb5 | ||
|
|
f96251291d | ||
|
|
cafa0eebb9 | ||
|
|
afd6cecb76 | ||
|
|
61dbc4c608 | ||
|
|
bea86bba24 | ||
|
|
7fc85a3f46 | ||
|
|
bb8d4f76f4 | ||
|
|
b79c98e57c | ||
|
|
4cf2465c71 | ||
|
|
4ea93e69bc | ||
|
|
ff141eb21e | ||
|
|
122bec17f2 | ||
|
|
9afb90f885 | ||
|
|
34b7d62488 | ||
|
|
3f2b5a6670 | ||
|
|
294d0b8408 | ||
|
|
62c6fbbd29 | ||
|
|
0c7ac064d3 | ||
|
|
db67cba8d4 | ||
|
|
2aa6c96e5d | ||
|
|
2fd3434fa4 | ||
|
|
2c0833e265 | ||
|
|
127b08a265 | ||
|
|
0f42908c0a | ||
|
|
f18a28cc13 | ||
|
|
56d6bc2e88 | ||
|
|
61946e0f56 | ||
|
|
49f9c24910 | ||
|
|
c62fda06a3 | ||
|
|
cd62215d61 | ||
|
|
ac09cd0fec | ||
|
|
529045cf26 | ||
|
|
7b1da52549 | ||
|
|
34d20f482f | ||
|
|
399430dac2 | ||
|
|
3f677d1c65 | ||
|
|
809355b4aa | ||
|
|
7fd71746d0 | ||
|
|
0ee3465fba | ||
|
|
a793120405 | ||
|
|
9bdba4e630 | ||
|
|
a74b70871c | ||
|
|
0d50d6562c | ||
|
|
453fbf942c | ||
|
|
6e1c74b39b | ||
|
|
fdc2d5f38f | ||
|
|
67a289ffa9 | ||
|
|
bf15ac7e86 | ||
|
|
7ef0c46488 | ||
|
|
8d9e494dfb | ||
|
|
0794df4062 | ||
|
|
7a69beda7b | ||
|
|
e4413a735b | ||
|
|
7fdb594e73 | ||
|
|
f1736a636b | ||
|
|
3b4c60f26b | ||
|
|
5c55ccdf4f | ||
|
|
5ec05b3d7c | ||
|
|
70eb0720a0 | ||
|
|
9bb775fc8c | ||
|
|
a8715cabd1 | ||
|
|
364acf40aa | ||
|
|
b44cd59ad9 | ||
|
|
e2d8e11407 | ||
|
|
43c07e1b48 | ||
|
|
2e0c5f0dff | ||
|
|
3a83aa328d | ||
|
|
5087805e7c | ||
|
|
4e6e2166a5 | ||
|
|
1affc5622b | ||
|
|
cd1cd2dafc | ||
|
|
caa3f296df | ||
|
|
2286a7cef4 | ||
|
|
3c8b422b0a | ||
|
|
0645b62528 | ||
|
|
0281dee877 | ||
|
|
e55b25a962 | ||
|
|
14638c1f20 | ||
|
|
59ae38984f | ||
|
|
1f24cb74f2 | ||
|
|
1cbfa24a93 | ||
|
|
8c87dc88d6 | ||
|
|
f3728100d9 | ||
|
|
e15b537825 | ||
|
|
e57f094fd6 | ||
|
|
4ea113b7f0 | ||
|
|
871b1d0fab | ||
|
|
f3af706c2a | ||
|
|
96cf4bde0e | ||
|
|
1118d6d985 | ||
|
|
e444514a94 | ||
|
|
efda7376c8 | ||
|
|
ccec786ca7 | ||
|
|
2621be1bdb | ||
|
|
45bb4530fd | ||
|
|
a97fc46e43 | ||
|
|
3fa1893804 | ||
|
|
f8a8ead5cb | ||
|
|
6df55cece7 | ||
|
|
09a5ca72ac | ||
|
|
0cc3e9e38c | ||
|
|
adb9613699 | ||
|
|
c0a0d4a6d2 | ||
|
|
2bad851ab3 | ||
|
|
f2350f3987 | ||
|
|
b4ef7c4af2 | ||
|
|
9e8fd50d76 | ||
|
|
ea3288f1c5 | ||
|
|
cc074dcaa6 | ||
|
|
3b8e7e869d | ||
|
|
765d145ec4 | ||
|
|
c9b11ff0d4 | ||
|
|
23a101e06d | ||
|
|
b724c812ec | ||
|
|
0695fcd834 | ||
|
|
42835d3d19 | ||
|
|
2d99978f67 | ||
|
|
9d2e875826 | ||
|
|
681de8c8dc |
530
ANNOUNCE
530
ANNOUNCE
@@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
Libpng 1.6.0 - February 14, 2013
|
Libpng 1.6.3 - July 18, 2013
|
||||||
|
|
||||||
This is a public release of libpng, intended for use in production codes.
|
This is a public release of libpng, intended for use in production codes.
|
||||||
|
|
||||||
@@ -8,452 +8,106 @@ Files available for download:
|
|||||||
Source files with LF line endings (for Unix/Linux) and with a
|
Source files with LF line endings (for Unix/Linux) and with a
|
||||||
"configure" script
|
"configure" script
|
||||||
|
|
||||||
libpng-1.6.0.tar.xz (LZMA-compressed, recommended)
|
libpng-1.6.3.tar.xz (LZMA-compressed, recommended)
|
||||||
libpng-1.6.0.tar.gz
|
libpng-1.6.3.tar.gz
|
||||||
|
|
||||||
Source files with CRLF line endings (for Windows), without the
|
Source files with CRLF line endings (for Windows), without the
|
||||||
"configure" script
|
"configure" script
|
||||||
|
|
||||||
lpng160.7z (LZMA-compressed, recommended)
|
lpng163.7z (LZMA-compressed, recommended)
|
||||||
lpng160.zip
|
lpng163.zip
|
||||||
|
|
||||||
Other information:
|
Other information:
|
||||||
|
|
||||||
libpng-1.6.0-README.txt
|
libpng-1.6.3-README.txt
|
||||||
libpng-1.6.0-LICENSE.txt
|
libpng-1.6.3-LICENSE.txt
|
||||||
|
|
||||||
Changes since the last public release (1.5.7):
|
Changes since the last public release (1.6.2):
|
||||||
|
|
||||||
Removed machine-generated configure files from the GIT repository (they will
|
Revised stack marking in arm/filter_neon.S and configure.ac.
|
||||||
continue to appear in the tarball distributions and in the libpng15 and
|
Ensure that NEON filter stuff is completely disabled when switched 'off'.
|
||||||
earlier GIT branches).
|
Previously the ARM NEON specific files were still built if the option
|
||||||
Restored the new 'simplified' API, which was started in libpng-1.5.7beta02
|
was switched 'off' as opposed to being explicitly disabled.
|
||||||
but later deleted from libpng-1.5.7beta05.
|
Test for 'arm*' not just 'arm' in the host_cpu configure variable.
|
||||||
Added example programs and test program pngstest for the new 'simplified' API.
|
Rebuilt the configure scripts.
|
||||||
Added ANSI-C (C90) headers and require them, and take advantage of the
|
Expanded manual paragraph about writing private chunks, particularly
|
||||||
change. Also fixed some of the projects/* and contrib/* files that needed
|
the need to call png_set_keep_unknown_chunks() when writing them.
|
||||||
updates for libpng16 and the move of pngvalid.c.
|
Avoid dereferencing NULL pointer possibly returned from
|
||||||
With this change the required ANSI-C header files are assumed to exist: the
|
png_create_write_struct() (Andrew Church).
|
||||||
implementation must provide float.h, limits.h, stdarg.h and stddef.h and
|
Calculate our own zlib windowBits when decoding rather than trusting the
|
||||||
libpng relies on limits.h and stddef.h existing and behaving as defined
|
CMF bytes in the PNG datastream.
|
||||||
(the other two required headers aren't used). Non-ANSI systems that don't
|
Added an option to force maximum window size for inflating, which was
|
||||||
have stddef.h or limits.h will have to provide an appropriate fake
|
the behavior of libpng15 and earlier.
|
||||||
containing the relevant types and #defines.
|
Added png-fix-itxt and png-fix-too-far-back to the built programs and
|
||||||
The use of FAR/far has been eliminated and the definition of png_alloc_size_t
|
removed warnings from the source code and timepng that are revealed as
|
||||||
is now controlled by a flag so that 'small size_t' systems can select it
|
a result.
|
||||||
if necessary. Libpng 1.6 may not currently work on such systems -- it
|
Detect wrong libpng versions linked to png-fix-too-far-back, which currently
|
||||||
seems likely that it will ask 'malloc' for more than 65535 bytes with any
|
only works with libpng versions that can be made to reliably fail when
|
||||||
image that has a sufficiently large row size (rather than simply failing
|
the deflate data contains an out-of-window reference. This means only
|
||||||
to read such images).
|
1.6 and later.
|
||||||
New tools directory containing tools used to generate libpng code.
|
Fixed gnu issues: g++ needs a static_cast, gcc 4.4.7 has a broken warning
|
||||||
Fixed race conditions in parallel make builds. With higher degrees of
|
message which it is easier to work round than ignore.
|
||||||
parallelism during 'make' the use of the same temporary file names such
|
Updated contrib/pngminus/pnm2png.c (Paul Stewart):
|
||||||
as 'dfn*' can result in a race where a temporary file from one arm of the
|
Check for EOF
|
||||||
build is deleted or overwritten in another arm. This changes the
|
Ignore "#" delimited comments in input file to pnm2png.c.
|
||||||
temporary files for suffix rules to always use $* and ensures that the
|
Fixed whitespace handling
|
||||||
non-suffix rules use unique file names.
|
Added a call to png_set_packing()
|
||||||
Correct configure builds where build and source directories are separate.
|
Initialize dimension values so if sscanf fails at least we have known
|
||||||
The include path of 'config.h' was erroneously made relative in pngvalid.c
|
invalid values.
|
||||||
in libpng 1.5.7.
|
Attempt to detect configuration issues with png-fix-too-far-back, which
|
||||||
Start-up code size improvements, error handler flexibility. These changes
|
requires both the correct libpng and the correct zlib to function
|
||||||
alter how the tricky allocation of the initial png_struct and png_info
|
correctly.
|
||||||
structures are handled. png_info is now handled in pretty much the same
|
Check ZLIB_VERNUM for mismatches, enclose #error in quotes
|
||||||
way as everything else, except that the allocations handle NULL return
|
Added information in the documentation about problems with and fixes for
|
||||||
silently. png_struct is changed in a similar way on allocation and on
|
the bad CRC and bad iTXt chunk situations.
|
||||||
deallocation a 'safety' error handler is put in place (which should never
|
Allow contrib/pngminus/pnm2png.c to compile without WRITE_INVERT and
|
||||||
be required). The error handler itself is changed to permit mismatches
|
WRITE_PACK supported (writes error message that it can't read P1 or
|
||||||
in the application and libpng error buffer size; however, this means a
|
Improved png-fix-too-far-back usage message, added --suffix option.
|
||||||
silent change to the API to return the jmp_buf if the size doesn't match
|
Revised contrib/pngminim/*/makefile to generate pnglibconf.h with the
|
||||||
the size from the libpng compilation; libpng now allocates the memory and
|
right zlib header files.
|
||||||
this may fail. Overall these changes result in slight code size
|
Separated CPPFLAGS and CFLAGS in contrib/pngminim/*/makefile
|
||||||
reductions; however, this is a reduction in code that is always executed
|
Removed a redundant test in png_set_IHDR().
|
||||||
so is particularly valuable. Overall on a 64-bit system the libpng DLL
|
Added set(CMAKE_CONFIGURATION_TYPES ...) to CMakeLists.txt (Andrew Hundt)
|
||||||
decreases in code size by 1733 bytes. pngerror.o increases in size by
|
Deleted set(CMAKE_BUILD_TYPE) block from CMakeLists.txt
|
||||||
about 465 bytes because of the new functionality.
|
Enclose the prototypes for the simplified write API in
|
||||||
Added png_convert_to_rfc1123_buffer() and deprecated png_convert_to_rfc1123()
|
#ifdef PNG_STDIO_SUPPORTED/#endif
|
||||||
to avoid including a spurious buffer in the png_struct.
|
Make ARM NEON support work at compile time (not just configure time).
|
||||||
Regenerated configure scripts with automake-1.11.2
|
This moves the test on __ARM_NEON__ into pngconf.h to avoid issues when
|
||||||
Eliminated png_info_destroy(). It is now used only in png.c and only calls
|
using a compiler that compiles for multiple architectures at one time.
|
||||||
one other internal function and memset().
|
Removed PNG_FILTER_OPTIMIZATIONS and PNG_ARM_NEON_SUPPORTED from
|
||||||
Enabled png_get_sCAL_fixed() if floating point APIs are enabled. Previously
|
pnglibconf.h, allowing more of the decisions to be made internally
|
||||||
it was disabled whenever internal fixed point arithmetic was selected,
|
(pngpriv.h) during the compile. Without this, symbol prefixing is broken
|
||||||
which meant it didn't exist even on systems where FP was available but not
|
under certain circumstances on ARM platforms. Now only the API parts of
|
||||||
preferred.
|
the optimizations ('check' vs 'api') are exposed in the public header files
|
||||||
Added pngvalid.c compile time checks for const APIs.
|
except that the new setting PNG_ARM_NEON_OPT documents how libpng makes the
|
||||||
Implemented 'restrict' for png_info and png_struct. Because of the way
|
decision about whether or not to use the optimizations.
|
||||||
libpng works both png_info and png_struct are always accessed via a
|
Protect symbol prefixing against CC/CPPFLAGS/CFLAGS useage.
|
||||||
single pointer. This means adding C99 'restrict' to the pointer gives
|
Previous iOS/Xcode fixes for the ARM NEON optimizations moved the test
|
||||||
the compiler some opportunity to optimize the code. This change allows
|
on __ARM_NEON__ from configure time to compile time. This breaks symbol
|
||||||
that.
|
prefixing because the definition of the special png_init_filter_functions
|
||||||
Moved AC_MSG_CHECKING([if libraries can be versioned]) later to the proper
|
call was hidden at configure time if the relevant compiler arguments are
|
||||||
location in configure.ac (Gilles Espinasse).
|
passed in CFLAGS as opposed to CC. This change attempts to avoid all
|
||||||
Changed png_memcpy to C assignment where appropriate. Changed all those
|
the confusion that would result by declaring the init function even when
|
||||||
uses of png_memcpy that were doing a simple assignment to assignments
|
it is not used, so that it will always get prefixed.
|
||||||
(all those cases where the thing being copied is a non-array C L-value).
|
Revised libpng.3 so that "doclifter" can process it.
|
||||||
Added some error checking to png_set_*() routines.
|
Revised example.c to illustrate use of PNG_DEFAULT_sRGB and PNG_GAMMA_MAC_18
|
||||||
Removed the reference to the non-exported function png_memcpy() from
|
as parameters for png_set_gamma(). These have been available since
|
||||||
example.c.
|
libpng-1.5.4.
|
||||||
Fixed the Visual C 64-bit build - it requires jmp_buf to be aligned, but
|
Renamed contrib/tools/png-fix-too-far-back.c to pngfix.c and revised it
|
||||||
it had become misaligned.
|
to check all compressed chunks known to libpng.
|
||||||
Revised contrib/pngminus/pnm2png.c to avoid warnings when png_uint_32
|
Updated documentation to show default behavior of benign errors correctly.
|
||||||
and unsigned long are of different sizes.
|
Only compile ARM code when PNG_READ_SUPPORTED is defined.
|
||||||
Updated manual with description of the simplified API.
|
Fixed undefined behavior in contrib/tools/pngfix.c and added new strip
|
||||||
Fix bug in pngerror.c: some long warnings were being improperly truncated
|
option. pngfix relied on undefined behavior and even a simple change from
|
||||||
(CVE-2011-3464, bug introduced in libpng-1.5.4).
|
gcc to g++ caused it to fail. The new strip option 'unsafe' has been
|
||||||
Increased the formatted warning buffer to 192 bytes.
|
implemented and is the default if --max is given. Option names have
|
||||||
Fixed Min/GW uninstall to remove libpng.dll.a
|
been clarified, with --strip=transform now stripping the bKGD chunk,
|
||||||
Eliminated Intel icc/icl compiler warnings. The Intel (GCC derived)
|
which was stripped previously with --strip=unused.
|
||||||
compiler issues slightly different warnings from those issued by the
|
Added all documented chunk types to pngpriv.h
|
||||||
current vesions of GCC. This eliminates those warnings by
|
Unified pngfix.c source with libpng17.
|
||||||
adding/removing casts and small code rewrites.
|
Revised manual about changes in iTXt chunk handling made in libpng-1.6.0.
|
||||||
Updated configure.ac from autoupdate: added --enable-werror option.
|
Added "/* SAFE */" comments in pngrutil.c and pngrtran.c where warnings
|
||||||
Also some layout regularization and removal of introduced tab characters
|
may be erroneously issued by code-checking applications.
|
||||||
(replaced with 3-character indentation). Obsolete macros identified by
|
|
||||||
autoupdate have been removed; the replacements are all in 2.59 so
|
|
||||||
the pre-req hasn't been changed. --enable-werror checks for support
|
|
||||||
for -Werror (or the given argument) in the compiler. This mimics the
|
|
||||||
gcc configure option by allowing -Werror to be turned on safely; without
|
|
||||||
the option the tests written in configure itself fail compilation because
|
|
||||||
they cause compiler warnings.
|
|
||||||
Rewrote autogen.sh to run autoreconf instead of running tools one-by-one.
|
|
||||||
Conditionalize the install rules for MINGW and CYGWIN in CMakeLists.txt and
|
|
||||||
set CMAKE_LIBRARY_OUTPUT_DIRECTORY to "lib" on all platforms (C. Yapp).
|
|
||||||
Freeze libtool files in the 'scripts' directory. This version of autogen.sh
|
|
||||||
attempts to dissuade people from running it when it is not, or should not,
|
|
||||||
be necessary. In fact, autogen.sh does not work when run in a libpng
|
|
||||||
directory extracted from a tar distribution anymore. You must run it in
|
|
||||||
a GIT clone instead.
|
|
||||||
Added two images to contrib/pngsuite (1-bit and 2-bit transparent grayscale),
|
|
||||||
and renamed three whose names were inconsistent with those in
|
|
||||||
pngsuite/README.txt.
|
|
||||||
Check libtool/libtoolize version number (2.4.2) in configure.ac
|
|
||||||
Moved automake options to AM_INIT_AUTOMAKE in configure.ac
|
|
||||||
Added color-tests, silent-rules (Not yet implemented in Makefile.am) and
|
|
||||||
version checking to configure.ac
|
|
||||||
Cleaned up pngpriv.h to consistently declare all functions and data.
|
|
||||||
Also eliminated PNG_CONST_DATA, which is apparently not needed but we
|
|
||||||
can't be sure until it is gone.
|
|
||||||
Added symbol prefixing that allows all the libpng external symbols
|
|
||||||
to be prefixed (suggested by Reuben Hawkins).
|
|
||||||
Updated "ftbb*.png" list in the owatcom and vstudio projects.
|
|
||||||
Added Z_SOLO for zlib-1.2.6+ and correct pngstest tests
|
|
||||||
Revised INSTALL information about autogen.sh.
|
|
||||||
Updated list of test images in CMakeLists.txt
|
|
||||||
Corrected estimate of error in libpng png_set_rgb_to_gray API. The API is
|
|
||||||
extremely inaccurate for sRGB conversions because it uses an 8-bit
|
|
||||||
intermediate linear value and it does not use the sRGB transform, so it
|
|
||||||
suffers from the known instability in gamma transforms for values close
|
|
||||||
to 0 (see Poynton). The net result is that the calculation has a maximum
|
|
||||||
error of 14.99/255; 0.5/255^(1/2.2). pngstest now uses 15 for the
|
|
||||||
permitted 8-bit error. This may still not be enough because of arithmetic
|
|
||||||
error.
|
|
||||||
Removed some unused arrays (with #ifdef) from png_read_push_finish_row().
|
|
||||||
Fixed a memory overwrite bug in simplified read of RGB PNG with
|
|
||||||
non-linear gamma Also bugs in the error checking in pngread.c and changed
|
|
||||||
quite a lot of the checks in pngstest.c to be correct; either correctly
|
|
||||||
written or not over-optimistic. The pngstest changes are insufficient to
|
|
||||||
allow all possible RGB transforms to be passed; pngstest cmppixel needs
|
|
||||||
to be rewritten to make it clearer which errors it allows and then changed
|
|
||||||
to permit known inaccuracies.
|
|
||||||
Removed tests for no-longer-used *_EMPTY_PLTE_SUPPORTED from pngstruct.h
|
|
||||||
Fixed fixed/float API export conditionals. 1) If FIXED_POINT or
|
|
||||||
FLOATING_POINT options were switched off, png.h ended up with lone ';'
|
|
||||||
characters. This is not valid ANSI-C outside a function. The ';'
|
|
||||||
characters have been moved inside the definition of PNG_FP_EXPORT and
|
|
||||||
PNG_FIXED_EXPORT. 2) If either option was switched off, the declaration
|
|
||||||
of the corresponding functions were completely omitted, even though some
|
|
||||||
of them are still used internally. The result is still valid, but
|
|
||||||
produces warnings from gcc with some warning options (including -Wall). The
|
|
||||||
fix is to cause png.h to declare the functions with PNG_INTERNAL_FUNCTION
|
|
||||||
when png.h is included from pngpriv.h.
|
|
||||||
Check for invalid palette index while reading paletted PNG. When one is
|
|
||||||
found, issue a warning.
|
|
||||||
Fixed CVE-2011-3026 buffer overrun bug. Deal more correctly with the test
|
|
||||||
on iCCP chunk length. Also removed spurious casts that may hide problems
|
|
||||||
on 16-bit systems.
|
|
||||||
Eliminated redundant png_push_read_tEXt|zTXt|iTXt|unknown code from
|
|
||||||
pngpread.c and use the sequential png_handle_tEXt, etc., in pngrutil.c;
|
|
||||||
now that png_ptr->buffer is inaccessible to applications, the special
|
|
||||||
handling is no longer useful.
|
|
||||||
Added PNG_SAFE_LIMITS feature to pnglibconf.dfa, pngpriv.h, and new
|
|
||||||
pngusr.dfa to reset the user limits to safe ones if PNG_SAFE_LIMITS is
|
|
||||||
defined. To enable, use "CPPFLAGS=-DPNG_SAFE_LIMITS_SUPPORTED=1" on the
|
|
||||||
configure command or put #define PNG_SAFE_LIMITS_SUPPORTED in
|
|
||||||
pnglibconf.h.prebuilt and pnglibconf.h.
|
|
||||||
Added information about the new limits in the manual.
|
|
||||||
Removed unused "current_text" members of png_struct and the png_free()
|
|
||||||
of png_ptr->current_text from pngread.c
|
|
||||||
Added PNG_IMAGE_FLAG_FAST for the benefit of applications that store
|
|
||||||
intermediate files, or intermediate in-memory data, while processing
|
|
||||||
image data with the simplified API. The option makes the files larger
|
|
||||||
but faster to write and read. pngstest now uses this by default; this
|
|
||||||
can be disabled with the --slow option.
|
|
||||||
Improved pngstest fine tuning of error numbers, new test file generator.
|
|
||||||
The generator generates images that test the full range of sample values,
|
|
||||||
allow the error numbers in pngstest to be tuned and checked. makepng
|
|
||||||
also allows generation of images with extra chunks, although this is
|
|
||||||
still work-in-progress.
|
|
||||||
Fixed some bugs in ICC profile writing. The code should now accept
|
|
||||||
all potentially valid ICC profiles and reject obviously invalid ones.
|
|
||||||
It now uses png_error() to do so rather than casually writing a PNG
|
|
||||||
without the necessary color data.
|
|
||||||
Removed whitespace from the end of lines in all source files and scripts.
|
|
||||||
Added tests for invalid palette index while reading and writing.
|
|
||||||
Changed png_inflate() and calling routines to avoid overflow problems.
|
|
||||||
This is an intermediate check-in that solves the immediate problems and
|
|
||||||
introduces one performance improvement (avoiding a copy via png_ptr->zbuf.)
|
|
||||||
Further changes will be made to make ICC profile handling more secure.
|
|
||||||
Added contrib/libtests/tarith.c to test internal arithmetic functions from
|
|
||||||
png.c. This is a libpng maintainer program used to validate changes to the
|
|
||||||
internal arithmetic functions.
|
|
||||||
Made read 'inflate' handling like write 'deflate' handling. The read
|
|
||||||
code now claims and releases png_ptr->zstream, like the write code.
|
|
||||||
The bug whereby the progressive reader failed to release the zstream
|
|
||||||
is now fixed, all initialization is delayed, and the code checks for
|
|
||||||
changed parameters on deflate rather than always calling
|
|
||||||
deflatedEnd/deflateInit.
|
|
||||||
Validate the zTXt strings in pngvalid.
|
|
||||||
Added code to validate the windowBits value passed to deflateInit2().
|
|
||||||
If the call to deflateInit2() is wrong a png_warning will be issued
|
|
||||||
(in fact this is harmless, but the PNG data produced may be sub-optimal).
|
|
||||||
Fixed PNG_LIBPNG_BUILD_BASE_TYPE definition.
|
|
||||||
Reject all iCCP chunks after the first, even if the first one is invalid.
|
|
||||||
Deflate/inflate was reworked to move common zlib calls into single
|
|
||||||
functions [rw]util.c. A new shared keyword check routine was also added
|
|
||||||
and the 'zbuf' is no longer allocated on progressive read. It is now
|
|
||||||
possible to call png_inflate() incrementally.
|
|
||||||
If benign errors are disabled use maximum window on ancilliary inflate.
|
|
||||||
This works round a bug introduced in 1.5.4 where compressed ancillary
|
|
||||||
chunks could end up with a too-small windowBits value in the deflate
|
|
||||||
header.
|
|
||||||
Issue a png_benign_error() instead of png_warning() about bad palette index.
|
|
||||||
In pngtest, treat benign errors as errors if "-strict" is present.
|
|
||||||
Fixed a compiler warning under Cygwin (Windows-7, 32-bit system)
|
|
||||||
Revised example.c to put text strings in a temporary character array
|
|
||||||
instead of directly assigning string constants to png_textp members.
|
|
||||||
This avoids compiler warnings when -Wwrite-strings is enabled.
|
|
||||||
Added output flushing to aid debugging under Visual Studio. Unfortunately
|
|
||||||
this is necessary because the VS2010 output window otherwise simply loses
|
|
||||||
the error messages on error (they weren't flushed to the window before
|
|
||||||
the process exited, apparently!)
|
|
||||||
Added configuration support for benign errors and changed the read
|
|
||||||
default. Also changed some warnings in the iCCP and sRGB handling
|
|
||||||
from to benign errors. Configuration now makes read benign
|
|
||||||
errors warnings and write benign errors to errors by default (thus
|
|
||||||
changing the behavior on read). The simplified API always forces
|
|
||||||
read benign errors to warnings (regardless of the system default, unless
|
|
||||||
this is disabled in which case the simplified API can't be built.)
|
|
||||||
Work around for duplicate row start calls; added warning messages.
|
|
||||||
This turns on PNG_FLAG_DETECT_UNINITIALIZED to detect app code that
|
|
||||||
fails to call one of the 'start' routines (not enabled in libpng-1.5
|
|
||||||
because it is technically an API change, since it did normally work
|
|
||||||
before.) It also makes duplicate calls to png_read_start_row (an
|
|
||||||
internal function called at the start of the image read) benign, as
|
|
||||||
they were before changes to use png_inflate_claim. Somehow webkit is
|
|
||||||
causing this to happen; this is probably a mis-feature in the zlib
|
|
||||||
changes so this commit is only a work-round.
|
|
||||||
Removed erroneous setting of DETECT_UNINITIALIZED and added more
|
|
||||||
checks. The code now does a png_error if an attempt is made to do the
|
|
||||||
row initialization twice; this is an application error and it has
|
|
||||||
serious consequences because the transform data in png_struct is
|
|
||||||
changed by each call.
|
|
||||||
Added application error reporting and added chunk names to read
|
|
||||||
benign errors; also added --strict to pngstest - not enabled
|
|
||||||
yet because a warning is produced.
|
|
||||||
Avoid the double gamma correction warning in the simplified API.
|
|
||||||
This allows the --strict option to pass in the pngstest checks
|
|
||||||
Changed chunk handler warnings into benign errors, incrementally load iCCP
|
|
||||||
Added checksum-icc.c to contrib/tools
|
|
||||||
Prevent PNG_EXPAND+PNG_SHIFT doing the shift twice.
|
|
||||||
Recognize known sRGB ICC profiles while reading; prefer writing the
|
|
||||||
iCCP profile over writing the sRGB chunk, controlled by the
|
|
||||||
PNG_sRGB_PROFILE_CHECKS option.
|
|
||||||
Revised png_set_text_2() to avoid potential memory corruption (fixes
|
|
||||||
CVE-2011-3048).
|
|
||||||
Revised scripts/makefile.darwin: use system zlib; remove quotes around
|
|
||||||
architecture list; add missing ppc architecture; add architecture options
|
|
||||||
to shared library link; don't try to create a shared lib based on missing
|
|
||||||
RELEASE variable.
|
|
||||||
Enable png_set_check_for_invalid_index() for both read and write.
|
|
||||||
Removed #ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED in pngpriv.h around
|
|
||||||
declaration of png_handle_unknown().
|
|
||||||
Added -lssp_nonshared in a comment in scripts/makefile.freebsd
|
|
||||||
and changed deprecated NOOBJ and NOPROFILE to NO_OBJ and NO_PROFILE.
|
|
||||||
Removed need for -Wno-cast-align with clang. clang correctly warns on
|
|
||||||
alignment increasing pointer casts when -Wcast-align is passed. This
|
|
||||||
fixes the cases that clang warns about either by eliminating the
|
|
||||||
casts from png_bytep to png_uint_16p (pngread.c), or, for pngrutil.c
|
|
||||||
where the cast is previously verified or pngstest.c where it is OK, by
|
|
||||||
introducing new png_aligncast macros to do the cast in a way that clang
|
|
||||||
accepts.
|
|
||||||
Revised CMakeLists.txt to not attempt to make a symlink under mingw.
|
|
||||||
Made fixes for new optimization warnings from gcc 4.7.0. The compiler
|
|
||||||
performs an optimization which is safe; however it then warns about it.
|
|
||||||
Changing the type of 'palette_number' in pngvalid.c removes the warning.
|
|
||||||
Do not depend upon a GCC feature macro being available for use in generating
|
|
||||||
the linker mapfile symbol prefix.
|
|
||||||
Improved performance of new do_check_palette_indexes() function (only
|
|
||||||
update the value when it actually increases, move test for whether
|
|
||||||
the check is wanted out of the function.
|
|
||||||
Don't check palette indexes if num_palette is 0 (as it can be in MNG files).
|
|
||||||
Revised png_set_keep_unknown_chunks() so num_chunks < 0 means ignore all
|
|
||||||
unknown chunks and all known chunks except for IHDR, PLTE, tRNS, IDAT,
|
|
||||||
and IEND. Previously it only meant ignore all unknown chunks, the
|
|
||||||
same as num_chunks == 0. Revised png_image_skip_unused_chunks() to
|
|
||||||
provide a list of chunks to be processed instead of a list of chunks to
|
|
||||||
ignore. Revised contrib/gregbook/readpng2.c accordingly.
|
|
||||||
Removed scripts/makefile.cegcc from the *.zip and *.7z distributions; it
|
|
||||||
depends on configure, which is not included in those archives.
|
|
||||||
Moved scripts/chkfmt to contrib/tools.
|
|
||||||
Changed "a+w" to "u+w" in Makefile.in to fix CVE-2012-3386.
|
|
||||||
Do not compile PNG_DEPRECATED, PNG_ALLOC and PNG_PRIVATE when __GNUC__ < 3.
|
|
||||||
Do not use __restrict when GNUC is <= 3.1
|
|
||||||
Removed references to png_zalloc() and png_zfree() from the manual.
|
|
||||||
Fixed configurations where floating point is completely disabled. Because
|
|
||||||
of the changes to support symbol prefixing PNG_INTERNAL_FUNCTION declares
|
|
||||||
floating point APIs during libpng builds even if they are completely
|
|
||||||
disabled. This requires the png floating point types (png_double*) to be
|
|
||||||
declared even though the functions are never actually defined. This
|
|
||||||
change provides a dummy definition so that the declarations work, yet any
|
|
||||||
implementation will fail to compile because of an incomplete type.
|
|
||||||
Re-eliminated the use of strcpy() in pngtest.c. An unncessary use of
|
|
||||||
strcpy() was accidentally re-introduced in libpng16; this change replaces
|
|
||||||
it with strncpy().
|
|
||||||
Eliminated use of png_sizeof(); use sizeof() instead.
|
|
||||||
Use a consistent style for (sizeof type) and (sizeof (array))
|
|
||||||
Cleanup of png_set_filler(). This function does very different things on
|
|
||||||
read and write. In libpng 1.6 the two cases can be distinguished and
|
|
||||||
considerable code cleanup, and extra error checking, is possible. This
|
|
||||||
makes calls on the write side that have no effect be ignored with a
|
|
||||||
png_app_error(), which can be disabled in the app using
|
|
||||||
png_set_benign_errors(), and removes the spurious use of usr_channels
|
|
||||||
on the read side.
|
|
||||||
Insist on autotools 1.12.1 for git builds because there are security issues
|
|
||||||
with 1.12 and insisting on anything less would allow 1.12 to be used.
|
|
||||||
Removed info_ptr->signature[8] from WRITE-only builds.
|
|
||||||
Add some conditions for compiling png_fixed(). This is a small function
|
|
||||||
but it requires "-lm" on some platforms.
|
|
||||||
Cause pngtest --strict to fail on any warning from libpng (not just errors)
|
|
||||||
and cause it not to fail at the comparison step if libpng lacks support
|
|
||||||
for writing chunks that it reads from the input (currently only implemented
|
|
||||||
for compressed text chunks).
|
|
||||||
Make all three "make check" test programs work without READ or WRITE support.
|
|
||||||
Now "make check" will succeed even if libpng is compiled with -DPNG_NO_READ
|
|
||||||
or -DPNG_NO_WRITE. The tests performed are reduced, but the basic reading
|
|
||||||
and writing of a PNG file is always tested by one or more of the tests.
|
|
||||||
Consistently use strlen(), memset(), memcpy(), and memcmp() instead of the
|
|
||||||
png_strlen(), png_memset(), png_memcpy(), and png_memcmp() macros.
|
|
||||||
Removed the png_sizeof(), png_strlen(), png_memset(), png_memcpy(), and
|
|
||||||
png_memcmp() macros.
|
|
||||||
Work around gcc 3.x and Microsoft Visual Studio 2010 complaints. Both object
|
|
||||||
to the split initialization of num_chunks.
|
|
||||||
Unknown handling fixes and clean up. This adds more correct option
|
|
||||||
control of the unknown handling, corrects the pre-existing bug where
|
|
||||||
the per-chunk 'keep' setting is ignored and makes it possible to skip
|
|
||||||
IDAT chunks in the sequential reader (broken in earlier 1.6 versions).
|
|
||||||
There is a new test program, test-unknown.c, which is a work in progress
|
|
||||||
(not currently part of the test suite). Comments in the header files now
|
|
||||||
explain how the unknown handling works.
|
|
||||||
Allow fine grain control of unknown chunk APIs. This change allows
|
|
||||||
png_set_keep_unknown_chunks() to be turned off if not required and causes
|
|
||||||
both read and write to behave appropriately (on read this is only possible
|
|
||||||
if the user callback is used to handle unknown chunks). The change
|
|
||||||
also removes the support for storing unknown chunks in the info_struct
|
|
||||||
if the only unknown handling enabled is via the callback, allowing libpng
|
|
||||||
to be configured with callback reading and none of the unnecessary code.
|
|
||||||
Corrected fix for unknown handling in pngtest. This reinstates the
|
|
||||||
libpng handling of unknown chunks other than vpAg and sTER (including
|
|
||||||
unsafe-to-copy chunks which were dropped before) and eliminates the
|
|
||||||
repositioning of vpAg and sTER in pngtest.png by changing pngtest.png
|
|
||||||
(so the chunks are where libpng would put them).
|
|
||||||
Added "tunknown" test and corrected a logic error in png_handle_unknown()
|
|
||||||
when SAVE support is absent. Moved the shell test scripts for
|
|
||||||
contrib/libtests from the libpng top directory to contrib/libtests.
|
|
||||||
png_handle_unknown() must always read or skip the chunk, if
|
|
||||||
SAVE_UNKNOWN_CHUNKS is turned off *and* the application does not set
|
|
||||||
a user callback an unknown chunk will not be read, leading to a read
|
|
||||||
error, which was revealed by the "tunknown" test.
|
|
||||||
Cleaned up and corrected ICC profile handling.
|
|
||||||
contrib/libtests/makepng: corrected 'rgb' and 'gray' cases. profile_error
|
|
||||||
messages could be truncated; made a correct buffer size calculation and
|
|
||||||
adjusted pngerror.c appropriately. png_icc_check_* checking improved;
|
|
||||||
changed the functions to receive the correct color type of the PNG on read
|
|
||||||
or write and check that it matches the color space of the profile (despite
|
|
||||||
what the comments said before, there is danger in assuming the app will
|
|
||||||
cope correctly with an RGB profile on a grayscale image and, since it
|
|
||||||
violates the PNG spec, allowing it is certain to produce inconsistent
|
|
||||||
app behavior and might even cause app crashes.) Check that profiles
|
|
||||||
contain the tags needed to process the PNG (tags all required by the ICC
|
|
||||||
spec). Removed unused PNG_STATIC from pngpriv.h.
|
|
||||||
Fixed the simplified API example programs and improved the error message
|
|
||||||
if the version field is not set.
|
|
||||||
Updated simplified API synopses and description of the png_image structure
|
|
||||||
in the manual.
|
|
||||||
Made makepng and pngtest produce identical PNGs, add "--relaxed" option
|
|
||||||
to pngtest. The "--relaxed" option turns off the benign errors that are
|
|
||||||
enabled by default in pre-RC builds. makepng can now write ICC profiles
|
|
||||||
where the length has not been extended to a multiple of 4, and pngtest
|
|
||||||
now intercepts all libpng errors, allowing the previously-introduced
|
|
||||||
"--strict test" on no warnings to actually work.
|
|
||||||
Added a work around for GCC 4.2 optimization bug.
|
|
||||||
Marked the broken (bad white point) original HP sRGB profiles correctly and
|
|
||||||
correct comments.
|
|
||||||
Added -DZ_SOLO to contrib/pngminim/*/makefile to work with zlib-1.2.7
|
|
||||||
Use /MDd for vstudio debug builds. Also added pngunkown to the vstudio
|
|
||||||
builds, fixed build errors and corrected a minor exit code error in
|
|
||||||
pngvalid if the 'touch' file name is invalid.
|
|
||||||
Add updated WARNING file to projects/vstudio from libpng 1.5/vstudio
|
|
||||||
Fixed build when using #define PNG_NO_READ_GAMMA in png_do_compose() in
|
|
||||||
pngrtran.c (Domani Hannes).
|
|
||||||
Made pngvalid so that it will build outside the libpng source tree.
|
|
||||||
Made PNG_NO_READ_GAMMA switch off interfaces that depend on READ_GAMMA.
|
|
||||||
Prior to 1.6.0 switching off READ_GAMMA did unpredictable things to the
|
|
||||||
interfaces that use it (specifically, png_do_background in 1.4 would
|
|
||||||
simply display composite for grayscale images but do composition
|
|
||||||
with the incorrect arithmetic for color ones). In 1.6 the semantic
|
|
||||||
of -DPNG_NO_READ_GAMMA is changed to simply disable any interface that
|
|
||||||
depends on it; this obliges people who set it to consider whether they
|
|
||||||
really want it off if they happen to use any of the interfaces in
|
|
||||||
question (typically most users who disable it won't).
|
|
||||||
Added the ability for contrib/libtests/makepng.c to make a PNG with just one
|
|
||||||
color. This is useful for debugging pngstest color inaccuracy reports.
|
|
||||||
Made png_user_version_check() ok to use with libpng version 1.10.x and later.
|
|
||||||
Fixed typo in png.c (PNG_SET_CHUNK_MALLOC_MAX should be PNG_CHUNK_MALLOC_MAX)
|
|
||||||
that causes the MALLOC_MAX limit not to work (John Bowler)
|
|
||||||
Change png_warning() to png_app_error() in pngwrite.c and comment the
|
|
||||||
fall-through condition.
|
|
||||||
Change png_warning() to png_app_warning() in png_write_tRNS().
|
|
||||||
Rearranged the ARM-NEON optimizations: Isolated the machine specific code
|
|
||||||
to the hardware subdirectory and added comments to pngrutil.c so that
|
|
||||||
implementors of other optimizations know what to do.
|
|
||||||
Fixed cases of unquoted DESTDIR in Makefile.am
|
|
||||||
Cleaned up whitespace in the synopsis portion of the manpage "libpng.3"
|
|
||||||
Disassembled the version number in scripts/options.awk (necessary for
|
|
||||||
building on SunOs).
|
|
||||||
Made default Zlib compression settings be configurable. This adds #defines to
|
|
||||||
pnglibconf.h to control the defaults.
|
|
||||||
Fixed Windows build issues, enabled ARM compilation. Various warnings issued
|
|
||||||
by earlier versions of GCC fixed for Cygwin and Min/GW (which both use old
|
|
||||||
GCCs.) ARM support is enabled by default in zlib.props (unsupported by
|
|
||||||
Microsoft) and ARM compilation is made possible by deleting the check for
|
|
||||||
x86. The test programs cannot be run because they are not signed.
|
|
||||||
Discontinued distributing libpng-1.x.x.tar.bz2.
|
|
||||||
Discontinued distributing libpng-1.7.0-1.6.0-diff.txt and similar.
|
|
||||||
Rebuilt Makefile.in, configure, etc., with autoconf-2.69 and automake-1.12.5.
|
|
||||||
Fixed 'make distcheck' on SUN OS - libpng.so was not being removed
|
|
||||||
Fixed conceivable but difficult to repro overflow. Also added two test
|
|
||||||
programs to generate and test a PNG which should have the problem.
|
|
||||||
Added overflow detection in png_set_sPLT() and png_set_text_2().
|
|
||||||
Use consistent handling of overflows in text, sPLT and unknown png_set_* APIs
|
|
||||||
Added png_get_palette_max() function.
|
|
||||||
Fixed missing dependency in --prefix builds The intermediate
|
|
||||||
internal 'prefix.h' file can only be generated correctly after
|
|
||||||
pnglibconf.h, however the dependency was not in Makefile.am. The
|
|
||||||
symptoms are unpredictable depending on the order make chooses to
|
|
||||||
build pngprefix.h and pnglibconf.h, often the error goes unnoticed
|
|
||||||
because there is a system pnglibconf.h to use instead.
|
|
||||||
Enclosed the new png_get_palette_max in #ifdef PNG_GET_PALETTE_MAX_SUPPORTED
|
|
||||||
block, and revised pnglibconf.h and pnglibconf.h.prebuilt accordingly.
|
|
||||||
|
|
||||||
Send comments/corrections/commendations to png-mng-implement at lists.sf.net
|
Send comments/corrections/commendations to png-mng-implement at lists.sf.net
|
||||||
(subscription required; visit
|
(subscription required; visit
|
||||||
|
|||||||
241
CHANGES
241
CHANGES
@@ -3672,7 +3672,8 @@ Version 1.5.6 [November 3, 2011]
|
|||||||
No changes.
|
No changes.
|
||||||
|
|
||||||
Version 1.5.7beta01 [November 4, 2011]
|
Version 1.5.7beta01 [November 4, 2011]
|
||||||
Added support for ARM processor (Mans Rullgard)
|
Added support for ARM processor, when decoding all PNG up-filtered rows
|
||||||
|
and any other-filtered rows with 3 or 4 bytes per pixel (Mans Rullgard).
|
||||||
Fixed bug in pngvalid on early allocation failure; fixed type cast in
|
Fixed bug in pngvalid on early allocation failure; fixed type cast in
|
||||||
pngmem.c; pngvalid would attempt to call png_error() if the allocation
|
pngmem.c; pngvalid would attempt to call png_error() if the allocation
|
||||||
of a png_struct or png_info failed. This would probably have led to a
|
of a png_struct or png_info failed. This would probably have led to a
|
||||||
@@ -4046,7 +4047,9 @@ Version 1.6.0beta17 [March 10, 2012]
|
|||||||
Deflate/inflate was reworked to move common zlib calls into single
|
Deflate/inflate was reworked to move common zlib calls into single
|
||||||
functions [rw]util.c. A new shared keyword check routine was also added
|
functions [rw]util.c. A new shared keyword check routine was also added
|
||||||
and the 'zbuf' is no longer allocated on progressive read. It is now
|
and the 'zbuf' is no longer allocated on progressive read. It is now
|
||||||
possible to call png_inflate() incrementally.
|
possible to call png_inflate() incrementally. A warning is no longer
|
||||||
|
issued if the language tag or translated keyword in the iTXt chunk
|
||||||
|
has zero length.
|
||||||
If benign errors are disabled use maximum window on ancilliary inflate.
|
If benign errors are disabled use maximum window on ancilliary inflate.
|
||||||
This works round a bug introduced in 1.5.4 where compressed ancillary
|
This works round a bug introduced in 1.5.4 where compressed ancillary
|
||||||
chunks could end up with a too-small windowBits value in the deflate
|
chunks could end up with a too-small windowBits value in the deflate
|
||||||
@@ -4381,6 +4384,240 @@ Version 1.6.0rc08 [February 10, 2013]
|
|||||||
Version 1.6.0 [February 14, 2013]
|
Version 1.6.0 [February 14, 2013]
|
||||||
No changes.
|
No changes.
|
||||||
|
|
||||||
|
Version 1.6.1beta01 [February 16, 2013]
|
||||||
|
Made symbol prefixing work with the ARM neon optimizations. Also allow
|
||||||
|
pngpriv.h to be included for preprocessor definitions only, so it can
|
||||||
|
be used in non-C/C++ files. Back ported from libpng 1.7.
|
||||||
|
Made sRGB check numbers consistent.
|
||||||
|
Ported libpng 1.5 options.awk/dfn file handling to 1.6, fixed one bug.
|
||||||
|
Removed cc -E workround, corrected png_get_palette_max API Tested on
|
||||||
|
SUN OS cc 5.9, which demonstrates the tokenization problem previously
|
||||||
|
avoided by using /lib/cpp. Since all .dfn output is now protected in
|
||||||
|
double quotes unless it is to be macro substituted the fix should
|
||||||
|
work everywhere.
|
||||||
|
Enabled parallel tests - back ported from libpng-1.7.
|
||||||
|
scripts/pnglibconf.dfa formatting improvements back ported from libpng17.
|
||||||
|
Fixed a race condition in the creation of the build 'scripts' directory
|
||||||
|
while building with a parallel make.
|
||||||
|
Use approved/supported Android method to check for NEON, use Linux/POSIX
|
||||||
|
1003.1 API to check /proc/self/auxv avoiding buffer allocation and other
|
||||||
|
library calls (ported from libpng15).
|
||||||
|
|
||||||
|
Version 1.6.1beta02 [February 19, 2013]
|
||||||
|
Use parentheses more consistently in "#if defined(MACRO)" tests.
|
||||||
|
Folded long lines.
|
||||||
|
Reenabled code to allow zero length PLTE chunks for MNG.
|
||||||
|
|
||||||
|
Version 1.6.1beta03 [February 22, 2013]
|
||||||
|
Fixed ALIGNED_MEMORY support.
|
||||||
|
Allow run-time ARM NEON checking to be disabled. A new configure option:
|
||||||
|
--enable-arm-neon=always will stop the run-time checks. New checks
|
||||||
|
within arm/arm_init.c will cause the code not to be compiled unless
|
||||||
|
__ARM_NEON__ is set. This should make it fail safe (if someone asks
|
||||||
|
for it on then the build will fail if it can't be done.)
|
||||||
|
Updated the INSTALL document.
|
||||||
|
|
||||||
|
Version 1.6.1beta04 [February 27, 2013]
|
||||||
|
Revised INSTALL to recommend using CPPFLAGS instead of INCLUDES.
|
||||||
|
Revised scripts/makefile.freebsd to respect ZLIBLIB and ZLIBINC.
|
||||||
|
Revised scripts/dfn.awk to work with the buggy MSYS awk that has trouble
|
||||||
|
with CRLF line endings.
|
||||||
|
|
||||||
|
Version 1.6.1beta05 [March 1, 2013]
|
||||||
|
Avoid a possible memory leak in contrib/gregbook/readpng.c
|
||||||
|
|
||||||
|
Version 1.6.1beta06 [March 4, 2013]
|
||||||
|
Better documentation of unknown handling API interactions.
|
||||||
|
Corrected Android builds and corrected libpng.vers with symbol
|
||||||
|
prefixing This adds an API to set optimization options externally,
|
||||||
|
providing an alternative and general solution for the non-portable
|
||||||
|
run-time tests used by the ARM Neon code. It also makes those tests
|
||||||
|
compile and link on Android.
|
||||||
|
The order of settings vs options in pnglibconf.h is reversed to allow
|
||||||
|
settings to depend on options and options can now set (or override) the
|
||||||
|
defaults for settings.
|
||||||
|
|
||||||
|
Version 1.6.1beta07 [March 7, 2013]
|
||||||
|
Corrected simplified API default gamma for color-mapped output, added
|
||||||
|
a flag to change default. In 1.6.0 when the simplified API was used
|
||||||
|
to produce color-mapped output from an input image with no gamma
|
||||||
|
information the gamma assumed for the input could be different from
|
||||||
|
that assumed for non-color-mapped output. In particular 16-bit depth
|
||||||
|
input files were assumed to be sRGB encoded, whereas in the 'direct'
|
||||||
|
case they were assumed to have linear data. This was an error. The
|
||||||
|
fix makes the simplified API treat all input files the same way and
|
||||||
|
adds a new flag to the png_image::flags member to allow the
|
||||||
|
application/user to specify that 16-bit files contain sRGB data
|
||||||
|
rather than the default linear.
|
||||||
|
Fixed bugs in the pngpixel and makepng test programs.
|
||||||
|
|
||||||
|
Version 1.6.1beta08 [March 7, 2013]
|
||||||
|
Fixed CMakelists.txt to allow building a single variant of the library
|
||||||
|
(Claudio Bley):
|
||||||
|
Introduced a PNG_LIB_TARGETS variable that lists all activated library
|
||||||
|
targets. It is an error if this variable ends up empty, ie. you have
|
||||||
|
to build at least one library variant.
|
||||||
|
Made the *_COPY targets only depend on library targets actually being build.
|
||||||
|
Use PNG_LIB_TARGETS to unify a code path.
|
||||||
|
Changed the CREATE_SYMLINK macro to expect the full path to a file as the
|
||||||
|
first argument. When symlinking the filename component of that path is
|
||||||
|
determined and used as the link target.
|
||||||
|
Use copy_if_different in the CREATE_SYMLINK macro.
|
||||||
|
|
||||||
|
Version 1.6.1beta09 [March 13, 2013]
|
||||||
|
Eliminated two warnings from the Intel C compiler. The warnings are
|
||||||
|
technically valid, although a reasonable treatment of division would
|
||||||
|
show it to be incorrect.
|
||||||
|
|
||||||
|
Version 1.6.1rc01 [March 21, 2013]
|
||||||
|
No changes.
|
||||||
|
|
||||||
|
Version 1.6.1 [March 28, 2013]
|
||||||
|
No changes.
|
||||||
|
|
||||||
|
Version 1.6.2beta01 [April 14, 2013]
|
||||||
|
Updated documentation of 1.5.x to 1.6.x changes in iCCP chunk handling.
|
||||||
|
Fixed incorrect warning of excess deflate data. End condition - the
|
||||||
|
warning would be produced if the end of the deflate stream wasn't read
|
||||||
|
in the last row. The warning is harmless.
|
||||||
|
Corrected the test on user transform changes on read. It was in the
|
||||||
|
png_set of the transform function, but that doesn't matter unless the
|
||||||
|
transform function changes the rowbuf size, and that is only valid if
|
||||||
|
transform_info is called.
|
||||||
|
Corrected a misplaced closing bracket in contrib/libtests/pngvalid.c
|
||||||
|
(Flavio Medeiros).
|
||||||
|
Corrected length written to uncompressed iTXt chunks (Samuli Suominen).
|
||||||
|
Bug was introduced in libpng-1.6.0.
|
||||||
|
|
||||||
|
Version 1.6.2rc01 [April 18, 2013]
|
||||||
|
Added contrib/tools/fixitxt.c, to repair the erroneous iTXt chunk length
|
||||||
|
written by libpng-1.6.0 and 1.6.1.
|
||||||
|
Disallow storing sRGB information when the sRGB is not supported.
|
||||||
|
|
||||||
|
Version 1.6.2rc02 [April 18, 2013]
|
||||||
|
Merge pngtest.c with libpng-1.7.0
|
||||||
|
|
||||||
|
Version 1.6.2rc03 [April 22, 2013]
|
||||||
|
Trivial spelling cleanup.
|
||||||
|
|
||||||
|
Version 1.6.2rc04 and 1.6.2rc05 [omitted]
|
||||||
|
|
||||||
|
Version 1.6.2rc06 [April 24, 2013]
|
||||||
|
Reverted to version 1.6.2rc03. Recent changes to arm/neon support
|
||||||
|
have been ported to libpng-1.7.0beta09 and will reappear in version
|
||||||
|
1.6.3beta01.
|
||||||
|
|
||||||
|
Version 1.6.2 [April 25, 2013]
|
||||||
|
No changes.
|
||||||
|
|
||||||
|
Version 1.6.3beta01 [April 25, 2013]
|
||||||
|
Revised stack marking in arm/filter_neon.S and configure.ac.
|
||||||
|
Ensure that NEON filter stuff is completely disabled when switched 'off'.
|
||||||
|
Previously the ARM NEON specific files were still built if the option
|
||||||
|
was switched 'off' as opposed to being explicitly disabled.
|
||||||
|
|
||||||
|
Version 1.6.3beta02 [April 26, 2013]
|
||||||
|
Test for 'arm*' not just 'arm' in the host_cpu configure variable.
|
||||||
|
Rebuilt the configure scripts.
|
||||||
|
|
||||||
|
Version 1.6.3beta03 [April 30, 2013]
|
||||||
|
Expanded manual paragraph about writing private chunks, particularly
|
||||||
|
the need to call png_set_keep_unknown_chunks() when writing them.
|
||||||
|
Avoid dereferencing NULL pointer possibly returned from
|
||||||
|
png_create_write_struct() (Andrew Church).
|
||||||
|
|
||||||
|
Version 1.6.3beta05 [May 9, 2013]
|
||||||
|
Calculate our own zlib windowBits when decoding rather than trusting the
|
||||||
|
CMF bytes in the PNG datastream.
|
||||||
|
Added an option to force maximum window size for inflating, which was
|
||||||
|
the behavior of libpng15 and earlier.
|
||||||
|
Added png-fix-itxt and png-fix-too-far-back to the built programs and
|
||||||
|
removed warnings from the source code and timepng that are revealed as
|
||||||
|
a result.
|
||||||
|
Detect wrong libpng versions linked to png-fix-too-far-back, which currently
|
||||||
|
only works with libpng versions that can be made to reliably fail when
|
||||||
|
the deflate data contains an out-of-window reference. This means only
|
||||||
|
1.6 and later.
|
||||||
|
Fixed gnu issues: g++ needs a static_cast, gcc 4.4.7 has a broken warning
|
||||||
|
message which it is easier to work round than ignore.
|
||||||
|
Updated contrib/pngminus/pnm2png.c (Paul Stewart):
|
||||||
|
Check for EOF
|
||||||
|
Ignore "#" delimited comments in input file to pnm2png.c.
|
||||||
|
Fixed whitespace handling
|
||||||
|
Added a call to png_set_packing()
|
||||||
|
Initialize dimension values so if sscanf fails at least we have known
|
||||||
|
invalid values.
|
||||||
|
Attempt to detect configuration issues with png-fix-too-far-back, which
|
||||||
|
requires both the correct libpng and the correct zlib to function
|
||||||
|
correctly.
|
||||||
|
Check ZLIB_VERNUM for mismatches, enclose #error in quotes
|
||||||
|
Added information in the documentation about problems with and fixes for
|
||||||
|
the bad CRC and bad iTXt chunk situations.
|
||||||
|
|
||||||
|
Version 1.6.3beta06 [May 12, 2013]
|
||||||
|
Allow contrib/pngminus/pnm2png.c to compile without WRITE_INVERT and
|
||||||
|
WRITE_PACK supported (writes error message that it can't read P1 or
|
||||||
|
P4 PBM files).
|
||||||
|
Improved png-fix-too-far-back usage message, added --suffix option.
|
||||||
|
Revised contrib/pngminim/*/makefile to generate pnglibconf.h with the
|
||||||
|
right zlib header files.
|
||||||
|
Separated CPPFLAGS and CFLAGS in contrib/pngminim/*/makefile
|
||||||
|
|
||||||
|
Version 1.6.3beta07 [June 8, 2013]
|
||||||
|
Removed a redundant test in png_set_IHDR().
|
||||||
|
Added set(CMAKE_CONFIGURATION_TYPES ...) to CMakeLists.txt (Andrew Hundt)
|
||||||
|
Deleted set(CMAKE_BUILD_TYPE) block from CMakeLists.txt
|
||||||
|
Enclose the prototypes for the simplified write API in
|
||||||
|
#ifdef PNG_STDIO_SUPPORTED/#endif
|
||||||
|
Make ARM NEON support work at compile time (not just configure time).
|
||||||
|
This moves the test on __ARM_NEON__ into pngconf.h to avoid issues when
|
||||||
|
using a compiler that compiles for multiple architectures at one time.
|
||||||
|
Removed PNG_FILTER_OPTIMIZATIONS and PNG_ARM_NEON_SUPPORTED from
|
||||||
|
pnglibconf.h, allowing more of the decisions to be made internally
|
||||||
|
(pngpriv.h) during the compile. Without this, symbol prefixing is broken
|
||||||
|
under certain circumstances on ARM platforms. Now only the API parts of
|
||||||
|
the optimizations ('check' vs 'api') are exposed in the public header files
|
||||||
|
except that the new setting PNG_ARM_NEON_OPT documents how libpng makes the
|
||||||
|
decision about whether or not to use the optimizations.
|
||||||
|
Protect symbol prefixing against CC/CPPFLAGS/CFLAGS useage.
|
||||||
|
Previous iOS/Xcode fixes for the ARM NEON optimizations moved the test
|
||||||
|
on __ARM_NEON__ from configure time to compile time. This breaks symbol
|
||||||
|
prefixing because the definition of the special png_init_filter_functions
|
||||||
|
call was hidden at configure time if the relevant compiler arguments are
|
||||||
|
passed in CFLAGS as opposed to CC. This change attempts to avoid all
|
||||||
|
the confusion that would result by declaring the init function even when
|
||||||
|
it is not used, so that it will always get prefixed.
|
||||||
|
|
||||||
|
Version 1.6.3beta08 [June 18, 2013]
|
||||||
|
Revised libpng.3 so that "doclifter" can process it.
|
||||||
|
|
||||||
|
Version 1.6.3beta09 [June 27, 2013]
|
||||||
|
Revised example.c to illustrate use of PNG_DEFAULT_sRGB and PNG_GAMMA_MAC_18
|
||||||
|
as parameters for png_set_gamma(). These have been available since
|
||||||
|
libpng-1.5.4.
|
||||||
|
Renamed contrib/tools/png-fix-too-far-back.c to pngfix.c and revised it
|
||||||
|
to check all compressed chunks known to libpng.
|
||||||
|
|
||||||
|
Version 1.6.3beta10 [July 5, 2013]
|
||||||
|
Updated documentation to show default behavior of benign errors correctly.
|
||||||
|
Only compile ARM code when PNG_READ_SUPPORTED is defined.
|
||||||
|
Fixed undefined behavior in contrib/tools/pngfix.c and added new strip
|
||||||
|
option. pngfix relied on undefined behavior and even a simple change from
|
||||||
|
gcc to g++ caused it to fail. The new strip option 'unsafe' has been
|
||||||
|
implemented and is the default if --max is given. Option names have
|
||||||
|
been clarified, with --strip=transform now stripping the bKGD chunk,
|
||||||
|
which was stripped previously with --strip=unused.
|
||||||
|
Added all documented chunk types to pngpriv.h
|
||||||
|
Unified pngfix.c source with libpng17.
|
||||||
|
|
||||||
|
Version 1.6.3rc01 [July 11, 2013]
|
||||||
|
No changes.
|
||||||
|
|
||||||
|
Version 1.6.3 [July 18, 2013]
|
||||||
|
Revised manual about changes in iTXt chunk handling made in libpng-1.6.0.
|
||||||
|
Added "/* SAFE */" comments in pngrutil.c and pngrtran.c where warnings
|
||||||
|
may be erroneously issued by code-checking applications.
|
||||||
|
|
||||||
Send comments/corrections/commendations to png-mng-implement at lists.sf.net
|
Send comments/corrections/commendations to png-mng-implement at lists.sf.net
|
||||||
(subscription required; visit
|
(subscription required; visit
|
||||||
https://lists.sourceforge.net/lists/listinfo/png-mng-implement
|
https://lists.sourceforge.net/lists/listinfo/png-mng-implement
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# CMakeLists.txt
|
# CMakeLists.txt
|
||||||
|
|
||||||
# Copyright (C) 2007-2011 Glenn Randers-Pehrson
|
# Copyright (C) 2007-2013 Glenn Randers-Pehrson
|
||||||
|
|
||||||
# This code is released under the libpng license.
|
# This code is released under the libpng license.
|
||||||
# For conditions of distribution and use, see the disclaimer
|
# For conditions of distribution and use, see the disclaimer
|
||||||
@@ -9,33 +9,14 @@
|
|||||||
cmake_minimum_required(VERSION 2.4.4)
|
cmake_minimum_required(VERSION 2.4.4)
|
||||||
set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
|
set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS true)
|
||||||
|
|
||||||
if(UNIX AND NOT DEFINED CMAKE_BUILD_TYPE)
|
set(CMAKE_CONFIGURATION_TYPES "Release;Debug;MinSizeRel;RelWithDebInfo")
|
||||||
if(CMAKE_MAJOR_VERSION EQUAL 2 AND CMAKE_MINOR_VERSION EQUAL 4)
|
|
||||||
# workaround CMake 2.4.x bug
|
|
||||||
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING
|
|
||||||
"Choose the type of build, options are:
|
|
||||||
None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used)
|
|
||||||
Debug
|
|
||||||
Release
|
|
||||||
RelWithDebInfo
|
|
||||||
MinSizeRel.")
|
|
||||||
else()
|
|
||||||
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING
|
|
||||||
"Choose the type of build, options are:
|
|
||||||
None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used)
|
|
||||||
Debug
|
|
||||||
Release
|
|
||||||
RelWithDebInfo
|
|
||||||
MinSizeRel.")
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
project(libpng C)
|
project(libpng C)
|
||||||
enable_testing()
|
enable_testing()
|
||||||
|
|
||||||
set(PNGLIB_MAJOR 1)
|
set(PNGLIB_MAJOR 1)
|
||||||
set(PNGLIB_MINOR 6)
|
set(PNGLIB_MINOR 6)
|
||||||
set(PNGLIB_RELEASE 0)
|
set(PNGLIB_RELEASE 3)
|
||||||
set(PNGLIB_NAME libpng${PNGLIB_MAJOR}${PNGLIB_MINOR})
|
set(PNGLIB_NAME libpng${PNGLIB_MAJOR}${PNGLIB_MINOR})
|
||||||
set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_RELEASE})
|
set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_RELEASE})
|
||||||
|
|
||||||
@@ -139,8 +120,11 @@ endif()
|
|||||||
# NOW BUILD OUR TARGET
|
# NOW BUILD OUR TARGET
|
||||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${ZLIB_INCLUDE_DIR})
|
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${ZLIB_INCLUDE_DIR})
|
||||||
|
|
||||||
|
unset(PNG_LIB_TARGETS)
|
||||||
|
|
||||||
if(PNG_SHARED)
|
if(PNG_SHARED)
|
||||||
add_library(${PNG_LIB_NAME} SHARED ${libpng_sources})
|
add_library(${PNG_LIB_NAME} SHARED ${libpng_sources})
|
||||||
|
set(PNG_LIB_TARGETS ${PNG_LIB_NAME})
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
# msvc does not append 'lib' - do it here to have consistent name
|
# msvc does not append 'lib' - do it here to have consistent name
|
||||||
set_target_properties(${PNG_LIB_NAME} PROPERTIES PREFIX "lib")
|
set_target_properties(${PNG_LIB_NAME} PROPERTIES PREFIX "lib")
|
||||||
@@ -153,6 +137,7 @@ if(PNG_STATIC)
|
|||||||
# does not work without changing name
|
# does not work without changing name
|
||||||
set(PNG_LIB_NAME_STATIC ${PNG_LIB_NAME}_static)
|
set(PNG_LIB_NAME_STATIC ${PNG_LIB_NAME}_static)
|
||||||
add_library(${PNG_LIB_NAME_STATIC} STATIC ${libpng_sources})
|
add_library(${PNG_LIB_NAME_STATIC} STATIC ${libpng_sources})
|
||||||
|
list(APPEND PNG_LIB_TARGETS ${PNG_LIB_NAME_STATIC})
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
# msvc does not append 'lib' - do it here to have consistent name
|
# msvc does not append 'lib' - do it here to have consistent name
|
||||||
set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES PREFIX "lib")
|
set_target_properties(${PNG_LIB_NAME_STATIC} PROPERTIES PREFIX "lib")
|
||||||
@@ -160,6 +145,12 @@ if(PNG_STATIC)
|
|||||||
target_link_libraries(${PNG_LIB_NAME_STATIC} ${ZLIB_LIBRARY} ${M_LIBRARY})
|
target_link_libraries(${PNG_LIB_NAME_STATIC} ${ZLIB_LIBRARY} ${M_LIBRARY})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(NOT PNG_LIB_TARGETS)
|
||||||
|
message(SEND_ERROR
|
||||||
|
"No library variant selected to build. "
|
||||||
|
"Please enable at least one of the following options: PNG_STATIC, PNG_SHARED")
|
||||||
|
endif()
|
||||||
|
|
||||||
if(PNG_SHARED AND WIN32)
|
if(PNG_SHARED AND WIN32)
|
||||||
set_target_properties(${PNG_LIB_NAME} PROPERTIES DEFINE_SYMBOL PNG_BUILD_DLL)
|
set_target_properties(${PNG_LIB_NAME} PROPERTIES DEFINE_SYMBOL PNG_BUILD_DLL)
|
||||||
endif()
|
endif()
|
||||||
@@ -222,14 +213,15 @@ macro(CREATE_SYMLINK SRC_FILE DEST_FILE)
|
|||||||
if(WIN32 AND NOT CYGWIN AND NOT MSYS)
|
if(WIN32 AND NOT CYGWIN AND NOT MSYS)
|
||||||
ADD_CUSTOM_COMMAND(
|
ADD_CUSTOM_COMMAND(
|
||||||
OUTPUT ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE} ${CMAKE_CURRENT_BINARY_DIR}/${DEST_FILE}
|
OUTPUT ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE} ${CMAKE_CURRENT_BINARY_DIR}/${DEST_FILE}
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${SRC_FILE} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE}
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${SRC_FILE}" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE}
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${SRC_FILE} ${CMAKE_CURRENT_BINARY_DIR}/${DEST_FILE}
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different "${SRC_FILE}" ${CMAKE_CURRENT_BINARY_DIR}/${DEST_FILE}
|
||||||
DEPENDS ${PNG_LIB_NAME} ${PNG_LIB_NAME_STATIC}
|
DEPENDS ${PNG_LIB_TARGETS}
|
||||||
)
|
)
|
||||||
ADD_CUSTOM_TARGET(${DEST_FILE}_COPY ALL DEPENDS ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE})
|
ADD_CUSTOM_TARGET(${DEST_FILE}_COPY ALL DEPENDS ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE})
|
||||||
else(WIN32 AND NOT CYGWIN AND NOT MSYS)
|
else(WIN32 AND NOT CYGWIN AND NOT MSYS)
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${SRC_FILE} ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
get_filename_component(LINK_TARGET "${SRC_FILE}" NAME)
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink ${SRC_FILE} ${DEST_FILE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "${LINK_TARGET}" ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
||||||
|
execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink "${LINK_TARGET}" ${DEST_FILE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
|
||||||
endif(WIN32 AND NOT CYGWIN AND NOT MSYS)
|
endif(WIN32 AND NOT CYGWIN AND NOT MSYS)
|
||||||
endmacro()
|
endmacro()
|
||||||
|
|
||||||
@@ -260,7 +252,7 @@ endif(NOT WIN32 OR CYGWIN OR MINGW)
|
|||||||
# SET UP LINKS
|
# SET UP LINKS
|
||||||
if(PNG_SHARED)
|
if(PNG_SHARED)
|
||||||
set_target_properties(${PNG_LIB_NAME} PROPERTIES
|
set_target_properties(${PNG_LIB_NAME} PROPERTIES
|
||||||
# VERSION 16.${PNGLIB_RELEASE}.1.6.0
|
# VERSION 16.${PNGLIB_RELEASE}.1.6.3
|
||||||
VERSION 16.${PNGLIB_RELEASE}.0
|
VERSION 16.${PNGLIB_RELEASE}.0
|
||||||
SOVERSION 16
|
SOVERSION 16
|
||||||
CLEAN_DIRECT_OUTPUT 1)
|
CLEAN_DIRECT_OUTPUT 1)
|
||||||
@@ -287,40 +279,33 @@ endif()
|
|||||||
|
|
||||||
# INSTALL
|
# INSTALL
|
||||||
if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
|
if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
|
||||||
if(PNG_SHARED)
|
install(TARGETS ${PNG_LIB_TARGETS}
|
||||||
install(TARGETS ${PNG_LIB_NAME}
|
${PNG_EXPORT_RULE}
|
||||||
${PNG_EXPORT_RULE}
|
RUNTIME DESTINATION bin
|
||||||
RUNTIME DESTINATION bin
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
||||||
|
|
||||||
|
if(PNG_SHARED)
|
||||||
# Create a symlink for libpng.dll.a => libpng16.dll.a on Cygwin
|
# Create a symlink for libpng.dll.a => libpng16.dll.a on Cygwin
|
||||||
if(CYGWIN OR MINGW)
|
if(CYGWIN OR MINGW)
|
||||||
get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME} LOCATION_${CMAKE_BUILD_TYPE})
|
get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME} LOCATION_${CMAKE_BUILD_TYPE})
|
||||||
get_filename_component(BUILD_TARGET_FILE ${BUILD_TARGET_LOCATION} NAME)
|
CREATE_SYMLINK(${BUILD_TARGET_LOCATION} libpng${CMAKE_IMPORT_LIBRARY_SUFFIX})
|
||||||
CREATE_SYMLINK(${BUILD_TARGET_FILE} libpng${CMAKE_IMPORT_LIBRARY_SUFFIX})
|
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_IMPORT_LIBRARY_SUFFIX}
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_IMPORT_LIBRARY_SUFFIX}
|
||||||
DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
endif(CYGWIN OR MINGW)
|
endif(CYGWIN OR MINGW)
|
||||||
|
|
||||||
if(NOT WIN32)
|
if(NOT WIN32)
|
||||||
get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME} LOCATION_${CMAKE_BUILD_TYPE})
|
get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME} LOCATION_${CMAKE_BUILD_TYPE})
|
||||||
get_filename_component(BUILD_TARGET_FILE ${BUILD_TARGET_LOCATION} NAME)
|
CREATE_SYMLINK(${BUILD_TARGET_LOCATION} libpng${CMAKE_SHARED_LIBRARY_SUFFIX})
|
||||||
CREATE_SYMLINK(${BUILD_TARGET_FILE} libpng${CMAKE_SHARED_LIBRARY_SUFFIX})
|
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_SHARED_LIBRARY_SUFFIX}
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_SHARED_LIBRARY_SUFFIX}
|
||||||
DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
endif(NOT WIN32)
|
endif(NOT WIN32)
|
||||||
endif(PNG_SHARED)
|
endif(PNG_SHARED)
|
||||||
|
|
||||||
if(PNG_STATIC)
|
if(PNG_STATIC)
|
||||||
install(TARGETS ${PNG_LIB_NAME_STATIC}
|
|
||||||
${PNG_EXPORT_RULE}
|
|
||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
||||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
|
||||||
if(NOT WIN32 OR CYGWIN OR MINGW)
|
if(NOT WIN32 OR CYGWIN OR MINGW)
|
||||||
get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME_STATIC} LOCATION_${CMAKE_BUILD_TYPE})
|
get_target_property(BUILD_TARGET_LOCATION ${PNG_LIB_NAME_STATIC} LOCATION_${CMAKE_BUILD_TYPE})
|
||||||
get_filename_component(BUILD_TARGET_FILE ${BUILD_TARGET_LOCATION} NAME)
|
CREATE_SYMLINK(${BUILD_TARGET_LOCATION} libpng${CMAKE_STATIC_LIBRARY_SUFFIX})
|
||||||
CREATE_SYMLINK(${BUILD_TARGET_FILE} libpng${CMAKE_STATIC_LIBRARY_SUFFIX})
|
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_STATIC_LIBRARY_SUFFIX}
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libpng${CMAKE_STATIC_LIBRARY_SUFFIX}
|
||||||
DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
endif(NOT WIN32 OR CYGWIN OR MINGW)
|
endif(NOT WIN32 OR CYGWIN OR MINGW)
|
||||||
|
|||||||
27
INSTALL
27
INSTALL
@@ -41,19 +41,33 @@ is not already on your system. zlib can usually be found
|
|||||||
wherever you got libpng. zlib can be placed in another directory,
|
wherever you got libpng. zlib can be placed in another directory,
|
||||||
at the same level as libpng.
|
at the same level as libpng.
|
||||||
|
|
||||||
|
If your system already has a preinstalled zlib 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.
|
||||||
|
|
||||||
|
If you wish to test with a particular zlib that is not first in the
|
||||||
|
standard library search path, put ZLIBLIB, ZLIBINC, CPPFLAGS, LDFLAGS,
|
||||||
|
and LD_LIBRARY_PATH in your environment before running "make test"
|
||||||
|
or "make distcheck":
|
||||||
|
|
||||||
|
ZLIBLIB=/path/to/lib export ZLIBLIB
|
||||||
|
ZLIBINC=/path/to/include export ZLIBINC
|
||||||
|
CPPFLAGS="-I$ZLIBINC" export CPPFLAGS
|
||||||
|
LDFLAGS="-L$ZLIBLIB" export LDFLAGS
|
||||||
|
LD_LIBRARY_PATH="$ZLIBLIB:$LD_LIBRARY_PATH" export LD_LIBRARY_PATH
|
||||||
|
|
||||||
|
If you are using one of the makefile scripts, put ZLIBLIB and ZLIBINC
|
||||||
|
in your environment and type "make ZLIBLIB=$ZLIBLIB ZLIBINC=$ZLIBINC test".
|
||||||
|
|
||||||
If you want to use "cmake" (see www.cmake.org), type
|
If you want to use "cmake" (see www.cmake.org), type
|
||||||
|
|
||||||
cmake . -DCMAKE_INSTALL_PREFIX=/path
|
cmake . -DCMAKE_INSTALL_PREFIX=/path
|
||||||
make
|
make
|
||||||
make install
|
make install
|
||||||
|
|
||||||
If your system already has a preinstalled zlib 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
|
You can rename the directories that you downloaded (they
|
||||||
might be called "libpng-x.y.z" or "libpngNN" and "zlib-1.2.5"
|
might be called "libpng-x.y.z" or "libpngNN" and "zlib-1.2.7"
|
||||||
or "zlib125") so that you have directories called "zlib" and "libpng".
|
or "zlib127") so that you have directories called "zlib" and "libpng".
|
||||||
|
|
||||||
Your directory structure should look like this:
|
Your directory structure should look like this:
|
||||||
|
|
||||||
@@ -71,6 +85,7 @@ Your directory structure should look like this:
|
|||||||
depcomp, install-sh, mkinstalldirs, test-pngtest.sh
|
depcomp, install-sh, mkinstalldirs, test-pngtest.sh
|
||||||
contrib
|
contrib
|
||||||
gregbook
|
gregbook
|
||||||
|
libtests
|
||||||
pngminim
|
pngminim
|
||||||
pngminus
|
pngminus
|
||||||
pngsuite
|
pngsuite
|
||||||
|
|||||||
6
LICENSE
6
LICENSE
@@ -10,8 +10,8 @@ this sentence.
|
|||||||
|
|
||||||
This code is released under the libpng license.
|
This code is released under the libpng license.
|
||||||
|
|
||||||
libpng versions 1.2.6, August 15, 2004, through 1.6.0, February 14, 2013, are
|
libpng versions 1.2.6, August 15, 2004, through 1.6.3, July 18, 2013, are
|
||||||
Copyright (c) 2004, 2006-2012 Glenn Randers-Pehrson, and are
|
Copyright (c) 2004, 2006-2013 Glenn Randers-Pehrson, and are
|
||||||
distributed according to the same disclaimer and license as libpng-1.2.5
|
distributed according to the same disclaimer and license as libpng-1.2.5
|
||||||
with the following individual added to the list of Contributing Authors
|
with the following individual added to the list of Contributing Authors
|
||||||
|
|
||||||
@@ -108,4 +108,4 @@ certification mark of the Open Source Initiative.
|
|||||||
|
|
||||||
Glenn Randers-Pehrson
|
Glenn Randers-Pehrson
|
||||||
glennrp at users.sourceforge.net
|
glennrp at users.sourceforge.net
|
||||||
February 14, 2013
|
July 18, 2013
|
||||||
|
|||||||
75
Makefile.am
75
Makefile.am
@@ -7,24 +7,52 @@ PNGLIB_BASENAME= libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@
|
|||||||
ACLOCAL_AMFLAGS = -I scripts
|
ACLOCAL_AMFLAGS = -I scripts
|
||||||
|
|
||||||
# test programs - run on make check, make distcheck
|
# test programs - run on make check, make distcheck
|
||||||
TESTS_ENVIRONMENT= srcdir=$(srcdir)
|
check_PROGRAMS= pngtest pngunknown pngstest pngvalid
|
||||||
check_PROGRAMS= pngtest
|
|
||||||
|
# Utilities - installed
|
||||||
|
bin_PROGRAMS= pngfix png-fix-itxt
|
||||||
|
|
||||||
pngtest_SOURCES = pngtest.c
|
pngtest_SOURCES = pngtest.c
|
||||||
pngtest_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
|
pngtest_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
|
||||||
TESTS = test-pngtest.sh
|
|
||||||
|
|
||||||
# Only do the following if the contrib directory is present.
|
|
||||||
check_PROGRAMS+= pngvalid pngstest pngunknown
|
|
||||||
pngvalid_SOURCES = contrib/libtests/pngvalid.c
|
pngvalid_SOURCES = contrib/libtests/pngvalid.c
|
||||||
pngstest_SOURCES = contrib/libtests/pngstest.c
|
|
||||||
pngunknown_SOURCES = contrib/libtests/pngunknown.c
|
|
||||||
pngvalid_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
|
pngvalid_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
|
||||||
|
|
||||||
|
pngstest_SOURCES = contrib/libtests/pngstest.c
|
||||||
pngstest_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
|
pngstest_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
|
||||||
|
|
||||||
|
pngunknown_SOURCES = contrib/libtests/pngunknown.c
|
||||||
pngunknown_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
|
pngunknown_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
|
||||||
TESTS += contrib/libtests/test-pngunknown.sh\
|
|
||||||
contrib/libtests/test-pngvalid-simple.sh\
|
pngfix_SOURCES = contrib/tools/pngfix.c
|
||||||
contrib/libtests/test-pngvalid-full.sh\
|
pngfix_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
|
||||||
contrib/libtests/test-pngstest.sh
|
|
||||||
|
png_fix_itxt_SOURCES = contrib/tools/png-fix-itxt.c
|
||||||
|
|
||||||
|
# Generally these are single line shell scripts to run a test with a particular
|
||||||
|
# set of parameters:
|
||||||
|
TESTS =\
|
||||||
|
tests/pngtest\
|
||||||
|
tests/pngvalid-gamma-16-to-8 tests/pngvalid-gamma-alpha-mode\
|
||||||
|
tests/pngvalid-gamma-background tests/pngvalid-gamma-expand16-alpha-mode\
|
||||||
|
tests/pngvalid-gamma-expand16-background\
|
||||||
|
tests/pngvalid-gamma-expand16-transform tests/pngvalid-gamma-sbit\
|
||||||
|
tests/pngvalid-gamma-threshold tests/pngvalid-gamma-transform\
|
||||||
|
tests/pngvalid-progressive-interlace-size\
|
||||||
|
tests/pngvalid-progressive-interlace-standard\
|
||||||
|
tests/pngvalid-progressive-interlace-transform\
|
||||||
|
tests/pngvalid-progressive-standard tests/pngvalid-standard\
|
||||||
|
tests/pngstest-0g01 tests/pngstest-0g02 tests/pngstest-0g04\
|
||||||
|
tests/pngstest-0g08 tests/pngstest-0g16 tests/pngstest-2c08\
|
||||||
|
tests/pngstest-2c16 tests/pngstest-3p01 tests/pngstest-3p02\
|
||||||
|
tests/pngstest-3p04 tests/pngstest-3p08 tests/pngstest-4a08\
|
||||||
|
tests/pngstest-4a16 tests/pngstest-6a08 tests/pngstest-6a16\
|
||||||
|
tests/pngstest-error tests/pngunknown-IDAT\
|
||||||
|
tests/pngunknown-discard tests/pngunknown-if-safe tests/pngunknown-sAPI\
|
||||||
|
tests/pngunknown-sTER tests/pngunknown-save tests/pngunknown-vpAg
|
||||||
|
|
||||||
|
# These tests are expected, and required, to fail:
|
||||||
|
XFAIL_TESTS = tests/pngstest-error
|
||||||
|
|
||||||
# man pages
|
# man pages
|
||||||
dist_man_MANS= libpng.3 libpngpf.3 png.5
|
dist_man_MANS= libpng.3 libpngpf.3 png.5
|
||||||
@@ -77,12 +105,14 @@ nodist_pkginclude_HEADERS= pnglibconf.h
|
|||||||
pkgconfigdir = @pkgconfigdir@
|
pkgconfigdir = @pkgconfigdir@
|
||||||
pkgconfig_DATA = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.pc
|
pkgconfig_DATA = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.pc
|
||||||
|
|
||||||
#extra source distribution files.
|
# Extra source distribution files, '${srcdir}' is used below to stop build files
|
||||||
|
# from those directories being included. This only works if the configure is
|
||||||
|
# not done in the source directory!
|
||||||
EXTRA_DIST= \
|
EXTRA_DIST= \
|
||||||
ANNOUNCE CHANGES INSTALL LICENSE README TODO \
|
ANNOUNCE CHANGES INSTALL LICENSE README TODO \
|
||||||
pngtest.png pngbar.png pngnow.png pngbar.jpg autogen.sh \
|
pngtest.png pngbar.png pngnow.png pngbar.jpg autogen.sh \
|
||||||
${srcdir}/contrib ${srcdir}/projects ${srcdir}/scripts \
|
${srcdir}/contrib ${srcdir}/projects ${srcdir}/scripts \
|
||||||
$(TESTS) \
|
$(TESTS) $(XFAIL_TESTS) tests/pngstest \
|
||||||
CMakeLists.txt example.c libpng-manual.txt
|
CMakeLists.txt example.c libpng-manual.txt
|
||||||
|
|
||||||
SCRIPT_CLEANFILES=scripts/*.out scripts/*.chk scripts/pnglibconf.dfn
|
SCRIPT_CLEANFILES=scripts/*.out scripts/*.chk scripts/pnglibconf.dfn
|
||||||
@@ -158,14 +188,15 @@ endif
|
|||||||
$(srcdir)/scripts/pnglibconf.h.prebuilt:
|
$(srcdir)/scripts/pnglibconf.h.prebuilt:
|
||||||
@echo "Attempting to build $@" >&2
|
@echo "Attempting to build $@" >&2
|
||||||
@echo "This is a machine generated file, but if you want to make" >&2
|
@echo "This is a machine generated file, but if you want to make" >&2
|
||||||
@echo "a new one simply make 'scripts/pnglibconf.out' and copy that" >&2
|
@echo "a new one simply make 'scripts/pnglibconf.out', copy that" >&2
|
||||||
|
@echo "AND set PNG_ZLIB_VERNUM to 0 (you MUST do this)" >&2
|
||||||
@exit 1
|
@exit 1
|
||||||
|
|
||||||
# The following is necessary to ensure that the local pnglibconf.h is used, not
|
# The following is necessary to ensure that the local pnglibconf.h is used, not
|
||||||
# an installed one (this can happen immediately after on a clean system if
|
# an installed one (this can happen immediately after on a clean system if
|
||||||
# 'make test' is the first thing the user does.)
|
# 'make test' is the first thing the user does.)
|
||||||
contrib/libtests/pngstest.o contrib/libtests/pngvalid.o pngtest.o: pnglibconf.h
|
pngstest.o pngvalid.o pngtest.o pngunknown.o timepng.o: pnglibconf.h
|
||||||
contrib/libtests/pngunknown.o: pnglibconf.h
|
pngfix.o png-fix-itxt.o: pnglibconf.h
|
||||||
|
|
||||||
# We must use -DPNG_NO_USE_READ_MACROS here even when the library may actually
|
# We must use -DPNG_NO_USE_READ_MACROS here even when the library may actually
|
||||||
# be built with PNG_USE_READ_MACROS; this prevents the read macros from
|
# be built with PNG_USE_READ_MACROS; this prevents the read macros from
|
||||||
@@ -180,16 +211,14 @@ SYMBOL_CFLAGS += -DPNG_PREFIX='@PNG_PREFIX@'
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
.dfn.out:
|
.dfn.out:
|
||||||
rm -f $@ $*.c $*.tf[123]
|
rm -f $@ $*.c $*.tf[12]
|
||||||
test -d scripts || mkdir scripts
|
test -d scripts || mkdir scripts || test -d scripts
|
||||||
echo '#include "$<"' >$*.c
|
echo '#include "$<"' >$*.c
|
||||||
$(DFNCPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)\
|
$(DFNCPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)\
|
||||||
$(CPPFLAGS) $(SYMBOL_CFLAGS) $*.c > $*.tf1
|
$(CPPFLAGS) $(SYMBOL_CFLAGS) $*.c > $*.tf1
|
||||||
$(SED) -n -e 's|^.*PNG_DEFN_MAGIC *-\(.*\)- *PNG_DEFN_END.*$$|\1|p'\
|
$(AWK) -f "${srcdir}/scripts/dfn.awk" out="$*.tf2" $*.tf1 1>&2
|
||||||
$*.tf1 >$*.tf2
|
rm -f $*.c $*.tf1
|
||||||
$(SED) -e 's| *PNG_JOIN *||g' -e 's| *$$||' $*.tf2 >$*.tf3
|
mv $*.tf2 $@
|
||||||
rm -f $*.c $*.tf[12]
|
|
||||||
mv $*.tf3 $@
|
|
||||||
|
|
||||||
# The .dfn file for pnglibconf.h is machine generated
|
# The .dfn file for pnglibconf.h is machine generated
|
||||||
pnglibconf.dfn: scripts/pnglibconf.dfa scripts/options.awk pngconf.h pngusr.dfa $(DFA_XTRA)
|
pnglibconf.dfn: scripts/pnglibconf.dfa scripts/options.awk pngconf.h pngusr.dfa $(DFA_XTRA)
|
||||||
|
|||||||
36
README
36
README
@@ -1,11 +1,11 @@
|
|||||||
README for libpng version 1.6.0 - February 14, 2013 (shared library 16.0)
|
README for libpng version 1.6.3 - July 18, 2013 (shared library 16.0)
|
||||||
See the note about version numbers near the top of png.h
|
See the note about version numbers near the top of png.h
|
||||||
|
|
||||||
See INSTALL for instructions on how to install libpng.
|
See INSTALL for instructions on how to install libpng.
|
||||||
|
|
||||||
Libpng comes in several distribution formats. Get libpng-*.tar.gz,
|
Libpng comes in several distribution formats. Get libpng-*.tar.gz or
|
||||||
libpng-*.tar.xz or libpng-*.tar.bz2 if you want UNIX-style line endings
|
libpng-*.tar.xz or if you want UNIX-style line endings in the text files,
|
||||||
in the text files, or lpng*.zip if you want DOS-style line endings.
|
or lpng*.7z or lpng*.zip if you want DOS-style line endings.
|
||||||
|
|
||||||
Version 0.89 was the first official release of libpng. Don't let the
|
Version 0.89 was 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
|
fact that it's the first release fool you. The libpng library has been in
|
||||||
@@ -77,17 +77,15 @@ 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 can use zlib as a drop-in replacement for fread() and fwrite() if
|
||||||
you are so inclined.
|
you are so inclined.
|
||||||
|
|
||||||
zlib should be available at the same place that libpng is, or at.
|
zlib should be available at the same place that libpng is, or at zlib.net.
|
||||||
ftp://ftp.info-zip.org/pub/infozip/zlib
|
|
||||||
|
|
||||||
You may also want a copy of the PNG specification. It is available
|
You may also want a copy of the PNG specification. It is available
|
||||||
as an RFC, a W3C Recommendation, and an ISO/IEC Standard. You can find
|
as an RFC, a W3C Recommendation, and an ISO/IEC Standard. You can find
|
||||||
these at http://www.libpng.org/pub/png/documents/
|
these at http://www.libpng.org/pub/png/documents/
|
||||||
|
|
||||||
This code is currently being archived at libpng.sf.net in the
|
This code is currently being archived at libpng.sf.net in the
|
||||||
[DOWNLOAD] area, and on CompuServe, Lib 20 (PNG SUPPORT)
|
[DOWNLOAD] area, and at ftp://ftp.simplesystems.org. If you can't find it
|
||||||
at GO GRAPHSUP. If you can't find it in any of those places,
|
in any of those places, e-mail me, and I'll help you find it.
|
||||||
e-mail me, and I'll help you find it.
|
|
||||||
|
|
||||||
If you have any code changes, requests, problems, etc., please e-mail
|
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,
|
them to me. Also, I'd appreciate any make files or project files,
|
||||||
@@ -123,7 +121,7 @@ and ...". If in doubt, send questions to me. I'll bounce them
|
|||||||
to others, if necessary.
|
to others, if necessary.
|
||||||
|
|
||||||
Please do not send suggestions on how to change PNG. We have
|
Please do not send suggestions on how to change PNG. We have
|
||||||
been discussing PNG for sixteen years now, and it is official and
|
been discussing PNG for eighteen years now, and it is official and
|
||||||
finished. If you have suggestions for libpng, however, I'll
|
finished. If you have suggestions for libpng, however, I'll
|
||||||
gladly listen. Even if your suggestion is not used immediately,
|
gladly listen. Even if your suggestion is not used immediately,
|
||||||
it may be used later.
|
it may be used later.
|
||||||
@@ -167,23 +165,25 @@ Files in this distribution:
|
|||||||
pngwrite.c => High-level write functions
|
pngwrite.c => High-level write functions
|
||||||
pngwtran.c => Write data transformations
|
pngwtran.c => Write data transformations
|
||||||
pngwutil.c => Write utility functions
|
pngwutil.c => Write utility functions
|
||||||
|
arm => Contains optimized code for the ARM platform
|
||||||
contrib => Contributions
|
contrib => Contributions
|
||||||
|
examples => Example programs
|
||||||
gregbook => source code for PNG reading and writing, from
|
gregbook => source code for PNG reading and writing, from
|
||||||
Greg Roelofs' "PNG: The Definitive Guide",
|
Greg Roelofs' "PNG: The Definitive Guide",
|
||||||
O'Reilly, 1999
|
O'Reilly, 1999
|
||||||
msvctest => Builds and runs pngtest using a MSVC workspace
|
libtests => Test programs
|
||||||
pngminus => Simple pnm2png and png2pnm programs
|
pngminim => Minimal decoder, encoder, and progressive decoder
|
||||||
pngsuite => Test images
|
programs demonstrating use of pngusr.dfa
|
||||||
|
pngminus => Simple pnm2png and png2pnm programs
|
||||||
|
pngsuite => Test images
|
||||||
|
tools => Various tools
|
||||||
visupng => Contains a MSVC workspace for VisualPng
|
visupng => Contains a MSVC workspace for VisualPng
|
||||||
projects => Contains project files and workspaces for
|
projects => Contains project files and workspaces for
|
||||||
building a DLL
|
building a DLL
|
||||||
cbuilder5 => Contains a Borland workspace for building
|
owatcom => Contains a WATCOM project for building libpng
|
||||||
libpng and zlib
|
|
||||||
visualc6 => Contains a Microsoft Visual C++ (MSVC)
|
|
||||||
workspace for building libpng and zlib
|
|
||||||
visualc71 => Contains a Microsoft Visual C++ (MSVC)
|
visualc71 => Contains a Microsoft Visual C++ (MSVC)
|
||||||
workspace for building libpng and zlib
|
workspace for building libpng and zlib
|
||||||
xcode => Contains an Apple xcode
|
vstudio => Contains a Microsoft Visual C++ (MSVC)
|
||||||
workspace for building libpng and zlib
|
workspace for building libpng and zlib
|
||||||
scripts => Directory containing scripts for building libpng:
|
scripts => Directory containing scripts for building libpng:
|
||||||
(see scripts/README.txt for the list of scripts)
|
(see scripts/README.txt for the list of scripts)
|
||||||
|
|||||||
193
arm/arm_init.c
193
arm/arm_init.c
@@ -1,54 +1,191 @@
|
|||||||
|
|
||||||
/* arm_init.c - NEON optimised filter functions
|
/* arm_init.c - NEON optimised filter functions
|
||||||
*
|
*
|
||||||
* Copyright (c) 2012 Glenn Randers-Pehrson
|
* Copyright (c) 2013 Glenn Randers-Pehrson
|
||||||
* Written by Mans Rullgard, 2011.
|
* Written by Mans Rullgard, 2011.
|
||||||
* Last changed in libpng 1.5.14 [(PENDING RELEASE)]
|
* Last changed in libpng 1.5.17 [July 18, 2013]
|
||||||
*
|
*
|
||||||
* This code is released under the libpng license.
|
* This code is released under the libpng license.
|
||||||
* For conditions of distribution and use, see the disclaimer
|
* For conditions of distribution and use, see the disclaimer
|
||||||
* and license in png.h
|
* and license in png.h
|
||||||
*/
|
*/
|
||||||
|
/* Below, after checking __linux__, various non-C90 POSIX 1003.1 functions are
|
||||||
|
* called.
|
||||||
|
*/
|
||||||
|
#define _POSIX_SOURCE 1
|
||||||
|
|
||||||
#include "../pngpriv.h"
|
#include "../pngpriv.h"
|
||||||
|
|
||||||
/* __arm__ is defined by GCC, MSVC defines _M_ARM to the ARM version number */
|
#ifdef PNG_READ_SUPPORTED
|
||||||
#if defined __linux__ && defined __arm__
|
#if PNG_ARM_NEON_OPT > 0
|
||||||
#include <stdio.h>
|
#ifdef PNG_ARM_NEON_CHECK_SUPPORTED /* Do run-time checks */
|
||||||
|
#include <signal.h> /* for sig_atomic_t */
|
||||||
|
|
||||||
|
#ifdef __ANDROID__
|
||||||
|
/* Linux provides access to information about CPU capabilites via
|
||||||
|
* /proc/self/auxv, however Android blocks this while still claiming to be
|
||||||
|
* Linux. The Andoid NDK, however, provides appropriate support.
|
||||||
|
*
|
||||||
|
* Documentation: http://www.kandroid.org/ndk/docs/CPU-ARM-NEON.html
|
||||||
|
*/
|
||||||
|
#include <cpu-features.h>
|
||||||
|
|
||||||
|
static int
|
||||||
|
png_have_neon(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
/* This is a whole lot easier than the mess below, however it is probably
|
||||||
|
* implemented as below, therefore it is better to cache the result (these
|
||||||
|
* function calls may be slow!)
|
||||||
|
*/
|
||||||
|
PNG_UNUSED(png_ptr)
|
||||||
|
return android_getCpuFamily() == ANDROID_CPU_FAMILY_ARM &&
|
||||||
|
(android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON) != 0;
|
||||||
|
}
|
||||||
|
#elif defined(__linux__)
|
||||||
|
/* The generic __linux__ implementation requires reading /proc/self/auxv and
|
||||||
|
* looking at each element for one that records NEON capabilities.
|
||||||
|
*/
|
||||||
|
#include <unistd.h> /* for POSIX 1003.1 */
|
||||||
|
#include <errno.h> /* for EINTR */
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
#include <elf.h>
|
#include <elf.h>
|
||||||
#include <asm/hwcap.h>
|
#include <asm/hwcap.h>
|
||||||
|
|
||||||
static int png_have_hwcap(unsigned cap)
|
/* A read call may be interrupted, in which case it returns -1 and sets errno to
|
||||||
|
* EINTR if nothing was done, otherwise (if something was done) a partial read
|
||||||
|
* may result.
|
||||||
|
*/
|
||||||
|
static size_t
|
||||||
|
safe_read(png_structp png_ptr, int fd, void *buffer_in, size_t nbytes)
|
||||||
{
|
{
|
||||||
FILE *f = fopen("/proc/self/auxv", "r");
|
size_t ntotal = 0;
|
||||||
Elf32_auxv_t aux;
|
char *buffer = png_voidcast(char*, buffer_in);
|
||||||
int have_cap = 0;
|
|
||||||
|
|
||||||
if (!f)
|
while (nbytes > 0)
|
||||||
return 0;
|
|
||||||
|
|
||||||
while (fread(&aux, sizeof(aux), 1, f) > 0)
|
|
||||||
{
|
{
|
||||||
if (aux.a_type == AT_HWCAP &&
|
unsigned int nread;
|
||||||
aux.a_un.a_val & cap)
|
int iread;
|
||||||
|
|
||||||
|
/* Passing nread > INT_MAX to read is implementation defined in POSIX
|
||||||
|
* 1003.1, therefore despite the unsigned argument portable code must
|
||||||
|
* limit the value to INT_MAX!
|
||||||
|
*/
|
||||||
|
if (nbytes > INT_MAX)
|
||||||
|
nread = INT_MAX;
|
||||||
|
|
||||||
|
else
|
||||||
|
nread = (unsigned int)/*SAFE*/nbytes;
|
||||||
|
|
||||||
|
iread = read(fd, buffer, nread);
|
||||||
|
|
||||||
|
if (iread == -1)
|
||||||
{
|
{
|
||||||
have_cap = 1;
|
/* This is the devil in the details, a read can terminate early with 0
|
||||||
break;
|
* bytes read because of EINTR, yet it still returns -1 otherwise end
|
||||||
|
* of file cannot be distinguished.
|
||||||
|
*/
|
||||||
|
if (errno != EINTR)
|
||||||
|
{
|
||||||
|
png_warning(png_ptr, "/proc read failed");
|
||||||
|
return 0; /* I.e. a permanent failure */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (iread < 0)
|
||||||
|
{
|
||||||
|
/* Not a valid 'read' result: */
|
||||||
|
png_warning(png_ptr, "OS /proc read bug");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (iread > 0)
|
||||||
|
{
|
||||||
|
/* Continue reading until a permanent failure, or EOF */
|
||||||
|
buffer += iread;
|
||||||
|
nbytes -= (unsigned int)/*SAFE*/iread;
|
||||||
|
ntotal += (unsigned int)/*SAFE*/iread;
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
return ntotal;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ntotal; /* nbytes == 0 */
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
png_have_neon(png_structp png_ptr)
|
||||||
|
{
|
||||||
|
int fd = open("/proc/self/auxv", O_RDONLY);
|
||||||
|
Elf32_auxv_t aux;
|
||||||
|
|
||||||
|
/* Failsafe: failure to open means no NEON */
|
||||||
|
if (fd == -1)
|
||||||
|
{
|
||||||
|
png_warning(png_ptr, "/proc/self/auxv open failed");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (safe_read(png_ptr, fd, &aux, sizeof aux) == sizeof aux)
|
||||||
|
{
|
||||||
|
if (aux.a_type == AT_HWCAP && (aux.a_un.a_val & HWCAP_NEON) != 0)
|
||||||
|
{
|
||||||
|
close(fd);
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose(f);
|
close(fd);
|
||||||
|
return 0;
|
||||||
return have_cap;
|
|
||||||
}
|
}
|
||||||
#endif /* __linux__ && __arm__ */
|
#else
|
||||||
|
/* We don't know how to do a run-time check on this system */
|
||||||
|
# error "no support for run-time ARM NEON checks"
|
||||||
|
#endif /* OS checks */
|
||||||
|
#endif /* PNG_ARM_NEON_CHECK_SUPPORTED */
|
||||||
|
|
||||||
|
#ifndef PNG_ALIGNED_MEMORY_SUPPORTED
|
||||||
|
# error "ALIGNED_MEMORY is required; set: -DPNG_ALIGNED_MEMORY_SUPPORTED"
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
png_init_filter_functions_neon(png_structp pp, unsigned int bpp)
|
png_init_filter_functions_neon(png_structp pp, unsigned int bpp)
|
||||||
{
|
{
|
||||||
#ifdef __arm__
|
#ifdef PNG_ARM_NEON_API_SUPPORTED
|
||||||
#ifdef __linux__
|
switch ((pp->options >> PNG_ARM_NEON) & 3)
|
||||||
if (!png_have_hwcap(HWCAP_NEON))
|
{
|
||||||
return;
|
case PNG_OPTION_UNSET:
|
||||||
|
/* Allow the run-time check to execute if it has been enabled -
|
||||||
|
* thus both API and CHECK can be turned on. If it isn't supported
|
||||||
|
* this case will fall through to the 'default' below, which just
|
||||||
|
* returns.
|
||||||
|
*/
|
||||||
|
#endif /* PNG_ARM_NEON_API_SUPPORTED */
|
||||||
|
#ifdef PNG_ARM_NEON_CHECK_SUPPORTED
|
||||||
|
{
|
||||||
|
static volatile sig_atomic_t no_neon = -1; /* not checked */
|
||||||
|
|
||||||
|
if (no_neon < 0)
|
||||||
|
no_neon = !png_have_neon(pp);
|
||||||
|
|
||||||
|
if (no_neon)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#ifdef PNG_ARM_NEON_API_SUPPORTED
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#endif /* PNG_ARM_NEON_CHECK_SUPPORTED */
|
||||||
|
#ifdef PNG_ARM_NEON_API_SUPPORTED
|
||||||
|
case PNG_OPTION_ON:
|
||||||
|
/* Option turned on */
|
||||||
|
break;
|
||||||
|
|
||||||
|
default: /* OFF or INVALID */
|
||||||
|
return;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* IMPORTANT: any new external functions used here must be declared using
|
/* IMPORTANT: any new external functions used here must be declared using
|
||||||
@@ -79,8 +216,6 @@ png_init_filter_functions_neon(png_structp pp, unsigned int bpp)
|
|||||||
pp->read_filter[PNG_FILTER_VALUE_PAETH-1] =
|
pp->read_filter[PNG_FILTER_VALUE_PAETH-1] =
|
||||||
png_read_filter_row_paeth4_neon;
|
png_read_filter_row_paeth4_neon;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
PNG_UNUSED(pp)
|
|
||||||
PNG_UNUSED(bpp)
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
#endif /* PNG_ARM_NEON_OPT > 0 */
|
||||||
|
#endif /* PNG_READ_SUPPORTED */
|
||||||
|
|||||||
@@ -1,20 +1,28 @@
|
|||||||
|
|
||||||
/* filter_neon.S - NEON optimised filter functions
|
/* filter_neon.S - NEON optimised filter functions
|
||||||
*
|
*
|
||||||
* Copyright (c) 2011 Glenn Randers-Pehrson
|
* Copyright (c) 2013 Glenn Randers-Pehrson
|
||||||
* Written by Mans Rullgard, 2011.
|
* Written by Mans Rullgard, 2011.
|
||||||
* Last changed in libpng 1.5.7 [December 15, 2011]
|
* Last changed in libpng 1.5.17 [July 18, 2013]
|
||||||
*
|
*
|
||||||
* This code is released under the libpng license.
|
* This code is released under the libpng license.
|
||||||
* For conditions of distribution and use, see the disclaimer
|
* For conditions of distribution and use, see the disclaimer
|
||||||
* and license in png.h
|
* and license in png.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef __arm__
|
/* This is required to get the symbol renames, which are #defines, and also
|
||||||
|
* includes the definition (or not) of PNG_ARM_NEON_OPT.
|
||||||
|
*/
|
||||||
|
#define PNG_VERSION_INFO_ONLY
|
||||||
|
#include "../pngpriv.h"
|
||||||
|
|
||||||
#if defined(__linux__) && defined(__ELF__)
|
#if defined(__linux__) && defined(__ELF__)
|
||||||
.section .note.GNU-stack,"",%progbits /* mark stack as non-executable */
|
.section .note.GNU-stack,"",%progbits /* mark stack as non-executable */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef PNG_READ_SUPPORTED
|
||||||
|
#if PNG_ARM_NEON_OPT > 0
|
||||||
|
|
||||||
#ifdef __ELF__
|
#ifdef __ELF__
|
||||||
# define ELF
|
# define ELF
|
||||||
#else
|
#else
|
||||||
@@ -225,4 +233,5 @@ func png_read_filter_row_paeth3_neon, export=1
|
|||||||
|
|
||||||
pop {r4,pc}
|
pop {r4,pc}
|
||||||
endfunc
|
endfunc
|
||||||
#endif
|
#endif /* PNG_ARM_NEON_OPT > 0 */
|
||||||
|
#endif /* PNG_READ_SUPPORTED */
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ done
|
|||||||
#
|
#
|
||||||
# The autotools generated files:
|
# The autotools generated files:
|
||||||
libpng_autotools_files="Makefile.in aclocal.m4 config.guess config.h.in\
|
libpng_autotools_files="Makefile.in aclocal.m4 config.guess config.h.in\
|
||||||
config.sub configure depcomp install-sh ltmain.sh missing"
|
config.sub configure depcomp install-sh ltmain.sh missing test-driver"
|
||||||
#
|
#
|
||||||
# These are separate because 'maintainer-clean' does not remove them.
|
# These are separate because 'maintainer-clean' does not remove them.
|
||||||
libpng_libtool_files="scripts/libtool.m4 scripts/ltoptions.m4\
|
libpng_libtool_files="scripts/libtool.m4 scripts/ltoptions.m4\
|
||||||
|
|||||||
112
configure.ac
112
configure.ac
@@ -18,7 +18,7 @@ AC_PREREQ([2.68])
|
|||||||
|
|
||||||
dnl Version number stuff here:
|
dnl Version number stuff here:
|
||||||
|
|
||||||
AC_INIT([libpng],[1.6.0],[png-mng-implement@lists.sourceforge.net])
|
AC_INIT([libpng],[1.6.3],[png-mng-implement@lists.sourceforge.net])
|
||||||
AC_CONFIG_MACRO_DIR([scripts])
|
AC_CONFIG_MACRO_DIR([scripts])
|
||||||
|
|
||||||
# libpng does not follow GNU file name conventions (hence 'foreign')
|
# libpng does not follow GNU file name conventions (hence 'foreign')
|
||||||
@@ -26,9 +26,11 @@ AC_CONFIG_MACRO_DIR([scripts])
|
|||||||
# silent-rules requires automake 1.11 or later
|
# silent-rules requires automake 1.11 or later
|
||||||
# dist-xz requires automake 1.11 or later
|
# dist-xz requires automake 1.11 or later
|
||||||
# 1.12.2 fixes a security issue in 1.11.2 and 1.12.1
|
# 1.12.2 fixes a security issue in 1.11.2 and 1.12.1
|
||||||
AM_INIT_AUTOMAKE([1.12.2 foreign dist-xz color-tests silent-rules serial-tests])
|
# 1.13 is required for parallel tests
|
||||||
# was:
|
AM_INIT_AUTOMAKE([1.13 foreign dist-xz color-tests silent-rules])
|
||||||
# AM_INIT_AUTOMAKE
|
# The following line causes --disable-maintainer-mode to be the default to
|
||||||
|
# configure, this is necessary because libpng distributions cannot rely on the
|
||||||
|
# time stamps of the autotools generated files being correct
|
||||||
AM_MAINTAINER_MODE
|
AM_MAINTAINER_MODE
|
||||||
|
|
||||||
dnl configure.ac and Makefile.am expect automake 1.11.2 or a compatible later
|
dnl configure.ac and Makefile.am expect automake 1.11.2 or a compatible later
|
||||||
@@ -37,10 +39,10 @@ dnl automake, so the following is not necessary (and is not defined anyway):
|
|||||||
dnl AM_PREREQ([1.11.2])
|
dnl AM_PREREQ([1.11.2])
|
||||||
dnl stop configure from automagically running automake
|
dnl stop configure from automagically running automake
|
||||||
|
|
||||||
PNGLIB_VERSION=1.6.0
|
PNGLIB_VERSION=1.6.3
|
||||||
PNGLIB_MAJOR=1
|
PNGLIB_MAJOR=1
|
||||||
PNGLIB_MINOR=6
|
PNGLIB_MINOR=6
|
||||||
PNGLIB_RELEASE=0
|
PNGLIB_RELEASE=3
|
||||||
|
|
||||||
dnl End of version number stuff
|
dnl End of version number stuff
|
||||||
|
|
||||||
@@ -53,8 +55,7 @@ AC_PROG_CC
|
|||||||
AM_PROG_AS
|
AM_PROG_AS
|
||||||
LT_PATH_LD
|
LT_PATH_LD
|
||||||
AC_PROG_CPP
|
AC_PROG_CPP
|
||||||
AC_CHECK_TOOL(SED, sed, :)
|
AC_PROG_AWK
|
||||||
AC_CHECK_TOOL(AWK, awk, :)
|
|
||||||
AC_PROG_INSTALL
|
AC_PROG_INSTALL
|
||||||
AC_PROG_LN_S
|
AC_PROG_LN_S
|
||||||
AC_PROG_MAKE_SET
|
AC_PROG_MAKE_SET
|
||||||
@@ -64,30 +65,23 @@ dnl compatible later version may be used
|
|||||||
LT_INIT([win32-dll])
|
LT_INIT([win32-dll])
|
||||||
LT_PREREQ([2.4.2])
|
LT_PREREQ([2.4.2])
|
||||||
|
|
||||||
# On Solaris 10 and 12 CPP gets set to cc -E, however this still
|
# Some awks crash when confronted with pnglibconf.dfa, do a test run now
|
||||||
# does some input parsing. We need strict ANSI-C style tokenization,
|
# to make sure this doesn't happen
|
||||||
# check this:
|
AC_MSG_CHECKING([that AWK works])
|
||||||
AC_REQUIRE_CPP
|
if ${AWK} -f ${srcdir}/scripts/options.awk out="/dev/null" version=search\
|
||||||
AC_MSG_CHECKING([for a C preprocessor that does not parse its input])
|
${srcdir}/pngconf.h ${srcdir}/scripts/pnglibconf.dfa\
|
||||||
AC_PREPROC_IFELSE([AC_LANG_SOURCE([[1.1.1 16BIT]])],
|
${srcdir}/pngusr.dfa 1>&2
|
||||||
[DFNCPP="$CPP"],
|
then
|
||||||
[ DFNCPP=""
|
AC_MSG_RESULT([ok])
|
||||||
sav_CPP="$CPP"
|
|
||||||
for CPP in "${CC-cc} -E" "${CC-cc} -E -traditional-cpp" "/lib/cpp" "cpp"
|
|
||||||
do
|
|
||||||
AC_PREPROC_IFELSE([AC_LANG_SOURCE([[1.1.1 16BIT]])],
|
|
||||||
[DFNCPP="$CPP"]
|
|
||||||
[break],,)
|
|
||||||
done
|
|
||||||
CPP="$sav_CPP"
|
|
||||||
])
|
|
||||||
if test -n "$DFNCPP"; then
|
|
||||||
AC_MSG_RESULT([$DFNCPP])
|
|
||||||
AC_SUBST(DFNCPP)
|
|
||||||
else
|
else
|
||||||
AC_MSG_FAILURE([not found], 1)
|
AC_MSG_FAILURE([failed], 1)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# This is a remnant of the old cc -E validation, where it may have been
|
||||||
|
# necessary to use a different preprocessor for .dfn files
|
||||||
|
DFNCPP="$CPP"
|
||||||
|
AC_SUBST(DFNCPP)
|
||||||
|
|
||||||
# -Werror cannot be passed to GCC in CFLAGS because configure will fail (it
|
# -Werror cannot be passed to GCC in CFLAGS because configure will fail (it
|
||||||
# checks the compiler with a program that generates a warning), add the
|
# checks the compiler with a program that generates a warning), add the
|
||||||
# following option to deal with this
|
# following option to deal with this
|
||||||
@@ -115,7 +109,6 @@ AC_ARG_ENABLE(werror,
|
|||||||
|
|
||||||
# Checks for header files.
|
# Checks for header files.
|
||||||
AC_HEADER_STDC
|
AC_HEADER_STDC
|
||||||
AC_CHECK_HEADERS([malloc.h stdlib.h string.h strings.h])
|
|
||||||
|
|
||||||
# Checks for typedefs, structures, and compiler characteristics.
|
# Checks for typedefs, structures, and compiler characteristics.
|
||||||
AC_C_CONST
|
AC_C_CONST
|
||||||
@@ -233,21 +226,54 @@ AC_ARG_WITH(libpng-prefix,
|
|||||||
fi])
|
fi])
|
||||||
AM_CONDITIONAL([DO_PNG_PREFIX], [test "${with_libpng_prefix:-no}" != "no"])
|
AM_CONDITIONAL([DO_PNG_PREFIX], [test "${with_libpng_prefix:-no}" != "no"])
|
||||||
|
|
||||||
# Because GCC by default assembles code with an executable stack, even though it
|
# HOST SPECIFIC OPTIONS
|
||||||
# compiles C code with a non-executable stack, it is necessary to do a fixup
|
# =====================
|
||||||
# here (this may by GCC specific)
|
#
|
||||||
AC_SUBST([AM_CCASFLAGS], [-Wa,--noexecstack])
|
# ARM
|
||||||
|
# ===
|
||||||
|
#
|
||||||
|
# ARM NEON (SIMD) support.
|
||||||
|
|
||||||
AC_ARG_ENABLE([arm-neon],
|
AC_ARG_ENABLE([arm-neon],
|
||||||
AS_HELP_STRING([[[--enable-arm-neon]]], [Enable ARM NEON optimizations]),
|
AS_HELP_STRING([[[--enable-arm-neon]]],
|
||||||
[if test "${enableval}" = "yes"; then
|
[Enable ARM NEON optimizations: =no/off, check, api, yes/on:]
|
||||||
AC_DEFINE([PNG_FILTER_OPTIMIZATIONS],
|
[no/off: disable the optimizations; check: use internal checking code]
|
||||||
[png_init_filter_functions_neon],
|
[(deprecated and poorly supported); api: disable by default, enable by]
|
||||||
[ARM NEON filter initialization function])
|
[a call to png_set_option; yes/on: turn on unconditionally.]
|
||||||
AC_DEFINE([PNG_ALIGNED_MEMORY_SUPPORTED], [1],
|
[If not specified: determined by the compiler.]),
|
||||||
[Align row buffers])
|
[case "$enableval" in
|
||||||
fi])
|
no|off)
|
||||||
AM_CONDITIONAL([PNG_ARM_NEON], [test "${enable_arm_neon:-no}" = yes])
|
# disable the default enabling on __ARM_NEON__ systems:
|
||||||
|
AC_DEFINE([PNG_ARM_NEON_OPT], [0],
|
||||||
|
[Disable ARM Neon optimizations])
|
||||||
|
# Prevent inclusion of the assembler files below:
|
||||||
|
enable_arm_neon=no;;
|
||||||
|
check)
|
||||||
|
AC_DEFINE([PNG_ARM_NEON_CHECK_SUPPORTED], [],
|
||||||
|
[Check for ARM Neon support at run-time]);;
|
||||||
|
api)
|
||||||
|
AC_DEFINE([PNG_ARM_NEON_API_SUPPORTED], [],
|
||||||
|
[Turn on ARM Neon optimizations at run-time]);;
|
||||||
|
yes|on)
|
||||||
|
AC_DEFINE([PNG_ARM_NEON_OPT], [2],
|
||||||
|
[Enable ARM Neon optimizations])
|
||||||
|
AC_MSG_WARN([--enable-arm-neon: please specify 'check' or 'api', if]
|
||||||
|
[you want the optimizations unconditionally pass -mfpu=neon]
|
||||||
|
[to the compiler.]);;
|
||||||
|
*)
|
||||||
|
AC_MSG_ERROR([--enable-arm-neon=${enable_arm_neon}: invalid value])
|
||||||
|
esac])
|
||||||
|
|
||||||
|
# Add ARM specific files to all builds where the host_cpu is arm ('arm*') or
|
||||||
|
# where ARM optimizations were explicitly requested (this allows a fallback if a
|
||||||
|
# future host CPU does not match 'arm*')
|
||||||
|
|
||||||
|
AM_CONDITIONAL([PNG_ARM_NEON],
|
||||||
|
[test "$enable_arm_neon" != 'no' &&
|
||||||
|
case "$host_cpu" in
|
||||||
|
arm*) :;;
|
||||||
|
*) test "$enable_arm_neon" != '';;
|
||||||
|
esac])
|
||||||
|
|
||||||
AC_MSG_NOTICE([[Extra options for compiler: $PNG_COPTS]])
|
AC_MSG_NOTICE([[Extra options for compiler: $PNG_COPTS]])
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ component(png_const_bytep row, png_uint_32 x, unsigned int c,
|
|||||||
* bytes wide. Since the row fitted into memory, however, the following must
|
* bytes wide. Since the row fitted into memory, however, the following must
|
||||||
* work:
|
* work:
|
||||||
*/
|
*/
|
||||||
png_uint_32 bit_offset_hi = bit_depth * ((x >> 6) * channels + c);
|
png_uint_32 bit_offset_hi = bit_depth * ((x >> 6) * channels);
|
||||||
png_uint_32 bit_offset_lo = bit_depth * ((x & 0x3f) * channels + c);
|
png_uint_32 bit_offset_lo = bit_depth * ((x & 0x3f) * channels + c);
|
||||||
|
|
||||||
row = (png_const_bytep)(((PNG_CONST png_byte (*)[8])row) + bit_offset_hi);
|
row = (png_const_bytep)(((PNG_CONST png_byte (*)[8])row) + bit_offset_hi);
|
||||||
|
|||||||
@@ -215,6 +215,10 @@ uch *readpng_get_image(double display_exponent, int *pChannels, ulg *pRowbytes)
|
|||||||
* libpng function */
|
* libpng function */
|
||||||
|
|
||||||
if (setjmp(png_jmpbuf(png_ptr))) {
|
if (setjmp(png_jmpbuf(png_ptr))) {
|
||||||
|
free(image_data);
|
||||||
|
image_data = NULL;
|
||||||
|
free(row_pointers);
|
||||||
|
row_pointers = NULL;
|
||||||
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
|
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 2013 John Cunningham Bowler
|
* Copyright (c) 2013 John Cunningham Bowler
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.0 [February 14, 2013]
|
* Last changed in libpng 1.6.1 [March 28, 2013]
|
||||||
*
|
*
|
||||||
* This code is released under the libpng license.
|
* This code is released under the libpng license.
|
||||||
* For conditions of distribution and use, see the disclaimer
|
* For conditions of distribution and use, see the disclaimer
|
||||||
@@ -83,7 +83,7 @@
|
|||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
#if (defined HAVE_CONFIG_H) && !(defined PNG_NO_CONFIG_H)
|
#if defined(HAVE_CONFIG_H) && !defined(PNG_NO_CONFIG_H)
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -440,7 +440,7 @@ generate_row(png_bytep row, size_t rowbytes, unsigned int y, int color_type,
|
|||||||
/* Palette with fixed color: the image rows are all 0 and the image width
|
/* Palette with fixed color: the image rows are all 0 and the image width
|
||||||
* is 16.
|
* is 16.
|
||||||
*/
|
*/
|
||||||
memset(row, rowbytes, 0);
|
memset(row, 0, rowbytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (colors[0] == channels_of_type(color_type))
|
else if (colors[0] == channels_of_type(color_type))
|
||||||
@@ -624,8 +624,8 @@ write_png(const char **name, FILE *fp, int color_type, int bit_depth,
|
|||||||
|
|
||||||
gamma_table[0] = 0;
|
gamma_table[0] = 0;
|
||||||
|
|
||||||
for (i=0; i<255; ++i)
|
for (i=1; i<255; ++i)
|
||||||
gamma_table[i] = (png_byte)floor(pow(i/255.,conv) * 255 + 127.5);
|
gamma_table[i] = (png_byte)floor(pow(i/255.,conv) * 255 + .5);
|
||||||
|
|
||||||
gamma_table[255] = 255;
|
gamma_table[255] = 255;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 2013 John Cunningham Bowler
|
* Copyright (c) 2013 John Cunningham Bowler
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.0 [February 14, 2013]
|
* Last changed in libpng 1.6.1 [March 28, 2013]
|
||||||
*
|
*
|
||||||
* This code is released under the libpng license.
|
* This code is released under the libpng license.
|
||||||
* For conditions of distribution and use, see the disclaimer
|
* For conditions of distribution and use, see the disclaimer
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#if (defined HAVE_CONFIG_H) && !(defined PNG_NO_CONFIG_H)
|
#if defined(HAVE_CONFIG_H) && !defined(PNG_NO_CONFIG_H)
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -62,6 +62,12 @@
|
|||||||
# define aligncastconst(type, value) ((const void*)(value))
|
# define aligncastconst(type, value) ((const void*)(value))
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
/* During parallel runs of pngstest each temporary file needs a unique name,
|
||||||
|
* this is used to permit uniqueness using a command line argument which can be
|
||||||
|
* up to 22 characters long.
|
||||||
|
*/
|
||||||
|
static char tmpf[23] = "TMP";
|
||||||
|
|
||||||
/* Generate random bytes. This uses a boring repeatable algorithm and it
|
/* Generate random bytes. This uses a boring repeatable algorithm and it
|
||||||
* is implemented here so that it gives the same set of numbers on every
|
* is implemented here so that it gives the same set of numbers on every
|
||||||
* architecture. It's a linear congruential generator (Knuth or Sedgewick
|
* architecture. It's a linear congruential generator (Knuth or Sedgewick
|
||||||
@@ -309,6 +315,7 @@ compare_16bit(int v1, int v2, int error_limit, int multiple_algorithms)
|
|||||||
#define KEEP_GOING 32
|
#define KEEP_GOING 32
|
||||||
#define ACCUMULATE 64
|
#define ACCUMULATE 64
|
||||||
#define FAST_WRITE 128
|
#define FAST_WRITE 128
|
||||||
|
#define sRGB_16BIT 256
|
||||||
|
|
||||||
static void
|
static void
|
||||||
print_opts(png_uint_32 opts)
|
print_opts(png_uint_32 opts)
|
||||||
@@ -329,6 +336,8 @@ print_opts(png_uint_32 opts)
|
|||||||
printf(" --accumulate");
|
printf(" --accumulate");
|
||||||
if (!(opts & FAST_WRITE)) /* --fast is currently the default */
|
if (!(opts & FAST_WRITE)) /* --fast is currently the default */
|
||||||
printf(" --slow");
|
printf(" --slow");
|
||||||
|
if (opts & sRGB_16BIT)
|
||||||
|
printf(" --sRGB-16bit");
|
||||||
}
|
}
|
||||||
|
|
||||||
#define FORMAT_NO_CHANGE 0x80000000 /* additional flag */
|
#define FORMAT_NO_CHANGE 0x80000000 /* additional flag */
|
||||||
@@ -3020,6 +3029,10 @@ read_file(Image *image, png_uint_32 format, png_const_colorp background)
|
|||||||
return logerror(image, "file init: ", image->file_name, "");
|
return logerror(image, "file init: ", image->file_name, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* This must be set after the begin_read call: */
|
||||||
|
if (image->opts & sRGB_16BIT)
|
||||||
|
image->image.flags |= PNG_IMAGE_FLAG_16BIT_sRGB;
|
||||||
|
|
||||||
/* Have an initialized image with all the data we need plus, maybe, an
|
/* Have an initialized image with all the data we need plus, maybe, an
|
||||||
* allocated file (myfile) or buffer (mybuffer) that need to be freed.
|
* allocated file (myfile) or buffer (mybuffer) that need to be freed.
|
||||||
*/
|
*/
|
||||||
@@ -3198,7 +3211,7 @@ write_one_file(Image *output, Image *image, int convert_to_8bit)
|
|||||||
static int counter = 0;
|
static int counter = 0;
|
||||||
char name[32];
|
char name[32];
|
||||||
|
|
||||||
sprintf(name, "TMP%d.png", ++counter);
|
sprintf(name, "%s%d.png", tmpf, ++counter);
|
||||||
|
|
||||||
if (png_image_write_to_file(&image->image, name, convert_to_8bit,
|
if (png_image_write_to_file(&image->image, name, convert_to_8bit,
|
||||||
image->buffer+16, (png_int_32)image->stride, image->colormap))
|
image->buffer+16, (png_int_32)image->stride, image->colormap))
|
||||||
@@ -3482,6 +3495,34 @@ main(int argc, char **argv)
|
|||||||
opts &= ~KEEP_GOING;
|
opts &= ~KEEP_GOING;
|
||||||
else if (strcmp(arg, "--strict") == 0)
|
else if (strcmp(arg, "--strict") == 0)
|
||||||
opts |= STRICT;
|
opts |= STRICT;
|
||||||
|
else if (strcmp(arg, "--sRGB-16bit") == 0)
|
||||||
|
opts |= sRGB_16BIT;
|
||||||
|
else if (strcmp(arg, "--linear-16bit") == 0)
|
||||||
|
opts &= ~sRGB_16BIT;
|
||||||
|
else if (strcmp(arg, "--tmpfile") == 0)
|
||||||
|
{
|
||||||
|
if (c+1 < argc)
|
||||||
|
{
|
||||||
|
if (strlen(argv[++c]) >= sizeof tmpf)
|
||||||
|
{
|
||||||
|
fflush(stdout);
|
||||||
|
fprintf(stderr, "%s: %s is too long for a temp file prefix\n",
|
||||||
|
argv[0], argv[c]);
|
||||||
|
exit(99);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Safe: checked above */
|
||||||
|
strcpy(tmpf, argv[c]);
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fflush(stdout);
|
||||||
|
fprintf(stderr, "%s: %s requires a temporary file prefix\n",
|
||||||
|
argv[0], arg);
|
||||||
|
exit(99);
|
||||||
|
}
|
||||||
|
}
|
||||||
else if (strcmp(arg, "--touch") == 0)
|
else if (strcmp(arg, "--touch") == 0)
|
||||||
{
|
{
|
||||||
if (c+1 < argc)
|
if (c+1 < argc)
|
||||||
@@ -3492,7 +3533,7 @@ main(int argc, char **argv)
|
|||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
fprintf(stderr, "%s: %s requires a file name argument\n",
|
fprintf(stderr, "%s: %s requires a file name argument\n",
|
||||||
argv[0], arg);
|
argv[0], arg);
|
||||||
exit(1);
|
exit(99);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (arg[0] == '+')
|
else if (arg[0] == '+')
|
||||||
@@ -3500,7 +3541,7 @@ main(int argc, char **argv)
|
|||||||
png_uint_32 format = formatof(arg+1);
|
png_uint_32 format = formatof(arg+1);
|
||||||
|
|
||||||
if (format > FORMAT_COUNT)
|
if (format > FORMAT_COUNT)
|
||||||
exit(1);
|
exit(99);
|
||||||
|
|
||||||
format_set(&formats, format);
|
format_set(&formats, format);
|
||||||
}
|
}
|
||||||
@@ -3508,7 +3549,7 @@ main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
fprintf(stderr, "%s: unknown option: %s\n", argv[0], arg);
|
fprintf(stderr, "%s: unknown option: %s\n", argv[0], arg);
|
||||||
exit(1);
|
exit(99);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -3557,7 +3598,7 @@ main(int argc, char **argv)
|
|||||||
buffer[4095] = 0;
|
buffer[4095] = 0;
|
||||||
fprintf(stderr, "%s...%s: file name too long\n", buffer,
|
fprintf(stderr, "%s...%s: file name too long\n", buffer,
|
||||||
buffer+(4096-32));
|
buffer+(4096-32));
|
||||||
exit(1);
|
exit(99);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3676,7 +3717,7 @@ main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
fprintf(stderr, "%s: write failed\n", touch);
|
fprintf(stderr, "%s: write failed\n", touch);
|
||||||
exit(1);
|
exit(99);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3684,7 +3725,7 @@ main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
fprintf(stderr, "%s: open failed\n", touch);
|
fprintf(stderr, "%s: open failed\n", touch);
|
||||||
exit(1);
|
exit(99);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3695,6 +3736,7 @@ main(int argc, char **argv)
|
|||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "pngstest: no read support in libpng, test skipped\n");
|
fprintf(stderr, "pngstest: no read support in libpng, test skipped\n");
|
||||||
return 0;
|
/* So the test is skipped: */
|
||||||
|
return 77;
|
||||||
}
|
}
|
||||||
#endif /* PNG_SIMPLIFIED_READ_SUPPORTED */
|
#endif /* PNG_SIMPLIFIED_READ_SUPPORTED */
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngunknown.c - test the read side unknown chunk handling
|
/* pngunknown.c - test the read side unknown chunk handling
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.0 [(PENDING RELEASE)]
|
* Last changed in libpng 1.6.0 [February 14, 2013]
|
||||||
* Copyright (c) 2013 Glenn Randers-Pehrson
|
* Copyright (c) 2013 Glenn Randers-Pehrson
|
||||||
* Written by John Cunningham Bowler
|
* Written by John Cunningham Bowler
|
||||||
*
|
*
|
||||||
@@ -139,23 +139,128 @@ static struct
|
|||||||
{ "PLTE", PNG_INFO_PLTE, png_PLTE, 0, 0, ABSENT, 0 },
|
{ "PLTE", PNG_INFO_PLTE, png_PLTE, 0, 0, ABSENT, 0 },
|
||||||
|
|
||||||
/* Non-critical chunks that libpng handles */
|
/* Non-critical chunks that libpng handles */
|
||||||
{ "bKGD", PNG_INFO_bKGD, png_bKGD, 0, 1, START, 0 },
|
/* This is a mess but it seems to be the only way to do it - there is no way to
|
||||||
{ "cHRM", PNG_INFO_cHRM, png_cHRM, 0, 1, START, 0 },
|
* check for definition outside a #if.
|
||||||
{ "gAMA", PNG_INFO_gAMA, png_gAMA, 0, 1, START, 0 },
|
*/
|
||||||
{ "hIST", PNG_INFO_hIST, png_hIST, 0, 1, ABSENT, 0 },
|
{ "bKGD", PNG_INFO_bKGD, png_bKGD,
|
||||||
{ "iCCP", PNG_INFO_iCCP, png_iCCP, 0, 1, ABSENT, 0 },
|
# ifdef PNG_READ_bKGD_SUPPORTED
|
||||||
{ "iTXt", PNG_INFO_iTXt, png_iTXt, 0, 1, ABSENT, 0 },
|
0,
|
||||||
{ "oFFs", PNG_INFO_oFFs, png_oFFs, 0, 1, START, 0 },
|
# else
|
||||||
{ "pCAL", PNG_INFO_pCAL, png_pCAL, 0, 1, START, 0 },
|
1,
|
||||||
{ "pHYs", PNG_INFO_pHYs, png_pHYs, 0, 1, START, 0 },
|
# endif
|
||||||
{ "sBIT", PNG_INFO_sBIT, png_sBIT, 0, 1, START, 0 },
|
1, START, 0 },
|
||||||
{ "sCAL", PNG_INFO_sCAL, png_sCAL, 0, 1, START, 0 },
|
{ "cHRM", PNG_INFO_cHRM, png_cHRM,
|
||||||
{ "sPLT", PNG_INFO_sPLT, png_sPLT, 0, 1, ABSENT, 0 },
|
# ifdef PNG_READ_cHRM_SUPPORTED
|
||||||
{ "sRGB", PNG_INFO_sRGB, png_sRGB, 0, 1, START, 0 },
|
0,
|
||||||
{ "tEXt", PNG_INFO_tEXt, png_tEXt, 0, 1, START, 0 },
|
# else
|
||||||
{ "tIME", PNG_INFO_tIME, png_tIME, 0, 1, START, 0 },
|
1,
|
||||||
{ "tRNS", PNG_INFO_tRNS, png_tRNS, 0, 0, ABSENT, 0 },
|
# endif
|
||||||
{ "zTXt", PNG_INFO_zTXt, png_zTXt, 0, 1, END, 0 },
|
1, START, 0 },
|
||||||
|
{ "gAMA", PNG_INFO_gAMA, png_gAMA,
|
||||||
|
# ifdef PNG_READ_gAMA_SUPPORTED
|
||||||
|
0,
|
||||||
|
# else
|
||||||
|
1,
|
||||||
|
# endif
|
||||||
|
1, START, 0 },
|
||||||
|
{ "hIST", PNG_INFO_hIST, png_hIST,
|
||||||
|
# ifdef PNG_READ_hIST_SUPPORTED
|
||||||
|
0,
|
||||||
|
# else
|
||||||
|
1,
|
||||||
|
# endif
|
||||||
|
1, ABSENT, 0 },
|
||||||
|
{ "iCCP", PNG_INFO_iCCP, png_iCCP,
|
||||||
|
# ifdef PNG_READ_iCCP_SUPPORTED
|
||||||
|
0,
|
||||||
|
# else
|
||||||
|
1,
|
||||||
|
# endif
|
||||||
|
1, ABSENT, 0 },
|
||||||
|
{ "iTXt", PNG_INFO_iTXt, png_iTXt,
|
||||||
|
# ifdef PNG_READ_iTXt_SUPPORTED
|
||||||
|
0,
|
||||||
|
# else
|
||||||
|
1,
|
||||||
|
# endif
|
||||||
|
1, ABSENT, 0 },
|
||||||
|
{ "oFFs", PNG_INFO_oFFs, png_oFFs,
|
||||||
|
# ifdef PNG_READ_oFFs_SUPPORTED
|
||||||
|
0,
|
||||||
|
# else
|
||||||
|
1,
|
||||||
|
# endif
|
||||||
|
1, START, 0 },
|
||||||
|
{ "pCAL", PNG_INFO_pCAL, png_pCAL,
|
||||||
|
# ifdef PNG_READ_pCAL_SUPPORTED
|
||||||
|
0,
|
||||||
|
# else
|
||||||
|
1,
|
||||||
|
# endif
|
||||||
|
1, START, 0 },
|
||||||
|
{ "pHYs", PNG_INFO_pHYs, png_pHYs,
|
||||||
|
# ifdef PNG_READ_pHYs_SUPPORTED
|
||||||
|
0,
|
||||||
|
# else
|
||||||
|
1,
|
||||||
|
# endif
|
||||||
|
1, START, 0 },
|
||||||
|
{ "sBIT", PNG_INFO_sBIT, png_sBIT,
|
||||||
|
# ifdef PNG_READ_sBIT_SUPPORTED
|
||||||
|
0,
|
||||||
|
# else
|
||||||
|
1,
|
||||||
|
# endif
|
||||||
|
1, START, 0 },
|
||||||
|
{ "sCAL", PNG_INFO_sCAL, png_sCAL,
|
||||||
|
# ifdef PNG_READ_sCAL_SUPPORTED
|
||||||
|
0,
|
||||||
|
# else
|
||||||
|
1,
|
||||||
|
# endif
|
||||||
|
1, START, 0 },
|
||||||
|
{ "sPLT", PNG_INFO_sPLT, png_sPLT,
|
||||||
|
# ifdef PNG_READ_sPLT_SUPPORTED
|
||||||
|
0,
|
||||||
|
# else
|
||||||
|
1,
|
||||||
|
# endif
|
||||||
|
1, ABSENT, 0 },
|
||||||
|
{ "sRGB", PNG_INFO_sRGB, png_sRGB,
|
||||||
|
# ifdef PNG_READ_sRGB_SUPPORTED
|
||||||
|
0,
|
||||||
|
# else
|
||||||
|
1,
|
||||||
|
# endif
|
||||||
|
1, START, 0 },
|
||||||
|
{ "tEXt", PNG_INFO_tEXt, png_tEXt,
|
||||||
|
# ifdef PNG_READ_tEXt_SUPPORTED
|
||||||
|
0,
|
||||||
|
# else
|
||||||
|
1,
|
||||||
|
# endif
|
||||||
|
1, START, 0 },
|
||||||
|
{ "tIME", PNG_INFO_tIME, png_tIME,
|
||||||
|
# ifdef PNG_READ_tIME_SUPPORTED
|
||||||
|
0,
|
||||||
|
# else
|
||||||
|
1,
|
||||||
|
# endif
|
||||||
|
1, START, 0 },
|
||||||
|
{ "tRNS", PNG_INFO_tRNS, png_tRNS,
|
||||||
|
# ifdef PNG_READ_tRNS_SUPPORTED
|
||||||
|
0,
|
||||||
|
# else
|
||||||
|
1,
|
||||||
|
# endif
|
||||||
|
0, ABSENT, 0 },
|
||||||
|
{ "zTXt", PNG_INFO_zTXt, png_zTXt,
|
||||||
|
# ifdef PNG_READ_zTXt_SUPPORTED
|
||||||
|
0,
|
||||||
|
# else
|
||||||
|
1,
|
||||||
|
# endif
|
||||||
|
1, END, 0 },
|
||||||
|
|
||||||
/* No libpng handling */
|
/* No libpng handling */
|
||||||
{ "sTER", PNG_INFO_sTER, png_sTER, 1, 1, START, 0 },
|
{ "sTER", PNG_INFO_sTER, png_sTER, 1, 1, START, 0 },
|
||||||
@@ -955,6 +1060,7 @@ main(void)
|
|||||||
{
|
{
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
" test ignored because libpng was not built with unknown chunk support\n");
|
" test ignored because libpng was not built with unknown chunk support\n");
|
||||||
return 0;
|
/* So the test is skipped: */
|
||||||
|
return 77;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngvalid.c - validate libpng by constructing then reading png files.
|
/* pngvalid.c - validate libpng by constructing then reading png files.
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.0 [February 14, 2013]
|
* Last changed in libpng 1.6.1 [March 28, 2013]
|
||||||
* Copyright (c) 2013 Glenn Randers-Pehrson
|
* Copyright (c) 2013 Glenn Randers-Pehrson
|
||||||
* Written by John Cunningham Bowler
|
* Written by John Cunningham Bowler
|
||||||
*
|
*
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#if (defined HAVE_CONFIG_H) && !(defined PNG_NO_CONFIG_H)
|
#if defined(HAVE_CONFIG_H) && !defined(PNG_NO_CONFIG_H)
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -1999,8 +1999,8 @@ static double digitize(PNG_CONST png_modifier *pm, double value,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (defined PNG_READ_GAMMA_SUPPORTED) ||\
|
#if defined(PNG_READ_GAMMA_SUPPORTED) ||\
|
||||||
(defined PNG_READ_RGB_TO_GRAY_SUPPORTED)
|
defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)
|
||||||
static double abserr(PNG_CONST png_modifier *pm, int in_depth, int out_depth)
|
static double abserr(PNG_CONST png_modifier *pm, int in_depth, int out_depth)
|
||||||
{
|
{
|
||||||
/* Absolute error permitted in linear values - affected by the bit depth of
|
/* Absolute error permitted in linear values - affected by the bit depth of
|
||||||
@@ -3357,7 +3357,7 @@ make_transform_image(png_store* PNG_CONST ps, png_byte PNG_CONST colour_type,
|
|||||||
PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
|
PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);
|
||||||
|
|
||||||
#ifdef PNG_TEXT_SUPPORTED
|
#ifdef PNG_TEXT_SUPPORTED
|
||||||
# if (defined PNG_READ_zTXt_SUPPORTED) && (defined PNG_WRITE_zTXt_SUPPORTED)
|
# if defined(PNG_READ_zTXt_SUPPORTED) && defined(PNG_WRITE_zTXt_SUPPORTED)
|
||||||
# define TEXT_COMPRESSION PNG_TEXT_COMPRESSION_zTXt
|
# define TEXT_COMPRESSION PNG_TEXT_COMPRESSION_zTXt
|
||||||
# else
|
# else
|
||||||
# define TEXT_COMPRESSION PNG_TEXT_COMPRESSION_NONE
|
# define TEXT_COMPRESSION PNG_TEXT_COMPRESSION_NONE
|
||||||
@@ -4599,9 +4599,13 @@ progressive_row(png_structp ppIn, png_bytep new_row, png_uint_32 y, int pass)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
png_progressive_combine_row(pp, row, new_row);
|
png_progressive_combine_row(pp, row, new_row);
|
||||||
} else if (dp->interlace_type == PNG_INTERLACE_ADAM7 &&
|
#endif /* PNG_READ_INTERLACING_SUPPORTED */
|
||||||
PNG_ROW_IN_INTERLACE_PASS(y, pass) &&
|
}
|
||||||
PNG_PASS_COLS(dp->w, pass) > 0)
|
|
||||||
|
#ifdef PNG_READ_INTERLACING_SUPPORTED
|
||||||
|
else if (dp->interlace_type == PNG_INTERLACE_ADAM7 &&
|
||||||
|
PNG_ROW_IN_INTERLACE_PASS(y, pass) &&
|
||||||
|
PNG_PASS_COLS(dp->w, pass) > 0)
|
||||||
png_error(pp, "missing row in progressive de-interlacing");
|
png_error(pp, "missing row in progressive de-interlacing");
|
||||||
#endif /* PNG_READ_INTERLACING_SUPPORTED */
|
#endif /* PNG_READ_INTERLACING_SUPPORTED */
|
||||||
}
|
}
|
||||||
@@ -8895,8 +8899,8 @@ static void perform_gamma_scale16_tests(png_modifier *pm)
|
|||||||
}
|
}
|
||||||
#endif /* 16 to 8 bit conversion */
|
#endif /* 16 to 8 bit conversion */
|
||||||
|
|
||||||
#if defined PNG_READ_BACKGROUND_SUPPORTED ||\
|
#if defined(PNG_READ_BACKGROUND_SUPPORTED) ||\
|
||||||
defined PNG_READ_ALPHA_MODE_SUPPORTED
|
defined(PNG_READ_ALPHA_MODE_SUPPORTED)
|
||||||
static void gamma_composition_test(png_modifier *pm,
|
static void gamma_composition_test(png_modifier *pm,
|
||||||
PNG_CONST png_byte colour_type, PNG_CONST png_byte bit_depth,
|
PNG_CONST png_byte colour_type, PNG_CONST png_byte bit_depth,
|
||||||
PNG_CONST int palette_number,
|
PNG_CONST int palette_number,
|
||||||
@@ -10135,6 +10139,7 @@ int main(int argc, char **argv)
|
|||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "pngvalid: no write support in libpng, all tests skipped\n");
|
fprintf(stderr, "pngvalid: no write support in libpng, all tests skipped\n");
|
||||||
return 0;
|
/* So the test is skipped: */
|
||||||
|
return 77;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 2013 John Cunningham Bowler
|
* Copyright (c) 2013 John Cunningham Bowler
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.0 [(PENDING RELEASE)]
|
* Last changed in libpng 1.6.1 [March 28, 2013]
|
||||||
*
|
*
|
||||||
* This code is released under the libpng license.
|
* This code is released under the libpng license.
|
||||||
* For conditions of distribution and use, see the disclaimer
|
* For conditions of distribution and use, see the disclaimer
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#if (defined HAVE_CONFIG_H) && !(defined PNG_NO_CONFIG_H)
|
#if defined(HAVE_CONFIG_H) && !defined(PNG_NO_CONFIG_H)
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -1,24 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# Run the simplified API tests
|
|
||||||
err=0
|
|
||||||
|
|
||||||
echo >> pngtest-log.txt
|
|
||||||
echo "============ pngstest.sh ==============" >> pngtest-log.txt
|
|
||||||
|
|
||||||
echo "Running test-pngstest.sh"
|
|
||||||
for image in ${srcdir}/contrib/pngsuite/*.png
|
|
||||||
do
|
|
||||||
for opts in ""
|
|
||||||
do
|
|
||||||
if ./pngstest --strict --log "$@" $opts $image >>pngtest-log.txt 2>&1
|
|
||||||
then
|
|
||||||
echo " PASS: pngstest $opts $image"
|
|
||||||
else
|
|
||||||
echo " FAIL: pngstest $opts $image"
|
|
||||||
err=1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
done
|
|
||||||
|
|
||||||
exit $err
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# Run the unknown API tests
|
|
||||||
err=0
|
|
||||||
image="${srcdir}/pngtest.png"
|
|
||||||
#
|
|
||||||
# stream 4 is used for the output of the shell, pngtest-log.txt gets all the
|
|
||||||
# normal program output.
|
|
||||||
exec 4>&1 1>>pngtest-log.txt 2>&1
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "============ test-pngunknown.sh =============="
|
|
||||||
|
|
||||||
echo "Running test-pngunknown.sh" >&4
|
|
||||||
|
|
||||||
for tests in \
|
|
||||||
"discard default=discard"\
|
|
||||||
"save default=save"\
|
|
||||||
"if-safe default=if-safe"\
|
|
||||||
"vpAg vpAg=if-safe"\
|
|
||||||
"sTER sTER=if-safe"\
|
|
||||||
"IDAT default=discard IDAT=save"\
|
|
||||||
"sAPI bKGD=save cHRM=save gAMA=save all=discard iCCP=save sBIT=save sRGB=save"
|
|
||||||
do
|
|
||||||
set $tests
|
|
||||||
test="$1"
|
|
||||||
shift
|
|
||||||
|
|
||||||
if ./pngunknown "$@" "$image" 4>&-
|
|
||||||
then
|
|
||||||
echo " PASS: test-pngunknown $test" >&4
|
|
||||||
else
|
|
||||||
echo " FAIL: test-pngunknown $test" >&4
|
|
||||||
err=1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
exit $err
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# Run a sequence of gamma tests quietly
|
|
||||||
err=0
|
|
||||||
|
|
||||||
echo >> pngtest-log.txt
|
|
||||||
echo "============ pngvalid-full.sh ==============" >> pngtest-log.txt
|
|
||||||
|
|
||||||
echo "Running test-pngvalid-full.sh"
|
|
||||||
for gamma in threshold transform sbit 16-to-8 background alpha-mode "transform --expand16" "background --expand16" "alpha-mode --expand16"
|
|
||||||
do
|
|
||||||
if ./pngvalid "$@" --gamma-$gamma >> pngtest-log.txt 2>&1
|
|
||||||
then
|
|
||||||
echo " PASS: pngvalid" "$@" "--gamma-$gamma"
|
|
||||||
else
|
|
||||||
echo " FAIL: pngvalid" "$@" "--gamma-$gamma"
|
|
||||||
err=1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
exit $err
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# Run a sequence of tests quietly, without the slow
|
|
||||||
# gamma tests
|
|
||||||
err=0
|
|
||||||
|
|
||||||
echo >> pngtest-log.txt
|
|
||||||
echo "============ pngvalid-simple.sh ==============" >> pngtest-log.txt
|
|
||||||
echo "Running test-pngvalid-simple.sh"
|
|
||||||
# The options to test are:
|
|
||||||
#
|
|
||||||
# standard tests with and without progressive reading and interlace
|
|
||||||
# size images with and without progressive reading
|
|
||||||
# transform tests (standard, non-interlaced only)
|
|
||||||
#
|
|
||||||
for opts in "--standard" "--standard --progressive-read" \
|
|
||||||
"--standard --interlace" "--standard --progressive-read --interlace" \
|
|
||||||
"--size" "--size --progressive-read" \
|
|
||||||
"--transform"
|
|
||||||
do
|
|
||||||
if ./pngvalid "$@" $opts >> pngtest-log.txt 2>&1
|
|
||||||
then
|
|
||||||
echo " PASS: pngvalid" "$@" $opts
|
|
||||||
else
|
|
||||||
echo " FAIL: pngvalid" "$@" $opts
|
|
||||||
err=1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
exit $err
|
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 2013 John Cunningham Bowler
|
* Copyright (c) 2013 John Cunningham Bowler
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.0 [February 14, 2013]
|
* Last changed in libpng 1.6.1 [March 28, 2013]
|
||||||
*
|
*
|
||||||
* This code is released under the libpng license.
|
* This code is released under the libpng license.
|
||||||
* For conditions of distribution and use, see the disclaimer
|
* For conditions of distribution and use, see the disclaimer
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
#if (defined HAVE_CONFIG_H) && !(defined PNG_NO_CONFIG_H)
|
#if defined(HAVE_CONFIG_H) && !defined(PNG_NO_CONFIG_H)
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -252,7 +252,7 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
while (fgets(filename, FILENAME_MAX+1, stdin))
|
while (fgets(filename, FILENAME_MAX+1, stdin))
|
||||||
{
|
{
|
||||||
int len = strlen(filename);
|
size_t len = strlen(filename);
|
||||||
|
|
||||||
if (filename[len-1] == '\n')
|
if (filename[len-1] == '\n')
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -14,7 +14,8 @@ LD=$(CC)
|
|||||||
RM=rm -f
|
RM=rm -f
|
||||||
COPY=cp
|
COPY=cp
|
||||||
|
|
||||||
CFLAGS=-DPNG_USER_CONFIG -DNO_GZCOMPRESS -DZ_SOLO -DNO_GZIP -I. -O1
|
CPPFLAGS=-I. -DPNG_USER_CONFIG -DNO_GZCOMPRESS -DZ_SOLO -DNO_GZIP
|
||||||
|
CFLAGS=-O1
|
||||||
|
|
||||||
C=.c
|
C=.c
|
||||||
O=.o
|
O=.o
|
||||||
@@ -81,7 +82,7 @@ OBJS = $(PROGOBJS) $(PNGOBJS) $(ZOBJS)
|
|||||||
|
|
||||||
# note: dependencies do not work on implicit rule lines
|
# note: dependencies do not work on implicit rule lines
|
||||||
.c$(O):
|
.c$(O):
|
||||||
$(CC) -c $(CFLAGS) $<
|
$(CC) $(CPPFLAGS) -c $(CFLAGS) $<
|
||||||
|
|
||||||
# dependencies
|
# dependencies
|
||||||
|
|
||||||
@@ -95,12 +96,12 @@ pngm2pnm$(E): $(OBJS)
|
|||||||
# The CPP_FLAGS setting causes pngusr.h to be included in
|
# The CPP_FLAGS setting causes pngusr.h to be included in
|
||||||
# both the build of pnglibconf.h and, subsequently, when
|
# both the build of pnglibconf.h and, subsequently, when
|
||||||
# building libpng itself.
|
# building libpng itself.
|
||||||
$(PNGCONF): $(PNGSRC)/scripts/pnglibconf.mak\
|
$(PNGCONF): $(PNGSRC)/scripts/pnglibconf.mak $(ZH)\
|
||||||
$(PNGSRC)/scripts/pnglibconf.dfa \
|
$(PNGSRC)/scripts/pnglibconf.dfa \
|
||||||
$(PNGSRC)/scripts/options.awk pngusr.h pngusr.dfa
|
$(PNGSRC)/scripts/options.awk pngusr.h pngusr.dfa
|
||||||
$(RM) pnglibconf.h pnglibconf.dfn
|
$(RM) pnglibconf.h pnglibconf.dfn
|
||||||
$(MAKE) $(MAKEFLAGS) -f $(PNGSRC)/scripts/pnglibconf.mak\
|
$(MAKE) $(MAKEFLAGS) -f $(PNGSRC)/scripts/pnglibconf.mak\
|
||||||
srcdir=$(PNGSRC) CPPFLAGS="-DPNG_USER_CONFIG"\
|
srcdir=$(PNGSRC) CPPFLAGS="-DPNG_USER_CONFIG -I."\
|
||||||
DFA_XTRA="pngusr.dfa" $@
|
DFA_XTRA="pngusr.dfa" $@
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
|||||||
@@ -14,7 +14,8 @@ LD=$(CC)
|
|||||||
RM=rm -f
|
RM=rm -f
|
||||||
COPY=cp
|
COPY=cp
|
||||||
|
|
||||||
CFLAGS=-DPNG_USER_CONFIG -DZ_SOLO -DNO_GZIP -I. -O1
|
CPPFLAGS=-I. -DPNG_USER_CONFIG -DNO_GZCOMPRESS -DZ_SOLO -DNO_GZIP
|
||||||
|
CFLAGS=-O1
|
||||||
|
|
||||||
C=.c
|
C=.c
|
||||||
O=.o
|
O=.o
|
||||||
@@ -80,7 +81,7 @@ OBJS = $(PROGOBJS) $(PNGOBJS) $(ZOBJS)
|
|||||||
# implicit make rules -------------------------------------------------------
|
# implicit make rules -------------------------------------------------------
|
||||||
|
|
||||||
.c$(O):
|
.c$(O):
|
||||||
$(CC) -c $(CFLAGS) $<
|
$(CC) $(CPPFLAGS) -c $(CFLAGS) $<
|
||||||
|
|
||||||
# dependencies
|
# dependencies
|
||||||
|
|
||||||
@@ -94,12 +95,12 @@ pnm2pngm$(E): $(OBJS)
|
|||||||
# The CPP_FLAGS setting causes pngusr.h to be included in
|
# The CPP_FLAGS setting causes pngusr.h to be included in
|
||||||
# both the build of pnglibconf.h and, subsequently, when
|
# both the build of pnglibconf.h and, subsequently, when
|
||||||
# building libpng itself.
|
# building libpng itself.
|
||||||
$(PNGCONF): $(PNGSRC)/scripts/pnglibconf.mak\
|
$(PNGCONF): $(PNGSRC)/scripts/pnglibconf.mak $(ZH)\
|
||||||
$(PNGSRC)/scripts/pnglibconf.dfa \
|
$(PNGSRC)/scripts/pnglibconf.dfa \
|
||||||
$(PNGSRC)/scripts/options.awk pngusr.h pngusr.dfa
|
$(PNGSRC)/scripts/options.awk pngusr.h pngusr.dfa
|
||||||
$(RM) pnglibconf.h pnglibconf.dfn
|
$(RM) pnglibconf.h pnglibconf.dfn
|
||||||
$(MAKE) $(MAKEFLAGS) -f $(PNGSRC)/scripts/pnglibconf.mak\
|
$(MAKE) $(MAKEFLAGS) -f $(PNGSRC)/scripts/pnglibconf.mak\
|
||||||
srcdir=$(PNGSRC) CPPFLAGS="-DPNG_USER_CONFIG"\
|
srcdir=$(PNGSRC) CPPFLAGS="-DPNG_USER_CONFIG -I."\
|
||||||
DFA_XTRA="pngusr.dfa" $@
|
DFA_XTRA="pngusr.dfa" $@
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
|||||||
@@ -13,6 +13,9 @@ everything = off
|
|||||||
# Switch on the write code - this makes a minimalist encoder
|
# Switch on the write code - this makes a minimalist encoder
|
||||||
|
|
||||||
option WRITE on
|
option WRITE on
|
||||||
|
# These 2 options are required if you need to read PGM (P1 or P4) PGM files.
|
||||||
|
# option WRITE_INVERT on
|
||||||
|
# option WRITE_PACK on
|
||||||
|
|
||||||
# You must choose fixed or floating point arithmetic:
|
# You must choose fixed or floating point arithmetic:
|
||||||
# option FLOATING_POINT on
|
# option FLOATING_POINT on
|
||||||
|
|||||||
@@ -30,7 +30,8 @@ XLIB = -L/usr/X11R6/lib -lX11
|
|||||||
#LIBS = $(XLIB)
|
#LIBS = $(XLIB)
|
||||||
LIBS = $(XLIB) -lm #platforms that need libm
|
LIBS = $(XLIB) -lm #platforms that need libm
|
||||||
|
|
||||||
CFLAGS=-DPNG_USER_CONFIG -DNO_GZCOMPRESS -DZ_SOLO -DNO_GZIP -I. $(XINC) -O1
|
CPPFLAGS=-I. $(XINC) -DPNG_USER_CONFIG -DNO_GZCOMPRESS -DZ_SOLO -DNO_GZIP
|
||||||
|
CFLAGS=-O1
|
||||||
|
|
||||||
C=.c
|
C=.c
|
||||||
O=.o
|
O=.o
|
||||||
@@ -96,7 +97,7 @@ OBJS = $(PROGOBJS) $(PNGOBJS) $(ZOBJS)
|
|||||||
# implicit make rules -------------------------------------------------------
|
# implicit make rules -------------------------------------------------------
|
||||||
|
|
||||||
.c$(O):
|
.c$(O):
|
||||||
$(CC) -c $(CFLAGS) $<
|
$(CC) $(CPPFLAGS) -c $(CFLAGS) $<
|
||||||
|
|
||||||
# dependencies
|
# dependencies
|
||||||
|
|
||||||
@@ -110,12 +111,12 @@ rpng2-x$(E): $(OBJS)
|
|||||||
# The CPP_FLAGS setting causes pngusr.h to be included in
|
# The CPP_FLAGS setting causes pngusr.h to be included in
|
||||||
# both the build of pnglibconf.h and, subsequently, when
|
# both the build of pnglibconf.h and, subsequently, when
|
||||||
# building libpng itself.
|
# building libpng itself.
|
||||||
$(PNGCONF): $(PNGSRC)/scripts/pnglibconf.mak\
|
$(PNGCONF): $(PNGSRC)/scripts/pnglibconf.mak $(ZH)\
|
||||||
$(PNGSRC)/scripts/pnglibconf.dfa \
|
$(PNGSRC)/scripts/pnglibconf.dfa \
|
||||||
$(PNGSRC)/scripts/options.awk pngusr.h pngusr.dfa
|
$(PNGSRC)/scripts/options.awk pngusr.h pngusr.dfa
|
||||||
$(RM) pnglibconf.h pnglibconf.dfn
|
$(RM) pnglibconf.h pnglibconf.dfn
|
||||||
$(MAKE) $(MAKEFLAGS) -f $(PNGSRC)/scripts/pnglibconf.mak\
|
$(MAKE) $(MAKEFLAGS) -f $(PNGSRC)/scripts/pnglibconf.mak\
|
||||||
srcdir=$(PNGSRC) CPPFLAGS="-DPNG_USER_CONFIG"\
|
srcdir=$(PNGSRC) CPPFLAGS="-DPNG_USER_CONFIG -I."\
|
||||||
DFA_XTRA="pngusr.dfa" $@
|
DFA_XTRA="pngusr.dfa" $@
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
|||||||
@@ -198,9 +198,9 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
|
|||||||
char height_token[16];
|
char height_token[16];
|
||||||
char maxval_token[16];
|
char maxval_token[16];
|
||||||
int color_type;
|
int color_type;
|
||||||
unsigned long ul_width, ul_alpha_width;
|
unsigned long ul_width=0, ul_alpha_width=0;
|
||||||
unsigned long ul_height, ul_alpha_height;
|
unsigned long ul_height=0, ul_alpha_height=0;
|
||||||
unsigned long ul_maxval;
|
unsigned long ul_maxval=0;
|
||||||
png_uint_32 width, alpha_width;
|
png_uint_32 width, alpha_width;
|
||||||
png_uint_32 height, alpha_height;
|
png_uint_32 height, alpha_height;
|
||||||
png_uint_32 maxval;
|
png_uint_32 maxval;
|
||||||
@@ -210,6 +210,9 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
|
|||||||
int alpha_present;
|
int alpha_present;
|
||||||
int row, col;
|
int row, col;
|
||||||
BOOL raw, alpha_raw = FALSE;
|
BOOL raw, alpha_raw = FALSE;
|
||||||
|
#if defined(PNG_WRITE_INVERT_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
|
||||||
|
BOOL packed_bitmap = FALSE;
|
||||||
|
#endif
|
||||||
png_uint_32 tmp16;
|
png_uint_32 tmp16;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -222,9 +225,21 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
|
|||||||
}
|
}
|
||||||
else if ((type_token[1] == '1') || (type_token[1] == '4'))
|
else if ((type_token[1] == '1') || (type_token[1] == '4'))
|
||||||
{
|
{
|
||||||
|
#if defined(PNG_WRITE_INVERT_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
|
||||||
raw = (type_token[1] == '4');
|
raw = (type_token[1] == '4');
|
||||||
color_type = PNG_COLOR_TYPE_GRAY;
|
color_type = PNG_COLOR_TYPE_GRAY;
|
||||||
|
get_token(pnm_file, width_token);
|
||||||
|
sscanf (width_token, "%lu", &ul_width);
|
||||||
|
width = (png_uint_32) ul_width;
|
||||||
|
get_token(pnm_file, height_token);
|
||||||
|
sscanf (height_token, "%lu", &ul_height);
|
||||||
|
height = (png_uint_32) ul_height;
|
||||||
bit_depth = 1;
|
bit_depth = 1;
|
||||||
|
packed_bitmap = TRUE;
|
||||||
|
#else
|
||||||
|
fprintf (stderr, "PNM2PNG built without PNG_WRITE_INVERT_SUPPORTED and \n");
|
||||||
|
fprintf (stderr, "PNG_WRITE_PACK_SUPPORTED can't read PBM (P1,P4) files\n");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
else if ((type_token[1] == '2') || (type_token[1] == '5'))
|
else if ((type_token[1] == '2') || (type_token[1] == '5'))
|
||||||
{
|
{
|
||||||
@@ -343,8 +358,14 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
|
|||||||
|
|
||||||
alpha_present = (channels - 1) % 2;
|
alpha_present = (channels - 1) % 2;
|
||||||
|
|
||||||
/* row_bytes is the width x number of channels x (bit-depth / 8) */
|
#if defined(PNG_WRITE_INVERT_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
|
||||||
row_bytes = width * channels * ((bit_depth <= 8) ? 1 : 2);
|
if (packed_bitmap)
|
||||||
|
/* row data is as many bytes as can fit width x channels x bit_depth */
|
||||||
|
row_bytes = (width * channels * bit_depth + 7) / 8;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
/* row_bytes is the width x number of channels x (bit-depth / 8) */
|
||||||
|
row_bytes = width * channels * ((bit_depth <= 8) ? 1 : 2);
|
||||||
|
|
||||||
if ((png_pixels = (png_byte *) malloc (row_bytes * height * sizeof (png_byte))) == NULL)
|
if ((png_pixels = (png_byte *) malloc (row_bytes * height * sizeof (png_byte))) == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@@ -354,40 +375,48 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
|
|||||||
|
|
||||||
for (row = 0; row < height; row++)
|
for (row = 0; row < height; row++)
|
||||||
{
|
{
|
||||||
for (col = 0; col < width; col++)
|
#if defined(PNG_WRITE_INVERT_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
|
||||||
|
if (packed_bitmap) {
|
||||||
|
for (i = 0; i < row_bytes; i++)
|
||||||
|
/* png supports this format natively so no conversion is needed */
|
||||||
|
*pix_ptr++ = get_data (pnm_file, 8);
|
||||||
|
} else
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
for (i = 0; i < (channels - alpha_present); i++)
|
for (col = 0; col < width; col++)
|
||||||
{
|
{
|
||||||
if (raw)
|
for (i = 0; i < (channels - alpha_present); i++)
|
||||||
*pix_ptr++ = get_data (pnm_file, bit_depth);
|
{
|
||||||
else
|
if (raw)
|
||||||
if (bit_depth <= 8)
|
*pix_ptr++ = get_data (pnm_file, bit_depth);
|
||||||
*pix_ptr++ = get_value (pnm_file, bit_depth);
|
|
||||||
else
|
else
|
||||||
{
|
if (bit_depth <= 8)
|
||||||
tmp16 = get_value (pnm_file, bit_depth);
|
*pix_ptr++ = get_value (pnm_file, bit_depth);
|
||||||
*pix_ptr = (png_byte) ((tmp16 >> 8) & 0xFF);
|
else
|
||||||
pix_ptr++;
|
{
|
||||||
*pix_ptr = (png_byte) (tmp16 & 0xFF);
|
tmp16 = get_value (pnm_file, bit_depth);
|
||||||
pix_ptr++;
|
*pix_ptr = (png_byte) ((tmp16 >> 8) & 0xFF);
|
||||||
}
|
pix_ptr++;
|
||||||
}
|
*pix_ptr = (png_byte) (tmp16 & 0xFF);
|
||||||
|
pix_ptr++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (alpha) /* read alpha-channel from pgm file */
|
if (alpha) /* read alpha-channel from pgm file */
|
||||||
{
|
{
|
||||||
if (alpha_raw)
|
if (alpha_raw)
|
||||||
*pix_ptr++ = get_data (alpha_file, alpha_depth);
|
*pix_ptr++ = get_data (alpha_file, alpha_depth);
|
||||||
else
|
|
||||||
if (alpha_depth <= 8)
|
|
||||||
*pix_ptr++ = get_value (alpha_file, bit_depth);
|
|
||||||
else
|
else
|
||||||
{
|
if (alpha_depth <= 8)
|
||||||
tmp16 = get_value (alpha_file, bit_depth);
|
*pix_ptr++ = get_value (alpha_file, bit_depth);
|
||||||
*pix_ptr++ = (png_byte) ((tmp16 >> 8) & 0xFF);
|
else
|
||||||
*pix_ptr++ = (png_byte) (tmp16 & 0xFF);
|
{
|
||||||
}
|
tmp16 = get_value (alpha_file, bit_depth);
|
||||||
} /* if alpha */
|
*pix_ptr++ = (png_byte) ((tmp16 >> 8) & 0xFF);
|
||||||
|
*pix_ptr++ = (png_byte) (tmp16 & 0xFF);
|
||||||
|
}
|
||||||
|
} /* if alpha */
|
||||||
|
} /* if packed_bitmap */
|
||||||
} /* end for col */
|
} /* end for col */
|
||||||
} /* end for row */
|
} /* end for row */
|
||||||
|
|
||||||
@@ -404,6 +433,14 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(PNG_WRITE_INVERT_SUPPORTED) || defined(PNG_WRITE_PACK_SUPPORTED)
|
||||||
|
if (packed_bitmap == TRUE)
|
||||||
|
{
|
||||||
|
png_set_packing (png_ptr);
|
||||||
|
png_set_invert_mono (png_ptr);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* setjmp() must be called in every function that calls a PNG-reading libpng function */
|
/* setjmp() must be called in every function that calls a PNG-reading libpng function */
|
||||||
if (setjmp (png_jmpbuf(png_ptr)))
|
if (setjmp (png_jmpbuf(png_ptr)))
|
||||||
{
|
{
|
||||||
@@ -460,19 +497,32 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
|
|||||||
void get_token(FILE *pnm_file, char *token)
|
void get_token(FILE *pnm_file, char *token)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
|
int ret;
|
||||||
|
|
||||||
/* remove white-space */
|
/* remove white-space and comment lines */
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
token[i] = (unsigned char) fgetc (pnm_file);
|
ret = fgetc(pnm_file);
|
||||||
|
if (ret == '#') {
|
||||||
|
/* the rest of this line is a comment */
|
||||||
|
do
|
||||||
|
{
|
||||||
|
ret = fgetc(pnm_file);
|
||||||
|
}
|
||||||
|
while ((ret != '\n') && (ret != '\r') && (ret != EOF));
|
||||||
|
}
|
||||||
|
if (ret == EOF) break;
|
||||||
|
token[i] = (unsigned char) ret;
|
||||||
}
|
}
|
||||||
while ((token[i] == '\n') || (token[i] == '\r') || (token[i] == ' '));
|
while ((token[i] == '\n') || (token[i] == '\r') || (token[i] == ' '));
|
||||||
|
|
||||||
/* read string */
|
/* read string */
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
ret = fgetc(pnm_file);
|
||||||
|
if (ret == EOF) break;
|
||||||
i++;
|
i++;
|
||||||
token[i] = (unsigned char) fgetc (pnm_file);
|
token[i] = (unsigned char) ret;
|
||||||
}
|
}
|
||||||
while ((token[i] != '\n') && (token[i] != '\r') && (token[i] != ' '));
|
while ((token[i] != '\n') && (token[i] != '\r') && (token[i] != ' '));
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.0 [February 14, 2013]
|
* Last changed in libpng 1.6.0 [February 14, 2013]
|
||||||
*
|
*
|
||||||
* COPYRIGHT: Written by John Cunningham Bowler, 2012.
|
* COPYRIGHT: Written by John Cunningham Bowler, 2013.
|
||||||
* To the extent possible under law, the author has waived all copyright and
|
* To the extent possible under law, the author has waived all copyright and
|
||||||
* related or neighboring rights to this work. This work is published from:
|
* related or neighboring rights to this work. This work is published from:
|
||||||
* United States.
|
* United States.
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
# Last changed in libpng 1.6.0 [February 14, 2013]
|
# Last changed in libpng 1.6.0 [February 14, 2013]
|
||||||
#
|
#
|
||||||
# COPYRIGHT: Written by John Cunningham Bowler, 2012.
|
# COPYRIGHT: Written by John Cunningham Bowler, 2013.
|
||||||
# To the extent possible under law, the author has waived all copyright and
|
# To the extent possible under law, the author has waived all copyright and
|
||||||
# related or neighboring rights to this work. This work is published from:
|
# related or neighboring rights to this work. This work is published from:
|
||||||
# United States.
|
# United States.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.0 [February 14, 2013]
|
* Last changed in libpng 1.6.0 [February 14, 2013]
|
||||||
*
|
*
|
||||||
* COPYRIGHT: Written by John Cunningham Bowler, 2012.
|
* COPYRIGHT: Written by John Cunningham Bowler, 2013.
|
||||||
* To the extent possible under law, the author has waived all copyright and
|
* To the extent possible under law, the author has waived all copyright and
|
||||||
* related or neighboring rights to this work. This work is published from:
|
* related or neighboring rights to this work. This work is published from:
|
||||||
* United States.
|
* United States.
|
||||||
|
|||||||
153
contrib/tools/png-fix-itxt.c
Normal file
153
contrib/tools/png-fix-itxt.c
Normal file
@@ -0,0 +1,153 @@
|
|||||||
|
|
||||||
|
/* png-fix-itxt version 1.0.0
|
||||||
|
*
|
||||||
|
* Copyright 2013 Glenn Randers-Pehrson
|
||||||
|
* Last changed in libpng 1.6.3 [July 18, 2013]
|
||||||
|
*
|
||||||
|
* This code is released under the libpng license.
|
||||||
|
* For conditions of distribution and use, see the disclaimer
|
||||||
|
* and license in png.h
|
||||||
|
*
|
||||||
|
* Usage:
|
||||||
|
*
|
||||||
|
* png-fix-itxt.exe < bad.png > good.png
|
||||||
|
*
|
||||||
|
* Fixes a PNG file written with libpng-1.6.0 or 1.6.1 that has one or more
|
||||||
|
* uncompressed iTXt chunks. Assumes that the actual length is greater
|
||||||
|
* than or equal to the value in the length byte, and that the CRC is
|
||||||
|
* correct for the actual length. This program hunts for the CRC and
|
||||||
|
* adjusts the length byte accordingly. It is not an error to process a
|
||||||
|
* PNG file that has no iTXt chunks or one that has valid iTXt chunks;
|
||||||
|
* such files will simply be copied.
|
||||||
|
*
|
||||||
|
* Requires zlib (for crc32 and Z_NULL); build with
|
||||||
|
*
|
||||||
|
* gcc -O -o png-fix-itxt png-fix-itxt.c -lz
|
||||||
|
*
|
||||||
|
* If you need to handle iTXt chunks larger than 500000 kbytes you must
|
||||||
|
* rebuild png-fix-itxt with a larger values of MAX_LENGTH (or a smaller value
|
||||||
|
* if you know you will never encounter such huge iTXt chunks).
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <zlib.h>
|
||||||
|
|
||||||
|
#define MAX_LENGTH 500000
|
||||||
|
|
||||||
|
#define GETBREAK ((unsigned char)(inchar=getchar())); if (inchar == EOF) break
|
||||||
|
|
||||||
|
int
|
||||||
|
main(void)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
unsigned char buf[MAX_LENGTH];
|
||||||
|
unsigned long crc;
|
||||||
|
unsigned char c;
|
||||||
|
int inchar;
|
||||||
|
|
||||||
|
/* Skip 8-byte signature */
|
||||||
|
for (i=8; i; i--)
|
||||||
|
{
|
||||||
|
c=GETBREAK;
|
||||||
|
putchar(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (inchar != EOF)
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
/* Read the length */
|
||||||
|
unsigned long length; /* must be 32 bits! */
|
||||||
|
c=GETBREAK; buf[0] = c; length = c; length <<= 8;
|
||||||
|
c=GETBREAK; buf[1] = c; length += c; length <<= 8;
|
||||||
|
c=GETBREAK; buf[2] = c; length += c; length <<= 8;
|
||||||
|
c=GETBREAK; buf[3] = c; length += c;
|
||||||
|
|
||||||
|
/* Read the chunkname */
|
||||||
|
c=GETBREAK; buf[4] = c;
|
||||||
|
c=GETBREAK; buf[5] = c;
|
||||||
|
c=GETBREAK; buf[6] = c;
|
||||||
|
c=GETBREAK; buf[7] = c;
|
||||||
|
|
||||||
|
|
||||||
|
/* The iTXt chunk type expressed as integers is (105, 84, 88, 116) */
|
||||||
|
if (buf[4] == 105 && buf[5] == 84 && buf[6] == 88 && buf[7] == 116)
|
||||||
|
{
|
||||||
|
if (length >= MAX_LENGTH-12)
|
||||||
|
break; /* To do: handle this more gracefully */
|
||||||
|
|
||||||
|
/* Initialize the CRC */
|
||||||
|
crc = crc32(0, Z_NULL, 0);
|
||||||
|
|
||||||
|
/* Copy the data bytes */
|
||||||
|
for (i=8; i < length + 12; i++)
|
||||||
|
{
|
||||||
|
c=GETBREAK; buf[i] = c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Calculate the CRC */
|
||||||
|
crc = crc32(crc, buf+4, (uInt)length+4);
|
||||||
|
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
/* Check the CRC */
|
||||||
|
if (((crc >> 24) & 0xff) == buf[length+8] &&
|
||||||
|
((crc >> 16) & 0xff) == buf[length+9] &&
|
||||||
|
((crc >> 8) & 0xff) == buf[length+10] &&
|
||||||
|
((crc ) & 0xff) == buf[length+11])
|
||||||
|
break;
|
||||||
|
|
||||||
|
length++;
|
||||||
|
|
||||||
|
if (length >= MAX_LENGTH-12)
|
||||||
|
break;
|
||||||
|
|
||||||
|
c=GETBREAK;
|
||||||
|
buf[length+11]=c;
|
||||||
|
|
||||||
|
/* Update the CRC */
|
||||||
|
crc = crc32(crc, buf+7+length, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Update length bytes */
|
||||||
|
buf[0] = (unsigned char)((length << 24) & 0xff);
|
||||||
|
buf[1] = (unsigned char)((length << 16) & 0xff);
|
||||||
|
buf[2] = (unsigned char)((length << 8) & 0xff);
|
||||||
|
buf[3] = (unsigned char)((length ) & 0xff);
|
||||||
|
|
||||||
|
/* Write the fixed iTXt chunk (length, name, data, crc) */
|
||||||
|
for (i=0; i<length+12; i++)
|
||||||
|
putchar(buf[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Copy bytes that were already read (length and chunk name) */
|
||||||
|
for (i=0; i<8; i++)
|
||||||
|
putchar(buf[i]);
|
||||||
|
|
||||||
|
/* Copy data bytes and CRC */
|
||||||
|
for (i=8; i< length+12; i++)
|
||||||
|
{
|
||||||
|
c=GETBREAK;
|
||||||
|
putchar(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (inchar == EOF)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The IEND chunk type expressed as integers is (73, 69, 78, 68) */
|
||||||
|
if (buf[4] == 73 && buf[5] == 69 && buf[6] == 78 && buf[7] == 68)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (inchar == EOF)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (buf[4] == 73 && buf[5] == 69 && buf[6] == 78 && buf[7] == 68)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
4010
contrib/tools/pngfix.c
Normal file
4010
contrib/tools/pngfix.c
Normal file
File diff suppressed because it is too large
Load Diff
@@ -3,7 +3,7 @@
|
|||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.0 [February 14, 2013]
|
* Last changed in libpng 1.6.0 [February 14, 2013]
|
||||||
*
|
*
|
||||||
* COPYRIGHT: Written by John Cunningham Bowler, 2012.
|
* COPYRIGHT: Written by John Cunningham Bowler, 2013.
|
||||||
* To the extent possible under law, the author has waived all copyright and
|
* To the extent possible under law, the author has waived all copyright and
|
||||||
* related or neighboring rights to this work. This work is published from:
|
* related or neighboring rights to this work. This work is published from:
|
||||||
* United States.
|
* United States.
|
||||||
|
|||||||
10
example.c
10
example.c
@@ -2,7 +2,7 @@
|
|||||||
#if 0 /* in case someone actually tries to compile this */
|
#if 0 /* in case someone actually tries to compile this */
|
||||||
|
|
||||||
/* example.c - an example of using libpng
|
/* example.c - an example of using libpng
|
||||||
* Last changed in libpng 1.6.0 [February 14, 2013]
|
* Last changed in libpng 1.6.3 [July 18, 2013]
|
||||||
* Maintained 1998-2013 Glenn Randers-Pehrson
|
* Maintained 1998-2013 Glenn Randers-Pehrson
|
||||||
* Maintained 1996, 1997 Andreas Dilger)
|
* Maintained 1996, 1997 Andreas Dilger)
|
||||||
* Written 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* Written 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
@@ -441,9 +441,9 @@ void read_png(FILE *fp, unsigned int sig_read) /* File is already open */
|
|||||||
/* If we don't have another value */
|
/* If we don't have another value */
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
screen_gamma = 2.2; /* A good guess for a PC monitor in a dimly
|
screen_gamma = PNG_DEFAULT_sRGB; /* A good guess for a PC monitor
|
||||||
lit room */
|
in a dimly lit room */
|
||||||
screen_gamma = 1.7 or 1.0; /* A good guess for Mac systems */
|
screen_gamma = PNG_GAMMA_MAC_18 or 1.0; /* Good guesses for Mac systems */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Tell libpng to handle the gamma conversion for you. The final call
|
/* Tell libpng to handle the gamma conversion for you. The final call
|
||||||
@@ -455,7 +455,7 @@ void read_png(FILE *fp, unsigned int sig_read) /* File is already open */
|
|||||||
int intent;
|
int intent;
|
||||||
|
|
||||||
if (png_get_sRGB(png_ptr, info_ptr, &intent))
|
if (png_get_sRGB(png_ptr, info_ptr, &intent))
|
||||||
png_set_gamma(png_ptr, screen_gamma, 0.45455);
|
png_set_gamma(png_ptr, screen_gamma, PNG_DEFAULT_sRGB);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
double image_gamma;
|
double image_gamma;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
libpng-manual.txt - A description on how to use and modify libpng
|
libpng-manual.txt - A description on how to use and modify libpng
|
||||||
|
|
||||||
libpng version 1.6.0 - February 14, 2013
|
libpng version 1.6.3 - July 18, 2013
|
||||||
Updated and distributed by Glenn Randers-Pehrson
|
Updated and distributed by Glenn Randers-Pehrson
|
||||||
<glennrp at users.sourceforge.net>
|
<glennrp at users.sourceforge.net>
|
||||||
Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
||||||
@@ -11,7 +11,7 @@ libpng-manual.txt - A description on how to use and modify libpng
|
|||||||
|
|
||||||
Based on:
|
Based on:
|
||||||
|
|
||||||
libpng versions 0.97, January 1998, through 1.6.0 - February 14, 2013
|
libpng versions 0.97, January 1998, through 1.6.3 - July 18, 2013
|
||||||
Updated and distributed by Glenn Randers-Pehrson
|
Updated and distributed by Glenn Randers-Pehrson
|
||||||
Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
||||||
|
|
||||||
@@ -50,9 +50,7 @@ libpng-manual.txt - A description on how to use and modify libpng
|
|||||||
I. Introduction
|
I. Introduction
|
||||||
|
|
||||||
This file describes how to use and modify the PNG reference library
|
This file describes how to use and modify the PNG reference library
|
||||||
(known as libpng) for your own use. There are five sections to this
|
(known as libpng) for your own use. In addition to this
|
||||||
file: introduction, structures, reading, writing, and modification and
|
|
||||||
configuration notes for various special platforms. In addition to this
|
|
||||||
file, example.c is a good starting point for using the library, as
|
file, example.c is a good starting point for using the library, as
|
||||||
it is heavily commented and should include everything most people
|
it is heavily commented and should include everything most people
|
||||||
will need. We assume that libpng is already installed; see the
|
will need. We assume that libpng is already installed; see the
|
||||||
@@ -527,9 +525,14 @@ you can retrieve with
|
|||||||
png_get_user_chunk_ptr(png_ptr);
|
png_get_user_chunk_ptr(png_ptr);
|
||||||
|
|
||||||
If you call the png_set_read_user_chunk_fn() function, then all unknown
|
If you call the png_set_read_user_chunk_fn() function, then all unknown
|
||||||
chunks will be saved when read, in case your callback function will need
|
chunks which the callback does not handle will be saved when read. You can
|
||||||
one or more of them. This behavior can be changed with the
|
cause them to be discarded by returning '1' ("handled") instead of '0'. This
|
||||||
png_set_keep_unknown_chunks() function, described below.
|
behavior will change in libpng 1.7 and the default handling set by the
|
||||||
|
png_set_keep_unknown_chunks() function, described below, will be used when the
|
||||||
|
callback returns 0. If you want the existing behavior you should set the global
|
||||||
|
default to PNG_HANDLE_CHUNK_IF_SAFE now; this is compatible with all current
|
||||||
|
versions of libpng and with 1.7. Libpng 1.6 issues a warning if you keep the
|
||||||
|
default, or PNG_HANDLE_CHUNK_NEVER, and the callback returns 0.
|
||||||
|
|
||||||
At this point, you can set up a callback function that will be
|
At this point, you can set up a callback function that will be
|
||||||
called after each row has been read, which you can use to control
|
called after each row has been read, which you can use to control
|
||||||
@@ -628,15 +631,17 @@ callback function:
|
|||||||
...
|
...
|
||||||
|
|
||||||
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
|
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
|
||||||
/* ignore all unknown chunks: */
|
/* ignore all unknown chunks
|
||||||
png_set_keep_unknown_chunks(read_ptr, 1, NULL, 0);
|
* (use global setting "2" for libpng16 and earlier):
|
||||||
|
*/
|
||||||
|
png_set_keep_unknown_chunks(read_ptr, 2, NULL, 0);
|
||||||
|
|
||||||
/* except for vpAg: */
|
/* except for vpAg: */
|
||||||
png_set_keep_unknown_chunks(read_ptr, 2, vpAg, 1);
|
png_set_keep_unknown_chunks(read_ptr, 2, vpAg, 1);
|
||||||
|
|
||||||
/* also ignore unused known chunks: */
|
/* also ignore unused known chunks: */
|
||||||
png_set_keep_unknown_chunks(read_ptr, 1, unused_chunks,
|
png_set_keep_unknown_chunks(read_ptr, 1, unused_chunks,
|
||||||
(int)sizeof(unused_chunks)/5);
|
(int)(sizeof unused_chunks)/5);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
User limits
|
User limits
|
||||||
@@ -988,7 +993,7 @@ where row_pointers is an array of pointers to the pixel data for each row:
|
|||||||
If you know your image size and pixel size ahead of time, you can allocate
|
If you know your image size and pixel size ahead of time, you can allocate
|
||||||
row_pointers prior to calling png_read_png() with
|
row_pointers prior to calling png_read_png() with
|
||||||
|
|
||||||
if (height > PNG_UINT_32_MAX/png_sizeof(png_byte))
|
if (height > PNG_UINT_32_MAX/(sizeof (png_byte)))
|
||||||
png_error (png_ptr,
|
png_error (png_ptr,
|
||||||
"Image is too tall to process in memory");
|
"Image is too tall to process in memory");
|
||||||
|
|
||||||
@@ -997,7 +1002,7 @@ row_pointers prior to calling png_read_png() with
|
|||||||
"Image is too wide to process in memory");
|
"Image is too wide to process in memory");
|
||||||
|
|
||||||
row_pointers = png_malloc(png_ptr,
|
row_pointers = png_malloc(png_ptr,
|
||||||
height*png_sizeof(png_bytep));
|
height*(sizeof (png_bytep)));
|
||||||
|
|
||||||
for (int i=0; i<height, i++)
|
for (int i=0; i<height, i++)
|
||||||
row_pointers[i]=NULL; /* security precaution */
|
row_pointers[i]=NULL; /* security precaution */
|
||||||
@@ -2284,7 +2289,7 @@ For a more compact example of reading a PNG image, see the file example.c.
|
|||||||
|
|
||||||
Reading PNG files progressively
|
Reading PNG files progressively
|
||||||
|
|
||||||
The progressive reader is slightly different then the non-progressive
|
The progressive reader is slightly different from the non-progressive
|
||||||
reader. Instead of calling png_read_info(), png_read_rows(), and
|
reader. Instead of calling png_read_info(), png_read_rows(), and
|
||||||
png_read_end(), you make one call to png_process_data(), which calls
|
png_read_end(), you make one call to png_process_data(), which calls
|
||||||
callbacks when it has the info, a row, or the end of the image. You
|
callbacks when it has the info, a row, or the end of the image. You
|
||||||
@@ -3086,13 +3091,47 @@ a writeable buffer of at least 29 bytes.
|
|||||||
|
|
||||||
Writing unknown chunks
|
Writing unknown chunks
|
||||||
|
|
||||||
You can use the png_set_unknown_chunks function to queue up chunks
|
You can use the png_set_unknown_chunks function to queue up private chunks
|
||||||
for writing. You give it a chunk name, raw data, and a size; that's
|
for writing. You give it a chunk name, location, raw data, and a size. You
|
||||||
all there is to it. The chunks will be written by the next following
|
also must use png_set_keep_unknown_chunks() to ensure that libpng will
|
||||||
png_write_info_before_PLTE, png_write_info, or png_write_end function.
|
handle them. That's all there is to it. The chunks will be written by the
|
||||||
Any chunks previously read into the info structure's unknown-chunk
|
next following png_write_info_before_PLTE, png_write_info, or png_write_end
|
||||||
list will also be written out in a sequence that satisfies the PNG
|
function, depending upon the specified location. Any chunks previously
|
||||||
specification's ordering rules.
|
read into the info structure's unknown-chunk list will also be written out
|
||||||
|
in a sequence that satisfies the PNG specification's ordering rules.
|
||||||
|
|
||||||
|
Here is an example of writing two private chunks, prVt and miNE:
|
||||||
|
|
||||||
|
#ifdef PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
|
||||||
|
/* Set unknown chunk data */
|
||||||
|
png_unknown_chunk unk_chunk[2];
|
||||||
|
strcpy((char *) unk_chunk[0].name, "prVt";
|
||||||
|
unk_chunk[0].data = (unsigned char *) "PRIVATE DATA";
|
||||||
|
unk_chunk[0].size = strlen(unk_chunk[0].data)+1;
|
||||||
|
unk_chunk[0].location = PNG_HAVE_IHDR;
|
||||||
|
strcpy((char *) unk_chunk[1].name, "miNE";
|
||||||
|
unk_chunk[1].data = (unsigned char *) "MY CHUNK DATA";
|
||||||
|
unk_chunk[1].size = strlen(unk_chunk[0].data)+1;
|
||||||
|
unk_chunk[1].location = PNG_AFTER_IDAT;
|
||||||
|
png_set_unknown_chunks(write_ptr, write_info_ptr,
|
||||||
|
unk_chunk, 2);
|
||||||
|
/* Needed because miNE is not safe-to-copy */
|
||||||
|
png_set_keep_unknown_chunks(png, PNG_HANDLE_CHUNK_ALWAYS,
|
||||||
|
(png_bytep) "miNE", 1);
|
||||||
|
# if PNG_LIBPNG_VER < 10600
|
||||||
|
/* Deal with unknown chunk location bug in 1.5.x and earlier */
|
||||||
|
png_set_unknown_chunk_location(png, info, 0, PNG_HAVE_IHDR);
|
||||||
|
png_set_unknown_chunk_location(png, info, 1, PNG_AFTER_IDAT);
|
||||||
|
# endif
|
||||||
|
# if PNG_LIBPNG_VER < 10500
|
||||||
|
/* PNG_AFTER_IDAT writes two copies of the chunk prior to libpng-1.5.0,
|
||||||
|
* one before IDAT and another after IDAT, so don't use it; only use
|
||||||
|
* PNG_HAVE_IHDR location. This call resets the location previously
|
||||||
|
* set by assignment and png_set_unknown_chunk_location() for chunk 1.
|
||||||
|
*/
|
||||||
|
png_set_unknown_chunk_location(png, info, 1, PNG_HAVE_IHDR);
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
The high-level write interface
|
The high-level write interface
|
||||||
|
|
||||||
@@ -3987,9 +4026,12 @@ as warnings.
|
|||||||
|
|
||||||
png_set_benign_errors (png_ptr, int allowed);
|
png_set_benign_errors (png_ptr, int allowed);
|
||||||
|
|
||||||
allowed: 0: (default) treat png_benign_error() an error.
|
allowed: 0: treat png_benign_error() as an error.
|
||||||
1: treat png_benign_error() as a warning.
|
1: treat png_benign_error() as a warning.
|
||||||
|
|
||||||
|
As of libpng-1.6.0, the default condition is to treat benign errors as
|
||||||
|
warnings while reading and as errors while writing.
|
||||||
|
|
||||||
Custom chunks
|
Custom chunks
|
||||||
|
|
||||||
If you need to read or write custom chunks, you may need to get deeper
|
If you need to read or write custom chunks, you may need to get deeper
|
||||||
@@ -4260,7 +4302,7 @@ the message, "message" is the formatted string to be printed,
|
|||||||
and p1 and p2 are parameters that are to be embedded in the string
|
and p1 and p2 are parameters that are to be embedded in the string
|
||||||
according to printf-style formatting directives. For example,
|
according to printf-style formatting directives. For example,
|
||||||
|
|
||||||
png_debug1(2, "foo=%d\n", foo);
|
png_debug1(2, "foo=%d", foo);
|
||||||
|
|
||||||
is expanded to
|
is expanded to
|
||||||
|
|
||||||
@@ -4940,9 +4982,9 @@ symbols, using the PNG_PREFIX macro.
|
|||||||
|
|
||||||
We no longer include string.h in png.h. The include statement has been moved
|
We no longer include string.h in png.h. The include statement has been moved
|
||||||
to pngpriv.h, where it is not accessible by applications. Applications that
|
to pngpriv.h, where it is not accessible by applications. Applications that
|
||||||
need access to information in string.h must add an '#include "string.h"'
|
need access to information in string.h must add an '#include <string.h>'
|
||||||
directive. It does not matter whether this is placed prior to or after
|
directive. It does not matter whether this is placed prior to or after
|
||||||
the '"#include png.h"' directive.
|
the '#include "png.h"' directive.
|
||||||
|
|
||||||
The following API are now DEPRECATED:
|
The following API are now DEPRECATED:
|
||||||
png_info_init_3()
|
png_info_init_3()
|
||||||
@@ -4953,7 +4995,7 @@ The following API are now DEPRECATED:
|
|||||||
png_free_default()
|
png_free_default()
|
||||||
png_reset_zstream()
|
png_reset_zstream()
|
||||||
|
|
||||||
The following has been removed:
|
The following have been removed:
|
||||||
png_get_io_chunk_name(), which has been replaced
|
png_get_io_chunk_name(), which has been replaced
|
||||||
with png_get_io_chunk_type(). The new
|
with png_get_io_chunk_type(). The new
|
||||||
function returns a 32-bit integer instead of
|
function returns a 32-bit integer instead of
|
||||||
@@ -4971,7 +5013,21 @@ where "rp" indicates a "restricted pointer".
|
|||||||
Error detection in some chunks has improved; in particular the iCCP chunk
|
Error detection in some chunks has improved; in particular the iCCP chunk
|
||||||
reader now does pretty complete validation of the basic format. Some bad
|
reader now does pretty complete validation of the basic format. Some bad
|
||||||
profiles that were previously accepted are now rejected, in particular the
|
profiles that were previously accepted are now rejected, in particular the
|
||||||
very old broken Microsoft/HP sRGB profile.
|
very old broken Microsoft/HP sRGB profile. The PNG spec requirement that
|
||||||
|
only grayscale profiles may appear in images with color type 0 or 4 and that
|
||||||
|
even if the image only contains gray pixels, only RGB profiles may appear
|
||||||
|
in images with color type 2, 3, or 6, is now enforced. The sRGB chunk
|
||||||
|
is allowed to appear in images with any color type.
|
||||||
|
|
||||||
|
Prior to libpng-1.6.0 a warning would be issued if the iTXt chunk contained
|
||||||
|
an empty language field or an empty translated keyword. Both of these
|
||||||
|
are allowed by the PNG specification, so these warnings are no longer issued.
|
||||||
|
|
||||||
|
The library now issues an error if the application attempts to set a
|
||||||
|
transform after it calls png_read_update_info().
|
||||||
|
|
||||||
|
The default condition for benign_errors is now to treat benign errors as
|
||||||
|
warnings while reading and as errors while writing.
|
||||||
|
|
||||||
The library now issues a warning if both background processing and RGB to
|
The library now issues a warning if both background processing and RGB to
|
||||||
gray are used when gamma correction happens. As with previous versions of
|
gray are used when gamma correction happens. As with previous versions of
|
||||||
@@ -4989,6 +5045,21 @@ The machine-generated configure files are no longer included in branches
|
|||||||
libpng16 and later of the GIT repository. They continue to be included
|
libpng16 and later of the GIT repository. They continue to be included
|
||||||
in the tarball releases, however.
|
in the tarball releases, however.
|
||||||
|
|
||||||
|
Libpng-1.6.0 and later use the CMF bytes at the beginning of the IDAT stream
|
||||||
|
to set the size of the sliding window for reading instead of using the default
|
||||||
|
32-kbyte sliding window size. It was discovered that there are hundreds of PNG
|
||||||
|
files in the wild that have incorrect CMF bytes that cause libpng to now issue
|
||||||
|
a "too far back" error and reject the file. Libpng-1.6.3 provides a way to
|
||||||
|
revert to the libpng-1.5.x behavior (ignoring the CMF bytes and using a
|
||||||
|
32-kbyte sliding window), and provides a tool
|
||||||
|
(contrib/tools/png-fix-too-far-back) for optimizing the CMF bytes
|
||||||
|
correctly.
|
||||||
|
|
||||||
|
Libpng-1.6.0 and libpng-1.6.1 wrote uncompressed iTXt chunks with the wrong
|
||||||
|
length, which resulted in PNG files that cannot be read beyond the bad iTXt
|
||||||
|
chunk. This error was fixed in libpng-1.6.3, and a tool (called
|
||||||
|
contrib/tools/png-fix-itxt) has been added to the libpng distribution.
|
||||||
|
|
||||||
XIII. Detecting libpng
|
XIII. Detecting libpng
|
||||||
|
|
||||||
The png_get_io_ptr() function has been present since libpng-0.88, has never
|
The png_get_io_ptr() function has been present since libpng-0.88, has never
|
||||||
@@ -5005,11 +5076,11 @@ control. The git repository was built from old libpng-x.y.z.tar.gz files
|
|||||||
going back to version 0.70. You can access the git repository (read only)
|
going back to version 0.70. You can access the git repository (read only)
|
||||||
at
|
at
|
||||||
|
|
||||||
git://libpng.git.sourceforge.net/gitroot/libpng
|
git://git.code.sf.net/p/libpng/code
|
||||||
|
|
||||||
or you can browse it via "gitweb" at
|
or you can browse it with a web browser by selecting the "code" button at
|
||||||
|
|
||||||
http://libpng.git.sourceforge.net/git/gitweb.cgi?p=libpng
|
https://sourceforge.net/projects/libpng
|
||||||
|
|
||||||
Patches can be sent to glennrp at users.sourceforge.net or to
|
Patches can be sent to glennrp at users.sourceforge.net or to
|
||||||
png-mng-implement at lists.sourceforge.net or you can upload them to
|
png-mng-implement at lists.sourceforge.net or you can upload them to
|
||||||
@@ -5134,7 +5205,8 @@ left parenthesis that follows it:
|
|||||||
y[i] = a(x) + (int)b;
|
y[i] = a(x) + (int)b;
|
||||||
|
|
||||||
We prefer #ifdef and #ifndef to #if defined() and #if !defined()
|
We prefer #ifdef and #ifndef to #if defined() and #if !defined()
|
||||||
when there is only one macro being tested.
|
when there is only one macro being tested. We always use parentheses
|
||||||
|
with "defined".
|
||||||
|
|
||||||
We prefer to express integers that are used as bit masks in hex format,
|
We prefer to express integers that are used as bit masks in hex format,
|
||||||
with an even number of lower-case hex digits (e.g., 0x00, 0xff, 0x0100).
|
with an even number of lower-case hex digits (e.g., 0x00, 0xff, 0x0100).
|
||||||
@@ -5150,13 +5222,13 @@ Other rules can be inferred by inspecting the libpng source.
|
|||||||
|
|
||||||
XVI. Y2K Compliance in libpng
|
XVI. Y2K Compliance in libpng
|
||||||
|
|
||||||
February 14, 2013
|
July 18, 2013
|
||||||
|
|
||||||
Since the PNG Development group is an ad-hoc body, we can't make
|
Since the PNG Development group is an ad-hoc body, we can't make
|
||||||
an official declaration.
|
an official declaration.
|
||||||
|
|
||||||
This is your unofficial assurance that libpng from version 0.71 and
|
This is your unofficial assurance that libpng from version 0.71 and
|
||||||
upward through 1.6.0 are Y2K compliant. It is my belief that earlier
|
upward through 1.6.3 are Y2K compliant. It is my belief that earlier
|
||||||
versions were also Y2K compliant.
|
versions were also Y2K compliant.
|
||||||
|
|
||||||
Libpng only has two year fields. One is a 2-byte unsigned integer
|
Libpng only has two year fields. One is a 2-byte unsigned integer
|
||||||
|
|||||||
159
libpng.3
159
libpng.3
@@ -1,6 +1,6 @@
|
|||||||
.TH LIBPNG 3 "February 14, 2013"
|
.TH LIBPNG 3 "July 18, 2013"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
libpng \- Portable Network Graphics (PNG) Reference Library 1.6.0
|
libpng \- Portable Network Graphics (PNG) Reference Library 1.6.3
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
\fB
|
\fB
|
||||||
#include <png.h>\fP
|
#include <png.h>\fP
|
||||||
@@ -504,7 +504,7 @@ Following is a copy of the libpng-manual.txt file that accompanies libpng.
|
|||||||
.SH LIBPNG.TXT
|
.SH LIBPNG.TXT
|
||||||
libpng-manual.txt - A description on how to use and modify libpng
|
libpng-manual.txt - A description on how to use and modify libpng
|
||||||
|
|
||||||
libpng version 1.6.0 - February 14, 2013
|
libpng version 1.6.3 - July 18, 2013
|
||||||
Updated and distributed by Glenn Randers-Pehrson
|
Updated and distributed by Glenn Randers-Pehrson
|
||||||
<glennrp at users.sourceforge.net>
|
<glennrp at users.sourceforge.net>
|
||||||
Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
||||||
@@ -515,7 +515,7 @@ libpng-manual.txt - A description on how to use and modify libpng
|
|||||||
|
|
||||||
Based on:
|
Based on:
|
||||||
|
|
||||||
libpng versions 0.97, January 1998, through 1.6.0 - February 14, 2013
|
libpng versions 0.97, January 1998, through 1.6.3 - July 18, 2013
|
||||||
Updated and distributed by Glenn Randers-Pehrson
|
Updated and distributed by Glenn Randers-Pehrson
|
||||||
Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
||||||
|
|
||||||
@@ -554,9 +554,7 @@ libpng-manual.txt - A description on how to use and modify libpng
|
|||||||
.SH I. Introduction
|
.SH I. Introduction
|
||||||
|
|
||||||
This file describes how to use and modify the PNG reference library
|
This file describes how to use and modify the PNG reference library
|
||||||
(known as libpng) for your own use. There are five sections to this
|
(known as libpng) for your own use. In addition to this
|
||||||
file: introduction, structures, reading, writing, and modification and
|
|
||||||
configuration notes for various special platforms. In addition to this
|
|
||||||
file, example.c is a good starting point for using the library, as
|
file, example.c is a good starting point for using the library, as
|
||||||
it is heavily commented and should include everything most people
|
it is heavily commented and should include everything most people
|
||||||
will need. We assume that libpng is already installed; see the
|
will need. We assume that libpng is already installed; see the
|
||||||
@@ -1031,9 +1029,14 @@ you can retrieve with
|
|||||||
png_get_user_chunk_ptr(png_ptr);
|
png_get_user_chunk_ptr(png_ptr);
|
||||||
|
|
||||||
If you call the png_set_read_user_chunk_fn() function, then all unknown
|
If you call the png_set_read_user_chunk_fn() function, then all unknown
|
||||||
chunks will be saved when read, in case your callback function will need
|
chunks which the callback does not handle will be saved when read. You can
|
||||||
one or more of them. This behavior can be changed with the
|
cause them to be discarded by returning '1' ("handled") instead of '0'. This
|
||||||
png_set_keep_unknown_chunks() function, described below.
|
behavior will change in libpng 1.7 and the default handling set by the
|
||||||
|
png_set_keep_unknown_chunks() function, described below, will be used when the
|
||||||
|
callback returns 0. If you want the existing behavior you should set the global
|
||||||
|
default to PNG_HANDLE_CHUNK_IF_SAFE now; this is compatible with all current
|
||||||
|
versions of libpng and with 1.7. Libpng 1.6 issues a warning if you keep the
|
||||||
|
default, or PNG_HANDLE_CHUNK_NEVER, and the callback returns 0.
|
||||||
|
|
||||||
At this point, you can set up a callback function that will be
|
At this point, you can set up a callback function that will be
|
||||||
called after each row has been read, which you can use to control
|
called after each row has been read, which you can use to control
|
||||||
@@ -1132,15 +1135,17 @@ callback function:
|
|||||||
...
|
...
|
||||||
|
|
||||||
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
|
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
|
||||||
/* ignore all unknown chunks: */
|
/* ignore all unknown chunks
|
||||||
png_set_keep_unknown_chunks(read_ptr, 1, NULL, 0);
|
* (use global setting "2" for libpng16 and earlier):
|
||||||
|
*/
|
||||||
|
png_set_keep_unknown_chunks(read_ptr, 2, NULL, 0);
|
||||||
|
|
||||||
/* except for vpAg: */
|
/* except for vpAg: */
|
||||||
png_set_keep_unknown_chunks(read_ptr, 2, vpAg, 1);
|
png_set_keep_unknown_chunks(read_ptr, 2, vpAg, 1);
|
||||||
|
|
||||||
/* also ignore unused known chunks: */
|
/* also ignore unused known chunks: */
|
||||||
png_set_keep_unknown_chunks(read_ptr, 1, unused_chunks,
|
png_set_keep_unknown_chunks(read_ptr, 1, unused_chunks,
|
||||||
(int)sizeof(unused_chunks)/5);
|
(int)(sizeof unused_chunks)/5);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
.SS User limits
|
.SS User limits
|
||||||
@@ -1492,7 +1497,7 @@ where row_pointers is an array of pointers to the pixel data for each row:
|
|||||||
If you know your image size and pixel size ahead of time, you can allocate
|
If you know your image size and pixel size ahead of time, you can allocate
|
||||||
row_pointers prior to calling png_read_png() with
|
row_pointers prior to calling png_read_png() with
|
||||||
|
|
||||||
if (height > PNG_UINT_32_MAX/png_sizeof(png_byte))
|
if (height > PNG_UINT_32_MAX/(sizeof (png_byte)))
|
||||||
png_error (png_ptr,
|
png_error (png_ptr,
|
||||||
"Image is too tall to process in memory");
|
"Image is too tall to process in memory");
|
||||||
|
|
||||||
@@ -1501,7 +1506,7 @@ row_pointers prior to calling png_read_png() with
|
|||||||
"Image is too wide to process in memory");
|
"Image is too wide to process in memory");
|
||||||
|
|
||||||
row_pointers = png_malloc(png_ptr,
|
row_pointers = png_malloc(png_ptr,
|
||||||
height*png_sizeof(png_bytep));
|
height*(sizeof (png_bytep)));
|
||||||
|
|
||||||
for (int i=0; i<height, i++)
|
for (int i=0; i<height, i++)
|
||||||
row_pointers[i]=NULL; /* security precaution */
|
row_pointers[i]=NULL; /* security precaution */
|
||||||
@@ -2788,7 +2793,7 @@ For a more compact example of reading a PNG image, see the file example.c.
|
|||||||
|
|
||||||
.SS Reading PNG files progressively
|
.SS Reading PNG files progressively
|
||||||
|
|
||||||
The progressive reader is slightly different then the non-progressive
|
The progressive reader is slightly different from the non-progressive
|
||||||
reader. Instead of calling png_read_info(), png_read_rows(), and
|
reader. Instead of calling png_read_info(), png_read_rows(), and
|
||||||
png_read_end(), you make one call to png_process_data(), which calls
|
png_read_end(), you make one call to png_process_data(), which calls
|
||||||
callbacks when it has the info, a row, or the end of the image. You
|
callbacks when it has the info, a row, or the end of the image. You
|
||||||
@@ -3590,13 +3595,47 @@ a writeable buffer of at least 29 bytes.
|
|||||||
|
|
||||||
.SS Writing unknown chunks
|
.SS Writing unknown chunks
|
||||||
|
|
||||||
You can use the png_set_unknown_chunks function to queue up chunks
|
You can use the png_set_unknown_chunks function to queue up private chunks
|
||||||
for writing. You give it a chunk name, raw data, and a size; that's
|
for writing. You give it a chunk name, location, raw data, and a size. You
|
||||||
all there is to it. The chunks will be written by the next following
|
also must use png_set_keep_unknown_chunks() to ensure that libpng will
|
||||||
png_write_info_before_PLTE, png_write_info, or png_write_end function.
|
handle them. That's all there is to it. The chunks will be written by the
|
||||||
Any chunks previously read into the info structure's unknown-chunk
|
next following png_write_info_before_PLTE, png_write_info, or png_write_end
|
||||||
list will also be written out in a sequence that satisfies the PNG
|
function, depending upon the specified location. Any chunks previously
|
||||||
specification's ordering rules.
|
read into the info structure's unknown-chunk list will also be written out
|
||||||
|
in a sequence that satisfies the PNG specification's ordering rules.
|
||||||
|
|
||||||
|
Here is an example of writing two private chunks, prVt and miNE:
|
||||||
|
|
||||||
|
#ifdef PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
|
||||||
|
/* Set unknown chunk data */
|
||||||
|
png_unknown_chunk unk_chunk[2];
|
||||||
|
strcpy((char *) unk_chunk[0].name, "prVt";
|
||||||
|
unk_chunk[0].data = (unsigned char *) "PRIVATE DATA";
|
||||||
|
unk_chunk[0].size = strlen(unk_chunk[0].data)+1;
|
||||||
|
unk_chunk[0].location = PNG_HAVE_IHDR;
|
||||||
|
strcpy((char *) unk_chunk[1].name, "miNE";
|
||||||
|
unk_chunk[1].data = (unsigned char *) "MY CHUNK DATA";
|
||||||
|
unk_chunk[1].size = strlen(unk_chunk[0].data)+1;
|
||||||
|
unk_chunk[1].location = PNG_AFTER_IDAT;
|
||||||
|
png_set_unknown_chunks(write_ptr, write_info_ptr,
|
||||||
|
unk_chunk, 2);
|
||||||
|
/* Needed because miNE is not safe-to-copy */
|
||||||
|
png_set_keep_unknown_chunks(png, PNG_HANDLE_CHUNK_ALWAYS,
|
||||||
|
(png_bytep) "miNE", 1);
|
||||||
|
# if PNG_LIBPNG_VER < 10600
|
||||||
|
/* Deal with unknown chunk location bug in 1.5.x and earlier */
|
||||||
|
png_set_unknown_chunk_location(png, info, 0, PNG_HAVE_IHDR);
|
||||||
|
png_set_unknown_chunk_location(png, info, 1, PNG_AFTER_IDAT);
|
||||||
|
# endif
|
||||||
|
# if PNG_LIBPNG_VER < 10500
|
||||||
|
/* PNG_AFTER_IDAT writes two copies of the chunk prior to libpng-1.5.0,
|
||||||
|
* one before IDAT and another after IDAT, so don't use it; only use
|
||||||
|
* PNG_HAVE_IHDR location. This call resets the location previously
|
||||||
|
* set by assignment and png_set_unknown_chunk_location() for chunk 1.
|
||||||
|
*/
|
||||||
|
png_set_unknown_chunk_location(png, info, 1, PNG_HAVE_IHDR);
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
.SS The high-level write interface
|
.SS The high-level write interface
|
||||||
|
|
||||||
@@ -4491,9 +4530,12 @@ as warnings.
|
|||||||
|
|
||||||
png_set_benign_errors (png_ptr, int allowed);
|
png_set_benign_errors (png_ptr, int allowed);
|
||||||
|
|
||||||
allowed: 0: (default) treat png_benign_error() an error.
|
allowed: 0: treat png_benign_error() as an error.
|
||||||
1: treat png_benign_error() as a warning.
|
1: treat png_benign_error() as a warning.
|
||||||
|
|
||||||
|
As of libpng-1.6.0, the default condition is to treat benign errors as
|
||||||
|
warnings while reading and as errors while writing.
|
||||||
|
|
||||||
.SS Custom chunks
|
.SS Custom chunks
|
||||||
|
|
||||||
If you need to read or write custom chunks, you may need to get deeper
|
If you need to read or write custom chunks, you may need to get deeper
|
||||||
@@ -4765,12 +4807,12 @@ the message, "message" is the formatted string to be printed,
|
|||||||
and p1 and p2 are parameters that are to be embedded in the string
|
and p1 and p2 are parameters that are to be embedded in the string
|
||||||
according to printf-style formatting directives. For example,
|
according to printf-style formatting directives. For example,
|
||||||
|
|
||||||
png_debug1(2, "foo=%d\n", foo);
|
png_debug1(2, "foo=%d", foo);
|
||||||
|
|
||||||
is expanded to
|
is expanded to
|
||||||
|
|
||||||
if (PNG_DEBUG > 2)
|
if (PNG_DEBUG > 2)
|
||||||
fprintf(PNG_DEBUG_FILE, "foo=%d\n", foo);
|
fprintf(PNG_DEBUG_FILE, "foo=%d\en", foo);
|
||||||
|
|
||||||
When PNG_DEBUG is defined but is zero, the macros aren't defined, but you
|
When PNG_DEBUG is defined but is zero, the macros aren't defined, but you
|
||||||
can still use PNG_DEBUG to control your own debugging:
|
can still use PNG_DEBUG to control your own debugging:
|
||||||
@@ -5445,9 +5487,9 @@ symbols, using the PNG_PREFIX macro.
|
|||||||
|
|
||||||
We no longer include string.h in png.h. The include statement has been moved
|
We no longer include string.h in png.h. The include statement has been moved
|
||||||
to pngpriv.h, where it is not accessible by applications. Applications that
|
to pngpriv.h, where it is not accessible by applications. Applications that
|
||||||
need access to information in string.h must add an '#include "string.h"'
|
need access to information in string.h must add an '#include <string.h>'
|
||||||
directive. It does not matter whether this is placed prior to or after
|
directive. It does not matter whether this is placed prior to or after
|
||||||
the '"#include png.h"' directive.
|
the '#include "png.h"' directive.
|
||||||
|
|
||||||
The following API are now DEPRECATED:
|
The following API are now DEPRECATED:
|
||||||
png_info_init_3()
|
png_info_init_3()
|
||||||
@@ -5458,7 +5500,7 @@ The following API are now DEPRECATED:
|
|||||||
png_free_default()
|
png_free_default()
|
||||||
png_reset_zstream()
|
png_reset_zstream()
|
||||||
|
|
||||||
The following has been removed:
|
The following have been removed:
|
||||||
png_get_io_chunk_name(), which has been replaced
|
png_get_io_chunk_name(), which has been replaced
|
||||||
with png_get_io_chunk_type(). The new
|
with png_get_io_chunk_type(). The new
|
||||||
function returns a 32-bit integer instead of
|
function returns a 32-bit integer instead of
|
||||||
@@ -5476,7 +5518,21 @@ where "rp" indicates a "restricted pointer".
|
|||||||
Error detection in some chunks has improved; in particular the iCCP chunk
|
Error detection in some chunks has improved; in particular the iCCP chunk
|
||||||
reader now does pretty complete validation of the basic format. Some bad
|
reader now does pretty complete validation of the basic format. Some bad
|
||||||
profiles that were previously accepted are now rejected, in particular the
|
profiles that were previously accepted are now rejected, in particular the
|
||||||
very old broken Microsoft/HP sRGB profile.
|
very old broken Microsoft/HP sRGB profile. The PNG spec requirement that
|
||||||
|
only grayscale profiles may appear in images with color type 0 or 4 and that
|
||||||
|
even if the image only contains gray pixels, only RGB profiles may appear
|
||||||
|
in images with color type 2, 3, or 6, is now enforced. The sRGB chunk
|
||||||
|
is allowed to appear in images with any color type.
|
||||||
|
|
||||||
|
Prior to libpng-1.6.0 a warning would be issued if the iTXt chunk contained
|
||||||
|
an empty language field or an empty translated keyword. Both of these
|
||||||
|
are allowed by the PNG specification, so these warnings are no longer issued.
|
||||||
|
|
||||||
|
The library now issues an error if the application attempts to set a
|
||||||
|
transform after it calls png_read_update_info().
|
||||||
|
|
||||||
|
The default condition for benign_errors is now to treat benign errors as
|
||||||
|
warnings while reading and as errors while writing.
|
||||||
|
|
||||||
The library now issues a warning if both background processing and RGB to
|
The library now issues a warning if both background processing and RGB to
|
||||||
gray are used when gamma correction happens. As with previous versions of
|
gray are used when gamma correction happens. As with previous versions of
|
||||||
@@ -5494,6 +5550,21 @@ The machine-generated configure files are no longer included in branches
|
|||||||
libpng16 and later of the GIT repository. They continue to be included
|
libpng16 and later of the GIT repository. They continue to be included
|
||||||
in the tarball releases, however.
|
in the tarball releases, however.
|
||||||
|
|
||||||
|
Libpng-1.6.0 and later use the CMF bytes at the beginning of the IDAT stream
|
||||||
|
to set the size of the sliding window for reading instead of using the default
|
||||||
|
32-kbyte sliding window size. It was discovered that there are hundreds of PNG
|
||||||
|
files in the wild that have incorrect CMF bytes that cause libpng to now issue
|
||||||
|
a "too far back" error and reject the file. Libpng-1.6.3 provides a way to
|
||||||
|
revert to the libpng-1.5.x behavior (ignoring the CMF bytes and using a
|
||||||
|
32-kbyte sliding window), and provides a tool
|
||||||
|
(contrib/tools/png-fix-too-far-back) for optimizing the CMF bytes
|
||||||
|
correctly.
|
||||||
|
|
||||||
|
Libpng-1.6.0 and libpng-1.6.1 wrote uncompressed iTXt chunks with the wrong
|
||||||
|
length, which resulted in PNG files that cannot be read beyond the bad iTXt
|
||||||
|
chunk. This error was fixed in libpng-1.6.3, and a tool (called
|
||||||
|
contrib/tools/png-fix-itxt) has been added to the libpng distribution.
|
||||||
|
|
||||||
.SH XIII. Detecting libpng
|
.SH XIII. Detecting libpng
|
||||||
|
|
||||||
The png_get_io_ptr() function has been present since libpng-0.88, has never
|
The png_get_io_ptr() function has been present since libpng-0.88, has never
|
||||||
@@ -5510,11 +5581,11 @@ control. The git repository was built from old libpng-x.y.z.tar.gz files
|
|||||||
going back to version 0.70. You can access the git repository (read only)
|
going back to version 0.70. You can access the git repository (read only)
|
||||||
at
|
at
|
||||||
|
|
||||||
git://libpng.git.sourceforge.net/gitroot/libpng
|
git://git.code.sf.net/p/libpng/code
|
||||||
|
|
||||||
or you can browse it via "gitweb" at
|
or you can browse it with a web browser by selecting the "code" button at
|
||||||
|
|
||||||
http://libpng.git.sourceforge.net/git/gitweb.cgi?p=libpng
|
https://sourceforge.net/projects/libpng
|
||||||
|
|
||||||
Patches can be sent to glennrp at users.sourceforge.net or to
|
Patches can be sent to glennrp at users.sourceforge.net or to
|
||||||
png-mng-implement at lists.sourceforge.net or you can upload them to
|
png-mng-implement at lists.sourceforge.net or you can upload them to
|
||||||
@@ -5639,7 +5710,8 @@ left parenthesis that follows it:
|
|||||||
y[i] = a(x) + (int)b;
|
y[i] = a(x) + (int)b;
|
||||||
|
|
||||||
We prefer #ifdef and #ifndef to #if defined() and #if !defined()
|
We prefer #ifdef and #ifndef to #if defined() and #if !defined()
|
||||||
when there is only one macro being tested.
|
when there is only one macro being tested. We always use parentheses
|
||||||
|
with "defined".
|
||||||
|
|
||||||
We prefer to express integers that are used as bit masks in hex format,
|
We prefer to express integers that are used as bit masks in hex format,
|
||||||
with an even number of lower-case hex digits (e.g., 0x00, 0xff, 0x0100).
|
with an even number of lower-case hex digits (e.g., 0x00, 0xff, 0x0100).
|
||||||
@@ -5655,13 +5727,13 @@ Other rules can be inferred by inspecting the libpng source.
|
|||||||
|
|
||||||
.SH XVI. Y2K Compliance in libpng
|
.SH XVI. Y2K Compliance in libpng
|
||||||
|
|
||||||
February 14, 2013
|
July 18, 2013
|
||||||
|
|
||||||
Since the PNG Development group is an ad-hoc body, we can't make
|
Since the PNG Development group is an ad-hoc body, we can't make
|
||||||
an official declaration.
|
an official declaration.
|
||||||
|
|
||||||
This is your unofficial assurance that libpng from version 0.71 and
|
This is your unofficial assurance that libpng from version 0.71 and
|
||||||
upward through 1.6.0 are Y2K compliant. It is my belief that earlier
|
upward through 1.6.3 are Y2K compliant. It is my belief that earlier
|
||||||
versions were also Y2K compliant.
|
versions were also Y2K compliant.
|
||||||
|
|
||||||
Libpng only has two year fields. One is a 2-byte unsigned integer
|
Libpng only has two year fields. One is a 2-byte unsigned integer
|
||||||
@@ -5869,6 +5941,15 @@ the first widely used release:
|
|||||||
1.6.0beta01-40 16 10600 16.so.16.0[.0]
|
1.6.0beta01-40 16 10600 16.so.16.0[.0]
|
||||||
1.6.0rc01-08 16 10600 16.so.16.0[.0]
|
1.6.0rc01-08 16 10600 16.so.16.0[.0]
|
||||||
1.6.0 16 10600 16.so.16.0[.0]
|
1.6.0 16 10600 16.so.16.0[.0]
|
||||||
|
1.6.1beta01-09 16 10601 16.so.16.1[.0]
|
||||||
|
1.6.1rc01 16 10601 16.so.16.1[.0]
|
||||||
|
1.6.1 16 10601 16.so.16.1[.0]
|
||||||
|
1.6.2beta01 16 10602 16.so.16.2[.0]
|
||||||
|
1.6.2rc01-06 16 10602 16.so.16.2[.0]
|
||||||
|
1.6.2 16 10602 16.so.16.2[.0]
|
||||||
|
1.6.3beta01-11 16 10603 16.so.16.3[.0]
|
||||||
|
1.6.3rc01 16 10603 16.so.16.3[.0]
|
||||||
|
1.6.3 16 10603 16.so.16.3[.0]
|
||||||
|
|
||||||
Henceforth the source version will match the shared-library minor
|
Henceforth the source version will match the shared-library minor
|
||||||
and patch numbers; the shared-library major version number will be
|
and patch numbers; the shared-library major version number will be
|
||||||
@@ -5925,7 +6006,7 @@ possible without all of you.
|
|||||||
|
|
||||||
Thanks to Frank J. T. Wojcik for helping with the documentation.
|
Thanks to Frank J. T. Wojcik for helping with the documentation.
|
||||||
|
|
||||||
Libpng version 1.6.0 - February 14, 2013:
|
Libpng version 1.6.3 - July 18, 2013:
|
||||||
Initially created in 1995 by Guy Eric Schalnat, then of Group 42, Inc.
|
Initially created in 1995 by Guy Eric Schalnat, then of Group 42, Inc.
|
||||||
Currently maintained by Glenn Randers-Pehrson (glennrp at users.sourceforge.net).
|
Currently maintained by Glenn Randers-Pehrson (glennrp at users.sourceforge.net).
|
||||||
|
|
||||||
@@ -5948,7 +6029,7 @@ this sentence.
|
|||||||
|
|
||||||
This code is released under the libpng license.
|
This code is released under the libpng license.
|
||||||
|
|
||||||
libpng versions 1.2.6, August 15, 2004, through 1.6.0, February 14, 2013, are
|
libpng versions 1.2.6, August 15, 2004, through 1.6.3, July 18, 2013, are
|
||||||
Copyright (c) 2004,2006-2007 Glenn Randers-Pehrson, and are
|
Copyright (c) 2004,2006-2007 Glenn Randers-Pehrson, and are
|
||||||
distributed according to the same disclaimer and license as libpng-1.2.5
|
distributed according to the same disclaimer and license as libpng-1.2.5
|
||||||
with the following individual added to the list of Contributing Authors
|
with the following individual added to the list of Contributing Authors
|
||||||
@@ -6047,7 +6128,7 @@ certification mark of the Open Source Initiative.
|
|||||||
|
|
||||||
Glenn Randers-Pehrson
|
Glenn Randers-Pehrson
|
||||||
glennrp at users.sourceforge.net
|
glennrp at users.sourceforge.net
|
||||||
February 14, 2013
|
July 18, 2013
|
||||||
|
|
||||||
.\" end of man page
|
.\" end of man page
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
.TH LIBPNGPF 3 "February 14, 2013"
|
.TH LIBPNGPF 3 "July 18, 2013"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
libpng \- Portable Network Graphics (PNG) Reference Library 1.6.0
|
libpng \- Portable Network Graphics (PNG) Reference Library 1.6.3
|
||||||
(private functions)
|
(private functions)
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
\fB#include \fI"pngpriv.h"
|
\fB#include \fI"pngpriv.h"
|
||||||
|
|||||||
2
png.5
2
png.5
@@ -1,4 +1,4 @@
|
|||||||
.TH PNG 5 "February 14, 2013"
|
.TH PNG 5 "July 18, 2013"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
png \- Portable Network Graphics (PNG) format
|
png \- Portable Network Graphics (PNG) format
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
|
|||||||
60
png.c
60
png.c
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* png.c - location for general purpose libpng functions
|
/* png.c - location for general purpose libpng functions
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.0 [February 14, 2013]
|
* Last changed in libpng 1.6.2 [April 25, 2013]
|
||||||
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
#include "pngpriv.h"
|
#include "pngpriv.h"
|
||||||
|
|
||||||
/* Generate a compiler error if there is an old png.h in the search path. */
|
/* Generate a compiler error if there is an old png.h in the search path. */
|
||||||
typedef png_libpng_version_1_6_0 Your_png_h_is_not_version_1_6_0;
|
typedef png_libpng_version_1_6_3 Your_png_h_is_not_version_1_6_3;
|
||||||
|
|
||||||
/* Tells libpng that we have already handled the first "num_bytes" bytes
|
/* 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
|
* of the PNG file signature. If the PNG data is embedded into another
|
||||||
@@ -115,7 +115,7 @@ png_calculate_crc(png_structrp png_ptr, png_const_bytep ptr, png_size_t length)
|
|||||||
{
|
{
|
||||||
int need_crc = 1;
|
int need_crc = 1;
|
||||||
|
|
||||||
if (PNG_CHUNK_ANCILLIARY(png_ptr->chunk_name))
|
if (PNG_CHUNK_ANCILLARY(png_ptr->chunk_name))
|
||||||
{
|
{
|
||||||
if ((png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_MASK) ==
|
if ((png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_MASK) ==
|
||||||
(PNG_FLAG_CRC_ANCILLARY_USE | PNG_FLAG_CRC_ANCILLARY_NOWARN))
|
(PNG_FLAG_CRC_ANCILLARY_USE | PNG_FLAG_CRC_ANCILLARY_NOWARN))
|
||||||
@@ -768,13 +768,13 @@ png_get_copyright(png_const_structrp png_ptr)
|
|||||||
#else
|
#else
|
||||||
# ifdef __STDC__
|
# ifdef __STDC__
|
||||||
return PNG_STRING_NEWLINE \
|
return PNG_STRING_NEWLINE \
|
||||||
"libpng version 1.6.0 - February 14, 2013" PNG_STRING_NEWLINE \
|
"libpng version 1.6.3 - July 18, 2013" PNG_STRING_NEWLINE \
|
||||||
"Copyright (c) 1998-2013 Glenn Randers-Pehrson" PNG_STRING_NEWLINE \
|
"Copyright (c) 1998-2013 Glenn Randers-Pehrson" PNG_STRING_NEWLINE \
|
||||||
"Copyright (c) 1996-1997 Andreas Dilger" PNG_STRING_NEWLINE \
|
"Copyright (c) 1996-1997 Andreas Dilger" PNG_STRING_NEWLINE \
|
||||||
"Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc." \
|
"Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc." \
|
||||||
PNG_STRING_NEWLINE;
|
PNG_STRING_NEWLINE;
|
||||||
# else
|
# else
|
||||||
return "libpng version 1.6.0 - February 14, 2013\
|
return "libpng version 1.6.3 - July 18, 2013\
|
||||||
Copyright (c) 1998-2013 Glenn Randers-Pehrson\
|
Copyright (c) 1998-2013 Glenn Randers-Pehrson\
|
||||||
Copyright (c) 1996-1997 Andreas Dilger\
|
Copyright (c) 1996-1997 Andreas Dilger\
|
||||||
Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.";
|
Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.";
|
||||||
@@ -1407,8 +1407,10 @@ png_XYZ_from_xy(png_XYZ *XYZ, const png_xy *xy)
|
|||||||
red_inverse))
|
red_inverse))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (!png_muldiv(&XYZ->green_X, xy->greenx, PNG_FP_1, green_inverse)) return 1;
|
if (!png_muldiv(&XYZ->green_X, xy->greenx, PNG_FP_1, green_inverse))
|
||||||
if (!png_muldiv(&XYZ->green_Y, xy->greeny, PNG_FP_1, green_inverse)) return 1;
|
return 1;
|
||||||
|
if (!png_muldiv(&XYZ->green_Y, xy->greeny, PNG_FP_1, green_inverse))
|
||||||
|
return 1;
|
||||||
if (!png_muldiv(&XYZ->green_Z, PNG_FP_1 - xy->greenx - xy->greeny, PNG_FP_1,
|
if (!png_muldiv(&XYZ->green_Z, PNG_FP_1 - xy->greenx - xy->greeny, PNG_FP_1,
|
||||||
green_inverse))
|
green_inverse))
|
||||||
return 1;
|
return 1;
|
||||||
@@ -1647,7 +1649,7 @@ png_colorspace_set_endpoints(png_const_structrp png_ptr,
|
|||||||
return 0; /* failed */
|
return 0; /* failed */
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined PNG_sRGB_SUPPORTED || defined PNG_iCCP_SUPPORTED
|
#if defined(PNG_sRGB_SUPPORTED) || defined(PNG_iCCP_SUPPORTED)
|
||||||
/* Error message generation */
|
/* Error message generation */
|
||||||
static char
|
static char
|
||||||
png_icc_tag_char(png_uint_32 byte)
|
png_icc_tag_char(png_uint_32 byte)
|
||||||
@@ -1864,7 +1866,7 @@ png_icc_check_header(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||||||
"length does not match profile");
|
"length does not match profile");
|
||||||
|
|
||||||
temp = png_get_uint_32(profile+128); /* tag count: 12 bytes/tag */
|
temp = png_get_uint_32(profile+128); /* tag count: 12 bytes/tag */
|
||||||
if (temp > 357913930 || /* (2^32-4-132)/12: maxium possible tag count */
|
if (temp > 357913930 || /* (2^32-4-132)/12: maximum possible tag count */
|
||||||
profile_length < 132+12*temp) /* truncated tag table */
|
profile_length < 132+12*temp) /* truncated tag table */
|
||||||
return png_icc_profile_error(png_ptr, colorspace, name, temp,
|
return png_icc_profile_error(png_ptr, colorspace, name, temp,
|
||||||
"tag count too large");
|
"tag count too large");
|
||||||
@@ -2127,7 +2129,7 @@ static const struct
|
|||||||
PNG_MD5(0x00000000, 0x00000000, 0x00000000, 0x00000000), 0, 1/*broken*/,
|
PNG_MD5(0x00000000, 0x00000000, 0x00000000, 0x00000000), 0, 1/*broken*/,
|
||||||
"1998/02/09 06:49:00", 3144, "HP-Microsoft sRGB v2 perceptual")
|
"1998/02/09 06:49:00", 3144, "HP-Microsoft sRGB v2 perceptual")
|
||||||
|
|
||||||
PNG_ICC_CHECKSUM(0x0398f3fcUL, 0xf29e526dUL,
|
PNG_ICC_CHECKSUM(0x0398f3fc, 0xf29e526d,
|
||||||
PNG_MD5(0x00000000, 0x00000000, 0x00000000, 0x00000000), 1, 1/*broken*/,
|
PNG_MD5(0x00000000, 0x00000000, 0x00000000, 0x00000000), 1, 1/*broken*/,
|
||||||
"1998/02/09 06:49:00", 3144, "HP-Microsoft sRGB v2 media-relative")
|
"1998/02/09 06:49:00", 3144, "HP-Microsoft sRGB v2 media-relative")
|
||||||
};
|
};
|
||||||
@@ -2177,7 +2179,7 @@ png_compare_ICC_profile_with_sRGB(png_const_structrp png_ptr,
|
|||||||
if (length == png_sRGB_checks[i].length &&
|
if (length == png_sRGB_checks[i].length &&
|
||||||
intent == png_sRGB_checks[i].intent)
|
intent == png_sRGB_checks[i].intent)
|
||||||
{
|
{
|
||||||
/* Now calculate the alder32 if not done already. */
|
/* Now calculate the adler32 if not done already. */
|
||||||
if (adler == 0)
|
if (adler == 0)
|
||||||
{
|
{
|
||||||
adler = adler32(0, NULL, 0);
|
adler = adler32(0, NULL, 0);
|
||||||
@@ -2273,7 +2275,10 @@ png_colorspace_set_ICC(png_const_structrp png_ptr, png_colorspacerp colorspace,
|
|||||||
png_icc_check_tag_table(png_ptr, colorspace, name, profile_length,
|
png_icc_check_tag_table(png_ptr, colorspace, name, profile_length,
|
||||||
profile))
|
profile))
|
||||||
{
|
{
|
||||||
png_icc_set_sRGB(png_ptr, colorspace, profile, 0);
|
# ifdef PNG_sRGB_SUPPORTED
|
||||||
|
/* If no sRGB support, don't try storing sRGB information */
|
||||||
|
png_icc_set_sRGB(png_ptr, colorspace, profile, 0);
|
||||||
|
# endif
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3090,7 +3095,7 @@ png_fixed(png_const_structrp png_ptr, double fp, png_const_charp text)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PNG_READ_GAMMA_SUPPORTED) || \
|
#if defined(PNG_READ_GAMMA_SUPPORTED) || \
|
||||||
defined(PNG_INCH_CONVERSIONS_SUPPORTED) || defined(PNG__READ_pHYs_SUPPORTED)
|
defined(PNG_INCH_CONVERSIONS_SUPPORTED) || defined(PNG_READ_pHYs_SUPPORTED)
|
||||||
/* muldiv functions */
|
/* muldiv functions */
|
||||||
/* This API takes signed arguments and rounds the result to the nearest
|
/* This API takes signed arguments and rounds the result to the nearest
|
||||||
* integer (or, for a fixed point number - the standard argument - to
|
* integer (or, for a fixed point number - the standard argument - to
|
||||||
@@ -4010,9 +4015,30 @@ png_build_gamma_table(png_structrp png_ptr, int bit_depth)
|
|||||||
}
|
}
|
||||||
#endif /* READ_GAMMA */
|
#endif /* READ_GAMMA */
|
||||||
|
|
||||||
|
/* HARDWARE OPTION SUPPORT */
|
||||||
|
#ifdef PNG_SET_OPTION_SUPPORTED
|
||||||
|
int PNGAPI
|
||||||
|
png_set_option(png_structrp png_ptr, int option, int onoff)
|
||||||
|
{
|
||||||
|
if (png_ptr != NULL && option >= 0 && option < PNG_OPTION_NEXT &&
|
||||||
|
(option & 1) == 0)
|
||||||
|
{
|
||||||
|
int mask = 3 << option;
|
||||||
|
int setting = (2 + (onoff != 0)) << option;
|
||||||
|
int current = png_ptr->options;
|
||||||
|
|
||||||
|
png_ptr->options = (png_byte)((current & ~mask) | setting);
|
||||||
|
|
||||||
|
return (current & mask) >> option;
|
||||||
|
}
|
||||||
|
|
||||||
|
return PNG_OPTION_INVALID;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* sRGB support */
|
/* sRGB support */
|
||||||
#if defined PNG_SIMPLIFIED_READ_SUPPORTED ||\
|
#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) ||\
|
||||||
defined PNG_SIMPLIFIED_WRITE_SUPPORTED
|
defined(PNG_SIMPLIFIED_WRITE_SUPPORTED)
|
||||||
/* sRGB conversion tables; these are machine generated with the code in
|
/* sRGB conversion tables; these are machine generated with the code in
|
||||||
* contrib/tools/makesRGB.c. The actual sRGB transfer curve defined in the
|
* contrib/tools/makesRGB.c. The actual sRGB transfer curve defined in the
|
||||||
* specification (see the article at http://en.wikipedia.org/wiki/SRGB)
|
* specification (see the article at http://en.wikipedia.org/wiki/SRGB)
|
||||||
@@ -4180,8 +4206,8 @@ const png_byte png_sRGB_delta[512] =
|
|||||||
#endif /* SIMPLIFIED READ/WRITE sRGB support */
|
#endif /* SIMPLIFIED READ/WRITE sRGB support */
|
||||||
|
|
||||||
/* SIMPLIFIED READ/WRITE SUPPORT */
|
/* SIMPLIFIED READ/WRITE SUPPORT */
|
||||||
#if defined PNG_SIMPLIFIED_READ_SUPPORTED ||\
|
#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) ||\
|
||||||
defined PNG_SIMPLIFIED_WRITE_SUPPORTED
|
defined(PNG_SIMPLIFIED_WRITE_SUPPORTED)
|
||||||
static int
|
static int
|
||||||
png_image_free_function(png_voidp argument)
|
png_image_free_function(png_voidp argument)
|
||||||
{
|
{
|
||||||
|
|||||||
122
png.h
122
png.h
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* png.h - header file for PNG reference library
|
/* png.h - header file for PNG reference library
|
||||||
*
|
*
|
||||||
* libpng version 1.6.0 - February 14, 2013
|
* libpng version 1.6.3 - July 18, 2013
|
||||||
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
* Authors and maintainers:
|
* Authors and maintainers:
|
||||||
* libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
|
* libpng versions 0.71, May 1995, through 0.88, January 1996: Guy Schalnat
|
||||||
* libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger
|
* libpng versions 0.89c, June 1996, through 0.96, May 1997: Andreas Dilger
|
||||||
* libpng versions 0.97, January 1998, through 1.6.0 - February 14, 2013: Glenn
|
* libpng versions 0.97, January 1998, through 1.6.3 - July 18, 2013: Glenn
|
||||||
* See also "Contributing Authors", below.
|
* See also "Contributing Authors", below.
|
||||||
*
|
*
|
||||||
* Note about libpng version numbers:
|
* Note about libpng version numbers:
|
||||||
@@ -169,6 +169,15 @@
|
|||||||
* 1.6.0beta01-40 16 10600 16.so.16.0[.0]
|
* 1.6.0beta01-40 16 10600 16.so.16.0[.0]
|
||||||
* 1.6.0rc01-08 16 10600 16.so.16.0[.0]
|
* 1.6.0rc01-08 16 10600 16.so.16.0[.0]
|
||||||
* 1.6.0 16 10600 16.so.16.0[.0]
|
* 1.6.0 16 10600 16.so.16.0[.0]
|
||||||
|
* 1.6.1beta01-09 16 10601 16.so.16.1[.0]
|
||||||
|
* 1.6.1rc01 16 10601 16.so.16.1[.0]
|
||||||
|
* 1.6.1 16 10601 16.so.16.1[.0]
|
||||||
|
* 1.6.2beta01 16 10602 16.so.16.2[.0]
|
||||||
|
* 1.6.2rc01-06 16 10602 16.so.16.2[.0]
|
||||||
|
* 1.6.2 16 10602 16.so.16.2[.0]
|
||||||
|
* 1.6.3beta01-11 16 10603 16.so.16.3[.0]
|
||||||
|
* 1.6.3rc01 16 10603 16.so.16.3[.0]
|
||||||
|
* 1.6.3 16 10603 16.so.16.3[.0]
|
||||||
*
|
*
|
||||||
* Henceforth the source version will match the shared-library major
|
* Henceforth the source version will match the shared-library major
|
||||||
* and minor numbers; the shared-library major version number will be
|
* and minor numbers; the shared-library major version number will be
|
||||||
@@ -200,7 +209,7 @@
|
|||||||
*
|
*
|
||||||
* This code is released under the libpng license.
|
* This code is released under the libpng license.
|
||||||
*
|
*
|
||||||
* libpng versions 1.2.6, August 15, 2004, through 1.6.0, February 14, 2013, are
|
* libpng versions 1.2.6, August 15, 2004, through 1.6.3, July 18, 2013, are
|
||||||
* Copyright (c) 2004, 2006-2013 Glenn Randers-Pehrson, and are
|
* Copyright (c) 2004, 2006-2013 Glenn Randers-Pehrson, and are
|
||||||
* distributed according to the same disclaimer and license as libpng-1.2.5
|
* distributed according to the same disclaimer and license as libpng-1.2.5
|
||||||
* with the following individual added to the list of Contributing Authors:
|
* with the following individual added to the list of Contributing Authors:
|
||||||
@@ -312,13 +321,13 @@
|
|||||||
* Y2K compliance in libpng:
|
* Y2K compliance in libpng:
|
||||||
* =========================
|
* =========================
|
||||||
*
|
*
|
||||||
* February 14, 2013
|
* July 18, 2013
|
||||||
*
|
*
|
||||||
* Since the PNG Development group is an ad-hoc body, we can't make
|
* Since the PNG Development group is an ad-hoc body, we can't make
|
||||||
* an official declaration.
|
* an official declaration.
|
||||||
*
|
*
|
||||||
* This is your unofficial assurance that libpng from version 0.71 and
|
* This is your unofficial assurance that libpng from version 0.71 and
|
||||||
* upward through 1.6.0 are Y2K compliant. It is my belief that
|
* upward through 1.6.3 are Y2K compliant. It is my belief that
|
||||||
* earlier versions were also Y2K compliant.
|
* earlier versions were also Y2K compliant.
|
||||||
*
|
*
|
||||||
* Libpng only has two year fields. One is a 2-byte unsigned integer
|
* Libpng only has two year fields. One is a 2-byte unsigned integer
|
||||||
@@ -378,9 +387,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* Version information for png.h - this should match the version in png.c */
|
/* Version information for png.h - this should match the version in png.c */
|
||||||
#define PNG_LIBPNG_VER_STRING "1.6.0"
|
#define PNG_LIBPNG_VER_STRING "1.6.3"
|
||||||
#define PNG_HEADER_VERSION_STRING \
|
#define PNG_HEADER_VERSION_STRING \
|
||||||
" libpng version 1.6.0 - February 14, 2013\n"
|
" libpng version 1.6.3 - July 18, 2013\n"
|
||||||
|
|
||||||
#define PNG_LIBPNG_VER_SONUM 16
|
#define PNG_LIBPNG_VER_SONUM 16
|
||||||
#define PNG_LIBPNG_VER_DLLNUM 16
|
#define PNG_LIBPNG_VER_DLLNUM 16
|
||||||
@@ -388,7 +397,7 @@
|
|||||||
/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
|
/* These should match the first 3 components of PNG_LIBPNG_VER_STRING: */
|
||||||
#define PNG_LIBPNG_VER_MAJOR 1
|
#define PNG_LIBPNG_VER_MAJOR 1
|
||||||
#define PNG_LIBPNG_VER_MINOR 6
|
#define PNG_LIBPNG_VER_MINOR 6
|
||||||
#define PNG_LIBPNG_VER_RELEASE 0
|
#define PNG_LIBPNG_VER_RELEASE 3
|
||||||
|
|
||||||
/* This should match the numeric part of the final component of
|
/* This should match the numeric part of the final component of
|
||||||
* PNG_LIBPNG_VER_STRING, omitting any leading zero:
|
* PNG_LIBPNG_VER_STRING, omitting any leading zero:
|
||||||
@@ -419,7 +428,7 @@
|
|||||||
* version 1.0.0 was mis-numbered 100 instead of 10000). From
|
* version 1.0.0 was mis-numbered 100 instead of 10000). From
|
||||||
* version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release
|
* version 1.0.1 it's xxyyzz, where x=major, y=minor, z=release
|
||||||
*/
|
*/
|
||||||
#define PNG_LIBPNG_VER 10600 /* 1.6.0 */
|
#define PNG_LIBPNG_VER 10603 /* 1.6.3 */
|
||||||
|
|
||||||
/* Library configuration: these options cannot be changed after
|
/* Library configuration: these options cannot be changed after
|
||||||
* the library has been built.
|
* the library has been built.
|
||||||
@@ -524,7 +533,7 @@ extern "C" {
|
|||||||
/* This triggers a compiler error in png.c, if png.c and png.h
|
/* This triggers a compiler error in png.c, if png.c and png.h
|
||||||
* do not agree upon the version number.
|
* do not agree upon the version number.
|
||||||
*/
|
*/
|
||||||
typedef char* png_libpng_version_1_6_0;
|
typedef char* png_libpng_version_1_6_3;
|
||||||
|
|
||||||
/* Basic control structions. Read libpng-manual.txt or libpng.3 for more info.
|
/* Basic control structions. Read libpng-manual.txt or libpng.3 for more info.
|
||||||
*
|
*
|
||||||
@@ -1837,7 +1846,7 @@ PNG_EXPORT(218, png_byte, png_get_current_pass_number, (png_const_structrp));
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_READ_USER_CHUNKS_SUPPORTED
|
#ifdef PNG_READ_USER_CHUNKS_SUPPORTED
|
||||||
/* This callback is called only for *unknown* chunks, if
|
/* This callback is called only for *unknown* chunks. If
|
||||||
* PNG_HANDLE_AS_UNKNOWN_SUPPORTED is set then it is possible to set known
|
* PNG_HANDLE_AS_UNKNOWN_SUPPORTED is set then it is possible to set known
|
||||||
* chunks to be treated as unknown, however in this case the callback must do
|
* chunks to be treated as unknown, however in this case the callback must do
|
||||||
* any processing required by the chunk (e.g. by calling the appropriate
|
* any processing required by the chunk (e.g. by calling the appropriate
|
||||||
@@ -1849,12 +1858,12 @@ PNG_EXPORT(218, png_byte, png_get_current_pass_number, (png_const_structrp));
|
|||||||
* The integer return from the callback function is interpreted thus:
|
* The integer return from the callback function is interpreted thus:
|
||||||
*
|
*
|
||||||
* negative: An error occured, png_chunk_error will be called.
|
* negative: An error occured, png_chunk_error will be called.
|
||||||
* zero: The chunk was not handled, the chunk will be discarded unless
|
* zero: The chunk was not handled, the chunk will be saved. A critical
|
||||||
* png_set_keep_unknown_chunks has been used to set a 'keep' behavior
|
* chunk will cause an error at this point unless it is to be saved.
|
||||||
* for this particular chunk, in which case that will be used. A
|
|
||||||
* critical chunk will cause an error at this point unless it is to be
|
|
||||||
* saved.
|
|
||||||
* positive: The chunk was handled, libpng will ignore/discard it.
|
* positive: The chunk was handled, libpng will ignore/discard it.
|
||||||
|
*
|
||||||
|
* See "INTERACTION WTIH USER CHUNK CALLBACKS" below for important notes about
|
||||||
|
* how this behavior will change in libpng 1.7
|
||||||
*/
|
*/
|
||||||
PNG_EXPORT(88, void, png_set_read_user_chunk_fn, (png_structrp png_ptr,
|
PNG_EXPORT(88, void, png_set_read_user_chunk_fn, (png_structrp png_ptr,
|
||||||
png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn));
|
png_voidp user_chunk_ptr, png_user_chunk_ptr read_user_chunk_fn));
|
||||||
@@ -2331,8 +2340,8 @@ PNG_EXPORT(167, void, png_set_tRNS, (png_structrp png_ptr,
|
|||||||
#ifdef PNG_sCAL_SUPPORTED
|
#ifdef PNG_sCAL_SUPPORTED
|
||||||
PNG_FP_EXPORT(168, png_uint_32, png_get_sCAL, (png_const_structrp png_ptr,
|
PNG_FP_EXPORT(168, png_uint_32, png_get_sCAL, (png_const_structrp png_ptr,
|
||||||
png_const_inforp info_ptr, int *unit, double *width, double *height))
|
png_const_inforp info_ptr, int *unit, double *width, double *height))
|
||||||
#if (defined PNG_FLOATING_ARITHMETIC_SUPPORTED) || \
|
#if defined(PNG_FLOATING_ARITHMETIC_SUPPORTED) || \
|
||||||
(defined PNG_FLOATING_POINT_SUPPORTED)
|
defined(PNG_FLOATING_POINT_SUPPORTED)
|
||||||
/* NOTE: this API is currently implemented using floating point arithmetic,
|
/* NOTE: this API is currently implemented using floating point arithmetic,
|
||||||
* consequently it can only be used on systems with floating point support.
|
* consequently it can only be used on systems with floating point support.
|
||||||
* In any case the range of values supported by png_fixed_point is small and it
|
* In any case the range of values supported by png_fixed_point is small and it
|
||||||
@@ -2372,7 +2381,7 @@ PNG_EXPORT(171, void, png_set_sCAL_s, (png_const_structrp png_ptr,
|
|||||||
* READ:
|
* READ:
|
||||||
* PNG_HANDLE_CHUNK_AS_DEFAULT:
|
* PNG_HANDLE_CHUNK_AS_DEFAULT:
|
||||||
* Known chunks: do normal libpng processing, do not keep the chunk (but
|
* Known chunks: do normal libpng processing, do not keep the chunk (but
|
||||||
* set the comments below about PNG_HANDLE_AS_UNKNOWN_SUPPORTED)
|
* see the comments below about PNG_HANDLE_AS_UNKNOWN_SUPPORTED)
|
||||||
* Unknown chunks: for a specific chunk use the global default, when used
|
* Unknown chunks: for a specific chunk use the global default, when used
|
||||||
* as the default discard the chunk data.
|
* as the default discard the chunk data.
|
||||||
* PNG_HANDLE_CHUNK_NEVER:
|
* PNG_HANDLE_CHUNK_NEVER:
|
||||||
@@ -2388,12 +2397,21 @@ PNG_EXPORT(171, void, png_set_sCAL_s, (png_const_structrp png_ptr,
|
|||||||
* to specifying "NEVER", however when "AS_DEFAULT" is used for specific chunks
|
* to specifying "NEVER", however when "AS_DEFAULT" is used for specific chunks
|
||||||
* it simply resets the behavior to the libpng default.
|
* it simply resets the behavior to the libpng default.
|
||||||
*
|
*
|
||||||
|
* INTERACTION WTIH USER CHUNK CALLBACKS:
|
||||||
* The per-chunk handling is always used when there is a png_user_chunk_ptr
|
* The per-chunk handling is always used when there is a png_user_chunk_ptr
|
||||||
* callback and the callback returns 0; the chunk is then always stored *unless*
|
* callback and the callback returns 0; the chunk is then always stored *unless*
|
||||||
* it is critical and the per-chunk setting is other than ALWAYS. Notice that
|
* it is critical and the per-chunk setting is other than ALWAYS. Notice that
|
||||||
* the global default is *not* used in this case. (In effect the per-chunk
|
* the global default is *not* used in this case. (In effect the per-chunk
|
||||||
* value is incremented to at least IF_SAFE.)
|
* value is incremented to at least IF_SAFE.)
|
||||||
*
|
*
|
||||||
|
* IMPORTANT NOTE: this behavior will change in libpng 1.7 - the global and
|
||||||
|
* per-chunk defaults will be honored. If you want to preserve the current
|
||||||
|
* behavior when your callback returns 0 you must set PNG_HANDLE_CHUNK_IF_SAFE
|
||||||
|
* as the default - if you don't do this libpng 1.6 will issue a warning.
|
||||||
|
*
|
||||||
|
* If you want unhandled unknown chunks to be discarded in libpng 1.6 and
|
||||||
|
* earlier simply return '1' (handled).
|
||||||
|
*
|
||||||
* PNG_HANDLE_AS_UNKNOWN_SUPPORTED:
|
* PNG_HANDLE_AS_UNKNOWN_SUPPORTED:
|
||||||
* If this is *not* set known chunks will always be handled by libpng and
|
* If this is *not* set known chunks will always be handled by libpng and
|
||||||
* will never be stored in the unknown chunk list. Known chunks listed to
|
* will never be stored in the unknown chunk list. Known chunks listed to
|
||||||
@@ -3088,6 +3106,24 @@ typedef struct
|
|||||||
* slight speed gain.
|
* slight speed gain.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define PNG_IMAGE_FLAG_16BIT_sRGB 0x04
|
||||||
|
/* On read if the image is a 16-bit per component image and there is no gAMA
|
||||||
|
* or sRGB chunk assume that the components are sRGB encoded. Notice that
|
||||||
|
* images output by the simplified API always have gamma information; setting
|
||||||
|
* this flag only affects the interpretation of 16-bit images from an
|
||||||
|
* external source. It is recommended that the application expose this flag
|
||||||
|
* to the user; the user can normally easily recognize the difference between
|
||||||
|
* linear and sRGB encoding. This flag has no effect on write - the data
|
||||||
|
* passed to the write APIs must have the correct encoding (as defined
|
||||||
|
* above.)
|
||||||
|
*
|
||||||
|
* If the flag is not set (the default) input 16-bit per component data is
|
||||||
|
* assumed to be linear.
|
||||||
|
*
|
||||||
|
* NOTE: the flag can only be set after the png_image_begin_read_ call,
|
||||||
|
* because that call initializes the 'flags' field.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifdef PNG_SIMPLIFIED_READ_SUPPORTED
|
#ifdef PNG_SIMPLIFIED_READ_SUPPORTED
|
||||||
/* READ APIs
|
/* READ APIs
|
||||||
* ---------
|
* ---------
|
||||||
@@ -3138,7 +3174,7 @@ PNG_EXPORT(237, int, png_image_finish_read, (png_imagep image,
|
|||||||
* PNG_FORMAT_FLAG_LINEAR *not* set.
|
* PNG_FORMAT_FLAG_LINEAR *not* set.
|
||||||
*
|
*
|
||||||
* For linear output removing the alpha channel is always done by compositing
|
* For linear output removing the alpha channel is always done by compositing
|
||||||
* on black and background is ignored.:
|
* on black and background is ignored.
|
||||||
*
|
*
|
||||||
* colormap must be supplied when PNG_FORMAT_FLAG_COLORMAP is set. It must
|
* colormap must be supplied when PNG_FORMAT_FLAG_COLORMAP is set. It must
|
||||||
* be at least the size (in bytes) returned by PNG_IMAGE_COLORMAP_SIZE.
|
* be at least the size (in bytes) returned by PNG_IMAGE_COLORMAP_SIZE.
|
||||||
@@ -3153,6 +3189,7 @@ PNG_EXPORT(238, void, png_image_free, (png_imagep image));
|
|||||||
#endif /* PNG_SIMPLIFIED_READ_SUPPORTED */
|
#endif /* PNG_SIMPLIFIED_READ_SUPPORTED */
|
||||||
|
|
||||||
#ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED
|
#ifdef PNG_SIMPLIFIED_WRITE_SUPPORTED
|
||||||
|
#ifdef PNG_STDIO_SUPPORTED
|
||||||
/* WRITE APIS
|
/* WRITE APIS
|
||||||
* ----------
|
* ----------
|
||||||
* For write you must initialize a png_image structure to describe the image to
|
* For write you must initialize a png_image structure to describe the image to
|
||||||
@@ -3195,6 +3232,7 @@ PNG_EXPORT(240, int, png_image_write_to_stdio, (png_imagep image, FILE *file,
|
|||||||
*
|
*
|
||||||
* Note that the write API does not support interlacing or sub-8-bit pixels.
|
* Note that the write API does not support interlacing or sub-8-bit pixels.
|
||||||
*/
|
*/
|
||||||
|
#endif /* PNG_STDIO_SUPPORTED */
|
||||||
#endif /* PNG_SIMPLIFIED_WRITE_SUPPORTED */
|
#endif /* PNG_SIMPLIFIED_WRITE_SUPPORTED */
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* END OF SIMPLIFIED API
|
* END OF SIMPLIFIED API
|
||||||
@@ -3209,6 +3247,48 @@ PNG_EXPORT(243, int, png_get_palette_max, (png_const_structp png_ptr,
|
|||||||
# endif
|
# endif
|
||||||
#endif /* CHECK_FOR_INVALID_INDEX */
|
#endif /* CHECK_FOR_INVALID_INDEX */
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* IMPLEMENTATION OPTIONS
|
||||||
|
*******************************************************************************
|
||||||
|
*
|
||||||
|
* Support for arbitrary implementation-specific optimizations. The API allows
|
||||||
|
* particular options to be turned on or off. 'Option' is the number of the
|
||||||
|
* option and 'onoff' is 0 (off) or non-0 (on). The value returned is given
|
||||||
|
* by the PNG_OPTION_ defines below.
|
||||||
|
*
|
||||||
|
* HARDWARE: normally hardware capabilites, such as the Intel SSE instructions,
|
||||||
|
* are detected at run time, however sometimes it may be impossible
|
||||||
|
* to do this in user mode, in which case it is necessary to discover
|
||||||
|
* the capabilities in an OS specific way. Such capabilities are
|
||||||
|
* listed here when libpng has support for them and must be turned
|
||||||
|
* ON by the application if present.
|
||||||
|
*
|
||||||
|
* SOFTWARE: sometimes software optimizations actually result in performance
|
||||||
|
* decrease on some architectures or systems, or with some sets of
|
||||||
|
* PNG images. 'Software' options allow such optimizations to be
|
||||||
|
* selected at run time.
|
||||||
|
*/
|
||||||
|
#ifdef PNG_SET_OPTION_SUPPORTED
|
||||||
|
#ifdef PNG_ARM_NEON_API_SUPPORTED
|
||||||
|
# define PNG_ARM_NEON 0 /* HARDWARE: ARM Neon SIMD instructions supported */
|
||||||
|
#endif
|
||||||
|
#define PNG_MAXIMUM_INFLATE_WINDOW 2 /* SOFTWARE: force maximum window */
|
||||||
|
#define PNG_OPTION_NEXT 4 /* Next option - numbers must be even */
|
||||||
|
|
||||||
|
/* Return values: NOTE: there are four values and 'off' is *not* zero */
|
||||||
|
#define PNG_OPTION_UNSET 0 /* Unset - defaults to off */
|
||||||
|
#define PNG_OPTION_INVALID 1 /* Option number out of range */
|
||||||
|
#define PNG_OPTION_OFF 2
|
||||||
|
#define PNG_OPTION_ON 3
|
||||||
|
|
||||||
|
PNG_EXPORT(244, int, png_set_option, (png_structrp png_ptr, int option,
|
||||||
|
int onoff));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* END OF HARDWARE OPTIONS
|
||||||
|
******************************************************************************/
|
||||||
|
|
||||||
/* Maintainer: Put new public prototypes here ^, in libpng.3, and project
|
/* Maintainer: Put new public prototypes here ^, in libpng.3, and project
|
||||||
* defs, scripts/pnglibconf.h, and scripts/pnglibconf.h.prebuilt
|
* defs, scripts/pnglibconf.h, and scripts/pnglibconf.h.prebuilt
|
||||||
*/
|
*/
|
||||||
@@ -3218,7 +3298,7 @@ PNG_EXPORT(243, int, png_get_palette_max, (png_const_structp png_ptr,
|
|||||||
* scripts/symbols.def as well.
|
* scripts/symbols.def as well.
|
||||||
*/
|
*/
|
||||||
#ifdef PNG_EXPORT_LAST_ORDINAL
|
#ifdef PNG_EXPORT_LAST_ORDINAL
|
||||||
PNG_EXPORT_LAST_ORDINAL(243);
|
PNG_EXPORT_LAST_ORDINAL(244);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngconf.h - machine configurable file for libpng
|
/* pngconf.h - machine configurable file for libpng
|
||||||
*
|
*
|
||||||
* libpng version 1.6.0 - February 14, 2013
|
* libpng version 1.6.3 - July 18, 2013
|
||||||
*
|
*
|
||||||
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
@@ -218,7 +218,7 @@
|
|||||||
# define PNGCAPI __watcall
|
# define PNGCAPI __watcall
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# if defined(__GNUC__) || (defined (_MSC_VER) && (_MSC_VER >= 800))
|
# if defined(__GNUC__) || (defined(_MSC_VER) && (_MSC_VER >= 800))
|
||||||
# define PNGCAPI __cdecl
|
# define PNGCAPI __cdecl
|
||||||
# if PNG_API_RULE == 1
|
# if PNG_API_RULE == 1
|
||||||
/* If this line results in an error __stdcall is not understood and
|
/* If this line results in an error __stdcall is not understood and
|
||||||
@@ -238,6 +238,7 @@
|
|||||||
# define PNGAPI _stdcall
|
# define PNGAPI _stdcall
|
||||||
# endif
|
# endif
|
||||||
# endif /* compiler/api */
|
# endif /* compiler/api */
|
||||||
|
|
||||||
/* NOTE: PNGCBAPI always defaults to PNGCAPI. */
|
/* NOTE: PNGCBAPI always defaults to PNGCAPI. */
|
||||||
|
|
||||||
# if defined(PNGAPI) && !defined(PNG_USER_PRIVATEBUILD)
|
# if defined(PNGAPI) && !defined(PNG_USER_PRIVATEBUILD)
|
||||||
|
|||||||
10
pngerror.c
10
pngerror.c
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngerror.c - stub functions for i/o and memory allocation
|
/* pngerror.c - stub functions for i/o and memory allocation
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.0 [February 14, 2013]
|
* Last changed in libpng 1.6.1 [March 28, 2013]
|
||||||
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
@@ -516,7 +516,7 @@ png_chunk_report(png_const_structrp png_ptr, png_const_charp message, int error)
|
|||||||
/* This is always supported, but for just read or just write it
|
/* This is always supported, but for just read or just write it
|
||||||
* unconditionally does the right thing.
|
* unconditionally does the right thing.
|
||||||
*/
|
*/
|
||||||
# if (defined PNG_READ_SUPPORTED) && (defined PNG_WRITE_SUPPORTED)
|
# if defined(PNG_READ_SUPPORTED) && defined(PNG_WRITE_SUPPORTED)
|
||||||
if (png_ptr->mode & PNG_IS_READ_STRUCT)
|
if (png_ptr->mode & PNG_IS_READ_STRUCT)
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
@@ -530,7 +530,7 @@ png_chunk_report(png_const_structrp png_ptr, png_const_charp message, int error)
|
|||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
# if (defined PNG_READ_SUPPORTED) && (defined PNG_WRITE_SUPPORTED)
|
# if defined(PNG_READ_SUPPORTED) && defined(PNG_WRITE_SUPPORTED)
|
||||||
else if (!(png_ptr->mode & PNG_IS_READ_STRUCT))
|
else if (!(png_ptr->mode & PNG_IS_READ_STRUCT))
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
@@ -844,8 +844,8 @@ png_set_strip_error_numbers(png_structrp png_ptr, png_uint_32 strip_mode)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined PNG_SIMPLIFIED_READ_SUPPORTED ||\
|
#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) ||\
|
||||||
defined PNG_SIMPLIFIED_WRITE_SUPPORTED
|
defined(PNG_SIMPLIFIED_WRITE_SUPPORTED)
|
||||||
/* Currently the above both depend on SETJMP_SUPPORTED, however it would be
|
/* Currently the above both depend on SETJMP_SUPPORTED, however it would be
|
||||||
* possible to implement without setjmp support just so long as there is some
|
* possible to implement without setjmp support just so long as there is some
|
||||||
* way to handle the error return here:
|
* way to handle the error return here:
|
||||||
|
|||||||
18
pngget.c
18
pngget.c
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngget.c - retrieval of values from info struct
|
/* pngget.c - retrieval of values from info struct
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.0 [February 14, 2013]
|
* Last changed in libpng 1.6.1 [March 28, 2013]
|
||||||
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
@@ -552,14 +552,14 @@ png_get_cHRM_XYZ(png_const_structrp png_ptr, png_const_inforp info_ptr,
|
|||||||
*green_Z = png_float(png_ptr,
|
*green_Z = png_float(png_ptr,
|
||||||
info_ptr->colorspace.end_points_XYZ.green_Z, "cHRM green Z");
|
info_ptr->colorspace.end_points_XYZ.green_Z, "cHRM green Z");
|
||||||
if (blue_X != NULL)
|
if (blue_X != NULL)
|
||||||
*blue_X = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.blue_X,
|
*blue_X = png_float(png_ptr,
|
||||||
"cHRM blue X");
|
info_ptr->colorspace.end_points_XYZ.blue_X, "cHRM blue X");
|
||||||
if (blue_Y != NULL)
|
if (blue_Y != NULL)
|
||||||
*blue_Y = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.blue_Y,
|
*blue_Y = png_float(png_ptr,
|
||||||
"cHRM blue Y");
|
info_ptr->colorspace.end_points_XYZ.blue_Y, "cHRM blue Y");
|
||||||
if (blue_Z != NULL)
|
if (blue_Z != NULL)
|
||||||
*blue_Z = png_float(png_ptr, info_ptr->colorspace.end_points_XYZ.blue_Z,
|
*blue_Z = png_float(png_ptr,
|
||||||
"cHRM blue Z");
|
info_ptr->colorspace.end_points_XYZ.blue_Z, "cHRM blue Z");
|
||||||
return (PNG_INFO_cHRM);
|
return (PNG_INFO_cHRM);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -844,8 +844,8 @@ png_get_pCAL(png_const_structrp png_ptr, png_inforp info_ptr,
|
|||||||
|
|
||||||
#ifdef PNG_sCAL_SUPPORTED
|
#ifdef PNG_sCAL_SUPPORTED
|
||||||
# ifdef PNG_FIXED_POINT_SUPPORTED
|
# ifdef PNG_FIXED_POINT_SUPPORTED
|
||||||
# if (defined PNG_FLOATING_ARITHMETIC_SUPPORTED) || \
|
# if defined(PNG_FLOATING_ARITHMETIC_SUPPORTED) || \
|
||||||
(defined PNG_FLOATING_POINT_SUPPORTED)
|
defined(PNG_FLOATING_POINT_SUPPORTED)
|
||||||
png_uint_32 PNGAPI
|
png_uint_32 PNGAPI
|
||||||
png_get_sCAL_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
|
png_get_sCAL_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
|
||||||
int *unit, png_fixed_point *width, png_fixed_point *height)
|
int *unit, png_fixed_point *width, png_fixed_point *height)
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
|
|
||||||
/* pnginfo.h - header file for PNG reference library
|
/* pnginfo.h - header file for PNG reference library
|
||||||
*
|
*
|
||||||
* Copyright (c) 1998-2011 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.5.0 [January 6, 2011]
|
* Last changed in libpng 1.6.1 [March 28, 2013]
|
||||||
*
|
*
|
||||||
* This code is released under the libpng license.
|
* This code is released under the libpng license.
|
||||||
* For conditions of distribution and use, see the disclaimer
|
* For conditions of distribution and use, see the disclaimer
|
||||||
@@ -88,7 +88,7 @@ struct png_info_def
|
|||||||
* and initialize the appropriate fields below.
|
* and initialize the appropriate fields below.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if defined PNG_COLORSPACE_SUPPORTED || defined PNG_GAMMA_SUPPORTED
|
#if defined(PNG_COLORSPACE_SUPPORTED) || defined(PNG_GAMMA_SUPPORTED)
|
||||||
/* png_colorspace only contains 'flags' if neither GAMMA or COLORSPACE are
|
/* png_colorspace only contains 'flags' if neither GAMMA or COLORSPACE are
|
||||||
* defined. When COLORSPACE is switched on all the colorspace-defining
|
* defined. When COLORSPACE is switched on all the colorspace-defining
|
||||||
* chunks should be enabled, when GAMMA is switched on all the gamma-defining
|
* chunks should be enabled, when GAMMA is switched on all the gamma-defining
|
||||||
|
|||||||
@@ -151,7 +151,7 @@ png_process_some_data(png_structrp png_ptr, png_inforp info_ptr)
|
|||||||
void /* PRIVATE */
|
void /* PRIVATE */
|
||||||
png_push_read_sig(png_structrp png_ptr, png_inforp info_ptr)
|
png_push_read_sig(png_structrp png_ptr, png_inforp info_ptr)
|
||||||
{
|
{
|
||||||
png_size_t num_checked = png_ptr->sig_bytes,
|
png_size_t num_checked = png_ptr->sig_bytes, /* SAFE, does not exceed 8 */
|
||||||
num_to_check = 8 - num_checked;
|
num_to_check = 8 - num_checked;
|
||||||
|
|
||||||
if (png_ptr->buffer_size < num_to_check)
|
if (png_ptr->buffer_size < num_to_check)
|
||||||
|
|||||||
249
pngpriv.h
249
pngpriv.h
@@ -6,7 +6,7 @@
|
|||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.0 [February 14, 2013]
|
* Last changed in libpng 1.6.3 [July 18, 2013]
|
||||||
*
|
*
|
||||||
* This code is released under the libpng license.
|
* This code is released under the libpng license.
|
||||||
* For conditions of distribution and use, see the disclaimer
|
* For conditions of distribution and use, see the disclaimer
|
||||||
@@ -39,9 +39,11 @@
|
|||||||
*/
|
*/
|
||||||
#define _POSIX_SOURCE 1 /* Just the POSIX 1003.1 and C89 APIs */
|
#define _POSIX_SOURCE 1 /* Just the POSIX 1003.1 and C89 APIs */
|
||||||
|
|
||||||
|
#ifndef PNG_VERSION_INFO_ONLY
|
||||||
/* Standard library headers not required by png.h: */
|
/* Standard library headers not required by png.h: */
|
||||||
#include <stdlib.h>
|
# include <stdlib.h>
|
||||||
#include <string.h>
|
# include <string.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#define PNGLIB_BUILD /*libpng is being built, not used*/
|
#define PNGLIB_BUILD /*libpng is being built, not used*/
|
||||||
|
|
||||||
@@ -54,7 +56,7 @@
|
|||||||
* configure generated config.h. Libpng is expected to compile without *any*
|
* configure generated config.h. Libpng is expected to compile without *any*
|
||||||
* special build system support on a reasonably ANSI-C compliant system.
|
* special build system support on a reasonably ANSI-C compliant system.
|
||||||
*/
|
*/
|
||||||
#if (defined HAVE_CONFIG_H) && !(defined PNG_NO_CONFIG_H)
|
#if defined(HAVE_CONFIG_H) && !defined(PNG_NO_CONFIG_H)
|
||||||
# include <config.h>
|
# include <config.h>
|
||||||
|
|
||||||
/* Pick up the definition of 'restrict' from config.h if it was read: */
|
/* Pick up the definition of 'restrict' from config.h if it was read: */
|
||||||
@@ -71,7 +73,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Local renames may change non-exported API functions from png.h */
|
/* Local renames may change non-exported API functions from png.h */
|
||||||
#if defined PNG_PREFIX && !defined PNGPREFIX_H
|
#if defined(PNG_PREFIX) && !defined(PNGPREFIX_H)
|
||||||
# include "pngprefix.h"
|
# include "pngprefix.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -86,6 +88,46 @@
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Compile time options.
|
||||||
|
* =====================
|
||||||
|
* In a multi-arch build the compiler may compile the code several times for the
|
||||||
|
* same object module, producing different binaries for different architectures.
|
||||||
|
* When this happens configure-time setting of the target host options cannot be
|
||||||
|
* done and this interferes with the handling of the ARM NEON optimizations, and
|
||||||
|
* possibly other similar optimizations. Put additional tests here; in general
|
||||||
|
* this is needed when the same option can be changed at both compile time and
|
||||||
|
* run time depending on the target OS (i.e. iOS vs Android.)
|
||||||
|
*
|
||||||
|
* NOTE: symbol prefixing does not pass $(CFLAGS) to the preprocessor, because
|
||||||
|
* this is not possible with certain compilers (Oracle SUN OS CC), as a result
|
||||||
|
* it is necessary to ensure that all extern functions that *might* be used
|
||||||
|
* regardless of $(CFLAGS) get declared in this file. The test on __ARM_NEON__
|
||||||
|
* below is one example of this behavior because it is controlled by the
|
||||||
|
* presence or not of -mfpu=neon on the GCC command line, it is possible to do
|
||||||
|
* this in $(CC), e.g. "CC=gcc -mfpu=neon", but people who build libpng rarely
|
||||||
|
* do this.
|
||||||
|
*/
|
||||||
|
#ifndef PNG_ARM_NEON_OPT
|
||||||
|
/* ARM NEON optimizations are being controlled by the compiler settings,
|
||||||
|
* typically the target FPU. If the FPU has been set to NEON (-mfpu=neon
|
||||||
|
* with GCC) then the compiler will define __ARM_NEON__ and we can rely
|
||||||
|
* unconditionally on NEON instructions not crashing, otherwise we must
|
||||||
|
* disable use of NEON instructions:
|
||||||
|
*/
|
||||||
|
# ifdef __ARM_NEON__
|
||||||
|
# define PNG_ARM_NEON_OPT 2
|
||||||
|
# else
|
||||||
|
# define PNG_ARM_NEON_OPT 0
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if PNG_ARM_NEON_OPT > 0
|
||||||
|
/* NEON optimizations are to be at least considered by libpng, so enable the
|
||||||
|
* callbacks to do this.
|
||||||
|
*/
|
||||||
|
# define PNG_FILTER_OPTIMIZATIONS png_init_filter_functions_neon
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Is this a build of a DLL where compilation of the object modules requires
|
/* Is this a build of a DLL where compilation of the object modules requires
|
||||||
* different preprocessor settings to those required for a simple library? If
|
* different preprocessor settings to those required for a simple library? If
|
||||||
* so PNG_BUILD_DLL must be set.
|
* so PNG_BUILD_DLL must be set.
|
||||||
@@ -177,10 +219,12 @@
|
|||||||
# ifndef PNG_FLOATING_POINT_SUPPORTED
|
# ifndef PNG_FLOATING_POINT_SUPPORTED
|
||||||
# define PNG_FP_EXPORT(ordinal, type, name, args)\
|
# define PNG_FP_EXPORT(ordinal, type, name, args)\
|
||||||
PNG_INTERNAL_FUNCTION(type, name, args, PNG_EMPTY);
|
PNG_INTERNAL_FUNCTION(type, name, args, PNG_EMPTY);
|
||||||
typedef struct png_incomplete png_double;
|
# ifndef PNG_VERSION_INFO_ONLY
|
||||||
typedef png_double* png_doublep;
|
typedef struct png_incomplete png_double;
|
||||||
typedef const png_double* png_const_doublep;
|
typedef png_double* png_doublep;
|
||||||
typedef png_double** png_doublepp;
|
typedef const png_double* png_const_doublep;
|
||||||
|
typedef png_double** png_doublepp;
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#ifndef PNG_FIXED_EXPORT
|
#ifndef PNG_FIXED_EXPORT
|
||||||
@@ -191,8 +235,6 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "png.h"
|
#include "png.h"
|
||||||
#include "pngstruct.h"
|
|
||||||
#include "pnginfo.h"
|
|
||||||
|
|
||||||
/* pngconf.h does not set PNG_DLL_EXPORT unless it is required, so: */
|
/* pngconf.h does not set PNG_DLL_EXPORT unless it is required, so: */
|
||||||
#ifndef PNG_DLL_EXPORT
|
#ifndef PNG_DLL_EXPORT
|
||||||
@@ -238,11 +280,6 @@
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* This is used for 16 bit gamma tables -- only the top level pointers are
|
|
||||||
* const; this could be changed:
|
|
||||||
*/
|
|
||||||
typedef const png_uint_16p * png_const_uint_16pp;
|
|
||||||
|
|
||||||
/* Moved to pngpriv.h at libpng-1.5.0 */
|
/* Moved to pngpriv.h at libpng-1.5.0 */
|
||||||
/* NOTE: some of these may have been used in external applications as
|
/* NOTE: some of these may have been used in external applications as
|
||||||
* these definitions were exposed in pngconf.h prior to 1.5.
|
* these definitions were exposed in pngconf.h prior to 1.5.
|
||||||
@@ -331,6 +368,7 @@ typedef const png_uint_16p * png_const_uint_16pp;
|
|||||||
# define PNGFAPI /* PRIVATE */
|
# define PNGFAPI /* PRIVATE */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef PNG_VERSION_INFO_ONLY
|
||||||
/* Other defines specific to compilers can go here. Try to keep
|
/* Other defines specific to compilers can go here. Try to keep
|
||||||
* them inside an appropriate ifdef/endif pair for portability.
|
* them inside an appropriate ifdef/endif pair for portability.
|
||||||
*/
|
*/
|
||||||
@@ -375,6 +413,7 @@ typedef const png_uint_16p * png_const_uint_16pp;
|
|||||||
defined(_WIN32) || defined(__WIN32__)
|
defined(_WIN32) || defined(__WIN32__)
|
||||||
# include <windows.h> /* defines _WINDOWS_ macro */
|
# include <windows.h> /* defines _WINDOWS_ macro */
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* PNG_VERSION_INFO_ONLY */
|
||||||
|
|
||||||
/* Moved here around 1.5.0beta36 from pngconf.h */
|
/* Moved here around 1.5.0beta36 from pngconf.h */
|
||||||
/* Users may want to use these so they are not private. Any library
|
/* Users may want to use these so they are not private. Any library
|
||||||
@@ -553,26 +592,6 @@ typedef const png_uint_16p * png_const_uint_16pp;
|
|||||||
abs((int)((c1).green) - (int)((c2).green)) + \
|
abs((int)((c1).green) - (int)((c2).green)) + \
|
||||||
abs((int)((c1).blue) - (int)((c2).blue)))
|
abs((int)((c1).blue) - (int)((c2).blue)))
|
||||||
|
|
||||||
/* Added to libpng-1.5.7: sRGB conversion tables */
|
|
||||||
#if defined PNG_SIMPLIFIED_READ_SUPPORTED ||\
|
|
||||||
defined PNG_SIMPLIFIED_WRITE_SUPPORTED
|
|
||||||
#ifdef PNG_SIMPLIFIED_READ_SUPPORTED
|
|
||||||
PNG_INTERNAL_DATA(const png_uint_16, png_sRGB_table, [256]);
|
|
||||||
/* Convert from an sRGB encoded value 0..255 to a 16-bit linear value,
|
|
||||||
* 0..65535. This table gives the closest 16-bit answers (no errors).
|
|
||||||
*/
|
|
||||||
#endif
|
|
||||||
|
|
||||||
PNG_INTERNAL_DATA(const png_uint_16, png_sRGB_base, [512]);
|
|
||||||
PNG_INTERNAL_DATA(const png_byte, png_sRGB_delta, [512]);
|
|
||||||
|
|
||||||
#define PNG_sRGB_FROM_LINEAR(linear) ((png_byte)((png_sRGB_base[(linear)>>15] +\
|
|
||||||
((((linear)&0x7fff)*png_sRGB_delta[(linear)>>15])>>12)) >> 8))
|
|
||||||
/* Given a value 'linear' in the range 0..255*65535 calculate the 8-bit sRGB
|
|
||||||
* encoded value with maximum error 0.646365. Note that the input is not a
|
|
||||||
* 16-bit value; it has been multiplied by 255! */
|
|
||||||
#endif /* PNG_SIMPLIFIED_READ/WRITE */
|
|
||||||
|
|
||||||
/* Added to libpng-1.6.0: scale a 16-bit value in the range 0..65535 to 0..255
|
/* Added to libpng-1.6.0: scale a 16-bit value in the range 0..65535 to 0..255
|
||||||
* by dividing by 257 *with rounding*. This macro is exact for the given range.
|
* by dividing by 257 *with rounding*. This macro is exact for the given range.
|
||||||
* See the discourse in pngrtran.c png_do_scale_16_to_8. The values in the
|
* See the discourse in pngrtran.c png_do_scale_16_to_8. The values in the
|
||||||
@@ -651,37 +670,64 @@ PNG_INTERNAL_DATA(const png_byte, png_sRGB_delta, [512]);
|
|||||||
* architectures where (int) is only 16 bits.
|
* architectures where (int) is only 16 bits.
|
||||||
*/
|
*/
|
||||||
#define PNG_32b(b,s) ((png_uint_32)(b) << (s))
|
#define PNG_32b(b,s) ((png_uint_32)(b) << (s))
|
||||||
#define PNG_CHUNK(b1,b2,b3,b4) \
|
#define PNG_U32(b1,b2,b3,b4) \
|
||||||
(PNG_32b(b1,24) | PNG_32b(b2,16) | PNG_32b(b3,8) | PNG_32b(b4,0))
|
(PNG_32b(b1,24) | PNG_32b(b2,16) | PNG_32b(b3,8) | PNG_32b(b4,0))
|
||||||
|
|
||||||
#define png_IHDR PNG_CHUNK( 73, 72, 68, 82)
|
/* Constants for known chunk types.
|
||||||
#define png_IDAT PNG_CHUNK( 73, 68, 65, 84)
|
*
|
||||||
#define png_IEND PNG_CHUNK( 73, 69, 78, 68)
|
* MAINTAINERS: If you need to add a chunk, define the name here.
|
||||||
#define png_PLTE PNG_CHUNK( 80, 76, 84, 69)
|
* For historical reasons these constants have the form png_<name>; i.e.
|
||||||
#define png_bKGD PNG_CHUNK( 98, 75, 71, 68)
|
* the prefix is lower case. Please use decimal values as the parameters to
|
||||||
#define png_cHRM PNG_CHUNK( 99, 72, 82, 77)
|
* match the ISO PNG specification and to avoid relying on the C locale
|
||||||
#define png_gAMA PNG_CHUNK(103, 65, 77, 65)
|
* interpretation of character values. Please keep the list sorted.
|
||||||
#define png_hIST PNG_CHUNK(104, 73, 83, 84)
|
*
|
||||||
#define png_iCCP PNG_CHUNK(105, 67, 67, 80)
|
* Notice that PNG_U32 is used to define a 32-bit value for the 4 byte chunk
|
||||||
#define png_iTXt PNG_CHUNK(105, 84, 88, 116)
|
* type. In fact the specification does not express chunk types this way,
|
||||||
#define png_oFFs PNG_CHUNK(111, 70, 70, 115)
|
* however using a 32-bit value means that the chunk type can be read from the
|
||||||
#define png_pCAL PNG_CHUNK(112, 67, 65, 76)
|
* stream using exactly the same code as used for a 32-bit unsigned value and
|
||||||
#define png_sCAL PNG_CHUNK(115, 67, 65, 76)
|
* can be examined far more efficiently (using one arithmetic compare).
|
||||||
#define png_pHYs PNG_CHUNK(112, 72, 89, 115)
|
*
|
||||||
#define png_sBIT PNG_CHUNK(115, 66, 73, 84)
|
* Prior to 1.5.6 the chunk type constants were expressed as C strings. The
|
||||||
#define png_sPLT PNG_CHUNK(115, 80, 76, 84)
|
* libpng API still uses strings for 'unknown' chunks and a macro,
|
||||||
#define png_sRGB PNG_CHUNK(115, 82, 71, 66)
|
* PNG_STRING_FROM_CHUNK, allows a string to be generated if required. Notice
|
||||||
#define png_sTER PNG_CHUNK(115, 84, 69, 82)
|
* that for portable code numeric values must still be used; the string "IHDR"
|
||||||
#define png_tEXt PNG_CHUNK(116, 69, 88, 116)
|
* is not portable and neither is PNG_U32('I', 'H', 'D', 'R').
|
||||||
#define png_tIME PNG_CHUNK(116, 73, 77, 69)
|
*
|
||||||
#define png_tRNS PNG_CHUNK(116, 82, 78, 83)
|
* In 1.7.0 the definitions will be made public in png.h to avoid having to
|
||||||
#define png_zTXt PNG_CHUNK(122, 84, 88, 116)
|
* duplicate the same definitions in application code.
|
||||||
|
*/
|
||||||
|
#define png_IDAT PNG_U32( 73, 68, 65, 84)
|
||||||
|
#define png_IEND PNG_U32( 73, 69, 78, 68)
|
||||||
|
#define png_IHDR PNG_U32( 73, 72, 68, 82)
|
||||||
|
#define png_PLTE PNG_U32( 80, 76, 84, 69)
|
||||||
|
#define png_bKGD PNG_U32( 98, 75, 71, 68)
|
||||||
|
#define png_cHRM PNG_U32( 99, 72, 82, 77)
|
||||||
|
#define png_fRAc PNG_U32(102, 82, 65, 99) /* registered, not defined */
|
||||||
|
#define png_gAMA PNG_U32(103, 65, 77, 65)
|
||||||
|
#define png_gIFg PNG_U32(103, 73, 70, 103)
|
||||||
|
#define png_gIFt PNG_U32(103, 73, 70, 116) /* deprecated */
|
||||||
|
#define png_gIFx PNG_U32(103, 73, 70, 120)
|
||||||
|
#define png_hIST PNG_U32(104, 73, 83, 84)
|
||||||
|
#define png_iCCP PNG_U32(105, 67, 67, 80)
|
||||||
|
#define png_iTXt PNG_U32(105, 84, 88, 116)
|
||||||
|
#define png_oFFs PNG_U32(111, 70, 70, 115)
|
||||||
|
#define png_pCAL PNG_U32(112, 67, 65, 76)
|
||||||
|
#define png_pHYs PNG_U32(112, 72, 89, 115)
|
||||||
|
#define png_sBIT PNG_U32(115, 66, 73, 84)
|
||||||
|
#define png_sCAL PNG_U32(115, 67, 65, 76)
|
||||||
|
#define png_sPLT PNG_U32(115, 80, 76, 84)
|
||||||
|
#define png_sRGB PNG_U32(115, 82, 71, 66)
|
||||||
|
#define png_sTER PNG_U32(115, 84, 69, 82)
|
||||||
|
#define png_tEXt PNG_U32(116, 69, 88, 116)
|
||||||
|
#define png_tIME PNG_U32(116, 73, 77, 69)
|
||||||
|
#define png_tRNS PNG_U32(116, 82, 78, 83)
|
||||||
|
#define png_zTXt PNG_U32(122, 84, 88, 116)
|
||||||
|
|
||||||
/* The following will work on (signed char*) strings, whereas the get_uint_32
|
/* The following will work on (signed char*) strings, whereas the get_uint_32
|
||||||
* macro will fail on top-bit-set values because of the sign extension.
|
* macro will fail on top-bit-set values because of the sign extension.
|
||||||
*/
|
*/
|
||||||
#define PNG_CHUNK_FROM_STRING(s)\
|
#define PNG_CHUNK_FROM_STRING(s)\
|
||||||
PNG_CHUNK(0xff&(s)[0], 0xff&(s)[1], 0xff&(s)[2], 0xff&(s)[3])
|
PNG_U32(0xff&(s)[0], 0xff&(s)[1], 0xff&(s)[2], 0xff&(s)[3])
|
||||||
|
|
||||||
/* This uses (char), not (png_byte) to avoid warnings on systems where (char) is
|
/* This uses (char), not (png_byte) to avoid warnings on systems where (char) is
|
||||||
* signed and the argument is a (char[]) This macro will fail miserably on
|
* signed and the argument is a (char[]) This macro will fail miserably on
|
||||||
@@ -696,8 +742,8 @@ PNG_INTERNAL_DATA(const png_byte, png_sRGB_delta, [512]);
|
|||||||
(void)(PNG_STRING_FROM_CHUNK(s,c), ((char*)(s))[4] = 0)
|
(void)(PNG_STRING_FROM_CHUNK(s,c), ((char*)(s))[4] = 0)
|
||||||
|
|
||||||
/* Test on flag values as defined in the spec (section 5.4): */
|
/* Test on flag values as defined in the spec (section 5.4): */
|
||||||
#define PNG_CHUNK_ANCILLIARY(c) (1 & ((c) >> 29))
|
#define PNG_CHUNK_ANCILLARY(c) (1 & ((c) >> 29))
|
||||||
#define PNG_CHUNK_CRITICAL(c) (!PNG_CHUNK_ANCILLIARY(c))
|
#define PNG_CHUNK_CRITICAL(c) (!PNG_CHUNK_ANCILLARY(c))
|
||||||
#define PNG_CHUNK_PRIVATE(c) (1 & ((c) >> 21))
|
#define PNG_CHUNK_PRIVATE(c) (1 & ((c) >> 21))
|
||||||
#define PNG_CHUNK_RESERVED(c) (1 & ((c) >> 13))
|
#define PNG_CHUNK_RESERVED(c) (1 & ((c) >> 13))
|
||||||
#define PNG_CHUNK_SAFE_TO_COPY(c) (1 & ((c) >> 5))
|
#define PNG_CHUNK_SAFE_TO_COPY(c) (1 & ((c) >> 5))
|
||||||
@@ -707,6 +753,57 @@ PNG_INTERNAL_DATA(const png_byte, png_sRGB_delta, [512]);
|
|||||||
#define PNG_GAMMA_MAC_INVERSE 65909
|
#define PNG_GAMMA_MAC_INVERSE 65909
|
||||||
#define PNG_GAMMA_sRGB_INVERSE 45455
|
#define PNG_GAMMA_sRGB_INVERSE 45455
|
||||||
|
|
||||||
|
/* Almost everything below is C specific; the #defines above can be used in
|
||||||
|
* non-C code (so long as it is C-preprocessed) the rest of this stuff cannot.
|
||||||
|
*/
|
||||||
|
#ifndef PNG_VERSION_INFO_ONLY
|
||||||
|
|
||||||
|
#include "pngstruct.h"
|
||||||
|
#include "pnginfo.h"
|
||||||
|
|
||||||
|
/* Validate the include paths - the include path used to generate pnglibconf.h
|
||||||
|
* must match that used in the build, or we must be using pnglibconf.h.prebuilt:
|
||||||
|
*/
|
||||||
|
#if PNG_ZLIB_VERNUM != 0 && PNG_ZLIB_VERNUM != ZLIB_VERNUM
|
||||||
|
# error ZLIB_VERNUM != PNG_ZLIB_VERNUM \
|
||||||
|
"-I (include path) error: see the notes in pngpriv.h"
|
||||||
|
/* This means that when pnglibconf.h was built the copy of zlib.h that it
|
||||||
|
* used is not the same as the one being used here. Because the build of
|
||||||
|
* libpng makes decisions to use inflateInit2 and inflateReset2 based on the
|
||||||
|
* zlib version number and because this affects handling of certain broken
|
||||||
|
* PNG files the -I directives must match.
|
||||||
|
*
|
||||||
|
* The most likely explanation is that you passed a -I in CFLAGS, this will
|
||||||
|
* not work; all the preprocessor directories and in particular all the -I
|
||||||
|
* directives must be in CPPFLAGS.
|
||||||
|
*/
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* This is used for 16 bit gamma tables -- only the top level pointers are
|
||||||
|
* const; this could be changed:
|
||||||
|
*/
|
||||||
|
typedef const png_uint_16p * png_const_uint_16pp;
|
||||||
|
|
||||||
|
/* Added to libpng-1.5.7: sRGB conversion tables */
|
||||||
|
#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) ||\
|
||||||
|
defined(PNG_SIMPLIFIED_WRITE_SUPPORTED)
|
||||||
|
#ifdef PNG_SIMPLIFIED_READ_SUPPORTED
|
||||||
|
PNG_INTERNAL_DATA(const png_uint_16, png_sRGB_table, [256]);
|
||||||
|
/* Convert from an sRGB encoded value 0..255 to a 16-bit linear value,
|
||||||
|
* 0..65535. This table gives the closest 16-bit answers (no errors).
|
||||||
|
*/
|
||||||
|
#endif
|
||||||
|
|
||||||
|
PNG_INTERNAL_DATA(const png_uint_16, png_sRGB_base, [512]);
|
||||||
|
PNG_INTERNAL_DATA(const png_byte, png_sRGB_delta, [512]);
|
||||||
|
|
||||||
|
#define PNG_sRGB_FROM_LINEAR(linear) ((png_byte)((png_sRGB_base[(linear)>>15] +\
|
||||||
|
((((linear)&0x7fff)*png_sRGB_delta[(linear)>>15])>>12)) >> 8))
|
||||||
|
/* Given a value 'linear' in the range 0..255*65535 calculate the 8-bit sRGB
|
||||||
|
* encoded value with maximum error 0.646365. Note that the input is not a
|
||||||
|
* 16-bit value; it has been multiplied by 255! */
|
||||||
|
#endif /* PNG_SIMPLIFIED_READ/WRITE */
|
||||||
|
|
||||||
|
|
||||||
/* Inhibit C++ name-mangling for libpng functions but not for system calls. */
|
/* Inhibit C++ name-mangling for libpng functions but not for system calls. */
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
@@ -757,8 +854,8 @@ PNG_INTERNAL_FUNCTION(int,png_user_version_check,(png_structrp png_ptr,
|
|||||||
PNG_INTERNAL_FUNCTION(png_voidp,png_malloc_base,(png_const_structrp png_ptr,
|
PNG_INTERNAL_FUNCTION(png_voidp,png_malloc_base,(png_const_structrp png_ptr,
|
||||||
png_alloc_size_t size),PNG_ALLOCATED);
|
png_alloc_size_t size),PNG_ALLOCATED);
|
||||||
|
|
||||||
#if defined PNG_TEXT_SUPPORTED || defined PNG_sPLT_SUPPORTED ||\
|
#if defined(PNG_TEXT_SUPPORTED) || defined(PNG_sPLT_SUPPORTED) ||\
|
||||||
defined PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
|
defined(PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED)
|
||||||
/* Internal array allocator, outputs no error or warning messages on failure,
|
/* Internal array allocator, outputs no error or warning messages on failure,
|
||||||
* just returns NULL.
|
* just returns NULL.
|
||||||
*/
|
*/
|
||||||
@@ -1824,8 +1921,8 @@ PNG_INTERNAL_FUNCTION(void,png_build_gamma_table,(png_structrp png_ptr,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* SIMPLIFIED READ/WRITE SUPPORT */
|
/* SIMPLIFIED READ/WRITE SUPPORT */
|
||||||
#if defined PNG_SIMPLIFIED_READ_SUPPORTED ||\
|
#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) ||\
|
||||||
defined PNG_SIMPLIFIED_WRITE_SUPPORTED
|
defined(PNG_SIMPLIFIED_WRITE_SUPPORTED)
|
||||||
/* The internal structure that png_image::opaque points to. */
|
/* The internal structure that png_image::opaque points to. */
|
||||||
typedef struct png_control
|
typedef struct png_control
|
||||||
{
|
{
|
||||||
@@ -1879,13 +1976,22 @@ PNG_INTERNAL_FUNCTION(void, png_image_free, (png_imagep image), PNG_EMPTY);
|
|||||||
|
|
||||||
#endif /* SIMPLIFIED READ/WRITE */
|
#endif /* SIMPLIFIED READ/WRITE */
|
||||||
|
|
||||||
|
/* These are initialization functions for hardware specific PNG filter
|
||||||
|
* optimizations; list these here then select the appropriate one at compile
|
||||||
|
* time using the macro PNG_FILTER_OPTIMIZATIONS. If the macro is not defined
|
||||||
|
* the generic code is used.
|
||||||
|
*/
|
||||||
#ifdef PNG_FILTER_OPTIMIZATIONS
|
#ifdef PNG_FILTER_OPTIMIZATIONS
|
||||||
PNG_INTERNAL_FUNCTION(void, PNG_FILTER_OPTIMIZATIONS, (png_structp png_ptr, unsigned int bpp), PNG_EMPTY);
|
PNG_INTERNAL_FUNCTION(void, PNG_FILTER_OPTIMIZATIONS, (png_structp png_ptr,
|
||||||
/* This is the initialization function for hardware specific optimizations,
|
unsigned int bpp), PNG_EMPTY);
|
||||||
* one implementation (for ARM NEON machines) is contained in
|
/* Just declare the optimization that will be used */
|
||||||
* arm/filter_neon.c. It need not be defined - the generic code will be used
|
#else
|
||||||
* if not.
|
/* List *all* the possible optimizations here - this branch is required if
|
||||||
|
* the builder of libpng passes the definition of PNG_FILTER_OPTIMIZATIONS in
|
||||||
|
* CFLAGS in place of CPPFLAGS *and* uses symbol prefixing.
|
||||||
*/
|
*/
|
||||||
|
PNG_INTERNAL_FUNCTION(void, png_init_filter_functions_neon,
|
||||||
|
(png_structp png_ptr, unsigned int bpp), PNG_EMPTY);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Maintainer: Put new private prototypes here ^ */
|
/* Maintainer: Put new private prototypes here ^ */
|
||||||
@@ -1896,4 +2002,5 @@ PNG_INTERNAL_FUNCTION(void, PNG_FILTER_OPTIMIZATIONS, (png_structp png_ptr, unsi
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#endif /* PNG_VERSION_INFO_ONLY */
|
||||||
#endif /* PNGPRIV_H */
|
#endif /* PNGPRIV_H */
|
||||||
|
|||||||
33
pngread.c
33
pngread.c
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngread.c - read a PNG file
|
/* pngread.c - read a PNG file
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.0 [February 14, 2013]
|
* Last changed in libpng 1.6.1 [March 28, 2013]
|
||||||
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pngpriv.h"
|
#include "pngpriv.h"
|
||||||
#if defined PNG_SIMPLIFIED_READ_SUPPORTED && defined PNG_STDIO_SUPPORTED
|
#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) && defined(PNG_STDIO_SUPPORTED)
|
||||||
# include <errno.h>
|
# include <errno.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -877,8 +877,8 @@ png_read_destroy(png_structrp png_ptr)
|
|||||||
png_free(png_ptr, png_ptr->save_buffer);
|
png_free(png_ptr, png_ptr->save_buffer);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (defined PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED) &&\
|
#if defined(PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED) &&\
|
||||||
(defined PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
|
defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED)
|
||||||
png_free(png_ptr, png_ptr->unknown_chunk.data);
|
png_free(png_ptr, png_ptr->unknown_chunk.data);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -2004,6 +2004,28 @@ png_image_read_colormap(png_voidp argument)
|
|||||||
else
|
else
|
||||||
back_b = back_r = back_g = 255;
|
back_b = back_r = back_g = 255;
|
||||||
|
|
||||||
|
/* Default the input file gamma if required - this is necessary because
|
||||||
|
* libpng assumes that if no gamma information is present the data is in the
|
||||||
|
* output format, but the simplified API deduces the gamma from the input
|
||||||
|
* format.
|
||||||
|
*/
|
||||||
|
if ((png_ptr->colorspace.flags & PNG_COLORSPACE_HAVE_GAMMA) == 0)
|
||||||
|
{
|
||||||
|
/* Do this directly, not using the png_colorspace functions, to ensure
|
||||||
|
* that it happens even if the colorspace is invalid (though probably if
|
||||||
|
* it is the setting will be ignored) Note that the same thing can be
|
||||||
|
* achieved at the application interface with png_set_gAMA.
|
||||||
|
*/
|
||||||
|
if (png_ptr->bit_depth == 16 &&
|
||||||
|
(image->flags & PNG_IMAGE_FLAG_16BIT_sRGB) == 0)
|
||||||
|
png_ptr->colorspace.gamma = PNG_GAMMA_LINEAR;
|
||||||
|
|
||||||
|
else
|
||||||
|
png_ptr->colorspace.gamma = PNG_GAMMA_sRGB_INVERSE;
|
||||||
|
|
||||||
|
png_ptr->colorspace.flags |= PNG_COLORSPACE_HAVE_GAMMA;
|
||||||
|
}
|
||||||
|
|
||||||
/* Decide what to do based on the PNG color type of the input data. The
|
/* Decide what to do based on the PNG color type of the input data. The
|
||||||
* utility function png_create_colormap_entry deals with most aspects of the
|
* utility function png_create_colormap_entry deals with most aspects of the
|
||||||
* output transformations; this code works out how to produce bytes of
|
* output transformations; this code works out how to produce bytes of
|
||||||
@@ -3547,7 +3569,8 @@ png_image_read_direct(png_voidp argument)
|
|||||||
{
|
{
|
||||||
png_fixed_point input_gamma_default;
|
png_fixed_point input_gamma_default;
|
||||||
|
|
||||||
if (base_format & PNG_FORMAT_FLAG_LINEAR)
|
if ((base_format & PNG_FORMAT_FLAG_LINEAR) &&
|
||||||
|
(image->flags & PNG_IMAGE_FLAG_16BIT_sRGB) == 0)
|
||||||
input_gamma_default = PNG_GAMMA_LINEAR;
|
input_gamma_default = PNG_GAMMA_LINEAR;
|
||||||
else
|
else
|
||||||
input_gamma_default = PNG_DEFAULT_sRGB;
|
input_gamma_default = PNG_DEFAULT_sRGB;
|
||||||
|
|||||||
21
pngrtran.c
21
pngrtran.c
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngrtran.c - transforms the data in a row for PNG readers
|
/* pngrtran.c - transforms the data in a row for PNG readers
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.0 [February 14, 2013]
|
* Last changed in libpng 1.6.2 [April 25, 2013]
|
||||||
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
@@ -223,6 +223,8 @@ translate_gamma_flags(png_structrp png_ptr, png_fixed_point output_gamma,
|
|||||||
*/
|
*/
|
||||||
# ifdef PNG_READ_sRGB_SUPPORTED
|
# ifdef PNG_READ_sRGB_SUPPORTED
|
||||||
png_ptr->flags |= PNG_FLAG_ASSUME_sRGB;
|
png_ptr->flags |= PNG_FLAG_ASSUME_sRGB;
|
||||||
|
# else
|
||||||
|
PNG_UNUSED(png_ptr)
|
||||||
# endif
|
# endif
|
||||||
if (is_screen)
|
if (is_screen)
|
||||||
output_gamma = PNG_GAMMA_sRGB;
|
output_gamma = PNG_GAMMA_sRGB;
|
||||||
@@ -1056,9 +1058,6 @@ png_set_read_user_transform_fn(png_structrp png_ptr, png_user_transform_ptr
|
|||||||
{
|
{
|
||||||
png_debug(1, "in png_set_read_user_transform_fn");
|
png_debug(1, "in png_set_read_user_transform_fn");
|
||||||
|
|
||||||
if (!png_rtran_ok(png_ptr, 0))
|
|
||||||
return;
|
|
||||||
|
|
||||||
#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED
|
#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED
|
||||||
png_ptr->transformations |= PNG_USER_TRANSFORM;
|
png_ptr->transformations |= PNG_USER_TRANSFORM;
|
||||||
png_ptr->read_user_transform_fn = read_user_transform_fn;
|
png_ptr->read_user_transform_fn = read_user_transform_fn;
|
||||||
@@ -1412,7 +1411,7 @@ png_init_read_transformations(png_structrp png_ptr)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
|
#ifdef PNG_READ_GRAY_TO_RGB_SUPPORTED
|
||||||
#if defined PNG_READ_EXPAND_SUPPORTED && defined PNG_READ_BACKGROUND_SUPPORTED
|
#if defined(PNG_READ_EXPAND_SUPPORTED) && defined(PNG_READ_BACKGROUND_SUPPORTED)
|
||||||
/* Detect gray background and attempt to enable optimization for
|
/* Detect gray background and attempt to enable optimization for
|
||||||
* gray --> RGB case.
|
* gray --> RGB case.
|
||||||
*
|
*
|
||||||
@@ -2239,8 +2238,8 @@ png_do_read_transformations(png_structrp png_ptr, png_row_infop row_info)
|
|||||||
png_do_gray_to_rgb(row_info, png_ptr->row_buf + 1);
|
png_do_gray_to_rgb(row_info, png_ptr->row_buf + 1);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (defined PNG_READ_BACKGROUND_SUPPORTED) ||\
|
#if defined(PNG_READ_BACKGROUND_SUPPORTED) ||\
|
||||||
(defined PNG_READ_ALPHA_MODE_SUPPORTED)
|
defined(PNG_READ_ALPHA_MODE_SUPPORTED)
|
||||||
if (png_ptr->transformations & PNG_COMPOSE)
|
if (png_ptr->transformations & PNG_COMPOSE)
|
||||||
png_do_compose(row_info, png_ptr->row_buf + 1, png_ptr);
|
png_do_compose(row_info, png_ptr->row_buf + 1, png_ptr);
|
||||||
#endif
|
#endif
|
||||||
@@ -2251,8 +2250,8 @@ png_do_read_transformations(png_structrp png_ptr, png_row_infop row_info)
|
|||||||
/* Because RGB_TO_GRAY does the gamma transform. */
|
/* Because RGB_TO_GRAY does the gamma transform. */
|
||||||
!(png_ptr->transformations & PNG_RGB_TO_GRAY) &&
|
!(png_ptr->transformations & PNG_RGB_TO_GRAY) &&
|
||||||
#endif
|
#endif
|
||||||
#if (defined PNG_READ_BACKGROUND_SUPPORTED) ||\
|
#if defined(PNG_READ_BACKGROUND_SUPPORTED) ||\
|
||||||
(defined PNG_READ_ALPHA_MODE_SUPPORTED)
|
defined(PNG_READ_ALPHA_MODE_SUPPORTED)
|
||||||
/* Because PNG_COMPOSE does the gamma transform if there is something to
|
/* Because PNG_COMPOSE does the gamma transform if there is something to
|
||||||
* do (if there is an alpha channel or transparency.)
|
* do (if there is an alpha channel or transparency.)
|
||||||
*/
|
*/
|
||||||
@@ -3518,8 +3517,8 @@ png_build_grayscale_palette(int bit_depth, png_colorp palette)
|
|||||||
|
|
||||||
|
|
||||||
#ifdef PNG_READ_TRANSFORMS_SUPPORTED
|
#ifdef PNG_READ_TRANSFORMS_SUPPORTED
|
||||||
#if (defined PNG_READ_BACKGROUND_SUPPORTED) ||\
|
#if defined(PNG_READ_BACKGROUND_SUPPORTED) ||\
|
||||||
(defined PNG_READ_ALPHA_MODE_SUPPORTED)
|
defined(PNG_READ_ALPHA_MODE_SUPPORTED)
|
||||||
/* Replace any alpha or transparency with the supplied background color.
|
/* Replace any alpha or transparency with the supplied background color.
|
||||||
* "background" is already in the screen gamma, while "background_1" is
|
* "background" is already in the screen gamma, while "background_1" is
|
||||||
* at a gamma of 1.0. Paletted files have already been taken care of.
|
* at a gamma of 1.0. Paletted files have already been taken care of.
|
||||||
|
|||||||
94
pngrutil.c
94
pngrutil.c
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
/* pngrutil.c - utilities to read a PNG file
|
/* pngrutil.c - utilities to read a PNG file
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.0 [(PENDING RELEASE)]
|
* Last changed in libpng 1.6.3 [July 18, 2013]
|
||||||
* Copyright (c) 1998-2012 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
@@ -18,8 +18,6 @@
|
|||||||
|
|
||||||
#ifdef PNG_READ_SUPPORTED
|
#ifdef PNG_READ_SUPPORTED
|
||||||
|
|
||||||
#define png_strtod(p,a,b) strtod(a,b)
|
|
||||||
|
|
||||||
png_uint_32 PNGAPI
|
png_uint_32 PNGAPI
|
||||||
png_get_uint_31(png_const_structrp png_ptr, png_const_bytep buf)
|
png_get_uint_31(png_const_structrp png_ptr, png_const_bytep buf)
|
||||||
{
|
{
|
||||||
@@ -221,7 +219,7 @@ png_crc_finish(png_structrp png_ptr, png_uint_32 skip)
|
|||||||
|
|
||||||
if (png_crc_error(png_ptr))
|
if (png_crc_error(png_ptr))
|
||||||
{
|
{
|
||||||
if (PNG_CHUNK_ANCILLIARY(png_ptr->chunk_name) ?
|
if (PNG_CHUNK_ANCILLARY(png_ptr->chunk_name) ?
|
||||||
!(png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_NOWARN) :
|
!(png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_NOWARN) :
|
||||||
(png_ptr->flags & PNG_FLAG_CRC_CRITICAL_USE))
|
(png_ptr->flags & PNG_FLAG_CRC_CRITICAL_USE))
|
||||||
{
|
{
|
||||||
@@ -250,7 +248,7 @@ png_crc_error(png_structrp png_ptr)
|
|||||||
png_uint_32 crc;
|
png_uint_32 crc;
|
||||||
int need_crc = 1;
|
int need_crc = 1;
|
||||||
|
|
||||||
if (PNG_CHUNK_ANCILLIARY(png_ptr->chunk_name))
|
if (PNG_CHUNK_ANCILLARY(png_ptr->chunk_name))
|
||||||
{
|
{
|
||||||
if ((png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_MASK) ==
|
if ((png_ptr->flags & PNG_FLAG_CRC_ANCILLARY_MASK) ==
|
||||||
(PNG_FLAG_CRC_ANCILLARY_USE | PNG_FLAG_CRC_ANCILLARY_NOWARN))
|
(PNG_FLAG_CRC_ANCILLARY_USE | PNG_FLAG_CRC_ANCILLARY_NOWARN))
|
||||||
@@ -334,7 +332,7 @@ png_read_buffer(png_structrp png_ptr, png_alloc_size_t new_size, int warn)
|
|||||||
* chunk apparently owns the stream. Prior to release it does a png_error.
|
* chunk apparently owns the stream. Prior to release it does a png_error.
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
png_inflate_claim(png_structrp png_ptr, png_uint_32 owner, int window_bits)
|
png_inflate_claim(png_structrp png_ptr, png_uint_32 owner)
|
||||||
{
|
{
|
||||||
if (png_ptr->zowner != 0)
|
if (png_ptr->zowner != 0)
|
||||||
{
|
{
|
||||||
@@ -369,6 +367,22 @@ png_inflate_claim(png_structrp png_ptr, png_uint_32 owner, int window_bits)
|
|||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
int ret; /* zlib return code */
|
int ret; /* zlib return code */
|
||||||
|
# if PNG_ZLIB_VERNUM >= 0x1240
|
||||||
|
|
||||||
|
# if defined(PNG_SET_OPTION_SUPPORTED) && \
|
||||||
|
defined(PNG_MAXIMUM_INFLATE_WINDOW)
|
||||||
|
int window_bits;
|
||||||
|
|
||||||
|
if (((png_ptr->options >> PNG_MAXIMUM_INFLATE_WINDOW) & 3) ==
|
||||||
|
PNG_OPTION_ON)
|
||||||
|
window_bits = 15;
|
||||||
|
|
||||||
|
else
|
||||||
|
window_bits = 0;
|
||||||
|
# else
|
||||||
|
# define window_bits 0
|
||||||
|
# endif
|
||||||
|
# endif
|
||||||
|
|
||||||
/* Set this for safety, just in case the previous owner left pointers to
|
/* Set this for safety, just in case the previous owner left pointers to
|
||||||
* memory allocations.
|
* memory allocations.
|
||||||
@@ -380,8 +394,7 @@ png_inflate_claim(png_structrp png_ptr, png_uint_32 owner, int window_bits)
|
|||||||
|
|
||||||
if (png_ptr->flags & PNG_FLAG_ZSTREAM_INITIALIZED)
|
if (png_ptr->flags & PNG_FLAG_ZSTREAM_INITIALIZED)
|
||||||
{
|
{
|
||||||
# if ZLIB_VERNUM < 0x1240
|
# if PNG_ZLIB_VERNUM < 0x1240
|
||||||
PNG_UNUSED(window_bits)
|
|
||||||
ret = inflateReset(&png_ptr->zstream);
|
ret = inflateReset(&png_ptr->zstream);
|
||||||
# else
|
# else
|
||||||
ret = inflateReset2(&png_ptr->zstream, window_bits);
|
ret = inflateReset2(&png_ptr->zstream, window_bits);
|
||||||
@@ -390,7 +403,7 @@ png_inflate_claim(png_structrp png_ptr, png_uint_32 owner, int window_bits)
|
|||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
# if ZLIB_VERNUM < 0x1240
|
# if PNG_ZLIB_VERNUM < 0x1240
|
||||||
ret = inflateInit(&png_ptr->zstream);
|
ret = inflateInit(&png_ptr->zstream);
|
||||||
# else
|
# else
|
||||||
ret = inflateInit2(&png_ptr->zstream, window_bits);
|
ret = inflateInit2(&png_ptr->zstream, window_bits);
|
||||||
@@ -408,6 +421,10 @@ png_inflate_claim(png_structrp png_ptr, png_uint_32 owner, int window_bits)
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ifdef window_bits
|
||||||
|
# undef window_bits
|
||||||
|
# endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PNG_READ_COMPRESSED_TEXT_SUPPORTED
|
#ifdef PNG_READ_COMPRESSED_TEXT_SUPPORTED
|
||||||
@@ -580,14 +597,8 @@ png_decompress_chunk(png_structrp png_ptr,
|
|||||||
if (limit < *newlength)
|
if (limit < *newlength)
|
||||||
*newlength = limit;
|
*newlength = limit;
|
||||||
|
|
||||||
/* Now try to claim the stream; the 'warn' setting causes zlib to be told
|
/* Now try to claim the stream. */
|
||||||
* to use the maximum window size during inflate; this hides errors in the
|
ret = png_inflate_claim(png_ptr, png_ptr->chunk_name);
|
||||||
* deflate header window bits value which is used if '0' is passed. In
|
|
||||||
* fact this only has an effect with zlib versions 1.2.4 and later - see
|
|
||||||
* the comments in png_inflate_claim above.
|
|
||||||
*/
|
|
||||||
ret = png_inflate_claim(png_ptr, png_ptr->chunk_name,
|
|
||||||
png_ptr->flags & PNG_FLAG_BENIGN_ERRORS_WARN ? 15 : 0);
|
|
||||||
|
|
||||||
if (ret == Z_OK)
|
if (ret == Z_OK)
|
||||||
{
|
{
|
||||||
@@ -1357,8 +1368,7 @@ png_handle_iCCP(png_structrp png_ptr, png_inforp info_ptr, png_uint_32 length)
|
|||||||
{
|
{
|
||||||
read_length -= keyword_length+2;
|
read_length -= keyword_length+2;
|
||||||
|
|
||||||
if (png_inflate_claim(png_ptr, png_iCCP,
|
if (png_inflate_claim(png_ptr, png_iCCP) == Z_OK)
|
||||||
png_ptr->flags & PNG_FLAG_BENIGN_ERRORS_WARN ? 15 : 0) == Z_OK)
|
|
||||||
{
|
{
|
||||||
Byte profile_header[132];
|
Byte profile_header[132];
|
||||||
Byte local_buffer[PNG_INFLATE_BUF_SIZE];
|
Byte local_buffer[PNG_INFLATE_BUF_SIZE];
|
||||||
@@ -2804,21 +2814,26 @@ png_handle_unknown(png_structrp png_ptr, png_inforp info_ptr,
|
|||||||
{
|
{
|
||||||
/* If the keep value is 'default' or 'never' override it, but
|
/* If the keep value is 'default' or 'never' override it, but
|
||||||
* still error out on critical chunks unless the keep value is
|
* still error out on critical chunks unless the keep value is
|
||||||
* 'always' While this is weird it is the behavior in 1.4.12. A
|
* 'always' While this is weird it is the behavior in 1.4.12.
|
||||||
* possible improvement would be to obey the value set for the
|
* A possible improvement would be to obey the value set for the
|
||||||
* chunk, but this would be an API change that would probably
|
* chunk, but this would be an API change that would probably
|
||||||
* damage some applications.
|
* damage some applications.
|
||||||
*
|
*
|
||||||
* The png_app_warning below catches the case that matters, where
|
* The png_app_warning below catches the case that matters, where
|
||||||
* the application has neither set specific save for this chunk
|
* the application has not set specific save or ignore for this
|
||||||
* or global save.
|
* chunk or global save or ignore.
|
||||||
*/
|
*/
|
||||||
if (keep < PNG_HANDLE_CHUNK_IF_SAFE)
|
if (keep < PNG_HANDLE_CHUNK_IF_SAFE)
|
||||||
{
|
{
|
||||||
# ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
|
# ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
|
||||||
if (png_ptr->unknown_default < PNG_HANDLE_CHUNK_IF_SAFE)
|
if (png_ptr->unknown_default < PNG_HANDLE_CHUNK_IF_SAFE)
|
||||||
|
{
|
||||||
|
png_chunk_warning(png_ptr, "Saving unknown chunk:");
|
||||||
png_app_warning(png_ptr,
|
png_app_warning(png_ptr,
|
||||||
"forcing save of an unhandled chunk; please call png_set_keep_unknown_chunks");
|
"forcing save of an unhandled chunk;"
|
||||||
|
" please call png_set_keep_unknown_chunks");
|
||||||
|
/* with keep = PNG_HANDLE_CHUNK_IF_SAFE */
|
||||||
|
}
|
||||||
# endif
|
# endif
|
||||||
keep = PNG_HANDLE_CHUNK_IF_SAFE;
|
keep = PNG_HANDLE_CHUNK_IF_SAFE;
|
||||||
}
|
}
|
||||||
@@ -2852,7 +2867,7 @@ png_handle_unknown(png_structrp png_ptr, png_inforp info_ptr,
|
|||||||
|
|
||||||
if (keep == PNG_HANDLE_CHUNK_ALWAYS ||
|
if (keep == PNG_HANDLE_CHUNK_ALWAYS ||
|
||||||
(keep == PNG_HANDLE_CHUNK_IF_SAFE &&
|
(keep == PNG_HANDLE_CHUNK_IF_SAFE &&
|
||||||
PNG_CHUNK_ANCILLIARY(png_ptr->chunk_name)))
|
PNG_CHUNK_ANCILLARY(png_ptr->chunk_name)))
|
||||||
{
|
{
|
||||||
if (!png_cache_unknown_chunk(png_ptr, length))
|
if (!png_cache_unknown_chunk(png_ptr, length))
|
||||||
keep = PNG_HANDLE_CHUNK_NEVER;
|
keep = PNG_HANDLE_CHUNK_NEVER;
|
||||||
@@ -2886,7 +2901,7 @@ png_handle_unknown(png_structrp png_ptr, png_inforp info_ptr,
|
|||||||
*/
|
*/
|
||||||
if (keep == PNG_HANDLE_CHUNK_ALWAYS ||
|
if (keep == PNG_HANDLE_CHUNK_ALWAYS ||
|
||||||
(keep == PNG_HANDLE_CHUNK_IF_SAFE &&
|
(keep == PNG_HANDLE_CHUNK_IF_SAFE &&
|
||||||
PNG_CHUNK_ANCILLIARY(png_ptr->chunk_name)))
|
PNG_CHUNK_ANCILLARY(png_ptr->chunk_name)))
|
||||||
{
|
{
|
||||||
# ifdef PNG_USER_LIMITS_SUPPORTED
|
# ifdef PNG_USER_LIMITS_SUPPORTED
|
||||||
switch (png_ptr->user_chunk_cache_max)
|
switch (png_ptr->user_chunk_cache_max)
|
||||||
@@ -3350,7 +3365,7 @@ png_combine_row(png_const_structrp png_ptr, png_bytep dp, int display)
|
|||||||
png_uint_32p dp32 = png_aligncast(png_uint_32p,dp);
|
png_uint_32p dp32 = png_aligncast(png_uint_32p,dp);
|
||||||
png_const_uint_32p sp32 = png_aligncastconst(
|
png_const_uint_32p sp32 = png_aligncastconst(
|
||||||
png_const_uint_32p, sp);
|
png_const_uint_32p, sp);
|
||||||
unsigned int skip = (bytes_to_jump-bytes_to_copy) /
|
size_t skip = (bytes_to_jump-bytes_to_copy) /
|
||||||
(sizeof (png_uint_32));
|
(sizeof (png_uint_32));
|
||||||
|
|
||||||
do
|
do
|
||||||
@@ -3392,7 +3407,7 @@ png_combine_row(png_const_structrp png_ptr, png_bytep dp, int display)
|
|||||||
png_uint_16p dp16 = png_aligncast(png_uint_16p, dp);
|
png_uint_16p dp16 = png_aligncast(png_uint_16p, dp);
|
||||||
png_const_uint_16p sp16 = png_aligncastconst(
|
png_const_uint_16p sp16 = png_aligncastconst(
|
||||||
png_const_uint_16p, sp);
|
png_const_uint_16p, sp);
|
||||||
unsigned int skip = (bytes_to_jump-bytes_to_copy) /
|
size_t skip = (bytes_to_jump-bytes_to_copy) /
|
||||||
(sizeof (png_uint_16));
|
(sizeof (png_uint_16));
|
||||||
|
|
||||||
do
|
do
|
||||||
@@ -3679,7 +3694,7 @@ png_do_read_interlace(png_row_infop row_info, png_bytep row, int pass,
|
|||||||
|
|
||||||
for (i = 0; i < row_info->width; i++)
|
for (i = 0; i < row_info->width; i++)
|
||||||
{
|
{
|
||||||
png_byte v[8];
|
png_byte v[8]; /* SAFE; pixel_depth does not exceed 64 */
|
||||||
int j;
|
int j;
|
||||||
|
|
||||||
memcpy(v, sp, pixel_bytes);
|
memcpy(v, sp, pixel_bytes);
|
||||||
@@ -3870,7 +3885,7 @@ png_init_filter_functions(png_structrp pp)
|
|||||||
* the filter is the first transformation performed on the row data. It is
|
* the filter is the first transformation performed on the row data. It is
|
||||||
* performed in place, therefore an implementation can be selected based on
|
* performed in place, therefore an implementation can be selected based on
|
||||||
* the image pixel format. If the implementation depends on image width then
|
* the image pixel format. If the implementation depends on image width then
|
||||||
* take care to ensure that it works corretly if the image is interlaced -
|
* take care to ensure that it works correctly if the image is interlaced -
|
||||||
* interlacing causes the actual row width to vary.
|
* interlacing causes the actual row width to vary.
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
@@ -3978,7 +3993,7 @@ png_read_IDAT_data(png_structrp png_ptr, png_bytep output,
|
|||||||
png_ptr->zstream.avail_out = out;
|
png_ptr->zstream.avail_out = out;
|
||||||
}
|
}
|
||||||
|
|
||||||
else /* check for end */
|
else /* after last row, checking for end */
|
||||||
{
|
{
|
||||||
png_ptr->zstream.next_out = tmpbuf;
|
png_ptr->zstream.next_out = tmpbuf;
|
||||||
png_ptr->zstream.avail_out = (sizeof tmpbuf);
|
png_ptr->zstream.avail_out = (sizeof tmpbuf);
|
||||||
@@ -3993,10 +4008,13 @@ png_read_IDAT_data(png_structrp png_ptr, png_bytep output,
|
|||||||
*/
|
*/
|
||||||
ret = inflate(&png_ptr->zstream, Z_NO_FLUSH);
|
ret = inflate(&png_ptr->zstream, Z_NO_FLUSH);
|
||||||
|
|
||||||
/* Take the unconsumed output back (so, in the 'check' case this just
|
/* Take the unconsumed output back. */
|
||||||
* counts up).
|
if (output != NULL)
|
||||||
*/
|
avail_out += png_ptr->zstream.avail_out;
|
||||||
avail_out += png_ptr->zstream.avail_out;
|
|
||||||
|
else /* avail_out counts the extra bytes */
|
||||||
|
avail_out += (sizeof tmpbuf) - png_ptr->zstream.avail_out;
|
||||||
|
|
||||||
png_ptr->zstream.avail_out = 0;
|
png_ptr->zstream.avail_out = 0;
|
||||||
|
|
||||||
if (ret == Z_STREAM_END)
|
if (ret == Z_STREAM_END)
|
||||||
@@ -4035,7 +4053,7 @@ png_read_IDAT_data(png_structrp png_ptr, png_bytep output,
|
|||||||
if (output != NULL)
|
if (output != NULL)
|
||||||
png_error(png_ptr, "Not enough image data");
|
png_error(png_ptr, "Not enough image data");
|
||||||
|
|
||||||
else /* checking */
|
else /* the deflate stream contained extra data */
|
||||||
png_chunk_benign_error(png_ptr, "Too much image data");
|
png_chunk_benign_error(png_ptr, "Too much image data");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4446,7 +4464,7 @@ defined(PNG_USER_TRANSFORM_PTR_SUPPORTED)
|
|||||||
* IDAT stream has a bogus deflate header window_bits value, but this should
|
* IDAT stream has a bogus deflate header window_bits value, but this should
|
||||||
* not be happening any longer!)
|
* not be happening any longer!)
|
||||||
*/
|
*/
|
||||||
if (png_inflate_claim(png_ptr, png_IDAT, 0) != Z_OK)
|
if (png_inflate_claim(png_ptr, png_IDAT) != Z_OK)
|
||||||
png_error(png_ptr, png_ptr->zstream.msg);
|
png_error(png_ptr, png_ptr->zstream.msg);
|
||||||
|
|
||||||
png_ptr->flags |= PNG_FLAG_ROW_INIT;
|
png_ptr->flags |= PNG_FLAG_ROW_INIT;
|
||||||
|
|||||||
37
pngset.c
37
pngset.c
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngset.c - storage of image information into info struct
|
/* pngset.c - storage of image information into info struct
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.0 [February 14, 2013]
|
* Last changed in libpng 1.6.3 [July 18, 2013]
|
||||||
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
@@ -238,16 +238,7 @@ png_set_IHDR(png_const_structrp png_ptr, png_inforp info_ptr,
|
|||||||
|
|
||||||
info_ptr->pixel_depth = (png_byte)(info_ptr->channels * info_ptr->bit_depth);
|
info_ptr->pixel_depth = (png_byte)(info_ptr->channels * info_ptr->bit_depth);
|
||||||
|
|
||||||
/* Check for potential overflow */
|
info_ptr->rowbytes = PNG_ROWBYTES(info_ptr->pixel_depth, width);
|
||||||
if (width >
|
|
||||||
(PNG_UINT_32_MAX >> 3) /* 8-byte RRGGBBAA pixels */
|
|
||||||
- 48 /* bigrowbuf hack */
|
|
||||||
- 1 /* filter byte */
|
|
||||||
- 7*8 /* rounding of width to multiple of 8 pixels */
|
|
||||||
- 8) /* extra max_pixel_depth pad */
|
|
||||||
info_ptr->rowbytes = 0;
|
|
||||||
else
|
|
||||||
info_ptr->rowbytes = PNG_ROWBYTES(info_ptr->pixel_depth, width);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PNG_oFFs_SUPPORTED
|
#ifdef PNG_oFFs_SUPPORTED
|
||||||
@@ -514,7 +505,7 @@ png_set_PLTE(png_structrp png_ptr, png_inforp info_ptr,
|
|||||||
|
|
||||||
png_debug1(1, "in %s storage function", "PLTE");
|
png_debug1(1, "in %s storage function", "PLTE");
|
||||||
|
|
||||||
if (png_ptr == NULL || info_ptr == NULL || palette == NULL)
|
if (png_ptr == NULL || info_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (num_palette < 0 || num_palette > PNG_MAX_PALETTE_LENGTH)
|
if (num_palette < 0 || num_palette > PNG_MAX_PALETTE_LENGTH)
|
||||||
@@ -529,6 +520,17 @@ png_set_PLTE(png_structrp png_ptr, png_inforp info_ptr,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((num_palette > 0 && palette == NULL) ||
|
||||||
|
(num_palette == 0
|
||||||
|
# ifdef PNG_MNG_FEATURES_SUPPORTED
|
||||||
|
&& (png_ptr->mng_features_permitted & PNG_FLAG_MNG_EMPTY_PLTE) == 0
|
||||||
|
# endif
|
||||||
|
))
|
||||||
|
{
|
||||||
|
png_chunk_report(png_ptr, "Invalid palette", PNG_CHUNK_ERROR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* It may not actually be necessary to set png_ptr->palette here;
|
/* It may not actually be necessary to set png_ptr->palette here;
|
||||||
* we do it for backward compatibility with the way the png_handle_tRNS
|
* we do it for backward compatibility with the way the png_handle_tRNS
|
||||||
* function used to do the allocation.
|
* function used to do the allocation.
|
||||||
@@ -545,7 +547,8 @@ png_set_PLTE(png_structrp png_ptr, png_inforp info_ptr,
|
|||||||
png_ptr->palette = png_voidcast(png_colorp, png_calloc(png_ptr,
|
png_ptr->palette = png_voidcast(png_colorp, png_calloc(png_ptr,
|
||||||
PNG_MAX_PALETTE_LENGTH * (sizeof (png_color))));
|
PNG_MAX_PALETTE_LENGTH * (sizeof (png_color))));
|
||||||
|
|
||||||
memcpy(png_ptr->palette, palette, num_palette * (sizeof (png_color)));
|
if (num_palette > 0)
|
||||||
|
memcpy(png_ptr->palette, palette, num_palette * (sizeof (png_color)));
|
||||||
info_ptr->palette = png_ptr->palette;
|
info_ptr->palette = png_ptr->palette;
|
||||||
info_ptr->num_palette = png_ptr->num_palette = (png_uint_16)num_palette;
|
info_ptr->num_palette = png_ptr->num_palette = (png_uint_16)num_palette;
|
||||||
|
|
||||||
@@ -1116,16 +1119,16 @@ png_set_unknown_chunks(png_const_structrp png_ptr,
|
|||||||
* code) but may be meaningless if the read or write handling of unknown
|
* code) but may be meaningless if the read or write handling of unknown
|
||||||
* chunks is not compiled in.
|
* chunks is not compiled in.
|
||||||
*/
|
*/
|
||||||
# if !(defined PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) && \
|
# if !defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) && \
|
||||||
(defined PNG_READ_SUPPORTED)
|
defined(PNG_READ_SUPPORTED)
|
||||||
if (png_ptr->mode & PNG_IS_READ_STRUCT)
|
if (png_ptr->mode & PNG_IS_READ_STRUCT)
|
||||||
{
|
{
|
||||||
png_app_error(png_ptr, "no unknown chunk support on read");
|
png_app_error(png_ptr, "no unknown chunk support on read");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
# if !(defined PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED) && \
|
# if !defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED) && \
|
||||||
(defined PNG_WRITE_SUPPORTED)
|
defined(PNG_WRITE_SUPPORTED)
|
||||||
if (!(png_ptr->mode & PNG_IS_READ_STRUCT))
|
if (!(png_ptr->mode & PNG_IS_READ_STRUCT))
|
||||||
{
|
{
|
||||||
png_app_error(png_ptr, "no unknown chunk support on write");
|
png_app_error(png_ptr, "no unknown chunk support on write");
|
||||||
|
|||||||
12
pngstruct.h
12
pngstruct.h
@@ -5,7 +5,7 @@
|
|||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.0 [February 14, 2013]
|
* Last changed in libpng 1.6.1 [March 28, 2013]
|
||||||
*
|
*
|
||||||
* This code is released under the libpng license.
|
* This code is released under the libpng license.
|
||||||
* For conditions of distribution and use, see the disclaimer
|
* For conditions of distribution and use, see the disclaimer
|
||||||
@@ -100,7 +100,7 @@ typedef struct png_XYZ
|
|||||||
} png_XYZ;
|
} png_XYZ;
|
||||||
#endif /* COLORSPACE */
|
#endif /* COLORSPACE */
|
||||||
|
|
||||||
#if defined PNG_COLORSPACE_SUPPORTED || defined PNG_GAMMA_SUPPORTED
|
#if defined(PNG_COLORSPACE_SUPPORTED) || defined(PNG_GAMMA_SUPPORTED)
|
||||||
/* A colorspace is all the above plus, potentially, profile information,
|
/* A colorspace is all the above plus, potentially, profile information,
|
||||||
* however at present libpng does not use the profile internally so it is only
|
* however at present libpng does not use the profile internally so it is only
|
||||||
* stored in the png_info struct (if iCCP is supported.) The rendering intent
|
* stored in the png_info struct (if iCCP is supported.) The rendering intent
|
||||||
@@ -357,6 +357,11 @@ struct png_struct_def
|
|||||||
png_uint_16p inv_filter_costs; /* 1/relative filter calculation cost */
|
png_uint_16p inv_filter_costs; /* 1/relative filter calculation cost */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Options */
|
||||||
|
#ifdef PNG_SET_OPTION_SUPPORTED
|
||||||
|
png_byte options; /* On/off state (up to 4 options) */
|
||||||
|
#endif
|
||||||
|
|
||||||
#if PNG_LIBPNG_VER < 10700
|
#if PNG_LIBPNG_VER < 10700
|
||||||
/* To do: remove this from libpng-1.7 */
|
/* To do: remove this from libpng-1.7 */
|
||||||
#ifdef PNG_TIME_RFC1123_SUPPORTED
|
#ifdef PNG_TIME_RFC1123_SUPPORTED
|
||||||
@@ -471,11 +476,12 @@ struct png_struct_def
|
|||||||
/* New member added in libpng-1.5.6 */
|
/* New member added in libpng-1.5.6 */
|
||||||
png_bytep big_prev_row;
|
png_bytep big_prev_row;
|
||||||
|
|
||||||
|
/* New member added in libpng-1.5.7 */
|
||||||
void (*read_filter[PNG_FILTER_VALUE_LAST-1])(png_row_infop row_info,
|
void (*read_filter[PNG_FILTER_VALUE_LAST-1])(png_row_infop row_info,
|
||||||
png_bytep row, png_const_bytep prev_row);
|
png_bytep row, png_const_bytep prev_row);
|
||||||
|
|
||||||
#ifdef PNG_READ_SUPPORTED
|
#ifdef PNG_READ_SUPPORTED
|
||||||
#if defined PNG_COLORSPACE_SUPPORTED || defined PNG_GAMMA_SUPPORTED
|
#if defined(PNG_COLORSPACE_SUPPORTED) || defined(PNG_GAMMA_SUPPORTED)
|
||||||
png_colorspace colorspace;
|
png_colorspace colorspace;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
31
pngtest.c
31
pngtest.c
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngtest.c - a simple test program to test libpng
|
/* pngtest.c - a simple test program to test libpng
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.0 [February 14, 2013]
|
* Last changed in libpng 1.6.2 [April 25, 2013]
|
||||||
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
@@ -43,7 +43,23 @@
|
|||||||
|
|
||||||
#include "png.h"
|
#include "png.h"
|
||||||
|
|
||||||
#ifdef PNG_READ_SUPPORTED /* else nothing can be done */
|
/* Known chunks that exist in pngtest.png must be supported or pngtest will fail
|
||||||
|
* simply as a result of re-ordering them. This may be fixed in 1.7
|
||||||
|
*/
|
||||||
|
#if defined PNG_READ_SUPPORTED && /* else nothing can be done */\
|
||||||
|
defined PNG_READ_bKGD_SUPPORTED &&\
|
||||||
|
defined PNG_READ_cHRM_SUPPORTED &&\
|
||||||
|
defined PNG_READ_gAMA_SUPPORTED &&\
|
||||||
|
defined PNG_READ_oFFs_SUPPORTED &&\
|
||||||
|
defined PNG_READ_pCAL_SUPPORTED &&\
|
||||||
|
defined PNG_READ_pHYs_SUPPORTED &&\
|
||||||
|
defined PNG_READ_sBIT_SUPPORTED &&\
|
||||||
|
defined PNG_READ_sCAL_SUPPORTED &&\
|
||||||
|
defined PNG_READ_sRGB_SUPPORTED &&\
|
||||||
|
defined PNG_READ_tEXt_SUPPORTED &&\
|
||||||
|
defined PNG_READ_tIME_SUPPORTED &&\
|
||||||
|
defined PNG_READ_zTXt_SUPPORTED
|
||||||
|
|
||||||
#include "zlib.h"
|
#include "zlib.h"
|
||||||
/* Copied from pngpriv.h but only used in error messages below. */
|
/* Copied from pngpriv.h but only used in error messages below. */
|
||||||
#ifndef PNG_ZBUF_SIZE
|
#ifndef PNG_ZBUF_SIZE
|
||||||
@@ -1173,7 +1189,8 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef PNG_sCAL_SUPPORTED
|
#ifdef PNG_sCAL_SUPPORTED
|
||||||
#ifdef PNG_FLOATING_POINT_SUPPORTED
|
#if defined(PNG_FLOATING_POINT_SUPPORTED) && \
|
||||||
|
defined(PNG_FLOATING_ARITHMETIC_SUPPORTED)
|
||||||
{
|
{
|
||||||
int unit;
|
int unit;
|
||||||
double scal_width, scal_height;
|
double scal_width, scal_height;
|
||||||
@@ -1470,7 +1487,8 @@ test_one_file(PNG_CONST char *inname, PNG_CONST char *outname)
|
|||||||
|
|
||||||
/* When the unknown vpAg/sTER chunks are written by pngtest the only way to
|
/* When the unknown vpAg/sTER chunks are written by pngtest the only way to
|
||||||
* do it is to write them *before* calling png_write_end. When unknown
|
* do it is to write them *before* calling png_write_end. When unknown
|
||||||
* chunks are written by libpng, however, they are written just before IEND. * There seems to be no way round this, however vpAg/sTER are not expected
|
* chunks are written by libpng, however, they are written just before IEND.
|
||||||
|
* There seems to be no way round this, however vpAg/sTER are not expected
|
||||||
* after IDAT.
|
* after IDAT.
|
||||||
*/
|
*/
|
||||||
write_chunks(write_ptr, after_IDAT);
|
write_chunks(write_ptr, after_IDAT);
|
||||||
@@ -1944,9 +1962,10 @@ main(void)
|
|||||||
{
|
{
|
||||||
fprintf(STDERR,
|
fprintf(STDERR,
|
||||||
" test ignored because libpng was not built with read support\n");
|
" test ignored because libpng was not built with read support\n");
|
||||||
return 0;
|
/* And skip this test */
|
||||||
|
return 77;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Generate a compiler error if there is an old png.h in the search path. */
|
/* Generate a compiler error if there is an old png.h in the search path. */
|
||||||
typedef png_libpng_version_1_6_0 Your_png_h_is_not_version_1_6_0;
|
typedef png_libpng_version_1_6_3 Your_png_h_is_not_version_1_6_3;
|
||||||
|
|||||||
13
pngtrans.c
13
pngtrans.c
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngtrans.c - transforms the data in a row (used by both readers and writers)
|
/* pngtrans.c - transforms the data in a row (used by both readers and writers)
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.0 [February 14, 2013]
|
* Last changed in libpng 1.6.2 [April 25, 2013]
|
||||||
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
@@ -782,6 +782,17 @@ png_set_user_transform_info(png_structrp png_ptr, png_voidp
|
|||||||
|
|
||||||
if (png_ptr == NULL)
|
if (png_ptr == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
#ifdef PNG_READ_USER_TRANSFORM_SUPPORTED
|
||||||
|
if ((png_ptr->mode & PNG_IS_READ_STRUCT) != 0 &&
|
||||||
|
(png_ptr->flags & PNG_FLAG_ROW_INIT) != 0)
|
||||||
|
{
|
||||||
|
png_app_error(png_ptr,
|
||||||
|
"info change after png_start_read_image or png_read_update_info");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
png_ptr->user_transform_ptr = user_transform_ptr;
|
png_ptr->user_transform_ptr = user_transform_ptr;
|
||||||
png_ptr->user_transform_depth = (png_byte)user_transform_depth;
|
png_ptr->user_transform_depth = (png_byte)user_transform_depth;
|
||||||
png_ptr->user_transform_channels = (png_byte)user_transform_channels;
|
png_ptr->user_transform_channels = (png_byte)user_transform_channels;
|
||||||
|
|||||||
69
pngwrite.c
69
pngwrite.c
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngwrite.c - general routines to write a PNG file
|
/* pngwrite.c - general routines to write a PNG file
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.0 [February 14, 2013]
|
* Last changed in libpng 1.6.2 [April 25, 2013]
|
||||||
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "pngpriv.h"
|
#include "pngpriv.h"
|
||||||
#if defined PNG_SIMPLIFIED_WRITE_SUPPORTED && defined PNG_STDIO_SUPPORTED
|
#if defined(PNG_SIMPLIFIED_WRITE_SUPPORTED) && defined(PNG_STDIO_SUPPORTED)
|
||||||
# include <errno.h>
|
# include <errno.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -494,51 +494,50 @@ png_create_write_struct_2,(png_const_charp user_png_ver, png_voidp error_ptr,
|
|||||||
png_structrp png_ptr = png_create_png_struct(user_png_ver, error_ptr,
|
png_structrp png_ptr = png_create_png_struct(user_png_ver, error_ptr,
|
||||||
error_fn, warn_fn, mem_ptr, malloc_fn, free_fn);
|
error_fn, warn_fn, mem_ptr, malloc_fn, free_fn);
|
||||||
#endif /* PNG_USER_MEM_SUPPORTED */
|
#endif /* PNG_USER_MEM_SUPPORTED */
|
||||||
|
if (png_ptr != NULL)
|
||||||
|
{
|
||||||
|
/* Set the zlib control values to defaults; they can be overridden by the
|
||||||
|
* application after the struct has been created.
|
||||||
|
*/
|
||||||
|
png_ptr->zbuffer_size = PNG_ZBUF_SIZE;
|
||||||
|
|
||||||
/* Set the zlib control values to defaults; they can be overridden by the
|
/* The 'zlib_strategy' setting is irrelevant because png_default_claim in
|
||||||
* application after the struct has been created.
|
* pngwutil.c defaults it according to whether or not filters will be
|
||||||
*/
|
* used, and ignores this setting.
|
||||||
png_ptr->zbuffer_size = PNG_ZBUF_SIZE;
|
*/
|
||||||
|
png_ptr->zlib_strategy = PNG_Z_DEFAULT_STRATEGY;
|
||||||
/* The 'zlib_strategy' setting is irrelevant because png_default_claim in
|
png_ptr->zlib_level = PNG_Z_DEFAULT_COMPRESSION;
|
||||||
* pngwutil.c defaults it according to whether or not filters will be used,
|
png_ptr->zlib_mem_level = 8;
|
||||||
* and ignores this setting.
|
png_ptr->zlib_window_bits = 15;
|
||||||
*/
|
png_ptr->zlib_method = 8;
|
||||||
png_ptr->zlib_strategy = PNG_Z_DEFAULT_STRATEGY;
|
|
||||||
png_ptr->zlib_level = PNG_Z_DEFAULT_COMPRESSION;
|
|
||||||
png_ptr->zlib_mem_level = 8;
|
|
||||||
png_ptr->zlib_window_bits = 15;
|
|
||||||
png_ptr->zlib_method = 8;
|
|
||||||
|
|
||||||
#ifdef PNG_WRITE_COMPRESSED_TEXT_SUPPORTED
|
#ifdef PNG_WRITE_COMPRESSED_TEXT_SUPPORTED
|
||||||
png_ptr->zlib_text_strategy = PNG_TEXT_Z_DEFAULT_STRATEGY;
|
png_ptr->zlib_text_strategy = PNG_TEXT_Z_DEFAULT_STRATEGY;
|
||||||
png_ptr->zlib_text_level = PNG_TEXT_Z_DEFAULT_COMPRESSION;
|
png_ptr->zlib_text_level = PNG_TEXT_Z_DEFAULT_COMPRESSION;
|
||||||
png_ptr->zlib_text_mem_level = 8;
|
png_ptr->zlib_text_mem_level = 8;
|
||||||
png_ptr->zlib_text_window_bits = 15;
|
png_ptr->zlib_text_window_bits = 15;
|
||||||
png_ptr->zlib_text_method = 8;
|
png_ptr->zlib_text_method = 8;
|
||||||
#endif /* PNG_WRITE_COMPRESSED_TEXT_SUPPORTED */
|
#endif /* PNG_WRITE_COMPRESSED_TEXT_SUPPORTED */
|
||||||
|
|
||||||
/* This is a highly dubious configuration option; by default it is off, but
|
/* This is a highly dubious configuration option; by default it is off,
|
||||||
* it may be appropriate for private builds that are testing extensions not
|
* but it may be appropriate for private builds that are testing
|
||||||
* conformant to the current specification, or of applications that must not
|
* extensions not conformant to the current specification, or of
|
||||||
* fail to write at all costs!
|
* applications that must not fail to write at all costs!
|
||||||
*/
|
*/
|
||||||
# ifdef PNG_BENIGN_WRITE_ERRORS_SUPPORTED
|
#ifdef PNG_BENIGN_WRITE_ERRORS_SUPPORTED
|
||||||
png_ptr->flags |= PNG_FLAG_BENIGN_ERRORS_WARN;
|
png_ptr->flags |= PNG_FLAG_BENIGN_ERRORS_WARN;
|
||||||
/* In stable builds only warn if an application error can be completely
|
/* In stable builds only warn if an application error can be completely
|
||||||
* handled.
|
* handled.
|
||||||
*/
|
*/
|
||||||
# endif
|
#endif
|
||||||
|
|
||||||
/* App warnings are warnings in release (or release candidate) builds but
|
/* App warnings are warnings in release (or release candidate) builds but
|
||||||
* are errors during development.
|
* are errors during development.
|
||||||
*/
|
*/
|
||||||
# if PNG_LIBPNG_BUILD_BASE_TYPE >= PNG_LIBPNG_BUILD_RC
|
#if PNG_LIBPNG_BUILD_BASE_TYPE >= PNG_LIBPNG_BUILD_RC
|
||||||
png_ptr->flags |= PNG_FLAG_APP_WARNINGS_WARN;
|
png_ptr->flags |= PNG_FLAG_APP_WARNINGS_WARN;
|
||||||
# endif
|
#endif
|
||||||
|
|
||||||
if (png_ptr != NULL)
|
|
||||||
{
|
|
||||||
/* TODO: delay this, it can be done in png_init_io() (if the app doesn't
|
/* TODO: delay this, it can be done in png_init_io() (if the app doesn't
|
||||||
* do it itself) avoiding setting the default function if it is not
|
* do it itself) avoiding setting the default function if it is not
|
||||||
* required.
|
* required.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
/* pngwutil.c - utilities to write a PNG file
|
/* pngwutil.c - utilities to write a PNG file
|
||||||
*
|
*
|
||||||
* Last changed in libpng 1.6.0 [February 14, 2013]
|
* Last changed in libpng 1.6.2 [April 25, 2013]
|
||||||
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2013 Glenn Randers-Pehrson
|
||||||
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
|
||||||
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
|
||||||
@@ -1744,6 +1744,9 @@ png_write_iTXt(png_structrp png_ptr, int compression, png_const_charp key,
|
|||||||
{
|
{
|
||||||
if (comp.input_len > PNG_UINT_31_MAX-prefix_len)
|
if (comp.input_len > PNG_UINT_31_MAX-prefix_len)
|
||||||
png_error(png_ptr, "iTXt: uncompressed text too long");
|
png_error(png_ptr, "iTXt: uncompressed text too long");
|
||||||
|
|
||||||
|
/* So the string will fit in a chunk: */
|
||||||
|
comp.output_len = (png_uint_32)/*SAFE*/comp.input_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
png_write_chunk_header(png_ptr, png_iTXt, comp.output_len + prefix_len);
|
png_write_chunk_header(png_ptr, png_iTXt, comp.output_len + prefix_len);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
VisualStudio instructions
|
VisualStudio instructions
|
||||||
|
|
||||||
libpng version 1.6.0 - February 14, 2013
|
libpng version 1.6.3 - July 18, 2013
|
||||||
|
|
||||||
Copyright (c) 1998-2010 Glenn Randers-Pehrson
|
Copyright (c) 1998-2010 Glenn Randers-Pehrson
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
<!--
|
<!--
|
||||||
* zlib.props - location of zlib source
|
* zlib.props - location of zlib source
|
||||||
*
|
*
|
||||||
* libpng version 1.6.0 - February 14, 2013
|
* libpng version 1.6.3 - July 18, 2013
|
||||||
*
|
*
|
||||||
* Copyright (c) 1998-2011 Glenn Randers-Pehrson
|
* Copyright (c) 1998-2011 Glenn Randers-Pehrson
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
|
|
||||||
Makefiles for libpng version 1.6.0 - February 14, 2013
|
Makefiles for libpng version 1.6.3 - July 18, 2013
|
||||||
|
|
||||||
pnglibconf.h.prebuilt => Stores configuration settings
|
pnglibconf.h.prebuilt => Stores configuration settings
|
||||||
makefile.linux => Linux/ELF makefile
|
makefile.linux => Linux/ELF makefile
|
||||||
(gcc, creates libpng16.so.16.1.6.0)
|
(gcc, creates libpng16.so.16.1.6.3)
|
||||||
makefile.gcc => Generic makefile (gcc, creates static libpng.a)
|
makefile.gcc => Generic makefile (gcc, creates static libpng.a)
|
||||||
makefile.knr => Archaic UNIX Makefile that converts files with
|
makefile.knr => Archaic UNIX Makefile that converts files with
|
||||||
ansi2knr (Requires ansi2knr.c from
|
ansi2knr (Requires ansi2knr.c from
|
||||||
@@ -20,7 +20,7 @@ pnglibconf.h.prebuilt => Stores configuration settings
|
|||||||
makefile.dec => DEC Alpha UNIX makefile
|
makefile.dec => DEC Alpha UNIX makefile
|
||||||
makefile.dj2 => DJGPP 2 makefile
|
makefile.dj2 => DJGPP 2 makefile
|
||||||
makefile.elf => Linux/ELF makefile symbol versioning,
|
makefile.elf => Linux/ELF makefile symbol versioning,
|
||||||
(gcc, creates libpng16.so.16.1.6.0)
|
(gcc, creates libpng16.so.16.1.6.3)
|
||||||
makefile.freebsd => FreeBSD makefile
|
makefile.freebsd => FreeBSD makefile
|
||||||
makefile.gcc => Generic gcc makefile
|
makefile.gcc => Generic gcc makefile
|
||||||
makefile.hpgcc => HPUX makefile using gcc
|
makefile.hpgcc => HPUX makefile using gcc
|
||||||
@@ -35,12 +35,12 @@ pnglibconf.h.prebuilt => Stores configuration settings
|
|||||||
makefile.os2 => OS/2 Makefile (gcc and emx, requires libpng.def)
|
makefile.os2 => OS/2 Makefile (gcc and emx, requires libpng.def)
|
||||||
makefile.sco => For SCO OSr5 ELF and Unixware 7 with Native cc
|
makefile.sco => For SCO OSr5 ELF and Unixware 7 with Native cc
|
||||||
makefile.sggcc => Silicon Graphics (gcc,
|
makefile.sggcc => Silicon Graphics (gcc,
|
||||||
creates libpng16.so.16.1.6.0)
|
creates libpng16.so.16.1.6.3)
|
||||||
makefile.sgi => Silicon Graphics IRIX makefile (cc, creates static lib)
|
makefile.sgi => Silicon Graphics IRIX makefile (cc, creates static lib)
|
||||||
makefile.solaris => Solaris 2.X makefile (gcc,
|
makefile.solaris => Solaris 2.X makefile (gcc,
|
||||||
creates libpng16.so.16.1.6.0)
|
creates libpng16.so.16.1.6.3)
|
||||||
makefile.so9 => Solaris 9 makefile (gcc,
|
makefile.so9 => Solaris 9 makefile (gcc,
|
||||||
creates libpng16.so.16.1.6.0)
|
creates libpng16.so.16.1.6.3)
|
||||||
makefile.std => Generic UNIX makefile (cc, creates static libpng.a)
|
makefile.std => Generic UNIX makefile (cc, creates static libpng.a)
|
||||||
makefile.sunos => Sun makefile
|
makefile.sunos => Sun makefile
|
||||||
makefile.32sunu => Sun Ultra 32-bit makefile
|
makefile.32sunu => Sun Ultra 32-bit makefile
|
||||||
|
|||||||
@@ -113,6 +113,16 @@ END{
|
|||||||
err = 1
|
err = 1
|
||||||
}
|
}
|
||||||
unexported=0
|
unexported=0
|
||||||
|
# Add a standard header to symbols.new:
|
||||||
|
print ";Version INSERT-VERSION-HERE" >of
|
||||||
|
print ";--------------------------------------------------------------" >of
|
||||||
|
print "; LIBPNG symbol list as a Win32 DEF file" >of
|
||||||
|
print "; Contains all the symbols that can be exported from libpng" >of
|
||||||
|
print ";--------------------------------------------------------------" >of
|
||||||
|
print "LIBRARY" >of
|
||||||
|
print "" >of
|
||||||
|
print "EXPORTS" >of
|
||||||
|
|
||||||
for (o=1; o<=lasto; ++o) {
|
for (o=1; o<=lasto; ++o) {
|
||||||
if (symbol[o] == "" && removed[o] == "") {
|
if (symbol[o] == "" && removed[o] == "") {
|
||||||
if (unexported == 0) unexported = o
|
if (unexported == 0) unexported = o
|
||||||
|
|||||||
@@ -8,31 +8,22 @@
|
|||||||
* and license in png.h
|
* and license in png.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* These macros exist to make the header and trailer shorter below: */
|
|
||||||
#define S PNG_DEFN_MAGIC
|
|
||||||
#define E PNG_DEFN_END
|
|
||||||
|
|
||||||
/* Write the export file header: */
|
/* Write the export file header: */
|
||||||
S-;---------------------------------------------------------------E
|
PNG_DFN ";--------------------------------------------------------------"
|
||||||
S-; LIBPNG module definition file for OS/2-E
|
PNG_DFN "; LIBPNG module definition file for OS/2"
|
||||||
S-;---------------------------------------------------------------E
|
PNG_DFN ";--------------------------------------------------------------"
|
||||||
S--E
|
PNG_DFN ""
|
||||||
S-; If you give the library an explicit name one or other files-E
|
PNG_DFN "; If you give the library an explicit name one or other files"
|
||||||
S-; may need modifying to support the new name on one or more-E
|
PNG_DFN "; may need modifying to support the new name on one or more"
|
||||||
S-; systems.-E
|
PNG_DFN "; systems."
|
||||||
S-LIBRARY-E
|
PNG_DFN "LIBRARY"
|
||||||
S-OS2 DESCRIPTION "PNG image compression library"-E
|
PNG_DFN "OS2 DESCRIPTION "PNG image compression library""
|
||||||
S-OS2 CODE PRELOAD MOVEABLE DISCARDABLE-E
|
PNG_DFN "OS2 CODE PRELOAD MOVEABLE DISCARDABLE"
|
||||||
S--E
|
PNG_DFN ""
|
||||||
S-EXPORTS-E
|
PNG_DFN "EXPORTS"
|
||||||
S-;Version 1.6.0-E
|
PNG_DFN ";Version 1.6.3"
|
||||||
|
|
||||||
/* NOTE: PNG_JOIN is interpreted by the calling script as a signal to
|
|
||||||
* join the two things on either side, so we can do symbol
|
|
||||||
* substitution within the name, regular C ## joins the pp-tokens,
|
|
||||||
* not their final values.
|
|
||||||
*/
|
|
||||||
#define PNG_EXPORTA(ordinal, type, name, args, attributes)\
|
#define PNG_EXPORTA(ordinal, type, name, args, attributes)\
|
||||||
PNG_DEFN_MAGIC- SYMBOL_PREFIX PNG_JOIN name-PNG_DEFN_END
|
PNG_DFN "@" SYMBOL_PREFIX "@@" name "@"
|
||||||
|
|
||||||
#include "../png.h"
|
#include "../png.h"
|
||||||
|
|||||||
203
scripts/dfn.awk
Normal file
203
scripts/dfn.awk
Normal file
@@ -0,0 +1,203 @@
|
|||||||
|
#!/bin/awk -f
|
||||||
|
# scripts/dfn.awk - process a .dfn file
|
||||||
|
#
|
||||||
|
# last changed in libpng version 1.5.14 - February 4, 2013
|
||||||
|
#
|
||||||
|
# Copyright (c) 2013-2013 Glenn Randers-Pehrson
|
||||||
|
#
|
||||||
|
# This code is released under the libpng license.
|
||||||
|
# For conditions of distribution and use, see the disclaimer
|
||||||
|
# and license in png.h
|
||||||
|
|
||||||
|
# The output of this script is written to the file given by
|
||||||
|
# the variable 'out', which should be set on the command line.
|
||||||
|
# Error messages are printed to stdout and if any are printed
|
||||||
|
# the script will exit with error code 1.
|
||||||
|
|
||||||
|
BEGIN{
|
||||||
|
out="/dev/null" # as a flag
|
||||||
|
out_count=0 # count of output lines
|
||||||
|
err=0 # set if an error occured
|
||||||
|
sort=0 # sort the output
|
||||||
|
array[""]=""
|
||||||
|
}
|
||||||
|
|
||||||
|
# The output file must be specified before any input:
|
||||||
|
NR==1 && out == "/dev/null" {
|
||||||
|
print "out=output.file must be given on the command line"
|
||||||
|
# but continue without setting the error code, this allows the
|
||||||
|
# script to be checked easily
|
||||||
|
}
|
||||||
|
|
||||||
|
# Output can be sorted; two lines are recognized
|
||||||
|
$1 == "PNG_DFN_START_SORT"{
|
||||||
|
sort=0+$2
|
||||||
|
next
|
||||||
|
}
|
||||||
|
|
||||||
|
$1 ~ /^PNG_DFN_END_SORT/{
|
||||||
|
# Do a very simple, slow, sort; notice that blank lines won't be
|
||||||
|
# output by this
|
||||||
|
for (entry in array) {
|
||||||
|
while (array[entry] != "") {
|
||||||
|
key = entry
|
||||||
|
value = array[key]
|
||||||
|
array[key] = ""
|
||||||
|
|
||||||
|
for (alt in array) {
|
||||||
|
if (array[alt] != "" && alt < key) {
|
||||||
|
array[key] = value
|
||||||
|
value = array[alt]
|
||||||
|
key = alt
|
||||||
|
array[alt] = ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
print value >out
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sort=0
|
||||||
|
next
|
||||||
|
}
|
||||||
|
|
||||||
|
/^[^"]*PNG_DFN *".*"[^"]*$/{
|
||||||
|
# A definition line, apparently correctly formated, extract the
|
||||||
|
# definition then replace any doubled "" that remain with a single
|
||||||
|
# double quote. Notice that the original doubled double quotes
|
||||||
|
# may have been split by tokenization
|
||||||
|
#
|
||||||
|
# Sometimes GCC splits the PNG_DFN lines, we know this has happened
|
||||||
|
# if the quotes aren't closed and must read another line. In this
|
||||||
|
# case it is essential to reject lines that start '#' because those
|
||||||
|
# are introduced #line directives.
|
||||||
|
orig=$0
|
||||||
|
line=$0
|
||||||
|
lineno=FNR
|
||||||
|
if (lineno == "") lineno=NR
|
||||||
|
|
||||||
|
if (sub(/^[^"]*PNG_DFN *"/,"",line) != 1) {
|
||||||
|
print "line", lineno ": processing failed:"
|
||||||
|
print orig
|
||||||
|
err=1
|
||||||
|
next
|
||||||
|
} else {
|
||||||
|
++out_count
|
||||||
|
}
|
||||||
|
|
||||||
|
# Now examine quotes within the value:
|
||||||
|
#
|
||||||
|
# @" - delete this and any following spaces
|
||||||
|
# "@ - delete this and any preceding spaces
|
||||||
|
# @' - replace this by a double quote
|
||||||
|
#
|
||||||
|
# This allows macro substitution by the C compiler thus:
|
||||||
|
#
|
||||||
|
# #define first_name John
|
||||||
|
# #define last_name Smith
|
||||||
|
#
|
||||||
|
# PNG_DFN"#define name @'@" first_name "@ @" last_name "@@'"
|
||||||
|
#
|
||||||
|
# Might get C preprocessed to:
|
||||||
|
#
|
||||||
|
# PNG_DFN "#define foo @'@" John "@ @" Smith "@@'"
|
||||||
|
#
|
||||||
|
# Which this script reduces to:
|
||||||
|
#
|
||||||
|
# #define name "John Smith"
|
||||||
|
#
|
||||||
|
while (1) {
|
||||||
|
# While there is an @" remove it and the next "@
|
||||||
|
if (line ~ /@"/) {
|
||||||
|
if (line ~ /@".*"@/) {
|
||||||
|
# Do this special case first to avoid swallowing extra spaces
|
||||||
|
# before or after the @ stuff:
|
||||||
|
if (!sub(/@" *"@/, "", line)) {
|
||||||
|
# Ok, do it in pieces - there has to be a non-space between the
|
||||||
|
# two. NOTE: really weird things happen if a leading @" is
|
||||||
|
# lost - the code will error out below (I believe).
|
||||||
|
if (!sub(/@" */, "", line) || !sub(/ *"@/, "", line)) {
|
||||||
|
print "line", lineno, ": internal error:", orig
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# There is no matching "@. Assume a split line
|
||||||
|
else while (1) {
|
||||||
|
if (getline nextline) {
|
||||||
|
# If the line starts with '#' it is a preprocesor line directive
|
||||||
|
# from cc -E, skip it:
|
||||||
|
if (nextline !~ /^#/) {
|
||||||
|
line = line " " nextline
|
||||||
|
break
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
# This is end-of-input - probably a missig "@ on the first line:
|
||||||
|
print "line", lineno ": unbalanced @\" ... \"@ pair"
|
||||||
|
err=1
|
||||||
|
next
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Keep going until all the @" have gone
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
# Attempt to remove a trailing " (not preceded by '@') - if this can
|
||||||
|
# be done stop now, if not assume a split line again
|
||||||
|
if (sub(/"[^"]*$/, "", line))
|
||||||
|
break
|
||||||
|
|
||||||
|
# Read another line
|
||||||
|
while (1) {
|
||||||
|
if (getline nextline) {
|
||||||
|
if (nextline !~ /^#/) {
|
||||||
|
line = line " " nextline
|
||||||
|
# Go back to stripping @" "@ pairs
|
||||||
|
break
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
print "line", lineno ": unterminated PNG_DFN string"
|
||||||
|
err=1
|
||||||
|
next
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Put any needed double quotes in (at the end, because these would otherwise
|
||||||
|
# interfere with the processing above.)
|
||||||
|
gsub(/@'/,"\"", line)
|
||||||
|
|
||||||
|
# Remove any trailing spaces (not really required, but for
|
||||||
|
# editorial consistency
|
||||||
|
sub(/ *$/, "", line)
|
||||||
|
|
||||||
|
# Remove trailing CR
|
||||||
|
sub(/
|
||||||
|
$/, "", line)
|
||||||
|
|
||||||
|
if (sort) {
|
||||||
|
if (split(line, parts) < sort) {
|
||||||
|
print "line", lineno ": missing sort field:", line
|
||||||
|
err=1
|
||||||
|
} else
|
||||||
|
array[parts[sort]] = line
|
||||||
|
}
|
||||||
|
|
||||||
|
else
|
||||||
|
print line >out
|
||||||
|
next
|
||||||
|
}
|
||||||
|
|
||||||
|
/PNG_DFN/{
|
||||||
|
print "line", NR, "incorrectly formated PNG_DFN line:"
|
||||||
|
print $0
|
||||||
|
err = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
END{
|
||||||
|
if (out_count > 0 || err > 0)
|
||||||
|
exit err
|
||||||
|
|
||||||
|
print "no definition lines found"
|
||||||
|
exit 1
|
||||||
@@ -10,10 +10,10 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define PNG_INTERNAL_DATA(type, name, array)\
|
#define PNG_INTERNAL_DATA(type, name, array)\
|
||||||
PNG_DEFN_MAGIC-name-PNG_DEFN_END
|
PNG_DFN "@" name "@"
|
||||||
|
|
||||||
#define PNG_INTERNAL_FUNCTION(type, name, args, attributes)\
|
#define PNG_INTERNAL_FUNCTION(type, name, args, attributes)\
|
||||||
PNG_DEFN_MAGIC-name-PNG_DEFN_END
|
PNG_DFN "@" name "@"
|
||||||
|
|
||||||
#define PNGPREFIX_H /* self generation */
|
#define PNGPREFIX_H /* self generation */
|
||||||
#include "../pngpriv.h"
|
#include "../pngpriv.h"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
|
|
||||||
# Modeled after libxml-config.
|
# Modeled after libxml-config.
|
||||||
|
|
||||||
version=1.6.0
|
version=1.6.3
|
||||||
prefix=""
|
prefix=""
|
||||||
libdir=""
|
libdir=""
|
||||||
libs=""
|
libs=""
|
||||||
|
|||||||
@@ -5,6 +5,6 @@ includedir=@includedir@/libpng16
|
|||||||
|
|
||||||
Name: libpng
|
Name: libpng
|
||||||
Description: Loads and saves PNG files
|
Description: Loads and saves PNG files
|
||||||
Version: 1.6.0
|
Version: 1.6.3
|
||||||
Libs: -L${libdir} -lpng16
|
Libs: -L${libdir} -lpng16
|
||||||
Cflags: -I${includedir}
|
Cflags: -I${includedir}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
VERMAJ = 1
|
VERMAJ = 1
|
||||||
VERMIN = 6
|
VERMIN = 6
|
||||||
VERMIC = 0
|
VERMIC = 3
|
||||||
VER = $(VERMAJ).$(VERMIN).$(VERMIC)
|
VER = $(VERMAJ).$(VERMIN).$(VERMIC)
|
||||||
NAME = libpng
|
NAME = libpng
|
||||||
PACKAGE = $(NAME)-$(VER)
|
PACKAGE = $(NAME)-$(VER)
|
||||||
|
|||||||
@@ -26,19 +26,24 @@ SYMLINKS= libpng/png.h ${INCSDIR}/../png.h \
|
|||||||
libpng/pngconf.h ${INCSDIR}/../pngconf.h \
|
libpng/pngconf.h ${INCSDIR}/../pngconf.h \
|
||||||
libpng/pnglibconf.h ${INCSDIR}/../pnglibconf.h
|
libpng/pnglibconf.h ${INCSDIR}/../pnglibconf.h
|
||||||
|
|
||||||
LDADD+= -lm -lz
|
# where make install finds libz.a and zlib.h
|
||||||
#LDADD+= -lm -lz -lssp_nonshared # for OSVERSION < 800000 ?
|
ZLIBLIB= /usr/lib
|
||||||
|
ZLIBINC= /usr/include
|
||||||
|
|
||||||
|
LDADD+= -lm -lz
|
||||||
|
#LDADD+= -lm -lz -lssp_nonshared # for OSVERSION < 800000 ?
|
||||||
|
|
||||||
DPADD+= ${LIBM} ${LIBZ}
|
DPADD+= ${LIBM} ${LIBZ}
|
||||||
|
|
||||||
CFLAGS+= -I.
|
CFLAGS+= -I. -I${ZLIBINC}
|
||||||
|
|
||||||
SRCS= png.c pngset.c pngget.c pngrutil.c pngtrans.c pngwutil.c \
|
SRCS= png.c pngset.c pngget.c pngrutil.c pngtrans.c pngwutil.c \
|
||||||
pngread.c pngrio.c pngwio.c pngwrite.c pngrtran.c \
|
pngread.c pngrio.c pngwio.c pngwrite.c pngrtran.c \
|
||||||
pngwtran.c pngmem.c pngerror.c pngpread.c
|
pngwtran.c pngmem.c pngerror.c pngpread.c
|
||||||
|
|
||||||
pngtest: pngtest.o libpng.a
|
pngtest: pngtest.o libpng.a
|
||||||
${CC} ${CFLAGS} -L. -static -o pngtest pngtest.o -lpng -lz -lm
|
${CC} ${CFLAGS} -L. -static -o pngtest pngtest.o -L${ZLIBLIB} \
|
||||||
|
-lpng ${LDADD}
|
||||||
|
|
||||||
CLEANFILES= pngtest pngtest.o pngout.png
|
CLEANFILES= pngtest pngtest.o pngout.png
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
# Library name:
|
# Library name:
|
||||||
LIBNAME = libpng16
|
LIBNAME = libpng16
|
||||||
PNGMAJ = 16
|
PNGMAJ = 16
|
||||||
RELEASE = 0
|
RELEASE = 3
|
||||||
|
|
||||||
# Shared library names:
|
# Shared library names:
|
||||||
LIBSO=$(LIBNAME).so
|
LIBSO=$(LIBNAME).so
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ exec_prefix=$(prefix)
|
|||||||
# Library name:
|
# Library name:
|
||||||
LIBNAME = libpng16
|
LIBNAME = libpng16
|
||||||
PNGMAJ = 16
|
PNGMAJ = 16
|
||||||
RELEASE = 0
|
RELEASE = 3
|
||||||
|
|
||||||
# Shared library names:
|
# Shared library names:
|
||||||
LIBSO=$(LIBNAME).dll
|
LIBSO=$(LIBNAME).dll
|
||||||
@@ -43,7 +43,7 @@ LN_SF=ln -sf
|
|||||||
|
|
||||||
#ARCH = -march=pentium3
|
#ARCH = -march=pentium3
|
||||||
#ARCH = -march=i686
|
#ARCH = -march=i686
|
||||||
ARCH =
|
ARCH =
|
||||||
CDEBUG = -g -DPNG_DEBUG=5
|
CDEBUG = -g -DPNG_DEBUG=5
|
||||||
LDDEBUG =
|
LDDEBUG =
|
||||||
CRELEASE = -O2
|
CRELEASE = -O2
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ INCSDIR=${LOCALBASE}/include/libpng16
|
|||||||
|
|
||||||
LIB= png16
|
LIB= png16
|
||||||
SHLIB_MAJOR= 0
|
SHLIB_MAJOR= 0
|
||||||
SHLIB_MINOR= 1.6.0
|
SHLIB_MINOR= 1.6.3
|
||||||
SRCS= png.c pngset.c pngget.c pngrutil.c pngtrans.c pngwutil.c \
|
SRCS= png.c pngset.c pngget.c pngrutil.c pngtrans.c pngwutil.c \
|
||||||
pngread.c pngrio.c pngwio.c pngwrite.c pngrtran.c \
|
pngread.c pngrio.c pngwio.c pngwrite.c pngrtran.c \
|
||||||
pngwtran.c pngmem.c pngerror.c pngpread.c
|
pngwtran.c pngmem.c pngerror.c pngpread.c
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ INCSDIR=${LOCALBASE}/include
|
|||||||
|
|
||||||
LIB= png
|
LIB= png
|
||||||
SHLIB_MAJOR= 16
|
SHLIB_MAJOR= 16
|
||||||
SHLIB_MINOR= 1.6.0
|
SHLIB_MINOR= 1.6.3
|
||||||
SRCS= png.c pngset.c pngget.c pngrutil.c pngtrans.c pngwutil.c \
|
SRCS= png.c pngset.c pngget.c pngrutil.c pngtrans.c pngwutil.c \
|
||||||
pngread.c pngrio.c pngwio.c pngwrite.c pngrtran.c \
|
pngread.c pngrio.c pngwio.c pngwrite.c pngrtran.c \
|
||||||
pngwtran.c pngmem.c pngerror.c pngpread.c
|
pngwtran.c pngmem.c pngerror.c pngpread.c
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ LIBDIR= ${PREFIX}/lib
|
|||||||
MANDIR= ${PREFIX}/man/cat
|
MANDIR= ${PREFIX}/man/cat
|
||||||
|
|
||||||
SHLIB_MAJOR= 16
|
SHLIB_MAJOR= 16
|
||||||
SHLIB_MINOR= 1.6.0
|
SHLIB_MINOR= 1.6.3
|
||||||
|
|
||||||
LIB= png
|
LIB= png
|
||||||
SRCS= png.c pngerror.c pngget.c pngmem.c pngpread.c \
|
SRCS= png.c pngerror.c pngget.c pngmem.c pngpread.c \
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ CPP = $(CC) -E
|
|||||||
ECHO = echo
|
ECHO = echo
|
||||||
|
|
||||||
DFNFLAGS = # DFNFLAGS contains -D options to use in the libpng build
|
DFNFLAGS = # DFNFLAGS contains -D options to use in the libpng build
|
||||||
|
DFA_EXTRA = # extra files that can be used to control configuration
|
||||||
CFLAGS=-I$(ZLIBINC) -O # -g -DPNG_DEBUG=5
|
CFLAGS=-I$(ZLIBINC) -O # -g -DPNG_DEBUG=5
|
||||||
LDFLAGS=-L. -L$(ZLIBLIB) -lpng -lz -lm
|
LDFLAGS=-L. -L$(ZLIBLIB) -lpng -lz -lm
|
||||||
|
|
||||||
@@ -50,23 +51,23 @@ all: libpng.a pngtest
|
|||||||
|
|
||||||
# The standard pnglibconf.h exists as scripts/pnglibconf.h.prebuilt,
|
# The standard pnglibconf.h exists as scripts/pnglibconf.h.prebuilt,
|
||||||
# copy this if the following doesn't work.
|
# copy this if the following doesn't work.
|
||||||
pnglibconf.dfn: scripts/pnglibconf.dfa scripts/options.awk pngconf.h
|
|
||||||
$(RM_F) $@ dfn?.out
|
|
||||||
$(AWK) -f scripts/options.awk out=dfn1.out version=search pngconf.h\
|
|
||||||
scripts/pnglibconf.dfa $(DFA_XTRA) 1>&2
|
|
||||||
$(AWK) -f scripts/options.awk out=dfn2.out dfn1.out 1>&2
|
|
||||||
cp dfn2.out $@
|
|
||||||
$(RM_F) dfn?.out
|
|
||||||
|
|
||||||
pnglibconf.h: pnglibconf.dfn
|
pnglibconf.h: pnglibconf.dfn
|
||||||
$(RM_F) $@ dfn.c dfn?.out
|
$(RM_F) $@ pnglibconf.c pnglibconf.out pnglibconf.tmp
|
||||||
$(ECHO) '#include "pnglibconf.dfn"' >dfn.c
|
$(ECHO) '#include "pnglibconf.dfn"' >pnglibconf.c
|
||||||
$(CPP) $(DFNFLAGS) dfn.c >dfn1.out
|
$(ECHO) "If '$(CC) -E' crashes try /lib/cpp (e.g. CPP='/lib/cpp')" >&2
|
||||||
$(SED) -n -e 's|^.*PNG_DEFN_MAGIC *-\(.*\)- *PNG_DEFN_END.*$$|\1|p'\
|
$(CPP) $(DFNFLAGS) pnglibconf.c >pnglibconf.out
|
||||||
dfn1.out >dfn2.out
|
$(AWK) -f "scripts/dfn.awk" out="pnglibconf.tmp" pnglibconf.out 1>&2
|
||||||
$(SED) -e 's| *PNG_JOIN *||g' -e 's| *$$||' dfn2.out >dfn3.out
|
mv pnglibconf.tmp $@
|
||||||
cp dfn3.out $@
|
|
||||||
$(RM_F) dfn.c dfn?.out
|
pnglibconf.dfn: scripts/pnglibconf.dfa scripts/options.awk pngconf.h pngusr.dfa $(DFA_XTRA)
|
||||||
|
$(RM_F) $@ pnglibconf.pre pnglibconf.tmp
|
||||||
|
$(ECHO) "Calling $(AWK) from scripts/pnglibconf.mak" >&2
|
||||||
|
$(ECHO) "If 'awk' crashes try a better awk (e.g. AWK='nawk')" >&2
|
||||||
|
$(AWK) -f scripts/options.awk out="pnglibconf.pre"\
|
||||||
|
version=search pngconf.h scripts/pnglibconf.dfa\
|
||||||
|
pngusr.dfa $(DFA_XTRA) 1>&2
|
||||||
|
$(AWK) -f scripts/options.awk out="pnglibconf.tmp" pnglibconf.pre 1>&2
|
||||||
|
mv pnglibconf.tmp $@
|
||||||
|
|
||||||
libpng.a: $(OBJS)
|
libpng.a: $(OBJS)
|
||||||
$(AR_RC) $@ $(OBJS)
|
$(AR_RC) $@ $(OBJS)
|
||||||
@@ -96,7 +97,7 @@ install: libpng.a pnglibconf.h
|
|||||||
chmod 644 $(DESTDIR)$(LIBPATH)/libpng.a
|
chmod 644 $(DESTDIR)$(LIBPATH)/libpng.a
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(RM_F) *.o libpng.a pngtest pngout.png pnglibconf.* dfn.c dfn?.out
|
$(RM_F) *.o libpng.a pngtest pngout.png pnglibconf.*
|
||||||
|
|
||||||
DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
|
DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
|
||||||
writelock:
|
writelock:
|
||||||
|
|||||||
@@ -30,22 +30,33 @@
|
|||||||
# are copied to the preprocessed file).
|
# are copied to the preprocessed file).
|
||||||
|
|
||||||
BEGIN{
|
BEGIN{
|
||||||
out="/dev/null" # intermediate, preprocessed, file
|
out="" # intermediate, preprocessed, file
|
||||||
pre=-1 # preprocess (first line)
|
pre=-1 # preprocess (first line)
|
||||||
version="libpng version unknown" # version information
|
version="libpng version unknown" # version information
|
||||||
version_file="" # where to find the version
|
version_file="" # where to find the version
|
||||||
err=0 # in-line exit sets this
|
err=0 # in-line exit sets this
|
||||||
start="PNG_DEFN_MAGIC-" # Arbitrary start
|
# The following definitions prevent the C preprocessor noticing the lines
|
||||||
end="-PNG_DEFN_END" # Arbitrary end
|
# that will be in the final output file. Some C preprocessors tokenise
|
||||||
ct="PNG_JOIN" # Join two tokens
|
# the lines, for example by inserting spaces around operators, and all
|
||||||
cx= "/" ct "*" # Open C comment for output file
|
# C preprocessors notice lines that start with '#', most remove comments.
|
||||||
comment=start cx # Comment start
|
# The technique adopted here is to make the final output lines into
|
||||||
|
# C strings (enclosed in double quotes), preceeded by PNG_DFN. As a
|
||||||
|
# consequence the output cannot contain a 'raw' double quote - instead put
|
||||||
|
# @' in, this will be replaced by a single " afterward. See the parser
|
||||||
|
# script dfn.awk for more capabilities (not required here). Note that if
|
||||||
|
# you need a " in a 'setting' in pnglibconf.dfa it must also be @'!
|
||||||
|
dq="@'" # For a single double quote
|
||||||
|
start=" PNG_DFN \"" # Start stuff to output (can't contain a "!)
|
||||||
|
end="\" " # End stuff to output
|
||||||
|
subs="@\" " # Substitute start (substitute a C macro)
|
||||||
|
sube=" \"@" # Substitute end
|
||||||
|
comment=start "/*" # Comment start
|
||||||
cend="*/" end # Comment end
|
cend="*/" end # Comment end
|
||||||
def=start "#define PNG_" ct # Arbitrary define
|
def=start "#define PNG_" # Arbitrary define
|
||||||
sup=ct "_SUPPORTED" end # end supported option
|
sup="_SUPPORTED" end # end supported option
|
||||||
und=comment "#undef PNG_" ct # Unsupported option
|
und=comment "#undef PNG_" # Unsupported option
|
||||||
une=ct "_SUPPORTED" cend # end unsupported option
|
une="_SUPPORTED" cend # end unsupported option
|
||||||
error=start "ERROR:" # error message
|
error=start "ERROR:" # error message, terminate with 'end'
|
||||||
|
|
||||||
# Variables
|
# Variables
|
||||||
deb=0 # debug - set on command line
|
deb=0 # debug - set on command line
|
||||||
@@ -53,11 +64,15 @@ BEGIN{
|
|||||||
logunsupported=0 # write unsupported options too
|
logunsupported=0 # write unsupported options too
|
||||||
|
|
||||||
# Precreate arrays
|
# Precreate arrays
|
||||||
|
# for each option:
|
||||||
option[""] = "" # list of all options: default enabled/disabled
|
option[""] = "" # list of all options: default enabled/disabled
|
||||||
done[""] = 1 # marks option as having been output
|
done[""] = 1 # marks option as having been output
|
||||||
requires[""] = "" # requires by option
|
requires[""] = "" # requires by option
|
||||||
iffs[""] = "" # if by option
|
iffs[""] = "" # if by option
|
||||||
enabledby[""] = "" # options that enable it by option
|
enabledby[""] = "" # options that enable it by option
|
||||||
|
sets[""] = "" # settings set by each option
|
||||||
|
setval[""] = "" # value to set (indexed: 'option sets[option]')
|
||||||
|
# for each setting:
|
||||||
setting[""] = "" # requires by setting
|
setting[""] = "" # requires by setting
|
||||||
defaults[""] = "" # used for a defaulted value
|
defaults[""] = "" # used for a defaulted value
|
||||||
doneset[""] = 1 # marks setting as having been output
|
doneset[""] = 1 # marks setting as having been output
|
||||||
@@ -68,7 +83,7 @@ BEGIN{
|
|||||||
}
|
}
|
||||||
|
|
||||||
# The output file must be specified before any input:
|
# The output file must be specified before any input:
|
||||||
out == "/dev/null" {
|
out == "" {
|
||||||
print "out=output.file must be given on the command line"
|
print "out=output.file must be given on the command line"
|
||||||
err = 1
|
err = 1
|
||||||
exit 1
|
exit 1
|
||||||
@@ -102,7 +117,6 @@ pre && version == "search" && version_file != FILENAME{
|
|||||||
|
|
||||||
pre && version == "search" && $0 ~ /^ \* libpng version/{
|
pre && version == "search" && $0 ~ /^ \* libpng version/{
|
||||||
version = substr($0, 4)
|
version = substr($0, 4)
|
||||||
gsub(/\./, " PNG_JOIN . PNG_JOIN", version)
|
|
||||||
print "version =", version >out
|
print "version =", version >out
|
||||||
next
|
next
|
||||||
}
|
}
|
||||||
@@ -190,7 +204,7 @@ $1 == "com"{
|
|||||||
if (NF > 1) {
|
if (NF > 1) {
|
||||||
# sub(/^[ ]*com[ ]*/, "")
|
# sub(/^[ ]*com[ ]*/, "")
|
||||||
$1 = ""
|
$1 = ""
|
||||||
print comment, $0, cend >out
|
print comment $0, cend >out
|
||||||
} else
|
} else
|
||||||
print start end >out
|
print start end >out
|
||||||
next
|
next
|
||||||
@@ -227,7 +241,9 @@ $1 == "file" && NF >= 2{
|
|||||||
next
|
next
|
||||||
}
|
}
|
||||||
|
|
||||||
# option NAME ( (requires|enables|if) NAME* | on | off | disabled )*
|
# option NAME ( (requires|enables|if) NAME* | on | off | disabled |
|
||||||
|
# sets SETTING VALUE+ )*
|
||||||
|
#
|
||||||
# Declares an option 'NAME' and describes its default setting (disabled)
|
# Declares an option 'NAME' and describes its default setting (disabled)
|
||||||
# and its relationship to other options. The option is disabled
|
# and its relationship to other options. The option is disabled
|
||||||
# unless *all* the options listed after 'requires' are set and at
|
# unless *all* the options listed after 'requires' are set and at
|
||||||
@@ -242,46 +258,77 @@ $1 == "file" && NF >= 2{
|
|||||||
# be later) entry may turn an option on or off explicitly.
|
# be later) entry may turn an option on or off explicitly.
|
||||||
|
|
||||||
$1 == "option" && NF >= 2{
|
$1 == "option" && NF >= 2{
|
||||||
onoff = option[$2] # records current (and the default is "", enabled)
|
opt = $2
|
||||||
|
sub(/,$/,"",opt)
|
||||||
|
onoff = option[opt] # records current (and the default is "", enabled)
|
||||||
key = ""
|
key = ""
|
||||||
for (i=3; i<=NF; ++i) {
|
istart = 3
|
||||||
if ($(i) == "on" || $(i) == "off" || $(i) == "disabled") {
|
do {
|
||||||
key = ""
|
if (istart == 1) { # continuation line
|
||||||
if (onoff != $(i)) {
|
val = getline
|
||||||
# on or off can zap disabled or enabled:
|
|
||||||
if (onoff == "" || (onoff == "disabled" || onoff == "enabled") && ($(i) == "on" || $(i) == "off")) {
|
if (val != 1) { # error reading it
|
||||||
# It's easy to mis-spell the option when turning it
|
if (val == 0)
|
||||||
# on or off, so warn about it here:
|
print "option", opt ": ERROR: missing contination line"
|
||||||
if (onoff == "" && ($(i) == "on" || $(i) == "off")) {
|
else
|
||||||
print $2 ": ERROR: turning unrecognized option", $(i)
|
print "option", opt ": ERROR: error reading continuation line"
|
||||||
# For the moment error out - it is safer
|
|
||||||
err = 1 # prevent END{} running
|
# This is a hard error
|
||||||
exit 1
|
err = 1 # prevent END{} running
|
||||||
}
|
exit 1
|
||||||
onoff = $(i)
|
|
||||||
} else {
|
|
||||||
# Print a message, otherwise the error
|
|
||||||
# below is incomprehensible
|
|
||||||
print $2 ": currently", onoff ": attempt to turn", $(i)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else if ($(i) == "requires" || $(i) == "if" || $(i) == "enables") {
|
}
|
||||||
key = $(i)
|
|
||||||
} else if (key == "requires") {
|
for (i=istart; i<=NF; ++i) {
|
||||||
requires[$2] = requires[$2] " " $(i)
|
val=$(i)
|
||||||
} else if (key == "if") {
|
sub(/,$/,"",val)
|
||||||
iffs[$2] = iffs[$2] " " $(i)
|
if (val == "on" || val == "off" || val == "disabled") {
|
||||||
} else if (key == "enables") {
|
key = ""
|
||||||
enabledby[$(i)] = enabledby[$(i)] " " $2
|
if (onoff != val) {
|
||||||
} else
|
# on or off can zap disabled or enabled:
|
||||||
break # bad line format
|
if (onoff == "" || (onoff == "disabled" || onoff == "enabled") &&
|
||||||
}
|
(val == "on" || val == "off")) {
|
||||||
|
# It's easy to mis-spell the option when turning it
|
||||||
|
# on or off, so warn about it here:
|
||||||
|
if (onoff == "" && (val == "on" || val == "off")) {
|
||||||
|
print "option", opt ": ERROR: turning unrecognized option", val
|
||||||
|
# For the moment error out - it is safer
|
||||||
|
err = 1 # prevent END{} running
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
onoff = val
|
||||||
|
} else {
|
||||||
|
# Print a message, otherwise the error
|
||||||
|
# below is incomprehensible
|
||||||
|
print "option", opt ": currently", onoff ": attempt to turn", val
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (val == "requires" || val == "if" || val == "enables" || val =="sets") {
|
||||||
|
key = val
|
||||||
|
} else if (key == "requires") {
|
||||||
|
requires[opt] = requires[opt] " " val
|
||||||
|
} else if (key == "if") {
|
||||||
|
iffs[opt] = iffs[opt] " " val
|
||||||
|
} else if (key == "enables") {
|
||||||
|
enabledby[val] = enabledby[val] " " opt
|
||||||
|
} else if (key == "sets") {
|
||||||
|
sets[opt] = sets[opt] " " val
|
||||||
|
key = "setval"
|
||||||
|
set = val
|
||||||
|
} else if (key == "setval") {
|
||||||
|
setval[opt " " set] = setval[opt " " set] " " val
|
||||||
|
} else
|
||||||
|
break # bad line format
|
||||||
|
}
|
||||||
|
|
||||||
|
istart = 1
|
||||||
|
} while (i > NF && $0 ~ /,$/)
|
||||||
|
|
||||||
if (i > NF) {
|
if (i > NF) {
|
||||||
# Set the option, defaulting to 'enabled'
|
# Set the option, defaulting to 'enabled'
|
||||||
if (onoff == "") onoff = "enabled"
|
if (onoff == "") onoff = "enabled"
|
||||||
option[$2] = onoff
|
option[opt] = onoff
|
||||||
next
|
next
|
||||||
}
|
}
|
||||||
# Else fall through to the error handler
|
# Else fall through to the error handler
|
||||||
@@ -301,41 +348,62 @@ $1 == "option" && NF >= 2{
|
|||||||
pre != 0 && $1 == "chunk" && NF >= 2{
|
pre != 0 && $1 == "chunk" && NF >= 2{
|
||||||
# 'chunk' is handled on the first pass by writing appropriate
|
# 'chunk' is handled on the first pass by writing appropriate
|
||||||
# 'option' lines into the intermediate file.
|
# 'option' lines into the intermediate file.
|
||||||
|
opt = $2
|
||||||
|
sub(/,$/,"",opt)
|
||||||
onoff = ""
|
onoff = ""
|
||||||
reqread = ""
|
reqread = ""
|
||||||
reqwrite = ""
|
reqwrite = ""
|
||||||
enables = ""
|
enables = ""
|
||||||
i = 3 # indicates format error
|
req = 0
|
||||||
if (NF > 2) {
|
istart = 3
|
||||||
|
do {
|
||||||
|
if (istart == 1) { # continuation line
|
||||||
|
val = getline
|
||||||
|
|
||||||
|
if (val != 1) { # error reading it
|
||||||
|
if (val == 0)
|
||||||
|
print "chunk", opt ": ERROR: missing contination line"
|
||||||
|
else
|
||||||
|
print "chunk", opt ": ERROR: error reading continuation line"
|
||||||
|
|
||||||
|
# This is a hard error
|
||||||
|
err = 1 # prevent END{} running
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# read the keywords/additional OPTS
|
# read the keywords/additional OPTS
|
||||||
req = 0
|
for (i=istart; i<=NF; ++i) {
|
||||||
for (i=3; i<=NF; ++i) {
|
val = $(i)
|
||||||
if ($(i) == "on" || $(i) == "off" || $(i) == "disabled") {
|
sub(/,$/,"",val)
|
||||||
if (onoff != $(i)) {
|
if (val == "on" || val == "off" || val == "disabled") {
|
||||||
|
if (onoff != val) {
|
||||||
if (onoff == "")
|
if (onoff == "")
|
||||||
onoff = $(i)
|
onoff = val
|
||||||
else
|
else
|
||||||
break # on/off conflict
|
break # on/off conflict
|
||||||
}
|
}
|
||||||
req = 0
|
req = 0
|
||||||
} else if ($(i) == "requires")
|
} else if (val == "requires")
|
||||||
req = 1
|
req = 1
|
||||||
else if ($(i) == "enables")
|
else if (val == "enables")
|
||||||
req = 2
|
req = 2
|
||||||
else if (req == 1){
|
else if (req == 1){
|
||||||
reqread = reqread " READ_" $(i)
|
reqread = reqread " READ_" val
|
||||||
reqwrite = reqwrite " WRITE_" $(i)
|
reqwrite = reqwrite " WRITE_" val
|
||||||
} else if (req == 2)
|
} else if (req == 2)
|
||||||
enables = enables " " $(i)
|
enables = enables " " val
|
||||||
else
|
else
|
||||||
break # bad line: handled below
|
break # bad line: handled below
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
istart = 1
|
||||||
|
} while (i > NF && $0 ~ /,$/)
|
||||||
|
|
||||||
if (i > NF) {
|
if (i > NF) {
|
||||||
# Output new 'option' lines to the intermediate file (out)
|
# Output new 'option' lines to the intermediate file (out)
|
||||||
print "option READ_" $2, "requires READ_ANCILLARY_CHUNKS" reqread, "enables", $2 enables , onoff >out
|
print "option READ_" opt, "requires READ_ANCILLARY_CHUNKS" reqread, "enables", opt enables , onoff >out
|
||||||
print "option WRITE_" $2, "requires WRITE_ANCILLARY_CHUNKS" reqwrite, "enables", $2 enables, onoff >out
|
print "option WRITE_" opt, "requires WRITE_ANCILLARY_CHUNKS" reqwrite, "enables", opt enables, onoff >out
|
||||||
next
|
next
|
||||||
}
|
}
|
||||||
# Else hit the error handler below - bad line format!
|
# Else hit the error handler below - bad line format!
|
||||||
@@ -466,72 +534,7 @@ END{
|
|||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
# Do the 'setting' values first, the algorithm the standard
|
# Do the options first (allowing options to set settings). The dependency
|
||||||
# tree walk (O(1)) done in an O(2) while/for loop; interations
|
|
||||||
# settings x depth, outputing the deepest required macros
|
|
||||||
# first.
|
|
||||||
print "" >out
|
|
||||||
print "/* SETTINGS */" >out
|
|
||||||
print comment, "settings", cend >out
|
|
||||||
finished = 0
|
|
||||||
while (!finished) {
|
|
||||||
finished = 1
|
|
||||||
movement = 0 # done nothing
|
|
||||||
for (i in setting) if (!doneset[i]) {
|
|
||||||
nreqs = split(setting[i], r)
|
|
||||||
if (nreqs > 0) {
|
|
||||||
for (j=1; j<=nreqs; ++j) if (!doneset[r[j]]) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
if (j<=nreqs) {
|
|
||||||
finished = 0
|
|
||||||
continue # try a different setting
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# All the requirements have been processed, output
|
|
||||||
# this setting.
|
|
||||||
if (deb) print "setting", i
|
|
||||||
print "" >out
|
|
||||||
print "/* setting: ", i >out
|
|
||||||
print " * requires:" setting[i] >out
|
|
||||||
print " * default: ", defaults[i], "*/" >out
|
|
||||||
if (defaults[i] == "") { # no default, only check if defined
|
|
||||||
print "#ifdef PNG_" i >out
|
|
||||||
}
|
|
||||||
for (j=1; j<=nreqs; ++j) {
|
|
||||||
print "# ifndef PNG_" r[j] >out
|
|
||||||
print error, i, "requires", r[j] end >out
|
|
||||||
print "# endif" >out
|
|
||||||
}
|
|
||||||
if (defaults[i] != "") { # default handling
|
|
||||||
print "#ifdef PNG_" i >out
|
|
||||||
}
|
|
||||||
print def i, "PNG_" i end >out
|
|
||||||
if (defaults[i] != "") {
|
|
||||||
print "#else /*default*/" >out
|
|
||||||
# And add the default definition for the benefit
|
|
||||||
# of later settings an options test:
|
|
||||||
print "# define PNG_" i defaults[i] >out
|
|
||||||
print def i defaults[i] end >out
|
|
||||||
}
|
|
||||||
print "#endif" >out
|
|
||||||
|
|
||||||
doneset[i] = 1
|
|
||||||
++movement
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!finished && !movement) {
|
|
||||||
print "setting: loop or missing setting in 'requires', cannot process:"
|
|
||||||
for (i in setting) if (!doneset[i]) {
|
|
||||||
print " setting", i, "requires" setting[i]
|
|
||||||
}
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
print comment, "end of settings", cend >out
|
|
||||||
|
|
||||||
# Now do the options - somewhat more complex. The dependency
|
|
||||||
# tree is thus:
|
# tree is thus:
|
||||||
#
|
#
|
||||||
# name > name
|
# name > name
|
||||||
@@ -623,6 +626,9 @@ END{
|
|||||||
}
|
}
|
||||||
if (err) exit 1
|
if (err) exit 1
|
||||||
|
|
||||||
|
# Sort options:
|
||||||
|
print "PNG_DFN_START_SORT 2" >out
|
||||||
|
|
||||||
# option[i] is now the complete list of all the tokens we may
|
# option[i] is now the complete list of all the tokens we may
|
||||||
# need to output, go through it as above, depth first.
|
# need to output, go through it as above, depth first.
|
||||||
finished = 0
|
finished = 0
|
||||||
@@ -660,8 +666,9 @@ END{
|
|||||||
print "" >out
|
print "" >out
|
||||||
print "/* option:", i, option[i] >out
|
print "/* option:", i, option[i] >out
|
||||||
print " * requires: " requires[i] >out
|
print " * requires: " requires[i] >out
|
||||||
print " * if: " iffs[i] >out
|
print " * if: " iffs[i] >out
|
||||||
print " * enabled-by:" enabledby[i], "*/" >out
|
print " * enabled-by:" enabledby[i] >out
|
||||||
|
print " * sets: " sets[i], "*/" >out
|
||||||
print "#undef PNG_on" >out
|
print "#undef PNG_on" >out
|
||||||
print "#define PNG_on 1" >out
|
print "#define PNG_on 1" >out
|
||||||
|
|
||||||
@@ -744,6 +751,21 @@ END{
|
|||||||
print error, i, "is on: enabled by:" iffs[i] enabledby[i] ", requires" requires[i] end >out
|
print error, i, "is on: enabled by:" iffs[i] enabledby[i] ", requires" requires[i] end >out
|
||||||
} else if (i !~ /^ok_/) {
|
} else if (i !~ /^ok_/) {
|
||||||
print def i sup >out
|
print def i sup >out
|
||||||
|
# Supported option, set required settings
|
||||||
|
nreqs = split(sets[i], r)
|
||||||
|
for (j=1; j<=nreqs; ++j) {
|
||||||
|
print "# ifdef PNG_set_" r[j] >out
|
||||||
|
# Some other option has already set a value:
|
||||||
|
print error, i, "sets", r[j] ": duplicate setting" end >out
|
||||||
|
print error, " previous value: " end "PNG_set_" r[j] >out
|
||||||
|
print "# else" >out
|
||||||
|
# Else set the default: note that this won't accept arbitrary
|
||||||
|
# values, the setval string must be acceptable to all the C
|
||||||
|
# compilers we use. That means it must be VERY simple; a number,
|
||||||
|
# a name or a string.
|
||||||
|
print "# define PNG_set_" r[j], setval[i " " r[j]] >out
|
||||||
|
print "# endif" >out
|
||||||
|
}
|
||||||
}
|
}
|
||||||
print "# endif /* definition */" >out
|
print "# endif /* definition */" >out
|
||||||
print "#endif /*requires, if*/" >out
|
print "#endif /*requires, if*/" >out
|
||||||
@@ -774,10 +796,98 @@ END{
|
|||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
print "PNG_DFN_END_SORT" >out
|
||||||
print comment, "end of options", cend >out
|
print comment, "end of options", cend >out
|
||||||
|
|
||||||
|
# Do the 'setting' values second, the algorithm the standard
|
||||||
|
# tree walk (O(1)) done in an O(2) while/for loop; interations
|
||||||
|
# settings x depth, outputing the deepest required macros
|
||||||
|
# first.
|
||||||
|
print "" >out
|
||||||
|
print "/* SETTINGS */" >out
|
||||||
|
print comment, "settings", cend >out
|
||||||
|
# Sort (in dfn.awk) on field 2, the setting name
|
||||||
|
print "PNG_DFN_START_SORT 2" >out
|
||||||
|
finished = 0
|
||||||
|
while (!finished) {
|
||||||
|
finished = 1
|
||||||
|
movement = 0 # done nothing
|
||||||
|
for (i in setting) if (!doneset[i]) {
|
||||||
|
nreqs = split(setting[i], r)
|
||||||
|
if (nreqs > 0) {
|
||||||
|
# By default assume the requires values are options, but if there
|
||||||
|
# is no option with that name check for a setting
|
||||||
|
for (j=1; j<=nreqs; ++j) if (option[r[j]] == "" && !doneset[r[j]]) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if (j<=nreqs) {
|
||||||
|
finished = 0
|
||||||
|
continue # try a different setting
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# All the requirements have been processed, output
|
||||||
|
# this setting.
|
||||||
|
if (deb) print "setting", i
|
||||||
|
deflt = defaults[i]
|
||||||
|
# Remove any spurious trailing spaces
|
||||||
|
sub(/ *$/,"",deflt)
|
||||||
|
# A leading @ means leave it unquoted so the preprocessor
|
||||||
|
# can substitute the build time value
|
||||||
|
if (deflt ~ /^ @/)
|
||||||
|
deflt = " " subs substr(deflt, 3) sube
|
||||||
|
print "" >out
|
||||||
|
print "/* setting: ", i >out
|
||||||
|
print " * requires:" setting[i] >out
|
||||||
|
print " * default: ", defaults[i] deflt, "*/" >out
|
||||||
|
for (j=1; j<=nreqs; ++j) {
|
||||||
|
if (option[r[j]] != "")
|
||||||
|
print "#ifndef PNG_" r[j] "_SUPPORTED" >out
|
||||||
|
else
|
||||||
|
print "#ifndef PNG_" r[j] >out
|
||||||
|
print error, i, "requires", r[j] end >out
|
||||||
|
print "# endif" >out
|
||||||
|
}
|
||||||
|
# The precedence is:
|
||||||
|
#
|
||||||
|
# 1) External definition; trumps:
|
||||||
|
# 2) Option 'sets' value; trumps:
|
||||||
|
# 3) Setting 'default'
|
||||||
|
#
|
||||||
|
print "#ifdef PNG_" i >out
|
||||||
|
# PNG_<i> is defined, so substitute the value:
|
||||||
|
print def i, subs "PNG_" i sube end >out
|
||||||
|
print "#else /* use default */" >out
|
||||||
|
print "# ifdef PNG_set_" i >out
|
||||||
|
# Value from an option 'sets' argument
|
||||||
|
print def i, subs "PNG_set_" i sube end >out
|
||||||
|
# This is so that subsequent tests on the setting work:
|
||||||
|
print "# define PNG_" i, "1" >out
|
||||||
|
if (defaults[i] != "") {
|
||||||
|
print "# else /*default*/" >out
|
||||||
|
print def i deflt end >out
|
||||||
|
print "# define PNG_" i, "1" >out
|
||||||
|
}
|
||||||
|
print "# endif /* defaults */" >out
|
||||||
|
print "#endif /* setting", i, "*/" >out
|
||||||
|
|
||||||
|
doneset[i] = 1
|
||||||
|
++movement
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!finished && !movement) {
|
||||||
|
print "setting: loop or missing setting in 'requires', cannot process:"
|
||||||
|
for (i in setting) if (!doneset[i]) {
|
||||||
|
print " setting", i, "requires" setting[i]
|
||||||
|
}
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print "PNG_DFN_END_SORT" >out
|
||||||
|
print comment, "end of settings", cend >out
|
||||||
|
|
||||||
# Regular end - everything looks ok
|
# Regular end - everything looks ok
|
||||||
if (protect != "") {
|
if (protect != "") {
|
||||||
print start "#endif", cx, protect, "*/" end >out
|
print start "#endif", "/*", protect, "*/" end >out
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
119
scripts/pnglibconf.dfa
Normal file → Executable file
119
scripts/pnglibconf.dfa
Normal file → Executable file
@@ -27,7 +27,7 @@ file pnglibconf.h scripts/pnglibconf.dfa PNGLCONF_H
|
|||||||
# The syntax is detailed in scripts/options.awk; this is a summary
|
# The syntax is detailed in scripts/options.awk; this is a summary
|
||||||
# only:
|
# only:
|
||||||
#
|
#
|
||||||
# setting <name> [default]
|
# setting <name> [requires ...] [default]
|
||||||
# #define PNG_<name> <value> /* value comes from current setting */
|
# #define PNG_<name> <value> /* value comes from current setting */
|
||||||
# option <name> [requires ...] [if ...] [enables ...] [disabled]
|
# option <name> [requires ...] [if ...] [enables ...] [disabled]
|
||||||
# #define PNG_<name>_SUPPORTED if the requirements are met and
|
# #define PNG_<name>_SUPPORTED if the requirements are met and
|
||||||
@@ -39,6 +39,11 @@ file pnglibconf.h scripts/pnglibconf.dfa PNGLCONF_H
|
|||||||
# used as given (e.g. enables GAMMA just expands to that on the
|
# used as given (e.g. enables GAMMA just expands to that on the
|
||||||
# correspond READ_name and WRITE_name lines.)
|
# correspond READ_name and WRITE_name lines.)
|
||||||
#
|
#
|
||||||
|
# "," may be used to separate options on an 'option' line and is ignored; it
|
||||||
|
# doesn't change the meaning of the line. (NOT setting, where "," becomes
|
||||||
|
# part of the setting!) A comma at the end of an option line causes a
|
||||||
|
# continuation (the next line is included in the option too.)
|
||||||
|
#
|
||||||
# Note that the 'on' and 'off' keywords, while valid on both option
|
# Note that the 'on' and 'off' keywords, while valid on both option
|
||||||
# and chunk, should not be used in this file because they force the
|
# and chunk, should not be used in this file because they force the
|
||||||
# relevant options on or off.
|
# relevant options on or off.
|
||||||
@@ -114,7 +119,7 @@ logunsupported = 1
|
|||||||
#
|
#
|
||||||
# If you create a private DLL you need to define the following
|
# If you create a private DLL you need to define the following
|
||||||
# macros in the file 'pngusr.h' and set -DPNG_USER_CONFIG for
|
# macros in the file 'pngusr.h' and set -DPNG_USER_CONFIG for
|
||||||
# compilation (i.e. in CFLAGS.)
|
# compilation (i.e. in CPPFLAGS.)
|
||||||
# #define PNG_USER_PRIVATEBUILD \
|
# #define PNG_USER_PRIVATEBUILD \
|
||||||
# <Describes by whom and why this version of the DLL was built>
|
# <Describes by whom and why this version of the DLL was built>
|
||||||
# e.g. #define PNG_USER_PRIVATEBUILD "Build by MyCompany for xyz reasons."
|
# e.g. #define PNG_USER_PRIVATEBUILD "Build by MyCompany for xyz reasons."
|
||||||
@@ -131,6 +136,12 @@ logunsupported = 1
|
|||||||
# - PNG_USER_VERSIONINFO_COMPANYNAME
|
# - PNG_USER_VERSIONINFO_COMPANYNAME
|
||||||
# - PNG_USER_VERSIONINFO_LEGALTRADEMARKS
|
# - PNG_USER_VERSIONINFO_LEGALTRADEMARKS
|
||||||
|
|
||||||
|
# It is necessary to include configures definitions here so that AC_DEFINE
|
||||||
|
# in configure.ac works in a comprehensible way
|
||||||
|
@#if defined(HAVE_CONFIG_H) && !defined(PNG_NO_CONFIG_H)
|
||||||
|
@# include "config.h"
|
||||||
|
@#endif
|
||||||
|
|
||||||
@#ifdef PNG_USER_CONFIG
|
@#ifdef PNG_USER_CONFIG
|
||||||
@# include "pngusr.h"
|
@# include "pngusr.h"
|
||||||
@#endif
|
@#endif
|
||||||
@@ -182,6 +193,39 @@ setting PREFIX
|
|||||||
|
|
||||||
setting DEFAULT_READ_MACROS default 1
|
setting DEFAULT_READ_MACROS default 1
|
||||||
|
|
||||||
|
# Implementation specific control of the optimizations, enabled by those
|
||||||
|
# hardware or software options that need it (typically when run-time choices
|
||||||
|
# must be made by the user)
|
||||||
|
option SET_OPTION disabled
|
||||||
|
|
||||||
|
# These options are specific to the ARM NEON hardware optimizations. At present
|
||||||
|
# these optimizations depend on GCC specific pre-processing of an assembler (.S)
|
||||||
|
# file so they probably won't work with other compilers.
|
||||||
|
#
|
||||||
|
# ARM_NEON_OPT: unset: check at compile time (__ARM_NEON__ must be defined by
|
||||||
|
# the compiler, typically as a result of specifying
|
||||||
|
# CC="gcc -mfpu=neon".)
|
||||||
|
# 0: disable (even if the CPU has a NEON FPU.)
|
||||||
|
# 1: check at run time (via ARM_NEON_{API,CHECK})
|
||||||
|
# 2: switch on unconditionally (inadvisable - instead pass
|
||||||
|
# -mfpu=neon to GCC in CC)
|
||||||
|
# When building libpng avoid using any setting other than '0'; '1' is
|
||||||
|
# set automatically when either 'API' or 'CHECK' are configured in,
|
||||||
|
# '2' should not be necessary as -mfpu=neon will achieve the same
|
||||||
|
# effect as well as applying NEON optimizations to the rest of the
|
||||||
|
# libpng code.
|
||||||
|
# NOTE: any setting other than '0' requires ALIGNED_MEMORY
|
||||||
|
# ARM_NEON_API: (PNG_ARM_NEON == 1) allow the optimization to be switched on
|
||||||
|
# with png_set_option
|
||||||
|
# ARM_NEON_CHECK: (PNG_ARM_NEON == 1) compile a run-time check to see if Neon
|
||||||
|
# extensions are supported, this is poorly supported and
|
||||||
|
# deprectated - use the png_set_option API.
|
||||||
|
setting ARM_NEON_OPT
|
||||||
|
option ARM_NEON_API disabled requires ALIGNED_MEMORY enables SET_OPTION,
|
||||||
|
sets ARM_NEON_OPT 1
|
||||||
|
option ARM_NEON_CHECK disabled requires ALIGNED_MEMORY,
|
||||||
|
sets ARM_NEON_OPT 1
|
||||||
|
|
||||||
# These settings configure the default compression level (0-9) and 'strategy';
|
# These settings configure the default compression level (0-9) and 'strategy';
|
||||||
# strategy is as defined by the implementors of zlib, it describes the input
|
# strategy is as defined by the implementors of zlib, it describes the input
|
||||||
# data and modifies the zlib parameters in an attempt to optimize the balance
|
# data and modifies the zlib parameters in an attempt to optimize the balance
|
||||||
@@ -190,13 +234,18 @@ setting DEFAULT_READ_MACROS default 1
|
|||||||
# because the name of the setting is prefixed by PNG_
|
# because the name of the setting is prefixed by PNG_
|
||||||
#
|
#
|
||||||
# The TEXT values are the defaults when writing compressed text (all forms)
|
# The TEXT values are the defaults when writing compressed text (all forms)
|
||||||
|
#
|
||||||
|
# Include the zlib header too, so that the defaults below are known
|
||||||
|
@# include <zlib.h>
|
||||||
|
|
||||||
setting Z_DEFAULT_COMPRESSION default Z_DEFAULT_COMPRESSION
|
# The '@' here means to substitute the value when pnglibconf.h is built
|
||||||
setting Z_DEFAULT_STRATEGY default Z_FILTERED
|
setting Z_DEFAULT_COMPRESSION default @Z_DEFAULT_COMPRESSION
|
||||||
setting Z_DEFAULT_NOFILTER_STRATEGY default Z_DEFAULT_STRATEGY
|
setting Z_DEFAULT_STRATEGY default @Z_FILTERED
|
||||||
|
setting Z_DEFAULT_NOFILTER_STRATEGY default @Z_DEFAULT_STRATEGY
|
||||||
|
setting ZLIB_VERNUM default @ZLIB_VERNUM
|
||||||
|
|
||||||
setting TEXT_Z_DEFAULT_COMPRESSION default Z_DEFAULT_COMPRESSION
|
setting TEXT_Z_DEFAULT_COMPRESSION default @Z_DEFAULT_COMPRESSION
|
||||||
setting TEXT_Z_DEFAULT_STRATEGY default Z_DEFAULT_STRATEGY
|
setting TEXT_Z_DEFAULT_STRATEGY default @Z_DEFAULT_STRATEGY
|
||||||
|
|
||||||
# The alternative is to call functions to read PNG values, if
|
# The alternative is to call functions to read PNG values, if
|
||||||
# the functions are turned *off* the read macros must always
|
# the functions are turned *off* the read macros must always
|
||||||
@@ -355,7 +404,7 @@ option SAFE_LIMITS enables USER_LIMITS disabled
|
|||||||
# to libpng 1.6; the new interfaces in 1.6 will take several years to become
|
# to libpng 1.6; the new interfaces in 1.6 will take several years to become
|
||||||
# popular.
|
# popular.
|
||||||
|
|
||||||
option READ enables READ_INTERLACING
|
option READ enables READ_INTERLACING SET_OPTION
|
||||||
|
|
||||||
# Disabling READ_16BIT does not disable reading 16-bit PNG files, but it
|
# Disabling READ_16BIT does not disable reading 16-bit PNG files, but it
|
||||||
# forces them to be chopped down to 8-bit, and disables any 16-bit
|
# forces them to be chopped down to 8-bit, and disables any 16-bit
|
||||||
@@ -386,12 +435,12 @@ option READ_TRANSFORMS requires READ
|
|||||||
# If you handle gamma issues outside libpng then you do not need the libpng
|
# If you handle gamma issues outside libpng then you do not need the libpng
|
||||||
# gamma processing; and it is an enormous waste of space. You just need to
|
# gamma processing; and it is an enormous waste of space. You just need to
|
||||||
# remove the use of libpng APIs that depend on it.
|
# remove the use of libpng APIs that depend on it.
|
||||||
option READ_GAMMA requires READ_TRANSFORMS READ_gAMA
|
option READ_GAMMA requires READ_TRANSFORMS, READ_gAMA
|
||||||
|
|
||||||
option READ_ALPHA_MODE requires READ_TRANSFORMS READ_GAMMA
|
option READ_ALPHA_MODE requires READ_TRANSFORMS, READ_GAMMA
|
||||||
option READ_BACKGROUND requires READ_TRANSFORMS READ_STRIP_ALPHA READ_GAMMA
|
option READ_BACKGROUND requires READ_TRANSFORMS, READ_STRIP_ALPHA, READ_GAMMA
|
||||||
option READ_BGR requires READ_TRANSFORMS
|
option READ_BGR requires READ_TRANSFORMS
|
||||||
option READ_EXPAND_16 requires READ_TRANSFORMS READ_16BIT READ_EXPAND
|
option READ_EXPAND_16 requires READ_TRANSFORMS, READ_16BIT, READ_EXPAND
|
||||||
option READ_EXPAND requires READ_TRANSFORMS
|
option READ_EXPAND requires READ_TRANSFORMS
|
||||||
option READ_FILLER requires READ_TRANSFORMS
|
option READ_FILLER requires READ_TRANSFORMS
|
||||||
option READ_GRAY_TO_RGB requires READ_TRANSFORMS
|
option READ_GRAY_TO_RGB requires READ_TRANSFORMS
|
||||||
@@ -399,13 +448,13 @@ option READ_INVERT_ALPHA requires READ_TRANSFORMS
|
|||||||
option READ_INVERT requires READ_TRANSFORMS
|
option READ_INVERT requires READ_TRANSFORMS
|
||||||
option READ_PACK requires READ_TRANSFORMS
|
option READ_PACK requires READ_TRANSFORMS
|
||||||
option READ_PACKSWAP requires READ_TRANSFORMS
|
option READ_PACKSWAP requires READ_TRANSFORMS
|
||||||
option READ_RGB_TO_GRAY requires READ_TRANSFORMS READ_GAMMA
|
option READ_RGB_TO_GRAY requires READ_TRANSFORMS, READ_GAMMA
|
||||||
option READ_SCALE_16_TO_8 requires READ_TRANSFORMS
|
option READ_SCALE_16_TO_8 requires READ_TRANSFORMS
|
||||||
option READ_SHIFT requires READ_TRANSFORMS
|
option READ_SHIFT requires READ_TRANSFORMS
|
||||||
option READ_STRIP_16_TO_8 requires READ_TRANSFORMS
|
option READ_STRIP_16_TO_8 requires READ_TRANSFORMS
|
||||||
option READ_STRIP_ALPHA requires READ_TRANSFORMS
|
option READ_STRIP_ALPHA requires READ_TRANSFORMS
|
||||||
option READ_SWAP_ALPHA requires READ_TRANSFORMS
|
option READ_SWAP_ALPHA requires READ_TRANSFORMS
|
||||||
option READ_SWAP requires READ_TRANSFORMS READ_16BIT
|
option READ_SWAP requires READ_TRANSFORMS, READ_16BIT
|
||||||
option READ_USER_TRANSFORM requires READ_TRANSFORMS
|
option READ_USER_TRANSFORM requires READ_TRANSFORMS
|
||||||
|
|
||||||
option PROGRESSIVE_READ requires READ
|
option PROGRESSIVE_READ requires READ
|
||||||
@@ -444,7 +493,7 @@ option WRITE_TRANSFORMS requires WRITE
|
|||||||
option WRITE_SHIFT requires WRITE_TRANSFORMS
|
option WRITE_SHIFT requires WRITE_TRANSFORMS
|
||||||
option WRITE_PACK requires WRITE_TRANSFORMS
|
option WRITE_PACK requires WRITE_TRANSFORMS
|
||||||
option WRITE_BGR requires WRITE_TRANSFORMS
|
option WRITE_BGR requires WRITE_TRANSFORMS
|
||||||
option WRITE_SWAP requires WRITE_TRANSFORMS WRITE_16BIT
|
option WRITE_SWAP requires WRITE_TRANSFORMS, WRITE_16BIT
|
||||||
option WRITE_PACKSWAP requires WRITE_TRANSFORMS
|
option WRITE_PACKSWAP requires WRITE_TRANSFORMS
|
||||||
option WRITE_INVERT requires WRITE_TRANSFORMS
|
option WRITE_INVERT requires WRITE_TRANSFORMS
|
||||||
option WRITE_FILLER requires WRITE_TRANSFORMS
|
option WRITE_FILLER requires WRITE_TRANSFORMS
|
||||||
@@ -466,8 +515,8 @@ option WRITE_FLUSH requires WRITE
|
|||||||
|
|
||||||
# Note: these can be turned off explicitly if not required by the
|
# Note: these can be turned off explicitly if not required by the
|
||||||
# apps implementing the user transforms
|
# apps implementing the user transforms
|
||||||
option USER_TRANSFORM_PTR if READ_USER_TRANSFORM WRITE_USER_TRANSFORM
|
option USER_TRANSFORM_PTR if READ_USER_TRANSFORM, WRITE_USER_TRANSFORM
|
||||||
option USER_TRANSFORM_INFO if READ_USER_TRANSFORM WRITE_USER_TRANSFORM
|
option USER_TRANSFORM_INFO if READ_USER_TRANSFORM, WRITE_USER_TRANSFORM
|
||||||
|
|
||||||
# This enables API to set compression parameters for compressing
|
# This enables API to set compression parameters for compressing
|
||||||
# non-IDAT chunks (zTXt, iTXt, iCCP, and unknown chunks). This feature
|
# non-IDAT chunks (zTXt, iTXt, iCCP, and unknown chunks). This feature
|
||||||
@@ -568,7 +617,7 @@ setting sRGB_PROFILE_CHECKS default 2
|
|||||||
# but can help (in theory) on some architectures. Only affects
|
# but can help (in theory) on some architectures. Only affects
|
||||||
# internal structures. Added at libpng 1.4.0
|
# internal structures. Added at libpng 1.4.0
|
||||||
|
|
||||||
option ALIGN_MEMORY
|
option ALIGNED_MEMORY
|
||||||
|
|
||||||
# Buggy compilers (e.g., gcc 2.7.2.2) need PNG_NO_POINTER_INDEXING
|
# Buggy compilers (e.g., gcc 2.7.2.2) need PNG_NO_POINTER_INDEXING
|
||||||
# See png[wr]util.c, normally this should always be *on*
|
# See png[wr]util.c, normally this should always be *on*
|
||||||
@@ -660,7 +709,7 @@ chunk bKGD
|
|||||||
chunk cHRM enables COLORSPACE
|
chunk cHRM enables COLORSPACE
|
||||||
chunk gAMA enables GAMMA
|
chunk gAMA enables GAMMA
|
||||||
chunk hIST
|
chunk hIST
|
||||||
chunk iCCP enables COLORSPACE GAMMA
|
chunk iCCP enables COLORSPACE, GAMMA
|
||||||
chunk iTXt
|
chunk iTXt
|
||||||
chunk oFFs
|
chunk oFFs
|
||||||
chunk pCAL
|
chunk pCAL
|
||||||
@@ -668,7 +717,7 @@ chunk pHYs
|
|||||||
chunk sBIT
|
chunk sBIT
|
||||||
chunk sCAL
|
chunk sCAL
|
||||||
chunk sPLT
|
chunk sPLT
|
||||||
chunk sRGB enables COLORSPACE GAMMA
|
chunk sRGB enables COLORSPACE, GAMMA
|
||||||
chunk tEXt requires TEXT
|
chunk tEXt requires TEXT
|
||||||
chunk tIME
|
chunk tIME
|
||||||
chunk tRNS
|
chunk tRNS
|
||||||
@@ -698,7 +747,7 @@ option WRITE_UNKNOWN_CHUNKS enables STORE_UNKNOWN_CHUNKS
|
|||||||
# to png_get_unknown_chunks, the application must call
|
# to png_get_unknown_chunks, the application must call
|
||||||
# png_set_keep_unknown_chunks to cause this to actually happen (see png.h)
|
# png_set_keep_unknown_chunks to cause this to actually happen (see png.h)
|
||||||
option SAVE_UNKNOWN_CHUNKS requires READ requires SET_UNKNOWN_CHUNKS
|
option SAVE_UNKNOWN_CHUNKS requires READ requires SET_UNKNOWN_CHUNKS
|
||||||
option SAVE_UNKNOWN_CHUNKS enables READ_UNKNOWN_CHUNKS STORE_UNKNOWN_CHUNKS
|
option SAVE_UNKNOWN_CHUNKS enables READ_UNKNOWN_CHUNKS, STORE_UNKNOWN_CHUNKS
|
||||||
|
|
||||||
# The second approach is to use an application provided callback to process the
|
# The second approach is to use an application provided callback to process the
|
||||||
# chunks, the callback can either handle the chunk entirely itself or request
|
# chunks, the callback can either handle the chunk entirely itself or request
|
||||||
@@ -706,8 +755,8 @@ option SAVE_UNKNOWN_CHUNKS enables READ_UNKNOWN_CHUNKS STORE_UNKNOWN_CHUNKS
|
|||||||
#
|
#
|
||||||
# Note that there is no 'WRITE_USER_CHUNKS' so the USER_CHUNKS option is always
|
# Note that there is no 'WRITE_USER_CHUNKS' so the USER_CHUNKS option is always
|
||||||
# the same as READ_USER_CHUNKS at present
|
# the same as READ_USER_CHUNKS at present
|
||||||
option READ_USER_CHUNKS requires READ requires UNKNOWN_CHUNKS
|
option READ_USER_CHUNKS requires READ, UNKNOWN_CHUNKS
|
||||||
option READ_USER_CHUNKS enables READ_UNKNOWN_CHUNKS USER_CHUNKS
|
option READ_USER_CHUNKS enables READ_UNKNOWN_CHUNKS, USER_CHUNKS
|
||||||
|
|
||||||
# Two further options are provided to allow detailed control of the handling.
|
# Two further options are provided to allow detailed control of the handling.
|
||||||
# The first enables png_set_keep_unknown_chunks; this allows the default to be
|
# The first enables png_set_keep_unknown_chunks; this allows the default to be
|
||||||
@@ -774,8 +823,8 @@ option INFO_IMAGE
|
|||||||
|
|
||||||
option CHECK_FOR_INVALID_INDEX enables READ_CHECK_FOR_INVALID_INDEX
|
option CHECK_FOR_INVALID_INDEX enables READ_CHECK_FOR_INVALID_INDEX
|
||||||
option CHECK_FOR_INVALID_INDEX enables WRITE_CHECK_FOR_INVALID_INDEX
|
option CHECK_FOR_INVALID_INDEX enables WRITE_CHECK_FOR_INVALID_INDEX
|
||||||
option READ_CHECK_FOR_INVALID_INDEX requires READ CHECK_FOR_INVALID_INDEX
|
option READ_CHECK_FOR_INVALID_INDEX requires READ, CHECK_FOR_INVALID_INDEX
|
||||||
option WRITE_CHECK_FOR_INVALID_INDEX requires WRITE CHECK_FOR_INVALID_INDEX
|
option WRITE_CHECK_FOR_INVALID_INDEX requires WRITE, CHECK_FOR_INVALID_INDEX
|
||||||
|
|
||||||
# added at libpng-1.5.15
|
# added at libpng-1.5.15
|
||||||
option GET_PALETTE_MAX enables READ_GET_PALETTE_MAX WRITE_GET_PALETTE_MAX
|
option GET_PALETTE_MAX enables READ_GET_PALETTE_MAX WRITE_GET_PALETTE_MAX
|
||||||
@@ -784,12 +833,11 @@ option WRITE_GET_PALETTE_MAX requires WRITE_CHECK_FOR_INVALID_INDEX disabled
|
|||||||
|
|
||||||
# Simplified API options (added at libpng-1.6.0)
|
# Simplified API options (added at libpng-1.6.0)
|
||||||
# Read:
|
# Read:
|
||||||
option SIMPLIFIED_READ requires SEQUENTIAL_READ READ_TRANSFORMS SETJMP
|
option SIMPLIFIED_READ,
|
||||||
option SIMPLIFIED_READ requires BENIGN_ERRORS READ_GAMMA
|
requires SEQUENTIAL_READ READ_TRANSFORMS, SETJMP, BENIGN_ERRORS READ_GAMMA,
|
||||||
option SIMPLIFIED_READ enables READ_EXPAND READ_16BIT READ_EXPAND_16
|
enables READ_EXPAND, READ_16BIT READ_EXPAND_16, READ_SCALE_16_TO_8,
|
||||||
option SIMPLIFIED_READ enables READ_SCALE_16_TO_8 READ_RGB_TO_GRAY
|
READ_RGB_TO_GRAY, READ_ALPHA_MODE READ_BACKGROUND READ_STRIP_ALPHA,
|
||||||
option SIMPLIFIED_READ enables READ_ALPHA_MODE READ_BACKGROUND READ_STRIP_ALPHA
|
READ_FILLER, READ_SWAP
|
||||||
option SIMPLIFIED_READ enables READ_FILLER READ_SWAP
|
|
||||||
|
|
||||||
option SIMPLIFIED_READ_AFIRST requires SIMPLIFIED_READ disabled
|
option SIMPLIFIED_READ_AFIRST requires SIMPLIFIED_READ disabled
|
||||||
option READ_SWAP_ALPHA enables SIMPLIFIED_READ_AFIRST
|
option READ_SWAP_ALPHA enables SIMPLIFIED_READ_AFIRST
|
||||||
@@ -798,8 +846,9 @@ option SIMPLIFIED_READ_BGR requires SIMPLIFIED_READ disabled
|
|||||||
option READ_BGR enables SIMPLIFIED_READ_BGR
|
option READ_BGR enables SIMPLIFIED_READ_BGR
|
||||||
|
|
||||||
# Write:
|
# Write:
|
||||||
option SIMPLIFIED_WRITE requires WRITE STDIO SETJMP
|
option SIMPLIFIED_WRITE,
|
||||||
option SIMPLIFIED_WRITE enables WRITE_SWAP WRITE_gAMA WRITE_sRGB WRITE_cHRM
|
requires WRITE STDIO, SETJMP,
|
||||||
|
enables WRITE_SWAP WRITE_gAMA, WRITE_sRGB WRITE_cHRM
|
||||||
|
|
||||||
option SIMPLIFIED_WRITE_AFIRST requires SIMPLIFIED_WRITE disabled
|
option SIMPLIFIED_WRITE_AFIRST requires SIMPLIFIED_WRITE disabled
|
||||||
option WRITE_SWAP_ALPHA enables SIMPLIFIED_WRITE_AFIRST
|
option WRITE_SWAP_ALPHA enables SIMPLIFIED_WRITE_AFIRST
|
||||||
@@ -808,5 +857,5 @@ option SIMPLIFIED_WRITE_BGR requires SIMPLIFIED_WRITE disabled
|
|||||||
option WRITE_BGR enables SIMPLIFIED_WRITE_BGR
|
option WRITE_BGR enables SIMPLIFIED_WRITE_BGR
|
||||||
|
|
||||||
# Formats:
|
# Formats:
|
||||||
option FORMAT_AFIRST if SIMPLIFIED_READ_AFIRST SIMPLIFIED_WRITE_AFIRST
|
option FORMAT_AFIRST if SIMPLIFIED_READ_AFIRST, SIMPLIFIED_WRITE_AFIRST
|
||||||
option FORMAT_BGR if SIMPLIFIED_READ_BGR SIMPLIFIED_WRITE_BGR
|
option FORMAT_BGR if SIMPLIFIED_READ_BGR, SIMPLIFIED_WRITE_BGR
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
|
/* libpng 1.6.3 STANDARD API DEFINITION */
|
||||||
/* libpng STANDARD API DEFINITION */
|
|
||||||
|
|
||||||
/* pnglibconf.h - library build configuration */
|
/* pnglibconf.h - library build configuration */
|
||||||
|
|
||||||
/* Libpng 1.6.0 - February 14, 2013 */
|
/* Libpng version 1.6.3 - July 18, 2013 */
|
||||||
|
|
||||||
/* Copyright (c) 1998-2013 Glenn Randers-Pehrson */
|
/* Copyright (c) 1998-2013 Glenn Randers-Pehrson */
|
||||||
|
|
||||||
@@ -12,14 +11,180 @@
|
|||||||
/* and license in png.h */
|
/* and license in png.h */
|
||||||
|
|
||||||
/* pnglibconf.h */
|
/* pnglibconf.h */
|
||||||
|
/* Machine generated file: DO NOT EDIT */
|
||||||
/* Derived from: scripts/pnglibconf.dfa */
|
/* Derived from: scripts/pnglibconf.dfa */
|
||||||
/* If you edit this file by hand you must obey the rules expressed in */
|
|
||||||
/* pnglibconf.dfa with respect to the dependencies between the following */
|
|
||||||
/* symbols. It is much better to generate a new file using */
|
|
||||||
/* scripts/libpngconf.mak */
|
|
||||||
|
|
||||||
#ifndef PNGLCONF_H
|
#ifndef PNGLCONF_H
|
||||||
#define PNGLCONF_H
|
#define PNGLCONF_H
|
||||||
|
/* options */
|
||||||
|
#define PNG_16BIT_SUPPORTED
|
||||||
|
#define PNG_ALIGNED_MEMORY_SUPPORTED
|
||||||
|
/*#undef PNG_ARM_NEON_API_SUPPORTED*/
|
||||||
|
/*#undef PNG_ARM_NEON_CHECK_SUPPORTED*/
|
||||||
|
#define PNG_BENIGN_ERRORS_SUPPORTED
|
||||||
|
#define PNG_BENIGN_READ_ERRORS_SUPPORTED
|
||||||
|
/*#undef PNG_BENIGN_WRITE_ERRORS_SUPPORTED*/
|
||||||
|
#define PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED
|
||||||
|
#define PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED
|
||||||
|
#define PNG_COLORSPACE_SUPPORTED
|
||||||
|
#define PNG_CONSOLE_IO_SUPPORTED
|
||||||
|
#define PNG_CONVERT_tIME_SUPPORTED
|
||||||
|
#define PNG_EASY_ACCESS_SUPPORTED
|
||||||
|
/*#undef PNG_ERROR_NUMBERS_SUPPORTED*/
|
||||||
|
#define PNG_ERROR_TEXT_SUPPORTED
|
||||||
|
#define PNG_FIXED_POINT_SUPPORTED
|
||||||
|
#define PNG_FLOATING_ARITHMETIC_SUPPORTED
|
||||||
|
#define PNG_FLOATING_POINT_SUPPORTED
|
||||||
|
#define PNG_FORMAT_AFIRST_SUPPORTED
|
||||||
|
#define PNG_FORMAT_BGR_SUPPORTED
|
||||||
|
#define PNG_GAMMA_SUPPORTED
|
||||||
|
#define PNG_GET_PALETTE_MAX_SUPPORTED
|
||||||
|
#define PNG_HANDLE_AS_UNKNOWN_SUPPORTED
|
||||||
|
#define PNG_INCH_CONVERSIONS_SUPPORTED
|
||||||
|
#define PNG_INFO_IMAGE_SUPPORTED
|
||||||
|
#define PNG_IO_STATE_SUPPORTED
|
||||||
|
#define PNG_MNG_FEATURES_SUPPORTED
|
||||||
|
#define PNG_POINTER_INDEXING_SUPPORTED
|
||||||
|
#define PNG_PROGRESSIVE_READ_SUPPORTED
|
||||||
|
#define PNG_READ_16BIT_SUPPORTED
|
||||||
|
#define PNG_READ_ALPHA_MODE_SUPPORTED
|
||||||
|
#define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED
|
||||||
|
#define PNG_READ_BACKGROUND_SUPPORTED
|
||||||
|
#define PNG_READ_BGR_SUPPORTED
|
||||||
|
#define PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED
|
||||||
|
#define PNG_READ_COMPOSITE_NODIV_SUPPORTED
|
||||||
|
#define PNG_READ_COMPRESSED_TEXT_SUPPORTED
|
||||||
|
#define PNG_READ_EXPAND_16_SUPPORTED
|
||||||
|
#define PNG_READ_EXPAND_SUPPORTED
|
||||||
|
#define PNG_READ_FILLER_SUPPORTED
|
||||||
|
#define PNG_READ_GAMMA_SUPPORTED
|
||||||
|
#define PNG_READ_GET_PALETTE_MAX_SUPPORTED
|
||||||
|
#define PNG_READ_GRAY_TO_RGB_SUPPORTED
|
||||||
|
#define PNG_READ_INTERLACING_SUPPORTED
|
||||||
|
#define PNG_READ_INT_FUNCTIONS_SUPPORTED
|
||||||
|
#define PNG_READ_INVERT_ALPHA_SUPPORTED
|
||||||
|
#define PNG_READ_INVERT_SUPPORTED
|
||||||
|
#define PNG_READ_OPT_PLTE_SUPPORTED
|
||||||
|
#define PNG_READ_PACKSWAP_SUPPORTED
|
||||||
|
#define PNG_READ_PACK_SUPPORTED
|
||||||
|
#define PNG_READ_QUANTIZE_SUPPORTED
|
||||||
|
#define PNG_READ_RGB_TO_GRAY_SUPPORTED
|
||||||
|
#define PNG_READ_SCALE_16_TO_8_SUPPORTED
|
||||||
|
#define PNG_READ_SHIFT_SUPPORTED
|
||||||
|
#define PNG_READ_STRIP_16_TO_8_SUPPORTED
|
||||||
|
#define PNG_READ_STRIP_ALPHA_SUPPORTED
|
||||||
|
#define PNG_READ_SUPPORTED
|
||||||
|
#define PNG_READ_SWAP_ALPHA_SUPPORTED
|
||||||
|
#define PNG_READ_SWAP_SUPPORTED
|
||||||
|
#define PNG_READ_TEXT_SUPPORTED
|
||||||
|
#define PNG_READ_TRANSFORMS_SUPPORTED
|
||||||
|
#define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
|
||||||
|
#define PNG_READ_USER_CHUNKS_SUPPORTED
|
||||||
|
#define PNG_READ_USER_TRANSFORM_SUPPORTED
|
||||||
|
#define PNG_READ_bKGD_SUPPORTED
|
||||||
|
#define PNG_READ_cHRM_SUPPORTED
|
||||||
|
#define PNG_READ_gAMA_SUPPORTED
|
||||||
|
#define PNG_READ_hIST_SUPPORTED
|
||||||
|
#define PNG_READ_iCCP_SUPPORTED
|
||||||
|
#define PNG_READ_iTXt_SUPPORTED
|
||||||
|
#define PNG_READ_oFFs_SUPPORTED
|
||||||
|
#define PNG_READ_pCAL_SUPPORTED
|
||||||
|
#define PNG_READ_pHYs_SUPPORTED
|
||||||
|
#define PNG_READ_sBIT_SUPPORTED
|
||||||
|
#define PNG_READ_sCAL_SUPPORTED
|
||||||
|
#define PNG_READ_sPLT_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
|
||||||
|
/*#undef PNG_SAFE_LIMITS_SUPPORTED*/
|
||||||
|
#define PNG_SAVE_INT_32_SUPPORTED
|
||||||
|
#define PNG_SAVE_UNKNOWN_CHUNKS_SUPPORTED
|
||||||
|
#define PNG_SEQUENTIAL_READ_SUPPORTED
|
||||||
|
#define PNG_SETJMP_SUPPORTED
|
||||||
|
#define PNG_SET_CHUNK_CACHE_LIMIT_SUPPORTED
|
||||||
|
#define PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED
|
||||||
|
#define PNG_SET_OPTION_SUPPORTED
|
||||||
|
#define PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
|
||||||
|
#define PNG_SET_USER_LIMITS_SUPPORTED
|
||||||
|
#define PNG_SIMPLIFIED_READ_AFIRST_SUPPORTED
|
||||||
|
#define PNG_SIMPLIFIED_READ_BGR_SUPPORTED
|
||||||
|
#define PNG_SIMPLIFIED_READ_SUPPORTED
|
||||||
|
#define PNG_SIMPLIFIED_WRITE_AFIRST_SUPPORTED
|
||||||
|
#define PNG_SIMPLIFIED_WRITE_BGR_SUPPORTED
|
||||||
|
#define PNG_SIMPLIFIED_WRITE_SUPPORTED
|
||||||
|
#define PNG_STDIO_SUPPORTED
|
||||||
|
#define PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
|
||||||
|
#define PNG_TEXT_SUPPORTED
|
||||||
|
#define PNG_TIME_RFC1123_SUPPORTED
|
||||||
|
#define PNG_UNKNOWN_CHUNKS_SUPPORTED
|
||||||
|
#define PNG_USER_CHUNKS_SUPPORTED
|
||||||
|
#define PNG_USER_LIMITS_SUPPORTED
|
||||||
|
#define PNG_USER_MEM_SUPPORTED
|
||||||
|
#define PNG_USER_TRANSFORM_INFO_SUPPORTED
|
||||||
|
#define PNG_USER_TRANSFORM_PTR_SUPPORTED
|
||||||
|
#define PNG_WARNINGS_SUPPORTED
|
||||||
|
#define PNG_WRITE_16BIT_SUPPORTED
|
||||||
|
#define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED
|
||||||
|
#define PNG_WRITE_BGR_SUPPORTED
|
||||||
|
#define PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED
|
||||||
|
#define PNG_WRITE_COMPRESSED_TEXT_SUPPORTED
|
||||||
|
#define PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED
|
||||||
|
#define PNG_WRITE_FILLER_SUPPORTED
|
||||||
|
#define PNG_WRITE_FILTER_SUPPORTED
|
||||||
|
#define PNG_WRITE_FLUSH_SUPPORTED
|
||||||
|
#define PNG_WRITE_GET_PALETTE_MAX_SUPPORTED
|
||||||
|
#define PNG_WRITE_INTERLACING_SUPPORTED
|
||||||
|
#define PNG_WRITE_INT_FUNCTIONS_SUPPORTED
|
||||||
|
#define PNG_WRITE_INVERT_ALPHA_SUPPORTED
|
||||||
|
#define PNG_WRITE_INVERT_SUPPORTED
|
||||||
|
#define PNG_WRITE_OPTIMIZE_CMF_SUPPORTED
|
||||||
|
#define PNG_WRITE_PACKSWAP_SUPPORTED
|
||||||
|
#define PNG_WRITE_PACK_SUPPORTED
|
||||||
|
#define PNG_WRITE_SHIFT_SUPPORTED
|
||||||
|
#define PNG_WRITE_SUPPORTED
|
||||||
|
#define PNG_WRITE_SWAP_ALPHA_SUPPORTED
|
||||||
|
#define PNG_WRITE_SWAP_SUPPORTED
|
||||||
|
#define PNG_WRITE_TEXT_SUPPORTED
|
||||||
|
#define PNG_WRITE_TRANSFORMS_SUPPORTED
|
||||||
|
#define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
|
||||||
|
#define PNG_WRITE_USER_TRANSFORM_SUPPORTED
|
||||||
|
#define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
|
||||||
|
#define PNG_WRITE_bKGD_SUPPORTED
|
||||||
|
#define PNG_WRITE_cHRM_SUPPORTED
|
||||||
|
#define PNG_WRITE_gAMA_SUPPORTED
|
||||||
|
#define PNG_WRITE_hIST_SUPPORTED
|
||||||
|
#define PNG_WRITE_iCCP_SUPPORTED
|
||||||
|
#define PNG_WRITE_iTXt_SUPPORTED
|
||||||
|
#define PNG_WRITE_oFFs_SUPPORTED
|
||||||
|
#define PNG_WRITE_pCAL_SUPPORTED
|
||||||
|
#define PNG_WRITE_pHYs_SUPPORTED
|
||||||
|
#define PNG_WRITE_sBIT_SUPPORTED
|
||||||
|
#define PNG_WRITE_sCAL_SUPPORTED
|
||||||
|
#define PNG_WRITE_sPLT_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
|
||||||
|
#define PNG_bKGD_SUPPORTED
|
||||||
|
#define PNG_cHRM_SUPPORTED
|
||||||
|
#define PNG_gAMA_SUPPORTED
|
||||||
|
#define PNG_hIST_SUPPORTED
|
||||||
|
#define PNG_iCCP_SUPPORTED
|
||||||
|
#define PNG_iTXt_SUPPORTED
|
||||||
|
#define PNG_oFFs_SUPPORTED
|
||||||
|
#define PNG_pCAL_SUPPORTED
|
||||||
|
#define PNG_pHYs_SUPPORTED
|
||||||
|
#define PNG_sBIT_SUPPORTED
|
||||||
|
#define PNG_sCAL_SUPPORTED
|
||||||
|
#define PNG_sPLT_SUPPORTED
|
||||||
|
#define PNG_sRGB_SUPPORTED
|
||||||
|
#define PNG_tEXt_SUPPORTED
|
||||||
|
#define PNG_tIME_SUPPORTED
|
||||||
|
#define PNG_tRNS_SUPPORTED
|
||||||
|
#define PNG_zTXt_SUPPORTED
|
||||||
|
/* end of options */
|
||||||
/* settings */
|
/* settings */
|
||||||
#define PNG_API_RULE 0
|
#define PNG_API_RULE 0
|
||||||
#define PNG_CALLOC_SUPPORTED
|
#define PNG_CALLOC_SUPPORTED
|
||||||
@@ -32,181 +197,15 @@
|
|||||||
#define PNG_QUANTIZE_BLUE_BITS 5
|
#define PNG_QUANTIZE_BLUE_BITS 5
|
||||||
#define PNG_QUANTIZE_GREEN_BITS 5
|
#define PNG_QUANTIZE_GREEN_BITS 5
|
||||||
#define PNG_QUANTIZE_RED_BITS 5
|
#define PNG_QUANTIZE_RED_BITS 5
|
||||||
#define PNG_sCAL_PRECISION 5
|
#define PNG_TEXT_Z_DEFAULT_COMPRESSION (-1)
|
||||||
#define PNG_sRGB_PROFILE_CHECKS 2
|
#define PNG_TEXT_Z_DEFAULT_STRATEGY 0
|
||||||
#define PNG_TEXT_Z_DEFAULT_COMPRESSION Z_DEFAULT_COMPRESSION
|
|
||||||
#define PNG_TEXT_Z_DEFAULT_STRATEGY Z_DEFAULT_STRATEGY
|
|
||||||
#define PNG_WEIGHT_SHIFT 8
|
#define PNG_WEIGHT_SHIFT 8
|
||||||
#define PNG_ZBUF_SIZE 8192
|
#define PNG_ZBUF_SIZE 8192
|
||||||
#define PNG_Z_DEFAULT_COMPRESSION Z_DEFAULT_COMPRESSION
|
#define PNG_ZLIB_VERNUM 0 /* unknown */
|
||||||
#define PNG_Z_DEFAULT_NOFILTER_STRATEGY Z_DEFAULT_STRATEGY
|
#define PNG_Z_DEFAULT_COMPRESSION (-1)
|
||||||
#define PNG_Z_DEFAULT_STRATEGY Z_FILTERED
|
#define PNG_Z_DEFAULT_NOFILTER_STRATEGY 0
|
||||||
|
#define PNG_Z_DEFAULT_STRATEGY 1
|
||||||
|
#define PNG_sCAL_PRECISION 5
|
||||||
|
#define PNG_sRGB_PROFILE_CHECKS 2
|
||||||
/* end of settings */
|
/* end of settings */
|
||||||
/* options */
|
|
||||||
#define PNG_16BIT_SUPPORTED
|
|
||||||
#define PNG_ALIGN_MEMORY_SUPPORTED
|
|
||||||
#define PNG_BENIGN_ERRORS_SUPPORTED
|
|
||||||
#define PNG_BENIGN_READ_ERRORS_SUPPORTED
|
|
||||||
/*#undef PNG_BENIGN_WRITE_ERRORS_SUPPORTED*/
|
|
||||||
#define PNG_bKGD_SUPPORTED
|
|
||||||
#define PNG_BUILD_GRAYSCALE_PALETTE_SUPPORTED
|
|
||||||
#define PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED
|
|
||||||
#define PNG_cHRM_SUPPORTED
|
|
||||||
#define PNG_COLORSPACE_SUPPORTED
|
|
||||||
#define PNG_CONSOLE_IO_SUPPORTED
|
|
||||||
#define PNG_CONVERT_tIME_SUPPORTED
|
|
||||||
#define PNG_EASY_ACCESS_SUPPORTED
|
|
||||||
/*#undef PNG_ERROR_NUMBERS_SUPPORTED*/
|
|
||||||
#define PNG_ERROR_TEXT_SUPPORTED
|
|
||||||
#define PNG_FIXED_POINT_SUPPORTED
|
|
||||||
#define PNG_FLOATING_ARITHMETIC_SUPPORTED
|
|
||||||
#define PNG_FLOATING_POINT_SUPPORTED
|
|
||||||
#define PNG_FORMAT_AFIRST_SUPPORTED
|
|
||||||
#define PNG_FORMAT_BGR_SUPPORTED
|
|
||||||
#define PNG_gAMA_SUPPORTED
|
|
||||||
#define PNG_GAMMA_SUPPORTED
|
|
||||||
#define PNG_GET_PALETTE_MAX_SUPPORTED
|
|
||||||
#define PNG_HANDLE_AS_UNKNOWN_SUPPORTED
|
|
||||||
#define PNG_hIST_SUPPORTED
|
|
||||||
#define PNG_iCCP_SUPPORTED
|
|
||||||
#define PNG_INCH_CONVERSIONS_SUPPORTED
|
|
||||||
#define PNG_INFO_IMAGE_SUPPORTED
|
|
||||||
#define PNG_IO_STATE_SUPPORTED
|
|
||||||
#define PNG_iTXt_SUPPORTED
|
|
||||||
#define PNG_MNG_FEATURES_SUPPORTED
|
|
||||||
#define PNG_oFFs_SUPPORTED
|
|
||||||
#define PNG_pCAL_SUPPORTED
|
|
||||||
#define PNG_pHYs_SUPPORTED
|
|
||||||
#define PNG_POINTER_INDEXING_SUPPORTED
|
|
||||||
#define PNG_PROGRESSIVE_READ_SUPPORTED
|
|
||||||
#define PNG_READ_16BIT_SUPPORTED
|
|
||||||
#define PNG_READ_ALPHA_MODE_SUPPORTED
|
|
||||||
#define PNG_READ_ANCILLARY_CHUNKS_SUPPORTED
|
|
||||||
#define PNG_READ_BACKGROUND_SUPPORTED
|
|
||||||
#define PNG_READ_BGR_SUPPORTED
|
|
||||||
#define PNG_READ_bKGD_SUPPORTED
|
|
||||||
#define PNG_READ_CHECK_FOR_INVALID_INDEX_SUPPORTED
|
|
||||||
#define PNG_READ_cHRM_SUPPORTED
|
|
||||||
#define PNG_READ_COMPOSITE_NODIV_SUPPORTED
|
|
||||||
#define PNG_READ_COMPRESSED_TEXT_SUPPORTED
|
|
||||||
#define PNG_READ_EXPAND_16_SUPPORTED
|
|
||||||
#define PNG_READ_EXPAND_SUPPORTED
|
|
||||||
#define PNG_READ_FILLER_SUPPORTED
|
|
||||||
#define PNG_READ_gAMA_SUPPORTED
|
|
||||||
#define PNG_READ_GAMMA_SUPPORTED
|
|
||||||
#define PNG_READ_GET_PALETTE_MAX_SUPPORTED
|
|
||||||
#define PNG_READ_GRAY_TO_RGB_SUPPORTED
|
|
||||||
#define PNG_READ_hIST_SUPPORTED
|
|
||||||
#define PNG_READ_iCCP_SUPPORTED
|
|
||||||
#define PNG_READ_INTERLACING_SUPPORTED
|
|
||||||
#define PNG_READ_INT_FUNCTIONS_SUPPORTED
|
|
||||||
#define PNG_READ_INVERT_ALPHA_SUPPORTED
|
|
||||||
#define PNG_READ_INVERT_SUPPORTED
|
|
||||||
#define PNG_READ_iTXt_SUPPORTED
|
|
||||||
#define PNG_READ_oFFs_SUPPORTED
|
|
||||||
#define PNG_READ_OPT_PLTE_SUPPORTED
|
|
||||||
#define PNG_READ_PACK_SUPPORTED
|
|
||||||
#define PNG_READ_PACKSWAP_SUPPORTED
|
|
||||||
#define PNG_READ_pCAL_SUPPORTED
|
|
||||||
#define PNG_READ_pHYs_SUPPORTED
|
|
||||||
#define PNG_READ_QUANTIZE_SUPPORTED
|
|
||||||
#define PNG_READ_RGB_TO_GRAY_SUPPORTED
|
|
||||||
#define PNG_READ_sBIT_SUPPORTED
|
|
||||||
#define PNG_READ_SCALE_16_TO_8_SUPPORTED
|
|
||||||
#define PNG_READ_sCAL_SUPPORTED
|
|
||||||
#define PNG_READ_SHIFT_SUPPORTED
|
|
||||||
#define PNG_READ_sPLT_SUPPORTED
|
|
||||||
#define PNG_READ_sRGB_SUPPORTED
|
|
||||||
#define PNG_READ_STRIP_16_TO_8_SUPPORTED
|
|
||||||
#define PNG_READ_STRIP_ALPHA_SUPPORTED
|
|
||||||
#define PNG_READ_SUPPORTED
|
|
||||||
#define PNG_READ_SWAP_ALPHA_SUPPORTED
|
|
||||||
#define PNG_READ_SWAP_SUPPORTED
|
|
||||||
#define PNG_READ_tEXt_SUPPORTED
|
|
||||||
#define PNG_READ_TEXT_SUPPORTED
|
|
||||||
#define PNG_READ_tIME_SUPPORTED
|
|
||||||
#define PNG_READ_TRANSFORMS_SUPPORTED
|
|
||||||
#define PNG_READ_tRNS_SUPPORTED
|
|
||||||
#define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
|
|
||||||
#define PNG_READ_USER_CHUNKS_SUPPORTED
|
|
||||||
#define PNG_READ_USER_TRANSFORM_SUPPORTED
|
|
||||||
#define PNG_READ_zTXt_SUPPORTED
|
|
||||||
/*#undef PNG_SAFE_LIMITS_SUPPORTED*/
|
|
||||||
#define PNG_SAVE_INT_32_SUPPORTED
|
|
||||||
#define PNG_SAVE_UNKNOWN_CHUNKS_SUPPORTED
|
|
||||||
#define PNG_sBIT_SUPPORTED
|
|
||||||
#define PNG_sCAL_SUPPORTED
|
|
||||||
#define PNG_SEQUENTIAL_READ_SUPPORTED
|
|
||||||
#define PNG_SET_CHUNK_CACHE_LIMIT_SUPPORTED
|
|
||||||
#define PNG_SET_CHUNK_MALLOC_LIMIT_SUPPORTED
|
|
||||||
#define PNG_SETJMP_SUPPORTED
|
|
||||||
#define PNG_SET_UNKNOWN_CHUNKS_SUPPORTED
|
|
||||||
#define PNG_SET_USER_LIMITS_SUPPORTED
|
|
||||||
#define PNG_SIMPLIFIED_READ_AFIRST_SUPPORTED
|
|
||||||
#define PNG_SIMPLIFIED_READ_BGR_SUPPORTED
|
|
||||||
#define PNG_SIMPLIFIED_READ_SUPPORTED
|
|
||||||
#define PNG_SIMPLIFIED_WRITE_AFIRST_SUPPORTED
|
|
||||||
#define PNG_SIMPLIFIED_WRITE_BGR_SUPPORTED
|
|
||||||
#define PNG_SIMPLIFIED_WRITE_SUPPORTED
|
|
||||||
#define PNG_sPLT_SUPPORTED
|
|
||||||
#define PNG_sRGB_SUPPORTED
|
|
||||||
#define PNG_STDIO_SUPPORTED
|
|
||||||
#define PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED
|
|
||||||
#define PNG_tEXt_SUPPORTED
|
|
||||||
#define PNG_TEXT_SUPPORTED
|
|
||||||
#define PNG_TIME_RFC1123_SUPPORTED
|
|
||||||
#define PNG_tIME_SUPPORTED
|
|
||||||
#define PNG_tRNS_SUPPORTED
|
|
||||||
#define PNG_UNKNOWN_CHUNKS_SUPPORTED
|
|
||||||
#define PNG_USER_CHUNKS_SUPPORTED
|
|
||||||
#define PNG_USER_LIMITS_SUPPORTED
|
|
||||||
#define PNG_USER_MEM_SUPPORTED
|
|
||||||
#define PNG_USER_TRANSFORM_INFO_SUPPORTED
|
|
||||||
#define PNG_USER_TRANSFORM_PTR_SUPPORTED
|
|
||||||
#define PNG_WARNINGS_SUPPORTED
|
|
||||||
#define PNG_WRITE_16BIT_SUPPORTED
|
|
||||||
#define PNG_WRITE_ANCILLARY_CHUNKS_SUPPORTED
|
|
||||||
#define PNG_WRITE_BGR_SUPPORTED
|
|
||||||
#define PNG_WRITE_bKGD_SUPPORTED
|
|
||||||
#define PNG_WRITE_CHECK_FOR_INVALID_INDEX_SUPPORTED
|
|
||||||
#define PNG_WRITE_cHRM_SUPPORTED
|
|
||||||
#define PNG_WRITE_COMPRESSED_TEXT_SUPPORTED
|
|
||||||
#define PNG_WRITE_CUSTOMIZE_ZTXT_COMPRESSION_SUPPORTED
|
|
||||||
#define PNG_WRITE_FILLER_SUPPORTED
|
|
||||||
#define PNG_WRITE_FILTER_SUPPORTED
|
|
||||||
#define PNG_WRITE_FLUSH_SUPPORTED
|
|
||||||
#define PNG_WRITE_gAMA_SUPPORTED
|
|
||||||
#define PNG_WRITE_GET_PALETTE_MAX_SUPPORTED
|
|
||||||
#define PNG_WRITE_hIST_SUPPORTED
|
|
||||||
#define PNG_WRITE_iCCP_SUPPORTED
|
|
||||||
#define PNG_WRITE_INTERLACING_SUPPORTED
|
|
||||||
#define PNG_WRITE_INT_FUNCTIONS_SUPPORTED
|
|
||||||
#define PNG_WRITE_INVERT_ALPHA_SUPPORTED
|
|
||||||
#define PNG_WRITE_INVERT_SUPPORTED
|
|
||||||
#define PNG_WRITE_iTXt_SUPPORTED
|
|
||||||
#define PNG_WRITE_oFFs_SUPPORTED
|
|
||||||
#define PNG_WRITE_OPTIMIZE_CMF_SUPPORTED
|
|
||||||
#define PNG_WRITE_PACK_SUPPORTED
|
|
||||||
#define PNG_WRITE_PACKSWAP_SUPPORTED
|
|
||||||
#define PNG_WRITE_pCAL_SUPPORTED
|
|
||||||
#define PNG_WRITE_pHYs_SUPPORTED
|
|
||||||
#define PNG_WRITE_sBIT_SUPPORTED
|
|
||||||
#define PNG_WRITE_sCAL_SUPPORTED
|
|
||||||
#define PNG_WRITE_SHIFT_SUPPORTED
|
|
||||||
#define PNG_WRITE_sPLT_SUPPORTED
|
|
||||||
#define PNG_WRITE_sRGB_SUPPORTED
|
|
||||||
#define PNG_WRITE_SUPPORTED
|
|
||||||
#define PNG_WRITE_SWAP_ALPHA_SUPPORTED
|
|
||||||
#define PNG_WRITE_SWAP_SUPPORTED
|
|
||||||
#define PNG_WRITE_tEXt_SUPPORTED
|
|
||||||
#define PNG_WRITE_TEXT_SUPPORTED
|
|
||||||
#define PNG_WRITE_tIME_SUPPORTED
|
|
||||||
#define PNG_WRITE_TRANSFORMS_SUPPORTED
|
|
||||||
#define PNG_WRITE_tRNS_SUPPORTED
|
|
||||||
#define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
|
|
||||||
#define PNG_WRITE_USER_TRANSFORM_SUPPORTED
|
|
||||||
#define PNG_WRITE_WEIGHTED_FILTER_SUPPORTED
|
|
||||||
#define PNG_WRITE_zTXt_SUPPORTED
|
|
||||||
#define PNG_zTXt_SUPPORTED
|
|
||||||
/* end of options */
|
|
||||||
#endif /* PNGLCONF_H */
|
#endif /* PNGLCONF_H */
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
# These lines are copied from Makefile.am, they illustrate
|
# These lines are copied from Makefile.am, they illustrate
|
||||||
# how to automate the build of pnglibconf.h from scripts/pnglibconf.dfa
|
# how to automate the build of pnglibconf.h from scripts/pnglibconf.dfa
|
||||||
# given 'awk' and 'sed'
|
# given just 'awk', a C preprocessor and standard command line utilities
|
||||||
|
|
||||||
# Override as appropriate, these definitions can be overridden on
|
# Override as appropriate, these definitions can be overridden on
|
||||||
# the make command line (AWK='nawk' for example).
|
# the make command line (AWK='nawk' for example).
|
||||||
@@ -12,10 +12,9 @@ AWK = mawk
|
|||||||
AWK = nawk
|
AWK = nawk
|
||||||
AWK = one-true-awk
|
AWK = one-true-awk
|
||||||
AWK = awk # Crashes on SunOS 5.10 - use 'nawk'
|
AWK = awk # Crashes on SunOS 5.10 - use 'nawk'
|
||||||
CPP = $(CC) -E # Does not work on SUN OS 5.10 - use /lib/cpp
|
CPP = $(CC) -E # On SUN OS 5.10 if this causes problems use /lib/cpp
|
||||||
SED = sed
|
|
||||||
|
|
||||||
COPY = cp
|
MOVE = mv
|
||||||
DELETE = rm -f
|
DELETE = rm -f
|
||||||
ECHO = echo
|
ECHO = echo
|
||||||
DFA_XTRA = # Put your configuration file here, see scripts/pnglibconf.dfa. Eg:
|
DFA_XTRA = # Put your configuration file here, see scripts/pnglibconf.dfa. Eg:
|
||||||
@@ -32,28 +31,24 @@ srcdir = .
|
|||||||
# The standard pnglibconf.h exists as scripts/pnglibconf.h.prebuilt,
|
# The standard pnglibconf.h exists as scripts/pnglibconf.h.prebuilt,
|
||||||
# copy this if the following doesn't work.
|
# copy this if the following doesn't work.
|
||||||
pnglibconf.h: pnglibconf.dfn
|
pnglibconf.h: pnglibconf.dfn
|
||||||
$(DELETE) $@ dfn.c dfn1.out dfn2.out dfn3.out
|
$(DELETE) $@ pnglibconf.c pnglibconf.out pnglibconf.tmp
|
||||||
$(ECHO) '#include "pnglibconf.dfn"' >dfn.c
|
$(ECHO) '#include "pnglibconf.dfn"' >pnglibconf.c
|
||||||
$(CPP) $(DFNFLAGS) dfn.c >dfn1.out
|
$(ECHO) "If '$(CC) -E' crashes try /lib/cpp (e.g. CPP='/lib/cpp')" >&2
|
||||||
$(ECHO) "If 'cpp -e' crashes try /lib/cpp (e.g. CPP='/lib/cpp')" >&2
|
$(CPP) $(DFNFLAGS) pnglibconf.c >pnglibconf.out
|
||||||
$(SED) -n -e 's|^.*PNG_DEFN_MAGIC *-\(.*\)- *PNG_DEFN_END.*$$|\1|p'\
|
$(AWK) -f "$(srcdir)/scripts/dfn.awk" out="pnglibconf.tmp" pnglibconf.out 1>&2
|
||||||
dfn1.out >dfn2.out
|
$(MOVE) pnglibconf.tmp $@
|
||||||
$(SED) -e 's| *PNG_JOIN *||g' -e 's| *$$||' dfn2.out >dfn3.out
|
|
||||||
$(COPY) dfn3.out $@
|
|
||||||
$(DELETE) dfn.c dfn1.out dfn2.out dfn3.out
|
|
||||||
|
|
||||||
pnglibconf.dfn: $(srcdir)/scripts/pnglibconf.dfa $(srcdir)/scripts/options.awk $(srcdir)/pngconf.h $(srcdir)/pngusr.dfa
|
pnglibconf.dfn: $(srcdir)/scripts/pnglibconf.dfa $(srcdir)/scripts/options.awk $(srcdir)/pngconf.h $(srcdir)/pngusr.dfa $(DFA_XTRA)
|
||||||
$(DELETE) $@ dfn1.out dfn2.out
|
$(DELETE) $@ pnglibconf.pre pnglibconf.tmp
|
||||||
$(ECHO) "Calling $(AWK) from scripts/pnglibconf.mak" >&2
|
$(ECHO) "Calling $(AWK) from scripts/pnglibconf.mak" >&2
|
||||||
$(ECHO) "If 'awk' crashes try a better awk (e.g. AWK='nawk')" >&2
|
$(ECHO) "If 'awk' crashes try a better awk (e.g. AWK='nawk')" >&2
|
||||||
$(AWK) -f $(srcdir)/scripts/options.awk out=dfn1.out version=search\
|
$(AWK) -f $(srcdir)/scripts/options.awk out="pnglibconf.pre"\
|
||||||
$(srcdir)/pngconf.h $(srcdir)/scripts/pnglibconf.dfa\
|
version=search $(srcdir)/pngconf.h $(srcdir)/scripts/pnglibconf.dfa\
|
||||||
$(srcdir)/pngusr.dfa $(DFA_XTRA) 1>&2
|
$(srcdir)/pngusr.dfa $(DFA_XTRA) 1>&2
|
||||||
$(AWK) -f $(srcdir)/scripts/options.awk out=dfn2.out dfn1.out 1>&2
|
$(AWK) -f $(srcdir)/scripts/options.awk out="pnglibconf.tmp" pnglibconf.pre 1>&2
|
||||||
$(COPY) dfn2.out $@
|
$(MOVE) pnglibconf.tmp $@
|
||||||
$(DELETE) dfn1.out dfn2.out
|
|
||||||
|
|
||||||
clean-pnglibconf:
|
clean-pnglibconf:
|
||||||
$(DELETE) pnglibconf.h pnglibconf.dfn dfn.c dfn1.out dfn2.out dfn3.out
|
$(DELETE) pnglibconf.*
|
||||||
|
|
||||||
clean: clean-pnglibconf
|
clean: clean-pnglibconf
|
||||||
|
|||||||
@@ -10,11 +10,15 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define PNG_EXPORTA(ordinal, type, name, args, attributes)\
|
#define PNG_EXPORTA(ordinal, type, name, args, attributes)\
|
||||||
PNG_DEFN_MAGIC-name-PNG_DEFN_END
|
PNG_DFN "@" name "@"
|
||||||
|
|
||||||
/* The configuration information *before* the additional of symbol renames,
|
/* The configuration information *before* the additional of symbol renames,
|
||||||
* the list is the C name list; no symbol prefix.
|
* the list is the C name list; no symbol prefix.
|
||||||
*/
|
*/
|
||||||
#include "pnglibconf.out"
|
#include "pnglibconf.out"
|
||||||
|
|
||||||
|
PNG_DFN_START_SORT 1
|
||||||
|
|
||||||
#include "../png.h"
|
#include "../png.h"
|
||||||
|
|
||||||
|
PNG_DFN_END_SORT
|
||||||
|
|||||||
@@ -10,6 +10,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define PNG_EXPORTA(ordinal, type, name, args, attributes)\
|
#define PNG_EXPORTA(ordinal, type, name, args, attributes)\
|
||||||
PNG_DEFN_MAGIC-SYMBOL_PREFIX PNG_JOIN name-PNG_DEFN_END
|
PNG_DFN "@" SYMBOL_PREFIX "@@" name "@"
|
||||||
|
|
||||||
#include "../png.h"
|
#include "../png.h"
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
;Version 1.6.3
|
||||||
;--------------------------------------------------------------
|
;--------------------------------------------------------------
|
||||||
; LIBPNG symbol list as a Win32 DEF file
|
; LIBPNG symbol list as a Win32 DEF file
|
||||||
; Contains all the symbols that can be exported from libpng
|
; Contains all the symbols that can be exported from libpng
|
||||||
@@ -5,7 +6,6 @@
|
|||||||
LIBRARY
|
LIBRARY
|
||||||
|
|
||||||
EXPORTS
|
EXPORTS
|
||||||
;Version 1.6.0
|
|
||||||
png_access_version_number @1
|
png_access_version_number @1
|
||||||
png_set_sig_bytes @2
|
png_set_sig_bytes @2
|
||||||
png_sig_cmp @3
|
png_sig_cmp @3
|
||||||
@@ -248,3 +248,4 @@ EXPORTS
|
|||||||
png_convert_to_rfc1123_buffer @241
|
png_convert_to_rfc1123_buffer @241
|
||||||
png_set_check_for_invalid_index @242
|
png_set_check_for_invalid_index @242
|
||||||
png_get_palette_max @243
|
png_get_palette_max @243
|
||||||
|
png_set_option @244
|
||||||
|
|||||||
@@ -17,11 +17,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#define PNG_EXPORTA(ordinal, type, name, args, attributes)\
|
#define PNG_EXPORTA(ordinal, type, name, args, attributes)\
|
||||||
PNG_DEFN_MAGIC-name @ordinal-PNG_DEFN_END
|
PNG_DFN "@" name "@ @@" ordinal "@"
|
||||||
#define PNG_REMOVED(ordinal, type, name, args, attributes)\
|
#define PNG_REMOVED(ordinal, type, name, args, attributes)\
|
||||||
PNG_DEFN_MAGIC-; name @ordinal-PNG_DEFN_END
|
PNG_DFN "; @" name "@ @@" ordinal "@"
|
||||||
#define PNG_EXPORT_LAST_ORDINAL(ordinal)\
|
#define PNG_EXPORT_LAST_ORDINAL(ordinal)\
|
||||||
PNG_DEFN_MAGIC-; @ordinal-PNG_DEFN_END
|
PNG_DFN "; @@" ordinal "@"
|
||||||
|
|
||||||
/* Read the defaults, but use scripts/pnglibconf.h.prebuilt; the 'standard'
|
/* Read the defaults, but use scripts/pnglibconf.h.prebuilt; the 'standard'
|
||||||
* header file.
|
* header file.
|
||||||
@@ -35,13 +35,14 @@
|
|||||||
* defaulted to 'off' in scripts/pnglibconf.dfa
|
* defaulted to 'off' in scripts/pnglibconf.dfa
|
||||||
*
|
*
|
||||||
* Maintenance: if scripts/pnglibconf.dfa options are changed
|
* Maintenance: if scripts/pnglibconf.dfa options are changed
|
||||||
* from, or to, 'off' this needs updating!
|
* from, or to, 'disabled' this needs updating!
|
||||||
*/
|
*/
|
||||||
#define PNG_BENIGN_ERRORS_SUPPORTED
|
#define PNG_BENIGN_ERRORS_SUPPORTED
|
||||||
#define PNG_ERROR_NUMBERS_SUPPORTED
|
#define PNG_ERROR_NUMBERS_SUPPORTED
|
||||||
#define PNG_READ_BIG_ENDIAN_SUPPORTED /* should do nothing! */
|
#define PNG_READ_BIG_ENDIAN_SUPPORTED /* should do nothing! */
|
||||||
#define PNG_INCH_CONVERSIONS_SUPPORTED
|
#define PNG_INCH_CONVERSIONS_SUPPORTED
|
||||||
#define PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
|
#define PNG_READ_16_TO_8_ACCURATE_SCALE_SUPPORTED
|
||||||
|
#define PNG_SET_OPTION_SUPPORTED
|
||||||
|
|
||||||
#undef PNG_H
|
#undef PNG_H
|
||||||
#include "../png.h"
|
#include "../png.h"
|
||||||
|
|||||||
@@ -9,18 +9,11 @@
|
|||||||
* and license in png.h
|
* and license in png.h
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define HEADER PNG_DEFN_MAGIC-PNGLIB_LIBNAME {global:-PNG_DEFN_END
|
|
||||||
|
|
||||||
/* NOTE: PNG_JOIN is interpreted by the calling script as a signal to
|
|
||||||
* join the two things on either side, so we can do symbol
|
|
||||||
* substitution within the name, regular C ## joins the pp-tokens,
|
|
||||||
* not their final values.
|
|
||||||
*/
|
|
||||||
#define PNG_EXPORTA(ordinal, type, name, args, attributes)\
|
#define PNG_EXPORTA(ordinal, type, name, args, attributes)\
|
||||||
PNG_DEFN_MAGIC- SYMBOL_PREFIX PNG_JOIN name;-PNG_DEFN_END
|
PNG_DFN " @" SYMBOL_PREFIX "@@" name "@;"
|
||||||
|
|
||||||
#define TRAILER PNG_DEFN_MAGIC-local: *; };-PNG_DEFN_END
|
PNG_DFN "@" PNGLIB_LIBNAME "@ {global:"
|
||||||
|
|
||||||
HEADER
|
|
||||||
#include "../png.h"
|
#include "../png.h"
|
||||||
TRAILER
|
|
||||||
|
PNG_DFN "local: *; };"
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
echo "Running tests. For details see pngtest-log.txt"
|
|
||||||
|
|
||||||
echo "============ pngtest pngtest.png ==============" > pngtest-log.txt
|
|
||||||
|
|
||||||
echo "Running test-pngtest.sh"
|
|
||||||
if ./pngtest --strict ${srcdir}/pngtest.png >> pngtest-log.txt 2>&1
|
|
||||||
then
|
|
||||||
echo " PASS: pngtest --strict pngtest.png"
|
|
||||||
err=0
|
|
||||||
else
|
|
||||||
echo " FAIL: pngtest --strict pngtest.png"
|
|
||||||
err=1
|
|
||||||
fi
|
|
||||||
exit $err
|
|
||||||
13
tests/pngstest
Executable file
13
tests/pngstest
Executable file
@@ -0,0 +1,13 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
#
|
||||||
|
# tests/pngstest pattern
|
||||||
|
#
|
||||||
|
# Runs pngstest on all the contrib/pngsuite/[^x]*${pattern}.png files
|
||||||
|
# NOTE: pattern is used to name the temporary files pngstest generates
|
||||||
|
#
|
||||||
|
pattern="$1"
|
||||||
|
shift
|
||||||
|
exec ./pngstest --strict --tmpfile "${pattern}" --log ${1+"$@"}\
|
||||||
|
"${srcdir}/contrib/pngsuite/"[a-wyz]*${pattern}".png"
|
||||||
2
tests/pngstest-0g01
Executable file
2
tests/pngstest-0g01
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec "${srcdir}/tests/pngstest" 0g01
|
||||||
2
tests/pngstest-0g02
Executable file
2
tests/pngstest-0g02
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec "${srcdir}/tests/pngstest" 0g02
|
||||||
2
tests/pngstest-0g04
Executable file
2
tests/pngstest-0g04
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec "${srcdir}/tests/pngstest" 0g04
|
||||||
2
tests/pngstest-0g08
Executable file
2
tests/pngstest-0g08
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec "${srcdir}/tests/pngstest" 0g08
|
||||||
2
tests/pngstest-0g16
Executable file
2
tests/pngstest-0g16
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec "${srcdir}/tests/pngstest" 0g16
|
||||||
2
tests/pngstest-2c08
Executable file
2
tests/pngstest-2c08
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec "${srcdir}/tests/pngstest" 2c08
|
||||||
2
tests/pngstest-2c16
Executable file
2
tests/pngstest-2c16
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec "${srcdir}/tests/pngstest" 2c16
|
||||||
2
tests/pngstest-3p01
Executable file
2
tests/pngstest-3p01
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec "${srcdir}/tests/pngstest" 3p01
|
||||||
2
tests/pngstest-3p02
Executable file
2
tests/pngstest-3p02
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec "${srcdir}/tests/pngstest" 3p02
|
||||||
2
tests/pngstest-3p04
Executable file
2
tests/pngstest-3p04
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec "${srcdir}/tests/pngstest" 3p04
|
||||||
2
tests/pngstest-3p08
Executable file
2
tests/pngstest-3p08
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec "${srcdir}/tests/pngstest" 3p08
|
||||||
2
tests/pngstest-4a08
Executable file
2
tests/pngstest-4a08
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec "${srcdir}/tests/pngstest" 4a08
|
||||||
2
tests/pngstest-4a16
Executable file
2
tests/pngstest-4a16
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec "${srcdir}/tests/pngstest" 4a16
|
||||||
2
tests/pngstest-6a08
Executable file
2
tests/pngstest-6a08
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec "${srcdir}/tests/pngstest" 6a08
|
||||||
2
tests/pngstest-6a16
Executable file
2
tests/pngstest-6a16
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
exec "${srcdir}/tests/pngstest" 6a16
|
||||||
14
tests/pngstest-error
Executable file
14
tests/pngstest-error
Executable file
@@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
code=77 # skipped
|
||||||
|
for t in "${srcdir}/contrib/pngsuite/"x*".png"
|
||||||
|
do
|
||||||
|
if test "$t" != "${srcdir}/contrib/pngsuite/x*.png"
|
||||||
|
then
|
||||||
|
# not skipped, test it
|
||||||
|
if ./pngstest --strict --tmpfile "error" --log "$@" "$t"
|
||||||
|
then
|
||||||
|
code=0 # oops, success: should not happen!
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
exit $code
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user