Releases: ultravideo/kvazaar
V2.3.1
Features
- New AVX2 optimizations for intra angular predictions, faster and gets around a code generation issue with MSVC > 19.36
Fixes
- Several fixes to CMakeLists.txt
- fix unaligned access on array_checksum_generic8 c6f2ba4
- fix preset log while enable-logging to false 7424474
- Include CMakeLists.txt in dist 3b1bcb6
External contributions
- Fix typo in error message. by @fancycode in #386
- Minor cmake fixes by @lgbaldoni and @kmilos in #385
- Ignore "*get_pc_thunk.*" symbols in exported symbols test by @matoro in #392
- Fixed issue #394 - missing _mm256_storeu2_m128i macro by @supersjgk in #395
New Contributors
- @fancycode made their first contribution in #386
- @lgbaldoni made their first contribution in #385
- @supersjgk made their first contribution in #395
Performance
- With the new AVX2 intra prediction the encoder is 1-5% faster, depending on settings
Full Changelog: v2.3.0...v2.3.1
V2.3.0
Features
--(no-)enable-logging
to enable/disable logging of normal encoder perfomance intostderr
, errors are still outputted tostderr
.- AVX2 optimisations for finding last non zero coefficient in RDOQ
- Remove YASM to make compilation with visual studio easier
- Experimental support for CMake, in the future we would like to get rid of automake and visual studio so if there are any issues with the CMakeLists.txt please report them
Fixes
- Fix a bug when requesting encoder_headers before any frame has been pushed in aaae5b0
- Fix a problem with win+gcc (mingw, msys, cygwin) causing some optimized functions to segfault 589ed47
- Fix GCC detection for automake 49dc5fc 8523c96
External contributions
- add config option to turn off logging output (#356) by @farindk in #357
- Update Dockerfile base image to Ubuntu 20.04 by @PeterDaveHello in #358
- threads.h: fix for older macOS builds by @barracuda156 in #373
- Don't export MD5 byteReverse symbol on big-endian by @matoro in #377
New Contributors
- @farindk made their first contribution in #357
- @barracuda156 made their first contribution in #373
- @matoro made their first contribution in #377
Performance
The RD performance should be exactly the same as in v2.2.0 and configurations using RDOQ should be around 1-3% faster with the AVX2 optimizations
Full Changelog: v2.2.0...v2.3.0
v2.2.0
uvg266
We now also have a VVC encoder called uvg266, which is available at github/uvg266. The majority of future development will go towards uvg266 but do not consider Kvazaar to be abandoned!
Features
- Updated Region of Interest (ROI) functionality to allow separate ROI map for each frame
- Improve inter search
- Update cabac context during search to improve the accuracy of bit cost estimation
- Move intra chroma search option from
--rd 3
to its own option--(no-)intra-chroma-search
and fast bipred to--(no-)fast-bipred
- Change maximum rd level to 4, where 3 performs more rd search for inter and 4 performs full intra search
- Add
--(no-)combine-intra-cus
for controlling whether the larger intra blocks are tried even when search at current depth is disabled - Add
--force-inter
for debugging purposes to force all PUs in inter slices to use best inter mode
Optimizations
- AVX2 implementations of bidirectional blending
Fixes
- Make sure the dpb is more than max_num_reorder_pics 899c672
- Compute proper count of buffered frames for vps and sps. Use common function d4880be
- Fix some strategy function pointer signatures a400504
External contributors
- build: fix automake warning by @bradh in #335
- cli: add missing newlines in usage by @bradh in #336
- refactor SEI by @bradh in #341
- cli: minor api doc fix by @bradh in #342
- add sudo ldconfig by @binbinzhm in #345
- Enable -mpopcnt and -mlzcnt on AVX2 by @klondi in #301
New Contributors
- @bradh made their first contribution in #335
- @binbinzhm made their first contribution in #345
- @klondi made their first contribution in #301
Performance
BD-Bitrate
Average BD-Bitrate compared with v2.1:
class | 0-uf | 1-sf | 2-vf | 3-fr | 4-f | 5-m | 6-s | 7-sr | 8-vs |
---|---|---|---|---|---|---|---|---|---|
hevc-A | 0.4 % | 0.7 % | 0.0 % | -0.1 % | 0.0 % | -1.1 % | -0.8 % | 0.2 % | -5.1 % |
hevc-B | 0.3 % | 0.4 % | -0.3 % | -0.6 % | -0.4 % | -1.7 % | -1.2 % | 0.1 % | -7.1 % |
hevc-C | 0.5 % | 1.1 % | 0.7 % | 0.5 % | 0.2 % | -0.8 % | -0.4 % | 0.4 % | -5.5 % |
hevc-D | 0.4 % | 1.5 % | 1.0 % | 0.6 % | 0.7 % | -0.3 % | -0.1 % | 0.4 % | -6.6 % |
hevc-E | -2.1 % | -1.7 % | -2.2 % | -2.5 % | -2.5 % | -1.4 % | -1.1 % | -1.1 % | -5.4 % |
hevc-F | -0.1 % | 0.2 % | -0.2 % | -0.2 % | -0.3 % | -0.6 % | -0.4 % | 0.1 % | -3.1 % |
total | 0.0 % | 0.4 % | -0.1 % | -0.3 % | -0.3 % | -1.0 % | -0.7 % | 0.0 % | -5.6 % |
Speedup
Average speedup compared with v2.1 on an Intel Xeon W-2145 (8-core) machine:
class | 0-uf | 1-sf | 2-vf | 3-fr | 4-f | 5-m | 6-s | 7-sr | 8-vs |
---|---|---|---|---|---|---|---|---|---|
hevc-A | 1.09x | 1.10x | 1.12x | 1.14x | 1.15x | 1.08x | 1.04x | 1.10x | 0.68x |
hevc-B | 1.10x | 1.09x | 1.15x | 1.15x | 1.15x | 1.09x | 1.07x | 1.14x | 0.66x |
hevc-C | 1.11x | 1.06x | 1.11x | 1.14x | 1.14x | 1.07x | 1.08x | 1.03x | 0.75x |
hevc-D | 1.08x | 1.08x | 1.13x | 1.13x | 1.14x | 1.08x | 1.08x | 1.06x | 0.71x |
hevc-E | 1.07x | 1.08x | 1.11x | 1.14x | 1.14x | 1.08x | 1.10x | 1.12x | 0.62x |
hevc-F | 1.10x | 1.05x | 1.07x | 1.09x | 1.08x | 1.05x | 1.05x | 1.02x | 0.67x |
total | 1.09x | 1.08x | 1.12x | 1.13x | 1.13x | 1.08x | 1.07x | 1.08x | 0.68x |
Full Changelog: v2.1.0...v2.2.0
v2.1.0
Kvazaar 2.1 has been released!
Important update on the license
With this release, the license was changed from LGPL2.1 to 3-Clause BSD, allowing more liberties in using Kvazaar.
Features
- Option to use a custom table for fast bitrate estimation weights (
--fast-coeff-table <file>
) - Tools to create new weight sets for fast bitrate estimation (
--fast-rd-sampling
,--fastrd-accuracy-check
,--fastrd-outdir
), documented inrdcost-weight-tool/README.txt
- Added support for Y4M input in addition to YUV (Autodetected, manually enable using
--input-file-format=y4m
) - Allow writing out block statistics for debugging (
--stats-file-prefix
)
Optimizations
- New AVX2 implementations for interpolation filters
Fixes
- DTS offset was incorrect at the beginning of the sequence when using GOP (7918628
) - Added VPS information about reordering and buffering, fixes VLC playback (b68625b)
- Removed pthread_exit() on mingw to fix media-autobuild suite (9a65617)
- Renamed truncate function to not overlap with POSIX one, fixed FreeBSD build (1fa69c7)
v2.0.0
Kvazaar 2.0 has been released!
Since 1.3, the encoder has received such improvements and fixes that make this one of our most significant releases so far. It is only fitting to call this version 2.0.
Here are some of the more interesting changes in this release:
Important for MinGW users
AVX2 optimizations are no longer enabled for MinGW GCC due to stack alignment issues.
Use Clang for AVX2 support and therefore better performance.
Highlights
- Updated presets
- Updated GOP definitions using QP offset model.
- There is now even longer hierarchical GOP
--gop=16
- There is now even longer hierarchical GOP
- Much faster and improved bipred
- Alternative and better rate control algorithm, optimal bit allocation (
--rc-algorithm oba
) - Variance adaptive quantization (
--vaq
)
Features
- Option to set QP offset for intra frames (
--intra-qp-offset
, automatical by default) - Zero-coeff-rdo is now configurable (
--zero-coeff-rdo
) - Optional intra frame analysis for rate control (
--intra-bits
) - Optional machine learning based depth constraints for intra search (
--ml-pu-depth-intra
) - PU depths are now separately configurable for each GOP layer
User Interface
- Report bitrate and some kind of (cumulative) average QP
Optimizations:
- More AVX2 opimizations for SAO
- More AVX2 opimizations for transforms
- More AVX2 opimizations for intra prediction
- AVX2 strategy for variance calculation
...and several other improvements and fixes
BD-Bitrate
Average BD-Bitrate compared with v1.3:
class | 0-uf | 1-sf | 2-vf | 3-fr | 4-f | 5-m | 6-s | 7-sr | 8-vs |
---|---|---|---|---|---|---|---|---|---|
hevc-A | -20.2 % | -21.4 % | -28.8 % | -24.8 % | -21.4 % | -23.5 % | -19.1 % | -11.3 % | -15.0 % |
hevc-B | -35.1 % | -34.5 % | -34.7 % | -31.8 % | -28.6 % | -29.5 % | -21.8 % | -11.4 % | -16.2 % |
hevc-C | -21.0 % | -23.6 % | -31.3 % | -27.7 % | -22.4 % | -23.5 % | -19.8 % | -12.9 % | -18.0 % |
hevc-D | -22.5 % | -26.6 % | -37.4 % | -33.2 % | -26.6 % | -25.3 % | -18.3 % | -10.8 % | -15.1 % |
hevc-E | -35.9 % | -34.9 % | -30.9 % | -29.8 % | -28.0 % | -30.4 % | -25.7 % | -19.0 % | -20.2 % |
hevc-F | -18.6 % | -17.7 % | -21.3 % | -19.9 % | -17.5 % | -15.2 % | -17.6 % | -26.8 % | -37.0 % |
Total | -26.0 % | -26.9 % | -31.1 % | -28.2 % | -24.4 % | -24.6 % | -20.3 % | -15.4 % | -20.6 % |
Speedup
Average speedup compared with v1.3 on an AMD Ryzen 7 1700X machine:
class | 0-uf | 1-sf | 2-vf | 3-fr | 4-f | 5-m | 6-s | 7-sr | 8-vs |
---|---|---|---|---|---|---|---|---|---|
hevc-A | 0.90x | 0.75x | 0.80x | 0.78x | 0.93x | 1.11x | 1.21x | 1.23x | 0.95x |
hevc-B | 0.96x | 0.81x | 0.83x | 0.82x | 0.97x | 1.15x | 1.26x | 1.29x | 0.95x |
hevc-C | 0.94x | 0.78x | 0.73x | 0.70x | 0.83x | 1.12x | 1.22x | 1.26x | 0.86x |
hevc-D | 1.02x | 0.83x | 0.78x | 0.76x | 0.90x | 1.16x | 1.24x | 1.28x | 0.93x |
hevc-E | 0.95x | 0.84x | 0.91x | 0.89x | 1.06x | 1.45x | 1.56x | 1.42x | 1.16x |
hevc-F | 0.96x | 0.85x | 0.84x | 0.84x | 0.94x | 1.17x | 1.29x | 1.25x | 1.00x |
Total | 0.96x | 0.81x | 0.81x | 0.80x | 0.93x | 1.18x | 1.29x | 1.29x | 0.97x |
v1.3.0
Time has finally come for the long overdue release v1.3 of Kvazaar!
Since it has been such a long time after our previous release, many many new features, fixes, and optimizations have been introduced and the coding efficiency is on a whole new level.
Binaries for Windows will be added starting from this release.
Pthreads is no longer needed to build and run Kvazaar on Windows. It has been replaced by our custom ThreadWrapper so Kvazaar is able to use the new c++ standard threads. ThreadWrapper is also separately available on repository https://github.com/ultravideo/ThreadWrapper and released under ISC lisence. It is not complete yet, so contributions are welcome.
Performance figures and more up-to-date release notes will be added in the following days.
Some CI tests are failing at the moment, but there should not be any critical issues.
Edit (2.5.2020):
Here are some of the previously missing missing release notes:
Features
- Option
--fast-residual-cost
to gain speedup with less accurate mode decisions - Option
--(no-)open-gop
to choose between open and closed GOP - Option
--set-qp-in-cu
to move QP signalling into CU level for very specific use cases - Option
--scaling-list
to enable choose enable and choose scaling lists - Option
--max-merge
to set the maximum amount of merge candidates - Option
--early-skip
to speed up coding at the cost of worse results
Optimizations
- Another version of interplation filters and fractional pixel motion estimation
- AVX2 optimized sign bit hiding
- AVX2/BMI2 optimized coefficient coding
- AVX2 blending for biprediction
- Improvements and AVX2 code for certain SAD functions
Building
- ASM: marked stack non-executable
The old notes:
Features
- Changed
--rd=2
to use SSD metric for CU mode decision (662430d) - Changed inter search to check the cost of flushing residual to zero (75a8700)
- Changed rectangular and asymmetric blocks to use a transform split (774c666)
- Added diamond search ME algorithm (4e13608)
- Enabled low delay B GOP structure with
--bipred --gop=lp-g4d3t1
(7155dd0) - Added termination of intra search at zero residual with
--intra-rdo-et
(4fb1c16)
Optimization
Fixes
- Fixed transform skip with rectangular inter blocks (fb462b2)
- Fixed accidental inter search for 4x4 blocks (649113a)
User Interface
- Changed options for all preset levels (f033ad0)
- Added an option for limiting the number of steps in motion estimation with
--me-steps
(39ed368) - Added
--me=dia
(4e13608) - Added
--level
,--force-level
and--high-tier
for setting bitstream level and tier (bac0745)
Building
- Fixed issue with struct timespec redefinition with Visual Studio 2015 and later (713e694)
- Fixed building .asm files in Visual Studio 2017 (6be8195)
- Fixed compatibility with crypto++ 6.0 (4b24cd0)
- Added support for crypto++ with the name libcryptopp (411276d)
- Dockerfile base image was updated to Ubuntu 18.04 (8380b6c)
- Enabled
-Wextra
by default (ff17e0b)
Refactoring
BD-Bitrate
Average BD-Bitrate compared with v1.2:
Class | 0-uf | 1-sf | 2-vf | 3-fr | 4-f | 5-m | 6-s | 7-sr | 8-vs |
---|---|---|---|---|---|---|---|---|---|
hevc-A | -18.8 % | -17.5 % | -1.7 % | -6.2 % | -2.1 % | -6.1 % | -8.7 % | -19.1 % | -19.2 % |
hevc-B | -21.3 % | -20.9 % | -4.6 % | -5.7 % | -2.9 % | -6.6 % | -11.8 % | -26.4 % | -23.9 % |
hevc-C | -26.6 % | -24.9 % | -2.4 % | -8.3 % | -3.7 % | -11.9 % | -11.0 % | -26.1 % | -21.0 % |
hevc-D | -33.3 % | -31.1 % | -1.8 % | -11.5 % | -7.5 % | -16.5 % | -16.2 % | -28.9 % | -23.6 % |
hevc-E | -26.3 % | -25.3 % | -20.4 % | -15.4 % | -13.8 % | -15.7 % | -21.3 % | -26.3 % | -25.9 % |
hevc-F | -9.2 % | -8.4 % | -5.2 % | -4.9 % | -3.0 % | -20.8 % | -17.3 % | 0.2 % | 18.8 % |
Total | -22.7 % | -21.5 % | -5.7 % | -8.4 % | -5.3 % | -13.2 % | -14.4 % | -21.3 % | -15.4 % |
Speedup
Average speedup compared with v1.2 on an Intel Xeon E5-2620 v4 machine:
class | 0-uf | 1-sf | 2-vf | 3-fr | 4-f | 5-m | 6-s | 7-sr | 8-vs |
---|---|---|---|---|---|---|---|---|---|
hevc-A | x0.88 | x0.91 | x1.02 | x1.19 | x1.37 | x0.76 | x0.93 | x0.58 | x0.36 |
hevc-B | x0.90 | x0.92 | x1.08 | x1.21 | x1.40 | x0.81 | x0.99 | x0.62 | x0.38 |
hevc-C | x0.87 | x0.88 | x0.96 | x1.11 | x1.24 | x0.59 | x0.72 | x0.40 | x0.26 |
hevc-D | x0.92 | x0.97 | x1.03 | x1.23 | x1.34 | x0.65 | x0.74 | x0.38 | x0.27 |
hevc-E | x0.97 | x0.94 | x1.08 | x1.15 | x1.34 | x0.86 | x1.05 | x0.74 | x0.54 |
hevc-F | x0.81 | x0.91 | x1.01 | x1.09 | x1.30 | x0.78 | x0.88 | x0.49 | x0.35 |
Total | x0.89 | x0.92 | x1.03 | x1.17 | x1.33 | x0.74 | x0.88 | x0.53 | x0.35 |
v1.2.0
We are happy to release Kvazaar version 1.2. Since the last version, Kvazaar has obtained significant speedups at all presets and the compression efficiency has improved for the fastest presets. Please find the complete list of changes below.
Features
- Intra prediction mode encryption with
--crypto=intra_pred_modes
(2b8ce5e) - Adaptive QP for 360° video with
--erp-aqp
(26adef4) - New selection algorithm for
--owf=auto
and--threads=auto
(8c4a347) - Added an option to set the encryption key using
--key
(2e13091) - Added an option to limit SAO to band offset or edge offset only with
--sao=band
and--sao=edge
(8674c0f)
Optimization
- Reduced number of intra modes checked when using
--rd=2
(2cad317) - Reduced inter-frame CTU dependencies caused by SAO (050e90d)
- Changed to a faster calculation for coefficient costs when using
--rd=0
(1ead9c0)
Fixes
- Fixed long motion vectors not getting clipped (#158, 85e2a40)
- Fixed order of pictures in reconstruction debug output when
--gop=8
is used (#101, aae141f) - Fixed a use-after-free when encoding very few frames with
--gop=8
(#161, 2991962) - Fixed a crash when video size is not a multiple of the smallest CU size (2f2405d)
- Fixed invalid bitstream when QP is too large (382636d)
- Fixed a race condition causing a deadlock (5f8e17d)
- Fixed a memory leak in encryption (8654b48)
- Fixed I-frames not being IRAP frames when using GOP (00c9f52, 841597e)
- Fixed computing inter and intra costs with different metrics (afc13f1)
- Fixed reliance on undefined behavior (b41f0fa, 924cf85)
- Fixed
--mv-constraint=frametilemargin
constraining motion vectors too much (409d211) - Fixed using
--bipred
with--tmvp
(#160, 9974380)
User Interface
- Changed type of
kvz_config.roi.dqps
fromuint8_t*
toint8_t
. Delta QP values for--roi
may now be negative. (79cb3a2) - Changed PSNR display format (20d6444)
Building
- Default to no
-Werror
. Runconfigure
with--enable-werror
to enable it. (033bc6b) make check
now runs valgrind tests that used to only run on Travis. Programsffmpeg
,valgrind
andTAppDecoderStatic
should be found from$PATH
(6bbe5e1)
Refactoring
- Removed duplicate code in inter MVP and merge candidate selection (4fb0783)
- Removed duplicate code in intra reconstruction for luma and chroma (e944416)
- Changed functions for writing the CU tree bitstream to use luma pixel coordinates (610c91b, f5eef7f)
- Removed duplicate code in functions for writing intra CU bitstream with and without encryption (525a518)
- Removed duplicate code in helper functions in
search.c
(2c73476) - Gathered function parameters for inter search functions into a single struct (2fa3d82)
BD-Bitrate
Average BD-Bitrate compared with v1.1:
Class | 0-uf | 1-sf | 2-vf | 3-fr | 4-f | 5-m | 6-s | 7-sr | 8-vs |
---|---|---|---|---|---|---|---|---|---|
hevc-A | -15.71 % | -6.68 % | -4.66 % | -0.89 % | -1.11 % | -0.54 % | +0.04 % | -0.02 % | +0.32 % |
hevc-B | -19.04 % | -8.15 % | -6.92 % | -1.26 % | -1.48 % | -0.65 % | -0.33 % | -0.33 % | -0.07 % |
hevc-C | -20.39 % | -8.54 % | -5.01 % | -0.55 % | -0.72 % | -0.44 % | +0.03 % | -0.00 % | +0.23 % |
hevc-D | -13.24 % | -5.15 % | -2.54 % | -0.33 % | -0.51 % | -0.32 % | -0.10 % | -0.04 % | +0.13 % |
hevc-E | -4.37 % | -3.31 % | -1.90 % | -0.52 % | -1.10 % | -0.68 % | -0.74 % | -0.86 % | -0.78 % |
hevc-F | -12.42 % | -6.15 % | -5.25 % | +0.04 % | +0.24 % | +0.25 % | +0.32 % | +0.70 % | +0.90 % |
Total | -14.80 % | -6.59 % | -4.68 % | -0.60 % | -0.78 % | -0.39 % | -0.13 % | -0.08 % | +0.14 % |
Speedup
Average speedup compared with v1.1 on an Intel Core i7-4770 machine:
Class | 0-uf | 1-sf | 2-vf | 3-fr | 4-f | 5-m | 6-s | 7-sr | 8-vs |
---|---|---|---|---|---|---|---|---|---|
hevc-A | x1.07 | x1.06 | x1.10 | x1.10 | x1.09 | x1.11 | x1.10 | x1.11 | x1.10 |
hevc-B | x1.06 | x1.07 | x1.09 | x1.11 | x1.09 | x1.13 | x1.12 | x1.13 | x1.14 |
hevc-C | x1.22 | x1.27 | x1.32 | x1.35 | x1.33 | x1.37 | x1.39 | x1.42 | x1.41 |
hevc-D | x1.34 | x1.58 | x1.64 | x1.60 | x1.58 | x1.54 | x1.55 | x1.57 | x1.54 |
hevc-E | x1.20 | x1.17 | x1.16 | x1.18 | x1.16 | x1.17 | x1.16 | x1.20 | x1.19 |
hevc-F | x1.25 | x1.20 | x1.20 | x1.23 | x1.20 | x1.24 | x1.24 | x1.27 | x1.27 |
Total | x1.19 | x1.22 | x1.24 | x1.26 | x1.24 | x1.26 | x1.26 | x1.28 | x1.28 |
v1.1.0
I think there are enough new features to call this v1.1.0.
Average BD bitrate (QP 17, 22, 27, 32) v1.1.0 vs v1.0.0
Class | 0-uf | 1-sf | 2-vf | 3-fr | 4-f | 5-m | 6-s | 7-sr | 8-vs |
---|---|---|---|---|---|---|---|---|---|
A | -1.9% | -1.5% | -1.2% | -1.0% | -0.7% | -0.7% | -1.1% | -1.1% | -1.3% |
B | -2.2% | -1.3% | -1.4% | -0.8% | -0.5% | -0.6% | -0.9% | -0.8% | -1.0% |
C | -1.3% | -1.1% | -1.0% | -0.9% | -0.6% | -0.6% | -0.6% | -0.6% | -0.8% |
D | -1.1% | -0.9% | -0.7% | -0.7% | -0.6% | -0.5% | -0.1% | -0.2% | -0.4% |
E | -2.5% | -1.5% | -0.9% | -0.7% | -0.3% | -0.3% | -0.5% | -0.4% | -0.4% |
F | -1.6% | -0.7% | -0.9% | -0.8% | -0.5% | -0.4% | -0.7% | -0.7% | -0.7% |
All | -1.7% | -1.2% | -1.0% | -0.8% | -0.5% | -0.5% | -0.6% | -0.6% | -0.8% |
Average speedup (QP 17, 22, 27, 32) v1.1.0 vs v1.0.0
Class | 0-uf | 1-sf | 2-vf | 3-fr | 4-f | 5-m | 6-s | 7-sr | 8-vs |
---|---|---|---|---|---|---|---|---|---|
A | 1.03x | 1.02x | 1.01x | 1.01x | 1.01x | 1.02x | 1.07x | 1.09x | 1.16x |
B | 1.03x | 1.01x | 1.02x | 1.01x | 1.01x | 1.01x | 1.06x | 1.06x | 1.13x |
C | 1.03x | 1.02x | 1.01x | 1.01x | 1.01x | 1.01x | 1.07x | 1.07x | 1.16x |
D | 1.07x | 1.05x | 1.03x | 1.03x | 1.02x | 1.02x | 1.07x | 1.09x | 1.17x |
E | 0.99x | 0.97x | 0.98x | 0.99x | 0.99x | 0.99x | 1.00x | 1.02x | 1.05x |
F | 1.02x | 1.01x | 1.01x | 1.01x | 1.01x | 1.01x | 1.08x | 1.09x | 1.17x |
All | 1.03x | 1.02x | 1.01x | 1.01x | 1.01x | 1.01x | 1.06x | 1.07x | 1.14x |
Paramaters: --threads=4 --owf=1 -p64
Features
- Bitrate control now works at LCU level, giving more consistent results. (2318bd7)
- Added --roi parameter for LCU level delta-QP control. (4a0121a)
- Added --slices parameter for encapsulating tiles and WPP-rows into slice NAL's instead of using bitstream offsets. (1e6463c)
- Temporal motion vector prediction now works with B-frames. (d892be5)
Optimization
- Added AVX2 version of SSD. (778e46d)
- Optimized intra reference building. (c31207e)
- Optimized bitstream writes. (a9e45ef)
- Optimized CU-split decision. (2c069a3)
- Fix main-thread busy-looping on Linux. (a5a925f)
- Avoid initializing memory needlessly during RDOQ. (acd12cb, b021d22)
Fixes
- Pass DTS and PTS timestamps correctly through the API. (d18de19)
- Fixed bug with subpixel motion estimation within tiles. (2c005cd)
- Improved 10-bit RD-performance. (70a52f0)
- Fixed for stupendously large bitstreams when --mv-constraint was used with --subme. (937a764)
- Fixed bug with --smp and --amp. (46c9a48)
- Fix problem with --bipred. (1e6463c)
- Fixed hang with threading on OSX. (d893474)
- Fix crash when frame is less than 65 pixels high and WPP is used. (b8e3513)
User Interface
- Disabled WPP with tiles enabled. (cb6672b)
- Improved --help. (5bf7454, 78a28e0)
- Made it possible to disable the gop-structure that was enabled by default in v.1.0.0. (deb63f7)
- Have --threads=auto enable threading instead of disabling it. (db5e750)
- Give errors on failures and handle them better. (97863cd, 6a178de)
- Use reference picture number of medium preset by default. (7ff33e1)
Building
- Include optimizations on 32-bit. (1dcc993)
- Added appveyor CI tests for MSYS2. (e269b86)
- Add pkg-config macros, so pkg-config doesn't need to be installed anymore. (2d7daa1)
- Travis CI OSX tests work again. (c32f5fa)
Refactoring
v1.0.0
It's been 9 months since last release. Now that the encoder just got 10x faster (on veryslow), and quite a bit faster and better on every other preset as well, I think it's time for a major verson bump.
Average BD bitrate (QP 17, 22, 27, 32) v1.0.0 vs v0.8.3
Class | 0-uf | 1-sf | 2-vf | 3-fr | 4-f | 5-m | 6-s | 7-sr | 8-vs |
---|---|---|---|---|---|---|---|---|---|
A | -16.4% | -26.9% | -27.5% | -31.0% | -11.2% | -11.9% | -11.3% | -6.7% | -4.8% |
B | -16.2% | -33.7% | -31.7% | -37.6% | -11.6% | -14.8% | -15.7% | -9.1% | -6.3% |
C | -7.0% | -17.6% | -28.0% | -31.2% | -8.3% | -9.0% | -11.3% | -7.1% | -8.1% |
D | -3.7% | -12.3% | -29.2% | -30.3% | -5.4% | -5.9% | -11.5% | -8.3% | -9.9% |
E | -28.4% | -42.6% | -33.5% | -39.4% | -22.6% | -28.5% | -20.3% | -7.0% | -0.7% |
F | -6.1% | -11.3% | -12.8% | -16.5% | -10.1% | -2.1% | 2.3% | 10.8% | 6.4% |
|
|All|-13.0%|-24.1%|-27.1%|-31.0%|-11.5%|-12.0%|-11.3%| -4.6%| -3.9%|
Average speedup (QP 17, 22, 27, 32) v1.0.0 vs v0.8.3
Class | 0-uf | 1-sf | 2-vf | 3-fr | 4-f | 5-m | 6-s | 7-sr | 8-vs |
---|---|---|---|---|---|---|---|---|---|
A | 1.61x | 1.91x | 1.89x | 1.37x | 2.69x | 3.33x | 4.79x | 7.32x | 11.06x |
B | 1.65x | 1.98x | 1.96x | 1.46x | 2.67x | 3.36x | 4.79x | 8.15x | 13.89x |
C | 1.76x | 1.97x | 1.98x | 1.45x | 2.52x | 2.97x | 4.87x | 9.32x | 15.77x |
D | 2.09x | 1.87x | 1.81x | 1.32x | 1.97x | 2.36x | 5.13x | 8.78x | 12.65x |
E | 1.91x | 1.96x | 1.75x | 1.40x | 3.00x | 3.70x | 4.87x | 6.06x | 7.56x |
F | 1.84x | 1.83x | 1.74x | 1.41x | 2.86x | 2.98x | 4.60x | 8.18x | 13.58x |
|
|All|1.81x|1.92x|1.86x|1.40x|2.62x|3.12x|4.84x|7.97x|12.42x|
Paramaeters: --threads=4 --owf=1 --wpp -p64
New Features
- --version
- --help
- --loop-input
- --mv-constraint to constrain motion vectors
- --tiles=2x2 as an alternative syntax for uniform tiles
- --hash=md5
- Print information about what SIMD optimizations are in use
- --mv=full8 --mv=full16 --mv=full32 --mv=full64
- --cu-split-termination=zero/off
- --crypto for selective encryption of bitstream (for OpenHEVC)
- --me-early-termination=sensitive/on/off for early termination of motion vector search
- Added 4x8 SMP and 4x12 AMP motion partitions
- --subme=0/1/2/3/4 for control over complexity of fractional pixel motion prediction
- --lossless for lossless coding
- Monochrome coding
- --input-format=420/400
- --input-bitdepth=8/10
- --tmpv for temporal motion vector predictor
- --rdoq-skip for not using rdoq for situations where it's unlikely to improve BDRate
- Modified --gop=lp-g4d3r1t1 syntax to not take the reference frames as a parameter, it's now --gop=lp-g4d3t1.
- Enable WPP and multithreading by default, with detection for number of cores
- Update all presets to ratedistortion-complexity optimized versions. These are based on a search of all (~ish) possible encoding parameters and bring a huge boost to both speed and BDRate when encoding with the presets (10x speed for veryslow, ~1.1x-4x for others, up to 30% improved BDRate for some presets).
- Set default options to match medium with intra period of 64, QP 22 and --gop=lp-g4d3t1
- --implicit-rdpcm RExt feature
Optimizations
- AVX2 version for Sample Adaptive Offset (SAO)
- Optimized memory copying
- AVX2 versions of filters for fractional pixel motion estimation
- AVX2 version for half pixel chroma sampling for SMP/AMP
- AVX2 versions for calculating two or four SATD values at once for small blocks
- Rewrote AVX2 version of fractional pixel motion compensation
- Rewrote motion vector cost calculation. It only got slightly faster, but BDRate improved a bunch due to the new implementation being more correct.
- Made AVX2 SAD use SSE4.1 for cases where there isn't an AVX2 implementation, speeding up SMP/AMP.
Bugfixes
- Fixed a bug in rate control where an int overflowed after coding 2^31 bits (2Gb)
- Fixed non-determinism intiles
- Fixed chroma reconstruction bug in tiles
- Fixed a bug with calculating the number of bits used for intra mode on 4x4 CUs
- Stopped checking zero motion vector multiple times in motion compensation
- Fixed possible segfault in motion compensation
- Fixed a race condition with OWF and SMP/AMP
- Gave pthread_cond_timedwait time in correctly, such that main thread now sleeps instead of busylooping when it has nothing to do
- Fixed rate control with lp-gop
- Fixed full search not taking temporal motion vector into account
- Allow non-gop-length intra period for lp-gop
Code / Building / Testing
- Moved SAO to it's own file
- Removed a ton of unnecessary includes
- Updated autotools ax_pthread
- Added build test for OS-X for Travis
- Made tests check for bitstream correctness
- Refactored some of the copypasta in motion vector search starting point selection
- Refactored the cu_info_t datastructures to hold information at a 4x4 resolution needed for AMP and SMP
- Changed cu_info_t to use bitfields to negate the effect of increasing the cu_info_t array by a factor of 4
- Moved bitstream generation from encoderstate.c to encode_coding_tree.c
- Renamed encoder_state_t.global to frame, which makes sense since it hold frame level data, not global data
- Rewrote integer vector inter prediction, because it was so bad
- Refactored init_lcu_t
- Added more tests for inter SAD
- Added speed tests for dual intra SAD functions
- Added more realistic speed tests for inter SAD
Other
- Added a manpage
- Added scripts for updating manpage and README based on --usage.
- Added a Dockerfile. Just because.
- Added commit date to --version
v0.8.3
Change version to 0.8.3