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.
AVIF_STRICT_PIXI_REQUIRED
, AVIF_STRICT_CLAP_VALID
--no-strict
to disable all strict flags-r
(--raw-color
), which avoids multiplying against AVIF alpha channel before packing into non-alpha formats (JPEG)--crop
convenient alternative arg to the difficult-to-use --clap
arg--yuv
: "auto"
, which will use a source JPEG's internal YUV format instead of YUV444, if detectedavifenc/avifdec: Link AOM_LIBRARIES and use CXX if vmaf is present (1480c1)
Ensure that an AVIF has a ftyp box, and based on ftyp, has other appropriate toplevel boxes present as well
Avoid linking against libyuv if it is too old / incompatible
Always require a primary item when decoding items
Add some strictness around ipma box parsing (version/flags tuples must be unique across ipma boxes in a file)
Fix alpha grids by properly writing alpha grid metadata payload
A HandlerBox (hdlr) of type ‘pict’ must be the first box within the MetaBox (meta)
Add some typedefs for various flag decls in avif.h to self-document which flags should be used in which function arguments
When encoding single-frame images using libaom, clean up the encoder immediately after encoding the frame to cut down on resources high watermarks
Fail on reformat Identity (MC=0) with subsampling (not using YUV444)
Warn if alpha is limited range (deprecated)
Validate the first_chunk fields in the stsc box
In libaom all intra mode, set cq-level for user
Check the return values of some aom_codec_ calls and add diagnostics output (wantehchang)
Use aom_codec_set_option() if available (allows for future compat with libaom 3.0+ advanced features)
rav1e: Use cargo cinstall in local builds to ensure consistency in target output, as cbuild no longer builds directly into target/release
Tweaks to compiler flags (analyze related)
Use libyuv BT.709 & 2020 full range YuvConstants (wantehchang)
Multiply color with alpha for opaque RGB format during conversion (see #520)
switch docker to ubuntu 20.04, fix tzdata install (paskal)
Added an “Understanding maxThreads” explanatory comment block in avif.h
Minor fixes to support AVIF_CODEC_AOM_ENCODE
Various minor code/comments cleanup
CI tweaks, macOS build, and caching / speed increases (EwoutH)
Update aom.cmd: v3.1.0
Update dav1d.cmd: 0.9.0
Update libgav1: v0.16.3
Update libyuv.cmd: 2f0cbb9
-g
, --grid
)maxThreads
to avifDecoder
, add --jobs
to avifdec
avifDecoderNthImageMaxExtent()
streaming helper function to determine future readsAVIF_RESULT_INVALID_ARGUMENT
, AVIF_RESULT_NOT_IMPLEMENTED
AVIF_CODEC_AOM_DECODE
, AVIF_CODEC_AOM_ENCODE
examples/
dir (encode, decode_file, decode_memory, decode_streaming) to replace stale, not-compiled examples in README${ZLIB_INCLUDE_DIR}
(wantehchang)ZLIB_INCLUDE_DIR
in the cache (wantehchang)avifIO
reader API: allowing for parsing / image decoding without having the entire AVIF payload yet--ignore-icc
)disableGridImages
setting to avifDecoder
AVIF_ENABLE_WERROR
(ON by default)AVIF_ENABLE_COVERAGE
for basic llvm coverage report generationtests/oss-fuzz
ignoreAlpha
field to avifRGBImage (linkmauve)contrib
dir for any unofficially supported code contributions (e.g. gdk-pixbuf)-Wclobbered
dodging (volatile) and instead just disable the warning in avifpng/avifjpegavifdump
tool for aiding in AVIF debuggingavif.h
to clarify avifDecoderSetSource()
usage-r
to set YUV range (when using JPEG/PNG), --nclx
now takes 3 arguments as a resultavifDecoderNthImageTiming()
for querying frame timing without needing to decode the frameavifDecoderSetSource()
avifROStreamReadString()
avifRGBImage
structure and associated routines (BREAKING CHANGE)minQuantizerAlpha
/maxQuantizerAlpha
support in avifEncoder, avifencCMAKE_SKIP_INSTALL_RULES
avifRWDataSet()
avifImageSetMetadataExif
, avifImageSetMetadataXMP
)-DAVIF_BUILD_STATIC=1
for static lib)avifCodecVersionRav1e()
rav1e.cmd
and dav1d.cmd
to extcontainerDepth
to avifDecoder for surfacing 10bpc/12bpc flags from av1C boxes, if presentavifCodecVersions()
for getting version strings of internal AV1 codecsavifFullToLimitedY
, avifFullToLimitedUV
, avifLimitedToFullY
, avifLimitedToFullUV
, avifPrepareReformatState
avifPeekCompatibleFileType()
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.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.AVIF_CODEC_AOM
to enable/disable the usage of AOM's codec (default: on)AVIF_CODEC_DAV1D
to enable/disable the usage of dav1d's codec (default: off)codec_dav1d.c
, which provides decoding via libdav1d
.clang-format
fileavifArray*()
functions for basic dynamic arrays when parsingmoov
box parsingavifEncoder
and avifDecoder
to match avifImage
's pattern and allow for easier future parameterizationlibavif
to match new official repo naminglibavif
avifPixelFormatToString()
convenience function for debugging/printingavifenc
and avifdec
“apps” which show basic bidirectional conversion to y4mavifImageYUVToRGB()
upon reading an avif optionalext/aom
submodule to use official remoteext/aom
submodule to commit 38711e7feconvertXYZToXYY()
as they were all unnecessaryftyp
- Change major_brand
to avif
ftyp
- Reorder compatible_brands
, add MA1A
or MA1B
when appropriatemeta
box before mdat
box for streaming friendlinessAVIF_NCLX_COLOUR_PRIMARIES_P3
(convenient mirrored value)avifNclxColourPrimariesFind()
- Finds a builtin avifNclxColourPrimaries and name by a set of primariesAVIF_NCLX_COLOUR_PRIMARIES_EG432_1
appveyor.yml
(exported from Appveyor)ext/aom
to a proper submoduleavifVersion()
signatureext/aom
based off AOM commit 3563b12b with minor CMake changesAVIF_VERSION
, AVIF_VERSION_MAJOR
, AVIF_VERSION_MINOR
, AVIF_VERSION_PATCH
avifVersion()
function