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

2021-08-23

Índice

  1. Comprobación
    1. Usando vainfo
    2. Usando mpv
  2. Instalando los drivers necesarios
  3. GStreamer
  4. Firefox
  5. Comprobando el funcionamiento
  6. Referencia:

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

inxi -G

Graphics:
  Device-1: AMD Picasso driver: amdgpu v: kernel
  Device-2: Azurewave ov9734_azurewave_camera type: USB driver: uvcvideo
  Display: wayland server: X.org 1.20.10 driver: loaded: amdgpu
  note: n/a (using device driver) - try sudo/root resolution: <missing: xdpyinfo>
  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 vainfo

sudo pacman -S  libva-utils
vainfo

vaInitialize 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

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

Exiting... (Quit)

En la salida tengo el siguiente error

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

Instalando los drivers necesarios

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

sudo pacman -S libva-mesa-driver

Ahora volvemos a realizar las comprobaciones

vainfo

vainfo: VA-API version: 1.11 (libva 2.11.1)
vainfo: 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)
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            :	VAEntrypointVLD
      VAProfileMPEG2Main              :	VAEntrypointVLD
      VAProfileVC1Simple              :	VAEntrypointVLD
      VAProfileVC1Main                :	VAEntrypointVLD
      VAProfileVC1Advanced            :	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSlice
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointEncSlice
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointEncSlice
      VAProfileHEVCMain               :	VAEntrypointVLD
      VAProfileHEVCMain               :	VAEntrypointEncSlice
      VAProfileHEVCMain10             :	VAEntrypointVLD
      VAProfileJPEGBaseline           :	VAEntrypointVLD
      VAProfileVP9Profile0            :	VAEntrypointVLD
      VAProfileVP9Profile2            :	VAEntrypointVLD
      VAProfileNone                   :	VAEntrypointVideoProc

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

Con mpv

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

Exiting... (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:

sudo pacman -S gstreamer-vaapi

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

gst-inspect-1.0 vaapi
Plugin Details:
  Name                     vaapi
  Description              VA-API based elements
  Filename                 /usr/lib/gstreamer-1.0/libgstvaapi.so
  Version                  1.18.4
  License                  LGPL
  Source module            gstreamer-vaapi
  Source release date      2021-03-15
  Binary package           gstreamer-vaapi
  Origin URL               https://www.archlinux.org/

  vaapijpegdec: VA-API JPEG decoder
  vaapimpeg2dec: VA-API MPEG2 decoder
  vaapih264dec: VA-API H264 decoder
  vaapivc1dec: VA-API VC1 decoder
  vaapivp9dec: VA-API VP9 decoder
  vaapih265dec: VA-API H265 decoder
  vaapipostproc: VA-API video postprocessing
  vaapidecodebin: VA-API Decode Bin
  vaapisink: VA-API sink
  vaapih264enc: VA-API H264 encoder
  vaapih265enc: VA-API H265 encoder

  11 features:
  +-- 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

img

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

img

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

img

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:

MOZ_LOG="PlatformDecoderModule:5" MOZ_ENABLE_WAYLAND=1 firefox

Veremos algo parecido a esta ventana:

img

Como ves VA-API se inicio correctamente.

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

Referencia:

Ingrese la dirección de su instancia