Activar la aceleración gráfica por hardware en Arch Linux

5 minutos de lectura

Después de cambiar a Arch Linux me he dado cuenta de que no tenia activada la aclarecían gráfica por hardware (VA-API), así que este articulo es de como activar esta elación, concretamente para una cpu AMD Ryzen 5 3500U con gráfica integrada.

Doy por hecho de que tienes instalados correctamente los controladores para AMD, yo he utilizado amdgpu, drivers open source para AMD

1inxi -G
2
3Graphics:
4  Device-1: AMD Picasso driver: amdgpu v: kernel
5  Device-2: Azurewave ov9734_azurewave_camera type: USB driver: uvcvideo
6  Display: wayland server: X.org 1.20.10 driver: loaded: amdgpu
7  note: n/a (using device driver) - try sudo/root resolution: <missing: xdpyinfo>
8  Message: Unable to show advanced data. Required tool glxinfo missing.

Comprobación

Antes de empezar a instalar paquetes, vamos a comprobar si realmente tenemos funcionando la aceleración por hardware, para ello podemos utilizar el programa mpv o instalar el paquete libva-utils y utilizar el comando vainfo.

Usando vainfo

Instalo el paquete libva-utils y ejecuto el comando vainfor

1sudo pacman -S  libva-utils
2vainfo
3
4vaInitialize failed with error code -1 (unknown libva error),exit

Como puedes ver, obtengo un error code -1 , es decir no está activado

Usando mpv

También podemos utilizar el reproductor mpv para comprobar la aceleración gráfica, el comando a utilizar es mpv --hwdec=auto video

 1 mpv --hwdec=auto ~/Descargas/Altered\ Carbon-S01E01\ -\ Retorno\ Al\ Pasado.mkv
 2 (+) Video --vid=1 (*) (hevc 1280x720 23.976fps)
 3 (+) Audio --aid=1 (*) (ac3 6ch 48000Hz)
 4     Audio --aid=2 (ac3 6ch 48000Hz)
 5     Subs  --sid=1 (*) (f) (subrip)
 6     Subs  --sid=2 (subrip)
 7     Subs  --sid=3 (subrip)
 8     Subs  --sid=4 (subrip)
 9     Subs  --sid=5 (subrip)
10     Subs  --sid=6 (subrip)
11[vo/gpu/wayland] GNOME's wayland compositor lacks support for the idle inhibit protocol. This means the screen can blank during playback.
12Cannot load libcuda.so.1
13[ffmpeg] AVHWDeviceContext: Cannot load libcuda.so.1
14[ffmpeg] AVHWDeviceContext: Could not dynamically load CUDA
15Failed to open VDPAU backend libvdpau_nvidia.so: cannot open shared object file: No such file or directory
16[ffmpeg/video] hevc_v4l2m2m: Could not find a valid device
17[ffmpeg/video] hevc_v4l2m2m: can't configure decoder
18Could not open codec.
19AO: [pulse] 48000Hz 5.1(side) 6ch float
20VO: [gpu] 1280x720 yuv420p10
21AV: 00:00:04 / 00:58:53 (0%) A-V:  0.000
22
23Exiting... (Quit)

En la salida tengo el siguiente error

1[ffmpeg/video] hevc_v4l2m2m: Could not find a valid device
2[ffmpeg/video] hevc_v4l2m2m: can't configure decoder
3Could not open codec.

Instalando los drivers necesarios

Para solucionar el problema hay que instalar el paquete libva-mesa-driver

1sudo pacman -S libva-mesa-driver

Ahora volvemos a realizar las comprobaciones

 1vainfo
 2
 3vainfo: VA-API version: 1.11 (libva 2.11.1)
 4vainfo: Driver version: Mesa Gallium driver 21.0.1 for AMD Radeon(TM) Vega 8 Graphics (RAVEN, DRM 3.40.0, 5.11.11-arch1-1, LLVM 11.1.0)
 5vainfo: Supported profile and entrypoints
 6      VAProfileMPEG2Simple            :	VAEntrypointVLD
 7      VAProfileMPEG2Main              :	VAEntrypointVLD
 8      VAProfileVC1Simple              :	VAEntrypointVLD
 9      VAProfileVC1Main                :	VAEntrypointVLD
10      VAProfileVC1Advanced            :	VAEntrypointVLD
11      VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
12      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSlice
13      VAProfileH264Main               :	VAEntrypointVLD
14      VAProfileH264Main               :	VAEntrypointEncSlice
15      VAProfileH264High               :	VAEntrypointVLD
16      VAProfileH264High               :	VAEntrypointEncSlice
17      VAProfileHEVCMain               :	VAEntrypointVLD
18      VAProfileHEVCMain               :	VAEntrypointEncSlice
19      VAProfileHEVCMain10             :	VAEntrypointVLD
20      VAProfileJPEGBaseline           :	VAEntrypointVLD
21      VAProfileVP9Profile0            :	VAEntrypointVLD
22      VAProfileVP9Profile2            :	VAEntrypointVLD
23      VAProfileNone                   :	VAEntrypointVideoProc

VAEntrypointVLD significa que la tarjeta puede decodificar ese formato, VAEntrypointEncSlice significa que la tarjeta puede codificar en ese formato.

Con mpv

 1 mpv --hwdec=auto ~/Descargas/Altered\ Carbon-S01E01\ -\ Retorno\ Al\ Pasado.mkv
 2 (+) Video --vid=1 (*) (hevc 1280x720 23.976fps)
 3 (+) Audio --aid=1 (*) (ac3 6ch 48000Hz)
 4     Audio --aid=2 (ac3 6ch 48000Hz)
 5     Subs  --sid=1 (*) (f) (subrip)
 6     Subs  --sid=2 (subrip)
 7     Subs  --sid=3 (subrip)
 8     Subs  --sid=4 (subrip)
 9     Subs  --sid=5 (subrip)
10     Subs  --sid=6 (subrip)
11[vo/gpu/wayland] GNOME's wayland compositor lacks support for the idle inhibit protocol. This means the screen can blank during playback.
12Cannot load libcuda.so.1
13Using hardware decoding (vaapi).
14AO: [pulse] 48000Hz 5.1(side) 6ch float
15VO: [gpu] 1280x720 vaapi[p010]
16AV: 00:00:03 / 00:58:53 (0%) A-V:  0.000
17
18Exiting... (Quit)

Vemos que la gráfica esta funcionando correctamente, VO: [gpu] 1280x720 vaapi[p010]

GStreamer

GStreamer debería de detectar y utilizar de manera automática VA-API, pero antes deberemos de tener instalados gstreamer-vaapi:

1sudo pacman -S gstreamer-vaapi

Para verificar que realmente tenemos soporte VA-PI gst-inspect-1.0 vaapi

 1gst-inspect-1.0 vaapi
 2Plugin Details:
 3  Name                     vaapi
 4  Description              VA-API based elements
 5  Filename                 /usr/lib/gstreamer-1.0/libgstvaapi.so
 6  Version                  1.18.4
 7  License                  LGPL
 8  Source module            gstreamer-vaapi
 9  Source release date      2021-03-15
10  Binary package           gstreamer-vaapi
11  Origin URL               https://www.archlinux.org/
12
13  vaapijpegdec: VA-API JPEG decoder
14  vaapimpeg2dec: VA-API MPEG2 decoder
15  vaapih264dec: VA-API H264 decoder
16  vaapivc1dec: VA-API VC1 decoder
17  vaapivp9dec: VA-API VP9 decoder
18  vaapih265dec: VA-API H265 decoder
19  vaapipostproc: VA-API video postprocessing
20  vaapidecodebin: VA-API Decode Bin
21  vaapisink: VA-API sink
22  vaapih264enc: VA-API H264 encoder
23  vaapih265enc: VA-API H265 encoder
24
25  11 features:
26  +-- 11 elements

Firefox

Para habilitar la aceleración en Firefox, en la página about:config, ponemos a true las variables media.ffmpeg.vaapi-drm-display.enabled y media.ffmpeg.vaapi.enabled

También debemos poner gfx.webrender.all a true.

Por ultimo forzamos la aceleración por harware poniendo la variable layers.acceleration.force-enabled a true.

Ahora solo deberemos de reiniciar Firefox par poder decodificar y ver vídeos utilizando únicamente la tarjeta gráfica

Comprobando el funcionamiento

Podemos ver si realmente VA-API funciona ejecutando desde en una terminal el siguiente comando e intentamos ver un vídeo:

1MOZ_LOG="PlatformDecoderModule:5" MOZ_ENABLE_WAYLAND=1 firefox

Veremos algo parecido a esta ventana:

Como ves VA-API se inicio correctamente.

Espero que te haya gustado, pasa un gran día.

Referencia: