お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2009-03-15 12:27:52

fueryuejing
メンバ
From: アジア、南会津町。
登録日: 2007-11-03

Intel + XvMC でハードウェア動画再生支援を利用する

手元のXubuntu 8.10 で xorg.conf のチューニングをしようと man intel とやったところ XvMC の文字が。デフォルトでは OFF とのこと。

Option "XvMCSurfaces" "integer"
    This  option  enables XvMC.  The integer parameter specifies the
    number of surfaces to use.  Valid values are 6 and 7.   Default:
    XvMC is disabled.

# 6 と 7 の違いって何だろ?むぅ。

そこで dpkg -L xserver-xorg-video-intel | grep XvMC としたところ、

/usr/lib/libI810XvMC.so.1.0.0
/usr/lib/libIntelXvMC.so.1.0.0
/usr/lib/libI810XvMC.so
/usr/lib/libI810XvMC.so.1
/usr/lib/libIntelXvMC.so
/usr/lib/libIntelXvMC.so.1

どうやら話題の XvMC は intel でも行けるみたいです。不安定だから標準で OFF なのだろうと推測しますが。
※この辺の設定で最悪 X が起動しない事態も考えられますし、妙なバグが入り込むかもわかりません。コマンドラインからの Linux の操作が苦手な方やバグの切り分けに慣れていない方は手を出さないが吉。

以下は僕の xorg.conf の該当設定箇所。何かのヒントになれば :)

Section    "Device"
    Identifier    "Configured Video Device"
    Boardname    "i815"
    Driver        "intel"
    Option        "XvMCSurfaces"    "7"
EndSection

以下おまけ

さっそく手元のi815なマシンと mplayer と H.264 + AAC な mp4 ビデオで実験しました(貧弱なスペックのマシンに何させてんだか)。

なお mplayer のバージョンは 2:1.0~rc2-0ubuntu17+medibuntu1

xv では コマ落ちしまくるビデオ、xvmc では?

The selected video_out device is incompatible with this codec.

がーん!再生されません。AAC+AVC 以外のビデオファイルでも xvmc 使おうとすると同じエラー。

手元では XvMCSurfaces は 6 でも 7 でもダメでした。

Xorg.0.log を覗くと XvMC が読み込まれているらしきログ。以下は抜粋。

(II) Loading extension XVideo-MotionCompensation
(**) intel(0): Option "XvMCSurfaces" "7"
(**) intel(0): 7 XvMC Surfaces Requested.

これといってエラーも吐いていませんでした。

さあ、これは mplayer のバージョンの問題か、ドライバ側の問題か。でも、チップが i815 より新しければ上手くいく気がしないでもありません。


intel ドライバでうまく XvMC の再生支援を得られたら(あるいは得られなくても)、自身のブログやフォーラム(このトピック含めて)に投稿されると、日本語情報を必要としている方の助けになると思います。「intel XvMC」をキーに日本語のページをググってもあまりそれっぽい情報は見当たりませんでしたし。


ところで、以下は LaunchPad の xserver-xorg-video-intel に寄せられたバグレポ。関連情報があるかも。あとは英語フォーラムあたりでしょうか。
https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel




よければ補足やツッコミ、上手く行った場合の設定例等ポスト下さい。ではでは ;)

最後の編集者: fueryuejing (2009-03-16 09:54:06)

オフライン

 

#2 2009-03-15 16:03:22

fueryuejing
メンバ
From: アジア、南会津町。
登録日: 2007-11-03

Re: Intel + XvMC でハードウェア動画再生支援を利用する

セルフツッコミ。少しググったらヒントが。
http://www.penlug.org/twiki/bin/view/Main/LinuxHardwareInfoNvidia5200

要は、

コード:

$ mplayer -vc help | grep XvMC
ffmpeg12mc  ffmpeg    problems  FFmpeg MPEG-1/2 (XvMC)  [mpegvideo_xvmc]

よって

コード:

$ mplayer -vo xvmc -vc ffmpeg12mc hoge.m2t

等。

デコード可能なのが MPEG-1/2 のみならば自作の映像作品の確認やDVDの再生など、用途は限られるかも。ただ最新の mplayer では対応コーデックは増えていたような(←増えてないです。僕の勘違い)。非力なマシンでは MPEG-4系の再生支援はぜひとも欲しいところ。

でもやっぱり再生出来ませんでした。以下は自作のMPEG-2動画を再生させようとしてコケたところ。i815 の限界か……?

[VD_FFMPEG] XVMC-accelerated MPEG-2.
[VD_FFMPEG] Trying pixfmt=0.
VDec: vo config request - 640 x 480 (preferred colorspace: MPEG1/2 Motion Compensation and IDCT)
VDec: using MPEG1/2 Motion Compensation as output csp (no 1)
Movie-Aspect is 1.33:1 - prescaling to correct movie aspect.
VO: [xvmc] 640x480 => 640x480 MPEG1/2 Motion Compensation
vo_xvmc: Port 57 grabed
vo_xvmc: Found matching surface with id=32315659 on 57 port at 0 adapter
/usr/lib/libXvMC.so.1: undefined symbol: XvMCCreateContext
vo_xvmc: XvMCCreateContext failed with error 2
FATAL: Cannot initialize video driver.
[VD_FFMPEG] Trying pixfmt=1.
VDec: vo config request - 640 x 480 (preferred colorspace: MPEG1/2 Motion Compensation)
VDec: using MPEG1/2 Motion Compensation as output csp (no 1)
Movie-Aspect is 1.33:1 - prescaling to correct movie aspect.
VO: [xvmc] 640x480 => 640x480 MPEG1/2 Motion Compensation
vo_xvmc: Port 57 grabed
vo_xvmc: Found matching surface with id=32315659 on 57 port at 0 adapter
vo_xvmc: XvMCCreateContext failed with error 2
FATAL: Cannot initialize video driver.
VDec: vo config request - 640 x 480 (preferred colorspace: MPEG1/2 Motion Compensation and IDCT)
VDec: using MPEG1/2 Motion Compensation as output csp (no 1)
Movie-Aspect is 1.33:1 - prescaling to correct movie aspect.
VO: [xvmc] 640x480 => 640x480 MPEG1/2 Motion Compensation
vo_xvmc: Port 57 grabed
vo_xvmc: Found matching surface with id=32315659 on 57 port at 0 adapter
vo_xvmc: XvMCCreateContext failed with error 2
FATAL: Cannot initialize video driver.
[VD_FFMPEG] Unexpected init_vo error.

vo_xvmc: XvMCCreateContext failed with error 2

を検索キーにして以下を発見。
http://www.nvnews.net/vbulletin/showthread.php?t=73203

/etc/X11/XvMCConfig が怪しい。

コード:

$ cat /etc/X11/XvMCConfig
libXvMC.so.1

コード:

$ locate libXvMC.so.1
/usr/lib/libXvMC.so.1
/usr/lib/libXvMC.so.1.0.0

コード:

$ dpkg -S /usr/lib/libXvMC.so.1.0.0
libxvmc1: /usr/lib/libXvMC.so.1.0.0

コード:

$ dpkg -S /etc/X11/XvMCConfig
libxvmc1: /etc/X11/XvMCConfig

※ でも libxvmc1 付属ドキュメントには /etc/X11/XvMCConfig の書式や機能は書いてなかった。う〜む。で、ググってみてこちらのサイトもヒントに。

上の「nV News Forums」のこのポスト

I found the problem... I didn't know about /etc/X11/XvMCConfig. It seems to contain the library that should be used for XvMC, I changed it from /usr/lib/libXvMC.so.1 to /usr/lib/libXvMCNVIDIA.so.1 (or whatever the nvidia xvmc library is on your system). After that fix, XvMC works correctly with mplayer.

これをヒントに
/etc/X11/XvMCConfig の記述を libI810XvMC.so.1 に書き換えた。

コード:

$ cat /etc/X11/XvMCConfig
libI810XvMC.so.1

そして念のため X を再起動し、もう一度動画を再生。

コード:

$ mplayer -vo xvmc -vc ffmpeg12mc hoge.m2t

すると今度は違うエラー。

[VD_FFMPEG] XVMC-accelerated MPEG-2.
[VD_FFMPEG] Trying pixfmt=0.
VDec: vo config request - 640 x 480 (preferred colorspace: MPEG1/2 Motion Compensation and IDCT)
VDec: using MPEG1/2 Motion Compensation as output csp (no 1)
Movie-Aspect is 1.33:1 - prescaling to correct movie aspect.
VO: [xvmc] 640x480 => 640x480 MPEG1/2 Motion Compensation
vo_xvmc: Port 57 grabed
vo_xvmc: Found matching surface with id=32315659 on 57 port at 0 adapter
Use of XvMC on i810 is currently limited to root
vo_xvmc: XvMCCreateContext failed with error 10
FATAL: Cannot initialize video driver.
[VD_FFMPEG] Trying pixfmt=1.
VDec: vo config request - 640 x 480 (preferred colorspace: MPEG1/2 Motion Compensation)
VDec: using MPEG1/2 Motion Compensation as output csp (no 1)
Movie-Aspect is 1.33:1 - prescaling to correct movie aspect.
VO: [xvmc] 640x480 => 640x480 MPEG1/2 Motion Compensation
vo_xvmc: Port 57 grabed
vo_xvmc: Found matching surface with id=32315659 on 57 port at 0 adapter
Use of XvMC on i810 is currently limited to root
vo_xvmc: XvMCCreateContext failed with error 10
FATAL: Cannot initialize video driver.
VDec: vo config request - 640 x 480 (preferred colorspace: MPEG1/2 Motion Compensation and IDCT)
VDec: using MPEG1/2 Motion Compensation as output csp (no 1)
Movie-Aspect is 1.33:1 - prescaling to correct movie aspect.
VO: [xvmc] 640x480 => 640x480 MPEG1/2 Motion Compensation
vo_xvmc: Port 57 grabed
vo_xvmc: Found matching surface with id=32315659 on 57 port at 0 adapter
Use of XvMC on i810 is currently limited to root
vo_xvmc: XvMCCreateContext failed with error 10
FATAL: Cannot initialize video driver.
[VD_FFMPEG] Unexpected init_vo error.

"Use of XvMC on i810 is currently limited to root"
おお!なんか近付いたっぽい。

で、

コード:

$ sudo mplayer -vo xvmc -vc ffmpeg12mc hoge.m2t

……カーネルが刺さった!? しかたなくPCを強制終了&起動。

今度は /etc/X11/XvMCConfig を libIntelXvMC.so.1 に書き換え。

コード:

$ cat /etc/X11/XvMCConfig
libIntelXvMC.so.1

X を再起動。今度こそ!

コード:

$ mplayer -vo xvmc -vc ffmpeg12mc hoge.m2t

[VD_FFMPEG] XVMC-accelerated MPEG-2.
[VD_FFMPEG] Trying pixfmt=0.
VDec: vo config request - 640 x 480 (preferred colorspace: MPEG1/2 Motion Compensation and IDCT)
VDec: using MPEG1/2 Motion Compensation as output csp (no 1)
Movie-Aspect is 1.33:1 - prescaling to correct movie aspect.
VO: [xvmc] 640x480 => 640x480 MPEG1/2 Motion Compensation
vo_xvmc: Port 57 grabed
vo_xvmc: Found matching surface with id=32315659 on 57 port at 0 adapter
[intel_xvmc] err: DRM Device could not be opened.
vo_xvmc: XvMCCreateContext failed with error 2
FATAL: Cannot initialize video driver.
[VD_FFMPEG] Trying pixfmt=1.
VDec: vo config request - 640 x 480 (preferred colorspace: MPEG1/2 Motion Compensation)
VDec: using MPEG1/2 Motion Compensation as output csp (no 1)
Movie-Aspect is 1.33:1 - prescaling to correct movie aspect.
VO: [xvmc] 640x480 => 640x480 MPEG1/2 Motion Compensation
vo_xvmc: Port 57 grabed
vo_xvmc: Found matching surface with id=32315659 on 57 port at 0 adapter
[intel_xvmc] err: DRM Device could not be opened.
vo_xvmc: XvMCCreateContext failed with error 2
FATAL: Cannot initialize video driver.
VDec: vo config request - 640 x 480 (preferred colorspace: MPEG1/2 Motion Compensation and IDCT)
VDec: using MPEG1/2 Motion Compensation as output csp (no 1)
Movie-Aspect is 1.33:1 - prescaling to correct movie aspect.
VO: [xvmc] 640x480 => 640x480 MPEG1/2 Motion Compensation
vo_xvmc: Port 57 grabed
vo_xvmc: Found matching surface with id=32315659 on 57 port at 0 adapter
[intel_xvmc] err: DRM Device could not be opened.
vo_xvmc: XvMCCreateContext failed with error 2
FATAL: Cannot initialize video driver.
[VD_FFMPEG] Unexpected init_vo error.

およ、振り出しに戻った。

最後の編集者: fueryuejing (2009-03-16 09:33:42)

オフライン

 

#3 2009-03-15 16:06:52

fueryuejing
メンバ
From: アジア、南会津町。
登録日: 2007-11-03

Re: Intel + XvMC でハードウェア動画再生支援を利用する

多分こんな感じ?
1
/etc/X11/xorg.conf を例えば以下のように編集

Section    "Device"
    Identifier    "Configured Video Device"
    Boardname    "i815"
    Driver        "intel"
    Option        "XvMCSurfaces"    "7"
EndSection

2
i810系の場合:
/etc/X11/XvMCConfig の内容を以下で書き換え

libI810XvMC.so.1

intel系の場合:
/etc/X11/XvMCConfig の内容を以下で書き換え

libIntelXvMC.so.1

自分の PC では X がカーネルごと刺さりました。
Xubuntu 8.10 + i815 → ×

ん?もしかしてこの修正仕込んだら刺さらなくなったりして。
https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/304614
出典

あとで試そっと。→やっぱだめでした orz ……メモリの割り当てが上手くいってないのかな。商品情報ではVRAMにMAXで11MBの割り当てなのに/proc/mtrr覗くと64MB割り当てられているっぽいし。

# コアラではi810絡みの諸々直ってると嬉しいな :)

最後の編集者: fueryuejing (2009-03-16 09:22:11)

オフライン

 

#4 2009-03-15 16:27:11

fueryuejing
メンバ
From: アジア、南会津町。
登録日: 2007-11-03

Re: Intel + XvMC でハードウェア動画再生支援を利用する

迂闊でした。man intel で現れるページの下の方にこんなのが。

Option "XvMC" "boolean"
              Enable  XvMC driver. Current support MPEG2 MC on 915/945 and G33
              series.  User should provide absolute path to libIntelXvMC.so in
              XvMCConfig file.  Default: Disabled.

/etc/X11/XvMCConfig についての説明がありましたね。
"absolute path to libIntelXvMC.so"(libIntelXvMC.soへの絶対パスって意味かな?)とあるから /etc/X11/XvMCConfig には /usr/lib/libIntelXvMC.so などと書いた方が良いんだろうか。

ついでに、少し古い(Status が Fix Released だし)ですが、検索していてみつけたバグレポ。……なぜか気になったので。
https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/103816

それはそうと、

Option "XvMCSurfaces" "integer"
              This  option  enables XvMC.  The integer parameter specifies the
              number of surfaces to use.  Valid values are 6 and 7.   Default:
              XvMC is disabled.

とあるので "XvMCSurfaces" を 6 か 7 に指定すれば "XvMC" の ON/OFF は記述不要かな?

ややこしいですね :P


ところで、英語フォーラムを intel XvMC で検索すると結構関連する情報がありました。また、英語版 Wikipedia の X-Video Motion Compensation のページには XvMC が使えるハードについての情報が比較的まとまって存在しているようです。
http://en.wikipedia.org/wiki/X-Video_Motion_Compensation
日本語メーリスにも役立ちそうな情報が
https://lists.ubuntu.com/archives/ubuntu-jp/2008-December/001385.html
↑このポストとそれに続くやりとりの中に AMD(ATI) nVidia での話なども。有益な情報へのリンクも多数。

# ベンダー毎の XvMC 有効化設定についてまとめるだけで一本記事が出来そうですね、こりゃ :P


おまけのおまけ:XvMCにかわる規格

Video Acceleration API (VA API)
http://en.wikipedia.org/wiki/VaAPI (←出典)
http://www.freedesktop.org/wiki/Software/vaapi
https://wiki.ubuntu.com/mobile-hw-decode


VA API で利用可能なコーデック:
MPEG-2
MPEG-4 ASP/H.263
MPEG-4 AVC/H.264
VC-1/WMV3
# theora や dirac は使えるんだろか?やっぱフリーって素敵だし……


VA API に利用可能なハード:
Intel Poulsbo チップセット
S3 Chrome 400 及び 500 シリーズ
AMD(ATI) ←バックエンドにXvBAを利用することで可能
nVidia ←バックエンドにVDPAUを利用することで可能
# 出典を斜め読みすると Intel のチップでは Poulsbo 以外では VA API は使えないとありました。くそう!

※XvBA
http://en.wikipedia.org/wiki/X-Video_Bitstream_Acceleration

※VDPAU
http://en.wikipedia.org/wiki/VDPAU


VA API に対応するアプリ:
FFmpeg
Helix media player
MPlayer

※参考
http://www.phoronix.com/scan.php?page=article&item=xorg_vaapi_mplayer&num=1

最後の編集者: fueryuejing (2009-03-16 13:42:38)

オフライン

 

Board footer

Powered by FluxBB