Compare commits

...

888 Commits

Author SHA1 Message Date
Glenn Randers-Pehrson
6ca8ee1518 [libpng16] Imported from libpng-1.6.19beta04.tar 2015-10-14 22:25:21 -05:00
Glenn Randers-Pehrson
59e655b020 [libpng16] Added sPLT support to pngtest.c 2015-10-10 12:05:55 -05:00
Glenn Randers-Pehrson
5bd9d66098 [libpng16] Updated CHANGES and ANNOUNCE 2015-10-03 15:16:53 -05:00
John Bowler
2163c930b0 pow and sbit fixes backported to pngvalid from 1.7
Signed-off-by: John Bowler <jbowler@acm.org>
2015-10-03 11:14:43 -07:00
John Bowler
18f0bd1d63 Merge remote-tracking branch 'local/libpng16' into libpng16 2015-09-27 08:52:50 -07:00
Glenn Randers-Pehrson
5b9c044332 Revert "[libpng16] Fix bad merge of contrib/libtests/pngvalid.c"
This reverts commit 9517f7b636.
2015-09-27 09:17:45 -05:00
John Bowler
dc3069bcb1 Merge branch 'libpng16' into libpng16-pngvalid-rgb-to-gray-digitize-issues 2015-09-26 21:29:06 -07:00
Glenn Randers-Pehrson
9517f7b636 [libpng16] Fix bad merge of contrib/libtests/pngvalid.c 2015-09-26 23:11:15 -05:00
Glenn Randers-Pehrson
b77d929217 [libpng16] Restored Makefile.am and configure.ac (they had been
inadvertently replaced with libpng17 versions).
2015-09-26 22:54:51 -05:00
Glenn Randers-Pehrson
b939ce06be [libpng17] Makefile.am and configure.ac were out of date. 2015-09-26 22:26:44 -05:00
Glenn Randers-Pehrson
f9e37f54eb [libpng16] Worked around rgb-to-gray issues in libpng 1.6. The previous
attempts to ignore the errors in the code aren't quite enough to
deal with the 'channel selection' encoding added to libpng 1.7; abort.
2015-09-26 21:31:53 -05:00
John Bowler
04402a9126 Fix (work round) rgb-to-gray issues in libpng 1.6
The previous attempts to ignore the errors in the code aren't quite enough to
deal with the 'channel selection' encoding added to libpng 1.7; abort.
pngvalid.c is changed to drop this encoding in prior versions.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-26 17:41:02 -07:00
Glenn Randers-Pehrson
068cb3a64c [libpng16] Bump version to 1.6.19beta04 2015-09-26 09:44:43 -05:00
Glenn Randers-Pehrson
f4302a73ac [libpng16] Imported from libpng-1.6.19beta03.tar 2015-09-26 09:44:34 -05:00
John Bowler
23ddeb58a5 pngvalid tests: add --strict, fix test names
Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-25 17:06:58 -07:00
John Bowler
956f295d48 Merge remote-tracking branch 'local/libpng16' into libpng16 2015-09-25 16:58:43 -07:00
Glenn Randers-Pehrson
61257bc2de [libpng16] Update CHANGES and ANNOUNCE 2015-09-25 18:25:08 -05:00
John Bowler
6297297708 Enable low-bit-depth gray tests in pngvalid
Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-25 16:21:45 -07:00
John Bowler
fd42ef9b06 pngstest 1.6 error limit and warning revisions
Remove the '--strict' in 1.6 because of the double-gamma-correction warning,
update pngstest-errors.h for the errors detected with the new contrib/testspngs
PNG test files.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-25 13:40:18 -07:00
John Bowler
a2671a7f49 test PNG files (contrib/testpngs)
Back ported from libpng 1.7

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-25 13:10:13 -07:00
John Bowler
fa5ba2e026 New test PNG files incorporated into make check
tests/pngstest-* are changed so that the new test files are divided into 8
groups by gamma and alpha channel.  This makes each test take just under 5
seconds on a moderately up-to-date x86_64 system using libpng16 (test times are
somewhat variable under libpng17 at present because of the lack of optimization
in some gamma processing paths.)

These tests have considerably better code and pixel-value coverage than
contrib/pngsuite however coverage is still incomplete.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-25 12:41:56 -07:00
Glenn Randers-Pehrson
01a0e8062d [libpng16] Reverted addition of png_set_filler_16 and png_set_add_alpha_16()
functions. They unnecessarily duplicate png_set_filler() and png_set_add_alpha()
which now work properly with 16-bit images.
2015-09-24 22:39:53 -05:00
Glenn Randers-Pehrson
5b038f83e7 [libpng16] Fix typo in manual 2015-09-23 22:27:14 -05:00
Glenn Randers-Pehrson
efe4e5d10d [libpng16] Reverted the fix of byte order in png_do_read_filler() with 16-bit
input that was made in version 1.6.17beta01, to preserve legacy
behavior even though it was incorrect.  Instead, added new API
png_set_filter_16() and png_set_add_alpha_16() that set a flag to
make png_do_read_filter() interpret the filler bytes properly.
2015-09-23 22:08:04 -05:00
John Bowler
d6eb4b71ac Updated pngstest-errors.h
This update incorporates errors resulting from the more extensive image test
suite used in libpng 1.7

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-20 20:59:10 -07:00
Glenn Randers-Pehrson
4c9c43d4d4 [libpng16] Added license info to pngstest-errors.h and its generator. 2015-09-19 20:17:44 -05:00
Glenn Randers-Pehrson
0cc11b86ba [libpng16] Update ANNOUNCE and CHANGES with recent pngstest updates. 2015-09-19 19:57:59 -05:00
John Bowler
93b4568fc0 pngstest: make error limits version specific
Splitting the machine generated error structs out to a file allows the values to
be updated without changing pngstest.c itself, since libpng 1.6 and 1.7 have
slightly different error limits this simplifies maintenance.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-19 16:34:30 -07:00
Glenn Randers-Pehrson
f6cd8f2d65 [libpng16] Updated description of filler-byte bugfix in CHANGES. 2015-09-18 23:37:25 -05:00
Glenn Randers-Pehrson
8bfcb4c7a7 [libpng16] Copied contrib/libtests/pngvalid.c from libpng17. 2015-09-18 14:24:49 -05:00
Glenn Randers-Pehrson
eb0bf4f468 [libpng16] Updated pngvalid.c with recent changes from libpng17 2015-09-18 13:09:57 -05:00
John Bowler
e8c554661c Back-port pngvalid corrections and enhancements
This is a patch for libpng16.
It incorporates fixes to the low-bit-depth gray background handling from
libpng17 and turns one of the low-bit-depth gray cases that does work (and,
indeed, did work before) in libpng16

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-17 07:56:30 -07:00
John Bowler
c3e7e7d715 [libpng16] tests backported from libpng 1.7
This updates libpng16 with all the test changes from libpng17,
including changes to pngvalid.c to ensure that the original,
distributed, version of contrib/visupng/cexcept.h can be used.

pngvalid contains the correction to the use of SAVE/STORE_
UNKNOWN_CHUNKS; a bug revealed by changes in libpng 1.7.  More
tests contain the --strict option to detect warnings and the
pngvalid-standard test has been corrected so that it does not
turn on progresive-read (there is a separate test which does
that.)

Some signed/unsigned fixes have been made.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-15 15:38:52 -07:00
Glenn Randers-Pehrson
1e16e8829d [libpng16] Fix typo (extra "*/") in contrib/libtests/fakepng.c 2015-09-15 17:07:34 -05:00
John Bowler
33a97c5c8a [libpng16] Fixed png_save_int_32 when int is not 2's complement (John Bowler). 2015-08-21 14:42:00 -05:00
Glenn Randers-Pehrson
39be3b81da [libpng16] Bump version to 1.6.19beta03 2015-08-19 12:58:26 -05:00
Glenn Randers-Pehrson
4c02a5930a [libpng16] Imported from libpng-1.6.19beta02.tar 2015-08-19 12:58:14 -05:00
John Bowler
2d62f7406f [libpng16] Fixed the recently reported 1's complement security issue by
replacing the value that is illegal in the PNG spec, in both signed and
unsigned values, with 0. Illegal unsigned values (anything greater than or equal
to  0x80000000) can still pass through, but since these are not illegal
in ANSI-C (unlike 0x80000000 in the signed case) the checking that
occurs later can catch them (John Bowler).
2015-08-19 12:56:48 -05:00
Glenn Randers-Pehrson
6530e3898d [libpng16] Restored previous handling of negative input to png_set_sig_bytes(). 2015-08-17 21:56:03 -05:00
Glenn Randers-Pehrson
5a26171dd7 [libpng16] Mention the change in png_set_sig_bytes() behavior in the man page. 2015-08-17 21:39:22 -05:00
Robert C. Seacord
167b5e4c27 [libpng16] Safely convert num_bytes to a png_byte in png_set_sig_bytes() 2015-08-17 21:20:34 -05:00
Glenn Randers-Pehrson
a8242fe6fb [libng16] Reverted recent mistaken change of 0xnnnn to 0xnnnnUL 2015-08-17 20:46:27 -05:00
Glenn Randers-Pehrson
15e69748f1 [libpng16] Removed new unnecessary typecast in pngrutil.c 2015-08-17 12:52:56 -05:00
Glenn Randers-Pehrson
268c7bf68b [libpng16] Use unsigned hex constants in "reciprocal" computations 2015-08-17 12:40:19 -05:00
Glenn Randers-Pehrson
d8b93c29a7 [libpng16] Appended more "UL" to hex constants. 2015-08-17 10:56:17 -05:00
Glenn Randers-Pehrson
b9ba8d6a57 [libpng16] Mention in manual that 16-bit platform support has been dropped. 2015-08-16 23:32:04 -05:00
John Bowler
751cee5ef1 [libpng16] Added signed/unsigned 16-bit safety net. This removes the dubious
0x8000 flag definitions on 16-bit systems. They aren't supported
yet the defs *probably* work, however it seems much safer to do this
and be advised if anyone, contrary to advice, is building libpng 1.6
on a 16-bit system. It also adds back various switch default clauses
for GCC; GCC errors out if they are not present (with an appropriately
high level of warnings).
2015-08-16 22:54:21 -05:00
Glenn Randers-Pehrson
8ba4b13c55 [libpng16] Changed 0xnnnn constants to 0xnnnnUL. 2015-08-16 22:49:58 -05:00
Glenn Randers-Pehrson
8b83ff3704 [libpng16] Change "n bit" to "n-bit" in comments. 2015-08-13 20:57:18 -05:00
Glenn Randers-Pehrson
a472858297 [libpng16] Fix links in man page 2015-08-11 15:34:08 -05:00
Glenn Randers-Pehrson
682f4ba2d5 [libpng16] Fix links in man page 2015-08-11 13:04:01 -05:00
Glenn Randers-Pehrson
656720fb42 [libpng16] Fixed dead link in man page 2015-08-11 12:12:46 -05:00
Glenn Randers-Pehrson
fd8ef4c428 [libpng16] Add #ifdef PNG_DEBUG/#endif around normally unreachable code
in pngread.c
2015-08-07 14:43:34 -05:00
Victor Szakats
4e1d299e6b [libpng16] Removed unreachable "break" statements in png.c, pngread.c, and
pngrtran.c to suppress clang warnings (Bug report by Viktor Szakats).
2015-08-07 14:31:11 -05:00
Glenn Randers-Pehrson
0e9cd91609 [libpng16] Moved config.h.in~ from the "libpng_autotools_files" list to the
"libpng_autotools_extra" list in autogen.sh because it was causing a
false positive for missing files (bug report by Robert C. Seacord).
2015-08-02 21:51:11 -05:00
Glenn Randers-Pehrson
52d159a784 [libpng16] Bump version to 1.6.19beta02 2015-07-30 11:24:53 -05:00
Glenn Randers-Pehrson
67806d44c1 [libpng16] Imported from libpng-1.6.19beta01.tar 2015-07-30 11:18:15 -05:00
Glenn Randers-Pehrson
8510247b5f [libpng16] Fixed uninitialized variable in contrib/gregbook/rpng2-x.c and
fixed potential leak of png_pixels in contrib/pngminus/pnm2png.c
2015-07-30 11:16:29 -05:00
Glenn Randers-Pehrson
77becc566f [libpng16] Suppressed warnings from the Borland C++ 5.5.1/5.82 compiler in png.c 2015-07-29 08:01:12 -05:00
Glenn Randers-Pehrson
e1b505cd1d [libpng16]Suppressed a warning from the Borland C++ 5.5.1/5.82 compiler 2015-07-29 07:42:19 -05:00
Glenn Randers-Pehrson
e485a09e0e [libpng16] Suppressed some warnings from the Borland C++ 5.5.1/5.82 compiler
(Bug report by Viktor Szaka'ts).  Several warnings remain and are
unavoidable, where we test for overflow.
2015-07-29 07:29:17 -05:00
Glenn Randers-Pehrson
1fa62ae734 [libpng16] Rearranged png.h to put the major sections in the same order as
in libpng17.
2015-07-25 20:50:21 -05:00
Glenn Randers-Pehrson
262c396666 [libpng16] More edits to libpng.3 and libpng-manual.txt 2015-07-25 08:30:12 -05:00
Glenn Randers-Pehrson
59a82b40b0 [libpng16] Avoid potentially dereferencing NULL info_ptr in png_info_init_3(). 2015-07-25 08:03:05 -05:00
Glenn Randers-Pehrson
e10b7e73db [libpng16] Updated obsolete information about the simplified API macros in the
manual pages (Bug report by Arc Riley).
2015-07-25 08:01:34 -05:00
Glenn Randers-Pehrson
476250ebd2 [libpng16] Bump version to 1.6.19beta01 2015-07-23 20:20:53 -05:00
Glenn Randers-Pehrson
e6172809bd [libpng16] Imported from libpng-1.6.18.tar 2015-07-22 22:40:52 -05:00
Glenn Randers-Pehrson
db8704e1f4 [libpng16] Imported from libpng-1.6.18rc03.tar 2015-07-15 21:24:11 -05:00
Glenn Randers-Pehrson
1a73305ac2 [libpng16] Removed WEIGHTED_FILTER info from the man page. 2015-07-13 14:53:27 -05:00
Glenn Randers-Pehrson
285a9b22c7 [libpng16] Bump version to 1.6.18rc03 2015-07-13 08:31:05 -05:00
Glenn Randers-Pehrson
be55943d45 [libpng16] Imported from libpng-1.6.18rc02.tar 2015-07-13 07:09:33 -05:00
Glenn Randers-Pehrson
e0874e1934 [libpng16] Restored unused WEIGHTED_FILTER macros removed at libpng-1.6.18beta08
to png.h to avoid compatibility warnings.
2015-07-13 07:08:15 -05:00
Glenn Randers-Pehrson
4cb6607c89 [libpng16] Imported from libpng-1.6.18rc01.tar 2015-07-09 11:14:03 -05:00
Glenn Randers-Pehrson
751eb368a8 [libpng16] Added Mans Rullgard and James Yu to the list of Contributing Authors 2015-07-09 11:11:49 -05:00
Glenn Randers-Pehrson
f7654a0c61 [libpng16] Fixed new typo in LICENSE 2015-07-04 20:58:24 -05:00
Glenn Randers-Pehrson
d78eb10f29 [libpng16] Bump version to 1.6.18beta10 2015-07-04 20:43:09 -05:00
Glenn Randers-Pehrson
d2a35c6088 [libpng16] Imported from libpng-1.6.18beta09.tar 2015-07-04 20:42:56 -05:00
Glenn Randers-Pehrson
b9e5e5f5a8 [libpng16] Replaced arbitrary use of 'extern' with #define PNG_LINKAGE_*. To
preserve API compatibility, the new defines all default to "extern"
(requested by Jan Nijtmans).
2015-07-03 16:07:54 -05:00
Glenn Randers-Pehrson
a390897ba4 [libpng16] Fixed a new signed-unsigned comparison in pngrtran.c (Max Stepin).
Removed some useless typecasts from contrib/tools/png-fix-itxt.c
2015-07-01 14:06:39 -05:00
Glenn Randers-Pehrson
4e5ac72254 [libpng16] Bump version to 1.6.18beta09 2015-06-30 10:54:55 -05:00
Glenn Randers-Pehrson
9d4ea3014b [libpng16] Imported from libpng-1.6.18beta08.tar 2015-06-30 10:54:44 -05:00
Glenn Randers-Pehrson
f86720c6c0 [libpng16] Fix some indentation. 2015-06-11 22:00:14 -05:00
Glenn Randers-Pehrson
c6f629ffdd [libpng16] Unlink temporary file immediately in pngstest (PNG_USE_MKSTEMP) 2015-06-11 16:28:54 -05:00
Glenn Randers-Pehrson
81487c8b54 [libpng16] Removed some unused WEIGHTED_FILTER macros from png.h and pngstruct.h 2015-06-10 07:06:42 -05:00
Glenn Randers-Pehrson
f6e7551f06 [libpng16] Eliminated the final two Coverity defects (insecure temporary file
handling in contrib/libtests/pngstest.c; possible overflow of
unsigned char in contrib/tools/png-fix-itxt.c). To use the "secure"
file handling, define PNG_USE_MKSTEMP, otherwise "tmpfile()" will
continue to be used.
2015-06-10 07:05:18 -05:00
Glenn Randers-Pehrson
4293254bef [libpng16] Bump version to 1.6.18beta08 2015-06-06 17:03:35 -05:00
Glenn Randers-Pehrson
867f2ec058 [libpng16] Imported from libpng-1.6.18beta07.tar 2015-06-06 17:03:14 -05:00
Glenn Randers-Pehrson
b26b51d154 [libpng16] Quieted Coverity issues in pngfix.c, png-fix-itxt.c, pngvalid.c,
pngstest.c, and pngimage.c. Most seem harmless, but png-fix-itxt
would only work with iTXt chunks with length 255 or less.
2015-06-03 16:07:01 -05:00
Glenn Randers-Pehrson
f50b593ac0 [libpng16] Update revision information in cexcept.h as required by the license. 2015-06-03 15:41:46 -05:00
John Bowler
7023d871e8 [libpng16] Fix g++ build breaks 2015-06-03 15:04:03 -05:00
John Bowler
2dfcf65981 [libpng16] Fixed NO_WRITE_FILTER and -Wconversion build breaks (John Bowler). 2015-06-03 14:58:18 -05:00
John Bowler
b780eba4e4 [libpng16] Fixed cexcept.h in which GCC 5 now reports that one of the auto
variables in the Try macro needs to be volatile to prevent value
being lost over the setjmp.
2015-06-03 14:46:34 -05:00
John Bowler
25bfb13770 [libpng16] Removed non-working progressive reader 'skip' function. This
function has apparently never been used. It was implemented
to support back-door modification of png_struct in libpng-1.4.x
but was apparently never tested (because it does nothing and cannot
do anything).
2015-06-03 14:31:08 -05:00
Glenn Randers-Pehrson
1a6841c99c [libpng16] Bump version to 1.6.18beta07 2015-06-01 09:33:33 -05:00
Glenn Randers-Pehrson
1d4f804bc1 [libpng16] Imported from libpng-1.6.18beta06.tar 2015-06-01 09:33:23 -05:00
Glenn Randers-Pehrson
89edbf8317 [libpng16] Removed WRITE_WEIGHTED_FILTERED code, to save a few kbytes of the
compiled library size. It never worked properly and as far as we can
tell, no one uses it. The png_set_filter_heuristics() and
png_set_filter_heuristics_fixed() APIs are retained but deprecated
and do nothing.
2015-05-31 22:40:36 -05:00
Glenn Randers-Pehrson
a008dd8344 [libpng16] Bump version to 1.6.18beta06 2015-05-31 10:20:22 -05:00
Glenn Randers-Pehrson
20a2f9b9be [libpng16] Imported from libpng-1.6.18beta05.tar 2015-05-31 10:20:13 -05:00
Glenn Randers-Pehrson
1088f4925f [libpng16] Fixed old cut&paste bug in the weighted filter selection code in
pngwutil.c, introduced in libpng-0.95, March 1997.
2015-05-30 22:58:54 -05:00
Glenn Randers-Pehrson
b66de48b3b [libpng16] Changed png_voidcast(), etc., to voidcast(), etc., in
contrib/tools/pngfix.c to avoid confusion with the libpng private macros.
2015-05-30 22:57:33 -05:00
Glenn Randers-Pehrson
e6877671f1 [libpng16] Backported filter selection code from libpng-1.7.0beta51, to combine
sub_row, up_row, avg_row, and paeth_row into try_row and tst_row.
2015-05-30 11:54:45 -05:00
Glenn Randers-Pehrson
9fbdce8fb5 [libpng16] Bump version to 1.6.18beta05 2015-05-29 11:35:15 -05:00
Glenn Randers-Pehrson
f6b9c993e1 [libpng16] Imported from libpng-1.6.18beta04.tar 2015-05-29 11:28:33 -05:00
Glenn Randers-Pehrson
d46b570919 [libpng16] Avoid a harmless potential integer overflow in png_XYZ_from_xy(). 2015-05-20 13:21:53 -05:00
Glenn Randers-Pehrson
918d23f658 [libpng16] Trivial editing of comments in png.c 2015-05-09 21:48:11 -05:00
Glenn Randers-Pehrson
d2fedd629d [libpng16] Avoid Coverity issue 80858 (REVERSE NULL) in pngtest.c
PNG_DEBUG builds.
2015-05-09 21:47:00 -05:00
Glenn Randers-Pehrson
2d069831fb [libpng16] Document PNG_RELEASE_BUILD in the man page. 2015-05-06 20:31:21 -05:00
John Bowler
8ee821e69a [libpng16] PNG_RELEASE_BUILD replaces tests where the code depended on the build base
type and can be defined on the command line, allowing testing in beta builds. Back
ported from libpng17.
2015-05-06 20:03:14 -05:00
Glenn Randers-Pehrson
279dc3f0bf [libpng16] Added some documentation about features of the Simplified Write API. 2015-05-06 17:02:47 -05:00
Glenn Randers-Pehrson
846357d592 [libpng16] Bump version to 1.6.18beta04 2015-05-06 16:39:42 -05:00
Glenn Randers-Pehrson
d8d18fbb02 [libpng16] Imported from libpng-1.6.18beta03.tar 2015-05-06 16:39:31 -05:00
John Bowler
74428df2fd [libpng16] Improved DIV65535 algorithm in simpleover.c. By experiment,
(x + (x>>16) + 32769) works as well as the previous form and avoids one shift.
2015-05-06 11:41:17 -05:00
Glenn Randers-Pehrson
d6b1375bf5 [libpng16] Trivial editing of comments in contrib/examples/simpleover.c 2015-05-04 20:25:31 -05:00
John Bowler
0f12df19a1 [libpng16] Added PNG generation tool, fixed unitialized pointer in
simpleover. Also added a comment to png.h pointing out that the pointer must
 be set to NULL!  (simpleover crashes with any slightly complex command lines
 without this fix.)
2015-05-04 19:58:41 -05:00
John Bowler
cde3078963 [libpng16] Added contrib/examples/simpleover.c, to demonstrate how to handle
alpha compositing of multiple images, using the "simplified API"
2015-05-02 19:53:40 -05:00
Glenn Randers-Pehrson
216ab04994 [libpng16] Updated comment in pngpriv.h about ARM support. 2015-04-29 11:30:35 -05:00
Glenn Randers-Pehrson
e0f0d05938 [libpng16] Replaced "unexpected" with an integer (0xabadca11) in pngset.c 2015-04-29 11:29:31 -05:00
Glenn Randers-Pehrson
23da29af91 [libpng16] Bump version to 1.6.18beta03 2015-04-26 16:38:18 -05:00
Glenn Randers-Pehrson
ecc391bbcf [libpng16] Imported from libpng-1.6.18beta02.tar 2015-04-26 16:38:10 -05:00
Glenn Randers-Pehrson
c861dc8923 [libpng16] Suppressed some warnings from the Borland C++ 5.5.1/5.82 compiler
(Bug report by Viktor Szaka'ts).
2015-04-01 12:06:01 -05:00
Glenn Randers-Pehrson
507a8cdc5e [libpng16] Bump version to 1.6.18beta02 2015-04-01 08:24:26 -05:00
Glenn Randers-Pehrson
bd85b5713c [libpng16] Imported from libpng-1.6.18beta01.tar 2015-04-01 08:24:14 -05:00
John Bowler
a21a5b22c1 [libpng16] Fixed rgb_to_gray checks and added tRNS checks to pngvalid.c 2015-03-30 21:38:31 -05:00
Glenn Randers-Pehrson
d344589703 [libpng16] Removed PNG_SET_CHUNK_[CACHE|MALLOC]_LIMIT_SUPPORTED macros. They
have been combined with PNG_SET_USER_LIMITS_SUPPORTED (resolves
bug report by Andrew Church).
2015-03-27 08:58:32 -05:00
Glenn Randers-Pehrson
218a6fe9e5 [libpng16] Bump version to 1.6.18beta01 2015-03-26 08:55:25 -05:00
Glenn Randers-Pehrson
c98f7fb4e3 [libpng16] Imported from libpng-1.6.17.tar 2015-03-26 08:11:12 -05:00
Glenn Randers-Pehrson
f17e6c3046 [libpng16] Imported from libpng-1.6.17rc06.tar 2015-03-22 19:43:23 -05:00
John Bowler
6eecfe3886 [libpng16] Fixed simplified 8-bit-linear to sRGB alpha. The calculated alpha
value was wrong.  It's not clear if this affected the final stored
value; in the obvious code path the upper and lower 8-bits of the
alpha value were identical and the alpha was truncated to 8-bits
rather than dividing by 257 (John Bowler).
2015-03-22 19:42:14 -05:00
Glenn Randers-Pehrson
b383798ac9 [libpng16] Add pnglibconf.dfn and pnglibconf.pre to scripts/pnglibconf.mak
"clean" target.
2015-03-21 15:53:44 -05:00
Glenn Randers-Pehrson
ea037b01eb [libpng16] Remove pnglibconf.dfn and pnglibconf.pre with "make clean". 2015-03-21 15:47:39 -05:00
Glenn Randers-Pehrson
04445235f1 [libpng16] Bump version to 1.6.17rc06 2015-03-21 12:11:10 -05:00
Glenn Randers-Pehrson
778ccbbafa [libpng16] Imported from libpng-1.6.17rc05.tar 2015-03-21 12:11:00 -05:00
Glenn Randers-Pehrson
c5370ede95 [libpng16] Reverted "& 0xff" additions of version 1.6.17beta01. Libpng passes
the Coverity scan without them.
2015-03-21 11:54:32 -05:00
John Bowler
2b66107abb [libpng16] Define PNG_FILTER_* and PNG_FILTER_VALUE_* in png.h even when WRITE
is not supported (John Bowler).  This fixes an error introduced in
libpng-1.6.17beta06.
2015-03-17 21:32:27 -05:00
Glenn Randers-Pehrson
0aabfe2a4c [libpng16] Bump version to 1.6.17rc05 2015-03-17 08:14:23 -05:00
Glenn Randers-Pehrson
16f9246853 [libpng16] Imported from libpng-1.6.17rc04.tar 2015-03-17 08:00:12 -05:00
John Bowler
c9fd075c89 [libpng16] Fix bug in calculation of maxbits, in png_write_sBIT, introduced
in libpng-1.6.17beta01 (John Bowler).
2015-03-16 16:31:13 -05:00
Cosmin Truta
47e1315459 [libpng16] Remove pnglibconf.h, pnglibconf.c, and pnglibconf.out instead of
pnglibconf.* in "make clean" (Cosmin).
2015-03-15 17:04:17 -05:00
Glenn Randers-Pehrson
49fa8d4cdd [libpng16] Bump version to 1.6.17rc04 2015-03-12 09:24:49 -05:00
Glenn Randers-Pehrson
a60de343a9 [libpng16] Imported from libpng-1.6.17rc03.tar 2015-03-12 06:49:06 -05:00
Glenn Randers-Pehrson
f2c37d0abf [libpng16] Updated CMakeLists.txt to add OSX framework, change YES/NO to ON/OFF
for consistency, and remove some useless tests (Alexey Petruchik).
2015-03-12 06:48:01 -05:00
Glenn Randers-Pehrson
bc27b2f432 [libpng16] Imported from libpng-1.6.17rc02.tar 2015-03-09 09:20:46 -05:00
Glenn Randers-Pehrson
3645008e22 [libpng16] Free the unknown_chunks structure even when it contains no data. 2015-03-09 09:13:58 -05:00
Glenn Randers-Pehrson
06ee532286 [libpng16] Reverted new test on unknown chunk location; it was bogus. 2015-03-08 08:00:45 -05:00
Glenn Randers-Pehrson
bbe2be3f54 [libpng16] Spelling fixes: less then N -> less than N (Lauri Nurmi) 2015-03-07 13:13:11 -06:00
Glenn Randers-Pehrson
bb098218ca [libpng16] Fixed some spelling (occur* -> occurr*), Bug report by Lauri Nurmi 2015-03-07 12:59:48 -06:00
Glenn Randers-Pehrson
217d38cdea [libpng16] Stopped a potential memory leak in png_set_unknown_chunks(). Breaks
tests/pngunknown-sAPI so it's temporarily marked SKIP.
2015-03-07 10:35:03 -06:00
Glenn Randers-Pehrson
377fb53944 [libpng16] Removed some comments that the configure script did not handle
properly from scripts/pnglibconf.dfa and pnglibconf.h.prebuilt.
2015-03-05 20:59:31 -06:00
Glenn Randers-Pehrson
7f85da8df7 [libpng16] Imported from libpng-1.6.17rc02.tar 2015-03-05 20:54:07 -06:00
Glenn Randers-Pehrson
3e0bef6da4 [libpng16] Imported from libpng-1.6.17rc01.tar 2015-03-04 11:19:32 -06:00
Glenn Randers-Pehrson
82511341d7 [libpng16] Bump version to 1.6.17beta07 2015-02-27 19:20:37 -06:00
Glenn Randers-Pehrson
4029db9aac [libpng16] Imported from libpng-1.6.17beta06.tar 2015-02-27 19:01:02 -06:00
Glenn Randers-Pehrson
7011a8cec3 [libpng16] Added "& 0xff" to things being typecast to "png_byte". 2015-02-27 18:53:44 -06:00
Sergey Kosarevsky
9a3de48b48 [libpng16] Avoid runtime checks when converting integer to png_byte with
Visual Studio (Sergey Kosarevsky)
2015-02-27 18:47:43 -06:00
Glenn Randers-Pehrson
494e75ac83 [libpng16] Fixed some typos in the pngfix usage message. 2015-02-26 10:39:13 -06:00
Glenn Randers-Pehrson
3f49c1e42a [libpng16] Bump version to 1.6.17beta06 2015-02-25 15:42:16 -06:00
Glenn Randers-Pehrson
68f4ea7423 [libpng16] Imported from libpng-1.6.17beta05.tar 2015-02-25 15:17:40 -06:00
Glenn Randers-Pehrson
c6b29ff896 [libpng16] Put #ifdef/#endif around png_set_compression_level in pngwrite.c 2015-02-22 19:39:17 -06:00
Glenn Randers-Pehrson
76f93293a0 [libpng16] Bump version to 1.6.17beta05 2015-02-21 12:49:38 -06:00
Glenn Randers-Pehrson
d375ca5e0d [libpng16] Imported from libpng-1.6.17beta04.tar 2015-02-21 12:49:25 -06:00
Glenn Randers-Pehrson
60a7506744 [libpng16]Allow calling png_get_IHDR() with NULL arguments (Reuben Hawkins). 2015-02-18 12:24:46 -06:00
Glenn Randers-Pehrson
d3ff44f0d5 [libpng16] Added PNG_WRITE_CUSTOMIZE_COMPRESSION_SUPPORTED macro, on by default. 2015-02-17 21:06:23 -06:00
Glenn Randers-Pehrson
43d90b1610 [libpng16] Bump version to 1.6.17beta04 2015-02-17 10:52:33 -06:00
Glenn Randers-Pehrson
de23a49231 [libpng16] Imported from libpng-1.6.17beta03.tar 2015-02-17 10:52:21 -06:00
Glenn Randers-Pehrson
4b65a89cf4 [libpng16] Eliminated PNG_SAFE_LIMITS macro and restored the 1-million-column
and 1-million-row default limits in pnglibconf.dfa, that can be reset
by the user at build time or run time.  This provides a more robust
defense against DOS and as-yet undiscovered overflows.

Display user limits in the output from pngtest.
2015-02-16 22:52:07 -06:00
Glenn Randers-Pehrson
471b38aa00 [libpng16] Bump version to 1.6.17beta03 2015-02-07 09:16:17 -06:00
Glenn Randers-Pehrson
b6c9ac6304 [libpng16] Imported from libpng-1.6.17beta02.tar 2015-02-07 09:07:09 -06:00
Glenn Randers-Pehrson
8cd78da8b3 [libpng16] Do not build png_product2() when it is unused.
Work around more Coverity-scan dead-code warnings.
2015-02-07 09:03:30 -06:00
Glenn Randers-Pehrson
8f0e2729dd [libpng16] Improved comments on some #ifdef lines. 2015-02-03 19:10:03 -06:00
Glenn Randers-Pehrson
c73d6219f2 [libpng16] Bump version to 1.6.17beta02 2015-01-28 19:20:51 -06:00
Glenn Randers-Pehrson
6ef579df50 [libpng16] Imported from libpng-1.6.17beta01.tar 2015-01-28 19:15:16 -06:00
Glenn Randers-Pehrson
bd76965879 [libpng16] Added #ifndef __COVERITY__ where needed in png.c, pngrutil.c and
pngset.c to avoid warnings about dead code.
2015-01-27 06:53:56 -06:00
Glenn Randers-Pehrson
7a015b92b2 [libpng16] Update "last changed" comment in pngset.c 2015-01-13 09:41:25 -06:00
Glenn Randers-Pehrson
2f56fe4071 [libpng16] Made the check for out-of-range values in png_set_tRNS() detect
values that are exactly 2^bit_depth, and work on 16-bit platforms.
2015-01-13 09:25:48 -06:00
Glenn Randers-Pehrson
9d6cab3b21 [libpng16] Updated recent CVE numbers in CHANGES file. 2015-01-10 19:18:17 -06:00
Glenn Randers-Pehrson
04affde6a1 [libpng16] Happy 2015, continued. 2014-12-31 19:03:08 -06:00
Glenn Randers-Pehrson
018b4fccb9 [libpng16] Happy New Year! Update copyright year. 2014-12-31 18:45:23 -06:00
Glenn Randers-Pehrson
bba3aa9533 [libpng16] Update "last changed" info in pngrtran.c 2014-12-29 16:36:50 -06:00
John Bowler
b6788ccaff [libpng16] Implement previously untested libpng transforms in pngvalid.c 2014-12-29 16:31:58 -06:00
John Bowler
cde8cd6b30 [libpng16] Fixed byte order in 2-byte filler, in png_do_read_filler(). 2014-12-29 16:24:33 -06:00
John Bowler
19ec55f40e [libpng16] Added testing of png_set_packing() to pngvalid.c 2014-12-27 19:10:04 -06:00
John Bowler
6a6eb354ff [libpng16] Removed user limits from pngfix. Also pass NULL pointers to
png_read_row to skip the unnecessary row de-interlace stuff.
2014-12-24 18:54:08 -06:00
Glenn Randers-Pehrson
6b5abbe58e [libpng16] Corrected the width limit calculation in png_check_IHDR(). 2014-12-23 14:33:02 -06:00
Glenn Randers-Pehrson
66c1ec5a26 [libpng16] Removed duplicate PNG_SAFE_LIMITS_SUPPORTED handling from pngconf.h 2014-12-23 14:18:36 -06:00
Glenn Randers-Pehrson
ecd074945c [libpng16] Bump version to 1.6.17beta01 2014-12-21 22:56:42 -06:00
Glenn Randers-Pehrson
88dd30b232 [libpng16] Imported from libpng-1.6.16.tar 2014-12-21 21:53:00 -06:00
Glenn Randers-Pehrson
10569a452f [libpng16] Imported from libpng-1.6.16rc03.tar 2014-12-21 17:12:39 -06:00
John Bowler
dc294204b6 [libpng16] Fixed an overflow in png_combine_row with very wide interlaced
images.
2014-12-21 17:11:33 -06:00
Glenn Randers-Pehrson
06ee38423b [libpng16] Imported from libpng-1.6.16rc02.tar 2014-12-21 13:54:45 -06:00
Glenn Randers-Pehrson
6d8c88177a [libpng16] Imported from libpng-1.6.16rc01.tar 2014-12-21 09:18:15 -06:00
Glenn Randers-Pehrson
f43b5e3709 [libpng16] Imported from libpng-1.6.16beta03.tar 2014-12-20 19:21:32 -06:00
John Bowler
a00ea0aeae [libpng16] Quiet a "comparison always true" warning in pngstest.c (John Bowler). 2014-12-16 19:18:06 -06:00
Glenn Randers-Pehrson
0659cddd21 [libpng16] Bump version to 1.6.16beta03 2014-12-14 19:42:05 -06:00
Glenn Randers-Pehrson
66d846b0cc [libpng16] Imported from libpng-1.6.16beta02.tar 2014-12-14 19:24:00 -06:00
John Bowler
d040886dc4 [libpng16] Revised handling of scripts/*.dfn; renamed them to scripts/*.c 2014-12-14 19:17:56 -06:00
Glenn Randers-Pehrson
91f9e0370d [libpng16] Bump version to 1.6.16beta02 2014-12-14 12:43:12 -06:00
Glenn Randers-Pehrson
86a7eef997 [libpng16] Imported from libpng-1.6.16beta01.tar 2014-12-14 12:38:35 -06:00
Bob Friesenhahn
530eec311d [libpng16] Revised Makefile.am and scripts/symbols.dfn to work with MinGW/MSYS 2014-12-14 12:37:12 -06:00
Glenn Randers-Pehrson
7c5d037032 [libpng16] Update arm/*.c to libpng coding style. 2014-11-29 17:04:35 -06:00
Glenn Randers-Pehrson
ee16fc4a6f [libpng16] Added ".align 2" to arm/filter_neon.S to support old GAS assemblers
that don't do alignment correctly.
2014-11-29 16:27:27 -06:00
Glenn Randers-Pehrson
2d24cbdd98 [libpng16] Bump version to 1.6.16beta01 2014-11-21 08:25:32 -06:00
Glenn Randers-Pehrson
e8ef689cb9 [libpng16] Imported from libpng-1.6.15.tar 2014-11-20 10:22:57 -06:00
Glenn Randers-Pehrson
aebb7585c9 [libpng16] Imported from libpng-1.6.15rc03.tar 2014-11-16 20:04:53 -06:00
Cosmin Truta
5b9ac20297 [libpng16] Added "-D_CRT_SECURE_NO_WARNINGS" to CFLAGS in
scripts/makefile.vcwin32.
Removed the obsolete $ARCH variable from scripts/makefile.darwin.
2014-11-16 19:37:42 -06:00
Glenn Randers-Pehrson
9c05216461 [libpng16] Fix typos in ANNOUNCE and CHANGES 2014-11-14 17:59:40 -06:00
Glenn Randers-Pehrson
d4965b4014 [libpng16] Imported from libpng-1.6.15rc02.tar 2014-11-14 09:51:59 -06:00
Cosmin Truta
b8eb945946 [libpng16] The macros passed in the command line to Borland make were ignored if
similarly-named macros were already defined in makefiles. This behavior
is different from POSIX make and other make programs.  Surround the
macro definitions with ifndef guards (Cosmin).
2014-11-14 09:47:54 -06:00
Glenn Randers-Pehrson
6df21524cd [libpng16] Imported from libpng-1.6.15rc01.tar 2014-11-13 06:47:08 -06:00
Glenn Randers-Pehrson
fa49aae286 [libpng16] Imported from libpng-1.6.15beta08.tar 2014-11-08 09:08:03 -06:00
Glenn Randers-Pehrson
05e11008c0 [libpng16] More "#endif" housecleaning, in *.h 2014-11-07 07:41:16 -06:00
Glenn Randers-Pehrson
40656e9855 [libpng16] Bump version to 1.6.15beta08 2014-11-07 06:45:39 -06:00
Glenn Randers-Pehrson
7cee075a32 [libpng16] Imported from libpng-1.6.15beta07.tar 2014-11-07 06:40:30 -06:00
Glenn Randers-Pehrson
985dc00f1f [libpng16] Fix typo in example.c 2014-11-06 23:17:35 -06:00
Glenn Randers-Pehrson
cda68df8c1 [libpng16] Changed "#endif /* PNG_FEATURE_SUPPORTED */" to "#endif /* FEATURE */" 2014-11-06 22:11:39 -06:00
Glenn Randers-Pehrson
70cb8f9a7e [libpng16] Removed #ifdef PNG_16BIT_SUPPORTED/#endif around png_product2(); it is
needed by png_reciprocal2().
Added #ifdef PNG_16BIT_SUPPORTED/#endif around png_log16bit() and
    png_do_swap().
2014-11-06 20:58:33 -06:00
Glenn Randers-Pehrson
674c3e5816 [libpng16] Bump version to 1.6.15beta07 2014-11-06 07:37:32 -06:00
Glenn Randers-Pehrson
61ea3eacb0 [libpng16] Reverted use png_get_libpng_ver(NULL) instead of PNG_LIBPNG_VER_STRING
in the manual, example.c, pngtest.c, and applications in the contrib directory.
It was incorrect advice.
2014-11-06 06:39:56 -06:00
Glenn Randers-Pehrson
8e7c35fc81 [libpng16] Bump version to 1.6.15beta06 2014-11-05 19:08:08 -06:00
Glenn Randers-Pehrson
234fe626af [libpng16] Imported from libpng-1.6.15beta05.tar 2014-11-05 19:07:58 -06:00
John Bowler
03df189954 [libpng16] Fixed array size calculations to avoid warnings. At various points
in the code the number of elements in an array is calculated using
sizeof.  This generates a compile time constant of type (size_t) which
is then typically assigned to an (unsigned int) or (int). Some versions
of GCC on 64-bit systems warn about the apparent narrowing, even though
the same compiler does apparently generate the correct, in-range,
numeric constant.  This adds appropriate, safe, casts to make the
warnings go away.
2014-11-05 17:19:36 -06:00
John Bowler
6f2c50e7fc [libpng16] Free all allocated memory in pngimage. The file buffer cache was left
allocated at the end of the program, harmless but it causes memory
leak reports from clang.
2014-11-05 17:11:59 -06:00
John Bowler
c9720568d0 [libpng16] Fixed GCC unsigned int->float warnings. Various versions of GCC
seem to generate warnings when an unsigned value is implicitly
converted to double. This is probably a GCC bug but this change
avoids the issue by explicitly converting to (int) where safe.
2014-11-05 17:06:27 -06:00
Glenn Randers-Pehrson
5be76ae252 [libpng16] use PNG_LIBPNG_VER_STRING[i] in png_user_version_check() 2014-11-05 15:02:45 -06:00
Glenn Randers-Pehrson
a2fe24d186 [libpng16] Simplified and future-proofed png_user_version_check(). 2014-11-05 12:00:32 -06:00
Glenn Randers-Pehrson
97dd654ba4 [libpng16] Avoid out-of-bounds memory access in png_user_version_check(). 2014-11-05 09:22:19 -06:00
Glenn Randers-Pehrson
f1b547a509 [libpng16] Use png_get_libpng_ver(NULL), not PNG_LIBPNG_VER_STRING 2014-11-04 23:33:46 -06:00
Glenn Randers-Pehrson
5efb1327df [libpng16] Bump version to 1.6.15beta05 2014-11-04 07:08:37 -06:00
Glenn Randers-Pehrson
b5113f4e70 [libpng16] Imported from libpng-1.6.15beta04.tar 2014-11-04 07:08:23 -06:00
John Bowler
445475a166 [libpng16] Removed new PNG_USE_ARM_NEON configuration flag and made a one-line
revision to configure.ac to support ARM on aarch64 instead (John Bowler).
2014-11-03 19:44:39 -06:00
Glenn Randers-Pehrson
2eb712e519 [libpng16] Bump version to 1.6.15beta04 2014-11-03 09:33:51 -06:00
Glenn Randers-Pehrson
736c8e8773 [libpng16] Imported from libpng-1.6.15beta03.tar 2014-11-03 09:33:44 -06:00
Glenn Randers-Pehrson
3278452323 [libpng16] Added PNG_USE_ARM_NEON configuration flag (Marcin Juszkiewicz). 2014-11-03 08:24:34 -06:00
Glenn Randers-Pehrson
bd3818eb1b [libpng16] Bump version to 1.6.15beta03 2014-11-01 18:59:15 -05:00
Glenn Randers-Pehrson
b75c3cc415 [libpng16] Imported from libpng-1.6.15beta02.tar 2014-11-01 18:59:08 -05:00
Glenn Randers-Pehrson
b963feeec6 [libpng16] More cosmetic changes 2014-11-01 13:18:36 -05:00
Glenn Randers-Pehrson
f2d4167fee [libpng16] Added a pair of parentheses suggested by clang 2014-10-31 21:17:11 -05:00
Glenn Randers-Pehrson
5d713fe123 [libpng16] Changed remaining "if (!x)" to "if (x == 0)" and "if (x)" to
"if (x !== 0)"
2014-10-31 20:58:40 -05:00
Glenn Randers-Pehrson
6b9a20e7f9 [libpng16] Bump version to 1.6.15beta02 2014-10-29 09:13:06 -05:00
Glenn Randers-Pehrson
11d4a2a451 [libpng16] Imported from libpng-1.6.15beta01.tar 2014-10-29 09:08:46 -05:00
Glenn Randers-Pehrson
c6a8cb7d10 [libpng16] Added missing "ptr = NULL" after some instances of png_free(). 2014-10-29 08:27:34 -05:00
Glenn Randers-Pehrson
7f6826368a [libpng16] Use %p instead of %x to print pointers in pngtest debug output 2014-10-28 10:22:37 -05:00
Glenn Randers-Pehrson
bf95fad5f5 [libpng16] Simplified png_free_data() in png.c 2014-10-26 21:09:03 -05:00
Glenn Randers-Pehrson
ebba0746bc [libpng16] Changed "if (!x)" to "if (x == 0)" and "if (x)" to "if (x !== 0)" 2014-10-25 12:22:39 -05:00
Glenn Randers-Pehrson
67152e75e6 [libpng16] Revised INSTALL document. 2014-10-24 22:29:51 -05:00
Glenn Randers-Pehrson
4aa3f403f1 [libpng16] Updated INSTALL file. 2014-10-24 21:45:38 -05:00
Glenn Randers-Pehrson
56e9307d8f [libpng16] Bump version to 1.6.15beta01 2014-10-22 21:02:27 -05:00
Glenn Randers-Pehrson
edb772fd6d [libpng16] Imported from libpng-1.6.14.tar 2014-10-22 19:32:52 -05:00
Glenn Randers-Pehrson
e557fd7c44 [libpng16] Minor editing of README 2014-10-17 09:31:48 -05:00
Glenn Randers-Pehrson
8ba743d8d2 [libpng16] Bump version to 1.6.14rc03 2014-10-17 09:15:50 -05:00
Glenn Randers-Pehrson
279205664f [libpng16] Imported from libpng-1.6.14rc02.tar 2014-10-17 09:09:54 -05:00
Glenn Randers-Pehrson
f7a7bb0384 [libpng16] Changed png_convert_to_rfc_1123() to png_convert_to_rfc_1123_buffer()
in the manual, to reflect the change made in libpng-1.6.0.
Updated README file to reflect that direct access to the info struct and
png struct are not permitted since libpng-1.5.0.
2014-10-17 09:06:25 -05:00
Glenn Randers-Pehrson
3922544139 [libpng16] Bump version to 1.6.14rc01 2014-10-15 08:55:59 -05:00
Glenn Randers-Pehrson
bea9784db0 [libpng16] Imported from libpng-1.6.14rc01.tar 2014-10-15 08:36:22 -05:00
Glenn Randers-Pehrson
6cae24c265 [libpng16] Fixed some typos in comments. 2014-10-13 11:11:21 -05:00
Glenn Randers-Pehrson
06ec570881 [libpng16] Bump version to 1.6.14beta08 2014-10-07 18:57:36 -05:00
Glenn Randers-Pehrson
25d240dc6e [libpng16] Imported from libpng-1.6.14beta07.tar 2014-10-07 18:57:21 -05:00
Glenn Randers-Pehrson
470d64c2dd [libpng16] Also don't mark text as written in the end_ptr until written. 2014-10-05 18:08:39 -05:00
Glenn Randers-Pehrson
d7eff5d864 [libpng16] Removed "option WRITE_COMPRESSED_TEXT enables WRITE_TEXT"
from pnglibconf.dfa
2014-10-05 13:46:58 -05:00
Glenn Randers-Pehrson
a11cd84160 [libpng16] Only mark text chunks as written after successfully writing them. 2014-10-05 13:45:38 -05:00
Glenn Randers-Pehrson
f56c00f050 [libpng16] Bump version to 1.6.14beta07 2014-10-05 07:48:53 -05:00
Glenn Randers-Pehrson
f1a22bf9b3 [libpng16] Imported from libpng-1.6.14beta06.tar 2014-10-05 07:48:44 -05:00
Glenn Randers-Pehrson
a4fa1c57f4 [libpng16] Added "chunk iTXt enables TEXT" and "chunk zTXt enables TEXT"
to pnglibconf.dfa.
2014-10-04 12:38:47 -05:00
Glenn Randers-Pehrson
27f0332cae [libpng16] Replaced repeated code with PNG_PUSH_SAVE_BUFFER_IF_FULL
in pngpread.c
2014-10-04 10:28:58 -05:00
Glenn Randers-Pehrson
9127138a30 [libpng16] Fix typos in comments in pngset.c and pngtrans.c 2014-10-03 20:23:31 -05:00
Glenn Randers-Pehrson
ca9c3a601b [libpng16] Edited comments in png.c 2014-10-03 18:08:34 -05:00
Glenn Randers-Pehrson
91e3a7d735 [libpng16] Edited some comments in pngwutil.c 2014-10-03 17:33:14 -05:00
Glenn Randers-Pehrson
cb4823d91f [libpng16] Conditionally compile some code in png_deflate_claim(), when
PNG_WARNINGS_SUPPORTED and PNG_ERROR_TEXT_SUPPORTED are disabled.
2014-10-03 17:14:39 -05:00
Glenn Randers-Pehrson
d752225d05 [libpng16] Removed "text_len" parameter from private function png_write_zTXt()
since it is unused.
2014-10-03 17:11:50 -05:00
Glenn Randers-Pehrson
f1eacc08e6 [libpng16] Bump version to 1.6.14beta06 2014-10-01 10:46:37 -05:00
Glenn Randers-Pehrson
6147fae405 [libpng16] Imported from libpng-1.6.14beta05.tar 2014-10-01 10:46:29 -05:00
Glenn Randers-Pehrson
c5dc456afd [libpng16] Redid recent changes to pnglibconf.h that were reverted. 2014-10-01 10:29:26 -05:00
Glenn Randers-Pehrson
f633a4eb9c [libpng16] Added "option READ_iCCP enables READ_COMPRESSED_TEXT" to
pnglibconf.dfa
2014-10-01 10:03:57 -05:00
Glenn Randers-Pehrson
6c48f77bba [libpng16] Merge pnglibconf.dfa with libpng-1.7.0beta37. 2014-09-28 13:43:28 -05:00
Glenn Randers-Pehrson
4c0ded3c4e [libpng16] Bump version to 1.6.14beta05 2014-09-27 10:39:12 -05:00
Glenn Randers-Pehrson
36b246a571 [libpng16] Imported from libpng-1.6.14beta04.tar 2014-09-27 10:28:57 -05:00
Glenn Randers-Pehrson
48e6fad71c [libpng16] Fixed incorrect handling of the iTXt compression flag
in pngrutil.c (bug report by Shunsaku Hirata).  Bug was introduced
in libpng-1.6.0.
2014-09-27 09:37:50 -05:00
Glenn Randers-Pehrson
1b3a9fd6bf [libpng16] Avoid defining simplified API macros in png.h when neither the
READ nor the WRITE simplified API is supported.
2014-09-20 11:01:20 -05:00
Glenn Randers-Pehrson
b4ef94559d [libpng16] Bump version to 1.6.14beta04 2014-09-19 07:58:07 -05:00
Glenn Randers-Pehrson
af557d98e1 [libpng16] Imported from libpng-1.6.14beta03.tar 2014-09-19 07:58:00 -05:00
Glenn Randers-Pehrson
551019baf6 [libpng16] Revert recent pngvalid.c changes and define FE_DIVBYZERO, etc.,
if not already defined.
2014-09-18 16:41:40 -05:00
Glenn Randers-Pehrson
77145bf678 [libpng16] Bump version to 1.6.14beta03 2014-09-18 09:56:47 -05:00
Glenn Randers-Pehrson
91685564d1 [libpng16] Imported from libpng-1.6.14beta02.tar 2014-09-18 09:56:39 -05:00
Glenn Randers-Pehrson
44bda93154 [libpng16] Updated INSTALL info about pnglibconf.h 2014-09-18 09:27:29 -05:00
Glenn Randers-Pehrson
baa95a2d49 [libpng16] Do not include <fenv.h> when FLOATING_ARITHMETIC is not supported. 2014-09-18 09:23:45 -05:00
Glenn Randers-Pehrson
996046aed5 [libpng16] Use nanosleep() instead of usleep() in contrib/gregbook/rpng2-x.c
because usleep() is deprecated.
2014-09-14 16:34:09 -05:00
Glenn Randers-Pehrson
e4489f1db2 [libpng16] Only define usleep() in gregbook/rpng2-x.c if not already defined. 2014-09-14 15:06:00 -05:00
Glenn Randers-Pehrson
3fe1616c45 [libpng16] Bump version to 1.6.14beta02 2014-09-14 14:23:40 -05:00
Glenn Randers-Pehrson
0df3198719 [libpng16] Imported from libpng-1.6.14beta01.tar 2014-09-14 14:23:32 -05:00
Glenn Randers-Pehrson
3a05d2df0f [libpng16] Add "#include <setjmp.h>" to contrib/tools/pngfix.c (John Bowler) 2014-09-11 07:39:24 -05:00
Glenn Randers-Pehrson
de5e34f3ce [libpng16] Add #include <setjmp.h> to contrib/tools/pngfix.c to allow "make" to
complete without setjmp support (bug report by Claudio Fontana)
2014-09-10 21:34:34 -05:00
Glenn Randers-Pehrson
0a3c788b51 [libpng16] Don't build contrib/tools/pngfix.c without setjmp support. 2014-09-10 17:27:53 -05:00
Glenn Randers-Pehrson
664bd637b5 [libpng16] Fixed some indentation in pngrutil.c 2014-08-26 19:55:58 -05:00
Glenn Randers-Pehrson
3669467347 [libpng16] Guard usage of png_ptr->options with #ifdef PNG_SET_OPTION_SUPPORTED. 2014-08-22 08:55:50 -05:00
Glenn Randers-Pehrson
bcd3209a42 [libpng16] Update last-changed date 2014-08-21 09:57:23 -05:00
Glenn Randers-Pehrson
17fba0f7d1 [libpng16] Bump version to 1.6.14beta01 2014-08-21 09:16:02 -05:00
Glenn Randers-Pehrson
259fb7761d [libpng16] Imported from libpng-1.6.13.tar 2014-08-21 05:57:43 -05:00
Glenn Randers-Pehrson
3ac41798c3 [libpng16] Bump version to 1.6.13rc02 2014-08-13 22:08:10 -05:00
Glenn Randers-Pehrson
26a94ab06f [libpng16] Imported from libpng-1.6.13rc01.tar 2014-08-13 22:08:01 -05:00
Glenn Randers-Pehrson
83fb26e38d [libpng16] Bump version to 1.6.13beta05 2014-08-07 20:00:00 -05:00
Glenn Randers-Pehrson
9782cced3a [libpng16] Imported from libpng-1.6.13beta04.tar 2014-08-07 19:54:10 -05:00
Glenn Randers-Pehrson
ff649a0710 [libpng16] Eliminated use of "$<" when copying $PNGLIBCONF_H_PREBUILT in
makefiles. This does not work on some versions of make; bug introduced in
libpng version 1.6.11.
2014-08-07 19:51:35 -05:00
Glenn Randers-Pehrson
389e5cbabf [libpng16] Removed mention of makefile.elf from scripts/README.txt 2014-08-03 19:53:45 -05:00
Glenn Randers-Pehrson
72e25f9583 [libpng16] Bump version to 1.6.13beta04 2014-08-02 21:32:49 -05:00
Glenn Randers-Pehrson
a243ec06b0 [libpng16] Imported from libpng-1.6.13beta03.tar 2014-08-02 21:28:14 -05:00
Glenn Randers-Pehrson
37c3b082a7 [libpng16] Ensure that CMakeLists.txt makes the target "lib" directory before
making symbolic link into it (SourceForge bug report #226 by Rolf Timmermans).
2014-07-30 08:15:26 -05:00
Glenn Randers-Pehrson
5e6931e10a [libpng16] Removed makefile.elf; it has not worked since libpng-1.5.0beta14. 2014-07-29 07:43:13 -05:00
Glenn Randers-Pehrson
0ece631b37 [libpng16] Bump version to 1.6.13beta03 2014-07-21 17:21:30 -05:00
Glenn Randers-Pehrson
3efbecab92 [libpng16] Imported from libpng-1.6.13beta02.tar 2014-07-21 17:21:21 -05:00
Glenn Randers-Pehrson
ae991771ad [libpng16] Updated a comment in revised makefiles. 2014-07-21 11:52:27 -05:00
Glenn Randers-Pehrson
071a17f194 [libpng16] Fixed an incorrect separator ("/" should be "\") in
scripts/makefile.vcwin32 (bug report from Wolfgang S. Kechel).  Bug was
introduced in libpng-1.6.11.  Also fixed makefile.bc32, makefile.bor,
makefile.msc, makefile.intel, and makefile.tc3 similarly.
2014-07-21 11:31:50 -05:00
Glenn Randers-Pehrson
398b00734c [libpng16] Bump version to 1.6.13beta02 2014-07-04 12:32:40 -05:00
Glenn Randers-Pehrson
8661906769 [libpng16] Fix typo in INSTALL. 2014-07-04 12:31:43 -05:00
Glenn Randers-Pehrson
91319c67d5 [libpng16] Imported from libpng-1.6.13beta01.tar 2014-07-04 12:13:59 -05:00
John Bowler
c45f1223cb [libpng16] Fixed misplaced brackets in earlier patch to pngpriv.h 2014-06-24 19:42:03 -05:00
John Bowler
910aaadddb [libpng16] Fixed clang no-warning builds: png_digit was defined but never used. 2014-06-24 19:38:41 -05:00
Glenn Randers-Pehrson
fc932f7b03 [libpng16] Changed "if defined(__ARM_NEON__)" to
"if defined(__ARM_NEON__) || defined(__ARM_NEON)" (James Wu).
2014-06-24 13:07:39 -05:00
John Bowler
83ae6fc266 [libpng16] Added "PNG_SET_OPTION" requirement for sRGB chunk support to
pnglibconf.dfa, needed for write-only support (John Bowler).
2014-06-22 11:23:07 -05:00
Glenn Randers-Pehrson
33ebeec0b5 [libpng16] Split a long output string in contrib/gregbook/rpng2-x.c. 2014-06-13 15:34:36 -05:00
Glenn Randers-Pehrson
225af8f363 [libpng16] Removed "PNG_UNUSED()" inadvertently left in contrib/gregbook
/readpng2.c from the previous update.
2014-06-13 12:55:43 -05:00
Glenn Randers-Pehrson
151eb95305 [libpng16] Added "(void) png_ptr;" where needed in contrib/gregbook to quiet
compiler complaints about unused pointers.
2014-06-13 12:04:54 -05:00
Glenn Randers-Pehrson
f36a94207c [libpng16] Quieted -Wsign-compare and -Wclobber compiler warnings in
contrib/pngminus/*.c
2014-06-13 11:06:33 -05:00
Glenn Randers-Pehrson
212fd5745d [libpng16] Bump version to 1.6.13beta01 2014-06-11 21:13:33 -05:00
Glenn Randers-Pehrson
e429c66cea [libpng16] Imported from libpng-1.6.12.tar 2014-06-11 20:41:51 -05:00
Glenn Randers-Pehrson
1a4c0144da [libpng16] Bump version to 1.6.12rc04 2014-06-08 12:10:04 -05:00
Glenn Randers-Pehrson
db1a0e763f [libpng16] Imported from libpng-1.6.12rc03.tar 2014-06-07 22:46:46 -05:00
Glenn Randers-Pehrson
41694dcaea [libpng16] Ensure "__has_attribute()" macro exists before trying to use it with
old clang compilers (MacPorts Ticket #43939).
2014-06-07 22:27:44 -05:00
Glenn Randers-Pehrson
ff3fb08157 [libpng16] Imported from libpng-1.6.12rc02.tar 2014-06-07 14:49:03 -05:00
Glenn Randers-Pehrson
79b7e4e621 [libpng16] Changed file permissions of contrib/tools/intgamma.sh from
0644 to 0755 (Cosmin).
2014-06-07 14:47:02 -05:00
Glenn Randers-Pehrson
b41a37d403 [libpng16] Imported from libpng-1.6.12rc01.tar 2014-06-06 18:31:35 -05:00
Glenn Randers-Pehrson
b7afba6a0b [libpng16] Relocated new code from 1.6.11beta06 in png.c to a point after the
declarations (Max Stepin).
2014-06-06 12:07:07 -05:00
Glenn Randers-Pehrson
da7b692ce0 [libpng16] Bump version to 1.6.12beta01 2014-06-06 11:57:30 -05:00
Glenn Randers-Pehrson
c4e0f3de64 [libpng16] Imported from libpng-1.6.11.tar 2014-06-05 10:00:45 -05:00
Glenn Randers-Pehrson
ee6050ecb4 [libpng16] Imported from libpng-1.6.11rc02.tar 2014-06-03 22:02:34 -05:00
Glenn Randers-Pehrson
165f072144 [libpng16] Imported from libpng-1.6.11rc01.tar 2014-05-27 11:15:53 -05:00
Glenn Randers-Pehrson
7acfe50855 [libpng16] Bump version to 1.6.11beta07 2014-05-19 21:20:05 -05:00
Glenn Randers-Pehrson
5808e7b8c8 [libpng16] Imported from libpng-1.6.11beta06.tar 2014-05-19 21:11:36 -05:00
Glenn Randers-Pehrson
f85092bc7b [libpng16] Fix cut-and-paste error in scripts/symbols.dfn, from 1.6.11beta02. 2014-05-19 21:08:49 -05:00
Glenn Randers-Pehrson
d1c5f48c05 [libpng16] Minor update to documentation and CHANGES/ANNOUNCE files. 2014-05-09 21:06:27 -05:00
Glenn Randers-Pehrson
e95ce2c517 [libpng16] Added PNG_SKIP_sRGB_CHECK_PROFILE choice for png_set_option(). 2014-05-07 12:07:12 -05:00
Glenn Randers-Pehrson
0d5ac5d809 [libpng16] Bump version to 1.6.11beta06 2014-04-26 06:41:54 -05:00
Glenn Randers-Pehrson
f30aa7ed92 [libpng16] Imported from libpng-1.6.11beta05.tar 2014-04-26 06:36:40 -05:00
Glenn Randers-Pehrson
ab9736a647 [libpng16] Allow writing ICC V2 profiles that lack padding (Kai-Uwe Behrmann). 2014-04-25 06:14:50 -05:00
Glenn Randers-Pehrson
5a1d1b5369 [libpng16] Do not reject ICC V2 profiles that lack padding (Kai-Uwe Behrmann). 2014-04-24 15:54:28 -05:00
Glenn Randers-Pehrson
d5201df56b [libpng16] Bump version to 1.6.11beta05 2014-04-20 20:23:13 -05:00
Glenn Randers-Pehrson
be19c07dd9 [libpng16] Imported from libpng-1.6.11beta04.tar 2014-04-20 20:15:26 -05:00
Glenn Randers-Pehrson
0ace9f589f [libpng16] PNG_sRGB_PROFILE_CHECKING = (-1) now means no sRGB profile checking. 2014-04-20 20:06:14 -05:00
Glenn Randers-Pehrson
72855fb11e [libpng16] Made progressive reading of interlaced images consistent with the
behavior of the sequential reader and consistent with the manual. The
row_callback now receives the proper pass number and unexpanded rows,
when png_combine_row is not used or not built, by moving some code
out of the PNG_READ_INTERLACING_SUPPORTED blocks.
2014-04-13 21:27:25 -05:00
Glenn Randers-Pehrson
9f1aa186e6 [libpng16] Added two CVE numbers to the January 2013 entry in the CHANGES file. 2014-04-10 16:46:35 -05:00
Glenn Randers-Pehrson
7a0ca967b4 [libpng16] Bump version to 1.6.11beta04 2014-04-06 14:18:13 -05:00
Glenn Randers-Pehrson
478062d9b5 [libpng16] Imported from libpng-1.6.11beta03.tar 2014-04-06 14:17:58 -05:00
Glenn Randers-Pehrson
86b8016ee9 [libpng16] Fix some permissions 2014-04-06 12:01:51 -05:00
Glenn Randers-Pehrson
f169806b7b [libpng16] Bump version to 1.6.11beta03 2014-04-06 10:20:44 -05:00
Glenn Randers-Pehrson
c4b3718856 [libpng16] Imported from libpng-1.6.11beta02.tar 2014-04-06 09:07:56 -05:00
Glenn Randers-Pehrson
fa26eb1678 [libpng16] Fixed a typo in pngrutil.c, introduced in libpng-1.5.6, that
interferes with "blocky" expansion of sub-8-bit interlaced PNG files.
2014-04-06 09:06:37 -05:00
Glenn Randers-Pehrson
d17313e075 [libpng16] Bump version to 1.6.11beta03 2014-03-25 17:10:53 -05:00
Glenn Randers-Pehrson
6b570f11e1 [libpng16] Imported from libpng-1.6.11beta02.tar 2014-03-25 17:10:44 -05:00
Glenn Randers-Pehrson
804c76b47b [libpng16] Fixed syntax of Copy command in makefile.amiga 2014-03-22 18:44:24 -05:00
Glenn Randers-Pehrson
247d262d3a [libpng16] Complete the update of scripts/makefile.ne12bsd 2014-03-22 13:40:25 -05:00
Cosmin Truta
9ab7b4ca58 [libpng16] Allow an easy replacement of the default pre-built configuration
header with a custom header, via the make PNGLIBCONF_H_PREBUILT
macro.
2014-03-22 13:13:11 -05:00
Cosmin Truta
ae6eaa89e5 [libpng16] Don't warn about invalid dimensions exceeding user limits. 2014-03-22 09:39:33 -05:00
Cosmin Truta
82200daec2 [libpng16] $(CP) is now used alongside $(RM_F). Also, use 'copy' instead
of 'cp' where applicable, and applied other minor makefile changes.
2014-03-22 09:29:59 -05:00
Cosmin Truta
6572c7dab5 [libpng16] Silence 'unused parameter' build warnings (Cosmin). 2014-03-22 09:20:53 -05:00
Glenn Randers-Pehrson
372cad05a9 [libpng16] Committed wrong version of INSTALL. 2014-03-21 13:26:43 -05:00
Glenn Randers-Pehrson
010222c55d [libpng16] Mention scripts/pnglibconf.h.prebuilt in INSTALL. 2014-03-21 12:53:06 -05:00
Glenn Randers-Pehrson
d74d82137b [libpng16] Cosmetic revision of previous change 2014-03-17 15:35:28 -05:00
Glenn Randers-Pehrson
a518abd582 [libpng16] Removed #if/#else/#endif from inside two pow() calls in pngvalid.c
because they were handled improperly by Portland Group's PGI-14.1 - PGI-14.3
when using its "__builtin_pow()" function.
2014-03-17 15:29:25 -05:00
Glenn Randers-Pehrson
23646318e4 [libpng16] Bump version to 1.6.11beta02 2014-03-17 13:21:33 -05:00
Glenn Randers-Pehrson
149eea29b6 [libpng16] Imported from libpng-1.6.11beta01.tar 2014-03-17 13:19:41 -05:00
Glenn Randers-Pehrson
2ca2a0b222 [libpng16] Move more parts of INSTALL to libpng-manual.txt and vice versa. 2014-03-16 21:47:52 -05:00
Glenn Randers-Pehrson
7017c4078d [libpng16] Revised INSTALL and libpng-manual.txt 2014-03-16 20:29:11 -05:00
Glenn Randers-Pehrson
c2a15d01af [libpng16] Moved part of INSTALL back to manual; added table of contents. 2014-03-16 19:53:29 -05:00
Glenn Randers-Pehrson
0464b436b6 [libpng16] Added information about configuring for multiprocessing to INSTALL. 2014-03-16 19:31:09 -05:00
Glenn Randers-Pehrson
2f5fb84cc4 [libpng16] Updated the manual and moved part of it to the INSTALL file. 2014-03-16 15:30:35 -05:00
Glenn Randers-Pehrson
33e2bd910f [libpng16] Changed ZlibSrcDir from 1.2.5 to 1.2.8 in projects/vstudio. 2014-03-09 18:37:06 -05:00
Glenn Randers-Pehrson
05670156f3 [libpng16] Use "if (value != 0)" instead of "if (value)" consistently. 2014-03-08 12:39:52 -06:00
Glenn Randers-Pehrson
b65b3412b1 [libpng16] Remove CALLOC from pnglibconf.dfa and pnglibconf.h.prebuilt 2014-03-07 12:19:41 -06:00
Glenn Randers-Pehrson
71d23c4d6e [libpng16] Bump version to 1.6.11beta01 2014-03-06 21:09:24 -06:00
Glenn Randers-Pehrson
4df37bfa4f [libpng16] Imported from libpng-1.6.10.tar 2014-03-06 12:49:17 -06:00
Glenn Randers-Pehrson
c978642c48 [libng16] Mention prototype format in the documentation (libpng style guide) 2014-03-05 17:14:16 -06:00
Glenn Randers-Pehrson
24afd07ab9 [libpng16] Changed blank to newline in three function declarations. 2014-03-05 16:55:19 -06:00
Glenn Randers-Pehrson
c540d8bed7 [libpng16] Bump version to 1.6.10rc04 2014-03-03 20:26:56 -06:00
Glenn Randers-Pehrson
3e5d04df37 [libpng16] Imported from libpng-1.6.10rc03.tar 2014-03-03 20:26:46 -06:00
Glenn Randers-Pehrson
6e8ba0fab6 [libpng16] Un-deprecated png_data_freer(). 2014-03-03 20:17:01 -06:00
Glenn Randers-Pehrson
b3a765066f [libpng16] Updated CHANGES and ANNOUNCE to libpng-1.6.10rc02. 2014-02-27 22:48:08 -06:00
Glenn Randers-Pehrson
4c7bb07857 [libpng16] Imported from libpng-1.6.10rc02.tar 2014-02-27 22:24:47 -06:00
Glenn Randers-Pehrson
b8f433417f [libpng16] Removed unreachable return statement after png_chunk_error()
in pngrutil.c
2014-02-27 12:12:54 -06:00
Glenn Randers-Pehrson
53c60fa94b [libpng16] Bump version to 1.6.10rc01 2014-02-27 08:37:51 -06:00
Glenn Randers-Pehrson
ab56b743c1 [libpng16] Imported from libpng-1.6.10rc01.tar 2014-02-27 08:06:45 -06:00
Glenn Randers-Pehrson
3455238a4e [libpng16] Fixed typos in the manual and in scripts/pnglibconf.dfa (CFLAGS
-> CPPFLAGS and PNG_USR_CONFIG -> PNG_USER_CONFIG).
2014-02-26 22:08:58 -06:00
Glenn Randers-Pehrson
9f0ac8548b [libpng16] Mention CERT VU#684412 and CVE-2014-0333 in CHANGES and ANNOUNCE. 2014-02-25 12:00:58 -06:00
Glenn Randers-Pehrson
2fff8078dc [libpng16] Bump version to 1.6.10beta04 2014-02-24 21:02:54 -06:00
Glenn Randers-Pehrson
da7027b6b0 [libpng16] Imported from libpng-1.6.10beta03.tar 2014-02-24 19:11:18 -06:00
Glenn Randers-Pehrson
9e06534572 [libpng16] Removed some commentary from png.h that is now in the manual. 2014-02-24 19:07:04 -06:00
Glenn Randers-Pehrson
be040c98f8 [libpng16] Moved some documentation from png.h to libpng.3 and libpng-manual.txt
and minor editing of contrib/arm-neon/README and contrib/examples/*.c
2014-02-24 18:48:03 -06:00
Glenn Randers-Pehrson
bd792c020f [libpng16] Document how to use a different crc_action while reading chunks
after IDAT with the sequential reader.
2014-02-23 13:43:20 -06:00
Glenn Randers-Pehrson
079a724833 [libpng16] Fixed some nits in contrib/arm-neon/README and comments in
contrib/examples/*.c
2014-02-23 10:59:27 -06:00
Glenn Randers-Pehrson
1301356273 [libpng16] Bump version to 1.6.10beta03 2014-02-22 23:20:23 -06:00
Glenn Randers-Pehrson
78c28fea51 [libpng16] Imported from libpng-1.6.10beta02.tar 2014-02-22 23:12:02 -06:00
Glenn Randers-Pehrson
45625eceb4 [libpng16] Don't recognize known sRGB profiles as sRGB if they have been hacked,
but don't reject them and don't issue a copyright violation warning.
Simplified code in pngrutil.c that decides whether to warn about an
incorrect ancillary PLTE chunk.
2014-02-22 23:09:27 -06:00
Glenn Randers-Pehrson
e3ae583514 [libpng16] Don't recognize known sRGB profiles as sRGB if they have been hacked. 2014-02-22 22:22:15 -06:00
Glenn Randers-Pehrson
eb657ae68f [libpng16] Added png_ptr->process_mode = PNG_READ_IDAT_MODE in
png_push_read_chunk after recognizing the IDAT chunk, which avoids an
infinite loop while reading a datastream whose first IDAT chunk is of
zero-length.
2014-02-22 21:59:40 -06:00
Glenn Randers-Pehrson
f5df058bee [libpng16] Use a user warning handler in contrib/gregbook/readpng2.c
instead of the default.
2014-02-22 07:15:48 -06:00
Glenn Randers-Pehrson
dd6679dce8 [libpng16] Check for __has_extension before using it in pngconf.h, to
support older Clang versions (Jeremy Sequoia).
2014-02-20 07:06:59 -06:00
Glenn Randers-Pehrson
9c5a1baea5 [libpng16] Check for info_ptr == NULL early in png_read_end() so we don't need
to run all the png_handle_*() and depend on them to return if info_ptr == NULL.
This improves the performance of png_read_end(png_ptr, NULL) and makes
it more robust against future programming errors.
2014-02-17 09:12:52 -06:00
John Bowler
37b7299b60 [libpng16] Deleted a now-redundant #define png_error from pngvalid.c 2014-02-16 22:55:41 -06:00
John Bowler
0b61d10ad4 [libpng16] Fixed /proc/cpuinfo ARM NEON __linux__ parsing 2014-02-16 14:07:49 -06:00
John Bowler
dba54b8888 [libpng16] Moved OS dependent code from arm/arm_init.c, to allow the included
implementation of the ARM NEON discovery function to be set at
build-time and provide sample implementations from the current code in the
contrib/arm-neon subdirectory. The __linux__ code has also been changed to
compile and link on Android by using /proc/cpuinfo, and the old linux code
is in contrib/arm-neon/linux-auxv.c.  The new code avoids POSIX and Linux
dependencies apart from opening /proc/cpuinfo and is C90 compliant.
2014-02-16 14:00:06 -06:00
Glenn Randers-Pehrson
38ef9c9779 [libpng16] Removed unneeded "#define PNG_NO_WARNINGS" from contrib/pngminim/* 2014-02-16 13:56:10 -06:00
Glenn Randers-Pehrson
103b04170d [libpng16] Moved redefines of png_error(), png_warning(), png_chunk_error(),
and png_chunk_warning() from pngpriv.h to png.h to make them visible
to libpng-calling applications.
2014-02-16 08:34:41 -06:00
Glenn Randers-Pehrson
e40e37018d [libpng16] Bump version to 1.6.10beta02 2014-02-09 13:14:20 -06:00
Glenn Randers-Pehrson
9eec159ab0 [libpng16] Imported from libpng-1.6.10beta01.tar 2014-02-09 13:00:23 -06:00
John Bowler
414d7b5f7d [libpng16] Backport recent changes from libpng-1.7.0beta30 and beta31. 2014-02-06 11:39:25 -06:00
Glenn Randers-Pehrson
685dff485e [libpng16] Update ANNOUNCE file about new location of gpg signatures. 2014-02-06 11:01:55 -06:00
Glenn Randers-Pehrson
8a227ff25a [libpng16] Bump version to 1.6.10beta01 2014-02-05 23:51:39 -06:00
Glenn Randers-Pehrson
3e753eb8b2 [libpng16] Imported from libpng-1.6.9.tar 2014-02-05 22:33:56 -06:00
Glenn Randers-Pehrson
759c903686 [libpng16] Update documentation about sCAL support. 2014-02-01 20:11:48 -06:00
Glenn Randers-Pehrson
8c12078e95 [libpng16] Imported from libpng-1.6.9rc02.tar 2014-01-30 15:04:10 -06:00
Glenn Randers-Pehrson
b91528db20 [libpng16] Quiet an uninitialized memory warning from VC2013 in png_get_png(). 2014-01-30 15:02:18 -06:00
Glenn Randers-Pehrson
2f1dede991 [libpng16] Imported from libpng-1.6.9rc01.tar 2014-01-28 11:35:50 -06:00
Glenn Randers-Pehrson
5af0307f11 [libpng16] Imported from libpng-1.6.9beta04.tar 2014-01-20 13:14:40 -06:00
Glenn Randers-Pehrson
efaaad7447 [libpng16] Correct a new comment in pngconf.h 2014-01-13 21:43:51 -06:00
Glenn Randers-Pehrson
bda94b1005 [libpng16] Added clang attribute support (Cosmin). 2014-01-13 21:16:17 -06:00
Glenn Randers-Pehrson
4250328102 [libpng16] Updated scripts/makefile.* to use CPPFLAGS (Cosmin) 2014-01-12 10:49:40 -06:00
Glenn Randers-Pehrson
bb6e0a2db3 [libpng16] Bump version to 1.6.9beta04 2014-01-10 10:36:59 -06:00
Glenn Randers-Pehrson
41633d33c4 [libpng16] Imported from libpng-1.6.9beta03.tar 2014-01-10 10:36:46 -06:00
Glenn Randers-Pehrson
88cf760b07 [libpng16] Removed potentially misleading warning from png_check_IHDR(). 2014-01-10 06:18:31 -06:00
Glenn Randers-Pehrson
4ea97d8bc7 [libpng16]Revised png_check_IHDR() to use PNG_SIZE_MAX instead of
PNG_UINT_32_MAX in the test for potential overflow in PNG_ROWBYTES.
2014-01-09 20:13:31 -06:00
Glenn Randers-Pehrson
bef206b0a8 [libpng16] Only warn about image too wide if warning not already issued. 2014-01-08 11:58:49 -06:00
Glenn Randers-Pehrson
b94db2eb34 [libpng16] Updated warning message in png_check_IHDR() 2014-01-07 11:43:43 -06:00
Glenn Randers-Pehrson
3f7a169c2d [libpng16] Changed warning message "is too large" to "may be too large"
in png_check_IHDR().
2014-01-07 11:22:29 -06:00
Glenn Randers-Pehrson
bc79c250e9 [libpng16] Bump version to 1.6.9beta03 2014-01-01 10:54:18 -06:00
Glenn Randers-Pehrson
3cc9e8ff96 [libpng16] Imported from libpng-1.6.9beta02.tar 2014-01-01 10:18:42 -06:00
Glenn Randers-Pehrson
95a197397f [libpng16] Updated copyright year in recently-changed files. 2013-12-31 21:10:13 -06:00
John Bowler
d0479d24a0 [libpng16] Allow unversioned links created on install to be disabled in
configure.  In configure builds 'make install' changes/adds links like png.h
and libpng.a to point to the newly installed, versioned, files (e.g.
libpng17/png.h and libpng17.a). Three new configure options and some
rearrangement of Makefile.am allow creation of these links to be disabled.
2013-12-29 19:31:56 -06:00
John Bowler
1fc0171278 [libpng16] Revised pngvalid.c to support libpng 1.5, which does not support the
PNG_MAXIMUM_INFLATE_WINDOW option, so #define it out when appropriate in
pngvalid.c
2013-12-29 15:09:28 -06:00
John Bowler
a8472470a4 [libpng16] Merged libpng-1.7.0 changes to make no-interlace configurations work
with test programs.
2013-12-29 10:50:51 -06:00
Glenn Randers-Pehrson
88ecac68be [libpng16] Merged pngrio.c, pngtrans.c, pngwio.c, and pngerror.c
with libpng-1.7.0
2013-12-28 12:52:59 -06:00
Glenn Randers-Pehrson
e51ba2eff4 [libpng16] Removed #error macro from contrib/tools/pngfix.c (Thomas Klausner). 2013-12-27 20:22:24 -06:00
John Bowler
a80e864faa [libpng16] Merged with pngvalid.c from libpng-1.7 changes to create a single
pngvalid.c
2013-12-27 08:43:55 -06:00
John Bowler
1d3c990425 [libpng16] Added checks for libpng 1.5 to pngvalid.c. This supports the use of
this version of pngvalid in libpng 1.5
2013-12-27 08:14:06 -06:00
Glenn Randers-Pehrson
79f0ba499f [libpng16] Fixed typo in CHANGES and ANNOUNCE (autoconf version 2.69, not 2.59) 2013-12-26 15:00:49 -06:00
Glenn Randers-Pehrson
74e84d0f7d [libpng16] Removed config-generated "compile" file 2013-12-26 14:44:10 -06:00
Glenn Randers-Pehrson
4568762d28 [libpng16] Bump version to 1.6.9beta02 2013-12-26 11:40:31 -06:00
Glenn Randers-Pehrson
0740c62700 [libpng16] Imported from libpng-1.6.9beta01.tar 2013-12-26 11:27:02 -06:00
Glenn Randers-Pehrson
38f49403bd [libpng16] Update "last changed" dates in recently-patched files. 2013-12-22 15:04:00 -06:00
John Bowler
8f1150eb75 [libpng16] Made transform implementation functions static. This makes the
internal functions called by png_do_{read|write}_transformations static. On an
x86-64 DLL build (Gentoo Linux) this reduces the size of the text
segment of the DLL by 1208 bytes, about 0.6%. It also simplifies
maintenance by removing the declarations from pngpriv.h and allowing
easier changes to the internal interfaces.
2013-12-19 15:33:49 -06:00
John Bowler
c10930a4fc [libpng16] Bookkeeping: Moved functions around (no changes). Moved transform
function definitions before the place where they are called so that
they can be masde static. Move the intrapixel functions and the
grayscale palette builder out of the png?tran.c files. The latter
isn't a transform function and is no longer used internally, and the
former MNG specific functions are better placed in pngread/pngwrite.c
2013-12-19 15:24:06 -06:00
Glenn Randers-Pehrson
bff81bdddc [libpng16] Bump version to 1.6.9beta01 2013-12-19 15:18:07 -06:00
Glenn Randers-Pehrson
be3977de2c [libpng16] Imported from libpng-1.6.8.tar 2013-12-19 09:11:01 -06:00
Glenn Randers-Pehrson
67f101e6c9 [libpng16] Imported from libpng-1.6.8rc02.tar 2013-12-14 12:42:36 -06:00
Glenn Randers-Pehrson
b6f0a641cb [libpng16] Imported from libpng-1.6.8rc01.tar 2013-12-11 23:28:18 -06:00
John Bowler
81dfd007b2 [libpng16] Tidied up pngfix inits and fixed non-write pngtest. 2013-12-01 15:20:15 -06:00
Glenn Randers-Pehrson
1f23775d10 [libpng16] Fixed unused "wrote_question" in non-write pngtest. 2013-12-01 15:05:31 -06:00
Glenn Randers-Pehrson
84092bbf29 [libpng16] Bump version to 1.6.8beta03 2013-11-30 09:12:33 -06:00
Glenn Randers-Pehrson
1658e602c6 [libpng16] Imported from libpng-1.6.8beta02.tar 2013-11-30 09:12:23 -06:00
Glenn Randers-Pehrson
83b132f14d [libpng16] Changed deprecated png_free_default() to free() in pngtest.c
Changed tabs to 3 spaces in png_debug macros and changed '"%s"m'
to '"%s" m' to improve portability among compilers.
2013-11-28 16:33:27 -06:00
Glenn Randers-Pehrson
1f63da349b [libpng16] Changed tabs to 3 spaces in png_debug macros and changed '"%s"m'
to '"%s" m' to improve portability among compilers.
Changed png_free_default() to free() in pngtest.c
2013-11-28 13:41:10 -06:00
Glenn Randers-Pehrson
44db02364e [libpng16] Avoid a clang scan-build warning in pngtest.c 2013-11-25 13:19:57 -06:00
Glenn Randers-Pehrson
3f8a2ed600 [libpng16] Removed or marked PNG_UNUSED some harmless "dead assignments"
reported by clang scan-build.
2013-11-25 10:38:21 -06:00
Glenn Randers-Pehrson
30145f29c5 [libpng16] Revised manual about handling of zlib CMF 2013-11-24 13:33:07 -06:00
Glenn Randers-Pehrson
d56af331e1 [libpng16] Bump version to 1.6.8beta02 2013-11-23 18:59:14 -06:00
Glenn Randers-Pehrson
1c6e5f8caa [libpng16] Imported from libpng-1.6.8beta01.tar 2013-11-23 18:41:43 -06:00
Glenn Randers-Pehrson
27ae9362d8 [libpng16] Added another "assert()" in pngfix.c 2013-11-23 12:42:43 -06:00
Glenn Randers-Pehrson
88507b4ef9 [libpng16] Avoid a clang scanner warning in pngfix.c 2013-11-23 12:26:00 -06:00
John Bowler
0f6303301f [libpng16] Fixed pngvalid 'fail' function declaration on the Intel C Compiler.
This reverts to the previous 'static' implementation and works round
the 'unused static function' warning by using PNG_UNUSED().
2013-11-22 18:49:58 -06:00
John Bowler
aaf1bb1ae1 [libpng16] Updated "last changed" dates 2013-11-22 15:40:52 -06:00
Glenn Randers-Pehrson
b5596712fc [libpng16] Update contrib/tools/pngfix.c 2013-11-22 15:26:22 -06:00
Glenn Randers-Pehrson
503a49458b [libpng16] Enabled WRITE_INVERT and WRITE_PACK in contrib/pngminim/encoder. 2013-11-22 15:16:04 -06:00
Glenn Randers-Pehrson
c912050a7b [libpng16] Fixed 'minimal' builds. Various obviously useful minimal
configurations don't build because of missing contrib/libtests test programs
and overly complex dependencies in scripts/pnglibconf.dfa. This change adds
contrib/conftest/*.dfa files that can be used in automatic build
scripts to ensure that these configurations continue to build.
2013-11-22 14:58:04 -06:00
Glenn Randers-Pehrson
113213416c [libpng16] Conditionally compile some unused functions reported by -Wall
in pngminim.
2013-11-18 20:12:24 -06:00
Glenn Randers-Pehrson
bd757acf26 [libpng16] Reverted change of ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
to PNG_SET_UNKNOWN_SUPPORTED in pngpread.c; it led to the possibility of
calling png_handle_unknown() twice.
2013-11-18 18:40:39 -06:00
Glenn Randers-Pehrson
a7f0bcb3a6 [libpng16] Added "-Wall" to CFLAGS in contrib/pngminim/*/makefile 2013-11-18 17:07:26 -06:00
Glenn Randers-Pehrson
7976b3c3e3 [libpng16] Moved prototype for png_handle_unknown() in pngpriv.h outside of
the #ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED/#endif block.
Removed recently-added #ifdef from pngpread.c; moving the prototype
in pngpriv.h fixed the compiler warning that the #ifdef was trying
to solve.
2013-11-18 11:38:42 -06:00
Glenn Randers-Pehrson
012d36f643 [libpng16] Changed ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED to
ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTE in pngpread.c to agree with
what is in pngpriv.h
2013-11-17 19:42:48 -06:00
Glenn Randers-Pehrson
68dfa9e526 [libpng16] Reduced scope of recently-added #ifdef block
(#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED/#endif in pngpread.c)
2013-11-17 19:26:40 -06:00
Glenn Randers-Pehrson
416bb9320f [libpng16] Added #ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED/#endif in pngpread.c 2013-11-17 11:06:50 -06:00
Glenn Randers-Pehrson
f2b8961f58 [libpng16] Bump version to 1.6.8beta01 2013-11-14 13:17:57 -06:00
Glenn Randers-Pehrson
6a3805c25b [libpng16] Update version number in manual and png.h 2013-11-14 13:16:21 -06:00
Glenn Randers-Pehrson
cf247ebffe [libpng16] Update version number in CHANGES file. 2013-11-14 12:51:15 -06:00
Glenn Randers-Pehrson
0ea69cdfa9 [libpng16] Imported from libpng-1.6.7.tar 2013-11-14 12:28:05 -06:00
Glenn Randers-Pehrson
8bf54399a3 [libpng16] Bump version to 1.6.7rc03 2013-11-07 08:15:38 -06:00
Glenn Randers-Pehrson
4da9d314bc [libpng16] Imported from libpng-1.6.7rc02.tar 2013-11-07 08:15:30 -06:00
John Bowler
08b0620202 [libpng16] Fixed #include in filter_neon_intrinsics.c and ctype macros. The
ctype char checking macros take an unsigned char argument, not a signed char.
2013-11-04 13:44:37 -06:00
Glenn Randers-Pehrson
dee5a914fc [libpng16] Bump version to 1.6.7rc02 2013-11-02 16:49:53 -05:00
Glenn Randers-Pehrson
d2d09e5bf9 [libpng16] Imported from libpng-1.6.7rc01.tar 2013-11-02 15:48:28 -05:00
Glenn Randers-Pehrson
03eafe24ed [libpng16] Bump version to 1.6.7beta05 2013-10-26 11:52:05 -05:00
Glenn Randers-Pehrson
e9a8fb8d07 [libpng16] Imported from libpng-1.6.7beta04.tar 2013-10-26 11:51:56 -05:00
John Bowler
fd8bba4b80 [libpng16] Changed NEON implementation selection mechanism to allow assembler
or intrinsics to be turned on during the build by defining
PNG_ARM_NEON_IMPLEMENTATION to the correct value (2 or 1).  The
default is "undefined" and the build type is selected in pngpriv.h.
2013-10-25 16:11:57 -05:00
John Bowler
bb9adfdad9 [libpng16] Allow clang derived from older GCC versions to use ARM intrinsics. 2013-10-24 07:45:27 -05:00
Glenn Randers-Pehrson
393d3c8285 [libpng16] Updated CHANGES comment about enabling ARMv8 code
We use -mfpu=neon instead of a configuration flag.
2013-10-19 09:34:54 -05:00
Glenn Randers-Pehrson
9450ffb26d [libpng16] Bump version to 1.6.7beta04 2013-10-19 09:06:07 -05:00
Glenn Randers-Pehrson
ed049010b1 [libpng16] Imported from libpng-1.6.7beta03.tar 2013-10-19 09:05:59 -05:00
John Bowler
db9d96840d [libpng16] Cleaned up ARM NEON compilation handling. The tests are now in
pngpriv.h and detect the broken GCC compilers.
2013-10-18 15:28:00 -05:00
John Bowler
9e9977e153 [libpng16] Revised pngvalid to generate size images with as many filters as
it can manage, limited by the number of rows.
2013-10-17 08:23:13 -05:00
John Bowler
681b731151 [libpng16] Fixed loop end condition in filter_neon_intrinsics.c 2013-10-17 08:12:55 -05:00
John Bowler
83a841ab7c [libpng16] Fix compilation errors in filter_neon_intrinsics.c
Use filter_neon_intrinsics.c in preference to filter_neon.S when possible.
2013-10-15 21:19:56 -05:00
Glenn Randers-Pehrson
85c2ec9a69 [libpng16] Restored arm/arm_init.c to CSRCS in Makefile.am 2013-10-14 19:55:45 -05:00
Glenn Randers-Pehrson
cf644fa901 [libpng16] Update "last changed" dates in arm/filter_neon_intrinsics.c and
pngrtran.c
2013-10-14 13:16:38 -05:00
Glenn Randers-Pehrson
17ad121e93 [libpng16] Work around problem with multiple-line "test" command missing
continuation backslashes
2013-10-14 13:15:09 -05:00
Glenn Randers-Pehrson
19e4edaf3f [libpng16] Conditionally compile arm/filter_neon_intrinsics.c
if PNG_READ_SUPPORTED and PNG_ARM_NEON_OPT > 0
2013-10-14 12:47:49 -05:00
Glenn Randers-Pehrson
e1540e3b4c [libpng16] Updated configure.ac to handle new on-intrinsics, etc., options. 2013-10-14 11:38:53 -05:00
Glenn Randers-Pehrson
063eb1b497 [libpng16] Added ARMv8 support (James Yu <james.yu at linaro.org>). Added file
arm/filter_neon_intrinsics.c; enable with configuration flag
PNG_ARM_NEON_INTRINSICS.
2013-10-14 11:14:36 -05:00
Glenn Randers-Pehrson
fecdd46639 [libpng16] Fix some typos in autogen.sh that don't affect its behavior 2013-10-13 17:14:48 -05:00
Glenn Randers-Pehrson
0e036921aa [libpng16] Bump version to 1.6.7beta03 2013-10-13 13:48:11 -05:00
Glenn Randers-Pehrson
e827fa24a0 [libpng16] Imported from libpng-1.6.7beta02.tar 2013-10-13 11:47:41 -05:00
John Bowler
34ac3691cb [libpng16] Make autogen.sh work with automake 1.13 as well as 1.14. Do this
by always removing the 1.14 'compile' script but never checking for it.
2013-10-06 11:29:55 -05:00
John Bowler
236e105170 [libpng16] Simplified error message code in pngunknown. The simplification has
the useful side effect of avoiding a bogus warning generated by the latest
version of the Intel C compiler (it objects to
condition ? string-literal : string-literal).
2013-10-04 20:28:33 -05:00
John Bowler
5b1df53a82 [libpng16] Cleaned up (char*) casts of zlib messages. The latest version of
the Intel C compiler complains about casting a string literal as (char*), so
copied the treatment of z_const from the library code into pngfix.c
2013-10-04 20:13:17 -05:00
John Bowler
940b37b197 [libpng16] Made changes for compatibility with automake 1.14:
1) Added the 'compile' program to the list of programs that must be cleaned
       in autogen.sh
    2) Added 'subdir-objects' which causes .c files in sub-directories to be
       compiled such that the corresponding .o files are also in the
       sub-directory.  This is because automake 1.14 warns that the
       current behavior of compiling to the top level directory may be removed
       in the future.
    3) Updated dependencies on pnglibconf.h to match the new .o locations and
       added all the files in contrib/libtests and contrib/tools that depend
       on pnglibconf.h
    4) Added 'BUILD_SOURCES = pnglibconf.h'; this is the automake recommended
       way of handling the dependencies of sources that are machine generated;
       unfortunately it only works if the user does 'make all' or 'make check',
       so the dependencies (3) are still required.
2013-10-04 19:56:19 -05:00
John Bowler
0441ff62e7 [libpng16] Remove spurious "#ifdef PNG_sRGB_SUPPORTED" from pngrutil.c 2013-10-04 19:28:48 -05:00
Glenn Randers-Pehrson
de723276e5 [libpng16] Bump version to 1.6.7beta02 2013-10-02 13:47:02 -05:00
Glenn Randers-Pehrson
2464dbfe4c [libpng16] Imported from libpng-1.6.7beta01.tar 2013-09-30 17:05:35 -05:00
Glenn Randers-Pehrson
b3721757a0 [libpng16] Catch up with some recent changes that did not get merged. 2013-09-30 13:56:44 -05:00
John Bowler
cc93d89e43 [libpng16] Updated pngunknown.c 2013-09-30 13:07:58 -05:00
John Bowler
8f381901e3 [libpng16] Avoid up-cast warnings in pngvalid.c. On ARM the alignment
requirements of png_modifier are greater than that of png_store and as a
consequence compilation of pngvalid.c results in a warning about increased
alignment requirements because of the bare cast to (png_modifier*). The code
is safe, because the pointer is known to point to a stack allocated
png_modifier, but this change avoids the warning.

  Fixed default behavior of ARM_NEON_API. If the ARM NEON API option was
    compiled without the CHECK option it defaulted to on, not off.

  Check user callback behavior in pngunknown.c. Previous versions compiled
    if SAVE_UNKNOWN was not available but did nothing since the callback
    was never implemented.

  Merged pngunknown.c with 1.7 version and back ported 1.7 improvements/fixes
2013-09-30 11:24:17 -05:00
John Bowler
15a80443de [libpng16] Allow HANDLE_AS_UNKNOWN to work when other options are configured
off. Also fixed the pngminim makefiles to work when $(MAKEFLAGS) contains stuff
which terminates the make options (as by default in recent versions of Gentoo).
2013-09-21 10:06:32 -05:00
Glenn Randers-Pehrson
6f8f004fe1 [libpng16] Added #ifdef PNG_READ_SUPPORTED/endif around the
png_chunk_unknown_handling() function, and restored the unknown-chunk
handling code from libpng-1.6.6.

Send comments/corrections/commendations to png-mng-implement at lists.sf.net
(subscription required; visit
https://lists.sourceforge.net/lists/listinfo/png-mng-implement
to subscribe)
or to glennrp at users.sourceforge.net

Glenn R-P
2013-09-20 15:40:15 -05:00
Glenn Randers-Pehrson
873f16fe2f [libpng16] Reverted the change to unknown handling #defines; the change
breaks 'NOREAD' builds.
2013-09-20 14:28:50 -05:00
Glenn Randers-Pehrson
7ae451f527 [libpng16] Bump version to 1.6.7beta01 2013-09-16 11:47:17 -05:00
Glenn Randers-Pehrson
391459424e [libpng16] Imported from libpng-1.6.6.tar 2013-09-16 10:39:16 -05:00
Glenn Randers-Pehrson
53ae7dc514 [libpng16] Imported from libpng-1.6.5.tar 2013-09-14 09:44:09 -05:00
Glenn Randers-Pehrson
cd6a3ef31f [libpng16] Bump version to 1.6.5beta01 2013-09-12 08:02:22 -05:00
Glenn Randers-Pehrson
209d3eb5c6 [libpng16] Imported from libpng-1.6.4.tar 2013-09-12 07:27:14 -05:00
Glenn Randers-Pehrson
d42dc54df5 [libpng16] Imported from libpng-1.6.4rc01.tar 2013-09-05 15:18:13 -05:00
Glenn Randers-Pehrson
877afaf17e [libpng16] Bump version to 1.6.4beta03 2013-08-29 19:45:48 -05:00
Glenn Randers-Pehrson
8c49ddcf56 [libpng16] Imported from libpng-1.6.4beta02.tar 2013-08-29 19:39:34 -05:00
Glenn Randers-Pehrson
5680f5d6f2 [libpng16] Bump version to 1.6.4beta02 2013-08-21 18:59:09 -05:00
Glenn Randers-Pehrson
324402044f [libpng16] Imported from libpng-1.6.4beta01.tar 2013-08-21 18:45:24 -05:00
Glenn Randers-Pehrson
685d79e27a [libpng16] Delay calling png_init_filter_functions() until a row with nonzero
filter is found.
2013-08-20 21:15:31 -05:00
Glenn Randers-Pehrson
52083f9152 [libpng16] Mention png_set_option() in the documentation. 2013-08-17 15:53:32 -05:00
Glenn Randers-Pehrson
7191f6e9e6 [libpng16] Use minus signs, not hyphens, in "--i". 2013-08-13 18:54:34 -05:00
Glenn Randers-Pehrson
4dcbf24d82 [libpng16] Change some hyphens to minus signs and fix other typos in libpng.3 2013-08-06 17:25:02 -05:00
Glenn Randers-Pehrson
492e67163e [libpng16] Exit loop over tRNS array when a transparent entry is
found (performance report by PoChun Chang)
2013-08-04 14:03:44 -05:00
Glenn Randers-Pehrson
5881b11629 [libpng16] Bump version to 1.6.4beta01 2013-07-20 19:41:22 -05:00
Glenn Randers-Pehrson
847e9efb66 [libpng16] Imported from libpng-1.6.3.tar 2013-07-17 19:13:23 -05:00
Glenn Randers-Pehrson
db56fa18c2 [libpng16] Revised "/*SAFE*/" comment in pngrutil.c 2013-07-15 10:09:54 -05:00
Glenn Randers-Pehrson
bc8e40d611 [libpng16] Added "/* SAFE */" comments in pngrutil.c and pngrtran.c
where warnings may be erroneously issued by code-checking applications.
Revised manual about changes in iTXt chunk handling made in libpng-1.6.0.
2013-07-15 08:44:53 -05:00
Glenn Randers-Pehrson
2b87a54d07 [libpng16] Updated manual to mention that warnings about iTXt language tag
and translated keyword are no longer issued when these are empty, which
is allowed by the PNG specification.
2013-07-14 18:34:13 -05:00
Glenn Randers-Pehrson
b23afad4a1 [libpng16] Imported from libpng-1.6.3rc01.tar 2013-07-10 19:36:08 -05:00
Glenn Randers-Pehrson
f5d7f438e5 [libpng16] Imported from libpng-1.6.3beta10.tar 2013-07-04 20:19:47 -05:00
John Bowler
b4ec1f8451 [libpng16] Unified pngfix.c source with libpng17. 2013-07-02 23:47:57 -05:00
John Bowler
f5f1206778 [libpng16] 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
2013-07-02 23:18:49 -05:00
John Bowler
497e7319f4 [libpng16] Only compile ARM code when PNG_READ_SUPPORTED is defined. 2013-07-02 22:57:40 -05:00
Glenn Randers-Pehrson
d5dd93f5d1 [libpng16] Updated documentation to show default behavior of benign errors
correctly.
2013-07-02 09:20:36 -05:00
Glenn Randers-Pehrson
7f9a49aa65 [libpng16] Bump version to 1.6.3beta10 2013-06-27 21:22:26 -05:00
Glenn Randers-Pehrson
573c9d434f [libpng16] Change "png-fix-too-far-back" to "pngfix" inside pngfix.c
for error messages, etc.
2013-06-27 21:21:26 -05:00
Glenn Randers-Pehrson
56a1a66656 [libpng16] Imported from libpng-1.6.3beta09.tar 2013-06-27 18:01:30 -05:00
Glenn Randers-Pehrson
d992e05da8 [libpng16] Renamed contrib/tools/png-fix-too-far-back.c to pngfix.c 2013-06-27 13:39:20 -05:00
John Bowler
870beb5279 [libng16] Revised contrib/tools/png-fix-too-far-back.c to check all compressed
chunks known to libpng.
2013-06-27 11:49:26 -05:00
Glenn Randers-Pehrson
b0d97356ce [libpng16] Revised example.c to illustrate use of PNG_DEFAULT_sRGB and
PNG_GAMMA_MAC_18 as parameters for png_set_gamma().
2013-06-25 19:36:15 -05:00
Glenn Randers-Pehrson
04d4e38ac2 [libpng16] Fix spelling of "doclifter" in CHANGES and ANNOUNCE 2013-06-18 15:09:47 -05:00
Glenn Randers-Pehrson
67a46d17d8 [libpng16] Bump version to 1.6.3beta09 2013-06-18 13:28:39 -05:00
Glenn Randers-Pehrson
bbc29a858d [libpng16] Imported from libpng-1.6.3beta08.tar 2013-06-18 13:00:25 -05:00
Glenn Randers-Pehrson
3948b94700 [libpng16] Bump version to 1.6.3beta08 2013-06-08 17:03:37 -05:00
Glenn Randers-Pehrson
746bc7d883 [libpng16] Imported from libpng-1.6.3beta07.tar 2013-06-08 17:03:26 -05:00
John Bowler
f260f6d156 [libpng16] 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.
2013-06-08 13:13:53 -05:00
John Bowler
18dd07e3e6 [libpng16] 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.
2013-06-08 13:07:13 -05:00
Glenn Randers-Pehrson
0486b17fbd [libng16] Neglected to check in pngconf.h with previous commit. 2013-06-06 14:38:54 -05:00
John Bowler
aa22442a9c [libpng16] 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.
2013-06-06 12:49:53 -05:00
Glenn Randers-Pehrson
4a43182924 [libpng16] Enclose the prototypes for the simplified write API in 2013-06-05 23:41:49 -05:00
Glenn Randers-Pehrson
810b6e51e4 [libpng16] Updated README (removed CompuServ reference, added simplesystems.org) 2013-06-05 16:52:41 -05:00
John Bowler
88610994da [libpng16] Fix compiler warning in png-fix-itxt.c 2013-06-05 12:15:25 -05:00
John Bowler
1b9b970598 [libpng16] Deleted set(CMAKE_BUILD_TYPE) block from CMakeLists.txt 2013-06-05 11:41:44 -05:00
Glenn Randers-Pehrson
43f0311b57 [libpng16] Added set(CMAKE_CONFIGURATION_TYPES ...) to CMakeLists.txt
(Andrew Hundt)
2013-06-05 11:07:01 -05:00
Glenn Randers-Pehrson
421f95deb5 [libpng16] Removed a redundant test in png_set_IHDR(). 2013-06-04 15:05:12 -05:00
Glenn Randers-Pehrson
f96251291d [libpng16] Updated README with current arm, contrib, and projects directory
descriptions
2013-06-03 20:57:45 -05:00
Glenn Randers-Pehrson
cafa0eebb9 [libpng16] Bump version to 1.6.3beta07 2013-05-12 19:10:16 -05:00
Glenn Randers-Pehrson
afd6cecb76 [libpng16] Imported from libpng-1.6.3beta06.tar 2013-05-12 18:36:09 -05:00
Glenn Randers-Pehrson
61dbc4c608 [libpng16] Revised contrib/pngminim/*/makefile to generate pnglibconf.h
with the right zlib headers.
2013-05-09 22:01:06 -05:00
Glenn Randers-Pehrson
bea86bba24 [libpng16] Removed obsolete reference to "pnginflate" from ANNOUNCE 2013-05-09 08:58:08 -05:00
Glenn Randers-Pehrson
7fc85a3f46 [libng16] Fixed typo in png-fix-too-far-back "usage" output 2013-05-09 08:49:42 -05:00
Glenn Randers-Pehrson
bb8d4f76f4 [libpng16] Cleaned up CHANGES and ANNOUNCE files. 2013-05-09 08:48:43 -05:00
Glenn Randers-Pehrson
b79c98e57c [libpng16] Bump version to 1.6.3beta06 2013-05-09 08:03:40 -05:00
Glenn Randers-Pehrson
4cf2465c71 [libpng16] Imported from libpng-1.6.3beta05.tar 2013-05-09 08:03:24 -05:00
Glenn Randers-Pehrson
4ea93e69bc [libpng16] Renamed pnginflate to png-fix-too-far-back in contrib/tools. 2013-05-08 21:57:00 -05:00
Glenn Randers-Pehrson
ff141eb21e [libpng16] Renamed contrib/tools/fixitxt to contrib/tools/png-fix-itxt.
Added information in the documentation about problems with and fixes for
the bad CRC and bad iTXt chunk situations.
2013-05-08 19:46:10 -05:00
John Bowler
122bec17f2 [libpng16]Check ZLIB_VERNUM for mismatches, enclose #error in quotes 2013-05-08 14:35:21 -05:00
John Bowler
9afb90f885 [libpng16] Attempt to detect configuration issues with pngdeflate,
which requires both the correct libpng and the correct zlib to function
correctly.
2013-05-08 14:21:46 -05:00
John Bowler
34b7d62488 [libpng16] Updated Makefile.am 2013-05-08 10:35:14 -05:00
Glenn Randers-Pehrson
3f2b5a6670 libpng16] Updated contrib/pngminus/pnm2png.c (Paul Stewart):
Fixed whitespace handling
Added a call to png_set_packing()
Initialize dimension values so if sscanf fails at least we have known
   invalid values.
2013-05-08 10:09:19 -05:00
John Bowler
294d0b8408 [libpng16] Detect wrong libpng versions linked to pngdeflate, 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.
2013-05-08 08:56:45 -05:00
Glenn Randers-Pehrson
62c6fbbd29 [libpng16] Check that PNG_MAXIMUM_INFLATE_WINDOW is defined before using it. 2013-05-07 23:16:06 -05:00
John Bowler
0c7ac064d3 [libpng16] Added an option to force maximum window size for inflating.
For inflate, reverted previous fixes.
Added fixitxt and pngdeflate to the built programs and removed warnings
from the source code and timepng that are revealed as a result.  Fixed
fixitxt when the chunk length is more than 65535 (untested, no test case).
2013-05-07 21:59:05 -05:00
Glenn Randers-Pehrson
db67cba8d4 [libpng16] Check for EOF in contrib/pngminus/pnm2png.c (Paul Stewart).
Ignore "#" delimited comments in input file to pnm2png.c.
2013-05-07 14:31:35 -05:00
Glenn Randers-Pehrson
2aa6c96e5d [libpng16] Bump version to 1.6.3beta05 2013-05-06 09:55:29 -05:00
Glenn Randers-Pehrson
2fd3434fa4 [libpng16] Imported from libpng-1.6.3beta04.tar 2013-05-06 09:55:18 -05:00
Glenn Randers-Pehrson
2c0833e265 [libpng16] Committed new pnglibconf.dfa and prebuilt. 2013-05-05 22:18:53 -05:00
Glenn Randers-Pehrson
127b08a265 [libpng16] Calculate our own zlib windowBits when decoding rather than
trusting the CMF bytes in the PNG datastream.
2013-05-05 22:13:47 -05:00
Glenn Randers-Pehrson
0f42908c0a [libpng16] Bump version to 1.6.3beta04 2013-04-29 21:31:50 -05:00
Glenn Randers-Pehrson
f18a28cc13 [libpng16] Imported from libpng-1.6.3beta03.tar 2013-04-29 21:31:38 -05:00
Glenn Randers-Pehrson
56d6bc2e88 [libpng16] Avoid dereferencing NULL pointer possibly returned from
png_create_write_struct() (Andrew Church).
2013-04-29 08:57:14 -05:00
Glenn Randers-Pehrson
61946e0f56 [libpng16] Revise man page to demonstrate dealing with unknown chunk
handling in libpng.1.5.x and with bugs in libpng-1.4.x and earlier.
2013-04-28 20:48:37 -05:00
Glenn Randers-Pehrson
49f9c24910 [libpng16] Expanded manual paragraph about writing private chunks, particularly
about the need to call png_set_keep_unknown_chunks() when writing them.
2013-04-27 18:03:03 -05:00
Glenn Randers-Pehrson
c62fda06a3 [libpng16] Bump version to 1.6.3beta03 2013-04-26 08:25:33 -05:00
Glenn Randers-Pehrson
cd62215d61 [libpng16] Imported from libpng-1.6.3beta02.tar 2013-04-26 08:24:19 -05:00
John Bowler
ac09cd0fec [libpng16] Test for 'arm*' not just 'arm' in the host_cpu configure variable.
Rebuilt the configure scripts.
2013-04-25 23:13:08 -05:00
Glenn Randers-Pehrson
529045cf26 [libpng16] Bump version to 1.6.3beta02 2013-04-25 21:37:43 -05:00
John Bowler
7b1da52549 [libpng16] 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.
2013-04-25 10:03:42 -05:00
Glenn Randers-Pehrson
34d20f482f [libpng16] Revised stack marking in arm/filter_neon.S and configure.ac. 2013-04-25 09:53:57 -05:00
Glenn Randers-Pehrson
399430dac2 [libpng16] Update "last changed" comments. 2013-04-25 09:52:00 -05:00
Glenn Randers-Pehrson
3f677d1c65 [libpng16] Bump version to 1.6.3beta01 2013-04-25 09:19:04 -05:00
Glenn Randers-Pehrson
809355b4aa [libpng16] Imported from libpng-1.6.2.tar 2013-04-25 07:29:41 -05:00
Glenn Randers-Pehrson
7fd71746d0 [libpng16] Fix confusing CHANGES entry. 2013-04-23 23:16:32 -05:00
Glenn Randers-Pehrson
0ee3465fba [libpng16] Imported from libpng-1.6.2rc06.tar 2013-04-23 22:21:55 -05:00
Glenn Randers-Pehrson
a793120405 [libpng16] Bump version to 1.6.2rc03 2013-04-23 22:03:44 -05:00
Glenn Randers-Pehrson
9bdba4e630 [libpng16] Imported from libpng-1.6.2rc05.tar 2013-04-23 19:45:07 -05:00
John Bowler
a74b70871c [libpng16] 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.
2013-04-23 18:18:45 -05:00
Glenn Randers-Pehrson
0d50d6562c [libpng16] Imported from libpng-1.6.2rc04.tar 2013-04-22 20:29:18 -05:00
Glenn Randers-Pehrson
453fbf942c [libpng16] Revised stack marking in arm/filter_neon.S 2013-04-22 19:48:05 -05:00
Glenn Randers-Pehrson
6e1c74b39b [libpng16] Imported from libpng-1.6.2rc03.tar 2013-04-22 11:36:05 -05:00
Glenn Randers-Pehrson
fdc2d5f38f [libpng16] Bump version to 1.6.2rc03 2013-04-19 19:05:34 -05:00
Glenn Randers-Pehrson
67a289ffa9 [libpng16] Fixed some spelling/typos 2013-04-19 19:03:34 -05:00
Glenn Randers-Pehrson
bf15ac7e86 [libpng16] Imported from libpng-1.6.2rc02.tar 2013-04-18 07:40:56 -05:00
Glenn Randers-Pehrson
7ef0c46488 [libpng16] Updated "last changed" comments. 2013-04-18 07:25:45 -05:00
Glenn Randers-Pehrson
8d9e494dfb [libpng16] Merged pngtest.c with version 1.7.0beta08 2013-04-18 07:23:59 -05:00
Glenn Randers-Pehrson
0794df4062 [libpng16] Imported from libpng-1.6.2rc01.tar 2013-04-18 06:32:44 -05:00
Glenn Randers-Pehrson
7a69beda7b [libpng16] in fixitxt.c define MAX_LENGTH, largest iTXT chunk that it
can handle.
2013-04-18 05:53:49 -05:00
John Bowler
e4413a735b [libpng16] Disallow storing sRGB information when the sRGB is not supported.
Reverted previous attempt to allow gAMA and sRGB non-support with the
simplified API.
2013-04-17 21:27:47 -05:00
Glenn Randers-Pehrson
7fdb594e73 [libpng16] Added #ifdef PNG_WRITE_sRGB_SUPPORTED, etc., tests where needed in
png_image_write_main() in pngwrite.c (bug report from Yuriy Levchenko).
2013-04-17 11:05:21 -05:00
Glenn Randers-Pehrson
f1736a636b [libpng16] Added contrib/tools/fixitxt.c, to repair the erroneous iTXt
chunk length written by libpng-1.6.0 and 1.6.1.
2013-04-16 23:12:09 -05:00
Glenn Randers-Pehrson
3b4c60f26b [libpng16] Imported from libpng-1.6.2beta02.tar 2013-04-13 21:27:07 -05:00
Glenn Randers-Pehrson
5c55ccdf4f [libpng16] Imported from libpng-1.6.2beta01.tar 2013-04-13 20:55:04 -05:00
Glenn Randers-Pehrson
5ec05b3d7c [libpng16] Removed extra recently-inserted line from pngwutil.c 2013-04-13 20:01:09 -05:00
John Bowler
70eb0720a0 [libpng16] Fixed previous bugfix to work on 64-bit platforms. 2013-04-13 16:52:09 -05:00
Glenn Randers-Pehrson
9bb775fc8c [libpng16] Corrected length written to uncompressed iTXt chunks (Samuli Suominen). 2013-04-13 14:19:25 -05:00
John Bowler
a8715cabd1 [libpng16] Added "{ }" omitted from previous patch to pngtrans.c 2013-04-13 12:25:16 -05:00
Glenn Randers-Pehrson
364acf40aa [libpng16] Corrected a misplaced closing bracket in contrib/libtests/pngvalid.c
(Flavio Medeiros).
2013-04-13 11:55:08 -05:00
John Bowler
b44cd59ad9 [libpng16] 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.
2013-04-12 22:15:54 -05:00
Glenn Randers-Pehrson
e2d8e11407 [libpng16] Updated the GIT URL in the manual. 2013-04-11 18:53:51 -05:00
John Bowler
43c07e1b48 [libpng16] 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.
2013-04-07 21:33:30 -05:00
Glenn Randers-Pehrson
2e0c5f0dff [libpng16] Updated documentation of 1.5.x to 1.6.x changes in iCCP chunk
handling.
2013-03-31 22:55:55 -05:00
Glenn Randers-Pehrson
3a83aa328d [libpng16] Bump version to 1.6.2beta01 2013-03-29 07:11:42 -05:00
Glenn Randers-Pehrson
5087805e7c [libpng16] Imported from libpng-1.6.1.tar 2013-03-27 20:36:57 -05:00
Glenn Randers-Pehrson
4e6e2166a5 [libpng16] Imported from libpng-1.6.1rc01.tar 2013-03-21 07:38:30 -05:00
Glenn Randers-Pehrson
1affc5622b [libpng16] Bump version to 1.6.1beta10 2013-03-13 07:40:54 -05:00
Glenn Randers-Pehrson
cd1cd2dafc [libpng16] Imported from libpng-1.6.1beta09.tar 2013-03-13 07:40:46 -05:00
John Bowler
caa3f296df [libpng16] Eliminated another warning from the Intel C compiler. 2013-03-10 21:40:27 -05:00
John Bowler
2286a7cef4 [libpng16] Eliminated a warning from the Intel C compiler. The warning is
technically valid, although a reasonable treatment of division would
show it to be incorrect.
2013-03-10 21:35:35 -05:00
Glenn Randers-Pehrson
3c8b422b0a [libpng16] Bump version to 1.6.1beta09 2013-03-07 11:36:55 -06:00
Glenn Randers-Pehrson
0645b62528 [libpng16] Imported from libpng-1.6.1beta08.tar 2013-03-07 11:36:47 -06:00
Claudio Bley
0281dee877 [libpng16] 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 expact 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.
2013-03-07 11:17:17 -06:00
Glenn Randers-Pehrson
e55b25a962 [libpng16] Bump version to 1.6.1beta08 2013-03-06 22:42:23 -06:00
Glenn Randers-Pehrson
14638c1f20 [libpng16] Imported from libpng-1.6.1beta07.tar 2013-03-06 22:42:13 -06:00
John Bowler
59ae38984f [libpng16] 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.
2013-03-06 22:15:25 -06:00
Glenn Randers-Pehrson
1f24cb74f2 [libpng16] Update "last changed" dates and fix one comment typo. 2013-03-04 21:58:02 -06:00
Glenn Randers-Pehrson
1cbfa24a93 [libpng16] Bump version to 1.6.1beta07 2013-03-04 17:56:59 -06:00
Glenn Randers-Pehrson
8c87dc88d6 [libpng16] Imported from libpng-1.6.1beta06.tar 2013-03-04 17:56:46 -06:00
John Bowler
f3728100d9 [libpng16] 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.
2013-03-04 16:26:31 -06:00
John Bowler
e15b537825 [libpng16] Better documentation of unknown handling API interactions. 2013-03-02 17:59:43 -06:00
Glenn Randers-Pehrson
e57f094fd6 [libpng16] Bump version to 1.6.1beta06 2013-03-02 17:37:23 -06:00
Glenn Randers-Pehrson
4ea113b7f0 [libng16] Reverted recent change that eliminated a warning about storing
an unhandled chunk.
2013-03-02 16:03:45 -06:00
Glenn Randers-Pehrson
871b1d0fab [libpng16] Bump version to 1.6.1beta05 2013-03-02 15:03:15 -06:00
Glenn Randers-Pehrson
f3af706c2a [libpng16] Imported from libpng-1.6.0beta05.tar 2013-03-01 21:38:03 -06:00
Glenn Randers-Pehrson
96cf4bde0e [libpng16] Fixed bug introduced in libpng-1.6.0beta28 that causes libpng to
handle chunks even when they have been tagged PNG_HANDLE_CHUNK_NEVER.
2013-03-01 20:04:06 -06:00
Glenn Randers-Pehrson
1118d6d985 [libpng16] Avoid a possible memory leak in contrib/gregbook/readpng.c 2013-03-01 13:27:05 -06:00
Glenn Randers-Pehrson
e444514a94 [libpng16] Bump version to 1.6.1beta05 2013-02-27 15:11:39 -06:00
Glenn Randers-Pehrson
efda7376c8 [libpng16] Imported from libpng-1.6.1beta04.tar 2013-02-27 15:02:53 -06:00
John Bowler
ccec786ca7 [libpng16] Revised scripts/dfn.awk to work with the buggy MSYS awk that has
trouble with CRLF line endings.
2013-02-27 13:36:08 -06:00
Glenn Randers-Pehrson
2621be1bdb [libpng16] Added info about ordering of png_set_*() calls to the manual. 2013-02-26 08:43:28 -06:00
Glenn Randers-Pehrson
45bb4530fd [libpng16] Revised INSTALL to recommend using CPPFLAGS instead of INCLUDES.
Revised scripts/makefile.freebsd to respect ZLIBDIR and ZLIBINC.
2013-02-22 20:19:49 -06:00
Glenn Randers-Pehrson
a97fc46e43 [libpng16] Bump version to 1.6.1beta04 2013-02-22 17:12:09 -06:00
Glenn Randers-Pehrson
3fa1893804 [libpng16] Imported from libpng-1.6.1beta03.tar 2013-02-22 17:06:01 -06:00
Glenn Randers-Pehrson
f8a8ead5cb [libpng16] Update the INSTALL document. 2013-02-22 16:52:21 -06:00
Glenn Randers-Pehrson
6df55cece7 [libpng16] Updated scripts/pnglibconf.h.prebuilt 2013-02-19 10:11:43 -06:00
John Bowler
09a5ca72ac [libpng16] 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.)
Fixed ALIGNED_MEMORY support.
2013-02-18 22:30:35 -06:00
Glenn Randers-Pehrson
0cc3e9e38c [libpng16] Bump version to 1.6.1beta03 2013-02-18 21:25:56 -06:00
Glenn Randers-Pehrson
adb9613699 [libpng16] Imported from libpng-1.6.1beta02.tar 2013-02-18 21:25:47 -06:00
John Bowler
c0a0d4a6d2 [libpng16] Reenabled code to allow zero length PLTE chunks for MNG. 2013-02-18 21:23:17 -06:00
Glenn Randers-Pehrson
2bad851ab3 [libpng16] Updated "png_sizeof" to "sizeof" in the manual. 2013-02-18 15:21:01 -06:00
Glenn Randers-Pehrson
f2350f3987 [libpng16] Revised "#if defined " in arm/arm_init.c 2013-02-18 12:30:30 -06:00
Glenn Randers-Pehrson
b4ef7c4af2 [libpng16] Use parentheses consistently in "#if defined()" tests.
Folded some long lines.
2013-02-17 15:41:36 -06:00
Glenn Randers-Pehrson
9e8fd50d76 [libpng16] Use parentheses consistently in "#if defined()" tests. 2013-02-17 14:31:00 -06:00
Glenn Randers-Pehrson
ea3288f1c5 [libpng16] Fixed double-underscore typo in an #ifdef in png.c 2013-02-16 16:35:22 -06:00
Glenn Randers-Pehrson
cc074dcaa6 [libpng16] Bump version to 1.6.1beta02 2013-02-16 10:48:39 -06:00
Glenn Randers-Pehrson
3b8e7e869d [libpng16] Imported from libpng-1.6.1beta01.tar 2013-02-16 10:48:29 -06:00
John Bowler
765d145ec4 [libpng16] 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).
2013-02-16 07:43:48 -06:00
John Bowler
c9b11ff0d4 [libpng16] Fixed a race condition in the creation of the build 'scripts'
directory while building with a parallel make.
2013-02-16 07:38:46 -06:00
John Bowler
23a101e06d [libpng16] scripts/pnglibconf.dfa formatting improvements back ported from libpng 1.7. 2013-02-16 00:18:20 -06:00
John Bowler
b724c812ec [libpng16] Enabled parallel tests - back ported from libpng-1.7. 2013-02-16 00:05:59 -06:00
John Bowler
0695fcd834 [libpng16] 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.
2013-02-15 23:46:37 -06:00
John Bowler
42835d3d19 [libpng16] Ported libpng 1.5 options.awk/dfn file handling to 1.6, fixed one bug. 2013-02-15 23:40:34 -06:00
John Bowler
2d99978f67 [libpng16] Made sRGB check numbers consistent. 2013-02-15 23:25:18 -06:00
John Bowler
9d2e875826 [libpng16] 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.
2013-02-15 23:21:42 -06:00
Glenn Randers-Pehrson
681de8c8dc [libpng16] Bump version to 1.6.1beta01 2013-02-13 23:17:52 -06:00
Glenn Randers-Pehrson
c53778ff53 [libpng16] Imported from libpng-1.6.0.tar 2013-02-13 22:53:57 -06:00
Glenn Randers-Pehrson
44db2cfb15 [libpng16] Bump version to 1.6.0rc09 2013-02-10 20:34:23 -06:00
John Bowler
6db8e4dd11 [libpng16] Fixed inconsistencies in png.h and pnglibconf.dfa 2013-02-10 17:49:25 -06:00
Glenn Randers-Pehrson
88c5a2a068 [libpng16] Fixed typo in png.h #ifdef 2013-02-10 16:39:55 -06:00
Glenn Randers-Pehrson
bf9f74b657 [libpng16] Bump version to 1.6.0rc08 2013-02-10 16:20:48 -06:00
Glenn Randers-Pehrson
0d270082d2 [libpng16] Imported from libpng-1.6.0rc07.tar 2013-02-10 16:20:40 -06:00
Glenn Randers-Pehrson
d000fb89c0 [libpng16] Enclosed the new png_get_palette_max
in #ifdef PNG_GET_PALETTE_MAX_SUPPORTED block, and revised pnglibconf.h
and pnglibconf.h.prebuilt accordingly.
2013-02-10 15:46:06 -06:00
Glenn Randers-Pehrson
9fabbedcf3 [libpng16] Bump version to 1.6.0rc07 2013-02-09 07:44:06 -06:00
Glenn Randers-Pehrson
d7dc03e371 [libpng16] Imported from libpng-1.6.0rc06.tar 2013-02-09 07:43:55 -06:00
John Bowler
b8d0534e9d [libpng16] 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.
2013-02-09 07:24:08 -06:00
Glenn Randers-Pehrson
f88ac51a2e [libpng16] Bump version to 1.6.0rc06 2013-02-08 09:13:44 -06:00
Glenn Randers-Pehrson
bbac5e692f [libpng16] Imported from libpng-1.6.0rc05.tar 2013-02-08 09:13:35 -06:00
Glenn Randers-Pehrson
a4081f2990 [libpng16] Updated man page about png_get_palette_max(). 2013-02-08 09:06:08 -06:00
Glenn Randers-Pehrson
1f8e81738a [libpng16] Bump version to 1.6.0rc05 2013-02-06 22:32:13 -06:00
Glenn Randers-Pehrson
9002f5b1f0 [libpng16] Imported from libpng-1.6.0rc04.tar 2013-02-06 22:32:05 -06:00
John Bowler
f5a83fb2b3 [libpng16] Turn serial tests back on (recently turned off by autotools upgrade). 2013-02-06 19:38:42 -06:00
Glenn Randers-Pehrson
154de9398a [libpng16] Bump version to 1.6.0rc04 2013-02-05 12:14:43 -06:00
Glenn Randers-Pehrson
777044a856 [libpng16] Imported from libpng-1.6.0rc03.tar 2013-02-05 10:34:11 -06:00
John Bowler
fe5c8b9755 [libpng16] Fixed palette_max API. 2013-02-05 08:01:09 -06:00
Glenn Randers-Pehrson
8d391c6cea [libpng16] Bump version to 1.6.0rc03 2013-02-04 20:43:27 -06:00
Glenn Randers-Pehrson
32d6a74293 [libpng16] Imported from libpng-1.6.0rc02.tar 2013-02-04 20:12:49 -06:00
Glenn Randers-Pehrson
806477742a [libpng16] Added documentation of the new png_get_palette_max() function. 2013-02-04 19:57:32 -06:00
Glenn Randers-Pehrson
29890b0439 [libpng16] Imported from libpng-1.6.0rc01.tar 2013-01-26 12:13:17 -06:00
Glenn Randers-Pehrson
9f860f59d9 [libpng16] Bump version to 1.6.0beta41 2013-01-20 17:32:13 -06:00
Glenn Randers-Pehrson
f8aa57e791 [libpng16] Imported from libpng-1.6.0beta40.tar 2013-01-20 17:25:00 -06:00
Glenn Randers-Pehrson
4567935fe4 [libpng16] Push two files that weren't updated in previous push. 2013-01-20 00:44:29 -06:00
John Bowler
2414bd99d8 [libpng16] Use consistent handling of overflows in text, sPLT and unknown
png_set_* APIs
2013-01-19 23:18:59 -06:00
Glenn Randers-Pehrson
1f76e62d6c [libpng16] Bump version to 1.6.0beta40 2013-01-19 08:57:40 -06:00
Glenn Randers-Pehrson
e208108dfc [libpng16] Imported from libpng-1.6.0beta39.tar 2013-01-19 08:50:15 -06:00
Glenn Randers-Pehrson
590c8b0987 [libpng16] Added overflow detection in png_set_sPLT() and png_set_text_2(). 2013-01-19 08:49:12 -06:00
Glenn Randers-Pehrson
c5c8b542fb [libpng16] Bump version to 1.6.0beta39 2013-01-17 13:57:58 -06:00
Glenn Randers-Pehrson
91a7ad9d2b [libpng16] Imported from libpng-1.6.0beta38.tar 2013-01-17 13:57:42 -06:00
John Bowler
9dd2bfafe5 [libpng16] Corrected previous attempt at overflow detection in
png_set_unknown_chunks().
2013-01-17 13:24:05 -06:00
Glenn Randers-Pehrson
ba35f1e4c1 [libpng16] Bump version to 1.6.0beta38 2013-01-10 12:21:07 -06:00
Glenn Randers-Pehrson
5851280929 [libpng16] Imported from libpng-1.6.0beta37.tar 2013-01-10 12:20:59 -06:00
John Bowler
1c6e22a360 [libpng16] Fixed conceivable but difficult to repro overflow. Also added
two test programs to generate and test a PNG which should have the problem.
2013-01-10 10:55:34 -06:00
Glenn Randers-Pehrson
37109a9f5b [libpng16] Bump version to 1.6.0beta37 2013-01-01 08:40:25 -06:00
Glenn Randers-Pehrson
a70216aa60 [libpng16] Imported from libpng-1.6.0beta36.tar 2013-01-01 08:40:16 -06:00
Glenn Randers-Pehrson
9477ecdfa6 [libpng16] Updated copyright year to 2013 in newly-changed files 2013-01-01 07:45:42 -06:00
John Bowler
408652acaf [libpng16] Fixed 'make distcheck' on SUN OS - libpng.so was not being removed 2012-12-27 09:56:41 -06:00
Glenn Randers-Pehrson
744f041adf [libpng16] Discontinued distributing libpng-1.x.x.tar.bz2.
Discontinued distributing libpng-1.7.0-1.6.0-diff.txt and similar.
2012-12-23 22:19:43 -06:00
Glenn Randers-Pehrson
86c739e8bc [libpng16] Bump version to 1.6.0beta36 2012-12-22 18:34:22 -06:00
Glenn Randers-Pehrson
00634fdac8 [libpng16] Imported from libpng-1.6.0beta35.tar 2012-12-22 18:34:13 -06:00
Glenn Randers-Pehrson
79ee877fb4 [libpng16] Reformatted latest CHANGES/ANNOUNCE entry to 80 character lines. 2012-12-22 17:13:35 -06:00
John Bowler
e9d616321a [libpng16] 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.
2012-12-20 22:48:58 -06:00
John Bowler
24639a63ce [libpng16] Made default Zlib compression settings be configurable. This adds #defines to
pnglibconf.h to control the defaults.
2012-12-20 22:26:18 -06:00
Glenn Randers-Pehrson
5362c9d5e5 [libpng16] Bump version to 1.6.0beta35 2012-12-19 16:21:35 -06:00
Glenn Randers-Pehrson
b6bfd40da2 [libpng16] Imported from libpng-1.6.0beta34.tar 2012-12-19 16:12:30 -06:00
Glenn Randers-Pehrson
a1d32d08e1 [libpng16] ANNOUNCE that location of GIT repository at SourceForge has changed. 2012-12-18 21:53:17 -06:00
Glenn Randers-Pehrson
350cbf14df [libpng16] Fixed typo in contrib/pngminim/encoder/README 2012-12-18 14:54:44 -06:00
Glenn Randers-Pehrson
7bde6e23bb [libpng16] Disassembled the version number in scripts/options.awk (necessary
for building on SunOs)
2012-12-18 08:44:26 -06:00
Glenn Randers-Pehrson
5d9dc4563f [libpng16] Fixed whitespace in libpng.3 manpage. 2012-12-17 20:03:08 -06:00
Glenn Randers-Pehrson
aa41547a4d [libpng16] Updated manual about functions deprecated in libpng-1.6.x 2012-12-16 16:53:54 -06:00
Glenn Randers-Pehrson
8c3d4f387a [libpng16] Bump version to 1.6.0beta34 2012-12-15 08:43:12 -06:00
Glenn Randers-Pehrson
6e265d137c [libpng16] Note in CHANGES that configure files were rebuilt with autoconf-2.69 2012-12-15 08:29:41 -06:00
Glenn Randers-Pehrson
7b26920d9b [libpng16] Imported from libpng-1.6.0beta33.tar 2012-12-15 07:58:38 -06:00
John Bowler
785a8b1505 [libpng16] Fixed cases of unquoted DESTDIR in Makefile.am 2012-12-15 07:57:31 -06:00
John Bowler
6cf32b460f [libpng16] 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.
2012-12-15 07:55:54 -06:00
John Bowler
f758d6c813 [libpng16] 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.
2012-12-13 11:26:50 -06:00
Glenn Randers-Pehrson
5c2d76fdef [libpng16] Use "FALL THROUGH" comment consistently in switch statements. 2012-12-09 19:39:30 -06:00
Glenn Randers-Pehrson
e4f124e335 [libpng16] Bump version to 1.6.0beta33 2012-12-09 19:25:42 -06:00
John Bowler
1f84bd7000 [libpng16] Change png_warning() to png_app_error() in pngwrite.c and comment
the fall-through condition.
2012-12-09 18:50:49 -06:00
Glenn Randers-Pehrson
b76ab1260d [libpng16] 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)
2012-12-09 17:08:13 -06:00
Glenn Randers-Pehrson
026b295698 [libpng16] Removed an incorrect paragraph about png_benign_error
from the manual page.
2012-11-27 14:49:22 -06:00
Glenn Randers-Pehrson
eb8e19baa3 [libpng16] Revised description of libpng15 to libpng16 changes in the manual. 2012-11-26 18:54:33 -06:00
Glenn Randers-Pehrson
661bc6f6b0 [libpng16] Expanded manual description of libpng15 to libpng16 changes. 2012-11-26 18:39:59 -06:00
Glenn Randers-Pehrson
6dae6d8f3b [libpng16] Imported from libpng-1.6.0beta32.tar 2012-11-25 12:47:44 -06:00
Glenn Randers-Pehrson
5b9a28f2b8 [libpng16] Trivial editing of commentary in pngrutil.c 2012-11-25 12:46:24 -06:00
Glenn Randers-Pehrson
5f4b95e513 [libpng16] Made png_user_version_check() ok to use with libpng version 1.10.x
and later.
2012-11-22 16:58:30 -06:00
John Bowler
70850fce0c [libpng16] Fixed error checking in the simplified write API (Olaf van der Spek) 2012-11-15 00:06:30 -06:00
Glenn Randers-Pehrson
9d1ddbb78f [libpng16] Fixed several typos and expanded TAB characters. 2012-11-13 19:45:53 -06:00
John Bowler
f2aacefb3f [libpng16] 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.
2012-11-13 19:18:53 -06:00
John Bowler
4314d63792 [libpng16] Fixed an intermittent SEGV in pngstest. 2012-11-02 14:08:29 -05:00
Glenn Randers-Pehrson
7b3eefbcfd [libpng16] Bump version to 1.6.0beta32 2012-11-01 08:37:52 -05:00
Glenn Randers-Pehrson
bb39dc545c [libpng16] Imported from libpng-1.6.0beta31.tar 2012-11-01 08:26:57 -05:00
John Bowler
520803d57e [libpng16] Removed non-working ICC profile support code. There was too much
code for too little gain; implementing full ICC color correction is maybe
desireable but is left up to applications.
2012-11-01 08:12:47 -05:00
John Bowler
7f912dbeb5 [libpng16] Fixed GUIDs in projects/vstudio. Some were duplicated or missing,
resulting in VS2010 having to update the files.
2012-10-27 13:04:56 -05:00
John Bowler
ab1477d662 [libpng16] 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).
2012-10-27 06:57:12 -05:00
John Bowler
f0fb1746b0 [libpng16] Make builds -DPNG_NO_READ_GAMMA compile (the unit tests still fail). 2012-10-26 08:29:45 -05:00
John Bowler
f8dfd123e2 [libpng16] Changed ICC profile support to allow use of an external color
management system (CMS). In practice it is not possible to obtain cHRM
information reliably using just the end-point tags because they do not exist
in the vast majority of profiles.  Instead it is necessary to run the endpoints
through the ICC colorimetric intent transform (as described in the v4
spec).  Since this is likely to be too much code inside libpng for too
little gain (it implies a fairly complete CMS implementation) the code
has been changed to allow an external CMS to be used.  This code is
temporarily disabled until a suitable set of test cases using one or more
external CMS implementations have been implemented.
2012-10-25 19:30:02 -05:00
John Bowler
e6b710cb3f [libpng16] Made pngvalid so that it will build outside the libpng source tree. 2012-10-25 19:15:55 -05:00
John Bowler
be85fa6027 [libpng16] Undid the erroneous change to vstudio/pngvalid build in
libpng-1.6.0beta30.
2012-10-25 19:09:55 -05:00
Glenn Randers-Pehrson
43648b02bc [libpng16] Bump version to 1.6.0beta31 2012-10-24 11:37:18 -05:00
Glenn Randers-Pehrson
75fde9e99a [libpng16] Imported from libpng-1.6.0beta30.tar 2012-10-24 11:37:08 -05:00
Glenn Randers-Pehrson
9a82547afe [libpng16] Fixed build when using #define PNG_NO_READ_GAMMA in png_do_compose()
in pngrtran.c (Domani Hannes).
2012-10-24 11:22:35 -05:00
Glenn Randers-Pehrson
a9f44be8c2 [libpng16] Minor documentation edits 2012-10-10 15:02:00 -05:00
John Bowler
e15b1e8136 [libpng16] Added pngunknown files that were omitted from previous checkin 2012-09-30 14:10:43 -05:00
John Bowler
fa63beaa34 [libpng16] 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.
2012-09-30 06:53:50 -05:00
John Bowler
c39be26f5a [libpng16] Add updated WARNING file from libpng 1.5/vstudio 2012-09-29 17:48:53 -05:00
Glenn Randers-Pehrson
6ae34790cc [libpng16] Added -DZ_SOLO to contrib/pngminim/*/makefile so they will work
with zlib-1.2.7
2012-09-27 18:52:30 -05:00
John Bowler
8de49d0921 [libpng16] Marked the broken (bad white point) original HP sRGB profiles
correctly and correct comments.
2012-09-27 09:26:49 -05:00
John Bowler
48cbba8e8e [libpng16] Added a work around for GCC 4.2 optimization bug 2012-09-06 15:47:49 -05:00
John Bowler
b257147015 [libpng16] Changed ICC profile matrix/vector types to not depend on array
type rules.  By the ANSI-C standard the new types should be identical to the
previous versions, and all known versions of gcc tested with the previous
versions except for GCC-4.2.1 work with this version.  The change makes the
ANSI-C rule that const applied to an array of elements applies instead to the
elements in the array moot by explicitly applying const to the base
elements of the png_icc_matrix and png_icc_vector types. The accidental
(harmless) 'const' previously applied to the parameters of two of the
functions have also been removed.
2012-09-06 12:17:00 -05:00
Glenn Randers-Pehrson
73f826cb49 [libpng16] Fixed spelling of "chromaticAdaptationTag" in error messages. 2012-09-05 09:14:37 -05:00
Glenn Randers-Pehrson
933bc842ac [libpng16] Fix confusion between "adopted" and "adapted" in new comments.
Glenn thought the "adopted" were typos and changed them all to "adapted".
This reverts the spelling and adds parenthetical comments when each
word first appears in png.h.
2012-09-04 20:16:25 -05:00
Glenn Randers-Pehrson
329d033d25 [libpng16] Bump version to 1.6.0beta30 2012-09-04 16:59:30 -05:00
Glenn Randers-Pehrson
9c06d78468 [libpng16] Imported from libpng-1.6.0beta29.tar 2012-09-04 16:59:12 -05:00
John Bowler
b98681b49a [libpng16] Improved ICC profile handling including cHRM chunk generation and
fixed Cygwin+MSVC build errors. The ICC profile handling now includes more
checking.  Several errors that caused rejection of the profile are now
handled with a warning in such a way that the invalid profiles will be
read by default in release (but not pre-RC) builds but will not be
written by default.  The easy part of handling a cHRM chunk is written,
where the ICC profile contains the required data.  The more difficult
part plus guessing a gAMA value requires code to pass selected RGB values
through the profile.
2012-09-04 16:35:20 -05:00
John Bowler
53f7051b1b [libpng] Fixed contrib/examples/png2png.c 2012-09-01 13:26:41 -05:00
John Bowler
d099973c4f [libpng16] 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.
2012-09-01 11:46:14 -05:00
Glenn Randers-Pehrson
97a77a6f7b [libpng16] Updated simplified API synopses and description of the png_image
structure in the manual.
2012-09-01 08:16:51 -05:00
Glenn Randers-Pehrson
b2aba47a6d [libpng16] Added contrib/examples/* to the *.zip and *.7z distributions. 2012-09-01 06:40:48 -05:00
John Bowler
ed3ca0e3eb [libpng16] Fixed the simplified API example programs and improved the error
message if the version field is not set.
2012-08-31 17:32:36 -05:00
Glenn Randers-Pehrson
fd043e5d0d [libpng16] Bump version to 1.6.0beta29 2012-08-29 14:18:24 -05:00
Glenn Randers-Pehrson
cc02f89eb2 [libpng16] Imported from libpng-1.6.0beta28.tar 2012-08-29 14:18:15 -05:00
John Bowler
14d0ca620e [libpng16] 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.
2012-08-25 16:21:46 -05:00
John Bowler
8010217201 [libpng16] Minor cleanup of iCCP processing 2012-08-22 11:26:25 -05:00
Glenn Randers-Pehrson
702053d110 [libpng16] Bump version to 1.6.0beta28 2012-08-17 21:54:45 -05:00
John Bowler
74a9c07fdd [libpng16] Revised Makefile.am to add unknown test support 2012-08-17 17:40:41 -05:00
John Bowler
d0eef28ee1 [libpng16] 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.
2012-08-17 15:30:29 -05:00
John Bowler
3c1f6983c5 [libpng16] 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).
2012-08-16 20:47:34 -05:00
John Bowler
4a6c6df6c7 [libpng16] 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.
2012-08-16 16:12:13 -05:00
Glenn Randers-Pehrson
025d415838 [libpng16] Folded long lines and fixed some grammar. 2012-08-16 00:51:44 -05:00
Glenn Randers-Pehrson
810c99583b [libpng16] Fixed some spelling errors. 2012-08-15 23:20:47 -05:00
John Bowler
e9567514dd [libpng16] 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.
2012-08-15 22:53:00 -05:00
Glenn Randers-Pehrson
b593b3f035 [libpng16] Bump version to 1.6.0beta28 2012-08-11 18:32:36 -05:00
Glenn Randers-Pehrson
0f08665bfb [libpng16] Imported from libpng-1.6.0beta27.tar 2012-08-11 18:31:44 -05:00
Glenn Randers-Pehrson
3744f94fd1 [libpng16] Removed trailing blanks 2012-08-10 19:22:53 -05:00
John Bowler
aa9dea57d7 [libpng16] Work around gcc 3.x and Microsoft Visual Studio 2010 complaints.
Both object to the split initialization of num_chunks.
2012-08-10 19:04:08 -05:00
Glenn Randers-Pehrson
ece07cfe9c [libpng16] Removed the png_sizeof(), png_strlen(), png_memset(), png_memcpy(),
and png_memcmp() macros.
2012-08-10 18:19:41 -05:00
Glenn Randers-Pehrson
dbb7e19fda [libpng16] Consistently use memset(), memcpy(), and memcmp() instead of the
png_memset(), png_memcpy(), and png_memcmp() macros.
2012-08-10 17:27:42 -05:00
John Bowler
e2098ba085 [libpng16] 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.
2012-08-10 17:04:56 -05:00
Glenn Randers-Pehrson
26849f4693 [libpng16] Consistently use png_memset(), png_memcpy(), and png_memcmp(),
except in pngtest.c and example.c where these macros are not visible.
2012-08-10 16:01:45 -05:00
John Bowler
ad5a993954 [libpng16] 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).
2012-08-10 13:15:07 -05:00
Glenn Randers-Pehrson
6954141484 [libpng16] Add more conditionals for compiling png_fixed().
This is a small function, but avoiding compiling it also avoids needing
to link with "-lm" unnecessarily.
2012-08-10 12:56:57 -05:00
John Bowler
ba2dd33d9c [libpng16] Some files were omitted from a previous checkin. Here they are. 2012-08-10 10:58:01 -05:00
John Bowler
134c5761fa [libpng16] Fix new leak when text compression is disabled. 2012-08-10 10:49:21 -05:00
John Bowler
865e14fd32 [libpng16] Revised comments about info_ptr->signature, added CHANGES entry. 2012-08-10 08:05:53 -05:00
Glenn Randers-Pehrson
5d1df4fdf4 [libpng16] Removed png_get_signature() and info_ptr->signature from WRITE-only
builds.  Restored png_get_channels() to WRITE-only builds.
2012-08-10 07:49:44 -05:00
John Bowler
8d3453a22d [libpng16] 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.
2012-08-09 22:57:35 -05:00
Glenn Randers-Pehrson
4430b91363 [libpng16] Restore info_ptr members that were deleted by the previous
patch; they are needed by png_set_IHDR() for both read and write.  Fix
some ifdefs that caused the contrib/pngminim/ applications to not compile.
2012-08-09 22:24:04 -05:00
John Bowler
dff6f4c4f0 [libpng16Cleanup 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.
2012-08-09 21:17:56 -05:00
Glenn Randers-Pehrson
432c174b64 [libpng16] Eliminated use of png_sizeof(); use sizeof() instead, and use.
a consistent style for (sizeof type) and (sizeof (array))
2012-08-09 20:14:48 -05:00
John Bowler
5f5977e708 [libpng16] 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().
2012-08-09 16:42:42 -05:00
John Bowler
0a9f8eb272 [libpng16] 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.
2012-08-09 07:35:50 -05:00
Glenn Randers-Pehrson
cad0150d12 [libpng16] Corrected handling of row_pointers in example.c and added some
comments.  It has apparently been wrong since libpng-1.0.1c (confusing
use of a 1D and a 2D array for the image source).
2012-08-08 21:11:55 -05:00
Glenn Randers-Pehrson
ee427ad39a [libpng16] Add information about png_calloc() to the manual. 2012-08-03 08:39:54 -05:00
Glenn Randers-Pehrson
01b813000a [libpng16] Removed references to png_zalloc() and png_zfree() from the manual.
They have not been exported to applications since libpng12.
2012-08-03 07:23:42 -05:00
Glenn Randers-Pehrson
449db5a9c1 [libpng16] Check for existence of __GNUC_MINOR__ before testing its value
(This is probably unnecessary because it's inside a __GNUC__ block.)
2012-07-21 13:18:42 -05:00
Glenn Randers-Pehrson
80b67e47e8 [libpng16] Added default blank "#define PNG_RESTRICT" to pngconf.h
This has been missing since the feature was introduced in libpng-1.6.0beta04.
2012-07-21 12:56:46 -05:00
Glenn Randers-Pehrson
0a9f26e219 [libpng16] Do not use __restrict when GNUC is <= 3.1 2012-07-21 11:16:17 -05:00
Glenn Randers-Pehrson
05ed18e7d1 [libpng16] Bump version to 1.6.0beta27 2012-07-21 11:02:42 -05:00
Glenn Randers-Pehrson
edb3523a9b [libpng16] Imported from libpng-1.6.0beta26.tar 2012-07-10 21:00:41 -05:00
Glenn Randers-Pehrson
46cb5109bd [libpng16] Moved scripts/chkfmt to contrib/tools. 2012-06-25 14:14:17 -05:00
Glenn Randers-Pehrson
5845d3eabd [libpng16] Removed scripts/makefile.cegcc from the *.zip and *.7z
distributions; it depends on configure, which is not included in those
archives.
2012-06-25 09:11:53 -05:00
Glenn Randers-Pehrson
4a37149f66 [libpng16] Bump version to 1.6.0beta26 2012-06-16 14:50:34 -05:00
Glenn Randers-Pehrson
fc58b17772 [libpng16] Imported from libpng-1.6.0beta25.tar 2012-06-16 14:42:22 -05:00
Glenn Randers-Pehrson
96b917056d [libpng16] 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.
2012-06-16 13:26:28 -05:00
Glenn Randers-Pehrson
0546e4e579 [libpng16] Document deprecation of png_convert_to_rfc1123() and its
replacement with png_convert_to_rfc1123_buffer().
2012-06-12 13:06:52 -05:00
Glenn Randers-Pehrson
05af5cd8fb [libpng16] Fixed some typos and grammar in manual and comments 2012-06-09 10:35:17 -05:00
Glenn Randers-Pehrson
d630301d99 [libpng16] Bump version to 1.6.0beta25 2012-06-07 10:29:14 -05:00
Glenn Randers-Pehrson
2ec8409046 [libpng16] Imported from libpng-1.6.0beta24.tar 2012-06-07 10:29:06 -05:00
Glenn Randers-Pehrson
905cc94e3d [libpng16] Don't check palette indexes if num_palette is 0 (as it can be in
MNG files).
2012-06-07 10:18:25 -05:00
Glenn Randers-Pehrson
8f424b8270 [libpng16] Bump version to 1.6.0beta24 2012-06-06 13:54:41 -05:00
Glenn Randers-Pehrson
cc46157421 [libpng16] Imported from libpng-1.6.0beta23.tar 2012-06-06 13:54:28 -05:00
Glenn Randers-Pehrson
14ca47b453 [libpng16] 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.
2012-06-06 13:30:30 -05:00
Glenn Randers-Pehrson
b1e7771d5e [libpng16] Do not depend upon a GCC feature macro being available for use in
generating the linker mapfile symbol prefix.
2012-06-03 19:30:02 -05:00
Glenn Randers-Pehrson
ff7b7ba060 [libpng16] 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.
2012-06-03 19:17:48 -05:00
Glenn Randers-Pehrson
1935d0738f [libpng16] Revised CMakeLists.txt to not attempt to make a symlink under mingw. 2012-05-29 05:50:04 -05:00
Glenn Randers-Pehrson
04c1c078b9 [libpng16] Bump version to 1.6.0beta23 2012-05-23 13:19:38 -05:00
Glenn Randers-Pehrson
8f4d67218e [libpng16] Imported from libpng-1.6.0beta22.tar 2012-05-23 13:19:30 -05:00
John Bowler
15f6fd3492 [libpng16] checked in contrib/libtests/pngstest.c which was omitted 2012-04-30 13:59:58 -05:00
John Bowler
b45416921b [libpng16] 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 clang warns about either (pngread.c) by eliminating the
casts from png_bytep to png_uint_16p 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.
2012-04-30 06:31:54 -05:00
Glenn Randers-Pehrson
040575c80b [libpng16] Bump version to 1.6.0beta22 2012-04-28 06:34:57 -05:00
Glenn Randers-Pehrson
43309056ac [libpng16] Imported from libpng-1.6.0beta21.tar 2012-04-28 06:34:48 -05:00
Glenn Randers-Pehrson
bc2a57f657 [libpng16] Changed deprecated NOOBJ and NOPROFILE to NO_OBJ and NO_PROFILE in
scripts/makefile.freebsd
2012-04-28 05:48:21 -05:00
Glenn Randers-Pehrson
56f22f4320 [libpng16] Added -lssp_nonshared in a comment in scripts/makefile.freebsd 2012-04-26 08:57:58 -05:00
Glenn Randers-Pehrson
cd39adb561 [libpng16] Removed #ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED in pngpriv.h around
declaration of png_handle_unknown().
2012-04-23 23:12:39 -05:00
Glenn Randers-Pehrson
b4f5c42092 [libpng16] 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 (Toby Thain).
2012-04-13 12:36:22 -05:00
Glenn Randers-Pehrson
e243a1fbd8 [libpng16] Enable png_set_check_for_invalid_index() for both read and write. 2012-04-13 12:35:21 -05:00
Glenn Randers-Pehrson
747b554a86 [libpng16] Edited new commentary in png.c 2012-03-29 08:28:19 -05:00
Glenn Randers-Pehrson
f229d4df3a [libpng16] Bump version to 1.6.0beta21 2012-03-29 07:42:45 -05:00
Glenn Randers-Pehrson
96027d919f [libpng16] Imported from libpng-1.6.0beta20.tar 2012-03-29 06:38:51 -05:00
Glenn Randers-Pehrson
58f277c18e [libpng16] Revised png_set_text_2() to avoid potential memory corruption.
Fixes CVE-2011-3048.
2012-03-28 23:37:25 -05:00
John Bowler
921648a997 [libpng16] 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.
2012-03-28 23:36:12 -05:00
John Bowler
23a30f8583 [libpng16] Prevent PNG_EXPAND+PNG_SHIFT doing the shift twice. 2012-03-28 11:38:02 -05:00
Glenn Randers-Pehrson
48015617d3 [libpng16] Recognize known sRGB ICC profiles while reading and issue a warning
about it, if PNG_WARN_IF_iCCP_IS_sRGB_SUPPORTED is defined.
2012-03-28 10:58:01 -05:00
John Bowler
13a87d9682 [libpng16] Fixed ICC profile parsing and sRGB profile recognition
and moved checksum-icc.c from contrib/libtests to contrib/tools.
2012-03-28 09:51:43 -05:00
John Bowler
c1217ee280 [libpng16] Write the profile MD5s from checksum-icc (and the date) 2012-03-22 07:53:00 -05:00
John Bowler
51d1e2be1b [libng16] Added checksum-icc.c to contrib/libtests 2012-03-22 07:36:13 -05:00
John Bowler
f7677a348e [libpng16] Use uLong 64 bits for crc32 return in profile check 2012-03-21 23:52:41 -05:00
Glenn Randers-Pehrson
8fbd60ded2 [libpng16] Recognize known sRGB ICC profiles while reading and handle them as
if the sRGB chunk had appeared instead.
2012-03-21 09:18:15 -05:00
John Bowler
b11b31aea2 [libpng16] Changed chunk handler warnings into benign errors, incrementally
load iCCP
2012-03-21 07:55:46 -05:00
Glenn Randers-Pehrson
51624965e2 [libpng16] Bump version to 1.6.0beta20 2012-03-19 11:04:48 -05:00
Glenn Randers-Pehrson
ce9d8a3f48 [libpng16] Imported from libpng-1.6.0beta19.tar 2012-03-19 10:54:55 -05:00
John Bowler
eda53e5770 [libpng16] Avoid the double gamma correction warning in the simplified API.
This allows the --strict option to pass in the pngstest checks
2012-03-18 22:46:28 -05:00
John Bowler
2bc76ffaf1 [ibpng16] 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.
2012-03-18 22:37:25 -05:00
John Bowler
66efa24241 [libpng16] 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.
2012-03-18 21:10:29 -05:00
John Bowler
0c11b5f8e7 [libpng16] 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.
2012-03-18 14:39:41 -05:00
Glenn Randers-Pehrson
f5dcba6b9b [libpng16] Never mind, undid previous change. 2012-03-17 00:21:45 -05:00
Glenn Randers-Pehrson
c26d6e9aac [libpng16] Revised png_set_text_2() to avoid possible memory corruption
when writing.
2012-03-16 23:19:02 -05:00
Glenn Randers-Pehrson
42ed02ed9a [libpng16] Reverted png_set_itxt(); it would not compile without warnings. 2012-03-16 23:17:27 -05:00
Glenn Randers-Pehrson
31d66245ea [libpng16] Added png_set_itxt() (work in progress) 2012-03-16 13:53:25 -05:00
Glenn Randers-Pehrson
d9d7a7e8f0 [libpng16] Fixed ANNOUNCE and CHANGES re simplified API and benign errors. 2012-03-16 11:04:30 -05:00
Glenn Randers-Pehrson
d15d124d6d [libpng16] Bump version to 1.6.0beta19 2012-03-16 08:35:36 -05:00
Glenn Randers-Pehrson
dd6ecbe688 [libpng16] Imported from libpng-1.6.0beta18.tar 2012-03-16 08:34:31 -05:00
John Bowler
aa816c4444 [libpng16] 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 errors (regardless of the system default, unless
this is disabled in which case the simplified API can't be built.)
2012-03-16 07:39:49 -05:00
John Bowler
209b3e4b79 [libpng16] Added output flushing to aid debugging under Visual Studio.
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!)
2012-03-16 07:14:01 -05:00
Glenn Randers-Pehrson
f2715a558a [libpng16] 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.
2012-03-15 19:52:03 -05:00
John Bowler
845ee6af72 [libpng16] Fixed a compiler warning under Cygwin (Windows-7, 32-bit system) 2012-03-10 21:05:19 -06:00
John Bowler
9ff37ea94f [libpng16] Fix an off-by-one error in the palette index checking function. 2012-03-10 20:03:06 -06:00
Glenn Randers-Pehrson
35f2e1768b [libpng16] In pngtest, treat benign errors as errors if "-strict" is present. 2012-03-10 19:42:03 -06:00
Glenn Randers-Pehrson
945cb1f9be [libpng16] Issue a png_benign_error() instead of png_warning() about bad
palette index.
2012-03-10 08:48:04 -06:00
Glenn Randers-Pehrson
71db131882 [libpng16] Bump version to 1.6.0beta18 2012-03-09 22:15:09 -06:00
322 changed files with 29570 additions and 11535 deletions

359
ANNOUNCE
View File

@@ -1,5 +1,4 @@
Libpng 1.6.19beta04 - October 15, 2015
Libpng 1.6.0beta17 - March 10, 2012
This is not intended to be a public release. It will be replaced This is not intended to be a public release. It will be replaced
within a few weeks by a public version or by another test version. within a few weeks by a public version or by another test version.
@@ -9,294 +8,100 @@ 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
1.6.0beta17.tar.xz (LZMA-compressed, recommended) 1.6.19beta04.tar.xz (LZMA-compressed, recommended)
1.6.0beta17.tar.gz 1.6.19beta04.tar.gz
1.6.0beta17.tar.bz2
Source files with CRLF line endings (for Windows), without the Source files with CRLF line endings (for Windows), without the
"configure" script "configure" script
lp160b17.7z (LZMA-compressed, recommended) lp1619b04.7z (LZMA-compressed, recommended)
lp160b17.zip lp1619b04.zip
Other information: Other information:
1.6.0beta17-README.txt 1.6.19beta04-README.txt
1.6.0beta17-LICENSE.txt 1.6.19beta04-LICENSE.txt
libpng-1.6.19beta04-*.asc (armored detached GPG signatures)
Changes since the last public release (1.5.7): Changes since the last public release (1.6.18):
Version 1.6.0beta01 [December 15, 2011] Version 1.6.19beta01 [July 30, 2015]
Removed machine-generated configure files from the GIT repository (they will
continue to appear in the tarball distributions).
Restored the new 'simplified' API, which was started in libpng-1.5.7beta02
but later deleted from libpng-1.5.7beta05.
Added example programs for the new 'simplified' API.
Added ANSI-C (C90) headers and require them, and take advantage of the
change. Also fixed some of the projects/* and contrib/* files that needed
updates for libpng16 and the move of pngvalid.c.
With this change the required ANSI-C header files are assumed to exist: the
implementation must provide float.h, limits.h, stdarg.h and stddef.h and
libpng relies on limits.h and stddef.h existing and behaving as defined
(the other two required headers aren't used). Non-ANSI systems that don't
have stddef.h or limits.h will have to provide an appropriate fake
containing the relevant types and #defines.
The use of FAR/far has been eliminated and the definition of png_alloc_size_t
is now controlled by a flag so that 'small size_t' systems can select it
if necessary. Libpng 1.6 may not currently work on such systems -- it
seems likely that it will ask 'malloc' for more than 65535 bytes with any
image that has a sufficiently large row size (rather than simply failing
to read such images).
New tools directory containing tools used to generate libpng code.
Fixed race conditions in parallel make builds. With higher degrees of
parallelism during 'make' the use of the same temporary file names such
as 'dfn*' can result in a race where a temporary file from one arm of the
build is deleted or overwritten in another arm. This changes the
temporary files for suffix rules to always use $* and ensures that the
non-suffix rules use unique file names.
Version 1.6.0beta02 [December 21, 2011] Updated obsolete information about the simplified API macros in the
Correct configure builds where build and source directories are separate. manual pages (Bug report by Arc Riley).
The include path of 'config.h' was erroneously made relative in pngvalid.c Avoid potentially dereferencing NULL info_ptr in png_info_init_3().
in libpng 1.5.7. Rearranged png.h to put the major sections in the same order as
in libpng17.
Eliminated unused PNG_COST_SHIFT, PNG_WEIGHT_SHIFT, PNG_COST_FACTOR, and
PNG_WEIGHT_FACTOR macros.
Suppressed some warnings from the Borland C++ 5.5.1/5.82 compiler
(Bug report by Viktor Szakats). Several warnings remain and are
unavoidable, where we test for overflow.
Fixed potential leak of png_pixels in contrib/pngminus/pnm2png.c
Fixed uninitialized variable in contrib/gregbook/rpng2-x.c
Version 1.6.0beta03 [December 22, 2011] Version 1.6.19beta02 [August 19, 2015]
Start-up code size improvements, error handler flexibility. These changes Moved config.h.in~ from the "libpng_autotools_files" list to the
alter how the tricky allocation of the initial png_struct and png_info "libpng_autotools_extra" list in autogen.sh because it was causing a
structures are handled. png_info is now handled in pretty much the same false positive for missing files (bug report by Robert C. Seacord).
way as everything else, except that the allocations handle NULL return Removed unreachable "break" statements in png.c, pngread.c, and pngrtran.c
silently. png_struct is changed in a similar way on allocation and on to suppress clang warnings (Bug report by Viktor Szakats).
deallocation a 'safety' error handler is put in place (which should never Fixed some bad links in the man page.
be required). The error handler itself is changed to permit mismatches Changed "n bit" to "n-bit" in comments.
in the application and libpng error buffer size; however, this means a Added signed/unsigned 16-bit safety net. This removes the dubious
silent change to the API to return the jmp_buf if the size doesn't match 0x8000 flag definitions on 16-bit systems. They aren't supported
the size from the libpng compilation; libpng now allocates the memory and yet the defs *probably* work, however it seems much safer to do this
this may fail. Overall these changes result in slight code size and be advised if anyone, contrary to advice, is building libpng 1.6
reductions; however, this is a reduction in code that is always executed on a 16-bit system. It also adds back various switch default clauses
so is particularly valuable. Overall on a 64-bit system the libpng DLL for GCC; GCC errors out if they are not present (with an appropriately
decreases in code size by 1733 bytes. pngerror.o increases in size by high level of warnings).
about 465 bytes because of the new functionality. Safely convert num_bytes to a png_byte in png_set_sig_bytes() (Robert
Seacord).
Fixed the recently reported 1's complement security issue by replacing
the value that is illegal in the PNG spec, in both signed and unsigned
values, with 0. Illegal unsigned values (anything greater than or equal
to 0x80000000) can still pass through, but since these are not illegal
in ANSI-C (unlike 0x80000000 in the signed case) the checking that
occurs later can catch them (John Bowler).
Version 1.6.0beta04 [December 30, 2011] Version 1.6.19beta03 [September 26, 2015]
Regenerated configure scripts with automake-1.11.2 Fixed png_save_int_32 when int is not 2's complement (John Bowler).
Eliminated png_info_destroy(). It is now used only in png.c and only calls Updated libpng16 with all the recent test changes from libpng17,
one other internal function and memset(). including changes to pngvalid.c to ensure that the original,
Enabled png_get_sCAL_fixed() if floating point APIs are enabled. Previously distributed, version of contrib/visupng/cexcept.h can be used
it was disabled whenever internal fixed point arithmetic was selected, (John Bowler).
which meant it didn't exist even on systems where FP was available but not pngvalid contains the correction to the use of SAVE/STORE_
preferred. UNKNOWN_CHUNKS; a bug revealed by changes in libpng 1.7. More
Added pngvalid.c compile time checks for const APIs. tests contain the --strict option to detect warnings and the
Implemented 'restrict' for png_info and png_struct. Because of the way pngvalid-standard test has been corrected so that it does not
libpng works both png_info and png_struct are always accessed via a turn on progressive-read. There is a separate test which does
single pointer. This means adding C99 'restrict' to the pointer gives that. (John Bowler)
the compiler some opportunity to optimize the code. This change allows Also made some signed/unsigned fixes.
that. Make pngstest error limits version specific. Splitting the machine
Moved AC_MSG_CHECKING([if libraries can be versioned]) later to the proper generated error structs out to a file allows the values to be updated
location in configure.ac (Gilles Espinasse). without changing pngstest.c itself. Since libpng 1.6 and 1.7 have
Changed png_memcpy to C assignment where appropriate. Changed all those slightly different error limits this simplifies maintenance. The
uses of png_memcpy that were doing a simple assignment to assignments makepngs.sh script has also been updated to more accurately reflect
(all those cases where the thing being copied is a non-array C L-value). current problems in libpng 1.7 (John Bowler).
Added some error checking to png_set_*() routines. Incorporated new test PNG files into make check. tests/pngstest-*
Removed the reference to the non-exported function png_memcpy() from are changed so that the new test files are divided into 8 groups by
example.c. gamma and alpha channel. These tests have considerably better code
Fixed the Visual C 64-bit build - it requires jmp_buf to be aligned, but and pixel-value coverage than contrib/pngsuite; however,coverage is
it had become misaligned. still incomplete (John Bowler).
Revised contrib/pngminus/pnm2png.c to avoid warnings when png_uint_32 Removed the '--strict' in 1.6 because of the double-gamma-correction
and unsigned long are of different sizes. warning, updated pngstest-errors.h for the errors detected with the
new contrib/testspngs PNG test files (John Bowler).
Version 1.6.0beta05 [January 15, 2012] Version 1.6.19beta04 [October 15, 2015]
Updated manual with description of the simplified API (copied from png.h) Worked around rgb-to-gray issues in libpng 1.6. The previous
Fix bug in pngerror.c: some long warnings were being improperly truncated attempts to ignore the errors in the code aren't quite enough to
(CVE-2011-3464, bug introduced in libpng-1.5.3beta05). deal with the 'channel selection' encoding added to libpng 1.7; abort.
Fixed 'pow' macros in pngvalid.c. It is legal for 'pow' to be a
Version 1.6.0beta06 [January 24, 2012] macro, therefore the argument list cannot contain preprocessing
Added palette support to the simplified APIs. This commit directives. Make sure pow is a function where this happens. This is
changes some of the macro definitions in png.h, app code a minimal safe fix, the issue only arises in non-performance-critical
may need corresponding changes. code (bug report by Curtis Leach, fix by John Bowler).
Increased the formatted warning buffer to 192 bytes. Added sPLT support to pngtest.c
Added color-map support to simplified API. This is an initial version for
review; the documentation has not yet been updated.
Fixed Min/GW uninstall to remove libpng.dll.a
Version 1.6.0beta07 [January 28, 2012]
Eliminated Intel icc/icl compiler warnings. The Intel (GCC derived)
compiler issues slightly different warnings from those issued by the
current vesions of GCC. This eliminates those warnings by
adding/removing casts and small code rewrites.
Updated configure.ac from autoupdate: added --enable-werror option.
Also some layout regularization and removal of introduced tab characters
(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 atar 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.
Version 1.6.0beta08 [February 1, 2012]
Fixed Image::colormap misalignment in pngstest.c
Check libtool/libtoolize version number (2.4.2) in configure.ac
Divide test-pngstest.sh into separate pngstest runs for basic and
transparent images.
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
Improved pngstest speed by not doing redundant tests and add const to
the background parameter of png_image_finish_read. The --background
option is now done automagically only when required, so that commandline
option no longer exists.
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.
Fixed 'prefix' builds on clean systems. The generation of pngprefix.h
should not require itself.
Updated INSTALL to explain that autogen.sh must be run in a GIT clone,
not in a libpng directory extracted from a tar distribution.
Version 1.6.0beta09 [February 1, 2012]
Reverted the prebuilt configure files to libpng-1.6.0beta05 condition.
Version 1.6.0beta10 [February 3, 2012]
Added Z_SOLO for zlib-1.2.6+ and correct pngstest tests
Updated list of test images in CMakeLists.txt
Updated the prebuilt configure files to current condition.
Revised INSTALL information about autogen.sh; it works in tar distributions.
Version 1.6.0beta11 [February 16, 2012]
Fix character count in pngstest command in projects/owatcom/pngstest.tgt
Revised test-pngstest.sh to report PASS/FAIL for each image.
Updated documentation about the simplified API.
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 and increase png_ptr->num_palette accordingly.
Apps are responsible for checking to see if that happened.
Version 1.6.0beta12 [February 18, 2012]
Do not increase num_palette on invalid_index.
Relocated check for invalid palette index to pngrtran.c, after unpacking
the sub-8-bit pixels.
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.
Version 1.6.0beta13 [February 24, 2012]
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.
Version 1.6.0beta14 [February 27, 2012]
Added information about the new limits in the manual.
Updated Makefile.in
Version 1.6.0beta15 [March 2, 2012]
Removed unused "current_text" members of png_struct and the png_free()
of png_ptr->current_text from pngread.c
Rewrote pngstest.c for substantial speed improvement.
Fixed transparent pixel and 16-bit rgb tests in pngstest and removed a
spurious check in pngwrite.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.
Added tests for invalid palette index while reading and writing (work in
progress, the latter isn't finished).
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.
Version 1.6.0beta16 [March 6, 2012]
Relocated palette-index checking function from pngrutil.c to pngtrans.c
Added palette-index checking while 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.
Fixed build warnings (MSVC, GCC, GCC v3). Cygwin GCC with default options
declares 'index' as a global, causing a warning if it is used as a local
variable. GCC 64-bit warns about assigning a (size_t) (unsigned 64-bit)
to an (int) (signed 32-bit). MSVC, however, warns about using the
unary '-' operator on an unsigned value (even though it is well defined
by ANSI-C to be ~x+1). The padding calculation was changed to use a
different method. Removed the tests on png_ptr->pass.
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).
Version 1.6.0beta17 [March 10, 2012]
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.
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

1412
CHANGES

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
# CMakeLists.txt # CMakeLists.txt
# Copyright (C) 2007-2011 Glenn Randers-Pehrson # Copyright (C) 2007-2015 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 19)
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})
@@ -49,8 +30,7 @@ if(NOT WIN32)
PATHS /usr/lib /usr/local/lib PATHS /usr/lib /usr/local/lib
) )
if(NOT M_LIBRARY) if(NOT M_LIBRARY)
message(STATUS message(STATUS "math lib 'libm' not found; floating point support disabled")
"math library 'libm' not found - floating point support disabled")
endif() endif()
else() else()
# not needed on windows # not needed on windows
@@ -58,22 +38,14 @@ else()
endif() endif()
# COMMAND LINE OPTIONS # COMMAND LINE OPTIONS
if(DEFINED PNG_SHARED) option(PNG_SHARED "Build shared lib" ON)
option(PNG_SHARED "Build shared lib" ${PNG_SHARED}) option(PNG_STATIC "Build static lib" ON)
else() option(PNG_TESTS "Build libpng tests" ON)
option(PNG_SHARED "Build shared lib" ON)
endif()
if(DEFINED PNG_STATIC)
option(PNG_STATIC "Build static lib" ${PNG_STATIC})
else()
option(PNG_STATIC "Build static lib" ON)
endif()
option(PNG_TESTS "Build libpng tests" YES)
# Many more configuration options could be added here # Many more configuration options could be added here
option(PNG_DEBUG "Build with debug output" NO) option(PNG_FRAMEWORK "Build OS X framework" OFF)
option(PNGARG "Disable ANSI-C prototypes" NO) option(PNG_DEBUG "Build with debug output" OFF)
option(PNGARG "Disable ANSI-C prototypes" OFF)
# SET LIBNAME # SET LIBNAME
set(PNG_LIB_NAME png${PNGLIB_MAJOR}${PNGLIB_MINOR}) set(PNG_LIB_NAME png${PNGLIB_MAJOR}${PNGLIB_MINOR})
@@ -139,8 +111,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")
@@ -150,9 +125,10 @@ if(PNG_SHARED)
endif() endif()
if(PNG_STATIC) 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 +136,29 @@ 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(PNG_FRAMEWORK)
set(PNG_LIB_NAME_FRAMEWORK ${PNG_LIB_NAME}_framework)
add_library(${PNG_LIB_NAME_FRAMEWORK} SHARED ${libpng_sources})
list(APPEND PNG_LIB_TARGETS ${PNG_LIB_NAME_FRAMEWORK})
set_target_properties(${PNG_LIB_NAME_FRAMEWORK} PROPERTIES
FRAMEWORK TRUE
FRAMEWORK_VERSION ${PNGLIB_VERSION}
MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${PNGLIB_MAJOR}.${PNGLIB_MINOR}
MACOSX_FRAMEWORK_BUNDLE_VERSION ${PNGLIB_VERSION}
MACOSX_FRAMEWORK_IDENTIFIER org.libpng.libpng
XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
PUBLIC_HEADER "${libpng_public_hdrs}"
OUTPUT_NAME png)
target_link_libraries(${PNG_LIB_NAME_FRAMEWORK} ${ZLIB_LIBRARY} ${M_LIBRARY})
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, PNG_FRAMEWORK")
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()
@@ -219,18 +218,20 @@ ENDIF(NOT CMAKE_LIBRARY_OUTPUT_DIRECTORY)
# copies if different. # copies if different.
macro(CREATE_SYMLINK SRC_FILE DEST_FILE) macro(CREATE_SYMLINK SRC_FILE DEST_FILE)
FILE(REMOVE ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE}) FILE(REMOVE ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${DEST_FILE})
if(WIN32 AND NOT CYGWIN AND NOT MINGW) 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 MINGW) 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 make_directory ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
endif(WIN32 AND NOT CYGWIN AND NOT MINGW) 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)
endmacro() endmacro()
# libpng is a library so default to 'lib' # libpng is a library so default to 'lib'
@@ -260,7 +261,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.0beta17 # VERSION 16.${PNGLIB_RELEASE}.1.6.19beta04
VERSION 16.${PNGLIB_RELEASE}.0 VERSION 16.${PNGLIB_RELEASE}.0
SOVERSION 16 SOVERSION 16
CLEAN_DIRECT_OUTPUT 1) CLEAN_DIRECT_OUTPUT 1)
@@ -287,40 +288,34 @@ 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}) FRAMEWORK 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)
@@ -365,7 +360,7 @@ if(PNG_EXPORT_RULE AND NOT SKIP_INSTALL_EXPORT AND NOT SKIP_INSTALL_ALL )
install(EXPORT libpng DESTINATION lib/libpng FILE lib${PNG_LIB_NAME}.cmake) install(EXPORT libpng DESTINATION lib/libpng FILE lib${PNG_LIB_NAME}.cmake)
endif() endif()
# what's with libpng-$VER%.txt and all the extra files? # what's with libpng-manual.txt and all the extra files?
# UNINSTALL # UNINSTALL
# do we need this? # do we need this?

302
INSTALL
View File

@@ -1,13 +1,47 @@
Installing libpng Installing libpng
Contents
I. Simple installation
II. Rebuilding the configure scripts
III. Using scripts/makefile*
IV. Using cmake
V. Directory structure
VI. Building with project files
VII. Building with makefiles
VIII. Configuring libpng for 16-bit platforms
IX. Configuring for DOS
X. Configuring for Medium Model
XI. Prepending a prefix to exported symbols
XII. Configuring for compiler xxx:
XIII. Removing unwanted object code
XIV. Changes to the build and configuration of libpng in libpng-1.5.x
XV. Setjmp/longjmp issues
XVI. Other sources of information about libpng
I. Simple installation
On Unix/Linux and similar systems, you can simply type On Unix/Linux and similar systems, you can simply type
./configure [--prefix=/path] ./configure [--prefix=/path]
make check make check
make install make install
and ignore the rest of this document. and ignore the rest of this document. "/path" is the path to the directory
where you want to install the libpng "lib", "include", and "bin"
subdirectories.
If you downloaded a GIT clone, you will need to run ./autogen.sh before
running ./configure, to create "configure" and "Makefile.in" which are
not included in the GIT repository.
Note that "configure" is only included in the "*.tar" distributions and not
in the "*.zip" or "*.7z" distributions. If you downloaded one of those
distributions, see "Building with project files" or "Building with makefiles",
below.
II. Rebuilding the configure scripts
If configure does not work on your system, or if you have a need to If configure does not work on your system, or if you have a need to
change configure.ac or Makefile.am, and you have a reasonably change configure.ac or Makefile.am, and you have a reasonably
@@ -24,9 +58,12 @@ aren't using any of the included pre-built scripts, you can do this:
make install make install
make check make check
III. Using scripts/makefile*
Instead, you can use one of the custom-built makefiles in the Instead, you can use one of the custom-built makefiles in the
"scripts" directory "scripts" directory
cp scripts/pnglibconf.h.prebuilt pnglibconf.h
cp scripts/makefile.system makefile cp scripts/makefile.system makefile
make test make test
make install make install
@@ -38,8 +75,28 @@ Or you can use one of the "projects" in the "projects" directory.
Before installing libpng, you must first install zlib, if it Before installing libpng, you must first install zlib, if it
is not already on your system. zlib can usually be found 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; otherwise go to http://zlib.net. You can place
at the same level as libpng. zlib in in the same directory as libpng or in another directory.
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".
IV. Using cmake
If you want to use "cmake" (see www.cmake.org), type If you want to use "cmake" (see www.cmake.org), type
@@ -47,13 +104,15 @@ If you want to use "cmake" (see www.cmake.org), type
make make
make install make install
If your system already has a preinstalled zlib you will still need As when using the simple configure method described above, "/path" points to
to have access to the zlib.h and zconf.h include files that the installation directory where you want to put the libpng "lib", "include",
correspond to the version of zlib that's installed. and "bin" subdirectories.
V. Directory structure
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.8"
or "zlib125") so that you have directories called "zlib" and "libpng". or "zlib128") so that you have directories called "zlib" and "libpng".
Your directory structure should look like this: Your directory structure should look like this:
@@ -61,8 +120,7 @@ Your directory structure should look like this:
libpng (this directory) libpng (this directory)
INSTALL (this file) INSTALL (this file)
README README
*.h *.h, *.c => libpng source files
*.c
CMakeLists.txt => "cmake" script CMakeLists.txt => "cmake" script
configuration files: configuration files:
configure.ac, configure, Makefile.am, Makefile.in, configure.ac, configure, Makefile.am, Makefile.in,
@@ -70,14 +128,10 @@ Your directory structure should look like this:
libpng-config.in, aclocal.m4, config.h.in, config.sub, libpng-config.in, aclocal.m4, config.h.in, config.sub,
depcomp, install-sh, mkinstalldirs, test-pngtest.sh depcomp, install-sh, mkinstalldirs, test-pngtest.sh
contrib contrib
gregbook arm-neon, conftest, examples, gregbook, libtests, pngminim,
pngminim pngminus, pngsuite, tools, visupng
pngminus
pngsuite
visupng
projects projects
visualc71 cbuilder5, owatcom, visualc71, vstudio, xcode
vstudio
scripts scripts
makefile.* makefile.*
*.def (module definition files) *.def (module definition files)
@@ -85,29 +139,31 @@ Your directory structure should look like this:
pngtest.png pngtest.png
etc. etc.
zlib zlib
README README, *.h, *.c contrib, etc.
*.h
*.c
contrib
etc.
If the line endings in the files look funny, you may wish to get the other If the line endings in the files look funny, you may wish to get the other
distribution of libpng. It is available in both tar.gz (UNIX style line distribution of libpng. It is available in both tar.gz (UNIX style line
endings) and zip (DOS style line endings) formats. endings) and zip (DOS style line endings) formats.
VI. Building with project files
If you are building libpng with MSVC, you can enter the If you are building libpng with MSVC, you can enter the
libpng projects\visualc6 or visualc71 directory and follow the instructions libpng projects\visualc71 or vstudio directory and follow the instructions
in README.txt. in README.txt.
Otherwise enter the zlib directory and follow the instructions in zlib/README, Otherwise enter the zlib directory and follow the instructions in zlib/README,
then come back here and run "configure" or choose the appropriate then come back here and run "configure" or choose the appropriate
makefile.sys in the scripts directory. makefile.sys in the scripts directory.
VII. Building with makefiles
Copy the file (or files) that you need from the Copy the file (or files) that you need from the
scripts directory into this directory, for example scripts directory into this directory, for example
MSDOS example: copy scripts\makefile.msc makefile MSDOS example: copy scripts\makefile.msc makefile
UNIX example: cp scripts/makefile.std makefile copy scripts\pnglibconf.h.prebuilt pnglibconf.h
UNIX example: cp scripts/makefile.std makefile
cp scripts/pnglibconf.h.prebuilt pnglibconf.h
Read the makefile to see if you need to change any source or Read the makefile to see if you need to change any source or
target directories to match your preferences. target directories to match your preferences.
@@ -130,6 +186,202 @@ do that, run "make install" in the zlib directory first if necessary).
Some also allow you to run "make test-installed" after you have Some also allow you to run "make test-installed" after you have
run "make install". run "make install".
VIII. Configuring libpng for 16-bit platforms
You will want to look into zconf.h to tell zlib (and thus libpng) that
it cannot allocate more than 64K at a time. Even if you can, the memory
won't be accessible. So limit zlib and libpng to 64K by defining MAXSEG_64K.
IX. Configuring for DOS
For DOS users who only have access to the lower 640K, you will
have to limit zlib's memory usage via a png_set_compression_mem_level()
call. See zlib.h or zconf.h in the zlib library for more information.
X. Configuring for Medium Model
Libpng's support for medium model has been tested on most of the popular
compilers. Make sure MAXSEG_64K gets defined, USE_FAR_KEYWORD gets
defined, and FAR gets defined to far in pngconf.h, and you should be
all set. Everything in the library (except for zlib's structure) is
expecting far data. You must use the typedefs with the p or pp on
the end for pointers (or at least look at them and be careful). Make
note that the rows of data are defined as png_bytepp, which is
an "unsigned char far * far *".
XI. Prepending a prefix to exported symbols
Starting with libpng-1.6.0, you can configure libpng (when using the
"configure" script) to prefix all exported symbols by means of the
configuration option "--with-libpng-prefix=FOO_", where FOO_ can be any
string beginning with a letter and containing only uppercase
and lowercase letters, digits, and the underscore (i.e., a C language
identifier). This creates a set of macros in pnglibconf.h, so this is
transparent to applications; their function calls get transformed by
the macros to use the modified names.
XII. Configuring for compiler xxx:
All includes for libpng are in pngconf.h. If you need to add, change
or delete an include, this is the place to do it.
The includes that are not needed outside libpng are placed in pngpriv.h,
which is only used by the routines inside libpng itself.
The files in libpng proper only include pngpriv.h and png.h, which
in turn includes pngconf.h and, as of libpng-1.5.0, pnglibconf.h.
As of libpng-1.5.0, pngpriv.h also includes three other private header
files, pngstruct.h, pnginfo.h, and pngdebug.h, which contain material
that previously appeared in the public headers.
XIII. Removing unwanted object code
There are a bunch of #define's in pngconf.h that control what parts of
libpng are compiled. All the defines end in _SUPPORTED. If you are
never going to use a capability, you can change the #define to #undef
before recompiling libpng and save yourself code and data space, or
you can turn off individual capabilities with defines that begin with
PNG_NO_.
In libpng-1.5.0 and later, the #define's are in pnglibconf.h instead.
You can also turn all of the transforms and ancillary chunk capabilities
off en masse with compiler directives that define
PNG_NO_READ[or WRITE]_TRANSFORMS, or PNG_NO_READ[or WRITE]_ANCILLARY_CHUNKS,
or all four, along with directives to turn on any of the capabilities that
you do want. The PNG_NO_READ[or WRITE]_TRANSFORMS directives disable the
extra transformations but still leave the library fully capable of reading
and writing PNG files with all known public chunks. Use of the
PNG_NO_READ[or WRITE]_ANCILLARY_CHUNKS directive produces a library
that is incapable of reading or writing ancillary chunks. If you are
not using the progressive reading capability, you can turn that off
with PNG_NO_PROGRESSIVE_READ (don't confuse this with the INTERLACING
capability, which you'll still have).
All the reading and writing specific code are in separate files, so the
linker should only grab the files it needs. However, if you want to
make sure, or if you are building a stand alone library, all the
reading files start with "pngr" and all the writing files start with "pngw".
The files that don't match either (like png.c, pngtrans.c, etc.)
are used for both reading and writing, and always need to be included.
The progressive reader is in pngpread.c
If you are creating or distributing a dynamically linked library (a .so
or DLL file), you should not remove or disable any parts of the library,
as this will cause applications linked with different versions of the
library to fail if they call functions not available in your library.
The size of the library itself should not be an issue, because only
those sections that are actually used will be loaded into memory.
XIV. Changes to the build and configuration of libpng in libpng-1.5.x
Details of internal changes to the library code can be found in the CHANGES
file and in the GIT repository logs. These will be of no concern to the vast
majority of library users or builders; however, the few who configure libpng
to a non-default feature set may need to change how this is done.
There should be no need for library builders to alter build scripts if
these use the distributed build support - configure or the makefiles -
however, users of the makefiles may care to update their build scripts
to build pnglibconf.h where the corresponding makefile does not do so.
Building libpng with a non-default configuration has changed completely.
The old method using pngusr.h should still work correctly even though the
way pngusr.h is used in the build has been changed; however, library
builders will probably want to examine the changes to take advantage of
new capabilities and to simplify their build system.
A. Specific changes to library configuration capabilities
The exact mechanism used to control attributes of API functions has
changed. A single set of operating system independent macro definitions
is used and operating system specific directives are defined in
pnglibconf.h
As part of this the mechanism used to choose procedure call standards on
those systems that allow a choice has been changed. At present this only
affects certain Microsoft (DOS, Windows) and IBM (OS/2) operating systems
running on Intel processors. As before, PNGAPI is defined where required
to control the exported API functions; however, two new macros, PNGCBAPI
and PNGCAPI, are used instead for callback functions (PNGCBAPI) and
(PNGCAPI) for functions that must match a C library prototype (currently
only png_longjmp_ptr, which must match the C longjmp function.) The new
approach is documented in pngconf.h
Despite these changes, libpng 1.5.0 only supports the native C function
calling standard on those platforms tested so far (__cdecl on Microsoft
Windows). This is because the support requirements for alternative
calling conventions seem to no longer exist. Developers who find it
necessary to set PNG_API_RULE to 1 should advise the mailing list
(png-mng-implement) of this and library builders who use Openwatcom and
therefore set PNG_API_RULE to 2 should also contact the mailing list.
B. Changes to the configuration mechanism
Prior to libpng-1.5.0 library builders who needed to configure libpng
had either to modify the exported pngconf.h header file to add system
specific configuration or had to write feature selection macros into
pngusr.h and cause this to be included into pngconf.h by defining
PNG_USER_CONFIG. The latter mechanism had the disadvantage that an
application built without PNG_USER_CONFIG defined would see the
unmodified, default, libpng API and thus would probably fail to link.
These mechanisms still work in the configure build and in any makefile
build that builds pnglibconf.h, although the feature selection macros
have changed somewhat as described above. In 1.5.0, however, pngusr.h is
processed only once, at the time the exported header file pnglibconf.h is
built. pngconf.h no longer includes pngusr.h; therefore, pngusr.h is ignored
after the build of pnglibconf.h and it is never included in an application
build.
The formerly used alternative of adding a list of feature macros to the
CPPFLAGS setting in the build also still works; however, the macros will be
copied to pnglibconf.h and this may produce macro redefinition warnings
when the individual C files are compiled.
All configuration now only works if pnglibconf.h is built from
scripts/pnglibconf.dfa. This requires the program awk. Brian Kernighan
(the original author of awk) maintains C source code of that awk and this
and all known later implementations (often called by subtly different
names - nawk and gawk for example) are adequate to build pnglibconf.h.
The Sun Microsystems (now Oracle) program 'awk' is an earlier version
and does not work; this may also apply to other systems that have a
functioning awk called 'nawk'.
Configuration options are now documented in scripts/pnglibconf.dfa. This
file also includes dependency information that ensures a configuration is
consistent; that is, if a feature is switched off, dependent features are
also switched off. As a recommended alternative to using feature macros in
pngusr.h a system builder may also define equivalent options in pngusr.dfa
(or, indeed, any file) and add that to the configuration by setting
DFA_XTRA to the file name. The makefiles in contrib/pngminim illustrate
how to do this, and also illustrate a case where pngusr.h is still required.
After you have built libpng, the definitions that were recorded in
pnglibconf.h are available to your application (pnglibconf.h is included
in png.h and gets installed alongside png.h and pngconf.h in your
$PREFIX/include directory). Do not edit pnglibconf.h after you have built
libpng, because than the settings would not accurately reflect the settings
that were used to build libpng.
XV. Setjmp/longjmp issues
Libpng uses setjmp()/longjmp() for error handling. Unfortunately setjmp()
is known to be not thread-safe on some platforms and we don't know of
any platform where it is guaranteed to be thread-safe. Therefore, if
your application is going to be using multiple threads, you should
configure libpng with PNG_NO_SETJMP in your pngusr.dfa file, with
-DPNG_NO_SETJMP on your compile line, or with
#undef PNG_SETJMP_SUPPORTED
in your pnglibconf.h or pngusr.h.
Starting with libpng-1.6.0, the library included a "simplified API".
This requires setjmp/longjmp, so you must either build the library
with PNG_SETJMP_SUPPORTED defined, or with PNG_SIMPLIFIED_READ_SUPPORTED
and PNG_SIMPLIFIED_WRITE_SUPPORTED undefined.
XVI. Other sources of information about libpng:
Further information can be found in the README and libpng-manual.txt Further information can be found in the README and libpng-manual.txt
files, in the individual makefiles, in png.h, and the manual pages files, in the individual makefiles, in png.h, and the manual pages
libpng.3 and png.5. libpng.3 and png.5.
@@ -147,7 +399,7 @@ CFLAGS="-Wall -O -funroll-loops \
--with-pkgconfigdir=/usr/lib/pkgconfig --includedir=/usr/include --with-pkgconfigdir=/usr/lib/pkgconfig --includedir=/usr/include
You can alternatively specify --includedir=/usr/include, /usr/local/include, You can alternatively specify --includedir=/usr/include, /usr/local/include,
/usr/include/libpng%NN%, or whatever. /usr/include/libpng16, or whatever.
If you find that the configure script is out-of-date or is not supporting If you find that the configure script is out-of-date or is not supporting
your platform properly, try running autogen.sh to regenerate "configure", your platform properly, try running autogen.sh to regenerate "configure",

48
LICENSE
View File

@@ -10,21 +10,17 @@ 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.0beta17, March 10, 2012, are libpng versions 1.0.7, July 1, 2000, through 1.6.19beta04, October 15, 2015, are
Copyright (c) 2004, 2006-2011 Glenn Randers-Pehrson, and are Copyright (c) 2000-2002, 2004, 2006-2015 Glenn Randers-Pehrson, and are
distributed according to the same disclaimer and license as libpng-1.2.5
with the following individual added to the list of Contributing Authors
Cosmin Truta
libpng versions 1.0.7, July 1, 2000, through 1.2.5 - October 3, 2002, are
Copyright (c) 2000-2002 Glenn Randers-Pehrson, and are
distributed according to the same disclaimer and license as libpng-1.0.6 distributed according to the same disclaimer and license as libpng-1.0.6
with the following individuals added to the list of Contributing Authors with the following individuals added to the list of Contributing Authors:
Simon-Pierre Cadieux Simon-Pierre Cadieux
Eric S. Raymond Eric S. Raymond
Mans Rullgard
Cosmin Truta
Gilles Vollant Gilles Vollant
James Yu
and with the following additions to the disclaimer: and with the following additions to the disclaimer:
@@ -36,17 +32,17 @@ and with the following additions to the disclaimer:
the user. the user.
libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
Copyright (c) 1998, 1999 Glenn Randers-Pehrson, and are Copyright (c) 1998-2000 Glenn Randers-Pehrson, and are distributed according
distributed according to the same disclaimer and license as libpng-0.96, to the same disclaimer and license as libpng-0.96, with the following
with the following individuals added to the list of Contributing Authors: individuals added to the list of Contributing Authors:
Tom Lane Tom Lane
Glenn Randers-Pehrson Glenn Randers-Pehrson
Willem van Schaik Willem van Schaik
libpng versions 0.89, June 1996, through 0.96, May 1997, are libpng versions 0.89, June 1996, through 0.96, May 1997, are
Copyright (c) 1996, 1997 Andreas Dilger Copyright (c) 1996-1997 Andreas Dilger, and are
Distributed according to the same disclaimer and license as libpng-0.88, distributed according to the same disclaimer and license as libpng-0.88,
with the following individuals added to the list of Contributing Authors: with the following individuals added to the list of Contributing Authors:
John Bowler John Bowler
@@ -57,7 +53,7 @@ with the following individuals added to the list of Contributing Authors:
Tom Tanner Tom Tanner
libpng versions 0.5, May 1995, through 0.88, January 1996, are libpng versions 0.5, May 1995, through 0.88, January 1996, are
Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc. Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
For the purposes of this copyright and license, "Contributing Authors" For the purposes of this copyright and license, "Contributing Authors"
is defined as the following set of individuals: is defined as the following set of individuals:
@@ -80,13 +76,13 @@ Permission is hereby granted to use, copy, modify, and distribute this
source code, or portions hereof, for any purpose, without fee, subject source code, or portions hereof, for any purpose, without fee, subject
to the following restrictions: to the following restrictions:
1. The origin of this source code must not be misrepresented. 1. The origin of this source code must not be misrepresented.
2. Altered versions must be plainly marked as such and must not 2. Altered versions must be plainly marked as such and must not
be misrepresented as being the original source. be misrepresented as being the original source.
3. This Copyright notice may not be removed or altered from any 3. This Copyright notice may not be removed or altered from any
source or altered source distribution. source or altered source distribution.
The Contributing Authors and Group 42, Inc. specifically permit, without The Contributing Authors and Group 42, Inc. specifically permit, without
fee, and encourage the use of this source code as a component to fee, and encourage the use of this source code as a component to
@@ -94,18 +90,18 @@ supporting the PNG file format in commercial products. If you use this
source code in a product, acknowledgment is not required but would be source code in a product, acknowledgment is not required but would be
appreciated. appreciated.
A "png_get_copyright" function is available, for convenient use in "about" A "png_get_copyright" function is available, for convenient use in "about"
boxes and the like: boxes and the like:
printf("%s",png_get_copyright(NULL)); printf("%s", png_get_copyright(NULL));
Also, the PNG logo (in PNG format, of course) is supplied in the Also, the PNG logo (in PNG format, of course) is supplied in the
files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31). files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
Libpng is OSI Certified Open Source Software. OSI Certified Open Source is a Libpng is OSI Certified Open Source Software. OSI Certified Open Source is
certification mark of the Open Source Initiative. a certification mark of the Open Source Initiative. OSI has not addressed
the additional disclaimers inserted at version 1.0.7.
Glenn Randers-Pehrson Glenn Randers-Pehrson
glennrp at users.sourceforge.net glennrp at users.sourceforge.net
March 10, 2012 October 15, 2015

View File

@@ -7,19 +7,60 @@ 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 pngimage
check_PROGRAMS= pngtest
# Utilities - installed
bin_PROGRAMS= pngfix png-fix-itxt
# This ensures that pnglibconf.h gets built at the start of 'make all' or
# 'make check', but it does not add dependencies to the individual programs,
# this is done below.
#
# IMPORTANT: always add the object modules of new programs to the list below
# because otherwise the sequence 'configure; make new-program' will *sometimes*
# result in the installed (system) pnglibconf.h being used and the result is
# always wrong and always very confusing.
BUILT_SOURCES = pnglibconf.h
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
pngvalid_SOURCES = contrib/libtests/pngvalid.c pngvalid_SOURCES = contrib/libtests/pngvalid.c
pngstest_SOURCES = contrib/libtests/pngstest.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
TESTS += test-pngvalid-simple.sh test-pngvalid-full.sh test-pngstest.sh
pngunknown_SOURCES = contrib/libtests/pngunknown.c
pngunknown_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
pngimage_SOURCES = contrib/libtests/pngimage.c
pngimage_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
pngfix_SOURCES = contrib/tools/pngfix.c
pngfix_LDADD = libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
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-size\
tests/pngvalid-progressive-interlace-standard\
tests/pngvalid-transform\
tests/pngvalid-progressive-standard tests/pngvalid-standard\
tests/pngstest-1.8 tests/pngstest-1.8-alpha tests/pngstest-linear\
tests/pngstest-linear-alpha tests/pngstest-none tests/pngstest-none-alpha\
tests/pngstest-sRGB tests/pngstest-sRGB-alpha tests/pngunknown-IDAT\
tests/pngunknown-discard tests/pngunknown-if-safe tests/pngunknown-sAPI\
tests/pngunknown-sTER tests/pngunknown-save tests/pngunknown-vpAg\
tests/pngimage-quick tests/pngimage-full
# man pages # man pages
dist_man_MANS= libpng.3 libpngpf.3 png.5 dist_man_MANS= libpng.3 libpngpf.3 png.5
@@ -38,7 +79,8 @@ libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES = png.c pngerror.c\
png.h pngconf.h pngdebug.h pnginfo.h pngpriv.h pngstruct.h pngusr.dfa png.h pngconf.h pngdebug.h pnginfo.h pngpriv.h pngstruct.h pngusr.dfa
if PNG_ARM_NEON if PNG_ARM_NEON
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES += arm/filter_neon.S libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES += arm/arm_init.c\
arm/filter_neon.S arm/filter_neon_intrinsics.c
endif endif
nodist_libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES = pnglibconf.h nodist_libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES = pnglibconf.h
@@ -71,19 +113,22 @@ 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
CLEANFILES= *.tf? pngout.png libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.pc \ CLEANFILES= *.tf? pngout.png libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.pc \
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@-config libpng.vers libpng.sym \ libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@-config libpng.vers libpng.sym \
check.new pnglibconf.* pngprefix.h symbols.new pngtest-log.txt \ check.new pnglibconf.h pngprefix.h symbols.new pngtest-log.txt \
pnglibconf.out pnglibconf.c pnglibconf.pre pnglibconf.dfn \
$(SCRIPT_CLEANFILES) $(SCRIPT_CLEANFILES)
MAINTAINERCLEANFILES = Makefile.in aclocal.m4 config.guess config.h.in \ MAINTAINERCLEANFILES = Makefile.in aclocal.m4 config.guess config.h.in \
@@ -102,7 +147,7 @@ AM_CFLAGS = ${PNG_COPTS}
# checks for this and sets DFNCPP appropriately. # checks for this and sets DFNCPP appropriately.
DFNCPP = @DFNCPP@ DFNCPP = @DFNCPP@
SUFFIXES = .chk .dfn .out SUFFIXES = .chk .out
$(PNGLIB_BASENAME).pc: libpng.pc $(PNGLIB_BASENAME).pc: libpng.pc
cp libpng.pc $@ cp libpng.pc $@
@@ -113,6 +158,7 @@ $(PNGLIB_BASENAME)-config: libpng-config
scripts/sym.out scripts/vers.out: png.h pngconf.h pnglibconf.h scripts/sym.out scripts/vers.out: png.h pngconf.h pnglibconf.h
scripts/prefix.out: png.h pngconf.h pnglibconf.out scripts/prefix.out: png.h pngconf.h pnglibconf.out
scripts/symbols.out: png.h pngconf.h $(srcdir)/scripts/pnglibconf.h.prebuilt scripts/symbols.out: png.h pngconf.h $(srcdir)/scripts/pnglibconf.h.prebuilt
scripts/intprefix.out: pnglibconf.h
libpng.sym: scripts/sym.out libpng.sym: scripts/sym.out
rm -f $@ rm -f $@
@@ -151,13 +197,28 @@ 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.) Only files which include
contrib/libtests/pngstest.o contrib/libtests/pngvalid.o pngtest.o: pnglibconf.h # one of the png source files (typically png.h or pngpriv.h) need to be listed
# here:
pngtest.o: pnglibconf.h
contrib/libtests/makepng.o: pnglibconf.h
contrib/libtests/pngstest.o: pnglibconf.h
contrib/libtests/pngunknown.o: pnglibconf.h
contrib/libtests/pngimage.o: pnglibconf.h
contrib/libtests/pngvalid.o: pnglibconf.h
contrib/libtests/readpng.o: pnglibconf.h
contrib/libtests/tarith.o: pnglibconf.h
contrib/libtests/timepng.o: pnglibconf.h
contrib/tools/makesRGB.o: pnglibconf.h
contrib/tools/pngfix.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
@@ -171,20 +232,17 @@ if DO_PNG_PREFIX
SYMBOL_CFLAGS += -DPNG_PREFIX='@PNG_PREFIX@' SYMBOL_CFLAGS += -DPNG_PREFIX='@PNG_PREFIX@'
endif endif
.dfn.out: .c.out:
rm -f $@ $*.c $*.tf[123] rm -f $@ $*.tf[12]
test -d scripts || mkdir scripts test -d scripts || mkdir scripts || test -d scripts
echo '#include "$<"' >$*.c
$(DFNCPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)\ $(DFNCPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)\
$(CPPFLAGS) $(SYMBOL_CFLAGS) $*.c > $*.tf1 $(CPPFLAGS) $(SYMBOL_CFLAGS) $< > $*.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 $*.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 .c file for pnglibconf.h is machine generated
pnglibconf.dfn: scripts/pnglibconf.dfa scripts/options.awk pngconf.h pngusr.dfa $(DFA_XTRA) pnglibconf.c: scripts/pnglibconf.dfa scripts/options.awk pngconf.h pngusr.dfa $(DFA_XTRA)
rm -f $@ $*.tf[45] rm -f $@ $*.tf[45]
$(AWK) -f ${srcdir}/scripts/options.awk out=$*.tf4 version=search\ $(AWK) -f ${srcdir}/scripts/options.awk out=$*.tf4 version=search\
${srcdir}/pngconf.h ${srcdir}/scripts/pnglibconf.dfa\ ${srcdir}/pngconf.h ${srcdir}/scripts/pnglibconf.dfa\
@@ -204,7 +262,7 @@ scripts/symbols.chk: scripts/checksym.awk scripts/symbols.def scripts/symbols.ou
# used on demand to regenerate the standard header, CPPFLAGS should # used on demand to regenerate the standard header, CPPFLAGS should
# be empty - no non-standard defines # be empty - no non-standard defines
scripts/pnglibconf.dfn: scripts/pnglibconf.dfa scripts/options.awk pngconf.h scripts/pnglibconf.c: scripts/pnglibconf.dfa scripts/options.awk pngconf.h
rm -f $@ pnglibconf.tf[67] rm -f $@ pnglibconf.tf[67]
test -z "$(CPPFLAGS)" test -z "$(CPPFLAGS)"
echo "com @PNGLIB_VERSION@ STANDARD API DEFINITION" |\ echo "com @PNGLIB_VERSION@ STANDARD API DEFINITION" |\
@@ -228,34 +286,76 @@ check: scripts/symbols.chk
dist-hook: dist-hook:
cd '$(top_distdir)'; rm -f $(SCRIPT_CLEANFILES) cd '$(top_distdir)'; rm -f $(SCRIPT_CLEANFILES)
# install the .../include headers as links to the new ones # Make links between installed files with release-specific names and the generic
install-data-hook: # file names. If this install rule is run the generic names will be deleted and
cd $(DESTDIR)$(includedir); rm -f png.h pngconf.h pnglibconf.h # recreated - this has obvious issues for systems with multiple installations.
cd $(DESTDIR)$(includedir); $(LN_S) $(PNGLIB_BASENAME)/png.h png.h
cd $(DESTDIR)$(includedir); $(LN_S) $(PNGLIB_BASENAME)/pngconf.h \
pngconf.h
cd $(DESTDIR)$(includedir); $(LN_S) $(PNGLIB_BASENAME)/pnglibconf.h \
pnglibconf.h
cd $(DESTDIR)$(pkgconfigdir); rm -f libpng.pc
cd $(DESTDIR)$(pkgconfigdir); $(LN_S) $(PNGLIB_BASENAME).pc libpng.pc
# do evil things to libpng to cause libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@ to be used install-header-links:
install-exec-hook: @set -ex; cd '$(DESTDIR)$(includedir)'; for f in $(HEADERS); do \
cd $(DESTDIR)$(bindir); rm -f libpng-config rm -f "$$f"; $(LN_S) "$(PNGLIB_BASENAME)/$$f" "$$f"; done
cd $(DESTDIR)$(bindir); $(LN_S) $(PNGLIB_BASENAME)-config libpng-config
@set -x;\ uninstall-header-links:
cd $(DESTDIR)$(libdir);\ cd '$(DESTDIR)$(includedir)'; rm -f $(HEADERS)
for ext in a la so so.@PNGLIB_MAJOR@@PNGLIB_MINOR@.@PNGLIB_RELEASE@ sl dylib dll.a; do\
rm -f libpng.$$ext;\ install-libpng-pc:
if test -f $(PNGLIB_BASENAME).$$ext; then\ @set -ex; cd '$(DESTDIR)$(pkgconfigdir)'; rm -f libpng.pc; \
$(LN_S) $(PNGLIB_BASENAME).$$ext libpng.$$ext;\ $(LN_S) '$(PNGLIB_BASENAME).pc' libpng.pc
fi;\
uninstall-libpng-pc:
rm -f '$(DESTDIR)$(pkgconfigdir)/libpng.pc'
# EXT_LIST is a list of the possibly library directory extensions, this exists
# because we can't find a good way of discovering the file extensions that are
# actually installed on a given system, so instead we check for every extension
# we have seen.
EXT_LIST = a dll.a so so.@PNGLIB_MAJOR@@PNGLIB_MINOR@.@PNGLIB_RELEASE@ la sl dylib
install-library-links:
@set -x; cd '$(DESTDIR)$(libdir)';\
for ext in $(EXT_LIST); do\
rm -f "libpng.$$ext";\
if test -f "$(PNGLIB_BASENAME).$$ext"; then\
$(LN_S) "$(PNGLIB_BASENAME).$$ext" "libpng.$$ext" || exit 1;\
fi;\
done done
uninstall-hook: uninstall-library-links:
cd $(DESTDIR)$(includedir); rm -f png.h pngconf.h pnglibconf.h @set -x; cd '$(DESTDIR)$(libdir)'; for ext in $(EXT_LIST); do\
rm -f $(DESTDIR)$(pkgconfigdir)/libpng.pc rm -f "libpng.$$ext"; done
rm -f $(DESTDIR)$(bindir)/libpng-config
rm -f $(DESTDIR)$(libdir)/libpng.a install-libpng-config:
rm -f $(DESTDIR)$(libdir)/libpng.la @set -ex; cd '$(DESTDIR)$(bindir)'; rm -f libpng-config; \
rm -f $(DESTDIR)$(libdir)/libpng.dll.a $(LN_S) '$(PNGLIB_BASENAME)-config' libpng-config
uninstall-libpng-config:
rm -f '$(DESTDIR)$(bindir)/libpng-config'
if DO_INSTALL_LINKS
# If --enable-unversioned-links is specified the header and lib file links
# will be automatically made on a 'make install':
install-data-hook: install-header-links
uninstall-hook: uninstall-header-links
install-exec-hook: install-library-links
uninstall-hook: uninstall-library-links
endif
if DO_INSTALL_LIBPNG_PC
# Likewise, --install-pc causes libpng.pc to be constructed:
install-data-hook: install-libpng-pc
uninstall-hook: uninstall-libpng-pc
endif
if DO_INSTALL_LIBPNG_CONFIG
# And --install-config:
install-exec-hook: install-libpng-config
uninstall-hook: uninstall-libpng-config
endif
# The following addition ensures that 'make all' always builds the test programs
# too. It used to, but some change either in libpng or configure stopped this
# working.
all-am: $(check_PROGRAMS)

61
README
View File

@@ -1,11 +1,11 @@
README for libpng version 1.6.0beta17 - March 10, 2012 (shared library 16.0) README for libpng version 1.6.19beta04 - October 15, 2015 (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
@@ -23,18 +23,25 @@ earlier versions if you are using a shared library. The type of the
png_uint_32, which will affect shared-library applications that use png_uint_32, which will affect shared-library applications that use
this function. this function.
To avoid problems with changes to the internals of png_info_struct, To avoid problems with changes to the internals of png info_struct,
new APIs have been made available in 0.95 to avoid direct application new APIs have been made available in 0.95 to avoid direct application
access to info_ptr. These functions are the png_set_<chunk> and access to info_ptr. These functions are the png_set_<chunk> and
png_get_<chunk> functions. These functions should be used when png_get_<chunk> functions. These functions should be used when
accessing/storing the info_struct data, rather than manipulating it accessing/storing the info_struct data, rather than manipulating it
directly, to avoid such problems in the future. directly, to avoid such problems in the future.
It is important to note that the APIs do not make current programs It is important to note that the APIs did not make current programs
that access the info struct directly incompatible with the new that access the info struct directly incompatible with the new
library. However, it is strongly suggested that new programs use library, through libpng-1.2.x. In libpng-1.4.x, which was meant to
the new APIs (as shown in example.c and pngtest.c), and older programs be a transitional release, members of the png_struct and the
be converted to the new format, to facilitate upgrades in the future. info_struct can still be accessed, but the compiler will issue a
warning about deprecated usage. Since libpng-1.5.0, direct access
to these structs is not allowed, and the definitions of the structs
reside in private pngstruct.h and pnginfo.h header files that are not
accessible to applications. It is strongly suggested that new
programs use the new APIs (as shown in example.c and pngtest.c), and
older programs be converted to the new format, to facilitate upgrades
in the future.
**** ****
Additions since 0.90 include the ability to compile libpng as a Additions since 0.90 include the ability to compile libpng as a
@@ -77,17 +84,21 @@ 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.
I am not a lawyer, but I believe that the Export Control Classification
Number (ECCN) for libpng is EAR99, which means not subject to export
controls or International Traffic in Arms Regulations (ITAR) because it
is open source, publicly available software, that does not contain any
encryption software. See the EAR, paragraphs 734.3(b)(3) and 734.7(b).
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 +134,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 twenty 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 +178,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
visupng => Contains a MSVC workspace for VisualPng pngminus => Simple pnm2png and png2pnm programs
pngsuite => Test images
tools => Various tools
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)

2
TODO
View File

@@ -6,10 +6,12 @@ Better C++ wrapper/full C++ implementation?
Fix problem with C++ and EXTERN "C". Fix problem with C++ and EXTERN "C".
cHRM transformation. cHRM transformation.
Remove setjmp/longjmp usage in favor of returning error codes. Remove setjmp/longjmp usage in favor of returning error codes.
Palette creation.
Add "grayscale->palette" transformation and "palette->grayscale" detection. Add "grayscale->palette" transformation and "palette->grayscale" detection.
Improved dithering. Improved dithering.
Multi-lingual error and warning message support. Multi-lingual error and warning message support.
Complete sRGB transformation (presently it simply uses gamma=0.45455). Complete sRGB transformation (presently it simply uses gamma=0.45455).
Make profile checking optional via a png_set_something() call.
Man pages for function calls. Man pages for function calls.
Better documentation. Better documentation.
Better filter selection Better filter selection

134
arm/arm_init.c Normal file
View File

@@ -0,0 +1,134 @@
/* arm_init.c - NEON optimised filter functions
*
* Copyright (c) 2014 Glenn Randers-Pehrson
* Written by Mans Rullgard, 2011.
* Last changed in libpng 1.6.16 [December 22, 2014]
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
* 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"
#ifdef PNG_READ_SUPPORTED
#if PNG_ARM_NEON_OPT > 0
#ifdef PNG_ARM_NEON_CHECK_SUPPORTED /* Do run-time checks */
/* WARNING: it is strongly recommended that you do not build libpng with
* run-time checks for CPU features if at all possible. In the case of the ARM
* NEON instructions there is no processor-specific way of detecting the
* presence of the required support, therefore run-time detection is extremely
* OS specific.
*
* You may set the macro PNG_ARM_NEON_FILE to the file name of file containing
* a fragment of C source code which defines the png_have_neon function. There
* are a number of implementations in contrib/arm-neon, but the only one that
* has partial support is contrib/arm-neon/linux.c - a generic Linux
* implementation which reads /proc/cpufino.
*/
#ifndef PNG_ARM_NEON_FILE
# ifdef __linux__
# define PNG_ARM_NEON_FILE "contrib/arm-neon/linux.c"
# endif
#endif
#ifdef PNG_ARM_NEON_FILE
#include <signal.h> /* for sig_atomic_t */
static int png_have_neon(png_structp png_ptr);
#include PNG_ARM_NEON_FILE
#else /* PNG_ARM_NEON_FILE */
# error "PNG_ARM_NEON_FILE undefined: no support for run-time ARM NEON checks"
#endif /* PNG_ARM_NEON_FILE */
#endif /* PNG_ARM_NEON_CHECK_SUPPORTED */
#ifndef PNG_ALIGNED_MEMORY_SUPPORTED
# error "ALIGNED_MEMORY is required; set: -DPNG_ALIGNED_MEMORY_SUPPORTED"
#endif
void
png_init_filter_functions_neon(png_structp pp, unsigned int bpp)
{
/* The switch statement is compiled in for ARM_NEON_API, the call to
* png_have_neon is compiled in for ARM_NEON_CHECK. If both are defined
* the check is only performed if the API has not set the NEON option on
* or off explicitly. In this case the check controls what happens.
*
* If the CHECK is not compiled in and the option is UNSET the behavior prior
* to 1.6.7 was to use the NEON code - this was a bug caused by having the
* wrong order of the 'ON' and 'default' cases. UNSET now defaults to OFF,
* as documented in png.h
*/
#ifdef PNG_ARM_NEON_API_SUPPORTED
switch ((pp->options >> PNG_ARM_NEON) & 3)
{
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
default: /* OFF or INVALID */
return;
case PNG_OPTION_ON:
/* Option turned on */
break;
}
#endif
/* IMPORTANT: any new external functions used here must be declared using
* PNG_INTERNAL_FUNCTION in ../pngpriv.h. This is required so that the
* 'prefix' option to configure works:
*
* ./configure --with-libpng-prefix=foobar_
*
* Verify you have got this right by running the above command, doing a build
* and examining pngprefix.h; it must contain a #define for every external
* function you add. (Notice that this happens automatically for the
* initialization function.)
*/
pp->read_filter[PNG_FILTER_VALUE_UP-1] = png_read_filter_row_up_neon;
if (bpp == 3)
{
pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub3_neon;
pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg3_neon;
pp->read_filter[PNG_FILTER_VALUE_PAETH-1] =
png_read_filter_row_paeth3_neon;
}
else if (bpp == 4)
{
pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub4_neon;
pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg4_neon;
pp->read_filter[PNG_FILTER_VALUE_PAETH-1] =
png_read_filter_row_paeth4_neon;
}
}
#endif /* PNG_ARM_NEON_OPT > 0 */
#endif /* READ */

View File

@@ -1,18 +1,36 @@
/* filter_neon.S - NEON optimised filter functions /* filter_neon.S - NEON optimised filter functions
* *
* Copyright (c) 2011 Glenn Randers-Pehrson * Copyright (c) 2014 Glenn Randers-Pehrson
* Written by Mans Rullgard, 2011. * Written by Mans Rullgard, 2011.
* Last changed in libpng 1.6.16 [December 22, 2014]
* *
* 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
*/ */
/* This is required to get the symbol renames, which are #defines, and the
* definitions (or not) of PNG_ARM_NEON_OPT and PNG_ARM_NEON_IMPLEMENTATION.
*/
#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
/* Assembler NEON support - only works for 32-bit ARM (i.e. it does not work for
* ARM64). The code in arm/filter_neon_intrinsics.c supports ARM64, however it
* only works if -mfpu=neon is specified on the GCC command line. See pngpriv.h
* for the logic which sets PNG_USE_ARM_NEON_ASM:
*/
#if PNG_ARM_NEON_IMPLEMENTATION == 2 /* hand-coded assembler */
#if PNG_ARM_NEON_OPT > 0
#ifdef __ELF__ #ifdef __ELF__
# define ELF # define ELF
#else #else
@@ -29,6 +47,13 @@ ELF .size \name, . - \name
.purgem endfunc .purgem endfunc
.endm .endm
.text .text
/* Explicitly specifying alignment here because some versions of
* GAS don't align code correctly. This is harmless in correctly
* written versions of GAS.
*/
.align 2
.if \export .if \export
.global \name .global \name
.endif .endif
@@ -223,3 +248,6 @@ func png_read_filter_row_paeth3_neon, export=1
pop {r4,pc} pop {r4,pc}
endfunc endfunc
#endif /* PNG_ARM_NEON_OPT > 0 */
#endif /* PNG_ARM_NEON_IMPLEMENTATION == 2 (assembler) */
#endif /* READ */

View File

@@ -0,0 +1,373 @@
/* filter_neon_intrinsics.c - NEON optimised filter functions
*
* Copyright (c) 2014 Glenn Randers-Pehrson
* Written by James Yu <james.yu at linaro.org>, October 2013.
* Based on filter_neon.S, written by Mans Rullgard, 2011.
*
* Last changed in libpng 1.6.16 [December 22, 2014]
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
* and license in png.h
*/
#include "../pngpriv.h"
#ifdef PNG_READ_SUPPORTED
/* This code requires -mfpu=neon on the command line: */
#if PNG_ARM_NEON_IMPLEMENTATION == 1 /* intrinsics code from pngpriv.h */
#include <arm_neon.h>
/* libpng row pointers are not necessarily aligned to any particular boundary,
* however this code will only work with appropriate alignment. arm/arm_init.c
* checks for this (and will not compile unless it is done). This code uses
* variants of png_aligncast to avoid compiler warnings.
*/
#define png_ptr(type,pointer) png_aligncast(type *,pointer)
#define png_ptrc(type,pointer) png_aligncastconst(const type *,pointer)
/* The following relies on a variable 'temp_pointer' being declared with type
* 'type'. This is written this way just to hide the GCC strict aliasing
* warning; note that the code is safe because there never is an alias between
* the input and output pointers.
*/
#define png_ldr(type,pointer)\
(temp_pointer = png_ptr(type,pointer), *temp_pointer)
#if PNG_ARM_NEON_OPT > 0
void
png_read_filter_row_up_neon(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
png_bytep rp = row;
png_bytep rp_stop = row + row_info->rowbytes;
png_const_bytep pp = prev_row;
for (; rp < rp_stop; rp += 16, pp += 16)
{
uint8x16_t qrp, qpp;
qrp = vld1q_u8(rp);
qpp = vld1q_u8(pp);
qrp = vaddq_u8(qrp, qpp);
vst1q_u8(rp, qrp);
}
}
void
png_read_filter_row_sub3_neon(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
png_bytep rp = row;
png_bytep rp_stop = row + row_info->rowbytes;
uint8x16_t vtmp = vld1q_u8(rp);
uint8x8x2_t *vrpt = png_ptr(uint8x8x2_t, &vtmp);
uint8x8x2_t vrp = *vrpt;
uint8x8x4_t vdest;
vdest.val[3] = vdup_n_u8(0);
for (; rp < rp_stop;)
{
uint8x8_t vtmp1, vtmp2;
uint32x2_t *temp_pointer;
vtmp1 = vext_u8(vrp.val[0], vrp.val[1], 3);
vdest.val[0] = vadd_u8(vdest.val[3], vrp.val[0]);
vtmp2 = vext_u8(vrp.val[0], vrp.val[1], 6);
vdest.val[1] = vadd_u8(vdest.val[0], vtmp1);
vtmp1 = vext_u8(vrp.val[1], vrp.val[1], 1);
vdest.val[2] = vadd_u8(vdest.val[1], vtmp2);
vdest.val[3] = vadd_u8(vdest.val[2], vtmp1);
vtmp = vld1q_u8(rp + 12);
vrpt = png_ptr(uint8x8x2_t, &vtmp);
vrp = *vrpt;
vst1_lane_u32(png_ptr(uint32_t,rp), png_ldr(uint32x2_t,&vdest.val[0]), 0);
rp += 3;
vst1_lane_u32(png_ptr(uint32_t,rp), png_ldr(uint32x2_t,&vdest.val[1]), 0);
rp += 3;
vst1_lane_u32(png_ptr(uint32_t,rp), png_ldr(uint32x2_t,&vdest.val[2]), 0);
rp += 3;
vst1_lane_u32(png_ptr(uint32_t,rp), png_ldr(uint32x2_t,&vdest.val[3]), 0);
rp += 3;
}
PNG_UNUSED(prev_row)
}
void
png_read_filter_row_sub4_neon(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
png_bytep rp = row;
png_bytep rp_stop = row + row_info->rowbytes;
uint8x8x4_t vdest;
vdest.val[3] = vdup_n_u8(0);
for (; rp < rp_stop; rp += 16)
{
uint32x2x4_t vtmp = vld4_u32(png_ptr(uint32_t,rp));
uint8x8x4_t *vrpt = png_ptr(uint8x8x4_t,&vtmp);
uint8x8x4_t vrp = *vrpt;
uint32x2x4_t *temp_pointer;
vdest.val[0] = vadd_u8(vdest.val[3], vrp.val[0]);
vdest.val[1] = vadd_u8(vdest.val[0], vrp.val[1]);
vdest.val[2] = vadd_u8(vdest.val[1], vrp.val[2]);
vdest.val[3] = vadd_u8(vdest.val[2], vrp.val[3]);
vst4_lane_u32(png_ptr(uint32_t,rp), png_ldr(uint32x2x4_t,&vdest), 0);
}
PNG_UNUSED(prev_row)
}
void
png_read_filter_row_avg3_neon(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
png_bytep rp = row;
png_const_bytep pp = prev_row;
png_bytep rp_stop = row + row_info->rowbytes;
uint8x16_t vtmp;
uint8x8x2_t *vrpt;
uint8x8x2_t vrp;
uint8x8x4_t vdest;
vdest.val[3] = vdup_n_u8(0);
vtmp = vld1q_u8(rp);
vrpt = png_ptr(uint8x8x2_t,&vtmp);
vrp = *vrpt;
for (; rp < rp_stop; pp += 12)
{
uint8x8_t vtmp1, vtmp2, vtmp3;
uint8x8x2_t *vppt;
uint8x8x2_t vpp;
uint32x2_t *temp_pointer;
vtmp = vld1q_u8(pp);
vppt = png_ptr(uint8x8x2_t,&vtmp);
vpp = *vppt;
vtmp1 = vext_u8(vrp.val[0], vrp.val[1], 3);
vdest.val[0] = vhadd_u8(vdest.val[3], vpp.val[0]);
vdest.val[0] = vadd_u8(vdest.val[0], vrp.val[0]);
vtmp2 = vext_u8(vpp.val[0], vpp.val[1], 3);
vtmp3 = vext_u8(vrp.val[0], vrp.val[1], 6);
vdest.val[1] = vhadd_u8(vdest.val[0], vtmp2);
vdest.val[1] = vadd_u8(vdest.val[1], vtmp1);
vtmp2 = vext_u8(vpp.val[0], vpp.val[1], 6);
vtmp1 = vext_u8(vrp.val[1], vrp.val[1], 1);
vtmp = vld1q_u8(rp + 12);
vrpt = png_ptr(uint8x8x2_t,&vtmp);
vrp = *vrpt;
vdest.val[2] = vhadd_u8(vdest.val[1], vtmp2);
vdest.val[2] = vadd_u8(vdest.val[2], vtmp3);
vtmp2 = vext_u8(vpp.val[1], vpp.val[1], 1);
vdest.val[3] = vhadd_u8(vdest.val[2], vtmp2);
vdest.val[3] = vadd_u8(vdest.val[3], vtmp1);
vst1_lane_u32(png_ptr(uint32_t,rp), png_ldr(uint32x2_t,&vdest.val[0]), 0);
rp += 3;
vst1_lane_u32(png_ptr(uint32_t,rp), png_ldr(uint32x2_t,&vdest.val[1]), 0);
rp += 3;
vst1_lane_u32(png_ptr(uint32_t,rp), png_ldr(uint32x2_t,&vdest.val[2]), 0);
rp += 3;
vst1_lane_u32(png_ptr(uint32_t,rp), png_ldr(uint32x2_t,&vdest.val[3]), 0);
rp += 3;
}
}
void
png_read_filter_row_avg4_neon(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
png_bytep rp = row;
png_bytep rp_stop = row + row_info->rowbytes;
png_const_bytep pp = prev_row;
uint8x8x4_t vdest;
vdest.val[3] = vdup_n_u8(0);
for (; rp < rp_stop; rp += 16, pp += 16)
{
uint32x2x4_t vtmp;
uint8x8x4_t *vrpt, *vppt;
uint8x8x4_t vrp, vpp;
uint32x2x4_t *temp_pointer;
vtmp = vld4_u32(png_ptr(uint32_t,rp));
vrpt = png_ptr(uint8x8x4_t,&vtmp);
vrp = *vrpt;
vtmp = vld4_u32(png_ptrc(uint32_t,pp));
vppt = png_ptr(uint8x8x4_t,&vtmp);
vpp = *vppt;
vdest.val[0] = vhadd_u8(vdest.val[3], vpp.val[0]);
vdest.val[0] = vadd_u8(vdest.val[0], vrp.val[0]);
vdest.val[1] = vhadd_u8(vdest.val[0], vpp.val[1]);
vdest.val[1] = vadd_u8(vdest.val[1], vrp.val[1]);
vdest.val[2] = vhadd_u8(vdest.val[1], vpp.val[2]);
vdest.val[2] = vadd_u8(vdest.val[2], vrp.val[2]);
vdest.val[3] = vhadd_u8(vdest.val[2], vpp.val[3]);
vdest.val[3] = vadd_u8(vdest.val[3], vrp.val[3]);
vst4_lane_u32(png_ptr(uint32_t,rp), png_ldr(uint32x2x4_t,&vdest), 0);
}
}
static uint8x8_t
paeth(uint8x8_t a, uint8x8_t b, uint8x8_t c)
{
uint8x8_t d, e;
uint16x8_t p1, pa, pb, pc;
p1 = vaddl_u8(a, b); /* a + b */
pc = vaddl_u8(c, c); /* c * 2 */
pa = vabdl_u8(b, c); /* pa */
pb = vabdl_u8(a, c); /* pb */
pc = vabdq_u16(p1, pc); /* pc */
p1 = vcleq_u16(pa, pb); /* pa <= pb */
pa = vcleq_u16(pa, pc); /* pa <= pc */
pb = vcleq_u16(pb, pc); /* pb <= pc */
p1 = vandq_u16(p1, pa); /* pa <= pb && pa <= pc */
d = vmovn_u16(pb);
e = vmovn_u16(p1);
d = vbsl_u8(d, b, c);
e = vbsl_u8(e, a, d);
return e;
}
void
png_read_filter_row_paeth3_neon(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
png_bytep rp = row;
png_const_bytep pp = prev_row;
png_bytep rp_stop = row + row_info->rowbytes;
uint8x16_t vtmp;
uint8x8x2_t *vrpt;
uint8x8x2_t vrp;
uint8x8_t vlast = vdup_n_u8(0);
uint8x8x4_t vdest;
vdest.val[3] = vdup_n_u8(0);
vtmp = vld1q_u8(rp);
vrpt = png_ptr(uint8x8x2_t,&vtmp);
vrp = *vrpt;
for (; rp < rp_stop; pp += 12)
{
uint8x8x2_t *vppt;
uint8x8x2_t vpp;
uint8x8_t vtmp1, vtmp2, vtmp3;
uint32x2_t *temp_pointer;
vtmp = vld1q_u8(pp);
vppt = png_ptr(uint8x8x2_t,&vtmp);
vpp = *vppt;
vdest.val[0] = paeth(vdest.val[3], vpp.val[0], vlast);
vdest.val[0] = vadd_u8(vdest.val[0], vrp.val[0]);
vtmp1 = vext_u8(vrp.val[0], vrp.val[1], 3);
vtmp2 = vext_u8(vpp.val[0], vpp.val[1], 3);
vdest.val[1] = paeth(vdest.val[0], vtmp2, vpp.val[0]);
vdest.val[1] = vadd_u8(vdest.val[1], vtmp1);
vtmp1 = vext_u8(vrp.val[0], vrp.val[1], 6);
vtmp3 = vext_u8(vpp.val[0], vpp.val[1], 6);
vdest.val[2] = paeth(vdest.val[1], vtmp3, vtmp2);
vdest.val[2] = vadd_u8(vdest.val[2], vtmp1);
vtmp1 = vext_u8(vrp.val[1], vrp.val[1], 1);
vtmp2 = vext_u8(vpp.val[1], vpp.val[1], 1);
vtmp = vld1q_u8(rp + 12);
vrpt = png_ptr(uint8x8x2_t,&vtmp);
vrp = *vrpt;
vdest.val[3] = paeth(vdest.val[2], vtmp2, vtmp3);
vdest.val[3] = vadd_u8(vdest.val[3], vtmp1);
vlast = vtmp2;
vst1_lane_u32(png_ptr(uint32_t,rp), png_ldr(uint32x2_t,&vdest.val[0]), 0);
rp += 3;
vst1_lane_u32(png_ptr(uint32_t,rp), png_ldr(uint32x2_t,&vdest.val[1]), 0);
rp += 3;
vst1_lane_u32(png_ptr(uint32_t,rp), png_ldr(uint32x2_t,&vdest.val[2]), 0);
rp += 3;
vst1_lane_u32(png_ptr(uint32_t,rp), png_ldr(uint32x2_t,&vdest.val[3]), 0);
rp += 3;
}
}
void
png_read_filter_row_paeth4_neon(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
{
png_bytep rp = row;
png_bytep rp_stop = row + row_info->rowbytes;
png_const_bytep pp = prev_row;
uint8x8_t vlast = vdup_n_u8(0);
uint8x8x4_t vdest;
vdest.val[3] = vdup_n_u8(0);
for (; rp < rp_stop; rp += 16, pp += 16)
{
uint32x2x4_t vtmp;
uint8x8x4_t *vrpt, *vppt;
uint8x8x4_t vrp, vpp;
uint32x2x4_t *temp_pointer;
vtmp = vld4_u32(png_ptr(uint32_t,rp));
vrpt = png_ptr(uint8x8x4_t,&vtmp);
vrp = *vrpt;
vtmp = vld4_u32(png_ptrc(uint32_t,pp));
vppt = png_ptr(uint8x8x4_t,&vtmp);
vpp = *vppt;
vdest.val[0] = paeth(vdest.val[3], vpp.val[0], vlast);
vdest.val[0] = vadd_u8(vdest.val[0], vrp.val[0]);
vdest.val[1] = paeth(vdest.val[0], vpp.val[1], vpp.val[0]);
vdest.val[1] = vadd_u8(vdest.val[1], vrp.val[1]);
vdest.val[2] = paeth(vdest.val[1], vpp.val[2], vpp.val[1]);
vdest.val[2] = vadd_u8(vdest.val[2], vrp.val[2]);
vdest.val[3] = paeth(vdest.val[2], vpp.val[3], vpp.val[2]);
vdest.val[3] = vadd_u8(vdest.val[3], vrp.val[3]);
vlast = vpp.val[3];
vst4_lane_u32(png_ptr(uint32_t,rp), png_ldr(uint32x2x4_t,&vdest), 0);
}
}
#endif /* PNG_ARM_NEON_OPT > 0 */
#endif /* PNG_ARM_NEON_IMPLEMENTATION == 1 (intrinsics) */
#endif /* READ */

View File

@@ -9,15 +9,15 @@
# #
# For regular ("tarball") distributions all the files should exist. We do not # For regular ("tarball") distributions all the files should exist. We do not
# want them to be updated *under any circumstances*. It should never be # want them to be updated *under any circumstances*. It should never be
# necessary to rune autogen.sh because ./configure --enable-maintainer-mode says # necessary to run autogen.sh because ./configure --enable-maintainer-mode says
# what to do if Makeile.am or configure.ac are changed. # what to do if Makefile.am or configure.ac are changed.
# #
# It is *probably* OK to update the files on a GIT checkout, because they have # It is *probably* OK to update the files on a GIT checkout, because they have
# come from the local tools, but leave that to the user who is assumed to know # come from the local tools, but leave that to the user who is assumed to know
# whether it is ok or required. # whether it is ok or required.
# #
# This script is intended to work without arguments, there are, however, hidden # This script is intended to work without arguments, there are, however, hidden
# arguments for (a) use while testing the script and (b) to fix up systems that # arguments (a) for use while testing the script and (b) to fix up systems that
# have been broken. If (b) is required the script prompts for the correct # have been broken. If (b) is required the script prompts for the correct
# options. For this reason the options are *NOT* documented in the help; this # options. For this reason the options are *NOT* documented in the help; this
# is deliberate; UTSL. # is deliberate; UTSL.
@@ -73,8 +73,13 @@ done
# present bad things are happening. # present bad things are happening.
# #
# 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"
#
# Files generated by versions of configue >2.68 or automake >1.13 (i.e. later
# versions than those required by configure.ac):
libpng_autotools_extra="compile config.h.in~"
# #
# 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\
@@ -94,6 +99,7 @@ libpng_configure_dirs=".deps"
# of Makefile. These functions do the two bits of cleaning. # of Makefile. These functions do the two bits of cleaning.
clean_autotools(){ clean_autotools(){
rm -rf $libpng_autotools_files $libpng_libtool_files $libpng_autotools_dirs rm -rf $libpng_autotools_files $libpng_libtool_files $libpng_autotools_dirs
rm -rf $libpng_autotools_extra
} }
clean_configure(){ clean_configure(){
@@ -198,7 +204,7 @@ case "$mode" in
echo " You can run autoreconf yourself if you don't like maintainer" echo " You can run autoreconf yourself if you don't like maintainer"
echo " mode and you can also just run autoreconf -f -i to initialize" echo " mode and you can also just run autoreconf -f -i to initialize"
echo " everything in the first place; this script is only for" echo " everything in the first place; this script is only for"
echo " compatiblity with prior releases." echo " compatibility with prior releases."
exit 1 exit 1
else else
exec >&2 exec >&2
@@ -213,7 +219,7 @@ case "$mode" in
exec >&2 exec >&2
echo "Your system has a partial set of autotools generated files." echo "Your system has a partial set of autotools generated files."
echo "autogen.sh is unable to proceed. The full set of files is" echo "autogen.sh is unable to proceed. The full set of files is"
echo "contained in the distribution archive and you do not need to run" echo "contained in the libpng 'tar' distribution archive and you do"
echo "autogen.sh if you use it." echo "not need to run autogen.sh if you use it."
exit 1;; exit 1;;
esac esac

View File

@@ -18,17 +18,19 @@ AC_PREREQ([2.68])
dnl Version number stuff here: dnl Version number stuff here:
AC_INIT([libpng],[1.6.0beta17],[png-mng-implement@lists.sourceforge.net]) AC_INIT([libpng],[1.6.19beta04],[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')
# color-tests requires automake 1.11 or later # color-tests requires automake 1.11 or later
# 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.11.1 fixes a security issue in 1.11 # 1.12.2 fixes a security issue in 1.11.2 and 1.12.1
AM_INIT_AUTOMAKE([1.11.1 foreign dist-xz dist-bzip2 color-tests silent-rules]) # 1.13 is required for parallel tests
# was: AM_INIT_AUTOMAKE([1.13 foreign dist-xz color-tests silent-rules subdir-objects])
# 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.0beta17 PNGLIB_VERSION=1.6.19beta04
PNGLIB_MAJOR=1 PNGLIB_MAJOR=1
PNGLIB_MINOR=6 PNGLIB_MINOR=6
PNGLIB_RELEASE=0 PNGLIB_RELEASE=19
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
@@ -185,9 +178,9 @@ AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
if test "$have_ld_version_script" = "yes"; then if test "$have_ld_version_script" = "yes"; then
AC_MSG_CHECKING([for symbol prefix]) AC_MSG_CHECKING([for symbol prefix])
SYMBOL_PREFIX=`echo "PREFIX=__USER_LABEL_PREFIX__" \ SYMBOL_PREFIX=`echo "PREFIX=__USER_LABEL_PREFIX__" \
| ${CPP-${CC-gcc} -E} - 2>&1 \ | ${CPP-${CC-gcc} -E} - 2>&1 \
| ${EGREP-grep} "^PREFIX=" \ | ${EGREP-grep} "^PREFIX=" \
| ${SED-sed} "s:^PREFIX=::"` | ${SED-sed} -e "s:^PREFIX=::" -e "s:__USER_LABEL_PREFIX__::"`
AC_SUBST(SYMBOL_PREFIX) AC_SUBST(SYMBOL_PREFIX)
AC_MSG_RESULT($SYMBOL_PREFIX) AC_MSG_RESULT($SYMBOL_PREFIX)
fi fi
@@ -233,18 +226,93 @@ 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 # Control over what links are made for installed files. Versioned files are
# compiles C code with a non-executable stack, it is necessary to do a fixup # always installed, when the following options are turned on corresponding
# here (this may by GCC specific) # unversioned links are also created (normally as symbolic links):
AC_SUBST([AM_CCASFLAGS], [-Wa,--noexecstack]) AC_ARG_ENABLE([unversioned-links],
AS_HELP_STRING([[[--enable-unversioned-links]]],
[Installed libpng header files are placed in a versioned subdirectory]
[and installed libpng library (including DLL) files are versioned.]
[If this option is enabled unversioned links will be created pointing to]
[the corresponding installed files. If you use libpng.pc or]
[libpng-config for all builds you do not need these links, but if you]
[compile programs directly they will typically #include <png.h> and]
[link with -lpng; in that case you need the links.]
[The links can be installed manually using 'make install-header-links']
[and 'make install-library-links' and can be removed using the]
[corresponding uninstall- targets. If you do enable this option every]
[libpng 'make install' will recreate the links to point to the just]
[installed version of libpng. The default is to create the links;]
[use --disable-unversioned-links to change this]))
# The AM_CONDITIONAL test is written so that the default is enabled;
# --disable-unversioned-links must be given to turn the option off.
AM_CONDITIONAL([DO_INSTALL_LINKS],[test "$enable_unversioned_links" != "no"])
AC_ARG_ENABLE([unversioned-libpng-pc],
AS_HELP_STRING([[[--enable-unversioned-libpng-pc]]],
[Install the configuration file 'libpng.pc' as a link to the versioned]
[version. This is done by default - use --disable-unversioned-libpng-pc]
[to change this.]))
AM_CONDITIONAL([DO_INSTALL_LIBPNG_PC],
[test "$enable_unversioned_libpng_pc" != "no"])
AC_ARG_ENABLE([unversioned-libpng-config],
AS_HELP_STRING([[[--enable-unversioned-libpng-config]]],
[Install the configuration file 'libpng-config' as a link to the]
[versioned version. This is done by default - use]
[--disable-unversioned-libpng-config to change this.]))
AM_CONDITIONAL([DO_INSTALL_LIBPNG_CONFIG],
[test "$enable_unversioned_libpng_config" != "no"])
# HOST SPECIFIC OPTIONS
# =====================
#
# 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_ARM_NEON], [1], [Enable ARM NEON optimizations]) [no/off: disable the optimizations; check: use internal checking code]
AC_DEFINE([PNG_ALIGNED_MEMORY_SUPPORTED], [1], [Align row buffers]) [(deprecated and poorly supported); api: disable by default, enable by]
fi]) [a call to png_set_option; yes/on: turn on unconditionally.]
AM_CONDITIONAL([PNG_ARM_NEON], [test "${enable_arm_neon:-no}" = yes]) [If not specified: determined by the compiler.]),
[case "$enableval" in
no|off)
# 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*|aarch64*) :;;
*) test "$enable_arm_neon" != '';;
esac])
AC_MSG_NOTICE([[Extra options for compiler: $PNG_COPTS]]) AC_MSG_NOTICE([[Extra options for compiler: $PNG_COPTS]])

View File

@@ -1,4 +1,5 @@
This "contrib" directory contains contributions which are not necessarily under This "contrib" directory contains contributions which are not necessarily under
the libpng license, although all are open source. They are not part of the libpng license, although all are open source. They are not part of
libpng proper and are not used for building the library. libpng proper and are not used for building the library, although some are used
for testing the library via "make check".

83
contrib/arm-neon/README Normal file
View File

@@ -0,0 +1,83 @@
OPERATING SYSTEM SPECIFIC ARM NEON DETECTION
--------------------------------------------
Detection of the ability to execute ARM NEON on an ARM processor requires
operating system support. (The information is not available in user mode.)
HOW TO USE THIS
---------------
This directory contains C code fragments that can be included in arm/arm_init.c
by setting the macro PNG_ARM_NEON_FILE to the file name in "" or <> at build
time. This setting is not recorded in pnglibconf.h and can be changed simply by
rebuilding arm/arm_init.o with the required macro definition.
For any of this code to be used the ARM NEON code must be enabled and run time
checks must be supported. I.e.:
#if PNG_ARM_NEON_OPT > 0
#ifdef PNG_ARM_NEON_CHECK_SUPPORTED
This is done in a 'configure' build by passing configure the argument:
--enable-arm-neon=check
Apart from the basic Linux implementation in contrib/arm-neon/linux.c this code
is unsupported. That means that it is not even compiled on a regular basis and
may be broken in any given minor release.
FILE FORMAT
-----------
Each file documents its testing status as of the last time it was tested (which
may have been a long time ago):
STATUS: one of:
SUPPORTED: This indicates that the file is included in the regularly
performed test builds and bugs are fixed when discovered.
COMPILED: This indicates that the code did compile at least once. See the
more detailed description for the extent to which the result was
successful.
TESTED: This means the code was fully compiled into the libpng test programs
and these were run at least once.
BUG REPORTS: an email address to which to send reports of problems
The file is a fragment of C code. It should not define any 'extern' symbols;
everything should be static. It must define the function:
static int png_have_neon(png_structp png_ptr);
That function must return 1 if ARM NEON instructions are supported, 0 if not.
It must not execute png_error unless it detects a bug. A png_error will prevent
the reading of the PNG and in the future, writing too.
BUG REPORTS
-----------
If you mail a bug report for any file that is not SUPPORTED there may only be
limited response. Consider fixing it and sending a patch to fix the problem -
this is more likely to result in action.
CONTRIBUTIONS
-------------
You may send contributions of new implementations to
png-mng-implement@sourceforge.net. Please write code in strict C90 C where
possible. Obviously OS dependencies are to be expected. If you submit code you
must have the authors permission and it must have a license that is acceptable
to the current maintainer; in particular that license must permit modification
and redistribution.
Please try to make the contribution a single file and give the file a clear and
unambiguous name that identifies the target OS. If multiple files really are
required put them all in a sub-directory.
You must also be prepared to handle bug reports from users of the code, either
by joining the png-mng-implement mailing list or by providing an email for the
"BUG REPORTS" entry or both. Please make sure that the header of the file
contains the STATUS and BUG REPORTS fields as above.
Please list the OS requirements as precisely as possible. Ideally you should
also list the environment in which the code has been tested and certainly list
any environments where you suspect it might not work.

View File

@@ -0,0 +1,39 @@
/* contrib/arm-neon/android-ndk.c
*
* Copyright (c) 2014 Glenn Randers-Pehrson
* Written by John Bowler, 2014.
* Last changed in libpng 1.6.10 [March 6, 2014]
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
* and license in png.h
*
* SEE contrib/arm-neon/README before reporting bugs
*
* STATUS: COMPILED, UNTESTED
* BUG REPORTS: png-mng-implement@sourceforge.net
*
* png_have_neon implemented for the Android NDK, see:
*
* Documentation:
* http://www.kandroid.org/ndk/docs/CPU-ARM-NEON.html
* http://code.google.com/p/android/issues/detail?id=49065
*
* NOTE: this requires that libpng is built against the Android NDK and linked
* with an implementation of the Android ARM 'cpu-features' library. The code
* has been compiled only, not linked: no version of the library has been found,
* only the header files exist in the NDK.
*/
#include <cpu-features.h>
static int
png_have_neon(png_structp png_ptr)
{
/* This is a whole lot easier than the linux code, 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;
}

View File

@@ -0,0 +1,120 @@
/* contrib/arm-neon/linux-auxv.c
*
* Copyright (c) 2014 Glenn Randers-Pehrson
* Written by Mans Rullgard, 2011.
* Last changed in libpng 1.6.10 [March 6, 2014]
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
* and license in png.h
*
* SEE contrib/arm-neon/README before reporting bugs
*
* STATUS: COMPILED, TESTED
* BUG REPORTS: png-mng-implement@sourceforge.net
*
* png_have_neon implemented for Linux versions which allow access to
* /proc/self/auxv. This is probably faster, cleaner and safer than the code to
* read /proc/cpuinfo in contrib/arm-neon/linux, however it is yet another piece
* of potentially untested code and has more complex dependencies than the code
* to read cpuinfo.
*
* This 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 <asm/hwcap.h>
/* 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)
{
size_t ntotal = 0;
char *buffer = png_voidcast(char*, buffer_in);
while (nbytes > 0)
{
unsigned int nread;
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)
{
/* This is the devil in the details, a read can terminate early with 0
* 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;
}
}
close(fd);
return 0;
}

161
contrib/arm-neon/linux.c Normal file
View File

@@ -0,0 +1,161 @@
/* contrib/arm-neon/linux.c
*
* Copyright (c) 2014 Glenn Randers-Pehrson
* Written by John Bowler, 2014.
* Last changed in libpng 1.6.16 [December 22, 2014]
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
* and license in png.h
*
* SEE contrib/arm-neon/README before reporting bugs
*
* STATUS: SUPPORTED
* BUG REPORTS: png-mng-implement@sourceforge.net
*
* png_have_neon implemented for Linux by reading the widely available
* pseudo-file /proc/cpuinfo.
*
* This code is strict ANSI-C and is probably moderately portable; it does
* however use <stdio.h> and it assumes that /proc/cpuinfo is never localized.
*/
#include <stdio.h>
static int
png_have_neon(png_structp png_ptr)
{
FILE *f = fopen("/proc/cpuinfo", "rb");
if (f != NULL)
{
/* This is a simple state machine which reads the input byte-by-byte until
* it gets a match on the 'neon' feature or reaches the end of the stream.
*/
static const char ch_feature[] = { 70, 69, 65, 84, 85, 82, 69, 83 };
static const char ch_neon[] = { 78, 69, 79, 78 };
enum
{
StartLine, Feature, Colon, StartTag, Neon, HaveNeon, SkipTag, SkipLine
} state;
int counter;
for (state=StartLine, counter=0;;)
{
int ch = fgetc(f);
if (ch == EOF)
{
/* EOF means error or end-of-file, return false; neon at EOF is
* assumed to be a mistake.
*/
fclose(f);
return 0;
}
switch (state)
{
case StartLine:
/* Match spaces at the start of line */
if (ch <= 32) /* skip control characters and space */
break;
counter=0;
state = Feature;
/* FALL THROUGH */
case Feature:
/* Match 'FEATURE', ASCII case insensitive. */
if ((ch & ~0x20) == ch_feature[counter])
{
if (++counter == (sizeof ch_feature))
state = Colon;
break;
}
/* did not match 'feature' */
state = SkipLine;
/* FALL THROUGH */
case SkipLine:
skipLine:
/* Skip everything until we see linefeed or carriage return */
if (ch != 10 && ch != 13)
break;
state = StartLine;
break;
case Colon:
/* Match any number of space or tab followed by ':' */
if (ch == 32 || ch == 9)
break;
if (ch == 58) /* i.e. ':' */
{
state = StartTag;
break;
}
/* Either a bad line format or a 'feature' prefix followed by
* other characters.
*/
state = SkipLine;
goto skipLine;
case StartTag:
/* Skip space characters before a tag */
if (ch == 32 || ch == 9)
break;
state = Neon;
counter = 0;
/* FALL THROUGH */
case Neon:
/* Look for 'neon' tag */
if ((ch & ~0x20) == ch_neon[counter])
{
if (++counter == (sizeof ch_neon))
state = HaveNeon;
break;
}
state = SkipTag;
/* FALL THROUGH */
case SkipTag:
/* Skip non-space characters */
if (ch == 10 || ch == 13)
state = StartLine;
else if (ch == 32 || ch == 9)
state = StartTag;
break;
case HaveNeon:
/* Have seen a 'neon' prefix, but there must be a space or new
* line character to terminate it.
*/
if (ch == 10 || ch == 13 || ch == 32 || ch == 9)
{
fclose(f);
return 1;
}
state = SkipTag;
break;
default:
png_error(png_ptr, "png_have_neon: internal error (bug)");
}
}
}
#ifdef PNG_WARNINGS_SUPPORTED
else
png_warning(png_ptr, "/proc/cpuinfo open failed");
#endif
return 0;
}

49
contrib/conftest/README Normal file
View File

@@ -0,0 +1,49 @@
This directory contains test configuration files, currently always '.dfa' files
intended to be used in the build by setting the make macro DFA_XTRA to the name
of the file.
These files are used in release validation of the 'configure' builds of libpng
by building 'make check', or 'make all-am' for cross-builds, with each .dfa
file.
The files in this directory may change between minor releases, however
contributions describing specific builds of libpng are welcomed. There is no
guarantee that libpng will continue to build with such configurations; support
for given configurations can be, and has been, dropped between successive minor
releases. However if a .dfa file describing a configuration is not in this
directory it is very unlikely that it will be tested before a minor release!
You can use these .dfa files as the basis of new configurations. Files in this
directory should not have any use restrictions or restrictive licenses.
This directory is not included in the .zip and .7z distributions, which do
not contain 'configure' scripts.
DOCUMENTATION
=============
Examples:
${srcdir}/pngusr.dfa
${srcdir}/contrib/pngminim/*/pngusr.dfa
Documentation of the options:
${srcdir}/scripts/pnglibconf.dfa
Documentation of the file format:
${srcdir}/scripts/options.awk
FILE NAMING
===========
File names in this directory may NOT contain any of the five characters:
- , + * ?
Neither may they contain any space character.
While other characters may be used it is strongly suggested that file names be
limited to lower case Latiin alphabetic characters (a-z), digits (0-9) and, if
necessary the underscore (_) character. File names should be about 8 characters
long (excluding the .dfa extension). Submitted .dfa files should have names
between 7 and 16 characters long, shorter names (6 characters or less) are
reserved for standard tests.

58
contrib/conftest/read.dfa Normal file
View File

@@ -0,0 +1,58 @@
# read.dfa
# Build time configuration of libpng
#
# Author: John Bowler
# Copyright: (c) John Bowler, 2013
# Usage rights:
# 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:
# United States.
#
# Build libpng with basic read support. This enables the lowest level libpng
# read API - the one where the calling code has to use a loop to read each row.
# At present this is the API used by most programs.
#
# Support is enabled only for those chunks and transformations that are
# typically required - others can be added easily.
#
everything = off
# The sequential read code is enabled here; the progressive code can be used
# instead but there is no point enabling both.
option SEQUENTIAL_READ on
# Likewise it is pointless enabling both fixed and floating point APIs. Choose
# one or the other for both the API and the internal math.
#Fixed point:
#option FIXED_POINT on
#option FLOATING_ARITHMETIC off
#Floating point:
option FLOATING_POINT on
option FLOATING_ARITHMETIC on
# Basic error handling, IO and user memory support. The latter allows the
# application program to provide its own implementations of 'malloc' and 'free'.
option SETJMP on
option STDIO on
option USER_MEM on
# To read the full set of PNG images correctly interlace, transparency and
# 16-bit support is required. The application can implement interlace itself,
# but very few do and it's no longer possible to disable it when READ is
# enabled.
option READ_tRNS on
option READ_16BIT on
# Everything else is application dependent. This file assumes the app handles
# all the native PNG bit layouts, so it doesn't need any of layout change
# transforms, but needs libpng to perform gamma correction. It doesn't do any
# colorspace stuff and ignores the 'significant bit' information.
#
# If your app always expands the image to a limited set of bit layouts you
# probably want to consider using the simplified API instead of the low level
# one - see png.h and s_read.dfa.
option READ_GAMMA on

View File

@@ -0,0 +1,35 @@
# s_read.dfa
# Build time configuration of libpng
#
# Author: John Bowler
# Copyright: (c) John Bowler, 2013
# Usage rights:
# 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:
# United States.
#
# Build libpng with simplified read support (only). This builds a minimal
# libpng able to read all PNG formats and convert them into a small number of
# well understood memory formats.
#
everything = off
option SIMPLIFIED_READ on
# It isn't necessary to chose fixed or floating point for the APIs because the
# simplified API doesn't need fixed or floating point numbers. It is necessary
# to chose an internal math implementation. The default (because of 'everything
# = off') is fixed point - turn the floating point implementation on if you have
# hardware floating point or prefer your software floating point implementation.
option FLOATING_ARITHMETIC on
# This is not strictly necessary, but without it the message strings in the API
# will not be filled in
option ERROR_TEXT on
# Switching these options on enables the 'AFIRST' and 'BGR' formats - you don't
# need this if you don't use them, they just allow the in-memory layout to be
# changed to match common hardware formats.
option SIMPLIFIED_READ_AFIRST on
option SIMPLIFIED_READ_BGR on

View File

@@ -0,0 +1,33 @@
# s_write.dfa
# Build time configuration of libpng
#
# Author: John Bowler
# Copyright: (c) John Bowler, 2013
# Usage rights:
# 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:
# United States.
#
# Build libpng with (just) simplified write support
#
everything = off
option SIMPLIFIED_WRITE on
# It isn't necessary to chose fixed or floating point for the APIs because the
# simplified API doesn't need fixed or floating point numbers. It is necessary
# to chose an internal math implementation. The default (because of 'everything
# = off') is fixed point - turn the floating point implementation on if you have
# hardware floating point or prefer your software floating point implementation.
option FLOATING_ARITHMETIC on
# This is not strictly necessary, but without it the message strings in the API
# will not be filled in
option ERROR_TEXT on
# Switching these options on enables the 'AFIRST' and 'BGR' formats - you don't
# need this if you don't use them, they just allow the in-memory layout to be
# changed to match common hardware formats.
option SIMPLIFIED_WRITE_AFIRST on
option SIMPLIFIED_WRITE_BGR on

View File

@@ -0,0 +1,36 @@
# simple.dfa
# Build time configuration of libpng
#
# Author: John Bowler
# Copyright: (c) John Bowler, 2013
# Usage rights:
# 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:
# United States.
#
# Build libpng with just the simplified APIs (read and write).
#
everything = off
option SIMPLIFIED_WRITE on
option SIMPLIFIED_READ on
# It isn't necessary to chose fixed or floating point for the APIs because the
# simplified API doesn't need fixed or floating point numbers. It is necessary
# to chose an internal math implementation. The default (because of 'everything
# = off') is fixed point - turn the floating point implementation on if you have
# hardware floating point or prefer your software floating point implementation.
option FLOATING_ARITHMETIC on
# This is not strictly necessary, but without it the message strings in the API
# will not be filled in
option ERROR_TEXT on
# Switching these options on enables the 'AFIRST' and 'BGR' formats - you don't
# need this if you don't use them, they just allow the in-memory layout to be
# changed to match common hardware formats.
option SIMPLIFIED_READ_AFIRST on
option SIMPLIFIED_READ_BGR on
option SIMPLIFIED_WRITE_AFIRST on
option SIMPLIFIED_WRITE_BGR on

View File

@@ -0,0 +1,45 @@
# write.dfa
# Build time configuration of libpng
#
# Author: John Bowler
# Copyright: (c) John Bowler, 2013
# Usage rights:
# 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:
# United States.
#
# Build libpng with no read support and minimal write support.
#
everything = off
# Switch on the write code - this makes a minimalist encoder
option WRITE on
# Choose fixed or floating point APIs and arithmetic. The choices are
# independent but normally they will match. It is typically better to use the
# floating point if you have floating point hardware. If you don't know, or
# (perhaps) to make libpng smaller used fixed point throughout.
#Fixed point:
#option FIXED_POINT on
#option FLOATING_ARITHMETIC off
#Floating point:
option FLOATING_POINT on
option FLOATING_ARITHMETIC on
# Basic error handling, IO and user memory support. The latter allows the
# application program to provide its own implementations of 'malloc' and 'free'.
option SETJMP on
option STDIO on
option USER_MEM on
# Everything else is optional. Unlike the read code in libpng the write code
# does not need to deal with arbitrary formats, so only add support for things
# you really do write! For example you might only write sRGB images, sometimes
# with transparency and never write 16 bit images, so:
option WRITE_sRGB on
option WRITE_tRNS on
#option WRITE_16BIT off (this is the default with 'everything = off')

View File

@@ -6,9 +6,9 @@
* United States. * United States.
* *
* Extract any icc profiles found in the given PNG files. This is a simple * Extract any icc profiles found in the given PNG files. This is a simple
* example of a program which extracts information from the header of a PNG file * example of a program that extracts information from the header of a PNG file
* without processing the image. Notice that some header information may occur * without processing the image. Notice that some header information may occur
* after the image data, textual data and comments are an example; the approach * after the image data. Textual data and comments are an example; the approach
* in this file won't work reliably for such data because it only looks for the * in this file won't work reliably for such data because it only looks for the
* information in the section of the file that preceeds the image data. * information in the section of the file that preceeds the image data.
* *
@@ -26,6 +26,10 @@
#include <png.h> #include <png.h>
#if defined(PNG_READ_SUPPORTED) && defined(PNG_STDIO_SUPPORTED) && \
defined (PNG_iCCP_SUPPORTED)
static int verbose = 1; static int verbose = 1;
static png_byte no_profile[] = "no profile"; static png_byte no_profile[] = "no profile";
@@ -178,3 +182,4 @@ main(int argc, char **argv)
/* Exit code is true if any extract succeeds */ /* Exit code is true if any extract succeeds */
return extracted == 0; return extracted == 0;
} }
#endif /* READ && STDIO && iCCP */

View File

@@ -8,7 +8,7 @@
* Read a single pixel value from a PNG file. * Read a single pixel value from a PNG file.
* *
* This code illustrates basic 'by-row' reading of a PNG file using libpng. * This code illustrates basic 'by-row' reading of a PNG file using libpng.
* Rows are read until a particular pixel is found, the value of this pixel is * Rows are read until a particular pixel is found; the value of this pixel is
* then printed on stdout. * then printed on stdout.
* *
* The code illustrates how to do this on interlaced as well as non-interlaced * The code illustrates how to do this on interlaced as well as non-interlaced
@@ -27,6 +27,8 @@
*/ */
#include "../../png.h" #include "../../png.h"
#if defined(PNG_READ_SUPPORTED) && defined(PNG_SEQUENTIAL_READ_SUPPORTED)
/* Return component 'c' of pixel 'x' from the given row. */ /* Return component 'c' of pixel 'x' from the given row. */
static unsigned int static unsigned int
component(png_const_bytep row, png_uint_32 x, unsigned int c, component(png_const_bytep row, png_uint_32 x, unsigned int c,
@@ -37,7 +39,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);
@@ -56,7 +58,7 @@ component(png_const_bytep row, png_uint_32 x, unsigned int c,
case 8: return row[0]; case 8: return row[0];
case 16: return (row[0] << 8) + row[1]; case 16: return (row[0] << 8) + row[1];
default: default:
/* This should never happen, it indicates a bug in this program or in /* This should never happen; it indicates a bug in this program or in
* libpng itself: * libpng itself:
*/ */
fprintf(stderr, "pngpixel: invalid bit depth %u\n", bit_depth); fprintf(stderr, "pngpixel: invalid bit depth %u\n", bit_depth);
@@ -85,7 +87,7 @@ print_pixel(png_structp png_ptr, png_infop info_ptr, png_const_bytep row,
*/ */
case PNG_COLOR_TYPE_PALETTE: case PNG_COLOR_TYPE_PALETTE:
{ {
PNG_CONST unsigned int index = component(row, x, 0, bit_depth, 1); PNG_CONST int index = component(row, x, 0, bit_depth, 1);
png_colorp palette = NULL; png_colorp palette = NULL;
int num_palette = 0; int num_palette = 0;
@@ -132,7 +134,7 @@ print_pixel(png_structp png_ptr, png_infop info_ptr, png_const_bytep row,
return; return;
default: default:
png_error(png_ptr, "invalid color type"); png_error(png_ptr, "pngpixel: invalid color type");
} }
} }
@@ -273,7 +275,7 @@ int main(int argc, const char **argv)
ystep = xstep = 1; ystep = xstep = 1;
} }
/* To find the pixel loop over 'py' for each pass /* To find the pixel, loop over 'py' for each pass
* reading a row and then checking to see if it * reading a row and then checking to see if it
* contains the pixel. * contains the pixel.
*/ */
@@ -283,12 +285,13 @@ int main(int argc, const char **argv)
/* png_read_row takes two pointers. When libpng /* png_read_row takes two pointers. When libpng
* handles the interlace the first is filled in * handles the interlace the first is filled in
* pixel-by-pixel, the second receives the same * pixel-by-pixel, and the second receives the same
* pixels but they are replicated across the * pixels but they are replicated across the
* unwritten pixels so far for each pass. When we * unwritten pixels so far for each pass. When we
* do the interlace, however, they just contain * do the interlace, however, they just contain
* the pixels from the interlace pass - giving * the pixels from the interlace pass - giving
* both is wasteful and pointless. * both is wasteful and pointless, so we pass a
* NULL pointer.
*/ */
png_read_row(png_ptr, row_tmp, NULL); png_read_row(png_ptr, row_tmp, NULL);
@@ -326,7 +329,7 @@ int main(int argc, const char **argv)
else else
{ {
/* Else libpng has raised an error. An error message has /* Else libpng has raised an error. An error message has
* already been output, it is only necessary to clean up * already been output, so it is only necessary to clean up
* locally allocated data: * locally allocated data:
*/ */
if (row != NULL) if (row != NULL)
@@ -365,3 +368,4 @@ int main(int argc, const char **argv)
return result; return result;
} }
#endif /* READ && SEQUENTIAL_READ */

View File

@@ -20,6 +20,8 @@
* ensure the code picks up the local libpng implementation: * ensure the code picks up the local libpng implementation:
*/ */
#include "../../png.h" #include "../../png.h"
#if defined(PNG_SIMPLIFIED_READ_SUPPORTED) && \
defined(PNG_SIMPLIFIED_WRITE_SUPPORTED)
int main(int argc, const char **argv) int main(int argc, const char **argv)
{ {
@@ -29,13 +31,17 @@ int main(int argc, const char **argv)
{ {
png_image image; png_image image;
/* Only the image structure version number needs to be set. */
memset(&image, 0, sizeof image); memset(&image, 0, sizeof image);
image.version = PNG_IMAGE_VERSION;
if (png_image_begin_read_from_file(&image, argv[1])) if (png_image_begin_read_from_file(&image, argv[1]))
{ {
png_bytep buffer; png_bytep buffer;
/* Change this to try different formats! */ /* Change this to try different formats! If you set a colormap format
* then you must also supply a colormap below.
*/
image.format = PNG_FORMAT_RGBA; image.format = PNG_FORMAT_RGBA;
buffer = malloc(PNG_IMAGE_SIZE(image)); buffer = malloc(PNG_IMAGE_SIZE(image));
@@ -43,10 +49,11 @@ int main(int argc, const char **argv)
if (buffer != NULL) if (buffer != NULL)
{ {
if (png_image_finish_read(&image, NULL/*background*/, buffer, if (png_image_finish_read(&image, NULL/*background*/, buffer,
0/*row_stride*/)) 0/*row_stride*/, NULL/*colormap for PNG_FORMAT_FLAG_COLORMAP */))
{ {
if (png_image_write_to_file(&image, argv[2], if (png_image_write_to_file(&image, argv[2],
0/*convert_to_8bit*/, buffer, 0/*row_stride*/)) 0/*convert_to_8bit*/, buffer, 0/*row_stride*/,
NULL/*colormap*/))
result = 0; result = 0;
else else
@@ -85,3 +92,4 @@ int main(int argc, const char **argv)
return result; return result;
} }
#endif /* READ && WRITE */

View File

@@ -0,0 +1,648 @@
/*- simpleover
*
* COPYRIGHT: Written by John Cunningham Bowler, 2015.
* 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:
* United States.
*
* Read several PNG files, which should have an alpha channel or transparency
* information, and composite them together to produce one or more 16-bit linear
* RGBA intermediates. This involves doing the correct 'over' composition to
* combine the alpha channels and corresponding data.
*
* Finally read an output (background) PNG using the 24-bit RGB format (the
* PNG will be composited on green (#00ff00) by default if it has an alpha
* channel), and apply the intermediate image generated above to specified
* locations in the image.
*
* The command line has the general format:
*
* simpleover <background.png> [output.png]
* {--sprite=width,height,name {[--at=x,y] {sprite.png}}}
* {--add=name {x,y}}
*
* The --sprite and --add options may occur multiple times. They are executed
* in order. --add may refer to any sprite already read.
*
* This code is intended to show how to composite multiple images together
* correctly. Apart from the libpng Simplified API the only work done in here
* is to combine multiple input PNG images into a single sprite; this involves
* a Porter-Duff 'over' operation and the input PNG images may, as a result,
* be regarded as being layered one on top of the other with the first (leftmost
* on the command line) being at the bottom and the last on the top.
*/
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
/* Normally use <png.h> here to get the installed libpng, but this is done to
* ensure the code picks up the local libpng implementation, so long as this
* file is linked against a sufficiently recent libpng (1.6+) it is ok to
* change this to <png.h>:
*/
#include "../../png.h"
#ifdef PNG_SIMPLIFIED_READ_SUPPORTED
#define sprite_name_chars 15
struct sprite {
FILE *file;
png_uint_16p buffer;
unsigned int width;
unsigned int height;
char name[sprite_name_chars+1];
};
#if 0 /* div by 65535 test program */
#include <math.h>
#include <stdio.h>
int main(void) {
double err = 0;
unsigned int xerr = 0;
unsigned int r = 32769;
{
unsigned int x = 0;
do {
unsigned int t = x + (x >> 16) /*+ (x >> 31)*/ + r;
double v = x, errtest;
if (t < x) {
fprintf(stderr, "overflow: %u+%u -> %u\n", x, r, t);
return 1;
}
v /= 65535;
errtest = v;
t >>= 16;
errtest -= t;
if (errtest > err) {
err = errtest;
xerr = x;
if (errtest >= .5) {
fprintf(stderr, "error: %u/65535 = %f, not %u, error %f\n",
x, v, t, errtest);
return 0;
}
}
} while (++x <= 65535U*65535U);
}
printf("error %f @ %u\n", err, xerr);
return 0;
}
#endif /* div by 65535 test program */
static void
sprite_op(const struct sprite *sprite, int x_offset, int y_offset,
png_imagep image, const png_uint_16 *buffer)
{
/* This is where the Porter-Duff 'Over' operator is evaluated; change this
* code to change the operator (this could be parameterized). Any other
* image processing operation could be used here.
*/
/* Check for an x or y offset that pushes any part of the image beyond the
* right or bottom of the sprite:
*/
if ((y_offset < 0 || (unsigned)/*SAFE*/y_offset < sprite->height) &&
(x_offset < 0 || (unsigned)/*SAFE*/x_offset < sprite->width))
{
unsigned int y = 0;
if (y_offset < 0)
y = -y_offset; /* Skip to first visible row */
do
{
unsigned int x = 0;
if (x_offset < 0)
x = -x_offset;
do
{
/* In and out are RGBA values, so: */
const png_uint_16 *in_pixel = buffer + (y * image->width + x)*4;
png_uint_32 in_alpha = in_pixel[3];
/* This is the optimized Porter-Duff 'Over' operation, when the
* input alpha is 0 the output is not changed.
*/
if (in_alpha > 0)
{
png_uint_16 *out_pixel = sprite->buffer +
((y+y_offset) * sprite->width + (x+x_offset))*4;
/* This is the weight to apply to the output: */
in_alpha = 65535-in_alpha;
if (in_alpha > 0)
{
/* The input must be composed onto the output. This means
* multiplying the current output pixel value by the inverse
* of the input alpha (1-alpha). A division is required but
* it is by the constant 65535. Approximate this as:
*
* (x + (x >> 16) + 32769) >> 16;
*
* This is exact (and does not overflow) for all values of
* x in the range 0..65535*65535. (Note that the calculation
* produces the closest integer; the maximum error is <0.5).
*/
png_uint_32 tmp;
# define compose(c)\
tmp = out_pixel[c] * in_alpha;\
tmp = (tmp + (tmp >> 16) + 32769) >> 16;\
out_pixel[c] = tmp + in_pixel[c]
/* The following is very vectorizable... */
compose(0);
compose(1);
compose(2);
compose(3);
}
else
out_pixel[0] = in_pixel[0],
out_pixel[1] = in_pixel[1],
out_pixel[2] = in_pixel[2],
out_pixel[3] = in_pixel[3];
}
}
while (++x < image->width);
}
while (++y < image->height);
}
}
static int
create_sprite(struct sprite *sprite, int *argc, const char ***argv)
{
/* Read the arguments and create this sprite. The sprite buffer has already
* been allocated. This reads the input PNGs one by one in linear format,
* composes them onto the sprite buffer (the code in the function above)
* then saves the result, converting it on the fly to PNG RGBA 8-bit format.
*/
while (*argc > 0)
{
char tombstone;
int x = 0, y = 0;
if ((*argv)[0][0] == '-' && (*argv)[0][1] == '-')
{
/* The only supported option is --at. */
if (sscanf((*argv)[0], "--at=%d,%d%c", &x, &y, &tombstone) != 2)
break; /* success; caller will parse this option */
++*argv, --*argc;
}
else
{
/* The argument has to be a file name */
png_image image;
image.version = PNG_IMAGE_VERSION;
image.opaque = NULL;
if (png_image_begin_read_from_file(&image, (*argv)[0]))
{
png_uint_16p buffer;
image.format = PNG_FORMAT_LINEAR_RGB_ALPHA;
buffer = malloc(PNG_IMAGE_SIZE(image));
if (buffer != NULL)
{
if (png_image_finish_read(&image, NULL/*background*/, buffer,
0/*row_stride*/,
NULL/*colormap for PNG_FORMAT_FLAG_COLORMAP*/))
{
/* This is the place where the Porter-Duff 'Over' operator
* needs to be done by this code. In fact, any image
* processing required can be done here; the data is in
* the correct format (linear, 16-bit) and source and
* destination are in memory.
*/
sprite_op(sprite, x, y, &image, buffer);
free(buffer);
++*argv, --*argc;
/* And continue to the next argument */
continue;
}
else
{
free(buffer);
fprintf(stderr, "simpleover: read %s: %s\n", (*argv)[0],
image.message);
}
}
else
{
fprintf(stderr, "simpleover: out of memory: %lu bytes\n",
(unsigned long)PNG_IMAGE_SIZE(image));
/* png_image_free must be called if we abort the Simplified API
* read because of a problem detected in this code. If problems
* are detected in the Simplified API it cleans up itself.
*/
png_image_free(&image);
}
}
else
{
/* Failed to read the first argument: */
fprintf(stderr, "simpleover: %s: %s\n", (*argv)[0], image.message);
}
return 0; /* failure */
}
}
/* All the sprite operations have completed successfully. Save the RGBA
* buffer as a PNG using the simplified write API.
*/
sprite->file = tmpfile();
if (sprite->file != NULL)
{
png_image save;
memset(&save, 0, sizeof save);
save.version = PNG_IMAGE_VERSION;
save.opaque = NULL;
save.width = sprite->width;
save.height = sprite->height;
save.format = PNG_FORMAT_LINEAR_RGB_ALPHA;
save.flags = PNG_IMAGE_FLAG_FAST;
save.colormap_entries = 0;
if (png_image_write_to_stdio(&save, sprite->file, 1/*convert_to_8_bit*/,
sprite->buffer, 0/*row_stride*/, NULL/*colormap*/))
{
/* Success; the buffer is no longer needed: */
free(sprite->buffer);
sprite->buffer = NULL;
return 1; /* ok */
}
else
fprintf(stderr, "simpleover: write sprite %s: %s\n", sprite->name,
save.message);
}
else
fprintf(stderr, "simpleover: sprite %s: could not allocate tmpfile: %s\n",
sprite->name, strerror(errno));
return 0; /* fail */
}
static int
add_sprite(png_imagep output, png_bytep out_buf, struct sprite *sprite,
int *argc, const char ***argv)
{
/* Given a --add argument naming this sprite, perform the operations listed
* in the following arguments. The arguments are expected to have the form
* (x,y), which is just an offset at which to add the sprite to the
* output.
*/
while (*argc > 0)
{
char tombstone;
int x, y;
if ((*argv)[0][0] == '-' && (*argv)[0][1] == '-')
return 1; /* success */
if (sscanf((*argv)[0], "%d,%d%c", &x, &y, &tombstone) == 2)
{
/* Now add the new image into the sprite data, but only if it
* will fit.
*/
if (x < 0 || y < 0 ||
(unsigned)/*SAFE*/x >= output->width ||
(unsigned)/*SAFE*/y >= output->height ||
sprite->width > output->width-x ||
sprite->height > output->height-y)
{
fprintf(stderr, "simpleover: sprite %s @ (%d,%d) outside image\n",
sprite->name, x, y);
/* Could just skip this, but for the moment it is an error */
return 0; /* error */
}
else
{
/* Since we know the sprite fits we can just read it into the
* output using the simplified API.
*/
png_image in;
in.version = PNG_IMAGE_VERSION;
rewind(sprite->file);
if (png_image_begin_read_from_stdio(&in, sprite->file))
{
in.format = PNG_FORMAT_RGB; /* force compose */
if (png_image_finish_read(&in, NULL/*background*/,
out_buf + (y*output->width + x)*3/*RGB*/,
output->width*3/*row_stride*/,
NULL/*colormap for PNG_FORMAT_FLAG_COLORMAP*/))
{
++*argv, --*argc;
continue;
}
}
/* The read failed: */
fprintf(stderr, "simpleover: add sprite %s: %s\n", sprite->name,
in.message);
return 0; /* error */
}
}
else
{
fprintf(stderr, "simpleover: --add='%s': invalid position %s\n",
sprite->name, (*argv)[0]);
return 0; /* error */
}
}
return 1; /* ok */
}
static int
simpleover_process(png_imagep output, png_bytep out_buf, int argc,
const char **argv)
{
int result = 1; /* success */
# define csprites 10/*limit*/
# define str(a) #a
int nsprites = 0;
struct sprite sprites[csprites];
while (argc > 0)
{
result = 0; /* fail */
if (strncmp(argv[0], "--sprite=", 9) == 0)
{
char tombstone;
if (nsprites < csprites)
{
int n;
sprites[nsprites].width = sprites[nsprites].height = 0;
sprites[nsprites].name[0] = 0;
n = sscanf(argv[0], "--sprite=%u,%u,%" str(sprite_name_chars) "s%c",
&sprites[nsprites].width, &sprites[nsprites].height,
sprites[nsprites].name, &tombstone);
if ((n == 2 || n == 3) &&
sprites[nsprites].width > 0 && sprites[nsprites].height > 0)
{
size_t buf_size, tmp;
/* Default a name if not given. */
if (sprites[nsprites].name[0] == 0)
sprintf(sprites[nsprites].name, "sprite-%d", nsprites+1);
/* Allocate a buffer for the sprite and calculate the buffer
* size:
*/
buf_size = sizeof (png_uint_16 [4]);
buf_size *= sprites[nsprites].width;
buf_size *= sprites[nsprites].height;
/* This can overflow a (size_t); check for this: */
tmp = buf_size;
tmp /= sprites[nsprites].width;
tmp /= sprites[nsprites].height;
if (tmp == sizeof (png_uint_16 [4]))
{
sprites[nsprites].buffer = malloc(buf_size);
/* This buffer must be initialized to transparent: */
memset(sprites[nsprites].buffer, 0, buf_size);
if (sprites[nsprites].buffer != NULL)
{
sprites[nsprites].file = NULL;
++argv, --argc;
if (create_sprite(sprites+nsprites++, &argc, &argv))
{
result = 1; /* still ok */
continue;
}
break; /* error */
}
}
/* Overflow, or OOM */
fprintf(stderr, "simpleover: %s: sprite too large\n", argv[0]);
break;
}
else
{
fprintf(stderr, "simpleover: %s: invalid sprite (%u,%u)\n",
argv[0], sprites[nsprites].width, sprites[nsprites].height);
break;
}
}
else
{
fprintf(stderr, "simpleover: %s: too many sprites\n", argv[0]);
break;
}
}
else if (strncmp(argv[0], "--add=", 6) == 0)
{
const char *name = argv[0]+6;
int isprite = nsprites;
++argv, --argc;
while (--isprite >= 0)
{
if (strcmp(sprites[isprite].name, name) == 0)
{
if (!add_sprite(output, out_buf, sprites+isprite, &argc, &argv))
goto out; /* error in add_sprite */
break;
}
}
if (isprite < 0) /* sprite not found */
{
fprintf(stderr, "simpleover: --add='%s': sprite not found\n", name);
break;
}
}
else
{
fprintf(stderr, "simpleover: %s: unrecognized operation\n", argv[0]);
break;
}
result = 1; /* ok */
}
/* Clean up the cache of sprites: */
out:
while (--nsprites >= 0)
{
if (sprites[nsprites].buffer != NULL)
free(sprites[nsprites].buffer);
if (sprites[nsprites].file != NULL)
(void)fclose(sprites[nsprites].file);
}
return result;
}
int main(int argc, const char **argv)
{
int result = 1; /* default to fail */
if (argc >= 2)
{
int argi = 2;
const char *output = NULL;
png_image image;
if (argc > 2 && argv[2][0] != '-'/*an operation*/)
{
output = argv[2];
argi = 3;
}
image.version = PNG_IMAGE_VERSION;
image.opaque = NULL;
if (png_image_begin_read_from_file(&image, argv[1]))
{
png_bytep buffer;
image.format = PNG_FORMAT_RGB; /* 24-bit RGB */
buffer = malloc(PNG_IMAGE_SIZE(image));
if (buffer != NULL)
{
png_color background = {0, 0xff, 0}; /* fully saturated green */
if (png_image_finish_read(&image, &background, buffer,
0/*row_stride*/, NULL/*colormap for PNG_FORMAT_FLAG_COLORMAP */))
{
/* At this point png_image_finish_read has cleaned up the
* allocated data in png_image, and only the buffer needs to be
* freed.
*
* Perform the remaining operations:
*/
if (simpleover_process(&image, buffer, argc-argi, argv+argi))
{
/* Write the output: */
if ((output != NULL &&
png_image_write_to_file(&image, output,
0/*convert_to_8bit*/, buffer, 0/*row_stride*/,
NULL/*colormap*/)) ||
(output == NULL &&
png_image_write_to_stdio(&image, stdout,
0/*convert_to_8bit*/, buffer, 0/*row_stride*/,
NULL/*colormap*/)))
result = 0;
else
fprintf(stderr, "simpleover: write %s: %s\n",
output == NULL ? "stdout" : output, image.message);
}
/* else simpleover_process writes an error message */
}
else
fprintf(stderr, "simpleover: read %s: %s\n", argv[1],
image.message);
free(buffer);
}
else
{
fprintf(stderr, "simpleover: out of memory: %lu bytes\n",
(unsigned long)PNG_IMAGE_SIZE(image));
/* This is the only place where a 'free' is required; libpng does
* the cleanup on error and success, but in this case we couldn't
* complete the read because of running out of memory.
*/
png_image_free(&image);
}
}
else
{
/* Failed to read the first argument: */
fprintf(stderr, "simpleover: %s: %s\n", argv[1], image.message);
}
}
else
{
/* Usage message */
fprintf(stderr,
"simpleover: usage: simpleover background.png [output.png]\n"
" Output 'background.png' as a 24-bit RGB PNG file in 'output.png'\n"
" or, if not given, stdout. 'background.png' will be composited\n"
" on fully saturated green.\n"
"\n"
" Optionally, before output, process additional PNG files:\n"
"\n"
" --sprite=width,height,name {[--at=x,y] {sprite.png}}\n"
" Produce a transparent sprite of size (width,height) and with\n"
" name 'name'.\n"
" For each sprite.png composite it using a Porter-Duff 'Over'\n"
" operation at offset (x,y) in the sprite (defaulting to (0,0)).\n"
" Input PNGs will be truncated to the area of the sprite.\n"
"\n"
" --add='name' {x,y}\n"
" Optionally, before output, composite a sprite, 'name', which\n"
" must have been previously produced using --sprite, at each\n"
" offset (x,y) in the output image. Each sprite must fit\n"
" completely within the output image.\n"
"\n"
" PNG files are processed in the order they occur on the command\n"
" line and thus the first PNG processed appears as the bottommost\n"
" in the output image.\n");
}
return result;
}
#endif /* SIMPLIFIED_READ */

View File

@@ -47,7 +47,8 @@ CC = gcc
#CC = i386-mingw32msvc-gcc # e.g., Linux -> Win32 cross-compilation #CC = i386-mingw32msvc-gcc # e.g., Linux -> Win32 cross-compilation
LD = $(CC) LD = $(CC)
RM = rm -f RM = rm -f
CFLAGS = -O -Wall $(INCS) $(MINGW_CCFLAGS) CPPFLAGS = $(INCS)
CFLAGS = -O -Wall $(MINGW_CCFLAGS)
# [note that -Wall is a gcc-specific compilation flag ("most warnings on")] # [note that -Wall is a gcc-specific compilation flag ("most warnings on")]
# [-ansi, -pedantic and -W can also be used] # [-ansi, -pedantic and -W can also be used]
LDFLAGS = $(MINGW_LDFLAGS) LDFLAGS = $(MINGW_LDFLAGS)
@@ -85,10 +86,10 @@ EXES = $(STATIC_EXES) $(DYNAMIC_EXES)
# implicit make rules ------------------------------------------------------- # implicit make rules -------------------------------------------------------
.c$(O): .c$(O):
$(CC) -c $(CFLAGS) $< $(CC) -c $(CPPFLAGS) $(CFLAGS) $<
%.pic$(O): %.c %.pic$(O): %.c
$(CC) -c $(CFLAGS) -DPNG_BUILD_DLL -o $@ $< $(CC) -c $(CPPFLAGS) $(CFLAGS) -DPNG_BUILD_DLL -o $@ $<
# dependencies -------------------------------------------------------------- # dependencies --------------------------------------------------------------

View File

@@ -53,7 +53,8 @@ CC = cc
LD = cc LD = cc
RM = rm -f RM = rm -f
# ABI must be the same as that used to build libpng. # ABI must be the same as that used to build libpng.
ABI= ABI =
CPPFLAGS =
CFLAGS = $(ABI) -O -fullwarn $(INCS) CFLAGS = $(ABI) -O -fullwarn $(INCS)
LDFLAGS = $(ABI) LDFLAGS = $(ABI)
O = .o O = .o
@@ -73,7 +74,7 @@ EXES = $(RPNG)$(E) $(RPNG2)$(E) $(WPNG)$(E)
# implicit make rules ------------------------------------------------------- # implicit make rules -------------------------------------------------------
.c$(O): .c$(O):
$(CC) -c $(CFLAGS) $< $(CC) -c $(CPPFLAGS) $(CFLAGS) $<
# dependencies -------------------------------------------------------------- # dependencies --------------------------------------------------------------

View File

@@ -59,14 +59,16 @@ INCS = $(PNGINC) $(ZINC) $(XINC)
RLIBSd = $(PNGLIBd) $(ZLIBd) $(XLIB) -lm RLIBSd = $(PNGLIBd) $(ZLIBd) $(XLIB) -lm
RLIBSs = $(PNGLIBs) $(ZLIBs) $(XLIB) -lm RLIBSs = $(PNGLIBs) $(ZLIBs) $(XLIB) -lm
WLIBSd = $(PNGLIBd) $(ZLIBd) -lm WLIBSd = $(PNGLIBd) $(ZLIBd) -lm
WLIBSs = $(PNGLIBs) $(ZLIBs) WLIBSs = $(PNGLIBs) $(ZLIBs) -lm
CC = gcc CC = gcc
LD = gcc LD = gcc
RM = rm -f RM = rm -f
CFLAGS = -O -Wall $(INCS) -DFEATURE_LOOP CPPFLAGS = $(INCS) -DFEATURE_LOOP
CFLAGS = -O -Wall
#CFLAGS = -O -W -Wall -Wextra -pedantic -ansi
# [note that -Wall is a gcc-specific compilation flag ("most warnings on")] # [note that -Wall is a gcc-specific compilation flag ("most warnings on")]
# [-ansi, -pedantic and -W can also be used] # [-ansi, -pedantic, -Wextra, and -W can also be used]
LDFLAGS = LDFLAGS =
O = .o O = .o
E = E =
@@ -92,7 +94,7 @@ EXES = $(STATIC_EXES) $(DYNAMIC_EXES)
# implicit make rules ------------------------------------------------------- # implicit make rules -------------------------------------------------------
.c$(O): .c$(O):
$(CC) -c $(CFLAGS) $< $(CC) -c $(CPPFLAGS) $(CFLAGS) $<
# dependencies -------------------------------------------------------------- # dependencies --------------------------------------------------------------

View File

@@ -53,7 +53,8 @@ WLIBS = $(PNGLIB) $(ZLIB)
CC = cl CC = cl
LD = link LD = link
RM = del RM = del
CFLAGS = -nologo -O -W3 $(INCS) $(cvars) CPPFLAGS = $(INCS)
CFLAGS = -nologo -O -W3 $(cvars)
# [note that -W3 is an MSVC-specific compilation flag ("all warnings on")] # [note that -W3 is an MSVC-specific compilation flag ("all warnings on")]
# [see %devstudio%\vc\include\win32.mak for cvars macro definition] # [see %devstudio%\vc\include\win32.mak for cvars macro definition]
O = .obj O = .obj
@@ -76,7 +77,7 @@ EXES = $(RPNG)$(E) $(RPNG2)$(E) $(WPNG)$(E)
# implicit make rules ------------------------------------------------------- # implicit make rules -------------------------------------------------------
.c$(O): .c$(O):
$(CC) -c $(CFLAGS) $< $(CC) -c $(CPPFLAGS) $(CFLAGS) $<
# dependencies -------------------------------------------------------------- # dependencies --------------------------------------------------------------

View File

@@ -100,7 +100,8 @@ int readpng_init(FILE *infile, ulg *pWidth, ulg *pHeight)
/* could pass pointers to user-defined error handlers instead of NULLs: */ /* could pass pointers to user-defined error handlers instead of NULLs: */
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); png_ptr = png_create_read_struct(png_get_libpng_ver(NULL), NULL, NULL,
NULL);
if (!png_ptr) if (!png_ptr)
return 4; /* out of memory */ return 4; /* out of memory */
@@ -215,6 +216,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;
} }

View File

@@ -4,7 +4,7 @@
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
Copyright (c) 1998-2007 Greg Roelofs. All rights reserved. Copyright (c) 1998-2015 Greg Roelofs. All rights reserved.
This software is provided "as is," without warranty of any kind, This software is provided "as is," without warranty of any kind,
express or implied. In no event shall the author or contributors express or implied. In no event shall the author or contributors
@@ -51,6 +51,11 @@
along with this program; if not, write to the Free Software Foundation, along with this program; if not, write to the Free Software Foundation,
Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
---------------------------------------------------------------------------
Changelog:
%RDATE% - Check return value of png_get_bKGD() (Glenn R-P)
---------------------------------------------------------------------------*/ ---------------------------------------------------------------------------*/
@@ -69,6 +74,7 @@ static void readpng2_row_callback(png_structp png_ptr, png_bytep new_row,
png_uint_32 row_num, int pass); png_uint_32 row_num, int pass);
static void readpng2_end_callback(png_structp png_ptr, png_infop info_ptr); static void readpng2_end_callback(png_structp png_ptr, png_infop info_ptr);
static void readpng2_error_handler(png_structp png_ptr, png_const_charp msg); static void readpng2_error_handler(png_structp png_ptr, png_const_charp msg);
static void readpng2_warning_handler(png_structp png_ptr, png_const_charp msg);
@@ -103,8 +109,8 @@ int readpng2_init(mainprog_info *mainprog_ptr)
/* could also replace libpng warning-handler (final NULL), but no need: */ /* could also replace libpng warning-handler (final NULL), but no need: */
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, mainprog_ptr, png_ptr = png_create_read_struct(png_get_libpng_ver(NULL), mainprog_ptr,
readpng2_error_handler, NULL); readpng2_error_handler, readpng2_warning_handler);
if (!png_ptr) if (!png_ptr)
return 4; /* out of memory */ return 4; /* out of memory */
@@ -136,29 +142,23 @@ int readpng2_init(mainprog_info *mainprog_ptr)
* used, i.e., all chunks recognized by libpng except for IHDR, PLTE, IDAT, * used, i.e., all chunks recognized by libpng except for IHDR, PLTE, IDAT,
* IEND, tRNS, bKGD, gAMA, and sRGB (small performance improvement) */ * IEND, tRNS, bKGD, gAMA, and sRGB (small performance improvement) */
{ {
/* These byte strings were copied from png.h. If a future libpng /* These byte strings were copied from png.h. If a future version
* version recognizes more chunks, add them to this list. If a * of readpng2.c recognizes more chunks, add them to this list.
* future version of readpng2.c recognizes more chunks, delete them */
* from this list. */ static PNG_CONST png_byte chunks_to_process[] = {
static /* const */ png_byte chunks_to_ignore[] = { 98, 75, 71, 68, '\0', /* bKGD */
99, 72, 82, 77, '\0', /* cHRM */ 103, 65, 77, 65, '\0', /* gAMA */
104, 73, 83, 84, '\0', /* hIST */ 115, 82, 71, 66, '\0', /* sRGB */
105, 67, 67, 80, '\0', /* iCCP */ };
105, 84, 88, 116, '\0', /* iTXt */
111, 70, 70, 115, '\0', /* oFFs */
112, 67, 65, 76, '\0', /* pCAL */
112, 72, 89, 115, '\0', /* pHYs */
115, 66, 73, 84, '\0', /* sBIT */
115, 67, 65, 76, '\0', /* sCAL */
115, 80, 76, 84, '\0', /* sPLT */
115, 84, 69, 82, '\0', /* sTER */
116, 69, 88, 116, '\0', /* tEXt */
116, 73, 77, 69, '\0', /* tIME */
122, 84, 88, 116, '\0' /* zTXt */
};
png_set_keep_unknown_chunks(png_ptr, 1 /* PNG_HANDLE_CHUNK_NEVER */, /* Ignore all chunks except for IHDR, PLTE, tRNS, IDAT, and IEND */
chunks_to_ignore, sizeof(chunks_to_ignore)/5); png_set_keep_unknown_chunks(png_ptr, -1 /* PNG_HANDLE_CHUNK_NEVER */,
NULL, -1);
/* But do not ignore chunks in the "chunks_to_process" list */
png_set_keep_unknown_chunks(png_ptr,
0 /* PNG_HANDLE_CHUNK_AS_DEFAULT */, chunks_to_process,
sizeof(chunks_to_process)/5);
} }
#endif /* PNG_HANDLE_AS_UNKNOWN_SUPPORTED */ #endif /* PNG_HANDLE_AS_UNKNOWN_SUPPORTED */
@@ -266,36 +266,38 @@ static void readpng2_info_callback(png_structp png_ptr, png_infop info_ptr)
/* since we know we've read all of the PNG file's "header" (i.e., up /* since we know we've read all of the PNG file's "header" (i.e., up
* to IDAT), we can check for a background color here */ * to IDAT), we can check for a background color here */
if (mainprog_ptr->need_bgcolor && if (mainprog_ptr->need_bgcolor)
png_get_valid(png_ptr, info_ptr, PNG_INFO_bKGD))
{ {
png_color_16p pBackground; png_color_16p pBackground;
/* it is not obvious from the libpng documentation, but this function /* it is not obvious from the libpng documentation, but this function
* takes a pointer to a pointer, and it always returns valid red, * takes a pointer to a pointer, and it always returns valid red,
* green and blue values, regardless of color_type: */ * green and blue values, regardless of color_type: */
png_get_bKGD(png_ptr, info_ptr, &pBackground); if (png_get_bKGD(png_ptr, info_ptr, &pBackground))
{
/* however, it always returns the raw bKGD data, regardless of any /* however, it always returns the raw bKGD data, regardless of any
* bit-depth transformations, so check depth and adjust if necessary */ * bit-depth transformations, so check depth and adjust if necessary
if (bit_depth == 16) { */
mainprog_ptr->bg_red = pBackground->red >> 8; if (bit_depth == 16) {
mainprog_ptr->bg_green = pBackground->green >> 8; mainprog_ptr->bg_red = pBackground->red >> 8;
mainprog_ptr->bg_blue = pBackground->blue >> 8; mainprog_ptr->bg_green = pBackground->green >> 8;
} else if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) { mainprog_ptr->bg_blue = pBackground->blue >> 8;
if (bit_depth == 1) } else if (color_type == PNG_COLOR_TYPE_GRAY && bit_depth < 8) {
mainprog_ptr->bg_red = mainprog_ptr->bg_green = if (bit_depth == 1)
mainprog_ptr->bg_blue = pBackground->gray? 255 : 0; mainprog_ptr->bg_red = mainprog_ptr->bg_green =
else if (bit_depth == 2) mainprog_ptr->bg_blue = pBackground->gray? 255 : 0;
mainprog_ptr->bg_red = mainprog_ptr->bg_green = else if (bit_depth == 2)
mainprog_ptr->bg_blue = (255/3) * pBackground->gray; mainprog_ptr->bg_red = mainprog_ptr->bg_green =
else /* bit_depth == 4 */ mainprog_ptr->bg_blue = (255/3) * pBackground->gray;
mainprog_ptr->bg_red = mainprog_ptr->bg_green = else /* bit_depth == 4 */
mainprog_ptr->bg_blue = (255/15) * pBackground->gray; mainprog_ptr->bg_red = mainprog_ptr->bg_green =
} else { mainprog_ptr->bg_blue = (255/15) * pBackground->gray;
mainprog_ptr->bg_red = (uch)pBackground->red; } else {
mainprog_ptr->bg_green = (uch)pBackground->green; mainprog_ptr->bg_red = (uch)pBackground->red;
mainprog_ptr->bg_blue = (uch)pBackground->blue; mainprog_ptr->bg_green = (uch)pBackground->green;
mainprog_ptr->bg_blue = (uch)pBackground->blue;
}
} }
} }
@@ -453,6 +455,8 @@ static void readpng2_end_callback(png_structp png_ptr, png_infop info_ptr)
/* all done */ /* all done */
(void)info_ptr; /* Unused */
return; return;
} }
@@ -473,7 +477,12 @@ void readpng2_cleanup(mainprog_info *mainprog_ptr)
} }
static void readpng2_warning_handler(png_structp png_ptr, png_const_charp msg)
{
fprintf(stderr, "readpng2 libpng warning: %s\n", msg);
fflush(stderr);
(void)png_ptr; /* Unused */
}
static void readpng2_error_handler(png_structp png_ptr, png_const_charp msg) static void readpng2_error_handler(png_structp png_ptr, png_const_charp msg)

View File

@@ -163,8 +163,12 @@ uch *readpng_get_image(double display_exponent, int *pChannels, ulg *pRowbytes)
/* now we can go ahead and just read the whole image */ /* now we can go ahead and just read the whole image */
fread(image_data, 1L, rowbytes*height, saved_infile); if (fread(image_data, 1L, rowbytes*height, saved_infile) <
rowbytes*height) {
free (image_data);
image_data = NULL;
return NULL;
}
return image_data; return image_data;
} }

View File

@@ -26,6 +26,8 @@
- 1.14: added support for X resources (thanks to Gerhard Niklasch) - 1.14: added support for X resources (thanks to Gerhard Niklasch)
- 2.00: dual-licensed (added GNU GPL) - 2.00: dual-licensed (added GNU GPL)
- 2.01: fixed improper display of usage screen on PNG error(s) - 2.01: fixed improper display of usage screen on PNG error(s)
- 2.02: Added "void(argc);" statement to quiet pedantic compiler warnings
about unused variable (GR-P)
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
@@ -80,7 +82,7 @@
#define PROGNAME "rpng-x" #define PROGNAME "rpng-x"
#define LONGNAME "Simple PNG Viewer for X" #define LONGNAME "Simple PNG Viewer for X"
#define VERSION "2.01 of 16 March 2008" #define VERSION "2.02 of 15 June 2014"
#define RESNAME "rpng" /* our X resource application name */ #define RESNAME "rpng" /* our X resource application name */
#define RESCLASS "Rpng" /* our X resource class name */ #define RESCLASS "Rpng" /* our X resource class name */
@@ -279,15 +281,17 @@ int main(int argc, char **argv)
"Usage: %s [-display xdpy] [-gamma exp] [-bgcolor bg] file.png\n" "Usage: %s [-display xdpy] [-gamma exp] [-bgcolor bg] file.png\n"
" xdpy\tname of the target X display (e.g., ``hostname:0'')\n" " xdpy\tname of the target X display (e.g., ``hostname:0'')\n"
" exp \ttransfer-function exponent (``gamma'') of the display\n" " exp \ttransfer-function exponent (``gamma'') of the display\n"
"\t\t system in floating-point format (e.g., ``%.1f''); equal\n" "\t\t system in floating-point format (e.g., ``%.1f''); equal\n",
PROGNAME, default_display_exponent);
fprintf(stderr, "\n"
"\t\t to the product of the lookup-table exponent (varies)\n" "\t\t to the product of the lookup-table exponent (varies)\n"
"\t\t and the CRT exponent (usually 2.2); must be positive\n" "\t\t and the CRT exponent (usually 2.2); must be positive\n"
" bg \tdesired background color in 7-character hex RGB format\n" " bg \tdesired background color in 7-character hex RGB format\n"
"\t\t (e.g., ``#ff7700'' for orange: same as HTML colors);\n" "\t\t (e.g., ``#ff7700'' for orange: same as HTML colors);\n"
"\t\t used with transparent images\n" "\t\t used with transparent images\n"
"\nPress Q, Esc or mouse button 1 (within image window, after image\n" "\nPress Q, Esc or mouse button 1 (within image window, after image\n"
"is displayed) to quit.\n" "is displayed) to quit.\n");
"\n", PROGNAME, default_display_exponent);
exit(1); exit(1);
} }
@@ -419,6 +423,8 @@ int main(int argc, char **argv)
rpng_x_cleanup(); rpng_x_cleanup();
(void)argc; /* Unused */
return 0; return 0;
} }

View File

@@ -33,6 +33,8 @@
- 2.02: fixed improper display of usage screen on PNG error(s); fixed - 2.02: fixed improper display of usage screen on PNG error(s); fixed
unexpected-EOF and file-read-error cases unexpected-EOF and file-read-error cases
- 2.03: removed runtime MMX-enabling/disabling and obsolete -mmx* options - 2.03: removed runtime MMX-enabling/disabling and obsolete -mmx* options
- 2.04:
(GR-P)
--------------------------------------------------------------------------- ---------------------------------------------------------------------------

View File

@@ -41,10 +41,12 @@
unexpected-EOF and file-read-error cases; fixed Trace() cut-and- unexpected-EOF and file-read-error cases; fixed Trace() cut-and-
paste bugs paste bugs
- 2.03: deleted runtime MMX-enabling/disabling and obsolete -mmx* options - 2.03: deleted runtime MMX-enabling/disabling and obsolete -mmx* options
- 2.04: Added "void(foo);" statements to quiet pedantic compiler warnings
about unused variables (GR-P)
- 2.05: Use nanosleep() instead of usleep(), which is deprecated (GR-P).
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
Copyright (c) 1998-2008 Greg Roelofs. All rights reserved. Copyright (c) 1998-2010, 2014-2015 Greg Roelofs. All rights reserved.
This software is provided "as is," without warranty of any kind, This software is provided "as is," without warranty of any kind,
express or implied. In no event shall the author or contributors express or implied. In no event shall the author or contributors
@@ -95,7 +97,7 @@
#define PROGNAME "rpng2-x" #define PROGNAME "rpng2-x"
#define LONGNAME "Progressive PNG Viewer for X" #define LONGNAME "Progressive PNG Viewer for X"
#define VERSION "2.03 of 25 February 2010" #define VERSION "2.04 of 15 June 2014"
#define RESNAME "rpng2" /* our X resource application name */ #define RESNAME "rpng2" /* our X resource application name */
#define RESCLASS "Rpng" /* our X resource class name */ #define RESCLASS "Rpng" /* our X resource class name */
@@ -111,6 +113,19 @@
#include <X11/Xos.h> #include <X11/Xos.h>
#include <X11/keysym.h> /* defines XK_* macros */ #include <X11/keysym.h> /* defines XK_* macros */
#if _POSIX_C_SOURCE >= 199309L /* have nanosleep() */
# undef usleep
# define usleep(usec) { \
struct timespec ts; \
ts.tv_sec = 0; \
ts.tv_nsec = (usec) * 1000; \
nanosleep(&ts, NULL); }
# endif
#ifndef usleep /* have neither nanosleep() nor usleep() */
# define usleep(x) sleep(((x)+499999)/1000000)
#endif
#ifdef VMS #ifdef VMS
# include <unistd.h> # include <unistd.h>
#endif #endif
@@ -456,40 +471,47 @@ int main(int argc, char **argv)
fprintf(stderr, "\n%s %s: %s\n\n", PROGNAME, VERSION, appname); fprintf(stderr, "\n%s %s: %s\n\n", PROGNAME, VERSION, appname);
readpng2_version_info(); readpng2_version_info();
fprintf(stderr, "\n" fprintf(stderr, "\n"
"Usage: %s [-display xdpy] [-gamma exp] [-bgcolor bg | -bgpat pat]\n" "Usage: ");
fprintf(stderr,
"%s [-display xdpy] [-gamma exp] [-bgcolor bg | -bgpat pat]\n"
" %*s [-usleep dur | -timing] [-pause]\n",
PROGNAME, (int)strlen(PROGNAME), " ");
fprintf(stderr,
#ifdef FEATURE_LOOP #ifdef FEATURE_LOOP
" %*s [-usleep dur | -timing] [-pause] [-loop [sec]] file.png\n\n" " [-loop [sec]]"
#else
" %*s [-usleep dur | -timing] [-pause] file.png\n\n"
#endif #endif
" file.png\n\n");
fprintf(stderr,
" xdpy\tname of the target X display (e.g., ``hostname:0'')\n" " xdpy\tname of the target X display (e.g., ``hostname:0'')\n"
" exp \ttransfer-function exponent (``gamma'') of the display\n" " exp \ttransfer-function exponent (``gamma'') of the display\n"
"\t\t system in floating-point format (e.g., ``%.1f''); equal\n" "\t\t system in floating-point format (e.g., ``%.1f''); equal\n"
"\t\t to the product of the lookup-table exponent (varies)\n" "\t\t to the product of the lookup-table exponent (varies)\n",
default_display_exponent);
fprintf(stderr,
"\t\t and the CRT exponent (usually 2.2); must be positive\n" "\t\t and the CRT exponent (usually 2.2); must be positive\n"
" bg \tdesired background color in 7-character hex RGB format\n" " bg \tdesired background color in 7-character hex RGB format\n"
"\t\t (e.g., ``#ff7700'' for orange: same as HTML colors);\n" "\t\t (e.g., ``#ff7700'' for orange: same as HTML colors);\n"
"\t\t used with transparent images; overrides -bgpat\n" "\t\t used with transparent images; overrides -bgpat\n"
" pat \tdesired background pattern number (0-%d); used with\n" " pat \tdesired background pattern number (0-%d); used with\n"
"\t\t transparent images; overrides -bgcolor\n" "\t\t transparent images; overrides -bgcolor\n",
num_bgpat-1);
#ifdef FEATURE_LOOP #ifdef FEATURE_LOOP
fprintf(stderr,
" -loop\tloops through background images after initial display\n" " -loop\tloops through background images after initial display\n"
"\t\t is complete (depends on -bgpat)\n" "\t\t is complete (depends on -bgpat)\n"
" sec \tseconds to display each background image (default = 2)\n" " sec \tseconds to display each background image (default = 2)\n");
#endif #endif
fprintf(stderr,
" dur \tduration in microseconds to wait after displaying each\n" " dur \tduration in microseconds to wait after displaying each\n"
"\t\t row (for demo purposes)\n" "\t\t row (for demo purposes)\n"
" -timing\tenables delay for every block read, to simulate modem\n" " -timing\tenables delay for every block read, to simulate modem\n"
"\t\t download of image (~36 Kbps)\n" "\t\t download of image (~36 Kbps)\n"
" -pause\tpauses after displaying each pass until mouse clicked\n" " -pause\tpauses after displaying each pass until mouse clicked\n"
"\nPress Q, Esc or mouse button 1 (within image window, after image\n" "\nPress Q, Esc or mouse button 1 (within image window, after image\n"
"is displayed) to quit.\n" "is displayed) to quit.\n");
"\n", PROGNAME,
(int)strlen(PROGNAME), " ", default_display_exponent, num_bgpat-1);
exit(1); exit(1);
} }
if (!(infile = fopen(filename, "rb"))) { if (!(infile = fopen(filename, "rb"))) {
fprintf(stderr, PROGNAME ": can't open PNG file [%s]\n", filename); fprintf(stderr, PROGNAME ": can't open PNG file [%s]\n", filename);
++error; ++error;
@@ -735,6 +757,8 @@ int main(int argc, char **argv)
Trace((stderr, "about to call rpng2_x_cleanup()\n")) Trace((stderr, "about to call rpng2_x_cleanup()\n"))
rpng2_x_cleanup(); rpng2_x_cleanup();
(void)argc; /* Unused */
return 0; return 0;
} }
@@ -1826,6 +1850,9 @@ static void rpng2_x_redisplay_image(ulg startcol, ulg startrow,
XFlush(display); XFlush(display);
} }
(void)startcol;
(void)width;
} /* end function rpng2_x_redisplay_image() */ } /* end function rpng2_x_redisplay_image() */

View File

@@ -90,7 +90,7 @@ int writepng_init(mainprog_info *mainprog_ptr)
/* could also replace libpng warning-handler (final NULL), but no need: */ /* could also replace libpng warning-handler (final NULL), but no need: */
png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, mainprog_ptr, png_ptr = png_create_write_struct(png_get_libpng_ver(NULL), mainprog_ptr,
writepng_error_handler, NULL); writepng_error_handler, NULL);
if (!png_ptr) if (!png_ptr)
return 4; /* out of memory */ return 4; /* out of memory */

View File

@@ -0,0 +1,65 @@
/* Fake a PNG - just write it out directly.
*
* COPYRIGHT: Written by John Cunningham Bowler, 2014.
* 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:
* United States.
*
*/
#include <stdio.h>
#include <zlib.h> /* for crc32 */
void
put_uLong(uLong val)
{
putchar(val >> 24);
putchar(val >> 16);
putchar(val >> 8);
putchar(val >> 0);
}
void
put_chunk(const unsigned char *chunk, uInt length)
{
uLong crc;
put_uLong(length-4); /* Exclude the tag */
fwrite(chunk, length, 1, stdout);
crc = crc32(0, Z_NULL, 0);
put_uLong(crc32(crc, chunk, length));
}
const unsigned char signature[] =
{
137, 80, 78, 71, 13, 10, 26, 10
};
const unsigned char IHDR[] =
{
73, 72, 68, 82, /* IHDR */
0, 0, 0, 1, /* width */
0, 0, 0, 1, /* height */
1, /* bit depth */
0, /* color type: greyscale */
0, /* compression method */
0, /* filter method */
0 /* interlace method: none */
};
const unsigned char unknown[] =
{
'u', 'n', 'K', 'n' /* "unKn" - private safe to copy */
};
int
main(void)
{
fwrite(signature, sizeof signature, 1, stdout);
put_chunk(IHDR, sizeof IHDR);
for (;;)
put_chunk(unknown, sizeof unknown);
}

4
contrib/libtests/gentests.sh Normal file → Executable file
View File

@@ -1,8 +1,8 @@
#!/bin/sh #!/bin/sh
# #
# Copyright (c) 2012 John Cunningham Bowler # Copyright (c) 2013 John Cunningham Bowler
# #
# Last changed in libpng 1.6.0 [(PENDING RELEASE)] # Last changed in libpng 1.6.0 [February 14, 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

File diff suppressed because it is too large Load Diff

1686
contrib/libtests/pngimage.c Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,165 @@
/* contrib/libtests/pngstest-errors.h
*
* BUILT USING: libpng version 1.6.19beta03 - September 25, 2015
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
* and license in png.h
*
* THIS IS A MACHINE GENERATED FILE: do not edit it directly!
* Instead run:
*
* pngstest --accumulate
*
* on as many PNG files as possible; at least PNGSuite and
* contrib/libtests/testpngs.
*/
static png_uint_16 gpc_error[16/*in*/][16/*out*/][4/*a*/] =
{
{ /* input: sRGB-gray */
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 372, 0 }, { 0, 0, 372, 0 }, { 0, 0, 372, 0 }, { 0, 0, 372, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }
}, { /* input: sRGB-gray+alpha */
{ 0, 19, 0, 0 }, { 0, 0, 0, 0 }, { 0, 20, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 897, 788, 0 }, { 0, 897, 788, 0 }, { 0, 897, 788, 0 }, { 0, 897, 788, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }
}, { /* input: sRGB-rgb */
{ 0, 0, 19, 0 }, { 0, 0, 19, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 893, 0 }, { 0, 0, 893, 0 }, { 0, 0, 811, 0 }, { 0, 0, 811, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }
}, { /* input: sRGB-rgb+alpha */
{ 0, 16, 17, 0 }, { 0, 17, 17, 0 }, { 0, 19, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 850, 875, 0 }, { 0, 850, 875, 0 }, { 0, 897, 788, 0 }, { 0, 897, 788, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }
}, { /* input: linear-gray */
{ 0, 0, 9, 0 }, { 0, 0, 9, 0 }, { 0, 0, 9, 0 }, { 0, 0, 9, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }
}, { /* input: linear-gray+alpha */
{ 0, 74, 9, 0 }, { 0, 20, 9, 0 }, { 0, 74, 9, 0 }, { 0, 20, 9, 0 },
{ 0, 0, 0, 0 }, { 0, 1, 0, 0 }, { 0, 0, 0, 0 }, { 0, 1, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }
}, { /* input: linear-rgb */
{ 0, 0, 9, 0 }, { 0, 0, 9, 0 }, { 0, 0, 9, 0 }, { 0, 0, 9, 0 },
{ 0, 0, 4, 0 }, { 0, 0, 4, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }
}, { /* input: linear-rgb+alpha */
{ 0, 126, 143, 0 }, { 0, 11, 7, 0 }, { 0, 74, 9, 0 }, { 0, 17, 9, 0 },
{ 0, 4, 4, 0 }, { 0, 5, 4, 0 }, { 0, 0, 0, 0 }, { 0, 1, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }
}, { /* input: color-mapped-sRGB-gray */
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }
}, { /* input: color-mapped-sRGB-gray+alpha */
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }
}, { /* input: color-mapped-sRGB-rgb */
{ 0, 0, 13, 0 }, { 0, 0, 13, 0 }, { 0, 0, 9, 0 }, { 0, 0, 9, 0 },
{ 0, 0, 673, 0 }, { 0, 0, 673, 0 }, { 0, 0, 674, 0 }, { 0, 0, 674, 0 },
{ 0, 0, 1, 0 }, { 0, 0, 1, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 460, 0 }, { 0, 0, 460, 0 }, { 0, 0, 263, 0 }, { 0, 0, 263, 0 }
}, { /* input: color-mapped-sRGB-rgb+alpha */
{ 0, 6, 8, 0 }, { 0, 7, 8, 0 }, { 0, 75, 9, 0 }, { 0, 9, 9, 0 },
{ 0, 585, 427, 0 }, { 0, 585, 427, 0 }, { 0, 717, 514, 0 }, { 0, 717, 514, 0 },
{ 0, 1, 1, 0 }, { 0, 1, 1, 0 }, { 0, 1, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 13323, 460, 0 }, { 0, 427, 460, 0 }, { 0, 16480, 263, 0 }, { 0, 243, 263, 0 }
}, { /* input: color-mapped-linear-gray */
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 282, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }
}, { /* input: color-mapped-linear-gray+alpha */
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 253, 282, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }
}, { /* input: color-mapped-linear-rgb */
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 265, 0 }, { 0, 0, 0, 0 }
}, { /* input: color-mapped-linear-rgb+alpha */
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 },
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 243, 265, 0 }
}
};
static png_uint_16 gpc_error_via_linear[16][4/*out*/][4] =
{
{ /* input: sRGB-gray */
{ 0, 0, 7, 0 }, { 0, 0, 7, 0 }, { 0, 0, 7, 0 }, { 0, 0, 7, 0 }
}, { /* input: sRGB-gray+alpha */
{ 0, 15, 15, 0 }, { 0, 186, 15, 0 }, { 0, 15, 15, 0 }, { 0, 186, 15, 0 }
}, { /* input: sRGB-rgb */
{ 0, 0, 20, 0 }, { 0, 0, 20, 0 }, { 0, 0, 15, 0 }, { 0, 0, 15, 0 }
}, { /* input: sRGB-rgb+alpha */
{ 0, 16, 17, 0 }, { 0, 187, 17, 0 }, { 0, 15, 15, 0 }, { 0, 186, 15, 0 }
}, { /* input: linear-gray */
{ 0, 0, 1, 0 }, { 0, 0, 1, 0 }, { 0, 0, 1, 0 }, { 0, 0, 1, 0 }
}, { /* input: linear-gray+alpha */
{ 0, 1, 1, 0 }, { 0, 1, 1, 0 }, { 0, 1, 1, 0 }, { 0, 1, 1, 0 }
}, { /* input: linear-rgb */
{ 0, 0, 1, 0 }, { 0, 0, 1, 0 }, { 0, 0, 1, 0 }, { 0, 0, 1, 0 }
}, { /* input: linear-rgb+alpha */
{ 0, 1, 1, 0 }, { 0, 9, 1, 0 }, { 0, 1, 1, 0 }, { 0, 1, 1, 0 }
}, { /* input: color-mapped-sRGB-gray */
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }
}, { /* input: color-mapped-sRGB-gray+alpha */
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }
}, { /* input: color-mapped-sRGB-rgb */
{ 0, 0, 13, 0 }, { 0, 0, 13, 0 }, { 0, 0, 14, 0 }, { 0, 0, 14, 0 }
}, { /* input: color-mapped-sRGB-rgb+alpha */
{ 0, 4, 8, 0 }, { 0, 9, 8, 0 }, { 0, 9, 5, 0 }, { 0, 32, 5, 0 }
}, { /* input: color-mapped-linear-gray */
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }
}, { /* input: color-mapped-linear-gray+alpha */
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }
}, { /* input: color-mapped-linear-rgb */
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }
}, { /* input: color-mapped-linear-rgb+alpha */
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }
}
};
static png_uint_16 gpc_error_to_colormap[8/*i*/][8/*o*/][4] =
{
{ /* input: sRGB-gray */
{ 0, 0, 9, 0 }, { 0, 0, 9, 0 }, { 0, 0, 9, 0 }, { 0, 0, 9, 0 },
{ 0, 0, 560, 0 }, { 0, 0, 560, 0 }, { 0, 0, 560, 0 }, { 0, 0, 560, 0 }
}, { /* input: sRGB-gray+alpha */
{ 0, 19, 9, 0 }, { 0, 255, 9, 25 }, { 0, 88, 9, 0 }, { 0, 255, 9, 25 },
{ 0, 1012, 928, 0 }, { 0, 16026, 928, 6425 }, { 0, 1012, 928, 0 }, { 0, 16026, 928, 6425 }
}, { /* input: sRGB-rgb */
{ 0, 0, 19, 0 }, { 0, 0, 19, 0 }, { 0, 0, 25, 0 }, { 0, 0, 25, 0 },
{ 0, 0, 962, 0 }, { 0, 0, 962, 0 }, { 0, 0, 13677, 0 }, { 0, 0, 13677, 0 }
}, { /* input: sRGB-rgb+alpha */
{ 0, 63, 77, 0 }, { 0, 255, 19, 25 }, { 0, 225, 25, 0 }, { 0, 255, 25, 67 },
{ 0, 17534, 18491, 0 }, { 0, 15736, 2824, 6425 }, { 0, 14019, 13677, 0 }, { 0, 50115, 13677, 17219 }
}, { /* input: linear-gray */
{ 0, 0, 73, 0 }, { 0, 0, 73, 0 }, { 0, 0, 73, 0 }, { 0, 0, 73, 0 },
{ 0, 0, 18817, 0 }, { 0, 0, 18817, 0 }, { 0, 0, 18817, 0 }, { 0, 0, 18817, 0 }
}, { /* input: linear-gray+alpha */
{ 0, 74, 74, 0 }, { 0, 255, 74, 25 }, { 0, 99, 74, 0 }, { 0, 255, 74, 25 },
{ 0, 18919, 18907, 0 }, { 0, 24549, 18907, 6553 }, { 0, 18919, 18907, 0 }, { 0, 24549, 18907, 6553 }
}, { /* input: linear-rgb */
{ 0, 0, 73, 0 }, { 0, 0, 73, 0 }, { 0, 0, 98, 0 }, { 0, 0, 98, 0 },
{ 0, 0, 18664, 0 }, { 0, 0, 18664, 0 }, { 0, 0, 24998, 0 }, { 0, 0, 24998, 0 }
}, { /* input: linear-rgb+alpha */
{ 0, 181, 196, 0 }, { 0, 255, 61, 25 }, { 206, 187, 98, 0 }, { 0, 255, 98, 67 },
{ 0, 18141, 18137, 0 }, { 0, 17494, 17504, 6553 }, { 0, 24979, 24992, 0 }, { 0, 49172, 24992, 17347 }
}
};
/* END MACHINE GENERATED */

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

121
contrib/libtests/readpng.c Normal file
View File

@@ -0,0 +1,121 @@
/* readpng.c
*
* Copyright (c) 2013 John Cunningham Bowler
*
* Last changed in libpng 1.6.1 [March 28, 2013]
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
* and license in png.h
*
* Load an arbitrary number of PNG files (from the command line, or, if there
* are no arguments on the command line, from stdin) then run a time test by
* reading each file by row. The test does nothing with the read result and
* does no transforms. The only output is a time as a floating point number of
* seconds with 9 decimal digits.
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#if defined(HAVE_CONFIG_H) && !defined(PNG_NO_CONFIG_H)
# include <config.h>
#endif
/* Define the following to use this test against your installed libpng, rather
* than the one being built here:
*/
#ifdef PNG_FREESTANDING_TESTS
# include <png.h>
#else
# include "../../png.h"
#endif
#if PNG_LIBPNG_VER < 10700
/* READ_INTERLACING was used instead of READ_DEINTERLACE. */
# ifdef PNG_READ_INTERLACING_SUPPORTED
# define PNG_READ_DEINTERLACE_SUPPORTED
# endif
#endif
static int
read_png(FILE *fp)
{
png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING,0,0,0);
png_infop info_ptr = NULL;
png_bytep row = NULL, display = NULL;
if (png_ptr == NULL)
return 0;
if (setjmp(png_jmpbuf(png_ptr)))
{
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
if (row != NULL) free(row);
if (display != NULL) free(display);
return 0;
}
png_init_io(png_ptr, fp);
info_ptr = png_create_info_struct(png_ptr);
if (info_ptr == NULL)
png_error(png_ptr, "OOM allocating info structure");
png_set_keep_unknown_chunks(png_ptr, PNG_HANDLE_CHUNK_ALWAYS, NULL, 0);
png_read_info(png_ptr, info_ptr);
{
png_size_t rowbytes = png_get_rowbytes(png_ptr, info_ptr);
row = malloc(rowbytes);
display = malloc(rowbytes);
if (row == NULL || display == NULL)
png_error(png_ptr, "OOM allocating row buffers");
{
png_uint_32 height = png_get_image_height(png_ptr, info_ptr);
# ifdef PNG_READ_DEINTERLACE_SUPPORTED
int passes = png_set_interlace_handling(png_ptr);
# else
int passes = png_get_interlace_type(png_ptr, info_ptr) ==
PNG_INTERLACE_ADAM7 ? PNG_INTERLACE_ADAM7_PASSES : 1;
# endif
int pass;
png_start_read_image(png_ptr);
for (pass = 0; pass < passes; ++pass)
{
png_uint_32 y = height;
# ifndef PNG_READ_DEINTERLACE_SUPPORTED
if (passes == PNG_INTERLACE_ADAM7_PASSES)
y = PNG_PASS_ROWS(y, pass);
# endif
/* NOTE: this trashes the row each time; interlace handling won't
* work, but this avoids memory thrashing for speed testing.
*/
while (y-- > 0)
png_read_row(png_ptr, row, display);
}
}
}
/* Make sure to read to the end of the file: */
png_read_end(png_ptr, info_ptr);
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
free(row);
free(display);
return 1;
}
int
main(void)
{
/* Exit code 0 on success. */
return !read_png(stdin);
}

View File

@@ -1,9 +1,9 @@
/* tarith.c /* tarith.c
* *
* Copyright (c) 2011,2012 John Cunningham Bowler * Copyright (c) 2011-2013 John Cunningham Bowler
* *
* Last changed in libpng 1.6.0 [(PENDING RELEASE)] * Last changed in libpng 1.6.0 [February 14, 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
@@ -92,12 +92,12 @@ int validation_ascii_to_fp(int count, int argc, char **argv)
showall = 1; showall = 1;
else if (strcmp(*argv, "-e") == 0 && argc > 0) else if (strcmp(*argv, "-e") == 0 && argc > 0)
{ {
--argc; --argc;
max_error = atof(*++argv); max_error = atof(*++argv);
} }
else if (strcmp(*argv, "-E") == 0 && argc > 0) else if (strcmp(*argv, "-E") == 0 && argc > 0)
{ {
--argc; --argc;
max_error_abs = atof(*++argv); max_error_abs = atof(*++argv);
} }
else else
@@ -118,7 +118,7 @@ int validation_ascii_to_fp(int count, int argc, char **argv)
++nonfinite; ++nonfinite;
if (verbose) if (verbose)
fprintf(stderr, "%.*g %d\n", DBL_DIG, test, precision); fprintf(stderr, "%.*g %d\n", DBL_DIG, test, precision);
/* Check for overflow in the buffer by setting a marker. */ /* Check for overflow in the buffer by setting a marker. */
memset(buffer, 71, sizeof buffer); memset(buffer, 71, sizeof buffer);
@@ -131,8 +131,8 @@ int validation_ascii_to_fp(int count, int argc, char **argv)
if (buffer[precision+7] != 71) if (buffer[precision+7] != 71)
{ {
fprintf(stderr, "%g[%d] -> '%s'[%lu] buffer overflow\n", test, fprintf(stderr, "%g[%d] -> '%s'[%lu] buffer overflow\n", test,
precision, buffer, (unsigned long)strlen(buffer)); precision, buffer, (unsigned long)strlen(buffer));
failed = 1; failed = 1;
} }
/* Following are used for the number parser below and must be /* Following are used for the number parser below and must be
@@ -143,19 +143,19 @@ int validation_ascii_to_fp(int count, int argc, char **argv)
if (!isfinite(test)) if (!isfinite(test))
{ {
/* Expect 'inf' */ /* Expect 'inf' */
if (test >= 0 && strcmp(buffer, "inf") || if (test >= 0 && strcmp(buffer, "inf") ||
test < 0 && strcmp(buffer, "-inf")) test < 0 && strcmp(buffer, "-inf"))
{ {
fprintf(stderr, "%g[%d] -> '%s' but expected 'inf'\n", test, fprintf(stderr, "%g[%d] -> '%s' but expected 'inf'\n", test,
precision, buffer); precision, buffer);
failed = 1; failed = 1;
} }
} }
else if (!png_check_fp_number(buffer, precision+10, &state, &index) || else if (!png_check_fp_number(buffer, precision+10, &state, &index) ||
buffer[index] != 0) buffer[index] != 0)
{ {
fprintf(stderr, "%g[%d] -> '%s' but has bad format ('%c')\n", test, fprintf(stderr, "%g[%d] -> '%s' but has bad format ('%c')\n", test,
precision, buffer, buffer[index]); precision, buffer, buffer[index]);
failed = 1; failed = 1;
} }
else if (PNG_FP_IS_NEGATIVE(state) && !(test < 0)) else if (PNG_FP_IS_NEGATIVE(state) && !(test < 0))
@@ -185,21 +185,21 @@ int validation_ascii_to_fp(int count, int argc, char **argv)
else else
{ {
/* Check the result against the original. */ /* Check the result against the original. */
double out = atof(buffer); double out = atof(buffer);
double change = fabs((out - test)/test); double change = fabs((out - test)/test);
double allow = .5/pow(10, double allow = .5/pow(10,
(precision >= DBL_DIG) ? DBL_DIG-1 : precision-1); (precision >= DBL_DIG) ? DBL_DIG-1 : precision-1);
/* NOTE: if you hit this error case are you compiling with gcc /* NOTE: if you hit this error case are you compiling with gcc
* and -O0? Try -O2 - the errors can accumulate if the FP * and -O0? Try -O2 - the errors can accumulate if the FP
* code above is not optimized and may drift outside the .5 in * code above is not optimized and may drift outside the .5 in
* DBL_DIG allowed. In any case a small number of errors may * DBL_DIG allowed. In any case a small number of errors may
* occur (very small ones - 1 or 2%) because of rounding in the * occur (very small ones - 1 or 2%) because of rounding in the
* calculations, either in the convertion API or in atof. * calculations, either in the conversion API or in atof.
*/ */
if (change >= allow && (isfinite(out) || if (change >= allow && (isfinite(out) ||
fabs(test/DBL_MAX) <= 1-allow)) fabs(test/DBL_MAX) <= 1-allow))
{ {
double percent = (precision >= DBL_DIG) ? max_error_abs : max_error; double percent = (precision >= DBL_DIG) ? max_error_abs : max_error;
double allowp = (change-allow)*100/allow; double allowp = (change-allow)*100/allow;
@@ -213,16 +213,16 @@ int validation_ascii_to_fp(int count, int argc, char **argv)
if (max < allowp) max = allowp; if (max < allowp) max = allowp;
} }
if (showall || allowp >= percent) if (showall || allowp >= percent)
{ {
fprintf(stderr, fprintf(stderr,
"%.*g[%d] -> '%s' -> %.*g number changed (%g > %g (%d%%))\n", "%.*g[%d] -> '%s' -> %.*g number changed (%g > %g (%d%%))\n",
DBL_DIG, test, precision, buffer, DBL_DIG, out, change, allow, DBL_DIG, test, precision, buffer, DBL_DIG, out, change, allow,
(int)round(allowp)); (int)round(allowp));
failed = 1; failed = 1;
} }
else else
++minorarith; ++minorarith;
} }
} }
@@ -239,15 +239,15 @@ skip:
/* Generate random numbers. */ /* Generate random numbers. */
if (test == 0 || !isfinite(test)) if (test == 0 || !isfinite(test))
test = precision+1; test = precision+1;
else else
{ {
/* Derive the exponent from the previous rand() value. */ /* Derive the exponent from the previous rand() value. */
int exponent = precision % (DBL_MAX_EXP - DBL_MIN_EXP) + DBL_MIN_EXP; int exponent = precision % (DBL_MAX_EXP - DBL_MIN_EXP) + DBL_MIN_EXP;
int tmp; int tmp;
test = frexp(test * rand(), &tmp); test = frexp(test * rand(), &tmp);
test = ldexp(test, exponent); test = ldexp(test, exponent);
precision >>= 8; /* arbitrary */ precision >>= 8; /* arbitrary */
} }
/* This limits the precision to 32 digits, enough for standard /* This limits the precision to 32 digits, enough for standard
@@ -634,7 +634,7 @@ int validation_muldiv(int count, int argc, char **argv)
{ {
png_fixed_point result; png_fixed_point result;
/* NOTE: your mileage may vary, a type is required below that can /* NOTE: your mileage may vary, a type is required below that can
* hold 64 bits or more, if floating point is used a 64 bit or * hold 64 bits or more, if floating point is used a 64-bit or
* better mantissa is required. * better mantissa is required.
*/ */
long long int fp, fpround; long long int fp, fpround;
@@ -646,17 +646,17 @@ int validation_muldiv(int count, int argc, char **argv)
*/ */
{ {
long u1, u2; long u1, u2;
int n = 0; int n = 0;
if (a < 0) u1 = -a, n = 1; else u1 = a; if (a < 0) u1 = -a, n = 1; else u1 = a;
if (times < 0) u2 = -times, n = !n; else u2 = times; if (times < 0) u2 = -times, n = !n; else u2 = times;
png_64bit_product(u1, u2, &hi, &lo); png_64bit_product(u1, u2, &hi, &lo);
if (n) if (n)
{ {
/* -x = ~x+1 */ /* -x = ~x+1 */
lo = ((~lo) + 1) & 0xffffffff; lo = ((~lo) + 1) & 0xffffffff;
hi = ~hi; hi = ~hi;
if (lo == 0) ++hi; if (lo == 0) ++hi;
} }
} }
fp = a; fp = a;
@@ -664,48 +664,48 @@ int validation_muldiv(int count, int argc, char **argv)
if ((fp & 0xffffffff) != lo || ((fp >> 32) & 0xffffffff) != hi) if ((fp & 0xffffffff) != lo || ((fp >> 32) & 0xffffffff) != hi)
{ {
fprintf(stderr, "png_64bit_product %d * %d -> %lx|%.8lx not %llx\n", fprintf(stderr, "png_64bit_product %d * %d -> %lx|%.8lx not %llx\n",
a, times, hi, lo, fp); a, times, hi, lo, fp);
++error64; ++error64;
} }
if (div != 0) if (div != 0)
{ {
/* Round - this is C round to zero. */ /* Round - this is C round to zero. */
if ((fp < 0) != (div < 0)) if ((fp < 0) != (div < 0))
fp -= div/2; fp -= div/2;
else else
fp += div/2; fp += div/2;
fp /= div; fp /= div;
fpround = fp; fpround = fp;
/* Assume 2's complement here: */ /* Assume 2's complement here: */
ok = fpround <= PNG_UINT_31_MAX && ok = fpround <= PNG_UINT_31_MAX &&
fpround >= -1-(long long int)PNG_UINT_31_MAX; fpround >= -1-(long long int)PNG_UINT_31_MAX;
if (!ok) ++overflow; if (!ok) ++overflow;
} }
else else
ok = 0, ++overflow, fpround = fp/*misleading*/; ok = 0, ++overflow, fpround = fp/*misleading*/;
if (verbose) if (verbose)
fprintf(stderr, "TEST %d * %d / %d -> %lld (%s)\n", a, times, div, fprintf(stderr, "TEST %d * %d / %d -> %lld (%s)\n", a, times, div,
fp, ok ? "ok" : "overflow"); fp, ok ? "ok" : "overflow");
++tested; ++tested;
if (png_muldiv(&result, a, times, div) != ok) if (png_muldiv(&result, a, times, div) != ok)
{ {
++error; ++error;
if (ok) if (ok)
fprintf(stderr, "%d * %d / %d -> overflow (expected %lld)\n", a, fprintf(stderr, "%d * %d / %d -> overflow (expected %lld)\n", a,
times, div, fp); times, div, fp);
else else
fprintf(stderr, "%d * %d / %d -> %d (expected overflow %lld)\n", a, fprintf(stderr, "%d * %d / %d -> %d (expected overflow %lld)\n", a,
times, div, result, fp); times, div, result, fp);
} }
else if (ok && result != fpround) else if (ok && result != fpround)
{ {
++error; ++error;
fprintf(stderr, "%d * %d / %d -> %d not %lld\n", a, times, div, result, fprintf(stderr, "%d * %d / %d -> %d not %lld\n", a, times, div, result,
fp); fp);
} }
else else
++passed; ++passed;
@@ -721,7 +721,7 @@ int validation_muldiv(int count, int argc, char **argv)
} }
while (--count > 0); while (--count > 0);
printf("%d tests including %d overflows, %d passed, %d failed (%d 64 bit " printf("%d tests including %d overflows, %d passed, %d failed (%d 64-bit "
"errors)\n", tested, overflow, passed, error, error64); "errors)\n", tested, overflow, passed, error, error64);
return 0; return 0;
} }
@@ -775,7 +775,7 @@ int validation_gamma(int argc, char **argv)
/* Silence the output with -s, just test the gamma functions with -g: */ /* Silence the output with -s, just test the gamma functions with -g: */
while (--argc > 0) while (--argc > 0)
if (strcmp(*++argv, "-s") == 0) if (strcmp(*++argv, "-s") == 0)
silent = 1; silent = 1;
else if (strcmp(*argv, "-g") == 0) else if (strcmp(*argv, "-g") == 0)
onlygamma = 1; onlygamma = 1;
else else
@@ -790,100 +790,100 @@ int validation_gamma(int argc, char **argv)
maxerr = 0; maxerr = 0;
for (i=0; i<256; ++i) for (i=0; i<256; ++i)
{ {
double correct = -log(i/255.)/log(2.)*65536; double correct = -log(i/255.)/log(2.)*65536;
double error = png_log8bit(i) - correct; double error = png_log8bit(i) - correct;
if (i != 0 && fabs(error) > maxerr) if (i != 0 && fabs(error) > maxerr)
maxerr = fabs(error); maxerr = fabs(error);
if (i == 0 && png_log8bit(i) != 0xffffffff || if (i == 0 && png_log8bit(i) != 0xffffffff ||
i != 0 && png_log8bit(i) != floor(correct+.5)) i != 0 && png_log8bit(i) != floor(correct+.5))
{ {
fprintf(stderr, "8 bit log error: %d: got %u, expected %f\n", fprintf(stderr, "8-bit log error: %d: got %u, expected %f\n",
i, png_log8bit(i), correct); i, png_log8bit(i), correct);
} }
} }
if (!silent) if (!silent)
printf("maximum 8 bit log error = %f\n", maxerr); printf("maximum 8-bit log error = %f\n", maxerr);
maxerr = 0; maxerr = 0;
for (i=0; i<65536; ++i) for (i=0; i<65536; ++i)
{ {
double correct = -log(i/65535.)/log(2.)*65536; double correct = -log(i/65535.)/log(2.)*65536;
double error = png_log16bit(i) - correct; double error = png_log16bit(i) - correct;
if (i != 0 && fabs(error) > maxerr) if (i != 0 && fabs(error) > maxerr)
maxerr = fabs(error); maxerr = fabs(error);
if (i == 0 && png_log16bit(i) != 0xffffffff || if (i == 0 && png_log16bit(i) != 0xffffffff ||
i != 0 && png_log16bit(i) != floor(correct+.5)) i != 0 && png_log16bit(i) != floor(correct+.5))
{ {
if (error > .68) /* By experiment error is less than .68 */ if (error > .68) /* By experiment error is less than .68 */
{ {
fprintf(stderr, "16 bit log error: %d: got %u, expected %f" fprintf(stderr, "16-bit log error: %d: got %u, expected %f"
" error: %f\n", i, png_log16bit(i), correct, error); " error: %f\n", i, png_log16bit(i), correct, error);
} }
} }
} }
if (!silent) if (!silent)
printf("maximum 16 bit log error = %f\n", maxerr); printf("maximum 16-bit log error = %f\n", maxerr);
/* Now exponentiations. */ /* Now exponentiations. */
maxerr = 0; maxerr = 0;
for (i=0; i<=0xfffff; ++i) for (i=0; i<=0xfffff; ++i)
{ {
double correct = exp(-i/65536. * log(2.)) * (65536. * 65536); double correct = exp(-i/65536. * log(2.)) * (65536. * 65536);
double error = png_exp(i) - correct; double error = png_exp(i) - correct;
if (fabs(error) > maxerr) if (fabs(error) > maxerr)
maxerr = fabs(error); maxerr = fabs(error);
if (fabs(error) > 1883) /* By experiment. */ if (fabs(error) > 1883) /* By experiment. */
{ {
fprintf(stderr, "32 bit exp error: %d: got %u, expected %f" fprintf(stderr, "32-bit exp error: %d: got %u, expected %f"
" error: %f\n", i, png_exp(i), correct, error); " error: %f\n", i, png_exp(i), correct, error);
} }
} }
if (!silent) if (!silent)
printf("maximum 32 bit exp error = %f\n", maxerr); printf("maximum 32-bit exp error = %f\n", maxerr);
maxerr = 0; maxerr = 0;
for (i=0; i<=0xfffff; ++i) for (i=0; i<=0xfffff; ++i)
{ {
double correct = exp(-i/65536. * log(2.)) * 255; double correct = exp(-i/65536. * log(2.)) * 255;
double error = png_exp8bit(i) - correct; double error = png_exp8bit(i) - correct;
if (fabs(error) > maxerr) if (fabs(error) > maxerr)
maxerr = fabs(error); maxerr = fabs(error);
if (fabs(error) > .50002) /* By experiment */ if (fabs(error) > .50002) /* By experiment */
{ {
fprintf(stderr, "8 bit exp error: %d: got %u, expected %f" fprintf(stderr, "8-bit exp error: %d: got %u, expected %f"
" error: %f\n", i, png_exp8bit(i), correct, error); " error: %f\n", i, png_exp8bit(i), correct, error);
} }
} }
if (!silent) if (!silent)
printf("maximum 8 bit exp error = %f\n", maxerr); printf("maximum 8-bit exp error = %f\n", maxerr);
maxerr = 0; maxerr = 0;
for (i=0; i<=0xfffff; ++i) for (i=0; i<=0xfffff; ++i)
{ {
double correct = exp(-i/65536. * log(2.)) * 65535; double correct = exp(-i/65536. * log(2.)) * 65535;
double error = png_exp16bit(i) - correct; double error = png_exp16bit(i) - correct;
if (fabs(error) > maxerr) if (fabs(error) > maxerr)
maxerr = fabs(error); maxerr = fabs(error);
if (fabs(error) > .524) /* By experiment */ if (fabs(error) > .524) /* By experiment */
{ {
fprintf(stderr, "16 bit exp error: %d: got %u, expected %f" fprintf(stderr, "16-bit exp error: %d: got %u, expected %f"
" error: %f\n", i, png_exp16bit(i), correct, error); " error: %f\n", i, png_exp16bit(i), correct, error);
} }
} }
if (!silent) if (!silent)
printf("maximum 16 bit exp error = %f\n", maxerr); printf("maximum 16-bit exp error = %f\n", maxerr);
} /* !onlygamma */ } /* !onlygamma */
/* Test the overall gamma correction. */ /* Test the overall gamma correction. */
@@ -894,45 +894,45 @@ int validation_gamma(int argc, char **argv)
png_fixed_point gfp = floor(g * PNG_FP_1 + .5); png_fixed_point gfp = floor(g * PNG_FP_1 + .5);
if (!silent) if (!silent)
printf("Test gamma %f\n", g); printf("Test gamma %f\n", g);
maxerr = 0; maxerr = 0;
for (j=0; j<256; ++j) for (j=0; j<256; ++j)
{ {
double correct = pow(j/255., g) * 255; double correct = pow(j/255., g) * 255;
png_byte out = png_gamma_8bit_correct(j, gfp); png_byte out = png_gamma_8bit_correct(j, gfp);
double error = out - correct; double error = out - correct;
if (fabs(error) > maxerr) if (fabs(error) > maxerr)
maxerr = fabs(error); maxerr = fabs(error);
if (out != floor(correct+.5)) if (out != floor(correct+.5))
{ {
fprintf(stderr, "8bit %d ^ %f: got %d expected %f error %f\n", fprintf(stderr, "8bit %d ^ %f: got %d expected %f error %f\n",
j, g, out, correct, error); j, g, out, correct, error);
} }
} }
if (!silent) if (!silent)
printf("gamma %f: maximum 8 bit error %f\n", g, maxerr); printf("gamma %f: maximum 8-bit error %f\n", g, maxerr);
maxerr = 0; maxerr = 0;
for (j=0; j<65536; ++j) for (j=0; j<65536; ++j)
{ {
double correct = pow(j/65535., g) * 65535; double correct = pow(j/65535., g) * 65535;
png_uint_16 out = png_gamma_16bit_correct(j, gfp); png_uint_16 out = png_gamma_16bit_correct(j, gfp);
double error = out - correct; double error = out - correct;
if (fabs(error) > maxerr) if (fabs(error) > maxerr)
maxerr = fabs(error); maxerr = fabs(error);
if (fabs(error) > 1.62) if (fabs(error) > 1.62)
{ {
fprintf(stderr, "16bit %d ^ %f: got %d expected %f error %f\n", fprintf(stderr, "16bit %d ^ %f: got %d expected %f error %f\n",
j, g, out, correct, error); j, g, out, correct, error);
} }
} }
if (!silent) if (!silent)
printf("gamma %f: maximum 16 bit error %f\n", g, maxerr); printf("gamma %f: maximum 16-bit error %f\n", g, maxerr);
} }
return 0; return 0;
@@ -942,7 +942,7 @@ int validation_gamma(int argc, char **argv)
/* Various validation routines are included herein, they require some /* Various validation routines are included herein, they require some
* definition for png_warning and png_error, seetings of VALIDATION: * definition for png_warning and png_error, seetings of VALIDATION:
* *
* 1: validates the ASCII to floating point convertions * 1: validates the ASCII to floating point conversions
* 2: validates png_muldiv * 2: validates png_muldiv
* 3: accuracy test of fixed point gamma tables * 3: accuracy test of fixed point gamma tables
*/ */

View File

@@ -1,8 +1,8 @@
/* timepng.c /* timepng.c
* *
* Copyright (c) 2012 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
@@ -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')
{ {

View File

@@ -14,7 +14,8 @@ LD=$(CC)
RM=rm -f RM=rm -f
COPY=cp COPY=cp
CFLAGS=-DPNG_USER_CONFIG -DNO_GZCOMPRESS -DNO_GZIP -I. -O1 CPPFLAGS=-I. -DPNG_USER_CONFIG -DNO_GZCOMPRESS -DZ_SOLO -DNO_GZIP
CFLAGS=-O1 -Wall
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) -c $(CPPFLAGS) $(CFLAGS) $<
# dependencies # dependencies
@@ -95,16 +96,16 @@ 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) -f $(PNGSRC)/scripts/pnglibconf.mak $(MAKEFLAGS)\
srcdir=$(PNGSRC) CPPFLAGS="-DPNG_USER_CONFIG"\ srcdir=$(PNGSRC) CPPFLAGS="-DPNG_USER_CONFIG -I."\
DFA_XTRA="pngusr.dfa" $@ DFA_XTRA="pngusr.dfa" $@
clean: clean:
$(MAKE) $(MAKEFLAGS) -f $(PNGSRC)/scripts/pnglibconf.mak\ $(MAKE) -f $(PNGSRC)/scripts/pnglibconf.mak $(MAKEFLAGS)\
srcdir=$(PNGSRC) clean srcdir=$(PNGSRC) clean
$(RM) pngm2pnm$(O) $(RM) pngm2pnm$(O)
$(RM) pngm2pnm$(E) $(RM) pngm2pnm$(E)

View File

@@ -1,6 +1,6 @@
# pngminim/decoder/pngusr.dfa # pngminim/decoder/pngusr.dfa
# #
# Copyright (c) 2010-2011 Glenn Randers-Pehrson # Copyright (c) 2010-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

View File

@@ -1,6 +1,6 @@
/* minrdpngconf.h: headers to make a minimal png-read-only library /* minrdpngconf.h: headers to make a minimal png-read-only library
* *
* Copyright (c) 2007, 2010-2011 Glenn Randers-Pehrson * Copyright (c) 2007, 2010-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
@@ -18,7 +18,6 @@
* affect the API (so are not recorded in pnglibconf.h) * affect the API (so are not recorded in pnglibconf.h)
*/ */
#define PNG_NO_WARNINGS
#define PNG_ALIGN_TYPE PNG_ALIGN_NONE #define PNG_ALIGN_TYPE PNG_ALIGN_NONE
#endif /* MINRDPNGCONF_H */ #endif /* MINRDPNGCONF_H */

View File

@@ -1,6 +1,6 @@
This demonstrates the use of PNG_USER_CONFIG and pngusr.h This demonstrates the use of PNG_USER_CONFIG and pngusr.h
The makefile builds a minimal write-only decoder with embedded libpng The makefile builds a minimal write-only encoder with embedded libpng
and zlib. and zlib.
Specify the location of the zlib source (1.2.1 or later) as ZLIBSRC Specify the location of the zlib source (1.2.1 or later) as ZLIBSRC

View File

@@ -14,7 +14,8 @@ LD=$(CC)
RM=rm -f RM=rm -f
COPY=cp COPY=cp
CFLAGS=-DPNG_USER_CONFIG -DNO_GZIP -I. -O1 CPPFLAGS=-I. -DPNG_USER_CONFIG -DNO_GZCOMPRESS -DZ_SOLO -DNO_GZIP
CFLAGS=-O1 -Wall
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) -c $(CPPFLAGS) $(CFLAGS) $<
# dependencies # dependencies
@@ -94,16 +95,16 @@ 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) -f $(PNGSRC)/scripts/pnglibconf.mak $(MAKEFLAGS)\
srcdir=$(PNGSRC) CPPFLAGS="-DPNG_USER_CONFIG"\ srcdir=$(PNGSRC) CPPFLAGS="-DPNG_USER_CONFIG -I."\
DFA_XTRA="pngusr.dfa" $@ DFA_XTRA="pngusr.dfa" $@
clean: clean:
$(MAKE) $(MAKEFLAGS) -f $(PNGSRC)/scripts/pnglibconf.mak\ $(MAKE) -f $(PNGSRC)/scripts/pnglibconf.mak $(MAKEFLAGS)\
srcdir=$(PNGSRC) clean srcdir=$(PNGSRC) clean
$(RM) pnm2pngm$(O) $(RM) pnm2pngm$(O)
$(RM) pnm2pngm$(E) $(RM) pnm2pngm$(E)

View File

@@ -1,6 +1,6 @@
# pngminim/encoder/pngusr.dfa # pngminim/encoder/pngusr.dfa
# #
# Copyright (c) 2010-2011 Glenn Randers-Pehrson # Copyright (c) 2010-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
@@ -14,6 +14,10 @@ everything = off
option WRITE on option WRITE on
# These 2 options are required if you need to read PBM (P1 or P4) 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

View File

@@ -1,6 +1,6 @@
/* minwrpngconf.h: headers to make a minimal png-write-only library /* minwrpngconf.h: headers to make a minimal png-write-only library
* *
* Copyright (c) 2007, 2010-2011 Glenn Randers-Pehrson * Copyright (c) 2007, 2010-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
@@ -18,7 +18,6 @@
* affect the API (so are not recorded in pnglibconf.h) * affect the API (so are not recorded in pnglibconf.h)
*/ */
#define PNG_NO_WARNINGS
#define PNG_ALIGN_TYPE PNG_ALIGN_NONE #define PNG_ALIGN_TYPE PNG_ALIGN_NONE
#endif /* MINWRPNGCONF_H */ #endif /* MINWRPNGCONF_H */

View File

@@ -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 -DNO_GZIP -I. $(XINC) -O1 CPPFLAGS=-I. $(XINC) -DPNG_USER_CONFIG -DNO_GZCOMPRESS -DZ_SOLO -DNO_GZIP
CFLAGS=-O1 -Wall
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) -c $(CPPFLAGS) $(CFLAGS) $<
# dependencies # dependencies
@@ -110,16 +111,16 @@ 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) -f $(PNGSRC)/scripts/pnglibconf.mak $(MAKEFLAGS)\
srcdir=$(PNGSRC) CPPFLAGS="-DPNG_USER_CONFIG"\ srcdir=$(PNGSRC) CPPFLAGS="-DPNG_USER_CONFIG -I."\
DFA_XTRA="pngusr.dfa" $@ DFA_XTRA="pngusr.dfa" $@
clean: clean:
$(MAKE) $(MAKEFLAGS) -f $(PNGSRC)/scripts/pnglibconf.mak\ $(MAKE) -f $(PNGSRC)/scripts/pnglibconf.mak $(MAKEFLAGS)\
srcdir=$(PNGSRC) clean srcdir=$(PNGSRC) clean
$(RM) rpng2-x$(O) $(RM) rpng2-x$(O)
$(RM) rpng2-x$(E) $(RM) rpng2-x$(E)

View File

@@ -1,6 +1,6 @@
# pngminim/preader/pngusr.dfa # pngminim/preader/pngusr.dfa
# #
# Copyright (c) 2010-2011 Glenn Randers-Pehrson # Copyright (c) 2010-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

View File

@@ -1,6 +1,6 @@
/* minrdpngconf.h: headers to make a minimal png-read-only library /* minrdpngconf.h: headers to make a minimal png-read-only library
* *
* Copyright (c) 2009, 2010-2011 Glenn Randers-Pehrson * Copyright (c) 2009, 2010-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
@@ -18,7 +18,6 @@
* affect the API (so are not recorded in pnglibconf.h) * affect the API (so are not recorded in pnglibconf.h)
*/ */
#define PNG_NO_WARNINGS
#define PNG_ALIGN_TYPE PNG_ALIGN_NONE #define PNG_ALIGN_TYPE PNG_ALIGN_NONE
#endif /* MINPRDPNGCONF_H */ #endif /* MINPRDPNGCONF_H */

View File

@@ -23,7 +23,8 @@ ZINC = -I../../../zlib
ZLIB = -L../../../zlib -lz ZLIB = -L../../../zlib -lz
ZLIBS = ../../../zlib/libz.a ZLIBS = ../../../zlib/libz.a
CFLAGS=$(PNGINC) $(ZINC) CPPFLAGS=$(PNGINC) $(ZINC)
CFLAGS=
LDLIBS=$(PNGLIB) $(ZLIB) LDLIBS=$(PNGLIB) $(ZLIB)
LDLIBSS=$(PNGLIBS) $(ZLIBS) LDLIBSS=$(PNGLIBS) $(ZLIBS)
C=.c C=.c
@@ -37,7 +38,7 @@ E=
all: png2pnm$(E) pnm2png$(E) png2pnm-static$(E) pnm2png-static$(E) all: png2pnm$(E) pnm2png$(E) png2pnm-static$(E) pnm2png-static$(E)
png2pnm$(O): png2pnm$(C) png2pnm$(O): png2pnm$(C)
$(CC) -c $(CFLAGS) png2pnm$(C) $(CC) -c $(CPPFLAGS) $(CFLAGS) png2pnm$(C)
png2pnm$(E): png2pnm$(O) png2pnm$(E): png2pnm$(O)
$(LD) $(LDFLAGS) -o png2pnm$(E) png2pnm$(O) $(LDLIBS) -lm $(LD) $(LDFLAGS) -o png2pnm$(E) png2pnm$(O) $(LDLIBS) -lm
@@ -46,7 +47,7 @@ png2pnm-static$(E): png2pnm$(O)
$(LD) $(LDFLAGS) -o png2pnm-static$(E) png2pnm$(O) $(LDLIBSS) -lm $(LD) $(LDFLAGS) -o png2pnm-static$(E) png2pnm$(O) $(LDLIBSS) -lm
pnm2png$(O): pnm2png$(C) pnm2png$(O): pnm2png$(C)
$(CC) -c $(CFLAGS) pnm2png$(C) $(CC) -c $(CPPFLAGS) $(CFLAGS) pnm2png$(C)
pnm2png$(E): pnm2png$(O) pnm2png$(E): pnm2png$(O)
$(LD) $(LDFLAGS) -o pnm2png$(E) pnm2png$(O) $(LDLIBS) -lm $(LD) $(LDFLAGS) -o pnm2png$(E) pnm2png$(O) $(LDLIBS) -lm

View File

@@ -7,7 +7,8 @@ LB=tlib
RM=del RM=del
CP=copy CP=copy
MODEL=l MODEL=l
CCFLAGS=-O -m$(MODEL) -I..\libpng -I..\zlib CPPFLAGS=-I..\libpng -I..\zlib
CFLAGS=-O -m$(MODEL)
LDFLAGS=-m$(MODEL) -L..\libpng -L..\zlib LDFLAGS=-m$(MODEL) -L..\libpng -L..\zlib
C=.c C=.c
O=.obj O=.obj
@@ -19,13 +20,13 @@ E=.exe
all: png2pnm$(E) pnm2png$(E) all: png2pnm$(E) pnm2png$(E)
png2pnm$(O): png2pnm$(C) png2pnm$(O): png2pnm$(C)
$(CC) -c $(CCFLAGS) png2pnm$(C) $(CC) -c $(CPPFLAGS) $(CFLAGS) png2pnm$(C)
png2pnm$(E): png2pnm$(O) png2pnm$(E): png2pnm$(O)
$(LD) $(LDFLAGS) png2pnm$(O) libpng$(L) zlib$(L) $(LD) $(LDFLAGS) png2pnm$(O) libpng$(L) zlib$(L)
pnm2png$(O): pnm2png$(C) pnm2png$(O): pnm2png$(C)
$(CC) -c $(CCFLAGS) pnm2png$(C) $(CC) -c $(CPPFLAGS) $(CFLAGS) pnm2png$(C)
pnm2png$(E): pnm2png$(O) pnm2png$(E): pnm2png$(O)
$(LD) $(LDFLAGS) pnm2png$(O) libpng$(L) zlib$(L) $(LD) $(LDFLAGS) pnm2png$(O) libpng$(L) zlib$(L)
@@ -35,4 +36,3 @@ clean:
$(RM) *$(E) $(RM) *$(E)
# End of makefile for png2pnm / pnm2png # End of makefile for png2pnm / pnm2png

0
contrib/pngminus/png2pnm.bat Normal file → Executable file
View File

View File

@@ -52,7 +52,8 @@
int main (int argc, char *argv[]); int main (int argc, char *argv[]);
void usage (); void usage ();
BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file, BOOL raw, BOOL alpha); BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file, BOOL raw,
BOOL alpha);
/* /*
* main * main
@@ -85,7 +86,8 @@ int main(int argc, char *argv[])
if ((fp_al = fopen (argv[argi], "wb")) == NULL) if ((fp_al = fopen (argv[argi], "wb")) == NULL)
{ {
fprintf (stderr, "PNM2PNG\n"); fprintf (stderr, "PNM2PNG\n");
fprintf (stderr, "Error: can not create alpha-channel file %s\n", argv[argi]); fprintf (stderr, "Error: can not create alpha-channel file %s\n",
argv[argi]);
exit (1); exit (1);
} }
break; break;
@@ -176,9 +178,11 @@ void usage()
fprintf (stderr, "Usage: png2pnm [options] <file>.png [<file>.pnm]\n"); fprintf (stderr, "Usage: png2pnm [options] <file>.png [<file>.pnm]\n");
fprintf (stderr, " or: ... | png2pnm [options]\n"); fprintf (stderr, " or: ... | png2pnm [options]\n");
fprintf (stderr, "Options:\n"); fprintf (stderr, "Options:\n");
fprintf (stderr, " -r[aw] write pnm-file in binary format (P4/P5/P6) (default)\n"); fprintf (stderr,
" -r[aw] write pnm-file in binary format (P4/P5/P6) (default)\n");
fprintf (stderr, " -n[oraw] write pnm-file in ascii format (P1/P2/P3)\n"); fprintf (stderr, " -n[oraw] write pnm-file in ascii format (P1/P2/P3)\n");
fprintf (stderr, " -a[lpha] <file>.pgm write PNG alpha channel as pgm-file\n"); fprintf (stderr,
" -a[lpha] <file>.pgm write PNG alpha channel as pgm-file\n");
fprintf (stderr, " -h | -? print this help-information\n"); fprintf (stderr, " -h | -? print this help-information\n");
} }
@@ -186,7 +190,8 @@ void usage()
* png2pnm * png2pnm
*/ */
BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file, BOOL raw, BOOL alpha) BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file,
volatile BOOL raw, BOOL alpha)
{ {
png_struct *png_ptr = NULL; png_struct *png_ptr = NULL;
png_info *info_ptr = NULL; png_info *info_ptr = NULL;
@@ -218,7 +223,7 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file, BOOL raw, BOOL a
/* create png and info structures */ /* create png and info structures */
png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING, png_ptr = png_create_read_struct (png_get_libpng_ver(NULL),
NULL, NULL, NULL); NULL, NULL, NULL);
if (!png_ptr) if (!png_ptr)
return FALSE; /* out of memory */ return FALSE; /* out of memory */
@@ -261,7 +266,7 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file, BOOL raw, BOOL a
png_set_expand (png_ptr); png_set_expand (png_ptr);
#ifdef NJET #ifdef NJET
/* downgrade 16-bit images to 8 bit */ /* downgrade 16-bit images to 8-bit */
if (bit_depth == 16) if (bit_depth == 16)
png_set_strip_16 (png_ptr); png_set_strip_16 (png_ptr);
/* transform grayscale images into full-color */ /* transform grayscale images into full-color */
@@ -315,12 +320,14 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file, BOOL raw, BOOL a
/* row_bytes is the width x number of channels x (bit-depth / 8) */ /* row_bytes is the width x number of channels x (bit-depth / 8) */
row_bytes = png_get_rowbytes (png_ptr, info_ptr); row_bytes = png_get_rowbytes (png_ptr, info_ptr);
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) {
png_destroy_read_struct (&png_ptr, &info_ptr, NULL); png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
return FALSE; return FALSE;
} }
if ((row_pointers = (png_byte **) malloc (height * sizeof (png_bytep))) == NULL) if ((row_pointers = (png_byte **)
malloc (height * sizeof (png_bytep))) == NULL)
{ {
png_destroy_read_struct (&png_ptr, &info_ptr, NULL); png_destroy_read_struct (&png_ptr, &info_ptr, NULL);
free (png_pixels); free (png_pixels);
@@ -329,7 +336,7 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file, BOOL raw, BOOL a
} }
/* set the individual row_pointers to point at the correct offsets */ /* set the individual row_pointers to point at the correct offsets */
for (i = 0; i < (height); i++) for (i = 0; i < ((int) height); i++)
row_pointers[i] = png_pixels + i * row_bytes; row_pointers[i] = png_pixels + i * row_bytes;
/* now we can go ahead and just read the whole image */ /* now we can go ahead and just read the whole image */
@@ -372,9 +379,9 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file, BOOL raw, BOOL a
/* write data to PNM file */ /* write data to PNM file */
pix_ptr = png_pixels; pix_ptr = png_pixels;
for (row = 0; row < height; row++) for (row = 0; row < (int) height; row++)
{ {
for (col = 0; col < width; col++) for (col = 0; col < (int) width; col++)
{ {
for (i = 0; i < (channels - alpha_present); i++) for (i = 0; i < (channels - alpha_present); i++)
{ {

0
contrib/pngminus/png2pnm.sh Normal file → Executable file
View File

0
contrib/pngminus/pngminus.bat Normal file → Executable file
View File

0
contrib/pngminus/pngminus.sh Normal file → Executable file
View File

0
contrib/pngminus/pnm2png.bat Normal file → Executable file
View File

View File

@@ -3,6 +3,7 @@
* copyright (C) 1999 by Willem van Schaik <willem@schaik.com> * copyright (C) 1999 by Willem van Schaik <willem@schaik.com>
* *
* version 1.0 - 1999.10.15 - First version. * version 1.0 - 1999.10.15 - First version.
* version 1.1 - 2015.07.29 - Fixed leaks (Glenn Randers-Pehrson)
* *
* Permission to use, copy, modify, and distribute this software and * Permission to use, copy, modify, and distribute this software and
* its documentation for any purpose and without fee is hereby granted, * its documentation for any purpose and without fee is hereby granted,
@@ -50,7 +51,8 @@
int main (int argc, char *argv[]); int main (int argc, char *argv[]);
void usage (); void usage ();
BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace, BOOL alpha); BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
BOOL alpha);
void get_token(FILE *pnm_file, char *token); void get_token(FILE *pnm_file, char *token);
png_uint_32 get_data (FILE *pnm_file, int depth); png_uint_32 get_data (FILE *pnm_file, int depth);
png_uint_32 get_value (FILE *pnm_file, int depth); png_uint_32 get_value (FILE *pnm_file, int depth);
@@ -176,7 +178,8 @@ void usage()
fprintf (stderr, " or: ... | pnm2png [options]\n"); fprintf (stderr, " or: ... | pnm2png [options]\n");
fprintf (stderr, "Options:\n"); fprintf (stderr, "Options:\n");
fprintf (stderr, " -i[nterlace] write png-file with interlacing on\n"); fprintf (stderr, " -i[nterlace] write png-file with interlacing on\n");
fprintf (stderr, " -a[lpha] <file>.pgm read PNG alpha channel as pgm-file\n"); fprintf (stderr,
" -a[lpha] <file>.pgm read PNG alpha channel as pgm-file\n");
fprintf (stderr, " -h | -? print this help-information\n"); fprintf (stderr, " -h | -? print this help-information\n");
} }
@@ -184,32 +187,36 @@ void usage()
* pnm2png * pnm2png
*/ */
BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace, BOOL alpha) BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
BOOL alpha)
{ {
png_struct *png_ptr = NULL; png_struct *png_ptr = NULL;
png_info *info_ptr = NULL; png_info *info_ptr = NULL;
png_byte *png_pixels = NULL; png_byte *png_pixels = NULL;
png_byte **row_pointers = NULL; png_byte **row_pointers = NULL;
png_byte *pix_ptr = NULL; png_byte *pix_ptr = NULL;
png_uint_32 row_bytes; volatile png_uint_32 row_bytes;
char type_token[16]; char type_token[16];
char width_token[16]; char width_token[16];
char height_token[16]; char height_token[16];
char maxval_token[16]; char maxval_token[16];
int color_type; volatile int color_type=1;
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; volatile png_uint_32 width=0, height=0;
png_uint_32 height, alpha_height; volatile png_uint_32 alpha_width=0, alpha_height=0;
png_uint_32 maxval; png_uint_32 maxval;
int bit_depth = 0; volatile int bit_depth = 0;
int channels; int channels=0;
int alpha_depth = 0; int alpha_depth = 0;
int alpha_present; int alpha_present=0;
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 +229,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'))
{ {
@@ -338,76 +357,108 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
channels = 3; channels = 3;
else if (color_type == PNG_COLOR_TYPE_RGB_ALPHA) else if (color_type == PNG_COLOR_TYPE_RGB_ALPHA)
channels = 4; channels = 4;
#if 0
else else
channels = 0; /* should not happen */ channels = 0; /* cannot happen */
#endif
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;
/* read data from PNM file */ /* read data from PNM file */
pix_ptr = png_pixels; pix_ptr = png_pixels;
for (row = 0; row < height; row++) for (row = 0; row < (int) 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 < (int) 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 < (int) 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 */
/* prepare the standard PNG structures */ /* prepare the standard PNG structures */
png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); png_ptr = png_create_write_struct (png_get_libpng_ver(NULL), NULL, NULL,
NULL);
if (!png_ptr) if (!png_ptr)
{ {
free (png_pixels);
png_pixels = NULL;
return FALSE; return FALSE;
} }
info_ptr = png_create_info_struct (png_ptr); info_ptr = png_create_info_struct (png_ptr);
if (!info_ptr) if (!info_ptr)
{ {
png_destroy_write_struct (&png_ptr, (png_infopp) NULL); png_destroy_write_struct (&png_ptr, (png_infopp) NULL);
free (png_pixels);
png_pixels = NULL;
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)))
{ {
png_destroy_write_struct (&png_ptr, (png_infopp) NULL); png_destroy_write_struct (&png_ptr, &info_ptr);
free (png_pixels);
png_pixels = NULL;
return FALSE; return FALSE;
} }
@@ -425,25 +476,28 @@ BOOL pnm2png (FILE *pnm_file, FILE *png_file, FILE *alpha_file, BOOL interlace,
/* if needed we will allocate memory for an new array of row-pointers */ /* if needed we will allocate memory for an new array of row-pointers */
if (row_pointers == (unsigned char**) NULL) if (row_pointers == (unsigned char**) NULL)
{ {
if ((row_pointers = (png_byte **) malloc (height * sizeof (png_bytep))) == NULL) if ((row_pointers = (png_byte **)
malloc (height * sizeof (png_bytep))) == NULL)
{ {
png_destroy_write_struct (&png_ptr, (png_infopp) NULL); png_destroy_write_struct (&png_ptr, &info_ptr);
free (png_pixels);
png_pixels = NULL;
return FALSE; return FALSE;
} }
} }
/* set the individual row_pointers to point at the correct offsets */ /* set the individual row_pointers to point at the correct offsets */
for (i = 0; i < (height); i++) for (i = 0; i < (int) height; i++)
row_pointers[i] = png_pixels + i * row_bytes; row_pointers[i] = png_pixels + i * row_bytes;
/* write out the entire image data in one call */ /* write out the entire image data in one call */
png_write_image (png_ptr, row_pointers); png_write_image (png_ptr, row_pointers);
/* write the additional chuncks to the PNG file (not really needed) */ /* write the additional chunks to the PNG file (not really needed) */
png_write_end (png_ptr, info_ptr); png_write_end (png_ptr, info_ptr);
/* clean up after the write, and free any memory allocated */ /* clean up after the write, and free any memory allocated */
png_destroy_write_struct (&png_ptr, (png_infopp) NULL); png_destroy_write_struct (&png_ptr, &info_ptr);
if (row_pointers != (unsigned char**) NULL) if (row_pointers != (unsigned char**) NULL)
free (row_pointers); free (row_pointers);
@@ -460,19 +514,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] != ' '));

0
contrib/pngminus/pnm2png.sh Normal file → Executable file
View File

View File

@@ -1,8 +1,8 @@
pngsuite pngsuite
-------- --------
(c) Willem van Schaik, 1999, 2011, 2012 Copyright (c) Willem van Schaik, 1999, 2011, 2012
Two images are by Glenn Randers-Pehrson, 2012 Two images (ftbbn0g01.png and ftbbn0g02.png) are by Glenn Randers-Pehrson, 2012
Permission to use, copy, modify, and distribute these images for any Permission to use, copy, modify, and distribute these images for any
purpose and without fee is hereby granted. purpose and without fee is hereby granted.

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 311 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 311 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 278 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

BIN
contrib/testpngs/gray-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 744 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 744 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 744 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 744 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 697 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 697 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 684 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 684 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 311 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 325 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 311 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 278 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 B

BIN
contrib/testpngs/gray-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 327 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 313 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 327 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 313 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 B

Some files were not shown because too many files have changed in this diff Show More