VAAPI

From Gentoo Wiki
Jump to:navigation Jump to:search
Resources

VAAPI (Video Acceleration API) provides access to graphics hardware (GPU) acceleration for video processing.

Hardware support

Driver Chipset Formats
intel Intel GMA X4500HD and newer See 01.org - VAAPI Supported Hardware & Features.
VDPAU All supported graphics cards

Installation

USE flags

Global

VAAPI support can be enabled system-wide by adding the vaapi value to the USE variable:

FILE /etc/portage/make.conf
USE="vaapi"

Enabling VAAPI support will pull in the x11-libs/libva package, which has the following USE flags:

USE flags for x11-libs/libva Video Acceleration (VA) API for Linux

X Add support for X11
drm Enables VA/DRM API support.
opengl Add support for OpenGL (3D graphics)
wayland Enable dev-libs/wayland backend

These flags can be adjusted in /etc/portage/package.use.

The system needs to be updated if the USE variable has been set to vaapi:

root #emerge --ask --changed-use --deep @world

Usage

Install VAAPI-related utilities from media-video/libva-utils:

root #emerge --ask media-video/libva-utils

Run vainfo to check VAAPI support.

root #vainfo
vainfo: VA-API version: 0.35 (libva 1.3.1)
vainfo: Driver version: Intel i965 driver - 1.3.0
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            :	VAEntrypointVLD
      VAProfileMPEG2Simple            :	VAEntrypointEncSlice
      VAProfileMPEG2Main              :	VAEntrypointVLD
      VAProfileMPEG2Main              :	VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSlice
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointEncSlice
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointEncSlice
      VAProfileVC1Simple              :	VAEntrypointVLD
      VAProfileVC1Main                :	VAEntrypointVLD
      VAProfileVC1Advanced            :	VAEntrypointVLD
      VAProfileNone                   :	VAEntrypointVideoProc
      VAProfileJPEGBaseline           :	VAEntrypointVLD

It is possible to override the automatic VAAPI driver selection with the LIBVA_DRIVER_NAME variable:

  • Intel:
    • For libva-intel-driver use i965
    • For libva-intel-media-driver use iHD
  • NVIDIA:
    • For Nouveau use nouveau
    • For NVIDIA use vdpau
  • ATI/AMD:
    • For AMDGPU driver use radeonsi


When setting LIBVA_DRIVER_NAME to a driver for a secondary GPU, be sure to set DRI_PRIME accordingly as well.

Software support

Firefox

Firefox state can checked in about:support.

VLC

VLC supports VAAPI natively. Activate the appropriate setting through the preferences menu (Tools → Preferences → Input/Codecs → Hardware accelerated decoding).

mpv

mpv also supports the VAAPI acceleration through the command-line option --hwdec=vaapi.

If the hardware supports only h264 decoding, creating a configuration file similar to the following will enable the hardware to use VAAPI for h264 decoding to watch YouTube:

FILE ~/.config/mpv/mpv.conf
ytdl-format=bestvideo[height<=1080][ext=mp4]+bestaudio/best
hwdec=vaapi

ffmpeg

To record screen with VAAPI[1]:

user $ffmpeg -vaapi_device /dev/dri/renderD128 -f x11grab -video_size 1366x768 -i :0 -vf 'format=nv12,hwupload' -c:v h264_vaapi o.mp4

Verification

Intel iGPUs provide a way to verify usage of hardware encoding or decoding. Package x11-apps/igt-gpu-tools provides intel-gpu-top utility which can be used for a top-like GPU monitoring.

Hardware encoding/decoding activity can be observed. A greater-than-zero Video BUSY value means an active hardware processing:

intel-gpu-top: Intel Ivybridge (Gen7) @ /dev/dri/card0 -  558/ 558 MHz;  68% RC6;  1.05/ 9.46 W;      185 irqs/s

      IMC reads:        0 MiB/s
     IMC writes:     1120 MiB/s

         ENGINES     BUSY                                                                        MI_SEMA MI_WAIT
       Render/3D   23.92% |█████████████████████                                              |      0%      0%
         Blitter    0.00% |                                                                   |      0%      0%
           Video    7.98% |███████                                                            |      0%      0%

See also

  • VDPAU — how to setup the Video Decode and Presentation API for Unix (VDPAU).

References