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 */