x86_64 Assembly code for VVC decoding filters
- Mentors
- J. Dekker, Nuo Mi
- Organization
- FFmpeg
- Technologies
- VVC, x86_64 Assembly, AVX2
- Topics
- assembly, Video Decoding, Video Codecs
Versatile Video Codec (a.k.a VVC, H.266) is the successor to the popular High
Efficiency Video Codec (a.k.a HEVC, H.265) video compression standard. In
anticipation of industry adoption, the FFmpeg community has embarked on the
ffvvc project, aiming to bring a VVC decoder into FFmpeg, the open source
multimedia processing framework. FFmpeg is the backbone to many open source
multimedia technologies, so a high-performance VVC decoder in FFmpeg will
allow many other projects to process VVC-encoded video without the baggage
of closed-source decoders.
While modern compilers like Clang and GCC can employ tons of optimization
techniques to speed up a compiled program, compilers are still not capible
of generating high-performance code for DSP and video processing workloads.
Modern compilers also struggle with the SIMD extensions introduced by CPU
manufacturers, such as the AVX2 extensions released by Intel in 2014. These
SIMD extensions massively improve performance in DSP and video processing workloads, and FFmpeg's HEVC decoder already employs AVX2 SIMD instructions to improve performance.
Given that previous work into writing HEVC decoding filters in x86_64
assembly with SIMD instructed yielded tangible performance improvements, this
proposal aims to implement the VVC deblocking filter in x86_64 assembly
to improve the ffvvc decoder's performance on x86_64 processors.