
Libpng 1.7.0alpha10 - February 7, 2013

This is not intended to be a public release.  It will be replaced
within a few weeks by a public version or by another test version.

Files available for download:

Source files with LF line endings (for Unix/Linux) and with a
"configure" script

   1.7.0alpha10.tar.xz (LZMA-compressed, recommended)
   1.7.0alpha10.tar.gz

Source files with CRLF line endings (for Windows), without the
"configure" script

   lp170a10.7z  (LZMA-compressed, recommended)
   lp170a10.zip

Other information:

   1.7.0alpha10-README.txt
   1.7.0alpha10-LICENSE.txt

Changes since the last public release (1.6.0):

Version 1.7.0alpha01 [December 15, 2012]
  Started 1.7.0 branch from libpng-1.6.0beta33.
  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 slightly
    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.
  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.
  Cleaned up USER_LIMITS feature, removing members from png_struct when not
    required.
  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.
  Fixed cases of unquoted DESTDIR in Makefile.am.
  Rebuilt Makefile.in, configure, etc., with autoconf-2.69 and automake-1.12.5.

Version 1.7.0alpha02 [December 17, 2012]
  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.
  Removed some duplicated lines from contrib/tools/scale.c and png.c.
  Changed some instances of png_warning() to png_app_error().
  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

Version 1.7.0alpha03 [December 19, 2012]
  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.
  Documented new PNG_ABORT behavior in the manual and commentary in pngerror.c
  Cleaned up whitespace in the synopsis portion of the manpage "libpng.3"
  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.
  Disassembled the version number in scripts/options.awk (necessary for
    building on SunOs).

Version 1.7.0alpha04 [December 23, 2012]
  Added scripts/makefile.msys contributed by Christopher M. Wheeler
  Made default Zlib compression settings be configurable. This adds #defines to
    pnglibconf.h to control the defaults.
  Fixed Windows build issues, enabled ARM compilation. Various warnings issued
    by earlier versions of GCC fixed for Cygwin and Min/GW (which both use old
    GCCs.) ARM support is enabled by default in zlib.props (unsupported by
    Microsoft) and ARM compilation is made possible by deleting the check for
    x86. The test programs cannot be run because they are not signed.

Version 1.7.0alpha05 [December 24, 2012]
  Discontinued distributing libpng-1.x.x.tar.bz2.
  Discontinued distributing libpng-1.7.0-1.6.0-diff.txt and similar.

Version 1.7.0alpha06 [January 1, 2013]
  Fixed 'make distcheck' on SUN OS - libpng.so was not being removed

Version 1.7.0alpha07 [January 10, 2013]
  Fixed conceivable but difficult to repro overflow. Also added two test
    programs to generate and test a PNG which should have the problem.

Version 1.7.0alpha08 [January 17, 2013]
  Corrected previous attempt at overflow detection in png_set_unknown_chunks().

Version 1.7.0alpha09 [January 21, 2013]
  Pulled changes to multi-chunk handling from libpng-1.6.0beta40.

Version 1.7.0alpha10 [February 7, 2013]
  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.
  Added png_get_palette_max() function.
  Changed png_size_t to size_t throughout headers, make sRGB check numbers
    consistent.
  Fixed ARM support (Mans Rullgard).
  Removed stray out-of-order #endif and #ifdef (Mans Rullgard).
  Ported libpng 1.5 options.awk/dfn file handling to 1.7, fixed one bug.
  Rebuilt Makefile.in, configure, etc., with autoconf-2.69 and automake-1.13.
  Minor fixes to assembler changes, verified with a dummy .S file
  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.

  ===========================================================================
                       NOTICE November 17, 2012:
     The location of the git repository at SourceForge has changed.
               Visit http://libpng.sf.net/ for details.
  ===========================================================================

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

Glenn R-P
