HW akcelerácia v linuxe nie je až tak jednoduchá ako v prostredí MS Windows. Väčšina výrobcov zrejme nepovažuje OS Linux pre desktopové verzie za veľmi rozšírený (čo je stále pravda), tak sa tým veľmi nezaobera a pre GPU vydaju proprietarné ovládače. Aj keď HW akcelerácia by minimálne v distribúciach založených na Ubuntu (v mojom prípade Linux Mint) mala fungovať ihneď po vybalení z krabice, tak vo webových prehliadačoch sa to musí nastaviť.
V mojom predošlom desktope som mal procesor od Intelu G5400, ktorý mal iGPU Intel® UHD Graphics 610. HW akcelerácia pri internetových streamov nebola využitá a všetko dekódoval CPU. Ak ma počítač výkonný CPU, tak bežný užívateľ si ani len nevšimne ako sa internetový stream dekóduje. Keďže Intel G5400 je podpriemerný CPU, tak problémy začínajú už pri prehrávaní 720p 30 FPS streame. Na webe výrobcu procesora je však uvedené.
- Max Resolution (HDMI) 4096×2304@24Hz
- Max Resolution (DP) 4096×2304@60Hz
To znamená, že cez displayport by iGPU mal bez problémov zvládnuť 4K 60 FPS. Ako si bežný užívateľ všimne, že namiesto GPU sa používa CPU ? Veľmi jednoducho. CPU je vyťažený na vysoký výpočtový výkon, ventilátor sa roztočí do max. otáčok a vtedy môžeme povedať, že iGPU sa nepodieľa ne dekódovaní.
Internet sa rýchlo mení a prispôsobuje sa dobe, resp. dopytu. Keď sme si pred 15-20 rokmi na internete čítali texty a na zobrazenie jpg obrázku čakali radovo v sekundách, tak dnes je hlavnou doménou internetu, video stream. Okrem toho, že stream môžeme cez internet pozerať tak aj sami môžeme stream na internet vysielať a dokonca aj v reálnom čase . Asi najznámejšou streamovaciu službou (ak nepočítame platené: Netflix, Disney + a HBO Max) je nepochybne Youtube (kto používa ublock origin, tak sa vyhne aj otravným reklamám). Ja využívam tak isto Youtube, kde sa viem pomerne jednoducho dostať k zaujímavému obsahu ( rôzne prednášky, konferncie typu InstallFest, LinuxDays a pod.).
Najprv si stručne popíšeme niečo o Youtube z pohľadu laika. Youtube je streamovacia služba patriaca spoločnosti Google LLC, nad ktorou má kontrolu holdingová spoločnosť Alphabet Inc. Spoločnosť Youtube má v rôznych geografických oblastiach a rýchle veľké servery, ktoré môžeme nazvať CDN (príp. si CDN prenajíma). Užívatelia služby Youtube, svoj obsah zasielajú prevažne na najbližší server, kde sa video uloží, prekonvertuje do rôzných formátov, rozlíšení a následne je k dispozícii na stream. Podľa dopytu sa následne presúva na ďalšie CDN aby bolo bližšie k spotrebiteľom a načítanie bolo rýchlejšie. Spoločnosť Youtube si vyvíja svoje kódeky sama, príp. spolupracuje s inými spoločnosťami. V súčasnosti dominujú kódeky vp8, vp9 a hodne sa záčina tlačiť a presadzovať av1 (pozor! nemíliť si s avc).
Každý CPU, ktorý obsahuje iGPU dokáže niektoré videá dekódovať pomocou HW akcelerácie. Napr. procesor AMD Ryzen 5 5600G, ktorý som si nedávno kúpil, nedokáže dekódovať av1 (vp8 a vp9 áno) a túto prácu musí vykonať samotný CPU, čo je značná zaťaž pri 60 FPS.
Začínam teda testovať HW akceleráciu v Linux Mint 21 na staršom CPU Intel G 5400. Najprv sťahujem testovacie video 4K s 60 FPS. Veľmi dobrý prehrávač mediálnych súborov je v linuxe MPV. Linux Mint ma predvolene nainštalovaný Celuloid čo sa dá chápať ako slušný frontend pre MPV. Čiže MPV už nemusíme inštalovať a stačí keď nainštalujeme nástroj na monitorovanie GPU.
sudo apt-get update
sudo apt-get install -y intel-gpu-tools
Spúšťam video a cez terminálovú aplikáciu htop (v pravom dolnom rohu) vidím, že CPU je vyťažený na nejakých 20%. To znamená, že HW akcelerácia je v poriadku. Ak pri prehrávani videa stlačíme kláves „i“ tak sa zobrazia informácie o prehrávanom videu. Z obrázku je vidieť, že sa jedná o video s rozlíšením 3840*2160 s frekvenciou snímkov 60 Hz. Toto video prehrávam na Full HD monitore, preto je Scaled Resolution 1920*1080.

Ak spustíme terminálovú appku
sudo intel_gpu_top
a vidíme v riadku video nejakú aktivitu (v mojom prípade 62.94%), tak vieme povedať, že video je akcelerované hardverovo.

Teraz sa poďme pozrieť na Youtube. Na testovanie som použil webový prehliadač Chromium na ktorom je postavený aj Google Chrome. Na Youtube som našiel veľmi pekne zábery zo Stredoamerického štátu Costa Rica na ktorom som testoval HW akceleráciu. Ak na Chromiu spustíme 4K video s 60 FPS s kodekom vp9, veľmi rýchlo zistíme, že HW akcelerácia sa nekoná, pretože CPU je vyťažený na maximálne hodnoty. Rady typu, „že“ v nastaveniach prehliadača je potrebné HW akceleráciu povoliť sú zbytočné.
Keď vo webovom prehliadači Chromium otvoríme Nástroje pre vývojárov pomocou klávesovej skratky Ctrl + Shift + I, alebo cez menu (3 bodky v prehliadači, viď následujúci obrázok).

A vo vývojárskej konzole, znova klik na 3 bodky --> More tools --> Media

Tak na karte Properties môžeme vidieť zaujmavé informácie ohľadom Rozlíšenia, FPS, Video dekódera atď. Vývojársku konzolu môžeme nechať otvorenú (otváranie a zatváranie vývojárskej konzoly potom funguje cez klávesu F12). Ďalšie zaujímavé informácie ohľadom streamu, možeme získať ak klikneme v okne kde sa streamuje video pravou myškou a vyberieme možnosť Štatistiky pre náročných


Najprv idem prehrať video v rozlíšení 4K 3840*2160 s FPS 60 vp9 bez HW akcelerácie. To, že HW akcelerácia je vypnutá je vidieť na následujúcom obrázku a konkrétne Hardware decoder False. Z obrázku je vidieť aj to, že CPU ide takmer na max. výkon 93% a v terminálovej aplikácii intel_gpu_top je riadok video na 0%. CPU to jednoducho nestíhal dekódovať a video sa každých 2-3 sekundy zastavilo, čiže výsledný efekt je Nepozerateľné video.

Keď som zmenil rozlíšenie na Full HD 1920*1080 (FPS ostalo 60), tak zaťaženie CPU sa znížilo na 70%, čo je pre procesor znesiteľné a video šlo plynulejšie, ale stále to nebolo OK.

Aby sa video hárdverovo akcelerovalo potrebujeme nainštalovať balík intel-media-va-driver-non-free a to spravíme jednoducho. Doinštaloval som aj vainfo . Potom vainfo spustíme
sudo apt-get update
sudo apt install intel-media-va-driver-non-free
sudo apt install vainfo
vainfo
a mohli by sme vidieť niečo podobné
libva info: VA-API version 1.14.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_14
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.14 (libva 2.12.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 22.3.1 ()
vainfo: Supported profile and entrypoints
VAProfileNone : VAEntrypointVideoProc
VAProfileNone : VAEntrypointStats
VAProfileMPEG2Simple : VAEntrypointVLD
VAProfileMPEG2Simple : VAEntrypointEncSlice
VAProfileMPEG2Main : VAEntrypointVLD
VAProfileMPEG2Main : VAEntrypointEncSlice
VAProfileH264Main : VAEntrypointVLD
VAProfileH264Main : VAEntrypointEncSlice
VAProfileH264Main : VAEntrypointFEI
VAProfileH264Main : VAEntrypointEncSliceLP
VAProfileH264High : VAEntrypointVLD
VAProfileH264High : VAEntrypointEncSlice
VAProfileH264High : VAEntrypointFEI
VAProfileH264High : VAEntrypointEncSliceLP
VAProfileVC1Simple : VAEntrypointVLD
VAProfileVC1Main : VAEntrypointVLD
VAProfileVC1Advanced : VAEntrypointVLD
VAProfileJPEGBaseline : VAEntrypointVLD
VAProfileJPEGBaseline : VAEntrypointEncPicture
VAProfileH264ConstrainedBaseline: VAEntrypointVLD
VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
VAProfileH264ConstrainedBaseline: VAEntrypointFEI
VAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLP
VAProfileVP8Version0_3 : VAEntrypointVLD
VAProfileVP8Version0_3 : VAEntrypointEncSlice
VAProfileHEVCMain : VAEntrypointVLD
VAProfileHEVCMain : VAEntrypointEncSlice
VAProfileHEVCMain : VAEntrypointFEI
VAProfileHEVCMain10 : VAEntrypointVLD
VAProfileHEVCMain10 : VAEntrypointEncSlice
VAProfileVP9Profile0 : VAEntrypointVLD
VAProfileVP9Profile2 : VAEntrypointVLD
Samozrejme, že po inštalácii intel-media-va-driver-non-free v Chromiu, resp. Google Chrome HW akcelerácia fungovať nebude. Ak do url prehliadača napíšeme chrome://flags, zistíme, že prehliadač môžeme spúšťať experimentálne z rôznymi funkciami. Každá aplikácia v linuxe je spustiteľná aj cez terminál, takže webové prehliadače spustíme aj v konzole. Ak ku príkazu spustenia prehliadača pridáme potrebné príznaky, tak prehliadač sa spustí s danými príznakmi. Chromium cez terminál spustíme takto, pripúšťa sa aj možnosť 2
chromium-browser
chromium
Takto vyzerá celý príkaz na spustenie s podporou HW akcelerácie, pre Chromium a riadok 3 pre Google Chrome.
chromium-browser --use-gl=desktop --enable-features=VaapiVideoDecoder --disable-features=UseChromeOSDirectVideoDecoder
chromium --use-gl=desktop --enable-features=VaapiVideoDecoder --disable-features=UseChromeOSDirectVideoDecoder
google-chrome --use-gl=desktop --enable-features=VaapiVideoDecoder --disable-features=UseChromeOSDirectVideoDecoder
Samozrejme to nemusíme stále spúšťať cez terminál, ale môžeme si vytvoriť spúšťač na ploche. Keď otvoríme Chromium cez vyššie uvedený príkaz, tak zistíme, že HW akcelerácia už funguje. Najprv si ukážeme 4K video s 60 FPS. Keď sa pozrieme na správcu úloh vľavo dole, tak vidíme, že CPU sa znížilo a dynamicky je na nejakých 50-80%, čo nie je ideálne, ale video ide plynule. Vpravo dole môžeme v terminálovej aplikácii intel-gpu-top vidieť, že HW akcelerácia funguje a taktiež vo vývojárskej konzole prehliadača vidíme Hardware decoder True.

Ak prepneme video na Full HD 1920*1080, tak zaťaženie procesora sa zníži na nejakých 30%. Vzhľadom k tomu, že to prehrávam na monitore Benq 27″ Full HD, tak nemá význam nastavovať video na viac ako 1920*1080. Ak sa bude jednať o nižší FPS ako 60, tak CPU zaťaž sa ešte zníži.

Testoval som 4K 25 FPS a CPU bol na úrovni 20%. Ak máme ešte slabší CPU ako je môj testovaný, tak vidím ešte jednu možnosť a to plugin do prehliadača h264ify. Viac info o tomto plugine na githube. Po aktivovaní tohto pluginu sa použije namiesto vp8/vp9 kodek avc. Ešte je možné nastaviť blokovanie 60 FPS. To znamená, že sa použije nižší počet snímkov.
Nedávno som si kúpil a nainštaloval aj Windows 11 na ten istý PC (dualboot s Linux Mint) a tam je to úplne o niečom inom. Intel ovládač sa nainštaluje počas inštalácie OS a keď spustím na Youtube 4K video s FPS 60, tak CPU nepresiahne 20%. Všimnúť si môžeme aj využitie GPU0 na 53%

Teraz neviem či Chvalabohu, alebo Bohužiaľ , ale linux drivery nie sú tak efektívne ako pre MS Windows. Podľa štatistiky používania operačných systémov je na tom Linux dosť zle a v priemere ho používa len 1.02% užívateľov.

Záver
V každom prípade HW akcelerácia v Linuxe funguje aj na slabších Intel CPU. 4K súbory prehrávané lokálne fungujú výborne a CPU zaťažia len nepatrne (cca 20%). Horšie je to už so streamovaním, kde slabšie CPU (ako napr. Intel G5400) nemajú tak dokonalý ovládač aby zvládli 4K pri 60 FPS. Youtube bude zrejme čo raz viac presadzovať kódovanie av1, čo väčšina starších GPU nedokáže dekódovať. Avšak každý nový kóder/dekóder sa vyvíja vždy preto, lebo má byť efektívnejší ako predošlý. To znamená, že buď pri rovnakom výpočtovom výkone zvýši kvalitu, rozlíšenie, FPS, alebo pri rovnakej kvalite, rozlíšení, FPS, bude mať nižšie nároky na výpočtový výkon.
Vopred sa ospravedlňujem odborníkom, ktorí vidia do tejto problematiky viac ako ja. V blogu môžu byť aj nejaké nepresnosti, ktoré môžu byť dodatočne opravené. Avšak tak ako som to v blogu popísal mi to funguje.