12024-05-21 v1.14.1 "Venetian Duck" 2 This release includes enhancements and bug fixes. 3 4 - Upgrading: 5 This release is ABI compatible with the previous release. 6 7 - Enhancement: 8 Improved the detection of compiler support for AArch64 extensions, 9 particularly SVE. 10 11 Added vpx_codec_get_global_headers() support for VP9. 12 13 - Bug fixes: 14 Added buffer bounds checks to vpx_writer and vpx_write_bit_buffer. 15 Fix to GetSegmentationData() crash in aq_mode=0 for RTC rate control. 16 Fix to alloc for row_base_thresh_freq_fac. 17 Free row mt memory before freeing cpi->tile_data. 18 Fix to buffer alloc for vp9_bitstream_worker_data. 19 Fix to VP8 race issue for multi-thread with pnsr_calc. 20 Fix to uv width/height in vp9_scale_and_extend_frame_ssse3. 21 Fix to integer division by zero and overflow in calc_pframe_target_size(). 22 Fix to integer overflow in vpx_img_alloc() & vpx_img_wrap()(CVE-2024-5197). 23 Fix to UBSan error in vp9_rc_update_framerate(). 24 Fix to UBSan errors in vp8_new_framerate(). 25 Fix to integer overflow in vp8 encodeframe.c. 26 Handle EINTR from sem_wait(). 27 282024-01-02 v1.14.0 "Venetian Duck" 29 This release drops support for old C compilers, such as Visual Studio 2012 30 and older, that disallow mixing variable declarations and statements (a C99 31 feature). It adds support for run-time CPU feature detection for Arm 32 platforms, as well as support for darwin23 (macOS 14). 33 34 - Upgrading: 35 This release is ABI incompatible with the previous release. 36 37 Various new features for rate control library for real-time: SVC parallel 38 encoding, loopfilter level, support for frame dropping, and screen content. 39 40 New callback function send_tpl_gop_stats for vp9 external rate control 41 library, which can be used to transmit TPL stats for a group of pictures. A 42 public header vpx_tpl.h is added for the definition of TPL stats used in 43 this callback. 44 45 libwebm is upgraded to libwebm-1.0.0.29-9-g1930e3c. 46 47 - Enhancement: 48 Improvements on Neon optimizations: VoD: 12-35% speed up for bitdepth 8, 49 68%-151% speed up for high bitdepth. 50 51 Improvements on AVX2 and SSE optimizations. 52 Improvements on LSX optimizations for LoongArch. 53 42-49% speedup on speed 0 VoD encoding. 54 Android API level predicates. 55 56 - Bug fixes: 57 Fix to missing prototypes from the rtcd header. 58 Fix to segfault when total size is enlarged but width is smaller. 59 Fix to the build for arm64ec using MSVC. 60 Fix to copy BLOCK_8X8's mi to PICK_MODE_CONTEXT::mic. 61 Fix to -Wshadow warnings. 62 Fix to heap overflow in vpx_get4x4sse_cs_neon. 63 Fix to buffer overrun in highbd Neon subpel variance filters. 64 Added bitexact encode test script. 65 Fix to -Wl,-z,defs with Clang's sanitizers. 66 Fix to decoder stability after error & continued decoding. 67 Fix to mismatch of VP9 encode with NEON intrinsics with C only version. 68 Fix to Arm64 MSVC compile vpx_highbd_fdct4x4_neon. 69 Fix to fragments count before use. 70 Fix to a case where target bandwidth is 0 for SVC. 71 Fix mask in vp9_quantize_avx2,highbd_get_max_lane_eob. 72 Fix to int overflow in vp9_calc_pframe_target_size_one_pass_cbr. 73 Fix to integer overflow in vp8,ratectrl.c. 74 Fix to integer overflow in vp9 svc. 75 Fix to avg_frame_bandwidth overflow. 76 Fix to per frame qp for temporal layers. 77 Fix to unsigned integer overflow in sse computation. 78 Fix to uninitialized mesh feature for BEST mode. 79 Fix to overflow in highbd temporal_filter. 80 Fix to unaligned loads w/w==4 in vpx_convolve_copy_neon. 81 Skip arm64_neon.h workaround w/VS >= 2019. 82 Fix to c vs avx mismatch of diamond_search_sad(). 83 Fix to c vs intrinsic mismatch of vpx_hadamard_32x32() function. 84 Fix to a bug in vpx_hadamard_32x32_neon(). 85 Fix to Clang -Wunreachable-code-aggressive warnings. 86 Fix to a bug in vpx_highbd_hadamard_32x32_neon(). 87 Fix to -Wunreachable-code in mfqe_partition. 88 Force mode search on 64x64 if no mode is selected. 89 Fix to ubsan failure caused by left shift of negative. 90 Fix to integer overflow in calc_pframe_target_size. 91 Fix to float-cast-overflow in vp8_change_config(). 92 Fix to a null ptr before use. 93 Conditionally skip using inter frames in speed features. 94 Remove invalid reference frames. 95 Disable intra mode search speed features conditionally. 96 Set nonrd keyframe under dynamic change of deadline for rtc. 97 Fix to scaled reference offsets. 98 Set skip_recode=0 in nonrd_pick_sb_modes. 99 Fix to an edge case when downsizing to one. 100 Fix to a bug in frame scaling. 101 Fix to pred buffer stride. 102 Fix to a bug in simple motion search. 103 Update frame size in actual encoding. 104 1052023-09-29 v1.13.1 "Ugly Duckling" 106 This release contains two security related fixes. One each for VP8 and VP9. 107 108 - Upgrading: 109 This release is ABI compatible with the previous release. 110 111 - Bug fixes: 112 https://crbug.com/1486441 (CVE-2023-5217) 113 Fix to a crash related to VP9 encoding (#1642) 114 1152023-01-31 v1.13.0 "Ugly Duckling" 116 This release includes more Neon and AVX2 optimizations, adds a new codec 117 control to set per frame QP, upgrades GoogleTest to v1.12.1, and includes 118 numerous bug fixes. 119 120 - Upgrading: 121 This release is ABI incompatible with the previous release. 122 123 New codec control VP9E_SET_QUANTIZER_ONE_PASS to set per frame QP. 124 125 GoogleTest is upgraded to v1.12.1. 126 127 .clang-format is upgraded to clang-format-11. 128 129 VPX_EXT_RATECTRL_ABI_VERSION was bumped due to incompatible changes to the 130 feature of using external rate control models for vp9. 131 132 - Enhancement: 133 Numerous improvements on Neon optimizations. 134 Numerous improvements on AVX2 optimizations. 135 Additional ARM targets added for Visual Studio. 136 137 - Bug fixes: 138 Fix to calculating internal stats when frame dropped. 139 Fix to segfault for external resize test in vp9. 140 Fix to build system with replacing egrep with grep -E. 141 Fix to a few bugs with external RTC rate control library. 142 Fix to make SVC work with VBR. 143 Fix to key frame setting in VP9 external RC. 144 Fix to -Wimplicit-int (Clang 16). 145 Fix to VP8 external RC for buffer levels. 146 Fix to VP8 external RC for dynamic update of layers. 147 Fix to VP9 auto level. 148 Fix to off-by-one error of max w/h in validate_config. 149 Fix to make SVC work for Profile 1. 150 1512022-06-17 v1.12.0 "Torrent Duck" 152 This release adds optimizations for Loongarch, adds support for vp8 in the 153 real-time rate control library, upgrades GoogleTest to v1.11.0, updates 154 libwebm to libwebm-1.0.0.28-20-g206d268, and includes numerous bug fixes. 155 156 - Upgrading: 157 This release is ABI compatible with the previous release. 158 159 vp8 support in the real-time rate control library. 160 New codec control VP8E_SET_RTC_EXTERNAL_RATECTRL is added. 161 162 Configure support for darwin21 is added. 163 164 GoogleTest is upgraded to v1.11.0. 165 166 libwebm is updated to libwebm-1.0.0.28-20-g206d268. 167 168 Allow SimpleEncode environment to take target level as input to match 169 the level conformance in vp9. 170 171 - Enhancement: 172 Numerous improvements on checking memory allocations. 173 Optimizations for Loongarch. 174 Code clean-up. 175 176 - Bug fixes: 177 Fix to a crash related to {vp8/vp9}_set_roi_map. 178 Fix to compiling failure with -Wformat-nonliteral. 179 Fix to integer overflow with vp9 with high resolution content. 180 Fix to AddNoiseTest failure with ARMv7. 181 Fix to libvpx Null-dereference READ in vp8. 182 1832021-09-27 v1.11.0 "Smew Duck" 184 This maintenance release adds support for VBR mode in VP9 rate control 185 interface, new codec controls to get quantization parameters and loop filter 186 levels, and includes several improvements to NEON and numerous bug fixes. 187 188 - Upgrading: 189 This release is ABI incompatible with the previous release. 190 New codec control is added to get quantization parameters and loop filter 191 levels. 192 193 VBR mode is supported in VP9 rate control library. 194 195 - Enhancement: 196 Numerous improvements for Neon optimizations. 197 Code clean-up and refactoring. 198 Calculation of rd multiplier is changed with BDRATE gains. 199 200 - Bug fixes: 201 Fix to overflow on duration. 202 Fix to several instances of -Wunused-but-set-variable. 203 Fix to avoid chroma resampling for 420mpeg2 input. 204 Fix to overflow in calc_iframe_target_size. 205 Fix to disallow skipping transform and quantization. 206 Fix some -Wsign-compare warnings in simple_encode. 207 Fix input file path in simple_encode_test. 208 Fix valid range for under/over_shoot pct. 209 2102021-03-09 v1.10.0 "Ruddy Duck" 211 This maintenance release adds support for darwin20 and new codec controls, as 212 well as numerous bug fixes. 213 214 - Upgrading: 215 This release is ABI incompatible with the previous release. 216 New codec control is added to disable loopfilter for VP9. 217 218 New encoder control is added to disable feature to increase Q on overshoot 219 detection for CBR. 220 221 Configure support for darwin20 is added. 222 223 New codec control is added for VP9 rate control. The control ID of this 224 interface is VP9E_SET_EXTERNAL_RATE_CONTROL. To make VP9 use a customized 225 external rate control model, users will have to implement each callback 226 function in vpx_rc_funcs_t and register them using libvpx API 227 vpx_codec_control_() with the control ID. 228 229 - Enhancement: 230 Use -std=gnu++11 instead of -std=c++11 for c++ files. 231 232 - Bug fixes: 233 Override assembler with --as option of configure for MSVS. 234 Fix several compilation issues with gcc 4.8.5. 235 Fix to resetting rate control for temporal layers. 236 Fix to the rate control stats of SVC example encoder when number of spatial 237 layers is 1. 238 Fix to reusing motion vectors from the base spatial layer in SVC. 239 2 pass related flags removed from SVC example encoder. 240 2412020-07-29 v1.9.0 "Quacking Duck" 242 This release adds support for NV12, a separate library for rate control, as 243 well as incremental improvements. 244 245 - Upgrading: 246 This release is ABI compatible with the previous release. 247 NV12 support is added to this release. 248 A new interface is added for VP9 rate control. The new library libvp9rc.a 249 must be linked by applications. 250 Googletest is updated to v1.10.0. 251 simple_encode.cc is compiled into a new library libsimple_encode.a with 252 CONFIG_RATE_CTRL. 253 254 - Enhancement: 255 Various changes to improve VP9 SVC, rate control, quality and speed to real 256 time encoding. 257 258 - Bug fixes: 259 Fix key frame update refresh simulcast flexible svc. 260 Fix to disable_16x16part speed feature for real time encoding. 261 Fix some signed integer overflows for VP9 rate control. 262 Fix initialization of delta_q_uv. 263 Fix condition in regulate_q for cyclic refresh. 264 Various fixes to dynamic resizing for VP9 SVC. 265 2662019-12-09 v1.8.2 "Pekin Duck" 267 This release collects incremental improvements to many aspects of the library. 268 269 - Upgrading: 270 This release is ABI compatible with the previous release. 271 ARCH_* defines have been removed in favor of VPX_ARCH_*. 272 2732019-07-15 v1.8.1 "Orpington Duck" 274 This release collects incremental improvements to many aspects of the library. 275 276 - Upgrading: 277 This release is ABI incompatible with the previous release. 278 VP8E_SET_CPUUSED now accepts values up to 9 for vp9. 279 VPX_CTRL_VP9E_SET_MAX_INTER_BITRATE_PCT had a spelling fix (was VP8E). 280 The --sdk-path option has been removed. If you were using it to build for 281 Android please read build/make/Android.mk for alternatives. 282 All PPC optimizations have been disabled: 283 https://bugs.chromium.org/p/webm/issues/detail?id=1522. 284 285 - Enhancements: 286 Various changes to improve encoder rate control, quality and speed 287 for practically every use case. 288 289 - Bug fixes: 290 vp9-rtc: Fix color artifacts for speed >= 8. 291 2922019-01-31 v1.8.0 "Northern Shoveler Duck" 293 This release focused on encoding performance for realtime and VOD use cases. 294 295 - Upgrading: 296 This release is ABI incompatible with the previous release. This adds and 297 improves several vp9 controls. Most are related to SVC: 298 VP9E_SET_SVC_FRAME_DROP_LAYER: 299 - Frame dropping in SVC. 300 VP9E_SET_SVC_INTER_LAYER_PRED: 301 - Inter-layer prediction in SVC. 302 VP9E_SET_SVC_GF_TEMPORAL_REF: 303 - Enable long term temporal reference in SVC. 304 VP9E_SET_SVC_REF_FRAME_CONFIG/VP9E_GET_SVC_REF_FRAME_CONFIG: 305 - Extend and improve this control for better flexibility in setting SVC 306 pattern dynamically. 307 VP9E_SET_POSTENCODE_DROP: 308 - Allow for post-encode frame dropping (applies to non-SVC too). 309 VP9E_SET_SVC_SPATIAL_LAYER_SYNC: 310 - Enable spatial layer sync frames. 311 VP9E_SET_SVC_LAYER_ID: 312 - Extend api to specify temporal id for each spatial layers. 313 VP9E_SET_ROI_MAP: 314 - Extend Region of Interest functionality to VP9. 315 316 - Enhancements: 317 2 pass vp9 encoding has improved substantially. When using --auto-alt-ref=6, 318 we see approximately 8% for VBR and 10% for CQ. When using --auto-alt-ref=1, 319 the gains are approximately 4% for VBR and 5% for CQ. 320 321 For real-time encoding, speed 7 has improved by ~5-10%. Encodes targeted at 322 screen sharing have improved when the content changes significantly (slide 323 sharing) or scrolls. There is a new speed 9 setting for mobile devices which 324 is about 10-20% faster than speed 8. 325 326 - Bug fixes: 327 VP9 denoiser issue. 328 VP9 partition issue for 1080p. 329 VP9 rate control improvments. 330 Postprocessing Multi Frame Quality Enhancement (MFQE) issue. 331 VP8 multithread decoder issues. 332 A variety of fuzzing issues. 333 3342018-01-04 v1.7.0 "Mandarin Duck" 335 This release focused on high bit depth performance (10/12 bit) and vp9 336 encoding improvements. 337 338 - Upgrading: 339 This release is ABI incompatible due to new vp9 encoder features. 340 341 Frame parallel decoding for vp9 has been removed. 342 343 - Enhancements: 344 vp9 encoding supports additional threads with --row-mt. This can be greater 345 than the number of tiles. 346 347 Two new vp9 encoder options have been added: 348 --corpus-complexity 349 --tune-content=film 350 351 Additional tooling for respecting the vp9 "level" profiles has been added. 352 353 - Bug fixes: 354 A variety of fuzzing issues. 355 vp8 threading fix for ARM. 356 Codec control VP9_SET_SKIP_LOOP_FILTER fixed. 357 Reject invalid multi resolution configurations. 358 3592017-01-09 v1.6.1 "Long Tailed Duck" 360 This release improves upon the VP9 encoder and speeds up the encoding and 361 decoding processes. 362 363 - Upgrading: 364 This release is ABI compatible with 1.6.0. 365 366 - Enhancements: 367 Faster VP9 encoding and decoding. 368 High bit depth builds now provide similar speed for 8 bit encode and decode 369 for x86 targets. Other platforms and higher bit depth improvements are in 370 progress. 371 372 - Bug Fixes: 373 A variety of fuzzing issues. 374 3752016-07-20 v1.6.0 "Khaki Campbell Duck" 376 This release improves upon the VP9 encoder and speeds up the encoding and 377 decoding processes. 378 379 - Upgrading: 380 This release is ABI incompatible with 1.5.0 due to a new 'color_range' enum 381 in vpx_image and some minor changes to the VP8_COMP structure. 382 383 The default key frame interval for VP9 has changed from 128 to 9999. 384 385 - Enhancement: 386 A core focus has been performance for low end Intel processors. SSSE3 387 instructions such as 'pshufb' have been avoided and instructions have been 388 reordered to better accommodate the more constrained pipelines. 389 390 As a result, devices based on Celeron processors have seen substantial 391 decoding improvements. From Indian Runner Duck to Javan Whistling Duck, 392 decoding speed improved between 10 and 30%. Between Javan Whistling Duck 393 and Khaki Campbell Duck, it improved another 10 to 15%. 394 395 While Celeron benefited most, Core-i5 also improved 5% and 10% between the 396 respective releases. 397 398 Realtime performance for WebRTC for both speed and quality has received a 399 lot of attention. 400 401 - Bug Fixes: 402 A number of fuzzing issues, found variously by Mozilla, Chromium and others, 403 have been fixed and we strongly recommend updating. 404 4052015-11-09 v1.5.0 "Javan Whistling Duck" 406 This release improves upon the VP9 encoder and speeds up the encoding and 407 decoding processes. 408 409 - Upgrading: 410 This release is ABI incompatible with 1.4.0. It drops deprecated VP8 411 controls and adds a variety of VP9 controls for testing. 412 413 The vpxenc utility now prefers VP9 by default. 414 415 - Enhancements: 416 Faster VP9 encoding and decoding 417 Smaller library size by combining functions used by VP8 and VP9 418 419 - Bug Fixes: 420 A variety of fuzzing issues 421 4222015-04-03 v1.4.0 "Indian Runner Duck" 423 This release includes significant improvements to the VP9 codec. 424 425 - Upgrading: 426 This release is ABI incompatible with 1.3.0. It drops the compatibility 427 layer, requiring VPX_IMG_FMT_* instead of IMG_FMT_*, and adds several codec 428 controls for VP9. 429 430 - Enhancements: 431 Faster VP9 encoding and decoding 432 Multithreaded VP9 decoding (tile and frame-based) 433 Multithreaded VP9 encoding - on by default 434 YUV 4:2:2 and 4:4:4 support in VP9 435 10 and 12bit support in VP9 436 64bit ARM support by replacing ARM assembly with intrinsics 437 438 - Bug Fixes: 439 Fixes a VP9 bitstream issue in Profile 1. This only affected non-YUV 4:2:0 440 files. 441 442 - Known Issues: 443 Frame Parallel decoding fails for segmented and non-420 files. 444 4452013-11-15 v1.3.0 "Forest" 446 This release introduces the VP9 codec in a backward-compatible way. 447 All existing users of VP8 can continue to use the library without 448 modification. However, some VP8 options do not map to VP9 in the same manner. 449 450 The VP9 encoder in this release is not feature complete. Users interested in 451 the encoder are advised to use the git master branch and discuss issues on 452 libvpx mailing lists. 453 454 - Upgrading: 455 This release is ABI and API compatible with Duclair (v1.0.0). Users 456 of older releases should refer to the Upgrading notes in this document 457 for that release. 458 459 - Enhancements: 460 Get rid of bashisms in the main build scripts 461 Added usage info on command line options 462 Add lossless compression mode 463 Dll build of libvpx 464 Add additional Mac OS X targets: 10.7, 10.8 and 10.9 (darwin11-13) 465 Add option to disable documentation 466 configure: add --enable-external-build support 467 make: support V=1 as short form of verbose=yes 468 configure: support mingw-w64 469 configure: support hardfloat armv7 CHOSTS 470 configure: add support for android x86 471 Add estimated completion time to vpxenc 472 Don't exit on decode errors in vpxenc 473 vpxenc: support scaling prior to encoding 474 vpxdec: support scaling output 475 vpxenc: improve progress indicators with --skip 476 msvs: Don't link to winmm.lib 477 Add a new script for producing vcxproj files 478 Produce Visual Studio 10 and 11 project files 479 Produce Windows Phone project files 480 msvs-build: use msbuild for vs >= 2005 481 configure: default configure log to config.log 482 Add encoding option --static-thresh 483 484 - Speed: 485 Miscellaneous speed optimizations for VP8 and VP9. 486 487 - Quality: 488 In general, quality is consistent with the Eider release. 489 490 - Bug Fixes: 491 This release represents approximately a year of engineering effort, 492 and contains multiple bug fixes. Please refer to git history for details. 493 494 4952012-12-21 v1.2.0 496 This release acts as a checkpoint for a large amount of internal refactoring 497 and testing. It also contains a number of small bugfixes, so all users are 498 encouraged to upgrade. 499 500 - Upgrading: 501 This release is ABI and API compatible with Duclair (v1.0.0). Users 502 of older releases should refer to the Upgrading notes in this 503 document for that release. 504 505 - Enhancements: 506 VP8 optimizations for MIPS dspr2 507 vpxenc: add -quiet option 508 509 - Speed: 510 Encoder and decoder speed is consistent with the Eider release. 511 512 - Quality: 513 In general, quality is consistent with the Eider release. 514 515 Minor tweaks to ARNR filtering 516 Minor improvements to real time encoding with multiple temporal layers 517 518 - Bug Fixes: 519 Fixes multithreaded encoder race condition in loopfilter 520 Fixes multi-resolution threaded encoding 521 Fix potential encoder dead-lock after picture resize 522 523 5242012-05-09 v1.1.0 "Eider" 525 This introduces a number of enhancements, mostly focused on real-time 526 encoding. In addition, it fixes a decoder bug (first introduced in 527 Duclair) so all users of that release are encouraged to upgrade. 528 529 - Upgrading: 530 This release is ABI and API compatible with Duclair (v1.0.0). Users 531 of older releases should refer to the Upgrading notes in this 532 document for that release. 533 534 This release introduces a new temporal denoiser, controlled by the 535 VP8E_SET_NOISE_SENSITIVITY control. The temporal denoiser does not 536 currently take a strength parameter, so the control is effectively 537 a boolean - zero (off) or non-zero (on). For compatibility with 538 existing applications, the values accepted are the same as those 539 for the spatial denoiser (0-6). The temporal denoiser is enabled 540 by default, and the older spatial denoiser may be restored by 541 configuring with --disable-temporal-denoising. The temporal denoiser 542 is more computationally intensive than the spatial one. 543 544 This release removes support for a legacy, decode only API that was 545 supported, but deprecated, at the initial release of libvpx 546 (v0.9.0). This is not expected to have any impact. If you are 547 impacted, you can apply a reversion to commit 2bf8fb58 locally. 548 Please update to the latest libvpx API if you are affected. 549 550 - Enhancements: 551 Adds a motion compensated temporal denoiser to the encoder, which 552 gives higher quality than the older spatial denoiser. (See above 553 for notes on upgrading). 554 555 In addition, support for new compilers and platforms were added, 556 including: 557 improved support for XCode 558 Android x86 NDK build 559 OS/2 support 560 SunCC support 561 562 Changing resolution with vpx_codec_enc_config_set() is now 563 supported. Previously, reinitializing the codec was required to 564 change the input resolution. 565 566 The vpxenc application has initial support for producing multiple 567 encodes from the same input in one call. Resizing is not yet 568 supported, but varying other codec parameters is. Use -- to 569 delineate output streams. Options persist from one stream to the 570 next. 571 572 Also, the vpxenc application will now use a keyframe interval of 573 5 seconds by default. Use the --kf-max-dist option to override. 574 575 - Speed: 576 Decoder performance improved 2.5% versus Duclair. Encoder speed is 577 consistent with Duclair for most material. Two pass encoding of 578 slideshow-like material will see significant improvements. 579 580 Large realtime encoding speed gains at a small quality expense are 581 possible by configuring the on-the-fly bitpacking experiment with 582 --enable-onthefly-bitpacking. Realtime encoder can be up to 13% 583 faster (ARM) depending on the number of threads and bitrate 584 settings. This technique sees constant gain over the 5-16 speed 585 range. For VC style input the loss seen is up to 0.2dB. See commit 586 52cf4dca for further details. 587 588 - Quality: 589 On the whole, quality is consistent with the Duclair release. Some 590 tweaks: 591 592 Reduced blockiness in easy sections by applying a penalty to 593 intra modes. 594 595 Improved quality of static sections (like slideshows) with 596 two pass encoding. 597 598 Improved keyframe sizing with multiple temporal layers 599 600 - Bug Fixes: 601 Corrected alt-ref contribution to frame rate for visible updates 602 to the alt-ref buffer. This affected applications making manual 603 usage of the frame reference flags, or temporal layers. 604 605 Additional constraints were added to disable multi-frame quality 606 enhancement (MFQE) in sections of the frame where there is motion. 607 (#392) 608 609 Fixed corruption issues when vpx_codec_enc_config_set() was called 610 with spatial resampling enabled. 611 612 Fixed a decoder error introduced in Duclair where the segmentation 613 map was not being reinitialized on keyframes (#378) 614 615 6162012-01-27 v1.0.0 "Duclair" 617 Our fourth named release, focused on performance and features related to 618 real-time encoding. It also fixes a decoder crash bug introduced in 619 v0.9.7, so all users of that release are encouraged to upgrade. 620 621 - Upgrading: 622 This release is ABI incompatible with prior releases of libvpx, so the 623 "major" version number has been bumped to 1. You must recompile your 624 applications against the latest version of the libvpx headers. The 625 API remains compatible, and this should not require code changes in most 626 applications. 627 628 - Enhancements: 629 This release introduces several substantial new features to the encoder, 630 of particular interest to real time streaming applications. 631 632 Temporal scalability allows the encoder to produce a stream that can 633 be decimated to different frame rates, with independent rate targeting 634 for each substream. 635 636 Multiframe quality enhancement postprocessing can make visual quality 637 more consistent in the presence of frames that are substantially 638 different quality than the surrounding frames, as in the temporal 639 scalability case and in some forced keyframe scenarios. 640 641 Multiple-resolution encoding support allows the encoding of the 642 same content at different resolutions faster than encoding them 643 separately. 644 645 - Speed: 646 Optimization targets for this release included the decoder and the real- 647 time modes of the encoder. Decoder speed on x86 has improved 10.5% with 648 this release. Encoder improvements followed a curve where speeds 1-3 649 improved 4.0%-1.5%, speeds 4-8 improved <1%, and speeds 9-16 improved 650 1.5% to 10.5%, respectively. "Best" mode speed is consistent with the 651 Cayuga release. 652 653 - Quality: 654 Encoder quality in the single stream case is consistent with the Cayuga 655 release. 656 657 - Bug Fixes: 658 This release fixes an OOB read decoder crash bug present in v0.9.7 659 related to the clamping of motion vectors in SPLITMV blocks. This 660 behavior could be triggered by corrupt input or by starting 661 decoding from a P-frame. 662 663 6642011-08-15 v0.9.7-p1 "Cayuga" patch 1 665 This is an incremental bugfix release against Cayuga. All users of that 666 release are strongly encouraged to upgrade. 667 668 - Fix potential OOB reads (cdae03a) 669 670 An unbounded out of bounds read was discovered when the 671 decoder was requested to perform error concealment (new in 672 Cayuga) given a frame with corrupt partition sizes. 673 674 A bounded out of bounds read was discovered affecting all 675 versions of libvpx. Given an multipartition input frame that 676 is truncated between the mode/mv partition and the first 677 residiual paritition (in the block of partition offsets), up 678 to 3 extra bytes could have been read from the source buffer. 679 The code will not take any action regardless of the contents 680 of these undefined bytes, as the truncated buffer is detected 681 immediately following the read based on the calculated 682 starting position of the coefficient partition. 683 684 - Fix potential error concealment crash when the very first frame 685 is missing or corrupt (a609be5) 686 687 - Fix significant artifacts in error concealment (a4c2211, 99d870a) 688 689 - Revert 1-pass CBR rate control changes (e961317) 690 Further testing showed this change produced undesirable visual 691 artifacts, rolling back for now. 692 693 6942011-08-02 v0.9.7 "Cayuga" 695 Our third named release, focused on a faster, higher quality, encoder. 696 697 - Upgrading: 698 This release is backwards compatible with Aylesbury (v0.9.5) and 699 Bali (v0.9.6). Users of older releases should refer to the Upgrading 700 notes in this document for that release. 701 702 - Enhancements: 703 Stereo 3D format support for vpxenc 704 Runtime detection of available processor cores. 705 Allow specifying --end-usage by enum name 706 vpxdec: test for frame corruption 707 vpxenc: add quantizer histogram display 708 vpxenc: add rate histogram display 709 Set VPX_FRAME_IS_DROPPABLE 710 update configure for ios sdk 4.3 711 Avoid text relocations in ARM vp8 decoder 712 Generate a vpx.pc file for pkg-config. 713 New ways of passing encoded data between encoder and decoder. 714 715 - Speed: 716 This release includes across-the-board speed improvements to the 717 encoder. On x86, these measure at approximately 11.5% in Best mode, 718 21.5% in Good mode (speed 0), and 22.5% in Realtime mode (speed 6). 719 On ARM Cortex A9 with Neon extensions, real-time encoding of video 720 telephony content is 35% faster than Bali on single core and 48% 721 faster on multi-core. On the NVidia Tegra2 platform, real time 722 encoding is 40% faster than Bali. 723 724 Decoder speed was not a priority for this release, but improved 725 approximately 8.4% on x86. 726 727 Reduce motion vector search on alt-ref frame. 728 Encoder loopfilter running in its own thread 729 Reworked loopfilter to precalculate more parameters 730 SSE2/SSSE3 optimizations for build_predictors_mbuv{,_s}(). 731 Make hor UV predict ~2x faster (73 vs 132 cycles) using SSSE3. 732 Removed redundant checks 733 Reduced structure sizes 734 utilize preload in ARMv6 MC/LPF/Copy routines 735 ARM optimized quantization, dfct, variance, subtract 736 Increase chrow row alignment to 16 bytes. 737 disable trellis optimization for first pass 738 Write SSSE3 sub-pixel filter function 739 Improve SSE2 half-pixel filter funtions 740 Add vp8_sub_pixel_variance16x8_ssse3 function 741 Reduce unnecessary distortion computation 742 Use diamond search to replace full search 743 Preload reference area in sub-pixel motion search (real-time mode) 744 745 - Quality: 746 This release focused primarily on one-pass use cases, including 747 video conferencing. Low latency data rate control was significantly 748 improved, improving streamability over bandwidth constrained links. 749 Added support for error concealment, allowing frames to maintain 750 visual quality in the presence of substantial packet loss. 751 752 Add rc_max_intra_bitrate_pct control 753 Limit size of initial keyframe in one-pass. 754 Improve framerate adaptation 755 Improved 1-pass CBR rate control 756 Improved KF insertion after fades to still. 757 Improved key frame detection. 758 Improved activity masking (lower PSNR impact for same SSIM boost) 759 Improved interaction between GF and ARFs 760 Adding error-concealment to the decoder. 761 Adding support for independent partitions 762 Adjusted rate-distortion constants 763 764 765 - Bug Fixes: 766 Removed firstpass motion map 767 Fix parallel make install 768 Fix multithreaded encoding for 1 MB wide frame 769 Fixed iwalsh_neon build problems with RVDS4.1 770 Fix semaphore emulation, spin-wait intrinsics on Windows 771 Fix build with xcode4 and simplify GLOBAL. 772 Mark ARM asm objects as allowing a non-executable stack. 773 Fix vpxenc encoding incorrect webm file header on big endian 774 775 7762011-03-07 v0.9.6 "Bali" 777 Our second named release, focused on a faster, higher quality, encoder. 778 779 - Upgrading: 780 This release is backwards compatible with Aylesbury (v0.9.5). Users 781 of older releases should refer to the Upgrading notes in this 782 document for that release. 783 784 - Enhancements: 785 vpxenc --psnr shows a summary when encode completes 786 --tune=ssim option to enable activity masking 787 improved postproc visualizations for development 788 updated support for Apple iOS to SDK 4.2 789 query decoder to determine which reference frames were updated 790 implemented error tracking in the decoder 791 fix pipe support on windows 792 793 - Speed: 794 Primary focus was on good quality mode, speed 0. Average improvement 795 on x86 about 40%, up to 100% on user-generated content at that speed. 796 Best quality mode speed improved 35%, and realtime speed 10-20%. This 797 release also saw significant improvement in realtime encoding speed 798 on ARM platforms. 799 800 Improved encoder threading 801 Dont pick encoder filter level when loopfilter is disabled. 802 Avoid double copying of key frames into alt and golden buffer 803 FDCT optimizations. 804 x86 sse2 temporal filter 805 SSSE3 version of fast quantizer 806 vp8_rd_pick_best_mbsegmentation code restructure 807 Adjusted breakout RD for SPLITMV 808 Changed segmentation check order 809 Improved rd_pick_intra4x4block 810 Adds armv6 optimized variance calculation 811 ARMv6 optimized sad16x16 812 ARMv6 optimized half pixel variance calculations 813 Full search SAD function optimization in SSE4.1 814 Improve MV prediction accuracy to achieve performance gain 815 Improve MV prediction in vp8_pick_inter_mode() for speed>3 816 817 - Quality: 818 Best quality mode improved PSNR 6.3%, and SSIM 6.1%. This release 819 also includes support for "activity masking," which greatly improves 820 SSIM at the expense of PSNR. For now, this feature is available with 821 the --tune=ssim option. Further experimentation in this area 822 is ongoing. This release also introduces a new rate control mode 823 called "CQ," which changes the allocation of bits within a clip to 824 the sections where they will have the most visual impact. 825 826 Tuning for the more exact quantizer. 827 Relax rate control for last few frames 828 CQ Mode 829 Limit key frame quantizer for forced key frames. 830 KF/GF Pulsing 831 Add simple version of activity masking. 832 make rdmult adaptive for intra in quantizer RDO 833 cap the best quantizer for 2nd order DC 834 change the threshold of DC check for encode breakout 835 836 - Bug Fixes: 837 Fix crash on Sparc Solaris. 838 Fix counter of fixed keyframe distance 839 ARNR filter pointer update bug fix 840 Fixed use of motion percentage in KF/GF group calc 841 Changed condition for using RD in Intra Mode 842 Fix encoder real-time only configuration. 843 Fix ARM encoder crash with multiple token partitions 844 Fixed bug first cluster timecode of webm file is wrong. 845 Fixed various encoder bugs with odd-sized images 846 vp8e_get_preview fixed when spatial resampling enabled 847 quantizer: fix assertion in fast quantizer path 848 Allocate source buffers to be multiples of 16 849 Fix for manual Golden frame frequency 850 Fix drastic undershoot in long form content 851 852 8532010-10-28 v0.9.5 "Aylesbury" 854 Our first named release, focused on a faster decoder, and a better encoder. 855 856 - Upgrading: 857 This release incorporates backwards-incompatible changes to the 858 ivfenc and ivfdec tools. These tools are now called vpxenc and vpxdec. 859 860 vpxdec 861 * the -q (quiet) option has been removed, and replaced with 862 -v (verbose). the output is quiet by default. Use -v to see 863 the version number of the binary. 864 865 * The default behavior is now to write output to a single file 866 instead of individual frames. The -y option has been removed. 867 Y4M output is the default. 868 869 * For raw I420/YV12 output instead of Y4M, the --i420 or --yv12 870 options must be specified. 871 872 $ ivfdec -o OUTPUT INPUT 873 $ vpxdec --i420 -o OUTPUT INPUT 874 875 * If an output file is not specified, the default is to write 876 Y4M to stdout. This makes piping more natural. 877 878 $ ivfdec -y -o - INPUT | ... 879 $ vpxdec INPUT | ... 880 881 * The output file has additional flexibility for formatting the 882 filename. It supports escape characters for constructing a 883 filename from the width, height, and sequence number. This 884 replaces the -p option. To get the equivalent: 885 886 $ ivfdec -p frame INPUT 887 $ vpxdec --i420 -o frame-%wx%h-%4.i420 INPUT 888 889 vpxenc 890 * The output file must be specified with -o, rather than as the 891 last argument. 892 893 $ ivfenc <options> INPUT OUTPUT 894 $ vpxenc <options> -o OUTPUT INPUT 895 896 * The output defaults to webm. To get IVF output, use the --ivf 897 option. 898 899 $ ivfenc <options> INPUT OUTPUT.ivf 900 $ vpxenc <options> -o OUTPUT.ivf --ivf INPUT 901 902 903 - Enhancements: 904 ivfenc and ivfdec have been renamed to vpxenc, vpxdec. 905 vpxdec supports .webm input 906 vpxdec writes .y4m by default 907 vpxenc writes .webm output by default 908 vpxenc --psnr now shows the average/overall PSNR at the end 909 ARM platforms now support runtime cpu detection 910 vpxdec visualizations added for motion vectors, block modes, references 911 vpxdec now silent by default 912 vpxdec --progress shows frame-by-frame timing information 913 vpxenc supports the distinction between --fps and --timebase 914 NASM is now a supported assembler 915 configure: enable PIC for shared libs by default 916 configure: add --enable-small 917 configure: support for ppc32-linux-gcc 918 configure: support for sparc-solaris-gcc 919 920 - Bugs: 921 Improve handling of invalid frames 922 Fix valgrind errors in the NEON loop filters. 923 Fix loopfilter delta zero transitions 924 Fix valgrind errors in vp8_sixtap_predict8x4_armv6(). 925 Build fixes for darwin-icc 926 927 - Speed: 928 20-40% (average 28%) improvement in libvpx decoder speed, 929 including: 930 Rewrite vp8_short_walsh4x4_sse2() 931 Optimizations on the loopfilters. 932 Miscellaneous improvements for Atom 933 Add 4-tap version of 2nd-pass ARMv6 MC filter. 934 Improved multithread utilization 935 Better instruction choices on x86 936 reorder data to use wider instructions 937 Update NEON wide idcts 938 Make block access to frame buffer sequential 939 Improved subset block search 940 Bilinear subpixel optimizations for ssse3. 941 Decrease memory footprint 942 943 Encoder speed improvements (percentage gain not measured): 944 Skip unnecessary search of identical frames 945 Add SSE2 subtract functions 946 Improve bounds checking in vp8_diamond_search_sadx4() 947 Added vp8_fast_quantize_b_sse2 948 949 - Quality: 950 Over 7% overall PSNR improvement (6.3% SSIM) in "best" quality 951 encoding mode, and up to 60% improvement on very noisy, still 952 or slow moving source video 953 954 Motion compensated temporal filter for Alt-Ref Noise Reduction 955 Improved use of trellis quantization on 2nd order Y blocks 956 Tune effect of motion on KF/GF boost in two pass 957 Allow coefficient optimization for good quality speed 0. 958 Improved control of active min quantizer for two pass. 959 Enable ARFs for non-lagged compress 960 9612010-09-02 v0.9.2 962 - Enhancements: 963 Disable frame dropping by default 964 Improved multithreaded performance 965 Improved Force Key Frame Behaviour 966 Increased rate control buffer level precision 967 Fix bug in 1st pass motion compensation 968 ivfenc: correct fixed kf interval, --disable-kf 969 - Speed: 970 Changed above and left context data layout 971 Rework idct calling structure. 972 Removed unnecessary MB_MODE_INFO copies 973 x86: SSSE3 sixtap prediction 974 Reworked IDCT to include reconstruction (add) step 975 Swap alt/gold/new/last frame buffer ptrs instead of copying. 976 Improve SSE2 loopfilter functions 977 Change bitreader to use a larger window. 978 Avoid loopfilter reinitialization when possible 979 - Quality: 980 Normalize quantizer's zero bin and rounding factors 981 Add trellis quantization. 982 Make the quantizer exact. 983 Updates to ARNR filtering algorithm 984 Fix breakout thresh computation for golden & AltRef frames 985 Redo the forward 4x4 dct 986 Improve the accuracy of forward walsh-hadamard transform 987 Further adjustment of RD behaviour with Q and Zbin. 988 - Build System: 989 Allow linking of libs built with MinGW to MSVC 990 Fix target auto-detection on mingw32 991 Allow --cpu= to work for x86. 992 configure: pass original arguments through to make dist 993 Fix builds without runtime CPU detection 994 msvs: fix install of codec sources 995 msvs: Change devenv.com command line for better msys support 996 msvs: Add vs9 targets. 997 Add x86_64-linux-icc target 998 - Bugs: 999 Potential crashes on older MinGW builds 1000 Fix two-pass framrate for Y4M input. 1001 Fixed simple loop filter, other crashes on ARM v6 1002 arm: fix missing dependency with --enable-shared 1003 configure: support directories containing .o 1004 Replace pinsrw (SSE) with MMX instructions 1005 apple: include proper mach primatives 1006 Fixed rate control bug with long key frame interval. 1007 Fix DSO link errors on x86-64 when not using a version script 1008 Fixed buffer selection for UV in AltRef filtering 1009 1010 10112010-06-17 v0.9.1 1012 - Enhancements: 1013 * ivfenc/ivfdec now support YUV4MPEG2 input and pipe I/O 1014 * Speed optimizations 1015 - Bugfixes: 1016 * Rate control 1017 * Prevent out-of-bounds accesses on invalid data 1018 - Build system updates: 1019 * Detect toolchain to be used automatically for native builds 1020 * Support building shared libraries 1021 * Better autotools emulation (--prefix, --libdir, DESTDIR) 1022 - Updated LICENSE 1023 * http://webmproject.blogspot.com/2010/06/changes-to-webm-open-source-license.html 1024 1025 10262010-05-18 v0.9.0 1027 - Initial open source release. Welcome to WebM and VP8! 1028 1029