試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

CompizのVideo PlaybackプラグインとMPlayer

(2014/9/26)このプラグインはその後のバージョンで無くなっている。

  1. 効果
  2. MPlayerへのパッチ
  3. ebuildの修正
    1. 1.0_rc1_p20070824
    2. 1.0_rc2_p24929(libXvMCNVIDIAを使用できるようにするための修正を含む)

効果

どのような効果があるのかよく分からなかったが、以下のURLが参考になる。プレーヤー側にはパッチ当てが必要らしい。
[引用]http://web.archive.org/web/20081225114153/http://forum.compiz-fusion.org/showthread.php?t=3424 より

With that patch, mplayer will offer fully composited video (transforming with all of compiz's effects) even with the OSS radeon and intel drivers.

ということらしいのだが

you can resize videos so they're extremely small (even few pixels) and then zoom and watch it at full resolution!

などの効果もあり、これは実験により確かめることができた。

上の画像はEnhanced Zoom Desktopプラグインで拡大したところ。ウィンドウ装飾・タイトルやアイコンはドットが見えるレベルだが、プレーヤーウィンドウの中は粗くない。

videos can now be smoothly resized, there are no glitches, no artifacts

これに関しては、「ウィンドウのサイズ変更」で「Default Resize Mode」を「通常」にしている場合にリサイズ時のちらつきが無くなっていることがはっきりと分かった。

MPlayerへのパッチ

http://lists.freedesktop.org/archives/compiz/2007-July/002494.html
からパッチ(attachment-0001.bin)をダウンロードして、MPlayerのソースツリーに当てる。

$ tar jxf [MPlayerのソースの場所]
$ cd [MPlayerのソースディレクトリ]
$ patch -p0 < [ttachment-0001.binの場所]

20070824版ではパッチは正常に適用されたが、1.0_rc2に関しては

patching file libvo/vo_xv.c
Hunk #1 succeeded at 93 with fuzz 1 (offset 1 line).
Hunk #2 succeeded at 906 (offset -60 lines).
Hunk #3 succeeded at 1003 (offset -60 lines).
Hunk #4 succeeded at 1033 (offset -79 lines).
Hunk #5 succeeded at 1041 (offset -79 lines).
Hunk #6 succeeded at 1079 (offset -79 lines).
Hunk #7 succeeded at 1121 (offset -79 lines).
Hunk #8 succeeded at 1153 (offset -79 lines).
Hunk #9 FAILED at 1375.
Hunk #10 succeeded at 1406 (offset -77 lines).
1 out of 10 hunks FAILED -- saving rejects to file libvo/vo_xv.c.rej

となり、一ヶ所だけうまくいかなかった。
[引用]ファイル名: MPlayer-1.0rc2/libvo/vo_xv.c

    if ( !vo_xv_init_colorkey() )
    {
      return -1; // bail out, colorkey setup failed
    }
    vo_xv_enable_vsync();
    vo_xv_get_max_img_dim( &max_width, &max_height );

    fo = XvListImageFormats(mDisplay, xv_port, (int *) &formats);

    mp_input_add_event_fd(ConnectionNumber(mDisplay), check_events);
    return 0;
}

static int control(uint32_t request, void *data, ...)
{

mp_input_add_event_fd()関数が追加されているのが原因。
http://lists.freedesktop.org/archives/compiz/2007-October/002807.html
を参考にすると、vo_compiz_init()関数はrerurn行のすぐ手前に入れる形で良さそう。

    fo = XvListImageFormats(mDisplay, xv_port, (int *) &formats);

    mp_input_add_event_fd(ConnectionNumber(mDisplay), check_events);

    vo_compiz_init ();

    return 0;
}

このようにすればOKのようだ。
最終的なパッチとしては、以下のようになる。
[base64][任意]ファイル名: mplayer-1.0_rc2-xv-compiz-video.patch.bz2.b64

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
8XckU4UJDS4oa4A=

(2008/9/10)RC2では
http://svnweb.mageia.org/packages/obsolete/mplayer-vaapi/pristine/SOURCES/mplayer-1.0rc2-compiz.patch?view=log
のパッチを使用すればそのまま使える。
(2014/9/26)URLを修正

ebuildの修正

(2008/9/10)ここで扱っているバージョンは古いため、「MPlayerのebuild(XvMCライブラリとCompizのVideo Playback対応)についてのその後(2008/9/10現在)」を参照。


Gentoo Linuxでは、以下のebuildの修正により、「USE="xv compiz"」でビルドすることで上記作業を自動で行える。

1.0_rc1_p20070824

--- /usr/portage/media-video/mplayer/mplayer-1.0_rc1_p20070824.ebuild.orig
+++ /usr/portage/media-video/mplayer/mplayer-1.0_rc1_p20070824.ebuild
@@ -9,7 +9,7 @@
 cddb cdio cdparanoia cpudetection custom-cflags dga doc dts dvb directfb dvd
 dv enca encode esd fbcon ftp gif ggi gtk iconv ipv6 ivtv jack joystick
 jpeg libcaca lirc live livecd lzo mad md5sum mmx mmxext mp2 mp3 musepack nas pvr unicode vorbis opengl openal oss png pnm quicktime radio rar real rtc samba sdl
-speex srt sse sse2 ssse3 svga teletext tga theora tivo truetype v4l v4l2 vidix win32codecs X x264 xanim xinerama xv xvid xvmc zoran"
+speex srt sse sse2 ssse3 svga teletext tga theora tivo truetype v4l v4l2 vidix win32codecs X x264 xanim xinerama xv xvid xvmc zoran compiz"
 
 VIDEO_CARDS="i810 nvidia s3virge mga tdfx vesa"
 
@@ -30,6 +30,7 @@
 			  mirror://mplayer/releases/fonts/font-arial-iso-8859-2.tar.bz2
 			  mirror://mplayer/releases/fonts/font-arial-cp1250.tar.bz2 )
 	gtk? ( mirror://mplayer/Skin/Blue-${BLUV}.tar.bz2 )
+	xv? ( compiz? ( http://lists.freedesktop.org/archives/compiz/attachments/20070711/37e301ac/attachment-0001.bin ) )
 	svga? ( http://mplayerhq.hu/~alex/svgalib_helper-${SVGV}-mplayer.tar.bz2 )"
 
 DESCRIPTION="Media Player for Linux"
@@ -103,6 +104,7 @@
 	xv? ( x11-libs/libXv
 		x11-libs/libXxf86vm
 		x11-libs/libXext
+		compiz? ( >=x11-wm/compiz-0.6.0 )
 		xvmc? ( x11-libs/libXvMC ) )
 	xvid? ( media-libs/xvid )
 	X? ( x11-libs/libXxf86vm
@@ -194,6 +196,10 @@
 	# Fix XShape detection
 	epatch ${FILESDIR}/${PN}-xshape.patch
 	epatch ${FILESDIR}/${PN}-dpms.patch
+
+	if use xv && use compiz; then
+		epatch ${DISTDIR}/attachment-0001.bin
+	fi
 }
 
 src_compile() {

1.0_rc2_p24929(libXvMCNVIDIAを使用できるようにするための修正を含む)

--- /usr/portage/media-video/mplayer/mplayer-1.0_rc2_p24929.ebuild.orig
+++ /usr/portage/media-video/mplayer/mplayer-1.0_rc2_p24929.ebuild
@@ -9,9 +9,9 @@
 cddb cdio cdparanoia cpudetection custom-cflags debug dga doc dts dvb directfb
 dvd dv enca encode esd fbcon ftp gif ggi gtk iconv ipv6 ivtv jack joystick jpeg
 kernel_linux ladspa libcaca lirc live livecd lzo mad md5sum mmx mmxext mp2 mp3
-musepack nas nemesi pvr unicode vorbis opengl openal oss png pnm pulseaudio quicktime radio rar real rtc samba sdl speex srt sse sse2 ssse3 svga teletext tga theora tivo truetype v4l v4l2 vidix win32codecs X x264 xanim xinerama xv xvid xvmc zoran"
+musepack nas nemesi pvr unicode vorbis opengl openal oss png pnm pulseaudio quicktime radio rar real rtc samba sdl speex srt sse sse2 ssse3 svga teletext tga theora tivo truetype v4l v4l2 vidix win32codecs X x264 xanim xinerama xv xvid xvmc zoran compiz"
 
-VIDEO_CARDS="s3virge mga tdfx vesa"
+VIDEO_CARDS="i810 nvidia s3virge mga tdfx vesa"
 
 for x in ${VIDEO_CARDS}; do
 	IUSE="${IUSE} video_cards_${x}"
@@ -28,6 +28,7 @@
 			  mirror://mplayer/releases/fonts/font-arial-iso-8859-2.tar.bz2
 			  mirror://mplayer/releases/fonts/font-arial-cp1250.tar.bz2 )
 	gtk? ( mirror://mplayer/Skin/Blue-${BLUV}.tar.bz2 )
+	xv? ( compiz? ( http://lists.freedesktop.org/archives/compiz/attachments/20070711/37e301ac/attachment-0001.bin ) )
 	svga? ( http://mplayerhq.hu/~alex/svgalib_helper-${SVGV}-mplayer.tar.bz2 )"
 
 DESCRIPTION="Media Player for Linux"
@@ -103,6 +104,7 @@
 	xv? ( x11-libs/libXv
 		x11-libs/libXxf86vm
 		x11-libs/libXext
+		compiz? ( >=x11-wm/compiz-0.6.0 )
 		xvmc? ( x11-libs/libXvMC ) )
 	xvid? ( media-libs/xvid )
 	X? ( x11-libs/libXxf86vm
@@ -177,6 +179,24 @@
 		mv "${WORKDIR}/svgalib_helper" "${S}/libdha"
 	fi
 
+	if use xv && use compiz; then
+		head -n 612 ${DISTDIR}/attachment-0001.bin > mplayer-xv-compiz.patch
+		cat <<EOF >> mplayer-xv-compiz.patch
+@@ -836,6 +1377,9 @@
+     fo = XvListImageFormats(mDisplay, xv_port, (int *) &formats);
+
+     mp_input_add_event_fd(ConnectionNumber(mDisplay), check_events);
++
++    vo_compiz_init ();
++
+     return 0;
+ }
+
+EOF
+		tail -n 14 ${DISTDIR}/attachment-0001.bin >> mplayer-xv-compiz.patch
+		epatch mplayer-xv-compiz.patch
+	fi
+
 }
 
 src_compile() {
@@ -322,7 +342,14 @@
 
 	if use xv; then
 		if use xvmc; then
-			myconf="${myconf} --enable-xvmc --with-xvmclib=XvMCW"
+			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

関連URL: