Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Unreleased

0.5.1 - 2019-11-21

Changed

  • Fix expectations for Exif payload to better match normal usage

0.5.0 - 2019-11-21

Added

  • Define version and SO-version for shared library
  • Use -DBUILD_SHARED_LIBS=OFF for building a static lib
  • avifImage can now hold Exif and XMP metadata (avifImageSetMetadataExif, avifImageSetMetadataXMP)
  • Support for reading/writing Exif and XMP items
  • Now tracking idat boxes across meta boxes
  • Support for iloc construction_method 1 (idat)

Changed

  • Proper handling of the primary item box (pitm) on read
  • avifROStreamReadString() now allows string skipping by passing a NULL output buffer
  • Updated README to show Exif/XMP support

0.4.8 - 2019-11-19

Added

  • avifEncoder now has a speed setting
  • codec_aom only flushes encoder when necessary (avoids lost frame packets)
  • shared library compilation (build shared by default, use -DAVIF_BUILD_STATIC=1 for static lib)
  • make install support
  • cmake fixes/support for find_package (cryptomilk)

Changed

  • Updated libaom to more recent SHA in aom.cmd
  • Tweaked AVIF_LOCAL_AOM settings to play nice with libaom‘s usage of CMake’s option()
  • Remove all libaom special cases from libavif's CMakefiles, and have it work the same way dav1d and rav1e do
  • Minor cleanup

0.4.7 - 2019-11-11

Changed

  • Fix memory leak in rav1e codec (PR20, AurelC2G)
  • Bump rav1e version in rav1e.cmd, implement avifCodecVersionRav1e()
  • Display versions in avifenc and avifdec

0.4.6 - 2019-10-30

Changed

  • Fix rav1e build on Linux x64, and eliminate pseudo-dependency on cargo-c

0.4.5 - 2019-10-30

Changed

  • Fix rav1e codec's alpha encoding (monochrome asserts, might be unsupported still)

0.4.4 - 2019-10-30

Changed

  • Fix QP range for rav1e encodes (rav1e uses [0-255], not [0-63])
  • Distribute out and share code populating av01 config box across codecs

0.4.3 - 2019-10-28

Added

  • rav1e codec support (encode-only)
  • rav1e.cmd and dav1d.cmd to ext

Changed

  • All codecs can coexist peacefully now, and can be queried for availability or specifically chosen at encode/decode time
  • Updated README to indicate changes to CMake which facilitate codec reorg

0.4.2 - 2019-10-17

Changed

  • Populate nclx box inside of OBU in addition to AVIF container

0.4.1 - 2019-10-17

Added

  • Added containerDepth to avifDecoder for surfacing 10bpc/12bpc flags from av1C boxes, if present
  • Added avifCodecVersions() for getting version strings of internal AV1 codecs

Changed

  • Fixed warning with CHECK macro (additional semicolon)

0.4.0 - 2019-10-02

Added

  • exposed util functions: avifFullToLimitedY, avifFullToLimitedUV, avifLimitedToFullY, avifLimitedToFullUV, avifPrepareReformatState

Changed

  • Renamed ispeWidth/ispeHeight to containerWidth/containerHeight; they now can hold tkhd's width/height
  • Split avifImageYUVToRGB into faster internal functions (estimated gain: 3.5x)
  • Fixed a few memory leaks, one in the README, one in codec_dav1d (AurelC2G)

0.3.11 - 2019-09-26

Added

  • Exposed ispeWidth/ispeHeight to decoder if decoding items with an associated ispe box
  • Now parsing/tracking sample description formats to filter non-av01 type tracks
  • Allow brand ‘av01’ to be decoded

Changed

  • Fixed bug in sync sample table element sizing
  • Pass through starting sample index to codec when flushing with NthImage

0.3.10 - 2019-09-26

Added

  • stss box parsing for keyframe information
  • avifBool avifDecoderIsKeyframe(avifDecoder * decoder, uint32_t frameIndex);
  • uint32_t avifDecoderNearestKeyframe(avifDecoder * decoder, uint32_t frameIndex);
  • avifResult avifDecoderNthImage(avifDecoder * decoder, uint32_t frameIndex);
  • aviffuzz prints keyframe information as it repeatedly decodes

Changed

  • internally renamed codec function “decode” to “open”, as that's all it does
  • dav1d codec's open function no longer does an initial unnecessary feed
  • avifCodecDecodeInput now stores an array of avifSample which know if they're keyframes
  • moved codec flushing code into avifDecoderFlush() so it is available to avifDecoderNthImage
  • ptsInTimescales is now calculated independently of frame decode order

0.3.9 - 2019-09-25

Changed

  • Split avifRawData and avifStream into read-only (const) and read/write versions, updated code accordingly
  • Fix a few clang/macOS warnings

0.3.8 - 2019-09-04

Changed

  • Reverted codec_aom and libaom to use previous SHA (v1.0.0-errata1 is ancient)

0.3.7 - 2019-09-04 - DO NOT USE THIS VERSION

Added

  • Check for proper width/height/depth when decoding alpha with dav1d, matching libaom's impl

Changed

  • Updated codec_aom and libaom to use v1.0.0-errata1

0.3.6 - 2019-07-25

Added

  • Exposed tile encoding to avifEncoder

0.3.5 - 2019-07-25

Changed

  • Fixed copypasta bug in libaom encoding quantizer setup

0.3.4 - 2019-07-25

Added

  • When the AVIF container does not contain a color profile, fallback to the color OBU's nclx

0.3.3 - 2019-07-24

Added

  • new helper function avifPeekCompatibleFileType()
  • expose ioStats on avifDecoder again (currently only interesting when reading items)

Changed

  • Fixed some warnings (removed unused variables and a bad cast)
  • Add a define in dav1d layer for supporting older dav1d codecs
  • Enabled tons of warnings, and warnings-as-errors; Fixed associated fallout
  • codec_dav1d: disambiguate “needs more data” and “no more frames” in feed data pump

0.3.2 - 2019-07-23

Added

  • Added ext/aom.cmd to perform a local checkout of the aom codebase, as an alternative to a real submodule. This allows downstream projects to use libavif without recursive submodule issues.
  • AppVeyor and Travis scripts now explicitly clone libaom into ext/ as an alternative to a submodule.

Changed

  • Remove ext/aom as a submodule. If libavif users want to build aom from ext/, they must enable AVIF_BUILD_AOM and supply their own local copy.
  • Move the handful of public domain gb_math functions used by colr.c and eliminate the dependence on the gb library
  • Detect when libaom or libdav1d is being included by a parent CMake project and allow it
  • Offer libavif's include dir alongside the library in CMake (target_include_directories)

0.3.1 - 2019-07-22

Changed

  • Moved dependency on libm to avif executables, instead of directly on the library
  • Minor changes to README examples

0.3.0 - 2019-07-22

Added

  • new CMake option AVIF_CODEC_AOM to enable/disable the usage of AOM's codec (default: on)
  • new CMake option AVIF_CODEC_DAV1D to enable/disable the usage of dav1d's codec (default: off)
  • codec_dav1d.c, which provides decoding via libdav1d
  • fuzz.sh which builds with afl-clang and runs afl-fuzz
  • aviffuzz tool, used in fuzzing script
  • fuzz inputs made with colorist
  • .clang-format file
  • avifArray*() functions for basic dynamic arrays when parsing
  • moov box parsing
  • now reads ‘avis’ brands
  • Split avifDecoderRead() into components for image sequences:
    • avifDecoderSetSource()
    • avifDecoderParse()
    • avifDecoderNextImage()
    • avifImageCopy()
    • avifDecoderReset()
  • Added decoder and image timings for image sequences

Changed

  • Reorganized internal struct avifCodec to accomodate multiple codecs simultaneously (compile time; not exposed to API)
  • Fix some compiler warnings
  • Sanity check offsets and sizes in items table before using
  • Bail out of box header advertises an impossible size
  • Ran clang-format on all of src and include
  • Fix copypasta leading to a memory leak in RGB planes
  • Switched items and properties during parse to use dynamic arrays
  • Refactored codec API to not require each codec to maintain per-plane decoder instances
  • avifImage can now “not own” its planes and directly point at decoder planes to avoid copies
  • aviffuzz attempts to decode all images in source material twice (using avifDecoderReset())
  • Switch decoder->quality to explicit [minQuantizer, maxQuantizer], update assoc. constants
  • Add examples to README

0.2.0 - 2019-06-12

Added

  • Added avifEncoder and avifDecoder to match avifImage's pattern and allow for easier future parameterization

Changed

  • Renamed project in cmake to libavif to match new official repo naming
  • Updated appveyor script to use libavif
  • Updated examples and apps to use new encoder/decoder pattern

0.1.4 - 2019-06-11

Added

  • avifPixelFormatToString() convenience function for debugging/printing
  • avifenc and avifdec “apps” which show basic bidirectional conversion to y4m

Changed

  • Make calling avifImageYUVToRGB() upon reading an avif optional
  • Moved ext/aom submodule to use official remote
  • Update ext/aom submodule to commit 38711e7fe

Removed

  • Remove all calls to convertXYZToXYY() as they were all unnecessary

0.1.3 - 2019-04-23

Changed

  • ftyp - Change major_brand to avif
  • ftyp - Reorder compatible_brands, add MA1A or MA1B when appropriate
  • Write meta box before mdat box for streaming friendliness

0.1.2 - 2019-04-18

Added

  • AVIF_NCLX_COLOUR_PRIMARIES_P3 (convenient mirrored value)
  • avifNclxColourPrimariesFind() - Finds a builtin avifNclxColourPrimaries and name by a set of primaries

Changed

  • Fixed enum name copypasta for AVIF_NCLX_COLOUR_PRIMARIES_EG432_1
  • Fix UV limited ranges when doing full<->limited range conversion

0.1.1 - 2019-04-15

Added

  • Added appveyor.yml (exported from Appveyor)
  • Move ext/aom to a proper submodule
  • Update AOM to commit 3e3b9342a with minor CMake changes

Changed

  • Added static library artifact zip to Windows x64 builds (Appveyor)
  • Updated README to explain libavif's goals and a little more build info
  • Fix clang warning in avifVersion() signature

0.1.0 - 2019-04-12

Added

  • First version. Plenty of bugfixes and features await!
  • ext/aom based off AOM commit 3563b12b with minor CMake changes
  • An interest and willingness to maintain this file.
  • Constants AVIF_VERSION, AVIF_VERSION_MAJOR, AVIF_VERSION_MINOR, AVIF_VERSION_PATCH
  • avifVersion() function