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
AMDGPU or AMDGPU-PRO All supported AMD graphics cards using either the open source or proprietary driver.
Intel Intel GMA X4500HD and newer See 01.org - VAAPI Supported Hardware & Features.
Mesa All supported AMD or NVIDIA graphics cards using the open source drivers.
NVIDIA/nvidia-drivers (via media-libs/nvidia-vaapi-driver) NVIDIA GeForce 8 and newer See https://github.com/elFarto/nvidia-vaapi-driver?tab=readme-ov-file#codec-support
VDPAU All supported graphics cards

Installation

USE flags

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 media-libs/libva package, which has the following USE flags:

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

X Add support for X11
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:
  • 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