neděle 30. ledna 2011

Akcelerace HD videa s ATI - XvBA / VA API

Nedávno jsem udělal drobný upgrade PeCe, když jsem z druhé ruky zakoupil celkem výhodně balík komponet, kerý měl jen jedinou vadu - byla v tom grafická karta ATI Radeon HD4870. Chvíli jsem se rozmýšlel, ale pak si řekl, že alespoň bude sranda a podívám se, jestli je ATI pod Linuxem opravdu takový průšvih, nebo už se dá i používat. První dojmy po instalaci byly zoufalé, ale nakonec jsem se i ohledně přehrávání videa dostal ke stavu uspokojivému, a to i díky poslednímu Catalystu 11.1. Řeč bude o výměně kernelu, ovladače grafiky a především o zprovoznění akcelerace videa.


Radeon HD4870 jsem instaloval na Ubuntu 10.10 Maverick, nejprve na 32bit a poté i na 64bit, s v podstatě stejnými výsledky. Když jsem využil prostředků, které v základu nabízí Maverick, tedy především kernel 2.6.35 a fglrx 2:8.780 (snad Catalyst 10.10), bylo video mizerné, protože se, nehledě na přehrávač, Compiz, videovýstup a nakonec i VAAPI, v pravidelných, krátkých, intervalech zasekávalo. Jako první jsem zkusil nainstalovat novější Catalyst 10.12, ale pomohla až výměna jádra za 2.6.36. Nakonec jsem nainstaloval úplně čerstvý Catalyst 11.1, který konečně nabízí likvidaci tearingu, a co je nejdůležitější - funkční.

Postupoval jsem takto:
  • výměna kernelu za 2.6.36
  • odinstalace stávajícího ovladače grafiky  
  • instalace Catalyst 11.1
  • instalace upravené knihovny libva (VA-API)
  • instalace xvba-video
  • kompilace MPlayeru s podporou VA-API a konfigurace SMPlayeru 
  • kompilace XBMC s podporou VA-API

Výměna kernelu
 Výměna kernelu není nezbytná, ale mně pomohla. Nicméně tohle můžete přeskočit, případně se k tomu vrátit později, pokud bude důvod. Hotové balíky k instalaci v Ubuntu najdete zde, je třeba vybrat požadovanou verzi kernelu pro vaši verzi Ubuntu a architekturu (32bit/64bit). Já sáhl po 2.6.36 pro Mavericka 64bit. Potřeba je stáhnout tři balíky, v mém případě jsou to tyto:
a postupně je nainstalovat. Logicky majitelé 32bit systému stáhnou místo druhých dvou ty, končící i386. Po restartu počítače by mělo být nové jádro v Grubu připravené k nabootování. Pokud byste měli při zavádění problém s grafikou - po bootu by se vůbec neobjevil obraz, je třeba restartovat počítač v recovery modu, po bootu vybrat režim failsaveX a pokračovat reinstalací ovladače.

Odstranění stávajícího ovladače grafiky
 Před instalací nového ovladače, je dobré starý odstaranit, především, pokud používáte výchozí svobodný ovladač:
sudo apt-get purge xserver-xorg-video-radeon

fglrx ovladače odstraňuji takto:
sudo apt-get purge 'fglrx*'

Instalace nového ovladače fglrx
 Nejnovější Catalyst si stáhnete ze stránek AMD, v pravé části je formulář pro výběr. Přímý odkaz na Catalyst 11.1, je zde:

Před vlastní kompilací ATI driveru je potřeba nainstalovat následující:

sudo apt-get install dh-make dh-modaliases execstack

Instalátor je společný pro 32 i 64bit a jeho pomocí si vytvoříte balíky pro instalaci. V terminálu přejdete do složky, kde máte instalátor stažený a spustíte:
sh ./ati-driver-installer-11-1-x86.x86_64.run --buildpkg Ubuntu/maverick

maverick případně nahradíte vaší verzí Ubuntu. Pokud ho spouštíte poprvé, vyžádá si instalaci dalších potřebných balíků a poté vytvoří čtyři balíky, které můžete nainstalovat příkazem:
sudo dpkg -i fglrx*.deb

Po instalaci je ještě třeba zapsat konfiguraci do xorg.conf:
sudo aticonfig --initial -f

a restartovat systém. Více informací zde:
http://wiki.cchtml.com/index.php/Ubuntu_Maverick_Installation_Guide

Dlouho očekávanou novinku Catalyst 11.1 - funkční vsync, alias Tear Free Desktop, je možné zapnout (a vypnout) buď z Ati Catalyst Control Center, nebo zapnout příkazem:
sudo aticonfig --set-pcs-u32=DDX,EnableTearFreeDesktop,1

a vypnout:
sudo aticonfig --del-pcs-key=DDX,EnableTearFreeDesktop

Akcelerace videa přes VA-API s XvBA backendem 
 Pro to, abyste přenesli dekódování videa z procesoru na grafickou kartu ATI, potřebujete v Ubuntu, krom odpovídající grafické karty podporující XvBA (Radeon HD4xxx a novější), nejprve nainstalovat upravenou knihovnu libva1 a xvba-video.

První možností je nainstalovat repozitář s hacknutou libva1:
sudo add-apt-repository ppa:dtl131/catalysthacks
sudo apt-get update
sudo apt-get upgrade

Pokud by tento repozitář nefungoval, můžete si stáhnout deb balíky libva1.. a libva-dev.. v nejnovější verzi pro vaši architekturu z tohoto webu. Protože se balíky tváří jako nižší verze, než je již v systému, udělejte instalaci z příkazového řádku v adresáři, kam jste balíky stáhli:
sudo dpkg -i libva*.deb

Zde je ale potřeba zmínit, že po této akci vám systém bude nabízet aktualizaci těchto balíků z vlastních zdrojů a ta by předešlou snahu zmařila. Je proto dobré v Synapticu zamknout verzi těchto balíků, aby se neaktualizovaly.

Dále stáhněte poslední verzi xvba-video a nainstalujete, ať už poklepáním na stažený deb balík, nebo z terminálu pomocí dpkg.
Pokud vše proběhlo, jak mělo, restartujte počítač a v terminálu zadejte příkaz:
vainfo

Výstup u mě vypadá takto:

libva: libva version 0.31.1-sds1
Xlib: extension "XFree86-DRI" missing on display ":0.0".
libva: va_getDriverName() returns 0
libva: Trying to open /usr/lib/va/drivers/fglrx_drv_video.so
Xlib: extension "XFree86-DRI" missing on display ":0.0".
libva: va_openDriver() returns 0
vainfo: VA API version: 0.31
vainfo: Driver version: Splitted-Desktop Systems XvBA backend for VA-API - 0.7.8.pre1
vainfo: Supported profile and entrypoints
      VAProfileH264High               : VAEntrypointVLD
      VAProfileVC1Advanced            : VAEntrypointVLD

Pokud dostanete nějaké chyby, je něco špatně. :)
Tímto by byla nainstalována podpora, ale ještě je potřeba přesvědčit nějaký ten přehrávač, aby ji použil. A to se neobejde bez nějaké té snahy.

MPlayer / SMPlayer
 MPlayer s podporou VA-API stáhnete ze stejné stránky, jako předchozí dva balíky, poslední verze je konkrétně zde. Balík rozbalíte, složku s MPlayerem si dáte, kam uznáte za vhodné (já mám na takovéhle projekty složku ~/install) a podíváte se do README.txt, co s tím máte dělat. Nejdříve nainstalujete balíky, potřebné pro kompilaci:
sudo apt-get build-dep mplayer

přejdete do adresáře, kam jste mplayer rozbalili, v mém případě je to:
cd ~/install/mplayer-vaapi

a spustíte kompilaci připraveným skriptem:
./checkout-patch-build.sh

Chvíli to bude trvat. Pokud se podaří, můžete nový MPlayer vyzkoušet:
./mplayer -vo vaapi -va vaapi "cesta/k/videu"

Pokud přehrává, můžete přistoupit ke konfiguraci SMPlayeru, který nabízí přecijen pohodlnější uživatelské rozhraní, než samotný MPlayer. Pokud SMPlayer nemáte, nainstalujte:
sudo apt-get install smplayer

V nastavení SMPlayeru je nejprve potřeba změnit původní MPlayer za ten, co jste si právě vyrobili. To uděláte v Preferences > General > General > MPlayer executable, můžete kouknout na následující obrázek (klikněte pro plnou velikost):


Dalším zásahem do nastavení bude v Advanced > Options for MPlayer > Options, kam vložíte: -va vaapi -vo vaapi. Opět viz obrázek:


Parametr -vo vaapi tu předefinuje videovýstup. Je to to samé, jako byste vaapi vybrali v nastavení General > Video > Output driver a zde ten parametr smazali. Volba -va definuje rozhraní pro akceleraci videa a ta tu být musí stoprocentně. Pak už by nic nemělo bránit přehrávání (skoro) bez účasti procesoru. 1080p video ve slušné kvalitě mi nyní sežere cca 3% času CPU (C2D na 2GHz).

XBMC
 Pro přehrávání filmů osobně používám především XBMC, protože při koukání na filmy nepotřebuju na počítači dělat nic jiného (a opačně) a XBMC je pro klasické kino ovládané dálkovým ovladačem přecijen o nějakou tu třídu výš, než SMPlayer. Žádný repozitář zatím nenabízí hotový balík s podporou VA-API, je opět potřeba kompilovat. Použijem SVN, tudíž je potřeba mít nainstalováno:
sudo apt-get install subversion

Stáhněte si XBMC do domovského adresáře:
cd $HOME
svn checkout http://xbmc.svn.sourceforge.net/svnroot/xbmc/trunk xbmc

V adresáři xbmc nyní máte zdrojové kódy, které zpracujete podle instrukcí v README.ubuntu a README.linux. Začnete s instalací potřebných komponent:
sudo apt-get install subversion make g++ gcc gawk pmount libtool nasm yasm automake cmake gperf zip unzip bison libsdl-dev libsdl-image1.2-dev libsdl-gfx1.2-dev libsdl-mixer1.2-dev libfribidi-dev liblzo2-dev libfreetype6-dev libsqlite3-dev libogg-dev libasound-dev python-sqlite libglew-dev libcurl3 libcurl4-gnutls-dev libxrandr-dev libxrender-dev libmad0-dev libogg-dev libvorbisenc2 libsmbclient-dev libmysqlclient-dev libpcre3-dev libdbus-1-dev libhal-dev libhal-storage-dev libjasper-dev libfontconfig-dev libbz2-dev libboost-dev libenca-dev libxt-dev libxtst-dev libxmu-dev libpng-dev libjpeg-dev libpulse-dev mesa-utils libcdio-dev libsamplerate-dev libmms-dev libmpeg3-dev libfaad-dev libflac-dev libiso9660-dev libass-dev libssl-dev fp-compiler gdc libwavpack-dev libmpeg2-4-dev libmicrohttpd-dev libmodplug-dev libssh-dev gettext cvs
sudo apt-get install autopoint 

Teď už se pustíte do přípravy kompilace:
./bootstrap

Pokud budete chtít nějakou vlastní konfiguraci XBMC, můžete si projít flagy, které můžete použít:
./configure --help

Já nechal vše na automatice, pouze jsem si pojistil právě vaapi:
./configure --enable-vaapi

Pokud dostanete hlášku, že vaapi nemohlo být povoleno a konfigurace se přeruší, špatně jste je nainstalovali. Po úspěšné konfiguraci následuje kompilace. Pokud máte vícejádrový procesor, můžete kompilátoru přidělit jader více, pro dvě jádra to bude:
make -j2

Na mém 3GHz dvoujádru to trvalo do deseti minut mám pocit. Trochu ještě dochutíte:
make -C lib/addons/script.module.pil
make -C lib/addons/script.module.pysqlite

a máte navařeno na večeři. Konečnou instalaci můžete provést buď přímo do systému (to má výhodu v tom, že máte spouštěcí ikonku v menu, nebo stačí spustit příkaz xbmc v terminálu):
sudo make install

nebo si zvolíte adresář pro instalaci sami. Například:
sudo make install DESTDIR=$HOME/install/xbmc

Pak spouštíte XBMC příkazem (pro můj příklad):
~/install/xbmc/usr/share/xbmc.bin

Pokud nainstalujete zkompilované XBMC přímo do systému, je více než vhodné předem odstranit případnou instalaci předchozí. Instalace každopádně proběhne mimo balíčkovací systém a Synaptic, ani apt-get o tom nebudou mít páru, tudíž odinstalaci musíte případně provést skriptem v adresáři, ve kterém jste XBMC vyráběli:
sudo make uninstall

Po spuštění XBMC je potřeba v Nastavení  v sekci Video VAAPI povolit, ale s některými videi je problém a obraz se cuká a poskakuje. Přitom MPlayer se stejným videem nemá problém. V XBMC je tedy v některých případech potřeba akceleraci v menu vypnout.

Kdybyste to chtěli vyzkoušet a měli problém, dejte vědět, doufám, že jsem toho moc nepoplet ;)

Odkazy:
http://en.wikipedia.org/wiki/XvBA
http://wiki.cchtml.com/index.php/Ubuntu_Maverick_Installation_Guide
http://doityourselfhtpc.wordpress.com/2010/09/09/intel-core-i3-h264-gpu-acceleration-using-ubuntu-and-xbmc/
http://www.splitted-desktop.com/~gbeauchesne/
http://www.phoronix.com/scan.php?page=article&item=amd_catalyst_111&num=1
http://kernel.ubuntu.com/~kernel-ppa/mainline/
http://wiki.videolan.org/VLC_VAAPI

Žádné komentáře:

Okomentovat

Zkuste prosím při komentováni používat místo volby Anonymní volbu Název/adresa URL, kde vyplníte nějakou přezdívku, adresu zadávat nemusíte. Vědět, které příspěvky jsou od jednoho člověka, je fajn. Díky.

Pokud by se vám náhodou odeslaný komentář na stránce nezobrazil, vytáhnu ho z koše hned jak si toho všimnu. I Google spam filter se občas sekne.