Portál AbcLinuxu, 26. května 2025 07:03
Malé povídání o hardwarové akceleraci HD videa v Linuxu. Co je potřeba překonat, aby bylo možné přehrávat Blu-Ray (DRM a spol.). Jak je to s x264. Gallium3D.
Z hlediska plnohodnotného hardwarově akcelerovaného přehrávání HD videa v Linuxu je třeba úspěšně vyřešit dvě věci - tři, pokud do toho započítáme filmy na Blu-ray discích.
Zaprvé je třeba zprovoznit samotnou akceleraci videa. Zde se bavíme převážně o speciálních technologiích GPU, u NVIDIE jde o PureVideo, u ATI o UVD. Otázkou je, komu tu práci naložit, popřípadě koho postavit na pranýř za to, že to stále ještě nefunguje.
V případě NVIDIE si dovolím říci, že to padá převážně na hlavu této kalifornské společnosti. NVIDIA se vyznačuje tím, že má pod Linuxem poměrně kvalitní a vyzrálé ovladače (KDE 4 a uspávání z toho prosím nyní vynechme). Sama je poskytuje jak pro všechny možné linuxové distribuce, tak i pro Solaris a x86 FreeBSD, potud je tedy vše takřka zcela v pořádku. Naproti tomu ale zcela ignoruje uvolňování dokumentace o architekturách svých GPU, důvody ponechme stranou. Zajímavě zní maximálně tak projekt Nouveau, ale z hlediska podpory funkcí GPU (2D, 3D, video, …) je výrazně pozadu za uzavřenými ovladači od NVIDIE.
U AMD je situace jiná. Po odkoupení ATI se stav stále zlepšuje a firma průběžně uvolňuje stále více a více dokumentace ke svým GPU, byť ani ona nemůže uvolnit vše. Bohužel oblasti zvané „hic sunt leones“ zahrnují i UVD, zejména proto, že součástí architektury zajišťující hardwarovou akceleraci HD videa jsou uzavřené části licencované firmě AMD (dříve ATI) jinými subjekty a AMD je tak nemůže pustit do světa pod některou svobodnou licencí.
Oficiální Catalysty, tedy přesněji grafický ovladač, který je v nich obsažen, něco takového skutečně v dohledné době přinesou. Během pár dnů nabídnou velcí partneři AMD ve svých počítačích s Linuxem přehrávání chráněného HD videa. Slajd z prezentace nezmiňuje přímo hardwarovou akceleraci, ale prozatím tiše předpokládejme, že to je samozřejmost (jaká to opovážlivost).
Jedinou vadou na kráse je fakt, že to bude (zpočátku) k dispozici pouze OEM partnerům, nikoli veřejnosti. Dovolil bych si drze předpokládat, že to má jednoduchý důvod: podpora bude zpočátku omezena na jednu dvě grafiky, případně na integrovanou grafiku v čipsetech 780G/790GX, plně funkční řešení pro všechny grafiky nabízející UVD možná ještě není zcela vychytáno. Ale logo Blu-ray dává příslib, že jsou tímto řešením automaticky vyřešeny i zbývající dva body (za chvíli).
Poslední Catalysty 8.8 také přinesly dvě zajímavě znějící knihovny libAMDXvBA.so.1.o a libXvBAW.so.1.o, které nás přivádějí k Xv alias X-Video. Podpora pro Xv je v proprietárních Catalystech již jistou dobu, stejně tak v otevřeném ovladači xf86-video-ati nacházíme Textured Video. Co chybí, je podpora XvMC alias X-Video Motion Compensation - rozšíření, které umožňuje přesunout dekódování MPEG-2 ze systémového procesoru na grafický (jen pro připomenutí: hardwarovou akceleraci MPEG-2 umí ATI už od dob Rage 128).
AMDXvBA a XvBAW jsou dle Phoronixu součástí kódu, který by měl zprovoznit právě akceleraci přes UVD(2). „Grepnutím“ z těchto knihoven lze získat jednoznačně znějící pasáže jako CreateUVDCommand, CreateUVDBufferPool, CreateUVDConfig, RegisterUVDClient, UVDSession, „unknown UVD IDCT buffer type ovverride“ a další. „Grepnutí“ dalšího řetězce nás ale přivádí k druhému bodu, který je pro hardwarové přehrávání filmů z Blu-ray disků třeba vyřešit.
Ta zkratka není nic jiného než DRM, tedy „oblíbený“ Digital Rights Management. V knihovnách lze vystopovat části jako SetupDrmKeys, SetupDrm, _ZN8UVDCodec10SetDrmKeysEv atd. Ty budou obstarávat potřebnou výměnu šifrovacích klíčů a další specialitky tohoto DRM systému. Připomeňme, že modelově je vše v cestě od laseru Blu-ray mechaniky až po HD monitor šifrováno, po PCI Express sběrnici běhá video stream šifrovaně, na výstupech se pak aplikuje buď HDCP (DVI, HDMI, …), nebo Macrovision (D-Sub, TV-out) ochrana. Ale protože je to již výrazně nad rámec hardwarového článku, pro podrobnosti si vás dovolím odkázat na stránky Microsoftu, kde je k dispozici velice obsáhlý materiál (DOC) demonstrující, co vše bylo potřeba ve Windows Vista implementovat, aby systém „dostal od Hollywoodu osvědčení jako Blu-ray přehrávač“.
V knihovně XvBAW pak lze ještě vystopovat XvMCSetAttribute, XvMCGetAttribute, XvMCWrapper, XvMCQueryExtension a mnohé další. AMD tak podle všeho přinese podporu pro XvMC i UVD2, ale ani to není vše, chybí nám třetí část skládačky.
Mám tedy hardwarovou akceleraci a zajištěno potřebné šifrování a ochrany výstupů. Chybí již jen přehrávač. S ohledem na prolomení CSS ochrany DVD pomocí nezabezpečeného Xing přehrávače mají i softwarové nástroje pro přehrávání modrolaserových filmů jistá omezení. I ony jsou součástí řetězce, mají vlastní unikátní klíče, které lze při prolomení revokovat (to, že už byl dávno objeven „master key“ celého AACS systému je teď irelevantní), i ony musí splňovat zabezpečení komunikace, zejména co se týče dat a jejich způsobu uchovávání v paměti počítače.
Vzhledem k open-source povaze přehrávačů jako Mplayer si tyto ze seznamu rovnou můžeme škrtnout (jen pošetilec by si mohl myslet, že AMD se připojí k vývoji Mplayeru atd.). AMD nemůže využít nástroje, jaké jsou k dispozici ve Windows (DirectShow atd.), nebo se spoléhat na to, že například CyberLink přijde s linuxovou verzí PowerDVD 8. Na to je linuxový trh příliš malý, firma musí uvést vlastní řešení. Jestli to bude kompletní přehrávač, nebo vytvoří jakousi mezivrstvu, ke které právě nástroje jako Mplayer či MythTV budou moci přistupovat přes zdokumentované API, to ukáže až realita (ale spíše věřím v to druhé).
Každopádně součástí přehrávače bude muset být i kompletní podpora pro propracovaná menu Blu-ray disků. Filmy často využívají možností standardu BD-J (BD-Java) a implementují komplikovaná interaktivní menu, jednoduché hry a spousty dalších vychytávek (současně běžící PiP, kde není jen režisérský komentář ale přímo patřičná video stopa atd.) a pokud bude chtít certifikaci pro vyšší verze BD Profile (již dnes je 1.1 povinná), bude muset zapracovat i schopnosti stahování dodatečných materiálů z internetu a také nadstavbovou BD+ ochranu.
Nicméně nejen lisovanými Blu-ray filmy je člověk živ. Jistě nejsem jediný, kdo má doma sbírku stovek filmů a tisíců episod seriálů komprimovaných pomocí x264 a uložených v Matrošce (pro TV graby ji používám již nějakých 6 let). Ve Windows akcelerace x264 videa v .mkv kontejneru již delší dobu funguje, takže doufejme, že bude toto v dohledné době zprovozněno i v Linuxu.
Samozřejmě vše, co zde zaznělo, se týká obecně nejen AMD, ale i NVIDIE, Intelu, S3 Graphics či kohokoli dalšího. Momentálně to ale vypadá, že AMD je nejdál ze všech. Ještě vám ale dlužím pár slov o open-source vývoji.
Zatímco mnoho grafických karet minulosti nemá s videem o běžném rozlišení problémy a akcelerují jej skrze XvMC, NVIDIA to od generace GeForce 8 neumí (zde je na vině vyřazení hardwarového akcelerátoru videa z GPU), stejně tak ATI je na tom mizerně (viz předchozí odstavce). V rámci projektu Nouveau sice probíhá vývoj XvMC pomocí reversního inženýrství, nicméně proč neudělat něco univerzálního?
Jako součást projektu na Google Summer of Code 2008 se pokoušel (v pracech stále pokračuje) Younes Manton o vývoj univerzálního řešení pro hardwarovou akceleraci videa na GPU. Využívá přitom Gallium3D - 3D akcelerační systém vyvinutý v Tungsten Graphics. Gallium3D poskytuje univerzální API pro hardwarové funkce GPU jako shaderové jednotky (nyní zvané stream procesory), přičemž z 3D API umí OpenGL 1.x, 2.x 3.x, OpenVG a dokonce i Direct3D (zde pomocí Wine). Younes vyvíjí XvMC frontend pro Gallium3D, který by měl dekódování videa právě touto cestou přesunout na GPU.
Poslední informace o projektu říkají, že je již plně implementováno XvMC API s výjimkou prokládaného videa a subpictures. I přes provedené další optimalizace na lowlevel úrovni je však výsledek prozatím stále příliš pomalý, míra využití GPU je sice pod úrovní dostupných výpočetních jednotek v dnešních grafických procesorech, ale je třeba ještě doladit softwarovou stránku, tedy ovladač a zejména správu paměti.
Younes dále zkoumá možnost hardwarově prováděné IDCT (inverzní diskrétní kosinová transformace), na čemž v minulosti pracoval Stephane Marchesin a je tu šance portovat část jeho kódu pro NV40 (GeForce 6800) do Gallium3D ovladače.
Každopádně bez ohledu na to, jak vývoj Gallium3D verze dopadne, bude tomuto kódu chybět k dokonalosti vyřešení zbývajících zmiňovaných bodů, tedy zejména podpory pro menu, AACS, BD+, BD-J a další proprietární vymoženosti, které buď budou vyřešeny reverzním inženýrstvím, nebo vůbec. Pro přehrávání běžných souborů s HD videem ale tento projekt slibuje poměrně dost.
Ještěže se mě jeho podstatná část netýká a troufám si tvrdit, že přehrávání chráněných BR disků je pravděpodobně to poslední, po čem dnešní uživatel Linuxu touží. Nebo snad někdo, kdo je schopen si nainstalovat Linux, bude zároveň podporovat zmetky typu MPAA nákupem chráněných BR disků?
Za nejzajímavější bych považoval poslední část o Gallium 3D, akcelerované x264 by se skutečně hodilo, protože s 1080p má problém i moje relativně zánovní E6300 (2 roky není žádná doba ;)), pokud není přetaktované. Řeší to CoreAVC kodeky, ale ty jsou jen pro Windows, takže nic (a jejich naroubování do mplayeru se mi nepovedlo).
To znamená že přehrání díla je takový úkon ve vztahu k dílu, ke kterému nemám oprávnění.Přehrání díla způsobem, při kterém nejsou účinné ochrany proti kopírování, je takový úkon ve vztahu k dílu, ke kterému nemám oprávnění.
Zákazník má právo pořídit si kopii, ale výrobce nemá povinnost to umožnit.Zákon pouze stanoví, že kopie pro vlastní potřebu nezasahuje do autorského práva a jeho omezení, právo zde garantováno není (tedy krom principu, že co není zakázáno, je dovoleno).
Naopak překonání ochrany je trestné.Trestné ne, pokud vím tak jen zakázané, a to autorským zákonem. Vzhledem k předchozímu bodu by mě ale zajímalo, zda z toho nejde odvodit, že na překonávání ochran pro vlastní potřebu se dané omezení nevstahuje...
Ve Windows akcelerace x264 videa v .mkv kontejneru již delší dobu funguje...a tam hovořím o konkrétní situaci, protože u takových filmů se v 99,9999% případů používá x264. Nehovořím tam obecně o formátu H.264, ale o konkrétním kompresním nástroji a konkrétním kontejneru.
V čem máš problém? jediná zmínka, na kterou můžeš poukazovat, je:Je to stejný problém jako kdybys v článku o prohlížeči obrázků napsal, že umí zobrazovat „GIMP obrázky“, přičemž bys tím myslel JPEG obrázky vytvořené programem GIMP, s argumentací, že si je stejně většina linuxáků bude vytvářet v GIMPu. Stejně jako nejsou GIMP obrázky (zanedbejme nativní formát GIMPu, o kterém není řeč), není ani x264 video. x264 je jenom program (knihovna/program), který vytváří H.264 video.Ve Windows akcelerace x264 videa v .mkv kontejneru již delší dobu funguje...a tam hovořím o konkrétní situaci, protože u takových filmů se v 99,9999% případů používá x264. Nehovořím tam obecně o formátu H.264, ale o konkrétním kompresním nástroji a konkrétním kontejneru.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.