VAAPI
   HOME

TheInfoList



OR:

Video Acceleration API (VA-API) is an
open source Open source is source code that is made freely available for possible modification and redistribution. Products include permission to use the source code, design documents, or content of the product. The open-source model is a decentralized sof ...
application programming interface An application programming interface (API) is a way for two or more computer programs to communicate with each other. It is a type of software interface, offering a service to other pieces of software. A document or standard that describes how t ...
that allows applications such as
VLC media player VLC media player (previously the VideoLAN Client and commonly known as simply VLC) is a free and open-source, portable, cross-platform media player software and streaming media server developed by the VideoLAN project. VLC is available for desk ...
or
GStreamer GStreamer is a pipeline-based multimedia framework that links together a wide variety of media processing systems to complete complex workflows. For instance, GStreamer can be used to build a system that reads files in one format, processes them, ...
to use hardware video acceleration capabilities, usually provided by the
graphics processing unit A graphics processing unit (GPU) is a specialized electronic circuit designed to manipulate and alter memory to accelerate the creation of images in a frame buffer intended for output to a display device. GPUs are used in embedded systems, mobi ...
(GPU). It is implemented by the
free and open-source Free and open-source software (FOSS) is a term used to refer to groups of software consisting of both free software and open-source software where anyone is freely licensed to use, copy, study, and change the software in any way, and the source ...
library A library is a collection of materials, books or media that are accessible for use and not just for display purposes. A library provides physical (hard copies) or digital access (soft copies) materials, and may be a physical location or a vir ...
, 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 The Direct Rendering Infrastructure (DRI) is the framework comprising the modern Linux graphics stack which allows unprivileged user-space programs to issue commands to graphics hardware without conflicting with other programs. The main use ...
(DRI) in
X Window System The X Window System (X11, or simply X) is a windowing system for bitmap displays, common on Unix-like operating systems. X provides the basic framework for a GUI environment: drawing and moving windows on the display device and interacting wit ...
on
Unix Unix (; trademarked as UNIX) is a family of multitasking, multiuser computer operating systems that derive from the original AT&T Unix, whose development started in 1969 at the Bell Labs research center by Ken Thompson, Dennis Ritchie, and ot ...
-like
operating system An operating system (OS) is system software that manages computer hardware, software resources, and provides common services for computer programs. Time-sharing operating systems schedule tasks for efficient use of the system and may also in ...
s (including
Linux Linux ( or ) is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically packaged as a Linux distribution, which ...
,
FreeBSD FreeBSD is a free and open-source Unix-like operating system descended from the Berkeley Software Distribution (BSD), which was based on Research Unix. The first version of FreeBSD was released in 1993. In 2005, FreeBSD was the most popular ...
,
Solaris Solaris may refer to: Arts and entertainment Literature, television and film * ''Solaris'' (novel), a 1961 science fiction novel by Stanisław Lem ** ''Solaris'' (1968 film), directed by Boris Nirenburg ** ''Solaris'' (1972 film), directed by ...
), and
Android Android may refer to: Science and technology * Android (robot), a humanoid robot or synthetic organism designed to imitate a human * Android (operating system), Google's mobile operating system ** Bugdroid, a Google mascot sometimes referred to ...
, however it can potentially also be used with direct
framebuffer A framebuffer (frame buffer, or sometimes framestore) is a portion of random-access memory (RAM) containing a bitmap that drives a video display. It is a memory buffer containing data representing all the pixels in a complete video frame. Modern ...
and graphics sub-systems for video output. Accelerated processing includes support for
video decoding A video decoder is an electronic circuit, often contained within a single integrated circuit chip, that converts base-band analog video signals to digital video. Video decoders commonly allow programmable control over video characteristics such ...
,
video encoding In information theory, data compression, source coding, or bit-rate reduction is the process of encoding information using fewer bits than the original representation. Any particular compression is either lossy or lossless. Lossless compression ...
, subpicture blending, and rendering. The VA-API specification was originally designed by
Intel Intel Corporation is an American multinational corporation and technology company headquartered in Santa Clara, California. It is the world's largest semiconductor chip manufacturer by revenue, and is one of the developers of the x86 seri ...
for its GMA (Graphics Media Accelerator) series of
GPU A graphics processing unit (GPU) is a specialized electronic circuit designed to manipulate and alter memory to accelerate the creation of images in a frame buffer intended for output to a display device. GPUs are used in embedded systems, mobil ...
hardware with the specific purpose of eventually replacing the
XvMC X-Video Motion Compensation (XvMC), is an extension of the X video extension (Xv) for the X Window System. The XvMC API allows video programs to offload portions of the video decoding process to the GPU video-hardware. In theory this process shoul ...
standard as the default Unix multi-platform equivalent of Microsoft Windows DirectX Video Acceleration (DxVA) 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 accelerated video 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 (
VLD french: Libéraux et démocrates flamands ouverts , abbreviation = Open Vld , logo = , leader1_title = President , leader1_name = Egbert Lachaert , foundation = 1992 (VLD)2007 (Open Vld) , predecessor = P ...
, IDCT,
motion compensation Motion compensation in computing, is an algorithmic technique used to predict a frame in a video, given the previous and/or future frames by accounting for motion of the camera and/or objects in the video. It is employed in the encoding of video d ...
,
deblocking A deblocking filter is a video filter applied to decoded compressed video to improve visual quality and prediction performance by smoothing the sharp edges which can form between macroblocks when block coding techniques are used. The filter aims ...
) for the prevailing coding standards today (
MPEG-2 MPEG-2 (a.k.a. H.222/H.262 as was defined by the ITU) is a standard for "the generic video coding format, coding of moving pictures and associated audio information". It describes a combination of Lossy compression, lossy video compression and ...
,
MPEG-4 ASP MPEG-4 Part 2, MPEG-4 Visual (formally ISO/ IEC 14496-2) is a video compression format developed by the Moving Picture Experts Group (MPEG). It belongs to the MPEG-4 ISO/IEC standards. It uses block-wise motion compensation and a discrete cosine ...
/
H.263 H.263 is a video compression standard originally designed as a low-bit-rate compressed format for videotelephony. It was standardized by the ITU-T Video Coding Experts Group (VCEG) in a project ending in 1995/1996. It is a member of the H.26x fam ...
, MPEG-4 AVC/H.264, H.265/HEVC, and VC-1/WMV3). Extending XvMC was considered, but due to its original design for MPEG-2 MotionComp only, it made more sense to design an interface from scratch that can fully expose the video decode capabilities in today's
GPU A graphics processing unit (GPU) is a specialized electronic circuit designed to manipulate and alter memory to accelerate the creation of images in a frame buffer intended for output to a display device. GPUs are used in embedded systems, mobil ...
s.


Supported hardware and drivers

As of 2019, VA-API is natively supported by: *
Intel Quick Sync Intel Quick Sync Video is Intel's brand for its dedicated video encoding and decoding hardware core. Quick Sync was introduced with the Sandy Bridge CPU microarchitecture on 9 January 2011 and has been found on the die of Intel CPUs ever since. T ...
open-source drivers for Linux *
Mesa A mesa is an isolated, flat-topped elevation, ridge or hill, which is bounded from all sides by steep escarpments and stands distinctly above a surrounding plain. Mesas characteristically consist of flat-lying soft sedimentary rocks capped by ...
open-source drivers for AMD and NVIDIA graphics cards * AMDGPU-PRO drivers for AMD graphics cards on Linux * libva-vdpau-driver for cards supported by
VDPAU Video Decode and Presentation API for Unix (VDPAU) is a royalty-free application programming interface (API) as well as its implementation as free and open-source library () distributed under the MIT License. VDPAU is also supported by Nvidia. Th ...


Supported video codecs

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. * MPEG-2 decode acceleration Main Profile * VC-1 / WMV3 decode acceleration Advanced Profile * MPEG-4 Part 2 (H.263) (a.k.a. MPEG-4 SP / MPEG-4 ASP, more commonly known as
Xvid Xvid (formerly "XviD") is a video codec library following the MPEG-4 video coding standard, specifically MPEG-4 Part 2 Advanced Simple Profile (ASP). It uses ASP features such as b-frames, global and quarter pixel motion compensation, lumi mas ...
) decode acceleration *
H.264 AVC Advanced Video Coding (AVC), also referred to as H.264 or MPEG-4 Part 10, is a video compression standard based on block-oriented, motion compensation, motion-compensated coding. It is by far the most commonly used format for the recording, com ...
encode acceleration Main Profile * H.264 AVC decode acceleration High Profile ** H.264 / AVC Hardware Variable Length Decoding (VLD) - CABAC ** H.264 / AVC Hardware Variable Length Decoding (VLD) - CAVLC ** H.264 / AVC Hardware Inverse Transform (IT) ** H.264 / AVC Hardware Motion Compensation (HWMC) ** H.264 / AVC Hardware In-Loop Deblocking (ILDB) * H.265/HEVC encode acceleration * H.265/HEVC decode acceleration *
VP9 VP9 is an open and royalty-free video coding format developed by Google. VP9 is the successor to VP8 and competes mainly with MPEG's High Efficiency Video Coding (HEVC/H.265). At first, VP9 was mainly used on Google's video platform YouTube. ...
8-bit encode acceleration * VP9 8-bit and 10-bit decode acceleration *
AV1 AOMedia Video 1 (AV1) is an open, royalty-free video coding format initially designed for video transmissions over the Internet. It was developed as a successor to VP9 by the Alliance for Open Media (AOMedia), a consortium founded in 2015 that ...
8-bit and 10-bit decode acceleration


Processes that can be accelerated with VA-API

Video decoding and post-processing processes that can be offloaded and accelerated if both the device drivers and GPU hardware supports them: *
Motion compensation Motion compensation in computing, is an algorithmic technique used to predict a frame in a video, given the previous and/or future frames by accounting for motion of the camera and/or objects in the video. It is employed in the encoding of video d ...
* Inverse discrete cosine transform * In-loop
deblocking filter A deblocking filter is a video filter applied to decoded compressed video to improve visual quality and prediction performance by smoothing the sharp edges which can form between macroblocks when block coding techniques are used. The filter aims ...
* Intra-frame prediction * variable-length decoding, more commonly known as slice-level acceleration * Bitstream processing (
Context-adaptive variable-length coding Context-adaptive variable-length coding (CAVLC) is a form of entropy coding used in H.264/MPEG-4 AVC video encoding. It is an inherently lossless compression technique, like almost all entropy-coders. In H.264/MPEG-4 AVC, it is used to encode re ...
/
Context-adaptive binary arithmetic coding Context-adaptive binary arithmetic coding (CABAC) is a form of entropy encoding used in the H.264/MPEG-4 AVC and High Efficiency Video Coding (HEVC) standards. It is a lossless compression technique, although the video coding standards in which it ...
)


Software architecture

The current interface is window system independent, so that it can potentially be used with graphics sub-systems other than the DRI (Direct Rendering Infrastructure) in
X Window System The X Window System (X11, or simply X) is a windowing system for bitmap displays, common on Unix-like operating systems. X provides the basic framework for a GUI environment: drawing and moving windows on the display device and interacting wit ...
, such as direct with
framebuffer A framebuffer (frame buffer, or sometimes framestore) is a portion of random-access memory (RAM) containing a bitmap that drives a video display. It is a memory buffer containing data representing all the pixels in a complete video frame. Modern ...
, and it can work with third-party DRM (Direct Rendering Manager) libraries. In a nutshell, it is a scheme to pass various types of data buffers from the application to the
GPU A graphics processing unit (GPU) is a specialized electronic circuit designed to manipulate and alter memory to accelerate the creation of images in a frame buffer intended for output to a display device. GPUs are used in embedded systems, mobil ...
for decoding or encoding a compressed bit-stream.


Software supporting VA-API

*
Clutter Clutter and its derivations may refer to any of the following: Excessive physical disorder * Clutter, a confusing, or disorderly, state or collection, and possible symptom of compulsive hoarding * Clutter (marketing), numerous advertisements, a ...
toolkit *
Jellyfin Jellyfin is a free and open-source media server and suite of multimedia applications designed to organize, manage, and share digital media files to networked devices. Jellyfin consists of a server application installed on a machine running Micr ...
media server
datarhei Restreamer
real-time live video streaming *
Emby Emby (formerly Media Browser) is a media server designed to organize, play, and stream audio and video to a variety of devices. Emby's source code was mostly open with some closed-source components as of August 2017, releases of the software p ...
media server (starting from release 3.0.6400) * Helix media player (
Linux Linux ( or ) is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically packaged as a Linux distribution, which ...
) * ''ffmpeg'', a command line tool from the
FFmpeg FFmpeg is a free and open-source software project consisting of a suite of libraries and programs for handling video, audio, and other multimedia files and streams. At its core is the command-line ffmpeg tool itself, designed for processing of vid ...
project, supports VA-API encoding through CLI with version starting from 3.1 and also
libavcodec libavcodec is a free and open-source library of codecs for encoding and decoding video and audio data. libavcodec is an integral part of many open-source multimedia applications and frameworks. The popular MPV, xine and VLC media players use ...
(also part of the FFmpeg project) does contain code that other applications use to support hardware accelerated decoding, including VA-API.
Fluendo
* Gnash Flash /
SWF SWF ( ) is an Adobe Flash file format used for multimedia, vector graphics and ActionScript.Open Screen Pr ...
player *
GStreamer GStreamer is a pipeline-based multimedia framework that links together a wide variety of media processing systems to complete complex workflows. For instance, GStreamer can be used to build a system that reads files in one format, processes them, ...
through *
Kodi KODI (1400 AM) is a radio station broadcasting a news/talk format. Licensed to Cody, Wyoming, United States, the station is currently owned by the Big Horn Radio Network, a division of Legend Communications of Wyoming, LLC, and features programm ...
(formerly XBMC Media Center) (
Linux Linux ( or ) is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically packaged as a Linux distribution, which ...
) * Kodibuntu (formerly XBMC Live) (Linux Live CD/USB operating-system) *
MPlayer MPlayer is a free and open-source media player software application. It is available for Linux, OS X and Microsoft Windows. Versions for OS/2, Syllable, AmigaOS, MorphOS and AROS Research Operating System are also available. A port for DOS usi ...
(v1 with patches) and its fork mpv (native) *
MythTV MythTV is a free and open-source home entertainment application with a simplified " 10-foot user interface" design for the living room TV. It turns a computer with the necessary hardware into a network streaming digital video recorder, a digital ...
(starting from release 0.25)
OpenShot
*
VLC media player VLC media player (previously the VideoLAN Client and commonly known as simply VLC) is a free and open-source, portable, cross-platform media player software and streaming media server developed by the VideoLAN project. VLC is available for desk ...
(starting from release 1.1.0) * Bluecherry DVR client (starting from release 2.2.6) *
Xine xine is a multimedia playback engine for Unix-like operating systems released under the GNU General Public License. xine is built around a shared library (xine-lib) that supports different frontend player applications. xine uses libraries ...
(via "''xine-lib-vaapi''" library) since Version 1.2.3 *
OBS Studio OBS Studio (also Open Broadcaster Software or OBS, for short) is a free, open-source, and cross-platform screencasting and streaming app. It is available for Windows, macOS, Linux distributions, and BSD The Berkeley Software Distributio ...
*
Firefox Mozilla Firefox, or simply Firefox, is a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. It uses the Gecko rendering engine to display web pages, which implements current and ...
(On Wayland since release 78 and on X11 since release 80)


See also

*
Distributed Codec Engine Distributed Codec Engine (DCE) is an API and its implementation as software library ("''libdce''") by Texas Instruments. The library was released under the Revised BSD License and some additional terms. It enables and provides remote access to h ...
(libdce) — Texas Instruments API for the video codec engine in OMAP based embedded systems *
OpenMAX OpenMAX (Open Media Acceleration), often shortened as "OMX", is a non-proprietary and royalty-free cross-platform set of C-language programming interfaces. It provides abstractions for routines that are especially useful for processing of audio, ...
— a royalty-free cross-platform media abstraction API from the Khronos Group


References


External links

*
Intel Media and Audio for Linux

mobile-hw-decode

"VA API slowly -- but surely -- making progress"
– an overview from 2009
"MPlayer, FFmpeg Gain VA-API Support"
– from 2008 {{freedesktop.org Application layer protocols Application programming interfaces Freedesktop.org Video acceleration Video acceleration APIs available on Linux X Window extensions