VAAPI (ang. Video Acceleration API) to otwarta biblioteka oprogramowania (libVA) i specyfikacja API. Umożliwia i zapewnia dostęp do kart graficznych (GPU) celem przyspieszenia przetwarzania wideo. VAAPI jest przeznaczone dla systemu X Window na Uniksopodobnych systemach operacyjnych (Linux, FreeBSD i Solaris). Przyspieszone przetwarzanie obejmuje zarówno dekodowanie wideo, kodowanie wideo, jak i rendering. Specyfikacja została zaprojektowana przez firmę Intel dla jej kart graficznych z serii GMA (Graphics Media Accelerator). Jednak VAAPI nie ogranicza się do kart graficznych Intela lub specjalnego sprzętu, inni producenci sprzętu mogą również swobodnie korzystać z VAAPI dla potrzeb sprzętowej akceleracji dekodowania wideo, co uczyniła firma ATI / AMD.
Jak wiadomo pod Linuksem najlepiej pracują karty nVidia, no ale skoro już kupiliśmy tą nieszczęsną kartę ATI / AMD wyciśnijmy z niej co się da. W tym wpisie przedstawię jak zmusić naszą kartę ATI / AMD do pomocy przy dekodowaniu materiałów video HD (ściślej mówiąc rozdzielczość nie ma tu właściwie znaczenia, ważne jak jakim kodekiem zakodowany jest materiał video – a chodzi nam mianowicie o H.264 / AVC).
Niniejszy wpis opisuje instalację VLC ze sprzętowym wsparciem dekodowania wideo VAAPI na Ubuntu 10.10 Maverick Meerkat z kartami ATI / AMD pracującymi na własnościowych sterownikach Catalyst / fglrx. W przypadku Ubuntu 11.04 Natty Narwhal występuje błąd, który jak do tej pory nie udało mi się rozwiązać, tak więc akceleracja VAAPI nie zdziała. Natomiast w przypadku Ubuntu 10.04 Lucid Lynx nie testowałem tego przepisu, jeśli akceleracja VAAPI nie zadziała, to polecam sprawdzony przeze mnie sposób Łukasza Klicha.
Instalacja sterowników Catalyst / fglrx
Pierwszą rzeczą jaką musimy zrobić to instalacja zamkniętych sterowników fglrx, zwanych oficjalnie Catalyst. Możemy to zrobić przy pomocy jednej z dwóch polecanych przeze mnie metod:
Instalacja z repozytoriów PPA
W tej metodzie skorzystamy z repozytoriów PPA X Updates. Zatem w konsoli / terminalu wykonujemy:
1 2 3 4 5 |
sudo add-apt-repository ppa:ubuntu-x-swat/x-updates sudo apt-get update sudo apt-get upgrade sudo apt-get install fglrx sudo aticonfig --initial -f |
Podstawową zaletą tego rozwiązania jest to, że nie musimy martwić się o aktualizację, ale czasem bywa tak, że sterowniki w owym repozytorium uaktualniane są z opóźnieniem. W takim wypadku możemy skorzystać z alternatywnej metody.
Instalacja skryptem Kano
Skrypt ten oraz wiele innych niezwykle pożytecznych narzędzi dostępny jest tu. W konsoli / terminalu wykonujemy:
1 2 |
wget -N http://www.kanotix.com/files/install-fglrx-debian.sh chmod +x install-fglrx-debian.sh |
Po czym przechodzimy na terminal tekstowy i wykonujemy:
1 2 |
sudo service gdm stop sudo ./install-fglrx-debian.sh |
Ręczna instalacja sterowników
Ostatniej metody nie polecam, ale z kronikarskiego obowiązku odnotowują ją tu. Zatem wchodzimy na stronę ATI Catalyst™ Proprietary Display Driver – Linux x86 & Linux x86_64 i ściągamy najnowsza wersję, aktualnie jest to 11.2 Ewentualnie korzystamy z konsoli / terminala:
1 2 3 4 5 |
wget http://www2.ati.com/drivers/linux/ati-driver-installer-11-2-x86.x86_64.run chmod +x ati-driver-installer-11-2-x86.x86_64.run ./ati-driver-installer-11-2-x86.x86_64.run --buildpkg Ubuntu/maverick sudo dpkg -i fglrx*.deb sudo aticonfig --initial -f |
Niezależnie od wybranej metody instalacji sterowników, restartujemy system. Dla pewności możemy sprawdzić poprawność instalacji sterowników, wydając polecenie fglrxinfo
.
Instalacja odtwarzacza VLC
Pora teraz na instalację odtwarzacza VLC. Tu również skorzystamy z repozytorium PPA obZen Video
1 2 3 4 |
sudo add-apt-repository ppa:ed10vi86/video sudo apt-get update sudo apt-get upgrade sudo apt-get install vlc mozilla-plugin-vlc |
W preferencjach VLC włączamy opcję Wykorzystaj przyspieszenie GPU (eksperymentalne).
Instalacja biblioteki xvba-video zapewniającej obsługę VAAPI
VLC wspiera sprzętowe wspomaganie odtwarzania video poprzez VAAPI, podczas gdy metoda akceleracji video zapewniona przez sterowniki Catalyst / fglrx to X-Video Bitstream Acceleration. Aby VLC mógł z niej skorzystać potrzebujemy jeszcze jedną bibliotekę xvba-video
do ściągnięcia ze strony xvba-video – XvBA backend for VA API.
1 2 |
wget -N http://www.splitted-desktop.com/~gbeauchesne/xvba-video/xvba-video-latest.amd64.deb sudo dpkg --install xvba-video-latest.amd64.deb |
Uruchamiamy odtwarzacz w terminalu / konsoli poleceniem vlc
. Otwieramy jakiś film zakodowany w H.264 / AVC. Jeśli nie mamy nic na podorędziu polecam ściągnąć wolny film stworzony w Blenderze – Sintel. I tu czeka nas niemiła niespodzianka:
1 2 3 4 5 |
libva: libva version 0.31.1 Xlib: extension "XFree86-DRI" missing on display ":0.0". libva: va_getDriverName() returns 0 libva: Trying to open /usr/lib/dri/fglrx_drv_video.so libva: va_openDriver() returns -1 |
VLC nie znajduje naszej świeżo zainstalowanej biblioteki. No cóż paczka od Splitted-Desktop Systems zawiera małą niedoróbkę, którą poprawimy wykonując:
1 |
sudo ln -s /usr/lib/va/drivers/fglrx_drv_video.so /usr/lib/dri/fglrx_drv_video.so |
Ponownie uruchamiamy VLC i… może się zdarzyć druga niemiła niespodzianka. Przy próbie odtworzenia filmu VLC zakończy działanie, wcześniej wypluwając następujący komunikat:
1 2 3 4 5 6 |
libva: libva version 0.31.1 Xlib: extension "XFree86-DRI" missing on display ":0.0". libva: va_getDriverName() returns 0 libva: Trying to open /usr/lib/dri/fglrx_drv_video.so libva: va_openDriver() returns 0 Naruszenie ochrony pamięci |
W chwili pisania tego artykułu najnowsza wersja xvba-video
to 0.7.8 i właśnie ona powodowała u mnie naruszenie ochrony pamięci zainstalowanie teoretycznie niestabilnej wersji 0.7.8.pre2 rozwiązywało ten problem. Jeśli u Ciebie zdarzy się coś podobnego, wypróbuj po prostu starsze wersji biblioteki.
Teraz wszystko powinno być już dobrze, odpalamy vlc
i wypatrujemy następującego komunikatu:
1 2 3 4 5 6 7 |
libva: libva version 0.31.1 Xlib: extension "XFree86-DRI" missing on display ":0.0". libva: va_getDriverName() returns 0 libva: Trying to open /usr/lib/dri/fglrx_drv_video.so libva: va_openDriver() returns 0 xvba_video: XVBA_GetSurface(): status 2 0x7fa3bc74a0d0 avcodec decoder: Using VA API version 0.31 for hardware decoding. |
Jeśli go ujrzeliśmy, znaczy się że VAAPI działa, a procek ma trochę więcej czasu na inne zajęcia.