VLC dévoile dav1d pour améliorer les performances d'AV1

VLC dévoile dav1d pour améliorer les performances d’AV1

VLC dévoile dav1d pour améliorer les performances d'AV1

C'est Jean-Baptiste Kempf, président de VideoLAN, qui a officialisé la nouvelle sur son blog. Il y précise que le codec de l'Alliance for Open Media (AOM) dispose d'un bon potentiel, mais qu'en l'état actuel, il peut être largement amélioré.

Il pourrait ainsi être 20 % plus efficace que HEVC, tout en étant complètement exempt de royalties. L'idée a donc été de travailler avec les équipes de FFmpeg sur un nouvel outil de décompression d'AV1. C'est ainsi que dav1d (dav1d is an AV1 Decoder) est né, sponsorisé par l'AOM.

Son objectif est d'être compact, rapide, multiplateforme, libre/open source, le tout en gérant correctement les threads. Dans son état actuel, il est plus léger que libaom, mais pas encore plus efficace que la dernière version en date. L'équipe doit en effet travailler sur la partie du code directement en assembleur.

Des développeurs C(99) et ASM sont ainsi les bienvenus pour soutenir le projet, ainsi que des testeurs et intégrateurs. Kempf précise que dav1d n'est pas encore prêt pour un usage en production, mais chacun est libre de le tester et de l'utiliser, le code étant sous licence BSD.

Le projet fonctionne actuellement sur Android, iOS, Linux, macOS et Windows, pour les architectures ARMv7/v8, x86 et x64.

Commentaires (28)


Ca c’est la classe, en plus les mecs sont soutenus par l’AOM. Vraiment bravo <img data-src=" />



Ca mériterait d’en faire un article à part entière avec une interview de JBK, non ?


La beauté du Libre illustrée <img data-src=" />


Bonne nouvelle, AV1 a l’air vraiment prometteur pour la nouvelle génération de codecs


J’ai raté un truc, comment un code assembleur peut-t-il fonctionner sur plusieurs plateformes et architecture ?


Ca c’est uniquement pour la décompression CPU sans accélération matérielle, quand le matos sera AV1 compliant, ca sera décodé matériellement finger in the nose.








tazvld a écrit :



J’ai raté un truc, comment un code assembleur peut-t-il fonctionner sur plusieurs plateformes et architecture ?





La magie de la compilation conditionnelle…



Sinon moi j’ai raté un autre truc : depuis le temps qu’on nous dit que même pour la vitesse, l’assembleur ne vaut plus le coup, pourquoi continuer à l’utiliser ? D’autant plus que même l’utilisation d’instructions SIMD et autres peut être faite en C grâce aux “intrinsics”.



Les fichiers&nbsp; assembleurs sont spécifiques à chaque architecture et inclus de manière conditionnelle dans un “programme” essentiellement écrit en C.

En gros.&nbsp;








tazvld a écrit :



J’ai raté un truc, comment un code assembleur peut-t-il fonctionner sur plusieurs plateformes et architecture ?





la logique serait que c’est codé indépendamment pour chaque archi.

La mutualisation ferait alors partie des “peut être largement amélioré” ?



Bon et sinon on en est ou de l’inclusion dans des SOC ?



Tout ce que j’ai vu passer c’est&nbsphttp://www.lembarque.com/socionext-implemente-lencodeur-video-av1-libre-de-droit…


Vu l’extrême spécialisation de la chose j’imagine que du code optimisé à la main pour les parties les plus internes de l’algo a encore du sens.


dav1d (dav1d is an AV1 Decoder)



La récursivité et les libristes, faudra m’expliquer un jour








tazvld a écrit :



J’ai raté un truc, comment un code assembleur peut-t-il fonctionner sur plusieurs plateformes et architecture ?





&nbsp; Il ne peut pas. On doit faire un assembleur différent pour chaque architecture que l’on veut optimiser, et je suppose que pour les autres, il y a un fallback en C.







v1nce a écrit :



Bon et sinon on en est ou de l’inclusion dans des SOC ?





A priori, ce n’est pas prévus dans le matériel mainstream avant 2020 d’après des estimations de l’AOM.









tazvld a écrit :



J’ai raté un truc, comment un code assembleur peut-t-il fonctionner sur plusieurs plateformes et architecture ?









vampire7 a écrit :



La magie de la compilation conditionnelle…

Sinon moi j’ai raté un autre truc : depuis le temps qu’on nous dit que même pour la vitesse, l’assembleur ne vaut plus le coup, pourquoi continuer à l’utiliser ? D’autant plus que même l’utilisation d’instructions SIMD et autres peut être faite en C grâce aux “intrinsics”.





En lisant “assembleur”, j’ai plutôt pensé aux Intrinsics, qui permettent de coder presque directement les instructions SIMD en C (par exemple).



C’est assez moche à lire, mais je me suis amusé à le faire pour voir l’effet sur une multiplication de matrice avec des flottants doubles, avec un exemple donné par Ulrich Drepper dans un mémoire intéressant sur la… mémoire DRAM. Ça ressemble à ceci (je suis sous Linux si ça compte), on voit les opérations “_mm_store_pd” “_mm_add_pd” et “_mm_mul_pd” (“pd” pour précision double je suppose) :





// version intrinsics du PDF cpumemory.pdf de Ulrich Drepper

#include



double res[N][N] __attribute__ ((aligned (64)));

double mul1[N][N] __attribute__ ((aligned (64)));

double mul2[N][N] __attribute__ ((aligned (64)));



// juste la boucle interne, un peu complexe car partielle (j’ai la version sans Intrinsics)



                             \_mm\_prefetch (&rmul1[8], \_MM\_HINT\_NTA);   

for (k2 = 0, rmul2 = &mul2[k][j1]; k2 &lt; SM; ++k2, rmul2 += N) {

\_\_m128d m1d = \_mm\_load\_sd (&rmul1[k2]);

m1d = \_mm\_unpacklo\_pd (m1d, m1d);

for (j2 = 0; j2 &lt; SM; j2 += 2) {

// rres[j2] += rmul1[k2] * rmul2[j2];

\_\_m128d m2 = \_mm\_load\_pd (&rmul2[j2]);

\_\_m128d r2 = \_mm\_load\_pd (&rres[j2]);

\_mm\_store\_pd (&rres[j2], \_mm\_add\_pd (\_mm\_mul\_pd (m2, m1d), r2));

}

}





Le simple fait de passer de multiplications/additions simples à des opérations SIMD sur 2 flottants (c’est du SSE2 seulement je crois) fait quasiment doubler la vitesse, sur une de mes machines le temps mis passe de 1,86 à 0,94 s, sur des matrice plus grosses que le cache.



&nbsp;dav1d : message à peine subliminal de&nbsp;l’admiration de&nbsp;JB pour David_L <img data-src=" />








KP2 a écrit :



Ca c’est la classe, en plus les mecs sont soutenus par l’AOM. Vraiment bravo <img data-src=" />



Ca mériterait d’en faire un article à part entière avec une interview de JBK, non ?







Euh, ça va, non? Je prend déjà assez de place, non?







tazvld a écrit :



J’ai raté un truc, comment un code assembleur peut-t-il fonctionner sur plusieurs plateformes et architecture ?







Tu codes en C, et tu optimise en asm pour chaque architecture. Et tu exécutes que ce dont tu as besoin pour ton matériel.







UtopY-Xte a écrit :



dav1d (dav1d is an AV1 Decoder)



La récursivité et les libristes, faudra m’expliquer un jour







C’est une blague récurrente. Ça fait marrer les devs, et comme c’est les clients de cette lib, c’est bueno.







wanou2 a écrit :



dav1d : message à peine subliminal de l’admiration de JB pour David_L <img data-src=" />







Je suis démasqué!









UtopY-Xte a écrit :



dav1d (dav1d is an AV1 Decoder)



La récursivité et les libristes, faudra m’expliquer un jour





Il y a deux types de personnes, ceux qui comprennent la récursivité, et ceux qui ne comprennent pas qu’il y a deux types de personnes, ceux qui comprennent la récursivité, et ceux qui ne comprennent pas qu’il y a deux types de personnes, ceux…









UtopY-Xte a écrit :



dav1d (dav1d is an AV1 Decoder)



La récursivité et les libristes, faudra m’expliquer un jour







Je crois que c’est le smiley le plus adapté pour la réponse -&gt; <img data-src=" />









jb a écrit :



Euh, ça va, non? Je prend déjà assez de place, non?







Ben non :)

Tu fais un job énorme avec VLC et je trouve que ce soutien de l’AOM pour cette nouvelle lib est une belle reconnaissance de votre job. Vous êtes “juste” en train d’écrire l’avenir de la compression vidéo grand public…



Si tu permets, qq questions :





  • Ça s’est passé comment pour vous lancer là dessus ? C’est vous qui avez démarré le job de votre coté ou c’est l’AOM (ou qqn d’autre) qui vous l’a proposé ?

  • Quelle est la répartition des taches avec ffmpeg ?

  • Combien de personnes bossent sur ce projet en tout ?

  • Vous avez des relations avec les constructeurs ? Lesquelles ?

  • Il parait que AV1 peut-être meilleur que HEVC, c’est jusqu’à quel point (techniquement) ?



    Si tu permets pas et bien tant pis :)



Moi je m’en fiche, je veux le retour du midi… Je travaille beaucoup avec ce format et j’en ai un peu marre que mon lecteur à tout faire soit Vlc (y compris sur des formats très exotiques) et devoir passer par MPC juste pour lancer sur Windows gm16.dls… Alors que VLC devrait être capable via des plugins de gérer des expandeurs (ce que fait Midiox par exemple). Ça serait le top…


Et dire qu’on a abandonné les fichiers .AVI , tout ca pour finir avec des fichiers .AV1



<img data-src=" />



(ou je sais, codec/container, tout ca…)








jb a écrit :



Euh, ça va, non? Je prend déjà assez de place, non?



Tu es si gros que ca? <img data-src=" /> <img data-src=" />









KP2 a écrit :





  • Ça s’est passé comment pour vous lancer là dessus ? C’est vous qui avez démarré le job de votre coté ou c’est l’AOM (ou qqn d’autre) qui vous l’a proposé ?







    C’est moi qui l’ait suggéré à AOM.







    KP2 a écrit :



  • Quelle est la répartition des taches avec ffmpeg ?



    • Combien de personnes bossent sur ce projet en tout ?







      Y a une dizaine de personnes qui bossent on/off sur le sujet.







      KP2 a écrit :




  • Vous avez des relations avec les constructeurs ? Lesquelles ?



    • Il parait que AV1 peut-être meilleur que HEVC, c’est jusqu’à quel point (techniquement) ?







      20% meilleur que HEVC, dans le meilleur des cas.



      Si tu permets pas et bien tant pis :)

      [/quote]










PercevalIO a écrit :



Moi je m’en fiche, je veux le retour du midi… Je travaille beaucoup avec ce format et j’en ai un peu marre que mon lecteur à tout faire soit Vlc (y compris sur des formats très exotiques) et devoir passer par MPC juste pour lancer sur Windows gm16.dls… Alors que VLC devrait être capable via des plugins de gérer des expandeurs (ce que fait Midiox par exemple). Ça serait le top…







Rien compris. VLC permet de lire des MIDI, et tu peux mettre tes banques de son perso, au format SF2 ou SF3.







Patch a écrit :



Tu es si gros que ca? <img data-src=" /> <img data-src=" />







Je fais un effort pour maigrir :)



<img data-src=" />


Ben en fait non, depuis plusieurs versions on peut plus parce que ça présentait une faille de sécurité… 😢








PercevalIO a écrit :



Ben en fait non, depuis plusieurs versions on peut plus parce que ça présentait une faille de sécurité… 😢







Bah si. Faut mettre à jour…









jb a écrit :



Tu codes en C, et tu optimise en asm pour chaque architecture. Et tu exécutes que ce dont tu as besoin pour ton matériel.





OK. Vous êtes juste des malade.

Sinon, ce code Assembleur, il existe aussi sa version C non optimisé pour des couples archi/système plus exotique (ouai, si j’ai envie de faire tourner VLC sur un arduino) ?









tazvld a écrit :



OK. Vous êtes juste des malade.

Sinon, ce code Assembleur, il existe aussi sa version C non optimisé pour des couples archi/système plus exotique (ouai, si j’ai envie de faire tourner VLC sur un arduino) ?







Oui.



Perceval ^^ qui explique les fonctionnalités du Cône à son auteur… <img data-src=" />


Fermer