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.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