Merge tag 'v3.14.0' into main branch
Release v3.14.0 Pinkie Pie
2026-05-12 v3.14.0
This release is ABI compatible with the last release.
This release includes significant compression efficiency and
perceptual quality improvements for layered image encoding, in
addition to bug fixes.
The `build` directory in the source tree was removed and the original
build/cmake directory was moved up one level. If you use the CMake
toolchain files in the original build/cmake/toolchains directory,
they are now in the cmake/toolchains directory.
The unsupported aom_img_fmt_t enum constants AOM_IMG_FMT_AOMYV12 and
AOM_IMG_FMT_AOMI420 are deprecated and will be removed in a future
release. Do not use them.
The new codec controls AV1E_SET_EXTERNAL_RATE_CONTROL (including the
new aom_rc_funcs_t struct and the new "aom/aom_ext_ratectrl.h" and
"aom/aom_tpl.h" headers) and AV1E_GET_GOP_INFO (including the new
aom_gop_info_t struct) have the experimental API status and are NOT
part of the stable API. Applications that need the backward
compatibility of the stable API must not use
AV1E_SET_EXTERNAL_RATE_CONTROL and AV1E_GET_GOP_INFO.
- New Features
* Tuning modes AOM_TUNE_IQ and AOM_TUNE_SSIMULACRA2 now work with
inter-frame encoding modes (good-quality and realtime), enabling
efficient layered image encoding.
* Variance Boost (deltaq-mode 6) support has been extended to
include good-quality and realtime modes.
* New value 2 for use_fixed_qp_offsets: disallow the application of
per-frame QP offsets, enabling full control of each frame's QP, by
adjusting rc_cfg.cq_level between each encoded frame.
* Low complexity decode mode (the encoder optimizations that produce
encoded bitstreams that can be decoded at low computational
complexity) now supports good-quality encoding (speed 1 to 3) for
not only vertical videos (608p to 1080p) but also horizontal
videos (720p to 1080p).
* Realtime encoding with non-zero lookahead is supported, for
!REALTME_ONLY_CONFIG.
* New AOM_EFLAG_FREEZE_INTERNAL_STATE flag for aom_codec_encode() to
encode a frame without updating encoder state such as reference
buffers, CDF tables, and rate control state. Useful for
speculative encoding.
* New aom_matrix_coefficients_t enum constants:
- AOM_CICP_MC_IPT_C2 (15): IPT-C2
- AOM_CICP_MC_YCGCO_RE (16): YCgCo-Re
- AOM_CICP_MC_YCGCO_RO (17): YCgCo-Ro
* New aom_metadata_insert_flags_t enum constants for adding
layer-specific metadata OBUs:
- AOM_MIF_NON_KEY_FRAME_LAYER_SPECIFIC: Adds layer-specific
metadata if it's not a keyframe
- AOM_MIF_KEY_FRAME_LAYER_SPECIFIC: Adds layer-specific metadata
only if it's a keyframe
- AOM_MIF_ANY_FRAME_LAYER_SPECIFIC: Adds layer-specific metadata
to any type of frame
* Experimental: New codec control AV1E_SET_EXTERNAL_RATE_CONTROL to
enable an external rate control library. Not part of the stable
API.
* Experimental: New codec control AV1E_GET_GOP_INFO to get the GOP
structure from the encoder. Not part of the stable API.
* New codec control AOME_SET_VALIDATE_HBD_INPUT to validate high
bitdepth (HBD) input and ensure that every pixel is within the
valid range. The corresponding option for aom_codec_set_option()
is "validate-hbd-input".
* New codec control AOMD_SET_FRAME_SIZE_LIMIT to set the maximum
frame size for a decoder
- Compression Efficiency Improvements
* When encoding 2-layered images with AOM_TUNE_IQ vs. AOM_TUNE_SSIM:
- Good-quality mode: up to 15% gains at similar SSIMULACRA 2
scores.
- Realtime mode: up to 30% gains at similar SSIMULACRA 2 scores.
* Enable screen detection mode 2 (anti-aliased text and graphics
aware) in all-intra mode.
* Some minor quantization matrix formula and delta chroma q tweaks
for the AOM_TUNE_SSIMULACRA2 tuning mode, with up to 0.2%
SSIMULACRA 2 score efficiency gains.
* Re-tune and re-work encoder features, achieving coding gains at
each speed level and better coding efficiency vs complexity
tradeoff (an estimated 20-30% encoder time reduction with about
1-5% vmaf gains).
* RTC screen: improvements to quality and scroll detection for high
resolutions.
- Perceptual Quality Improvements
* AOM_TUNE_IQ improves the visual quality of layered image encoding
compared to AOM_TUNE_SSIM.
* Adaptive sharpness: tweak loop filter sharpness threshold to
improve visual quality at QPs 29 and 30.
* Improve encoder algorithms in loop restoration, CDEF, temporal
filter and rate control, delivering better visual quality.
- Speedups
* Make Adaptive CDEF more decoder friendly by limiting CDEF
application to only regions where high filter strengths are
needed.
* Encoder complexity is reduced significantly, especially at speed
1 to 3.
* Further AArch64 SIMD optimization of filtering algorithms,
particularly using Armv8.6 Neon I8MM.
* Additional tweaks to AArch64 Neon paths for quantization, SAD,
subpel variance and intra-predictors.
- Bug Fixes
* Commit 4cc0867f: fix multithreading crashes when loop restoration
filtering is used by the encoder.
* Commit 74aaa1ef: fix AOM_SCALING_MODE crashes when compound mask
prediction modes are used by the encoder.
* b:502030569: Avoid assertion failure in `read_uncompressed_header`
triggered by fuzzed input
* b:503197490: Fix an integer overflow in target bits calculation
* b:503691210: Avoid reference to uninitialized member variables for
multi workers.
* b:504317456: Handle buffer pointer in LAP mode to avoid overflow
* b:502133197: Avoid a bitread assertion failure in
get_av1config_from_obu()
Bug: 510033563
Change-Id: Ia226ddeec21bb9d68ae29bbab8da36712ffc9df7
diff --git a/.mailmap b/.mailmap
index 543d40b..267eb29 100644
--- a/.mailmap
+++ b/.mailmap
@@ -48,6 +48,7 @@
Johann Koenig <johannkoenig@google.com> <johannkoenig@chromium.org>
Johann Koenig <johannkoenig@google.com> <johannkoenig@dhcp-172-19-7-52.mtv.corp.google.com>
John Koleszar <jkoleszar@google.com>
+Jordan Brown <rop@google.com>
Joshua Litt <joshualitt@google.com> <joshualitt@chromium.org>
Kyle Siefring <siekyleb@amazon.com>
Kyle Siefring <siekyleb@amazon.com> <kylesiefring@gmail.com>
diff --git a/AUTHORS b/AUTHORS
index 72dd76c..7a56c47 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -11,6 +11,7 @@
Alexander Bokov <alexanderbokov@google.com>
Alexander Voronov <avoronov@graphics.cs.msu.ru>
Aℓex Converse <aconverse@google.com>
+Alex Davicenko <alex.davicenko@arm.com>
Alex Faxa <alexanderfaxa@google.com>
Alexis Ballier <aballier@gentoo.org>
Alex Peterson <petersonab@google.com>
@@ -27,6 +28,7 @@
Aniket Wanare <Aniket.wanare@ittiam.com>
Ankur Saxena <ankurs@nvidia.com>
Anupam Pandey <anupam.pandey@ittiam.com>
+Anusuya <anusuya.k@ittiam.com>
Apurve Kumar Pandey <apurve.pandey@ittiam.com>
Aras Pranckevicius <aras@nesnausk.org>
Arild Fuldseth <arilfuld@cisco.com>
@@ -36,6 +38,8 @@
Athulya Raj Raji Mohini <AthulyaRaj.RajiMohini@arm.com>
Attila Nagy <attilanagy@google.com>
Balaji Anandapadmanaban <balaji.anandapadmanaban@arm.com>
+Bernhard M. Wiedemann <bwiedemann@suse.de>
+Bhaskarabhatla V S K S Yaswanth Sastry <yaswanth.sastry@ittiam.com>
bmarques1995 <testebash@outlook.com>
Bohan Li <bohanli@google.com>
Brennan Shacklett <bshacklett@mozilla.com>
@@ -60,6 +64,7 @@
Daniel Kang <ddkang@google.com>
Daniel Max Valenzuela <daniel.vt@samsung.com>
Danil Chapovalov <danilchap@google.com>
+Darryl Pogue <darryl@dpogue.ca>
David Major <dmajor@mozilla.com>
David Michael Barr <b@rr-dav.id.au>
David Turner <david.turner@argondesign.com>
@@ -78,6 +83,7 @@
Elliott Karpilovsky <elliottk@google.com>
Emil Keyder <emilkeyder@google.com>
Erik Niemeyer <erik.a.niemeyer@intel.com>
+Erik Språng <sprang@google.com>
Fabio Pedretti <fabio.ped@libero.it>
Fangwen Fu <fangwen.fu@intel.com>
Fergus Simpson <afergs@google.com>
@@ -145,6 +151,7 @@
John Stark <jhnstrk@gmail.com>
Jonathan Matthews <jonathan.matthews@argondesign.com>
Jonathan Wright <jonathan.wright@arm.com>
+Jordan Brown <rop@google.com>
Joshua Bleecher Snyder <josh@treelinelabs.com>
Joshua Litt <joshualitt@google.com>
Josh Verdejo <joverdejo@google.com>
@@ -172,6 +179,7 @@
Linfeng Zhang <linfengz@google.com>
Link.Meng <monthev@gmail.com>
Lin Zheng <linzhen@google.com>
+Li Zhang <li.zhang2@arm.com>
Logan Goldberg <logangw@google.com>
Lokeshwar Reddy B <lokeshwar.reddy@ittiam.com>
Lou Quillio <louquillio@google.com>
@@ -239,6 +247,7 @@
Rafael Ávila de Espíndola <rafael.espindola@gmail.com>
Rafaël Carré <funman@videolan.org>
Ralph Giles <giles@xiph.org>
+Ram Mohan M <ram.mohan@ittiam.com>
Ranjit Kumar Tulabandu <ranjit.tulabandu@ittiam.com>
Ravi Chaudhary <ravi.chaudhary@ittiam.com>
Remya Prakasan <remya.prakasan@ittiam.com>
@@ -247,6 +256,7 @@
Robert-André Mauchin <zebob.m@gmail.com>
Robert Chin <robertchin@google.com>
Roger Zhou <youzhou@microsoft.com>
+Rohan Baid <rohan.baid@ittiam.com>
Rohit Athavale <rathaval@xilinx.com>
Ronald S. Bultje <rsbultje@gmail.com>
Rostislav Pehlivanov <rpehlivanov@mozilla.com>
@@ -304,6 +314,7 @@
Tom Anderson <thomasanderson@google.com>
Tom Finegan <tomfinegan@google.com>
Tristan Matthews <tmatth@videolan.org>
+ttwu <ttwu@andestech.com>
Umang Saini <umang.saini@ittiam.com>
Urvang Joshi <urvang@google.com>
Venkat Sanampudi <sanampudi.venkatarao@ittiam.com>
diff --git a/CHANGELOG b/CHANGELOG
index ca1cfb1..732e8fe 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,15 +1,27 @@
-yyyy-mm-dd next version
+2026-05-12 v3.14.0
This release is ABI compatible with the last release.
- This release includes significant compression efficiency and perceptual
- quality improvements for layered image encoding, in addition to bug
- fixes.
+ This release includes significant compression efficiency and
+ perceptual quality improvements for layered image encoding, in
+ addition to bug fixes.
The `build` directory in the source tree was removed and the original
build/cmake directory was moved up one level. If you use the CMake
toolchain files in the original build/cmake/toolchains directory,
they are now in the cmake/toolchains directory.
+ The unsupported aom_img_fmt_t enum constants AOM_IMG_FMT_AOMYV12 and
+ AOM_IMG_FMT_AOMI420 are deprecated and will be removed in a future
+ release. Do not use them.
+
+ The new codec controls AV1E_SET_EXTERNAL_RATE_CONTROL (including the
+ new aom_rc_funcs_t struct and the new "aom/aom_ext_ratectrl.h" and
+ "aom/aom_tpl.h" headers) and AV1E_GET_GOP_INFO (including the new
+ aom_gop_info_t struct) have the experimental API status and are NOT
+ part of the stable API. Applications that need the backward
+ compatibility of the stable API must not use
+ AV1E_SET_EXTERNAL_RATE_CONTROL and AV1E_GET_GOP_INFO.
+
- New Features
* Tuning modes AOM_TUNE_IQ and AOM_TUNE_SSIMULACRA2 now work with
inter-frame encoding modes (good-quality and realtime), enabling
@@ -19,32 +31,90 @@
* New value 2 for use_fixed_qp_offsets: disallow the application of
per-frame QP offsets, enabling full control of each frame's QP, by
adjusting rc_cfg.cq_level between each encoded frame.
+ * Low complexity decode mode (the encoder optimizations that produce
+ encoded bitstreams that can be decoded at low computational
+ complexity) now supports good-quality encoding (speed 1 to 3) for
+ not only vertical videos (608p to 1080p) but also horizontal
+ videos (720p to 1080p).
+ * Realtime encoding with non-zero lookahead is supported, for
+ !REALTME_ONLY_CONFIG.
+ * New AOM_EFLAG_FREEZE_INTERNAL_STATE flag for aom_codec_encode() to
+ encode a frame without updating encoder state such as reference
+ buffers, CDF tables, and rate control state. Useful for
+ speculative encoding.
+ * New aom_matrix_coefficients_t enum constants:
+ - AOM_CICP_MC_IPT_C2 (15): IPT-C2
+ - AOM_CICP_MC_YCGCO_RE (16): YCgCo-Re
+ - AOM_CICP_MC_YCGCO_RO (17): YCgCo-Ro
+ * New aom_metadata_insert_flags_t enum constants for adding
+ layer-specific metadata OBUs:
+ - AOM_MIF_NON_KEY_FRAME_LAYER_SPECIFIC: Adds layer-specific
+ metadata if it's not a keyframe
+ - AOM_MIF_KEY_FRAME_LAYER_SPECIFIC: Adds layer-specific metadata
+ only if it's a keyframe
+ - AOM_MIF_ANY_FRAME_LAYER_SPECIFIC: Adds layer-specific metadata
+ to any type of frame
+ * Experimental: New codec control AV1E_SET_EXTERNAL_RATE_CONTROL to
+ enable an external rate control library. Not part of the stable
+ API.
+ * Experimental: New codec control AV1E_GET_GOP_INFO to get the GOP
+ structure from the encoder. Not part of the stable API.
+ * New codec control AOME_SET_VALIDATE_HBD_INPUT to validate high
+ bitdepth (HBD) input and ensure that every pixel is within the
+ valid range. The corresponding option for aom_codec_set_option()
+ is "validate-hbd-input".
+ * New codec control AOMD_SET_FRAME_SIZE_LIMIT to set the maximum
+ frame size for a decoder
- Compression Efficiency Improvements
* When encoding 2-layered images with AOM_TUNE_IQ vs. AOM_TUNE_SSIM:
- - Good-quality mode: up to 15% gains at similar SSIMULACRA 2 scores.
+ - Good-quality mode: up to 15% gains at similar SSIMULACRA 2
+ scores.
- Realtime mode: up to 30% gains at similar SSIMULACRA 2 scores.
- * Enable screen detection mode 2 (anti-aliased text and graphics aware) in
- all-intra mode.
- * Some minor quantization matrix formula and delta chroma q tweaks for the
- AOM_TUNE_SSIMULACRA2 tuning mode, with up to 0.2% SSIMULACRA 2 score
- efficiency gains.
+ * Enable screen detection mode 2 (anti-aliased text and graphics
+ aware) in all-intra mode.
+ * Some minor quantization matrix formula and delta chroma q tweaks
+ for the AOM_TUNE_SSIMULACRA2 tuning mode, with up to 0.2%
+ SSIMULACRA 2 score efficiency gains.
+ * Re-tune and re-work encoder features, achieving coding gains at
+ each speed level and better coding efficiency vs complexity
+ tradeoff (an estimated 20-30% encoder time reduction with about
+ 1-5% vmaf gains).
+ * RTC screen: improvements to quality and scroll detection for high
+ resolutions.
- Perceptual Quality Improvements
* AOM_TUNE_IQ improves the visual quality of layered image encoding
compared to AOM_TUNE_SSIM.
- * Adaptive sharpness: tweak loop filter sharpness threshold to improve
- visual quality at QPs 29 and 30.
+ * Adaptive sharpness: tweak loop filter sharpness threshold to
+ improve visual quality at QPs 29 and 30.
+ * Improve encoder algorithms in loop restoration, CDEF, temporal
+ filter and rate control, delivering better visual quality.
- Speedups
- * Make Adaptive CDEF more decoder friendly by limiting CDEF application to
- only regions where high filter strengths are needed.
+ * Make Adaptive CDEF more decoder friendly by limiting CDEF
+ application to only regions where high filter strengths are
+ needed.
+ * Encoder complexity is reduced significantly, especially at speed
+ 1 to 3.
+ * Further AArch64 SIMD optimization of filtering algorithms,
+ particularly using Armv8.6 Neon I8MM.
+ * Additional tweaks to AArch64 Neon paths for quantization, SAD,
+ subpel variance and intra-predictors.
- Bug Fixes
* Commit 4cc0867f: fix multithreading crashes when loop restoration
filtering is used by the encoder.
* Commit 74aaa1ef: fix AOM_SCALING_MODE crashes when compound mask
prediction modes are used by the encoder.
+ * b:502030569: Avoid assertion failure in `read_uncompressed_header`
+ triggered by fuzzed input
+ * b:503197490: Fix an integer overflow in target bits calculation
+ * b:503691210: Avoid reference to uninitialized member variables for
+ multi workers.
+ * b:504317456: Handle buffer pointer in LAP mode to avoid overflow
+ * b:502133197: Avoid a bitread assertion failure in
+ get_av1config_from_obu()
2026-04-02 v3.13.3
This release includes several bug fixes. This release is ABI
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8283f7e..2bd2f18 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -23,7 +23,7 @@
# VERSION is the release version of the library. It should be updated at the
# same time as the LT_* variables.
-project(AOM LANGUAGES C CXX VERSION 3.13.3)
+project(AOM LANGUAGES C CXX VERSION 3.14.0)
# GENERATED source property global visibility.
if(POLICY CMP0118)
@@ -58,9 +58,9 @@
# We set SO_FILE_VERSION = [c-a].a.r
#
# The VERSION number in project() should be updated when these variables are.
-set(LT_CURRENT 16)
-set(LT_REVISION 3)
-set(LT_AGE 13)
+set(LT_CURRENT 17)
+set(LT_REVISION 0)
+set(LT_AGE 14)
math(EXPR SO_VERSION "${LT_CURRENT} - ${LT_AGE}")
set(SO_FILE_VERSION "${SO_VERSION}.${LT_AGE}.${LT_REVISION}")
unset(LT_CURRENT)
diff --git a/aom/aom_ext_ratectrl.h b/aom/aom_ext_ratectrl.h
index 7059693..12093e1 100644
--- a/aom/aom_ext_ratectrl.h
+++ b/aom/aom_ext_ratectrl.h
@@ -12,6 +12,7 @@
/*!\file
* \brief Defines structs and callbacks needed for external rate control.
*
+ * \attention Experimental. Not part of the stable API.
*/
#ifndef AOM_AOM_AOM_EXT_RATECTRL_H_
#define AOM_AOM_AOM_EXT_RATECTRL_H_
diff --git a/aom/aom_tpl.h b/aom/aom_tpl.h
index 5615b2f..f2d5e8f 100644
--- a/aom/aom_tpl.h
+++ b/aom/aom_tpl.h
@@ -9,6 +9,12 @@
* PATENTS file, you can obtain it at www.aomedia.org/license/patent.
*/
+/*!\file
+ * \brief Defines structs related to temporal dependency model stats, needed for
+ * external rate control.
+ *
+ * \attention Experimental. Not part of the stable API.
+ */
#ifndef AOM_AOM_AOM_TPL_H_
#define AOM_AOM_AOM_TPL_H_
diff --git a/aom/aomcx.h b/aom/aomcx.h
index caed454..0e33a39 100644
--- a/aom/aomcx.h
+++ b/aom/aomcx.h
@@ -1626,12 +1626,16 @@
/*!\brief Codec control function to enable external rate control library.
*
* args: a pointer to aom_rc_funcs_t that contains implementation of callbacks
+ *
+ * \attention Experimental. Not part of the stable API.
*/
AV1E_SET_EXTERNAL_RATE_CONTROL = 173,
/*!\brief Codec control function to get GOP structure from the encoder.
*
* args: a pointer to aom_gop_info_t
+ *
+ * \attention Experimental. Not part of the stable API.
*/
AV1E_GET_GOP_INFO = 174,
@@ -1900,6 +1904,8 @@
/*!\brief The GOP structure information determined by the encoder.
* 250 is MAX_STATIC_GF_GROUP_LENGTH defined in av1/firstpass.h.
* This is a subset of GF_GROUP. More fields can be added if needed.
+ *
+ * \attention Experimental. Not part of the stable API.
*/
typedef struct aom_gop_info {
int gop_size; /**< The number of frames of this GOP */