Hardware video acceleration

From ArchWiki
Revision as of 19:24, 14 April 2017 by Atgaskins (talk | contribs) (Verifying VA-API: Added a warning about missing vainfo util in libva starting with the 1.8.x branch. the libva-utils package seems to aim to solve this, but it needs updating too... but the best I know to point users in the right direction for now.)
Jump to navigation Jump to search

Hardware video acceleration makes it possible for the video card to decode/encode video, thus offloading the CPU and saving power.

There are several ways to achieve this on Linux:

  • Video Acceleration API (VA-API) is a specification and open source library to provide both hardware accelerated video encoding and decoding, developed by Intel.
  • Video Decode and Presentation API for Unix (VDPAU) is an open source library and API to offload portions of the video decoding process and video post-processing to the GPU video-hardware, developed by NVIDIA.
  • X-Video Motion Compensation (XvMC) is an extension for the X.Org Server, allowing video programs to offload portions of the video decoding process to the GPU video-hardware.



Tango-view-fullscreen.pngThis article or section needs expansion.Tango-view-fullscreen.png

Reason: I haven't found a usable list for libva-mesa-driver or amdgpu-pro-vdpauAUR. (Discuss in Talk:Hardware video acceleration#)
Note: To choose the correct driver see #Installation.
libva-intel-driver [1] libva-mesa-driver libva-vdpau-driver xvba
MPEG2 GMA 4500 and newer
Radeon HD 4000 and newer
Radeon HD 6000 and newer
H.264 GMA 45001, Ironlake Graphics and newer
Radeon HD 4000 and newer
HEVC (H.265) Cherryview/Braswell and newer
VC1 Sandy Bridge Graphics and newer
Radeon HD 4000 and newer
VP8 Broadwell and newer
VP9 Broxton and newer
MPEG2 Ivy Bridge Graphics and newer
H.264 Sandy Bridge Graphics and newer
HEVC (H.265) Skylake and newer
VP8 Cherryview/Braswell and newer
VP9 Kaby Lake and newer
mesa-vdpau libvdpau-va-gl amdgpu-pro-vdpauAUR nvidia-utils
MPEG2 Radeon 9500 and newer, GeForce 8 and newer
GeForce 8 and newer
MPEG4 Radeon HD 6000 and newer, GeForce 200 and newer
GeForce 200 and newer
H.264 Radeon HD 4000 and newer, GeForce 8 and newer
GeForce 8 and newer
HEVC (H.265)
GeForce 9004 and newer
VC1 Radeon HD 4000 and newer, GeForce 83 and newer
GeForce 83 and newer
  • 1 Supported by libva-intel-driver-g45-h264AUR instead.
  • 2 As of version 0.3, the VA GL driver doesn't support any other hardware decoder than H.264.
  • 3 Except GeForce 8800 Ultra, 8800 GTX, 8800 GTS (320/640 MB).
  • 4 Except GeForce GTX 970 and GTX 980.

The features supported by your GPU may vary. To see what your GPU supports see #Verification.

Regarding the amdgpu-pro-vdpauAUR package, see AMDGPU#AMDGPU PRO.


GStreamer ✓ (with gstreamer-vaapi, see GStreamer#Hardware acceleration) ✓ (with gst-plugins-bad, see GStreamer#Hardware acceleration)
VLC media player ✓ (see VLC media player#Hardware acceleration support) ✓ (see VLC media player#Hardware acceleration support)
mpv ✓ (see mpv#Hardware Decoding) ✓ (see mpv#Hardware Decoding)
MPlayer ✓ (with mplayer-vaapiAUR, see MPlayer#Enabling VA-API) ✓ (see MPlayer#Enabling VDPAU)
Flash ✓ (with libvdpau-va-gl, see Flash#Configuration) ✓ (see Flash#Configuration)
Firefox [2] [3] [4]


Tango-view-fullscreen.pngThis article or section needs expansion.Tango-view-fullscreen.png

Reason: The AMDGPU driver is not mentioned. (Discuss in Talk:Hardware video acceleration#)

The choice varies depending on your video card vendor:

  • For Intel Graphics use VA-API.
  • For NVIDIA cards use VDPAU.
  • For AMD cards you can use both (with mesa). The difference is really only in the application implementation [5].

There are also two specific types of drivers for VA-API and VDPAU:

For pre-2007 cards see XvMC.

Tip: It is recommended to install and configure both VA-API and VDPAU to achieve support in different scenarios, e.g. Flash doesn't support VA-API but can use the VDPAU VA-API backend.

Installing VA-API

Open source drivers:

Proprietary drivers:

Installing VDPAU

Open source drivers:

Proprietary drivers:


Your system may work perfectly out-of-the-box without needing any configuration. Therefore it’s a good idea to start with this section to see it that’s is the case.

Tip: mpv is great for testing hardware acceleration in practice.

Verifying VA-API

Warning: It seems that upstream developers have removed the vainfo tool from libva starting with the 1.8.x branch. Try libva-utilsAUR as an alternative.

Verify the settings for VA-API by running vainfo, which is provided by libva:

$ vainfo
libva info: VA-API version 0.39.4
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_0_39
libva info: va_openDriver() returns 0
vainfo: VA-API version: 0.39 (libva 1.7.3)
vainfo: Driver version: Intel i965 driver for Intel(R) Skylake - 1.7.3
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            :	VAEntrypointVLD
      VAProfileMPEG2Simple            :	VAEntrypointEncSlice
      VAProfileMPEG2Main              :	VAEntrypointVLD
      VAProfileMPEG2Main              :	VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSliceLP
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointEncSlice
      VAProfileH264Main               :	VAEntrypointEncSliceLP
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointEncSlice
      VAProfileH264High               :	VAEntrypointEncSliceLP
      VAProfileH264MultiviewHigh      :	VAEntrypointVLD
      VAProfileH264MultiviewHigh      :	VAEntrypointEncSlice
      VAProfileH264StereoHigh         :	VAEntrypointVLD
      VAProfileH264StereoHigh         :	VAEntrypointEncSlice
      VAProfileVC1Simple              :	VAEntrypointVLD
      VAProfileVC1Main                :	VAEntrypointVLD
      VAProfileVC1Advanced            :	VAEntrypointVLD
      VAProfileNone                   :	VAEntrypointVideoProc
      VAProfileJPEGBaseline           :	VAEntrypointVLD
      VAProfileJPEGBaseline           :	VAEntrypointEncPicture
      VAProfileVP8Version0_3          :	VAEntrypointVLD
      VAProfileVP8Version0_3          :	VAEntrypointEncSlice
      VAProfileHEVCMain               :	VAEntrypointVLD
      VAProfileHEVCMain               :	VAEntrypointEncSlice

VAEntrypointVLD means that your card is capable to decode this format, VAEntrypointEncSlice means that you can encode to this format.

In this example the i965 driver is used, as you can see in this line:

libva info: Trying to open /usr/lib/dri/i965_drv_video.so

If the following error is displayed when running vainfo:

libva info: va_openDriver() returns -1
vaInitialize failed with error code -1 (unknown libva error),exit

You need to configure the correct driver, see #Configuring VA-API.

Verifying VDPAU

Install vdpauinfo to verify if the VDPAU driver is loaded correctly and retrieve a full report of the configuration:

$ vdpauinfo
display: :0   screen: 0
API version: 1
Information string: G3DVL VDPAU Driver Shared Library version 1.0

Video surface:

name   width height types

420 16384 16384 NV12 YV12 422 16384 16384 UYVY YUYV 444 16384 16384 Y8U8V8A8 V8U8Y8A8 Decoder capabilities: name level macbs width height
MPEG1 --- not supported --- MPEG2_SIMPLE 3 9216 2048 1152 MPEG2_MAIN 3 9216 2048 1152 H264_BASELINE 41 9216 2048 1152 H264_MAIN 41 9216 2048 1152 H264_HIGH 41 9216 2048 1152 VC1_SIMPLE 1 9216 2048 1152 VC1_MAIN 2 9216 2048 1152 VC1_ADVANCED 4 9216 2048 1152 ..


Although the video driver should automatically enable hardware video acceleration support for both VA-API and VDPAU, it may be needed to configure VA-API/VDPAU manually. Only continue to this section if you went through #Verification.

Note: The default driver names, used if there’s no other configuration present, are guess by the system. However, they are often hacked together and may not work. You can see the guessed values by running:
$ grep -iE 'vdpau|dri driver' ~/.local/share/xorg/Xorg.0.log
(II) RADEON(0): [DRI2] DRI driver: radeonsi
(II) RADEON(0): [DRI2] VDPAU driver: radeonsi

In this case radeonsi is the default for both VA-API and VDPAU.

This does not represent the configuration however. The values above won’t change even if you override them.

Configuring VA-API

You can override the driver for VA-API by using the LIBVA_DRIVER_NAME environment variable:

  • For Intel Graphics use i965.
  • For NVIDIA use vdpau.
  • For AMD use either radeonsi or vdpau.
  • You can find the installed drivers in /usr/lib/dri/. They are used as /usr/lib/vdpau/${LIBVA_DRIVER_NAME}_drv_video.so.
  • Some drivers are installed several times under different names for compatibility reasons. You can see which by running sha1sum /usr/lib/dri/*.
  • Since version 12.0.1 libva-mesa-driver provides radeonsi instead of gallium.

Configuring VDPAU

You can override the driver for VDPAU by using the VDPAU_DRIVER environment variable.

The correct driver name depends on your setup:

  • For Intel Graphics or AMD Catalyst you need to set it to va_gl.
  • For the open source AMD/ATI driver set it to the proper driver version depending on your GPU, see #Verification.
  • For NVIDIA's proprietary version set it to nvidia.
  • You can find the installed drivers in /usr/lib/vdpau/. They are used as /usr/lib/vdpau/libvdpau_${VDPAU_DRIVER}.so.
  • Some drivers are installed several times under different names for compatibility reasons. You can see which by running sha1sum /usr/lib/vdpau/*.
  • For hybrid setups (both NVIDIA and AMD), it may be necessary to set DRI_PRIME=1. For more information see PRIME.


Failed to open VDPAU backend

This happens when you use libvdpau-va-gl without overriding VDPAU_DRIVER. VDPAU doesn't know what driver to use in this case for some reason and guesses wrongly. See #Configuring VDPAU.

However you may want to configure your media player to use VA-API instead, getting far better results. See #Software.