L'accélération vidéo matérielle rend possible le décodage/encodage vidéo par la carte vidéo, réduisant ainsi la charge et la consommation du processeur.
Dans ce qui suit, on considère le cas des cartes vidéo intel prises en charge par la librairie "open source" intel VAAPI (Video Acceleration API)
Références :
Création : Debian Buster/sid
$ sudo aptitude install vainfo
Exemple de réponse lorsqu'aucun pilote d'accélération matériel n'est installé :
$ vainfo
libva info: VA-API version 1.4.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: va_openDriver() returns -1
vaInitialize failed with error code -1 (unknown libva error),exit
$ sudo aptitude install va-driver
« va-driver » est un paquet virtuel fourni par :
i965-va-driver-shaders intel-media-va-driver-non-free vdpau-va-driver
mesa-va-drivers i965-va-driver intel-media-va-driver
Vous devez en choisir un à installer.
Unable to apply some actions, aborting
$ aptitude show i965-va-driver
Paquet : i965-va-driver
Version : 2.3.0+dfsg1-1
État: installé
Automatiquement installé: non
Multiarchitecture : même
Priorité : optionnel
Section : video
Responsable : Debian Multimedia Maintainers <debian-multimedia@lists.debian.org>
Architecture : amd64
Taille décompressée : 1 836 k
Dépend: libva-driver-abi-1.4, libc6 (>= 2.27), libdrm-intel1 (>= 2.4.46),
libdrm2 (>= 2.3.1)
Suggère: i965-va-driver-shaders
Améliore: libva2
Fournit: va-driver
Description : VAAPI driver for Intel G45 & HD Graphics family
The VA-API (Video Acceleration API) enables hardware accelerated video
decode/encode at various entry-points (VLD, IDCT, Motion Compensation etc.) for
the prevailing coding standards today (MPEG-2, MPEG-4 ASP/H.263, MPEG-4
AVC/H.264, and VC-1/WMV3). It provides an interface to fully expose the video
decode capabilities in today's GPUs.
This package contains the video decode and encode driver backend for the Intel
G45 chipsets and Intel HD Graphics for the Intel Core processor family. The
supported platforms include:
* Cantiga, Intel GMA 4500MHD (GM45)
* Ironlake, Intel HD Graphics for 2010 Intel Core processor family
* Sandy Bridge, Intel HD Graphics for 2011 Intel Core processor family
* Ivy Bridge
* Haswell
* Broadwell
* Skylake
* Kaby Lake
* Coffee Lake
* Cannon Lake
Site : https://01.org/linuxmedia/vaapi
Étiquettes: hardware::video, role::shared-lib, use::driver
et sa prise en compte est immédiate dès lors qu'il est installé
$ vainfo
libva info: VA-API version 1.4.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_4
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.4 (libva 2.4.0)
vainfo: Driver version: Intel i965 driver for Intel(R) Coffee Lake - 2.3.0
....
$ sudo aptitude install intel-media-va-driver
$ aptitude show intel-media-va-driver-non-free
Paquet : intel-media-va-driver-non-free
Version : 18.4.1+ds1-1
Nouveau: oui
État: non installé
Multiarchitecture : même
Priorité : optionnel
Section : non-free/video
Responsable : Debian Multimedia Maintainers <debian-multimedia@lists.debian.org>
Architecture : amd64
Taille décompressée : 28,2 M
Dépend: libva-driver-abi-1.4, libc6 (>= 2.14), libgcc1 (>= 1:3.0), libigdgmm5,
libpciaccess0, libstdc++6 (>= 5.2)
Est en conflit: intel-media-va-driver
Fournit: va-driver
Description : VAAPI driver for the Intel GEN8+ Graphics family
The VA-API (Video Acceleration API) enables hardware accelerated video
decode/encode at various entry-points (VLD, IDCT, Motion Compensation etc.) for
the prevailing coding standards today (MPEG-2, MPEG-4 ASP/H.263, MPEG-4
AVC/H.264, and VC-1/WMV3). It provides an interface to fully expose the video
decode capabilities in today's GPUs.
This package contains the video decode and encode driver backend for the Intel
HD Graphics of the Intel Core processor family. The supported platforms
include:
* Broadwell
* Skylake
* Broxton
* Apollo Lake
* Kaby Lake
* Coffee Lake
* Whiskey Lake
* Cannon Lake
* Ice Lake
Site : https://github.com/intel/media-driver
Par défaut, ce pilote n'est pas pris en compte. Utiliser le paramètre LIBVA_DRIVER_NAME, soit temporairement
$ export LIBVA_DRIVER_NAME=iHD
soit de façon permanente
$ echo 'export LIBVA_DRIVER_NAME=iHD' >> ~/.bashrc
$ source ~/.bashrc
Vérifier la prise en compte
$ vainfo
libva info: VA-API version 1.4.0
libva info: va_getDriverName() returns 0
libva info: User requested driver 'iHD'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_4
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.4 (libva 2.4.0)
vainfo: Driver version: Intel iHD driver - 1.0.0
.....
$ export LIBVA_DRIVER_NAME=i965
Par défaut, mpv n'utilise pas l’accélération matérielle, pour activer l'accélération matérielle avec le meilleur mode disponible, utiliser l'option --hwdec=auto
$ mpv --hwdec=auto toy_story_4-trailer.zip
Playing: toy_story_4-trailer.zip
Playing: archive://toy_story_4-trailer.zip|Toy Story 4 - Theatrical Trailer.mp4
[ffmpeg/demuxer] mov,mp4,m4a,3gp,3g2,mj2: stream 0, timescale not set
(+) Video --vid=1 (*) (h264 1920x816 23.976fps)
Video --vid=2 [P] (mjpeg)
(+) Audio --aid=1 --alang=eng (*) (aac 2ch 44100Hz)
File tags:
Artist: Disney/Pixar
Date: 2019
Genre: Trailer
Title: Toy Story 4 - Theatrical Trailer
[vo/gpu/vaapi-egl] vaAcquireSurfaceHandle() failed (invalid VASurfaceID)
Using hardware decoding (vaapi).
VO: [gpu] 1920x816 vaapi[nv12]
.....
$ vlc toy_story_4-trailer.zip
VLC media player 3.0.6 Vetinari (revision 3.0.6-0-g5803e85f73)
[0000559e11ca7570] main libvlc: Lancement de vlc avec l'interface par défaut. Utilisez « cvlc » pour démarrer VLC sans interface.
libva info: VA-API version 1.4.0
libva info: va_getDriverName() returns 0
libva info: User requested driver 'iHD'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_4
libva info: va_openDriver() returns 0
[00007fbbb5a32460] avcodec decoder: Using Intel iHD driver - 1.0.0 for hardware decoding
...
Dans le menu Outils >> Préférences >> Entrées / Codecs >> Décodage matériel, sélectionner l'une des options du menu déroulant (Automatique, Décodeur vidéo VA-API, ..., Désactiver)
Ci-après le temps d'exécution processeur (ligne user) d'une video, dans différentes configurations
$ time mpv toy_story_4-trailer.zip
Playing: toy_story_4-trailer.zip
....
AO: [pulse] 44100Hz stereo 2ch float
VO: [gpu] 1920x816 yuv420p
AV: 00:01:26 / 00:01:26 (99%) A-V: 0.000 Cache: 0s
....
real 1m28,149s
user 0m49,945s
sys 0m1,550s
$ export LIBVA_DRIVER_NAME=i965
$ time mpv --hwdec=auto toy_story_4-trailer.zip
Playing: toy_story_4-trailer.zip
.....
Using hardware decoding (vaapi).
VO: [gpu] 1920x816 vaapi[nv12]
AO: [pulse] 44100Hz stereo 2ch float
AV: 00:01:26 / 00:01:26 (99%) A-V: 0.000 Cache: 0s
...
real 1m28,061s
user 0m8,095s
sys 0m3,359s
$ export LIBVA_DRIVER_NAME=iHD
$ time mpv --hwdec=auto toy_story_4-trailer.zip
Playing: toy_story_4-trailer.zip
......
Using hardware decoding (vaapi).
VO: [gpu] 1920x816 vaapi[nv12]
AO: [pulse] 44100Hz stereo 2ch float
AV: 00:01:26 / 00:01:26 (99%) A-V: 0.000 Cache: 0s
.....
real 1m27,976s
user 0m8,099s
sys 0m3,086s
$ export LIBVA_DRIVER_NAME=
$ time vlc toy_story_4-trailer.zip
VLC media player 3.0.6 Vetinari (revision 3.0.6-0-g5803e85f73)
[000055b7584b2570] main libvlc: Lancement de vlc avec l'interface par défaut. Utilisez « cvlc » pour démarrer VLC sans interface.
libva info: VA-API version 1.4.0
libva info: va_getDriverName() returns 0
libva info: User requested driver ''
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/_drv_video.so
libva info: va_openDriver() returns -1
[00007f62bc003800] glconv_vaapi_x11 gl error: vaInitialize: unknown libva error
libva info: VA-API version 1.4.0
libva info: va_getDriverName() returns 0
libva info: User requested driver ''
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/_drv_video.so
libva info: va_openDriver() returns -1
[00007f62bc003800] glconv_vaapi_drm gl error: vaInitialize: unknown libva error
libva info: VA-API version 1.4.0
libva info: va_getDriverName() returns 0
libva info: User requested driver ''
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/_drv_video.so
libva info: va_openDriver() returns -1
[00007f62bc003800] glconv_vaapi_drm gl error: vaInitialize: unknown libva error
Failed to open VDPAU backend libvdpau_i965.so: Ne peut ouvrir le fichier d'objet partagé: Aucun fichier ou dossier de ce type
QObject::~QObject: Timers cannot be stopped from another thread
real 1m28,876s
user 2m2,248s
sys 0m2,796s
$ time vlc toy_story_4-trailer.zip
VLC media player 3.0.6 Vetinari (revision 3.0.6-0-g5803e85f73)
[00005600c8305570] main libvlc: Lancement de vlc avec l'interface par défaut. Utilisez « cvlc » pour démarrer VLC sans interface.
libva info: VA-API version 1.4.0
libva info: va_getDriverName() returns 0
libva info: User requested driver 'i965'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_4
libva info: va_openDriver() returns 0
[00007ff455a321f0] avcodec decoder: Using Intel i965 driver for Intel(R) Coffee Lake - 2.3.0 for hardware decoding
...
real 1m29,039s
user 0m9,693s
sys 0m2,336s
$ time vlc toy_story_4-trailer.zip
VLC media player 3.0.6 Vetinari (revision 3.0.6-0-g5803e85f73)
[000056221a4f8570] main libvlc: Lancement de vlc avec l'interface par défaut. Utilisez « cvlc » pour démarrer VLC sans interface.
libva info: VA-API version 1.4.0
libva info: va_getDriverName() returns 0
libva info: User requested driver 'iHD'
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_4
libva info: va_openDriver() returns 0
[00007f3d81a32180] avcodec decoder: Using Intel iHD driver - 1.0.0 for hardware decoding
....
real 1m29,540s
user 0m9,814s
sys 0m1,981s
Synthèse :
Par défaut, l'accélération matérielle est utilisée. Pour modifier ce comportement, décocher la ligne Utiliser l'accélération manuelle du menu
chrome://settings/systemHW_COMPOSITING blocked by default: Acceleration blocked by platform
OPENGL_COMPOSITING unavailable by default: Hardware compositing is disabled
Par défaut, comme ci-dessus, l'accélération matérielle est désactivée
layers.acceleration.disabled par défaut booléen false
layers.acceleration.draw-fps par défaut booléen false
layers.acceleration.force-enabled par défaut booléen false
Passer à true la ligne layers.acceleration.force-enabled. Fermer et redémarrer Firefox
Vérifier la bonne prise en compte dans la fenêtre about:support
HW_COMPOSITING blocked by default: Acceleration blocked by platform
force_enabled by user: Force-enabled by pref
OPENGL_COMPOSITING force_enabled by user: Force-enabled by pref