Skip to content

v0.6.0

Compare
Choose a tag to compare
@randy408 randy408 released this 13 Jul 16:31
· 270 commits to master since this release
v0.6.0

This release is backward compatible.

New

  • Progressive image decode support, added new functions:

    • spng_decode_scanline() - Decodes a single scanline
    • spng_decode_row() - Decodes and deinterlaces a scanline
    • spng_get_row_info() - Get current scanline, row information
  • Added support for reading tEXt, iTXt, zTXt and iCCP color profile chunks, all standard chunks are supported in this release.

  • Added support for building with miniz, spng.c/h and miniz.c/h can be used together without additional dependencies

  • Added output format SPNG_FMT_PNG, it represents the PNG's format in host-endian (thanks to Matthew Stadelman for initial implementation)

  • Added output format SPNG_FMT_RAW, it represents the PNG's format in big-endian (Matthew Stadelman)

  • Added output format SPNG_FMT_RGB8, conversion is supported from any color type and bit depth

  • Added grayscale output formats SPNG_FMT_G8, SPNG_FMT_GA8 and SPNG_FMT_GA16, in this release conversion is only supported from a subset of grayscale and bit depth combinations, see documentation for details

  • Added support for decoding from a FILE* with spng_set_png_file()

  • Added SPNG_CTX_IGNORE_ADLER32 context flag to ignore checksums in DEFLATE streams

  • Added enums for filter types and interlace method

  • Added Meson option use_miniz and compiler option SPNG_USE_MINIZ for building with miniz

  • Added Meson option benchmarks to run benchmarks provided by spngt, this requires Git LFS.

  • Added Meson option static_zlib to link the static version of zlib

  • Multiversioned defilter_up() function (enabled for GCC + glibc)

Changes

  • spng_decode_image() takes a void* for the output buffer (was unsigned char*)

  • Reaching chunk size- or cache limits is now handled as an out-of-memory error

  • Out-of-range palette indices are handled as black opaque pixels when decoding,
    this matches libpng's default behavior

  • PNG image row length and output row length is now limited to 2^32-1 (UINT32_MAX)

Bugfixes

  • Fixed an IDAT streaming bug (Mathieu Mallet)
  • Fixed CMake install issues
  • Fixed bKGD handling and a testsuite issue on big-endian
  • Fixed setting of PLTE presence bit (Matthew Stadelman)
  • Added missing error condition for indexed images without a palette
  • Fixed zlib constness warnings
  • Fixed ordering checks for tRNS, hIST and bKGD chunks

Known issues

  • Decoding to SPNG_FMT_G8, SPNG_FMT_GA8 and SPNG_FMT_GA16 output formats is not supported for all PNG color type and bit depth combinations, see documentation for details
  • Gamma correction is not implemented for SPNG_FMT_PNG, SPNG_FMT_G8, SPNG_FMT_GA8 and SPNG_FMT_GA16
  • spng_crc_set_action() is partially implemented, SPNG_CRC_DISCARD has no effect