XvMC provides video acceleration starting at one of two places in the video pipeline. Acceleration starting at the first point, which we shall call the "Motion Compensation" level, begins after the the inverse quantization and IDCT at the place where motion compensation is to be applied. The second point, which we shall call the "IDCT" level, begins before the IDCT just after the inverse quantization.
Pour les anglophobes disons que XvMC est à linux ce que DXVA est à Windows, une API permettant d'utiliser l'accélération vidéo hardware embarquée dans les cartes graphiques (Motion Compensation, IDCT, ...)
A aujourd'hui seuls certains constructeurs permettent ce support. On notera Nvidia, Intel, S3, mais pas de ATI (pour changer...), je suppose que c'est en cours.
Dans le cadre d'un PCHC sous linux il paraît donc plus qu'intéressant d'utiliser XvMC en lieu et place de XV ou XSHM par exemple, histoire de soulager un peu le CPU (à la mode Purevideo ou Avivo sous Windows).
Voici donc mon retour d'expérience sur le sujet.
Mon matériel : CM Asus P4P800E-dlx, adaptateur CT-479, Pentium M 1,5Ghz@2Ghz, CG GF6600GT en AGP.
Mon Soft : Debian toute fraîche (passée en Testing), serveur Xorg 6.8, fluxbox, drivers nvidia 1.0-8178.
Tout d'abord installation classique des drivers nvidia via le script d'installation fourni sur leur site (je ne reviendrai pas sur le sujet, il y a assez d'aide sur le net pour ça).
Ensuite j'utilise exclusivement Xine (pas de mplayer) compilé avec les dernières versions CVS (xine-lib version 1.1.2 et xine-ui version 0.99.4) donc je ne parlerai que de lui, sachant que pour mplayer la manip est similaire.
Pour activer le support de xvmc il faut avoir installer les paquets de dev de libxvmc :
apt-get install libxvmc-dev (qui au passage installera libxvmc1)
Sans ça xine ne compilera pas le support xvmc.
Il faut aussi créer le fichier /usr/X11R6/lib/XvMCConfig (ou /etc/X11/XVMCConfig ou les deux, pour xine juste le premier suffit chez moi) et y mettre la ligne suivante :
/usr/X11R6/lib/libXvMCNVIDIA_dynamic.so
Remarque :
- * libXvMCNVIDIA_dynamic.so étant un lien dynamique vers la vraie librairie, les futures mises à jour des drivers ne remettront pas en cause le support XvMC (c'est une bonne chose !).
* Si vous possédez un autre chip graphique faites un petit ls /etc/X11R6/lib/libXvMC* et vous trouverez peut-être une librairie propre à votre chipset (i810, S3, ...). Il suffira de mettre le bon nom de librairie.
Ensuite compilation de xine (./autogen.sh, make, make install) et là miracle xine supporte xvmc. (à la fin du ./autogen.sh il liste les mod supporté, dans la partie vidéo devrait apparaître xvmc)
Puis démarrage
xine -V xvmc <fichier>
Alors chez moi le résultat est assez mitigé. Je n'ai pas testé avec un dvd, je pense que le résultat doit être bon mais par exemple lors de la lecture de gros fichiers haute déf type mpeg2 en 1080 ça saccade malgré une occupation CPU correcte (environ 45%). En passant par xv c'est fluide (y'a pas, le pentium M c'est puissant !) tout en utilisant la même charge CPU. Par contre le filtre de désentrelacement contenu dans xvmc est apparemment très efficace, meilleur que les filtres que j'utilise en soft avec xine (tvtime) mais à confirmer. En tout cas ça ne mange pas de ressources CPU.
edit 1 : testé avec un dvd (Sin City). Effectivement la charge CPU diminue mais mon processeur est trop puisssant pour que le gain soit flagrant. En gros je passe de 8% à 3% ce qui est déjà pas mal. Il faudrait tester avec un processeur plus ancien ou un epia. De plus, et là c'est plus embêtant, une fois XvMC choisi les plug-in post video de xine n'ont plus aucun effet (ce qui peut paraître logique puisque c'est la CG qui fait tout et qu'il paraît donc difficile d'ajouter un traitement vidéo à la suite des opérations menées par la CG), à creuser.
A suivre donc, je ne désespère pas obtenir un bon résultat si Nvidia et consors font l'effort de porter leur avancée DXVA Windows sous XvMC linux, mais c'est une autre histoire.