NVIDIA製GPUでMPEG1/2ビデオの再生を軽くする(MPlayer)
mplayer-1.0_rc1_p20070824から、VIDEO_CARDSに「nvidia」が指定できるようになり、「xv」「xvmc」のUSEフラグとともに指定する*1ことで、XvMC(X-Video Motion Compensation)により、GPUをMPEG-1もしくはMPEG-2のビデオのデコードに使用できるようになり、MPEG1/2ビデオの再生が軽くなる。
[引用]ファイル名: /usr/portage/media-video/mplayer/mplayer-1.0_rc1_p20070824.ebuild より
if use xv; then if use xvmc; then myconf="${myconf} --enable-xvmc" if use video_cards_nvidia; then myconf="${myconf} --with-xvmclib=XvMCNVIDIA" elif use video_cards_i810; then myconf="${myconf} --with-xvmclib=I810XvMC" else myconf="${myconf} --with-xvmclib=XvMCW" fi else myconf="${myconf} --disable-xvmc" fi else myconf="${myconf} --disable-xv --disable-xvmc" fi
とあるので、ebuildファイルとしては、「xv」と「xvmc」のUSEフラグとVIDEO_CARDS=nvidiaがあれば有効にしてくれるようになっている。しかし、出力ドライバには表示されず、
$ mplayer -vo help (中略) 有効な映像出力ドライバ: xv X11/Xv x11 X11 ( XImage/Shm ) xover General X11 driver for overlay capable video output drivers gl X11 (OpenGL) gl2 X11 (OpenGL) - multiple textures version dga DGA ( Direct Graphic Access V2.0 ) null Null video output mpegpes Mpeg-PES file yuv4mpeg yuv4mpeg output for mjpegtools png PNG file
lddしても、ライブラリ(libXvMCNVIDIA.so)にはリンクしていなかった。
適当なディレクトリにソースを展開してconfigureしてみても
Checking for XvMC ... no
となってしまった(ビルドログを見てもnoになっていた)。configure.log(config.logではない)を見ると
x86_64-pc-linux-gnu-gcc -Wall -Wno-switch -Wpointer-arith -Wredundant-decls -O4 -march=k8 -mtune=k8 -pipe -ffast-math -fomit-frame-pointer -I/usr/X11R6/include -lncurses -lXext -lX11 -lpthread -lXv -o /tmp/mplayer-conf-16963-8577 /tmp/mplayer-conf-26951-8577.c -lXvMC -lXvMCNVIDIA /tmp/mplayer-conf-26951-8577.c:3:36: error: X11/extensions/XvMClib.h: No such file or directory /tmp/mplayer-conf-26951-8577.c: In function 'main': /tmp/mplayer-conf-26951-8577.c:5: warning: implicit declaration of function 'XvMCQueryExtension' /tmp/mplayer-conf-26951-8577.c:6: warning: implicit declaration of function 'XvMCCreateContext'
XvMC関係のライブラリのヘッダファイルが無いとのこと。.soファイルは入っているのに、ヘッダだけ用意されていないのだろうかと思い、調べたのだが、NVIDIAドライバのパッケージにはないようだ。あるのはOpenGL関係のヘッダファイルだけ。
$ qlist nvidia-drivers | grep include /usr/lib64/opengl/nvidia/include/glxext.h /usr/lib64/opengl/nvidia/include/glx.h /usr/lib64/opengl/nvidia/include/glext.h /usr/lib64/opengl/nvidia/include/gl.h /usr/lib32/opengl/nvidia/include/glxext.h /usr/lib32/opengl/nvidia/include/glx.h /usr/lib32/opengl/nvidia/include/glext.h /usr/lib32/opengl/nvidia/include/gl.h
念のため、配布されている.runファイルを-xで直接開けてみたが、やはりGLのものしかなかった。
システムには、まだ「libXvMC」のパッケージが入っていなかったため、これを入れてみたところ
$ sudo emerge -av libXvMC
無事に検出されて
Checking for XvMC ... yes (using XvMCNVIDIA)
使用できるようになった。
有効な映像出力ドライバ: xv X11/Xv x11 X11 ( XImage/Shm ) xover General X11 driver for overlay capable video output drivers gl X11 (OpenGL) gl2 X11 (OpenGL) - multiple textures version dga DGA ( Direct Graphic Access V2.0 ) null Null video output xvmc XVideo Motion Compensation mpegpes Mpeg-PES file yuv4mpeg yuv4mpeg output for mjpegtools png PNG file
使用するには
$ mplayer -vo xvmc -vc ffmpeg12mc [MPEG1/2のファイル]
とする。
-vo xvと比べて軽くなっているのが実感できた。しかし、MPEG1/2限定なのがつらいところ。また、Compiz Fusionを使用しているときに、ちらつきが起きたりゴミが出たりするのも気になった。ウィンドウマネージャを事前に別のものに切り替えて回避するのが現実的?
http://nouveau.freedesktop.org/wiki/XvMC
には、GPUの支援によるビデオデコードに関するその他の方式についても、概要が書かれているので、参考になるかもしれない。
環境の関連項目
*1:XvMCは、Xv(X video extension)の拡張