x265 1.6 has been released. The changes from the 1.5 release are mostly performance oriented, with heavy improvements for AVX2 capable platforms (Haswell and later Intel CPUs) and work efficiency improvements for multiple-socket machines.
= API changes =
—threads N replaced by —pools N,N and —lookahead-slices N —[no-]rdoq-level N — finer control over RDOQ effort —min-cu-size N — trade-off compression for performance —max-tu-size N — trade-off compression for performance —[no-]temporal-layers — code unreferenced B frames in temporal layer 1 —[no-]cip aliases added for —[no-]constrained-intra
Added support for new color transfer functions «smpte-st-2084» and «smpte-st-428
—limit-refs N was added, but not yet implemented
Deprecated x265_setup_primitives() was removed from the public API and is no longer exported DLLs
= Threading changes =
The x265 thread pool has been made NUMA aware. The —threads parameter, which used to specify a global pool size, has been replaced with a —pools parameter which allows you to specify a pool size per NUMA node (aka CPU socket or package). The default is still to allocate one pool worker thread per logical core on the machine, but with —pools one can isolate those threads to a given socket.
Other than socket isolation, the biggest visible change in the NUMA aware thread pools is the increase in work efficiency. The total utilization will generally decrease but the performance will increase since worker threads spend less time context switching. Also, the threading of the lookahead was made more work-efficient. Each lookahead job is a much larger piece of work.
Before (1.5):
disable thread pool: —threads 1
default thread pool: —threads 0
restrict to 4 threads: —threads 4
After (1.6):
disable thread pools: —pools 0
default thread pools: —pools *
restrict to 4 threads: —pools 4
restrict to 4 threads on socket 1: —pools -,4 restrict to all threads on socket 0: —pools +,-
= Multi-lib interface =
In order to support runtime selection of a libx265 shared library, we have introduced an x265_api structure and an x265_api_get() function.
Applications which use this interface to acquire the libx265 functional interface will be able to use shim libraries to bind a particular build of libx265 at run time. See the API documentation for full details.