Problém s novými formáty videa bývá, že potřebují mnohem víc výkonu než staré a počítá se, že se budou přehrávat speciálním hardwarovým blokem. Jenže obvykle trvá roky, než se takové dekodéry objeví v grafikách a procesorech a všechna zařízení koupená do té doby zůstanou bez nich. Naštěstí to vypadá, že nový formát AV2 by mohl být pořád přístupný i pro starší počítače díky práci open source projektu od vývojářů přehrávače VLC.
Dav2d zpřístupní video v AV2 dnešním i starším počítačům
Formát AV2 zřejmě ještě stále není definitivně uzavřený, přestože loni bylo avizováno jeho dokončení do konce roku. Nicméně už asi zbývá dořešit jen menší nejasnosti, jelikož začaly práce na optimalizovaném výkonném dekodéru tohoto formátu, který by měl umožnit přehrávání videa v tomto novém formátu na co největším množství procesorů, které nemají nebo nebudou mít hardwarový blok pro přehrávání AV2.
Tento projekt se jmenuje Dav2d a navazuje na dekodér Dav1d, který vznikl se stejným záměrem pro formát AV1. Dav1d byl velmi dobře optimalizovaný pomocí SIMD optimalizací ručně napsaných v assembleru a díky tomu dosáhl velmi vysokého výkonu, takže AV1 s ním lze přehrávat na relativně starých CPU.
Dav2d má stejný cíl – být nejrychlejším řešením pro přehrávání AV2 a překlenout roky, kdy hardwarové dekodéry nebudou k dispozici nebo nebudou v počítačích běžné. Dekodér má současně být optimalizovaný pro vysoký výkon na nejnovějších procesorech, ale i na těch starších. Prioritou při vývoji bude nejprve výkon na současných procesorech x86 podporujících AVX2 jako jsou všechny Ryzeny a Intel Core 4. generace a novější (což zahrnuje využití těchto instrukcí, ale i starších podporovaných na dotyčných CPU) a na novějších Arm procesorech s architekturou ARMv8 (nebo ARMv9), čili na telefonech.
Kromě toho budou v druhém sledu přidány verze kódu optimalizované pro starší procesory – ty budou mít jako „cíl“ jádra podporující instrukce SSSE3, což znamená procesory Intel Core 2 a novější až po Sandy Bridge a Ivy Bridge (a různé SoC založené na jádrech linie Atom až po architekturu Tremont). U AMD půjde o procesory s jádry Bulldozer, Piledriver a Steamroller a Jaguar. Technicky by měla mít podporu i malá jádra Bobcat.
S nižší prioritou Dav2d plánuje vyzkoušet i optimalizace pro 32bitová jádra ARM (ARMv7) a eventuálně v případě, že zbudou síly, i pro IBM Power/PowerPC, architekturu RISC-V a velmi staré procesory x86 bez podpory SSSE3 – což v praxi budou hlavně různé Phenomy a Athlony II od AMD s architekturou K10. Ta končí na SSE3, ale nepodporuje SSSE3, neboli „Supplemental SSE3“ přidané v procesorech Core 2 (které na potvoru obsahují některé instrukce velmi důležité pro multimediální SIMD kód, například PSHUFB).
Tyto už málo používané, zastaralé či exotické procesory ale jsou až na jedné z posledních pozic žebříčku priority. Paradoxně na podobném místě (ne)zájmu jsou i optimalizace využívající instrukcí AVX-512. To ale bude spíš kombinace toho, že neměly dlouho tak široké zastoupení na trhu s tím, že u procesoru podporujícího AVX-512 se nejspíš lze spolehnout, že bude mít nadbytek výkonu, i když bude využívat pouze AVX2.
Jak náročné přehrávání AV2 bude, ještě není jasné
U takto starých procesorů s menším počtem jader ale už může být problémem nedostatečný hrubý výkon. Dav2d se vedle ručně optimalizovaného SIMD kódu bude opírat také o využití co nejvíce vláken k dekódování. Staré architektury procesorů tedy mohou být použitelné jen tehdy, pokud CPU má současně hodně jader.
Zatím nemáme nějaké odhady toho, jak silné procesory budou obecně potřeba pro dekódování AV2 videa v konkrétních rozlišeních a snímkových frekvencích, to teprv uvidíme v budoucnu. Předpokládáme ale, že většina novějších procesorů podporujících AVX2 se čtyřmi a více jádry nebude mít problém s 1080p videem a doufejme i 4K rozlišení bude relativně přístupné. Je ale třeba počítat s tím, že přehrávání přímo ve webových prohlížečích bude výrazně náročnější, než jen přehrávání staženého videa v přehrávači jako VLC či MPV.
Plán vývoje AV2 dekodéru Dav2d
Podle zatím střídmých informací na webu projektu aktuálně vývojáři ještě pracují na kompletní implementaci všech funkcí dekodéru potřebných ke kompletnímu pokrytí specifikace AV2, na API a portování pro různé platformy (čímž se asi myslí kompatibilita s operačním systémy a zároveň s různými instrukčními sadami procesorů). Dekodér ještě není připraven k nasazení, nicméně to ani formát AV2 (u obojího jde o práci na něčem, co bude pro běžného uživatele užitečné až v budoucnu).
Kód bude psán v jazyce C, což je možná trošku škoda (Rust by umožnil větší bezpečnost, která by byla plusem pro webové prohlížeče), nicméně C je asi snadnější řešení co se týká integrace optimalizovaného SIMD kódu a umožnilo to převzít část kódu z projektu Dav1d. Závislost na dostupnosti kompilátoru a nástrojů pro Rust by asi také šla proti cíli, aby dekodér byl maximálně multiplatformně použitelný.
Vlastní SIMD optimalizace začnou být psány po dokončení této fáze. Práce na výkonu Dav2du budou nejprve upřednostňovat nové procesory a dekódování videa se standardní bitovou hloubkou. Vyšší bitové hloubky (10 bitů, 12 bitů) a vzorkování 4:2:2 a/nebo 4:4:4 budou mít nižší prioritu, ale jsou také v plánu. Je možné, že časem by dekodér mohl mít i nějakou formu využití výkonu GPU pro některé operace, ale to je také dost nízko na seznamu priorit, primárně bude používat výkon jader CPU.
Opět open-source
Dav2d je už tradičně open-source (přičemž má permisivní licenci, ne GPL či podobnou) a zastřešuje ho stejně jako Dav1d projekt VideoLAN, známý populárním přehrávačem VLC Media Player (původně VideoLAN Client). Ten by měl tudíž Dav2d mít časem automaticky integrovaný, ale lze předpokládat, že dojde i k integraci s projektem FFmpeg a s dalšími přehrávači videa.
Je otázka, zda se Dav2d dostane do webových prohlížečů, případně jak dlouho to bude trvat. Například Google v Chrome dříve preferoval přes horší výkon vlastní referenční kód a například nenasadil dekodér FFVP9, byť tím značně trpěla schopnost přehrávat VP9 video. Dav1d se ale zdá se do Chrome eventuálně dostal, takže Dav2d snad také bude použit. Firefox také pro přehrávání AV1 používá Dav1d, takže by měl být otevřený i směrem k Dav2du.
Zdroj: VideoLAN
