Releases: AOMediaCodec/libavif
Releases · AOMediaCodec/libavif
v1.2.0
1.2.0 - 2025-02-25
Added since 1.1.1
- Turn on the gain map API. Remove the AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP CMake
flag. - Allow YCgCo_Re and YCgCo_Ro encoding/decoding and update the enum values to
the latest CICP specification. Remove the AVIF_ENABLE_EXPERIMENTAL_YCGCO_R
CMake flag. - Add the properties and numProperties fields to avifImage. They are filled by
the avifDecoder instance with the properties unrecognized by libavif. They are
written by the avifEncoder. - Add avif(Un)SignedFraction structs and avifDoubleTo(Un)SignedFraction
utility functions. - Add 'avifgainmaputil' command line tool to installed apps.
- Add avifCropRectRequiresUpsampling().
- Add experimental support for PixelInformationProperty syntax from HEIF 3rd Ed.
Amd2 behind the compilation flag AVIF_ENABLE_EXPERIMENTAL_EXTENDED_PIXI. - Add experimental Sample Transform recipe
BIT_DEPTH_EXTENSION_12B_8B_OVERLAP_4B.
Changed since 1.1.1
- avifenc: Allow large images to be encoded.
- Fix empty CMAKE_CXX_FLAGS_RELEASE if -DAVIF_CODEC_AOM=LOCAL -DAVIF_LIBYUV=OFF
is specified. #2365. - Rename AVIF_ENABLE_EXPERIMENTAL_METAV1 to AVIF_ENABLE_EXPERIMENTAL_MINI and
update the experimental reduced header feature to the latest specification
draft. Rename AVIF_HEADER_REDUCED to AVIF_HEADER_MINI. - Update the experimental Sample Transform feature behind the
AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM CMake flag to the latest
specification draft. - Ignore gain maps with unsupported metadata. Handle gain maps with
writer_version > 0 correctly. - Simplify gain map API: remove the enableParsingGainMapMetadata setting, now
gain map metadata is always parsed if present and if this feature is compiled
in. Replace enableDecodingGainMap and ignoreColorAndAlpha with a bit field to
choose image content to decode. Remove gainMapPresent: users can check if
decoder->image->gainMap != NULL instead. Remove avifGainMapMetadata and
avifGainMapMetadataDouble structs. - Write an empty HandlerBox name field instead of "libavif" (saves 7 bytes).
- Check for FileTypeBox precedence in avifParse().
- Do not write an alternative group with the same ID as an item.
- Update aom.cmd/LocalAom.cmake: v3.12.0. The new codec-specific option tune=iq
(image quality) is added in libaom v3.12.0. - Update parseAV2SequenceHeader() and avm.cmd: research-v9.0.0
- Update dav1d.cmd/dav1d_android.sh/LocalDav1d.cmake: 1.5.1
- Update libjpeg.cmd/LocalJpeg.cmake: v3.0.4
- Update libxml2.cmd/LocalLibXml2.cmake: v2.13.5
- Update libyuv.cmd: ccdf87034 (1903)
- Update svt.cmd/svt.sh/LocalSvt.cmake to v3.0.0. When available, use
EbSvtAv1EncConfiguration::lossless and ::level_of_parallelism in libavif. - Remove AVIF_ENABLE_GTEST CMake option. It's now implied by
AVIF_GTEST=LOCAL/SYSTEM. - Deprecate
avifEncoder
'sminQuantizer
,maxQuantizer
,minQuantizerAlpha
,
andmaxQuantizerAlpha
fields.quality
andqualityAlpha
should be used
instead. Deprecateavifenc
's--min
,--max
,--minalpha
and--maxalpha
flags.-q
or--qcolor
and--qalpha
should be used instead. - For dependencies, the deprecated way of setting AVIF_LOCAL_* to ON is
removed. Dependency options can now only be set to OFF/LOCAL/SYSTEM. - Change the default quality for alpha to be the same as the quality for color.
- Allow decoding subsampled images with odd Clean Aperture dimensions or offsets.
- Deprecate avifCropRectConvertCleanApertureBox() and
avifCleanApertureBoxConvertCropRect(). Replace them with
avifCropRectFromCleanApertureBox() and avifCleanApertureBoxFromCropRect(). - Write descriptive properties before transformative properties.
- Reject non-essential transformative properties.
- Treat avifenc --stdin as a regular positional file path argument.
- Update man pages based on avifenc/dec's --help message.
- android_jni: Support 16kb page size
- android_jni: Set threads to 2 instead of CPU count
- Fix overflows when dealing with alpha during YUV/RGB conversions and in
avifRGBImageAllocatePixels(). - Make avifEncoder.headerFormat a flag combination for future features.
- Rename AVIF_HEADER_FULL to AVIF_HEADER_DEFAULT. Deprecate AVIF_HEADER_FULL.
- Fix decoding image sequences with non video tracks (such as audio or subtitles).
- Fix type checking of auxiliary tracks: previously any auxiliary track was
assumed to be alpha, even if it was a different type. If the aux type is absent,
it is assumed to be alpha.
v1.1.1
1.1.1 - 2024-07-30
Changed since 1.1.0
- In avif.h, change "AVIF_API AVIF_NODISCARD" back to "AVIF_NODISCARD AVIF_API"
to fix clang-cl and MSVC compilation errors in the shared library build on
Windows. - Fix -DAVIF_GTEST=SYSTEM, #2258.
- Fix infe_type and codec_config_type wrongly read as byte-aligned fields in the
experimental feature AVIF_ENABLE_EXPERIMENTAL_METAV1. - When building aom as a local dependency, runtime CPU detection
(CONFIG_RUNTIME_CPU_DETECT
) is now alwaysON
; in 1.1.0 it had been
disabled for non-native builds. - Fix CMake config shared library leaks
#2264. - Fix clang-cl compilation.
- Update gain map metadata to current ISO 21496-1 draft.
- cmake: Only search for ASM_NASM language on x86_64 platforms.
- Fix "No known features for CXX compiler" CMake error.
- Fix aom link flags so that transitive library link flags are included when
aom is a static library
#2274. - Fix out-of-order 'dimg' grid associations
#2311. - Report files with an item used in multiple 'dimg' boxes with
AVIF_RESULT_NOT_IMPLEMENTED instead of AVIF_RESULT_INVALID_IMAGE_GRID.
v1.1.0
1.1.0 - 2024-07-11
Added
- Add experimental API for reading and writing gain maps in AVIF files.
If enabled at compile time, addgainMap
field toavifImage
,
addqualityGainMap
field toavifEncoder
, addgainMapPresent
,
enableDecodingGainMap
,enableParsingGainMapMetadata
and
ignoreColorAndAlpha
toavifDecoder
.
Utility functions for working with gain maps are also added.
Gain maps allow readers that support them to display HDR images that look
good on both HDR and SDR displays.
This feature is highly experimental. The API might change or be removed
in the future. Files created now might not decode in a future version.
This feature is off by default and must be enabled with the
AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP compilation flag. - Add experimental support for converting jpeg files with gain maps to AVIF
files with gain maps. Requires libxml2, and the AVIF_ENABLE_EXPERIMENTAL_GAIN_MAP
compilation flag.
Add a --qgain-map flag to control the gain map quality in avifenc. - Add the headerFormat member of new type avifHeaderFormat to avifEncoder.
- Add experimental API for reading and writing "mif3"-branded AVIF files
behind the compilation flag AVIF_ENABLE_EXPERIMENTAL_METAV1. - Implement avifImageScale() fallback when libyuv is not available.
- Partial import of libyuv to third_party/libyuv (new LICENSE).
- Add avifenc flag suffixes ":update" and ":u". Quality-relative,
tiling-relative and codec-specific flags can now be positional, relative to
input files. - Add experimental support for layered AVIF encoding in avifenc.
Use the --layered flag to enable layered AVIF encoding.
Layered AVIF has multiple layers, which works like frame of animated AVIF,
and layers can be rendered in progressive manner on supported viewers
(e.g. Chrome 94 or newer).
Only aom supports layered AVIF encoding at the time of writing.
Add --scaling-mode flag to set scaling mode of each layer.
This part of AV1 encoder is not as thoroughly tested, so there are higher
possibility encoder may crash when given certain configuration or input. - Add imageSequenceTrackPresent flag to the avifDecoder struct.
- avifImageScale() function was made part of the public ABI.
- Add avif_cxx.h as a C++ header with basic functionality.
- Add enum aliases AVIF_COLOR_PRIMARIES_SRGB, AVIF_COLOR_PRIMARIES_BT2100,
AVIF_COLOR_PRIMARIES_DCI_P3, AVIF_TRANSFER_CHARACTERISTICS_PQ. - Add avifResult enum entry AVIF_RESULT_INTERNAL_ERROR.
- Require libyuv by default (but it can still be disabled with
-DAVIF_LIBYUV=OFF). - Add avifdec --icc flag to override the output color profile.
- Add experimental API for reading and writing 16-bit AVIF files behind the
compilation flag AVIF_ENABLE_EXPERIMENTAL_SAMPLE_TRANSFORM. - Add AVIF_CHROMA_SAMPLE_POSITION_RESERVED to avifChromaSamplePosition enum.
Changed
- Update aom.cmd: v3.9.1
- Update avm.cmd: research-v7.0.1
- Update dav1d.cmd: 1.4.3
- Update libgav1.cmd: v0.19.0
- Update libjpeg.cmd: v3.0.3
- Update libxml2.cmd: v2.12.7
- Update libyuv.cmd: a6a2ec65
- Update mp4box.sh: v2.4.0
- Update rav1e.cmd: v0.7.1
- Update svt.cmd/svt.sh: v2.1.1
- Update zlibpng.cmd: zlib 1.3.1 and libpng 1.6.40
- AVIF sequences encoded by libavif will now also have the "avio" brand when
there is at least one track made only of AV1 keyframes. - Fix SVT-AV1 codec interface which was not setting video range at encoding.
- Any item ID being 0 in an "iref" box with version 0 or 1 is now treated as an
error instead of being ignored. - API calls now return AVIF_RESULT_OUT_OF_MEMORY instead of aborting on memory
allocation failure. - avifdec and avifenc: Change the default value of the --jobs option from 1 to
"all". - Update avifCropRectConvertCleanApertureBox() to the revised requirements in
ISO/IEC 23000-22:2019/Amd. 2:2021 Section 7.3.6.7. - AVIF files with an exif_tiff_header_offset pointing at another byte than the
first II or MM tag in the Exif metadata payload will now fail to be decoded.
Set decoder->ignoreExif to true to skip the issue and decode the image. - Fix memory errors reported in crbug.com/1501766, crbug.com/1501770, and
crbug.com/1504792 by Fudan University. - For codecs, AVIF_CODEC_* and AVIF_LOCAL_* are now merged into AVIF_CODEC_*
that can only take the values: OFF, LOCAL or SYSTEM. - For the gtest, jpeg, libsharpyuv, libxml2, libyuv and zlibpng dependencies,
AVIF_LOCAL_* is now replaced by flags AVIF_* that can take the values:
OFF, LOCAL or SYSTEM. - src/reformat.c: Allocate the threadData array directly.
- AVIF_ENABLE_WERROR is set to OFF by default.
- Fix wrong alpha plane deallocation when decoded tile pixel format does not
match reconstructed output image pixel format (b/320234262). - Fix identical chunk skipping optimization when writing animation data
(b/321189607). - Fix ID selection for artificial grid alpha item when decoding a grid of tiles
which each have an associated auxiliary alpha image item
(https://crbug.com/oss-fuzz/65657). - ext/libjpeg.cmd now pulls libjpeg-turbo instead of libjpeg and AVIF_JPEG=LOCAL
now expects the library dependency in ext/libjpeg-turbo/build.libavif. - Fix 'iloc' box parsing bugs that may have wrongly accepted, rejected or parsed
some files with rare values of offset_size, length_size, base_offset_size and
index_size. - 'infe' boxes with an item_type different from 'mime' and without a
null-terminated item_name are now considered invalid as per ISO/IEC 14496-12.
v1.0.4
[1.0.4] - 2024-02-08
Changed
AVIF_ENABLE_WERROR
is set toOFF
by default.- Fix wrong alpha plane deallocation when decoded tile pixel format does not
match reconstructed output image pixel format (b/320234262). - Fix identical chunk skipping optimization when writing animation data
(b/321189607). - Fix ID selection for artificial grid alpha item when decoding a grid of tiles
which each have an associated auxiliary alpha image item
(https://crbug.com/oss-fuzz/65657).
v1.0.3
[1.0.3] - 2023-12-03
Changed
- Rewrite the fix for memory errors reported in crbug.com/1501770.
- Fix memory errors reported in crbug.com/1504792 by Fudan
University. - src/reformat.c: Allocate the threadData array directly.
v1.0.2
[1.0.2] - 2023-11-16
Changed
- Update avifCropRectConvertCleanApertureBox() to the revised requirements in
ISO/IEC 23000-22:2019/Amd. 2:2021 Section 7.3.6.7. - Fix memory errors reported in crbug.com/1501766 and crbug.com/1501770 by
Fudan University.
v1.0.1
1.0.1 - 2023-08-29
Changed
- gdk-pixbuf: Explicitly pass link directories
- gdk-pixbuf: Fix build failure after imir.mode -> imir.axis rename
v1.0.0
1.0.0 - 2023-08-24
With the 1.0.0 release, the ABI will be more stable from now on. Please note
the allocation and initialization requirements for avifImage, avifDecoder,
avifEncoder, and avifRGBImage in the "avif/avif.h" header.
List of incompatible ABI changes in this release:
- The clli member was added to the avifImage struct.
- The repetitionCount member was added to the avifEncoder and avifDecoder
structs. - The quality and qualityAlpha members were added to the avifEncoder struct.
- Check that functions returning pointers do not return NULL before accessing
those pointers. - Check the return value of avifEncoderSetCodecSpecificOption().
- The maxThreads member was added to the avifRGBImage struct.
- Check the return value of avifRGBImageAllocatePixels(), avifRWDataRealloc(),
avifRWDataSet(), avifImageSetProfileICC(), avifImageSetMetadataExif() and
avifImageSetMetadataXMP(). - The meaning of the keyframeInterval member of avifEncoder struct has changed
slightly. When set to a value of "n",- Before: It forces a keyframe on every nth frame.
- After: Any set of "n" consecutive frame will have at least one keyframe
(every nth frame may or may not be a keyframe).
Added
- Add STATIC library target avif_internal to allow tests to access functions
from internal.h when BUILD_SHARED_LIBS is ON. - Add clli metadata read and write support
- Add repetitionCount member to avifEncoder and avifDecoder structs to specify
the number of repetitions for animated image sequences. - Add quality and qualityAlpha to avifEncoder. Note: minQuantizer,
maxQuantizer, minQuantizerAlpha, and maxQuantizerAlpha are deprecated. Code
should be updated to set quality (and qualityAlpha if applicable) and leave
minQuantizer, maxQuantizer, minQuantizerAlpha, and maxQuantizerAlpha
initialized to the default values. - The --target-size flag in avifenc was added to adapt the quality so that the
output file size is as close to the given number of bytes as possible. - Add the public API function avifImageIsOpaque() in avif.h.
- Add the public API functions avifImagePlane(), avifImagePlaneRowBytes(),
avifImagePlaneWidth(), and avifImagePlaneHeight() in avif.h. - Add experimental API for progressive AVIF encoding.
- Add API for multi-threaded YUV to RGB color conversion.
- Add experimental support for AV2 behind the compilation flag AVIF_CODEC_AVM.
AVIF_CODEC_CHOICE_AVM is now part of avifCodecChoice. - Add experimental YCgCo-R support behind the compilation flag
AVIF_ENABLE_EXPERIMENTAL_YCGCO_R. - Allow lossless 4:0:0 on grayscale input.
- Add avifenc --no-overwrite flag to avoid overwriting output file.
- Add avifenc --clli flag to set clli.
- Add support for all transfer functions when using libsharpyuv.
Changed
- Enable the libaom AV1E_SET_SKIP_POSTPROC_FILTERING codec control by default.
- Use the constant rate factor (CRF) instead of the constant quantization
parameter (CQP) rate control mode with the SVT-AV1 encoder. - Exif and XMP metadata is exported to PNG and JPEG files by default,
except XMP payloads larger than 65502 bytes in JPEG. - The --grid flag in avifenc can be used for images that are not evenly divided
into cells. - Apps must be built with libpng version 1.6.32 or above.
- Change the encoder to write the boxes within the "stbl" box in the order of
stsd, stts, stsc, stsz, stco, stss. - avifImageCopy() no longer accepts source U and V channels to be NULL for
non-4:0:0 input if Y is not NULL and if AVIF_PLANES_YUV is specified. - The default values of the maxQuantizer and maxQuantizerAlpha members of
avifEncoder changed from AVIF_QUANTIZER_LOSSLESS (0) to
AVIF_QUANTIZER_WORST_QUALITY (63). The behavior changed if minQuantizer and
maxQuantizer are left initialized to the default values. Code should be
updated to set the quality member. Similarly for the alpha quantizers and
qualityAlpha. - avifImageRGBToYUV() and avifImageYUVToRGB() handle avifImage bit depths 8, 10,
12 and now also 16. Files read by apps/shared/ can output 16-bit avifImage
instances. - Update aom.cmd: v3.6.1
- Update dav1d.cmd: 1.2.1
- Update libsharpyuv: 0.4.0
- Update rav1e.cmd: v0.6.6
- Update svt.cmd/svt.sh: v1.6.0
- Update zlibpng.cmd: zlib 1.2.13 and libpng 1.6.39
- avifImageCreate(), avifImageCreateEmpty(), avifEncoderCreate() and other
internal functions now return NULL if a memory allocation failed. - avifEncoderSetCodecSpecificOption() now returns avifResult instead of void to
report memory allocation failures. - At decoding, avifIOStats now returns the same values as at encoding.
- avifRGBImageAllocatePixels(), avifRWDataRealloc(), avifRWDataSet(),
avifImageSetProfileICC(), avifImageSetMetadataExif() and
avifImageSetMetadataXMP() now return avifResult instead of void to report
memory allocation failures. - avifReadImage(), avifJPEGRead() and avifPNGRead() now remove the trailing zero
byte from read XMP chunks, if any. See avifImageFixXMP(). - Force keyframe for alpha if color is a keyframe.
- Write primaries and transfer characteritics info in decoded PNG.
- Add support for reading PNG gAMA, cHRM and sRGB chunks.
- The 'mode' member of the avifImageMirror struct was renamed 'axis'.
- Change the type of the 'depth' parameter from int to uint32_t in
avifFullToLimitedY(), avifFullToLimitedUV(), avifLimitedToFullY(), and
avifLimitedToFullUV().
v0.11.1
v0.11.1-rc1
v0.11.1-rc1