Accélération matérielle du décodage vidéo (VLC et VAAPI)
La carte graphique de mon desktop a grillé aujourd’hui et j’en ai donc profité pour virer cette merde de nVidia (F-U!) pour une ATI HD6450, une des moins chères de mon vendeur d’informatique.
Après m’être battu plus d’une heure dans la config de Xorg (AMD? F-U also tiens!) pour faire marcher la carte correctement, je me suis attardé sur une des fonctionnalités de cette nouvelle carte, ses capacités de décodage matériel du H.264.
Décodage matériel
Je ne parlerai pas ici des capacités de rendu vidéo de Xorg ou du mode overlay de VLC. Le but est uniquement d’accélérer le décodage des vidéos compressées en H.264 (et parfois d’autres codecs selon le GPU, mais le H.264 est le plus répandu de nos jours).
Concrètement, VLC envoie le flux compressé au GPU, attend le flux décompressé en retour. Tout le reste (affichage, stream, recompression) est à charge du CPU.
Ce qui est intéressant c’est que mon desktop de plus de 4 ans est maintenant capable de décoder des flux HD 1080p sans soucis, chose dont il était incapable avant sa mise à jour à 40€ !
VAAPI
Pour offrir du décodage matériel, VLC implémente VAAPI (Video Acceleration API). Initialement développée par Intel sous forme libre, cette API peut aussi servir d’interface avec les technologies propres à AMD (XvBA) et nVidia (VDPAU).
Selon votre GPU, installez le driver approprié :
- Intel GMA :
sudo apt-get install libva-intel-vaapi-driver libva-glx1 libva-x11-1 vainfo
- nVidia :
sudo apt-get install vdpau-va-driver libva-glx1 libva-x11-1 vainfo
- AMD/ATI :
sudo apt-get install xvba-va-driver libva-glx1 libva-x11-1 vainfo
Exécutez ensuite vainfo pour vérifier que tout fonctionne. Il devrait retourner la liste des capacités matérielles de votre GPU, par exemple sur ma carte Intel GMA HD 3000 :
libva: VA-API version 0.32.0
libva: va_getDriverName() returns 0
libva: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva: va_openDriver() returns 0
vainfo: VA-API version: 0.32 (libva 1.0.15)
vainfo: Driver version: Intel i965 driver - 1.0.15
vainfo: Supported profile and entrypoints
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Main : VAEntrypointVLD
VAProfileH264Baseline : VAEntrypointVLD
VAProfileH264Baseline : VAEntrypointEncSlice
VAProfileH264Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointEncSlice
VAProfileH264High : VAEntrypointVLD
VAProfileH264High : VAEntrypointEncSlice
VAProfileVC1Simple : VAEntrypointVLD
VAProfileVC1Main : VAEntrypointVLD
VAProfileVC1Advanced : VAEntrypointVLD
VLC
Il n’y a plus qu’à activer l’option dans les préférences de VLC, sous “Lecture & Codecs” cocher “Utiliser l’accéléaration matérielle du GPU.”
Tests
J’ai la flemme de faire des tests (je vois clairement à l’utilisation CPU que ça marche) mais je vous montre ce joli screenshot fait par quelqu’un d’autre :
D’après mes estimations et différents tests, je dirais que cela soulage le CPU d’environ 60% du travail de décompression !
Conclusion
Les performances sont améliorées mais pas encore optimales. L’idéal serait d’envoyer le flux compressé directement à la carte graphique et qu’elle-même se charge de l’affichage.
Ici on envoie le flux compressé puis la carte renvoie le flux brut, que VLC traite avant de renvoyer à la partie affichage du GPU (via Xorg). Pas optimal donc mais mieux que rien.
Je suppose que VLC agit ainsi afin de pouvoir appliquer des effets et sous titres à la vidéo avant son affichage ce qui serait impossible à ajouter au flux compressé.
“Impossible de trouver le paquet vdpau-va-driver”
Je suppose que c’est la faute à mon Ubuntu : 10.04 ?
@Dup Oui c’est pour permettre à VLC de faire un tas de modifications sur la vidéo, et décider où l’afficher. VLC profite quand même de certaines capacités de la carte graphique pour accélérer l’affichage (overlay) mais c’est une méthode tout à fait standard.
@Ned Effectivement le driver n’est pas présent par défaut dans 10.04. Il existe des PPA pour l’obtenir, comme par exemple http://www.ubuntuupdates.org/ppa/lucidbleed?dist=lucid
Merci pour la réponse 🙂
Hélas ce ppa ne propose pas libva-glx1, et celui que j’ai trouvé requiert à son tour libva-x11-1 (>> 1.0.15~), arrivé là j’abandonne plutôt que de trop tripatouiller le système (un upgrade d me semble plus sain)
@Ned
oups : “…upgrade de la distribution…”
Super cet article,
Dans le but de faire survivre mon PC qui date de quelques années, j’ai fait pas mal de test pour optimiser au mieux l’utilisation du décodage matériel avec VDPAU( ma CG -> Nvidia GeForce 8600 GT).
J’ai observer de meilleurs résultats avec mplayer que vlc. Avec mplayer la charge CPU est proche de 0 contrairement à vlc.
Par contre maintenant, je rencontre d’autres problèmes à présent avec les fonctionnalités 3D des distribs nouvelles générations. Tandis que sur gnome 2 ça marchait du tonnerre.
@nicofonk mplayer utilise directement VDPAU et non VAAPI si je me souviens bien. Mais oui, pour les mêmes résultats 😉
Enfin je ne suis pas un grand fan de mplayer, c’est une vieille usine à gaz. Je dis pas que VLC est top mais il est plus abouti que mplayer actuellement.
Bon artile. J’ajoute que VDPAU n’est pas actuellement utilisable avec les NVIDIA pour ordinateurs portables utilisant bumblebee.
y1yls3
fcgnlh
x81fc2
6zz6vp
949x5p
jf5nab
a0kjcg
yqbn3x
cft1ke
krkhsh
i9vc1b