Hardware video acceleration: Difference between revisions
m (Fixed typo.) |
(→Configuration: restore version from https://wiki.archlinux.org/index.php?title=Hardware_video_acceleration&oldid=436533 due to unexplained/incomprehensible changes and loss of content (see ArchWiki:Contributing#The 3 fundamental rules)) |
||
Line 241: | Line 241: | ||
== Configuration == | == Configuration == | ||
=== Configuring VA-API === | |||
The [http://www.freedesktop.org/wiki/Software/vaapi/#driversback-endsthatimplementva-api driver] for VA-API is autodetected. To determine which one is used see [[#Verifying]]. You can override it by setting the {{ic|LIBVA_DRIVER_NAME}} [[environment variable]]: | |||
* For Intel Graphics use {{ic|i965}}. | |||
* For NVIDIA use {{ic|vdpau}}. | |||
* For AMD use either {{ic|gallium}} (for {{Pkg|libva-mesa-driver}}) or {{ic|vdpau}} (for {{Pkg|libva-vdpau-driver}}). | |||
You can | {{note|You can find the installed drivers in {{ic|/usr/lib/dri/}}.}} | ||
=== Configuring VDPAU === | === Configuring VDPAU === | ||
{{Expansion|When does {{ic|VDPAU_DRIVER}} ''need'' to be set? So far I only know about Intel and Catalyst (because of {{pkg|libvdpau-va-gl}}), it should work correctly with other cards.}} | |||
The driver for use with VDPAU is auto-detected, but you may need to override it by using the {{ic|VDPAU_DRIVER}} [[environment variable]]. | |||
The name | The correct driver name depends on your setup: | ||
* For Intel Graphics or AMD Catalyst you [[#Failed_to_open_VDPAU_backend|need]] to set it to {{ic|va_gl}}. | |||
* For the open source AMD/ATI driver set it to the proper driver version depending on your GPU (see below). | |||
* For NVIDIA's proprietary version set it to {{ic|nvidia}}. | |||
The driver name can determined by running: | |||
{{hc|$ grep -i vdpau ~/.local/share/xorg/Xorg.0.log| | {{hc|$ grep -i vdpau ~/.local/share/xorg/Xorg.0.log| | ||
(II) RADEON(0): [DRI2] VDPAU driver: r300 | (II) RADEON(0): [DRI2] VDPAU driver: r300 | ||
}} | }} | ||
In this case you want to set {{ic|1=VDPAU_DRIVER=r300}}. | |||
{{note|You can find the installed drivers in {{ic|/usr/lib/vdpau/}}.}} | |||
For hybrid setups (both NVIDIA and AMD), it may be necessary to [[environment variable|set]] {{ic|1=DRI_PRIME=1}}. For more information see [[PRIME]]. | For hybrid setups (both NVIDIA and AMD), it may be necessary to [[environment variable|set]] {{ic|1=DRI_PRIME=1}}. For more information see [[PRIME]]. |
Revision as of 20:23, 7 June 2016
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.
Support
Formats
libva-intel-driver | libva-mesa-driver | libva-xvba-driverAUR | libva-vdpau-driver | |
---|---|---|---|---|
MPEG2 decoding | GMA 4500 and newer | Radeon HD 4000 and newer | ||
MPEG4 decoding | Radeon HD 6000 and newer | |||
H.264 decoding | GMA 45001, Ironlake Graphics and newer | Radeon HD 4000 and newer | ||
VC1 decoding | Sandy Bridge Graphics and newer | Radeon HD 4000 and newer | ||
MPEG2 encoding | Ivy Bridge Graphics and newer | |||
H.264 encoding | Sandy Bridge Graphics and newer |
mesa-vdpau | libvdpau-va-gl | libvdpau-amdgpu-proAUR | nvidia-utils | |
---|---|---|---|---|
MPEG2 decoding | Radeon 9500 and newer, GeForce 8 and newer | GeForce 8 and newer | ||
MPEG4 decoding | Radeon HD 6000 and newer, GeForce 200 and newer | GeForce 200 and newer | ||
H.264 decoding | Radeon HD 4000 and newer, GeForce 8 and newer | GeForce 8 and newer | ||
VC1 decoding | Radeon HD 4000 and newer, GeForce 83 and newer | GeForce 83 and newer | ||
HEVC (H.265) decoding | GeForce 9004 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 libvdpau-amdgpu-proAUR package, see also: AMD Radeon™ Software AMD GPU-PRO Beta Driver – Linux® for Vulkan™ Release Notes. Loosely, this VDPAU driver is for the Radeon R9 family.
Software
VA-API | VDPAU | |
---|---|---|
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) |
Kodi | ✓ | ✓ |
Firefox | ✗ [1] [2] [3] |
Installation
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).
There are also two specific types of drivers for VA-API and VDPAU:
- libva-vdpau-driver, which uses VDPAU as a backend for VA-API.
- libvdpau-va-gl, which uses VA-API as a backend for VDPAU.
For pre-2007 cards see XvMC.
Installing VA-API
Open source drivers:
- AMD Radeon 9500 and newer GPUs are supported by either libva-mesa-driver with mesa or libva-vdpau-driver (see #Installing VDPAU).
- Intel GMA 4500 series and newer GPUs are supported by libva-intel-driver with mesa.
- To get better support on GMA 4500 consider using libva-intel-driver-g45-h264AUR instead, see Intel#H.264 decoding on GMA 4500 for instructions and caveats.
- NVIDIA GeForce 8 series and newer GPUs are supported by libva-vdpau-driver (see #Installing VDPAU).
Proprietary drivers:
- AMD Radeon HD 4000 series and newer GPUs are supported by libva-xvba-driverAUR. It uses the catalyst-utilsAUR driver for Radeon HD 5000 series and newer, and catalyst-total-hd234kAUR for Radeon HD 4000 series.
- NVIDIA GeForce 8 series and newer GPUs are supported by libva-vdpau-driver (see #Installing VDPAU).
Installing VDPAU
Open source drivers:
- AMD Radeon 9500 and newer GPUs are supported by mesa-vdpau.
- Intel GMA 4500 series and newer GPUs are supported by libvdpau-va-gl (see #Installing VA-API).
- NVIDIA GeForce 8 series and newer GPUs are supported by mesa-vdpau. It requires nouveau-fwAUR, which contains the required firmware to operate that is presently extracted from the NVIDIA binary driver.
Proprietary drivers:
- AMD Radeon HD 4000 series and newer GPUs are supported by libvdpau-va-gl (see #Installing VA-API).
- NVIDIA GeForce 400 series and newer GPUs are supported by nvidia-utils.
- GeForce 8/9 and GeForce 100-300 series are supported by nvidia-340xx-utils.
Verification
Verifying VA-API
Verify the settings for VA-API by running vainfo
, which is provided by libva:
$ vainfo
libva info: VA-API version 0.39.0 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.0) vainfo: Driver version: Intel i965 driver for Intel(R) Sandybridge Mobile - 1.7.0 vainfo: Supported profile and entrypoints VAProfileMPEG2Simple : VAEntrypointVLD VAProfileMPEG2Main : VAEntrypointVLD VAProfileH264ConstrainedBaseline: VAEntrypointVLD VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice VAProfileH264Main : VAEntrypointVLD VAProfileH264Main : VAEntrypointEncSlice VAProfileH264High : VAEntrypointVLD VAProfileH264High : VAEntrypointEncSlice VAProfileH264StereoHigh : VAEntrypointVLD VAProfileVC1Simple : VAEntrypointVLD VAProfileVC1Main : VAEntrypointVLD VAProfileVC1Advanced : VAEntrypointVLD VAProfileNone : VAEntrypointVideoProc
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
Verifying VDPAU
You can verify that the VDPAU driver is loaded correctly using vdpauinfo:
$ vdpauinfo | grep "Information string:"
Information string: NVIDIA VDPAU Driver Shared Library 364.19 Tue Apr 19 14:14:26 PDT 2016
Configuration
Configuring VA-API
The driver for VA-API is autodetected. To determine which one is used see #Verifying. You can override it by setting the LIBVA_DRIVER_NAME
environment variable:
- For Intel Graphics use
i965
. - For NVIDIA use
vdpau
. - For AMD use either
gallium
(for libva-mesa-driver) orvdpau
(for libva-vdpau-driver).
/usr/lib/dri/
.Configuring VDPAU
The driver for use with VDPAU is auto-detected, but you may need to override it 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 below).
- For NVIDIA's proprietary version set it to
nvidia
.
The driver name can determined by running:
$ grep -i vdpau ~/.local/share/xorg/Xorg.0.log
(II) RADEON(0): [DRI2] VDPAU driver: r300
In this case you want to set VDPAU_DRIVER=r300
.
/usr/lib/vdpau/
.For hybrid setups (both NVIDIA and AMD), it may be necessary to set DRI_PRIME=1
. For more information see PRIME.
Troubleshooting
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.
VA-API vaInitialize failed
If vainfo gives you this error:
libva info: va_openDriver() returns -1 vaInitialize failed with error code -1 (unknown libva error),exit
You may need to set the LIBVA_DRIVER_NAME
environment variable to vdpau
or gallium
, see #Configuring VA-API.