2019-01-31 v1.8.0 "Northern Shoveler Duck"
  This release focused on encoding performance for realtime and VOD use cases.

  - Upgrading:
    This adds and improves several vp9 controls. Most are related to SVC:
      VP9E_SET_SVC_FRAME_DROP_LAYER:
        - Frame dropping in SVC.
      VP9E_SET_SVC_INTER_LAYER_PRED:
        - Inter-layer prediction in SVC.
      VP9E_SET_SVC_GF_TEMPORAL_REF:
        - Enable long term temporal reference in SVC.
      VP9E_SET_SVC_REF_FRAME_CONFIG/VP9E_GET_SVC_REF_FRAME_CONFIG:
        - Extend and improve this control for better flexibility in setting SVC
          pattern dynamically.
      VP9E_SET_POSTENCODE_DROP:
        - Allow for post-encode frame dropping (applies to non-SVC too).
      VP9E_SET_SVC_SPATIAL_LAYER_SYNC:
        - Enable spatial layer sync frames.
      VP9E_SET_SVC_LAYER_ID:
        - Extend api to specify temporal id for each spatial layers.
      VP9E_SET_ROI_MAP:
        - Extend Region of Interest functionality to VP9.

  - Enhancements:
    2 pass vp9 encoding has improved substantially. When using --auto-alt-ref=6,
    we see approximately 8% for VBR and 10% for CQ. When using --auto-alt-ref=1,
    the gains are approximately 4% for VBR and 5% for CQ.

    For real-time encoding, speed 7 has improved by ~5-10%. Encodes targeted at
    screen sharing have improved when the content changes significantly (slide
    sharing) or scrolls. There is a new speed 9 setting for mobile devices which
    is about 10-20% faster than speed 8.

  - Bug fixes:
    VP9 denoiser issue.
    VP9 partition issue for 1080p.
    VP9 rate control improvments.
    Postprocessing Multi Frame Quality Enhancement (MFQE) issue.
    VP8 multithread decoder issues.
    A variety of fuzzing issues.

2018-01-04 v1.7.0 "Mandarin Duck"
  This release focused on high bit depth performance (10/12 bit) and vp9
  encoding improvements.

  - Upgrading:
    This release is ABI incompatible due to new vp9 encoder features.

    Frame parallel decoding for vp9 has been removed.

  - Enhancements:
    vp9 encoding supports additional threads with --row-mt. This can be greater
    than the number of tiles.

    Two new vp9 encoder options have been added:
      --corpus-complexity
      --tune-content=film

    Additional tooling for respecting the vp9 "level" profiles has been added.

  - Bug fixes:
    A variety of fuzzing issues.
    vp8 threading fix for ARM.
    Codec control VP9_SET_SKIP_LOOP_FILTER fixed.
    Reject invalid multi resolution configurations.

2017-01-09 v1.6.1 "Long Tailed Duck"
  This release improves upon the VP9 encoder and speeds up the encoding and
  decoding processes.

  - Upgrading:
    This release is ABI compatible with 1.6.0.

  - Enhancements:
    Faster VP9 encoding and decoding.
    High bit depth builds now provide similar speed for 8 bit encode and decode
    for x86 targets. Other platforms and higher bit depth improvements are in
    progress.

  - Bug Fixes:
    A variety of fuzzing issues.

2016-07-20 v1.6.0 "Khaki Campbell Duck"
  This release improves upon the VP9 encoder and speeds up the encoding and
  decoding processes.

  - Upgrading:
    This release is ABI incompatible with 1.5.0 due to a new 'color_range' enum
    in vpx_image and some minor changes to the VP8_COMP structure.

    The default key frame interval for VP9 has changed from 128 to 9999.

  - Enhancement:
    A core focus has been performance for low end Intel processors. SSSE3
    instructions such as 'pshufb' have been avoided and instructions have been
    reordered to better accommodate the more constrained pipelines.

    As a result, devices based on Celeron processors have seen substantial
    decoding improvements. From Indian Runner Duck to Javan Whistling Duck,
    decoding speed improved between 10 and 30%. Between Javan Whistling Duck
    and Khaki Campbell Duck, it improved another 10 to 15%.

    While Celeron benefited most, Core-i5 also improved 5% and 10% between the
    respective releases.

    Realtime performance for WebRTC for both speed and quality has received a
    lot of attention.

  - Bug Fixes:
    A number of fuzzing issues, found variously by Mozilla, Chromium and others,
    have been fixed and we strongly recommend updating.

2015-11-09 v1.5.0 "Javan Whistling Duck"
  This release improves upon the VP9 encoder and speeds up the encoding and
  decoding processes.

  - Upgrading:
    This release is ABI incompatible with 1.4.0. It drops deprecated VP8
    controls and adds a variety of VP9 controls for testing.

    The vpxenc utility now prefers VP9 by default.

  - Enhancements:
    Faster VP9 encoding and decoding
    Smaller library size by combining functions used by VP8 and VP9

  - Bug Fixes:
    A variety of fuzzing issues

2015-04-03 v1.4.0 "Indian Runner Duck"
  This release includes significant improvements to the VP9 codec.

  - Upgrading:
    This release is ABI incompatible with 1.3.0. It drops the compatibility
    layer, requiring VPX_IMG_FMT_* instead of IMG_FMT_*, and adds several codec
    controls for VP9.

  - Enhancements:
    Faster VP9 encoding and decoding
    Multithreaded VP9 decoding (tile and frame-based)
    Multithreaded VP9 encoding - on by default
    YUV 4:2:2 and 4:4:4 support in VP9
    10 and 12bit support in VP9
    64bit ARM support by replacing ARM assembly with intrinsics

  - Bug Fixes:
    Fixes a VP9 bitstream issue in Profile 1. This only affected non-YUV 4:2:0
    files.

  - Known Issues:
    Frame Parallel decoding fails for segmented and non-420 files.

2013-11-15 v1.3.0 "Forest"
  This release introduces the VP9 codec in a backward-compatible way.
  All existing users of VP8 can continue to use the library without
  modification. However, some VP8 options do not map to VP9 in the same manner.

  The VP9 encoder in this release is not feature complete. Users interested in
  the encoder are advised to use the git master branch and discuss issues on
  libvpx mailing lists.

  - Upgrading:
    This release is ABI and API compatible with Duclair (v1.0.0). Users
    of older releases should refer to the Upgrading notes in this document
    for that release.

  - Enhancements:
      Get rid of bashisms in the main build scripts
      Added usage info on command line options
      Add lossless compression mode
      Dll build of libvpx
      Add additional Mac OS X targets: 10.7, 10.8 and 10.9 (darwin11-13)
      Add option to disable documentation
      configure: add --enable-external-build support
      make: support V=1 as short form of verbose=yes
      configure: support mingw-w64
      configure: support hardfloat armv7 CHOSTS
      configure: add support for android x86
      Add estimated completion time to vpxenc
      Don't exit on decode errors in vpxenc
      vpxenc: support scaling prior to encoding
      vpxdec: support scaling output
      vpxenc: improve progress indicators with --skip
      msvs: Don't link to winmm.lib
      Add a new script for producing vcxproj files
      Produce Visual Studio 10 and 11 project files
      Produce Windows Phone project files
      msvs-build: use msbuild for vs >= 2005
      configure: default configure log to config.log
      Add encoding option --static-thresh

  - Speed:
      Miscellaneous speed optimizations for VP8 and VP9.

  - Quality:
      In general, quality is consistent with the Eider release.

  - Bug Fixes:
      This release represents approximately a year of engineering effort,
      and contains multiple bug fixes. Please refer to git history for details.


2012-12-21 v1.2.0
  This release acts as a checkpoint for a large amount of internal refactoring
  and testing. It also contains a number of small bugfixes, so all users are
  encouraged to upgrade.

  - Upgrading:
    This release is ABI and API compatible with Duclair (v1.0.0). Users
    of older releases should refer to the Upgrading notes in this
    document for that release.

  - Enhancements:
      VP8 optimizations for MIPS dspr2
      vpxenc: add -quiet option

  - Speed:
      Encoder and decoder speed is consistent with the Eider release.

  - Quality:
      In general, quality is consistent with the Eider release.

      Minor tweaks to ARNR filtering
      Minor improvements to real time encoding with multiple temporal layers

  - Bug Fixes:
      Fixes multithreaded encoder race condition in loopfilter
      Fixes multi-resolution threaded encoding
      Fix potential encoder dead-lock after picture resize


2012-05-09 v1.1.0 "Eider"
  This introduces a number of enhancements, mostly focused on real-time
  encoding. In addition, it fixes a decoder bug (first introduced in
  Duclair) so all users of that release are encouraged to upgrade.

  - Upgrading:
    This release is ABI and API compatible with Duclair (v1.0.0). Users
    of older releases should refer to the Upgrading notes in this
    document for that release.

    This release introduces a new temporal denoiser, controlled by the
    VP8E_SET_NOISE_SENSITIVITY control. The temporal denoiser does not
    currently take a strength parameter, so the control is effectively
    a boolean - zero (off) or non-zero (on). For compatibility with
    existing applications, the values accepted are the same as those
    for the spatial denoiser (0-6). The temporal denoiser is enabled
    by default, and the older spatial denoiser may be restored by
    configuring with --disable-temporal-denoising. The temporal denoiser
    is more computationally intensive than the spatial one.

    This release removes support for a legacy, decode only API that was
    supported, but deprecated, at the initial release of libvpx
    (v0.9.0). This is not expected to have any impact. If you are
    impacted, you can apply a reversion to commit 2bf8fb58 locally.
    Please update to the latest libvpx API if you are affected.

  - Enhancements:
      Adds a motion compensated temporal denoiser to the encoder, which
      gives higher quality than the older spatial denoiser. (See above
      for notes on upgrading).

      In addition, support for new compilers and platforms were added,
      including:
        improved support for XCode
        Android x86 NDK build
        OS/2 support
        SunCC support

      Changing resolution with vpx_codec_enc_config_set() is now
      supported. Previously, reinitializing the codec was required to
      change the input resolution.

      The vpxenc application has initial support for producing multiple
      encodes from the same input in one call. Resizing is not yet
      supported, but varying other codec parameters is. Use -- to
      delineate output streams. Options persist from one stream to the
      next.

      Also, the vpxenc application will now use a keyframe interval of
      5 seconds by default. Use the --kf-max-dist option to override.

  - Speed:
      Decoder performance improved 2.5% versus Duclair. Encoder speed is
      consistent with Duclair for most material. Two pass encoding of
      slideshow-like material will see significant improvements.

      Large realtime encoding speed gains at a small quality expense are
      possible by configuring the on-the-fly bitpacking experiment with
      --enable-onthefly-bitpacking. Realtime encoder can be up to 13%
      faster (ARM) depending on the number of threads and bitrate
      settings. This technique sees constant gain over the 5-16 speed
      range. For VC style input the loss seen is up to 0.2dB. See commit
      52cf4dca for further details.

  - Quality:
      On the whole, quality is consistent with the Duclair release. Some
      tweaks:

        Reduced blockiness in easy sections by applying a penalty to
        intra modes.

        Improved quality of static sections (like slideshows) with
        two pass encoding.

        Improved keyframe sizing with multiple temporal layers

  - Bug Fixes:
      Corrected alt-ref contribution to frame rate for visible updates
      to the alt-ref buffer. This affected applications making manual
      usage of the frame reference flags, or temporal layers.

      Additional constraints were added to disable multi-frame quality
      enhancement (MFQE) in sections of the frame where there is motion.
      (#392)

      Fixed corruption issues when vpx_codec_enc_config_set() was called
      with spatial resampling enabled.

      Fixed a decoder error introduced in Duclair where the segmentation
      map was not being reinitialized on keyframes (#378)


2012-01-27 v1.0.0 "Duclair"
  Our fourth named release, focused on performance and features related to
  real-time encoding. It also fixes a decoder crash bug introduced in
  v0.9.7, so all users of that release are encouraged to upgrade.

  - Upgrading:
      This release is ABI incompatible with prior releases of libvpx, so the
      "major" version number has been bumped to 1. You must recompile your
      applications against the latest version of the libvpx headers. The
      API remains compatible, and this should not require code changes in most
      applications.

  - Enhancements:
      This release introduces several substantial new features to the encoder,
      of particular interest to real time streaming applications.

      Temporal scalability allows the encoder to produce a stream that can
      be decimated to different frame rates, with independent rate targetting
      for each substream.

      Multiframe quality enhancement postprocessing can make visual quality
      more consistent in the presence of frames that are substantially
      different quality than the surrounding frames, as in the temporal
      scalability case and in some forced keyframe scenarios.

      Multiple-resolution encoding support allows the encoding of the
      same content at different resolutions faster than encoding them
      separately.

  - Speed:
      Optimization targets for this release included the decoder and the real-
      time modes of the encoder. Decoder speed on x86 has improved 10.5% with
      this release. Encoder improvements followed a curve where speeds 1-3
      improved 4.0%-1.5%, speeds 4-8 improved <1%, and speeds 9-16 improved
      1.5% to 10.5%, respectively. "Best" mode speed is consistent with the
      Cayuga release.

  - Quality:
      Encoder quality in the single stream case is consistent with the Cayuga
      release.

  - Bug Fixes:
      This release fixes an OOB read decoder crash bug present in v0.9.7
      related to the clamping of motion vectors in SPLITMV blocks. This
      behavior could be triggered by corrupt input or by starting
      decoding from a P-frame.


2011-08-15 v0.9.7-p1 "Cayuga" patch 1
  This is an incremental bugfix release against Cayuga. All users of that
  release are strongly encouraged to upgrade.

    - Fix potential OOB reads (cdae03a)

          An unbounded out of bounds read was discovered when the
          decoder was requested to perform error concealment (new in
          Cayuga) given a frame with corrupt partition sizes.

          A bounded out of bounds read was discovered affecting all
          versions of libvpx. Given an multipartition input frame that
          is truncated between the mode/mv partition and the first
          residiual paritition (in the block of partition offsets), up
          to 3 extra bytes could have been read from the source buffer.
          The code will not take any action regardless of the contents
          of these undefined bytes, as the truncated buffer is detected
          immediately following the read based on the calculated
          starting position of the coefficient partition.

    - Fix potential error concealment crash when the very first frame
      is missing or corrupt (a609be5)

    - Fix significant artifacts in error concealment (a4c2211, 99d870a)

    - Revert 1-pass CBR rate control changes (e961317)
      Further testing showed this change produced undesirable visual
      artifacts, rolling back for now.


2011-08-02 v0.9.7 "Cayuga"
  Our third named release, focused on a faster, higher quality, encoder.

  - Upgrading:
    This release is backwards compatible with Aylesbury (v0.9.5) and
    Bali (v0.9.6). Users of older releases should refer to the Upgrading
    notes in this document for that release.

  - Enhancements:
          Stereo 3D format support for vpxenc
          Runtime detection of available processor cores.
          Allow specifying --end-usage by enum name
          vpxdec: test for frame corruption
          vpxenc: add quantizer histogram display
          vpxenc: add rate histogram display
          Set VPX_FRAME_IS_DROPPABLE
          update configure for ios sdk 4.3
          Avoid text relocations in ARM vp8 decoder
          Generate a vpx.pc file for pkg-config.
          New ways of passing encoded data between encoder and decoder.

  - Speed:
      This release includes across-the-board speed improvements to the
      encoder. On x86, these measure at approximately 11.5% in Best mode,
      21.5% in Good mode (speed 0), and 22.5% in Realtime mode (speed 6).
      On ARM Cortex A9 with Neon extensions, real-time encoding of video
      telephony content is 35% faster than Bali on single core and 48%
      faster on multi-core. On the NVidia Tegra2 platform, real time
      encoding is 40% faster than Bali.

      Decoder speed was not a priority for this release, but improved
      approximately 8.4% on x86.

          Reduce motion vector search on alt-ref frame.
          Encoder loopfilter running in its own thread
          Reworked loopfilter to precalculate more parameters
          SSE2/SSSE3 optimizations for build_predictors_mbuv{,_s}().
          Make hor UV predict ~2x faster (73 vs 132 cycles) using SSSE3.
          Removed redundant checks
          Reduced structure sizes
          utilize preload in ARMv6 MC/LPF/Copy routines
          ARM optimized quantization, dfct, variance, subtract
          Increase chrow row alignment to 16 bytes.
          disable trellis optimization for first pass
          Write SSSE3 sub-pixel filter function
          Improve SSE2 half-pixel filter funtions
          Add vp8_sub_pixel_variance16x8_ssse3 function
          Reduce unnecessary distortion computation
          Use diamond search to replace full search
          Preload reference area in sub-pixel motion search (real-time mode)

  - Quality:
      This release focused primarily on one-pass use cases, including
      video conferencing. Low latency data rate control was significantly
      improved, improving streamability over bandwidth constrained links.
      Added support for error concealment, allowing frames to maintain
      visual quality in the presence of substantial packet loss.

          Add rc_max_intra_bitrate_pct control
          Limit size of initial keyframe in one-pass.
          Improve framerate adaptation
          Improved 1-pass CBR rate control
          Improved KF insertion after fades to still.
          Improved key frame detection.
          Improved activity masking (lower PSNR impact for same SSIM boost)
          Improved interaction between GF and ARFs
          Adding error-concealment to the decoder.
          Adding support for independent partitions
          Adjusted rate-distortion constants


  - Bug Fixes:
          Removed firstpass motion map
          Fix parallel make install
          Fix multithreaded encoding for 1 MB wide frame
          Fixed iwalsh_neon build problems with RVDS4.1
          Fix semaphore emulation, spin-wait intrinsics on Windows
          Fix build with xcode4 and simplify GLOBAL.
          Mark ARM asm objects as allowing a non-executable stack.
          Fix vpxenc encoding incorrect webm file header on big endian


2011-03-07 v0.9.6 "Bali"
  Our second named release, focused on a faster, higher quality, encoder.

  - Upgrading:
    This release is backwards compatible with Aylesbury (v0.9.5). Users
    of older releases should refer to the Upgrading notes in this
    document for that release.

  - Enhancements:
      vpxenc --psnr shows a summary when encode completes
      --tune=ssim option to enable activity masking
      improved postproc visualizations for development
      updated support for Apple iOS to SDK 4.2
      query decoder to determine which reference frames were updated
      implemented error tracking in the decoder
      fix pipe support on windows

  - Speed:
      Primary focus was on good quality mode, speed 0. Average improvement
      on x86 about 40%, up to 100% on user-generated content at that speed.
      Best quality mode speed improved 35%, and realtime speed 10-20%. This
      release also saw significant improvement in realtime encoding speed
      on ARM platforms.

        Improved encoder threading
        Dont pick encoder filter level when loopfilter is disabled.
        Avoid double copying of key frames into alt and golden buffer
        FDCT optimizations.
        x86 sse2 temporal filter
        SSSE3 version of fast quantizer
        vp8_rd_pick_best_mbsegmentation code restructure
        Adjusted breakout RD for SPLITMV
        Changed segmentation check order
        Improved rd_pick_intra4x4block
        Adds armv6 optimized variance calculation
        ARMv6 optimized sad16x16
        ARMv6 optimized half pixel variance calculations
        Full search SAD function optimization in SSE4.1
        Improve MV prediction accuracy to achieve performance gain
        Improve MV prediction in vp8_pick_inter_mode() for speed>3

  - Quality:
      Best quality mode improved PSNR 6.3%, and SSIM 6.1%. This release
      also includes support for "activity masking," which greatly improves
      SSIM at the expense of PSNR. For now, this feature is available with
      the --tune=ssim option. Further experimentation in this area
      is ongoing. This release also introduces a new rate control mode
      called "CQ," which changes the allocation of bits within a clip to
      the sections where they will have the most visual impact.

        Tuning for the more exact quantizer.
        Relax rate control for last few frames
        CQ Mode
        Limit key frame quantizer for forced key frames.
        KF/GF Pulsing
        Add simple version of activity masking.
        make rdmult adaptive for intra in quantizer RDO
        cap the best quantizer for 2nd order DC
        change the threshold of DC check for encode breakout

  - Bug Fixes:
      Fix crash on Sparc Solaris.
      Fix counter of fixed keyframe distance
      ARNR filter pointer update bug fix
      Fixed use of motion percentage in KF/GF group calc
      Changed condition for using RD in Intra Mode
      Fix encoder real-time only configuration.
      Fix ARM encoder crash with multiple token partitions
      Fixed bug first cluster timecode of webm file is wrong.
      Fixed various encoder bugs with odd-sized images
      vp8e_get_preview fixed when spatial resampling enabled
      quantizer: fix assertion in fast quantizer path
      Allocate source buffers to be multiples of 16
      Fix for manual Golden frame frequency
      Fix drastic undershoot in long form content


2010-10-28 v0.9.5 "Aylesbury"
  Our first named release, focused on a faster decoder, and a better encoder.

  - Upgrading:
    This release incorporates backwards-incompatible changes to the
    ivfenc and ivfdec tools. These tools are now called vpxenc and vpxdec.

    vpxdec
      * the -q (quiet) option has been removed, and replaced with
        -v (verbose). the output is quiet by default. Use -v to see
        the version number of the binary.

      * The default behavior is now to write output to a single file
        instead of individual frames. The -y option has been removed.
        Y4M output is the default.

      * For raw I420/YV12 output instead of Y4M, the --i420 or --yv12
        options must be specified.

          $ ivfdec -o OUTPUT INPUT
          $ vpxdec --i420 -o OUTPUT INPUT

      * If an output file is not specified, the default is to write
        Y4M to stdout. This makes piping more natural.

          $ ivfdec -y -o - INPUT | ...
          $ vpxdec INPUT | ...

      * The output file has additional flexibility for formatting the
        filename. It supports escape characters for constructing a
        filename from the width, height, and sequence number. This
        replaces the -p option. To get the equivalent:

          $ ivfdec -p frame INPUT
          $ vpxdec --i420 -o frame-%wx%h-%4.i420 INPUT

    vpxenc
      * The output file must be specified with -o, rather than as the
        last argument.

          $ ivfenc <options> INPUT OUTPUT
          $ vpxenc <options> -o OUTPUT INPUT

      * The output defaults to webm. To get IVF output, use the --ivf
        option.

          $ ivfenc <options> INPUT OUTPUT.ivf
          $ vpxenc <options> -o OUTPUT.ivf --ivf INPUT


  - Enhancements:
      ivfenc and ivfdec have been renamed to vpxenc, vpxdec.
      vpxdec supports .webm input
      vpxdec writes .y4m by default
      vpxenc writes .webm output by default
      vpxenc --psnr now shows the average/overall PSNR at the end
      ARM platforms now support runtime cpu detection
      vpxdec visualizations added for motion vectors, block modes, references
      vpxdec now silent by default
      vpxdec --progress shows frame-by-frame timing information
      vpxenc supports the distinction between --fps and --timebase
      NASM is now a supported assembler
      configure: enable PIC for shared libs by default
      configure: add --enable-small
      configure: support for ppc32-linux-gcc
      configure: support for sparc-solaris-gcc

  - Bugs:
      Improve handling of invalid frames
      Fix valgrind errors in the NEON loop filters.
      Fix loopfilter delta zero transitions
      Fix valgrind errors in vp8_sixtap_predict8x4_armv6().
      Build fixes for darwin-icc

  - Speed:
      20-40% (average 28%) improvement in libvpx decoder speed,
      including:
        Rewrite vp8_short_walsh4x4_sse2()
        Optimizations on the loopfilters.
        Miscellaneous improvements for Atom
        Add 4-tap version of 2nd-pass ARMv6 MC filter.
        Improved multithread utilization
        Better instruction choices on x86
        reorder data to use wider instructions
        Update NEON wide idcts
        Make block access to frame buffer sequential
        Improved subset block search
        Bilinear subpixel optimizations for ssse3.
        Decrease memory footprint

      Encoder speed improvements (percentage gain not measured):
        Skip unnecessary search of identical frames
        Add SSE2 subtract functions
        Improve bounds checking in vp8_diamond_search_sadx4()
        Added vp8_fast_quantize_b_sse2

  - Quality:
      Over 7% overall PSNR improvement (6.3% SSIM) in "best" quality
      encoding mode, and up to 60% improvement on very noisy, still
      or slow moving source video

        Motion compensated temporal filter for Alt-Ref Noise Reduction
        Improved use of trellis quantization on 2nd order Y blocks
        Tune effect of motion on KF/GF boost in two pass
        Allow coefficient optimization for good quality speed 0.
        Improved control of active min quantizer for two pass.
        Enable ARFs for non-lagged compress

2010-09-02 v0.9.2
  - Enhancements:
      Disable frame dropping by default
      Improved multithreaded performance
      Improved Force Key Frame Behaviour
      Increased rate control buffer level precision
      Fix bug in 1st pass motion compensation
      ivfenc: correct fixed kf interval, --disable-kf
  - Speed:
      Changed above and left context data layout
      Rework idct calling structure.
      Removed unnecessary MB_MODE_INFO copies
      x86: SSSE3 sixtap prediction
      Reworked IDCT to include reconstruction (add) step
      Swap alt/gold/new/last frame buffer ptrs instead of copying.
      Improve SSE2 loopfilter functions
      Change bitreader to use a larger window.
      Avoid loopfilter reinitialization when possible
  - Quality:
      Normalize quantizer's zero bin and rounding factors
      Add trellis quantization.
      Make the quantizer exact.
      Updates to ARNR filtering algorithm
      Fix breakout thresh computation for golden & AltRef frames
      Redo the forward 4x4 dct
      Improve the accuracy of forward walsh-hadamard transform
      Further adjustment of RD behaviour with Q and Zbin.
  - Build System:
      Allow linking of libs built with MinGW to MSVC
      Fix target auto-detection on mingw32
      Allow --cpu= to work for x86.
      configure: pass original arguments through to make dist
      Fix builds without runtime CPU detection
      msvs: fix install of codec sources
      msvs: Change devenv.com command line for better msys support
      msvs: Add vs9 targets.
      Add x86_64-linux-icc target
  - Bugs:
      Potential crashes on older MinGW builds
      Fix two-pass framrate for Y4M input.
      Fixed simple loop filter, other crashes on ARM v6
      arm: fix missing dependency with --enable-shared
      configure: support directories containing .o
      Replace pinsrw (SSE) with MMX instructions
      apple: include proper mach primatives
      Fixed rate control bug with long key frame interval.
      Fix DSO link errors on x86-64 when not using a version script
      Fixed buffer selection for UV in AltRef filtering


2010-06-17 v0.9.1
  - Enhancements:
      * ivfenc/ivfdec now support YUV4MPEG2 input and pipe I/O
      * Speed optimizations
  - Bugfixes:
      * Rate control
      * Prevent out-of-bounds accesses on invalid data
  - Build system updates:
      * Detect toolchain to be used automatically for native builds
      * Support building shared libraries
      * Better autotools emulation (--prefix, --libdir, DESTDIR)
  - Updated LICENSE
      * http://webmproject.blogspot.com/2010/06/changes-to-webm-open-source-license.html


2010-05-18 v0.9.0
  - Initial open source release. Welcome to WebM and VP8!

