Ubuntu Weekly Recipe

第123回ATI/AMDでも動画再生支援機能を使用する

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 ハードウェア・ドライバが有効になっている様子
図1 ハードウェア・ドライバが有効になっている様子

libvaのビルドとインストール

http://www.splitted-desktop.com/~gbeauchesne/libva/で配布されているソースを使用します。執筆段階の最新版はlibva_0.31.0-1+sds13で、pkgs以下でバイナリパッケージも配布されていますが、ここではより汎用的なlibva-latest.tar.gzをビルドする方法で説明します。

  1. パッケージ作成に必要なパッケージをインストールする

    $ sudo apt-get install devscripts
  2. 依存しているパッケージをインストールする

    $ sudo apt-get install cdbs debhelper autotools-dev libdrm-dev x11proto-xext-dev libxext-dev libxfixes-dev libgl1-mesa-dev automake1.9 libtool
  3. ダウンロードしたソースを解凍する

    $ tar xfv libva-latest.tar.gz
  4. ビルドを開始する

    $ cd libva-0.31.0 # 注: ここは変わる可能性がある
    $ dpkg-buildpackage -rfakeroot -uc -b
  5. ビルドが完了したら、インストールする

    $ 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をダウンロードします。

ビルド方法は、以下のとおりです。

  1. ダウンロードしたアーカイブを解凍する

    $ tar xf mplayer-vaapi-latest-FULL.tar.bz2
  2. 依存しているパッケージをインストールする

    $ sudo apt-get build-dep mplayer
  3. ビルドする

    $ 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%前後の負荷
図2 VAAIPを使うと10%前後の負荷
図3 ほぼ同じシーンで30%の負荷がかかっている
図3 ほぼ同じシーンで30%の負荷がかかっている

もちろんこれは差が出やすい、とあるシーンでの計測であって、全部のシーンでこのように顕著な差が出るわけではありません。とはいえ、多くの場合で負荷の軽減は実感できると思います。

VAAPIの可能性

一式を自力でビルドしないといけないとか、まだまだ使いやすいとはいえません。このへんは、VAAPIの普及に伴って解決していくのでしょう。

また、freedesktop.orgにあるVAAPIのページを見ると、前からあるAdobe Flashのオープンな実装であるgnashや、今回取り上げたMPlayerのほかにも、VLCやGStreamer(Totemで使用している)でも使えるようになっています。Ubuntuでも標準で使えるようになればいいですね。

おすすめ記事

記事・ニュース一覧