Video Acceleration API
Stable release | 1.1.1 / March 18, 2013 |
---|---|
Development status | current |
Written in | C |
Operating system | Unix-like |
Type | Library |
License | MIT License |
Website | www.freedesktop.org/wiki/Software/vaapi |
Video Acceleration API (VA API) is a non-proprietary and royalty-free open source software library ("libVA") and API specification. The cross-platform API enables and provides access to hardware accelerated video processing, using hardware like for example graphics processing units (GPU) to accelerate video processing in order to offload the central processing unit (CPU) to decode and encode compressed digital video.
VA API video decode/encode interface is platform and window system independent but is today primarily targeted at Direct Rendering Infrastructure (DRI) in X Window System on Unix-based operating systems (including Linux, FreeBSD, Solaris), 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.[1]
The VA API specification was originally designed by Intel for its GMA (Graphics Media Accelerator) series of GPU hardware with the specific purpose of some day fully replacing XvMC 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 only GPUs nor to Intel specific hardware.[2] Other hardware and manufacturers can freely use this open standard API for hardware accelerated video processing with their own hardware without paying royalty fee.[3]
Overview
The main motivation for VA API is to enable hardware accelerated video decode at various entry-points (VLD, IDCT, Motion Compensation, deblocking[4]) for the prevailing coding standards today (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 AVC/H.264, 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 GPUs.[5]
Supported hardware and drivers
As of January 17, 2012 VA API is natively supported by :
- The free and open source drivers of Broadcom Crystal HD (example of a non-GPU based hardware)[6]
- The free and open source drivers of the integrated graphics known as "Intel® HD Graphics" (Intel HD Graphics 2000/2500/3000/4000) inside Intel Core i3 / i5 / i7 Processor Family (Nehalem, Sandy Bridge, Ivy Bridge microarchitecture based) processor family.[7]
- The free and open source drivers of the Intel G45 chipset (with Intel GMA X4500HD integrated graphics), and later[8]
- The closed source proprietary drivers for Intel's Poulsbo chipset with Imagination Technologies's PowerVR-based GMA 500 integrated graphics[9]
- The closed source proprietary drivers for Atom E6xx and Penwell based SoCs are also supported via its Media Infrastructure Accelerator (MI-X).[10]
- The closed source proprietary drivers Intel Medfield SoCs with Imagination Technologies's PowerVR (VXD375/385 and VXE250/285) based integrated graphics.[10]
- The closed source proprietary drivers of S3 Graphics's Chrome 400 and later series are also supported.[11]
- In November 2009, VA-API also gained a new proprietary backend named "xvba-video" which allows VA-API powered applications to take advantage of AMD Radeon's proprietary fglrx drivers for its chipsets with UVD2 support via the XvBA library (X-Video Bitstream Acceleration API designed by AMD), for closed source proprietary driver only.
- Additionally, VDPAU (Video Decode and Presentation API for Unix), a competing API designed by NVIDIA, can potentially also be used as a backend for the VA API. If this is supported, any software that supports VA API then also indirectly supports a subset of VDPAU.[12]
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.
- Supports MPEG-2 decode acceleration Main Profile
- Supports VC-1 / WMV3 decode acceleration Advanced Profile
- Supports MPEG-4 Part 2 (H.263) (a.k.a. MPEG-4 SP / MPEG-4 ASP, more commonly known as Xvid) decode acceleration
- Supports H.264 AVC encode acceleration Main Profile
- Supports 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)
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 (mocomp)
- Inverse discrete cosine transform (iDCT)
- In-loop deblocking filter
- Intra-frame prediction
- Variable-Length Decoding (VLD), more commonly known as slice-level acceleration
- Bitstream processing (CAVLC/CABAC)
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, such as direct with framebuffer, 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 for decoding or encoding a compressed bit-stream.
Sources
"The main motivation for VA-API (Video Acceleration API) is to enable hardware accelerated video decode/encode at various entry-points (VLD, IDCT, Motion Compensation etc.) for the prevailing coding standards today (MPEG-2, MPEG-4 ASP/H.263, MPEG-4 AVC/H.264, and VC-1/VMW3)."
http://www.freedesktop.org/wiki/Software/vaapi
"A new video acceleration API is being developed, in an effort led by Intel. This new API supports more complete offload (VLD) as well as iDCT+MC, and can support acceleration of MPEG4, H.264, VC-1, as well as MPEG-2." http://www.mythtv.org/wiki/XvMC
The "VA API" and "libVA" can also be read about here: "The end user impact is improved performance of H.264, VC-1, MPEG-2 and MPEG-4 video playback with media players that use the new API compared to playback using a pure software implementation." https://wiki.ubuntu.com/mobile-hw-decode
Software supporting VA API
- Helix media player (Linux)[13][14]
- Clutter (toolkit)
- Gnash Flash / SWF player[15]
- ffmpeg, a command line tool from the FFmpeg project, does not support VA-API, but libavcodec (also part of the FFmpeg project) does contain code that other applications use to support hardware accelerated decoding, including VA API.[16]
- Fluendo[17]
- XBMC Media Center (Linux)[18]
- XBMC Live (Linux Live CD/USB operating-system)[18]
- VLC media player (starting from release 1.1.0)[19]
- MythTV (starting from release 0.25)[20]
Some software may gain VA API support in the future : Lightspark (Flash / SWF player),[21] GStreamer (via "gstreamer-vaapi" VA-API plugins for GStreamer)[22] and Xine (via "xine-lib-vaapi" library).[23]
See also
- VDPAU (Video Decode and Presentation API for Unix)
- X-Video Bitstream Acceleration (XvBA)
- X-Video Motion Compensation (XvMC)
- DirectX Video Acceleration (DxVA) — Microsoft Windows API analogue
- Distributed Codec Engine (libdce) — Texas Instruments API for the video codec engine in OMAP based embedded systems
- OpenMAX — a royalty-free cross-platform media abstraction API from the Khronos Group
- Nvidia PureVideo — the bit-stream technology from NVIDIA used in their graphics chips to accelerate video decoding on hardware GPU
- Unified Video Decoder (UVD) — the bit-stream technology from ATI used in their graphics chips to accelerate video decoding on hardware GPU
References
- ↑ http://www.phoronix.com/scan.php?page=news_item&px=MTA0NDI VA-API Video Acceleration On Intel Medfield
- ↑ https://events.linuxfoundation.org/images/stories/pdf/lceu2012_debski.pdf Video4Linux2 - Path to a Standardized Video Codec API
- ↑ Nathan Willis (2009-07-01). "VA API slowly, but surely, making progress". lwn.net.
- ↑ MPlayer, FFmpeg Gain VA-API Support
- ↑ freedesktop.org - Software/vaapi, About
- ↑ http://gitorious.org/crystalhd-video CrystalHD backend for VA-API (libva)
- ↑ http://intellinuxgraphics.org/h264.html Intel hardware-accelerated media decoding and encoding on Linux
- ↑ http://intellinuxgraphics.org/documentation.html
- ↑ Intel's Poulsbo Driver A Bloody Mess?
- ↑ 10.0 10.1 http://www.phoronix.com/scan.php?page=news_item&px=MTA0NDI VA-API Video Acceleration On Intel Medfield
- ↑ S3 Graphics Releases Linux Driver With OpenGL 3.0, VA API
- ↑ Michael Larabel (2009-02-03). "A NVIDIA VDPAU Back-End For Intel's VA-API". Phoronix. Retrieved 2009-03-13.
- ↑ Mailing list entry that describes uses of VA-API
- ↑ https://community.helixcommunity.org/Licenses/realplayer_for_mid_faq.html RealPlayer for MID & Intel/Linux FAQ
- ↑ .264 VA-API GPU Video Acceleration For Flash
- ↑ Gnash uses libavcodec's VA-API code for hardware accelerated video decoding
- ↑ Fluendo's New Codecs Support VDPAU, VA-API
- ↑ 18.0 18.1 XBMC Gets Working Intel VA-API Support
- ↑ VLC 1.1.0 release notes
- ↑ MythTV 0.25 release notes
- ↑ (English) Bug report on Launchpad
- ↑ http://www.splitted-desktop.com/~gbeauchesne/gstreamer-vaapi/ gstreamer-vaapi - VA-API plugins for GStreamer
- ↑ (English) VAAPI support for Xine on xine-devel mailing list
External links
- http://www.freedesktop.org/wiki/Software/vaapi
- an overview article
- http://intellinuxgraphics.org/vaapi.html
- http://wiki.ubuntu.com/mobile-hw-decode
- Splitted-Desktop Systems patches to add VA API support to FFmpeg and MPlayer
- MPlayer, FFmpeg Gain VA-API Support
|
|