nVidia kullanıcılarının vdpau sayesinde uzun süredir sahip olduğu GPU destekli video oynatımı özelliğini nihayet ATI XvBA (X-Video Bitstream Acceleration) sayesinde çalıştırabildim. Özellikle yüksek çözünürlüklü (HD) video oynatmada sıkıntı yaşıyorsanız video decoding yükünü işlemciden alıp ekran kartına vermek çok işinize yarayacaktır.
Aşağıdaki anlatım Arch Linux altında bunun nasıl yapılacağını anlatıyor, ancak diğer dağıtımlara da kolaylıkla uyarlanabilir.
Not: Bu yöntem için ben X.Org 1.7.6 ve Catalyst 10.4 beta kullandım. Catalyst sürücüsünü (en güncel sürüm 10.2) depolarında bulunduran dağıtımlar X.Org 1.6 kullanıyor zira catalyst 1.7’yi desteklemiyor. 2 gün önce ATI’nin Ubuntu’ya “el altından verdiği” 10.4 sürümü 1.7 destekliyor ve ben de bu sürücüyü kullanıyorum. Bu yöntem daha eski sürücülerde çalışıyor mu bilmiyorum.
1) Öncelikle “libva” paketini kurmamız gerekiyor. Paketin eski sürümü AUR’da var ama bu sürüm bende hata verdiği için PKGBUILD’i değiştirerek güncel sürümü kurdum. Güncel PKGBUILD’i paketin sayfasındaki yorumlara yazdım. Adımlar şöyle:
Buradan tarball’u indirip, PKGBUILD’i güncelleyip komut satırında
makepkg
ile paketi inşa ediyoruz. Ondan sonra
pacman -U libva-sds-0.31.0_1_11-2-i686.pkg.tar.gz
ile paketi kuruyoruz.
2) ATI’nin XvBA backend’i için VA-API sürücüsünü kuruyoruz.
Buradan tarball’u indirip, açıp, komut satırında
makepkg
komutu ile inşa ettikten sonra
pacman -U xvba-video-0.6.10-1-i686.pkg.tar.gz
ile paketi kuruyoruz.
3) FFMPEG’in en son sürümüne ihtiyacımız olduğundan, ffmpeg-svn’i kuruyoruz. Bunun için buradan tarball’u indirip, önceki adımdaki gibi paketi oluşturup kuruyoruz. (Not: ffmpeg oldukça büyük bir paket, derlemesi uzun sürebilir.)
4) Son olarak Mplayer’ın VA-API desteği ile derlenmesi gerekiyor. Bunun için buradan mplayer-vaapi paketini indiriyor, aynı yöntemle kuruyoruz.
5) İhtiyacımız olan tüm paketler kurulmuş durumda. Öncelikle herşey yolunda mı diye test edelim. Komut satırında
vainfo
komutunu veriyoruz. Çıktısı ekran kartına göre değişiklik gösterse de benim kartım (HD4330) için şu şekilde:
libva: libva version 0.31.0-sds6 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 libva: va_openDriver() returns 0 vainfo: VA API version: 0.31 vainfo: Driver version: Splitted-Desktop Systems XvBA backend for VA API - 0.6.10 vainfo: Supported profile and entrypoints VAProfileMPEG2Simple : VAEntrypointIDCT VAProfileMPEG2Main : VAEntrypointIDCT VAProfileH264High : VAEntrypointVLD VAProfileVC1Advanced : VAEntrypointVLD
6) “libva”in eski sürümüyle uyumluluk için bazı symlink’leri oluşturmamız gerekiyor:
sudo ln -s /usr/lib/libva-x11-0.31.0.6.so.1 /usr/lib/libva-x11-0.31.0.5.so.1 sudo ln -s /usr/lib/libva-glx-0.31.0.6.so.1 /usr/lib/libva-glx-0.31.0.5.so.1 sudo ln -s /usr/lib/libva-0.31.0.6.so.1 /usr/lib/libva-0.31.0.5.so.1
7) Şimdi gerçek bir video ile test edelim. Komut satırında
mplayer -vo vaapi:gl -va vaapi [dosya adı].avi
ile bir video başlatmayı deneyin. Benim test ettiğim video için komut satırındaki çıktı şöyle:
$ mplayer -vo vaapi:gl -va vaapi Flashforward.S01E11-E12.HDTV.XviD-2HD.avi MPlayer SVN-r30589-4.4.3 (C) 2000-2010 MPlayer Team 144 audio & 329 video codecs mplayer: could not connect to socket mplayer: No such file or directory Failed to open LIRC support. You will not be able to use your remote control. Playing Flashforward.S01E11-E12.HDTV.XviD-2HD.avi. AVI file format detected. [aviheader] Video stream found, -vid 0 [aviheader] Audio stream found, -aid 1 VIDEO: [XVID] 624x352 12bpp 23.976 fps 1027.5 kbps (125.4 kbyte/s) Clip info: Software: MEncoder dev-SVN-r26940 [vo_vaapi] Using OpenGL rendering libva: libva version 0.31.0-sds6 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 libva: va_openDriver() returns 0 ========================================================================== Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family [VD_FFMPEG] VA API accelerated codec. Unsupported PixelFormat 61 [VD_FFMPEG] Trying pixfmt=1. Movie-Aspect is undefined - no prescaling applied. VO: [vaapi] 624x352 => 624x352 MPEG-4 VA API Acceleration [vo_vaapi] Using 1:1 VA surface mapping FATAL: Cannot initialize video driver. Unsupported PixelFormat 61 [VD_FFMPEG] Trying pixfmt=0. Unsupported PixelFormat 61 Could not find matching colorspace - retrying with -vf scale... Opening video filter: [scale] The selected video_out device is incompatible with this codec. Try appending the scale filter to your filter list, e.g. -vf spp,scale instead of -vf spp. [VD_FFMPEG] Trying pixfmt=2. Could not find matching colorspace - retrying with -vf scale... Opening video filter: [scale] The selected video_out device is incompatible with this codec. Try appending the scale filter to your filter list, e.g. -vf spp,scale instead of -vf spp. [VD_FFMPEG] Trying pixfmt=3. Movie-Aspect is undefined - no prescaling applied. VO: [vaapi] 624x352 => 624x352 Planar YV12 Selected video codec: [ffodivx] vfm: ffmpeg (FFmpeg MPEG-4) ========================================================================== ========================================================================== Opening audio decoder: [mp3lib] MPEG layer-2, layer-3 AUDIO: 48000 Hz, 2 ch, s16le, 128.0 kbit/8.33% (ratio: 16000->192000) Selected audio codec: [mp3] afm: mp3lib (mp3lib MPEG layer-2, layer-3) ========================================================================== [AO OSS] audio_setup: Can't open audio device /dev/dsp: Device or resource busy AO: [alsa] 48000Hz 2ch s16le (2 bytes per sample) Starting playback... Movie-Aspect is 1.77:1 - prescaling to correct movie aspect. VO: [vaapi] 624x352 => 624x352 Planar YV12 No bind found for key 'c'. % 6% 0.7% 0 0 A: 5.0 V: 5.0 A-V: -0.001 ct: -0.039 122/122 7% 9% 0.6% 0 0 Exiting... (Quit)
8 ) Video izlerken GPU’nun ne kadar kullanıldığını görmek isterseniz komut satırında
aticonfig --adapter=0 --od-getclocks
komutunu verip “GPU Load” kısmına bakabilirsiniz. Bahsettiğim video bende şöyle bir sonuç veriyor:
Adapter 0 - ATI Mobility Radeon HD 4300 Series Core (MHz) Memory (MHz) Current Clocks : 450 600 Current Peak : 450 600 Configurable Peak Range : [450-450] [600-600] GPU load : 39%
Gördüğünüz üzere artık video decoding için işlemci değil ekran kartı kullanılıyor. Artık siz de GPU ile hızlandırılmış video’nun keyfini çıkarabilirsiniz 🙂
Ekran görüntüsü: