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 :
tito@sigma:~$ vainfo
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.

Source

Vus : 1820
Publié par Geekfault : 45