Merge "mips msa vp9 intra-pred optimization"
[platform/upstream/libvpx.git] / CHANGELOG
1 xxxx-yy-zz v1.4.0 "Changes for next release"
2   vpxenc is changed to use VP9 by default.
3   Encoder controls added for 1 pass SVC.
4   Decoder control to toggle on/off loopfilter.
5
6 2015-04-03 v1.4.0 "Indian Runner Duck"
7   This release includes significant improvements to the VP9 codec.
8
9   - Upgrading:
10     This release is ABI incompatible with 1.3.0. It drops the compatibility
11     layer, requiring VPX_IMG_FMT_* instead of IMG_FMT_*, and adds several codec
12     controls for VP9.
13
14   - Enhancements:
15     Faster VP9 encoding and decoding
16     Multithreaded VP9 decoding (tile and frame-based)
17     Multithreaded VP9 encoding - on by default
18     YUV 4:2:2 and 4:4:4 support in VP9
19     10 and 12bit support in VP9
20     64bit ARM support by replacing ARM assembly with intrinsics
21
22   - Bug Fixes:
23     Fixes a VP9 bitstream issue in Profile 1. This only affected non-YUV 4:2:0
24     files.
25
26   - Known Issues:
27     Frame Parallel decoding fails for segmented and non-420 files.
28
29 2013-11-15 v1.3.0 "Forest"
30   This release introduces the VP9 codec in a backward-compatible way.
31   All existing users of VP8 can continue to use the library without
32   modification. However, some VP8 options do not map to VP9 in the same manner.
33
34   The VP9 encoder in this release is not feature complete. Users interested in
35   the encoder are advised to use the git master branch and discuss issues on
36   libvpx mailing lists.
37
38   - Upgrading:
39     This release is ABI and API compatible with Duclair (v1.0.0). Users
40     of older releases should refer to the Upgrading notes in this document
41     for that release.
42
43   - Enhancements:
44       Get rid of bashisms in the main build scripts
45       Added usage info on command line options
46       Add lossless compression mode
47       Dll build of libvpx
48       Add additional Mac OS X targets: 10.7, 10.8 and 10.9 (darwin11-13)
49       Add option to disable documentation
50       configure: add --enable-external-build support
51       make: support V=1 as short form of verbose=yes
52       configure: support mingw-w64
53       configure: support hardfloat armv7 CHOSTS
54       configure: add support for android x86
55       Add estimated completion time to vpxenc
56       Don't exit on decode errors in vpxenc
57       vpxenc: support scaling prior to encoding
58       vpxdec: support scaling output
59       vpxenc: improve progress indicators with --skip
60       msvs: Don't link to winmm.lib
61       Add a new script for producing vcxproj files
62       Produce Visual Studio 10 and 11 project files
63       Produce Windows Phone project files
64       msvs-build: use msbuild for vs >= 2005
65       configure: default configure log to config.log
66       Add encoding option --static-thresh
67
68   - Speed:
69       Miscellaneous speed optimizations for VP8 and VP9.
70
71   - Quality:
72       In general, quality is consistent with the Eider release.
73
74   - Bug Fixes:
75       This release represents approximately a year of engineering effort,
76       and contains multiple bug fixes. Please refer to git history for details.
77
78
79 2012-12-21 v1.2.0
80   This release acts as a checkpoint for a large amount of internal refactoring
81   and testing. It also contains a number of small bugfixes, so all users are
82   encouraged to upgrade.
83
84   - Upgrading:
85     This release is ABI and API compatible with Duclair (v1.0.0). Users
86     of older releases should refer to the Upgrading notes in this
87     document for that release.
88
89   - Enhancements:
90       VP8 optimizations for MIPS dspr2
91       vpxenc: add -quiet option
92
93   - Speed:
94       Encoder and decoder speed is consistent with the Eider release.
95
96   - Quality:
97       In general, quality is consistent with the Eider release.
98
99       Minor tweaks to ARNR filtering
100       Minor improvements to real time encoding with multiple temporal layers
101
102   - Bug Fixes:
103       Fixes multithreaded encoder race condition in loopfilter
104       Fixes multi-resolution threaded encoding
105       Fix potential encoder dead-lock after picture resize
106
107
108 2012-05-09 v1.1.0 "Eider"
109   This introduces a number of enhancements, mostly focused on real-time
110   encoding. In addition, it fixes a decoder bug (first introduced in
111   Duclair) so all users of that release are encouraged to upgrade.
112
113   - Upgrading:
114     This release is ABI and API compatible with Duclair (v1.0.0). Users
115     of older releases should refer to the Upgrading notes in this
116     document for that release.
117
118     This release introduces a new temporal denoiser, controlled by the
119     VP8E_SET_NOISE_SENSITIVITY control. The temporal denoiser does not
120     currently take a strength parameter, so the control is effectively
121     a boolean - zero (off) or non-zero (on). For compatibility with
122     existing applications, the values accepted are the same as those
123     for the spatial denoiser (0-6). The temporal denoiser is enabled
124     by default, and the older spatial denoiser may be restored by
125     configuring with --disable-temporal-denoising. The temporal denoiser
126     is more computationally intensive than the spatial one.
127
128     This release removes support for a legacy, decode only API that was
129     supported, but deprecated, at the initial release of libvpx
130     (v0.9.0). This is not expected to have any impact. If you are
131     impacted, you can apply a reversion to commit 2bf8fb58 locally.
132     Please update to the latest libvpx API if you are affected.
133
134   - Enhancements:
135       Adds a motion compensated temporal denoiser to the encoder, which
136       gives higher quality than the older spatial denoiser. (See above
137       for notes on upgrading).
138
139       In addition, support for new compilers and platforms were added,
140       including:
141         improved support for XCode
142         Android x86 NDK build
143         OS/2 support
144         SunCC support
145
146       Changing resolution with vpx_codec_enc_config_set() is now
147       supported. Previously, reinitializing the codec was required to
148       change the input resolution.
149
150       The vpxenc application has initial support for producing multiple
151       encodes from the same input in one call. Resizing is not yet
152       supported, but varying other codec parameters is. Use -- to
153       delineate output streams. Options persist from one stream to the
154       next.
155
156       Also, the vpxenc application will now use a keyframe interval of
157       5 seconds by default. Use the --kf-max-dist option to override.
158
159   - Speed:
160       Decoder performance improved 2.5% versus Duclair. Encoder speed is
161       consistent with Duclair for most material. Two pass encoding of
162       slideshow-like material will see significant improvements.
163
164       Large realtime encoding speed gains at a small quality expense are
165       possible by configuring the on-the-fly bitpacking experiment with
166       --enable-onthefly-bitpacking. Realtime encoder can be up to 13%
167       faster (ARM) depending on the number of threads and bitrate
168       settings. This technique sees constant gain over the 5-16 speed
169       range. For VC style input the loss seen is up to 0.2dB. See commit
170       52cf4dca for further details.
171
172   - Quality:
173       On the whole, quality is consistent with the Duclair release. Some
174       tweaks:
175
176         Reduced blockiness in easy sections by applying a penalty to
177         intra modes.
178
179         Improved quality of static sections (like slideshows) with
180         two pass encoding.
181
182         Improved keyframe sizing with multiple temporal layers
183
184   - Bug Fixes:
185       Corrected alt-ref contribution to frame rate for visible updates
186       to the alt-ref buffer. This affected applications making manual
187       usage of the frame reference flags, or temporal layers.
188
189       Additional constraints were added to disable multi-frame quality
190       enhancement (MFQE) in sections of the frame where there is motion.
191       (#392)
192
193       Fixed corruption issues when vpx_codec_enc_config_set() was called
194       with spatial resampling enabled.
195
196       Fixed a decoder error introduced in Duclair where the segmentation
197       map was not being reinitialized on keyframes (#378)
198
199
200 2012-01-27 v1.0.0 "Duclair"
201   Our fourth named release, focused on performance and features related to
202   real-time encoding. It also fixes a decoder crash bug introduced in
203   v0.9.7, so all users of that release are encouraged to upgrade.
204
205   - Upgrading:
206       This release is ABI incompatible with prior releases of libvpx, so the
207       "major" version number has been bumped to 1. You must recompile your
208       applications against the latest version of the libvpx headers. The
209       API remains compatible, and this should not require code changes in most
210       applications.
211
212   - Enhancements:
213       This release introduces several substantial new features to the encoder,
214       of particular interest to real time streaming applications.
215
216       Temporal scalability allows the encoder to produce a stream that can
217       be decimated to different frame rates, with independent rate targetting
218       for each substream.
219
220       Multiframe quality enhancement postprocessing can make visual quality
221       more consistent in the presence of frames that are substantially
222       different quality than the surrounding frames, as in the temporal
223       scalability case and in some forced keyframe scenarios.
224
225       Multiple-resolution encoding support allows the encoding of the
226       same content at different resolutions faster than encoding them
227       separately.
228
229   - Speed:
230       Optimization targets for this release included the decoder and the real-
231       time modes of the encoder. Decoder speed on x86 has improved 10.5% with
232       this release. Encoder improvements followed a curve where speeds 1-3
233       improved 4.0%-1.5%, speeds 4-8 improved <1%, and speeds 9-16 improved
234       1.5% to 10.5%, respectively. "Best" mode speed is consistent with the
235       Cayuga release.
236
237   - Quality:
238       Encoder quality in the single stream case is consistent with the Cayuga
239       release.
240
241   - Bug Fixes:
242       This release fixes an OOB read decoder crash bug present in v0.9.7
243       related to the clamping of motion vectors in SPLITMV blocks. This
244       behavior could be triggered by corrupt input or by starting
245       decoding from a P-frame.
246
247
248 2011-08-15 v0.9.7-p1 "Cayuga" patch 1
249   This is an incremental bugfix release against Cayuga. All users of that
250   release are strongly encouraged to upgrade.
251
252     - Fix potential OOB reads (cdae03a)
253
254           An unbounded out of bounds read was discovered when the
255           decoder was requested to perform error concealment (new in
256           Cayuga) given a frame with corrupt partition sizes.
257
258           A bounded out of bounds read was discovered affecting all
259           versions of libvpx. Given an multipartition input frame that
260           is truncated between the mode/mv partition and the first
261           residiual paritition (in the block of partition offsets), up
262           to 3 extra bytes could have been read from the source buffer.
263           The code will not take any action regardless of the contents
264           of these undefined bytes, as the truncated buffer is detected
265           immediately following the read based on the calculated
266           starting position of the coefficient partition.
267
268     - Fix potential error concealment crash when the very first frame
269       is missing or corrupt (a609be5)
270
271     - Fix significant artifacts in error concealment (a4c2211, 99d870a)
272
273     - Revert 1-pass CBR rate control changes (e961317)
274       Further testing showed this change produced undesirable visual
275       artifacts, rolling back for now.
276
277
278 2011-08-02 v0.9.7 "Cayuga"
279   Our third named release, focused on a faster, higher quality, encoder.
280
281   - Upgrading:
282     This release is backwards compatible with Aylesbury (v0.9.5) and
283     Bali (v0.9.6). Users of older releases should refer to the Upgrading
284     notes in this document for that release.
285
286   - Enhancements:
287           Stereo 3D format support for vpxenc
288           Runtime detection of available processor cores.
289           Allow specifying --end-usage by enum name
290           vpxdec: test for frame corruption
291           vpxenc: add quantizer histogram display
292           vpxenc: add rate histogram display
293           Set VPX_FRAME_IS_DROPPABLE
294           update configure for ios sdk 4.3
295           Avoid text relocations in ARM vp8 decoder
296           Generate a vpx.pc file for pkg-config.
297           New ways of passing encoded data between encoder and decoder.
298
299   - Speed:
300       This release includes across-the-board speed improvements to the
301       encoder. On x86, these measure at approximately 11.5% in Best mode,
302       21.5% in Good mode (speed 0), and 22.5% in Realtime mode (speed 6).
303       On ARM Cortex A9 with Neon extensions, real-time encoding of video
304       telephony content is 35% faster than Bali on single core and 48%
305       faster on multi-core. On the NVidia Tegra2 platform, real time
306       encoding is 40% faster than Bali.
307
308       Decoder speed was not a priority for this release, but improved
309       approximately 8.4% on x86.
310
311           Reduce motion vector search on alt-ref frame.
312           Encoder loopfilter running in its own thread
313           Reworked loopfilter to precalculate more parameters
314           SSE2/SSSE3 optimizations for build_predictors_mbuv{,_s}().
315           Make hor UV predict ~2x faster (73 vs 132 cycles) using SSSE3.
316           Removed redundant checks
317           Reduced structure sizes
318           utilize preload in ARMv6 MC/LPF/Copy routines
319           ARM optimized quantization, dfct, variance, subtract
320           Increase chrow row alignment to 16 bytes.
321           disable trellis optimization for first pass
322           Write SSSE3 sub-pixel filter function
323           Improve SSE2 half-pixel filter funtions
324           Add vp8_sub_pixel_variance16x8_ssse3 function
325           Reduce unnecessary distortion computation
326           Use diamond search to replace full search
327           Preload reference area in sub-pixel motion search (real-time mode)
328
329   - Quality:
330       This release focused primarily on one-pass use cases, including
331       video conferencing. Low latency data rate control was significantly
332       improved, improving streamability over bandwidth constrained links.
333       Added support for error concealment, allowing frames to maintain
334       visual quality in the presence of substantial packet loss.
335
336           Add rc_max_intra_bitrate_pct control
337           Limit size of initial keyframe in one-pass.
338           Improve framerate adaptation
339           Improved 1-pass CBR rate control
340           Improved KF insertion after fades to still.
341           Improved key frame detection.
342           Improved activity masking (lower PSNR impact for same SSIM boost)
343           Improved interaction between GF and ARFs
344           Adding error-concealment to the decoder.
345           Adding support for independent partitions
346           Adjusted rate-distortion constants
347
348
349   - Bug Fixes:
350           Removed firstpass motion map
351           Fix parallel make install
352           Fix multithreaded encoding for 1 MB wide frame
353           Fixed iwalsh_neon build problems with RVDS4.1
354           Fix semaphore emulation, spin-wait intrinsics on Windows
355           Fix build with xcode4 and simplify GLOBAL.
356           Mark ARM asm objects as allowing a non-executable stack.
357           Fix vpxenc encoding incorrect webm file header on big endian
358
359
360 2011-03-07 v0.9.6 "Bali"
361   Our second named release, focused on a faster, higher quality, encoder.
362
363   - Upgrading:
364     This release is backwards compatible with Aylesbury (v0.9.5). Users
365     of older releases should refer to the Upgrading notes in this
366     document for that release.
367
368   - Enhancements:
369       vpxenc --psnr shows a summary when encode completes
370       --tune=ssim option to enable activity masking
371       improved postproc visualizations for development
372       updated support for Apple iOS to SDK 4.2
373       query decoder to determine which reference frames were updated
374       implemented error tracking in the decoder
375       fix pipe support on windows
376
377   - Speed:
378       Primary focus was on good quality mode, speed 0. Average improvement
379       on x86 about 40%, up to 100% on user-generated content at that speed.
380       Best quality mode speed improved 35%, and realtime speed 10-20%. This
381       release also saw significant improvement in realtime encoding speed
382       on ARM platforms.
383
384         Improved encoder threading
385         Dont pick encoder filter level when loopfilter is disabled.
386         Avoid double copying of key frames into alt and golden buffer
387         FDCT optimizations.
388         x86 sse2 temporal filter
389         SSSE3 version of fast quantizer
390         vp8_rd_pick_best_mbsegmentation code restructure
391         Adjusted breakout RD for SPLITMV
392         Changed segmentation check order
393         Improved rd_pick_intra4x4block
394         Adds armv6 optimized variance calculation
395         ARMv6 optimized sad16x16
396         ARMv6 optimized half pixel variance calculations
397         Full search SAD function optimization in SSE4.1
398         Improve MV prediction accuracy to achieve performance gain
399         Improve MV prediction in vp8_pick_inter_mode() for speed>3
400
401   - Quality:
402       Best quality mode improved PSNR 6.3%, and SSIM 6.1%. This release
403       also includes support for "activity masking," which greatly improves
404       SSIM at the expense of PSNR. For now, this feature is available with
405       the --tune=ssim option. Further experimentation in this area
406       is ongoing. This release also introduces a new rate control mode
407       called "CQ," which changes the allocation of bits within a clip to
408       the sections where they will have the most visual impact.
409
410         Tuning for the more exact quantizer.
411         Relax rate control for last few frames
412         CQ Mode
413         Limit key frame quantizer for forced key frames.
414         KF/GF Pulsing
415         Add simple version of activity masking.
416         make rdmult adaptive for intra in quantizer RDO
417         cap the best quantizer for 2nd order DC
418         change the threshold of DC check for encode breakout
419
420   - Bug Fixes:
421       Fix crash on Sparc Solaris.
422       Fix counter of fixed keyframe distance
423       ARNR filter pointer update bug fix
424       Fixed use of motion percentage in KF/GF group calc
425       Changed condition for using RD in Intra Mode
426       Fix encoder real-time only configuration.
427       Fix ARM encoder crash with multiple token partitions
428       Fixed bug first cluster timecode of webm file is wrong.
429       Fixed various encoder bugs with odd-sized images
430       vp8e_get_preview fixed when spatial resampling enabled
431       quantizer: fix assertion in fast quantizer path
432       Allocate source buffers to be multiples of 16
433       Fix for manual Golden frame frequency
434       Fix drastic undershoot in long form content
435
436
437 2010-10-28 v0.9.5 "Aylesbury"
438   Our first named release, focused on a faster decoder, and a better encoder.
439
440   - Upgrading:
441     This release incorporates backwards-incompatible changes to the
442     ivfenc and ivfdec tools. These tools are now called vpxenc and vpxdec.
443
444     vpxdec
445       * the -q (quiet) option has been removed, and replaced with
446         -v (verbose). the output is quiet by default. Use -v to see
447         the version number of the binary.
448
449       * The default behavior is now to write output to a single file
450         instead of individual frames. The -y option has been removed.
451         Y4M output is the default.
452
453       * For raw I420/YV12 output instead of Y4M, the --i420 or --yv12
454         options must be specified.
455
456           $ ivfdec -o OUTPUT INPUT
457           $ vpxdec --i420 -o OUTPUT INPUT
458
459       * If an output file is not specified, the default is to write
460         Y4M to stdout. This makes piping more natural.
461
462           $ ivfdec -y -o - INPUT | ...
463           $ vpxdec INPUT | ...
464
465       * The output file has additional flexibility for formatting the
466         filename. It supports escape characters for constructing a
467         filename from the width, height, and sequence number. This
468         replaces the -p option. To get the equivalent:
469
470           $ ivfdec -p frame INPUT
471           $ vpxdec --i420 -o frame-%wx%h-%4.i420 INPUT
472
473     vpxenc
474       * The output file must be specified with -o, rather than as the
475         last argument.
476
477           $ ivfenc <options> INPUT OUTPUT
478           $ vpxenc <options> -o OUTPUT INPUT
479
480       * The output defaults to webm. To get IVF output, use the --ivf
481         option.
482
483           $ ivfenc <options> INPUT OUTPUT.ivf
484           $ vpxenc <options> -o OUTPUT.ivf --ivf INPUT
485
486
487   - Enhancements:
488       ivfenc and ivfdec have been renamed to vpxenc, vpxdec.
489       vpxdec supports .webm input
490       vpxdec writes .y4m by default
491       vpxenc writes .webm output by default
492       vpxenc --psnr now shows the average/overall PSNR at the end
493       ARM platforms now support runtime cpu detection
494       vpxdec visualizations added for motion vectors, block modes, references
495       vpxdec now silent by default
496       vpxdec --progress shows frame-by-frame timing information
497       vpxenc supports the distinction between --fps and --timebase
498       NASM is now a supported assembler
499       configure: enable PIC for shared libs by default
500       configure: add --enable-small
501       configure: support for ppc32-linux-gcc
502       configure: support for sparc-solaris-gcc
503
504   - Bugs:
505       Improve handling of invalid frames
506       Fix valgrind errors in the NEON loop filters.
507       Fix loopfilter delta zero transitions
508       Fix valgrind errors in vp8_sixtap_predict8x4_armv6().
509       Build fixes for darwin-icc
510
511   - Speed:
512       20-40% (average 28%) improvement in libvpx decoder speed,
513       including:
514         Rewrite vp8_short_walsh4x4_sse2()
515         Optimizations on the loopfilters.
516         Miscellaneous improvements for Atom
517         Add 4-tap version of 2nd-pass ARMv6 MC filter.
518         Improved multithread utilization
519         Better instruction choices on x86
520         reorder data to use wider instructions
521         Update NEON wide idcts
522         Make block access to frame buffer sequential
523         Improved subset block search
524         Bilinear subpixel optimizations for ssse3.
525         Decrease memory footprint
526
527       Encoder speed improvements (percentage gain not measured):
528         Skip unnecessary search of identical frames
529         Add SSE2 subtract functions
530         Improve bounds checking in vp8_diamond_search_sadx4()
531         Added vp8_fast_quantize_b_sse2
532
533   - Quality:
534       Over 7% overall PSNR improvement (6.3% SSIM) in "best" quality
535       encoding mode, and up to 60% improvement on very noisy, still
536       or slow moving source video
537
538         Motion compensated temporal filter for Alt-Ref Noise Reduction
539         Improved use of trellis quantization on 2nd order Y blocks
540         Tune effect of motion on KF/GF boost in two pass
541         Allow coefficient optimization for good quality speed 0.
542         Improved control of active min quantizer for two pass.
543         Enable ARFs for non-lagged compress
544
545 2010-09-02 v0.9.2
546   - Enhancements:
547       Disable frame dropping by default
548       Improved multithreaded performance
549       Improved Force Key Frame Behaviour
550       Increased rate control buffer level precision
551       Fix bug in 1st pass motion compensation
552       ivfenc: correct fixed kf interval, --disable-kf
553   - Speed:
554       Changed above and left context data layout
555       Rework idct calling structure.
556       Removed unnecessary MB_MODE_INFO copies
557       x86: SSSE3 sixtap prediction
558       Reworked IDCT to include reconstruction (add) step
559       Swap alt/gold/new/last frame buffer ptrs instead of copying.
560       Improve SSE2 loopfilter functions
561       Change bitreader to use a larger window.
562       Avoid loopfilter reinitialization when possible
563   - Quality:
564       Normalize quantizer's zero bin and rounding factors
565       Add trellis quantization.
566       Make the quantizer exact.
567       Updates to ARNR filtering algorithm
568       Fix breakout thresh computation for golden & AltRef frames
569       Redo the forward 4x4 dct
570       Improve the accuracy of forward walsh-hadamard transform
571       Further adjustment of RD behaviour with Q and Zbin.
572   - Build System:
573       Allow linking of libs built with MinGW to MSVC
574       Fix target auto-detection on mingw32
575       Allow --cpu= to work for x86.
576       configure: pass original arguments through to make dist
577       Fix builds without runtime CPU detection
578       msvs: fix install of codec sources
579       msvs: Change devenv.com command line for better msys support
580       msvs: Add vs9 targets.
581       Add x86_64-linux-icc target
582   - Bugs:
583       Potential crashes on older MinGW builds
584       Fix two-pass framrate for Y4M input.
585       Fixed simple loop filter, other crashes on ARM v6
586       arm: fix missing dependency with --enable-shared
587       configure: support directories containing .o
588       Replace pinsrw (SSE) with MMX instructions
589       apple: include proper mach primatives
590       Fixed rate control bug with long key frame interval.
591       Fix DSO link errors on x86-64 when not using a version script
592       Fixed buffer selection for UV in AltRef filtering
593
594
595 2010-06-17 v0.9.1
596   - Enhancements:
597       * ivfenc/ivfdec now support YUV4MPEG2 input and pipe I/O
598       * Speed optimizations
599   - Bugfixes:
600       * Rate control
601       * Prevent out-of-bounds accesses on invalid data
602   - Build system updates:
603       * Detect toolchain to be used automatically for native builds
604       * Support building shared libraries
605       * Better autotools emulation (--prefix, --libdir, DESTDIR)
606   - Updated LICENSE
607       * http://webmproject.blogspot.com/2010/06/changes-to-webm-open-source-license.html
608
609
610 2010-05-18 v0.9.0
611   - Initial open source release. Welcome to WebM and VP8!
612