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.
