
Libpng 1.7.0beta05 - March 4, 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.0beta05.tar.xz (LZMA-compressed, recommended)
   1.7.0beta05.tar.gz

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

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

Other information:

   1.7.0beta05-README.txt
   1.7.0beta05-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 5, 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.

Version 1.7.0beta01 [February 15, 2013]
  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.
  Fixed previous support for Z_PREFIX in configure builds, corrected
    sCAL APIs; some of these use floating point arithmetic so 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.
  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
  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.
  Accept "," as a separator in pnglibconf.dfa and allow for
    continuation lines. This adds to the syntax of "option" and "chunk" lines,
    allowing the elements to be separated by a "," at the end of an element and
    interpreting a "," at end of line as a continuation - so the following line
    is read.  The new syntax is optional and solely provided for readability.
  Enclosed the new png_get_palette_max in #ifdef PNG_GET_PALETTE_MAX_SUPPORTED
    block, and revised pnglibconf.h and pnglibconf.h.prebuilt accordingly.

Version 1.7.0beta02 [February 18, 2013]
  Fixed a race condition in the creation of the build 'scripts' directory
    while building with a parallel make.
  Use approved/supported Android method to check for NEON, use Linux/POSIX
    1003.1 API to check /proc/self/auxv avoiding buffer allocation and other
    library calls (ported from libpng15).
  Use parentheses more consistently in "#if defined(MACRO)" tests.
  Folded long lines.

Version 1.7.0beta03 [February 22, 2013]
  Reenabled code to allow zero length PLTE chunks for MNG.
  Fixed ALIGNED_MEMORY support.
  Allow run-time ARM NEON checking to be disabled. A new configure option:
    --enable-arm-neon=always will stop the run-time checks. New checks
    within arm/arm_init.c will cause the code not to be compiled unless
    __ARM_NEON__ is set. This should make it fail safe (if someone asks
    for it on then the build will fail if it can't be done.)
  Updated the INSTALL document.

Version 1.7.0beta04 [February 27, 2013]
  Revised INSTALL to recommend using CPPFLAGS instead of INCLUDES.
  Revised scripts/makefile.freebsd to respect ZLIBLIB and ZLIBINC.
  Revised scripts/dfn.awk to work with the buggy MSYS awk that has trouble
    with CRLF line endings.

Version 1.7.0beta05 [March 4, 2013]
  Avoid a possible memory leak in contrib/gregbook/readpng.c
  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.
  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.

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
