Activar la aceleración gráfica por hardware en Arch Linux
2021-08-23
Índice
- Comprobación
- Instalando los drivers necesarios
- GStreamer
- Firefox
- Comprobando el funcionamiento
- 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
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:
MOZ_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 buen día. 🐧