Video AccelerationAPI is a royalty-free API that allows applications such as VLC media player or GStreamer to use hardware video acceleration capabilities, usually provided by the graphics processing unit. It is implemented by the free and open-sourcelibrarylibva, combined with a hardware-specific driver, usually provided together with the GPU driver. VA-API video decode/encode interface is platform and window system independent but is primarily targeted at Direct Rendering Infrastructure in X Window System on Unix-like operating systems, and Android, however it can potentially also be used with direct framebuffer and graphics sub-systems for video output. Accelerated processing includes support for video decoding, video encoding, subpicture blending, and rendering. The VA-API specification was originally designed by Intel for its GMA series of GPU hardware with the specific purpose of eventually replacing the XvMC standard as the default Unix multi-platform equivalent of Microsoft WindowsDirectX Video Acceleration API, but today the API is no longer limited to Intel-specific hardware or GPUs. Other hardware and manufacturers can freely use this open standard API for hardware acceleratedvideo processing with their own hardware without paying a royalty fee.
Overview
The main motivation for VA-API is to enable hardware-accelerated video decode at various entry-points for the prevailing coding standards today. Extending XvMC was considered, but due to its original design for MPEG-2MotionComp only, it made more sense to design an interface from scratch that can fully expose the video decode capabilities in today's GPUs.
VA-API currently supports these video codecs in the official mainline version, but note that exactly which video codecs are supported depends on the hardware and the driver's capabilities.
The current interface is window system independent, so that it can potentially be used with graphics sub-systems other than the DRI in X Window System, such as direct with framebuffer, and it can work with third-party DRM libraries. In a nutshell, it is a scheme to pass various types of data buffers from the application to the GPU for decoding or encoding a compressed bit-stream.
ffmpeg, a command line tool from the FFmpeg project, supports VA-API encoding through CLI with version starting from 3.1 and also libavcodec does contain code that other applications use to support hardware accelerated decoding, including VA-API.