Contributor
zackerthescar

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.