Merge "Improved uv mv calculations in build inter predictor"
[profile/ivi/libvpx.git] / CHANGELOG
1 2012-01-27 v1.0.0 "Duclair"
2   Our fourth named release, focused on performance and features related to
3   real-time encoding. It also fixes a decoder crash bug introduced in
4   v0.9.7, so all users of that release are encouraged to upgrade.
5
6   - Upgrading:
7       This release is ABI incompatible with prior releases of libvpx, so the
8       "major" version number has been bumped to 1. You must recompile your
9       applications against the latest version of the libvpx headers. The
10       API remains compatible, and this should not require code changes in most
11       applications.
12
13   - Enhancements:
14       This release introduces several substantial new features to the encoder,
15       of particular interest to real time streaming applications.
16
17       Temporal scalability allows the encoder to produce a stream that can
18       be decimated to different frame rates, with independent rate targetting
19       for each substream.
20
21       Multiframe quality enhancement postprocessing can make visual quality
22       more consistent in the presence of frames that are substantially
23       different quality than the surrounding frames, as in the temporal
24       scalability case and in some forced keyframe scenarios.
25
26       Multiple-resolution encoding support allows the encoding of the
27       same content at different resolutions faster than encoding them
28       separately.
29
30   - Speed:
31       Optimization targets for this release included the decoder and the real-
32       time modes of the encoder. Decoder speed on x86 has improved 10.5% with
33       this release. Encoder improvements followed a curve where speeds 1-3
34       improved 4.0%-1.5%, speeds 4-8 improved <1%, and speeds 9-16 improved
35       1.5% to 10.5%, respectively. "Best" mode speed is consistent with the
36       Cayuga release.
37
38   - Quality:
39       Encoder quality in the single stream case is consistent with the Cayuga
40       release.
41
42   - Bug Fixes:
43       This release fixes an OOB read decoder crash bug present in v0.9.7
44       related to the clamping of motion vectors in SPLITMV blocks. This
45       behavior could be triggered by corrupt input or by starting
46       decoding from a P-frame.
47
48
49 2011-08-15 v0.9.7-p1 "Cayuga" patch 1
50   This is an incremental bugfix release against Cayuga. All users of that
51   release are strongly encouraged to upgrade.
52
53     - Fix potential OOB reads (cdae03a)
54
55           An unbounded out of bounds read was discovered when the
56           decoder was requested to perform error concealment (new in
57           Cayuga) given a frame with corrupt partition sizes.
58
59           A bounded out of bounds read was discovered affecting all
60           versions of libvpx. Given an multipartition input frame that
61           is truncated between the mode/mv partition and the first
62           residiual paritition (in the block of partition offsets), up
63           to 3 extra bytes could have been read from the source buffer.
64           The code will not take any action regardless of the contents
65           of these undefined bytes, as the truncated buffer is detected
66           immediately following the read based on the calculated
67           starting position of the coefficient partition.
68
69     - Fix potential error concealment crash when the very first frame
70       is missing or corrupt (a609be5)
71
72     - Fix significant artifacts in error concealment (a4c2211, 99d870a)
73
74     - Revert 1-pass CBR rate control changes (e961317)
75       Further testing showed this change produced undesirable visual
76       artifacts, rolling back for now.
77
78
79 2011-08-02 v0.9.7 "Cayuga"
80   Our third named release, focused on a faster, higher quality, encoder.
81
82   - Upgrading:
83     This release is backwards compatible with Aylesbury (v0.9.5) and
84     Bali (v0.9.6). Users of older releases should refer to the Upgrading
85     notes in this document for that release.
86
87   - Enhancements:
88           Stereo 3D format support for vpxenc
89           Runtime detection of available processor cores.
90           Allow specifying --end-usage by enum name
91           vpxdec: test for frame corruption
92           vpxenc: add quantizer histogram display
93           vpxenc: add rate histogram display
94           Set VPX_FRAME_IS_DROPPABLE
95           update configure for ios sdk 4.3
96           Avoid text relocations in ARM vp8 decoder
97           Generate a vpx.pc file for pkg-config.
98           New ways of passing encoded data between encoder and decoder.
99
100   - Speed:
101       This release includes across-the-board speed improvements to the
102       encoder. On x86, these measure at approximately 11.5% in Best mode,
103       21.5% in Good mode (speed 0), and 22.5% in Realtime mode (speed 6).
104       On ARM Cortex A9 with Neon extensions, real-time encoding of video
105       telephony content is 35% faster than Bali on single core and 48%
106       faster on multi-core. On the NVidia Tegra2 platform, real time
107       encoding is 40% faster than Bali.
108
109       Decoder speed was not a priority for this release, but improved
110       approximately 8.4% on x86.
111
112           Reduce motion vector search on alt-ref frame.
113           Encoder loopfilter running in its own thread
114           Reworked loopfilter to precalculate more parameters
115           SSE2/SSSE3 optimizations for build_predictors_mbuv{,_s}().
116           Make hor UV predict ~2x faster (73 vs 132 cycles) using SSSE3.
117           Removed redundant checks
118           Reduced structure sizes
119           utilize preload in ARMv6 MC/LPF/Copy routines
120           ARM optimized quantization, dfct, variance, subtract
121           Increase chrow row alignment to 16 bytes.
122           disable trellis optimization for first pass
123           Write SSSE3 sub-pixel filter function
124           Improve SSE2 half-pixel filter funtions
125           Add vp8_sub_pixel_variance16x8_ssse3 function
126           Reduce unnecessary distortion computation
127           Use diamond search to replace full search
128           Preload reference area in sub-pixel motion search (real-time mode)
129
130   - Quality:
131       This release focused primarily on one-pass use cases, including
132       video conferencing. Low latency data rate control was significantly
133       improved, improving streamability over bandwidth constrained links.
134       Added support for error concealment, allowing frames to maintain
135       visual quality in the presence of substantial packet loss.
136
137           Add rc_max_intra_bitrate_pct control
138           Limit size of initial keyframe in one-pass.
139           Improve framerate adaptation
140           Improved 1-pass CBR rate control
141           Improved KF insertion after fades to still.
142           Improved key frame detection.
143           Improved activity masking (lower PSNR impact for same SSIM boost)
144           Improved interaction between GF and ARFs
145           Adding error-concealment to the decoder.
146           Adding support for independent partitions
147           Adjusted rate-distortion constants
148
149
150   - Bug Fixes:
151           Removed firstpass motion map
152           Fix parallel make install
153           Fix multithreaded encoding for 1 MB wide frame
154           Fixed iwalsh_neon build problems with RVDS4.1
155           Fix semaphore emulation, spin-wait intrinsics on Windows
156           Fix build with xcode4 and simplify GLOBAL.
157           Mark ARM asm objects as allowing a non-executable stack.
158           Fix vpxenc encoding incorrect webm file header on big endian
159
160
161 2011-03-07 v0.9.6 "Bali"
162   Our second named release, focused on a faster, higher quality, encoder.
163
164   - Upgrading:
165     This release is backwards compatible with Aylesbury (v0.9.5). Users
166     of older releases should refer to the Upgrading notes in this
167     document for that release.
168
169   - Enhancements:
170       vpxenc --psnr shows a summary when encode completes
171       --tune=ssim option to enable activity masking
172       improved postproc visualizations for development
173       updated support for Apple iOS to SDK 4.2
174       query decoder to determine which reference frames were updated
175       implemented error tracking in the decoder
176       fix pipe support on windows
177
178   - Speed:
179       Primary focus was on good quality mode, speed 0. Average improvement
180       on x86 about 40%, up to 100% on user-generated content at that speed.
181       Best quality mode speed improved 35%, and realtime speed 10-20%. This
182       release also saw significant improvement in realtime encoding speed
183       on ARM platforms.
184
185         Improved encoder threading
186         Dont pick encoder filter level when loopfilter is disabled.
187         Avoid double copying of key frames into alt and golden buffer
188         FDCT optimizations.
189         x86 sse2 temporal filter
190         SSSE3 version of fast quantizer
191         vp8_rd_pick_best_mbsegmentation code restructure
192         Adjusted breakout RD for SPLITMV
193         Changed segmentation check order
194         Improved rd_pick_intra4x4block
195         Adds armv6 optimized variance calculation
196         ARMv6 optimized sad16x16
197         ARMv6 optimized half pixel variance calculations
198         Full search SAD function optimization in SSE4.1
199         Improve MV prediction accuracy to achieve performance gain
200         Improve MV prediction in vp8_pick_inter_mode() for speed>3
201
202   - Quality:
203       Best quality mode improved PSNR 6.3%, and SSIM 6.1%. This release
204       also includes support for "activity masking," which greatly improves
205       SSIM at the expense of PSNR. For now, this feature is available with
206       the --tune=ssim option. Further experimentation in this area
207       is ongoing. This release also introduces a new rate control mode
208       called "CQ," which changes the allocation of bits within a clip to
209       the sections where they will have the most visual impact.
210
211         Tuning for the more exact quantizer.
212         Relax rate control for last few frames
213         CQ Mode
214         Limit key frame quantizer for forced key frames.
215         KF/GF Pulsing
216         Add simple version of activity masking.
217         make rdmult adaptive for intra in quantizer RDO
218         cap the best quantizer for 2nd order DC
219         change the threshold of DC check for encode breakout
220
221   - Bug Fixes:
222       Fix crash on Sparc Solaris.
223       Fix counter of fixed keyframe distance
224       ARNR filter pointer update bug fix
225       Fixed use of motion percentage in KF/GF group calc
226       Changed condition for using RD in Intra Mode
227       Fix encoder real-time only configuration.
228       Fix ARM encoder crash with multiple token partitions
229       Fixed bug first cluster timecode of webm file is wrong.
230       Fixed various encoder bugs with odd-sized images
231       vp8e_get_preview fixed when spatial resampling enabled
232       quantizer: fix assertion in fast quantizer path
233       Allocate source buffers to be multiples of 16
234       Fix for manual Golden frame frequency
235       Fix drastic undershoot in long form content
236
237
238 2010-10-28 v0.9.5 "Aylesbury"
239   Our first named release, focused on a faster decoder, and a better encoder.
240
241   - Upgrading:
242     This release incorporates backwards-incompatible changes to the
243     ivfenc and ivfdec tools. These tools are now called vpxenc and vpxdec.
244
245     vpxdec
246       * the -q (quiet) option has been removed, and replaced with
247         -v (verbose). the output is quiet by default. Use -v to see
248         the version number of the binary.
249
250       * The default behavior is now to write output to a single file
251         instead of individual frames. The -y option has been removed.
252         Y4M output is the default.
253
254       * For raw I420/YV12 output instead of Y4M, the --i420 or --yv12
255         options must be specified.
256
257           $ ivfdec -o OUTPUT INPUT
258           $ vpxdec --i420 -o OUTPUT INPUT
259
260       * If an output file is not specified, the default is to write
261         Y4M to stdout. This makes piping more natural.
262
263           $ ivfdec -y -o - INPUT | ...
264           $ vpxdec INPUT | ...
265
266       * The output file has additional flexibility for formatting the
267         filename. It supports escape characters for constructing a
268         filename from the width, height, and sequence number. This
269         replaces the -p option. To get the equivalent:
270
271           $ ivfdec -p frame INPUT
272           $ vpxdec --i420 -o frame-%wx%h-%4.i420 INPUT
273
274     vpxenc
275       * The output file must be specified with -o, rather than as the
276         last argument.
277
278           $ ivfenc <options> INPUT OUTPUT
279           $ vpxenc <options> -o OUTPUT INPUT
280
281       * The output defaults to webm. To get IVF output, use the --ivf
282         option.
283
284           $ ivfenc <options> INPUT OUTPUT.ivf
285           $ vpxenc <options> -o OUTPUT.ivf --ivf INPUT
286
287
288   - Enhancements:
289       ivfenc and ivfdec have been renamed to vpxenc, vpxdec.
290       vpxdec supports .webm input
291       vpxdec writes .y4m by default
292       vpxenc writes .webm output by default
293       vpxenc --psnr now shows the average/overall PSNR at the end
294       ARM platforms now support runtime cpu detection
295       vpxdec visualizations added for motion vectors, block modes, references
296       vpxdec now silent by default
297       vpxdec --progress shows frame-by-frame timing information
298       vpxenc supports the distinction between --fps and --timebase
299       NASM is now a supported assembler
300       configure: enable PIC for shared libs by default
301       configure: add --enable-small
302       configure: support for ppc32-linux-gcc
303       configure: support for sparc-solaris-gcc
304
305   - Bugs:
306       Improve handling of invalid frames
307       Fix valgrind errors in the NEON loop filters.
308       Fix loopfilter delta zero transitions
309       Fix valgrind errors in vp8_sixtap_predict8x4_armv6().
310       Build fixes for darwin-icc
311
312   - Speed:
313       20-40% (average 28%) improvement in libvpx decoder speed,
314       including:
315         Rewrite vp8_short_walsh4x4_sse2()
316         Optimizations on the loopfilters.
317         Miscellaneous improvements for Atom
318         Add 4-tap version of 2nd-pass ARMv6 MC filter.
319         Improved multithread utilization
320         Better instruction choices on x86
321         reorder data to use wider instructions
322         Update NEON wide idcts
323         Make block access to frame buffer sequential
324         Improved subset block search
325         Bilinear subpixel optimizations for ssse3.
326         Decrease memory footprint
327
328       Encoder speed improvements (percentage gain not measured):
329         Skip unnecessary search of identical frames
330         Add SSE2 subtract functions
331         Improve bounds checking in vp8_diamond_search_sadx4()
332         Added vp8_fast_quantize_b_sse2
333
334   - Quality:
335       Over 7% overall PSNR improvement (6.3% SSIM) in "best" quality
336       encoding mode, and up to 60% improvement on very noisy, still
337       or slow moving source video
338
339         Motion compensated temporal filter for Alt-Ref Noise Reduction
340         Improved use of trellis quantization on 2nd order Y blocks
341         Tune effect of motion on KF/GF boost in two pass
342         Allow coefficient optimization for good quality speed 0.
343         Improved control of active min quantizer for two pass.
344         Enable ARFs for non-lagged compress
345
346 2010-09-02 v0.9.2
347   - Enhancements:
348       Disable frame dropping by default
349       Improved multithreaded performance
350       Improved Force Key Frame Behaviour
351       Increased rate control buffer level precision
352       Fix bug in 1st pass motion compensation
353       ivfenc: correct fixed kf interval, --disable-kf
354   - Speed:
355       Changed above and left context data layout
356       Rework idct calling structure.
357       Removed unnecessary MB_MODE_INFO copies
358       x86: SSSE3 sixtap prediction
359       Reworked IDCT to include reconstruction (add) step
360       Swap alt/gold/new/last frame buffer ptrs instead of copying.
361       Improve SSE2 loopfilter functions
362       Change bitreader to use a larger window.
363       Avoid loopfilter reinitialization when possible
364   - Quality:
365       Normalize quantizer's zero bin and rounding factors
366       Add trellis quantization.
367       Make the quantizer exact.
368       Updates to ARNR filtering algorithm
369       Fix breakout thresh computation for golden & AltRef frames
370       Redo the forward 4x4 dct
371       Improve the accuracy of forward walsh-hadamard transform
372       Further adjustment of RD behaviour with Q and Zbin.
373   - Build System:
374       Allow linking of libs built with MinGW to MSVC
375       Fix target auto-detection on mingw32
376       Allow --cpu= to work for x86.
377       configure: pass original arguments through to make dist
378       Fix builds without runtime CPU detection
379       msvs: fix install of codec sources
380       msvs: Change devenv.com command line for better msys support
381       msvs: Add vs9 targets.
382       Add x86_64-linux-icc target
383   - Bugs:
384       Potential crashes on older MinGW builds
385       Fix two-pass framrate for Y4M input.
386       Fixed simple loop filter, other crashes on ARM v6
387       arm: fix missing dependency with --enable-shared
388       configure: support directories containing .o
389       Replace pinsrw (SSE) with MMX instructions
390       apple: include proper mach primatives
391       Fixed rate control bug with long key frame interval.
392       Fix DSO link errors on x86-64 when not using a version script
393       Fixed buffer selection for UV in AltRef filtering
394
395
396 2010-06-17 v0.9.1
397   - Enhancements:
398       * ivfenc/ivfdec now support YUV4MPEG2 input and pipe I/O
399       * Speed optimizations
400   - Bugfixes:
401       * Rate control
402       * Prevent out-of-bounds accesses on invalid data
403   - Build system updates:
404       * Detect toolchain to be used automatically for native builds
405       * Support building shared libraries
406       * Better autotools emulation (--prefix, --libdir, DESTDIR)
407   - Updated LICENSE
408       * http://webmproject.blogspot.com/2010/06/changes-to-webm-open-source-license.html
409
410
411 2010-05-18 v0.9.0
412   - Initial open source release. Welcome to WebM and VP8!
413