URL: https://linuxfr.org/news/dav1d-is-an-av1-decoder Title: dav1d is An AV1 Decoder Authors: fcartegnie BenoĂźt Sibaud, ZeroHeure, Davy Defaud, BAud, teoB, bubarđŸŠ„, jcr83, Ontologia, palm123, NĂżco et Ê­ ☯ Date: 2019ćčŽ01月16æ—„T13:20:01+01:00 License: CC By-SA Tags: dav1d, av1, firefox, videolan, vidĂ©o, format_ouvert et benchmark Score: 46 dav1d est une implĂ©mentation de dĂ©codeur d’AV1 destinĂ©e Ă  un usage rĂ©el, en dehors du cadre du dĂ©codeur de rĂ©fĂ©rence libaom ; et un acronyme rĂ©cursif. DestinĂ© Ă  ĂȘtre multi‐plate‐forme et _open source_, sa devise est « petit et rapide ». Ce projet est chapeautĂ© par VideoLAN Ă  l’instar des x264 et x265, pour les codecs [H.264](https://fr.wikipedia.org/wiki/H.264) et [HEVC](https://fr.wikipedia.org/wiki/H.265/HEVC). Ce projet est financĂ© partiellement par l’[_Alliance for Open Media_](https://fr.wikipedia.org/wiki/Alliance_for_Open_Media) (AOM). ---- [dav1d repository](https://code.videolan.org/videolan/dav1d/) [Annonce de la premiĂšre version de dav1d en septembre 2018](http://www.jbkempf.com/blog/post/2018/First-release-of-dav1d) [L’étiquette « dav1d » sur LinuxFr.org](https://linuxfr.org/tags/dav1d/public) [Les statistiques de dav1d 0.2.0](https://medium.com/@ewoutterhoeven/dav1d-0-2-0-covering-all-pcs-including-mobile-eac3e43868c2) ---- # Un autre dĂ©codeur pour quoi faire ? dav1d est issu de la phase 1B du dĂ©ploiement d’AV1, soit la phase d’optimisation du codec. En l’état actuel, les codecs de nouvelle gĂ©nĂ©ration sont hautement complexes et dans les plus hautes rĂ©solutions, leur rendu ne peut ĂȘtre effectuĂ© simplement sur le processeur en temps rĂ©el. C’est pour cela que les rĂ©solutions 4K et 2K sont problĂ©matiques, notamment avec HEVC. L’augmentation de complexitĂ© en passant Ă  AV1 empire les choses. Les implĂ©mentations matĂ©rielles n’étant prĂ©vues que pour 2020, il est nĂ©cessaire d’avoir des dĂ©codeurs logiciels fortement optimisĂ©s et tirant parti des capacitĂ©s vectorielles des processeurs pour que la vidĂ©o codĂ©e en AV1 dans des rĂ©solutions standard et HD soit lisible sur un processeur actuel, en attendant l’arrivĂ©e des implĂ©mentations matĂ©rielles. Un autre point important est la mise Ă  disposition sous licence BSD 2 simplifiĂ©e, ce qui permet Ă  l’industrie de rĂ©utiliser le code comme socle pour un dĂ©codeur purement matĂ©riel ou bien hybride. ![Phases de dĂ©ploiement de l’AV1](https://i.imgur.com/rAp3g4z.png) ## Performance actuelles Les optimisations assembleur ont d’abord Ă©tĂ© effectuĂ©es en utilisant le jeu d’instructions AVX2, disponibles Ă  partir des processeurs Intel _Haswell_ [commercialisĂ©s sous le nom Core](https://en.wikipedia.org/wiki/Advanced_Vector_Extensions#CPUs_with_AVX2). Le choix a aussi Ă©tĂ© fait de ne travailler dans un premier temps que les optimisations de traitement des transformations gĂ©nĂ©riques et le format le plus courant : le [Y’UV](https://fr.wikipedia.org/wiki/YUV) 4:2:0 en 8 bits. De mĂȘme, il a Ă©tĂ© choisi de faire une architecture permettant l’optimisation des fils d’exĂ©cution (_threads_) du processeur pour effectuer un dĂ©codage par tranche ou par image, mais aussi combinĂ©. L’ordonnancement des tĂąches et des mĂ©canismes d’exclusivitĂ© laisse envisager une optimisation Ă  venir aussi de ce cĂŽtĂ©, avec dans l’idĂ©al une progression presque linĂ©aire dans la majoritĂ© des cas, en fonction du nombre de cƓurs affectĂ©s. On peut voir le dĂ©codage par tranche comme une parallĂ©lisation spatiale et le dĂ©codage par image comme une parallĂ©lisation temporelle. La parallĂ©lisation par tranche permet de dĂ©coder une image rapidement : c’est trĂšs utile pour les flux vidĂ©os en temps rĂ©el et les images fixes (photos encodĂ©es en AV1). La parallĂ©lisation par image permet de dĂ©coder les images suivantes en avance. Les optimisations x86 en assembleur (SIMD) sont effectuĂ©es pour diffĂ©rents niveaux d’instructions : - AVX2, prĂ©sent sur tous les processeurs rĂ©cents, traite 256 bits en parallĂšle ; - SSSE3, quelques gĂ©nĂ©rations avant, qui ne propose que 128 bits et un jeu d’opĂ©rations restreintes. dav1d 0.1.0 ciblait AVX2. La version 0.2.0 propose donc la prise en charge du SSSE3 pour les anciens (4-5 ans) processeurs et processeurs 32 bits, ainsi que la prise en charge des ARM et ARM64 via le jeu d’instructions Neon. Concernant les implĂ©mentations SSSE3 des codecs nouvelle gĂ©nĂ©ration, c’est un peu comme si on Ă©tait revenu Ă  l’époque de l’arrivĂ©e des dĂ©codeurs MP3 sur vos Pentium Ă  100 MHz : on sait faire avec de la vectorisation, mais on est vraiment Ă  la limite du matĂ©riel. _Un doute sur votre processeur ? AVX2 ou SSSE3 dans `/proc/cpuinfo`_ Les performances actuelles de dav1d 0.2.0 pour le jeu d’instructions AVX2 en comparaison avec _aomdec_ sont : ![Single Thread](https://cdn-images-1.medium.com/max/1400/1*7TJXd4ncngZHxNXEGR-Ccg.png) Et lĂ  oĂč dav1d fait la diffĂ©rence par son architecture est sur l’exĂ©cution en parallĂšle sur de multiples fils d’exĂ©cutions : ![Multi Thread](https://cdn-images-1.medium.com/max/600/1*59-3Qa9zOJExezE4UholcA.png) Pour les optimisations niveau SSSE3 qui viennent d’ĂȘtre ajoutĂ©es : ![SSSE3](https://cdn-images-1.medium.com/max/800/1*T7hML20lID_khyAgmmvKyA.png) Sur le plan des optimisations pour les autres plates‐formes, la version ARM64 est actuellement dĂ©jĂ  60 % Ă  120 % plus rapide qu’aom, bien qu’elle n’ait reçu qu’une optimisation partielle, mais aussi bien plus rapide que dans dav1d 0.1.0 : ![ARM64](https://cdn-images-1.medium.com/max/1400/1*kv1LmmnfbPHkkVIiL5UIkw.png) Je vous renvoie sur le [blog d’Ewout](https://medium.com/@ewoutterhoeven/dav1d-0-2-0-covering-all-pcs-including-mobile-eac3e43868c2) qui effectue des tests rĂ©guliers pour l’article original, les stats complĂštes et les Ă©chantillons utilisĂ©s. Reste en chantier le code assembleur concernant le [sous‐échantillonnage de la chrominance](https://fr.wikipedia.org/wiki/Sous-%C3%A9chantillonnage_de_la_chrominance) (4:2:2, 4:4:4 et les profondeurs sur 10 et 12 bits sont Ă  venir), mais aussi des amĂ©liorations plus globales sur le code C. ## Utilisations L’utilisation de dav1d en remplacement de libaom est une Ă©vidence pour les projets dĂ©sirant proposer AV1 dans de bonnes conditions : - [Firefox](https://bugzilla.mozilla.org/show_bug.cgi?id=1493397) rĂšgle les derniers soucis d’intĂ©gration ; - [[VLC]] a dĂ©jĂ  remplacĂ© libaom par dĂ©faut dans sa branche de dĂ©veloppement, et la prochaine version stable sur la branche 3.0 en bĂ©nĂ©ficiera aussi ; - de maniĂšre identique, [[FFmpeg]] intĂ©grera dav1d dans sa prochaine version stable ; - Chromium travaille aussi Ă  l’adoption du dĂ©codeur ; - Handbrake. # ++dav1d Si dav1d propose bien une amĂ©lioration des performances considĂ©rable, on gardera en tĂȘte que le travail n’est pas achevĂ© et que dans les cas non standards (4:4:4,> 8 bits...) l’absence d’optimisation assembleur ne permet rien de mieux, voire pire, que libaom. Encore beaucoup de travail en perspective donc. AV1 est un codec complexe et innovant. Cependant, faire un dĂ©codeur rapide n’est le fait que d’optimiser « une recette » Ă  appliquer. Un autre dĂ©fi bien plus difficile Ă  relever est celui de l’encodage. Toute la complexitĂ© d’un codec rĂ©side dans cette Ă©tape. Parce que c’est la source de revenus dans le modĂšle Ă©conomique d’AV1, une multitude d’encodeurs, le plus souvent propriĂ©taires, arriveront bientĂŽt. Reste donc Ă  trouver une personne qui serait [rav1e](https://github.com/xiph/rav1e) de parler du codeur AV1 libre Ă©crit en [[Rust]].

AltStyle ă«ă‚ˆăŁăŠć€‰æ›ă•ă‚ŒăŸăƒšăƒŒă‚ž (->ă‚ȘăƒȘă‚žăƒŠăƒ«) /