2024-08-27 v3.10.0
  This release includes new codec interfaces, compression efficiency and
  perceptual improvements, speedup and memory optimizations and many bug
  fixes. This release is ABI compatible with the last release.

  The definitions of the internal macros AOM_INLINE and AOM_FORCE_INLINE
  have been removed from the public header aom/aom_integer.h.

  - New Features
    * New codec controls:
      * AV1E_SET_AUTO_TILES
      * AV1E_GET_HIGH_MOTION_CONTENT_SCREEN_RTC
      * AV1E_SET_POSTENCODE_DROP_RTC: Post encode frame drop feature.
      * AV1E_SET_MAX_CONSEC_FRAME_DROP_MS_CBR
    * New key-value pair for aom_codec_set_option():
      * "auto-tiles": equivalent to the new codec control
        AV1E_SET_AUTO_TILES.

  - Deprecated Features
    * Deprecated codec control:
      * AV1E_SET_MAX_CONSEC_FRAME_DROP_CBR: Use the new codec control
        AV1E_SET_MAX_CONSEC_FRAME_DROP_MS_CBR instead.
    * The sframe_mode field in the aom_codec_enc_cfg_t struct is not
      implemented.

  - Compression Efficiency Improvements
    * BD-rate gain of 0.7 - 1.3% (by enabling global motion tool) for
      speed 5 and speed 6 with ~5% encode time increase.
    * RTC speed 11 video: ~3-5% BD-rate gain for VGA and QVGA.

  - Perceptual Quality Improvements
    * RTC quality improvements for slide changes and scrolling content.

  - Speedup and Memory Optimizations
    * RTC screen content speedups:
      * ~2x speedup for high motion content for speed 11.
      * ~2x speedup on key frame coding for speed >= 10.
    * Arm: Significant uplifts in speed in this release (vs v3.9.1) have
      come from tuning the various convolutions according to filter size
      (doing 8-tap when only 2-tap is required is inefficient) and also
      deploying Armv8.6 USMMLA instructions in 6-tap and 12-tap standard
      bitdepth convolutions.
      * Standard bitdepth RTC:
        * speed 5: +5%
        * speed 6: +4%
        * speed 7: +5%
        * speed 8: +4%
        * speed 9: +6%
        * speed 10: +6%
      * Standard bitdepth VoD:
        * speed 0: +9%
        * speed 1: +12%
        * speed 2: +9%
        * speed 3: +3%
        * speed 4: +3%
        * speed 5: -9% (expected due to global motion changes)
        * speed 6: -3% (expected due to global motion changes)
      * High bitdepth VoD:
        * speed 0: +4%
        * speed 1: +19%
        * speed 2: +23%
        * speed 3: +1%
        * speed 4: +1%
        * speed 5: -8% (expected due to global motion changes)
        * speed 6: -3% (expected due to global motion changes)
      * Standard bitdepth 2x1 horizontal super-resolution/scaling
        encoding: +101%

  - Other Improvements
    * Reduce bit rate overshoot on slide content.

  - Bug Fixes
    * rtc: Bug fix for active_maps with sb_size=128.
    * b:343429036: rtc: Fix source_sad setting near boundary.
    * Fix to QP for temporal enhancement after key frame.
    * b:343429192: rtc: Condition QP adjustment on rc->q_1/2_frame > 0.

2024-06-07 v3.8.3
  This release includes several bug fixes. This release is ABI
  compatible with the last release. See
  https://aomedia.googlesource.com/aom/+log/v3.8.2..v3.8.3 for all the
  commits in this release.

  - Bug Fixes
    * aomedia:2754, aomedia:3567: Ensure thread stack size is at least
      256 KB
    * aomedia:3382, chromium:339877165: update codec config after
      svc/scale controls (CVE-2024-5493)
    * aomedia:3561: libaom-3.8.2 armv7 Android build failed
    * aomedia:3580: Allow g_timebase.num to be greater than
      g_timebase.den
    * Arm SVE build fixes.
    * av1_block_error_lp_neon: fix block_size param type

2024-06-05 v3.9.1
  This release includes several bug fixes. This release is ABI
  compatible with the last release. See
  https://aomedia.googlesource.com/aom/+log/v3.9.0..v3.9.1 for all the
  commits in this release.

  - Bug Fixes
    * aomedia:2754, aomedia:3567: Ensure thread stack size is at least
      256 KB
    * b:330639949, oss-fuzz:68195: Increase scaling in linsolve_wiener
    * Fix high target data rate overflow.
    * aomedia:3509: Fix two UBSan errors in av1_rc_update_framerate()
    * aomedia:3382, chromium:339877165: update codec config after
      svc/scale controls (CVE-2024-5493)
    * aomedia:3561: libaom-3.8.2 armv7 Android build failed
    * aomedia:3571: {,highbd_}intrapred_neon.c: Avoid over-reads in z1
      and z3 preds
    * aomedia:3578: libaom-3.9.0 undefined reference to
      `aom_sub_pixel_variance16xh_ssse3'
    * aomedia:3579: Use round for RC calculations in cyclic_refresh
    * aomedia:3580: Allow g_timebase.num to be greater than
      g_timebase.den
    * oss-fuzz:68774: libaom:av1_dec_fuzzer: Segv on unknown address in
      od_ec_dec_init
    * Arm SVE build fixes.
    * av1_block_error_lp_neon: fix block_size param type
    * av1_block_error_lp_sve: fix block_size param type

2024-04-09 v3.9.0
  This release includes new codec interfaces, compression efficiency and
  perceptual improvements, speedup for RTC for both video and screen content,
  and many bug fixes. This release is ABI compatible with the previous release.

  - New Features
    * New codec control
      * AV1E_SET_SVC_FRAME_DROP_MODE is added to configure the SVC encoder to
        only drop spatial layers or the whole superframe.
    * Active Map is fixed and tested for RTC.
    * CONFIG_QUANT_MATRIX is added to disable quantization matrices when aom
      decoder is disabled with CONFIG_AV1_DECODER. Reduces ~10% binary size when
      both are disabled.
    * libwebm is updated to libwebm-1.0.0.31-1-gaffd7f4.

  - Compression Efficiency Improvements
    * RTC encoding improvements
      * 1-2% BD-rate gain for screen content with temporal layers; 5% BD-rate
        gain on scrolling content.

  - Perceptual Quality Improvements
    * For RTC screen content
      * Reduced color artifacts for RTC screen content
      * Visual quality improved for scene changes for SVC with quality layers.
      * Removed visual artifacts for speed 11

  - Speedups:
    * RTC Speed 11: aggressive speedup setting added for video mode,
      resolutions <= VGA: ~30% faster than speed 10.
    * 5-9% speed up for high bit-depth encoding with good mode on Arm, half of
      which comes from SVE/SVE2 optimizations.

  - Other improvements
    * Further improvements to global motion estimation.
    * Documented minimum required SIMD support: SSE4.1 on x86, Neon on Arm.
    * Remove unneeded SIMD functions, saving >100 KiB from binary size.
    * Cleaned up and improved pattern_search.
    * Added end-to-end c vs SIMD bit-exactness test.
    * Added config flag to calc psnr using libvmaf peak: use a slightly
      different peak value for PSNR (1020 and 2040 for 10- and 12-bit)

  - Bug Fixes
    * Fuzzing bug fixes
      * b/329485898 Null-dereference WRITE in av1_cdef_frame_mt
      * b/329810149 Null-dereference WRITE in av1_cdef_copy_sb8_16
      * b/329813868 Ill in av1_cdef_frame_mt
      * chromium:327882824 Null-dereference WRITE in av1_cdef_init_fb_row
      * b/330014723 Null-dereference WRITE in
        cdef_copy_rect8_16bit_to_16bit_avx2
      * b/310455204 Null-dereference WRITE in prepare_enc_workers
      * b/314858909 Heap-buffer-overflow in aom_variance64x64_avx2
      * oss-fuzz:67132 av1_dec_fuzzer: ASSERT: (pbi->tile_count_minus_1 + 1) <=
        (pbi->output_frame_width_in_tiles_minus_1 + 1)
      * oss-fuzz:67058 av1_dec_fuzzer: ASSERT: i == 0 || tile_w == *w
      * oss-fuzz:67161 av1_dec_fuzzer: ASSERT: i == 0 || tile_h == *h
      * oss-fuzz:67059 av1_dec_fuzzer: Crash in mem_get_varsize
      * oss-fuzz:67162 av1_dec_fuzzer: Use-of-uninitialized-value in
        od_ec_decode_bool_q15
      * oss-fuzz:67184 av1_dec_fuzzer: Heap-buffer-overflow in od_ec_dec_init
      * oss-fuzz:67216 av1_dec_fuzzer: Heap-buffer-overflow in
        od_ec_dec_normalize
      * oss-fuzz:67055 av1_dec_fuzzer: Heap-buffer-overflow in
        get_ls_tile_buffers
    * libaom library
      * aomedia:3510 Large value of duration could cause encoder overflow
      * chromium:328105513 Fix build conflicts between Abseil and libaom/libvpx
        in Win ARM64 builds
      * aomedia:3544 AV1/SharpnessTestLarge.SharpnessPSNRTest failures after
        59c592bb8
      * aomedia:3531 Exception encountered with PSNR calculation
      * aomedia:3541 Can not compile correctly by CYGWIN
      * chromium:41482688 heap-buffer-overflow write in vpx_img_read()
        (tools_common.c) with VPX_IMG_FMT_NV12
      * aomedia:3521 Assertion failures on Arm in CNNTest.* in
        av1_cnn_convolve_no_maxpool_padding_valid_2x2_neon and
        av1_cnn_convolve_no_maxpool_padding_valid_5x5_neon
      * aomedia:3486 C vs NEON mismatch in AV1 encoder
      * aomedia:3536 Over write in highbd_dr_prediction_z3_upsample1_neon()
      * aomedia:3276 Significant progress on ensuring all allocations are
        checked
      * aomedia:3491 heap-buffer-overflow encoding frames of size 256x256,
        512x512 in good quality usage mode using 4 threads
      * aomedia:3322 PSNR number discrepancy
      * aomedia:3493 Cmake generates garbage symbols for libaom_srcs.gni
      * aomedia:3478 GCC 12.2.0 emits a -Wstringop-overflow warning on
        aom/av1/encoder/motion_search_facade.c
      * aomedia:3484 C vs NEON mismatch in AV1 encoder for high-bitdepth case

2024-03-08 v3.8.2
  This release includes several bug fixes. This release is ABI
  compatible with the last release. See
  https://aomedia.googlesource.com/aom/+log/v3.8.1..v3.8.2 for all the
  commits in this release.

  - Bug Fixes
    * aomedia:3523: SIGFPE in av1_twopass_postencode_update()
      pass2_strategy.c:4261.
    * aomedia:3535, b/317646516: Over reads in aom_convolve_copy_neon().
    * aomedia:3543: invalid feature modifier when compiling
      aom_dsp/arm/aom_convolve8_neon_i8mm.c on Debian 10 with arm64
      architecture.
    * aomedia:3545: Failed to parse configurations due to inconsistent
      elements between two arrays "av1_ctrl_args" and "av1_arg_ctrl_map"
      in aomenc.c.
    * oss-fuzz:66474, b/319140742: Integer-overflow in search_wiener.
    * Zero initialize an array in cdef search.

2024-01-17 v3.8.1
  This release includes several bug fixes. This release is ABI
  compatible with the last release. See
  https://aomedia.googlesource.com/aom/+log/v3.8.0..v3.8.1 for all the
  commits in this release.

  - Bug Fixes
    * aomedia:3520: get_cubic_kernel_dbl: Assertion `0 <= x && x < 1'
      failed.
    * aomedia:3526: alloc_compressor_data() is called during every
      aom_codec_control() call on the encoder.
    * aomedia:3527: aom/av1/encoder/mcomp.c:1810: av1_full_pixel_search:
      Assertion `ms_params->ms_buffers.ref->width ==
      ms_params->ms_buffers.src->width' failed.
    * aomedia:3534: libaom encoder crashed by AOM_USAGE_ALL_INTRA and
      AOM_EFLAG_NO_REF_LAST flags.
    * b/310455204: Recreate workers if necessary.
    * b/310548198: Update frame size in actual encoding.
    * b/314858909: Do not use adaptive error estimate.
    * Fix a hang of cmake on arm64 macOS with cmake 3.27.0 or later.

2024-01-18 v3.7.2
  This release includes three bug fixes. This release is ABI compatible
  with the last release. See
  https://aomedia.googlesource.com/aom/+log/v3.7.1..v3.7.2 for all the
  commits in this release.

  - Bug Fixes
    * aomedia:3520: get_cubic_kernel_dbl: Assertion `0 <= x && x < 1'
      failed.
    * aomedia:3526: alloc_compressor_data() is called during every
      aom_codec_control() call on the encoder. Note that this partially
      reverts the fix for bug aomedia:3349.
    * b/310457427 and b/310766628: Only use rec_sse in CBR mode.
    * Fix a hang of cmake on arm64 macOS with cmake 3.27.0 or later.

2023-11-30 v3.8.0
  This release includes new codec interfaces, compression efficiency and
  perceptual improvements, speedup and memory optimizations and many bug
  fixes. This release is ABI compatible with the last release.

  - New Features
    * New codec controls:
      * AV1E_SET_MAX_CONSEC_FRAME_DROP_CBR: Set the maximum number of
        consecutive frame drops allowed for the frame dropper in 1 pass
        CBR mode.
    * Run-time CPU feature detection for all Arm platforms:
      CRC, DotProd, I8MM and SVE CPU feature presence is detected at run
      time and code paths making use of these features are selected
      dynamically. These code paths provide meaningful performance gains
      for standard bitdepth RTC and VoD encoding: up to 10% and 20%
      respectively, over the Armv8.0-A baseline build.
    * RTC: Frame-dropper support added to the rate control library.
    * RTC Rate control improvements for low bitrate and for SVC.

  - Compression Efficiency Improvements
    * Improved accuracy of cost estimation for loop restoration and
      global motion.
    * Improved selection of loop restoration unit size - full search up
      to (non-realtime) speed 2, retuned static selection at higher
      speeds.
    * RTC Screen content mode: 3-5% bdrate gains across speeds 7 - 10.
    * Good-quality mode: 0.2 - 0.5% bdrate gains across speeds 1 - 4.

  - Perceptual Quality Improvements
    * RTC Screen: Improved visual quality for scrolling.
    * RTC: Improved color quality for both screen and video mode.

  - Speedup and Memory Optimizations
    * Good-quality, single-thread encoder speedups:
      o 15% improvement for speed 5.
      o 12% improvement for speed 6.
    * Arm standard bitdepth VoD (--good):
      o 8% speedup for speeds 0 and 1.
      o 20% speedup for speed 2.
      o 27% speedup for speed 3.
      o 30% speedup for speed 4.
      o 38% speedup for speeds 5 and 6.
    * Arm high bitdepth VoD (--good):
      o 206% speedup for speeds 0 and 1.
      o 180% speedup for speed 2.
      o 51% speedup for speeds 3 and 4.
      o 68% speedup for speed 5.
      o 72% speedup for speed 6.
    * RTC Screen content: 2-6% speedup across speeds 7-10.
    * RTC: 2-3% speedup for temporal layers.
    * RTC: Speedups to reference scaling in nonrd pickmode.
    * Good-quality mode: Simplified global motion estimation, saving
      ~1200 lines of code and 1KB of tables while improving quality.

  - Bug Fixes
    * Fixes to improve libaom stability in case of memory allocation
      failures.
    * Fixes to SIMD functions (x86 AVX2/SSE2 and ARM Neon).
    * b/310457427, b/310766628: Bug fixes to only use rec_sse in CBR
      mode.

2023-11-17 v3.7.1
  This release includes several bug fixes. This release is ABI
  compatible with the last release. See
  https://aomedia.googlesource.com/aom/+log/v3.7.0..v3.7.1 for all the
  commits in this release.

  - Bug Fixes
    * aomedia:3349: heap overflow when increasing resolution
    * aomedia:3478: GCC 12.2.0 emits a -Wstringop-overflow warning on
      aom/av1/encoder/motion_search_facade.c
    * aomedia:3489: Detect encoder and image high bit depth mismatch
    * aomedia:3491: heap-buffer-overflow on frame size change (CVE-2023-6879)
    * b/303023614:  Segfault at encoding time for high bit depth images

2023-08-10 v3.7.0
  This release includes new codec interfaces, compression efficiency and
  perceptual improvements, speedup and memory optimizations and many bug fixes.
  This release is ABI compatible with the last release.

  - New Features
    * New codec controls:
      * AV1E_SET_QUANTIZER_ONE_PASS: Set quantizer for each frame.
      * AV1E_ENABLE_RATE_GUIDE_DELTAQ: enable the rate distribution guided delta
        quantization in all intra mode. The "enable-rate-guide-deltaq" option is
        added for this control.
      * AV1E_SET_RATE_DISTRIBUTION_INFO: set the input file for rate
        distribution used in all intra mode. The "rate-distribution-info" option
        is added for this control.
      * AV1E_GET_LUMA_CDEF_STRENGTH
      * AV1E_SET_BITRATE_ONE_PASS_CBR
    * AOM_SCALING_MODE is extended to include 2/3 and 1/3 scaling.
    * aom_tune_metric is extended to include AOM_TUNE_VMAF_SALIENCY_MAP.
      The "tune" option is extended to include "vmaf_saliency_map".
    * SVC example encoder svc_encoder_rtc is able to use the rate control
      library.
    * Loopfilter level and CDEF filter level is supported by RTC rate control
      library.
    * New speed (--cpu-used) 11, intended for RTC screen sharing, added for
      faster encoding with ~3% bdrate loss with 16% IC (instruction count)
      speedup compared to speed 10.

  - Compression Efficiency Improvements
    * Improved VoD encoding performance
      * 0.1-0.6% BDrate gains for encoding speeds 2 to 6
      * Rate control accuracy improvement in VBR mode
    * RTC encoding improvements
      * Screen content mode: 10-19% BDrate gains for speeds 6 - 10
      * Temporal layers video mode, for speed 10:
        * 2 temporal layers on low resolutions: 13-15% BDrate gain
        * 3 temporal layers on VGA/HD: 3-4% BDrate gain

  - Perceptual Quality Improvements
    * Fixed multiple block and color artifacts for RTC screen content by
      * Incorporating color into RD cost for IDTX
      * Reducing thresholds for palette mode in non RD mode
      * Allowing more palette mode testing
    * Improved color sensitivity for altref in non-RD mode.
    * Reduced video flickering for temporal layer encoding.

  - Speedup and Memory Optimizations
    * Speed up the VoD encoder
      * 2-5% for encoding speed 2 to 4
      * 9-15% for encoding speed 5 to 6
      * ARM
        * Standard bitdepth
          * speed 5: +31%
          * speed 4: +2%
          * speed 3: +9%
          * speed 2: +157%
        * High bitdepth
          * speed 5: +85%
    * RTC speedups
      * Screen content mode
        * 15% IC speedup for speeds 6-8
        * ARM: 7% for speed 9, 3% for speed 10
      * Temporal layers video mode
        * 7% speedup for 3 temporal layers on VGA/HD, for speed 10
      * Single layer video
        * x86: 2% IC speedup for speeds 7-10
        * ARM: 2-4% speedup across speeds 5-10

  - Other improvements
    * VoD: Major improvements to global motion estimation, now enabled up to
      speed 4
    * RTC
      * Fixes to make lossless coding work.
      * Fixes to make frame dropper (--drop_frames) work for single and temporal
        layers.
      * Improvements to RPS (reference picture selection) recovery frames.
      * Improvements to rate control for temporal layers.
    * libwebm is updated to libwebm-1.0.0.29-9-g1930e3c

  - Bug Fixes
    * aomedia:3261 Assertion failed when encoding av1 with film grain and
      '--monochrome' flag
    * aomedia:3276 ensure all allocations are checked (partial fix)
    * aomedia:3451 The libaom library calls exit()
    * aomedia:3450 enable -Wshadow for C++ sources
    * aomedia:3449 Test Seg Faults After
      b459af3e345be402db052a143fcc5383d4b74cbd
    * aomedia:3416 prune unused symbols / restrict symbol visibility
    * aomedia:3443 Jenkins failure:
      UninstantiatedParameterizedTestSuite<EstimateNoiseTest>
    * aomedia:3434 realtime failures with CONFIG_BITSTREAM_DEBUG=1
    * aomedia:3433 DeltaqModeTest crash w/row_mt=0
    * aomedia:3429 Encoder crash when turn on both ExternalResize and
      g_threads > 2
    * aomedia:3438 Build failure with
      `-DSANITIZE=address -DBUILD_SHARED_LIBS=ON` when using clang.
    * aomedia:3435 Block artifacts when scrolling with AV1 in screen sharing
      scenarios
    * aomedia:3170 vmaf tune presets produce extreme glitches in one scene
    * aomedia:3401 Building shared libaom with MSVC results in a race condition
      with the export library
    * aomedia:3420 Floating point exception in av1_tpl_get_frame_importance()
    * aomedia:3424 heap-buffer-overflow in ScaleFilterCols_16_C() (SIGABRT)
    * aomedia:3417 examples/svc_encoder_rtc.c is using internal macros and
      functions
    * aomedia:3372 SEGV in assign_frame_buffer_p av1_common_int.h
    * aomedia:3130 'cpu-features.h' file not found on Android NDK 22
    * aomedia:3415 Encoder/decoder mismatch for svc_encoder_rtc running
      1 SL 3 TL
    * aomedia:3412 Lossless Mode Fails Loopback Bit Test
    * aomedia:3409 The use of AV1_VAR_OFFS in av1/encoder/var_based_part.c is
      incorrect for high bit depths
    * aomedia:3403 test_libaom fails with error message
      "feenableexcept() failed" on Linux arm
    * aomedia:3370 Random color block at fast motion area
    * aomedia:3393 Assertion failure in av1_convolve_2d_sr_c()
    * aomedia:3392 Strong artifacting for high bit-depth real-time
    * aomedia:3376 aomenc --threads=10 --deltaq-mode=3 crashes after
      "Allintra: multi-threading of calculating differential contrast"
    * aomedia:3380 Crashes and ASan and TSan errors in deltaq-mode=3
      multithreading code
    * chromium:1410766 heap-buffer-overflow in aom_yv12_copy_v_c
    * Cannot set level via AV1E_SET_TARGET_SEQ_LEVEL_IDX
    * Encoding failure due to the use of loop restoration with unintended use of
      lossless mode.
    * Signed integer overflow in scan_past_frames
    * Signed integer overflow in update_a_sep_sym
    * Flickering in AV1 1440p/2160p HDR transcodes
    * Fixed artifacts with screen share at encoder speed 10
    * Fixed prediction setup for IDTX

2023-05-08 v3.6.1
  This release includes several bug fixes. This release is ABI
  compatible with the last release. See
  https://aomedia.googlesource.com/aom/+log/v3.6.0..v3.6.1 for all the
  commits in this release.

  - Bug Fixes
    * aomedia:2871: Guard the support of the 7.x and 8.x levels for AV1
      under the CONFIG_CWG_C013 config flag, and only output the 7.x and
      8.x levels when explicitly requested.
    * aomedia:3382: Choose sb_size by ppi instead of svc.
    * aomedia:3384: Fix fullpel search limits.
    * aomedia:3388: Replace left shift of xq_active by multiplication.
    * aomedia:3389: Fix MV clamping in av1_mv_pred.
    * aomedia:3390: set_ld_layer_depth: cap max_layer_depth to
      MAX_ARF_LAYERS.
    * aomedia:3418: Fix MV clamping in av1_int_pro_motion_estimation.
    * aomedia:3429: Move lpf thread data init to lpf_pipeline_mt_init().
    * b:266719111: Fix undefined behavior in Arm Neon code.
    * b:269840681: nonrd_opt: align scan tables.
    * rtc: Fix is_key_frame setting in variance partition.
    * Build: Fix build with clang-cl and Visual Studio.
    * Build: Fix module definition file for MinGW/MSYS.

2023-02-03 v3.6.0
  This release includes compression efficiency and perceptual quality
  improvements, speedup and memory optimizations, and some new features.
  This release is ABI compatible with the last release.

  - New Features
    * New values 20-27 (corresponding to levels 7.0-7.3 and 8.0-8.3) for
      the encoder control AV1E_SET_TARGET_SEQ_LEVEL_IDX (note that the
      proposal to add the new levels are still in draft status). The
      original special value 24 (keep level stats only for level
      monitoring) is renumbered as 32.
    * New encoder control AV1E_SET_SKIP_POSTPROC_FILTERING to skip the
      application of post-processing filters on reconstructed frame in
      all intra mode.
    * New encoder option "kf-max-pyr-height": Maximum height of pyramid
      structure used for the GOP starting with a key frame (-1 to 5).
    * Make SVC work for screen content.
    * Rate control improvements to reduce frame-size spikes for screen
      content coding.
    * RISC-V architecture support with gcc toolchain.

  - Compression Efficiency Improvements
    * Peak compression efficiency in VOD setting is improved by 1%.
    * 0.7% - 2.2% RTC encoding BDrate gains for real time speed 8 to 10.
    * 15% RTC encoding BDrate gains for screen content speed 10.

  - Perceptual Quality Improvements
    * Resolved a visual quality issue that was reported for high
      resolution clips (2K) for speed 4 and above in VOD use case.
    * Visual quality improvements to screen content coding.
    * Quality improvements to temporal layer RTC coding.

  - Speedup and Memory Optimizations
    * RTC single-thread encoder speedup:
      o ~6% instruction count reduction for speed 5 and 6.
      o ~15% instruction count reduction for speed 7.
      o ~10% instruction count reduction for speed 8 to 10 (>=360p
        resolutions).
    * RTC multi-thread encoder speedup (beyond single-thread speedup):
      o 5-8% encode time reduction for speed 7 to 10.
    * RTC screen-content encoder speedup:
      o 11% instruction count reduction for speed 9 and 10 (>=720p
        resolutions).
    * ~5% reduction in heap memory requirements for RTC, speed 6 to 10.
    * AVIF:
      o 4-5% speedup for speed 9 in still-picture encoding mode.
      o 3-4% heap memory reduction in still-picture encoding mode for
        360p-720p resolutions with multiple threads.

  - Bug Fixes
    * Added a workaround for an AV1 specification bug which makes
      TRANSLATION type global motion models unusable.
    * Fixed AddressSanitizer global-buffer-overflow errors in
      av1/encoder/arm/neon/av1_fwd_txfm2d_neon.c.
    * Fixed AddressSanitizer heap-buffer-overflow error in
      av1_wiener_convolve_add_src_neon().
    * chromium:1393384 Avoid scene detection on spatial resize.
    * aomedia:3308 Remove color artifacts under high motion.
    * aomedia:3310 Avoid out of memory failures with Visual Studio 2017,
      2019, and 2022 for Win32 x86 builds.
    * aomedia:3346 Make SVC work properly for screen content.
    * aomedia:3348 Fix a bug where an uninitialized search_site is used.
    * aomedia:3365 Work around what seems like a Visual Studio 2022
      compiler optimization bug.
    * aomedia:3369 Incorrect PSNR values reported by libaom for 12-bit
      encode.

2022-08-31 v3.5.0
  This release is ABI compatible with the last one, including speedup and memory
  optimizations, and new APIs and features.

  - New Features
    * Support for frame parallel encode for larger number of threads. --fp-mt
      flag is available for all build configurations.
    * New codec control AV1E_GET_NUM_OPERATING_POINTS

  - Speedup and Memory Optimizations
    * Speed-up multithreaded encoding for good quality mode for larger number of
      threads through frame parallel encoding:
      o 30-34% encode time reduction for 1080p, 16 threads, 1x1 tile
        configuration (tile_rows x tile_columns)
      o 18-28% encode time reduction for 1080p, 16 threads, 2x4 tile
        configuration
      o 18-20% encode time reduction for 2160p, 32 threads, 2x4 tile
        configuration
    * 16-20% speed-up for speed=6 to 8 in still-picture encoding mode
    * 5-6% heap memory reduction for speed=6 to 10 in real-time encoding mode
    * Improvements to the speed for speed=7, 8 in real-time encoding mode
    * Improvements to the speed for speed=9, 10 in real-time screen encoding
      mode
    * Optimizations to improve multi-thread efficiency in real-time encoding
      mode
    * 10-15% speed up for SVC with temporal layers
    * SIMD optimizations:
      o Improve av1_quantize_fp_32x32_neon() 1.05x to 1.24x faster
      o Add aom_highbd_quantize_b{,_32x32,_64x64}_adaptive_neon() 3.15x to 5.6x
        faster than "C"
      o Improve av1_quantize_fp_64x64_neon() 1.17x to 1.66x faster
      o Add aom_quantize_b_avx2() 1.4x to 1.7x faster than aom_quantize_b_avx()
      o Add aom_quantize_b_32x32_avx2() 1.4x to 2.3x faster than
        aom_quantize_b_32x32_avx()
      o Add aom_quantize_b_64x64_avx2() 2.0x to 2.4x faster than
        aom_quantize_b_64x64_ssse3()
      o Add aom_highbd_quantize_b_32x32_avx2() 9.0x to 10.5x faster than
        aom_highbd_quantize_b_32x32_c()
      o Add aom_highbd_quantize_b_64x64_avx2() 7.3x to 9.7x faster than
        aom_highbd_quantize_b_64x64_c()
      o Improve aom_highbd_quantize_b_avx2() 1.07x to 1.20x faster
      o Improve av1_quantize_fp_avx2() 1.13x to 1.49x faster
      o Improve av1_quantize_fp_32x32_avx2() 1.07x to 1.54x faster
      o Improve av1_quantize_fp_64x64_avx2()  1.03x to 1.25x faster
      o Improve av1_quantize_lp_avx2() 1.07x to 1.16x faster

  - Bug fixes including but not limited to
    * aomedia:3206 Assert that skip_width > 0 for deconvolve function
    * aomedia:3278 row_mt enc: Delay top-right sync when intraBC is enabled
    * aomedia:3282 blend_a64_*_neon: fix bus error in armv7
    * aomedia:3283 FRAME_PARALLEL: Propagate border size to all cpis
    * aomedia:3283 RESIZE_MODE: Fix incorrect strides being used for motion
      search
    * aomedia:3286 rtc-svc: Fix to dynamic_enable spatial layers
    * aomedia:3289 rtc-screen: Fix to skipping inter-mode test in nonrd
    * aomedia:3289 rtc-screen: Fix for skip newmv on flat blocks
    * aomedia:3299 Fix build failure with CONFIG_TUNE_VMAF=1
    * aomedia:3296 Fix the conflict --enable-tx-size-search=0 with nonrd mode
      --enable-tx-size-search will be ignored in non-rd pick mode
    * aomedia:3304 Fix off-by-one error of max w/h in validate_config
    * aomedia:3306 Do not use pthread_setname_np on GNU/Hurd
    * aomedia:3325 row-multithreading produces invalid bitstream in some cases
    * chromium:1346938, chromium:1338114
    * compiler_flags.cmake: fix flag detection w/cmake 3.17-3.18.2
    * tools/*.py: update to python3
    * aom_configure.cmake: detect PIE and set CONFIG_PIC
    * test/simd_cmp_impl: use explicit types w/CompareSimd*
    * rtc: Fix to disable segm for aq-mode=3
    * rtc: Fix to color_sensitivity in variance partition
    * rtc-screen: Fix bsize in model rd computation for intra chroma
    * Fixes to ensure the correct behavior of the encoder algorithms (like
      segmentation, computation of statistics, etc.)

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.
