2022-06-17 v3.4.0
  This release includes compression efficiency and perceptual quality
  improvements, speedup and memory optimizations, and some new features.
  There are no ABI or API breaking changes in this release.

  - New Features
    * New --dist-metric flag with "qm-psnr" value to use quantization
      matrices in the distortion computation for RD search. The default
      value is "psnr".
    * New command line option "--auto-intra-tools-off=1" to make
      all-intra encoding faster for high bit rate under
      "--deltaq-mode=3" mode.
    * New rate control library aom_av1_rc for real-time hardware
      encoders. Supports CBR for both one spatial layer and SVC.
    * New image format AOM_IMG_FMT_NV12 can be used as input to the
      encoder. The presence of AOM_IMG_FMT_NV12 can be detected at
      compile time by checking if the macro AOM_HAVE_IMG_FMT_NV12 is
      defined.
    * New codec controls for the encoder:
      o AV1E_SET_AUTO_INTRA_TOOLS_OFF. Only in effect if
        --deltaq-mode=3.
      o AV1E_SET_RTC_EXTERNAL_RC
      o AV1E_SET_FP_MT. Only supported if libaom is built with
        -DCONFIG_FRAME_PARALLEL_ENCODE=1.
      o AV1E_GET_TARGET_SEQ_LEVEL_IDX
    * New key-value pairs for the key-value API:
      o --auto-intra-tools-off=0 (default) or 1. Only in effect if
        --deltaq-mode=3.
      o --strict-level-conformance=0 (default) or 1
      o --fp-mt=0 (default) or 1. Only supported if libaom is built
        with -DCONFIG_FRAME_PARALLEL_ENCODE=1.
    * New aomenc options (not supported by the key-value API):
      o --nv12

  - Compression Efficiency Improvements
    * Correctly calculate SSE for high bitdepth in skip mode, 0.2% to
      0.6% coding gain.
    * RTC at speed 9/10: BD-rate gain of ~4/5%
    * RTC screen content coding: many improvements for real-time screen
      at speed 10 (quality, speedup, and rate control), up to high
      resolutions (1080p).
    * RTC-SVC: fixes to make intra-only frames work for spatial layers.
    * RTC-SVC: quality improvements for temporal layers.
    * AV1 RT: A new passive rate control strategy for screen content, an
      average of 7.5% coding gain, with some clips of 20+%. The feature
      is turned off by default due to higher bit rate variation.

  - Perceptual Quality Improvements
    * RTC: Visual quality improvements for high speeds (9/10)
    * Improvements in coding quality for all intra mode

  - Speedup and Memory Optimizations
    * ~10% speedup in good quality mode encoding.
    * ~7% heap memory reduction in good quality encoding mode for speed
      5 and 6.
    * Ongoing improvements to intra-frame encoding performance on Arm
    * Faster encoding speed for "--deltaq-mode=3" mode.
    * ~10% speedup for speed 5/6, ~15% speedup for speed 7/8, and
      ~10% speedup for speed 9/10 in real time encoding mode
    * ~20% heap memory reduction in still-picture encoding mode for
      360p-720p resolutions with multiple threads
    * ~13% speedup for speed 6 and ~12% speedup for speed 9 in
      still-picture encoding mode.
    * Optimizations to improve multi-thread efficiency for still-picture
      encoding mode.

  - Bug Fixes
    * b/204460717: README.md: replace master with main
    * b/210677928: libaom disable_order is surprising for
      max_reference_frames=3
    * b/222461449: -DCONFIG_TUNE_BUTTERAUGLI=1 broken
    * b/227207606: write_greyscale writes incorrect chroma in highbd
      mode
    * b/229955363: Integer-overflow in linsolve_wiener
    * https://crbug.com/aomedia/2032
    * https://crbug.com/aomedia/2397
    * https://crbug.com/aomedia/2563
    * https://crbug.com/aomedia/2815
    * https://crbug.com/aomedia/3009
    * https://crbug.com/aomedia/3018
    * https://crbug.com/aomedia/3045
    * https://crbug.com/aomedia/3101
    * https://crbug.com/aomedia/3130
    * https://crbug.com/aomedia/3173
    * https://crbug.com/aomedia/3184
    * https://crbug.com/aomedia/3187
    * https://crbug.com/aomedia/3190
    * https://crbug.com/aomedia/3195
    * https://crbug.com/aomedia/3197
    * https://crbug.com/aomedia/3201
    * https://crbug.com/aomedia/3202
    * https://crbug.com/aomedia/3204
    * https://crbug.com/aomedia/3205
    * https://crbug.com/aomedia/3207
    * https://crbug.com/aomedia/3208
    * https://crbug.com/aomedia/3209
    * https://crbug.com/aomedia/3213
    * https://crbug.com/aomedia/3214
    * https://crbug.com/aomedia/3219
    * https://crbug.com/aomedia/3222
    * https://crbug.com/aomedia/3223
    * https://crbug.com/aomedia/3225
    * https://crbug.com/aomedia/3226
    * https://crbug.com/aomedia/3228
    * https://crbug.com/aomedia/3232
    * https://crbug.com/aomedia/3236
    * https://crbug.com/aomedia/3237
    * https://crbug.com/aomedia/3238
    * https://crbug.com/aomedia/3240
    * https://crbug.com/aomedia/3243
    * https://crbug.com/aomedia/3244
    * https://crbug.com/aomedia/3246
    * https://crbug.com/aomedia/3248
    * https://crbug.com/aomedia/3250
    * https://crbug.com/aomedia/3251
    * https://crbug.com/aomedia/3252
    * https://crbug.com/aomedia/3255
    * https://crbug.com/aomedia/3257
    * https://crbug.com/aomedia/3259
    * https://crbug.com/aomedia/3260
    * https://crbug.com/aomedia/3267
    * https://crbug.com/aomedia/3268
    * https://crbug.com/aomedia/3269
    * https://crbug.com/aomedia/3276
    * https://crbug.com/aomedia/3278
    * https://crbug.com/chromium/1290068
    * https://crbug.com/chromium/1303237
    * https://crbug.com/chromium/1304990
    * https://crbug.com/chromium/1321141
    * https://crbug.com/chromium/1321388
    * https://crbug.com/oss-fuzz/44846
    * https://crbug.com/oss-fuzz/44856
    * https://crbug.com/oss-fuzz/44862
    * https://crbug.com/oss-fuzz/44904
    * https://crbug.com/oss-fuzz/45056

2022-01-28 v3.3.0
  This release includes compression efficiency and perceptual quality
  improvements, speedup and memory optimizations, some new features, and
  several bug fixes.

  - New Features
    * AV1 RT: Introducing CDEF search level 5
    * Changed real time speed 4 to behave the same as real time speed 5
    * Add --deltaq-strength
    * rtc: Allow scene-change and overshoot detection for svc
    * rtc: Intra-only frame for svc
    * AV1 RT: Option 2 for codec control AV1E_SET_ENABLE_CDEF to disable
      CDEF on non-ref frames
    * New codec controls AV1E_SET_LOOPFILTER_CONTROL and
      AOME_GET_LOOPFILTER_LEVEL
    * Improvements to three pass encoding

  - Compression Efficiency Improvements
    * Overall compression gains: 0.6%

  - Perceptual Quality Improvements
    * Improves the perceptual quality of high QP encoding for delta-q mode 4
    * Auto select noise synthesis level for all intra

  - Speedup and Memory Optimizations
    * Added many SSE2 optimizations.
    * Good quality 2-pass encoder speedups:
      o Speed 2: 9%
      o Speed 3: 12.5%
      o Speed 4: 8%
      o Speed 5: 3%
      o Speed 6: 4%
    * Real time mode encoder speedups:
      o Speed 5: 2.6% BDRate gain, 4% speedup
      o Speed 6: 3.5% BDRate gain, 4% speedup
      o Speed 9: 1% BDRate gain, 3% speedup
      o Speed 10: 3% BDRate gain, neutral speedup
    * All intra encoding speedups (AVIF):
      o Single thread - speed 6: 8%
      o Single thread - speed 9: 15%
      o Multi thread(8) - speed 6: 14%
      o Multi thread(8) - speed 9: 34%

  - Bug Fixes
    * Issue 3163: Segmentation fault when using --enable-keyframe-filtering=2
    * Issue 2436: Integer overflow in av1_warp_affine_c()
    * Issue 3226: armv7 build failure due to gcc-11
    * Issue 3195: Bug report on libaom (AddressSanitizer: heap-buffer-overflow)
    * Issue 3191: Bug report on libaom (AddressSanitizer: SEGV on unknown
      address)
    * Issue 3176: Some SSE2/SADx4AvgTest.* tests fail on Windows
    * Issue 3175: Some SSE2/SADSkipTest.* tests fail on Windows

2021-10-13 v3.2.0
  This release includes compression efficiency and perceptual quality
  improvements, speedup and memory optimizations, as well as some new
  features.

  - New Features
    * Introduced speeds 7, 8, and 9 for all intra mode.
    * Introduced speed 10 for real time mode.
    * Introduced an API that allows external partition decisions.
    * SVC: added support for compound prediction.
    * SVC: added support for fixed SVC modes.

  - Compression Efficiency Improvements
    * Intra-mode search improvement.
    * Improved real time (RT) mode BDrate savings by ~5% (RT speed 5)
      and ~12% (RT speed 6). The improvement was measured on the video
      conference set.
    * Improved real time mode for nonrd path (speed 7, 8, 9): BDrate
      gains of ~3-5%.
    * Rate control and RD adjustments based on ML research in VP9.
      Gains of ~0.5-1.0% for HD.

  - Perceptual Quality Improvements
    * Added a new mode --deltaq-mode=3 to improve perceptual quality
      based on a differential contrast model for still images.
    * Added a new mode –deltaq-mode=4 to improve perceptual quality
      based on user rated cq_level data set for still images.
    * Weighting of some intra mode and partition size choices to better
      manage and retain texture.

  - Speedup and Memory Optimizations
    * Further improved 2-pass good quality encoder speed:
      o Speed 2 speedup: 18%
      o Speed 3 speedup: 22%
      o Speed 4 speedup: 37%
      o Speed 5 speedup: 30%
      o Speed 6 speedup: 20%
    * Optimized the real time encoder (measured on the video conference
      set):
      o RT speed 5 speedup: 110%
      o RT speed 6 speedup: 77%

  - Bug Fixes
    * Issue 3069: Fix one-pass mode keyframe placement off-by-one error.
    * Issue 3156: Fix a bug in av1_quantize_lp AVX2 optimization.

2021-09-29 v3.1.3
  This release includes several bug fixes.

  - Bug fixes:
    The following four cmake changes should help the people building
    libaom using MSVC.
      1. exports: use CMAKE_SHARED_LIBRARY_PREFIX to determine lib name
         https://aomedia-review.googlesource.com/c/aom/+/142342
      2. aom_install: Install lib dlls to bindir
         https://aomedia-review.googlesource.com/c/aom/+/146546
      3. aom_install: use relpath for install
         https://aomedia-review.googlesource.com/c/aom/+/146550
      4. aom_install: don't exclude msvc from install
         https://aomedia-review.googlesource.com/c/aom/+/146547

    aom/aom_encoder.h: remove configure option reference
    https://aomedia-review.googlesource.com/c/aom/+/146743

    Issue 3113: Tests for detecting chroma subsampling in
    av1_copy_and_extend_frame() do not work when y_width or y_height is
    1

    Issue 3115: image2yuvconfig() should calculate uv_crop_width and
    uv_crop_height from y_crop_width and y_crop_height

    Issue 3140: rc_overshoot_pct is documented as having a range of
    0-1000, but is range checked against 0-100

    Issue 3147: Build failure on Apple M1 arm64

2021-07-20 v3.1.2
  This release includes several bug fixes.

  - Bug fixes:
    exports.cmake: use APPLE and WIN32 and use def for mingw-w64
    https://aomedia-review.googlesource.com/c/aom/+/139882

    Issue 2993: Incorrect spatial_id when decoding base layer of
    multi-layer stream

    Issue 3080: Chroma Resampling by Encoder on Y4M Inputs Files Tagged
    as C420mpeg2

    Issue 3081: Use of uninitialized value $version_extra in
    concatenation (.) or string at aom/build/cmake/version.pl line 88.

2021-06-08 v3.1.1
  This release includes several bug fixes.

  - Bug fixes:
    Issue 2965: Cherry-picked the following four commits for the
    tune=butteraugli mode.
      1. Add libjxl to pkg_config if enabled:
         https://aomedia-review.googlesource.com/c/aom/+/136044
      2. Declare set_mb_butteraugli_rdmult_scaling static:
         https://aomedia-review.googlesource.com/c/aom/+/134506
      3. Add color range detection in tune=butteraugli mode:
         https://aomedia-review.googlesource.com/c/aom/+/135521
      4. Enable tune=butteraugli in all-intra mode:
         https://aomedia-review.googlesource.com/c/aom/+/136082

    Issue 3021: Fix vmaf model initialization error when not set to
    tune=vmaf

    Issue 3050: Compilation fails with -DCONFIG_TUNE_VMAF=1

    Issue 3054: Consistent crash on near-static screen content, keyframe
    related

2021-05-03 v3.1.0
  This release adds an "all intra" mode to the encoder, which significantly
  speeds up the encoding of AVIF still images at speed 6.

  - Upgrading:
    All intra mode for encoding AVIF still images and AV1 all intra videos:
    AOM_USAGE_ALL_INTRA (2) can be passed as the 'usage' argument to
    aom_codec_enc_config_default().

    New encoder control IDs added:
      - AV1E_SET_ENABLE_DIAGONAL_INTRA: Enable diagonal (D45 to D203) intra
        prediction modes (0: false, 1: true (default)). Also available as
        "enable-diagonal-intra" for the aom_codec_set_option() function.

    New aom_tune_metric enum value: AOM_TUNE_BUTTERAUGLI. The new aomenc option
    --tune=butteraugli was added to optimize the encoder’s perceptual quality by
    optimizing the Butteraugli metric. Install libjxl (JPEG XL) and then pass
    -DCONFIG_TUNE_BUTTERAUGLI=1 to the cmake command to enable it.

    Addition of support for libvmaf 2.x.

  - Enhancements:
    Heap memory consumption for encoding AVIF still images is significantly
    reduced.

  - Bug fixes:
    Issue 2601: third_party/libaom fails licensecheck

    Issue 2950: Conditional expression for rc->this_key_frame_forced is always
    true in find_next_key_frame()

    Issue 2988: "make install" installs the aom.h header twice

    Issue 2992: Incorrectly printing the temporal_id twice in dump_obu tool

    Issue 2998:

    Issue 2999:

    Issue 3000:

2021-02-24 v3.0.0
  This release includes compression efficiency improvement, speed improvement
  for realtime mode, as well as some new APIs.

  - Upgrading:
    Support for PSNR calculation based on stream bit-depth.

    New encoder control IDs added:
      - AV1E_SET_ENABLE_RECT_TX
      - AV1E_SET_VBR_CORPUS_COMPLEXITY_LAP
      - AV1E_GET_BASELINE_GF_INTERVAL
      - AV1E_SET_ENABLE_DNL_DENOISING

    New decoder control IDs added:
      - AOMD_GET_FWD_KF_PRESENT
      - AOMD_GET_FRAME_FLAGS
      - AOMD_GET_ALTREF_PRESENT
      - AOMD_GET_TILE_INFO
      - AOMD_GET_SCREEN_CONTENT_TOOLS_INFO
      - AOMD_GET_STILL_PICTURE
      - AOMD_GET_SB_SIZE
      - AOMD_GET_SHOW_EXISTING_FRAME_FLAG
      - AOMD_GET_S_FRAME_INFO

    New aom_tune_content enum value: AOM_CONTENT_FILM

    New aom_tune_metric enum value: AOM_TUNE_VMAF_NEG_MAX_GAIN

    Coefficient and mode update can be turned off via
    AV1E_SET_{COEFF/MODE}_COST_UPD_FREQ.

    New key & value API added, available with aom_codec_set_option() function.

    Scaling API expanded to include 1/4, 3/4 and 1/8.

  - Enhancements:
    Better multithreading performance with realtime mode.

    New speed 9 setting for faster realtime encoding.

    Smaller binary size with low bitdepth and realtime only build.

    Temporal denoiser and its optimizations on x86 and Neon.

    Optimizations for scaling.

    Faster encoding with speed settings 2 to 6 for good encoding mode.

    Improved documentation throughout the library, with function level
    documentation, tree view and support for the dot tool.

  - Bug fixes:
    Aside from those mentioned in v2.0.1 and v2.0.2, this release includes the
    following bug fixes:

    Issue 2940: Segfault when encoding with --use-16bit-internal and --limit > 1

    Issue 2941: Decoder mismatch with --rt --bit-depth=10 and --cpu-used=8

    Issue 2895: mingw-w64 i686 gcc fails to build

    Issue 2874: Separate ssse3 functions from sse2 file.

2021-02-09 v2.0.2
  This release includes several bug fixes.

  - Bug fixes:
    Issue 2643: Modify the assertion in temporal filter intrinsics.

    Issue 2648: Fix unit test ThreadTestLarge.EncoderResultTest/49
    assertion failure.

    Issue 2869: Add -Wimplicit-function-declaration as C flag only.

    Issue 2878: Avoid memset in the av1_filter_intra_predictor module
    functions.

    Issue 2903: Fix a typo bug in apply_temporal_filter_planewise.

    Call av1_setup_frame_size() when dropping a frame in the
    encode_frame_to_data_rate() function in av1/encoder/encoder.c.

2020-11-25 v2.0.1
  This release includes two bug fixes.

  - Bug fixes:
    Issue 2723: Fix crash in chroma_check() when generating a monochrome
    encoded stream in real-time mode.

    Issue 2833: Fix crash on some input when reduced still picture header is
    used in real-time mode and speed >=7.

2020-05-07 v2.0.0 "Applejack"
  First official release of libaom.
  This release includes new real-time mode and SVC support.

  - Upgrading:
    AOM_SET_POSTPROC, AOM_CODEC_CAP_POSTPROC and AOM_CODEC_USE_POSTPROC are
    removed.

    AOM_SET_DBG_* is removed.

    Multi-resolution encoding is removed.

    put_frame and put_slice callbacks are removed.

  - Enhancements:
    Full-sweep document update for codec controls.

2018-06-28 v1.0.0
  AOMedia Codec Workgroup Approved version 1.0

2016-04-07 v0.1.0 "AOMedia Codec 1"
  This release is the first Alliance for Open Media codec.
