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