Compare commits

..

715 Commits

Author SHA1 Message Date
Glenn Randers-Pehrson
d23207b866 [libpng17] Imported from libpng-1.7.0beta80.tar 2016-05-07 15:44:55 -05:00
John Bowler
a70f5053de [libpng17] Update CHANGES and ANNOUNCE about pngcp; sync timepng.c with libpng16 2016-05-06 19:09:58 -05:00
John Bowler
4cc89fb733 Minor write bug-fixes, remove unimplemented code
A debug() assert fired if windowBits was set to 8 for the Huffman only and
no-compression cases.  This commit changes it to do some extra checking.  Remove
unreachable code in pz_default_settings, eliminate a spurious warning in pngcp
for small files.

Signed-off-by: John Bowler <jbowler@acm.org>
2016-05-06 14:35:35 -07:00
Glenn Randers-Pehrson
e966fac5ac [libpng17] Update CHANGES and ANNOUNCE for Write code update (John Bowler) 2016-05-04 22:02:52 -05:00
John Bowler
cde9b583a8 Write code update
Implemented better defaulting of zlib settings based on image properties.
Implemented pass-through of png_write_rows when the rows can be used directly (a
common case) optimizing the handling of previous-row buffering.

Removed the METHODICAL filter selection method and disabled the HEURISTIC one;
the first was ridiculously slow (though useful for experiments) the second
doesn't work.  Filter selection is temporarily disabled (it defaults to the
lowest numbered filter in the list; typically 'none').

New handling of compression settings (incomplete), new PNG compression level
(not yet visible in an API).

Back ported 'PNG_FAST_FILTERS' from 1.6 (in png.h).

There are minimal API changes beyond removal of the selection options.  Work is
still to be done to investigate a filter selection mechanism that is at least as
good as the previous one.

Signed-off-by: John Bowler <jbowler@acm.org>
2016-05-04 17:02:20 -07:00
Glenn Randers-Pehrson
1fd42d849d [libpng17] Bump version to 1.7.0beta80 2016-03-09 12:05:09 -06:00
Glenn Randers-Pehrson
b6a1f48ab2 [libpng17] Imported from libpng-1.7.0beta79.tar 2016-03-09 12:05:00 -06:00
Glenn Randers-Pehrson
bbe8ea6eb0 [libpng17] Fixed some misleading indentation (Krishnaraj Bhat). 2016-03-07 07:49:09 -06:00
Glenn Randers-Pehrson
6d2e06f25f [libpng17] Changed PNG_INFO_cHNK and PNG_FREE_cHNK from 0xnnnn to 0xnnnnU in
png.h (Robert C. Seacord). Various other flags in png.h made unsigned as well.
2016-02-14 13:13:20 -06:00
Glenn Randers-Pehrson
3fb14ea53b [libpng17] Make cmake install pnglibconf.h; rename some tests to be
similar to the names generated by "configure"
2016-02-09 08:54:17 -06:00
John Bowler
af9ad9545d Write compression options
More sophisticated defaulting which helps significantly for some files along
with code to make it easier to control the compression defaults and to make the
settings honor the API calls the application makes (previously low windowBits
settings would get reset to higher values.)

Signed-off-by: John Bowler <jbowler@acm.org>
2016-02-02 05:58:38 -08:00
Glenn Randers-Pehrson
5e88e9c396 [libpng17] Update CHANGES and ANNOUNCE 2016-02-02 07:46:12 -06:00
John Bowler
8498aa1c97 Expand search logging
Output results during the search; not a perfect implementation but sufficient
for basic tests on zlib parameters.

Signed-off-by: John Bowler <jbowler@acm.org>
2016-02-01 18:04:31 -08:00
Roger Leigh
8fb81acd98 [libpng17] Deleted pngstest-pngsuite from CMakeLists.txt 2016-01-30 21:20:55 -06:00
Glenn Randers-Pehrson
1a087bf921 [libpng17] Update copyright info in CMakeLists.txt 2016-01-30 17:19:49 -06:00
Roger Leigh
5a857b7d83 [libpng17] Remove extra pngvalid test from CMakeLists.txt 2016-01-30 17:04:51 -06:00
John Bowler
e2414effed pngcp: 1.6 support and better --search output
Some refinements for the search option and better (more consistent) reporting of
the results plus changes so that when compiled against libpng 1.6 the program
correctly copies text chunks; previously when a search option caused multiple
copies of the same file the copies after the first would not have the text
chunks.

Signed-off-by: John Bowler <jbowler@acm.org>
2016-01-30 14:09:39 -08:00
Glenn Randers-Pehrson
023b399e40 [libpng17] Mention pngchunk.h in documentation 2016-01-30 09:47:13 -06:00
Glenn Randers-Pehrson
0b073f4a4d [libpng17] Add pngchunk.h dependency and remove some redundant
dependencies from CMakeLists.txt
2016-01-30 09:44:44 -06:00
Glenn Randers-Pehrson
a8b45d9f7e [libpng17] Removed pngstest-pngsuite test from CMakeLists.txt 2016-01-30 09:31:33 -06:00
Roger Leigh
c39c5640b4 [libpng17] Updated CMakeLists.txt, added supporting scripts/gen*.cmake.in
and test.cmake.in (Roger Leigh).
2016-01-29 17:27:39 -06:00
Glenn Randers-Pehrson
eb5e71cc8c [libpng17] Update CHANGES, ANNOUNCE, and some "last changed" dates 2016-01-29 16:20:34 -06:00
John Bowler
85cb69aa82 Forward port libpng16 fixes
Batched fixes from libpng16: PNG_IMAGE_PNG_SIZE_MAX macro fix, contrib/libtests
exit(77) change to just do that for configure and changes to pngstest to
(by default) make random backgrounds on a per-file, not per-session, basis.

Signed-off-by: John Bowler <jbowler@acm.org>
2016-01-28 23:11:33 -08:00
Glenn Randers-Pehrson
dcb3f792d9 [libpng17] Bump version to 1.7.0beta79 2016-01-23 14:57:49 -06:00
Glenn Randers-Pehrson
9a6922896d [libpng17] Imported from libpng-1.7.0beta78.tar 2016-01-23 14:06:48 -06:00
Glenn Randers-Pehrson
55d3b3226e [libpng17] Document new png_image_write_to_memory() API 2016-01-23 13:59:24 -06:00
Glenn Randers-Pehrson
443694d7ac [libpng17] Revised workaround for Coverity issue in pngvalid.c 2016-01-23 10:10:52 -06:00
Glenn Randers-Pehrson
f26fa77ef8 [libpng17] Updated CHANGES and ANNOUNCE, fixed typo in pngunknown.c comment. 2016-01-19 08:32:18 -06:00
John Bowler
e46cd2e6bc Simplified API: use system appropriate types
This is an API change for 1.7, albeit a quiet one; it may produce compiler
warnings but should not result in errors, unless warnings are treated as errors.

On 64-bit systems it widens the results of the various PNG_IMAGE_ macros that
return size values (component counts, byte sizes) to 64 bits.  It also changes
the row_stride parameter, which is the pointer difference between adjacent rows
of the image buffer, to ptrdiff_t which is the ANSI-C90 defined type of the
difference of two pointers.  The existing (1.6.22) checks for overflow are
preserved but now accomdate images that require more than 32 bits of address
space when size_t/ptrdiff_t are 64 bit types.

Signed-off-by: John Bowler <jbowler@acm.org>
2016-01-18 20:44:26 -08:00
John Bowler
f2a160299e pngunknown: update date 2016-01-18 12:02:40 -08:00
John Bowler
4697cbded6 Simplified API: write-to-memory, overflow handling
This implements an API and provides a number of assist macros to allow an
application which uses the simplified API write to bypass stdio and write
directly to memory.

It also includes some warnings (png.h) and some check code to detect *possible*
overflow in the ROW_STRIDE and simplified image SIZE macros.  This disallows
image width/height/format that *might* overflow.  A quiet API change that limits
in-memory image size (uncompressed) to less that 4GByte and image row size
(stride) to less than 2GByte.

Signed-off-by: John Bowler <jbowler@acm.org>
2016-01-18 11:50:30 -08:00
John Bowler
033a0d7b49 pngunknown: fix NO_STDIO build
pngunknown.c calls png_init_io (always), skip the test if there is no stdio.h
support.

Signed-off-by: John Bowler <jbowler@acm.org>
2016-01-18 11:34:13 -08:00
Glenn Randers-Pehrson
eacf6f9637 [libpng17] Changed PNG_USE_MKSTEMP to __COVERITY__ to select alternate
"tmpfile()" implementation in contrib/libtests/pngstest.c
2016-01-17 16:03:10 -06:00
Glenn Randers-Pehrson
7912bf3037 [libpng17] Bump version to 1.7.0beta78 2016-01-16 08:00:36 -06:00
Glenn Randers-Pehrson
e4fad63915 [libpng17] Imported from libpng-1.7.0beta77.tar 2016-01-16 08:00:23 -06:00
Glenn Randers-Pehrson
89287f10b8 [libpng17] Worked around a false-positive Coverity issue in pngvalid.c. 2016-01-13 09:48:41 -06:00
Glenn Randers-Pehrson
6271b4fc78 [libpng17] Updated CHANGES and ANNOUNCE 2016-01-12 14:44:47 -06:00
John Bowler
3d024874a5 Recently introduced palette sharing bug
The internal read code change to stop sharing the palette was incompletely
implemented.  The result is that unless palette index checking is turned off and
there are no read transformations the png_info palette gets deleted when the
png_struct is deleted.  This is normally harmless (png_info gets deleted first)
but in the case of pngcp it results in use-after-free of the palette and,
therefore, palette corruption and maybe on some operating systems and access
violation.

This also updated pngcp 'search' mode to check a restricted range of memLevels;
there is an unrelated bug which means that lower zlib memLevels result in memory
corruption under some circumstances, probably less often than 1:1000.

Signed-off-by: John Bowler <jbowler@acm.org>
2016-01-12 09:36:10 -08:00
Glenn Randers-Pehrson
2fce16e5c4 [libpng17] Update CHANGES and ANNOUNCE, fix typo in png.h 2016-01-10 19:34:16 -06:00
John Bowler
fc322f6d48 Add pngcp IDAT size test
Also change the order of the 'level' and 'windowBits' searches to seach
windowBits first; this favours windowBits optimizations over compression level
ones on the basis that the latter should only affect the write code.

Signed-off-by: John Bowler <jbowler@acm.org>
2016-01-10 13:53:47 -08:00
John Bowler
1afbb57994 IDAT read buffering correction
The sequential read code failed to read to the end of the IDAT stream in about
1/820 cases, resulting in a spurious warning.  The
png_set_compression_buffer_size API also would not work (or do bad things) if
the size of a zlib uInt was less than 32 bits.

This includes a quiet API change to alter png_set_compression_buffer_size to use
a png_alloc_size_t, not png_size_t and implement the correct checks.

Signed-off-by: John Bowler <jbowler@acm.org>
2016-01-10 13:51:29 -08:00
John Bowler
e393f19527 Fix write problem with reduced size IDAT chunks
png_set_compression_buffer_size would result in a spurious debug assert if the
compression buffer size was set to something other than a multiple of
PNG_ROW_BUFFER_SIZE; the debug test failed to add the buffer 'start'

Signed-off-by: John Bowler <jbowler@acm.org>
2016-01-10 13:49:34 -08:00
John Bowler
79378d49b3 [libpng17] Changed copyright and license in pngcp.c to be nearly public domain
similar to the other files in the contrib/examples directory.
2016-01-10 12:09:38 -06:00
Glenn Randers-Pehrson
d9d6b6e361 [libpng17] Update CHANGES and ANNOUNCE 2016-01-10 08:00:00 -06:00
John Bowler
b9014ed336 contrib/examples/pngcp search mode
This is still a work-in-progress but it seems fairly stable (if not exactly 100%
optimal).  pngcp now allows 'all' for some options which iterates through all
possible settings (this reliably produces the smallest IDAT that libpng can
produce with those settings.)  It also contains a --search command line option
which attempts to optimize this by skipping pointless tests; it is close, most
of the time, but not perfect.

Signed-off-by: John Bowler <jbowler@acm.org>
2016-01-09 17:40:55 -08:00
John Bowler
faf68f8d57 Fix for serious write bugs in pngwutil.c
There are two separate problems.  The first is that the CMINFO optimization code
gets run twice on any PNG IDAT stream longer than 2048 bytes and the second time
can overwrite bytes 2048,2049 destroying the output.

The second is that one of the (debug) checks was slightly wrong (< when <=
should have been used) and this causes write to abort maybe 1/2048 times.

Signed-off-by: John Bowler <jbowler@acm.org>
2016-01-09 17:38:34 -08:00
Glenn Randers-Pehrson
09a1afbb3d [libpng17] Fixed another Coverity defect, NULL dereference "ps" in pngwutil.c 2016-01-08 18:59:36 -06:00
Glenn Randers-Pehrson
27e11dc8cf [libpng17] Bump version to 1.7.0beta77 2016-01-07 13:08:04 -06:00
Glenn Randers-Pehrson
df4568f84b [libpng17] Imported from libpng-1.7.0beta76.tar 2016-01-07 13:06:57 -06:00
Glenn Randers-Pehrson
6d5f00571d [libpng17] Fixed new Coverity defect, potential NULL dereference of "ps"
in pngwutil.c; Added temporary workaround for Coverity "Dead code" defect.
2016-01-07 09:24:56 -06:00
Glenn Randers-Pehrson
4705951df1 [libpng17] Relocate assert() in pngfix.c, update CHANGES and ANNOUNCE. 2016-01-06 16:16:09 -06:00
John Bowler
f33fe44b9f Mark 'limit' UNUSED in transform_range_check
Only affects release builds

Signed-off-by: John Bowler <jbowler@acm.org>
2016-01-06 13:00:08 -08:00
Glenn Randers-Pehrson
43d0aa7218 [libpng17] Removed redundant "option WRITE" from scripts/pnglibconf.dfa 2016-01-02 14:13:49 -06:00
Glenn Randers-Pehrson
89ebb4dd52 [libpng17] Happy 2016! Updated copyright year 2016-01-02 13:51:52 -06:00
Glenn Randers-Pehrson
8d18e76f2b [libpng17] Updated the manpage (libpng.3 and libpng-manual.txt) 2015-12-29 20:39:28 -06:00
Glenn Randers-Pehrson
fafbc6a458 [libpng17] Update CHANGES and ANNOUNCE, fix two trivial typos in comments 2015-12-29 19:50:41 -06:00
John Bowler
4253c4d759 tIME and text position handling
The handling of tIME and text chunks on read now records the location of the
chunks relative to PLTE and IDAT.  Behavior on write is unchanged except that if
the position was recorded on read it will be re-used.

This involves an ABI change to the png_text_struct; a one byte location field is
added (with the same meaning as the one used to record unknown chunk location.)
Because this field is only used on read there is no API change unless a png_info
from a libpng read is passed to a subsequent libpng write (this did not work
very well before 1.7; the tIME chunk could get duplicated.)

png_set_text ignores the new field, resetting it to the current position in the
read or write stream.  On write the position is set to the next location to be
written unless the write has not started (the position is before the signature)
in which case the location is set to PNG_HAVE_PLTE|PNG_AFTER_IDAT.  When the
chunk is written the position is set to the actual write location (effectively
the position is frozen.)

Signed-off-by: John Bowler <jbowler@acm.org>
2015-12-29 15:30:31 -08:00
Glenn Randers-Pehrson
c90572ee77 [libpng17] Updated CHANGES and ANNOUNCE 2015-12-28 19:57:26 -06:00
John Bowler
ef26a3f0fb pngcp.c: code to test zlib options
This adds code to iterate through the command line options when non-list options
have the 'all' parameter.  Used to rapidly test the effect of different zlib
options.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-12-28 16:17:12 -08:00
John Bowler
63ea57a796 Add NULL pz->list test to png_zlib_compress_validate
This seems safer; in fact a NULL dereference never happens because the test ends
up just doing arithmetic on NULL but it seems possible that the undefined
arithmetic can still happen if there is a bug elsewhere.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-12-28 16:15:36 -08:00
John Bowler
07c60a383a Correct the options handling
Setting the new, higher, option bits triggered the byte check (which is no
longer necessary).

Signed-off-by: John Bowler <jbowler@acm.org>
2015-12-28 16:14:15 -08:00
Glenn Randers-Pehrson
8d124a250a [libpng17] In projects/vstudio, merged readme.txt and WARNING into README.txt 2015-12-28 08:50:52 -06:00
Glenn Randers-Pehrson
0340dcdcbd [libpng17] Indented tables in projects/vstudio/WARNING 2015-12-27 20:50:18 -06:00
Glenn Randers-Pehrson
ff57ec2126 [libpng17] Minor update to vstudio documentation 2015-12-27 20:35:29 -06:00
Glenn Randers-Pehrson
745a926a38 [libpng17] Bump version to 1.7.0beta76 2015-12-25 08:48:02 -06:00
Glenn Randers-Pehrson
4b1d9e8c2a [libpng17] Imported from libpng-1.7.0beta75.tar 2015-12-25 08:31:37 -06:00
Glenn Randers-Pehrson
bb4bcecaa0 [libpng17] Updated CHANGES and ANNOUNCE 2015-12-21 09:21:31 -06:00
David Drysdale
28fa0d23c1 Reverse order of tests in png_zlib_compress_validate
Undefined behaviour sanitizer currently fires for this test
with an error about member access within null pointer to
struct; put the check that relies on pz->list being non-NULL
second.
2015-12-21 11:29:34 +00:00
Glenn Randers-Pehrson
1bfeb46881 [libpng17] Update CHANGES and ANNOUNCE 2015-12-19 14:49:48 -06:00
John Bowler
ace10ed9a2 Fix release builds (incorrect debug macro)
Signed-off-by: John Bowler <jbowler@acm.org>
2015-12-19 10:26:45 -08:00
John Bowler
156006bb1a Added an accurate 'methodical' measure
Also fix incorrect references to 'pngimage' in pngcp.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-12-19 09:51:41 -08:00
John Bowler
8d48a512bd Fix duplicate tIME chunk from png_write_png
Also add an example program, pngcp.c, which illustrates the problem when used to
copy pngtest.png (the result is an invalid PNG because the tIME chunk is
duplicated.)

Signed-off-by: John Bowler <jbowler@acm.org>
2015-12-19 09:51:07 -08:00
John Bowler
c75a0a40b4 Revert "Disable 'methodical' filter selection code"
This reverts commit 9c76207dbb.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-12-19 09:50:15 -08:00
Glenn Randers-Pehrson
fad9c9af47 [libpng17] Bump version to 1.7.0beta75 2015-12-19 09:25:12 -06:00
Glenn Randers-Pehrson
5695e897fd [libpng17] Imported from libpng-1.7.0beta74.tar 2015-12-19 09:25:01 -06:00
Glenn Randers-Pehrson
0e249e9d93 [libpng17] Updated CHANGES and ANNOUNCE 2015-12-18 22:28:13 -06:00
Glenn Randers-Pehrson
a78c4e286a Merge branch 'test17' of git://github.com/daviddrysdale/libpng into libpng17 2015-12-18 18:09:31 -06:00
Glenn Randers-Pehrson
16424d20b5 [libpng17] Update CHANGES and ANNOUNCE 2015-12-18 14:41:17 -06:00
John Bowler
9c76207dbb Disable 'methodical' filter selection code
It is incomplete; it works but does not do anything useful except, maybe, on
really enormous images.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-12-18 09:17:41 -08:00
David Drysdale
2023c4a0a5 Add Travis build configuration
Include sanitizers and coverage (via https://coveralls.io)
2015-12-18 07:23:56 +00:00
John Bowler
69ff249bc4 Merge branch 'libpng17' into libpng17-filter-selection 2015-12-17 20:06:48 -08:00
Glenn Randers-Pehrson
844e264234 [libpng17] Updated CHANGES and ANNOUNCE 2015-12-17 20:53:54 -06:00
John Bowler
61acc4c9ed Prototype implementation of filter selection
This rewrites the code used previously in the heuristics to make it easier to
debug and introduces the 'methodical' method, which is intended to be an
expensive but reliable way of reducing image size.

The code in this commit does not work; the 'methodical' test for success does
not take account of data buffered inside zlib and, anyway, it changes the
results of pngtest so that the test fails.  This commit is just a checkpoint of
the current state; another commit will temporarily disable the 'methodical'
code.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-12-17 17:47:29 -08:00
John Bowler
bd0bb3ca7f Fix undefined behavior in pngvalid.c
Undefined because (png_byte) << shift is undefined if it changes the signed bit
(because png_byte is promoted to int).  The libpng exported functions
png_get_uint_32 and png_get_uint_16 handle this.

Bug reported by David Drysdale as a result of reports from UBSAN in clang 3.8.

This changes pngvalid to use BE random numbers; this used to produce errors but
these should not be fixed as a result of the previous changes.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-12-17 12:58:36 -08:00
Glenn Randers-Pehrson
386b2b0a7b [libng17] Update CHANGES and ANNOUNCE 2015-12-15 12:26:54 -06:00
John Bowler
d103609ac5 pngvalid with 'limit' checks disabled in RC+
This widens the 'limit' check on the internally calculated error limits in the
'DIGITIZE' case (the code used prior to 1.7 for rgb_to_gray error checks) and it
changes the check to only operate in non-release builds (base build type not RC
or RELEASE.)

Signed-off-by: John Bowler <jbowler@acm.org>
2015-12-15 08:33:18 -08:00
Glenn Randers-Pehrson
639f8a4668 [libpng17] Update CHANGES and ANNOUNCE, fix date in pngvalid.c 2015-12-14 06:56:49 -06:00
John Bowler
aed7f7aaf9 Merge branch 'libpng17' of ../../libpng into libpng17 2015-12-13 22:28:27 -08:00
Glenn Randers-Pehrson
15b6717221 [libpng17] Update copyright years in source files. 2015-12-13 22:37:27 -06:00
Glenn Randers-Pehrson
c9fda22f76 [libpng16] Fix typo in "last-changed" date. 2015-12-13 18:25:36 -08:00
John Bowler
4891f1a5a8 Fix rgb_to_gray graylo==0 errors, build issues
Fixes to pngvalid for various reduced build configurations (eliminate unused
statics) and a fix for the case in rgb_to_gray when the digitize option reduces
graylo to 0, producing a large error.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-12-13 18:02:31 -08:00
John Bowler
abe4a4f049 Remove LE/BE dependencies in pngvalid
This 'fixes' the current problem in the BE tests by not testing it, making the
BE code the same as the LE version.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-12-13 18:00:21 -08:00
Glenn Randers-Pehrson
f3fa5dce47 [libpng17] Bump version to 1.7.0beta74 2015-12-11 16:13:00 -06:00
Glenn Randers-Pehrson
17bfbce61c [libpng17] Imported from libpng-1.7.0beta73.tar 2015-12-11 16:07:31 -06:00
Glenn Randers-Pehrson
2933c2e361 [libpng17] Changed png_struct->options from png_byte to png_uint_32, to hold
up to 16 2-bit options.
2015-12-11 14:53:54 -06:00
Glenn Randers-Pehrson
69f21bc6eb [libpng17] Combine tests for info_ptr==NULL in png_handle_PLTE(). 2015-12-11 14:28:54 -06:00
Glenn Randers-Pehrson
454408799b [libpng17] Updated ANNOUNCE and CHANGES to describe recent fix more accurately. 2015-12-09 15:55:11 -06:00
Glenn Randers-Pehrson
4c1ee27962 [libpng17] Fixed a syntax error in tests/pngstest that some shells other than
bash could not parse (Bug report by Nelson Beebe).
2015-12-09 13:29:02 -06:00
Glenn Randers-Pehrson
26090a5f43 [libpng17] Bump version to 1.7.0beta73 2015-12-08 13:03:30 -06:00
Glenn Randers-Pehrson
bfd8446816 [libpng17] Imported from libpng-1.7.0beta72.tar 2015-12-08 12:56:55 -06:00
Glenn Randers-Pehrson
605f8d046f [libpng17] Update CHANGES and ANNOUNCE 2015-12-06 20:12:23 -06:00
John Bowler
b8ab93dc6f Fix stack smaller in write png_copy_row
This also resulted in PNG data with random row bytes.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-12-06 11:12:17 -08:00
John Bowler
66b53bdd37 Merge remote-tracking branch 'code/libpng17-20151204' into libpng17-71-1 2015-12-06 10:41:58 -08:00
Glenn Randers-Pehrson
dcbc357c46 [libpng17] Bump version to 1.7.0beta72 2015-12-05 13:58:01 -06:00
Glenn Randers-Pehrson
8ac1821831 [libpng17] Imported from libpng-1.7.0beta71.tar 2015-12-05 13:52:36 -06:00
Glenn Randers-Pehrson
3407d0f7c4 [libpng17] Updated CHANGES and ANNOUNCE 2015-12-05 13:51:07 -06:00
John Bowler
c8d2efcb50 Fix g++ builds
enums are (int), G++ objects to (int) and (unsigned) being used together in ?:

Signed-off-by: John Bowler <jbowler@acm.org>
2015-12-03 17:17:42 -08:00
Glenn Randers-Pehrson
99436a407e [libpng17] Bump version to 1.7.0beta71 2015-12-03 17:54:53 -06:00
John Bowler
59136cc3b3 Fix build break in no-write-filters cases
Signed-off-by: John Bowler <jbowler@acm.org>
2015-12-03 14:12:05 -08:00
John Bowler
afbaf7150b Merge branch 'libpng17' into libpng17-20151201
MASSIVE merge conflicts; way beyond those reported here:

Conflicts:
	pngstruct.h
	pngwutil.c
	scripts/pnglibconf.h.prebuilt
2015-12-03 13:47:39 -08:00
John Bowler
86499967c3 Checkpoint for 'methodical' filter selection
This checkpoint is to allow the massive merge with the recent mainline libpng17
changes.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-12-03 13:25:11 -08:00
Glenn Randers-Pehrson
028d2c3fd6 [libpng17] Bump version to 1.7.0beta71 2015-12-03 10:15:25 -06:00
Glenn Randers-Pehrson
47ed19dfce [libpng17] Bump version to 1.7.0beta71 2015-12-02 22:31:19 -06:00
Glenn Randers-Pehrson
94a5189b1c [libpng17] Imported from libpng-1.7.0beta70.tar 2015-12-02 22:30:47 -06:00
John Bowler
9fce04fcd6 Change option (SUPPORTED) names, dummy code
The filter selection options are made more intuitive (IMO, but I am not an
Intuitive User).  Dummy code added for methodical filter selection.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-12-02 19:03:28 -08:00
John Bowler
71c5123a4d Merge branch 'libpng17' into libpng17-20151201 2015-12-02 17:10:45 -08:00
John Bowler
e9d567d9ec Filter heuristic implementation
This implements the heuristic part of filter selction, the methodic testing
approach is still not implemented.  png_set_option methods are incomplete.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-12-02 17:08:17 -08:00
Glenn Randers-Pehrson
37a50281cf [libpng17] Reverted recent manual change. The additional restrictions
on the order of png_set_PLTE, png_set_tRNS, and png_set_hIST are
not necessary.
2015-12-01 17:23:54 -06:00
Glenn Randers-Pehrson
aacda27449 [libpng17] Updated ANNOUNCE and CHANGES 2015-12-01 11:35:57 -06:00
Glenn Randers-Pehrson
b427d7216d Merge branch 'libpng17-20151130' of git://github.com/jbowler/libpng-1 into libpng17 2015-12-01 11:20:41 -06:00
Glenn Randers-Pehrson
c46bd30b51 [libpng17] Updated manual to require png_set_PLTE() to precede png_set_tRNS()
and png_set_hIST() if either is present.
2015-12-01 11:13:44 -06:00
John Bowler
0f2f0f7bbd Merge branch 'libpng17' into libpng17-20151130 2015-12-01 08:41:45 -08:00
John Bowler
84a8bb8244 Make png_struct palette, trans_alpha private
This removes the side-effect on the png_struct palette of calling png_set_PLTE
or png_set_tRNS.  NOTE: this is a quiet API change, it was possible before to
alter the palette on a PNG image by using png_set_PLTE, but this was unintended
and inconsistent with the other png_set APIs.

Fix a bug in palette index checking; png_struct::num_palette could, in
principle, get changed by the transformations (e.g. png_set_quantize) and this
would invalidate the check.  The palette checking init function now makes a copy
of png_struct::num_palette.

Fix a bug in pngvalid error handling.  A png_error in png_write_info is not
continuable (a valid image cannot necessarily be written afterward) because the
png_error aborts the write of subsequent pre-IDAT chunks.  In particular an
abort as a result of a bogus colorspace information (gAMA, cHRM, sBIT etc)
prevents the write of the PLTE chunk.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-12-01 08:16:53 -08:00
John Bowler
8fe2eac47f Separate png_compress_IDAT into w/c
I.e. write/compress, also remove some trailing spaces and clean up pnglibconf
stuff.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-11-30 21:00:22 -08:00
Glenn Randers-Pehrson
cb3402221b [libpng17] Updated PNG_ZBUF_SIZE definition in scripts/pnglibconf.h.prebuilt 2015-11-30 17:50:39 -06:00
Glenn Randers-Pehrson
8978eba436 [libpng17] Update CHANGES and ANNOUNCE, update dates in png.c and png.h 2015-11-30 16:57:23 -06:00
John Bowler
4792c8a751 compression code unification
Unify the compression code so that inflate calls are localized to a common
routine.  Ground work for filter selection support.  Minor API changes to use
void* not byte* for data parameters.  Unification of some of the compression
code with the decompression code; IDAT_size replaces IDAT_read_size and
zbuffer_size, IDAT reading and writing is no longer controlled by the size of
the compression buffer.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-11-30 13:39:49 -08:00
John Bowler
6bbc74d880 pngunknown fix for multiple IDAT chunks
Fixes the case where IDAT is treated as unknown and saved; the first IDAT chunk
ends up 'before' IDAT, the rest 'after', pngunknown has to take this into
account since it checks before and after.
2015-11-28 08:42:54 -08:00
John Bowler
b3a18efebf Filter code change prep.
This commit moves code round and changes the filter write interfaces that took
png_uint_32 buffer pixel counts to unsigned int.  Also moves compression code
and definitions into pngwutil.c so that the compression code is isolated from
other definitions.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-11-27 15:42:52 -08:00
John Bowler
14d11b9f35 contrib space removal
Remove all trailing spaces from source files in contrib

Signed-off-by: John Bowler <jbowler@acm.org>
2015-11-26 09:55:37 -08:00
John Bowler
e41820cd0b Merge branch 'libpng17' into libpng17-20151124.0001 2015-11-25 16:08:20 -08:00
John Bowler
18211df70b [libpng17] Fix CMINFO bug in contrib/tools/pngfix.c 2015-11-25 16:03:47 -06:00
John Bowler
1775bdeb24 Better filter checking
Improve pngvalid coverage of filter combinations, remove the (new in 1.7) code
which disabled previous-row filters on the first row of an image in some cases.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-11-24 22:24:18 -08:00
John Bowler
8bffb48bc1 Add new pngvalid test case
This tests the 'size' images in the sequential reader, the existing test case
only uses the progressive reader which means that important parts of the filter
code never got tested.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-11-24 21:45:10 -08:00
Glenn Randers-Pehrson
edec44bfc4 [libpng17] Update CHANGES and ANNOUNCE 2015-11-24 20:45:26 -06:00
John Bowler
1c514557b6 Merge branch 'libpng17' of ../../libpng into libpng17 2015-11-24 18:17:31 -08:00
John Bowler
85d7eca204 Fix first row init on read.
The code failed to zero out the row buffer at the start of a pass where the AVG
filter is used because 'row_number' is not always zero (on interlaced images)
and, apparently, the assertion that the buffer had been zeroed when allocated
was not always correct for non-interlaced images.  Revealed by pngvalid --size
with a hack to make it always use AVG.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-11-24 17:56:06 -08:00
John Bowler
5357dd77f0 Fix significant bracketing problem
This error prevents the read of non-interlaced PNG files with height 1.  A
simple bracket problem caused by hasty multiple edits.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-11-24 17:18:46 -08:00
Glenn Randers-Pehrson
5db709d83c [libpng17] Updated CHANGES and ANNOUNCE, removed trailing blanks from *.c *.h 2015-11-24 14:38:52 -06:00
Glenn Randers-Pehrson
616ed1197b [libpng17] Bump version to 1.7.0beta70 2015-11-24 13:37:41 -06:00
Glenn Randers-Pehrson
0cb0a45721 [libpng17] Imported from libpng-1.7.0beta69.tar 2015-11-24 09:51:46 -06:00
Glenn Randers-Pehrson
f476f13488 [libpng17] Updated CHANGES and ANNOUNCE 2015-11-23 21:44:18 -06:00
John Bowler
8d93ec2eca pngvalid fixes and backward compat
This fix is to the PNG_MAX_GAMMA_8 handling and png_set_rgb_to_gray, which had
bugs which were likely to expose end cases of rgb-to-gray conversion errors.
This might explain some of the machine math dependencies we are seeing
(*might*).

Signed-off-by: John Bowler <jbowler@acm.org>
2015-11-23 18:45:28 -08:00
John Bowler
b0076faf1f Backward compatibility with 1.6
1.6 did not define PNG_READ_PNG_SUPPORTED, ever; it doesn't matter there.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-11-23 18:14:57 -08:00
John Bowler
fa86bd2a61 Backward compatibility for pngtest.c
This version can be used in 1.6 and 1.5 with appropriate changes to the last
line.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-11-23 18:13:39 -08:00
John Bowler
961d60b067 Correct end-of-image test in pngread.c
This only changes the detection of invalid application behavior (too many calls
to png_read_row) from an affirm to a png_app_error.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-11-23 18:12:17 -08:00
John Bowler
764ae07652 Merge branch 'libpng17' into libpng17-buffer-enhancements 2015-11-22 21:40:13 -08:00
John Bowler
6803b09cb7 Fixes for !READ_INTERLACE/!READ_PNG interpendencies
The reliance of png_read_png on interlace handling and some minor issues in the
test programs where they failed to correctly check for interlace handling were
exposed by the ability to write interlaced images even if WRITE_INTERLACING is
turned off.  This is fixed here.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-11-22 21:37:16 -08:00
Glenn Randers-Pehrson
7a7e4367d0 [libpng17] Updated CHANGES and ANNOUNCE 2015-11-22 23:16:01 -06:00
John Bowler
b69df74b8e Re-remove PNG_WRITE_INTERLACE
Previous change backed out.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-11-22 20:48:23 -08:00
John Bowler
a42416de9c Merge branch 'libpng17' into libpng17-buffer-enhancements 2015-11-22 20:43:56 -08:00
Glenn Randers-Pehrson
e51652b4db [libpng17] Reverted 12 -> 12U again. 2015-11-22 22:41:10 -06:00
Glenn Randers-Pehrson
771eb7d01e [libpng17] Update CHANGES, ANNOUNCE, pnglibconf.h.prebuilt 2015-11-22 22:35:35 -06:00
John Bowler
368bb1b241 Fix certain minimal config builds
The removal of png_struct::row_buffer and png_struct::row_format from write
builds configured without filter or transform support (respectively) wasn't
complete; some of the png.c and pngwrite.c cleanup code needed to handle the
potentially removed members.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-11-22 20:34:00 -08:00
John Bowler
504ebd427d Back out READ/WRITE_INTERLACING changes
Now that the code works consistently so that these just switch off the support
for having libpng do the interlace/deinterlace the old names make more sense,
restoring them avoids cruft in the configuration file and avoids an unnecessary
version specific change.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-11-22 20:25:24 -08:00
John Bowler
caa716d859 Fix build break introduced from libpng17
12->12U in a compare when the other side is signed.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-11-22 19:52:12 -08:00
John Bowler
0f2554a5e6 Squashed commit of the following:
commit fc4b42b1d56f95efeb1b9fe42dc35b7d98d246bb
Merge: 74516c7 9eb1413
Author: John Bowler <jbowler@acm.org>
Date:   Sun Nov 22 19:37:54 2015 -0800

    Merge branch 'libpng17' into libpng17-filter-enhancements

commit 74516c7257f1a28a69985684c5673caa390c700a
Author: John Bowler <jbowler@acm.org>
Date:   Sun Nov 22 19:32:43 2015 -0800

    Make check full pass on gcc/g++ x86_64

    Signed-off-by: John Bowler <jbowler@acm.org>

commit e891e34737fc0bc9ee873a5d56b83c1e777b990c
Author: John Bowler <jbowler@acm.org>
Date:   Sun Nov 22 12:01:37 2015 -0800

    Checkpoint: write buffering changes

    This version fails in pngvalid --size because of an error handling very narrow
    images, otherwise a standard build passes make check.

    Signed-off-by: John Bowler <jbowler@acm.org>

commit 457a046ebdab737eefb477126cf855e49df6de50
Author: John Bowler <jbowler@acm.org>
Date:   Sun Nov 22 06:39:36 2015 -0800

    Fix previous bad merge

commit b4f426c97267317637d43f41fe0b05d1659bc63d
Merge: 07b9b90 a3458a6
Author: John Bowler <jbowler@acm.org>
Date:   Sun Nov 22 06:32:34 2015 -0800

    Merge branch 'libpng17' into libpng17-filter-enhancements

commit 07b9b90dfd653b744dbc3710b096facf6b4605f6
Merge: ed43306 5592e0b
Author: John Bowler <jbowler@acm.org>
Date:   Sat Nov 21 17:07:23 2015 -0800

    Merge branch 'libpng17' into libpng17-filter-enhancements

commit ed43306599f7039a90187862db82273fca3a4c3d
Merge: 772aed7 d3c0359
Author: John Bowler <jbowler@acm.org>
Date:   Tue Nov 17 17:47:26 2015 -0800

    Merge branch 'libpng17' into libpng17-filter-enhancements

commit 772aed72378df9c8fccc5a4594b095d02d410a9c
Merge: 73ae431 801608f
Author: John Bowler <jbowler@acm.org>
Date:   Mon Nov 16 14:26:38 2015 -0800

    Merge branch 'libpng17' into libpng17-filter-enhancements

commit 73ae4316cb6db7d7f6756583a1c213c35ca4e3f4
Merge: 687e6e3 c09b3ab
Author: John Bowler <jbowler@acm.org>
Date:   Sun Nov 15 09:31:30 2015 -0800

    Merge branch 'libpng17' into libpng17-filter-enhancements

commit 687e6e393e9d0220c2a12ec474aa01b83c5e9f25
Merge: fedd6da e916d9b
Author: John Bowler <jbowler@acm.org>
Date:   Thu Nov 5 08:45:14 2015 -0800

    Merge branch 'libpng17' into libpng17-filter-enhancements

commit fedd6da8798a14b2e002b0bc1379f5a09a03598a
Merge: 2e2fc5f ea41fd2
Author: John Bowler <jbowler@acm.org>
Date:   Tue Nov 3 21:05:01 2015 -0800

    Merge branch 'libpng17' into libpng17-filter-enhancements

commit 2e2fc5f6d7678b710c52b7ea081ac4add677d8d5
Merge: 990d5f8 5b05197
Author: John Bowler <jbowler@acm.org>
Date:   Mon Oct 12 08:28:30 2015 -0700

    Merge branch 'libpng17' into libpng17-filter-enhancements

commit 990d5f88688635dc0888657b689e30ffe7e7a7b3
Author: John Bowler <jbowler@acm.org>
Date:   Sun Oct 4 17:04:53 2015 -0700

    Read row buffer changes

    The read code now allocates one row buffer of the size of the input PNG row and,
    only if required, one buffer of the size of the output.

    The output buffer is required for the progressive reader (always) and for the
    sequential reader if libpng is de-interlacing an image (because the output row
    is used multiple times if png_read_row is called with a display row parameter.)

    This should reduce memory utilization by libpng significantly, but it has no
    detectable effect on overall performance figures of the test programs, these are
    probably dominated by memory allocations for the whole image within the test
    programs.

    Signed-off-by: John Bowler <jbowler@acm.org>

commit 527bf989bf0e30440f9e07a5544a6ebb1d6fd039
Merge: 50ebbc2 9099254
Author: John Bowler <jbowler@acm.org>
Date:   Sat Oct 3 13:39:17 2015 -0700

    Merge branch 'libpng17' into libpng17-filter-enhancements

commit 50ebbc2c9a24cf1a6b428db53d55fbd5af4d6be6
Merge: 21a7f40 2cd6d56
Author: John Bowler <jbowler@acm.org>
Date:   Sat Oct 3 11:16:32 2015 -0700

    Merge branch 'libpng17' into libpng17-filter-enhancements

commit 21a7f401ab40c79ead9e35882a8066e2cf1d6902
Merge: b512e1c 15a143e
Author: John Bowler <jbowler@acm.org>
Date:   Wed Sep 30 19:01:23 2015 -0700

    Merge branch 'libpng17' into libpng17-filter-enhancements

commit b512e1c2c5bfe6df8b6dca32f862d325ec22115e
Author: John Bowler <jbowler@acm.org>
Date:   Wed Sep 30 17:33:34 2015 -0700

    Transform rewrite: perform transforms in small chunks

    The intent of this change is to reduce the memory footprint during transform
    sequences by performing transforms in fixed (small) sized blocks of pixels.
    The change is incomplete; the filter code still works row-by-row, so the whole
    tranform also works row-by-row, the intent is to fix this so that everything
    works in small(ish) chunks.

    At present the change has no discernable effect on pngvalid --speed or pngstest
    with (e.g.) rgb-8-1.8.png; user time and (minor) page faults are the same in old
    and new versions.  The same applies to real-world 15MP PNG images; even on these
    the presence of the filter code causes a cyclical progress through memory which
    will interfere with any caching otherwise possible (useful word, 'otherwise'.)

    Signed-off-by: John Bowler <jbowler@acm.org>

commit 781cb3699b92beb0e6bc5e03cef8fba820267082
Author: John Bowler <jbowler@acm.org>
Date:   Wed Sep 30 17:12:53 2015 -0700

    Fix NO_WRITE_INTERLACE in pngvalid.c

    The support for writing interlaced images directly from libpng 1.7 was
    unintentionally disabled (INTERLACE_LAST was defined incorrectly, excluding the
    interlaced images).  This obscured the fact that the transform and error test
    case generators lacked the support for writing interlaced images from libpng.

    Signed-off-by: John Bowler <jbowler@acm.org>

commit 406ee2fd7946a384f1d7713712dc646080c5c52c
Author: John Bowler <jbowler@acm.org>
Date:   Wed Sep 30 17:11:40 2015 -0700

    Add pngvalid --transform --interlace test

    This increases code coverage by generating test cases with smaller length rows
    as a result of the interlacing.  Without this packswap handling was incompletely
    tested.

    Signed-off-by: John Bowler <jbowler@acm.org>

Signed-off-by: John Bowler <jbowler@acm.org>
2015-11-22 19:41:41 -08:00
Glenn Randers-Pehrson
9eb14136d8 [libpng17] Fixed bug recently introduced in png_set_PLTE() that uses png_ptr
not info_ptr.
2015-11-22 20:44:58 -06:00
Glenn Randers-Pehrson
09c90236f4 [libpng17] Refactored conditional compilation in png_init_row_info(). 2015-11-22 09:19:06 -06:00
Glenn Randers-Pehrson
a3458a6ba0 [libpng17] Refactor conditional compilation of png_get_compression_buffer_size()
for readability
2015-11-22 07:18:05 -06:00
Glenn Randers-Pehrson
daf4b9dd18 [libpng17] Clean up some conditional compilation of parts of statements
and fixed some indentation
2015-11-21 19:14:37 -06:00
Glenn Randers-Pehrson
3a866cb451 [libpng17] Avoid conditionally compiling parts of statements in png.c (suggested
by flaviommedeiros).
2015-11-21 18:18:26 -06:00
Glenn Randers-Pehrson
5592e0bc96 [libpng17] Use unsigned constants in pngrutil.c buffer length comparisons 2015-11-21 14:30:35 -06:00
John Bowler
57e92a8432 [libpng17] Use "1U" not "1" in pointer calculations in png_handle_sPLT(). 2015-11-19 21:13:29 -06:00
Glenn Randers-Pehrson
d3c0359b23 [libpng17] Removed a redundant new check in png_handle_pCAL(). 2015-11-17 16:14:35 -06:00
Glenn Randers-Pehrson
801608f8f4 [libpng17] Rearrange terms to make it self-evident that overflow cannot happen 2015-11-16 09:34:20 -06:00
Glenn Randers-Pehrson
c09b3ab2c7 [lbpng17] Avoid potential pointer overflow in png_handle_sPLT() and
png_handle_pCAL() (Bug report by John Regehr).
2015-11-13 22:25:03 -06:00
Glenn Randers-Pehrson
722645fec5 [libpng17] Bump version to 1.7.0beta69 2015-11-13 10:19:36 -06:00
Glenn Randers-Pehrson
f72d0d01eb [libpng17] Imported from libpng-1.7.0beta68.tar 2015-11-12 07:13:47 -06:00
Glenn Randers-Pehrson
97c4072cce [libpng17] Clean up coding style in png_set_PLTE() 2015-11-05 11:20:12 -06:00
Glenn Randers-Pehrson
7a92725e17 [libpng17] Update ANNOUNCE and CHANGES 2015-11-05 07:06:01 -06:00
Glenn Randers-Pehrson
e916d9bb60 [libpng17] Fixed new bug with CRC error after reading an over-length palette. 2015-11-04 23:49:01 -06:00
Glenn Randers-Pehrson
ea41fd2161 [libpng17] Bump version to 1.7.0beta68 2015-11-03 09:55:12 -06:00
Glenn Randers-Pehrson
dbd98b8c68 [libpng17] Imported from libpng-1.7.0beta67.tar 2015-11-03 09:55:02 -06:00
Glenn Randers-Pehrson
5cf6ed45c8 [libpng17] Clarified COPYRIGHT information to state explicitly that versions
are derived from previous versions.
Removed much of the long list of previous versions from png.h and
    libpng.3.
2015-11-03 09:47:54 -06:00
Glenn Randers-Pehrson
9f7d5aa973 [libpng17] Prevent setting or writing over-length PLTE chunk (Cosmin Truta).
Silently truncate over-length PLTE chunk while reading.
2015-11-01 13:01:56 -06:00
Glenn Randers-Pehrson
5b05197604 [libpng17] Added sPLT support to pngtest.c 2015-10-10 12:04:50 -05:00
Glenn Randers-Pehrson
90992547c7 [libng17] Updated CHANGES and ANNOUNCE 2015-10-03 15:11:12 -05:00
John Bowler
13ce05daaf Fix 'pow' macros in pngvalid.c
It is legal for 'pow' to be a macro, therefore the argument list cannot contain
preprocessing directives.  Make sure pow is a function where this happens (this
is a minimal safe fix, the issue only arises in non-performance-critical code.)

Signed-off-by: John Bowler <jbowler@acm.org>
2015-10-03 11:08:03 -07:00
John Bowler
2cd6d56ff6 Merge remote-tracking branch 'local/libpng17' into libpng17 2015-10-03 11:04:31 -07:00
Glenn Randers-Pehrson
1af270dc19 [libpng17] Bump version to 1.7.0beta67 2015-10-02 14:06:12 -05:00
Glenn Randers-Pehrson
2ddd06c392 [libpng17] Imported from libpng-1.7.0beta66.tar 2015-10-02 13:44:50 -05:00
Glenn Randers-Pehrson
33d4b5b66d [libpng17] Another attempt (successful this time) to quiet the Coverity issue. 2015-10-02 13:43:36 -05:00
John Bowler
15a143e85e Merge remote-tracking branch 'local/libpng17' into libpng17 2015-09-30 19:00:43 -07:00
Glenn Randers-Pehrson
bd55022b2d [libng17] Stifle the last remaining Coverity issue in libpng17. 2015-09-28 15:41:47 -05:00
John Bowler
c5bc9b668d 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 21:43:07 -07:00
Glenn Randers-Pehrson
975d8fac6d [libpng17] Update CHANGES and ANNOUNCE 2015-09-26 21:14:36 -05:00
John Bowler
e76a320539 Fix missing prototype for READ_GAMMA+!SIMPLIFIED_API
Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-26 17:17:13 -07:00
John Bowler
eab2c419fa makepng fixes for the palette case
Also allow extra command line arguments; convenient for testing odd things.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-26 16:44:29 -07:00
John Bowler
23324b8559 sBIT code coverage and fixes
Fixes for sBIT handling in the low-bit-depth gray and pngstest cases, extends
sBIT handling to the colormap code in the simplified API which is separately
implemented in pngread.c

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-26 15:24:20 -07:00
John Bowler
8dfa93beed Merge remote-tracking branch 'local/libpng17' into libpng17 2015-09-26 15:17:27 -07:00
Glenn Randers-Pehrson
ed44394ad0 [libpng17] Added "option READ_IMAGE on" to contrib/pngminim/decoder/pngusr.dfa
due to the new PNG_READ_IMAGE_SUPPORTED configuration in libpng-1.7.0beta65.
2015-09-26 07:55:54 -05:00
Glenn Randers-Pehrson
c23bdb1445 [libpng17] #ifdef out some dead code in pngrtran.c when sBIT is disabled. 2015-09-25 22:33:41 -05:00
John Bowler
cbf4adee5c Merge remote-tracking branch 'local/libpng17' into libpng17 2015-09-25 17:04:06 -07:00
John Bowler
1bc0781245 Merge remote-tracking branch 'local/libpng17' into libpng17 2015-09-25 17:01:16 -07:00
Glenn Randers-Pehrson
7441965463 [libpng17] Update CHANGES and ANNOUNCE 2015-09-25 18:54:12 -05:00
John Bowler
8d6c21ce96 pngvalid tests: add --strict, fix test names
Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-25 16:43:34 -07:00
Glenn Randers-Pehrson
8c94b1295f Merge branch 'libpng17' of https://github.com/jbowler/libpng-1 into libpng17 2015-09-25 18:43:07 -05:00
Glenn Randers-Pehrson
1932e16c21 [libpng17] Restored license output to pngstest.c 2015-09-25 18:37:44 -05:00
John Bowler
a6278e7c87 Merge remote-tracking branch 'glennrp/libpng17' into libpng17 2015-09-25 16:25:11 -07:00
John Bowler
a5b993aaed Enable low-bit-depth gray tests in pngvalid 2015-09-25 16:22:59 -07:00
John Bowler
53e537439f Fix png_set_tRNS_to_alpha for low-bit-depth gray
Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-25 16:22:17 -07:00
Glenn Randers-Pehrson
f1eec0ba62 [libng17] Updated CHANGES and ANNOUNCE, restored license info in
pngtest-errors.h
2015-09-25 17:40:48 -05:00
John Bowler
1e563f689c 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:21:10 -07:00
John Bowler
0301cc2627 Update pngstest-errors.h for new make check tests
Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-25 12:20:36 -07:00
Glenn Randers-Pehrson
9ee0b63b09 [libpng17] Updated CHANGES and ANNOUNCE 2015-09-24 23:09:12 -05:00
John Bowler
2c13de800f Merge remote-tracking branch 'glennrp/libpng17' into libpng17
Changes from Glenn for legal reasons
2015-09-24 17:44:05 -07:00
John Bowler
d394d889e1 png_rgb_to_gray optimization fixes
This fixes the code that optimizes RGB to Gray transformations that only
selected on channel and clarifies the handling of max_depth in the transform
code.  It eliminates some UNTESTED cases and removes the write 'invert alpha'
UNTESTED macro because, while there are no test cases for it, code review
some months after writing it suggests it is ok.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-24 17:33:32 -07:00
Glenn Randers-Pehrson
40d90d34a8 [libpng17] Add copyright and license to contrib/testpngs/makepngs.sh 2015-09-22 16:04:26 -05:00
John Bowler
3f6efbd8e2 Squashed commit of the following:
commit bf51c644f7
Author: John Bowler <jbowler@acm.org>
Date:   Tue Sep 22 09:05:13 2015 -0700

    Updated contrib/testpngs/*.png

    Corrected copyright/licensing information, corrected filtering.

    Signed-off-by: John Bowler <jbowler@acm.org>

commit 05399c8c82
Author: John Bowler <jbowler@acm.org>
Date:   Tue Sep 22 09:04:03 2015 -0700

    makepng.c: correct the first row filter setting

    It needs to include the "UP" filter so that libpng knows to retain the first
    line for the UP filter on the next one.  Without this libpng ended up using NONE
    for the second line.

    Signed-off-by: John Bowler <jbowler@acm.org>

commit 8fae6609c0
Author: John Bowler <jbowler@acm.org>
Date:   Mon Sep 21 17:15:45 2015 -0700

    makepng: spelling corrections, single test output

    Corrections to some obvious mistakes, plus one output file.

    Signed-off-by: John Bowler <jbowler@acm.org>

commit a2245a2c54
Author: John Bowler <jbowler@acm.org>
Date:   Mon Sep 21 13:39:48 2015 -0700

    Updated testpngs files with new Licensing tag

    Signed-off-by: John Bowler <jbowler@acm.org>

commit 46d3f863ca
Author: John Bowler <jbowler@acm.org>
Date:   Mon Sep 21 13:38:34 2015 -0700

    Updated makepng.c

    This supports more test cases and a reduced licence keyword (now licensing).
    The extra text cases require more slack in pngstest.c

    Signed-off-by: John Bowler <jbowler@acm.org>

commit 7c9a08b8bc
Author: John Bowler <jbowler@acm.org>
Date:   Sun Sep 20 20:55:19 2015 -0700

    Test PNG files

    These files were generated by contrib/testpngs/makepngs.sh --small with MAKEPNG
    set to the makepng compiled from the current contrib/libtests/makepngs.sh

    Signed-off-by: John Bowler <jbowler@acm.org>

commit c2a8a01b2a
Author: John Bowler <jbowler@acm.org>
Date:   Sun Sep 20 20:51:06 2015 -0700

    makepng --small

    This patch adds code to 'makepng' to allow the generation of smaller images that
    also give better test case coverage.  It also adds copyright and licence to the
    generated images, reflecting the fact that they are original works of the author
    of the code.  The licence used is the Creative Commons Public Domain one,
    appropriate to a non-source-code work.

    The resultant image were used to generate the updated pngstest-errors.h file in
    a prior commit.

    Signed-off-by: John Bowler <jbowler@acm.org>

commit 8c025bcf3f
Author: John Bowler <jbowler@acm.org>
Date:   Sun Sep 20 20:40:52 2015 -0700

    Simplified API sRGB gamma handling correction

    If a gamma encoded file that has a gamma not matching that of sRGB is passed to
    the simplified API the previous code simply interpreted it as a power law
    encoding.  However old Mac files had a power law correction of 1.45 built in to
    the encoding, even though the display devices were consistent with sRGB.
    Assuming a power law encoding results in substantial differences in the
    interpretation of low 8-bit values; below 10.  For example an Apple '5' which is
    equivalent to an sRGB '17' ends up as the value '8'.

    This patch provides some measure of correction for this by making the gamma
    correction done within the simplified API assume that any encoded data is
    encoded relative to an sRGB-like transfer function; the data is corrected back
    to the PNG-nominal 2.2 value then decoded to linear (if required) using the sRGB
    transfer function.

    This reduces the errors reported by pngstest for such files (colormapped ones)
    but still leaves the issue with files where the standard libpng code does the
    gamma decoding.  To cope with the latter cases the patch also includes a new
    pngstest-errors which allows the result, however this is still a
    work-in-progress; a better solution is possible.

    Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-22 13:46:19 -05:00
John Bowler
bf51c644f7 Updated contrib/testpngs/*.png
Corrected copyright/licensing information, corrected filtering.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-22 09:05:13 -07:00
John Bowler
05399c8c82 makepng.c: correct the first row filter setting
It needs to include the "UP" filter so that libpng knows to retain the first
line for the UP filter on the next one.  Without this libpng ended up using NONE
for the second line.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-22 09:04:03 -07:00
John Bowler
8fae6609c0 makepng: spelling corrections, single test output
Corrections to some obvious mistakes, plus one output file.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-21 17:15:45 -07:00
John Bowler
a2245a2c54 Updated testpngs files with new Licensing tag
Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-21 13:39:48 -07:00
John Bowler
46d3f863ca Updated makepng.c
This supports more test cases and a reduced licence keyword (now licensing).
The extra text cases require more slack in pngstest.c

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-21 13:38:34 -07:00
John Bowler
7c9a08b8bc Test PNG files
These files were generated by contrib/testpngs/makepngs.sh --small with MAKEPNG
set to the makepng compiled from the current contrib/libtests/makepngs.sh

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-20 20:55:19 -07:00
John Bowler
c2a8a01b2a makepng --small
This patch adds code to 'makepng' to allow the generation of smaller images that
also give better test case coverage.  It also adds copyright and licence to the
generated images, reflecting the fact that they are original works of the author
of the code.  The licence used is the Creative Commons Public Domain one,
appropriate to a non-source-code work.

The resultant image were used to generate the updated pngstest-errors.h file in
a prior commit.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-20 20:51:06 -07:00
John Bowler
8c025bcf3f Simplified API sRGB gamma handling correction
If a gamma encoded file that has a gamma not matching that of sRGB is passed to
the simplified API the previous code simply interpreted it as a power law
encoding.  However old Mac files had a power law correction of 1.45 built in to
the encoding, even though the display devices were consistent with sRGB.
Assuming a power law encoding results in substantial differences in the
interpretation of low 8-bit values; below 10.  For example an Apple '5' which is
equivalent to an sRGB '17' ends up as the value '8'.

This patch provides some measure of correction for this by making the gamma
correction done within the simplified API assume that any encoded data is
encoded relative to an sRGB-like transfer function; the data is corrected back
to the PNG-nominal 2.2 value then decoded to linear (if required) using the sRGB
transfer function.

This reduces the errors reported by pngstest for such files (colormapped ones)
but still leaves the issue with files where the standard libpng code does the
gamma decoding.  To cope with the latter cases the patch also includes a new
pngstest-errors which allows the result, however this is still a
work-in-progress; a better solution is possible.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-20 20:40:52 -07:00
Glenn Randers-Pehrson
d555056b24 [libng17] Suppressed bogus Coverity issues in pngrutil.c and pngwutil.c. 2015-09-19 22:47:59 -05:00
Glenn Randers-Pehrson
69f2152c0f [libpng17] Added license info to pngstest-errors.h and its generator. 2015-09-19 20:18:49 -05:00
Glenn Randers-Pehrson
e6a3e2456c [libpng17] Update CHANGES and ANNOUNCE with changes from pull request #20 2015-09-19 19:45:24 -05:00
John Bowler
493bfd14a2 gamma handling fixes
One serious bug; 8 was forced as a bit depth when caching a palette, even though
the palette have been expanded.  One less serious bug, the optimization for
avoiding gamma correction introduced significant errors if the app subsequently
did further corrections, only shown by using gAMA 1/1.52 files in pngstest.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-19 16:36:22 -07:00
John Bowler
8a9a3fb4dd 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, sine libpng 1.6 and 1.7 have
slightly different error limits this simplifies maintenance.

makepngs.sh has also been updated to more accurately reflect current problems in
libpng 1.7

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-19 16:21:36 -07:00
John Bowler
3e46c31961 Coverity bug fix: dead code
Also fix the previous fix attempt; the intent was to limit the calls to crc32 to
ZLIB_IO_MAX, although it is not clear that this is optimal.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-19 16:19:18 -07:00
Glenn Randers-Pehrson
714515bc0c [libpng17] Improved description of filler-byte bug fix in CHANGES and ANNOUNCE. 2015-09-18 23:39:51 -05:00
John Bowler
38647d4b21 [libpng17] Fixed makepng.c so that it compiles with GCC 5.1.0.
Added contrib/testspngs/: a directory for additional test png files
2015-09-18 16:36:57 -05:00
John Bowler
f8d3e854cb Coverity related changes
These should fix most of the reported Coverity issues.  The remaining issues
should be the back_b etc assignments, which look like a Coverity bug, and
passing a pointer to a byte to a function that expects a pointer to one or more
bytes, which should (I believe) be fixed in one case and not the other
(next_filter) case; the latter case will probably go away as I am going to
rewrite that piece of code to avoid a spurious buffer allocation.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-17 22:04:30 -05:00
Glenn Randers-Pehrson
d280c3a6da [libpng17] Updated CHANGES and ANNOUNCE 2015-09-17 07:34:38 -05:00
John Bowler
62dff2f97e Merge branch 'libpng17' of /home/jbowler/src/libpng/libpng into libpng17 2015-09-16 21:42:04 -07:00
John Bowler
fea86b1c29 Remove memcpy of png_transform_background
Replaced by a structure copy which is safer since it doesn't depend on knowing
the first member to be copied, also the copies are improved to copy the
transform args too; not required at present but it may prevent a bug being
introduced in the future.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-16 21:33:43 -07:00
John Bowler
601ae5387e [libpng17] correct low-depth-gray code and enable tests
The low-bit-depth gray tests were disabled in prior versions of libpng because
of problems which should have been fixed by the recent changes to libpng17,
enabling the tests reveals bugs in those changes which are fixed by this commit.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-16 21:09:10 -07:00
Glenn Randers-Pehrson
36ada4acae [libpng17] Add pngchunk.h to contrib/pngminim makefiles. 2015-09-16 11:09:25 -05:00
Glenn Randers-Pehrson
bfc7affa0d [libpng17] Imported from libpng-1.7.0beta65.tar 2015-09-16 10:19:29 -05:00
Glenn Randers-Pehrson
dba870122c [libpng17] Updated makefiles to handle pngchunk.h 2015-09-16 08:34:56 -05:00
Glenn Randers-Pehrson
35abfe72d6 [libpng17] Fix debug statement in pngread.c 2015-09-15 23:54:55 -05:00
Glenn Randers-Pehrson
497ff3400c [libpng17] moved scripts/chunkdesc.h to pngchunk.h 2015-09-15 23:53:49 -05:00
Glenn Randers-Pehrson
bb4e79c947 [libpng17] Updated configure.ac was omitted from previous commit 2015-09-15 19:53:08 -05:00
Glenn Randers-Pehrson
b00bb570f8 [libpng17] Fix file permission for contrib/tools/intgamma.sh 2015-09-15 18:35:26 -05:00
Glenn Randers-Pehrson
c68de14844 [libpng17] Merge contrib/libtests and contrib/tools with libpng16. 2015-09-15 17:11:43 -05:00
Glenn Randers-Pehrson
cc7fa5e23f [libpng17] Added public domain declaration to contrib/libtests/fakepng.c 2015-09-15 15:21:12 -05:00
John Bowler
ec99b373dd Merge 3184947a25 into 1fc5345bff 2015-09-15 03:52:31 +00:00
John Bowler
3184947a25 chunk handling and transform rewrite
This implements a new chunk parse implementation that can be shared, it
is currently shared by the progressive reader and the sequential one
(not, yet, the writer).

The patch also implements shared transform handling that is used
throughout.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-14 20:42:40 -07:00
John Bowler
c5ead5d2cd Test changes
Most of these are back-portable to earlier versions (contrib/libtests
should just work with earlier versions), however the 1.7 specific
changes in pngvalid mean that it probably won't work against 1.7 without
the commits following this one.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-14 17:57:40 -07:00
John Bowler
76c5c11168 Test corrections: minor fixes to the test scripts
pngimage: add --list-combos
pngunknown: add --strict to catch warnings
pngvalid-standard: remove the spurious --progressive read (compare with
pngvalid-progressive-standard!)
This patch probably applies to 1.5 and 1.6 (where the tests exist) too.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-14 17:51:06 -07:00
John Bowler
ddcca52933 ARM NEON code moved to contrib
This patch contains changes to the build (configure) system and the code
required to support the move.  The patch is provided to isolate the
changes from the others that follow it; the code won't necessarily
compile after this patch (the next changes are required.)

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-14 17:31:51 -07:00
John Bowler
3bd90db79f Rename arm -> contrib/neon
libpng will not compile if ARM NEON support is enabled with this commit;
the commit is provided to isolate the rename of the directory from the
rest of the required changes.

Signed-off-by: John Bowler <jbowler@acm.org>
2015-09-14 17:18:50 -07:00
Glenn Randers-Pehrson
1fc5345bff [libpng17] Mention dropping support for 16-bit platforms in libpng16.
Update some comments, fix example.c usage of png_set_sig_bytes().
2015-08-18 10:45:16 -05:00
Glenn Randers-Pehrson
81b1cff052 [libpng17] Fix links in man page 2015-08-11 15:35:17 -05:00
Glenn Randers-Pehrson
bc1d2b7d23 [libpng17] Fix links in man page 2015-08-11 13:04:50 -05:00
Glenn Randers-Pehrson
a16d1ef27a [libpng17] Update dead link in the man page 2015-08-11 12:16:36 -05:00
Glenn Randers-Pehrson
4b9fe200db [libpng17 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:52:21 -05:00
Glenn Randers-Pehrson
223aed9f90 [libpng17 Use nanosleep() instead of usleep() in contrib/gregbook/rpng2-x.c
because usleep() is deprecated (port from libpng16).
Fixed potential leak of png_pixels in contrib/pngminus/pnm2png.c
Fixed uninitialized variable in contrib/gregbook/rpng2-x.c
2015-07-30 11:41:47 -05:00
Glenn Randers-Pehrson
064ededa0f [libpng17] Bump version to 1.7.0beta65 2015-07-25 21:24:46 -05:00
Glenn Randers-Pehrson
92d7dd1ede [libpng17] Imported from libpng-1.7.0beta64.tar 2015-07-25 21:17:14 -05:00
Glenn Randers-Pehrson
1b3d312513 [libpng17] Belatedly added Mans Rullgard and James Yu to the list of
Contributing Authors.
2015-07-25 21:06:28 -05:00
Glenn Randers-Pehrson
47b6a93924 [libpng17] Rearranged png.h to put the major sections in the same order as
in libpng16.
2015-07-25 20:59:09 -05:00
Glenn Randers-Pehrson
e1ff1cc930 [libpng17] Revise comment about deprecated skip function in pngpread.c. 2015-06-11 21:55:19 -05:00
Glenn Randers-Pehrson
9acee8b4b2 [libpng17] Unlink temporary file immediately in pngstest (PNG_USE_MKSTEMP) 2015-06-11 16:30:44 -05:00
Glenn Randers-Pehrson
8ffa92dc25 [libpng17] Removed some unused WEIGHTED_FILTER macros from png.h and pngstruct.h 2015-06-10 07:02:36 -05:00
Glenn Randers-Pehrson
24382d838c [libpng17] 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
be used.
2015-06-10 06:59:18 -05:00
John Bowler
9307eef199 [libpng17] 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 (because it does nothing and cannot do anything) was apparently
never tested (John Bowler).
2015-06-06 20:14:38 -05:00
Glenn Randers-Pehrson
3d1fec50e8 [libpng17] Bump version to 1.7.0beta64 2015-06-06 17:02:10 -05:00
Glenn Randers-Pehrson
0781bc4905 [libpng17] Imported from libpng-1.7.0beta63.tar 2015-06-06 16:30:46 -05:00
Glenn Randers-Pehrson
188962a93b [libpng17] Added #ifdef's to contrib/examples programs so people don't try
to compile them without the minimum required support enabled
(suggested by Flavio Medeiros).
2015-06-05 21:26:31 -05:00
John Bowler
e55c190818 [libpng17] Completed AArch64 support. Previous change to recognize __ARM_NEON
didn't touch all the required preprocessor lines. This change removes
support for __ARM_NEON__ completely and makes this consistent.
2015-06-04 21:55:35 -05:00
John Bowler
1a9eb510eb [libpng17] Moved READ_GAMMA to pngrtran.c. This makes everything in pngrtrans.c
depend on READ_TRANSFORMS and moves all the transform gamma (READ_GAMMA)
code from elsewhere to png_tran.c.  There are no code changes.
There is one remaining use of the gamma (16-bit) code in the simplified
API in pngread.c but that is because of a long-standing libpng bug,
namely that the gamma corrected palette is no produced by
png_read_update_info (John Bowler).
2015-06-04 21:49:54 -05:00
Glenn Randers-Pehrson
77476d3c37 [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.

Fixed cexcept.h in which GCC 5 reported that one of the auto
variables in the Try macro needs to be volatile to prevent value
being lost over the setjmp, and fixed g++ build breaks (John Bowler).
2015-06-03 22:52:33 -05:00
Glenn Randers-Pehrson
a671f8baea [libpng17] 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:21:57 -05:00
Glenn Randers-Pehrson
f32c657fc7 [libpng17] Bump version to 1.7.0beta63 2015-06-01 09:32:03 -05:00
Glenn Randers-Pehrson
381283fb5f [libpng17] Imported from libpng-1.7.0beta62.tar 2015-06-01 08:36:42 -05:00
Glenn Randers-Pehrson
3dd43ae670 [libpng17] Fix typo in CHANGES and ANNOUNCE. 2015-05-31 22:38:34 -05:00
Glenn Randers-Pehrson
13d83c6948 [libpng17] 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.
2015-05-31 16:22:44 -05:00
Glenn Randers-Pehrson
f19f7a6c95 [libpng17] Bump version to 1.7.0beta62 2015-05-30 23:08:34 -05:00
Glenn Randers-Pehrson
e0fea61cd8 [libpng17] Imported from libpng-1.7.0beta61.tar 2015-05-30 23:03:01 -05:00
Glenn Randers-Pehrson
689b9c58fe [libpng17] Avoid a harmless potential integer overflow in png_XYZ_from_xy(). 2015-05-20 13:18:54 -05:00
Glenn Randers-Pehrson
dc6cddd798 [libng17] Avoid Coverity issue 80858 (REVERSE NULL) in pngtest.c
PNG_DEBUG builds
2015-05-09 21:55:40 -05:00
Glenn Randers-Pehrson
5d2841d272 [libpng17] Document PNG_RELEASE_BUILD macro in the man page. 2015-05-06 20:36:12 -05:00
Glenn Randers-Pehrson
9012e3d108 [libpng17] Bump version to 1.7.0beta61 2015-05-06 16:17:19 -05:00
Glenn Randers-Pehrson
81d58f913e [libpng17] Imported from libpng-1.7.0beta60.tar 2015-05-06 15:59:29 -05:00
Glenn Randers-Pehrson
0ee7a07a85 [libpng17] merge pngpriv.h and pngset.c with libpng-1.6.18beta03. 2015-04-29 11:39:12 -05:00
Glenn Randers-Pehrson
6acc280403 [libpng17] Bump version to 1.7.0beta60 2015-04-19 06:32:37 -05:00
Glenn Randers-Pehrson
01358ecec2 [libpng17] Imported from libpng-1.7.0beta59.tar 2015-04-19 06:32:30 -05:00
Glenn Randers-Pehrson
7a35bcac1a [libpng17] Suppressed some warnings from the Borland C++ 5.5.1/5.82 compiler
(Bug report by Viktor Szaka'ts).
2015-04-04 08:45:34 -05:00
John Bowler
673ae608ab [libpng17] Transformed rewrite: changed row_info, added checks. This introduces an
internal struct (png_transform_control) to replace row_info and uses
    that to implement affirms correctly.  The change also adds checks on
    the rowbytes calculation and additional checks on most transform
    implementations.
Added png_uint_16 range checking, pngvalid tRNS, fixed png_uint_16:
    review of previous checks, removal of some where SAFE. pngvalid: add
    testing of tRNS for better code coverage pngvalid: correct rgb-to-gray
    error calculations. Code coverage is still incomplete: see /*UNTESTED*/
    in pngrtran.c
2015-03-30 21:32:41 -05:00
Glenn Randers-Pehrson
73ea393ab2 [libpng17] Bump version to 1.7.0beta59 2015-03-25 08:26:11 -05:00
Glenn Randers-Pehrson
dff4a834ce [libpng17] Imported from libpng-1.7.0beta58.tar 2015-03-25 08:26:02 -05:00
Glenn Randers-Pehrson
ad817b9b2b [libpng17] Revised comment about PNG_RELEASE_BUILD in pngpriv.h, to say
Use -DPNG_RELEASE_BUILD in CFLAGS or "#define PNG_RELEASE_BUILD 1" in
pngusr.h to turn on the release compile path.
2015-03-23 11:11:08 -05:00
Glenn Randers-Pehrson
218b2d7c70 [libpng17] Comment that PNG_RELEASE_BUILD has to be 0 or 1; illustrate
usage in contrib/pngminim/*/pngusr.h
2015-03-23 10:02:56 -05:00
Glenn Randers-Pehrson
67890a19f3 [libpng17] Committed pngvalid.c omitted from previous commit; fix trivial typos 2015-03-22 21:01:48 -05:00
John Bowler
53097f5bbb [libpng17] Check (png_uint_16) casts for overflow. Also removed png_muldiv_warn,
added RELEASE/!RELEASE convenience macros. png_muldiv_warn was used in
only one place, and the overflow condition is a genuine warning not
an internal error.  Four macros allow code or function parameters to be
condition on RELEASE (or not) builds and tidy up the #ifdef handling of
functions.
2015-03-22 20:26:13 -05:00
John Bowler
36562c1032 [libpng17] Improved some overflow handling. 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.  Overflows previously
handled by png_warning in png.c have been changed to use new
macros/affirm functions so that beta builds will abort on overflow and
release builds will quietly ignore it.  This avoids release builds
producing warnings that are of no use to end users.
2015-03-22 16:05:56 -05:00
John Bowler
82fa6aed0e [libpng17] Added byte, short and other overflow checking
Added 'assert' based overflow checking for debug builds for char
and short assignments. Simply ignore the error in release builds
(a truncated value will be used without warning). Controlled by
PNG_RANGE_CHECK_SUPPORTED.
2015-03-22 15:57:53 -05:00
Glenn Randers-Pehrson
382de60042 [libpng17] Document affirm() and impossible() in the manual page. 2015-03-21 21:46:00 -05:00
Glenn Randers-Pehrson
06963c7841 [libpng16] Renamed "assert" to "affirm", not affected by NDEBUG. 2015-03-21 21:33:42 -05:00
Glenn Randers-Pehrson
9f2fb72c67 [libpng16] Made assert (and impossible) removeable by defining NDEBUG. 2015-03-21 16:04:23 -05:00
Glenn Randers-Pehrson
10ea5caef2 [libpng17] Remove pnglibconf.dfn and pnglibconf.pre with "make clean". 2015-03-21 15:57:21 -05:00
John Bowler
2460d9494d [libpng17] Implemented assert support and usage. 2015-03-20 16:39:56 -05:00
Glenn Randers-Pehrson
e8e7b6681e [libpng17] Restore missing ")" in pngerror.c 2015-03-18 14:34:47 -05:00
Glenn Randers-Pehrson
033dd3f20a [libpng17] Bump version to 1.7.0beta58 2015-03-17 08:13:42 -05:00
Glenn Randers-Pehrson
341e23c009 [libpng17] Imported from libpng-1.7.0beta57.tar 2015-03-17 08:00:27 -05:00
John Bowler
e4521a073c [libpng17] Revert change to png_default_read_data() made in libpng-1.7.0beta55. 2015-03-16 19:41:43 -05:00
Glenn Randers-Pehrson
5ff2d472e8 [libpng17] Also remove pnglibconf.c and pnglibconf.out 2015-03-15 16:55:42 -05:00
Cosmin Truta
f8eeac2b11 [libpng17] Remove pnglibconf.h, not pnglibconf.* in "make clean" (Cosmin). 2015-03-15 16:27:11 -05:00
Glenn Randers-Pehrson
e57ab4311b [libpng17] Bump version to 1.7.0beta57 2015-03-11 18:14:01 -05:00
Glenn Randers-Pehrson
9015c44736 [libpng17] Imported from libpng-1.7.0beta56.tar 2015-03-11 17:50:01 -05:00
Glenn Randers-Pehrson
1d7f037627 [libpng17] Updated CMakeLists.txt to add OSX framework, change YES/NO to ON/OFF
for consistency (Alexey Petruchik).
2015-03-11 11:37:59 -05:00
Glenn Randers-Pehrson
c4c28d7251 [libpng17] Bump version to 1.7.0beta56 2015-03-09 09:28:06 -05:00
Glenn Randers-Pehrson
0fba15c567 [libpng17] Imported from libpng-1.7.0beta55.tar 2015-03-09 09:16:18 -05:00
Glenn Randers-Pehrson
c062330846 [libpng16] Free the unknown_chunks structure even when it contains no data. 2015-03-09 09:05:39 -05:00
Glenn Randers-Pehrson
0448d90f01 [libpng17] Merged png_free_data() with libpng-1.6.17rc02. 2015-03-09 09:04:02 -05:00
Glenn Randers-Pehrson
127bede89c [libpng17] Reverted incorrect test on unknown chunk location. 2015-03-08 08:15:19 -05:00
Glenn Randers-Pehrson
3e4bd8c261 [libpng17] Spelling fixes ("then", "occured") reported by Lauri Nurmi. 2015-03-07 14:00:13 -06:00
Glenn Randers-Pehrson
cc085343ec [libpng17] Stopped a potential memory leak in png_set_unknown_chunks(). Breaks
tests/pngunknown-sAPI so it's temporarily marked SKIP.
2015-03-07 12:24:35 -06:00
Glenn Randers-Pehrson
ea0197a3e3 [libpng17] Removed some comments that the configure script did not handle
properly from scripts/pnglibconf.dfa and pnglibconf.h.prebuilt.
2015-03-05 21:20:32 -06:00
Glenn Randers-Pehrson
c2f0c9683f [libpng17] Work in progress, merging with libpng-1.6.17rc01. 2015-03-04 14:24:54 -06:00
Glenn Randers-Pehrson
79a332afd0 [libpng17] Bump version to 1.7.0beta55 2015-03-04 11:25:05 -06:00
Glenn Randers-Pehrson
352e2fe4c7 [libpng17] Imported from libpng-1.7.0beta54.tar 2015-03-04 11:19:43 -06:00
Glenn Randers-Pehrson
3077b5e049 [libpng17] Merged pngwrite.c with libpng-1.6.17beta06/pngwrite.c 2015-03-04 08:50:20 -06:00
Sergey Kosarevsky
98043c79a2 [libpng17] Avoid runtime checks when converting integer to png_byte with
Visual Studio (Sergey Kosarevsky)
2015-02-27 19:22:27 -06:00
Glenn Randers-Pehrson
2bf96d75ec [libpng17] Fixed some typos in the pngfix usage message. 2015-02-26 10:35:25 -06:00
Glenn Randers-Pehrson
678020ae18 [libpng17] Bump version to 1.7.0beta54 2015-02-25 15:42:29 -06:00
Glenn Randers-Pehrson
58e69e45ff [libpng17] Imported from libpng-1.7.0beta53.tar 2015-02-25 15:17:50 -06:00
Glenn Randers-Pehrson
7b51b8c13b [libng17] Put #ifdef/#endif around png_set_compression_level in pngwrite.c 2015-02-22 19:37:34 -06:00
Glenn Randers-Pehrson
5f7e71fa78 [libpng17] Restored compiling of png_reciprocal2 with PNG_NO_16BIT. 2015-02-22 16:42:54 -06:00
Glenn Randers-Pehrson
0cd3d25ae8 [libpng17] Bump version to 1.7.0beta53 2015-02-21 12:50:08 -06:00
Glenn Randers-Pehrson
83a2959908 [libpng17] Imported from libpng-1.7.0beta52.tar 2015-02-21 12:49:54 -06:00
Glenn Randers-Pehrson
ab2ef2ceb1 [libpng17] Minor editing of man page 2015-02-18 12:22:13 -06:00
Glenn Randers-Pehrson
f0341bae80 [libpng17] Corrected information recently added to the man page about row
pointer usage.
2015-02-17 21:29:22 -06:00
Glenn Randers-Pehrson
ed3543679a [libpng17] Added information about setjmp/simplified API interaction in the
manual page and INSTALL file. Added information about using
row_pointers with a single height*width*bpp allocated block
2015-02-17 20:15:21 -06:00
Glenn Randers-Pehrson
9c7aee825c [libpng17] Bump version to 1.7.0beta52 2015-02-17 10:52:59 -06:00
Glenn Randers-Pehrson
d8055d7123 [libpng17] Imported from libpng-1.7.0beta51.tar 2015-02-17 10:52:45 -06:00
Glenn Randers-Pehrson
92ef42d5e1 [libpng17] Display user limits in the output from pngtest. 2015-02-16 22:46:16 -06:00
Glenn Randers-Pehrson
1d3a1e36a7 [libpng17] Revised overflow detection in pngwutil.c 2015-02-16 22:43:52 -06:00
Glenn Randers-Pehrson
d368235da4 [libpng17] Bump version to 1.7.0beta51 2015-02-15 14:27:48 -06:00
Glenn Randers-Pehrson
06b0c83920 [libpng17] Imported from libpng-1.7.0beta50.tar 2015-02-15 13:20:53 -06:00
Glenn Randers-Pehrson
2130a3cd20 [libpng17] Combined several redundant lines of code in pngwutil.c 2015-02-15 13:18:50 -06:00
Glenn Randers-Pehrson
f1e4acb5b1 [libpng17] Combined sub_row, up_row, avg_row, and paeth_row buffers into a
single try_row buffer and in cases where two or more of those are
being tested, a second tst_row buffer.  This improves CPU speed
over that achieved by libpng-1.7.0beta49.
2015-02-15 12:44:16 -06:00
Glenn Randers-Pehrson
7e56f5858d [libpng17] Bump version to 1.7.0beta50 2015-02-11 07:25:31 -06:00
Glenn Randers-Pehrson
82fca45d27 [libpng17] Imported from libpng-1.7.0beta49.tar 2015-02-11 07:25:24 -06:00
Glenn Randers-Pehrson
f55ee011a2 [libpng17] Make some parameters "const" in new functions. 2015-02-11 06:18:30 -06:00
Glenn Randers-Pehrson
9c9009ec7d [libpng17] Deal with integer overflow of sum in pngwutil.c 2015-02-11 06:09:54 -06:00
Glenn Randers-Pehrson
01d91b4370 [libpng17] Consolidated redundant code in pngwutil.c 2015-02-10 22:49:31 -06:00
Glenn Randers-Pehrson
1fd10de101 [libpng17] Removed now-obsolete comments. 2015-02-10 19:55:20 -06:00
Glenn Randers-Pehrson
9149259041 [libpng17] Added PNG_WRITE_CUSTOMIZE_COMPRESSION_SUPPORTED macro, on by default. 2015-02-10 17:09:48 -06:00
Glenn Randers-Pehrson
8bc832389a [libpng17] Combined sub_row, up_row, avg_row, and paeth_row buffers into a
single try_row buffer.
2015-02-10 17:03:27 -06:00
Glenn Randers-Pehrson
ba22b208ed [libpng17] Bump version to 1.7.0beta49 2015-02-07 09:16:28 -06:00
Glenn Randers-Pehrson
0f6d60e672 [libpng17] Imported from libpng-1.7.0beta48.tar 2015-02-07 09:07:19 -06:00
Glenn Randers-Pehrson
6ce2d220b4 [lipng17] Do not build png_product2() when it is unused and work around
one more Coverity-scan dead-code warning.
2015-02-07 08:54:07 -06:00
Glenn Randers-Pehrson
d7312be749 [libpng17] Improved the comments on some #ifdef lines. 2015-02-03 19:11:50 -06:00
Glenn Randers-Pehrson
125eac0ee4 [libpng17] Bump version to 1.7.0beta48 2015-01-28 19:30:45 -06:00
Glenn Randers-Pehrson
ab95226db8 [libpng17] Imported from libpng-1.7.0beta47.tar 2015-01-28 19:25:43 -06:00
Glenn Randers-Pehrson
3043819fb2 [libpng17] Quieted some Coverity warnings 2015-01-27 15:54:37 -06:00
Glenn Randers-Pehrson
565e1bc1ae [libpng17] Added #ifndef __COVERITY__ where needed in png.c, pngrutil.c and
pngset.c to avoid warnings about dead code.
2015-01-27 07:00:59 -06:00
Glenn Randers-Pehrson
5bdcb914a4 [libpng17] Updated CHANGES and ANNOUNCE 2015-01-13 09:05:53 -06:00
Glenn Randers-Pehrson
e8213aa68f [libpng17] Add recent CVE numbers to CHANGES and ANNOUNCE. 2015-01-10 19:12:46 -06:00
Glenn Randers-Pehrson
d4ac328617 [libpng17] Quiet a GCC compiler warning about sample_max in pngset.c 2015-01-09 13:10:14 -06:00
Glenn Randers-Pehrson
56e6741b25 [libpng17] Made the check for out-of-range values in png_set_tRNS() work on
16-bit platforms.
2015-01-07 18:59:10 -06:00
Glenn Randers-Pehrson
3e04e189d8 [libpng17] Bump version to 1.7.0beta47 2015-01-02 09:23:24 -06:00
Glenn Randers-Pehrson
eb67f8bcb1 [libpng17] Imported from libpng-1.7.0beta46.tar 2015-01-02 09:18:28 -06:00
Glenn Randers-Pehrson
9c078fb7d2 [libpng17] Allow calling png_get_IHDR() with NULL arguments (Reuben Hawkins). 2015-01-02 08:23:24 -06:00
Glenn Randers-Pehrson
ae31a1ebdb [libpng17] Happy 2014, continued. 2014-12-31 19:08:04 -06:00
Glenn Randers-Pehrson
b1d49de5bc [libpng17] Happy New Year -- update copyright year. 2014-12-31 18:43:44 -06:00
John Bowler
d7e9c1c584 [libpng17] Fixed byte order in 2-byte filler, in png_do_read_filler(). 2014-12-29 16:06:32 -06:00
John Bowler
28451a8797 [libpng17] Implement previously untested libpng transforms in pngvalid.c 2014-12-29 14:18:50 -06:00
Glenn Randers-Pehrson
e6eb1d6fda [libpng17] Bump version to 1.7.0beta46 2014-12-28 13:30:20 -06:00
Glenn Randers-Pehrson
82dd5d3575 [libpng17] Imported from libpng-1.7.0beta45.tar 2014-12-28 13:30:06 -06:00
John Bowler
a5b6764cea [libpng17] Added testing of png_set_packing() to pngvalid.c 2014-12-27 19:11:41 -06:00
John Bowler
56850aba35 [libpng17] Removed user limits from pngfix. Also pass NULL pointers to
png_read_row to skip the unnecessary row de-interlace stuff.
2014-12-24 17:45:38 -06:00
Glenn Randers-Pehrson
13f025c29a [libpng17] Restored the old 1-million default limit on rows and columns 2014-12-24 08:28:30 -06:00
Glenn Randers-Pehrson
d92b0f23e6 [libpng17] Updated comments and manual with elimination of PNG_SAFE_LIMITS 2014-12-23 22:43:57 -06:00
Glenn Randers-Pehrson
eeab1cfefc [libpng17] Eliminated the PNG_SAFE_LIMITS macro and set 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.
2014-12-23 22:13:40 -06:00
Glenn Randers-Pehrson
38d22ef928 [libpng17] Bump version to 1.7.0beta45 2014-12-23 14:15:30 -06:00
Glenn Randers-Pehrson
ab1ad88ecc [libpng17] Imported from libpng-1.7.0beta44.tar 2014-12-23 14:15:23 -06:00
Glenn Randers-Pehrson
caa59e0007 [libpng17] Removed extraneous PNG_SAFE_LIMITS_SUPPORTED handling from pngconf.h 2014-12-23 14:13:35 -06:00
John Bowler
310ffb25f8 [libpng17] Corrected the width limit calculation in png_check_IHDR(). 2014-12-21 19:33:02 -06:00
John Bowler
c026b07529 [libpng17] Restored a test on width that was removed from png.c at libpng-1.6.9
(Bug report by Alex Eubanks).
Fixed an overflow in png_combine_row with very wide interlaced images.
2014-12-21 18:42:37 -06:00
Glenn Randers-Pehrson
6988b31244 [libpng17] Bump version to 1.7.0beta44 2014-12-18 09:00:26 -06:00
Glenn Randers-Pehrson
b23a10f565 [libpng17] Imported from libpng-1.7.0beta43.tar 2014-12-18 09:00:17 -06:00
John Bowler
201e9144a6 [libpng17] Quiet a "comparison always true" warning in pngstest.c (John Bowler). 2014-12-16 19:16:18 -06:00
Glenn Randers-Pehrson
ba8495bba9 [libpng17] Revised Makefile.am and scripts/*.dfn to work with MinGW/MSYS;
renamed scripts/*.dfn to scripts/*.c (Bob Friesenhahn and John Bowler).
2014-12-14 22:14:48 -06:00
Glenn Randers-Pehrson
3393042627 [libpng17] Update arm/*.c to libpng coding style. 2014-11-29 17:10:55 -06:00
Glenn Randers-Pehrson
a072dfee8e [libpng17] Added ".align 2" to arm/filter_neon.S to support old GAS assemblers
that don't do alignment correctly.
2014-11-29 16:25:15 -06:00
Glenn Randers-Pehrson
e39e182357 [libpng17] Bump version to 1.7.0beta43 2014-11-21 08:25:41 -06:00
Glenn Randers-Pehrson
ab71e135e7 [libpng17] Imported from libpng-1.7.0beta42.tar 2014-11-20 10:23:06 -06:00
Glenn Randers-Pehrson
1b577e9bc6 [libpng17] Merged clang no-warning fix from libpng-1.6.13: png_digit was defined
but never used in pngerror.c.
2014-11-17 13:46:27 -06:00
Cosmin Truta
238fdc197d [libpng17] 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:59:24 -06:00
Cosmin Truta
8cfee5fa78 [libpng17] 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:56:33 -06:00
Glenn Randers-Pehrson
44a9af81b0 [libpng17] Bump version to 1.7.0beta42 2014-11-07 07:58:35 -06:00
Glenn Randers-Pehrson
755f92fc41 [libpng17] Imported from libpng-1.7.0beta41.tar 2014-11-07 07:58:23 -06:00
Glenn Randers-Pehrson
d9d1c997d8 [libpng17] More "#endif" housecleaning, in *.h 2014-11-07 07:39:41 -06:00
Glenn Randers-Pehrson
aeb4a22975 [libpng17] Changed "#endif /* PNG_FEATURE_SUPPORTED */" to "#endif /* FEATURE */" 2014-11-06 23:09:14 -06:00
Glenn Randers-Pehrson
9c0b5ab848 [libpng17] 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 21:14:16 -06:00
Glenn Randers-Pehrson
05dcaffd38 [libpng17] Bump version to 1.7.0beta41 2014-11-05 19:07:47 -06:00
Glenn Randers-Pehrson
cca25b182f [libpng17] Imported from libpng-1.7.0beta40.tar 2014-11-05 19:07:37 -06:00
John Bowler
f87df31c8c [libpng17] 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.
  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.
  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 18:53:01 -06:00
Glenn Randers-Pehrson
41547820e8 [libpng17] Simplified and future-proofed png_user_version_check(). 2014-11-05 15:08:31 -06:00
Glenn Randers-Pehrson
e5d462d829 [libpng17] Made a one-line revision to configure.ac to support ARM on aarch64
(bug report by Marcin Juszkiewicz, fix by John Bowler).
2014-11-04 08:43:34 -06:00
Glenn Randers-Pehrson
6f46730cb7 [libpng17] Bump version to 1.7.0beta40 2014-11-01 18:58:59 -05:00
Glenn Randers-Pehrson
67b88b8ee0 [libpng17] Imported from libpng-1.7.0beta39.tar 2014-11-01 18:58:47 -05:00
Glenn Randers-Pehrson
7a4bfbdec1 [libpng17] Ported cosmetic changes from libpng-1.6.15beta02. 2014-11-01 13:57:38 -05:00
Glenn Randers-Pehrson
859254054a [libpng17] Merge pngtest.c with libpng-1.6.15beta01 2014-10-28 10:29:44 -05:00
Glenn Randers-Pehrson
515659d638 [libpng17] Changed "if (!x)" to "if (x == 0)" and "if (x)" to "if (x !== 0)" 2014-10-25 19:30:02 -05:00
Glenn Randers-Pehrson
fd409c8019 [libpng17] Revised INSTALL document. 2014-10-24 22:33:51 -05:00
Glenn Randers-Pehrson
9ee6678e1f [libpng17] Bump version to 1.7.0beta39 2014-10-17 10:02:01 -05:00
Glenn Randers-Pehrson
9b36280e31 [libpng17] Imported from libpng-1.7.0beta38.tar 2014-10-17 09:57:47 -05:00
Glenn Randers-Pehrson
eaad9f9177 [libpng17] Minor editing of README and comments in example.c and pngtest.c. 2014-10-17 09:55:43 -05:00
Glenn Randers-Pehrson
70cd1a10f2 [libpng17] Also don't mark text chunks as written in the end_ptr until written. 2014-10-05 18:04:25 -05:00
Glenn Randers-Pehrson
7974d60f54 [libpng17] Merge with libpng-1.6.14beta07
Removed "option READ_COMPRESSED_TEXT enables READ_TEXT" from pnglibconf.dfa,
  to make it possible to configure a libpng that supports iCCP but not TEXT.
Removed "option WRITE_COMPRESSED_TEXT enables WRITE_TEXT" from pnglibconf.dfa
Only mark text chunks as written after successfully writing them.
2014-10-05 16:25:17 -05:00
Glenn Randers-Pehrson
c7e743d385 [libpng17] Merge recent changes from libpng-1.6.14beta06:
Added "option READ_iCCP enables READ_COMPRESSED_TEXT" to pnglibconf.dfa
Removed unused "text_len" parameter from private function png_write_zTXt().
Conditionally compile some code in png_deflate_claim(), when
  PNG_WARNINGS_SUPPORTED and PNG_ERROR_TEXT_SUPPORTED are disabled.
Replaced repeated code in pngpread.c with PNG_PUSH_SAVE_BUFFER_IF_FULL.
Added "chunk iTXt enables TEXT" and "chunk zTXt enables TEXT"
  to pnglibconf.dfa.
Edit and fix typos in comments.
2014-10-04 12:41:26 -05:00
Glenn Randers-Pehrson
b2e89f1af6 [libpng17] Bump version to libpng-1.7.0beta38.tar 2014-09-28 13:36:54 -05:00
Glenn Randers-Pehrson
ad30a1262b [libpng17] Imported from libpng-1.7.0beta37.tar 2014-09-28 13:33:11 -05:00
Glenn Randers-Pehrson
35f88c1341 [libpng17] Merged scripts/* with libpng-1.6.14beta04. 2014-09-28 12:49:42 -05:00
Glenn Randers-Pehrson
4f8050416f [libpng17] Merge pngvalid.c and pngfix.c with libpng-1.6.14beta04 2014-09-28 10:37:26 -05:00
Glenn Randers-Pehrson
776d1768aa [libpng17] Merge pngvalid.c with libpng-1.6.14beta04. 2014-09-27 19:30:35 -05:00
Glenn Randers-Pehrson
d7078c52e2 [libpng17] Bump version to 1.7.0beta37 2014-09-27 19:00:32 -05:00
Glenn Randers-Pehrson
4a67ac3f1e [libpng17] Imported from libpng-1.7.0beta36.tar 2014-09-27 18:52:47 -05:00
Glenn Randers-Pehrson
2799bf9a4f [libpng17] Merge recent changes to the manual and pngrutil.c from libpng-1.6.14beta04. 2014-09-27 18:49:42 -05:00
Glenn Randers-Pehrson
34e49ae1bc [libpng17] Updated scripts/makefiles from libpng-1.6.13beta04. 2014-08-08 09:30:23 -05:00
Glenn Randers-Pehrson
cea01951da [libpng17] Bump version to 1.7.0beta36 2014-08-06 09:10:16 -05:00
Glenn Randers-Pehrson
1a9c06b11a [libpng17] Imported from libpng-1.7.0beta35.tar 2014-08-06 09:10:02 -05:00
Glenn Randers-Pehrson
f3b1eb68a6 [libpng17] Added some CVE numbers to the January 2013 CHANGES and ANNOUNCE files 2014-04-10 16:40:40 -05:00
Glenn Randers-Pehrson
12845bc947 [libpng17] Fixed a typo in pngrutil.c, introduced in libpng-1.5.6, that
interferes with "blocky" expansion of sub-8-bit interlaced PNG files
(Eric Huss).
2014-04-06 09:40:04 -05:00
Glenn Randers-Pehrson
3ac960f128 [libpng17] Fixed syntax of Copy command in makefile.amiga 2014-03-22 18:35:25 -05:00
Glenn Randers-Pehrson
eb2b0248e2 [libpng17] Complete the update of scripts/makefile.ne12bsd. 2014-03-22 13:47:31 -05:00
Cosmin Truta
e529698d38 [libpng17] 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:08:31 -05:00
Cosmin Truta
1a9e897289 [libpng17] Port recent changes from libpng16 branch:
Silence 'unused parameter' build warnings (Cosmin).
  $(CP) is now used alongside $(RM_F).  Also, use 'copy' instead
    of 'cp' where applicable, and applied other minor makefile changes.
  Don't warn about invalid dimensions exceeding user limits.
2014-03-22 11:09:18 -05:00
Glenn Randers-Pehrson
3a81956ffe [libpng17] Mention scripts/pnglibconf.h.prebuilt in INSTALL. 2014-03-21 12:47:04 -05:00
Glenn Randers-Pehrson
0acf4f9770 [libpng17] Bump version to 1.7.0beta35 2014-03-17 13:21:10 -05:00
Glenn Randers-Pehrson
b407af6503 [libpng17] Imported from libpng-1.7.0beta34.tar 2014-03-17 13:19:20 -05:00
Glenn Randers-Pehrson
0fb41f05df [libpng17] Moved configuration information from the manual to the INSTALL
file.
2014-03-16 21:45:07 -05:00
Glenn Randers-Pehrson
8ebdaa0700 [libpng17] Changed ZlibSrcDir from 1.2.5 to 1.2.8 in projects/vstudio. 2014-03-09 18:32:05 -05:00
Glenn Randers-Pehrson
4e61b58980 [libpng17] Use "if (value != 0)" instead of "if (value)" consistently. 2014-03-08 13:25:55 -06:00
Glenn Randers-Pehrson
88e7d62fbc [libpng17] Remove CALLOC_SUPPORTED from scripts/pnglibconf.dfa and prebuilt 2014-03-07 11:54:59 -06:00
Glenn Randers-Pehrson
43cd0a0bb5 [libpng17] Treat CRC error handling with png_set_crc_action(), instead of with
png_set_benign_errors(), which has been the case since libpng-1.6.0beta18.
2014-02-27 15:40:30 -06:00
Glenn Randers-Pehrson
1345c5bff8 [libpng17] Bump version to 1.7.0beta34 2014-02-27 09:07:25 -06:00
Glenn Randers-Pehrson
39c420834f [libpng17] Imported from libpng-1.7.0beta33.tar 2014-02-27 08:27:24 -06:00
Glenn Randers-Pehrson
f898f69f46 [libpng17] Fixed typos in the manual and in scripts/pnglibconf.dfa
(CFLAGS -> CPPFLAGS and PNG_USR_CONFIG -> PNG_USER_CONFIG).
2014-02-26 22:24:20 -06:00
Glenn Randers-Pehrson
352f43cdc6 [libpng17] Bump version to 1.7.0beta33 2014-02-26 13:24:57 -06:00
Glenn Randers-Pehrson
f99393490d [libpng17] Imported from libpng-1.7.0beta32.tar 2014-02-26 12:54:47 -06:00
Glenn Randers-Pehrson
deb920b4a7 [libpng17] 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.
2014-02-26 11:52:00 -06:00
Glenn Randers-Pehrson
148cdac18f [libpng17] Moved some documentation from png.h to libpng.3 and libpng-manual.txt
Minor editing of contrib/arm-neon/README and contrib/examples/*.c
2014-02-26 11:50:02 -06:00
Glenn Randers-Pehrson
51ecc14a8a [libpng17] Document how to use different crc_action after reading the image
data in the sequential reader.
2014-02-23 13:36:31 -06:00
Glenn Randers-Pehrson
713a20c57d [libpng17] 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-23 10:09:57 -06:00
Glenn Randers-Pehrson
4526f546ba [libpng17] Use a user warning handler in contrib/gregbook/readpng2.c instead
of default, so warnings will be put on stderr even if libpng has CONSOLE_IO
disabled.
2014-02-23 10:08:50 -06:00
Glenn Randers-Pehrson
0c5acfa19e [libpng17] Check for __has_extension before using it in pngconf.h, to
support older Clang versions (Jeremy Sequoia).
2014-02-20 07:11:17 -06:00
Glenn Randers-Pehrson
848eeacb41 [libpng17] 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 11:53:35 -06:00
John Bowler
2ced844b0e [libpng17] Deleted a now-redundant #define png_error from pngvalid.c 2014-02-16 22:51:23 -06:00
Glenn Randers-Pehrson
e2c5ed8d1d [libpng17] Removed "#define PNG_NO_WARNINGS" from contrib/pngminim/*/pngusr.h
because warnings are already turned off in the *.dfa files.
2014-02-16 15:48:58 -06:00
John Bowler
76004ce6ed [libpng17] 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 15:41:51 -06:00
Glenn Randers-Pehrson
258b986917 [libpng17] 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:36:28 -06:00
Glenn Randers-Pehrson
50a09830b8 [libpng17] Bump version to 1.7.0beta32 2014-02-05 23:32:25 -06:00
Glenn Randers-Pehrson
9a3f244085 [libpng17] Imported from libpng-1.7.0beta31.tar 2014-02-05 22:46:04 -06:00
John Bowler
fb1305faeb [libpng17] Support builds with unsupported PNG_TRANSFORM_* values. All of the
PNG_TRANSFORM_* values are always defined in png.h and, because they
are used for both read and write in some cases, it is not reliable
to #if out ones that are totally unsupported. This change adds error
detection in png_read_image() and png_write_image() to do a
png_app_error() if the app requests something that cannot be done
and it adds corresponding code to pngimage.c to handle such options
by not attempting to test them.
2014-02-05 20:13:19 -06:00
Glenn Randers-Pehrson
3d7f3bbab7 [libpng17] Deleted the other instance of "c = b;" which is the one that
triggered a scan-build warning in pngrutil.c.
2014-02-05 16:54:37 -06:00
Glenn Randers-Pehrson
2d032e966d [libpng17' Restored a line, "c = b;", that was inadvertently deleted from the
PAETH filtering code from libpng-1.7.0beta24/pngrutil.c and reenabled
the pngimage tests.
2014-02-05 15:19:13 -06:00
Glenn Randers-Pehrson
8dd3784f7c [libpng17] Disabled pngimage tests temporarily. 2014-02-05 13:22:13 -06:00
Glenn Randers-Pehrson
98b9371115 [libpng17] Fixed some typos in commentary of pngimage.c 2014-02-05 13:21:41 -06:00
John Bowler
d29413a2a9 [libpng17] Do not read invalid sBIT chunks. Previously libpng only checked sBIT
values on write, so a malicious PNG writer could therefore cause
the read code to return an invalid sBIT chunk, which might lead to
application errors or crashes.  Such chunks are now skipped (with
chunk_benign_error).
2014-02-05 12:15:42 -06:00
John Bowler
dc63b03da1 [libpng17] Completed full working pngimage test program and added two test
scripts.  Fixed combination of ~alpha with shift. On read invert alpha,
processing occurred after shift processing, which causes the final values to be
outside the range that should be produced by the shift. Reversing the
order on read makes the two transforms work together correctly and mirrors
the order used on write.
2014-02-05 11:39:59 -06:00
John Bowler
cf354c2c82 [libpng17] Make png_read_png() and png_write_png() prototypes in png.h depend
upon PNG_READ_SUPPORTED and PNG_WRITE_SUPPORTED.
Removed dependence on !PNG_READ_EXPAND_SUPPORTED for calling
png_set_packing() in png_read_png().
2014-02-05 10:55:35 -06:00
Glenn Randers-Pehrson
484dad1a19 [libpng17] Bump version to 1.7.0beta31 2014-02-02 15:27:04 -06:00
Glenn Randers-Pehrson
1695471118 [libpng17] Imported from libpng-1.7.0beta30.tar 2014-02-02 15:26:55 -06:00
Glenn Randers-Pehrson
ae14dcd404 [libpng17] Updated documentation about sCAL_s support. 2014-02-01 11:14:06 -06:00
Glenn Randers-Pehrson
302c58b8cf [libpng17] Added pngimage test program for png_read_png and png_write_png.
This is a work-in-progress; no tests are run automatically at present and
the program by virtue of exhaustively testing all the transforms is
very slow.
2014-01-31 22:00:27 -06:00
Glenn Randers-Pehrson
39fee3cee1 [libpng17] Fixed a large number of instances where PNGCBAPI was omitted from
function definitions.
2014-01-31 21:55:27 -06:00
Glenn Randers-Pehrson
b7362c6738 [libpng17] Bump version to 1.7.0beta30 2014-01-30 14:52:37 -06:00
Glenn Randers-Pehrson
f2d8561fdc [libpng17] Imported from libpng-1.7.0beta29.tar 2014-01-30 14:52:28 -06:00
Glenn Randers-Pehrson
1bd81ffa21 [libpng17] Quiet an uninitialized memory warning from VS2013 in png_get_png(). 2014-01-30 14:44:07 -06:00
Glenn Randers-Pehrson
6d2b1a7dbc [libpng17] Bump version to 1.7.0beta29 2014-01-20 13:57:46 -06:00
Glenn Randers-Pehrson
5daa97c2eb [libpng17] Imported from libpng-1.7.0beta28.tar 2014-01-20 13:57:38 -06:00
Glenn Randers-Pehrson
9e441e96b9 [libpng17] Checked in clang attribute support. 2014-01-18 19:55:44 -06:00
Glenn Randers-Pehrson
a0d314ce84 [libpng17] Correct a comment in pngconf.h 2014-01-13 21:40:47 -06:00
Glenn Randers-Pehrson
b871b25997 [libpng17] Added clang attribute support (Cosmin). 2014-01-13 21:13:16 -06:00
Glenn Randers-Pehrson
d38ebc9ded [libpng17] Updated scripts/makefile.* to use CPPFLAGS (Cosmin) 2014-01-12 12:28:20 -06:00
Glenn Randers-Pehrson
995402ca6e [libpng17] Fix typo in CHANGES and ANNOUNCE 2014-01-10 12:58:47 -06:00
Glenn Randers-Pehrson
1982968dad [libpng17] Bump version to 1.7.0beta28 2014-01-10 08:11:36 -06:00
Glenn Randers-Pehrson
32cd66d619 [libpng17] Imported from libpng-1.7.0beta27.tar 2014-01-10 08:11:26 -06:00
Glenn Randers-Pehrson
03a53fa429 [libpng17] Removed potentially misleading warning from png_check_IHDR(). 2014-01-10 06:22:41 -06:00
Glenn Randers-Pehrson
441de8f4fd [libpng17] 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:19:36 -06:00
Glenn Randers-Pehrson
4e5c80034e [libpng17] Only issue a warning about image width if an error has not already
been found in IHDR.
2014-01-08 11:44:48 -06:00
Glenn Randers-Pehrson
879d63156a [libpng17] Updated warning in png_check_IHDR() to say "may be too large"
instead of "is too large".
2014-01-07 11:44:41 -06:00
Glenn Randers-Pehrson
eb021245d0 [libpng17] Bump version to 1.7.0beta27 2014-01-01 11:19:28 -06:00
Glenn Randers-Pehrson
6607a3b905 [libpng17] Imported from libpng-1.7.0beta26.tar 2014-01-01 11:19:08 -06:00
Glenn Randers-Pehrson
28711dff2a [libpng17] Updated copyright year in recently-changed files. 2013-12-31 21:15:11 -06:00
John Bowler
4413d5dcd2 [libpng17] 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:40:13 -06:00
John Bowler
206d1eed42 [libpng17] Changed 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:57:30 -06:00
John Bowler
114fa16ab3 [libpng17] Fixed test programs for interlace options. Made pngvalid.c and
pngtest.c work correctly when READ_INTERLACING and/or WRITE_INTERLACING
are switched off.
2013-12-29 10:33:58 -06:00
Glenn Randers-Pehrson
eb2af04bd3 [libpng16] Merged pngrio.c, pngtrans.c, and pngwio.c with libpng-1.6.9 2013-12-28 13:11:47 -06:00
Glenn Randers-Pehrson
200fc68f52 [libpng17] Removed #error macro from contrib/tools/pngfix.c (Thomas Klausner). 2013-12-27 20:18:50 -06:00
John Bowler
4cfd01a288 [libpng17] Added dSIG to chunk list in png.h 2013-12-27 11:50:52 -06:00
John Bowler
e98229ceb0 [libpng17] Merged with 1.5 and 1.6 changes to create a single pngvalid.c 2013-12-27 08:04:49 -06:00
John Bowler
ad1a4c8cc3 [libpng17] Added libpng 1.5 checks to pngvalid.c 2013-12-27 07:53:50 -06:00
Glenn Randers-Pehrson
8df7c46e5b [libpng17] Removed configure-generated "compile" file. 2013-12-26 14:44:48 -06:00
Glenn Randers-Pehrson
99078ec8bd [libpng17] Bump version to 1.7.0beta26 2013-12-26 11:53:16 -06:00
Glenn Randers-Pehrson
a2c5f56e77 [libpng17] Imported from libpng-1.7.0beta25.tar 2013-12-26 11:53:02 -06:00
Glenn Randers-Pehrson
9e168ea2c9 [libpng17] Merged files with version 1.6.8 that have not changed since then. 2013-12-19 20:33:08 -06:00
Glenn Randers-Pehrson
06be739941 [libpng17] Bump version to 1.7.0beta25 2013-12-15 11:22:59 -06:00
Glenn Randers-Pehrson
448092b8eb [libpng17] Imported from libpng-1.7.0beta24.tar 2013-12-15 11:22:49 -06:00
Glenn Randers-Pehrson
1faa6ff32c [libpng17] Handle zero-length PLTE chunk or NULL palette with png_error()
instead of png_chunk_report(), which by default issues a warning
rather than an error, leading to later reading from a NULL pointer
(png_ptr->palette) in png_do_expand_palette().
2013-12-15 08:47:52 -06:00
John Bowler
3adf438f39 [libpng17] 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-13 23:55:41 -06:00
John Bowler
d45a632529 [libpng17] 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-13 23:50:30 -06:00
John Bowler
5a1b8d106d [libpng17] Tidied up pngfix inits and fixed pngtest no-write builds. 2013-12-01 15:50:03 -06:00
Glenn Randers-Pehrson
05f896004f [libpng17] 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 16:14:03 -06:00
Glenn Randers-Pehrson
a4f1de9109 [libpng17] Avoid a scan-build warning in pngtest.c 2013-11-25 13:13:32 -06:00
Glenn Randers-Pehrson
7ebb353944 [libpng17] Removed or marked PNG_UNUSED some harmless "dead assignments"
reported by clang scan-build.
2013-11-25 11:08:56 -06:00
Glenn Randers-Pehrson
b1f0c7d0e5 [libpng17] Revised manual about handling of zlib CMF 2013-11-24 13:31:26 -06:00
Glenn Randers-Pehrson
55df049962 [libpng17] Updated CHANGES and ANNOUNCE 2013-11-23 19:26:57 -06:00
Glenn Randers-Pehrson
219ba1370e [libpng17] Bump version to 1.7.0beta24 2013-11-23 19:02:56 -06:00
Glenn Randers-Pehrson
4dc4471bb5 [libpng17] Imported from libpng-1.7.0beta23.tar 2013-11-23 19:01:01 -06:00
Glenn Randers-Pehrson
a199a15b28 [libpng17] Added another "assert()" to pngfix.c 2013-11-23 12:58:32 -06:00
Glenn Randers-Pehrson
e9446f2f95 [libpng17] Added an "assert()" to pngfix.c to quiet a clang scanner warning. 2013-11-23 12:14:02 -06:00
John Bowler
f70f2fcf48 [libpng17] Finished merging with libpng16 (pngrutil.c and pnglibconf.dfa) 2013-11-23 08:20:39 -06:00
John Bowler
158c947ce2 [libpng17] Revert recent change to pngvalid.c. 2013-11-22 18:34:37 -06:00
John Bowler
7e2707e2af [libpng17] Ported recent changes from libpng16 to libpng17
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.
Enabled WRITE_INVERT and WRITE_PACK in contrib/pngminim/encoder.
2013-11-22 18:01:30 -06:00
Glenn Randers-Pehrson
81824079b5 [libpng17] Added "-Wall" to CFLAGS in contrib/pngminim/*/makefile 2013-11-18 17:03:24 -06:00
Glenn Randers-Pehrson
e8e1add0a8 [libpng17] Moved prototype for png_handle_unknown() in pngpriv.h outside of
the #ifdef PNG_SET_UNKNOWN_CHUNKS_SUPPORTED/#endif block.
2013-11-18 15:35:55 -06:00
Glenn Randers-Pehrson
a549223f91 [libpng17] Added #ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED/#endif in pngpread.c 2013-11-17 11:09:57 -06:00
Glenn Randers-Pehrson
ebe7945b96 [libpng17] Bump version to 1.7.0beta23 2013-11-07 08:33:41 -06:00
Glenn Randers-Pehrson
e3e35aa980 [libpng17] Imported from libpng-1.7.0beta22.tar 2013-11-07 08:33:31 -06:00
John Bowler
9f2fbcf5d8 [libpng17] 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:50:20 -06:00
Glenn Randers-Pehrson
264ba68afe [libpng17] Restored a line to the libpng-1.7.0beta21 entry in ANNOUNCE 2013-11-03 20:56:03 -06:00
Glenn Randers-Pehrson
3ef99c9316 [libpng17] Bump version to 1.7.0beta22 2013-11-02 15:39:27 -05:00
John Bowler
4b29f97f9b [libpng17] Port recent libpng-1.6.7beta03, beta04 changes to 1.7.0beta21
(mainly ARMv8 support)
2013-11-02 15:29:45 -05:00
Glenn Randers-Pehrson
fe6e6cf130 [libpng17] Fixed some typos in autogen.s that don't affect its behavior 2013-10-13 17:12:44 -05:00
Glenn Randers-Pehrson
547df4b9ca [libpng17] Bump version to 1.7.0beta21 2013-10-13 14:10:23 -05:00
Glenn Randers-Pehrson
a0d4a0b971 [libpng17] Imported from libpng-1.7.0beta20.tar 2013-10-13 14:02:50 -05:00
John Bowler
72c2577302 [libpng17] 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 09:02:09 -05:00
John Bowler
091fab713c [libpng17] 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-06 08:51:42 -05:00
John Bowler
32aeb2cd4e [libpng17] 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-06 08:47:43 -05:00
John Bowler
c1bcdc3a86 [libpng17] 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-06 08:18:31 -05:00
Glenn Randers-Pehrson
553b8f85d3 [libpng17] Bump version to 1.7.0beta20 2013-10-02 13:47:20 -05:00
Glenn Randers-Pehrson
30666a6097 [libpng17] Imported from libpng-1.7.0beta19.tar 2013-09-30 17:17:59 -05:00
John Bowler
0bfa63cd0d [libpng17] Checked in missing update to pnglibconf.dfa 2013-09-30 15:58:53 -05:00
John Bowler
b37a7c6674 [libpng17] Updated pngunknown.c 2013-09-30 13:11:44 -05:00
John Bowler
7657ac14f2 [libpng17] Catch up with recent libpng16 changes; unknown handling and spelling
corrections
2013-09-30 11:18:13 -05:00
John Bowler
d9f60caf72 [libpng17] Fixed default behavior of ARM_NEON_API. If the ARM NEON API option is
compiled without the CHECK option it defaulted to on, not off.
2013-09-30 08:07:18 -05:00
Glenn Randers-Pehrson
88c20ada06 [libpng17] Reverted the change to unknown handling #defines; the change
breaks 'NOREAD' builds.
2013-09-20 14:30:16 -05:00
Glenn Randers-Pehrson
f3bfc4a142 [libpng17] Bump version to 1.7.0beta19 2013-09-16 11:47:36 -05:00
Glenn Randers-Pehrson
3fdef04d55 [libpng17] Imported from libpng-1.7.0beta18.tar 2013-09-16 11:47:26 -05:00
Glenn Randers-Pehrson
eae431e514 [libpng17] Bump version to 1.7.0beta18 2013-08-21 19:13:27 -05:00
Glenn Randers-Pehrson
003590c361 [libpng17] Imported from libpng-1.7.0beta17.tar 2013-08-21 19:13:18 -05:00
Glenn Randers-Pehrson
8e23262b2b [libpng17] Update comment in png_init_filter_functions() 2013-08-21 17:53:15 -05:00
Glenn Randers-Pehrson
157e0649e0 [libpng17] Delay calling png_init_filter_functions() until a row with nonzero
filter is found.
2013-08-20 21:28:19 -05:00
Glenn Randers-Pehrson
83f1287c02 [libpng17] Mention png_set_option() in the manual. 2013-08-17 15:56:01 -05:00
Glenn Randers-Pehrson
a1124a574a [libpng17] Use minus signs, not hyphens, in "--i" in libpng.3 2013-08-13 18:59:21 -05:00
Glenn Randers-Pehrson
6f27254a7e [libpng17] Change some hyphens to minus signs and fix other typos in libpng.3 2013-08-06 17:25:37 -05:00
Glenn Randers-Pehrson
79fc8fa0d9 [libpng17] Exit loop over tRNS array once a transparent pixel is found
(performance report by PoChun Chang).
2013-08-04 14:05:39 -05:00
Glenn Randers-Pehrson
394bc6cdee [libpng17] Port recent /*SAFE*/ comments and manual changes from libpng16 2013-07-15 10:28:48 -05:00
Glenn Randers-Pehrson
bb06552075 [libpng17] Bump version to 1.7.0beta17 2013-07-04 22:42:35 -05:00
Glenn Randers-Pehrson
a14071d814 [libpng17] Imported from libpng-1.7.0beta16.tar 2013-07-04 22:31:06 -05:00
John Bowler
23f3e46518 [libpng17] Ported pngfix.c patches from libpng16. 2013-07-03 07:50:24 -05:00
John Bowler
f97b2a6cde [libpng17] Ported ARM no-read patch from libpng16. 2013-07-03 07:46:02 -05:00
John Bowler
23f4320775 [libpng17] Added perfect hash code generation for lists of PNG chunks. This is
a work in progress; checked in for use in pngfix.c
2013-07-03 07:41:04 -05:00
Glenn Randers-Pehrson
fb411867b0 [libpng17] Updated documentation to show default behavior of benign errors
correctly.
2013-07-02 09:54:05 -05:00
Glenn Randers-Pehrson
5aa2ca454d [libpng17] Revised pngfix.c to use PNG_U32() instead of PNG_CHUNK() 2013-07-02 09:52:09 -05:00
Glenn Randers-Pehrson
7905286ffa [libpng17] Renamed contrib/tools/png-fix-too-far-back.c to pngfix.c and revised
it to check all compressed chunks known to libpng.
2013-07-01 15:11:36 -05:00
Glenn Randers-Pehrson
2edcb6ad0f [libpng17] 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:43:16 -05:00
Glenn Randers-Pehrson
0f1599e6e5 [libpng17] Fix spelling of "doclifter" in CHANGES and ANNOUNCE 2013-06-18 15:10:32 -05:00
Glenn Randers-Pehrson
cbf22f30b4 [libpng17] Bump version to 1.7.0beta16 2013-06-18 13:22:10 -05:00
Glenn Randers-Pehrson
9bf3c70730 [libpng17] Imported from libpng-1.7.0beta15.tar 2013-06-18 13:14:34 -05:00
Glenn Randers-Pehrson
1bc5747713 [libpng17] Bump version to 1.7.0beta15 2013-06-08 21:00:45 -05:00
Glenn Randers-Pehrson
4a7796faca [libpng17] Imported from libpng-1.7.0beta14.tar 2013-06-08 21:00:36 -05:00
John Bowler
34081a0e2f [libpng17] Port recent changes to ARM support from libpng-1.6.3beta07. 2013-06-08 14:20:46 -05:00
John Bowler
b88c94208a [libpng17] 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 14:57:14 -05:00
Glenn Randers-Pehrson
30662f5e92 [libpng17] Enclose the prototypes for the simplified write API in 2013-06-05 23:25:14 -05:00
Glenn Randers-Pehrson
46ad4c5bd4 [libpng17] Deleted contrib/tools/fixitxt.c, which has been renamed. 2013-06-05 17:03:38 -05:00
Glenn Randers-Pehrson
5c32606ec0 [libpng17] Update README to delete CompuServ and add simplesystems.org 2013-06-05 17:01:14 -05:00
John Bowler
a08ac031fc [libpng17] Fixed ICC compiler warning in tools/png-fix-itxt.c 2013-06-05 16:48:18 -05:00
John Bowler
c233ec8743 [libpng17] Deleted set(CMAKE_BUILD_TYPE) block from CMakeLists.txt 2013-06-05 11:45:55 -05:00
Glenn Randers-Pehrson
d594be641a [libpng17] Added set(CMAKE_CONFIGURATION_TYPES ...) to CMakeLists.txt
(Andrew Hundt)
2013-06-05 11:05:34 -05:00
Glenn Randers-Pehrson
4c9168875b [libpng17] Removed a redundant test in png_set_IHDR(). 2013-06-04 15:09:06 -05:00
Glenn Randers-Pehrson
3c051ee282 [libpng17] Update README with current info about arm, contrib, and projects
directories
2013-06-03 21:02:46 -05:00
Glenn Randers-Pehrson
e1ded944f0 [libpng17] Bump version to 1.7.0beta14 2013-05-12 19:25:30 -05:00
Glenn Randers-Pehrson
c09dddc0cd [libpng17] Imported from libpng-1.7.0beta13.tar 2013-05-12 19:25:16 -05:00
Glenn Randers-Pehrson
bd56d76417 [libpng17] Port recent zlib windowBits handling from libpng-1.6.3beta06 2013-05-10 17:43:59 -05:00
Glenn Randers-Pehrson
0cc23ac171 [libpng17] 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-09 23:30:46 -05:00
Glenn Randers-Pehrson
cb10e19725 [libpng17] Added a needed #ifdef/#endif pair. 2013-05-09 23:18:10 -05:00
Glenn Randers-Pehrson
9dba7219a0 [libpng17] Revised contrib/pngminim/*/makefile to generate pnglibconf.h with the
right zlib header files.
2013-05-09 22:59:08 -05:00
Glenn Randers-Pehrson
17c6af8c40 [libpng17] Check for EOF in contrib/pngminus/pnm2png.c (Paul Stewart).
Ignore "#" delimited comments in input file to pnm2png.c.
2013-05-07 14:38:19 -05:00
Glenn Randers-Pehrson
6a02eb6d2c [libpng17] Bump version to 1.7.0beta13 2013-04-29 21:32:33 -05:00
Glenn Randers-Pehrson
40d41fe6f8 [libpng17] Imported from libpng-1.7.0beta12.tar 2013-04-29 21:32:12 -05:00
Glenn Randers-Pehrson
7073d26e51 [libpng17] Avoid dereferencing NULL pointer possibly returned from
png_create_write_struct() (Andrew Church).
2013-04-29 08:58:15 -05:00
Glenn Randers-Pehrson
cf76fe8654 [libpng17] Expanded manual paragraph about writing private chunks. 2013-04-28 21:04:12 -05:00
Glenn Randers-Pehrson
b780b64fbf [libpng17] Bump version to 1.7.0beta12 2013-04-26 08:46:11 -05:00
Glenn Randers-Pehrson
b1876ab6e2 [libpng17] Imported from libpng-1.7.0beta11.tar 2013-04-26 08:46:00 -05:00
John Bowler
28a95d125f [libpng17] Test for 'arm*' not just 'arm' in the host_cpu configure variable. 2013-04-25 22:51:21 -05:00
Glenn Randers-Pehrson
993f68c006 [libpng17] Bump version to 1.7.0beta11 2013-04-24 08:34:00 -05:00
Glenn Randers-Pehrson
8d23524359 [libpng17] Imported from libpng-1.7.0beta10.tar 2013-04-24 08:33:48 -05:00
John Bowler
e0f4aaa668 [libpng17] Attempt to fix the arm-neon configuration mess. 2013-04-24 00:07:59 -05:00
Glenn Randers-Pehrson
3de174cd2f [libpng17] Imported from libpng-1.7.0beta10.tar 2013-04-23 23:52:30 -05:00
Glenn Randers-Pehrson
eaf2f1dcbe [libpng17] Imported from libpng-1.7.0beta09.tar 2013-04-23 20:43:09 -05:00
John Bowler
ea0b4c602e [libpng17] Port recent changes from libpng-1.6.2. 2013-04-23 20:40:42 -05:00
John Bowler
371c3d4dfd [libpng17] Install missing patch to contrib/libtests/pngunknown.c 2013-04-19 21:56:00 -05:00
John Bowler
0bcf5fb451 [libpng17] Exposed PNG chunk types in png.h, modified png_uint_32 macros/code
to make as few assumptions as possible
2013-04-19 07:06:02 -05:00
Glenn Randers-Pehrson
57d6907d89 [libpng17] Bump version to 1.7.0beta09 2013-04-18 07:40:10 -05:00
Glenn Randers-Pehrson
6cf97e37af [libpng17] Bump version to 1.7.0beta08 2013-04-18 07:39:57 -05:00
Glenn Randers-Pehrson
8ef61c4693 [libpng17] 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:09:35 -05:00
Glenn Randers-Pehrson
25a116f97d [libpng17] Imported from libpng-1.7.0beta08.tar 2013-04-13 21:27:16 -05:00
Glenn Randers-Pehrson
d6d41c847a [libpng17] Imported from libpng-1.7.0beta07.tar 2013-04-13 20:54:54 -05:00
Glenn Randers-Pehrson
9e0297546f [libpng17] Removed extra line left over from recent patch to pngwutil.c 2013-04-13 20:07:29 -05:00
John Bowler
d529363d13 [libpng17] Revised last patch to work on 64-bit platforms. 2013-04-13 16:42:37 -05:00
Glenn Randers-Pehrson
55e93d7090 [libpng17] Fixed length written to uncompressed iTXt chunks (Samuli Suominen). 2013-04-13 16:23:48 -05:00
John Bowler
23674b75be [libpng17] Added "{ }" that were omitted from previous patch to pngtrans.c 2013-04-13 12:28:30 -05:00
Glenn Randers-Pehrson
0ddf350360 [libpng17] Corrected a misplaced closing bracket in contrib/libtests/pngvalid.c
(Flavio Medeiros).
2013-04-13 11:42:52 -05:00
John Bowler
066f9862f0 [libpng17] 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:10:38 -05:00
Glenn Randers-Pehrson
ae1a5c811c [libpng17] Updated the URL of the GIT repository in the manual. 2013-04-11 19:00:10 -05:00
John Bowler
5a1ce92c0c [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:37:52 -05:00
Glenn Randers-Pehrson
7a498039c5 [libpng17]Updated documentation of 1.5.x to 1.6.x changes in iCCP chunk
handling.
2013-03-31 23:03:32 -05:00
Glenn Randers-Pehrson
40a93652aa [libpng17] Bump version to 1.7.0beta07 2013-03-13 09:52:06 -05:00
Glenn Randers-Pehrson
a1362f38de [libpng17] Imported from libpng-1.7.0beta06.tar 2013-03-13 09:51:58 -05:00
John Bowler
30bc0333fe [libpng17] Eliminated two warnings from the Intel C compiler. 2013-03-13 09:50:48 -05:00
Claudio Bley
55794013d4 [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 expect the full path to a file as the
    first argument. When symlinking the filename component of that path is
    determined and used as the link target.
  Use copy_if_different in the CREATE_SYMLINK macro.
2013-03-07 11:23:12 -06:00
John Bowler
2e92b4dfa0 [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:23:40 -06:00
Glenn Randers-Pehrson
f46106fa04 [libpng17] Bump version to 1.7.0beta06 2013-03-04 18:23:04 -06:00
Glenn Randers-Pehrson
0dcd32f39c [libpng17] Imported from libpng-1.7.0beta05.tar 2013-03-04 18:22:54 -06:00
John Bowler
808ea281a4 [libpng17] 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-03 21:29:36 -06:00
John Bowler
ec89aefb44 [libpng17] Changed user chunk callback API to respect global and per chunk
defaults.  Previously a return of 0 from a user chunk callback would result in
the chunk being saved (if this was safe, even if the chunk was unsafe-to-copy);
this change respects the defaults set by the application, so unknown chunks
can be discarded by default and known-safe ones preserved.
2013-03-02 21:39:44 -06:00
Glenn Randers-Pehrson
6152dbd424 [libpng17] Fixed bug introduced in libpng-1.6.0beta28 that causes libpng to
handle chunks even when they have been tagged PNG_HANDLE_CHUNK_NEVER.
Also fixed two typos (SUPPOPRTED should be SUPPORTED) in pngrutil.c
2013-03-01 20:08:33 -06:00
Glenn Randers-Pehrson
fe18c0d9ea [libpng17] Avoid a possible memory leak in contrib/gregbook/readpng.c 2013-03-01 13:28:20 -06:00
Glenn Randers-Pehrson
1b0358302d [libpng17] Bump version to 1.7.0beta05 2013-02-27 14:53:47 -06:00
Glenn Randers-Pehrson
d20f9d5030 [libpng17] Imported from libpng-1.7.0beta04.tar 2013-02-27 14:40:40 -06:00
John Bowler
fc447311aa [libpng17] Revised scripts/dfn.awk to work with the buggy MSYS awk that
has trouble with CRLF line endings.
2013-02-27 13:30:52 -06:00
Glenn Randers-Pehrson
8e30e43587 [libpng17] Add info about order of png_set_* calls to the manual. 2013-02-26 08:34:45 -06:00
Glenn Randers-Pehrson
0403ccf1de [libpng16] Revised INSTALL to recommend using CPPFLAGS instead of INCLUDES.
Revised scripts/makefile.freebsd to respect ZLIBDIR and ZLIBINC.
2013-02-22 20:32:03 -06:00
Glenn Randers-Pehrson
1a321cc088 [libpng17] Bump version to 1.7.0beta04 2013-02-22 17:29:54 -06:00
Glenn Randers-Pehrson
c9f99f487b [libpng17] Imported from libpng-1.7.0beta03.tar 2013-02-22 17:29:03 -06:00
Glenn Randers-Pehrson
8360e60abc [libpng17] Update scripts/pnglibconf.h.prebuilt 2013-02-19 10:07:56 -06:00
John Bowler
2799f74489 [libpng17] Fixed ALIGNED_MEMORY support and
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.)
2013-02-19 09:52:30 -06:00
John Bowler
7363babe4f [libpng17] Reenabled code to allow zero length PLTE chunks for MNG. 2013-02-18 21:36:25 -06:00
Glenn Randers-Pehrson
e3a526f789 [libpng17] Eliminated references to "png_sizeof()" in the documentation. 2013-02-18 15:25:08 -06:00
Glenn Randers-Pehrson
8f0935b8dc [libpng17] Bump version to 1.7.0beta03 2013-02-18 13:02:33 -06:00
Glenn Randers-Pehrson
ae6503fe0e [libpng17] Imported from libpng-1.7.0beta02.tar 2013-02-18 13:02:25 -06:00
Glenn Randers-Pehrson
851a6265a8 [libpng17] Use parentheses consistently with #if defined()
and wrapped some long lines.
2013-02-17 15:25:29 -06:00
Glenn Randers-Pehrson
ffa24d4108 [libpng17] Fixed double-underscore typo in an #ifdef in png.c 2013-02-16 16:38:24 -06:00
John Bowler
206f4d2678 [libpng17] 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:53:19 -06:00
John Bowler
bb040784c2 [libpng17] Fixed a race condition in the creation of the build 'scripts'
directory while building with a parallel make.
2013-02-16 07:52:15 -06:00
Glenn Randers-Pehrson
70e1af50ed [libpng17] Bump version to 1.7.0beta02 2013-02-15 11:00:16 -06:00
Glenn Randers-Pehrson
eb4a645eda [libpng17] Imported from libpng-1.7.0beta01.tar 2013-02-15 11:00:07 -06:00
John Bowler
9f7f03a3c4 [libpng17] Accept "," as separator in options.awk 2013-02-10 18:04:16 -06:00
John Bowler
395ddbd318 [libpng17] Fix typos of PNG_GET_PALLETE_MAX_SUPPORTED
in png.h and pnglibconf.dfa
2013-02-10 17:24:46 -06:00
Glenn Randers-Pehrson
9f0d36c85f [libpng17] Fix typo, indentation of #ifdef PNG_GET_PALETTE_MAX_SUPPORTED
in png.h and pnglibconf.dfa
2013-02-10 16:57:38 -06:00
Glenn Randers-Pehrson
e9760e5e95 [libpng17] Enclosed the new png_get_palette_max API
in #ifdef PNG_GET_PALETTE_MAX_SUPPORTED
block, and revised pnglibconf.h and pnglibconf.h.prebuilt accordingly.
2013-02-10 15:59:15 -06:00
John Bowler
b96b2b7e90 [libpng17] 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:53:57 -06:00
John Bowler
9bb705e0a8 [libpng17] Fixed make distcheck to skip over the test result files. They were
being included because the whole of the 'tests' directory is included,
fixed to just include the actual test files and tests/pngstest.  Also
reverted the previous erroneous change to remove the ${srcdir} from the
front of contrib, scripts, projects and added an explanation of what is
going on to Makefile.am
2013-02-08 11:16:06 -06:00
Glenn Randers-Pehrson
e860f77393 [libpng17] Updated manual page about png_get_palette_max() API. 2013-02-08 09:24:35 -06:00
Glenn Randers-Pehrson
b5a7565908 [libpng17] Removed some obsolete test scripts. 2013-02-08 08:00:11 -06:00
John Bowler
e88e221d91 [libpng17] Make tests/pngstest* work with the original Bourne shell 2013-02-07 21:59:36 -06:00
Glenn Randers-Pehrson
b10867cdc2 [libpng17] Enable parallel tests and rearrange TESTS order to take advantage of
the massive speed improvements use a make capable of parallel builds
on a multi-CPU machine and pass the right arguments to make (-j10000
for GNU make) to get the build to run in parallel.
2013-02-07 08:26:34 -06:00
Glenn Randers-Pehrson
bf7084b80d [libpng17] Bump version to 1.7.0alpha11 2013-02-06 22:23:37 -06:00
Glenn Randers-Pehrson
6afcee826f [libpng17] Imported from libpng-1.7.0alpha10.tar 2013-02-06 19:51:21 -06:00
John Bowler
f15a5006c8 [libpng17] 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-06 17:52:30 -06:00
John Bowler
cdbd5174bd [libpng17] Minor fixes to assembler changes, verified with a dummy .S file 2013-02-06 17:40:52 -06:00
John Bowler
7a9b6203ef [libpng16] Removed new test-driver from autogen.sh 2013-02-06 17:16:49 -06:00
John Bowler
803493e19c [libpng17] Ported libpng 1.5 options.awk/dfn file handling to 1.7, fixed one
bug.
2013-02-05 10:16:42 -06:00
Mans Rullgard
4245e6b1b2 [libpng17] Fixed ARM support (Mans Rullgard).
Also removed stray out-of-order #endif and #ifdef
2013-02-05 09:55:36 -06:00
John Bowler
81892f6b90 [libpng17] Fix typos in png_get_palette_max name and prototype 2013-02-05 08:10:01 -06:00
John Bowler
862993827d [libpng17] Changed png_size_t to size_t throughout headers, make sRGB check
numbers consistent.
2013-02-04 20:04:10 -06:00
Glenn Randers-Pehrson
d304125332 [libpng17] Added png_get_palette_max() function. 2013-02-04 19:55:53 -06:00
John Bowler
9124f3e29a [libpng17] Make 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.
2013-02-04 18:00:34 -06:00
Glenn Randers-Pehrson
2969375aa6 [libpng17] Restored a "return" statement accidentally deleted from pngset.c 2013-01-22 07:03:51 -06:00
Glenn Randers-Pehrson
5e8ba1cbbf [libpng17] Set counter to prevent additional attempts to cache a chunk
after running out of memory or reaching a potential overflow condition.
2013-01-21 16:37:54 -06:00
Glenn Randers-Pehrson
8aee43d10a [libpng17] Bump version to 1.7.0alpha10 2013-01-21 09:21:36 -06:00
Glenn Randers-Pehrson
e355657bbe [libpng17] Imported from libpng-1.7.0alpha09.tar 2013-01-21 09:21:21 -06:00
John Bowler
fb6ba9acf4 [libpng17] Pulled changes to multi-chunk handling from libpng-1.6.0beta40. 2013-01-21 09:11:17 -06:00
Glenn Randers-Pehrson
815173a0b5 [libpng17] Bump version to 1.7.0alpha09 2013-01-17 13:50:32 -06:00
Glenn Randers-Pehrson
7f489a77bb [libpng17] Imported from libpng-1.7.0alpha08.tar 2013-01-17 13:50:23 -06:00
John Bowler
8ec8e8fcd5 [libpng17] Corrected previous attempt at overflow detection in
png_set_unknown_chunks().
2013-01-17 13:42:42 -06:00
Glenn Randers-Pehrson
a4e606dd5f [libpng17] Bump version to 1.7.0alpha08 2013-01-10 12:05:08 -06:00
Glenn Randers-Pehrson
646de7962b [libpng17] Imported from libpng-1.7.0alpha07.tar 2013-01-10 12:04:54 -06:00
John Bowler
4accd423c2 [libpng17]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 11:01:00 -06:00
Glenn Randers-Pehrson
f62caaf4dc [libpng17] Fixed typo in copyright year and version in pngmem.c 2013-01-01 10:55:18 -06:00
Glenn Randers-Pehrson
b789bb84bb [libpng17] Bump version to 1.7.0alpha07 2013-01-01 09:02:35 -06:00
Glenn Randers-Pehrson
ce60ad642b [libpng17] Imported from libpng-1.7.0alpha06.tar 2013-01-01 09:02:25 -06:00
Glenn Randers-Pehrson
ab097b1168 [libpng17] Updated copyright year to 2013 in changed files. 2013-01-01 08:54:06 -06:00
John Bowler
3a737d86c7 [libpng17] Fixed 'make distcheck' on SUN OS - libpng.so was not being removed 2012-12-27 09:46:33 -06:00
Glenn Randers-Pehrson
a1337e57a8 [libpng17] Bump version to 1.7.0alpha06 2012-12-23 21:00:36 -06:00
Glenn Randers-Pehrson
247b3fcf49 [libpng17] Imported from libpng-1.7.0alpha05.tar 2012-12-23 21:00:22 -06:00
Glenn Randers-Pehrson
f01273b25c [libpng17] Bump version to 1.7.0alpha05 2012-12-22 18:23:22 -06:00
Glenn Randers-Pehrson
8cb1a2ac6d [libpng17] Imported from libpng-1.7.0alpha04.tar 2012-12-22 18:13:34 -06:00
Glenn Randers-Pehrson
e6e5ac8cb7 [libpng17] Added missing dependency on pnglibconf.h in scripts/makefile.linux 2012-12-22 17:53:18 -06:00
Glenn Randers-Pehrson
a4798fb83e [libpng17] Reformatted latest CHANGES/ANNOUNCE entry to 80 character lines. 2012-12-22 17:13:02 -06:00
John Bowler
46369f35c5 [libpng17] 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:58:13 -06:00
John Bowler
e699993d70 [libpng17] Made default Zlib compression settings be configurable. This adds #defines to
pnglibconf.h to control the defaults.
2012-12-20 22:21:02 -06:00
Glenn Randers-Pehrson
5a0afcfa63 [libpng17] Added scripts/makefile.msys contributed by Christipher M. Wheeler 2012-12-19 23:06:12 -06:00
Glenn Randers-Pehrson
3fc9cbf126 [libpng17] Bump version to 1.7.0alpha04 2012-12-19 16:06:17 -06:00
Glenn Randers-Pehrson
36b628b19e [libpng17] Imported from libpng-1.7.0alpha03.tar 2012-12-19 15:53:18 -06:00
Glenn Randers-Pehrson
2c31365fd4 [libpng16] Announce that git repository location at SourceForge has changed. 2012-12-18 21:45:58 -06:00
Glenn Randers-Pehrson
e1e3c1a2a2 [libpng17] Fixed typo in contrib/pngminim/encoder/README 2012-12-18 14:58:44 -06:00
John Bowler
b940e5dc5d [libpng17] Disassembled the version number in scripts/options.awk (necessary
for building on SunOs)
2012-12-17 23:36:08 -06:00
John Bowler
fbbbc620b8 [libpng16] Fixed previous support for Z_PREFIX in configure builds, corrected
sCAL APIs; some of these use floating point arithmetic so they need to be
disabled if floating point arithmetic is switched off.  This is a quiet API
change - previously it appeared that the APIs were supported if fixed point
arithmetic was used internally, however they required certain APIs (floor,
modf, frexp, atof) that are part of C floating point support. Changed
png_fixed and the gamma code specific version of the same to avoid floor(),
which may be a library function (not an intrinsic). Removed unused #if 0
code.
2012-12-17 21:07:30 -06:00
Glenn Randers-Pehrson
9b99600c4d [libpng17] Fixed several more whitespace errors in libpng.3 2012-12-17 20:00:44 -06:00
Glenn Randers-Pehrson
3129d7426e [libpng16] Cleaned up whitespace in the synopsis portion of the manpage. 2012-12-17 19:21:14 -06:00
Glenn Randers-Pehrson
325ceea971 [libpng17] Bump version to 1.7.0alpha03 2012-12-17 12:25:13 -06:00
Glenn Randers-Pehrson
ac39fc3024 [libpng17] Bump version to 1.7.0alpha03 2012-12-17 12:16:32 -06:00
Glenn Randers-Pehrson
99343407e6 [libpng17] Add #ifdef PNG_WRITE_FILTERED_ROW around a use of prev_row. 2012-12-17 12:12:49 -06:00
Glenn Randers-Pehrson
3e23f45ba9 [libpng17] Document new PNG_ABORT behavior in libpng-1.7.x 2012-12-17 11:53:34 -06:00
John Bowler
72389dec42 [libpng17] Cleaned up and enhanced the configure option; libpng now correctly
links and tests against zlib with a prefix; tests have been clarified; and
irrelevant or obsolete things (as defined by the autotools man page) have
been removed.
2012-12-17 09:20:02 -06:00
Glenn Randers-Pehrson
1f0853f47e [libpng17] Bump version to 1.7.0alpha03 2012-12-16 19:43:18 -06:00
Glenn Randers-Pehrson
32a60a4885 [libpng17] Imported from libpng-1.7.0alpha02.tar 2012-12-16 19:43:10 -06:00
Glenn Randers-Pehrson
5e07dc6970 [libpng17] Updated documentation about functions deprecated in 1.6.0 2012-12-16 16:47:07 -06:00
John Bowler
4b90a8d416 [libpng17] Build fixes (trailing ;, missing/misplaced PNG_REMOVED) in png.h 2012-12-16 15:56:18 -06:00
John Bowler
d59c19b64c [libpng17] Removed more functions that were deprecated in libpng-1.6.0:
png_malloc_default png_free_default.
  Updated some left over "1.6.0beta32" in code sources.
  Fixed a "png_structp" prototype (should be png_structrp) in arm_init.c
  Updated the version-number hack in pngvalid.c
2012-12-15 21:41:31 -06:00
Glenn Randers-Pehrson
bbabd977d1 [libpng17] Fixed some typos in comments; updated manual. 2012-12-15 17:12:48 -06:00
John Bowler
0cf9c7d63d [libpng17] Removed some duplicated code from png.c and contrib/tools/scale.c
and changed some png_warning() calls to png_app_error() calls in pngwutil.c
2012-12-15 16:04:28 -06:00
Glenn Randers-Pehrson
b4e241559e [libpng17] Removed no-longer-exported functions from scripts/symbols.def 2012-12-15 16:02:24 -06:00
Glenn Randers-Pehrson
1e15aee6be [libpng17] Removed functions that were deprecated in libpng-1.6.0:
png_reset_zstream(), png_info_init_3(), and png_data_freer() and its
associated flags.
2012-12-15 15:40:56 -06:00
Glenn Randers-Pehrson
d59e60d0fb [libpng17] Bump version to 1.7.0alpha02 2012-12-15 12:33:51 -06:00
Glenn Randers-Pehrson
ec1d13a1d4 [libpng17] Imported from libpng-1.7.0alpha01.tar 2012-12-15 12:33:44 -06:00
Glenn Randers-Pehrson
d9002f94cb [libpng17] Rebuilt Makefile.in, configure, etc., with autoconf-2.69
and automake-1.12.5 in the tar distributions.
2012-12-15 10:12:36 -06:00
John Bowler
1fa858db48 [libpng17] Fixed cases of unquoted DESTDIR in Makefile.am. 2012-12-15 09:48:10 -06:00
John Bowler
0f2a5bac64 [libpng17] Rearranged ARM-NEON optimizations to isolate the machine specific
code to the hardware subdirectory, and add comments to pngrutil.c so that
implementors of other optimizations will know what to do.
2012-12-14 23:12:16 -06:00
John Bowler
eac85878bf [libpng17] Clean up USER_LIMITS feature, removing members from png_struct
when not required.
2012-12-14 22:56:00 -06:00
John Bowler
240ac287eb [libpng17]Rearranged png_struct, remove unused members, change png_set_filter
handling png_struct members rearranged - partly to reorder to avoid packing,
partly to put frequently accessed members at the start and partly to make
the grouping more clear. png_set_filter code has been rewritten and the
code shared with png_write_start_row moved to a common function.  Comments
in png.h have been made more clear. Minor fixes to
contrib/libtests/timepng.c and some of the png_*_tRNS logic, including
more error detection in png_set_tRNS.
2012-12-14 22:31:50 -06:00
John Bowler
3e42c81193 [libpng17] Made 8-bit compose and rgb_to_grayscale accuracy improvements.
These changes cause 16-bit arithmetic to be used for 8-bit data in the gamma
    corrected compose and grayscale operations.  The arithmetic errors have
    three sources all of which are fixed in this commit:
    1) 8-bit linear calculations produce massive errors for lower intensity
       values.
    2) The old 16-bit "16 to 8" gamma table code erroneously wrote the lowest
       output value into a table entry which corresponded to multiple output
       values (so where the value written should have been the closest to the
       transformed input value.)
    3) In a number of cases the code to access the 16-bit table did not round;
       it did a simple shift, which was wrong and made the side effects of (2)
       even worse.
  The new gamma code does not have the 16-to-8 problem at the cost of slighly
    more calculations and the algorithm used to minimize the number of
    calculations has been extended to all the 16-bit tables; it has advantages
    for any significant gamma correction.
2012-12-14 22:17:54 -06:00
Glenn Randers-Pehrson
ac3b4d9b69 [libpng17] Bump version to 1.7.0alpha01 2012-12-10 16:21:25 -06:00
148 changed files with 29916 additions and 19078 deletions

99
.travis.yml Normal file
View File

@@ -0,0 +1,99 @@
language: c
sudo: false
cache:
directories:
- $HOME/.cache/pip
- $HOME/deps
matrix:
include:
- os: linux
compiler: gcc
env: BUILD_TYPE=normal
- os: linux
compiler: clang
env: BUILD_TYPE=normal
- os: linux
compiler: gcc
env: BUILD_TYPE=coverage
- os: linux
compiler: clang
env: BUILD_TYPE=ubsan
- os: linux
compiler: clang
env: BUILD_TYPE=asan
- os: linux
compiler: clang
env: BUILD_TYPE=lsan
- os: linux
compiler: clang
env: BUILD_TYPE=msan
- os: osx
compiler: gcc
env: BUILD_TYPE=normal
- os: osx
compiler: clang
env: BUILD_TYPE=normal
install:
- pip install --user 'requests[security]'
- pip install --user cpp-coveralls
- |
mkdir -p deps
pushd deps
export PREFIXDIR=`pwd`
if [ ! -f "libtool-2.4.6.tar.xz" ]; then
wget http://ftpmirror.gnu.org/libtool/libtool-2.4.6.tar.xz
fi
if [ ! -f "automake-1.15.tar.xz" ]; then
wget http://ftp.gnu.org/gnu/automake/automake-1.15.tar.xz
fi
if [ ! -d "libtool-2.4.6" ]; then
tar xf libtool-2.4.6.tar.xz
pushd libtool-2.4.6/
./configure --prefix=$PREFIXDIR
make && make install
popd
cp $PREFIXDIR/bin/libtool $PREFIXDIR/bin/glibtool
cp $PREFIXDIR/bin/libtoolize $PREFIXDIR/bin/glibtoolize
fi
if [ ! -d "automake-1.15" ]; then
tar xf automake-1.15.tar.xz
pushd automake-1.15/
./configure --prefix=$PREFIXDIR
make && make install
popd
fi
export PATH="$PREFIXDIR/bin:$PATH"
popd
before_script:
- |
if [ "$BUILD_TYPE" = "coverage" ]; then
export CFLAGS="-fprofile-arcs -ftest-coverage"
export LDFLAGS="-fprofile-arcs -ftest-coverage"
fi
- |
if [ "$BUILD_TYPE" = "asan" ]; then
export CFLAGS=-fsanitize=address
export LDFLAGS=-fsanitize=address
fi
- |
if [ "$BUILD_TYPE" = "lsan" ]; then
export CFLAGS=-fsanitize=leak
export LDFLAGS=-fsanitize=leak
fi
- |
if [ "$BUILD_TYPE" = "msan" ]; then
export CFLAGS=-fsanitize=memory
export LDFLAGS=-fsanitize=memory
fi
- |
if [ "$BUILD_TYPE" = "ubsan" ]; then
export CFLAGS="-fsanitize=undefined -fno-sanitize-recover"
export LDFLAGS="-fsanitize=undefined"
fi
script:
- ./autogen.sh && ./configure && make && make check
- |
if [ "$BUILD_TYPE" = "coverage" ]; then
cpp-coveralls --gcov-options '\-lp'
fi

1289
ANNOUNCE

File diff suppressed because it is too large Load Diff

1421
CHANGES

File diff suppressed because it is too large Load Diff

View File

@@ -34,8 +34,8 @@ project(libpng C)
enable_testing()
set(PNGLIB_MAJOR 1)
set(PNGLIB_MINOR 6)
set(PNGLIB_RELEASE 22)
set(PNGLIB_MINOR 7)
set(PNGLIB_RELEASE 0)
set(PNGLIB_NAME libpng${PNGLIB_MAJOR}${PNGLIB_MINOR})
set(PNGLIB_VERSION ${PNGLIB_MAJOR}.${PNGLIB_MINOR}.${PNGLIB_RELEASE})
@@ -337,6 +337,7 @@ set(libpng_private_hdrs
pngdebug.h
pnginfo.h
pngstruct.h
pngchunk.h
)
if(AWK)
list(APPEND libpng_private_hdrs "${CMAKE_CURRENT_BINARY_DIR}/pngprefix.h")
@@ -696,9 +697,9 @@ endif(NOT WIN32 OR CYGWIN OR MINGW)
# SET UP LINKS
if(PNG_SHARED)
set_target_properties(png PROPERTIES
# VERSION 16.${PNGLIB_RELEASE}.1.6.22beta03
VERSION 16.${PNGLIB_RELEASE}.0
SOVERSION 16
# VERSION 17.${PNGLIB_RELEASE}.1.7.0beta80
VERSION 17.${PNGLIB_RELEASE}.0
SOVERSION 17
CLEAN_DIRECT_OUTPUT 1)
endif()
@@ -721,7 +722,7 @@ if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
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 => libpng17.dll.a on Cygwin
if(CYGWIN OR MINGW)
get_target_property(BUILD_TARGET_LOCATION png LOCATION_${CMAKE_BUILD_TYPE})
CREATE_SYMLINK(${BUILD_TARGET_LOCATION} libpng${CMAKE_IMPORT_LIBRARY_SUFFIX})

View File

@@ -47,9 +47,7 @@ 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
up-to-date set of tools, running ./autogen.sh in a git clone before
running ./configure may fix the problem. To be really sure that you
aren't using any of the included pre-built scripts, especially if you
are building from a tar distribution instead of a git distribution,
do this:
aren't using any of the included pre-built scripts, you can do this:
./configure --enable-maintainer-mode
make maintainer-clean
@@ -401,7 +399,7 @@ CFLAGS="-Wall -O -funroll-loops \
--with-pkgconfigdir=/usr/lib/pkgconfig --includedir=/usr/include
You can alternatively specify --includedir=/usr/include, /usr/local/include,
/usr/include/libpng16, or whatever.
/usr/include/libpng17, or whatever.
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",

32
LICENSE
View File

@@ -10,7 +10,7 @@ this sentence.
This code is released under the libpng license.
libpng versions 1.0.7, July 1, 2000 through 1.6.22beta03, March 9, 2016 are
libpng versions 1.0.7, July 1, 2000, through 1.7.0beta80, May 6, 2016, are
Copyright (c) 2000-2002, 2004, 2006-2016 Glenn Randers-Pehrson, are
derived from libpng-1.0.6, and are distributed according to the same
disclaimer and license as libpng-1.0.6 with the following individuals
@@ -32,10 +32,6 @@ and with the following additions to the disclaimer:
risk of satisfactory quality, performance, accuracy, and effort is with
the user.
Some files in the "contrib" directory and some configure-generated
files that are distributed with libpng have other copyright owners and
are released under other open source licenses.
libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
libpng-0.96, and are distributed according to the same disclaimer and
@@ -59,9 +55,6 @@ Contributing Authors:
Greg Roelofs
Tom Tanner
Some files in the "scripts" directory have other copyright owners
but are released under this license.
libpng versions 0.5, May 1995, through 0.88, January 1996, are
Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
@@ -102,29 +95,18 @@ appreciated.
END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.
TRADEMARK:
A "png_get_copyright" function is available, for convenient use in "about"
boxes and the like:
The name "libpng" has not been registered by the Copyright owner
as a trademark in any jurisdiction. However, because libpng has
been distributed and maintained world-wide, continually since 1995,
the Copyright owner claims "common-law trademark protection" in any
jurisdiction where common-law trademark is recognized.
printf("%s", png_get_copyright(NULL));
OSI CERTIFICATION:
Also, the PNG logo (in PNG format, of course) is supplied in the
files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
Libpng is OSI Certified Open Source Software. OSI Certified Open Source is
a certification mark of the Open Source Initiative. OSI has not addressed
the additional disclaimers inserted at version 1.0.7.
EXPORT CONTROL:
The Copyright owner believes 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).
Glenn Randers-Pehrson
glennrp at users.sourceforge.net
March 9, 2016
May 6, 2016

View File

@@ -1,11 +1,6 @@
# Makefile.am, the source file for Makefile.in (and hence Makefile), is
# Makefile.am:
# Source file for Makefile.in (and hence Makefile)
#
# Copyright (c) 2004-2016 Glenn Randers-Pehrson
# Last changed in libpng 1.6.22 [(PENDING RELEASE)]
#
# This code is released under the libpng license.
# For conditions of distribution and use, see the disclaimer
# and license in png.h
PNGLIB_BASENAME= libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@
@@ -56,9 +51,9 @@ TESTS =\
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-size tests/pngvalid-size\
tests/pngvalid-progressive-interlace-standard\
tests/pngvalid-transform\
tests/pngvalid-transform tests/pngvalid-interlace-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\
@@ -81,11 +76,15 @@ lib_LTLIBRARIES=libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.la
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES = png.c pngerror.c\
pngget.c pngmem.c pngpread.c pngread.c pngrio.c pngrtran.c pngrutil.c\
pngset.c pngtrans.c pngwio.c pngwrite.c pngwtran.c pngwutil.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 pngchunk.h \
pngusr.dfa
if PNG_ARM_NEON
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES += arm/arm_init.c\
arm/filter_neon.S arm/filter_neon_intrinsics.c
# Include libpng extensions, if appropriate. This uses a Makefile.am fragment,
# pre-set things that might be changed by addition:
AM_CPPFLAGS =
DFA_EXTENSION =
if LIBPNG_EXTENSIONS
include $(top_srcdir)/contrib/extensions.am
endif
nodist_libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES = pnglibconf.h
@@ -128,12 +127,12 @@ EXTRA_DIST= \
$(TESTS) $(XFAIL_TESTS) tests/pngstest \
CMakeLists.txt example.c libpng-manual.txt
SCRIPT_CLEANFILES=scripts/*.out scripts/*.chk
SCRIPT_CLEANFILES=scripts/*.out scripts/*.chk scripts/pnglibconf.c
CLEANFILES= *.tf? pngout.png libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@.pc \
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@-config libpng.vers libpng.sym \
check.new pnglibconf.h pngprefix.h symbols.new pngtest-log.txt \
pnglibconf.out pnglibconf.c pnglibconf.pre pnglibconf.dfn \
pnglibconf.out pnglibconf.c pnglibconf.dfn pnglibconf.pre \
$(SCRIPT_CLEANFILES)
MAINTAINERCLEANFILES = Makefile.in aclocal.m4 config.guess config.h.in \
@@ -145,8 +144,8 @@ config.sub configure depcomp install-sh ltmain.sh missing
PNG_COPTS = @PNG_COPTS@
AM_CFLAGS = ${PNG_COPTS}
# DFNCPP is normally just CPP - the C preprocessor - but on Solaris and maybe
# other operating systems (NeXT?) the C preprocessor selected by configure
# DFNCPP is normally just "CPP -E" - the C preprocessor - but on Solaris and
# maybe other operating systems (NeXT?) the C preprocessor selected by configure
# checks input tokens for validity - effectively it performs part of the ANSI-C
# parsing - and therefore fails with the .df files. configure.ac has special
# checks for this and sets DFNCPP appropriately.
@@ -165,6 +164,8 @@ scripts/prefix.out: png.h pngconf.h pnglibconf.out
scripts/symbols.out: png.h pngconf.h $(srcdir)/scripts/pnglibconf.h.prebuilt
scripts/intprefix.out: pnglibconf.h
pnglibconf.out: config.h
libpng.sym: scripts/sym.out
rm -f $@
cp $? $@
@@ -176,7 +177,7 @@ if DO_PNG_PREFIX
# Rename functions in scripts/prefix.out with a PNG_PREFIX prefix.
# Rename macros in scripts/macro.lst from PNG_PREFIXpng_ to PNG_ (the actual
# implementation of the macro).
pnglibconf.h: pnglibconf.out scripts/prefix.out scripts/macro.lst
pnglibconf.h: pnglibconf.out scripts/prefix.out scripts/macro.lst config.h
rm -f $@
$(AWK) 's==0 && NR>1{print prev}\
s==0{prev=$$0}\
@@ -241,17 +242,17 @@ endif
rm -f $@ $*.tf[12]
test -d scripts || mkdir scripts || test -d scripts
$(DFNCPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES)\
$(CPPFLAGS) $(SYMBOL_CFLAGS) $< > $*.tf1
$(AM_CPPFLAGS) $(CPPFLAGS) $(SYMBOL_CFLAGS) $< > $*.tf1
$(AWK) -f "${srcdir}/scripts/dfn.awk" out="$*.tf2" $*.tf1 1>&2
rm -f $*.tf1
mv $*.tf2 $@
# The .c file for pnglibconf.h is machine generated
pnglibconf.c: 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_EXTENSION) $(DFA_XTRA)
rm -f $@ $*.tf[45]
$(AWK) -f ${srcdir}/scripts/options.awk out=$*.tf4 version=search\
${srcdir}/pngconf.h ${srcdir}/scripts/pnglibconf.dfa\
${srcdir}/pngusr.dfa $(DFA_XTRA) 1>&2
$(DFA_EXTENSION) ${srcdir}/pngusr.dfa $(DFA_XTRA) 1>&2
$(AWK) -f ${srcdir}/scripts/options.awk out=$*.tf5 $*.tf4 1>&2
rm $*.tf4
mv $*.tf5 $@
@@ -269,8 +270,8 @@ scripts/symbols.chk: scripts/checksym.awk scripts/symbols.def scripts/symbols.ou
# be empty - no non-standard defines
scripts/pnglibconf.c: scripts/pnglibconf.dfa scripts/options.awk pngconf.h
rm -f $@ pnglibconf.tf[67]
test -z "$(CPPFLAGS)"
echo "com @PNGLIB_VERSION@ STANDARD API DEFINITION" |\
test -z "$(CPPFLAGS)" -a -z "$(AM_CPPFLAGS)"
echo "com libpng @PNGLIB_VERSION@ STANDARD API DEFINITION" |\
$(AWK) -f ${srcdir}/scripts/options.awk out=pnglibconf.tf6\
logunsupported=1 version=search ${srcdir}/pngconf.h -\
${srcdir}/scripts/pnglibconf.dfa 1>&2
@@ -279,7 +280,7 @@ scripts/pnglibconf.c: scripts/pnglibconf.dfa scripts/options.awk pngconf.h
rm pnglibconf.tf6
mv pnglibconf.tf7 $@
$(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_OBJECTS): png.h pngconf.h \
$(libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_OBJECTS): png.h pngconf.h pngchunk.h \
pnglibconf.h pngpriv.h pngdebug.h pnginfo.h pngstruct.h pngprefix.h
test: check-am

3
README
View File

@@ -1,4 +1,4 @@
README for libpng version 1.6.22beta03 - March 9, 2016 (shared library 16.0)
README for libpng version 1.7.0beta80 - May 6, 2016 (shared library 17.0)
See the note about version numbers near the top of png.h
See INSTALL for instructions on how to install libpng.
@@ -160,6 +160,7 @@ Files in this distribution:
pngstruct.h => png_struct declaration (private)
pnginfo.h => png_info struct declaration (private)
pngdebug.h => debugging macros (private)
pngchunk.h => PNG chunk descriptions (private, new in libpng17)
pngerror.c => Error/warning message I/O functions
pngget.c => Functions for retrieving info from struct
pngmem.c => Memory handling functions

1
TODO
View File

@@ -25,5 +25,6 @@ Investigate pre-incremented loop counters and other loop constructions.
Add interpolated method of handling interlacing.
Switch to the simpler zlib (zlib/libpng) license if legally possible.
Extend pngvalid.c to validate more of the libpng transformations.
Refactor preprocessor conditionals to compile entire statements
*/

View File

@@ -1,12 +1,5 @@
# configure.ac
# Copyright (c) 2004-2015 Glenn Randers-Pehrson
# Last changed in libpng 1.6.22 [(PENDING RELEASE)]
# This code is released under the libpng license.
# For conditions of distribution and use, see the disclaimer
# and license in png.h
dnl Process this file with autoconf to produce a configure script.
dnl
dnl Minor upgrades (compatible ABI): increment the package version
@@ -25,7 +18,7 @@ AC_PREREQ([2.68])
dnl Version number stuff here:
AC_INIT([libpng],[1.6.22beta03],[png-mng-implement@lists.sourceforge.net])
AC_INIT([libpng],[1.7.0beta80],[png-mng-implement@lists.sourceforge.net])
AC_CONFIG_MACRO_DIR([scripts])
# libpng does not follow GNU file name conventions (hence 'foreign')
@@ -34,7 +27,8 @@ AC_CONFIG_MACRO_DIR([scripts])
# dist-xz requires automake 1.11 or later
# 1.12.2 fixes a security issue in 1.11.2 and 1.12.1
# 1.13 is required for parallel tests
AM_INIT_AUTOMAKE([1.13 foreign dist-xz color-tests silent-rules subdir-objects])
# 1.14.1 is required for %reldir% support
AM_INIT_AUTOMAKE([1.15 foreign dist-xz color-tests silent-rules subdir-objects])
# 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
@@ -46,10 +40,10 @@ dnl automake, so the following is not necessary (and is not defined anyway):
dnl AM_PREREQ([1.11.2])
dnl stop configure from automagically running automake
PNGLIB_VERSION=1.6.22beta03
PNGLIB_VERSION=1.7.0beta80
PNGLIB_MAJOR=1
PNGLIB_MINOR=6
PNGLIB_RELEASE=22
PNGLIB_MINOR=7
PNGLIB_RELEASE=0
dnl End of version number stuff
@@ -67,10 +61,10 @@ AC_PROG_INSTALL
AC_PROG_LN_S
AC_PROG_MAKE_SET
dnl libtool/libtoolize; version 2.4.2 is the tested version, this or any
dnl libtool/libtoolize; version 2.4.4 is the tested version, this or any
dnl compatible later version may be used
LT_INIT([win32-dll])
LT_PREREQ([2.4.2])
LT_PREREQ([2.4.4])
# Some awks crash when confronted with pnglibconf.dfa, do a test run now
# to make sure this doesn't happen
@@ -86,7 +80,7 @@ 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"
DFNCPP="$CPP -E"
AC_SUBST(DFNCPP)
# -Werror cannot be passed to GCC in CFLAGS because configure will fail (it
@@ -116,30 +110,146 @@ AC_ARG_ENABLE(werror,
# Checks for header files.
AC_HEADER_STDC
# Headers used in pngpriv.h:
AC_CHECK_HEADERS([assert.h stdlib.h string.h float.h fp.h math.h m68881.h])
# Additional headers used in pngconf.h:
AC_CHECK_HEADERS([limits.h stddef.h stdio.h setjmp.h time.h])
# Used by pngread.c (for the simplified API):
AC_CHECK_HEADERS([errno.h])
# The following are not required for the standard 'make' build of libpng:
# Additional requirements of contrib/libtests/makepng.c:
AC_CHECK_HEADERS([ctype.h])
# Additional requirements of contrib/libtests/pngvalid.c:
AC_CHECK_HEADERS([fenv.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_TYPE_SIZE_T
AC_STRUCT_TM
# Most of these have been removed from 1.7.0 because they checked for non-ANSI-C
# behaviors and the result were, anyway, not used by earlier versions of libpng.
AC_C_RESTRICT
# Checks for library functions.
AC_FUNC_STRTOD
AC_CHECK_FUNCS([memset], , AC_MSG_ERROR(memset not found in libc))
AC_CHECK_FUNCS([pow], , AC_CHECK_LIB(m, pow, , AC_MSG_ERROR(cannot find pow)) )
AC_ARG_WITH(zlib-prefix,
AS_HELP_STRING([[[--with-zlib-prefix]]],
[prefix that may have been used in installed zlib]),
[ZPREFIX=${withval}],
[ZPREFIX='z_'])
AC_CHECK_LIB(z, zlibVersion, ,
AC_CHECK_LIB(z, ${ZPREFIX}zlibVersion, , AC_MSG_ERROR(zlib not installed)))
# Checks for library functions; these need to be in order, least demanding to
# most because the -l directives are added to the head of the list at each
# check.
# ANSI-C functions: all are required but they don't have to be implemented in
# libc, it is perfectly ok to configure with an extra, wrapper, library preset
# in LIBS. NOTE: this list may not be complete
AC_CHECK_FUNCS([memset memcpy strncpy],,
AC_MSG_FAILURE([missing ANSI-C functions]))
# floor and ceil are required for FLOATING_POINT, but they can be turned off on
# the configure command line (and they are independent.) Default is to 'on'
AC_ARG_ENABLE([floating-point],
AS_HELP_STRING([[[--enabled-floating-point]]],
[Enable floating point APIs (default: yes)]),,
[enable_floating_point=yes])
AC_ARG_ENABLE([fixed-point],
AS_HELP_STRING([[[--enable-fixed-point]]],
[Enable fixed point APIs (default: yes)]),,
[enable_fixed_point=yes])
AC_ARG_ENABLE([floating-arithmetic],
AS_HELP_STRING([[[--enable-floating-arithmetic]]],
[Use floating point arithmetic internally (default: yes)]),,
[enable_floating_arithmetic=yes])
# Check for a requirement for math library support
if test "$enable_floating_arithmetic" = yes
then
AC_SEARCH_LIBS([floor],[m],,
[AC_MSG_WARN([not found])
enable_floating_arithmetic=no])
AC_SEARCH_LIBS([frexp],[m],,
[AC_MSG_WARN([not found])
enable_floating_arithmetic=no])
AC_SEARCH_LIBS([modf],[m],,
[AC_MSG_WARN([not found])
enable_floating_arithmetic=no])
AC_SEARCH_LIBS([atof],[m],,
[AC_MSG_WARN([not found])
enable_floating_arithmetic=no])
AC_SEARCH_LIBS([pow],[m],,
[AC_MSG_WARN([not found])
enable_floating_arithmetic=no])
fi
# Set the relevant defines if required (only if required), this will override
# anything on the command line.
if test "$enable_floating_point" != yes
then
AC_MSG_NOTICE([Floating point APIs disabled])
AC_DEFINE([PNG_NO_FLOATING_POINT],[1],
[No support for floating point APIs])
fi
if test "$enable_fixed_point" != yes
then
AC_MSG_NOTICE([Fixed point APIs disabled])
AC_DEFINE([PNG_NO_FIXED_POINT],[1],
[No support for fixed point APIs])
fi
if test "$enable_floating_arithmetic" != yes
then
AC_MSG_NOTICE([Fixed point arithmetic will be used])
AC_DEFINE([PNG_NO_FLOATING_ARITHMETIC],[1],
[No support for floating point arithmetic])
fi
# The following is for pngvalid, to ensure it catches FP errors even on
# platforms that don't enable FP exceptions, the function appears in the math
# library (typically), it's not an error if it is not found.
AC_CHECK_LIB([m], [feenableexcept])
AC_CHECK_FUNCS([feenableexcept])
AC_SEARCH_LIBS([feenableexcept],[m],AC_DEFINE([HAVE_FEENABLEEXCEPT],[1],
[Define to 1 if the feenableexcept function is available]))
# Required by pngvalid:
AC_SEARCH_LIBS([ceil],[m])
# zlib checks and arguments;
# package zlib: argument is the name of the library
# zlib-header: the name of the header file
# zlib-prefix: the prefix for library functions, if any
AC_ARG_WITH([zlib],
AS_HELP_STRING([[[--with-zlib=<name>]]],
[base name of the zlib implementation (e.g. 'z')]),,
[with_zlib='z'])
z_prefix=
AC_ARG_WITH([zlib-prefix],
AS_HELP_STRING([[[--with-zlib-prefix=<prefix>]]],
[prefix for zlib API functions]),
[if test "$withval" = "" -o "$withval" = yes; then
with_zlib_prefix='z_'
AC_DEFINE([PNG_ZLIB_PREFIX],[z_],[Standard zlib prefix])
elif test "${withval}" != "no"; then
AC_DEFINE_UNQUOTED([PNG_ZLIB_PREFIX],[${withval}],
[User defined zlib prefix])
else
with_zlib_prefix=
fi
if test "$with_zlib_prefix" != ""; then
AC_DEFINE([Z_PREFIX],[1],[Tell zlib.h to prefix function names])
z_prefix="#define Z_PREFIX 1"
fi])
AC_ARG_WITH([zlib-header],
AS_HELP_STRING([[[--with-zlib-header='<file>' or '"file"']]],
[C include argument to locate zlib header file, e.g. <zlib.h>, take
care to put single quotes round this on the command line]),
[AC_DEFINE_UNQUOTED([PNG_ZLIB_HEADER],[${withval}],[Zlib header file])],
with_zlib_header='<zlib.h>')
# AC_CHECK_LIB isn't quite enough for this because we need the special header
# file too.
LIBS="-l${with_zlib} $LIBS"
AC_MSG_CHECKING(
[[Library '${with_zlib}' and #include ${with_zlib_header} for symbol '${with_zlib_prefix}zlibVersion']])
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[
${z_prefix}
#include ${with_zlib_header}
]],
[[(void)${with_zlib_prefix}zlibVersion();]])],
AC_MSG_RESULT([ok]),
AC_MSG_FAILURE([not found]))
AC_MSG_CHECKING([if using Solaris linker])
SLD=`$LD --version 2>&1 | grep Solaris`
@@ -185,7 +295,7 @@ AM_CONDITIONAL(HAVE_LD_VERSION_SCRIPT, test "$have_ld_version_script" = "yes")
if test "$have_ld_version_script" = "yes"; then
AC_MSG_CHECKING([for symbol prefix])
SYMBOL_PREFIX=`echo "PREFIX=__USER_LABEL_PREFIX__" \
| ${CPP-${CC-gcc} -E} - 2>&1 \
| ${DFNCPP-${CC-gcc -E}} - 2>&1 \
| ${EGREP-grep} "^PREFIX=" \
| ${SED-sed} -e "s:^PREFIX=::" -e "s:__USER_LABEL_PREFIX__::"`
AC_SUBST(SYMBOL_PREFIX)
@@ -272,60 +382,16 @@ AC_ARG_ENABLE([unversioned-libpng-config],
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],
AS_HELP_STRING([[[--enable-arm-neon]]],
[Enable ARM NEON optimizations: =no/off, check, api, yes/on:]
[no/off: disable the optimizations; check: use internal checking code]
[(deprecated and poorly supported); api: disable by default, enable by]
[a call to png_set_option; yes/on: turn on unconditionally.]
[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])
# EXTENSIONS
# Configure (and all other) support for extensions is included when autoconf is
# run by virtue of the existence (or not) of the following file:
sinclude([contrib/extensions.ac])
AM_CONDITIONAL([LIBPNG_EXTENSIONS],[test -n "$libpng_automake_extensions"])
AC_MSG_NOTICE([[Extra options for compiler: $PNG_COPTS]])
# Config files, substituting as above
AC_CONFIG_FILES([Makefile libpng.pc:libpng.pc.in])
AC_CONFIG_FILES([libpng-config:libpng-config.in],
[chmod +x libpng-config])
AC_CONFIG_FILES([Makefile libpng.pc])
AC_CONFIG_FILES([libpng-config], [chmod +x libpng-config])
AC_OUTPUT

2175
contrib/examples/pngcp.c Normal file

File diff suppressed because it is too large Load Diff

16
contrib/extensions.ac Normal file
View File

@@ -0,0 +1,16 @@
# CONTRIBUTED EXTENSIONS
#
# The following extensions are part of a standard libpng distribution. They are
# not supported parts of libpng and they are not necessarily released under the
# same license as libpng. Please consult the relevant directory for copyright
# and support information before uncommenting any of the lines below.
#
# After you change this file you MUST re-run "autoreconf" to regenerate the
# configure script, otherwise the change may have no effect.
#
# Include the ARM NEON extension:
#sinclude([contrib/neon/neon.ac])
#
# If any of the extensions require automake support (this is likely) automake
# must include the file contrib/extensions.am
#libpng_automake_extensions="yes"

7
contrib/extensions.am Normal file
View File

@@ -0,0 +1,7 @@
# CONTRIBUTED EXTENSIONS
#
# Please read the file "contrib/extensions.ac" before making changes to this
# file.
#
# Include the ARM NEON extension:
#include %reldir%/neon/neon.am

View File

@@ -23,9 +23,9 @@
# macros --------------------------------------------------------------------
PNGINC = -I/usr/local/include/libpng16
PNGLIB = -L/usr/local/lib -lpng16 # dynamically linked against libpng
#PNGLIB = /usr/local/lib/libpng16.a # statically linked against libpng
PNGINC = -I/usr/local/include/libpng17
PNGLIB = -L/usr/local/lib -lpng17 # dynamically linked against libpng
#PNGLIB = /usr/local/lib/libpng17.a # statically linked against libpng
# or:
#PNGINC = -I../..
#PNGLIB = -L../.. -lpng

View File

@@ -26,14 +26,14 @@
# macros --------------------------------------------------------------------
#PNGDIR = /usr/local/lib
#PNGINC = -I/usr/local/include/libpng16
#PNGLIBd = -L$(PNGDIR) -lpng16 # dynamically linked, installed libpng
#PNGLIBs = $(PNGDIR)/libpng16.a # statically linked, installed libpng
#PNGINC = -I/usr/local/include/libpng17
#PNGLIBd = -L$(PNGDIR) -lpng17 # dynamically linked, installed libpng
#PNGLIBs = $(PNGDIR)/libpng17.a # statically linked, installed libpng
# or:
PNGDIR = ../..# this one is for libpng-x.y.z/contrib/gregbook builds
#PNGDIR = ../libpng
PNGINC = -I$(PNGDIR)
PNGLIBd = -Wl,-rpath,$(PNGDIR) -L$(PNGDIR) -lpng16 # dynamically linked
PNGLIBd = -Wl,-rpath,$(PNGDIR) -L$(PNGDIR) -lpng17 # dynamically linked
PNGLIBs = $(PNGDIR)/libpng.a # statically linked, local libpng
ZDIR = /usr/local/lib
@@ -59,16 +59,15 @@ INCS = $(PNGINC) $(ZINC) $(XINC)
RLIBSd = $(PNGLIBd) $(ZLIBd) $(XLIB) -lm
RLIBSs = $(PNGLIBs) $(ZLIBs) $(XLIB) -lm
WLIBSd = $(PNGLIBd) $(ZLIBd) -lm
WLIBSs = $(PNGLIBs) $(ZLIBs) -lm
WLIBSs = $(PNGLIBs) $(ZLIBs)
CC = gcc
LD = gcc
RM = rm -f
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")]
# [-ansi, -pedantic, -Wextra, and -W can also be used]
# [-ansi, -pedantic and -W can also be used]
LDFLAGS =
O = .o
E =

View File

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

View File

@@ -26,8 +26,6 @@
- 1.14: added support for X resources (thanks to Gerhard Niklasch)
- 2.00: dual-licensed (added GNU GPL)
- 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)
---------------------------------------------------------------------------
@@ -82,7 +80,7 @@
#define PROGNAME "rpng-x"
#define LONGNAME "Simple PNG Viewer for X"
#define VERSION "2.02 of 15 June 2014"
#define VERSION "2.01 of 16 March 2008"
#define RESNAME "rpng" /* our X resource application name */
#define RESCLASS "Rpng" /* our X resource class name */
@@ -281,17 +279,15 @@ int main(int argc, char **argv)
"Usage: %s [-display xdpy] [-gamma exp] [-bgcolor bg] file.png\n"
" xdpy\tname of the target X display (e.g., ``hostname:0'')\n"
" exp \ttransfer-function exponent (``gamma'') of the display\n"
"\t\t system in floating-point format (e.g., ``%.1f''); equal\n",
PROGNAME, default_display_exponent);
fprintf(stderr, "\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 and the CRT exponent (usually 2.2); must be positive\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 used with transparent images\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);
}
@@ -423,8 +419,6 @@ int main(int argc, char **argv)
rpng_x_cleanup();
(void)argc; /* Unused */
return 0;
}

View File

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

View File

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

View File

@@ -1,114 +0,0 @@
Enabling SSE support
Copyright (c) 2016 Google, Inc.
Written by Mike Klein and Matt Sarett
If you have moved intel_init.c and filter_sse2_intrinsics.c to a different
directory, be sure to update the '#include "../../pngpriv.h"' line in both
files if necessary to point to the correct relative location of pngpriv.h
with respect to the new location of those files.
To enable SSE support in libpng, follow the instructions in I, II, or III,
below:
I. Using patched "configure" scripts:
First, apply intel_sse.patch in your build directory.
patch -i contrib/intel/intel_sse.patch -p1
Then, if you are not building in a new GIT clone, e.g., in a tar
distribution, remove any existing pre-built configure scripts:
./configure --enable-maintainer-mode
make maintainer-clean
./autogen.sh --maintainer --clean
Finally, configure libpng with -DPNG_INTEL_SSE in CPPFLAGS. If you only
want to optimize reading 4bpp images, also use -DPNG_NO_INTEL_SSE_3BPP:
./autogen.sh --maintainer
CPPFLAGS="-DPNG_INTEL_SSE -DPNG_NO_INTEL_SSE_3BPP" ./configure [options]
make
II. Using a custom makefile:
If you are using a custom makefile makefile, you will have to update it
manually to include contrib/intel/*.o in the dependencies, and to define
PNG_INTEL_SSE and possibly PNG_NO_INTEL_SSE_3BPP.
III. Using manually updated "configure" scripts:
If you prefer, manually edit configure.ac and Makefile.am, following the
instructions below, then follow the instructions in section II of INSTALL
in the main libpng directory, then configure libpng with -DPNG_INTEL_SSE
in CPPFLAGS. If you only want to optimize reading 4bpp images, also use
-DPNG_NO_INTEL_SSE_3BPP.
1. Insert the following lines above the copyright line near the top of
configure.ac:
-----------------cut----------------
# Copyright (c) 2016 Google, Inc.
# Written by Mike Klein and Matt Sarett
# Derived from the ARM supporting code in libpng/configure.ac, which was
-----------------cut----------------
2. Add the following code to configure.ac under HOST SPECIFIC OPTIONS
directly beneath the section for ARM:
-----------------cut----------------
# INTEL
# =====
#
# INTEL SSE (SIMD) support.
AC_ARG_ENABLE([intel-sse],
AS_HELP_STRING([[[--enable-intel-sse]]],
[Enable Intel SSE optimizations: =no/off, yes/on:]
[no/off: disable the optimizations;]
[yes/on: enable the optimizations.]
[If not specified: determined by the compiler.]),
[case "$enableval" in
no|off)
# disable the default enabling:
AC_DEFINE([PNG_INTEL_SSE_OPT], [0],
[Disable Intel SSE optimizations])
# Prevent inclusion of the assembler files below:
enable_intel_sse=no;;
yes|on)
AC_DEFINE([PNG_INTEL_SSE_OPT], [1],
[Enable Intel SSE optimizations]);;
*)
AC_MSG_ERROR([--enable-intel-sse=${enable_intel_sse}: invalid value])
esac])
# Add Intel specific files to all builds where the host_cpu is Intel ('x86*')
# or where Intel optimizations were explicitly requested (this allows a
# fallback if a future host CPU does not match 'x86*')
AM_CONDITIONAL([PNG_INTEL_SSE],
[test "$enable_intel_sse" != 'no' &&
case "$host_cpu" in
i?86|x86_64) :;;
*) test "$enable_intel_sse" != '';;
esac])
-----------------cut----------------
3. Insert the following lines above the copyright line near the top of
Makefile.am:
-----------------cut----------------
# Copyright (c) 2016 Google, Inc.
# Written by Mike Klein and Matt Sarett
# Derived from the ARM supporting code in libpng/configure.ac, which was
-----------------cut----------------
4. Add the following code to Makefile.am under HOST SPECIFIC OPTIONS
directly beneath the "if PNG_ARM_NEON ... endif" statement:
-----------------cut----------------
if PNG_INTEL_SSE
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES += contrib/intel/intel_init.c\
contrib/intel/filter_sse2_intrinsics.c
endif
-----------------cut----------------

View File

@@ -1,316 +0,0 @@
/* filter_sse2_intrinsics.c - SSE2 optimized filter functions
*
* Copyright (c) 2016 Google, Inc.
* Written by Mike Klein and Matt Sarett
* Derived from arm/filter_neon_intrinsics.c, which was
* Copyright (c) 2014,2016 Glenn Randers-Pehrson
*
* Last changed in libpng 1.6.22 [(PENDING RELEASE)]
*
* 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
#if PNG_INTEL_SSE_IMPLEMENTATION > 0
#include <immintrin.h>
/* Functions in this file look at most 3 pixels (a,b,c) to predict the 4th (d).
* They're positioned like this:
* prev: c b
* row: a d
* The Sub filter predicts d=a, Avg d=(a+b)/2, and Paeth predicts d to be
* whichever of a, b, or c is closest to p=a+b-c.
*/
#ifndef PNG_NO_INTEL_SSE_3BPP
static __m128i load3(const void* p) {
png_uint_32 packed;
memcpy(&packed, p, 3);
return _mm_cvtsi32_si128(packed);
}
#endif
static __m128i load4(const void* p) {
return _mm_cvtsi32_si128(*(const int*)p);
}
#ifndef PNG_NO_INTEL_SSE_3BPP
static void store3(void* p, __m128i v) {
png_uint_32 packed = _mm_cvtsi128_si32(v);
memcpy(p, &packed, 3);
}
#endif
static void store4(void* p, __m128i v) {
*(int*)p = _mm_cvtsi128_si32(v);
}
#ifndef PNG_NO_INTEL_SSE_3BPP
void png_read_filter_row_sub3_sse2(png_row_infop row_info, png_bytep row,
png_const_bytep prev)
{
/* The Sub filter predicts each pixel as the previous pixel, a.
* There is no pixel to the left of the first pixel. It's encoded directly.
* That works with our main loop if we just say that left pixel was zero.
*/
png_debug(1, "in png_read_filter_row_sub3_sse2");
__m128i a, d = _mm_setzero_si128();
int rb = row_info->rowbytes;
while (rb > 0) {
a = d; d = load3(row);
d = _mm_add_epi8(d, a);
store3(row, d);
row += 3;
rb -= 3;
}
}
#endif
void png_read_filter_row_sub4_sse2(png_row_infop row_info, png_bytep row,
png_const_bytep prev)
{
/* The Sub filter predicts each pixel as the previous pixel, a.
* There is no pixel to the left of the first pixel. It's encoded directly.
* That works with our main loop if we just say that left pixel was zero.
*/
png_debug(1, "in png_read_filter_row_sub4_sse2");
__m128i a, d = _mm_setzero_si128();
int rb = row_info->rowbytes;
while (rb > 0) {
a = d; d = load4(row);
d = _mm_add_epi8(d, a);
store4(row, d);
row += 4;
rb -= 4;
}
}
#ifndef PNG_NO_INTEL_SSE_3BPP
void png_read_filter_row_avg3_sse2(png_row_infop row_info, png_bytep row,
png_const_bytep prev)
{
/* The Avg filter predicts each pixel as the (truncated) average of a and b.
* There's no pixel to the left of the first pixel. Luckily, it's
* predicted to be half of the pixel above it. So again, this works
* perfectly with our loop if we make sure a starts at zero.
*/
png_debug(1, "in png_read_filter_row_avg3_sse2");
const __m128i zero = _mm_setzero_si128();
__m128i b;
__m128i a, d = zero;
int rb = row_info->rowbytes;
while (rb > 0) {
b = load3(prev);
a = d; d = load3(row );
/* PNG requires a truncating average, so we can't just use _mm_avg_epu8 */
__m128i avg = _mm_avg_epu8(a,b);
/* ...but we can fix it up by subtracting off 1 if it rounded up. */
avg = _mm_sub_epi8(avg, _mm_and_si128(_mm_xor_si128(a,b),
_mm_set1_epi8(1)));
d = _mm_add_epi8(d, avg);
store3(row, d);
prev += 3;
row += 3;
rb -= 3;
}
}
#endif
void png_read_filter_row_avg4_sse2(png_row_infop row_info, png_bytep row,
png_const_bytep prev)
{
/* The Avg filter predicts each pixel as the (truncated) average of a and b.
* There's no pixel to the left of the first pixel. Luckily, it's
* predicted to be half of the pixel above it. So again, this works
* perfectly with our loop if we make sure a starts at zero.
*/
png_debug(1, "in png_read_filter_row_avg4_sse2");
const __m128i zero = _mm_setzero_si128();
__m128i b;
__m128i a, d = zero;
int rb = row_info->rowbytes;
while (rb > 0) {
b = load4(prev);
a = d; d = load4(row );
/* PNG requires a truncating average, so we can't just use _mm_avg_epu8 */
__m128i avg = _mm_avg_epu8(a,b);
/* ...but we can fix it up by subtracting off 1 if it rounded up. */
avg = _mm_sub_epi8(avg, _mm_and_si128(_mm_xor_si128(a,b),
_mm_set1_epi8(1)));
d = _mm_add_epi8(d, avg);
store4(row, d);
prev += 4;
row += 4;
rb -= 4;
}
}
/* Returns |x| for 16-bit lanes. */
static __m128i abs_i16(__m128i x) {
#if PNG_INTEL_SSE_IMPLEMENTATION >= 2
return _mm_abs_epi16(x);
#else
/* Read this all as, return x<0 ? -x : x.
* To negate two's complement, you flip all the bits then add 1.
*/
__m128i is_negative = _mm_cmplt_epi16(x, _mm_setzero_si128());
/* Flip negative lanes. */
x = _mm_xor_si128(x, is_negative);
/* +1 to negative lanes, else +0. */
x = _mm_add_epi16(x, _mm_srli_epi16(is_negative, 15));
return x;
#endif
}
/* Bytewise c ? t : e. */
static __m128i if_then_else(__m128i c, __m128i t, __m128i e) {
#if PNG_INTEL_SSE_IMPLEMENTATION >= 3
return _mm_blendv_epi8(e,t,c);
#else
return _mm_or_si128(_mm_and_si128(c, t), _mm_andnot_si128(c, e));
#endif
}
#ifndef PNG_NO_INTEL_SSE_3BPP
void png_read_filter_row_paeth3_sse2(png_row_infop row_info, png_bytep row,
png_const_bytep prev)
{
/* Paeth tries to predict pixel d using the pixel to the left of it, a,
* and two pixels from the previous row, b and c:
* prev: c b
* row: a d
* The Paeth function predicts d to be whichever of a, b, or c is nearest to
* p=a+b-c.
*
* The first pixel has no left context, and so uses an Up filter, p = b.
* This works naturally with our main loop's p = a+b-c if we force a and c
* to zero.
* Here we zero b and d, which become c and a respectively at the start of
* the loop.
*/
png_debug(1, "in png_read_filter_row_paeth3_sse2");
const __m128i zero = _mm_setzero_si128();
__m128i c, b = zero,
a, d = zero;
int rb = row_info->rowbytes;
while (rb > 0) {
/* It's easiest to do this math (particularly, deal with pc) with 16-bit
* intermediates.
*/
c = b; b = _mm_unpacklo_epi8(load3(prev), zero);
a = d; d = _mm_unpacklo_epi8(load3(row ), zero);
/* (p-a) == (a+b-c - a) == (b-c) */
__m128i pa = _mm_sub_epi16(b,c);
/* (p-b) == (a+b-c - b) == (a-c) */
__m128i pb = _mm_sub_epi16(a,c);
/* (p-c) == (a+b-c - c) == (a+b-c-c) == (b-c)+(a-c) */
__m128i pc = _mm_add_epi16(pa,pb);
pa = abs_i16(pa); /* |p-a| */
pb = abs_i16(pb); /* |p-b| */
pc = abs_i16(pc); /* |p-c| */
__m128i smallest = _mm_min_epi16(pc, _mm_min_epi16(pa, pb));
/* Paeth breaks ties favoring a over b over c. */
__m128i nearest = if_then_else(_mm_cmpeq_epi16(smallest, pa), a,
if_then_else(_mm_cmpeq_epi16(smallest, pb), b,
c));
/* Note `_epi8`: we need addition to wrap modulo 255. */
d = _mm_add_epi8(d, nearest);
store3(row, _mm_packus_epi16(d,d));
prev += 3;
row += 3;
rb -= 3;
}
}
#endif
void png_read_filter_row_paeth4_sse2(png_row_infop row_info, png_bytep row,
png_const_bytep prev)
{
/* Paeth tries to predict pixel d using the pixel to the left of it, a,
* and two pixels from the previous row, b and c:
* prev: c b
* row: a d
* The Paeth function predicts d to be whichever of a, b, or c is nearest to
* p=a+b-c.
*
* The first pixel has no left context, and so uses an Up filter, p = b.
* This works naturally with our main loop's p = a+b-c if we force a and c
* to zero.
* Here we zero b and d, which become c and a respectively at the start of
* the loop.
*/
png_debug(1, "in png_read_filter_row_paeth4_sse2");
const __m128i zero = _mm_setzero_si128();
__m128i c, b = zero,
a, d = zero;
int rb = row_info->rowbytes;
while (rb > 0) {
/* It's easiest to do this math (particularly, deal with pc) with 16-bit
* intermediates.
*/
c = b; b = _mm_unpacklo_epi8(load4(prev), zero);
a = d; d = _mm_unpacklo_epi8(load4(row ), zero);
/* (p-a) == (a+b-c - a) == (b-c) */
__m128i pa = _mm_sub_epi16(b,c);
/* (p-b) == (a+b-c - b) == (a-c) */
__m128i pb = _mm_sub_epi16(a,c);
/* (p-c) == (a+b-c - c) == (a+b-c-c) == (b-c)+(a-c) */
__m128i pc = _mm_add_epi16(pa,pb);
pa = abs_i16(pa); /* |p-a| */
pb = abs_i16(pb); /* |p-b| */
pc = abs_i16(pc); /* |p-c| */
__m128i smallest = _mm_min_epi16(pc, _mm_min_epi16(pa, pb));
/* Paeth breaks ties favoring a over b over c. */
__m128i nearest = if_then_else(_mm_cmpeq_epi16(smallest, pa), a,
if_then_else(_mm_cmpeq_epi16(smallest, pb), b,
c));
/* Note `_epi8`: we need addition to wrap modulo 255. */
d = _mm_add_epi8(d, nearest);
store4(row, _mm_packus_epi16(d,d));
prev += 4;
row += 4;
rb -= 4;
}
}
#endif /* PNG_INTEL_SSE_IMPLEMENTATION > 0 */
#endif /* READ */

View File

@@ -1,56 +0,0 @@
/* intel_init.c - SSE2 optimized filter functions
*
* Copyright (c) 2016 Google, Inc.
* Written by Mike Klein and Matt Sarett
* Derived from arm/arm_init.c, which was
* Copyright (c) 2014,2016 Glenn Randers-Pehrson
*
* Last changed in libpng 1.6.22 [(PENDING RELEASE)]
*
* 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
#if PNG_INTEL_SSE_IMPLEMENTATION > 0
void
png_init_filter_functions_sse2(png_structp pp, unsigned int bpp)
{
/* The techniques used to implement each of these filters in SSE operate on
* one pixel at a time.
* So they generally speed up 3bpp images about 3x, 4bpp images about 4x.
* They can scale up to 6 and 8 bpp images and down to 2 bpp images,
* but they'd not likely have any benefit for 1bpp images.
* Most of these can be implemented using only MMX and 64-bit registers,
* but they end up a bit slower than using the equally-ubiquitous SSE2.
*/
png_debug(1, "in png_init_filter_functions_sse2");
if (bpp == 3)
{
#ifndef PNG_NO_INTEL_SSE_3BPP
pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub3_sse2;
pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg3_sse2;
pp->read_filter[PNG_FILTER_VALUE_PAETH-1] =
png_read_filter_row_paeth3_sse2;
#endif
}
else if (bpp == 4)
{
pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub4_sse2;
pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg4_sse2;
pp->read_filter[PNG_FILTER_VALUE_PAETH-1] =
png_read_filter_row_paeth4_sse2;
}
/* No need optimize PNG_FILTER_VALUE_UP. The compiler should
* autovectorize.
*/
}
#endif /* PNG_INTEL_SSE_IMPLEMENTATION > 0 */
#endif /* PNG_READ_SUPPORTED */

View File

@@ -1,106 +0,0 @@
diff --git a/configure.ac b/configure.ac
--- a/configure.ac 2016-02-22 17:24:25.000000000 -0600
+++ b/configure.ac 2016-02-22 17:30:36.949159871 -0600
@@ -1,10 +1,13 @@
# configure.ac
+# Copyright (c) 2016 Google, Inc.
+# Written by Mike Klein and Matt Sarett
+# Derived from the ARM supporting code in libpng/configure.ac, which was
# Copyright (c) 2004-2015 Glenn Randers-Pehrson
# Last changed in libpng 1.6.22 [(PENDING RELEASE)]
# This code is released under the libpng license.
# For conditions of distribution and use, see the disclaimer
# and license in png.h
dnl Process this file with autoconf to produce a configure script.
@@ -316,16 +319,50 @@ AC_ARG_ENABLE([arm-neon],
AM_CONDITIONAL([PNG_ARM_NEON],
[test "$enable_arm_neon" != 'no' &&
case "$host_cpu" in
arm*|aarch64*) :;;
*) test "$enable_arm_neon" != '';;
esac])
+# INTEL
+# =====
+#
+# INTEL SSE (SIMD) support.
+
+AC_ARG_ENABLE([intel-sse],
+ AS_HELP_STRING([[[--enable-intel-sse]]],
+ [Enable Intel SSE optimizations: =no/off, yes/on:]
+ [no/off: disable the optimizations;]
+ [yes/on: enable the optimizations.]
+ [If not specified: determined by the compiler.]),
+ [case "$enableval" in
+ no|off)
+ # disable the default enabling:
+ AC_DEFINE([PNG_INTEL_SSE_OPT], [0],
+ [Disable Intel SSE optimizations])
+ # Prevent inclusion of the assembler files below:
+ enable_intel_sse=no;;
+ yes|on)
+ AC_DEFINE([PNG_INTEL_SSE_OPT], [1],
+ [Enable Intel SSE optimizations]);;
+ *)
+ AC_MSG_ERROR([--enable-intel-sse=${enable_intel_sse}: invalid value])
+ esac])
+
+# Add Intel specific files to all builds where the host_cpu is Intel ('x86*')
+# or where Intel optimizations were explicitly requested (this allows a
+# fallback if a future host CPU does not match 'x86*')
+AM_CONDITIONAL([PNG_INTEL_SSE],
+ [test "$enable_intel_sse" != 'no' &&
+ case "$host_cpu" in
+ i?86|x86_64) :;;
+ *) test "$enable_intel_sse" != '';;
+ esac])
AC_MSG_NOTICE([[Extra options for compiler: $PNG_COPTS]])
# Config files, substituting as above
AC_CONFIG_FILES([Makefile libpng.pc:libpng.pc.in])
AC_CONFIG_FILES([libpng-config:libpng-config.in],
[chmod +x libpng-config])
AC_OUTPUT
diff --git a/Makefile.am b/Makefile.am
--- a/Makefile.am 2016-02-22 17:24:24.000000000 -0600
+++ b/Makefile.am 2016-02-22 17:32:18.387223996 -0600
@@ -1,10 +1,13 @@
# Makefile.am, the source file for Makefile.in (and hence Makefile), is
#
+# Copyright (c) 2016 Google, Inc.
+# Written by Mike Klein and Matt Sarett
+# Derived from the ARM supporting code in libpng/configure.ac, which was
# Copyright (c) 2004-2016 Glenn Randers-Pehrson
# Last changed in libpng 1.6.22 [(PENDING RELEASE)]
#
# This code is released under the libpng license.
# For conditions of distribution and use, see the disclaimer
# and license in png.h
PNGLIB_BASENAME= libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@
@@ -83,16 +86,20 @@ libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SO
pngset.c pngtrans.c pngwio.c pngwrite.c pngwtran.c pngwutil.c\
png.h pngconf.h pngdebug.h pnginfo.h pngpriv.h pngstruct.h pngusr.dfa
if PNG_ARM_NEON
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES += arm/arm_init.c\
arm/filter_neon.S arm/filter_neon_intrinsics.c
endif
+if PNG_INTEL_SSE
+libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES += contrib/intel/intel_init.c\
+ contrib/intel/filter_sse2_intrinsics.c
+endif
nodist_libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES = pnglibconf.h
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_LDFLAGS = -no-undefined -export-dynamic \
-version-number @PNGLIB_MAJOR@@PNGLIB_MINOR@:@PNGLIB_RELEASE@:0
if HAVE_LD_VERSION_SCRIPT
# Versioned symbols and restricted exports
if HAVE_SOLARIS_LD

View File

@@ -1,6 +1,6 @@
/* contrib/libtests/pngstest-errors.h
*
* BUILT USING: libpng version 1.6.19beta03 - September 25, 2015
* BUILT USING: libpng version 1.7.0beta66 - September 18, 2015
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
@@ -22,7 +22,7 @@ static png_uint_16 gpc_error[16/*in*/][16/*out*/][4/*a*/] =
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 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, 19, 1, 0 }, { 0, 0, 0, 0 }, { 0, 20, 1, 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 }
@@ -32,8 +32,8 @@ static png_uint_16 gpc_error[16/*in*/][16/*out*/][4/*a*/] =
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 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, 14, 13, 0 }, { 0, 15, 13, 0 }, { 0, 19, 1, 0 }, { 0, 0, 0, 0 },
{ 0, 832, 764, 0 }, { 0, 832, 764, 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 */
@@ -67,13 +67,13 @@ static png_uint_16 gpc_error[16/*in*/][16/*out*/][4/*a*/] =
{ 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 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, 13, 0 }, { 0, 0, 13, 0 }, { 0, 0, 8, 0 }, { 0, 0, 8, 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, 6, 8, 0 }, { 0, 7, 8, 0 }, { 0, 75, 8, 0 }, { 0, 9, 8, 0 },
{ 0, 585, 427, 0 }, { 0, 585, 427, 0 }, { 0, 717, 584, 0 }, { 0, 717, 584, 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 */
@@ -107,7 +107,7 @@ static png_uint_16 gpc_error_via_linear[16][4/*out*/][4] =
}, { /* 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 }
{ 0, 12, 14, 0 }, { 0, 180, 14, 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 */
@@ -123,7 +123,7 @@ static png_uint_16 gpc_error_via_linear[16][4/*out*/][4] =
}, { /* 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 }
{ 0, 4, 8, 0 }, { 0, 9, 8, 0 }, { 0, 9, 9, 0 }, { 0, 32, 9, 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 */
@@ -138,27 +138,27 @@ 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 }
{ 0, 0, 742, 0 }, { 0, 0, 742, 0 }, { 0, 0, 742, 0 }, { 0, 0, 742, 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 }
{ 0, 19, 6, 0 }, { 0, 255, 6, 25 }, { 0, 88, 6, 0 }, { 0, 255, 6, 25 },
{ 0, 1012, 911, 0 }, { 0, 16026, 911, 6425 }, { 0, 1012, 911, 0 }, { 0, 16026, 911, 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 }
{ 0, 17534, 18491, 0 }, { 0, 15998, 2824, 6425 }, { 0, 14103, 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, 74, 74, 0 }, { 0, 255, 74, 25 }, { 0, 100, 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, 181, 196, 0 }, { 0, 255, 61, 25 }, { 206, 192, 98, 0 }, { 0, 255, 98, 67 },
{ 0, 18141, 18137, 0 }, { 0, 17494, 17504, 6553 }, { 0, 24979, 24992, 0 }, { 0, 49172, 24992, 17347 }
}
};

View File

@@ -20,6 +20,7 @@
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <limits.h>
#include <time.h>
@@ -36,6 +37,15 @@
# include "../../png.h"
#endif
/* The following is to support direct compilation of this file as C++ */
#ifdef __cplusplus
# define voidcast(type, value) static_cast<type>(value)
#else
# define voidcast(type, value) (value)
#endif /* __cplusplus */
#if ((defined(PNG_SEQUENTIAL_READ_SUPPORTED)) && defined(PNG_STDIO_SUPPORTED)\
&& defined(PNG_EASY_ACCESS_SUPPORTED) && defined(PNG_INFO_IMAGE_SUPPORTED))
typedef struct
{
FILE *input;
@@ -80,8 +90,8 @@ static void read_by_row(png_structp png_ptr, png_infop info_ptr,
{
png_size_t rowbytes = png_get_rowbytes(png_ptr, info_ptr);
row = malloc(rowbytes);
display = malloc(rowbytes);
row = voidcast(png_bytep,malloc(rowbytes));
display = voidcast(png_bytep,malloc(rowbytes));
if (row == NULL || display == NULL)
png_error(png_ptr, "OOM allocating row buffers");
@@ -137,7 +147,9 @@ static int read_png(FILE *fp, png_int_32 transforms, FILE *write_file)
return 0;
}
png_set_benign_errors(png_ptr, 1/*allowed*/);
# ifdef PNG_BENIGN_ERRORS_SUPPORTED
png_set_benign_errors(png_ptr, 1/*allowed*/);
# endif
png_init_io(png_ptr, fp);
info_ptr = png_create_info_struct(png_ptr);
@@ -268,6 +280,9 @@ static int add_one_file(FILE *fp, char *name)
ok = 1; /* read ok */
}
else
fprintf(stderr, "%s: file not added\n", name);
(void)fclose(ip);
/* An error in the output is fatal; exit immediately: */
@@ -298,10 +313,9 @@ static int add_one_file(FILE *fp, char *name)
/* file open error: */
perror(name);
fprintf(stderr, "%s: open failed\n", name);
return 0;
}
return 1;
return 0; /* file not added */
}
static void
@@ -321,6 +335,7 @@ usage(FILE *fp)
" --by-image: read by image with png_read_png\n"
" --<transform>: implies by-image, use PNG_TRANSFORM_<transform>\n"
" Otherwise: read by row using png_read_row (to a single row buffer)\n"
/* ISO C90 string length max 509 */);fprintf(stderr,
"{files}:\n"
" PNG files to copy into the assembly and time. Invalid files are skipped\n"
" with appropriate error messages. If no files are given the list of files\n"
@@ -379,6 +394,12 @@ int main(int argc, char **argv)
argv[3]);
exit(99);
}
#ifdef __COVERITY__
else
{
nfiles &= PNG_UINT_31_MAX;
}
#endif
argv += 3;
argc -= 3;
@@ -386,7 +407,39 @@ int main(int argc, char **argv)
else /* Else use a temporary file */
{
#ifndef __COVERITY__
fp = tmpfile();
#else
/* Experimental. Coverity says tmpfile() is insecure because it
* generates predictable names.
*
* It is possible to satisfy Coverity by using mkstemp(); however,
* any platform supporting mkstemp() undoubtedly has a secure tmpfile()
* implementation as well, and doesn't need the fix. Note that
* the fix won't work on platforms that don't support mkstemp().
*
* https://www.securecoding.cert.org/confluence/display/c/
* FIO21-C.+Do+not+create+temporary+files+in+shared+directories
* says that most historic implementations of tmpfile() provide
* only a limited number of possible temporary file names
* (usually 26) before file names are recycled. That article also
* provides a secure solution that unfortunately depends upon mkstemp().
*/
char tmpfile[] = "timepng-XXXXXX";
int filedes;
umask(0177);
filedes = mkstemp(tmpfile);
if (filedes < 0)
fp = NULL;
else
{
fp = fdopen(filedes,"w+");
/* Hide the filename immediately and ensure that the file does
* not exist after the program ends
*/
(void) unlink(tmpfile);
}
#endif
if (fp == NULL)
{
@@ -452,7 +505,13 @@ int main(int argc, char **argv)
for (i=1; i<argc; ++i)
{
if (add_one_file(fp, argv[i]))
if (nfiles == INT_MAX)
{
fprintf(stderr, "%s: skipped, too many files\n", argv[i]);
break;
}
else if (add_one_file(fp, argv[i]))
++nfiles;
}
}
@@ -468,7 +527,13 @@ int main(int argc, char **argv)
if (filename[len-1] == '\n')
{
filename[len-1] = 0;
if (add_one_file(fp, filename))
if (nfiles == INT_MAX)
{
fprintf(stderr, "%s: skipped, too many files\n", filename);
break;
}
else if (add_one_file(fp, filename))
++nfiles;
}
@@ -526,3 +591,6 @@ int main(int argc, char **argv)
/* Exit code 0 on success. */
return ok == 0;
}
#else /* !sufficient support */
int main(void) { return 77; }
#endif /* !sufficient support */

View File

@@ -1,9 +1,9 @@
/* arm_init.c - NEON optimised filter functions
*
* Copyright (c) 2014,2016 Glenn Randers-Pehrson
* Copyright (c) 2014 Glenn Randers-Pehrson
* Written by Mans Rullgard, 2011.
* Last changed in libpng 1.6.22 [(PENDING RELEASE)]
* 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
@@ -14,7 +14,8 @@
*/
#define _POSIX_SOURCE 1
#include "../pngpriv.h"
#include "../../pngpriv.h"
#define PNG_SRC_FILE PNG_SRC_FILE_arm_arm_init
#ifdef PNG_READ_SUPPORTED
@@ -66,7 +67,6 @@ png_init_filter_functions_neon(png_structp pp, unsigned int bpp)
* wrong order of the 'ON' and 'default' cases. UNSET now defaults to OFF,
* as documented in png.h
*/
png_debug(1, "in png_init_filter_functions_neon");
#ifdef PNG_ARM_NEON_API_SUPPORTED
switch ((pp->options >> PNG_ARM_NEON) & 3)
{

View File

@@ -0,0 +1,10 @@
# To just this extension either copy the 'sinclude' line and the setting of
# libpng_automake_extensions into contrib/extensions.am or link/copy the whole
# file there. Do the same with the associated file extensions.am
#
# Include the ARM NEON extension:
sinclude([contrib/neon/neon.ac])
#
# If any of the extensions require automake support (this is likely) automake
# must include the file contrib/extensions.am
libpng_automake_extensions="yes"

View File

@@ -0,0 +1,5 @@
# To just this extension either copy the 'include' line into
# contrib/extensions.am or link/copy the whole file there. Do the same with the
# associated file extensions.ac
# Include the ARM NEON extension:
include %reldir%/neon/neon.am

View File

@@ -3,7 +3,7 @@
*
* Copyright (c) 2014 Glenn Randers-Pehrson
* Written by Mans Rullgard, 2011.
* Last changed in libpng 1.6.16 [December 22, 2014]
* Last changed in libpng 1.6.16 [(PENDING RELEASE)]
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
@@ -14,7 +14,7 @@
* definitions (or not) of PNG_ARM_NEON_OPT and PNG_ARM_NEON_IMPLEMENTATION.
*/
#define PNG_VERSION_INFO_ONLY
#include "../pngpriv.h"
#include "../../pngpriv.h"
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits /* mark stack as non-executable */

View File

@@ -1,18 +1,19 @@
/* filter_neon_intrinsics.c - NEON optimised filter functions
*
* Copyright (c) 2014,2016 Glenn Randers-Pehrson
* 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.22 [(PENDING RELEASE)]
* 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"
#include "../../pngpriv.h"
#define PNG_SRC_FILE PNG_SRC_FILE_arm_filter_neon_intrinsics
#ifdef PNG_READ_SUPPORTED
@@ -40,15 +41,13 @@
#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_read_filter_row_up_neon(png_alloc_size_t rowbytes, unsigned int bpp,
png_bytep row, png_const_bytep prev_row)
{
png_bytep rp = row;
png_bytep rp_stop = row + row_info->rowbytes;
png_bytep rp_stop = row + rowbytes;
png_const_bytep pp = prev_row;
png_debug(1, "in png_read_filter_row_up_neon");
for (; rp < rp_stop; rp += 16, pp += 16)
{
uint8x16_t qrp, qpp;
@@ -58,14 +57,15 @@ png_read_filter_row_up_neon(png_row_infop row_info, png_bytep row,
qrp = vaddq_u8(qrp, qpp);
vst1q_u8(rp, qrp);
}
PNG_UNUSED(bpp)
}
void
png_read_filter_row_sub3_neon(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
png_read_filter_row_sub3_neon(png_alloc_size_t rowbytes, unsigned int bpp, png_bytep row, png_const_bytep prev_row)
{
png_bytep rp = row;
png_bytep rp_stop = row + row_info->rowbytes;
png_bytep rp_stop = row + rowbytes;
uint8x16_t vtmp = vld1q_u8(rp);
uint8x8x2_t *vrpt = png_ptr(uint8x8x2_t, &vtmp);
@@ -74,8 +74,6 @@ png_read_filter_row_sub3_neon(png_row_infop row_info, png_bytep row,
uint8x8x4_t vdest;
vdest.val[3] = vdup_n_u8(0);
png_debug(1, "in png_read_filter_row_sub3_neon");
for (; rp < rp_stop;)
{
uint8x8_t vtmp1, vtmp2;
@@ -104,21 +102,20 @@ png_read_filter_row_sub3_neon(png_row_infop row_info, png_bytep row,
rp += 3;
}
PNG_UNUSED(bpp)
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_read_filter_row_sub4_neon(png_alloc_size_t rowbytes, unsigned int bpp,
png_bytep row, png_const_bytep prev_row)
{
png_bytep rp = row;
png_bytep rp_stop = row + row_info->rowbytes;
png_bytep rp_stop = row + rowbytes;
uint8x8x4_t vdest;
vdest.val[3] = vdup_n_u8(0);
png_debug(1, "in png_read_filter_row_sub4_neon");
for (; rp < rp_stop; rp += 16)
{
uint32x2x4_t vtmp = vld4_u32(png_ptr(uint32_t,rp));
@@ -133,16 +130,17 @@ png_read_filter_row_sub4_neon(png_row_infop row_info, png_bytep row,
vst4_lane_u32(png_ptr(uint32_t,rp), png_ldr(uint32x2x4_t,&vdest), 0);
}
PNG_UNUSED(bpp)
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_read_filter_row_avg3_neon(png_alloc_size_t rowbytes, unsigned int bpp,
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;
png_bytep rp_stop = row + rowbytes;
uint8x16_t vtmp;
uint8x8x2_t *vrpt;
@@ -154,8 +152,6 @@ png_read_filter_row_avg3_neon(png_row_infop row_info, png_bytep row,
vrpt = png_ptr(uint8x8x2_t,&vtmp);
vrp = *vrpt;
png_debug(1, "in png_read_filter_row_avg3_neon");
for (; rp < rp_stop; pp += 12)
{
uint8x8_t vtmp1, vtmp2, vtmp3;
@@ -202,21 +198,21 @@ png_read_filter_row_avg3_neon(png_row_infop row_info, png_bytep row,
vst1_lane_u32(png_ptr(uint32_t,rp), png_ldr(uint32x2_t,&vdest.val[3]), 0);
rp += 3;
}
PNG_UNUSED(bpp)
}
void
png_read_filter_row_avg4_neon(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
png_read_filter_row_avg4_neon(png_alloc_size_t rowbytes, unsigned int bpp,
png_bytep row, png_const_bytep prev_row)
{
png_bytep rp = row;
png_bytep rp_stop = row + row_info->rowbytes;
png_bytep rp_stop = row + rowbytes;
png_const_bytep pp = prev_row;
uint8x8x4_t vdest;
vdest.val[3] = vdup_n_u8(0);
png_debug(1, "in png_read_filter_row_avg4_neon");
for (; rp < rp_stop; rp += 16, pp += 16)
{
uint32x2x4_t vtmp;
@@ -242,6 +238,8 @@ png_read_filter_row_avg4_neon(png_row_infop row_info, png_bytep row,
vst4_lane_u32(png_ptr(uint32_t,rp), png_ldr(uint32x2x4_t,&vdest), 0);
}
PNG_UNUSED(bpp)
}
static uint8x8_t
@@ -272,12 +270,12 @@ paeth(uint8x8_t a, uint8x8_t b, uint8x8_t c)
}
void
png_read_filter_row_paeth3_neon(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
png_read_filter_row_paeth3_neon(png_alloc_size_t rowbytes, unsigned int bpp,
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;
png_bytep rp_stop = row + rowbytes;
uint8x16_t vtmp;
uint8x8x2_t *vrpt;
@@ -290,8 +288,6 @@ png_read_filter_row_paeth3_neon(png_row_infop row_info, png_bytep row,
vrpt = png_ptr(uint8x8x2_t,&vtmp);
vrp = *vrpt;
png_debug(1, "in png_read_filter_row_paeth3_neon");
for (; rp < rp_stop; pp += 12)
{
uint8x8x2_t *vppt;
@@ -337,22 +333,22 @@ png_read_filter_row_paeth3_neon(png_row_infop row_info, png_bytep row,
vst1_lane_u32(png_ptr(uint32_t,rp), png_ldr(uint32x2_t,&vdest.val[3]), 0);
rp += 3;
}
PNG_UNUSED(bpp)
}
void
png_read_filter_row_paeth4_neon(png_row_infop row_info, png_bytep row,
png_const_bytep prev_row)
png_read_filter_row_paeth4_neon(png_alloc_size_t rowbytes, unsigned int bpp,
png_bytep row, png_const_bytep prev_row)
{
png_bytep rp = row;
png_bytep rp_stop = row + row_info->rowbytes;
png_bytep rp_stop = row + rowbytes;
png_const_bytep pp = prev_row;
uint8x8_t vlast = vdup_n_u8(0);
uint8x8x4_t vdest;
vdest.val[3] = vdup_n_u8(0);
png_debug(1, "in png_read_filter_row_paeth4_neon");
for (; rp < rp_stop; rp += 16, pp += 16)
{
uint32x2x4_t vtmp;
@@ -380,8 +376,9 @@ png_read_filter_row_paeth4_neon(png_row_infop row_info, png_bytep row,
vst4_lane_u32(png_ptr(uint32_t,rp), png_ldr(uint32x2x4_t,&vdest), 0);
}
}
PNG_UNUSED(bpp)
}
#endif /* PNG_ARM_NEON_OPT > 0 */
#endif /* PNG_ARM_NEON_IMPLEMENTATION == 1 (intrinsics) */
#endif /* READ */

47
contrib/neon/neon.ac Normal file
View File

@@ -0,0 +1,47 @@
# LIBPNG EXTENSION: NEON
#
# ARM NEON (SIMD) support.
#
# This file contains configure.ac additions to libpng configure to enable
# building of the ARM NEON filter optimizations.
#
AC_ARG_ENABLE([arm-neon],
AS_HELP_STRING([[[--enable-arm-neon]]],
[Enable ARM NEON optimizations: =no/off, check, api, yes/on:]
[no/off: disable the optimizations; check: use internal checking code]
[(deprecated and poorly supported); api: disable by default, enable by]
[a call to png_set_option; yes/on: turn on unconditionally.]
[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])

27
contrib/neon/neon.am Normal file
View File

@@ -0,0 +1,27 @@
# contrib/neon/neon.am
#
# This is an automake fragment included by the top-level Makefile.am if
# contrib/neon/neon.ac is included in configure
#
# It builds the source files in this directory into ARM hardware support for
# libpng.
#
if PNG_ARM_NEON
libpng@PNGLIB_MAJOR@@PNGLIB_MINOR@_la_SOURCES += %D%/arm_init.c\
%D%/filter_neon.S %D%/filter_neon_intrinsics.c
DFA_EXTENSION += ${srcdir}/%D%/neon.dfa
# This causes pngpriv.h to include the named header. It is VERY important to
# understand that this MUST be defined and the header MUST define internal
# 'extern' functions with PNG_INTERNAL_FUNCTION. This allows vendors to use
# static library builds of libpng without clashing with the installed system
# libpng; see the libpng-prefix option in configure.ac The value of this
# #define is included in pnglibconf.h
#
# NOTE: you must include the double quotes in the value and you must therefore
# support the whole thing with single quotes. If you need to use <> for a
# header be aware that if you miss out the single quotes you will create a
# random file.
AM_CPPFLAGS += -DPNG_EXTENSION_HEADER='"%D%/neon.h"'
endif

41
contrib/neon/neon.dfa Normal file
View File

@@ -0,0 +1,41 @@
# contrib/arm/neon.dfa
#
# This is a dfa fragment that is added to DFA_HARDWARE in Makefile.am and
# consequently is inserted after scripts/pnglibconf.dfa to define extra,
# hardware, options.
#
# The following are required in any fragment to record the copyright holder of
# the *changes* and the appropriate email for bug reports. Note that the
# copyright here is just for the specific configuration; additional files may
# have additional and/or different copyrights.
#
# Later settings (e.g. in user.dfa) will override these settings.
#
setting USER_PRIVATEBUILD default "John Bowler"
setting USER_BUG_REPORTS default "jbowler@acm.org"
#
# These options are specific to the ARM NEON hardware optimizations. At present
# these optimizations depend on GCC specific pre-processing of an assembler (.S)
# file so they probably won't work with other compilers.
#
# ARM_NEON_OPT: unset: check at compile time (__ARM_NEON__ must be defined by
# the compiler, typically as a result of specifying
# CC="gcc -mfpu=neon".)
# 0: disable (even if the CPU has a NEON FPU.)
# 1: check at run time (via ARM_NEON_{API,CHECK})
# 2: switch on unconditionally (inadvisable - instead pass
# -mfpu=neon to GCC in CC)
# When building libpng avoid using any setting other than '0'; '1' is
# set automatically when either 'API' or 'CHECK' are configured in,
# '2' should not be necessary as -mfpu=neon will achieve the same
# effect as well as applying NEON optimizations to the rest of the
# libpng code.
# NOTE: any setting other than '0' requires ALIGNED_MEMORY
# ARM_NEON_API: (PNG_ARM_NEON == 1) allow the optimization to be switched on
# with png_set_option
# ARM_NEON_CHECK: (PNG_ARM_NEON == 1) compile a run-time check to see if Neon
# extensions are supported. This is poorly supported and
# deprecated - use the png_set_option API.
setting ARM_NEON_OPT
option ARM_NEON_API disabled enables SET_OPTION sets ARM_NEON_OPT 1
option ARM_NEON_CHECK disabled sets ARM_NEON_OPT 1

124
contrib/neon/neon.h Normal file
View File

@@ -0,0 +1,124 @@
/* Compile time options.
* =====================
* In a multi-arch build the compiler may compile the code several times for the
* same object module, producing different binaries for different architectures.
* When this happens configure-time setting of the target host options cannot be
* done. An example is iOS vs Android compilation of ARM NEON support.
*
* NOTE: symbol prefixing does not pass $(CFLAGS) to the preprocessor, because
* this is not possible with certain compilers (Oracle SUN OS CC), as a result
* it is necessary to ensure that all extern functions that *might* be used
* regardless of $(CFLAGS) get declared in this file. The test on __ARM_NEON
* below is one example of this behavior because it is controlled by the
* presence or not of -mfpu=neon on the GCC command line, it is possible to do
* this in $(CC), e.g. "CC=gcc -mfpu=neon", but people who build libpng rarely
* do this.
*/
#ifndef PNG_ARM_NEON_OPT
/* ARM NEON optimizations are being controlled by the compiler settings,
* typically the target FPU. If the FPU supports NEON instructions then the
* compiler will define __ARM_NEON and we can rely unconditionally on NEON
* instructions not crashing, otherwise we must disable use of NEON
* instructions.
*
* NOTE: at present these optimizations depend on 'ALIGNED_MEMORY', so they
* can only be turned on automatically if that is supported too. If
* PNG_ARM_NEON_OPT is set in CPPFLAGS (to >0) then arm/arm_init.c will fail
* to compile with an appropriate #error if ALIGNED_MEMORY has been turned
* off.
*
* Note that older versions of GCC defined __ARM_NEON__; this is no longer
* supported. Also 32-bit ARM versions of GCC required the NEON FPU mode to
* be turned on explicitly on the command line. If this is not done (on
* 32-bit ARM) NEON code will not be included.
*
* To disable ARM_NEON optimizations entirely, and skip compiling the
* associated assembler code, pass --enable-arm-neon=no to configure
* or put -DPNG_ARM_NEON_OPT=0 in CPPFLAGS.
*/
# if defined(__ARM_NEON) && defined(PNG_ALIGNED_MEMORY_SUPPORTED)
# define PNG_ARM_NEON_OPT 2
# else
# define PNG_ARM_NEON_OPT 0
# endif
#endif
#if PNG_ARM_NEON_OPT > 0
/* NEON optimizations are to be at least considered by libpng, so enable the
* callbacks to do this.
*/
# define PNG_FILTER_OPTIMIZATIONS png_init_filter_functions_neon
/* By default the 'intrinsics' code in arm/filter_neon_intrinsics.c is used
* if possible - if __ARM_NEON is set and the compiler version is not known
* to be broken. This is controlled by PNG_ARM_NEON_IMPLEMENTATION which can
* be:
*
* 1 The intrinsics code (the default with __ARM_NEON)
* 2 The hand coded assembler (the default without __ARM_NEON)
*
* It is possible to set PNG_ARM_NEON_IMPLEMENTATION in CPPFLAGS, however
* this is *NOT* supported and may cease to work even after a minor revision
* to libpng. It *is* valid to do this for testing purposes, e.g. speed
* testing or a new compiler, but the results should be communicated to the
* libpng implementation list for incorporation in the next minor release.
*/
# ifndef PNG_ARM_NEON_IMPLEMENTATION
# ifdef __ARM_NEON
# if defined(__clang__)
/* At present it is unknown by the libpng developers which versions
* of clang support the intrinsics, however some or perhaps all
* versions do not work with the assembler so this may be
* irrelevant, so just use the default (do nothing here.)
*/
# elif defined(__GNUC__)
/* GCC 4.5.4 NEON support is known to be broken. 4.6.3 is known to
* work, so if this *is* GCC, or G++, look for a version >4.5
*/
# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 6)
# define PNG_ARM_NEON_IMPLEMENTATION 2
# endif /* no GNUC support */
# endif /* __GNUC__ */
# else /* !defined __ARM_NEON */
/* The 'intrinsics' code simply won't compile without compiler support
* and that support switches on __ARM_NEON, so use the assembler:
*/
# define PNG_ARM_NEON_IMPLEMENTATION 2
# endif /* __ARM_NEON */
# endif /* !defined PNG_ARM_NEON_IMPLEMENTATION */
# ifndef PNG_ARM_NEON_IMPLEMENTATION
/* Use the intrinsics code by default. */
# define PNG_ARM_NEON_IMPLEMENTATION 1
# endif
#endif /* PNG_ARM_NEON_OPT > 0 */
#ifdef PNG_SET_OPTION_SUPPORTED
#ifdef PNG_ARM_NEON_API_SUPPORTED
# define PNG_ARM_NEON 0 /* HARDWARE: ARM Neon SIMD instructions supported */
#endif
#endif /* SET_OPTION */
#if PNG_ARM_NEON_OPT > 0
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_up_neon,
(png_alloc_size_t row_bytes, unsigned int bpp, png_bytep row,
png_const_bytep prev_row),PNG_EMPTY);
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_sub3_neon,
(png_alloc_size_t row_bytes, unsigned int bpp, png_bytep row,
png_const_bytep prev_row),PNG_EMPTY);
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_sub4_neon,
(png_alloc_size_t row_bytes, unsigned int bpp, png_bytep row,
png_const_bytep prev_row),PNG_EMPTY);
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_avg3_neon,
(png_alloc_size_t row_bytes, unsigned int bpp, png_bytep row,
png_const_bytep prev_row),PNG_EMPTY);
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_avg4_neon,
(png_alloc_size_t row_bytes, unsigned int bpp, png_bytep row,
png_const_bytep prev_row),PNG_EMPTY);
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth3_neon,
(png_alloc_size_t row_bytes, unsigned int bpp, png_bytep row,
png_const_bytep prev_row),PNG_EMPTY);
PNG_INTERNAL_FUNCTION(void,png_read_filter_row_paeth4_neon,
(png_alloc_size_t row_bytes, unsigned int bpp, png_bytep row,
png_const_bytep prev_row),PNG_EMPTY);
#endif

View File

@@ -56,7 +56,7 @@ PNGSRCS=png$(C) pngerror$(C) pngget$(C) pngmem$(C) \
pngset$(C) pngtrans$(C)
# Standard headers
PNGH =png.h pngconf.h pngdebug.h pnginfo.h pngpriv.h pngstruct.h
PNGH =png.h pngconf.h pngdebug.h pnginfo.h pngpriv.h pngstruct.h pngchunk.h
# Machine generated headers
PNGCONF=pnglibconf.h

View File

@@ -36,5 +36,7 @@ option FLOATING_ARITHMETIC off
option SETJMP on
option STDIO on
option READ_EXPAND on
option READ_IMAGE on
option READ_INTERLACING on
option READ_STRIP_16_TO_8 on
option USER_LIMITS on

View File

@@ -18,6 +18,7 @@
* affect the API (so are not recorded in pnglibconf.h)
*/
#define PNG_RELEASE_BUILD 1
#define PNG_ALIGN_TYPE PNG_ALIGN_NONE
#endif /* MINRDPNGCONF_H */

View File

@@ -56,7 +56,7 @@ PNGSRCS=png$(C) pngerror$(C) pngget$(C) pngmem$(C) \
pngwtran$(C) pngwutil$(C)
# Standard headers
PNGH =png.h pngconf.h pngdebug.h pnginfo.h pngpriv.h pngstruct.h
PNGH =png.h pngconf.h pngdebug.h pnginfo.h pngpriv.h pngstruct.h pngchunk.h
# Machine generated headers
PNGCONF=pnglibconf.h

View File

@@ -18,6 +18,7 @@
* affect the API (so are not recorded in pnglibconf.h)
*/
#define PNG_RELEASE_BUILD 1
#define PNG_ALIGN_TYPE PNG_ALIGN_NONE
#endif /* MINWRPNGCONF_H */

View File

@@ -72,7 +72,7 @@ PNGSRCS=png$(C) pngerror$(C) pngget$(C) pngmem$(C) \
pngset$(C) pngtrans$(C)
# Standard headers
PNGH =png.h pngconf.h pngdebug.h pnginfo.h pngpriv.h pngstruct.h
PNGH =png.h pngconf.h pngdebug.h pnginfo.h pngpriv.h pngstruct.h pngchunk.h
# Machine generated headers
PNGCONF=pnglibconf.h

View File

@@ -36,5 +36,6 @@ option STDIO on
option READ_bKGD on
option READ_GAMMA on
option READ_EXPAND on
option READ_INTERLACING on
option READ_STRIP_16_TO_8 on
option READ_GRAY_TO_RGB on

View File

@@ -18,6 +18,7 @@
* affect the API (so are not recorded in pnglibconf.h)
*/
#define PNG_RELEASE_BUILD 1
#define PNG_ALIGN_TYPE PNG_ALIGN_NONE
#endif /* MINPRDPNGCONF_H */

View File

@@ -8,9 +8,9 @@ LD=$(CC)
RM=rm -f
#PNGPATH = /usr/local
#PNGINC = -I$(PNGPATH)/include/libpng16
#PNGLIB = -L$(PNGPATH)/lib -lpng16
#PNGLIBS = $(PNGPATH)/lib/libpng16.a
#PNGINC = -I$(PNGPATH)/include/libpng17
#PNGLIB = -L$(PNGPATH)/lib -lpng17
#PNGLIBS = $(PNGPATH)/lib/libpng17.a
PNGINC = -I../..
PNGLIB = -L../.. -lpng
PNGLIBS = ../../libpng.a
@@ -23,8 +23,7 @@ ZINC = -I../../../zlib
ZLIB = -L../../../zlib -lz
ZLIBS = ../../../zlib/libz.a
CPPFLAGS=$(PNGINC) $(ZINC)
CFLAGS=
CFLAGS=$(PNGINC) $(ZINC)
LDLIBS=$(PNGLIB) $(ZLIB)
LDLIBSS=$(PNGLIBS) $(ZLIBS)
C=.c
@@ -38,7 +37,7 @@ E=
all: png2pnm$(E) pnm2png$(E) png2pnm-static$(E) pnm2png-static$(E)
png2pnm$(O): png2pnm$(C)
$(CC) -c $(CPPFLAGS) $(CFLAGS) png2pnm$(C)
$(CC) -c $(CFLAGS) png2pnm$(C)
png2pnm$(E): png2pnm$(O)
$(LD) $(LDFLAGS) -o png2pnm$(E) png2pnm$(O) $(LDLIBS) -lm
@@ -47,7 +46,7 @@ png2pnm-static$(E): png2pnm$(O)
$(LD) $(LDFLAGS) -o png2pnm-static$(E) png2pnm$(O) $(LDLIBSS) -lm
pnm2png$(O): pnm2png$(C)
$(CC) -c $(CPPFLAGS) $(CFLAGS) pnm2png$(C)
$(CC) -c $(CFLAGS) pnm2png$(C)
pnm2png$(E): pnm2png$(O)
$(LD) $(LDFLAGS) -o pnm2png$(E) pnm2png$(O) $(LDLIBS) -lm

View File

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

View File

@@ -52,8 +52,7 @@
int main (int argc, char *argv[]);
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
@@ -86,8 +85,7 @@ int main(int argc, char *argv[])
if ((fp_al = fopen (argv[argi], "wb")) == NULL)
{
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);
}
break;
@@ -178,11 +176,9 @@ void usage()
fprintf (stderr, "Usage: png2pnm [options] <file>.png [<file>.pnm]\n");
fprintf (stderr, " or: ... | png2pnm [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,
" -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");
}
@@ -190,8 +186,7 @@ void usage()
* png2pnm
*/
BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file,
volatile BOOL raw, BOOL alpha)
BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file, BOOL raw, BOOL alpha)
{
png_struct *png_ptr = NULL;
png_info *info_ptr = NULL;
@@ -223,7 +218,7 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file,
/* create png and info structures */
png_ptr = png_create_read_struct (png_get_libpng_ver(NULL),
png_ptr = png_create_read_struct (PNG_LIBPNG_VER_STRING,
NULL, NULL, NULL);
if (!png_ptr)
return FALSE; /* out of memory */
@@ -266,7 +261,7 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file,
png_set_expand (png_ptr);
#ifdef NJET
/* downgrade 16-bit images to 8-bit */
/* downgrade 16-bit images to 8 bit */
if (bit_depth == 16)
png_set_strip_16 (png_ptr);
/* transform grayscale images into full-color */
@@ -320,14 +315,12 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file,
/* row_bytes is the width x number of channels x (bit-depth / 8) */
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);
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);
free (png_pixels);
@@ -336,7 +329,7 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file,
}
/* set the individual row_pointers to point at the correct offsets */
for (i = 0; i < ((int) height); i++)
for (i = 0; i < (height); i++)
row_pointers[i] = png_pixels + i * row_bytes;
/* now we can go ahead and just read the whole image */
@@ -379,9 +372,9 @@ BOOL png2pnm (FILE *png_file, FILE *pnm_file, FILE *alpha_file,
/* write data to PNM file */
pix_ptr = png_pixels;
for (row = 0; row < (int) height; row++)
for (row = 0; row < height; row++)
{
for (col = 0; col < (int) width; col++)
for (col = 0; col < width; col++)
{
for (i = 0; i < (channels - alpha_present); i++)
{

View File

@@ -1,6 +1,6 @@
/*
* pnm2png.c --- conversion from PBM/PGM/PPM-file to PNG-file
* copyright (C) 1999 by Willem van Schaik <willem@schaik.com>
* copyright (C) 1999,2015 by Willem van Schaik <willem@schaik.com>
*
* version 1.0 - 1999.10.15 - First version.
* version 1.1 - 2015.07.29 - Fixed leaks (Glenn Randers-Pehrson)

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 500 B

View File

@@ -15,10 +15,22 @@
# ones that extend the code-coverage of libpng from the existing test files in
# contrib/pngsuite.
test -n "$MAKEPNG" || MAKEPNG=./makepng
if test "$1" = "-v"
then
verbose=1
shift
else
verbose=
fi
what="$1"
shift
cmdline="$@"
opts=
mp(){
${MAKEPNG} $opts $1 "$3" "$4" "$3-$4$2.png"
test -n "$verbose" &&
echo ${MAKEPNG} $opts $cmdline $1 "$3" "$4" "$3-$4$2.png"
${MAKEPNG} $opts $cmdline $1 "$3" "$4" "$3-$4$2.png"
}
mpg(){
@@ -39,7 +51,7 @@ mptrans(){
fi
}
case "$1" in
case "$what" in
--small)
opts="--small";;&
@@ -72,19 +84,8 @@ case "$1" in
done;;
--coverage)
# Comments below indicate cases known to be required and not duplicated
# in other (required) cases; the aim is to get a minimal set that gives
# the maxium code coverage.
mpg none gray-alpha 8 # required: code coverage, sRGB opaque component
mpg none palette 8 # required: basic palette read
mpg 1.8 gray 2 # required: tests gamma threshold code
mpg 1.8 palette 2 # required: code coverage
mpg 1.8 palette 4 # required: code coverage
mpg 1.8 palette 8 # error limits only
mpg linear palette 8 # error limits only
mpg linear rgb-alpha 16 # error limits only
mpg sRGB palette 1 # required: code coverage
mpg sRGB rgb-alpha 16 # required: code coverage: pngread.c:2422 untested
# Extra images made to improve code coverage:
${MAKEPNG} --insert sBIT 1 --tRNS gray 2 gray-2-sBIT-tRNS.png
:;;
*)

437
contrib/tools/chunkhash.c Normal file
View File

@@ -0,0 +1,437 @@
/* chunkhash.c -- build a perfect hash code for the chunk names on stdin.
*
* Last changed in libpng 1.7.0 [(PENDING RELEASE)]
*
* 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.
*
* Feed this program all the known chunks that libpng must recognize. It will
* generate an appropriate hash key for the macro in pngpriv.h To generate the
* list of chunks currently defined in png.h do this:
*
* sed -n -e 's/^#define png_\(....\) PNG_U32.*$/\1/p' png.h
*
* An alternative to using this program is to pipe the output of the above
* through gperf, however the code generated by perf is somewhat more verbose
* and it doesn't generate as good a result (however it's a heck of a lot faster
* than this program!)
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <png.h> /* for the libpng types for this platform */
/* The machine generated file is checked in, so this works and it obtains the
* definition of the PNG_CHUNK_HASH macro. To change this definition only ever
* alter the strings below!
*/
#include "chunkhash.h"
/* The best_ variables are local variables defined in the functions below. When
* used in libpng code, however, they are just constants.
*/
#define PNG_CHUNK_HASH_MASK best_mask
#define PNG_CHUNK_HASH_C0 best_c[0]
#define PNG_CHUNK_HASH_C1 best_c[1]
#define PNG_CHUNK_HASH_C2 best_c[2]
#define PNG_CHUNK_HASH_C3 best_c[3]
/* These strings contain the C text to copy into the new version of
* contrib/tools/chunkhash.c
*/
static const char *strings[] = {
"/* chunkhash.h -- a perfect hash code for the chunk names in png.h",
" *",
" * Last changed in libpng 1.7.0 [(PENDING RELEASE)]",
" *",
" * THIS IS A MACHINE GENERATED FILE. See contrib/tools/chunkhash.c for",
" * copyright and other information.",
" *",
" * USAGE: To include the PNG_CHUNK_HASH macro and associated definitions:",
" *",
" * #define PNG_CHUNKHASH_DEFS",
" * #include \"contrib/tools/chunkhash.h\"",
" *",
" * To define the png_chunk_hash array used by the macro:",
" *",
" * #define PNG_CHUNKHASH_CODE",
" * #include \"contrib/tools/chunkhash.h\"",
" *",
" * One or both of the defines must be given except when building chunkhash",
" * itself.",
" */",
"#ifdef PNG_CHUNKHASH_DEFS",
"#ifndef PNG_CHUNKHASH_H",
"#define PNG_CHUNKHASH_H",
"/* A perfect hash code - returns a value 0..(PNG_KNOWN_CHUNK_COUNT-1) and is",
" * generated by the ridiculously simple program in contrib/tools/chunkhash.c",
" *",
" * The hash code used here multiplies each byte by a different constant to",
" * return a single number:",
" *",
" * b0 * c[0] + b1 * [c1] + b2 * c[2] + b3 * c[3]",
" *",
" * The values of the constants are found by search using the a table of",
" * primes, including 0, and may be (in fact are at present) 0 for some of the",
" * bytes, the compiler is expected to optimize multiply by zero, or one!",
" *",
" * The lookup table reduces the sparse result of the hash calculation to the",
" * correct index values. The chunks are indexed in the string order of the",
" * png_uint_32 chunk names.",
" */",
0, /* HEADER definitions go here */
"",
"extern const png_byte png_chunk_hash[PNG_CHUNK_HASH_MASK+1];",
"#endif /* !PNG_CHUNKHASH_H */",
"#endif /* PNG_CHUNKHASH_DEFS */",
"",
"#ifndef PNG_CHUNK_HASH",
"#define PNG_CHUNK_HASH(chunk) (png_chunk_hash[PNG_CHUNK_HASH_MASK & (\\",
" ((chunk) >> 24) * PNG_CHUNK_HASH_C0 +\\",
" ((chunk) >> 16) * PNG_CHUNK_HASH_C1 +\\",
" ((chunk) >> 8) * PNG_CHUNK_HASH_C2 +\\",
" ((chunk) ) * PNG_CHUNK_HASH_C3)])",
"#endif",
"",
"#ifdef PNG_CHUNKHASH_CODE",
"#ifndef PNG_CHUNKHASH_C",
"#define PNG_CHUNKHASH_C",
"const png_byte png_chunk_hash[PNG_CHUNK_HASH_MASK+1] = {",
0, /* png.c definitions go here */
"};",
"#endif /* !PNG_CHUNKHASH_C */",
"#endif /* PNG_CHUNKHASH_CODE */",
0 /* end of file */
};
#define CHUNK_COUNT_MAX 32
/* If necessary this is easy to increase; just don't use a png_uint_32
* bitmask below, however it doesn't seem likely that the limit will be hit
* any time soon.
*/
static const png_byte
chunk_hash[256] =
{
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218,
219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248,
249, 250, 251, 252, 253, 254, 255
};
static void
error(const char *string)
{
fprintf(stderr, "chunkhash: %s\n", string);
exit(1);
}
/* Return a hash code for the given chunk; this is the same as the pngpriv.h
* macro, but parameterized. The names of the parameters have to be chosen to
* match the above #defines.
*/
static png_uint_32
test_hash(png_uint_32 chunk, const unsigned int *best_c, png_uint_32 best_mask)
{
# define png_chunk_hash chunk_hash /* prevents lookup */
return PNG_CHUNK_HASH(chunk);
# undef png_chunk_hash
}
static void
print_chunks(const png_uint_32 *chunks, unsigned int nchunks, png_uint_32 first,
png_uint_32 last, const unsigned int *best_c, png_uint_32 best_mask,
const png_byte *lut)
{
/* 'last' is the last code to print plus 1, this is used to detect duplicates
* (which should not happen - if there are any it's an internal error!)
*/
if (nchunks > 0)
{
/* Recursive algorithm; find the hash code of the next chunk, then print
* all remaining chunks with codes in the range first..code (including
* duplicates) and after print all remaining chunks with codes in the
* range (code+1)..last
*/
const png_uint_32 chunk = *chunks++;
# define png_chunk_hash lut
const png_uint_32 code = PNG_CHUNK_HASH(chunk);
# undef png_chunk_hash
--nchunks;
/* The code might be out of the print range */
if (code >= first && code <= last)
{
if (code >= first) /* not time yet */
print_chunks(chunks, nchunks, first, code, best_c, best_mask, lut);
printf("#define PNG_CHUNK_%c%c%c%c_TAG %lu%s\n", (char)(chunk>>24),
(char)(chunk>>16), (char)(chunk>>8), (char)chunk,
(unsigned long)code, code == last ? " /* DUPLICATE */" : "");
if (code < last) /* still some to go */
print_chunks(chunks, nchunks, code+1, last, best_c, best_mask, lut);
}
else
print_chunks(chunks, nchunks, first, last, best_c, best_mask, lut);
}
}
static unsigned int primes[] =
{
0, 1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67,
71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149,
151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229,
233, 239, 241, 251
};
#define NPRIMES ((sizeof primes)/(sizeof primes[0]))
int
main(void)
{
/* Stdin should just contain chunk names, one per line */
png_uint_32 best_mask;
unsigned int best_c[4];
png_uint_32 chunks[CHUNK_COUNT_MAX];
png_byte known_chunk_count;
/* Not required; stop GCC whining: */
memset(best_c, 0xab, sizeof best_c);
best_mask = 0x12345678;
{
png_uint_32 this_chunk = 0;
png_byte n_chunks = 0;
for (;;)
{
int ch = getchar();
if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
{
if (this_chunk > 0xffffffU)
error("chunk name too long");
this_chunk = (this_chunk << 8) + (unsigned)ch;
}
else
{
if (this_chunk > 0)
{
if (this_chunk <= 0xffffffU)
error("chunk name too short");
if (n_chunks >= CHUNK_COUNT_MAX)
error("too many chunks (check CHUNK_COUNT_MAX)");
chunks[n_chunks++] = this_chunk;
this_chunk = 0;
}
}
if (ch < 0)
break;
}
/* 22 is the number of chunks currently defined (excluding fRAc), at any
* time it should also be in PNG_KNOWN_CHUNK_COUNT, but this run of
* chunkhash may be trying to add a chunk so allow bigger numbers.
*/
# ifdef PNG_KNOWN_CHUNK_COUNT
# define CHUNK_COUNT_MIN PNG_KNOWN_CHUNK_COUNT
# else
# define CHUNK_COUNT_MIN 26
# endif
if (n_chunks < CHUNK_COUNT_MIN)
error("too few chunks (expecting at least 26)");
known_chunk_count = n_chunks;
}
/* Exhaustive search of the hash parameters - in fact this isn't very slow at
* all.
*/
{
unsigned int i1, c_zero = 0, c_one = 0;
for (i1=0; i1<NPRIMES; ++i1)
{
unsigned int i2;
unsigned int c[4];
fprintf(stderr, "TEST: %u\n", primes[i1]);
c[0] = primes[i1];
for (i2=0; i2<NPRIMES; ++i2)
{
unsigned int i3;
c[1] = primes[i2];
for (i3=0; i3<NPRIMES; ++i3)
{
unsigned int i4;
c[2] = primes[i3];
for (i4=0; i4<NPRIMES; ++i4)
{
unsigned int i;
png_uint_32 hash_mask = 0xffU;
png_uint_32 hashes[CHUNK_COUNT_MAX];
c[3] = primes[i4];
while (hash_mask > 0xfU)
{
for (i=0; i<known_chunk_count; ++i)
{
unsigned int j;
png_uint_32 hash = test_hash(chunks[i], c, hash_mask);
for (j=0; j<i; ++j) if (hashes[j] == hash) goto next_i4;
hashes[i] = hash;
}
hash_mask >>= 1;
}
next_i4:
if (hash_mask < 0xffU)
{
/* This worked */
unsigned int best, c0 = 0, c1 = 0;
hash_mask <<= 1;
hash_mask += 1;
for (i=0; i<4; ++i)
{
if (c[i] == 0)
++c0;
else if (c[i] == 1)
++c1;
}
if (hash_mask == best_mask)
best = (c0 > c_zero) || (c0 == c_zero && c1 > c_one);
else
best = (hash_mask < best_mask);
if (best)
{
fprintf(stderr, "{%u,%u,%u,%u} & 0x%lx\n",
c[0], c[1], c[2], c[3],
(unsigned long)hash_mask);
c_zero = c0;
c_one = c1;
best_mask = hash_mask;
memcpy(best_c, c, sizeof best_c);
}
}
} /* i4 */
} /* i3 */
} /* i2 */
} /* i1 */
}
/* Calculate the LUT (png_chunk_hash) */
{
png_byte b;
png_byte lut[256];
/* A failure returns PNG_KNOWN_CHUNK_COUNT: */
memset(lut, known_chunk_count, sizeof lut);
for (b=0; b<known_chunk_count; ++b)
lut[test_hash(chunks[b], best_c, best_mask)] = b;
/* Validate the pngpriv.h hash function. */
# define png_chunk_hash lut
{
unsigned int i;
for (i=0; i<known_chunk_count; ++i)
{
png_uint_32 chunk = chunks[i];
if (PNG_CHUNK_HASH(chunk) != i)
error("internal error: hash didn't work!");
}
}
# undef lut
/* Print all the results, first the stuff for pngpriv.h */
{
unsigned int i = 0;
while (strings[i] != 0)
puts(strings[i++]);
printf("#define PNG_CHUNK_HASH_MASK 0x%lxU\n",
(unsigned long)best_mask);
printf("#define PNG_CHUNK_HASH_C0 %u\n", best_c[0]);
printf("#define PNG_CHUNK_HASH_C1 %u\n", best_c[1]);
printf("#define PNG_CHUNK_HASH_C2 %u\n", best_c[2]);
printf("#define PNG_CHUNK_HASH_C3 %u\n", best_c[3]);
/* Print the hash codes of all the chunks */
putchar('\n');
print_chunks(chunks, known_chunk_count, 0, 0xffffffff, best_c,
best_mask, lut);
putchar('\n');
printf("#define PNG_KNOWN_CHUNK_COUNT %u\n", known_chunk_count);
while (strings[++i] != 0)
puts(strings[i]);
/* Now print the LUT */
fputs(" ", stdout);
{
unsigned int j;
for (j=0; j<=best_mask; ++j)
{
printf("%d", lut[j]);
if ((j % 16) == 15 && j < best_mask)
printf(",\n ");
else if (j < best_mask)
printf(", ");
else
printf("\n");
}
}
/* And the trailing text */
while (strings[++i] != 0)
puts(strings[i]);
}
}
exit(0);
}

97
contrib/tools/chunkhash.h Normal file
View File

@@ -0,0 +1,97 @@
/* chunkhash.h -- a perfect hash code for the chunk names in png.h
*
* Last changed in libpng 1.7.0 [(PENDING RELEASE)]
*
* THIS IS A MACHINE GENERATED FILE. See contrib/tools/chunkhash.c for
* copyright and other information.
*
* USAGE: To include the PNG_CHUNK_HASH macro and associated definitions:
*
* #define PNG_CHUNKHASH_DEFS
* #include "contrib/tools/chunkhash.h"
*
* To define the png_chunk_hash array used by the macro:
*
* #define PNG_CHUNKHASH_CODE
* #include "contrib/tools/chunkhash.h"
*
* One or both of the defines must be given except when building chunkhash
* itself.
*/
#ifdef PNG_CHUNKHASH_DEFS
#ifndef PNG_CHUNKHASH_H
#define PNG_CHUNKHASH_H
/* A perfect hash code - returns a value 0..(PNG_KNOWN_CHUNK_COUNT-1) and is
* generated by the ridiculously simple program in contrib/tools/chunkhash.c
*
* The hash code used here multiplies each byte by a different constant to
* return a single number:
*
* b0 * c[0] + b1 * [c1] + b2 * c[2] + b3 * c[3]
*
* The values of the constants are found by search using the a table of
* primes, including 0, and may be (in fact are at present) 0 for some of the
* bytes, the compiler is expected to optimize multiply by zero, or one!
*
* The lookup table reduces the sparse result of the hash calculation to the
* correct index values. The chunks are indexed in the string order of the
* png_uint_32 chunk names.
*/
#define PNG_CHUNK_HASH_MASK 0x3fU
#define PNG_CHUNK_HASH_C0 103
#define PNG_CHUNK_HASH_C1 1
#define PNG_CHUNK_HASH_C2 0
#define PNG_CHUNK_HASH_C3 1
#define PNG_CHUNK_IDAT_TAG 0
#define PNG_CHUNK_IEND_TAG 1
#define PNG_CHUNK_IHDR_TAG 2
#define PNG_CHUNK_PLTE_TAG 3
#define PNG_CHUNK_bKGD_TAG 4
#define PNG_CHUNK_cHRM_TAG 5
#define PNG_CHUNK_fRAc_TAG 6
#define PNG_CHUNK_gAMA_TAG 7
#define PNG_CHUNK_gIFg_TAG 8
#define PNG_CHUNK_gIFt_TAG 9
#define PNG_CHUNK_gIFx_TAG 10
#define PNG_CHUNK_hIST_TAG 11
#define PNG_CHUNK_iCCP_TAG 12
#define PNG_CHUNK_iTXt_TAG 13
#define PNG_CHUNK_oFFs_TAG 14
#define PNG_CHUNK_pCAL_TAG 15
#define PNG_CHUNK_pHYs_TAG 16
#define PNG_CHUNK_sBIT_TAG 17
#define PNG_CHUNK_sCAL_TAG 18
#define PNG_CHUNK_sPLT_TAG 19
#define PNG_CHUNK_sRGB_TAG 20
#define PNG_CHUNK_sTER_TAG 21
#define PNG_CHUNK_tEXt_TAG 22
#define PNG_CHUNK_tIME_TAG 23
#define PNG_CHUNK_tRNS_TAG 24
#define PNG_CHUNK_zTXt_TAG 25
#define PNG_KNOWN_CHUNK_COUNT 26
extern const png_byte png_chunk_hash[PNG_CHUNK_HASH_MASK+1];
#endif /* !PNG_CHUNKHASH_H */
#endif /* PNG_CHUNKHASH_DEFS */
#ifndef PNG_CHUNK_HASH
#define PNG_CHUNK_HASH(chunk) (png_chunk_hash[PNG_CHUNK_HASH_MASK & (\
((chunk) >> 24) * PNG_CHUNK_HASH_C0 +\
((chunk) >> 16) * PNG_CHUNK_HASH_C1 +\
((chunk) >> 8) * PNG_CHUNK_HASH_C2 +\
((chunk) ) * PNG_CHUNK_HASH_C3)])
#endif
#ifdef PNG_CHUNKHASH_CODE
#ifndef PNG_CHUNKHASH_C
#define PNG_CHUNKHASH_C
const png_byte png_chunk_hash[PNG_CHUNK_HASH_MASK+1] = {
26, 3, 26, 26, 26, 26, 26, 13, 26, 26, 26, 16, 26, 26, 26, 26,
26, 24, 12, 26, 18, 26, 26, 26, 26, 20, 26, 17, 26, 26, 25, 15,
26, 8, 14, 26, 26, 22, 26, 26, 1, 19, 5, 21, 26, 26, 9, 26,
26, 26, 10, 7, 26, 11, 26, 0, 26, 2, 23, 26, 26, 4, 26, 6
};
#endif /* !PNG_CHUNKHASH_C */
#endif /* PNG_CHUNKHASH_CODE */

View File

@@ -0,0 +1,208 @@
/* dynamic-range.c
*
* Last changed in libpng 1.7.0
*
* 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.
*
* Find the dynamic range of a given gamma encoding given a (linear) precision
* and a maximum number of encoded values.
*/
#include <stdlib.h>
#include <stdio.h>
#include <float.h>
#include <math.h>
#include <assert.h>
double range(unsigned int steps, double factor, double gamma)
{
return pow((steps * (pow(factor, 1/gamma) - 1)), gamma);
}
double max_range_gamma(unsigned int steps, double factor, double *max_range,
double glo, double rlo, double gmid, double rmid, double ghi, double rhi)
{
/* Given three values which contain a peak value (so rmid > rlo and rmid >
* rhi) find the peak by repeated division of the range. The algorithm is to
* find the range for two gamma values mid-way between the two pairs
* (glo,gmid), (ghi,gmid) then find the max; this gives us a new glo/ghi
* which must be half the distance apart of the previous pair.
*/
double gammas[5];
double ranges[5];
gammas[0] = glo; ranges[0] = rlo;
gammas[2] = gmid; ranges[2] = rmid;
gammas[4] = ghi; ranges[4] = rhi;
for (;;)
{
int i, m;
ranges[1] = range(steps, factor, gammas[1] = (gammas[0]+gammas[2])/2);
ranges[3] = range(steps, factor, gammas[3] = (gammas[2]+gammas[4])/2);
for (m=1, i=2; i<4; ++i)
if (ranges[i] >= ranges[m])
m = i;
assert(gammas[0] < gammas[m] && gammas[m] < gammas[4]);
assert(ranges[0] < ranges[m] && ranges[m] > ranges[4]);
gammas[0] = gammas[m-1]; ranges[0] = ranges[m-1];
gammas[4] = gammas[m+1]; ranges[4] = ranges[m+1];
gammas[2] = gammas[m]; ranges[2] = ranges[m];
if (((gammas[4] - gammas[0])/gammas[2]-1) < 3*DBL_EPSILON ||
((ranges[2] - ranges[0])/ranges[2]-1) < 6*DBL_EPSILON)
{
*max_range = ranges[2];
return gammas[2];
}
}
}
double best_gamma(unsigned int values, double precision, double *best_range)
{
/* The 'guess' gamma value is determined by the following formula, which is
* itself derived from linear regression using values returned by this
* program:
*/
double gtry = values * precision / 2.736;
double rtry;
/* 'values' needs to be the number of steps after the first, we have to
* reserve the first value, 0, for 0, so subtract 2 from values. precision
* must be adjusted to the step factor.
*/
values -= 2U;
precision += 1;
rtry = range(values, precision, gtry);
/* Now find two values either side of gtry with a lower range. */
{
double glo, ghi, rlo, rhi, gbest, rbest;
glo = gtry;
do
{
glo *= 0.9;
rlo = range(values, precision, glo);
}
while (rlo >= rtry);
ghi = gtry;
do
{
ghi *= 1.1;
rhi = range(values, precision, ghi);
}
while (rhi >= rtry);
gbest = max_range_gamma(values, precision, &rbest,
glo, rlo, gtry, rtry, ghi, rhi);
*best_range = rbest / precision;
return gbest;
}
}
double linear_regression(double precision, double *bp)
{
unsigned int values, count = 0;
double g_sum = 0, g2_sum = 0, v_sum = 0, v2_sum = 0, gv_sum = 0;
/* Perform simple linear regression to get:
*
* gamma = a + b.values
*/
for (values = 128; values < 65536; ++values, ++count)
{
double range;
double gamma = best_gamma(values, precision, &range);
g_sum += gamma;
g2_sum += gamma * gamma;
v_sum += values;
v2_sum += values * (double)values;
gv_sum += gamma * values;
/* printf("%u %g %g\n", values, gamma, range); */
}
g_sum /= count;
g2_sum /= count;
v_sum /= count;
v2_sum /= count;
gv_sum /= count;
{
double b = (gv_sum - g_sum * v_sum) / (v2_sum - v_sum * v_sum);
*bp = b;
return g_sum - b * v_sum;
}
}
int
main(int argc, const char **argv)
{
double precision = argc == 2 ? atof(argv[1]) : 0;
/* Perform a second linear regression here on b:
*
* b = bA + bB * precision
*/
if (precision == 0)
{
double b_sum = 0, b2_sum = 0, p_sum = 0, p2_sum = 0, bp_sum = 0,
a_sum = 0, count = 0;
for (precision = .001; precision <= 0.01; precision += .001, count += 1)
{
double b;
double a = linear_regression(precision, &b);
b_sum += b;
b2_sum += b * b;
p_sum += precision;
p2_sum += precision * precision;
bp_sum += b * precision;
a_sum += a;
}
b_sum /= count;
b2_sum /= count;
p_sum /= count;
p2_sum /= count;
bp_sum /= count;
a_sum /= count;
{
double bB = (bp_sum - b_sum * p_sum) / (p2_sum - p_sum * p_sum);
double bA = b_sum - bB * p_sum;
printf("a = %g, b = %g + precision/%g\n", a_sum, bA, 1/bB);
}
}
else
{
unsigned int bits;
double b;
double a = linear_regression(precision, &b);
printf("precision %g: gamma = %g + values*%g\n", precision, a, b);
/* For information, given a precision: */
for (bits=7U; bits <= 16U; ++bits)
{
unsigned int values = 1U<<bits;
double gamma = values*precision/2.736;
double r = range(values-2U, 1+precision, gamma);
printf("bits: %u, gamma: %g, range: 1:%g\n", bits, gamma, r);
}
}
return 0;
}

238
contrib/tools/scale.c Normal file
View File

@@ -0,0 +1,238 @@
/* Given a target range and a source range work out an expression to scale from
* the source to the target of the form:
*
* (number * mult + add)>>16
*
* The command arguments are:
*
* scale target source
*
* and the program works out a pair of numbers, mult and add, that evaluate:
*
* number * target
* round( --------------- )
* source
*
* exactly for number in the range 0..source
*/
#define _ISOC99_SOURCE 1
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <math.h>
static double minerr;
static unsigned long minmult, minadd, minshift;
static long mindelta;
static int
test(unsigned long target, unsigned long source, unsigned long mult,
long add, unsigned long shift, long delta)
{
unsigned long i;
double maxerr = 0;
double rs = (double)target/source;
for (i=0; i<=source; ++i)
{
unsigned long t = i*mult+add;
double err = fabs((t >> shift) - i*rs);
if (err > minerr)
return 0;
if (err > maxerr)
maxerr = err;
}
if (maxerr < minerr)
{
minerr = maxerr;
minmult = mult;
minadd = add;
minshift = shift;
mindelta = delta;
}
return maxerr < .5;
}
static int
dotest(unsigned long target, unsigned long source, unsigned long mult,
long add, unsigned long shift, long delta, int print)
{
if (test(target, source, mult, add, shift, delta))
{
if (print & 4)
printf(" {%11lu,%6ld /* >>%lu */ }, /* %lu/%lu */\n",
mult, add, shift, target, source);
else if (print & 2)
printf(" {%11lu,%6ld,%3lu }, /* %lu/%lu */\n",
mult, add, shift, target, source);
else if (print)
printf("number * %lu/%lu = (number * %lu + %ld) >> %lu [delta %ld]\n",
target, source, mult, add, shift, delta);
return 1;
}
return 0;
}
static int
find(unsigned long target, unsigned long source, int print, int fixshift)
{
unsigned long shift = 0;
unsigned long shiftlim = 0;
/* In the final math the sum is at most (source*mult+add) >> shift, so:
*
* source*mult+add < 1<<32
* mult < (1<<32)/source
*
* but:
*
* mult = (target<<shift)/source
*
* so:
*
* (target<<shift) < (1<<32)
*/
if (fixshift < 0)
while ((target<<shiftlim) < 0x80000000U) ++shiftlim;
else
shift = shiftlim = (unsigned long)fixshift;
minerr = 1E8;
for (; shift<=shiftlim; ++shift)
{
unsigned long mult = ((target<<shift) + (source>>1)) / source;
long delta;
long limit = 1; /* seems to be sufficient */
long add, start, end;
end = 1<<shift;
start = -end;
for (add=start; add<=end; ++add)
if (dotest(target,source,mult,add,shift,0,print))
return 1;
for (delta=1; delta<=limit; ++delta)
{
# if 0
fprintf(stderr, "%lu/%lu: shift %lu, delta %lu\n", target, source,
shift, delta);
# endif
for (add=start; add<=end; ++add)
{
if (dotest(target, source, mult-delta, add, shift, -delta, print))
return 1;
if (dotest(target, source, mult+delta, add, shift, delta, print))
return 1;
}
}
}
if (print & 4)
printf(" {%11lu,%6ld /* >>%lu */ }, /* %lu/%lu ERROR: .5+%g*/\n",
minmult, minadd, minshift, target, source, minerr-.5);
else if (print & 2)
printf(" {%11lu,%6ld,%3lu }, /* %lu/%lu ERROR: .5+%g*/\n",
minmult, minadd, minshift, target, source, minerr-.5);
else if (print)
printf(
"number * %lu/%lu ~= (number * %lu + %ld) >> %lu +/-.5+%g [delta %ld]\n",
target, source, minmult, minadd, minshift, minerr-.5, mindelta);
return 0;
}
static void
usage(const char *prog)
{
fprintf(stderr,
"usage: %s {--denominator|--maxshift|--code} target {source}\n"
" For each 'source' prints 'mult' and 'add' such that:\n\n"
" (number * mult + add) >> 16 = round(number*target/source)\n\n"
" for all integer values of number in the range 0..source.\n\n"
" --denominator: swap target and source (specify a single source first\n"
" and follow with multiple targets.)\n"
" --maxshift: find the lowest shift value that works for all the\n"
" repeated 'source' values\n"
" --code: output C code for array/structure initialization\n",
prog);
exit(1);
}
int
main(int argc, const char **argv)
{
int i, err = 0, maxshift = 0, firstsrc = 1, code = 0, denominator = 0;
unsigned long target, shift = 0;
while (argc > 1)
{
if (strcmp(argv[firstsrc], "--maxshift") == 0)
{
maxshift = 1;
++firstsrc;
}
else if (strcmp(argv[firstsrc], "--code") == 0)
{
code = 1;
++firstsrc;
}
else if (strcmp(argv[firstsrc], "--denominator") == 0)
{
denominator = 1;
++firstsrc;
}
else
break;
}
if (argc < 2+firstsrc)
usage(argv[0]);
target = strtoul(argv[firstsrc++], 0, 0);
if (target == 0) usage(argv[0]);
for (i=firstsrc; i<argc; ++i)
{
unsigned long source = strtoul(argv[i], 0, 0);
if (source == 0) usage(argv[0]);
if (!find(denominator ? source : target, denominator ? target : source,
maxshift ? 0 : 1+code, -1))
err = 1;
if (minshift > shift) shift = minshift;
}
if (maxshift) for (i=firstsrc; i<argc; ++i)
{
unsigned long source = strtoul(argv[i], 0, 0);
if (!find(denominator ? source : target, denominator ? target : source,
code ? 4 : 1, shift))
err = 1;
}
/* Just an exit code - the printout above lists the problem */
return err;
}

View File

@@ -2,8 +2,8 @@
#if 0 /* in case someone actually tries to compile this */
/* example.c - an example of using libpng
* Last changed in libpng 1.6.15 [November 20, 2014]
* Maintained 1998-2014 Glenn Randers-Pehrson
* Last changed in libpng 1.7.0 [(PENDING RELEASE)]
* Maintained 1998-2016 Glenn Randers-Pehrson
* Maintained 1996, 1997 Andreas Dilger)
* Written 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
* To the extent possible under law, the authors have waived
@@ -39,7 +39,7 @@
#include <string.h>
#include <stdio.h>
#include <png.h>
#include <zlib.h>
#include PNG_ZLIB_HEADER /* this is the header libpng was built with */
int main(int argc, const char **argv)
{
@@ -522,7 +522,7 @@ void read_png(FILE *fp, int sig_read) /* File is already open */
png_set_swap(png_ptr);
/* Add filler (or alpha) byte (before/after each RGB triplet) */
png_set_filler(png_ptr, 0xffff, PNG_FILLER_AFTER);
png_set_filler(png_ptr, 0xff, PNG_FILLER_AFTER);
#ifdef PNG_READ_INTERLACING_SUPPORTED
/* Turn on interlace handling. REQUIRED if you are not using
@@ -530,9 +530,9 @@ void read_png(FILE *fp, int sig_read) /* File is already open */
* see the png_read_row() method below:
*/
number_passes = png_set_interlace_handling(png_ptr);
#else
#else /* !READ_INTERLACING */
number_passes = 1;
#endif /* READ_INTERLACING */
#endif /* !READ_INTERLACING */
/* Optional call to gamma correct and add the background to the palette

View File

@@ -1,9 +1,9 @@
libpng-manual.txt - A description on how to use and modify libpng
libpng version 1.6.22beta03 - March 9, 2016
libpng version 1.7.0beta80 - May 6, 2016
Updated and distributed by Glenn Randers-Pehrson
<glennrp at users.sourceforge.net>
Copyright (c) 1998-2016 Glenn Randers-Pehrson
Copyright (c) 1998-2015 Glenn Randers-Pehrson
This document is released under the libpng license.
For conditions of distribution and use, see the disclaimer
@@ -11,15 +11,15 @@ libpng-manual.txt - A description on how to use and modify libpng
Based on:
libpng versions 0.97, January 1998, through 1.6.22beta03 - March 9, 2016
libpng versions 0.97, January 1998, through 1.7.0beta80 - May 6, 2016
Updated and distributed by Glenn Randers-Pehrson
Copyright (c) 1998-2016 Glenn Randers-Pehrson
Copyright (c) 1998-2015 Glenn Randers-Pehrson
libpng 1.0 beta 6 - version 0.96 - May 28, 1997
libpng 1.0 beta 6 version 0.96 May 28, 1997
Updated and distributed by Andreas Dilger
Copyright (c) 1996, 1997 Andreas Dilger
libpng 1.0 beta 2 - version 0.88 - January 26, 1996
libpng 1.0 beta 2 - version 0.88 January 26, 1996
For conditions of distribution and use, see copyright
notice in png.h. Copyright (c) 1995, 1996 Guy Eric
Schalnat, Group 42, Inc.
@@ -42,10 +42,11 @@ libpng-manual.txt - A description on how to use and modify libpng
X. Changes to Libpng from version 1.0.x/1.2.x to 1.4.x
XI. Changes to Libpng from version 1.4.x to 1.5.x
XII. Changes to Libpng from version 1.5.x to 1.6.x
XIII. Detecting libpng
XIV. Source code repository
XV. Coding style
XVI. Y2K Compliance in libpng
XIII. Changes to Libpng from version 1.6.x to 1.7.x
XIV. Detecting libpng
XV. Source code repository
XVI. Coding style
XVII. Y2K Compliance in libpng
I. Introduction
@@ -345,23 +346,22 @@ then only check the bytes (if any) that your program didn't read.
to replace them with custom functions. See the discussion under
Customizing libpng.
FILE *fp = fopen(file_name, "rb");
if (!fp)
{
return (ERROR);
}
if (fread(header, 1, number, fp) != number)
{
return (ERROR);
}
fread(header, 1, number, fp);
is_png = !png_sig_cmp(header, 0, number);
if (!is_png)
{
return (NOT_PNG);
}
Next, png_struct and png_info need to be allocated and initialized. In
order to ensure that the size of these structures is correct even with a
dynamically linked libpng, there are functions to initialize and
@@ -429,12 +429,16 @@ an end_info structure.
If you would rather avoid the complexity of setjmp/longjmp issues,
you can compile libpng with PNG_NO_SETJMP, in which case
errors will result in a call to PNG_ABORT() which defaults to abort().
errors will result in a call to PNG_ABORT which defaults to abort().
You can #define PNG_ABORT() to a function that does something
You can #define PNG_ABORT to a function or other C code that does something
more useful than abort(), as long as your function does not
return.
If you do this, you cannot #define PNG_SIMPLIFIED_READ_SUPPORTED or
PNG_SIMPLIFIED_WRITE_SUPPORTED, because the simplified API requires
setjmp() support.
Now you need to set up the input code. The default for libpng is to
use the C function fread(). If you use this, you will need to pass a
valid FILE * in the function png_init_io(). Be sure that the file is
@@ -526,15 +530,15 @@ you can retrieve with
png_get_user_chunk_ptr(png_ptr);
If you call the png_set_read_user_chunk_fn() function, then all unknown
chunks which the callback does not handle will be saved when read. You can
cause them to be discarded by returning '1' ("handled") instead of '0'. This
behavior will change in libpng 1.7 and the default handling set by the
png_set_keep_unknown_chunks() function, described below, will be used when the
callback returns 0. If you want the existing behavior you should set the global
default to PNG_HANDLE_CHUNK_IF_SAFE now; this is compatible with all current
versions of libpng and with 1.7. Libpng 1.6 issues a warning if you keep the
default, or PNG_HANDLE_CHUNK_NEVER, and the callback returns 0.
If you call the png_set_read_user_chunk_fn() function, then all unknown chunks
will be passed to your callback when read. You can cause known chunks to be
passed in as well by using png_set_keep_unknown_chunks (see below) - this will
prevent the normal libpng handling of those known chunks.
If your callback returns 0 the default unknown handling will be used (see
below). This is new behavior in libpng 1.7, prior to 1.7 it was not possible to
discard a chunk; PNG_HANDLE_CHUNK_IF_SAFE was forced. Libpng 1.6.0 issues a
warning when this was done.
At this point, you can set up a callback function that will be
called after each row has been read, which you can use to control
@@ -633,10 +637,8 @@ callback function:
...
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
/* ignore all unknown chunks
* (use global setting "2" for libpng16 and earlier):
*/
png_set_keep_unknown_chunks(read_ptr, 2, NULL, 0);
/* ignore all unknown chunks: */
png_set_keep_unknown_chunks(read_ptr, 1, NULL, 0);
/* except for vpAg: */
png_set_keep_unknown_chunks(read_ptr, 2, vpAg, 1);
@@ -650,13 +652,15 @@ User limits
The PNG specification allows the width and height of an image to be as
large as 2^31-1 (0x7fffffff), or about 2.147 billion rows and columns.
For safety, libpng imposes a default limit of 1 million rows and columns.
Since very few applications really need to process such large images,
we have imposed an arbitrary 1,000,000 limit on rows and columns.
Larger images will be rejected immediately with a png_error() call. If
you wish to change these limits, you can use
you wish to change this limit, you can use
png_set_user_limits(png_ptr, width_max, height_max);
to set your own limits (libpng may reject some very wide images
to set your own limits, or use width_max = height_max = 0x7fffffffL
to allow all valid dimensions (libpng may reject some very large images
anyway because of potential buffer overflow conditions).
You should put this statement after you create the PNG structure and
@@ -671,11 +675,8 @@ If you need to retrieve the limits that are being applied, use
height_max = png_get_user_height_max(png_ptr);
The PNG specification sets no limit on the number of ancillary chunks
allowed in a PNG datastream. By default, libpng imposes a limit of
a total of 1000 sPLT, tEXt, iTXt, zTXt, and unknown chunks to be stored.
If you have set up both info_ptr and end_info_ptr, the limit applies
separately to each. You can change the limit on the total number of such
chunks that will be stored, with
allowed in a PNG datastream. You can impose a limit on the total number
of sPLT, tEXt, iTXt, zTXt, and unknown chunks that will be stored, with
png_set_chunk_cache_max(png_ptr, user_chunk_cache_max);
@@ -683,9 +684,8 @@ where 0x7fffffffL means unlimited. You can retrieve this limit with
chunk_cache_max = png_get_chunk_cache_max(png_ptr);
Libpng imposes a limit of 8 Megabytes (8,000,000 bytes) on the amount of
memory that a compressed chunk other than IDAT can occupy, when decompressed.
You can change this limit with
You can also set a limit on the amount of memory that a compressed chunk
other than IDAT can occupy, with
png_set_chunk_malloc_max(png_ptr, user_chunk_malloc_max);
@@ -1186,7 +1186,10 @@ row_pointers prior to calling png_read_png() with
png_set_rows(png_ptr, info_ptr, &row_pointers);
Alternatively you could allocate your image in one big block and define
row_pointers[i] to point into the proper places in your block.
row_pointers[i] to point into the proper places in your block. If
you do this, be sure to call png_read_update_info() described below,
to update the "rowbytes" value to account for any transformations that
change the number of bytes per row before you use it to allocate your block.
If you use png_set_rows(), the application is responsible for freeing
row_pointers (and row_pointers[i], if they were separately allocated).
@@ -1275,12 +1278,13 @@ in until png_read_end() has read the chunk data following the image.
interlace_type, compression_type, or filter_method can
be NULL if you are not interested in their values.
Note that png_get_IHDR() returns 32-bit data into
Note that png_get_IHDR() returns png_uint_32 data into
the application's width and height variables.
This is an unsafe situation if these are not png_uint_32
variables. In such situations, the
png_get_image_width() and png_get_image_height()
functions described below are safer.
variables, or if they are 32-bit variables on a 64-bit
platform. In such situations, the png_get_image_width()
and png_get_image_height() functions described below are
safer.
width = png_get_image_width(png_ptr,
info_ptr);
@@ -1463,6 +1467,11 @@ png_set_rgb_to_gray()).
PNG_ITXT_COMPRESSION_NONE
PNG_ITXT_COMPRESSION_zTXt
text_ptr[i].location - location of chunk
PNG_HAVE_IHDR
PNG_HAVE_PLTE
PNG_AFTER_IDAT
text_ptr[i].key - keyword for comment. Must contain
1-79 characters.
@@ -1685,16 +1694,15 @@ described below.
Data will be decoded into the supplied row buffers packed into bytes
unless the library has been told to transform it into another format.
For example, 4 bit/pixel paletted or grayscale data will be returned
2 pixels/byte with the leftmost pixel in the high-order bits of the byte,
unless png_set_packing() is called. 8-bit RGB data will be stored
2 pixels/byte with the leftmost pixel in the high-order bits of the
byte, unless png_set_packing() is called. 8-bit RGB data will be stored
in RGB RGB RGB format unless png_set_filler() or png_set_add_alpha()
is called to insert filler bytes, either before or after each RGB triplet.
16-bit RGB data will be returned RRGGBB RRGGBB, with the most significant
byte of the color value first, unless png_set_scale_16() is called to
transform it to regular RGB RGB triplets, or png_set_filler() or
png_set_add alpha() is called to insert two filler bytes, either before
or after each RRGGBB triplet. Similarly, 8-bit or 16-bit grayscale data can
png_set_add alpha() is called to insert filler bytes, either before or
after each RRGGBB triplet. Similarly, 8-bit or 16-bit grayscale data can
be modified with png_set_filler(), png_set_add_alpha(), png_set_strip_16(),
or png_set_scale_16().
@@ -1851,13 +1859,12 @@ into 4 or 8 bytes for windowing systems that need them in this format:
if (color_type == PNG_COLOR_TYPE_RGB)
png_set_filler(png_ptr, filler, PNG_FILLER_BEFORE);
where "filler" is the 8-bit or 16-bit number to fill with, and the location
is either PNG_FILLER_BEFORE or PNG_FILLER_AFTER, depending upon whether
you want the filler before the RGB or after. When filling an 8-bit pixel,
the least significant 8 bits of the number are used, if a 16-bit number is
supplied. This transformation does not affect images that already have full
alpha channels. To add an opaque alpha channel, use filler=0xffff and
PNG_FILLER_AFTER which will generate RGBA pixels.
where "filler" is the 8 or 16-bit number to fill with, and the location is
either PNG_FILLER_BEFORE or PNG_FILLER_AFTER, depending upon whether
you want the filler before the RGB or after. This transformation
does not affect images that already have full alpha channels. To add an
opaque alpha channel, use filler=0xff or 0xffff and PNG_FILLER_AFTER which
will generate RGBA pixels.
Note that png_set_filler() does not change the color type. If you want
to do that, you can add a true alpha channel with
@@ -1867,7 +1874,7 @@ to do that, you can add a true alpha channel with
png_set_add_alpha(png_ptr, filler, PNG_FILLER_AFTER);
where "filler" contains the alpha value to assign to each pixel.
The png_set_add_alpha() function was added in libpng-1.2.7.
This function was added in libpng-1.2.7.
If you are reading an image with an alpha channel, and you need the
data as ARGB instead of the normal PNG format RGBA:
@@ -2745,11 +2752,10 @@ section below for more information on the libpng error handling.
If you would rather avoid the complexity of setjmp/longjmp issues,
you can compile libpng with PNG_NO_SETJMP, in which case
errors will result in a call to PNG_ABORT() which defaults to abort().
errors will result in a call to PNG_ABORT which defaults to abort().
You can #define PNG_ABORT() to a function that does something
more useful than abort(), as long as your function does not
return.
You can #define PNG_ABORT to a function or other C code that does something
more useful than abort(), as long as your function does not return.
Checking for invalid palette index on write was added at libpng
1.5.10. If a pixel contains an invalid (out-of-range) index libpng issues
@@ -2960,7 +2966,6 @@ width, height, bit_depth, and color_type must be the same in each call.
(array of png_color)
num_palette - number of entries in the palette
png_set_gAMA(png_ptr, info_ptr, file_gamma);
png_set_gAMA_fixed(png_ptr, info_ptr, int_file_gamma);
@@ -3085,6 +3090,10 @@ width, height, bit_depth, and color_type must be the same in each call.
PNG_TEXT_COMPRESSION_zTXt
PNG_ITXT_COMPRESSION_NONE
PNG_ITXT_COMPRESSION_zTXt
text_ptr[i].location - location of chunk
PNG_HAVE_IHDR
PNG_HAVE_PLTE
PNG_AFTER_IDAT
text_ptr[i].key - keyword for comment. Must contain
1-79 characters.
text_ptr[i].text - text comments for current
@@ -3268,7 +3277,7 @@ tEXt chunk use RFC 1123 format dates (e.g. "22 May 1997 18:07:10 GMT"),
although this isn't a requirement. Unlike the tIME chunk, the
"Creation Time" tEXt chunk is not expected to be automatically changed
by the software. To facilitate the use of RFC 1123 dates, a function
png_convert_to_rfc1123_buffer(buffer, png_timep) is provided to
png_convert_to_rfc1123_buffer(png_ptr, buffer, png_timep) is provided to
convert from PNG time to an RFC 1123 format string. The caller must provide
a writeable buffer of at least 29 bytes.
@@ -3725,26 +3734,21 @@ as a wide variety of APIs to manipulate ancilliary information.
To read a PNG file using the simplified API:
1) Declare a 'png_image' structure (see below) on the stack, set the
version field to PNG_IMAGE_VERSION and the 'opaque' pointer to NULL
(this is REQUIRED, your program may crash if you don't do it.)
1) Declare a 'png_image' structure (see below) on the
stack and memset() it to all zero.
2) Call the appropriate png_image_begin_read... function.
3) Set the png_image 'format' member to the required sample format.
3) Set the png_image 'format' member to the required
format and allocate a buffer for the image.
4) Allocate a buffer for the image and, if required, the color-map.
5) Call png_image_finish_read to read the image and, if required, the
color-map into your buffers.
4) Call png_image_finish_read to read the image into
your buffer.
There are no restrictions on the format of the PNG input itself; all valid
color types, bit depths, and interlace methods are acceptable, and the
input image is transformed as necessary to the requested in-memory format
during the png_image_finish_read() step. The only caveat is that if you
request a color-mapped image from a PNG that is full-color or makes
complex use of an alpha channel the transformation is extremely lossy and the
result may look terrible.
during the png_image_finish_read() step.
To write a PNG file using the simplified API:
@@ -3753,14 +3757,13 @@ To write a PNG file using the simplified API:
2) Initialize the members of the structure that describe the
image, setting the 'format' member to the format of the
image samples.
image in memory.
3) Call the appropriate png_image_write... function with a
pointer to the image and, if necessary, the color-map to write
the PNG data.
pointer to the image to write the PNG data.
png_image is a structure that describes the in-memory format of an image
when it is being read or defines the in-memory format of an image that you
when it is being read or define the in-memory format of an image that you
need to write. The "png_image" structure contains the following members:
png_controlp opaque Initialize to NULL, free with png_image_free
@@ -3773,15 +3776,15 @@ need to write. The "png_image" structure contains the following members:
png_uint_32 warning_or_error;
char message[64];
In the event of an error or warning the "warning_or_error"
In the event of an error or warning the following field warning_or_error
field will be set to a non-zero value and the 'message' field will contain
a '\0' terminated string with the libpng error or warning message. If both
warnings and an error were encountered, only the error is recorded. If there
are multiple warnings, only the first one is recorded.
The upper 30 bits of the "warning_or_error" value are reserved; the low two
bits contain a two bit code such that a value more than 1 indicates a failure
in the API just called:
The upper 30 bits of this value are reserved; the low two bits contain
a two bit code such that a value more than 1 indicates a failure in the API
just called:
0 - no warning or error
1 - warning
@@ -3813,72 +3816,64 @@ channels are linear. Color channels use the RGB encoding (RGB end-points) of
the sRGB specification. This encoding is identified by the
PNG_FORMAT_FLAG_LINEAR flag below.
When the simplified API needs to convert between sRGB and linear colorspaces,
the actual sRGB transfer curve defined in the sRGB specification (see the
article at http://en.wikipedia.org/wiki/SRGB) is used, not the gamma=1/2.2
approximation used elsewhere in libpng.
When an alpha channel is present it is expected to denote pixel coverage
of the color or luminance channels and is returned as an associated alpha
channel: the color/gray channels are scaled (pre-multiplied) by the alpha
value.
The samples are either contained directly in the image data, between 1 and 8
bytes per pixel according to the encoding, or are held in a color-map indexed
by bytes in the image data. In the case of a color-map the color-map entries
are individual samples, encoded as above, and the image data has one byte per
pixel to select the relevant sample from the color-map.
When a color-mapped image is used as a result of calling
png_image_read_colormap or png_image_write_colormap the channels are encoded
in the color-map and the descriptions above apply to the color-map entries.
The image data is encoded as small integers, value 0..255, that index the
entries in the color-map. One integer (one byte) is stored for each pixel.
PNG_FORMAT_*
The #defines to be used in png_image::format. Each #define identifies a
particular layout of channel data and, if present, alpha values. There are
separate defines for each of the two component encodings.
separate defines for each of the two channel encodings.
A format is built up using single bit flag values. All combinations are
valid. Formats can be built up from the flag values or you can use one of
the predefined values below. When testing formats always use the FORMAT_FLAG
macros to test for individual features - future versions of the library may
add new flags.
A format is built up using single bit flag values. Not all combinations are
valid: use the bit flag values below for testing a format returned by the
read APIs, but set formats from the derived values.
When reading or writing color-mapped images the format should be set to the
format of the entries in the color-map then png_image_{read,write}_colormap
called to read or write the color-map and set the format correctly for the
image data. Do not set the PNG_FORMAT_FLAG_COLORMAP bit directly!
NOTE: libpng can be built with particular features disabled. If you see
NOTE: libpng can be built with particular features disabled, if you see
compiler errors because the definition of one of the following flags has been
compiled out it is because libpng does not have the required support. It is
possible, however, for the libpng configuration to enable the format on just
read or just write; in that case you may see an error at run time.
You can guard against this by checking for the definition of the
appropriate "_SUPPORTED" macro, one of:
read or just write; in that case you may see an error at run time. You can
guard against this by checking for the definition of:
PNG_SIMPLIFIED_{READ,WRITE}_{BGR,AFIRST}_SUPPORTED
PNG_FORMAT_FLAG_ALPHA format with an alpha channel
PNG_FORMAT_FLAG_COLOR color format: otherwise grayscale
PNG_FORMAT_FLAG_LINEAR 2-byte channels else 1-byte
PNG_FORMAT_FLAG_COLORMAP image data is color-mapped
PNG_FORMAT_FLAG_BGR BGR colors, else order is RGB
PNG_FORMAT_FLAG_AFIRST alpha channel comes first
PNG_FORMAT_FLAG_ALPHA 0x01 format with an alpha channel
PNG_FORMAT_FLAG_COLOR 0x02 color format: otherwise grayscale
PNG_FORMAT_FLAG_LINEAR 0x04 png_uint_16 channels else png_byte
PNG_FORMAT_FLAG_COLORMAP 0x08 libpng use only
PNG_FORMAT_FLAG_BGR 0x10 BGR colors, else order is RGB
PNG_FORMAT_FLAG_AFIRST 0x20 alpha channel comes first
Supported formats are as follows. Future versions of libpng may support more
formats; for compatibility with older versions simply check if the format
macro is defined using #ifdef. These defines describe the in-memory layout
of the components of the pixels of the image.
First the single byte (sRGB) formats:
First the single byte formats:
PNG_FORMAT_GRAY
PNG_FORMAT_GA
PNG_FORMAT_AG
PNG_FORMAT_RGB
PNG_FORMAT_BGR
PNG_FORMAT_RGBA
PNG_FORMAT_ARGB
PNG_FORMAT_BGRA
PNG_FORMAT_ABGR
PNG_FORMAT_GRAY 0
PNG_FORMAT_GA PNG_FORMAT_FLAG_ALPHA
PNG_FORMAT_AG (PNG_FORMAT_GA|PNG_FORMAT_FLAG_AFIRST)
PNG_FORMAT_RGB PNG_FORMAT_FLAG_COLOR
PNG_FORMAT_BGR (PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_BGR)
PNG_FORMAT_RGBA (PNG_FORMAT_RGB|PNG_FORMAT_FLAG_ALPHA)
PNG_FORMAT_ARGB (PNG_FORMAT_RGBA|PNG_FORMAT_FLAG_AFIRST)
PNG_FORMAT_BGRA (PNG_FORMAT_BGR|PNG_FORMAT_FLAG_ALPHA)
PNG_FORMAT_ABGR (PNG_FORMAT_BGRA|PNG_FORMAT_FLAG_AFIRST)
Then the linear 2-byte formats. When naming these "Y" is used to
indicate a luminance (gray) channel. The component order within the pixel
@@ -3887,22 +3882,22 @@ components in the linear format. The components are 16-bit integers in
the native byte order for your platform, and there is no provision for
swapping the bytes to a different endian condition.
PNG_FORMAT_LINEAR_Y
PNG_FORMAT_LINEAR_Y PNG_FORMAT_FLAG_LINEAR
PNG_FORMAT_LINEAR_Y_ALPHA
(PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_ALPHA)
PNG_FORMAT_LINEAR_RGB
(PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR)
PNG_FORMAT_LINEAR_RGB_ALPHA
(PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR|
PNG_FORMAT_FLAG_ALPHA)
With color-mapped formats the image data is one byte for each pixel. The byte
is an index into the color-map which is formatted as above. To obtain a
color-mapped format it is sufficient just to add the PNG_FOMAT_FLAG_COLORMAP
to one of the above definitions, or you can use one of the definitions below.
Color-mapped formats are obtained by calling png_image_{read,write}_colormap,
as appropriate after setting png_image::format to the format of the color-map
to be read or written. Applications may check the value of
PNG_FORMAT_FLAG_COLORMAP to see if they have called the colormap API. The
format of the color-map may be extracted using the following macro.
PNG_FORMAT_RGB_COLORMAP
PNG_FORMAT_BGR_COLORMAP
PNG_FORMAT_RGBA_COLORMAP
PNG_FORMAT_ARGB_COLORMAP
PNG_FORMAT_BGRA_COLORMAP
PNG_FORMAT_ABGR_COLORMAP
PNG_FORMAT_OF_COLORMAP(fmt) ((fmt) & ~PNG_FORMAT_FLAG_COLORMAP)
PNG_IMAGE macros
@@ -3910,9 +3905,9 @@ These are convenience macros to derive information from a png_image
structure. The PNG_IMAGE_SAMPLE_ macros return values appropriate to the
actual image sample values - either the entries in the color-map or the
pixels in the image. The PNG_IMAGE_PIXEL_ macros return corresponding values
for the pixels and will always return 1 for color-mapped formats. The
remaining macros return information about the rows in the image and the
complete image.
for the pixels and will always return 1 after a call to
png_image_{read,write}_colormap. The remaining macros return information
about the rows in the image and the complete image.
NOTE: All the macros that take a png_image::format parameter are compile time
constants if the format parameter is, itself, a constant. Therefore these
@@ -3920,39 +3915,46 @@ macros can be used in array declarations and case labels where required.
Similarly the macros are also pre-processor constants (sizeof is not used) so
they can be used in #if tests.
First the information about the samples.
PNG_IMAGE_SAMPLE_CHANNELS(fmt)
Returns the total number of channels in a given format: 1..4
PNG_IMAGE_SAMPLE_COMPONENT_SIZE(fmt)
Returns the size in bytes of a single component of a pixel or color-map
entry (as appropriate) in the image: 1 or 2.
entry (as appropriate) in the image.
PNG_IMAGE_SAMPLE_SIZE(fmt)
This is the size of the sample data for one sample. If the image is
color-mapped it is the size of one color-map entry (and image pixels are
one byte in size), otherwise it is the size of one image pixel.
PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(fmt)
The maximum size of the color-map required by the format expressed in a
count of components. This can be used to compile-time allocate a
color-map:
png_uint_16 colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(linear_fmt)];
png_byte colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(sRGB_fmt)];
Alternatively use the PNG_IMAGE_COLORMAP_SIZE macro below to use the
information from one of the png_image_begin_read_ APIs and dynamically
allocate the required memory.
PNG_IMAGE_COLORMAP_SIZE(fmt)
The size of the color-map required by the format; this is the size of the
color-map buffer passed to the png_image_{read,write}_colormap APIs. It is
color-map buffer passed to the png_image_{read,write}_colormap APIs, it is
a fixed number determined by the format so can easily be allocated on the
stack if necessary.
#define PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(fmt)\
(PNG_IMAGE_SAMPLE_CHANNELS(fmt) * 256)
/* The maximum size of the color-map required by the format expressed in a
* count of components. This can be used to compile-time allocate a
* color-map:
*
* png_uint_16 colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(linear_fmt)];
*
* png_byte colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(sRGB_fmt)];
*
* Alternatively, use the PNG_IMAGE_COLORMAP_SIZE macro below to use the
* information from one of the png_image_begin_read_ APIs and dynamically
* allocate the required memory.
*/
Corresponding information about the pixels
PNG_IMAGE_PIXEL_(test,fmt)
PNG_IMAGE_PIXEL_CHANNELS(fmt)
The number of separate channels (components) in a pixel; 1 for a
color-mapped image.
@@ -3978,54 +3980,19 @@ Information about the whole row, or whole image
to start the next row on a 4-byte boundary.
PNG_IMAGE_BUFFER_SIZE(image, row_stride)
Return the size, in bytes, of an image buffer given a png_image and a row
stride - the number of components to leave space for in each row.
PNG_IMAGE_SIZE(image)
Return the size, in bytes, of the image in memory given just a png_image;
the row stride is the minimum stride required for the image.
PNG_IMAGE_COLORMAP_SIZE(image)
Return the size, in bytes, of the color-map of this image. If the image
format is not a color-map format this will return a size sufficient for
256 entries in the given format; check PNG_FORMAT_FLAG_COLORMAP if
you don't want to allocate a color-map in this case.
PNG_IMAGE_FLAG_*
Flags containing additional information about the image are held in
the 'flags' field of png_image.
Returns the size, in bytes, of an image buffer given a png_image and a row
stride - the number of components to leave space for in each row. This
macro takes care of multiplying row_stride by PNG_IMAGE_PIXEL_COMONENT_SIZE
when the image has 2-byte components.
PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB == 0x01
This indicates the the RGB values of the in-memory bitmap do not
correspond to the red, green and blue end-points defined by sRGB.
PNG_IMAGE_FLAG_FAST == 0x02
On write emphasise speed over compression; the resultant PNG file will be
larger but will be produced significantly faster, particular for large
images. Do not use this option for images which will be distributed, only
used it when producing intermediate files that will be read back in
repeatedly. For a typical 24-bit image the option will double the read
speed at the cost of increasing the image size by 25%, however for many
more compressible images the PNG file can be 10 times larger with only a
slight speed gain.
PNG_IMAGE_FLAG_16BIT_sRGB == 0x04
On read if the image is a 16-bit per component image and there is no gAMA
or sRGB chunk assume that the components are sRGB encoded. Notice that
images output by the simplified API always have gamma information; setting
this flag only affects the interpretation of 16-bit images from an
external source. It is recommended that the application expose this flag
to the user; the user can normally easily recognize the difference between
linear and sRGB encoding. This flag has no effect on write - the data
passed to the write APIs must have the correct encoding (as defined
above.)
If the flag is not set (the default) input 16-bit per component data is
assumed to be linear.
NOTE: the flag can only be set after the png_image_begin_read_ call,
because that call initializes the 'flags' field.
PNG_IMAGE_FLAG_COLORMAP == 0x02
The PNG is color-mapped. If this flag is set png_image_read_colormap
can be used without further loss of image information. If it is not set
png_image_read_colormap will cause significant loss if the image has any
READ APIs
@@ -4123,11 +4090,10 @@ a 16-bit linear encoded PNG file is written.
With all APIs row_stride is handled as in the read APIs - it is the spacing
from one row to the next in component sized units (float) and if negative
indicates a bottom-up row layout in the buffer. If you pass zero, libpng will
calculate the row_stride for you from the width and number of channels.
indicates a bottom-up row layout in the buffer.
Note that the write API does not support interlacing, sub-8-bit pixels,
indexed (paletted) images, or most ancillary chunks.
and indexed (paletted) images.
VI. Modifying/Customizing libpng
@@ -4218,7 +4184,7 @@ Error handling in libpng is done through png_error() and png_warning().
Errors handled through png_error() are fatal, meaning that png_error()
should never return to its caller. Currently, this is handled via
setjmp() and longjmp() (unless you have compiled libpng with
PNG_NO_SETJMP, in which case it is handled via PNG_ABORT()),
PNG_NO_SETJMP, in which case it is handled via PNG_ABORT),
but you could change this to do things like exit() if you should wish,
as long as your function does not return.
@@ -4915,7 +4881,7 @@ limits are now
png_user_chunk_malloc_max 0 (unlimited) 8,000,000
The png_set_option() function (and the "options" member of the png struct) was
added to libpng-1.5.15, with option PNG_ARM_NEON.
added to libpng-1.5.15.
The library now supports a complete fixed point implementation and can
thus be used on systems that have no floating point support or very
@@ -5087,10 +5053,6 @@ enforced. The sRGB chunk is allowed to appear in images with any color type
and is interpreted by libpng to convey a one-tracer-curve gray profile or a
three-tracer-curve RGB profile as appropriate.
Libpng 1.5.x erroneously used /MD for Debug DLL builds; if you used the debug
builds in your app and you changed your app to use /MD you will need to
change it back to /MDd for libpng 1.6.x.
Prior to libpng-1.6.0 a warning would be issued if the iTXt chunk contained
an empty language field or an empty translated keyword. Both of these
are allowed by the PNG specification, so these warnings are no longer issued.
@@ -5156,12 +5118,58 @@ It can be set for testing debug or beta builds to ensure that they will compile
when the build type is switched to RC or STABLE. In essence this overrides the
PNG_LIBPNG_BUILD_BASE_TYPE definition which is not directly user controllable.
Starting with libpng-1.6.19, attempting to set an over-length PLTE chunk
is an error. Previously this requirement of the PNG specification was not
enforced, and the palette was always limited to 256 entries. An over-length
PLTE chunk found in an input PNG is silently truncated.
XIII. Changes to Libpng from version 1.6.x to 1.7.x
XIII. Detecting libpng
Some functions that were deprecated in libpng-1.6.0 were removed:
png_reset_zstream(),
png_info_init_3(),
png_data_freer() and its associated flags,
png_malloc_default(),
and png_free_default().
These apparently unused experimental functions have been deprecated
and the code within them, except for the APIs, has been removed.
png_set_filter_heuristics()
and png_set_filter_heuristics_fixed()
A location byte was added to the png_text structure.
A new private header file, "pngchunk.h", was added.
The PNG_ABORT() macro was changed to PNG_ABORT, and the default is now
"abort()" for all platforms (previously it was "ExitProcess(0)" on
Windows platforms). Starting with libpng-1.7.0 you have to define
PNG_ABORT instead of PNG_ABORT(), and you must include a terminating
semicolon in your definition, e.g.,
#if PNGCRUSH_LIBPNG_VER >= 10700
# ifdef _WINDOWS_
# define PNG_ABORT ExitProcess(0);
# else
# define PNG_ABORT abort();
# endif
#else
# ifdef _WINDOWS_
# define PNG_ABORT() ExitProcess(0)
# else
# define PNG_ABORT() abort()
# endif
#endif
The png_get_IHDR() function now allows users to supply NULL for any
argument in which they aren't interested. Previously, the width, height,
bit_depth, and color_type arguments were not allowed to be NULL.
The 8-bit compose and rgb_to_grayscale operations were made more accurate.
While these did not introduce API incompatibility, there may be differences
in unit test results.
Internal "affirm()" and "impossible()" macros were added, along with
some internal supporting macros and functions. These are similar to the
ANSI-C "assert()" macro but they are not affected by NDEBUG, and they are
private (not visible to nor usable by libpng applications).
XIV. Detecting libpng
The png_get_io_ptr() function has been present since libpng-0.88, has never
changed, and is unaffected by conditional compilation macros. It is the
@@ -5194,7 +5202,7 @@ simple verbal discriptions of bug fixes, reported either to the
SourceForge bug tracker, to the png-mng-implement at lists.sf.net
mailing list, or directly to glennrp.
XV. Coding style
XVI. Coding style
Our coding style is similar to the "Allman" style
(See http://en.wikipedia.org/wiki/Indent_style#Allman_style), with curly
@@ -5314,12 +5322,10 @@ We prefer #ifdef and #ifndef to #if defined() and #if !defined()
when there is only one macro being tested. We always use parentheses
with "defined".
We express integer constants that are used as bit masks in hex format,
with an even number of lower-case hex digits, and to make them unsigned
(e.g., 0x00U, 0xffU, 0x0100U) and long if they are greater than 0x7fff
(e.g., 0xffffUL).
We prefer to express integers that are used as bit masks in hex format,
with an even number of lower-case hex digits (e.g., 0x00, 0xff, 0x0100).
We prefer to use underscores rather than camelCase in names, except
We prefer to use underscores in variable names rather than camelCase, except
for a few type names that we inherit from zlib.h.
We prefer "if (something != 0)" and "if (something == 0)"
@@ -5331,13 +5337,13 @@ Lines do not exceed 80 characters.
Other rules can be inferred by inspecting the libpng source.
XVI. Y2K Compliance in libpng
XVII. Y2K Compliance in libpng
Since the PNG Development group is an ad-hoc body, we can't make
an official declaration.
This is your unofficial assurance that libpng from version 0.71 and
upward through 1.6.22beta03 are Y2K compliant. It is my belief that earlier
upward through 1.7.0beta80 are Y2K compliant. It is my belief that earlier
versions were also Y2K compliant.
Libpng only has two year fields. One is a 2-byte unsigned integer
@@ -5353,9 +5359,8 @@ in libpng-1.6.x and will be removed from libpng-1.7.0.
There are seven time-related functions:
png_convert_to_rfc_1123_buffer() in png.c
(formerly png_convert_to_rfc_1152() in error, and
also formerly png_convert_to_rfc_1123())
png_convert_to_rfc_1123() in png.c
(formerly png_convert_to_rfc_1152() in error)
png_convert_from_struct_tm() in pngwrite.c, called
in pngwrite.c
png_convert_from_time_t() in pngwrite.c

503
libpng.3
View File

@@ -1,6 +1,6 @@
.TH LIBPNG 3 "March 9, 2016"
.TH LIBPNG 3 "May 6, 2016"
.SH NAME
libpng \- Portable Network Graphics (PNG) Reference Library 1.6.22beta03
libpng \- Portable Network Graphics (PNG) Reference Library 1.7.0beta80
.SH SYNOPSIS
\fB
#include <png.h>\fP
@@ -23,7 +23,7 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.6.22beta03
\fBvoid png_convert_from_time_t (png_timep \fP\fIptime\fP\fB, time_t \fIttime\fP\fB);\fP
\fBpng_charp png_convert_to_rfc1123 (png_structp \fP\fIpng_ptr\fP\fB, png_timep \fIptime\fP\fB);\fP
\fBpng_charp png_convert_to_rfc1123_buffer (png_structp \fP\fIpng_ptr\fP\fB, char \fP\fIout[29]\fP\fB, png_timep \fIptime\fP\fB);\fP
\fBpng_infop png_create_info_struct (png_structp \fIpng_ptr\fP\fB);\fP
@@ -35,8 +35,6 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.6.22beta03
\fBpng_structp png_create_write_struct_2 (png_const_charp \fP\fIuser_png_ver\fP\fB, png_voidp \fP\fIerror_ptr\fP\fB, png_error_ptr \fP\fIerror_fn\fP\fB, png_error_ptr \fP\fIwarn_fn\fP\fB, png_voidp \fP\fImem_ptr\fP\fB, png_malloc_ptr \fP\fImalloc_fn\fP\fB, png_free_ptr \fIfree_fn\fP\fB);\fP
\fBvoid png_data_freer (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fP\fIfreer\fP\fB, png_uint_32 \fImask)\fP\fB);\fP
\fBvoid png_destroy_info_struct (png_structp \fP\fIpng_ptr\fP\fB, png_infopp \fIinfo_ptr_ptr\fP\fB);\fP
\fBvoid png_destroy_read_struct (png_structpp \fP\fIpng_ptr_ptr\fP\fB, png_infopp \fP\fIinfo_ptr_ptr\fP\fB, png_infopp \fIend_info_ptr_ptr\fP\fB);\fP
@@ -51,8 +49,6 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.6.22beta03
\fBvoid png_free_chunk_list (png_structp \fIpng_ptr\fP\fB);\fP
\fBvoid png_free_default (png_structp \fP\fIpng_ptr\fP\fB, png_voidp \fIptr\fP\fB);\fP
\fBvoid png_free_data (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fP\fIinfo_ptr\fP\fB, int \fInum\fP\fB);\fP
\fBpng_byte png_get_bit_depth (png_const_structp \fP\fIpng_ptr\fP\fB, png_const_infop \fIinfo_ptr\fP\fB);\fP
@@ -233,16 +229,12 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.6.22beta03
\fBint png_image_write_to_stdio (png_imagep \fP\fIimage\fP\fB, FILE \fP\fI*file\fP\fB, int \fP\fIconvert_to_8_bit\fP\fB, const void \fP\fI*buffer\fP\fB, png_int_32 \fP\fIrow_stride\fP\fB, void \fI*colormap)\fP\fB);\fP
\fBvoid png_info_init_3 (png_infopp \fP\fIinfo_ptr\fP\fB, png_size_t \fIpng_info_struct_size\fP\fB);\fP
\fBvoid png_init_io (png_structp \fP\fIpng_ptr\fP\fB, FILE \fI*fp\fP\fB);\fP
\fBvoid png_longjmp (png_structp \fP\fIpng_ptr\fP\fB, int \fIval\fP\fB);\fP
\fBpng_voidp png_malloc (png_structp \fP\fIpng_ptr\fP\fB, png_alloc_size_t \fIsize\fP\fB);\fP
\fBpng_voidp png_malloc_default (png_structp \fP\fIpng_ptr\fP\fB, png_alloc_size_t \fIsize\fP\fB);\fP
\fBpng_voidp png_malloc_warn (png_structp \fP\fIpng_ptr\fP\fB, png_alloc_size_t \fIsize\fP\fB);\fP
\fBpng_uint_32 png_permit_mng_features (png_structp \fP\fIpng_ptr\fP\fB, png_uint_32 \fImng_features_permitted\fP\fB);\fP
@@ -269,8 +261,6 @@ libpng \- Portable Network Graphics (PNG) Reference Library 1.6.22beta03
\fBvoid png_read_update_info (png_structp \fP\fIpng_ptr\fP\fB, png_infop \fIinfo_ptr\fP\fB);\fP
\fBint png_reset_zstream (png_structp \fIpng_ptr\fP\fB);\fP
\fBvoid png_save_int_32 (png_bytep \fP\fIbuf\fP\fB, png_int_32 \fIi\fP\fB);\fP
\fBvoid png_save_uint_16 (png_bytep \fP\fIbuf\fP\fB, unsigned int \fIi\fP\fB);\fP
@@ -510,10 +500,10 @@ Following is a copy of the libpng-manual.txt file that accompanies libpng.
.SH LIBPNG.TXT
libpng-manual.txt - A description on how to use and modify libpng
libpng version 1.6.22beta03 - March 9, 2016
libpng version 1.7.0beta80 - May 6, 2016
Updated and distributed by Glenn Randers-Pehrson
<glennrp at users.sourceforge.net>
Copyright (c) 1998-2016 Glenn Randers-Pehrson
Copyright (c) 1998-2015 Glenn Randers-Pehrson
This document is released under the libpng license.
For conditions of distribution and use, see the disclaimer
@@ -521,15 +511,15 @@ libpng-manual.txt - A description on how to use and modify libpng
Based on:
libpng versions 0.97, January 1998, through 1.6.22beta03 - March 9, 2016
libpng versions 0.97, January 1998, through 1.7.0beta80 - May 6, 2016
Updated and distributed by Glenn Randers-Pehrson
Copyright (c) 1998-2016 Glenn Randers-Pehrson
Copyright (c) 1998-2015 Glenn Randers-Pehrson
libpng 1.0 beta 6 - version 0.96 - May 28, 1997
libpng 1.0 beta 6 version 0.96 May 28, 1997
Updated and distributed by Andreas Dilger
Copyright (c) 1996, 1997 Andreas Dilger
libpng 1.0 beta 2 - version 0.88 - January 26, 1996
libpng 1.0 beta 2 - version 0.88 January 26, 1996
For conditions of distribution and use, see copyright
notice in png.h. Copyright (c) 1995, 1996 Guy Eric
Schalnat, Group 42, Inc.
@@ -552,10 +542,11 @@ libpng-manual.txt - A description on how to use and modify libpng
X. Changes to Libpng from version 1.0.x/1.2.x to 1.4.x
XI. Changes to Libpng from version 1.4.x to 1.5.x
XII. Changes to Libpng from version 1.5.x to 1.6.x
XIII. Detecting libpng
XIV. Source code repository
XV. Coding style
XVI. Y2K Compliance in libpng
XIII. Changes to Libpng from version 1.6.x to 1.7.x
XIV. Detecting libpng
XV. Source code repository
XVI. Coding style
XVII. Y2K Compliance in libpng
.SH I. Introduction
@@ -855,23 +846,22 @@ then only check the bytes (if any) that your program didn't read.
to replace them with custom functions. See the discussion under
Customizing libpng.
FILE *fp = fopen(file_name, "rb");
if (!fp)
{
return (ERROR);
}
if (fread(header, 1, number, fp) != number)
{
return (ERROR);
}
fread(header, 1, number, fp);
is_png = !png_sig_cmp(header, 0, number);
if (!is_png)
{
return (NOT_PNG);
}
Next, png_struct and png_info need to be allocated and initialized. In
order to ensure that the size of these structures is correct even with a
dynamically linked libpng, there are functions to initialize and
@@ -939,12 +929,16 @@ an end_info structure.
If you would rather avoid the complexity of setjmp/longjmp issues,
you can compile libpng with PNG_NO_SETJMP, in which case
errors will result in a call to PNG_ABORT() which defaults to abort().
errors will result in a call to PNG_ABORT which defaults to abort().
You can #define PNG_ABORT() to a function that does something
You can #define PNG_ABORT to a function or other C code that does something
more useful than abort(), as long as your function does not
return.
If you do this, you cannot #define PNG_SIMPLIFIED_READ_SUPPORTED or
PNG_SIMPLIFIED_WRITE_SUPPORTED, because the simplified API requires
setjmp() support.
Now you need to set up the input code. The default for libpng is to
use the C function fread(). If you use this, you will need to pass a
valid FILE * in the function png_init_io(). Be sure that the file is
@@ -1036,15 +1030,15 @@ you can retrieve with
png_get_user_chunk_ptr(png_ptr);
If you call the png_set_read_user_chunk_fn() function, then all unknown
chunks which the callback does not handle will be saved when read. You can
cause them to be discarded by returning '1' ("handled") instead of '0'. This
behavior will change in libpng 1.7 and the default handling set by the
png_set_keep_unknown_chunks() function, described below, will be used when the
callback returns 0. If you want the existing behavior you should set the global
default to PNG_HANDLE_CHUNK_IF_SAFE now; this is compatible with all current
versions of libpng and with 1.7. Libpng 1.6 issues a warning if you keep the
default, or PNG_HANDLE_CHUNK_NEVER, and the callback returns 0.
If you call the png_set_read_user_chunk_fn() function, then all unknown chunks
will be passed to your callback when read. You can cause known chunks to be
passed in as well by using png_set_keep_unknown_chunks (see below) - this will
prevent the normal libpng handling of those known chunks.
If your callback returns 0 the default unknown handling will be used (see
below). This is new behavior in libpng 1.7, prior to 1.7 it was not possible to
discard a chunk; PNG_HANDLE_CHUNK_IF_SAFE was forced. Libpng 1.6.0 issues a
warning when this was done.
At this point, you can set up a callback function that will be
called after each row has been read, which you can use to control
@@ -1143,10 +1137,8 @@ callback function:
...
#if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
/* ignore all unknown chunks
* (use global setting "2" for libpng16 and earlier):
*/
png_set_keep_unknown_chunks(read_ptr, 2, NULL, 0);
/* ignore all unknown chunks: */
png_set_keep_unknown_chunks(read_ptr, 1, NULL, 0);
/* except for vpAg: */
png_set_keep_unknown_chunks(read_ptr, 2, vpAg, 1);
@@ -1160,13 +1152,15 @@ callback function:
The PNG specification allows the width and height of an image to be as
large as 2^(31\-1 (0x7fffffff), or about 2.147 billion rows and columns.
For safety, libpng imposes a default limit of 1 million rows and columns.
Since very few applications really need to process such large images,
we have imposed an arbitrary 1,000,000 limit on rows and columns.
Larger images will be rejected immediately with a png_error() call. If
you wish to change these limits, you can use
you wish to change this limit, you can use
png_set_user_limits(png_ptr, width_max, height_max);
to set your own limits (libpng may reject some very wide images
to set your own limits, or use width_max = height_max = 0x7fffffffL
to allow all valid dimensions (libpng may reject some very large images
anyway because of potential buffer overflow conditions).
You should put this statement after you create the PNG structure and
@@ -1181,11 +1175,8 @@ If you need to retrieve the limits that are being applied, use
height_max = png_get_user_height_max(png_ptr);
The PNG specification sets no limit on the number of ancillary chunks
allowed in a PNG datastream. By default, libpng imposes a limit of
a total of 1000 sPLT, tEXt, iTXt, zTXt, and unknown chunks to be stored.
If you have set up both info_ptr and end_info_ptr, the limit applies
separately to each. You can change the limit on the total number of such
chunks that will be stored, with
allowed in a PNG datastream. You can impose a limit on the total number
of sPLT, tEXt, iTXt, zTXt, and unknown chunks that will be stored, with
png_set_chunk_cache_max(png_ptr, user_chunk_cache_max);
@@ -1193,9 +1184,8 @@ where 0x7fffffffL means unlimited. You can retrieve this limit with
chunk_cache_max = png_get_chunk_cache_max(png_ptr);
Libpng imposes a limit of 8 Megabytes (8,000,000 bytes) on the amount of
memory that a compressed chunk other than IDAT can occupy, when decompressed.
You can change this limit with
You can also set a limit on the amount of memory that a compressed chunk
other than IDAT can occupy, with
png_set_chunk_malloc_max(png_ptr, user_chunk_malloc_max);
@@ -1696,7 +1686,10 @@ row_pointers prior to calling png_read_png() with
png_set_rows(png_ptr, info_ptr, &row_pointers);
Alternatively you could allocate your image in one big block and define
row_pointers[i] to point into the proper places in your block.
row_pointers[i] to point into the proper places in your block. If
you do this, be sure to call png_read_update_info() described below,
to update the "rowbytes" value to account for any transformations that
change the number of bytes per row before you use it to allocate your block.
If you use png_set_rows(), the application is responsible for freeing
row_pointers (and row_pointers[i], if they were separately allocated).
@@ -1785,12 +1778,13 @@ in until png_read_end() has read the chunk data following the image.
interlace_type, compression_type, or filter_method can
be NULL if you are not interested in their values.
Note that png_get_IHDR() returns 32-bit data into
Note that png_get_IHDR() returns png_uint_32 data into
the application's width and height variables.
This is an unsafe situation if these are not png_uint_32
variables. In such situations, the
png_get_image_width() and png_get_image_height()
functions described below are safer.
variables, or if they are 32-bit variables on a 64-bit
platform. In such situations, the png_get_image_width()
and png_get_image_height() functions described below are
safer.
width = png_get_image_width(png_ptr,
info_ptr);
@@ -1973,6 +1967,11 @@ png_set_rgb_to_gray()).
PNG_ITXT_COMPRESSION_NONE
PNG_ITXT_COMPRESSION_zTXt
text_ptr[i].location - location of chunk
PNG_HAVE_IHDR
PNG_HAVE_PLTE
PNG_AFTER_IDAT
text_ptr[i].key - keyword for comment. Must contain
1-79 characters.
@@ -2195,16 +2194,15 @@ described below.
Data will be decoded into the supplied row buffers packed into bytes
unless the library has been told to transform it into another format.
For example, 4 bit/pixel paletted or grayscale data will be returned
2 pixels/byte with the leftmost pixel in the high-order bits of the byte,
unless png_set_packing() is called. 8-bit RGB data will be stored
2 pixels/byte with the leftmost pixel in the high-order bits of the
byte, unless png_set_packing() is called. 8-bit RGB data will be stored
in RGB RGB RGB format unless png_set_filler() or png_set_add_alpha()
is called to insert filler bytes, either before or after each RGB triplet.
16-bit RGB data will be returned RRGGBB RRGGBB, with the most significant
byte of the color value first, unless png_set_scale_16() is called to
transform it to regular RGB RGB triplets, or png_set_filler() or
png_set_add alpha() is called to insert two filler bytes, either before
or after each RRGGBB triplet. Similarly, 8-bit or 16-bit grayscale data can
png_set_add alpha() is called to insert filler bytes, either before or
after each RRGGBB triplet. Similarly, 8-bit or 16-bit grayscale data can
be modified with png_set_filler(), png_set_add_alpha(), png_set_strip_16(),
or png_set_scale_16().
@@ -2361,13 +2359,12 @@ into 4 or 8 bytes for windowing systems that need them in this format:
if (color_type == PNG_COLOR_TYPE_RGB)
png_set_filler(png_ptr, filler, PNG_FILLER_BEFORE);
where "filler" is the 8-bit or 16-bit number to fill with, and the location
is either PNG_FILLER_BEFORE or PNG_FILLER_AFTER, depending upon whether
you want the filler before the RGB or after. When filling an 8-bit pixel,
the least significant 8 bits of the number are used, if a 16-bit number is
supplied. This transformation does not affect images that already have full
alpha channels. To add an opaque alpha channel, use filler=0xffff and
PNG_FILLER_AFTER which will generate RGBA pixels.
where "filler" is the 8 or 16-bit number to fill with, and the location is
either PNG_FILLER_BEFORE or PNG_FILLER_AFTER, depending upon whether
you want the filler before the RGB or after. This transformation
does not affect images that already have full alpha channels. To add an
opaque alpha channel, use filler=0xff or 0xffff and PNG_FILLER_AFTER which
will generate RGBA pixels.
Note that png_set_filler() does not change the color type. If you want
to do that, you can add a true alpha channel with
@@ -2377,7 +2374,7 @@ to do that, you can add a true alpha channel with
png_set_add_alpha(png_ptr, filler, PNG_FILLER_AFTER);
where "filler" contains the alpha value to assign to each pixel.
The png_set_add_alpha() function was added in libpng-1.2.7.
This function was added in libpng-1.2.7.
If you are reading an image with an alpha channel, and you need the
data as ARGB instead of the normal PNG format RGBA:
@@ -3255,11 +3252,10 @@ section below for more information on the libpng error handling.
If you would rather avoid the complexity of setjmp/longjmp issues,
you can compile libpng with PNG_NO_SETJMP, in which case
errors will result in a call to PNG_ABORT() which defaults to abort().
errors will result in a call to PNG_ABORT which defaults to abort().
You can #define PNG_ABORT() to a function that does something
more useful than abort(), as long as your function does not
return.
You can #define PNG_ABORT to a function or other C code that does something
more useful than abort(), as long as your function does not return.
Checking for invalid palette index on write was added at libpng
1.5.10. If a pixel contains an invalid (out-of-range) index libpng issues
@@ -3470,7 +3466,6 @@ width, height, bit_depth, and color_type must be the same in each call.
(array of png_color)
num_palette - number of entries in the palette
png_set_gAMA(png_ptr, info_ptr, file_gamma);
png_set_gAMA_fixed(png_ptr, info_ptr, int_file_gamma);
@@ -3595,6 +3590,10 @@ width, height, bit_depth, and color_type must be the same in each call.
PNG_TEXT_COMPRESSION_zTXt
PNG_ITXT_COMPRESSION_NONE
PNG_ITXT_COMPRESSION_zTXt
text_ptr[i].location - location of chunk
PNG_HAVE_IHDR
PNG_HAVE_PLTE
PNG_AFTER_IDAT
text_ptr[i].key - keyword for comment. Must contain
1-79 characters.
text_ptr[i].text - text comments for current
@@ -3778,7 +3777,7 @@ tEXt chunk use RFC 1123 format dates (e.g. "22 May 1997 18:07:10 GMT"),
although this isn't a requirement. Unlike the tIME chunk, the
"Creation Time" tEXt chunk is not expected to be automatically changed
by the software. To facilitate the use of RFC 1123 dates, a function
png_convert_to_rfc1123_buffer(buffer, png_timep) is provided to
png_convert_to_rfc1123_buffer(png_ptr, buffer, png_timep) is provided to
convert from PNG time to an RFC 1123 format string. The caller must provide
a writeable buffer of at least 29 bytes.
@@ -4235,26 +4234,21 @@ as a wide variety of APIs to manipulate ancilliary information.
To read a PNG file using the simplified API:
1) Declare a 'png_image' structure (see below) on the stack, set the
version field to PNG_IMAGE_VERSION and the 'opaque' pointer to NULL
(this is REQUIRED, your program may crash if you don't do it.)
1) Declare a 'png_image' structure (see below) on the
stack and memset() it to all zero.
2) Call the appropriate png_image_begin_read... function.
3) Set the png_image 'format' member to the required sample format.
3) Set the png_image 'format' member to the required
format and allocate a buffer for the image.
4) Allocate a buffer for the image and, if required, the color-map.
5) Call png_image_finish_read to read the image and, if required, the
color-map into your buffers.
4) Call png_image_finish_read to read the image into
your buffer.
There are no restrictions on the format of the PNG input itself; all valid
color types, bit depths, and interlace methods are acceptable, and the
input image is transformed as necessary to the requested in-memory format
during the png_image_finish_read() step. The only caveat is that if you
request a color-mapped image from a PNG that is full-color or makes
complex use of an alpha channel the transformation is extremely lossy and the
result may look terrible.
during the png_image_finish_read() step.
To write a PNG file using the simplified API:
@@ -4263,14 +4257,13 @@ To write a PNG file using the simplified API:
2) Initialize the members of the structure that describe the
image, setting the 'format' member to the format of the
image samples.
image in memory.
3) Call the appropriate png_image_write... function with a
pointer to the image and, if necessary, the color-map to write
the PNG data.
pointer to the image to write the PNG data.
png_image is a structure that describes the in-memory format of an image
when it is being read or defines the in-memory format of an image that you
when it is being read or define the in-memory format of an image that you
need to write. The "png_image" structure contains the following members:
png_controlp opaque Initialize to NULL, free with png_image_free
@@ -4283,15 +4276,15 @@ need to write. The "png_image" structure contains the following members:
png_uint_32 warning_or_error;
char message[64];
In the event of an error or warning the "warning_or_error"
In the event of an error or warning the following field warning_or_error
field will be set to a non-zero value and the 'message' field will contain
a '\0' terminated string with the libpng error or warning message. If both
warnings and an error were encountered, only the error is recorded. If there
are multiple warnings, only the first one is recorded.
The upper 30 bits of the "warning_or_error" value are reserved; the low two
bits contain a two bit code such that a value more than 1 indicates a failure
in the API just called:
The upper 30 bits of this value are reserved; the low two bits contain
a two bit code such that a value more than 1 indicates a failure in the API
just called:
0 - no warning or error
1 - warning
@@ -4323,72 +4316,64 @@ channels are linear. Color channels use the RGB encoding (RGB end-points) of
the sRGB specification. This encoding is identified by the
PNG_FORMAT_FLAG_LINEAR flag below.
When the simplified API needs to convert between sRGB and linear colorspaces,
the actual sRGB transfer curve defined in the sRGB specification (see the
article at http://en.wikipedia.org/wiki/SRGB) is used, not the gamma=1/2.2
approximation used elsewhere in libpng.
When an alpha channel is present it is expected to denote pixel coverage
of the color or luminance channels and is returned as an associated alpha
channel: the color/gray channels are scaled (pre-multiplied) by the alpha
value.
The samples are either contained directly in the image data, between 1 and 8
bytes per pixel according to the encoding, or are held in a color-map indexed
by bytes in the image data. In the case of a color-map the color-map entries
are individual samples, encoded as above, and the image data has one byte per
pixel to select the relevant sample from the color-map.
When a color-mapped image is used as a result of calling
png_image_read_colormap or png_image_write_colormap the channels are encoded
in the color-map and the descriptions above apply to the color-map entries.
The image data is encoded as small integers, value 0..255, that index the
entries in the color-map. One integer (one byte) is stored for each pixel.
PNG_FORMAT_*
The #defines to be used in png_image::format. Each #define identifies a
particular layout of channel data and, if present, alpha values. There are
separate defines for each of the two component encodings.
separate defines for each of the two channel encodings.
A format is built up using single bit flag values. All combinations are
valid. Formats can be built up from the flag values or you can use one of
the predefined values below. When testing formats always use the FORMAT_FLAG
macros to test for individual features - future versions of the library may
add new flags.
A format is built up using single bit flag values. Not all combinations are
valid: use the bit flag values below for testing a format returned by the
read APIs, but set formats from the derived values.
When reading or writing color-mapped images the format should be set to the
format of the entries in the color-map then png_image_{read,write}_colormap
called to read or write the color-map and set the format correctly for the
image data. Do not set the PNG_FORMAT_FLAG_COLORMAP bit directly!
NOTE: libpng can be built with particular features disabled. If you see
NOTE: libpng can be built with particular features disabled, if you see
compiler errors because the definition of one of the following flags has been
compiled out it is because libpng does not have the required support. It is
possible, however, for the libpng configuration to enable the format on just
read or just write; in that case you may see an error at run time.
You can guard against this by checking for the definition of the
appropriate "_SUPPORTED" macro, one of:
read or just write; in that case you may see an error at run time. You can
guard against this by checking for the definition of:
PNG_SIMPLIFIED_{READ,WRITE}_{BGR,AFIRST}_SUPPORTED
PNG_FORMAT_FLAG_ALPHA format with an alpha channel
PNG_FORMAT_FLAG_COLOR color format: otherwise grayscale
PNG_FORMAT_FLAG_LINEAR 2-byte channels else 1-byte
PNG_FORMAT_FLAG_COLORMAP image data is color-mapped
PNG_FORMAT_FLAG_BGR BGR colors, else order is RGB
PNG_FORMAT_FLAG_AFIRST alpha channel comes first
PNG_FORMAT_FLAG_ALPHA 0x01 format with an alpha channel
PNG_FORMAT_FLAG_COLOR 0x02 color format: otherwise grayscale
PNG_FORMAT_FLAG_LINEAR 0x04 png_uint_16 channels else png_byte
PNG_FORMAT_FLAG_COLORMAP 0x08 libpng use only
PNG_FORMAT_FLAG_BGR 0x10 BGR colors, else order is RGB
PNG_FORMAT_FLAG_AFIRST 0x20 alpha channel comes first
Supported formats are as follows. Future versions of libpng may support more
formats; for compatibility with older versions simply check if the format
macro is defined using #ifdef. These defines describe the in-memory layout
of the components of the pixels of the image.
First the single byte (sRGB) formats:
First the single byte formats:
PNG_FORMAT_GRAY
PNG_FORMAT_GA
PNG_FORMAT_AG
PNG_FORMAT_RGB
PNG_FORMAT_BGR
PNG_FORMAT_RGBA
PNG_FORMAT_ARGB
PNG_FORMAT_BGRA
PNG_FORMAT_ABGR
PNG_FORMAT_GRAY 0
PNG_FORMAT_GA PNG_FORMAT_FLAG_ALPHA
PNG_FORMAT_AG (PNG_FORMAT_GA|PNG_FORMAT_FLAG_AFIRST)
PNG_FORMAT_RGB PNG_FORMAT_FLAG_COLOR
PNG_FORMAT_BGR (PNG_FORMAT_FLAG_COLOR|PNG_FORMAT_FLAG_BGR)
PNG_FORMAT_RGBA (PNG_FORMAT_RGB|PNG_FORMAT_FLAG_ALPHA)
PNG_FORMAT_ARGB (PNG_FORMAT_RGBA|PNG_FORMAT_FLAG_AFIRST)
PNG_FORMAT_BGRA (PNG_FORMAT_BGR|PNG_FORMAT_FLAG_ALPHA)
PNG_FORMAT_ABGR (PNG_FORMAT_BGRA|PNG_FORMAT_FLAG_AFIRST)
Then the linear 2-byte formats. When naming these "Y" is used to
indicate a luminance (gray) channel. The component order within the pixel
@@ -4397,22 +4382,22 @@ components in the linear format. The components are 16-bit integers in
the native byte order for your platform, and there is no provision for
swapping the bytes to a different endian condition.
PNG_FORMAT_LINEAR_Y
PNG_FORMAT_LINEAR_Y PNG_FORMAT_FLAG_LINEAR
PNG_FORMAT_LINEAR_Y_ALPHA
(PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_ALPHA)
PNG_FORMAT_LINEAR_RGB
(PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR)
PNG_FORMAT_LINEAR_RGB_ALPHA
(PNG_FORMAT_FLAG_LINEAR|PNG_FORMAT_FLAG_COLOR|
PNG_FORMAT_FLAG_ALPHA)
With color-mapped formats the image data is one byte for each pixel. The byte
is an index into the color-map which is formatted as above. To obtain a
color-mapped format it is sufficient just to add the PNG_FOMAT_FLAG_COLORMAP
to one of the above definitions, or you can use one of the definitions below.
Color-mapped formats are obtained by calling png_image_{read,write}_colormap,
as appropriate after setting png_image::format to the format of the color-map
to be read or written. Applications may check the value of
PNG_FORMAT_FLAG_COLORMAP to see if they have called the colormap API. The
format of the color-map may be extracted using the following macro.
PNG_FORMAT_RGB_COLORMAP
PNG_FORMAT_BGR_COLORMAP
PNG_FORMAT_RGBA_COLORMAP
PNG_FORMAT_ARGB_COLORMAP
PNG_FORMAT_BGRA_COLORMAP
PNG_FORMAT_ABGR_COLORMAP
PNG_FORMAT_OF_COLORMAP(fmt) ((fmt) & ~PNG_FORMAT_FLAG_COLORMAP)
PNG_IMAGE macros
@@ -4420,9 +4405,9 @@ These are convenience macros to derive information from a png_image
structure. The PNG_IMAGE_SAMPLE_ macros return values appropriate to the
actual image sample values - either the entries in the color-map or the
pixels in the image. The PNG_IMAGE_PIXEL_ macros return corresponding values
for the pixels and will always return 1 for color-mapped formats. The
remaining macros return information about the rows in the image and the
complete image.
for the pixels and will always return 1 after a call to
png_image_{read,write}_colormap. The remaining macros return information
about the rows in the image and the complete image.
NOTE: All the macros that take a png_image::format parameter are compile time
constants if the format parameter is, itself, a constant. Therefore these
@@ -4430,39 +4415,46 @@ macros can be used in array declarations and case labels where required.
Similarly the macros are also pre-processor constants (sizeof is not used) so
they can be used in #if tests.
First the information about the samples.
PNG_IMAGE_SAMPLE_CHANNELS(fmt)
Returns the total number of channels in a given format: 1..4
PNG_IMAGE_SAMPLE_COMPONENT_SIZE(fmt)
Returns the size in bytes of a single component of a pixel or color-map
entry (as appropriate) in the image: 1 or 2.
entry (as appropriate) in the image.
PNG_IMAGE_SAMPLE_SIZE(fmt)
This is the size of the sample data for one sample. If the image is
color-mapped it is the size of one color-map entry (and image pixels are
one byte in size), otherwise it is the size of one image pixel.
PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(fmt)
The maximum size of the color-map required by the format expressed in a
count of components. This can be used to compile-time allocate a
color-map:
png_uint_16 colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(linear_fmt)];
png_byte colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(sRGB_fmt)];
Alternatively use the PNG_IMAGE_COLORMAP_SIZE macro below to use the
information from one of the png_image_begin_read_ APIs and dynamically
allocate the required memory.
PNG_IMAGE_COLORMAP_SIZE(fmt)
The size of the color-map required by the format; this is the size of the
color-map buffer passed to the png_image_{read,write}_colormap APIs. It is
color-map buffer passed to the png_image_{read,write}_colormap APIs, it is
a fixed number determined by the format so can easily be allocated on the
stack if necessary.
#define PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(fmt)\
(PNG_IMAGE_SAMPLE_CHANNELS(fmt) * 256)
/* The maximum size of the color-map required by the format expressed in a
* count of components. This can be used to compile-time allocate a
* color-map:
*
* png_uint_16 colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(linear_fmt)];
*
* png_byte colormap[PNG_IMAGE_MAXIMUM_COLORMAP_COMPONENTS(sRGB_fmt)];
*
* Alternatively, use the PNG_IMAGE_COLORMAP_SIZE macro below to use the
* information from one of the png_image_begin_read_ APIs and dynamically
* allocate the required memory.
*/
Corresponding information about the pixels
PNG_IMAGE_PIXEL_(test,fmt)
PNG_IMAGE_PIXEL_CHANNELS(fmt)
The number of separate channels (components) in a pixel; 1 for a
color-mapped image.
@@ -4488,54 +4480,19 @@ Information about the whole row, or whole image
to start the next row on a 4-byte boundary.
PNG_IMAGE_BUFFER_SIZE(image, row_stride)
Return the size, in bytes, of an image buffer given a png_image and a row
stride - the number of components to leave space for in each row.
PNG_IMAGE_SIZE(image)
Return the size, in bytes, of the image in memory given just a png_image;
the row stride is the minimum stride required for the image.
PNG_IMAGE_COLORMAP_SIZE(image)
Return the size, in bytes, of the color-map of this image. If the image
format is not a color-map format this will return a size sufficient for
256 entries in the given format; check PNG_FORMAT_FLAG_COLORMAP if
you don't want to allocate a color-map in this case.
PNG_IMAGE_FLAG_*
Flags containing additional information about the image are held in
the 'flags' field of png_image.
Returns the size, in bytes, of an image buffer given a png_image and a row
stride - the number of components to leave space for in each row. This
macro takes care of multiplying row_stride by PNG_IMAGE_PIXEL_COMONENT_SIZE
when the image has 2-byte components.
PNG_IMAGE_FLAG_COLORSPACE_NOT_sRGB == 0x01
This indicates the the RGB values of the in-memory bitmap do not
correspond to the red, green and blue end-points defined by sRGB.
PNG_IMAGE_FLAG_FAST == 0x02
On write emphasise speed over compression; the resultant PNG file will be
larger but will be produced significantly faster, particular for large
images. Do not use this option for images which will be distributed, only
used it when producing intermediate files that will be read back in
repeatedly. For a typical 24-bit image the option will double the read
speed at the cost of increasing the image size by 25%, however for many
more compressible images the PNG file can be 10 times larger with only a
slight speed gain.
PNG_IMAGE_FLAG_16BIT_sRGB == 0x04
On read if the image is a 16-bit per component image and there is no gAMA
or sRGB chunk assume that the components are sRGB encoded. Notice that
images output by the simplified API always have gamma information; setting
this flag only affects the interpretation of 16-bit images from an
external source. It is recommended that the application expose this flag
to the user; the user can normally easily recognize the difference between
linear and sRGB encoding. This flag has no effect on write - the data
passed to the write APIs must have the correct encoding (as defined
above.)
If the flag is not set (the default) input 16-bit per component data is
assumed to be linear.
NOTE: the flag can only be set after the png_image_begin_read_ call,
because that call initializes the 'flags' field.
PNG_IMAGE_FLAG_COLORMAP == 0x02
The PNG is color-mapped. If this flag is set png_image_read_colormap
can be used without further loss of image information. If it is not set
png_image_read_colormap will cause significant loss if the image has any
READ APIs
@@ -4633,11 +4590,10 @@ a 16-bit linear encoded PNG file is written.
With all APIs row_stride is handled as in the read APIs - it is the spacing
from one row to the next in component sized units (float) and if negative
indicates a bottom-up row layout in the buffer. If you pass zero, libpng will
calculate the row_stride for you from the width and number of channels.
indicates a bottom-up row layout in the buffer.
Note that the write API does not support interlacing, sub-8-bit pixels,
indexed (paletted) images, or most ancillary chunks.
and indexed (paletted) images.
.SH VI. Modifying/Customizing libpng
@@ -4728,7 +4684,7 @@ Error handling in libpng is done through png_error() and png_warning().
Errors handled through png_error() are fatal, meaning that png_error()
should never return to its caller. Currently, this is handled via
setjmp() and longjmp() (unless you have compiled libpng with
PNG_NO_SETJMP, in which case it is handled via PNG_ABORT()),
PNG_NO_SETJMP, in which case it is handled via PNG_ABORT),
but you could change this to do things like exit() if you should wish,
as long as your function does not return.
@@ -5425,7 +5381,7 @@ limits are now
png_user_chunk_malloc_max 0 (unlimited) 8,000,000
The png_set_option() function (and the "options" member of the png struct) was
added to libpng-1.5.15, with option PNG_ARM_NEON.
added to libpng-1.5.15.
The library now supports a complete fixed point implementation and can
thus be used on systems that have no floating point support or very
@@ -5597,10 +5553,6 @@ enforced. The sRGB chunk is allowed to appear in images with any color type
and is interpreted by libpng to convey a one-tracer-curve gray profile or a
three-tracer-curve RGB profile as appropriate.
Libpng 1.5.x erroneously used /MD for Debug DLL builds; if you used the debug
builds in your app and you changed your app to use /MD you will need to
change it back to /MDd for libpng 1.6.x.
Prior to libpng-1.6.0 a warning would be issued if the iTXt chunk contained
an empty language field or an empty translated keyword. Both of these
are allowed by the PNG specification, so these warnings are no longer issued.
@@ -5666,12 +5618,58 @@ It can be set for testing debug or beta builds to ensure that they will compile
when the build type is switched to RC or STABLE. In essence this overrides the
PNG_LIBPNG_BUILD_BASE_TYPE definition which is not directly user controllable.
Starting with libpng-1.6.19, attempting to set an over-length PLTE chunk
is an error. Previously this requirement of the PNG specification was not
enforced, and the palette was always limited to 256 entries. An over-length
PLTE chunk found in an input PNG is silently truncated.
.SH XIII. Changes to Libpng from version 1.6.x to 1.7.x
.SH XIII. Detecting libpng
Some functions that were deprecated in libpng-1.6.0 were removed:
png_reset_zstream(),
png_info_init_3(),
png_data_freer() and its associated flags,
png_malloc_default(),
and png_free_default().
These apparently unused experimental functions have been deprecated
and the code within them, except for the APIs, has been removed.
png_set_filter_heuristics()
and png_set_filter_heuristics_fixed()
A location byte was added to the png_text structure.
A new private header file, "pngchunk.h", was added.
The PNG_ABORT() macro was changed to PNG_ABORT, and the default is now
"abort()" for all platforms (previously it was "ExitProcess(0)" on
Windows platforms). Starting with libpng-1.7.0 you have to define
PNG_ABORT instead of PNG_ABORT(), and you must include a terminating
semicolon in your definition, e.g.,
#if PNGCRUSH_LIBPNG_VER >= 10700
# ifdef _WINDOWS_
# define PNG_ABORT ExitProcess(0);
# else
# define PNG_ABORT abort();
# endif
#else
# ifdef _WINDOWS_
# define PNG_ABORT() ExitProcess(0)
# else
# define PNG_ABORT() abort()
# endif
#endif
The png_get_IHDR() function now allows users to supply NULL for any
argument in which they aren't interested. Previously, the width, height,
bit_depth, and color_type arguments were not allowed to be NULL.
The 8-bit compose and rgb_to_grayscale operations were made more accurate.
While these did not introduce API incompatibility, there may be differences
in unit test results.
Internal "affirm()" and "impossible()" macros were added, along with
some internal supporting macros and functions. These are similar to the
ANSI-C "assert()" macro but they are not affected by NDEBUG, and they are
private (not visible to nor usable by libpng applications).
.SH XIV. Detecting libpng
The png_get_io_ptr() function has been present since libpng-0.88, has never
changed, and is unaffected by conditional compilation macros. It is the
@@ -5704,7 +5702,7 @@ simple verbal discriptions of bug fixes, reported either to the
SourceForge bug tracker, to the png-mng-implement at lists.sf.net
mailing list, or directly to glennrp.
.SH XV. Coding style
.SH XVI. Coding style
Our coding style is similar to the "Allman" style
(See http://en.wikipedia.org/wiki/Indent_style#Allman_style), with curly
@@ -5824,12 +5822,10 @@ We prefer #ifdef and #ifndef to #if defined() and #if !defined()
when there is only one macro being tested. We always use parentheses
with "defined".
We express integer constants that are used as bit masks in hex format,
with an even number of lower-case hex digits, and to make them unsigned
(e.g., 0x00U, 0xffU, 0x0100U) and long if they are greater than 0x7fff
(e.g., 0xffffUL).
We prefer to express integers that are used as bit masks in hex format,
with an even number of lower-case hex digits (e.g., 0x00, 0xff, 0x0100).
We prefer to use underscores rather than camelCase in names, except
We prefer to use underscores in variable names rather than camelCase, except
for a few type names that we inherit from zlib.h.
We prefer "if (something != 0)" and "if (something == 0)"
@@ -5841,13 +5837,13 @@ Lines do not exceed 80 characters.
Other rules can be inferred by inspecting the libpng source.
.SH XVI. Y2K Compliance in libpng
.SH XVII. Y2K Compliance in libpng
Since the PNG Development group is an ad-hoc body, we can't make
an official declaration.
This is your unofficial assurance that libpng from version 0.71 and
upward through 1.6.22beta03 are Y2K compliant. It is my belief that earlier
upward through 1.7.0beta80 are Y2K compliant. It is my belief that earlier
versions were also Y2K compliant.
Libpng only has two year fields. One is a 2-byte unsigned integer
@@ -5863,9 +5859,8 @@ in libpng-1.6.x and will be removed from libpng-1.7.0.
There are seven time-related functions:
png_convert_to_rfc_1123_buffer() in png.c
(formerly png_convert_to_rfc_1152() in error, and
also formerly png_convert_to_rfc_1123())
png_convert_to_rfc_1123() in png.c
(formerly png_convert_to_rfc_1152() in error)
png_convert_from_struct_tm() in pngwrite.c, called
in pngwrite.c
png_convert_from_time_t() in pngwrite.c
@@ -5949,7 +5944,11 @@ the first widely used release:
...
1.5.23 15 10523 15.so.15.23[.0]
...
1.6.22 16 10622 16.so.16.22[.0]
1.6.19beta01-04 16 10619 16.so.16.19[.0]
1.6.19rc01-03 16 10619 16.so.16.19[.0]
...
1.7.0alpha01-10 17 10700 17.so.17.0[.0]
1.7.0beta01-80 17 10700 17.so.17.0[.0]
Henceforth the source version will match the shared-library minor
and patch numbers; the shared-library major version number will be
@@ -6005,7 +6004,7 @@ possible without all of you.
Thanks to Frank J. T. Wojcik for helping with the documentation.
Libpng version 1.6.22beta03 - March 9, 2016:
Libpng version 1.7.0beta80 - May 6, 2016:
Initially created in 1995 by Guy Eric Schalnat, then of Group 42, Inc.
Currently maintained by Glenn Randers-Pehrson (glennrp at users.sourceforge.net).
@@ -6030,7 +6029,7 @@ this sentence.
This code is released under the libpng license.
libpng versions 1.0.7, July 1, 2000 through 1.6.22beta03, March 9, 2016 are
libpng versions 1.0.7, July 1, 2000, through 1.7.0beta80, May 6, 2016, are
Copyright (c) 2000-2002, 2004, 2006-2016 Glenn Randers-Pehrson, are
derived from libpng-1.0.6, and are distributed according to the same
disclaimer and license as libpng-1.0.6 with the following individuals
@@ -6052,10 +6051,6 @@ and with the following additions to the disclaimer:
risk of satisfactory quality, performance, accuracy, and effort is with
the user.
Some files in the "contrib" directory and some configure-generated
files that are distributed with libpng have other copyright owners and
are released under other open source licenses.
libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are
Copyright (c) 1998-2000 Glenn Randers-Pehrson, are derived from
libpng-0.96, and are distributed according to the same disclaimer and
@@ -6079,9 +6074,6 @@ Contributing Authors:
Greg Roelofs
Tom Tanner
Some files in the "scripts" directory have other copyright owners
but are released under this license.
libpng versions 0.5, May 1995, through 0.88, January 1996, are
Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
@@ -6122,29 +6114,6 @@ appreciated.
END OF COPYRIGHT NOTICE, DISCLAIMER, and LICENSE.
TRADEMARK:
The name "libpng" has not been registered by the Copyright owner
as a trademark in any jurisdiction. However, because libpng has
been distributed and maintained world-wide, continually since 1995,
the Copyright owner claims "common-law trademark protection" in any
jurisdiction where common-law trademark is recognized.
OSI CERTIFICATION:
Libpng is OSI Certified Open Source Software. OSI Certified Open Source is
a certification mark of the Open Source Initiative. OSI has not addressed
the additional disclaimers inserted at version 1.0.7.
EXPORT CONTROL:
The Copyright owner believes 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).
A "png_get_copyright" function is available, for convenient use in "about"
boxes and the like:
@@ -6153,9 +6122,13 @@ boxes and the like:
Also, the PNG logo (in PNG format, of course) is supplied in the
files "pngbar.png" and "pngbar.jpg (88x31) and "pngnow.png" (98x31).
Libpng is OSI Certified Open Source Software. OSI Certified Open Source is
a certification mark of the Open Source Initiative. OSI has not addressed
the additional disclaimers inserted at version 1.0.7.
Glenn Randers-Pehrson
glennrp at users.sourceforge.net
March 9, 2016
May 6, 2016
.\" end of man page

View File

@@ -1,6 +1,6 @@
.TH LIBPNGPF 3 "March 9, 2016"
.TH LIBPNGPF 3 "May 6, 2016"
.SH NAME
libpng \- Portable Network Graphics (PNG) Reference Library 1.6.22beta03
libpng \- Portable Network Graphics (PNG) Reference Library 1.7.0beta80
(private functions)
.SH SYNOPSIS
\fB#include \fI"pngpriv.h"

5
png.5
View File

@@ -1,4 +1,4 @@
.TH PNG 5 "March 9, 2016"
.TH PNG 5 "May 6, 2016"
.SH NAME
png \- Portable Network Graphics (PNG) format
.SH DESCRIPTION
@@ -24,6 +24,7 @@ PNG specification (second edition), November 2003:
.IP
.br
<http://www.w3.org/TR/2003/REC-PNG-20031110/
.LP
PNG 1.2 specification, July 1999:
.IP
.br
@@ -58,7 +59,7 @@ Thomas Boutell and others (png-list).
.SH COPYRIGHT NOTICE
.LP
This man page is Copyright (c) 1998-2006 Glenn Randers-Pehrson. See png.h
This man page is Copyright (c) 1998-2012 Glenn Randers-Pehrson. See png.h
for conditions of use and distribution.
.LP
The PNG Specification (Second Edition) is

1701
png.c

File diff suppressed because it is too large Load Diff

1069
png.h

File diff suppressed because it is too large Load Diff

47
pngchunk.h Normal file
View File

@@ -0,0 +1,47 @@
/* pngchunk.h - PNG chunk descriptions
*
* Last changed in libpng 1.7.0 [(PENDING RELEASE)]
* Copyright (c) 2016 Glenn Randers-Pehrson
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer
* and license in png.h
*
* If this list is changed in any way scripts/chunkhash.c must be rebuilt and
* run to regenerate the lookup functions for the tables described from this
* list.
*
* IDAT MUST be first in the list; it must have index '0'. The order of the
* remaining chunks comes from section 5.6 "Chunk ordering" in the ISO spec
* plus the ordering rules in the PNG extensions documnet.
*
* Keep PNG_CHUNK_BEGIN and PNG_CHUNK_END at the beginning and end.
*/
PNG_CHUNK_BEGIN(IDAT, 73, 68, 65, 84, within_IDAT, after_start)
PNG_CHUNK( IHDR, 73, 72, 68, 82, before_start, at_start)
PNG_CHUNK( cHRM, 99, 72, 82, 77, before_PLTE, after_start)
PNG_CHUNK( gAMA, 103, 65, 77, 65, before_PLTE, after_start)
PNG_CHUNK( iCCP, 105, 67, 67, 80, before_PLTE, after_start)
PNG_CHUNK( sBIT, 115, 66, 73, 84, before_PLTE, after_start)
PNG_CHUNK( sRGB, 115, 82, 71, 66, before_PLTE, after_start)
PNG_CHUNK( PLTE, 80, 76, 84, 69, before_PLTE, after_start)
PNG_CHUNK( bKGD, 98, 75, 71, 68, before_IDAT, after_PLTE)
PNG_CHUNK( hIST, 104, 73, 83, 84, before_IDAT, after_PLTE)
PNG_CHUNK( tRNS, 116, 82, 78, 83, before_IDAT, after_PLTE)
PNG_CHUNK( oFFs, 111, 70, 70, 115, before_IDAT, after_start)
PNG_CHUNK( pCAL, 112, 67, 65, 76, before_IDAT, after_start)
PNG_CHUNK( sCAL, 115, 67, 65, 76, before_IDAT, after_start)
PNG_CHUNK( sTER, 115, 84, 69, 82, before_IDAT, after_start)
PNG_CHUNK( pHYs, 112, 72, 89, 115, before_IDAT, after_start)
PNG_CHUNK( sPLT, 115, 80, 76, 84, before_IDAT, after_start)
PNG_CHUNK( tIME, 116, 73, 77, 69, before_end, after_start)
PNG_CHUNK( iTXt, 105, 84, 88, 116, before_end, after_start)
PNG_CHUNK( tEXt, 116, 69, 88, 116, before_end, after_start)
PNG_CHUNK( zTXt, 122, 84, 88, 116, before_end, after_start)
PNG_CHUNK( fRAc, 102, 82, 65, 99, before_end, after_start)
PNG_CHUNK( gIFg, 103, 73, 70, 103, before_end, after_start)
PNG_CHUNK( gIFt, 103, 73, 70, 116, before_end, after_start)
PNG_CHUNK( gIFx, 103, 73, 70, 120, before_end, after_start)
PNG_CHUNK( dSIG, 100, 83, 73, 71, before_end, after_start)
PNG_CHUNK_END( IEND, 73, 69, 78, 68, before_end, after_IDAT)

View File

@@ -1,9 +1,9 @@
/* pngconf.h - machine configurable file for libpng
*
* libpng version 1.6.22beta03, March 9, 2016
* libpng version 1.7.0beta80, May 6, 2016
*
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
*
@@ -63,7 +63,7 @@
*/
#define PNG_CONST const /* backward compatibility only */
/* This controls optimization of the reading of 16-bit and 32-bit values
/* This controls optimization of the reading of 16 and 32 bit values
* from PNG files. It can be set on a per-app-file basis - it
* just changes whether a macro is used when the function is called.
* The library builder sets the default; if read functions are not
@@ -295,11 +295,11 @@
* table entries, so we discard it here. See the .dfn files in the
* scripts directory.
*/
#ifndef PNG_EXPORTA
# define PNG_EXPORTA(ordinal, type, name, args, attributes) \
PNG_FUNCTION(PNG_EXPORT_TYPE(type), (PNGAPI name), PNGARG(args), \
PNG_LINKAGE_API attributes)
# define PNG_EXPORTA(ordinal, type, name, args, attributes)\
PNG_FUNCTION(PNG_EXPORT_TYPE(type),(PNGAPI name),PNGARG(args), \
extern attributes)
#endif
/* ANSI-C (C90) does not permit a macro to be invoked with an empty argument,
@@ -307,7 +307,7 @@
*/
#define PNG_EMPTY /*empty list*/
#define PNG_EXPORT(ordinal, type, name, args) \
#define PNG_EXPORT(ordinal, type, name, args)\
PNG_EXPORTA(ordinal, type, name, args, PNG_EMPTY)
/* Use PNG_REMOVED to comment out a removed interface. */
@@ -445,6 +445,14 @@
# define PNG_RESTRICT /* The C99 "restrict" feature */
#endif
#ifndef PNG_FP_EXPORT /* A floating point API. */
# ifdef PNG_FLOATING_POINT_SUPPORTED
# define PNG_FP_EXPORT(ordinal, type, name, args)\
PNG_EXPORT(ordinal, type, name, args);
# else /* No floating point APIs */
# define PNG_FP_EXPORT(ordinal, type, name, args)
# endif
#endif
#ifndef PNG_FP_EXPORT /* A floating point API. */
# ifdef PNG_FLOATING_POINT_SUPPORTED
# define PNG_FP_EXPORT(ordinal, type, name, args)\
@@ -480,7 +488,7 @@
#if CHAR_BIT == 8 && UCHAR_MAX == 255
typedef unsigned char png_byte;
#else
# error "libpng requires 8-bit bytes"
# error "libpng requires 8 bit bytes"
#endif
#if INT_MIN == -32768 && INT_MAX == 32767
@@ -488,7 +496,7 @@
#elif SHRT_MIN == -32768 && SHRT_MAX == 32767
typedef short png_int_16;
#else
# error "libpng requires a signed 16-bit type"
# error "libpng requires a signed 16 bit type"
#endif
#if UINT_MAX == 65535
@@ -496,7 +504,7 @@
#elif USHRT_MAX == 65535
typedef unsigned short png_uint_16;
#else
# error "libpng requires an unsigned 16-bit type"
# error "libpng requires an unsigned 16 bit type"
#endif
#if INT_MIN < -2147483646 && INT_MAX > 2147483646
@@ -504,7 +512,7 @@
#elif LONG_MIN < -2147483646 && LONG_MAX > 2147483646
typedef long int png_int_32;
#else
# error "libpng requires a signed 32-bit (or more) type"
# error "libpng requires a signed 32 bit (or more) type"
#endif
#if UINT_MAX > 4294967294
@@ -512,11 +520,13 @@
#elif ULONG_MAX > 4294967294
typedef unsigned long int png_uint_32;
#else
# error "libpng requires an unsigned 32-bit (or more) type"
# error "libpng requires an unsigned 32 bit (or more) type"
#endif
/* Prior to 1.6.0 it was possible to disable the use of size_t, 1.6.0, however,
* requires an ISOC90 compiler and relies on consistent behavior of sizeof.
*
* DEPRECATED: don't use these types, instead use size_t and ptrdiff_t.
*/
typedef size_t png_size_t;
typedef ptrdiff_t png_ptrdiff_t;
@@ -537,13 +547,13 @@ typedef ptrdiff_t png_ptrdiff_t;
# endif
#endif
/* png_alloc_size_t is guaranteed to be no smaller than png_size_t, and no
* smaller than png_uint_32. Casts from png_size_t or png_uint_32 to
/* png_alloc_size_t is guaranteed to be no smaller than size_t, and no
* smaller than png_uint_32. Casts from size_t or png_uint_32 to
* png_alloc_size_t are not necessary; in fact, it is recommended not to use
* them at all so that the compiler can complain when something turns out to be
* problematic.
*
* Casts in the other direction (from png_alloc_size_t to png_size_t or
* Casts in the other direction (from png_alloc_size_t to size_t or
* png_uint_32) should be explicitly applied; however, we do not expect to
* encounter practical situations that require such conversions.
*
@@ -553,7 +563,7 @@ typedef ptrdiff_t png_ptrdiff_t;
#ifdef PNG_SMALL_SIZE_T
typedef png_uint_32 png_alloc_size_t;
#else
typedef png_size_t png_alloc_size_t;
typedef size_t png_alloc_size_t;
#endif
/* Prior to 1.6.0 libpng offered limited support for Microsoft C compiler
@@ -589,8 +599,8 @@ typedef char * png_charp;
typedef const char * png_const_charp;
typedef png_fixed_point * png_fixed_point_p;
typedef const png_fixed_point * png_const_fixed_point_p;
typedef png_size_t * png_size_tp;
typedef const png_size_t * png_const_size_tp;
typedef size_t * png_size_tp;
typedef const size_t * png_const_size_tp;
#ifdef PNG_STDIO_SUPPORTED
typedef FILE * png_FILE_p;

View File

@@ -36,13 +36,13 @@
/* These settings control the formatting of messages in png.c and pngerror.c */
/* Moved to pngdebug.h at 1.5.0 */
# ifndef PNG_LITERAL_SHARP
# define PNG_LITERAL_SHARP 0x23
# define PNG_LITERAL_SHARP 0x23U
# endif
# ifndef PNG_LITERAL_LEFT_SQUARE_BRACKET
# define PNG_LITERAL_LEFT_SQUARE_BRACKET 0x5b
# define PNG_LITERAL_LEFT_SQUARE_BRACKET 0x5bU
# endif
# ifndef PNG_LITERAL_RIGHT_SQUARE_BRACKET
# define PNG_LITERAL_RIGHT_SQUARE_BRACKET 0x5d
# define PNG_LITERAL_RIGHT_SQUARE_BRACKET 0x5dU
# endif
# ifndef PNG_STRING_NEWLINE
# define PNG_STRING_NEWLINE "\n"

View File

@@ -1,8 +1,8 @@
/* pngerror.c - stub functions for i/o and memory allocation
*
* Last changed in libpng 1.6.15 [November 20, 2014]
* Copyright (c) 1998-2002,2004,2006-2014 Glenn Randers-Pehrson
* Last changed in libpng 1.7.0 [(PENDING RELEASE)]
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
*
@@ -17,6 +17,7 @@
*/
#include "pngpriv.h"
#define PNG_SRC_FILE PNG_SRC_FILE_pngerror
#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
@@ -44,7 +45,7 @@ png_error,(png_const_structrp png_ptr, png_const_charp error_message),
if (png_ptr != NULL)
{
if ((png_ptr->flags &
(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT)) != 0
(PNG_FLAG_STRIP_ERROR_NUMBERS|PNG_FLAG_STRIP_ERROR_TEXT)) != 0)
{
if (*error_message == PNG_LITERAL_SHARP)
{
@@ -129,6 +130,7 @@ png_safecat(png_charp buffer, size_t bufsize, size_t pos,
* and end pointer (which should point just *beyond* the end of the buffer!)
* Returns the pointer to the start of the formatted string.
*/
#define PNG_HAVE_FORMAT_NUMBER /* for the code below */
png_charp
png_format_number(png_const_charp start, png_charp end, int format,
png_alloc_size_t number)
@@ -364,8 +366,7 @@ png_benign_error(png_const_structrp png_ptr, png_const_charp error_message)
if ((png_ptr->flags & PNG_FLAG_BENIGN_ERRORS_WARN) != 0)
{
# ifdef PNG_READ_SUPPORTED
if ((png_ptr->mode & PNG_IS_READ_STRUCT) != 0 &&
png_ptr->chunk_name != 0)
if (png_ptr->read_struct && png_ptr->chunk_name != 0)
png_chunk_warning(png_ptr, error_message);
else
# endif
@@ -375,8 +376,7 @@ png_benign_error(png_const_structrp png_ptr, png_const_charp error_message)
else
{
# ifdef PNG_READ_SUPPORTED
if ((png_ptr->mode & PNG_IS_READ_STRUCT) != 0 &&
png_ptr->chunk_name != 0)
if (png_ptr->read_struct && png_ptr->chunk_name != 0)
png_chunk_error(png_ptr, error_message);
else
# endif
@@ -419,10 +419,14 @@ png_app_error(png_const_structrp png_ptr, png_const_charp error_message)
#if defined(PNG_WARNINGS_SUPPORTED) || \
(defined(PNG_READ_SUPPORTED) && defined(PNG_ERROR_TEXT_SUPPORTED))
/* These utilities are used internally to build an error message that relates
* to the current chunk. The chunk name comes from png_ptr->chunk_name,
* which is used to prefix the message. The message is limited in length
* to 63 bytes. The name characters are output as hex digits wrapped in []
* if the character is invalid.
* to the current chunk. The chunk name comes from png_ptr->chunk_name unless
* png_ptr->zowner is set in which case that is used in preference. This is
* used to prefix the message. The message is limited in length to 63 bytes.
* The name characters are output as hex digits wrapped in [] if the character
* is invalid.
*
* Using 'zowner' means that IDAT errors at the end of the IDAT stream are still
* reported as from the IDAT chunks.
*/
#define isnonalpha(c) ((c) < 65 || (c) > 122 || ((c) > 90 && (c) < 97))
static PNG_CONST char png_digit[16] = {
@@ -434,9 +438,12 @@ static void /* PRIVATE */
png_format_buffer(png_const_structrp png_ptr, png_charp buffer, png_const_charp
error_message)
{
png_uint_32 chunk_name = png_ptr->chunk_name;
png_uint_32 chunk_name = png_ptr->zowner;
int iout = 0, ishift = 24;
if (chunk_name == 0)
chunk_name = png_ptr->chunk_name;
while (ishift >= 0)
{
int c = (int)(chunk_name >> ishift) & 0xff;
@@ -452,7 +459,7 @@ png_format_buffer(png_const_structrp png_ptr, png_charp buffer, png_const_charp
else
{
buffer[iout++] = (char)c;
buffer[iout++] = png_check_char(png_ptr, c);
}
}
@@ -528,17 +535,14 @@ png_chunk_benign_error(png_const_structrp png_ptr, png_const_charp
#endif /* READ */
void /* PRIVATE */
png_chunk_report(png_const_structrp png_ptr, png_const_charp message, int error)
(png_chunk_report)(png_const_structrp png_ptr, png_const_charp message,
int error)
{
# ifndef PNG_WARNINGS_SUPPORTED
PNG_UNUSED(message)
# endif
/* This is always supported, but for just read or just write it
* unconditionally does the right thing.
*/
# if defined(PNG_READ_SUPPORTED) && defined(PNG_WRITE_SUPPORTED)
if ((png_ptr->mode & PNG_IS_READ_STRUCT) != 0)
if (png_ptr->read_struct)
# endif
# ifdef PNG_READ_SUPPORTED
@@ -546,13 +550,16 @@ png_chunk_report(png_const_structrp png_ptr, png_const_charp message, int error)
if (error < PNG_CHUNK_ERROR)
png_chunk_warning(png_ptr, message);
else
else if (error < PNG_CHUNK_FATAL)
png_chunk_benign_error(png_ptr, message);
else
png_chunk_error(png_ptr, message);
}
# endif
# if defined(PNG_READ_SUPPORTED) && defined(PNG_WRITE_SUPPORTED)
else if ((png_ptr->mode & PNG_IS_READ_STRUCT) == 0)
else if (!png_ptr->read_struct)
# endif
# ifdef PNG_WRITE_SUPPORTED
@@ -560,14 +567,27 @@ png_chunk_report(png_const_structrp png_ptr, png_const_charp message, int error)
if (error < PNG_CHUNK_WRITE_ERROR)
png_app_warning(png_ptr, message);
else
else if (error < PNG_CHUNK_FATAL)
png_app_error(png_ptr, message);
else
png_error(png_ptr, message);
}
# endif
# ifndef PNG_ERROR_TEXT_SUPPORTED
PNG_UNUSED(message)
# endif
}
#ifdef PNG_ERROR_TEXT_SUPPORTED
#ifdef PNG_FLOATING_POINT_SUPPORTED
#if defined(PNG_FLOATING_POINT_SUPPORTED) && \
(defined(PNG_gAMA_SUPPORTED) || defined(PNG_cHRM_SUPPORTED) || \
defined(PNG_sCAL_SUPPORTED) || defined(PNG_READ_BACKGROUND_SUPPORTED) || \
defined(PNG_READ_RGB_TO_GRAY_SUPPORTED)) || \
(defined(PNG_FLOATING_ARITHMETIC_SUPPORTED) &&\
defined(PNG_sCAL_SUPPORTED))
PNG_FUNCTION(void,
png_fixed_error,(png_const_structrp png_ptr, png_const_charp name),PNG_NORETURN)
{
@@ -641,9 +661,9 @@ png_set_longjmp_fn(png_structrp png_ptr, png_longjmp_ptr longjmp_fn,
/* This is an internal error in libpng: somehow we have been left
* with a stack allocated jmp_buf when the application regained
* control. It's always possible to fix this up, but for the moment
* this is a png_error because that makes it easy to detect.
* this is an affirm because that makes it easy to detect.
*/
png_error(png_ptr, "Libpng jmp_buf still allocated");
impossible("Libpng jmp_buf still allocated");
/* png_ptr->jmp_buf_ptr = &png_ptr->jmp_buf_local; */
}
}
@@ -770,9 +790,13 @@ png_longjmp,(png_const_structrp png_ptr, int val),PNG_NORETURN)
* choice is to terminate the whole process (or maybe the thread); to do
* this the ANSI-C abort() function is used unless a different method is
* implemented by overriding the default configuration setting for
* PNG_ABORT().
* PNG_ABORT (see scripts/pnglibconf.dfa).
*
* API change: prior to 1.7.0 PNG_ABORT was invoked as a function type macro
* with no arguments 'PNG_ABORT();', in 1.7.0 this is changed to a simple
* macro that is defined in the configuration.
*/
PNG_ABORT();
PNG_ABORT
}
#ifdef PNG_WARNINGS_SUPPORTED
@@ -869,7 +893,7 @@ png_set_strip_error_numbers(png_structrp png_ptr, png_uint_32 strip_mode)
if (png_ptr != NULL)
{
png_ptr->flags &=
((~(PNG_FLAG_STRIP_ERROR_NUMBERS |
((PNG_BIC_MASK(PNG_FLAG_STRIP_ERROR_NUMBERS |
PNG_FLAG_STRIP_ERROR_TEXT))&strip_mode);
}
}
@@ -960,4 +984,258 @@ png_safe_execute(png_imagep image_in, int (*function)(png_voidp), png_voidp arg)
return result;
}
#endif /* SIMPLIFIED READ || SIMPLIFIED_WRITE */
/* Affirms: minimal code in 'STABLE' builds to return control to the
* application via png_error(), more verbose code followed by PNG_ABORT for
* all other builds to ensure that internal errors are detected.
*
* The code always produces a message if it is possible, regardless of the
* setting of PNG_ERROR_TEXT_SUPPORTED, except that in stable builds
* PNG_ERROR_TEXT_SUPPORTED is honored. See pngpriv.h for the calculation of
* the two control macros PNG_RELEASE_BUILD (don't abort; stable build or rc)
* and PNG_AFFIRM_TEXT (output text.)
*/
#if PNG_AFFIRM_TEXT
# ifdef PNG_HAVE_FORMAT_NUMBER
static size_t
png_affirm_number(png_charp buffer, size_t bufsize, size_t pos,
unsigned int number, int format)
{
char numbuf[PNG_NUMBER_BUFFER_SIZE];
return png_safecat(buffer, bufsize, pos,
png_format_number(numbuf, numbuf + sizeof numbuf, format, number));
}
# define affirm_number(a,b,c,d,e) png_affirm_number(a,b,c,d,e)
# else /* !HAVE_FORMAT_NUMBER */
static size_t
png_affirm_number(png_charp buffer, size_t bufsize, size_t pos,
unsigned int number)
{
/* binhex it; highly non-portable, assumes the ASCII character set, but
* if warnings are turned off then it is unlikely the text will get read
* anyway. This binhex variant is (48+val), where 'val' is the next 6
* bits of the number, so it starts as '0' (for 0) and ends at 'I' for
* 63. The number is wrapped in {}, so 0 comes out as '{}' and 9 comes
* out as '{9}' and so on.
*/
char numbuf[32];
int i = sizeof numbuf;
numbuf[--i] = 0;
numbuf[--i] = '}';
do
{
if (number > 0)
numbuf[--i] = (char)/*SAFE*/((number & 63) + 48), number >>= 6;
else
{
numbuf[--i] = '{';
break;
}
}
while (i > 0);
return png_safecat(buffer, bufsize, pos, numbuf+i);
}
# define affirm_number(a,b,c,d,e) png_affirm_number(a,b,c,d)
#endif /* !HAVE_FORMAT_NUMBER */
static void
affirm_text(png_charp buffer, size_t bufsize,
param_deb(png_const_charp condition) unsigned int position)
{
/* Format the 'position' number and output:
*
* "<file> <line>: affirm 'condition' failed\n"
* " libpng version <version> - <date>\n"
* " translated __DATE__ __TIME__"
*
* In the STABLE versions the output is the same for the last two lines
* but the first line becomes:
*
* "<position>: affirm failed"
*
* If there is no number formatting the numbers just get replaced by
* some binhex (see the utility above).
*/
size_t pos = 0;
# if PNG_RELEASE_BUILD /* no 'condition' parameter: minimal text */
pos = affirm_number(buffer, bufsize, pos, position, PNG_NUMBER_FORMAT_x);
pos = png_safecat(buffer, bufsize, pos, ": affirm failed");
# else /* !STABLE */
/* Break down 'position' into a file name and a line number: */
{
# define PNG_apply(f) { #f "\0", PNG_SRC_FILE_ ## f },
# define PNG_end { "", PNG_SRC_FILE_LAST }
static struct {
char filename[28]; /* GCC checks this size */
unsigned int base;
} fileinfo[] = { PNG_FILES };
# undef PNG_apply
# undef PNG_end
unsigned int i;
png_const_charp filename;
/* Do 'nfiles' this way to avoid problems with g++ where it whines
* about (size_t) being larger than (int), even though this is a
* compile time constant:
*/
# define nfiles ((sizeof fileinfo)/(sizeof (fileinfo[0])))
for (i=0; i < nfiles && position > fileinfo[i].base; ++i) {}
if (i == 0 || i > nfiles)
filename = "UNKNOWN";
else
{
filename = fileinfo[i-1].filename;
position -= fileinfo[i-1].base;
}
# undef nfiles
pos = png_safecat(buffer, bufsize, pos, filename);
pos = png_safecat(buffer, bufsize, pos, ".c ");
pos = affirm_number(buffer, bufsize, pos, position,
PNG_NUMBER_FORMAT_u);
}
pos = png_safecat(buffer, bufsize, pos, ": affirm '");
pos = png_safecat(buffer, bufsize, pos, condition);
pos = png_safecat(buffer, bufsize, pos, "' failed\n");
# endif /* !STABLE */
pos = png_safecat(buffer, bufsize, pos, PNG_HEADER_VERSION_STRING);
pos = png_safecat(buffer, bufsize, pos,
" translated " __DATE__ " " __TIME__);
}
#define affirm_text(b, c, p)\
do {\
(affirm_text)(b, sizeof b, param_deb(c) (p));\
} while (0)
#endif /* AFFIRM_TEXT */
PNG_FUNCTION(void,png_affirm,(png_const_structrp png_ptr,
param_deb(png_const_charp condition) unsigned int position),PNG_NORETURN)
{
# if PNG_AFFIRM_TEXT
char buffer[512];
affirm_text(buffer, condition, position);
# else /* !AFFIRM_TEXT */
PNG_UNUSED(position)
# if !PNG_RELEASE_BUILD
PNG_UNUSED(condition)
# endif
# endif /* AFFIRM_TEXT */
/* Now in STABLE do a png_error, but in other builds output the message
* (if possible) then abort (PNG_ABORT).
*/
# if PNG_RELEASE_BUILD
png_error(png_ptr, buffer/*macro parameter used only if ERROR_TEXT*/);
# else /* !AFFIRM_ERROR */
/* Use console IO if possible; this is because there is no guarantee that
* the app 'warning' will output anything. For certain the simplified
* API implementation just copies the message (truncated) to the image
* message buffer, which makes debugging much more difficult.
*
* Note that it is possible that neither WARNINGS nor CONSOLE_IO are
* supported; in that case no text will be output (and PNG_AFFIRM_TEXT
* will be false.)
*/
# ifdef PNG_CONSOLE_IO_SUPPORTED
fprintf(stderr, "%s\n", buffer);
PNG_UNUSED(png_ptr)
# elif defined PNG_WARNINGS_SUPPORTED
if (png_ptr != NULL && png_ptr->warning_fn != NULL)
png_ptr->warning_fn(png_constcast(png_structrp, png_ptr), buffer);
/* else no way to output the text */
# else
PNG_UNUSED(png_ptr)
# endif
PNG_ABORT
# endif /* AFFIRM_ERROR */
}
#if !PNG_RELEASE_BUILD
void /* PRIVATE */
png_handled_affirm(png_const_structrp png_ptr, png_const_charp message,
unsigned int position)
{
# if PNG_RELEASE_BUILD
/* testing in RC: we want to return control to the caller, so do not
* use png_affirm.
*/
char buffer[512];
affirm_text(buffer, message, position);
# ifdef PNG_CONSOLE_IO_SUPPORTED
fprintf(stderr, "%s\n", buffer);
# elif defined PNG_WARNINGS_SUPPORTED
if (png_ptr != NULL && png_ptr->warning_fn != NULL)
png_ptr->warning_fn(png_constcast(png_structrp, png_ptr), buffer);
/* else no way to output the text */
# else
PNG_UNUSED(png_ptr)
# endif
# else
png_affirm(png_ptr, message, position);
# endif
}
#endif /* !RELEASE_BUILD */
#ifdef PNG_RANGE_CHECK_SUPPORTED
/* The character/byte checking APIs. These do their own calls to png_affirm
* because the caller provides the position.
*/
unsigned int /* PRIVATE */
png_bit_affirm(png_const_structrp png_ptr, unsigned int position,
unsigned int u, unsigned int bits)
{
/* The following avoids overflow errors even if 'bits' is 16 or 32: */
if (u <= (1U << bits)-1U)
return u;
png_affirm(png_ptr, param_deb("(bit field) range") position);
}
char /* PRIVATE */
png_char_affirm(png_const_structrp png_ptr, unsigned int position, int c)
{
if (c >= CHAR_MIN && c <= CHAR_MAX)
return (char)/*SAFE*/c;
png_affirm(png_ptr, param_deb("(char) range") position);
}
png_byte /* PRIVATE */
png_byte_affirm(png_const_structrp png_ptr, unsigned int position, int b)
{
/* For the type png_byte the limits.h values are ignored and we check
* against the values PNG expects to store in a byte:
*/
if (b >= 0 && b <= 255)
return (png_byte)/*SAFE*/b;
png_affirm(png_ptr, param_deb("PNG byte range") position);
}
#if INT_MAX >= 65535
png_uint_16 /* PRIVATE */
png_u16_affirm(png_const_structrp png_ptr, unsigned int position, int b)
{
/* Check against the PNG 16-bit limit, as with png_byte. */
if (b >= 0 && b <= 65535)
return (png_uint_16)/*SAFE*/b;
png_affirm(png_ptr, param_deb("PNG 16-bit range") position);
}
#endif /* INT_MAX >= 65535 */
#endif /* RANGE_CHECK */
#endif /* READ || WRITE */

125
pngget.c
View File

@@ -1,8 +1,8 @@
/* pngget.c - retrieval of values from info struct
*
* Last changed in libpng 1.6.17 [March 26, 2015]
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
* Last changed in libpng 1.7.0 [(PENDING RELEASE)]
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
*
@@ -13,6 +13,7 @@
*/
#include "pngpriv.h"
#define PNG_SRC_FILE PNG_SRC_FILE_pngget
#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
@@ -26,16 +27,18 @@ png_get_valid(png_const_structrp png_ptr, png_const_inforp info_ptr,
return(0);
}
png_size_t PNGAPI
png_alloc_size_t PNGAPI
png_get_rowbytes(png_const_structrp png_ptr, png_const_inforp info_ptr)
{
if (png_ptr != NULL && info_ptr != NULL)
return(info_ptr->rowbytes);
return png_calc_rowbytes(png_ptr,
PNG_FORMAT_CHANNELS(info_ptr->format) * info_ptr->bit_depth,
info_ptr->width);
return(0);
return 0;
}
#ifdef PNG_INFO_IMAGE_SUPPORTED
#ifdef PNG_READ_PNG_SUPPORTED
png_bytepp PNGAPI
png_get_rows(png_const_structrp png_ptr, png_const_inforp info_ptr)
{
@@ -79,7 +82,8 @@ png_byte PNGAPI
png_get_color_type(png_const_structrp png_ptr, png_const_inforp info_ptr)
{
if (png_ptr != NULL && info_ptr != NULL)
return info_ptr->color_type;
return png_check_byte(png_ptr,
PNG_COLOR_TYPE_FROM_FORMAT(info_ptr->format));
return (0);
}
@@ -316,7 +320,7 @@ png_get_y_offset_pixels(png_const_structrp png_ptr, png_const_inforp info_ptr)
static png_uint_32
ppi_from_ppm(png_uint_32 ppm)
{
#if 0
#if 0 /*NOT USED*/
/* The conversion is *(2.54/100), in binary (32 digits):
* .00000110100000001001110101001001
*/
@@ -365,14 +369,25 @@ png_get_y_pixels_per_inch(png_const_structrp png_ptr, png_const_inforp info_ptr)
#ifdef PNG_FIXED_POINT_SUPPORTED
static png_fixed_point
png_fixed_inches_from_microns(png_const_structrp png_ptr, png_int_32 microns)
png_fixed_inches_from_microns(png_const_structrp png_ptr,
png_int_32 microns)
{
/* Convert from metres * 1,000,000 to inches * 100,000, meters to
* inches is simply *(100/2.54), so we want *(10/2.54) == 500/127.
* Notice that this can overflow - a warning is output and 0 is
* returned.
*/
return png_muldiv_warn(png_ptr, microns, 500, 127);
png_fixed_point result;
if (png_muldiv(&result, microns, 500, 127) != 0)
return result;
/* TODO: review this, png_error might be better. */
png_warning(png_ptr, "inch to microns overflow");
return 0;
# ifndef PNG_WARNINGS_SUPPORTED
PNG_UNUSED(png_ptr)
# endif
}
png_fixed_point PNGAPI
@@ -382,9 +397,7 @@ png_get_x_offset_inches_fixed(png_const_structrp png_ptr,
return png_fixed_inches_from_microns(png_ptr,
png_get_x_offset_microns(png_ptr, info_ptr));
}
#endif
#ifdef PNG_FIXED_POINT_SUPPORTED
png_fixed_point PNGAPI
png_get_y_offset_inches_fixed(png_const_structrp png_ptr,
png_const_inforp info_ptr)
@@ -392,7 +405,7 @@ png_get_y_offset_inches_fixed(png_const_structrp png_ptr,
return png_fixed_inches_from_microns(png_ptr,
png_get_y_offset_microns(png_ptr, info_ptr));
}
#endif
#endif /* FIXED_POINT */
#ifdef PNG_FLOATING_POINT_SUPPORTED
float PNGAPI
@@ -456,18 +469,18 @@ png_get_pHYs_dpi(png_const_structrp png_ptr, png_const_inforp info_ptr,
return (retval);
}
#endif /* pHYs */
#endif /* INCH_CONVERSIONS */
#endif /* INCH_CONVERSIONS */
/* png_get_channels really belongs in here, too, but it's been around longer */
#endif /* EASY_ACCESS */
#endif /* EASY_ACCESS */
png_byte PNGAPI
png_get_channels(png_const_structrp png_ptr, png_const_inforp info_ptr)
{
if (png_ptr != NULL && info_ptr != NULL)
return(info_ptr->channels);
return png_check_byte(png_ptr, PNG_FORMAT_CHANNELS(info_ptr->format));
return (0);
}
@@ -812,7 +825,7 @@ png_get_IHDR(png_const_structrp png_ptr, png_const_inforp info_ptr,
*bit_depth = info_ptr->bit_depth;
if (color_type != NULL)
*color_type = info_ptr->color_type;
*color_type = PNG_COLOR_TYPE_FROM_FORMAT(info_ptr->format);
if (compression_type != NULL)
*compression_type = info_ptr->compression_type;
@@ -823,16 +836,7 @@ png_get_IHDR(png_const_structrp png_ptr, png_const_inforp info_ptr,
if (interlace_type != NULL)
*interlace_type = info_ptr->interlace_type;
/* This is redundant if we can be sure that the info_ptr values were all
* assigned in png_set_IHDR(). We do the check anyhow in case an
* application has ignored our advice not to mess with the members
* of info_ptr directly.
*/
png_check_IHDR(png_ptr, info_ptr->width, info_ptr->height,
info_ptr->bit_depth, info_ptr->color_type, info_ptr->interlace_type,
info_ptr->compression_type, info_ptr->filter_type);
return (1);
return 1;
}
#ifdef PNG_oFFs_SUPPORTED
@@ -884,9 +888,8 @@ png_get_pCAL(png_const_structrp png_ptr, png_inforp info_ptr,
#endif
#ifdef PNG_sCAL_SUPPORTED
# ifdef PNG_FIXED_POINT_SUPPORTED
# if defined(PNG_FLOATING_ARITHMETIC_SUPPORTED) || \
defined(PNG_FLOATING_POINT_SUPPORTED)
# ifdef PNG_FLOATING_ARITHMETIC_SUPPORTED
# ifdef PNG_FIXED_POINT_SUPPORTED
png_uint_32 PNGAPI
png_get_sCAL_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
int *unit, png_fixed_point *width, png_fixed_point *height)
@@ -907,9 +910,9 @@ png_get_sCAL_fixed(png_const_structrp png_ptr, png_const_inforp info_ptr,
return(0);
}
# endif /* FLOATING_ARITHMETIC */
# endif /* FIXED_POINT */
# ifdef PNG_FLOATING_POINT_SUPPORTED
# endif /* FIXED_POINT */
# ifdef PNG_FLOATING_POINT_SUPPORTED
png_uint_32 PNGAPI
png_get_sCAL(png_const_structrp png_ptr, png_const_inforp info_ptr,
int *unit, double *width, double *height)
@@ -925,7 +928,9 @@ png_get_sCAL(png_const_structrp png_ptr, png_const_inforp info_ptr,
return(0);
}
# endif /* FLOATING POINT */
# endif /* FLOATING POINT */
# endif /* FLOATING_ARITHMETIC */
png_uint_32 PNGAPI
png_get_sCAL_s(png_const_structrp png_ptr, png_const_inforp info_ptr,
int *unit, png_charpp width, png_charpp height)
@@ -1069,7 +1074,7 @@ png_get_tRNS(png_const_structrp png_ptr, png_inforp info_ptr,
{
png_debug1(1, "in %s retrieval function", "tRNS");
if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
if ((info_ptr->format & PNG_FORMAT_FLAG_COLORMAP) != 0)
{
if (trans_alpha != NULL)
{
@@ -1081,7 +1086,7 @@ png_get_tRNS(png_const_structrp png_ptr, png_inforp info_ptr,
*trans_color = &(info_ptr->trans_color);
}
else /* if (info_ptr->color_type != PNG_COLOR_TYPE_PALETTE) */
else /* if (info_ptr->format not colormapped */
{
if (trans_color != NULL)
{
@@ -1115,15 +1120,17 @@ png_get_unknown_chunks(png_const_structrp png_ptr, png_inforp info_ptr,
return info_ptr->unknown_chunks_num;
}
return (0);
return 0;
}
#endif
#ifdef PNG_READ_RGB_TO_GRAY_SUPPORTED
png_byte PNGAPI
png_get_rgb_to_gray_status (png_const_structrp png_ptr)
png_get_rgb_to_gray_status(png_const_structrp png_ptr)
{
return (png_byte)(png_ptr ? png_ptr->rgb_to_gray_status : 0);
if (png_ptr)
return png_ptr->rgb_to_gray_status;
return 0;
}
#endif
@@ -1131,31 +1138,25 @@ png_get_rgb_to_gray_status (png_const_structrp png_ptr)
png_voidp PNGAPI
png_get_user_chunk_ptr(png_const_structrp png_ptr)
{
return (png_ptr ? png_ptr->user_chunk_ptr : NULL);
if (png_ptr)
return png_ptr->user_chunk_ptr;
return NULL;
}
#endif
png_size_t PNGAPI
png_alloc_size_t PNGAPI
png_get_compression_buffer_size(png_const_structrp png_ptr)
{
if (png_ptr == NULL)
return 0;
#ifdef PNG_WRITE_SUPPORTED
if ((png_ptr->mode & PNG_IS_READ_STRUCT) != 0)
#endif
{
#ifdef PNG_SEQUENTIAL_READ_SUPPORTED
return png_ptr->IDAT_read_size;
#else
return PNG_IDAT_READ_SIZE;
#endif
}
# if defined(PNG_SEQUENTIAL_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
return png_ptr->IDAT_size;
#ifdef PNG_WRITE_SUPPORTED
else
return png_ptr->zbuffer_size;
#endif
# else
return PNG_IDAT_READ_SIZE; /* progressive reader */
# endif
}
#ifdef PNG_SET_USER_LIMITS_SUPPORTED
@@ -1202,18 +1203,4 @@ png_get_io_chunk_type (png_const_structrp png_ptr)
return png_ptr->chunk_name;
}
#endif /* IO_STATE */
#ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED
# ifdef PNG_GET_PALETTE_MAX_SUPPORTED
int PNGAPI
png_get_palette_max(png_const_structp png_ptr, png_const_infop info_ptr)
{
if (png_ptr != NULL && info_ptr != NULL)
return png_ptr->num_palette_max;
return (-1);
}
# endif
#endif
#endif /* READ || WRITE */

View File

@@ -11,7 +11,7 @@
* and license in png.h
*/
/* png_info is a structure that holds the information in a PNG file so
/* png_info is a structure that holds the information in a PNG file so
* that the application can find out the characteristics of the image.
* If you are reading the file, this structure will tell you what is
* in the PNG file. If you are writing the file, fill in the information
@@ -57,25 +57,17 @@ struct png_info_def
/* The following are necessary for every PNG file */
png_uint_32 width; /* width of image in pixels (from IHDR) */
png_uint_32 height; /* height of image in pixels (from IHDR) */
png_uint_32 valid; /* valid chunk data (see PNG_INFO_ below) */
png_size_t rowbytes; /* bytes needed to hold an untransformed row */
unsigned int valid; /* valid chunk data (see PNG_INFO_ in png.h) */
png_colorp palette; /* array of color values (valid & PNG_INFO_PLTE) */
png_uint_16 num_palette; /* number of color entries in "palette" (PLTE) */
png_uint_16 num_trans; /* number of transparent palette color (tRNS) */
png_byte bit_depth; /* 1, 2, 4, 8, or 16 bits/channel (from IHDR) */
png_byte color_type; /* see PNG_COLOR_TYPE_ below (from IHDR) */
unsigned int num_palette:9; /* number of color entries in "palette" (PLTE) */
unsigned int num_trans:9; /* number of transparent palette color (tRNS) */
unsigned int bit_depth:6; /* 1, 2, 4, 8, 16 or 32 bits/channel */
unsigned int format:PNG_RF_BITS; /* row format; see png_struct.h */
/* The following three should have been named *_method not *_type */
png_byte compression_type; /* must be PNG_COMPRESSION_TYPE_BASE (IHDR) */
png_byte filter_type; /* must be PNG_FILTER_TYPE_BASE (from IHDR) */
png_byte interlace_type; /* One of PNG_INTERLACE_NONE, PNG_INTERLACE_ADAM7 */
/* The following are set by png_set_IHDR, called from the application on
* write, but the are never actually used by the write code.
*/
png_byte channels; /* number of data channels per pixel (1, 2, 3, 4) */
png_byte pixel_depth; /* number of bits per pixel */
png_byte spare_byte; /* to align the data, and for future use */
#ifdef PNG_READ_SUPPORTED
/* This is never set during write */
png_byte signature[8]; /* magic bytes read by libpng from start of file */
@@ -105,7 +97,6 @@ struct png_info_def
/* iCCP chunk data. */
png_charp iccp_name; /* profile name */
png_bytep iccp_profile; /* International Color Consortium profile data */
png_uint_32 iccp_proflen; /* ICC profile data length */
#endif
#ifdef PNG_TEXT_SUPPORTED
@@ -127,6 +118,7 @@ struct png_info_def
* modified. See the png_time struct for the contents of this struct.
*/
png_time mod_time;
png_byte time_location;
#endif
#ifdef PNG_sBIT_SUPPORTED

View File

@@ -1,8 +1,8 @@
/* pngmem.c - stub functions for memory allocation
*
* Last changed in libpng 1.6.15 [November 20, 2014]
* Copyright (c) 1998-2002,2004,2006-2014 Glenn Randers-Pehrson
* Last changed in libpng 1.7.0 [(PENDING RELEASE)]
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
*
@@ -18,6 +18,7 @@
*/
#include "pngpriv.h"
#define PNG_SRC_FILE PNG_SRC_FILE_pngmem
#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
/* Free a png_struct */
@@ -80,19 +81,23 @@ png_malloc_base,(png_const_structrp png_ptr, png_alloc_size_t size),
/* Some compilers complain that this is always true. However, it
* can be false when integer overflow happens.
*/
if (size > 0 && size <= PNG_SIZE_MAX
# ifdef PNG_MAX_MALLOC_64K
&& size <= 65536U
# endif
)
#ifdef PNG_MAX_MALLOC_64K
if (size > 0 && size <= PNG_SIZE_MAX && size <= 65536U)
#else
if (size > 0 && size <= PNG_SIZE_MAX)
#endif
{
png_voidp result;
#ifdef PNG_USER_MEM_SUPPORTED
if (png_ptr != NULL && png_ptr->malloc_fn != NULL)
return png_ptr->malloc_fn(png_constcast(png_structrp,png_ptr), size);
result = png_ptr->malloc_fn(png_constcast(png_structrp,png_ptr), size);
else
#endif
return malloc((size_t)size); /* checked for truncation above */
result = malloc((size_t)size); /* checked for truncation above */
return result;
}
else
@@ -122,20 +127,17 @@ PNG_FUNCTION(png_voidp /* PRIVATE */,
png_malloc_array,(png_const_structrp png_ptr, int nelements,
size_t element_size),PNG_ALLOCATED)
{
if (nelements <= 0 || element_size == 0)
png_error(png_ptr, "internal error: array alloc");
affirm(nelements > 0 && element_size > 0);
return png_malloc_array_checked(png_ptr, nelements, element_size);
}
PNG_FUNCTION(png_voidp /* PRIVATE */,
png_realloc_array,(png_const_structrp png_ptr, png_const_voidp old_array,
png_realloc_array,(png_structrp png_ptr, png_const_voidp old_array,
int old_elements, int add_elements, size_t element_size),PNG_ALLOCATED)
{
/* These are internal errors: */
if (add_elements <= 0 || element_size == 0 || old_elements < 0 ||
(old_array == NULL && old_elements > 0))
png_error(png_ptr, "internal error: array realloc");
affirm(add_elements > 0 && element_size > 0 && old_elements >= 0 &&
(old_array != NULL || old_elements == 0));
/* Check for overflow on the elements count (so the caller does not have to
* check.)
@@ -160,6 +162,15 @@ png_realloc_array,(png_const_structrp png_ptr, png_const_voidp old_array,
}
}
#ifdef PNG_READ_SUPPORTED
# ifdef PNG_USER_LIMITS_SUPPORTED
/* The potential overflow case. Set the cache counter so libpng will
* not make any more attempts
*/
png_ptr->user_chunk_cache_max = 2;
# endif
#endif
return NULL; /* error */
}
#endif /* TEXT || sPLT || STORE_UNKNOWN_CHUNKS */
@@ -179,31 +190,11 @@ png_malloc,(png_const_structrp png_ptr, png_alloc_size_t size),PNG_ALLOCATED)
ret = png_malloc_base(png_ptr, size);
if (ret == NULL)
png_error(png_ptr, "Out of memory"); /* 'm' means png_malloc */
png_error(png_ptr, "Out of memory");
return ret;
}
#ifdef PNG_USER_MEM_SUPPORTED
PNG_FUNCTION(png_voidp,PNGAPI
png_malloc_default,(png_const_structrp png_ptr, png_alloc_size_t size),
PNG_ALLOCATED PNG_DEPRECATED)
{
png_voidp ret;
if (png_ptr == NULL)
return NULL;
/* Passing 'NULL' here bypasses the application provided memory handler. */
ret = png_malloc_base(NULL/*use malloc*/, size);
if (ret == NULL)
png_error(png_ptr, "Out of Memory"); /* 'M' means png_malloc_default */
return ret;
}
#endif /* USER_MEM */
/* This function was added at libpng version 1.2.3. The png_malloc_warn()
* function will issue a png_warning and return NULL instead of issuing a
* png_error, if it fails to allocate the requested memory.
@@ -239,17 +230,11 @@ png_free(png_const_structrp png_ptr, png_voidp ptr)
png_ptr->free_fn(png_constcast(png_structrp,png_ptr), ptr);
else
png_free_default(png_ptr, ptr);
}
PNG_FUNCTION(void,PNGAPI
png_free_default,(png_const_structrp png_ptr, png_voidp ptr),PNG_DEPRECATED)
{
if (png_ptr == NULL || ptr == NULL)
return;
free(ptr);
#else
free(ptr);
#endif /* USER_MEM */
free(ptr);
}
#ifdef PNG_USER_MEM_SUPPORTED

1579
pngpread.c

File diff suppressed because it is too large Load Diff

1921
pngpriv.h

File diff suppressed because it is too large Load Diff

2054
pngread.c

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,8 @@
/* pngrio.c - functions for data input
*
* Last changed in libpng 1.6.17 [March 26, 2015]
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
* Last changed in libpng 1.7.0 [(PENDING RELEASE)]
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
*
@@ -19,6 +19,7 @@
*/
#include "pngpriv.h"
#define PNG_SRC_FILE PNG_SRC_FILE_rio
#ifdef PNG_READ_SUPPORTED
@@ -26,18 +27,18 @@
* reads from a file pointer. Note that this routine sometimes gets called
* with very small lengths, so you should implement some kind of simple
* buffering if you are using unbuffered reads. This should never be asked
* to read more than 64K on a 16-bit machine.
* to read more than 64K on a 16 bit machine.
*/
void /* PRIVATE */
png_read_data(png_structrp png_ptr, png_bytep data, png_size_t length)
png_read_data(png_structrp png_ptr, png_voidp data, png_size_t length)
{
png_debug1(4, "reading %d bytes", (int)length);
if (png_ptr->read_data_fn != NULL)
(*(png_ptr->read_data_fn))(png_ptr, data, length);
if (png_ptr->rw_data_fn != NULL)
png_ptr->rw_data_fn(png_ptr, png_voidcast(png_bytep,data), length);
else
png_error(png_ptr, "Call to NULL read function");
png_app_error(png_ptr, "No read function");
}
#ifdef PNG_STDIO_SUPPORTED
@@ -62,7 +63,7 @@ png_default_read_data(png_structp png_ptr, png_bytep data, png_size_t length)
if (check != length)
png_error(png_ptr, "Read Error");
}
#endif
#endif /* STDIO */
/* This function allows the application to supply a new input function
* for libpng if standard C streams aren't being used.
@@ -90,31 +91,19 @@ png_set_read_fn(png_structrp png_ptr, png_voidp io_ptr,
if (png_ptr == NULL)
return;
png_ptr->io_ptr = io_ptr;
#ifdef PNG_STDIO_SUPPORTED
if (read_data_fn != NULL)
png_ptr->read_data_fn = read_data_fn;
else
png_ptr->read_data_fn = png_default_read_data;
#else
png_ptr->read_data_fn = read_data_fn;
#endif
#ifdef PNG_WRITE_SUPPORTED
/* It is an error to write to a read device */
if (png_ptr->write_data_fn != NULL)
if (!png_ptr->read_struct)
{
png_ptr->write_data_fn = NULL;
png_warning(png_ptr,
"Can't set both read_data_fn and write_data_fn in the"
" same structure");
png_app_error(png_ptr, "cannot set a read function on a write struct");
return;
}
#endif
#ifdef PNG_WRITE_FLUSH_SUPPORTED
png_ptr->output_flush_fn = NULL;
#endif
if (read_data_fn == NULL)
{
png_app_error(png_ptr, "API change: png_set_read_fn requires a function");
return;
}
png_ptr->io_ptr = io_ptr;
png_ptr->rw_data_fn = read_data_fn;
}
#endif /* READ */

11237
pngrtran.c

File diff suppressed because it is too large Load Diff

4661
pngrutil.c

File diff suppressed because it is too large Load Diff

575
pngset.c
View File

@@ -1,8 +1,8 @@
/* pngset.c - storage of image information into info struct
*
* Last changed in libpng 1.6.21 [January 15, 2016]
* Copyright (c) 1998-2015 Glenn Randers-Pehrson
* Last changed in libpng 1.7.0 [(PENDING RELEASE)]
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
*
@@ -17,6 +17,7 @@
*/
#include "pngpriv.h"
#define PNG_SRC_FILE PNG_SRC_FILE_pngset
#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
@@ -163,8 +164,6 @@ void PNGAPI
png_set_hIST(png_const_structrp png_ptr, png_inforp info_ptr,
png_const_uint_16p hist)
{
int i;
png_debug1(1, "in %s storage function", "hIST");
if (png_ptr == NULL || info_ptr == NULL)
@@ -196,8 +195,12 @@ png_set_hIST(png_const_structrp png_ptr, png_inforp info_ptr,
info_ptr->free_me |= PNG_FREE_HIST;
for (i = 0; i < info_ptr->num_palette; i++)
info_ptr->hist[i] = hist[i];
{
unsigned int i;
for (i = 0; i < info_ptr->num_palette; i++)
info_ptr->hist[i] = hist[i];
}
info_ptr->valid |= PNG_INFO_hIST;
}
@@ -216,31 +219,16 @@ png_set_IHDR(png_const_structrp png_ptr, png_inforp info_ptr,
info_ptr->width = width;
info_ptr->height = height;
info_ptr->bit_depth = (png_byte)bit_depth;
info_ptr->color_type = (png_byte)color_type;
info_ptr->compression_type = (png_byte)compression_type;
info_ptr->filter_type = (png_byte)filter_type;
info_ptr->interlace_type = (png_byte)interlace_type;
info_ptr->bit_depth = png_check_bits(png_ptr, bit_depth, 6);
info_ptr->format = png_check_bits(png_ptr,
PNG_FORMAT_FROM_COLOR_TYPE(color_type), PNG_RF_BITS);
info_ptr->compression_type = png_check_byte(png_ptr, compression_type);
info_ptr->filter_type = png_check_byte(png_ptr, filter_type);
info_ptr->interlace_type = png_check_byte(png_ptr, interlace_type);
png_check_IHDR (png_ptr, info_ptr->width, info_ptr->height,
info_ptr->bit_depth, info_ptr->color_type, info_ptr->interlace_type,
info_ptr->bit_depth, color_type, info_ptr->interlace_type,
info_ptr->compression_type, info_ptr->filter_type);
if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
info_ptr->channels = 1;
else if ((info_ptr->color_type & PNG_COLOR_MASK_COLOR) != 0)
info_ptr->channels = 3;
else
info_ptr->channels = 1;
if ((info_ptr->color_type & PNG_COLOR_MASK_ALPHA) != 0)
info_ptr->channels++;
info_ptr->pixel_depth = (png_byte)(info_ptr->channels * info_ptr->bit_depth);
info_ptr->rowbytes = PNG_ROWBYTES(info_ptr->pixel_depth, width);
}
#ifdef PNG_oFFs_SUPPORTED
@@ -255,7 +243,7 @@ png_set_oFFs(png_const_structrp png_ptr, png_inforp info_ptr,
info_ptr->x_offset = offset_x;
info_ptr->y_offset = offset_y;
info_ptr->offset_unit_type = (png_byte)unit_type;
info_ptr->offset_unit_type = png_check_byte(png_ptr, unit_type);
info_ptr->valid |= PNG_INFO_oFFs;
}
#endif
@@ -311,8 +299,8 @@ png_set_pCAL(png_const_structrp png_ptr, png_inforp info_ptr,
png_debug(3, "storing X0, X1, type, and nparams in info");
info_ptr->pcal_X0 = X0;
info_ptr->pcal_X1 = X1;
info_ptr->pcal_type = (png_byte)type;
info_ptr->pcal_nparams = (png_byte)nparams;
info_ptr->pcal_type = png_check_byte(png_ptr, type);
info_ptr->pcal_nparams = png_check_byte(png_ptr, nparams);
length = strlen(units) + 1;
png_debug1(3, "allocating units for info (%lu bytes)",
@@ -391,7 +379,7 @@ png_set_sCAL_s(png_const_structrp png_ptr, png_inforp info_ptr,
sheight[0] == 45 /* '-' */ || !png_check_fp_string(sheight, lengthh))
png_error(png_ptr, "Invalid sCAL height");
info_ptr->scal_unit = (png_byte)unit;
info_ptr->scal_unit = png_check_byte(png_ptr, unit);
++lengthw;
@@ -432,7 +420,8 @@ png_set_sCAL_s(png_const_structrp png_ptr, png_inforp info_ptr,
info_ptr->free_me |= PNG_FREE_SCAL;
}
# ifdef PNG_FLOATING_POINT_SUPPORTED
# if defined(PNG_FLOATING_POINT_SUPPORTED) &&\
defined(PNG_FLOATING_ARITHMETIC_SUPPORTED)
void PNGAPI
png_set_sCAL(png_const_structrp png_ptr, png_inforp info_ptr, int unit,
double width, double height)
@@ -503,7 +492,7 @@ png_set_pHYs(png_const_structrp png_ptr, png_inforp info_ptr,
info_ptr->x_pixels_per_unit = res_x;
info_ptr->y_pixels_per_unit = res_y;
info_ptr->phys_unit_type = (png_byte)unit_type;
info_ptr->phys_unit_type = png_check_byte(png_ptr, unit_type);
info_ptr->valid |= PNG_INFO_pHYs;
}
#endif
@@ -520,55 +509,44 @@ png_set_PLTE(png_structrp png_ptr, png_inforp info_ptr,
if (png_ptr == NULL || info_ptr == NULL)
return;
max_palette_length = (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE) ?
max_palette_length = (info_ptr->format & PNG_FORMAT_FLAG_COLORMAP) == 0 ?
(1 << info_ptr->bit_depth) : PNG_MAX_PALETTE_LENGTH;
if (num_palette < 0 || num_palette > (int) max_palette_length)
{
if (info_ptr->color_type == PNG_COLOR_TYPE_PALETTE)
png_error(png_ptr, "Invalid palette length");
if ((info_ptr->format & PNG_FORMAT_FLAG_COLORMAP) != 0)
png_chunk_error(png_ptr, "Invalid palette length");
else
{
png_warning(png_ptr, "Invalid palette length");
png_chunk_report(png_ptr, "Invalid palette length", PNG_CHUNK_ERROR);
return;
}
}
if ((num_palette > 0 && palette == NULL) ||
(num_palette == 0
# ifdef PNG_MNG_FEATURES_SUPPORTED
&& (png_ptr->mng_features_permitted & PNG_FLAG_MNG_EMPTY_PLTE) == 0
# endif
))
{
#ifdef PNG_MNG_FEATURES_SUPPORTED
if ((num_palette > 0 && palette == NULL) || (num_palette == 0 &&
(png_ptr->mng_features_permitted & PNG_FLAG_MNG_EMPTY_PLTE) == 0))
png_error(png_ptr, "Invalid palette");
}
#else
if ((num_palette > 0 && palette == NULL) || num_palette == 0)
png_error(png_ptr, "Invalid palette");
#endif /* MNG_FEATURES */
/* It may not actually be necessary to set png_ptr->palette here;
* we do it for backward compatibility with the way the png_handle_tRNS
* function used to do the allocation.
*
* 1.6.0: the above statement appears to be incorrect; something has to set
* the palette inside png_struct on read.
*/
png_free_data(png_ptr, info_ptr, PNG_FREE_PLTE, 0);
/* Changed in libpng-1.2.1 to allocate PNG_MAX_PALETTE_LENGTH instead
* of num_palette entries, in case of an invalid PNG file or incorrect
* call to png_set_PLTE() with too-large sample values.
*/
png_ptr->palette = png_voidcast(png_colorp, png_calloc(png_ptr,
info_ptr->palette = png_voidcast(png_colorp, png_calloc(png_ptr,
PNG_MAX_PALETTE_LENGTH * (sizeof (png_color))));
if (num_palette > 0)
memcpy(png_ptr->palette, palette, num_palette * (sizeof (png_color)));
info_ptr->palette = png_ptr->palette;
info_ptr->num_palette = png_ptr->num_palette = (png_uint_16)num_palette;
memcpy(info_ptr->palette, palette, num_palette * (sizeof (png_color)));
info_ptr->num_palette = png_check_bits(png_ptr, num_palette, 9);
info_ptr->free_me |= PNG_FREE_PLTE;
info_ptr->valid |= PNG_INFO_PLTE;
}
@@ -648,7 +626,7 @@ png_set_iCCP(png_const_structrp png_ptr, png_inforp info_ptr,
*/
{
int result = png_colorspace_set_ICC(png_ptr, &info_ptr->colorspace, name,
proflen, profile, info_ptr->color_type);
proflen, profile, (info_ptr->format & PNG_FORMAT_FLAG_COLOR) != 0);
png_colorspace_sync_info(png_ptr, info_ptr);
@@ -688,7 +666,6 @@ png_set_iCCP(png_const_structrp png_ptr, png_inforp info_ptr,
png_free_data(png_ptr, info_ptr, PNG_FREE_ICCP, 0);
info_ptr->iccp_proflen = proflen;
info_ptr->iccp_name = new_iccp_name;
info_ptr->iccp_profile = new_iccp_profile;
info_ptr->free_me |= PNG_FREE_ICCP;
@@ -696,9 +673,80 @@ png_set_iCCP(png_const_structrp png_ptr, png_inforp info_ptr,
}
#endif
#if defined(PNG_TEXT_SUPPORTED) || defined(PNG_tIME_SUPPORTED)
static png_byte
get_location(png_const_structrp png_ptr)
/* Return the correct location flag for a chunk. For a png_set_<chunk>
* called during read this is the current read location, for a
* png_set_<chunk> called during write it is the following write location
* (because the chunks at the current location have already been written.)
* For a png_set_<chunk> called before read starts (none of the 'position'
* mode bits are set) the position is set to the start (PNG_HAVE_IHDR). For
* a png_set_chunk> called before write starts PNG_HAVE_PLTE|PNG_AFTER_IDAT
* are set because we don't know whether this is the main png_info or the one
* for use after the IDAT from png_write_end.
*
* The latter behavior gives compatibility with the old behavior of
* png_set_text; it only wrote text chunks after the PLTE or IDAT and it just
* wrote them once.
*/
{
if ((png_ptr->mode & PNG_AFTER_IDAT) != 0U)
return PNG_AFTER_IDAT;
else if ((png_ptr->mode & PNG_HAVE_PLTE) != 0U)
{
/* In a write operation PNG_HAVE_PLTE is set when the chunks before the
* IDAT are written (in png_write_info), so the location needs to be after
* IDAT. In a read the chunk was read after the PLTE but before the IDAT.
*/
if (png_ptr->read_struct)
return PNG_HAVE_PLTE;
else /* write struct */
return PNG_AFTER_IDAT;
}
else if ((png_ptr->mode & PNG_HAVE_IHDR) != 0U)
{
/* For read this means the chunk is between the IHDR and any PLTE; there
* may be none but then there is no order to preserve.
*
* For write png_write_IHDR has been called and that means that the info
* before PLTE has been written, so the chunk goes after.
*/
if (png_ptr->read_struct)
return PNG_HAVE_IHDR;
else /* write struct */
return PNG_HAVE_PLTE;
}
else if ((png_ptr->mode & PNG_HAVE_PNG_SIGNATURE) != 0U)
{
/* This should not happen on read, on write it means that the app has
* started writing so assume the text is meant to go before PLTE.
*/
return PNG_HAVE_IHDR;
}
/* Either a png_set_<chunk> from the application during read before reading
* starts (so mode is 0) or the same for write.
*/
else
{
if (png_ptr->read_struct)
return PNG_HAVE_IHDR;
else
return PNG_HAVE_PLTE|PNG_AFTER_IDAT;
}
}
#endif /* TEXT || tIME */
#ifdef PNG_TEXT_SUPPORTED
void PNGAPI
png_set_text(png_const_structrp png_ptr, png_inforp info_ptr,
png_set_text(png_structrp png_ptr, png_inforp info_ptr,
png_const_textp text_ptr, int num_text)
{
int ret;
@@ -709,12 +757,12 @@ png_set_text(png_const_structrp png_ptr, png_inforp info_ptr,
}
int /* PRIVATE */
png_set_text_2(png_const_structrp png_ptr, png_inforp info_ptr,
png_set_text_2(png_structrp png_ptr, png_inforp info_ptr,
png_const_textp text_ptr, int num_text)
{
int i;
png_debug1(1, "in %lx storage function", png_ptr == NULL ? 0xabadca11U :
png_debug1(1, "in %lx storage function", png_ptr == NULL ? 0xabadca11 :
(unsigned long)png_ptr->chunk_name);
if (png_ptr == NULL || info_ptr == NULL || num_text <= 0 || text_ptr == NULL)
@@ -731,6 +779,11 @@ png_set_text_2(png_const_structrp png_ptr, png_inforp info_ptr,
int max_text;
png_textp new_text = NULL;
/* The code below goes horribly wrong if old_num_text ever ends up
* negative, so:
*/
affirm(old_num_text >= 0);
/* Calculate an appropriate max_text, checking for overflow. */
max_text = old_num_text;
if (num_text <= INT_MAX - max_text)
@@ -820,6 +873,12 @@ png_set_text_2(png_const_structrp png_ptr, png_inforp info_ptr,
}
# endif
/* Record the location for posterity. On the read side this just says
* where the chunk was (approximately). On the write side it says how far
* through the write process libpng was before this API was called.
*/
textp->location = get_location(png_ptr);
if (text_ptr[i].text == NULL || text_ptr[i].text[0] == '\0')
{
text_length = 0;
@@ -909,24 +968,38 @@ png_set_tIME(png_const_structrp png_ptr, png_inforp info_ptr,
{
png_debug1(1, "in %s storage function", "tIME");
if (png_ptr == NULL || info_ptr == NULL || mod_time == NULL ||
(png_ptr->mode & PNG_WROTE_tIME) != 0)
if (png_ptr == NULL || info_ptr == NULL || mod_time == NULL)
return;
/* It is valid to do set the tIME chunk after the IDAT has been written, but
* not if one has already been written. This was ignored before - the
* previous time was used - this is a bad thing.
*/
if ((info_ptr->valid & PNG_INFO_tIME) != 0 /* Changing a time chunk */ &&
(png_ptr->mode & PNG_HAVE_IHDR) != 0 /* after writing started */)
{
/* So it can be *set* but it can't be *changed* after the info before PLTE
* has been written. (Note that putting tIME into an unknown chunk
* currently gets round this; to be fixed.)
*/
png_app_error(png_ptr, "cannot change tIME after writing starts");
return;
}
if (mod_time->month == 0 || mod_time->month > 12 ||
mod_time->day == 0 || mod_time->day > 31 ||
mod_time->hour > 23 || mod_time->minute > 59 ||
mod_time->second > 60)
{
png_warning(png_ptr, "Ignoring invalid time value");
png_app_error(png_ptr, "Ignoring invalid time value");
return;
}
info_ptr->mod_time = *mod_time;
info_ptr->time_location = get_location(png_ptr);
info_ptr->valid |= PNG_INFO_tIME;
}
#endif
#endif /* tIME */
#ifdef PNG_tRNS_SUPPORTED
void PNGAPI
@@ -936,67 +1009,98 @@ png_set_tRNS(png_structrp png_ptr, png_inforp info_ptr,
png_debug1(1, "in %s storage function", "tRNS");
if (png_ptr == NULL || info_ptr == NULL)
return;
if (trans_alpha != NULL)
if ((info_ptr->format & PNG_FORMAT_FLAG_ALPHA) != 0)
png_chunk_report(png_ptr,
"png_set_tRNS: invalid on PNG with alpha channel", PNG_CHUNK_ERROR);
else if ((info_ptr->format & PNG_FORMAT_FLAG_COLORMAP) != 0)
{
/* It may not actually be necessary to set png_ptr->trans_alpha here;
* we do it for backward compatibility with the way the png_handle_tRNS
* function used to do the allocation.
*
* 1.6.0: The above statement is incorrect; png_handle_tRNS effectively
* relies on png_set_tRNS storing the information in png_struct
* (otherwise it won't be there for the code in pngrtran.c).
*/
int max_num;
png_free_data(png_ptr, info_ptr, PNG_FREE_TRNS, 0);
/* Free the old data; num_trans 0 can be used to kill the tRNS */
png_free_data(png_ptr, info_ptr, PNG_FREE_TRNS, 0);
/* Changed from num_trans to PNG_MAX_PALETTE_LENGTH in version 1.2.1 */
png_ptr->trans_alpha = info_ptr->trans_alpha = png_voidcast(png_bytep,
png_malloc(png_ptr, PNG_MAX_PALETTE_LENGTH));
/* Do this just in case the old data was not owned by libpng: */
info_ptr->valid &= PNG_BIC_MASK(PNG_INFO_tRNS);
info_ptr->trans_alpha = NULL;
info_ptr->num_trans = 0;
if (num_trans > 0 && num_trans <= PNG_MAX_PALETTE_LENGTH)
memcpy(info_ptr->trans_alpha, trans_alpha, (png_size_t)num_trans);
}
/* Expect png_set_PLTE to happen before png_set_tRNS, so num_palette will
* be set, but this is not a requirement of the API.
*/
if (info_ptr->num_palette)
max_num = info_ptr->num_palette;
if (trans_color != NULL)
{
#ifdef PNG_WARNINGS_SUPPORTED
if (info_ptr->bit_depth < 16)
else
max_num = 1 << info_ptr->bit_depth;
if (num_trans > max_num)
{
int sample_max = (1 << info_ptr->bit_depth) - 1;
if ((info_ptr->color_type == PNG_COLOR_TYPE_GRAY &&
trans_color->gray > sample_max) ||
(info_ptr->color_type == PNG_COLOR_TYPE_RGB &&
(trans_color->red > sample_max ||
trans_color->green > sample_max ||
trans_color->blue > sample_max)))
png_warning(png_ptr,
"tRNS chunk has out-of-range samples for bit_depth");
png_chunk_report(png_ptr, "png_set_tRNS: num_trans too large",
PNG_CHUNK_ERROR);
/* If control returns simply limit it; the behavior prior to 1.7 was to
* issue a warning and skip the palette in png_write_tRNS.
*/
num_trans = max_num;
}
#endif
info_ptr->trans_color = *trans_color;
/* But only attempt a malloc if there is something to do; so the app can
* set a tRNS array then later delete it.
*/
if (num_trans > 0 && trans_alpha != NULL)
{
/* Changed from num_trans to PNG_MAX_PALETTE_LENGTH in version 1.2.1,
* this avoids issues where a palette image contains out of range
* indices.
*/
info_ptr->trans_alpha = png_voidcast(png_bytep, png_malloc(png_ptr,
PNG_MAX_PALETTE_LENGTH));
info_ptr->free_me |= PNG_FREE_TRNS;
if (num_trans == 0)
num_trans = 1;
memcpy(info_ptr->trans_alpha, trans_alpha,
(unsigned)/*SAFE*/num_trans);
info_ptr->valid |= PNG_INFO_tRNS;
info_ptr->num_trans = png_check_bits(png_ptr, num_trans, 9);
}
}
info_ptr->num_trans = (png_uint_16)num_trans;
if (num_trans != 0)
else /* not a PALETTE image */
{
info_ptr->valid |= PNG_INFO_tRNS;
info_ptr->free_me |= PNG_FREE_TRNS;
/* Invalidate any prior transparent color and set num_trans. It is not
* used internally in this case but png_get_tRNS still returns it.
*/
info_ptr->valid &= PNG_BIC_MASK(PNG_INFO_tRNS);
info_ptr->num_trans = 0; /* for png_get_tRNS */
if (trans_color != NULL && info_ptr->bit_depth < 16)
{
unsigned int sample_max = (1U << info_ptr->bit_depth) - 1U;
if (!(info_ptr->format & PNG_FORMAT_FLAG_COLOR) ?
trans_color->gray <= sample_max :
trans_color->red <= sample_max &&
trans_color->green <= sample_max &&
trans_color->blue <= sample_max)
{
info_ptr->trans_color = *trans_color;
info_ptr->valid |= PNG_INFO_tRNS;
info_ptr->num_trans = 1; /* for png_get_tRNS */
}
else
png_chunk_report(png_ptr,
"tRNS chunk has out-of-range samples for bit_depth",
PNG_CHUNK_ERROR);
}
}
}
#endif
#ifdef PNG_sPLT_SUPPORTED
void PNGAPI
png_set_sPLT(png_const_structrp png_ptr,
png_set_sPLT(png_structrp png_ptr,
png_inforp info_ptr, png_const_sPLT_tp entries, int nentries)
/*
* entries - array of png_sPLT_t structures
@@ -1104,13 +1208,13 @@ check_location(png_const_structrp png_ptr, int location)
* change; previously the app had to use the
* png_set_unknown_chunk_location API below for each chunk.
*/
if (location == 0 && (png_ptr->mode & PNG_IS_READ_STRUCT) == 0)
if (location == 0 && !png_ptr->read_struct)
{
/* Write struct, so unknown chunks come from the app */
png_app_warning(png_ptr,
"png_set_unknown_chunks now expects a valid location");
/* Use the old behavior */
location = (png_byte)(png_ptr->mode &
location = png_check_byte(png_ptr, png_ptr->mode &
(PNG_HAVE_IHDR|PNG_HAVE_PLTE|PNG_AFTER_IDAT));
}
@@ -1129,11 +1233,11 @@ check_location(png_const_structrp png_ptr, int location)
/* The cast is safe because 'location' is a bit mask and only the low four
* bits are significant.
*/
return (png_byte)location;
return png_check_byte(png_ptr, location);
}
void PNGAPI
png_set_unknown_chunks(png_const_structrp png_ptr,
png_set_unknown_chunks(png_structrp png_ptr,
png_inforp info_ptr, png_const_unknown_chunkp unknowns, int num_unknowns)
{
png_unknown_chunkp np;
@@ -1148,18 +1252,16 @@ png_set_unknown_chunks(png_const_structrp png_ptr,
* code) but may be meaningless if the read or write handling of unknown
* chunks is not compiled in.
*/
# if !defined(PNG_READ_UNKNOWN_CHUNKS_SUPPORTED) && \
defined(PNG_READ_SUPPORTED)
if ((png_ptr->mode & PNG_IS_READ_STRUCT) != 0)
# ifndef PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
if (png_ptr->read_struct)
{
png_app_error(png_ptr, "no unknown chunk support on read");
return;
}
# endif
# if !defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED) && \
defined(PNG_WRITE_SUPPORTED)
if ((png_ptr->mode & PNG_IS_READ_STRUCT) == 0)
# ifndef PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
if (!png_ptr->read_struct)
{
png_app_error(png_ptr, "no unknown chunk support on write");
@@ -1178,9 +1280,7 @@ png_set_unknown_chunks(png_const_structrp png_ptr,
if (np == NULL)
{
png_chunk_report(png_ptr, "too many unknown chunks",
PNG_CHUNK_WRITE_ERROR);
png_chunk_report(png_ptr, "too many unknown chunks", PNG_CHUNK_ERROR);
return;
}
@@ -1213,7 +1313,7 @@ png_set_unknown_chunks(png_const_structrp png_ptr,
if (np->data == NULL)
{
png_chunk_report(png_ptr, "unknown chunk: out of memory",
PNG_CHUNK_WRITE_ERROR);
PNG_CHUNK_ERROR);
/* But just skip storing the unknown chunk */
continue;
}
@@ -1237,8 +1337,6 @@ png_set_unknown_chunk_location(png_const_structrp png_ptr, png_inforp info_ptr,
{
/* This API is pretty pointless in 1.6.0 because the location can be set
* before the call to png_set_unknown_chunks.
*
* TODO: add a png_app_warning in 1.7
*/
if (png_ptr != NULL && info_ptr != NULL && chunk >= 0 &&
chunk < info_ptr->unknown_chunks_num)
@@ -1257,27 +1355,17 @@ png_set_unknown_chunk_location(png_const_structrp png_ptr, png_inforp info_ptr,
info_ptr->unknown_chunks[chunk].location =
check_location(png_ptr, location);
}
/* TODO: make this an error in 1.8 (or maybe it will become one in 1.7!) */
else if (png_ptr != NULL)
png_app_warning(png_ptr, "unknown chunk index out of range");
}
#endif /* STORE_UNKNOWN_CHUNKS */
#ifdef PNG_MNG_FEATURES_SUPPORTED
png_uint_32 PNGAPI
png_permit_mng_features (png_structrp png_ptr, png_uint_32 mng_features)
{
png_debug(1, "in png_permit_mng_features");
if (png_ptr == NULL)
return 0;
png_ptr->mng_features_permitted = mng_features & PNG_ALL_MNG_FEATURES;
return png_ptr->mng_features_permitted;
}
#endif
#ifdef PNG_HANDLE_AS_UNKNOWN_SUPPORTED
static unsigned int
add_one_chunk(png_bytep list, unsigned int count, png_const_bytep add, int keep)
add_one_chunk(png_structrp png_ptr, png_bytep list, unsigned int count,
png_const_bytep add, int keep)
{
unsigned int i;
@@ -1288,8 +1376,8 @@ add_one_chunk(png_bytep list, unsigned int count, png_const_bytep add, int keep)
{
if (memcmp(list, add, 4) == 0)
{
list[4] = (png_byte)keep;
list[4] = keep & 0x3;
png_cache_known_unknown(png_ptr, add, keep);
return count;
}
}
@@ -1298,7 +1386,8 @@ add_one_chunk(png_bytep list, unsigned int count, png_const_bytep add, int keep)
{
++count;
memcpy(list, add, 4);
list[4] = (png_byte)keep;
list[4] = png_check_byte(png_ptr, keep);
png_cache_known_unknown(png_ptr, add, keep);
}
return count;
@@ -1314,16 +1403,27 @@ png_set_keep_unknown_chunks(png_structrp png_ptr, int keep,
if (png_ptr == NULL)
return;
/* To actually use IF_SAFE or ALWAYS on read it is necessary to have the
* read SAVE code enabled.
*/
if (keep < 0 || keep >= PNG_HANDLE_CHUNK_LAST)
{
png_app_error(png_ptr, "png_set_keep_unknown_chunks: invalid keep");
return;
}
# ifndef PNG_SAVE_UNKNOWN_CHUNKS_SUPPORTED
/* This is only a warning; if the application handles the chunk with a
* read callback it may work fine.
*/
if (png_ptr->read_struct && keep >= PNG_HANDLE_CHUNK_IF_SAFE)
png_app_warning(png_ptr,
"png_set_keep_unknown_chunks: unsupported keep");
# endif
if (num_chunks_in <= 0)
{
png_ptr->unknown_default = keep;
png_ptr->unknown_default = (unsigned)keep & 0x3;
/* '0' means just set the flags, so stop here */
if (num_chunks_in == 0)
@@ -1367,7 +1467,6 @@ png_set_keep_unknown_chunks(png_structrp png_ptr, int keep,
* which can be switched off.
*/
png_app_error(png_ptr, "png_set_keep_unknown_chunks: no chunk list");
return;
}
@@ -1383,7 +1482,6 @@ png_set_keep_unknown_chunks(png_structrp png_ptr, int keep,
if (num_chunks + old_num_chunks > UINT_MAX/5)
{
png_app_error(png_ptr, "png_set_keep_unknown_chunks: too many chunks");
return;
}
@@ -1419,7 +1517,7 @@ png_set_keep_unknown_chunks(png_structrp png_ptr, int keep,
for (i=0; i<num_chunks; ++i)
{
old_num_chunks = add_one_chunk(new_list, old_num_chunks,
old_num_chunks = add_one_chunk(png_ptr, new_list, old_num_chunks,
chunk_list+5*i, keep);
}
@@ -1476,7 +1574,7 @@ png_set_read_user_chunk_fn(png_structrp png_ptr, png_voidp user_chunk_ptr,
}
#endif
#ifdef PNG_INFO_IMAGE_SUPPORTED
#ifdef PNG_WRITE_PNG_SUPPORTED
void PNGAPI
png_set_rows(png_const_structrp png_ptr, png_inforp info_ptr,
png_bytepp row_pointers)
@@ -1498,70 +1596,25 @@ png_set_rows(png_const_structrp png_ptr, png_inforp info_ptr,
#endif
void PNGAPI
png_set_compression_buffer_size(png_structrp png_ptr, png_size_t size)
png_set_compression_buffer_size(png_structrp png_ptr, png_alloc_size_t size)
{
if (png_ptr == NULL)
return;
if (png_ptr == NULL)
return;
if (size == 0 || size > PNG_UINT_31_MAX)
png_error(png_ptr, "invalid compression buffer size");
if (size == 0 ||
size > (png_ptr->read_struct ? ZLIB_IO_MAX : PNG_UINT_31_MAX))
png_error(png_ptr, "invalid compression buffer size");
# ifdef PNG_SEQUENTIAL_READ_SUPPORTED
if ((png_ptr->mode & PNG_IS_READ_STRUCT) != 0)
{
png_ptr->IDAT_read_size = (png_uint_32)size; /* checked above */
return;
}
# endif
# ifdef PNG_WRITE_SUPPORTED
if ((png_ptr->mode & PNG_IS_READ_STRUCT) == 0)
{
if (png_ptr->zowner != 0)
{
png_warning(png_ptr,
"Compression buffer size cannot be changed because it is in use");
return;
}
#ifndef __COVERITY__
/* Some compilers complain that this is always false. However, it
* can be true when integer overflow happens.
*/
if (size > ZLIB_IO_MAX)
{
png_warning(png_ptr,
"Compression buffer size limited to system maximum");
size = ZLIB_IO_MAX; /* must fit */
}
#endif
if (size < 6)
{
/* Deflate will potentially go into an infinite loop on a SYNC_FLUSH
* if this is permitted.
*/
png_warning(png_ptr,
"Compression buffer size cannot be reduced below 6");
return;
}
if (png_ptr->zbuffer_size != size)
{
png_free_buffer_list(png_ptr, &png_ptr->zbuffer_list);
png_ptr->zbuffer_size = (uInt)size;
}
}
# endif
# if (defined PNG_SEQUENTIAL_READ_SUPPORTED) || defined PNG_WRITE_SUPPORTED
png_ptr->IDAT_size = (png_uint_32)/*SAFE*/size;
# endif /* SEQUENTIAL_READ || WRITE */
}
void PNGAPI
png_set_invalid(png_const_structrp png_ptr, png_inforp info_ptr, int mask)
{
if (png_ptr != NULL && info_ptr != NULL)
info_ptr->valid &= ~mask;
info_ptr->valid &= PNG_BIC_MASK(mask);
}
@@ -1573,7 +1626,7 @@ png_set_user_limits (png_structrp png_ptr, png_uint_32 user_width_max,
{
/* Images with dimensions larger than these limits will be
* rejected by png_set_IHDR(). To accept any PNG datastream
* regardless of dimensions, set both limits to 0x7fffffff.
* regardless of dimensions, set both limits to 0x7fffffffL.
*/
if (png_ptr == NULL)
return;
@@ -1618,114 +1671,8 @@ png_set_benign_errors(png_structrp png_ptr, int allowed)
PNG_FLAG_APP_WARNINGS_WARN | PNG_FLAG_APP_ERRORS_WARN;
else
png_ptr->flags &= ~(PNG_FLAG_BENIGN_ERRORS_WARN |
png_ptr->flags &= PNG_BIC_MASK(PNG_FLAG_BENIGN_ERRORS_WARN |
PNG_FLAG_APP_WARNINGS_WARN | PNG_FLAG_APP_ERRORS_WARN);
}
#endif /* BENIGN_ERRORS */
#ifdef PNG_CHECK_FOR_INVALID_INDEX_SUPPORTED
/* Whether to report invalid palette index; added at libng-1.5.10.
* It is possible for an indexed (color-type==3) PNG file to contain
* pixels with invalid (out-of-range) indexes if the PLTE chunk has
* fewer entries than the image's bit-depth would allow. We recover
* from this gracefully by filling any incomplete palette with zeros
* (opaque black). By default, when this occurs libpng will issue
* a benign error. This API can be used to override that behavior.
*/
void PNGAPI
png_set_check_for_invalid_index(png_structrp png_ptr, int allowed)
{
png_debug(1, "in png_set_check_for_invalid_index");
if (allowed > 0)
png_ptr->num_palette_max = 0;
else
png_ptr->num_palette_max = -1;
}
#endif
#if defined(PNG_TEXT_SUPPORTED) || defined(PNG_pCAL_SUPPORTED) || \
defined(PNG_iCCP_SUPPORTED) || defined(PNG_sPLT_SUPPORTED)
/* Check that the tEXt or zTXt keyword is valid per PNG 1.0 specification,
* and if invalid, correct the keyword rather than discarding the entire
* chunk. The PNG 1.0 specification requires keywords 1-79 characters in
* length, forbids leading or trailing whitespace, multiple internal spaces,
* and the non-break space (0x80) from ISO 8859-1. Returns keyword length.
*
* The 'new_key' buffer must be 80 characters in size (for the keyword plus a
* trailing '\0'). If this routine returns 0 then there was no keyword, or a
* valid one could not be generated, and the caller must png_error.
*/
png_uint_32 /* PRIVATE */
png_check_keyword(png_structrp png_ptr, png_const_charp key, png_bytep new_key)
{
png_const_charp orig_key = key;
png_uint_32 key_len = 0;
int bad_character = 0;
int space = 1;
png_debug(1, "in png_check_keyword");
if (key == NULL)
{
*new_key = 0;
return 0;
}
while (*key && key_len < 79)
{
png_byte ch = (png_byte)*key++;
if ((ch > 32 && ch <= 126) || (ch >= 161 /*&& ch <= 255*/))
*new_key++ = ch, ++key_len, space = 0;
else if (space == 0)
{
/* A space or an invalid character when one wasn't seen immediately
* before; output just a space.
*/
*new_key++ = 32, ++key_len, space = 1;
/* If the character was not a space then it is invalid. */
if (ch != 32)
bad_character = ch;
}
else if (bad_character == 0)
bad_character = ch; /* just skip it, record the first error */
}
if (key_len > 0 && space != 0) /* trailing space */
{
--key_len, --new_key;
if (bad_character == 0)
bad_character = 32;
}
/* Terminate the keyword */
*new_key = 0;
if (key_len == 0)
return 0;
#ifdef PNG_WARNINGS_SUPPORTED
/* Try to only output one warning per keyword: */
if (*key != 0) /* keyword too long */
png_warning(png_ptr, "keyword truncated");
else if (bad_character != 0)
{
PNG_WARNING_PARAMETERS(p)
png_warning_parameter(p, 1, orig_key);
png_warning_parameter_signed(p, 2, PNG_NUMBER_FORMAT_02x, bad_character);
png_formatted_warning(png_ptr, p, "keyword \"@1\": bad character '0x@2'");
}
#endif /* WARNINGS */
return key_len;
}
#endif /* TEXT || pCAL || iCCP || sPLT */
#endif /* READ || WRITE */

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,8 @@
/* pngtest.c - a simple test program to test libpng
*
* Last changed in libpng 1.5.25 [December 3, 2015]
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
* Last changed in libpng 1.5.25 [(PENDING RELEASE)]
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
*
@@ -43,15 +43,6 @@
#include "png.h"
/* 1.6.1 added support for the configure test harness, which uses 77 to indicate
* a skipped test, in earlier versions we need to succeed on a skipped test, so:
*/
#if PNG_LIBPNG_VER >= 10601 && defined(HAVE_CONFIG_H)
# define SKIP 77
#else
# define SKIP 0
#endif
/* Known chunks that exist in pngtest.png must be supported or pngtest will fail
* simply as a result of re-ordering them. This may be fixed in 1.7
*
@@ -2074,9 +2065,9 @@ main(void)
fprintf(STDERR,
" test ignored because libpng was not built with read support\n");
/* And skip this test */
return SKIP;
return PNG_LIBPNG_VER < 10600 ? 0 : 77;
}
#endif
/* Generate a compiler error if there is an old png.h in the search path. */
typedef png_libpng_version_1_6_22beta03 Your_png_h_is_not_version_1_6_22beta03;
typedef png_libpng_version_1_7_0beta80 Your_png_h_is_not_version_1_7_0beta80;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.5 KiB

After

Width:  |  Height:  |  Size: 5.6 KiB

4258
pngtrans.c

File diff suppressed because it is too large Load Diff

View File

@@ -4,9 +4,10 @@
#
# Enter build configuration options in this file
#
# Security settings: by default these limits are unset, you can change them
# here by entering the appropriate values as #defines preceded by '@' (to cause,
# them to be passed through to the build of pnglibconf.h), for example:
# Security settings: these limits have default values that are set in
# scripts/pnglibconf.dfa; you can change them here by entering the
# appropriate values as #defines preceded by '@' (to cause them
# to be passed through to the build of pnglibconf.h), for example:
#
# @# define PNG_USER_WIDTH_MAX 65535
# @# define PNG_USER_HEIGHT_MAX 65535

View File

@@ -1,8 +1,8 @@
/* pngwio.c - functions for data output
*
* Last changed in libpng 1.6.15 [November 20, 2014]
* Copyright (c) 1998-2002,2004,2006-2014 Glenn Randers-Pehrson
* Last changed in libpng 1.7.0 [(PENDING RELEASE)]
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
*
@@ -19,6 +19,7 @@
*/
#include "pngpriv.h"
#define PNG_SRC_FILE PNG_SRC_FILE_pngwio
#ifdef PNG_WRITE_SUPPORTED
@@ -26,19 +27,23 @@
* writes to a file pointer. Note that this routine sometimes gets called
* with very small lengths, so you should implement some kind of simple
* buffering if you are using unbuffered writes. This should never be asked
* to write more than 64K on a 16-bit machine.
* to write more than 64K on a 16 bit machine.
*/
void /* PRIVATE */
png_write_data(png_structrp png_ptr, png_const_bytep data, png_size_t length)
png_write_data(png_structrp png_ptr, png_const_voidp data, png_size_t length)
{
/* NOTE: write_data_fn must not change the buffer! */
if (png_ptr->write_data_fn != NULL )
(*(png_ptr->write_data_fn))(png_ptr, png_constcast(png_bytep,data),
length);
/* NOTE: write_data_fn must not change the buffer!
* This cast is required because of the API; changing the type of the
* callback would require every app to change the callback and that change
* would have to be conditional on the libpng version.
*/
if (png_ptr->rw_data_fn != NULL )
png_ptr->rw_data_fn(png_ptr,
png_constcast(png_bytep,png_voidcast(png_const_bytep,data)), length);
else
png_error(png_ptr, "Call to NULL write function");
png_app_error(png_ptr, "No write function");
}
#ifdef PNG_STDIO_SUPPORTED
@@ -55,36 +60,22 @@ png_default_write_data(png_structp png_ptr, png_bytep data, png_size_t length)
if (png_ptr == NULL)
return;
check = fwrite(data, 1, length, (png_FILE_p)(png_ptr->io_ptr));
check = fwrite(data, 1, length, png_voidcast(png_FILE_p, png_ptr->io_ptr));
if (check != length)
png_error(png_ptr, "Write Error");
}
#endif
/* This function is called to output any data pending writing (normally
* to disk). After png_flush is called, there should be no data pending
* writing in any buffers.
*/
#ifdef PNG_WRITE_FLUSH_SUPPORTED
void /* PRIVATE */
png_flush(png_structrp png_ptr)
{
if (png_ptr->output_flush_fn != NULL)
(*(png_ptr->output_flush_fn))(png_ptr);
}
# ifdef PNG_STDIO_SUPPORTED
void PNGCBAPI
png_default_flush(png_structp png_ptr)
{
png_FILE_p io_ptr;
if (png_ptr == NULL)
return;
io_ptr = png_voidcast(png_FILE_p, (png_ptr->io_ptr));
fflush(io_ptr);
fflush(png_voidcast(png_FILE_p, (png_ptr->io_ptr)));
}
# endif
#endif
@@ -125,44 +116,26 @@ png_set_write_fn(png_structrp png_ptr, png_voidp io_ptr,
if (png_ptr == NULL)
return;
png_ptr->io_ptr = io_ptr;
#ifdef PNG_STDIO_SUPPORTED
if (write_data_fn != NULL)
png_ptr->write_data_fn = write_data_fn;
else
png_ptr->write_data_fn = png_default_write_data;
#else
png_ptr->write_data_fn = write_data_fn;
#endif
#ifdef PNG_WRITE_FLUSH_SUPPORTED
# ifdef PNG_STDIO_SUPPORTED
if (output_flush_fn != NULL)
png_ptr->output_flush_fn = output_flush_fn;
else
png_ptr->output_flush_fn = png_default_flush;
# else
png_ptr->output_flush_fn = output_flush_fn;
# endif
#else
PNG_UNUSED(output_flush_fn)
#endif /* WRITE_FLUSH */
#ifdef PNG_READ_SUPPORTED
/* It is an error to read while writing a png file */
if (png_ptr->read_data_fn != NULL)
if (png_ptr->read_struct)
{
png_ptr->read_data_fn = NULL;
png_warning(png_ptr,
"Can't set both read_data_fn and write_data_fn in the"
" same structure");
png_app_error(png_ptr, "cannot set a write function on a read struct");
return;
}
#endif
if (write_data_fn == NULL)
{
png_app_error(png_ptr,
"API change: png_set_write_fn requires a function");
return;
}
png_ptr->io_ptr = io_ptr;
png_ptr->rw_data_fn = write_data_fn;
# ifdef PNG_WRITE_FLUSH_SUPPORTED
if (output_flush_fn != NULL)
png_ptr->output_flush_fn = output_flush_fn;
# else
PNG_UNUSED(output_flush_fn)
# endif /* WRITE_FLUSH */
}
#endif /* WRITE */

1972
pngwrite.c

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,8 @@
/* pngwtran.c - transforms the data in a row for PNG writers
*
* Last changed in libpng 1.6.18 [July 23, 2015]
* Copyright (c) 1998-2002,2004,2006-2015 Glenn Randers-Pehrson
* Last changed in libpng 1.6.17 [(PENDING RELEASE)]
* Copyright (c) 1998-2002,2004,2006-2016 Glenn Randers-Pehrson
* (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
* (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
*
@@ -12,565 +12,137 @@
*/
#include "pngpriv.h"
#ifdef PNG_WRITE_SUPPORTED
#ifdef PNG_WRITE_TRANSFORMS_SUPPORTED
#define PNG_SRC_FILE PNG_SRC_FILE_pngwtran
#ifdef PNG_WRITE_PACK_SUPPORTED
/* Pack pixels into bytes. Pass the true bit depth in bit_depth. The
* row_info bit depth should be 8 (one pixel per byte). The channels
* should be 1 (this only happens on grayscale and paletted images).
*/
/* Pack pixels into bytes. */
static void
png_do_pack(png_row_infop row_info, png_bytep row, png_uint_32 bit_depth)
png_do_write_pack(png_transformp *transform, png_transform_controlp tc)
{
png_alloc_size_t rowbytes = PNG_TC_ROWBYTES(*tc);
png_const_bytep sp = png_voidcast(png_const_bytep, tc->sp);
png_const_bytep ep = png_upcast(png_const_bytep, tc->sp) + rowbytes;
png_bytep dp = png_voidcast(png_bytep, tc->dp);
png_debug(1, "in png_do_pack");
if (row_info->bit_depth == 8 &&
row_info->channels == 1)
# define png_ptr tc->png_ptr
switch ((*transform)->args)
{
switch ((int)bit_depth)
case 1:
{
case 1:
unsigned int mask = 0x80, v = 0;
while (sp < ep)
{
png_bytep sp, dp;
int mask, v;
png_uint_32 i;
png_uint_32 row_width = row_info->width;
if (*sp++ != 0)
v |= mask;
sp = row;
dp = row;
mask = 0x80;
v = 0;
mask >>= 1;
for (i = 0; i < row_width; i++)
if (mask == 0)
{
if (*sp != 0)
v |= mask;
sp++;
if (mask > 1)
mask >>= 1;
else
{
mask = 0x80;
*dp = (png_byte)v;
dp++;
v = 0;
}
mask = 0x80;
*dp++ = PNG_BYTE(v);
v = 0;
}
if (mask != 0x80)
*dp = (png_byte)v;
break;
}
case 2:
{
png_bytep sp, dp;
unsigned int shift;
int v;
png_uint_32 i;
png_uint_32 row_width = row_info->width;
sp = row;
dp = row;
shift = 6;
v = 0;
for (i = 0; i < row_width; i++)
{
png_byte value;
value = (png_byte)(*sp & 0x03);
v |= (value << shift);
if (shift == 0)
{
shift = 6;
*dp = (png_byte)v;
dp++;
v = 0;
}
else
shift -= 2;
sp++;
}
if (shift != 6)
*dp = (png_byte)v;
break;
}
case 4:
{
png_bytep sp, dp;
unsigned int shift;
int v;
png_uint_32 i;
png_uint_32 row_width = row_info->width;
sp = row;
dp = row;
shift = 4;
v = 0;
for (i = 0; i < row_width; i++)
{
png_byte value;
value = (png_byte)(*sp & 0x0f);
v |= (value << shift);
if (shift == 0)
{
shift = 4;
*dp = (png_byte)v;
dp++;
v = 0;
}
else
shift -= 4;
sp++;
}
if (shift != 4)
*dp = (png_byte)v;
break;
}
default:
break;
if (mask != 0x80)
*dp++ = PNG_BYTE(v);
break;
}
row_info->bit_depth = (png_byte)bit_depth;
row_info->pixel_depth = (png_byte)(bit_depth * row_info->channels);
row_info->rowbytes = PNG_ROWBYTES(row_info->pixel_depth,
row_info->width);
case 2:
{
unsigned int shift = 8, v = 0;
while (sp < ep)
{
shift -= 2;
v |= (*sp++ & 0x3) << shift;
if (shift == 0)
{
shift = 8;
*dp++ = PNG_BYTE(v);
v = 0;
}
}
if (shift != 8)
*dp++ = PNG_BYTE(v);
break;
}
case 4:
{
unsigned int shift = 8, v = 0;
while (sp < ep)
{
shift -= 4;
v |= ((*sp++ & 0xf) << shift);
if (shift == 0)
{
shift = 8;
*dp++ = PNG_BYTE(v);
v = 0;
}
}
if (shift != 8)
*dp++ = PNG_BYTE(v);
break;
}
default:
impossible("bit depth");
}
if ((tc->format & PNG_FORMAT_FLAG_COLORMAP) == 0 &&
--(tc->range) == 0)
tc->format &= PNG_BIC_MASK(PNG_FORMAT_FLAG_RANGE);
tc->bit_depth = (*transform)->args;
tc->sp = tc->dp;
# undef png_ptr
}
#endif
#ifdef PNG_WRITE_SHIFT_SUPPORTED
/* Shift pixel values to take advantage of whole range. Pass the
* true number of bits in bit_depth. The row should be packed
* according to row_info->bit_depth. Thus, if you had a row of
* bit depth 4, but the pixels only had values from 0 to 7, you
* would pass 3 as bit_depth, and this routine would translate the
* data to 0 to 15.
*/
static void
png_do_shift(png_row_infop row_info, png_bytep row,
png_const_color_8p bit_depth)
{
png_debug(1, "in png_do_shift");
if (row_info->color_type != PNG_COLOR_TYPE_PALETTE)
{
int shift_start[4], shift_dec[4];
int channels = 0;
if ((row_info->color_type & PNG_COLOR_MASK_COLOR) != 0)
{
shift_start[channels] = row_info->bit_depth - bit_depth->red;
shift_dec[channels] = bit_depth->red;
channels++;
shift_start[channels] = row_info->bit_depth - bit_depth->green;
shift_dec[channels] = bit_depth->green;
channels++;
shift_start[channels] = row_info->bit_depth - bit_depth->blue;
shift_dec[channels] = bit_depth->blue;
channels++;
}
else
{
shift_start[channels] = row_info->bit_depth - bit_depth->gray;
shift_dec[channels] = bit_depth->gray;
channels++;
}
if ((row_info->color_type & PNG_COLOR_MASK_ALPHA) != 0)
{
shift_start[channels] = row_info->bit_depth - bit_depth->alpha;
shift_dec[channels] = bit_depth->alpha;
channels++;
}
/* With low row depths, could only be grayscale, so one channel */
if (row_info->bit_depth < 8)
{
png_bytep bp = row;
png_size_t i;
unsigned int mask;
png_size_t row_bytes = row_info->rowbytes;
if (bit_depth->gray == 1 && row_info->bit_depth == 2)
mask = 0x55;
else if (row_info->bit_depth == 4 && bit_depth->gray == 3)
mask = 0x11;
else
mask = 0xff;
for (i = 0; i < row_bytes; i++, bp++)
{
int j;
unsigned int v, out;
v = *bp;
out = 0;
for (j = shift_start[0]; j > -shift_dec[0]; j -= shift_dec[0])
{
if (j > 0)
out |= v << j;
else
out |= (v >> (-j)) & mask;
}
*bp = (png_byte)(out & 0xff);
}
}
else if (row_info->bit_depth == 8)
{
png_bytep bp = row;
png_uint_32 i;
png_uint_32 istop = channels * row_info->width;
for (i = 0; i < istop; i++, bp++)
{
const unsigned int c = i%channels;
int j;
unsigned int v, out;
v = *bp;
out = 0;
for (j = shift_start[c]; j > -shift_dec[c]; j -= shift_dec[c])
{
if (j > 0)
out |= v << j;
else
out |= v >> (-j);
}
*bp = (png_byte)(out & 0xff);
}
}
else
{
png_bytep bp;
png_uint_32 i;
png_uint_32 istop = channels * row_info->width;
for (bp = row, i = 0; i < istop; i++)
{
const unsigned int c = i%channels;
int j;
unsigned int value, v;
v = png_get_uint_16(bp);
value = 0;
for (j = shift_start[c]; j > -shift_dec[c]; j -= shift_dec[c])
{
if (j > 0)
value |= v << j;
else
value |= v >> (-j);
}
*bp++ = (png_byte)((value >> 8) & 0xff);
*bp++ = (png_byte)(value & 0xff);
}
}
}
}
#endif
#ifdef PNG_WRITE_SWAP_ALPHA_SUPPORTED
static void
png_do_write_swap_alpha(png_row_infop row_info, png_bytep row)
{
png_debug(1, "in png_do_write_swap_alpha");
{
if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
{
if (row_info->bit_depth == 8)
{
/* This converts from ARGB to RGBA */
png_bytep sp, dp;
png_uint_32 i;
png_uint_32 row_width = row_info->width;
for (i = 0, sp = dp = row; i < row_width; i++)
{
png_byte save = *(sp++);
*(dp++) = *(sp++);
*(dp++) = *(sp++);
*(dp++) = *(sp++);
*(dp++) = save;
}
}
#ifdef PNG_WRITE_16BIT_SUPPORTED
else
{
/* This converts from AARRGGBB to RRGGBBAA */
png_bytep sp, dp;
png_uint_32 i;
png_uint_32 row_width = row_info->width;
for (i = 0, sp = dp = row; i < row_width; i++)
{
png_byte save[2];
save[0] = *(sp++);
save[1] = *(sp++);
*(dp++) = *(sp++);
*(dp++) = *(sp++);
*(dp++) = *(sp++);
*(dp++) = *(sp++);
*(dp++) = *(sp++);
*(dp++) = *(sp++);
*(dp++) = save[0];
*(dp++) = save[1];
}
}
#endif /* WRITE_16BIT */
}
else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
{
if (row_info->bit_depth == 8)
{
/* This converts from AG to GA */
png_bytep sp, dp;
png_uint_32 i;
png_uint_32 row_width = row_info->width;
for (i = 0, sp = dp = row; i < row_width; i++)
{
png_byte save = *(sp++);
*(dp++) = *(sp++);
*(dp++) = save;
}
}
#ifdef PNG_WRITE_16BIT_SUPPORTED
else
{
/* This converts from AAGG to GGAA */
png_bytep sp, dp;
png_uint_32 i;
png_uint_32 row_width = row_info->width;
for (i = 0, sp = dp = row; i < row_width; i++)
{
png_byte save[2];
save[0] = *(sp++);
save[1] = *(sp++);
*(dp++) = *(sp++);
*(dp++) = *(sp++);
*(dp++) = save[0];
*(dp++) = save[1];
}
}
#endif /* WRITE_16BIT */
}
}
}
#endif
#ifdef PNG_WRITE_INVERT_ALPHA_SUPPORTED
static void
png_do_write_invert_alpha(png_row_infop row_info, png_bytep row)
{
png_debug(1, "in png_do_write_invert_alpha");
{
if (row_info->color_type == PNG_COLOR_TYPE_RGB_ALPHA)
{
if (row_info->bit_depth == 8)
{
/* This inverts the alpha channel in RGBA */
png_bytep sp, dp;
png_uint_32 i;
png_uint_32 row_width = row_info->width;
for (i = 0, sp = dp = row; i < row_width; i++)
{
/* Does nothing
*(dp++) = *(sp++);
*(dp++) = *(sp++);
*(dp++) = *(sp++);
*/
sp+=3; dp = sp;
*dp = (png_byte)(255 - *(sp++));
}
}
#ifdef PNG_WRITE_16BIT_SUPPORTED
else
{
/* This inverts the alpha channel in RRGGBBAA */
png_bytep sp, dp;
png_uint_32 i;
png_uint_32 row_width = row_info->width;
for (i = 0, sp = dp = row; i < row_width; i++)
{
/* Does nothing
*(dp++) = *(sp++);
*(dp++) = *(sp++);
*(dp++) = *(sp++);
*(dp++) = *(sp++);
*(dp++) = *(sp++);
*(dp++) = *(sp++);
*/
sp+=6; dp = sp;
*(dp++) = (png_byte)(255 - *(sp++));
*dp = (png_byte)(255 - *(sp++));
}
}
#endif /* WRITE_16BIT */
}
else if (row_info->color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
{
if (row_info->bit_depth == 8)
{
/* This inverts the alpha channel in GA */
png_bytep sp, dp;
png_uint_32 i;
png_uint_32 row_width = row_info->width;
for (i = 0, sp = dp = row; i < row_width; i++)
{
*(dp++) = *(sp++);
*(dp++) = (png_byte)(255 - *(sp++));
}
}
#ifdef PNG_WRITE_16BIT_SUPPORTED
else
{
/* This inverts the alpha channel in GGAA */
png_bytep sp, dp;
png_uint_32 i;
png_uint_32 row_width = row_info->width;
for (i = 0, sp = dp = row; i < row_width; i++)
{
/* Does nothing
*(dp++) = *(sp++);
*(dp++) = *(sp++);
*/
sp+=2; dp = sp;
*(dp++) = (png_byte)(255 - *(sp++));
*dp = (png_byte)(255 - *(sp++));
}
}
#endif /* WRITE_16BIT */
}
}
}
#endif
/* Transform the data according to the user's wishes. The order of
* transformations is significant.
*/
void /* PRIVATE */
png_do_write_transformations(png_structrp png_ptr, png_row_infop row_info)
png_init_write_pack(png_transformp *transform, png_transform_controlp tc)
{
png_debug(1, "in png_do_write_transformations");
# define png_ptr tc->png_ptr
debug(tc->init);
# undef png_ptr
if (png_ptr == NULL)
return;
/* The init routine is called *forward* so the transform control we get has
* the required bit depth and the transform routine will increase it to 8
* bits per channel. The code doesn't really care how many channels there
* are, but the only way to get a channel depth of less than 8 is to have
* just one channel.
*/
if (tc->bit_depth < 8) /* else no packing/unpacking */
{
if (tc->init == PNG_TC_INIT_FINAL)
{
(*transform)->fn = png_do_write_pack;
/* Record this for the backwards run: */
(*transform)->args = tc->bit_depth & 0xf;
}
#ifdef PNG_WRITE_USER_TRANSFORM_SUPPORTED
if ((png_ptr->transformations & PNG_USER_TRANSFORM) != 0)
if (png_ptr->write_user_transform_fn != NULL)
(*(png_ptr->write_user_transform_fn)) /* User write transform
function */
(png_ptr, /* png_ptr */
row_info, /* row_info: */
/* png_uint_32 width; width of row */
/* png_size_t rowbytes; number of bytes in row */
/* png_byte color_type; color type of pixels */
/* png_byte bit_depth; bit depth of samples */
/* png_byte channels; number of channels (1-4) */
/* png_byte pixel_depth; bits per pixel (depth*channels) */
png_ptr->row_buf + 1); /* start of pixel data for row */
#endif
if ((tc->format & PNG_FORMAT_FLAG_COLORMAP) == 0)
{
tc->range++;
tc->format |= PNG_FORMAT_FLAG_RANGE; /* forwards: backwards cancels */
}
#ifdef PNG_WRITE_FILLER_SUPPORTED
if ((png_ptr->transformations & PNG_FILLER) != 0)
png_do_strip_channel(row_info, png_ptr->row_buf + 1,
!(png_ptr->flags & PNG_FLAG_FILLER_AFTER));
#endif
tc->bit_depth = 8;
}
#ifdef PNG_WRITE_PACKSWAP_SUPPORTED
if ((png_ptr->transformations & PNG_PACKSWAP) != 0)
png_do_packswap(row_info, png_ptr->row_buf + 1);
#endif
#ifdef PNG_WRITE_PACK_SUPPORTED
if ((png_ptr->transformations & PNG_PACK) != 0)
png_do_pack(row_info, png_ptr->row_buf + 1,
(png_uint_32)png_ptr->bit_depth);
#endif
#ifdef PNG_WRITE_SWAP_SUPPORTED
# ifdef PNG_16BIT_SUPPORTED
if ((png_ptr->transformations & PNG_SWAP_BYTES) != 0)
png_do_swap(row_info, png_ptr->row_buf + 1);
# endif
#endif
#ifdef PNG_WRITE_SHIFT_SUPPORTED
if ((png_ptr->transformations & PNG_SHIFT) != 0)
png_do_shift(row_info, png_ptr->row_buf + 1,
&(png_ptr->shift));
#endif
#ifdef PNG_WRITE_SWAP_ALPHA_SUPPORTED
if ((png_ptr->transformations & PNG_SWAP_ALPHA) != 0)
png_do_write_swap_alpha(row_info, png_ptr->row_buf + 1);
#endif
#ifdef PNG_WRITE_INVERT_ALPHA_SUPPORTED
if ((png_ptr->transformations & PNG_INVERT_ALPHA) != 0)
png_do_write_invert_alpha(row_info, png_ptr->row_buf + 1);
#endif
#ifdef PNG_WRITE_BGR_SUPPORTED
if ((png_ptr->transformations & PNG_BGR) != 0)
png_do_bgr(row_info, png_ptr->row_buf + 1);
#endif
#ifdef PNG_WRITE_INVERT_SUPPORTED
if ((png_ptr->transformations & PNG_INVERT_MONO) != 0)
png_do_invert(row_info, png_ptr->row_buf + 1);
#endif
else /* the transform is not applicable */
(*transform)->fn = NULL;
}
#endif /* WRITE_TRANSFORMS */
#endif /* WRITE */
#endif /* WRITE_PACK */

4849
pngwutil.c

File diff suppressed because it is too large Load Diff

View File

@@ -30,7 +30,7 @@
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
OutputFile="$(OutDir)/libpng16.dll"
OutputFile="$(OutDir)/libpng17.dll"
LinkIncremental="1"/>
<Tool
Name="VCMIDLTool"/>
@@ -78,7 +78,7 @@
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
OutputFile="$(OutDir)/libpng16d.dll"
OutputFile="$(OutDir)/libpng17d.dll"
GenerateDebugInformation="TRUE"/>
<Tool
Name="VCMIDLTool"/>
@@ -126,7 +126,7 @@
Name="VCCustomBuildTool"/>
<Tool
Name="VCLinkerTool"
OutputFile="$(OutDir)/libpng16vb.dll"
OutputFile="$(OutDir)/libpng17vb.dll"
LinkIncremental="1"/>
<Tool
Name="VCMIDLTool"/>

View File

@@ -130,7 +130,7 @@ $(TargetPath) ..\..\pngtest.png $(IntDir)\pngout.png"
Name="VCLinkerTool"
OutputFile="$(OutDir)/pngtest.exe"
LinkIncremental="1"
IgnoreDefaultLibraryNames="$(IntDir)\libpng16b.lib"
IgnoreDefaultLibraryNames="$(IntDir)\libpng17b.lib"
SubSystem="1"
TargetMachine="1"/>
<Tool

View File

@@ -1,7 +1,7 @@
VisualStudio instructions
libpng version 1.6.22beta03 - March 9, 2016
libpng version 1.7.0beta80 - May 6, 2016
Copyright (c) 2010,2013,2015 Glenn Randers-Pehrson
@@ -40,7 +40,7 @@ problems.
If you don't use the Visual Studio defaults your application must still be
built with the default runtime option (/MD). If, for some reason, it is not
then your application will crash inside libpng16.dll as soon as libpng
then your application will crash inside libpng17.dll as soon as libpng
tries to read from a file handle you pass in.
If you do not want to use the DLL, for example for a very small application,

View File

@@ -63,23 +63,23 @@
<LinkIncremental>false</LinkIncremental>
<CustomBuildBeforeTargets>
</CustomBuildBeforeTargets>
<TargetName>$(ProjectName)16</TargetName>
<TargetName>$(ProjectName)17</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Library|Win32'">
<LinkIncremental>false</LinkIncremental>
<CustomBuildBeforeTargets />
<TargetName>$(ProjectName)16</TargetName>
<TargetName>$(ProjectName)17</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<CustomBuildBeforeTargets>
</CustomBuildBeforeTargets>
<TargetName>$(ProjectName)16</TargetName>
<TargetName>$(ProjectName)17</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Library|Win32'">
<LinkIncremental>false</LinkIncremental>
<CustomBuildBeforeTargets />
<TargetName>$(ProjectName)16</TargetName>
<TargetName>$(ProjectName)17</TargetName>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
@@ -107,7 +107,7 @@
<SubSystem>Windows</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>zlib.lib</AdditionalDependencies>
<Version>16</Version>
<Version>17</Version>
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>
@@ -164,7 +164,7 @@
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>zlib.lib</AdditionalDependencies>
<Version>16</Version>
<Version>17</Version>
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
</Link>
</ItemDefinitionGroup>

View File

@@ -96,7 +96,7 @@
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>libpng16.lib</AdditionalDependencies>
<AdditionalDependencies>libpng17.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
</Link>
<CustomBuildStep>
@@ -129,7 +129,7 @@
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>libpng16.lib;zlib.lib</AdditionalDependencies>
<AdditionalDependencies>libpng17.lib;zlib.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
</Link>
<CustomBuildStep>
@@ -163,7 +163,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>libpng16.lib</AdditionalDependencies>
<AdditionalDependencies>libpng17.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
</Link>
@@ -199,7 +199,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>libpng16.lib;zlib.lib</AdditionalDependencies>
<AdditionalDependencies>libpng17.lib;zlib.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
</Link>

View File

@@ -96,7 +96,7 @@
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>libpng16.lib</AdditionalDependencies>
<AdditionalDependencies>libpng17.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
</Link>
<CustomBuildStep>
@@ -129,7 +129,7 @@
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>libpng16.lib;zlib.lib</AdditionalDependencies>
<AdditionalDependencies>libpng17.lib;zlib.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
</Link>
<CustomBuildStep>
@@ -164,7 +164,7 @@
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
<AdditionalDependencies>libpng16.lib</AdditionalDependencies>
<AdditionalDependencies>libpng17.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
</Link>
<CustomBuildStep>
@@ -199,7 +199,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>libpng16.lib;zlib.lib</AdditionalDependencies>
<AdditionalDependencies>libpng17.lib;zlib.lib</AdditionalDependencies>
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
</Link>

View File

@@ -96,7 +96,7 @@
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>libpng16.lib</AdditionalDependencies>
<AdditionalDependencies>libpng17.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
</Link>
<CustomBuildStep>
@@ -129,7 +129,7 @@
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>libpng16.lib;zlib.lib</AdditionalDependencies>
<AdditionalDependencies>libpng17.lib;zlib.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
</Link>
<CustomBuildStep>
@@ -163,7 +163,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>libpng16.lib</AdditionalDependencies>
<AdditionalDependencies>libpng17.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
</Link>
@@ -199,7 +199,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>libpng16.lib;zlib.lib</AdditionalDependencies>
<AdditionalDependencies>libpng17.lib;zlib.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
</Link>

View File

@@ -96,7 +96,7 @@
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>libpng16.lib;zlib.lib</AdditionalDependencies>
<AdditionalDependencies>libpng17.lib;zlib.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
</Link>
<CustomBuildStep>
@@ -129,7 +129,7 @@
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>libpng16.lib;zlib.lib</AdditionalDependencies>
<AdditionalDependencies>libpng17.lib;zlib.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
</Link>
<CustomBuildStep>
@@ -163,7 +163,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>libpng16.lib;zlib.lib</AdditionalDependencies>
<AdditionalDependencies>libpng17.lib;zlib.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
</Link>
@@ -199,7 +199,7 @@
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<AdditionalDependencies>libpng16.lib;zlib.lib</AdditionalDependencies>
<AdditionalDependencies>libpng17.lib;zlib.lib</AdditionalDependencies>
<AdditionalLibraryDirectories>$(OutDir)</AdditionalLibraryDirectories>
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
</Link>

View File

@@ -2,9 +2,9 @@
<!--
* zlib.props - location of zlib source
*
* libpng version 1.6.22beta03 - March 9, 2016
* libpng version 1.7.0beta80 - May 6, 2016
*
* Copyright (c) 1998-2011 Glenn Randers-Pehrson
* Copyright (c) 2011,2013,2014 Glenn Randers-Pehrson
*
* This code is released under the libpng license.
* For conditions of distribution and use, see the disclaimer

View File

@@ -1,9 +1,9 @@
Makefiles for libpng version 1.6.22beta03 - March 9, 2016
Makefiles for libpng version 1.7.0beta80 - May 6, 2016
pnglibconf.h.prebuilt => Stores configuration settings
makefile.linux => Linux/ELF makefile
(gcc, creates libpng16.so.16.1.6.22beta03)
(gcc, creates libpng17.so.17.1.7.0beta80)
makefile.gcc => Generic makefile (gcc, creates static libpng.a)
makefile.knr => Archaic UNIX Makefile that converts files with
ansi2knr (Requires ansi2knr.c from
@@ -33,12 +33,12 @@ pnglibconf.h.prebuilt => Stores configuration settings
makefile.os2 => OS/2 Makefile (gcc and emx, requires libpng.def)
makefile.sco => For SCO OSr5 ELF and Unixware 7 with Native cc
makefile.sggcc => Silicon Graphics (gcc,
creates libpng16.so.16.1.6.22beta03)
creates libpng17.so.17.1.7.0beta80)
makefile.sgi => Silicon Graphics IRIX makefile (cc, creates static lib)
makefile.solaris => Solaris 2.X makefile (gcc,
creates libpng16.so.16.1.6.22beta03)
creates libpng17.so.17.1.7.0beta80)
makefile.so9 => Solaris 9 makefile (gcc,
creates libpng16.so.16.1.6.22beta03)
creates libpng17.so.17.1.7.0beta80)
makefile.std => Generic UNIX makefile (cc, creates static libpng.a)
makefile.sunos => Sun makefile
makefile.32sunu => Sun Ultra 32-bit makefile

245
scripts/chunkhash.c Normal file
View File

@@ -0,0 +1,245 @@
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdint.h>
#include "pnglibconf.h.prebuilt"
#include "../pngpriv.h"
static const struct
{
png_uint_32 name;
}
png_known_chunks[] =
/* See pngchunk.h for how this works: */
#define PNG_CHUNK_END(n, c1, c2, c3, c4, before, after)\
{ png_ ##n }
#define PNG_CHUNK(n, c1, c2, c3, c4, before, after)\
PNG_CHUNK_END(n, c1, c2, c3, c4, before, after),
#define PNG_CHUNK_BEGIN(n, c1, c2, c3, c4, before, after)\
PNG_CHUNK_END(n, c1, c2, c3, c4, before, after),
{
# include "../pngchunk.h"
};
#define C_KNOWN ((sizeof png_known_chunks)/(sizeof png_known_chunks[0]))
static unsigned int
index_of(png_uint_32 name)
{
unsigned int i;
if (name == 0)
return 0;
for (i=0; i<C_KNOWN; ++i) if (png_known_chunks[i].name == name) return i;
assert("not reached" && 0);
}
static unsigned int bitorder[32];
#define PNG_CHUNK_HASH(n,shift,s1,s2,s3,s4,s5)\
(0x3f & (((n += n >> shift),n += n >> s1),n += n >> s2))
inline unsigned int hash(png_uint_32 name, unsigned int shift, unsigned int s1,
unsigned int s2, unsigned int s3, unsigned int s4, unsigned int s5)
{
/* Running the search gives (shift,s1,s2) (2,8,16) */
//return PNG_CHUNK_HASH(name, shift, s1, s2, s3, s4, s5);
name += name >> shift;
name += name >> s1;
name += name >> s2;
//name += name >> s3;
return 0x3f & name;
/*return 0x3f & ((name) + (
((name >> bitorder[s1]) & 0x01) +
((name >> (bitorder[s2]-1)) & 0x02) +
((name >> (bitorder[s3]-2)) & 0x04) +
((name >> (bitorder[s4]-3)) & 0x08) +
((name >> (bitorder[s5]-4)) & 0x10)));*/
}
int main(void) {
unsigned int s1 = 0, s2 = 0, s3 = 0, s4 = 0, s5 = 0;
unsigned int shift = 0;
png_uint_32 mask;
unsigned int bitcount;
unsigned int mineq;
png_uint_32 sarray;
unsigned int shift_save;
png_uint_32 reverse_index_save[64];
assert(C_KNOWN <= 64);
/* Check IDAT: */
assert(index_of(png_IDAT) == 0);
/* Build a mask of all the bits that differ in at least one of the known
* names.
*/
{
png_uint_32 set, unset;
int i;
for (i=0, set=unset=0; i<C_KNOWN; ++i)
{
set |= png_known_chunks[i].name;
unset |= ~png_known_chunks[i].name;
}
mask = set ^ ~unset;
}
//printf("C_KNOWN = %lu, 0x%.8x\n", C_KNOWN, mask);
assert(mask == 0x3f1f1f3f);
/* Print the bit array */
{
unsigned int i;
unsigned int ones[32];
memset(ones, 0, sizeof ones);
for (i=0; i<C_KNOWN; ++i)
{
png_uint_32 name = png_known_chunks[i].name;
int j, k;
char s[5], b[33];
PNG_CSTRING_FROM_CHUNK(s, name);
for (j=k=0; j<32; ++j)
{
if ((name >> j) & 1)
++ones[j];
if ((mask >> (31-j)) & 1)
b[k++] = ((name >> (31-j)) & 1) ? 'o' : ' ';
}
b[k] = 0;
//printf("%s: %s\n", s, b);
}
memset(bitorder, 0, sizeof bitorder);
bitcount = 0;
for (i=0; i<C_KNOWN; ++i) if (((C_KNOWN-i) & 1) == 0)
{
unsigned int lo = (C_KNOWN - i)>>1;
unsigned int hi = (C_KNOWN + i)>>1;
int j;
for (j=0; j<32; ++j) if (ones[j] == lo || ones[j] == hi)
{
//printf(" %2d,", j);
bitorder[bitcount++] = j;
}
}
//printf("\nbitcount=%u, C_KNOWN=%lu\n", bitcount, C_KNOWN);
}
/* s? are masks to exclude bits from the hash, one for each byte: */
mineq = C_KNOWN;
sarray = 0;
for (shift=0; shift<32; ++shift)
for (s1=0; s1<32; ++s1)
for (s2=s1+1; s2<32; ++s2)
//for (s3=s2+1; s3<32; ++s3)
//for (s4=s3+1; s4<bitcount; ++s4)
//for (s5=s4+1; s5<bitcount; ++s5)
{
int i, eq;
png_uint_32 reverse_index[64];
memset(reverse_index, 0, sizeof reverse_index);
for (i=eq=0; i<C_KNOWN; ++i)
{
png_uint_32 name = png_known_chunks[i].name;
unsigned int h = hash(name, shift, s1, s2, s3, s4, s5);
if (reverse_index[h] == 0)
reverse_index[h] = name;
else
++eq;
}
if (eq == 0)
{
/* Print the LUT: */
printf("static const png_byte png_chunk_lut[64] =\n{ \n ");
for (i=0; i<63; ++i)
{
printf("%2u, ", index_of(reverse_index[i]));
if ((i+1 & 0xf) == 0) printf("\n ");
}
printf("%2u\n};\n\n", index_of(reverse_index[63]));
//printf("hash: %u, %u, %u, %u, %u, %u\n", shift, s1, s2, s3, s4, s5);
printf("#define PNG_CHUNK_HASH(n)\\\n png_chunk_lut[0x3f &"
" (((n += n >> %u),n += n >> %u),n += n >> %u)]\n\n",
shift, s1, s2);
printf("static png_byte\n"
"png_chunk_index(png_uint_32 name)\n"
"{\n"
" name += name >> %u;\n"
" name += name >> %u;\n"
" name += name >> %u;\n"
" return png_chunk_lut[name & 0x3f];\n"
"}\n", shift, s1, s2);
return 0;
}
if (eq < mineq)
{
mineq = eq;
sarray = s1 + bitcount * (s2 + bitcount * (s3 + bitcount *
(s4 + bitcount *s5)));
memcpy(reverse_index_save, reverse_index, sizeof reverse_index_save);
shift_save = shift;
}
}
s1 = sarray % bitcount;
s2 = (sarray / bitcount) % bitcount;
s3 = (sarray / bitcount / bitcount) % bitcount;
s4 = (sarray / bitcount / bitcount / bitcount) % bitcount;
s5 = (sarray / bitcount / bitcount / bitcount / bitcount) % bitcount;
printf("best: %u clashes with bits: %u, %u, %u, %u, %u, %u\n",
mineq, shift_save, s1, s2, s3, s4, s5);
{
int i;
png_uint_32 reverse_index[64];
memset(reverse_index, 0, sizeof reverse_index);
for (i=0; i<C_KNOWN; ++i)
{
png_uint_32 name = png_known_chunks[i].name;
unsigned int h = hash(name, shift_save, s1, s2, s3, s4, s5);
if (reverse_index[h] == 0)
reverse_index[h] = name;
else
{
char n1[5], n2[5];
PNG_CSTRING_FROM_CHUNK(n1, reverse_index[h]);
PNG_CSTRING_FROM_CHUNK(n2, name);
printf("%d <- %s and %s\n", h, n1, n2);
}
}
}
return 1;
}

View File

@@ -1,6 +1,6 @@
/* def.c - define format of libpng.def
*
* Last changed in libpng version 1.6.16 [December 22, 2014]
* Last changed in libpng 1.6.16 [December 22, 2014]
* Copyright (c) 2011-2014 Glenn Randers-Pehrson
*
* This code is released under the libpng license.
@@ -21,7 +21,7 @@ PNG_DFN "OS2 DESCRIPTION "PNG image compression library""
PNG_DFN "OS2 CODE PRELOAD MOVEABLE DISCARDABLE"
PNG_DFN ""
PNG_DFN "EXPORTS"
PNG_DFN ";Version 1.6.22beta03"
PNG_DFN ";Version 1.7.0beta80"
#define PNG_EXPORTA(ordinal, type, name, args, attributes)\
PNG_DFN "@" SYMBOL_PREFIX "@@" name "@"

View File

@@ -33,20 +33,20 @@ clean :
# Other dependencies.
png.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h,pnginfo.h, pngdebug.h
pngpread.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h,pnginfo.h, pngdebug.h
pngset.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h,pnginfo.h, pngdebug.h
pngget.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h,pnginfo.h, pngdebug.h
pngread.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h,pnginfo.h, pngdebug.h
pngrtran.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h,pnginfo.h, pngdebug.h
pngrutil.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h,pnginfo.h, pngdebug.h
pngerror.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h,pnginfo.h, pngdebug.h
pngmem.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h,pnginfo.h, pngdebug.h
pngrio.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h,pnginfo.h, pngdebug.h
pngwio.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h,pnginfo.h, pngdebug.h
pngtrans.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h,pnginfo.h, pngdebug.h
pngwrite.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h,pnginfo.h, pngdebug.h
pngwtran.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h,pnginfo.h, pngdebug.h
pngwutil.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h,pnginfo.h, pngdebug.h
png.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h, pnginfo.h, pngdebug.h, pngchunk.h
pngpread.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h, pnginfo.h, pngdebug.h, pngchunk.h
pngset.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h, pnginfo.h, pngdebug.h, pngchunk.h
pngget.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h, pnginfo.h, pngdebug.h, pngchunk.h
pngread.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h, pnginfo.h, pngdebug.h, pngchunk.h
pngrtran.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h, pnginfo.h, pngdebug.h, pngchunk.h
pngrutil.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h, pnginfo.h, pngdebug.h, pngchunk.h
pngerror.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h, pnginfo.h, pngdebug.h, pngchunk.h
pngmem.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h, pnginfo.h, pngdebug.h, pngchunk.h
pngrio.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h, pnginfo.h, pngdebug.h, pngchunk.h
pngwio.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h, pnginfo.h, pngdebug.h, pngchunk.h
pngtrans.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h, pnginfo.h, pngdebug.h, pngchunk.h
pngwrite.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h, pnginfo.h, pngdebug.h, pngchunk.h
pngwtran.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h, pnginfo.h, pngdebug.h, pngchunk.h
pngwutil.obj : png.h, pngconf.h, pnglibconf.h, pngpriv.h, pngstruct.h, pnginfo.h, pngdebug.h, pngchunk.h
pngtest.obj : png.h, pngconf.h, pnglibconf.h

View File

@@ -48,7 +48,6 @@ if ("${INPUTEXT}" STREQUAL ".c" AND "${OUTPUTEXT}" STREQUAL ".out")
${CMAKE_C_FLAGS}
"-I${SRCDIR}"
"-I${BINDIR}"
${INCLUDES}
"-DPNGLIB_LIBNAME=PNG${PNGLIB_MAJOR}${PNGLIB_MINOR}_0"
"-DPNGLIB_VERSION=${PNGLIB_VERSION}"
"-DSYMBOL_PREFIX=${SYMBOL_PREFIX}"

View File

@@ -1,7 +1,7 @@
/* intprefix.c - generate an unprefixed internal symbol list
*
* Last changed in libpng version 1.6.16 [December 22, 2014]
* Last changed in libpng 1.6.16 [December 22, 2014]
* Copyright (c) 2013-2014 Glenn Randers-Pehrson
*
* This code is released under the libpng license.

0
scripts/libpng-config-body.in Normal file → Executable file
View File

2
scripts/libpng-config-head.in Normal file → Executable file
View File

@@ -11,7 +11,7 @@
# Modeled after libxml-config.
version=1.6.22beta03
version=1.7.0beta80
prefix=""
libdir=""
libs=""

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