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