動画再生のためVAIO type Pにmplayer-vaapiを導入
先日 VAIO type P に Debian squeeze を入れてみたのだが,動画再生がうまくできていなかった.必要としていなかったので放っておいたのだけれど, Iceweasel(Firefox) の画面が崩れる問題を回避するため Google Chrome for Linux を入れてみたら,動かないと思っていた Flash がぬるぬる動いて,あれ,工夫すれば動画再生できるんじゃないの,ということになって.
ちょっと調べてみると, Ubuntu で mplayer-vaapi を使って問題を解決している事例がすぐに見つかったので,これを試してみることにした.
まず, http://www.splitted-desktop.com/~gbeauchesne/mplayer-vaapi/ から最新版のコードをもらってくる. Quick build notes を参考にビルドしてみる.
% sudo apt-get build-dep mplayer % wget http://www.splitted-desktop.com/~gbeauchesne/mplayer-vaapi/mplayer-vaapi-20110127-FULL.tar.bz2 % tar jxvf mplayer-vaapi-20110127-FULL.tar.bz2 % cd mplayer-vaapi-20110127 % ./checkout-patch-build.sh ... ERROR: you need VA API headers for this project
Quick build notes には
Upstream libVA API >= 0.31.0 is the minimal requirement. OpenGL rendering support requires libVA API >= 0.31.0-sds3: http://www.splitted-desktop.com/~gbeauchesne/libva/
と書いてあるのだが, Debian のリポジトリにはもっと新しい libva があるので,私はここで余計な気を利かせて apt を使って libva-dev を導入した.が,これが後々余計な手間を増やしたので,素直に
% wget http://www.splitted-desktop.com/~gbeauchesne/libva/pkgs/i386/libva1_0.32.0-1+sds2_i386.deb % wget http://www.splitted-desktop.com/~gbeauchesne/libva/pkgs/i386/libva1-dbg_0.32.0-1+sds2_i386.deb % wget http://www.splitted-desktop.com/~gbeauchesne/libva/pkgs/i386/libva-dev_0.32.0-1+sds2_i386.deb % sudo dpkg -i libva1_0.32.0-1+sds2_i386.deb libva1-dbg_0.32.0-1+sds2_i386.deb libva-dev_0.32.0-1+sds2_i386.deb
などとしておくのがいいかもしれない.ただ試していないのでこの副作用はわからない.私は,
% sudo aptitude install libva-dev yasm
これで済ませた. yasm を入れておかないと,やはりまた
... Checking for yasm ... Error: yasm not found, use --yasm='' if you really want to compile without Check "config.log" if you do not understand why it failed. Makefile:22: config.mak: No such file or directory
などと言ってこける.
必要な準備を済ませてから改めて
% ./checkout-patch-build.sh
を叩いて暫く放っておくと, mplayer-vaapi というディレクトリの中にバイナリが作られる.指示に従って実行を試みる.
% cd mplayer-vaapi % ./mplayer -vo vaapi -va vaapi FILE ... libva: libva version 0.31.0 libva: va_getDriverName() returns 0 libva: Trying to open /usr/lib/dri/psb_drv_video.so libva: va_openDriver() returns -1 [vo_vaapi] vaInitialize(): unknown libva error Error opening/initializing the selected video_out (-vo) device.
調べてみると,確かに /usr/lib/dri/psb_drv_video.so などと言うファイルはない.周辺をうろついたところ, /usr/lib/va/drivers/psb_drv_video.so というやつがそれらしい.ので,リンクを張ってやる.
% sudo ln -s /usr/lib/va/drivers/psb_drv_video.so /usr/lib/dri/psb_drv_video.so % ./mplayer -vo vaapi -va vaapi FILE libva: libva version 0.31.0 libva: va_getDriverName() returns 0 libva: Trying to open /usr/lib/dri/psb_drv_video.so libva error: dlopen of /usr/lib/dri/psb_drv_video.so failed: libva.so.0: cannot open shared object file: No such file or directory libva: va_openDriver() returns -1 [vo_vaapi] vaInitialize(): unknown libva error Error opening/initializing the selected video_out (-vo) device.
今度は libva.so.0 が無い.調べてみると,ビルドの要件にあったリンクからたどったパッケージを入れると libva.so.0 は導入されるが, Debian のリポジトリから入れると libva.so.1 はあるものの,古い方は導入されないらしい.手で入れようとしたら失敗した.
% sudo dpkg -i libva1_0.32.0-1+sds2_i386.deb dpkg: warning: downgrading libva1 from 1.0.1-3 to 0.32.0-1+sds2. (Reading database ... 191841 files and directories currently installed.) Preparing to replace libva1 1.0.1-3 (using libva1_0.32.0-1+sds2_i386.deb) ... Unpacking replacement libva1 ... dpkg: error processing libva1_0.32.0-1+sds2_i386.deb (--install): trying to overwrite '/usr/lib/libva-x11.so.1', which is also in package libva-x11-1 1.0.1-3 Errors were encountered while processing: libva1_0.32.0-1+sds2_i386.deb
このために関連パッケージを消して手で入れ直すのもアレなので,共有ライブラリだけ頂く.
% dpkg-deb -x libva1_0.32.0-1+sds2_i386.deb % sudo cp -ra usr/lib /usr/local/lib/libva1_0.32.0-1+sds2_i386 % cd mplayer-vaapi-20110127/mplayer-vaapi % LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/libva1_0.32.0-1+sds2_i386 ./mplayer -vo vaapi -va vaapi FILE
うまく再生された.
よく見ると debian というディレクトリがあるので,すぐパッケージになりそう.
% dpkg-buildpackage -us -uc dpkg-buildpackage: export CFLAGS from dpkg-buildflags (origin: vendor): -g -O2 dpkg-buildpackage: export CPPFLAGS from dpkg-buildflags (origin: vendor): dpkg-buildpackage: export CXXFLAGS from dpkg-buildflags (origin: vendor): -g -O2 dpkg-buildpackage: export FFLAGS from dpkg-buildflags (origin: vendor): -g -O2 dpkg-buildpackage: export LDFLAGS from dpkg-buildflags (origin: vendor): tail: cannot open `debian/changelog' for reading: No such file or directory
はぁ.
% dch --create --package mplayer % dpkg-buildpackage -us -uc dpkg-buildpackage: export CFLAGS from dpkg-buildflags (origin: vendor): -g -O2 dpkg-buildpackage: export CPPFLAGS from dpkg-buildflags (origin: vendor): dpkg-buildpackage: export CXXFLAGS from dpkg-buildflags (origin: vendor): -g -O2 dpkg-buildpackage: export FFLAGS from dpkg-buildflags (origin: vendor): -g -O2 dpkg-buildpackage: export LDFLAGS from dpkg-buildflags (origin: vendor): dpkg-buildpackage: source package mplayer dpkg-buildpackage: source version 20110127 dpkg-buildpackage: source changed by ****** dpkg-buildpackage: host architecture i386 dpkg-source --before-build mplayer-vaapi dpkg-checkbuilddeps: Unmet build dependencies: libmp3lame-dev libx264-dev (>= 2:0.99) libxvidcore-dev dpkg-buildpackage: warning: Build dependencies/conflicts unsatisfied; aborting. dpkg-buildpackage: warning: (Use -d flag to override.)
はいはい.
% dpkg-buildpackage -us -uc -d % sudo dpkg -i ../mplayer_20110127_i386.deb
色々嘘.せっかくパッチを当てたのに, debian の mplayer のルールでビルドしたら VA API は無効化されちゃうので,これでは駄目.
% sudo cp -ra mplayer-vaapi /usr/local/mplayer-vaapi-20110127 % sudo ln -s /usr/local/mplayer-vaapi-20110127/mplayer /usr/local/bin/mplayer
枕詞が些か長すぎるので, ~/.zshrc.bernstein にエイリアスを指定しておく.
alias mplayer='LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/libva1_0.32.0-1+sds2_i386 mplayer -vo vaapi -va vaapi'
これで,
% mplayer FILE
で動画が再生できるようになった.