ATI/AMDのビデオカードでも使えます
通常、動画の再生はCPUだけで行われます[1] 。しかし、H.264のようにデコード[2] にかなり負荷がかかる形式でエンコードされている場合、GPU(ビデオカード)に内蔵されている動画再生支援機能を使うことができれば、CPUの負荷が下がったり、あまり高速ではないCPUでも快適に再生できるようになります。
Ubuntuで動画再生支援機能というと、NVIDIAのVDPAUが有名です。確かに普及していて、SMPlayerからでも簡単に使えたりします 。
ではATI/AMDのRADEON HDでは使えないかというと、そんなことはありません。Intelが開発したVAAPI は、バックエンドが対応すれば多くのハードウェアで使用できるようになっており、ATI/AMDではXvBAというバックエンド(と、プロプライエタリなドライバ)を使用して動画再生支援機能を利用できます。
Intelでも同様に動画再生支援機能が使えるのかですが、筆者は対応しているハードウェアを所持していないので動作検証ができません。ただ、後で出てくるlibvaのソースを見てみたところ、パッケージレベルでIntelのハードウェアでは動画再生支援機能が使えないようになっているので、これから説明する方法では動作しません。なぜ使えないようになっているのかはわかりませんでした。理由がないのであれば、あっさり動作するのかもしれません。
今回はUbuntu 10.04で検証しましたが、9.10でも同様に動作するはずです。
前提条件
ATI/AMD製のビデオカード/チップセット内蔵グラフィックスで、動画再生支援機能のUVD2をサポートしている必要があります。今回はRadeon HD 4350を搭載した玄人志向のRH4350-LE256HD/HS を使用しました。Amazonだと3,000円以下で購入できるので、結構オススメです。ファンレスなのはいいのですが、ヒートシンクが大きくて横のスロットまで占有しますので、拡張スロットが少ないPCをお使いの方は気をつけください。ほかにも、Radeon HD 4000シリーズや5000シリーズでも対応しています。
チップセットは785Gで対応していますが。780Gでも対応しているようです。http://www.splitted-desktop.com/~gbeauchesne/xvba-video/ の下にある"Supported Hardware"には780Gがあります。ただし、WikipediaのUVDの項目 を読むと780GはUVD2を完全にサポートしていない、とのことなので、どの程度動作するかは不明です。
あとは、[システム]-[システム管理]-[ハードウェア・ドライバ]で[ATI/AMD プロプライエタリ FGLRX グラフィックスドライバ]をインストールしてある必要があります。
図1 ハードウェア・ドライバが有効になっている様子
libvaのビルドとインストール
http://www.splitted-desktop.com/~gbeauchesne/libva/ で配布されているソースを使用します。執筆段階の最新版はlibva_0.31.0-1+sds13で、pkgs以下でバイナリパッケージも配布されていますが、ここではより汎用的なlibva-latest.tar.gz をビルドする方法で説明します。
パッケージ作成に必要なパッケージをインストールする
$ sudo apt-get install devscripts
依存しているパッケージをインストールする
$ sudo apt-get install cdbs debhelper autotools-dev libdrm-dev x11proto-xext-dev libxext-dev libxfixes-dev libgl1-mesa-dev automake1.9 libtool
ダウンロードしたソースを解凍する
$ tar xfv libva-latest.tar.gz
ビルドを開始する
$ cd libva-0.31.0
$ dpkg-buildpackage -rfakeroot -uc -b
ビルドが完了したら、インストールする
$ cd ../
$ sudo dpkg -i libva_0.31.0-1+sds13_i386.deb libva-dev_0.31.0-1+sds13_i386.deb
xvba-videoをインストールする
xvba-videoはソースが配布されておらず、バイナリパッケージをインストールするしかありません。
http://www.splitted-desktop.com/~gbeauchesne/xvba-video/ にもやはりlatestがありますが、バージョン管理の関係上最新のバージョンを振ってあるものをインストールするのがいいでしょう。執筆段階での最新版は xvba-video_0.6.11-1です。
MPlayerをビルドする
環境を整えても、使えるアプリケーションがないと宝の持ち腐れです。今回はわりと簡単に用意できるMPlayerを使用します。
http://www.splitted-desktop.com/~gbeauchesne/mplayer-vaapi/ で配布されているので、これを利用しましょう。今回はmplayer-vaapi-latest-FULL.tar.bz2 をダウンロードします。
ビルド方法は、以下のとおりです。
ダウンロードしたアーカイブを解凍する
$ tar xf mplayer-vaapi-latest-FULL.tar.bz2
依存しているパッケージをインストールする
$ sudo apt-get build-dep mplayer
ビルドする
$ cd mplayer-vaapi-20100414
$ ./checkout-patch-build.sh
実際に動作させてみる
MPlayerはパッケージ化されるわけではないので、ファイルを直接実行する必要があります。今回もサンプルはBig Buck Bunny (H.264エンコードの1920x1080)を使用しました。
再生は、ビルドしたフォルダの下にあるmplayer-vaapiフォルダに移動し、以下のコマンドで行います。これは再生するファイルをホームフォルダに置いた例です。
$ ./mplayer -vo vaapi -va vaapi -ao pulse ~/big_buck_bunny_1080p_h254.mov
実際にどのぐらい負荷が変わるかですが、Intel Core 2 Duo E8400を搭載したPCで、このフルHDのBig Buck BunnyをVLC(VAAPIなし)で実行すると、あるシーンでCPUの両コアが30%弱ぐらい負荷がかかりますが、VAAPIを有効にすると10%前後で、きわめて有効であることがわかります。
図2 VAAIPを使うと10%前後の負荷
図3 ほぼ同じシーンで30%の負荷がかかっている
もちろんこれは差が出やすい、とあるシーンでの計測であって、全部のシーンでこのように顕著な差が出るわけではありません。とはいえ、多くの場合で負荷の軽減は実感できると思います。
VAAPIの可能性
一式を自力でビルドしないといけないとか、まだまだ使いやすいとはいえません。このへんは、VAAPIの普及に伴って解決していくのでしょう。
また、freedesktop.orgにあるVAAPIのページ を見ると、前からあるAdobe Flashのオープンな実装であるgnashや、今回取り上げたMPlayerのほかにも、VLCやGStreamer(Totemで使用している)でも使えるようになっています。Ubuntuでも標準で使えるようになればいいですね。