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.
0.5.3 - 2019-12-03
Added
- Honor CMake's builtin
CMAKE_SKIP_INSTALL_RULES
Changed
- avifenc - Removed accidental double-delete of avifImage when failing to read a y4m file input
- Round dimensions down when decoding subsampled YUV with odd dimensions
0.5.2 - 2019-11-23
Changed
- Fix incorrect free in 0-case for
avifRWDataSet()
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
fileavifArray*()
functions for basic dynamic arrays when parsingmoov
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/printingavifenc
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