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

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

StepMania4(Subversion版)のビルドと動画背景サポートについて(2009/1/29現在)

Mandriva Linux 2009.0のStepManiaのパッケージで動画背景が動作しない件について」ではバージョン3.9で動画背景を動作させるためにGentooのパッチを適用してみたが、真っ黒なままになってしまっていた。そこで2009年1月現在で開発中(正式版未リリース)のバージョン4ではどうなっているかを試してみた。

  1. 必要なライブラリ
  2. コードの取得とビルド
  3. FFmpegサポートについて
  4. 結果
  5. ビルド自動化スクリプトを使用してみると...
  6. バージョン4の挙動について

必要なライブラリ

必要なライブラリ(開発パッケージ)はバージョン3.9のときと基本的に同じ。

といったところは少なくとも必要のようだ。

コードの取得とビルド

コード取得からビルドの流れとしては一般的な形となる。下は作業例。

$ svn co https://svn.stepmania.com/svn/trunk/stepmania/
$ cd stepmania/
(ここで別途パッチがあれば当てる)
$ ./autogen.sh
$ ./configure
$ make

ここまでを行って正常にビルドが完了するとsrcディレクトリに実行ファイルstepmaniaが生成される。

FFmpegサポートについて

Mandriva Linux 2009.0に含まれるFFmpegライブラリでは検出に失敗して動画再生が無効になってしまっていた。
パッチを探したところ
http://web.archive.org/web/20080514063203/http://www.nabble.com/-PATCH--Support-for-modern-ffmpeg-versions-td14630180.html
が見つかったが、そのままでは当たらず、別途微調整の必要な部分があった。それでも対象箇所の前後を見て一通り手動で反映できた。
その作業後に取り直した差分をLZMA圧縮してBase64エンコードしたものを下に貼り付ける。
[base64][引用][任意]ファイル名: stepmania4-r27866-ffmpeg-failed.patch.lzma.b64

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
YJ5Hn2B8stuvI6E=

下は適用作業例。

$ base64 -d [上のファイル] | lzcat > stepmania4-r27866-ffmpeg-failed.patch
$ patch -p1 < stepmania4-r27866-ffmpeg-failed.patch
patching file autoconf/m4/video.m4
patching file src/arch/ArchHooks/ArchHooks_Unix.cpp
patching file src/arch/MovieTexture/MovieTexture_FFMpeg.cpp
patching file src/arch/MovieTexture/MovieTexture_Theora.cpp

これをautogen.shの前に適用するか、適用後autoreconfを実行してからconfigureスクリプトからの作業を進めることで

(中略)
checking for ov_open in -lvorbisfile... yes
checking for mad_synth_init in -lmad... yes
checking for library containing av_free... -lavutil
checking for library containing avcodec_init... -lavcodec
checking for library containing guess_format... -lavformat
checking for library containing sws_scale... -lswscale
checking for matching libavcodec headers and libs... yes
checking for ogg_stream_init in -logg... (cached) yes
checking for theora_decode_init in -ltheora... yes
checking for TLS... yes
(以下略)

FFmpegのライブラリ群が検出され、動画再生機能を有効にしてビルドが行われる。

結果

このパッチでは不十分なのか、今回も背景が真っ黒となってしまった。

端末には

[avi @ 0x7f0a2c55bac0]Could not find codec parameters (Video: mpeg4, 640x480 [PAR 1:1 DAR 4:3])

のようなメッセージが出てきてデコードが正常にできていないように見えるが、対処方法は不明。
なお、ソースツリーにはWindows向けの静的リンクライブラリ(.libファイル)*1があるのを見つけたが、これはsrc/ffmpeg/000 StepMania README.txtによるとr8448らしい(結構古い)。パッチを当てる代わりにこのバージョンを取得すれば動くようになるのかもしれない。

ビルド自動化スクリプトを使用してみると...

そんな中でソースツリー内にUtils/build.shというスクリプトを見つけた。これはStepMania4のソースツリーに合ったバージョンのFFmpegライブラリ(r8448+独自パッチ)を自動でダウンロード・ビルドしてStepMania4のビルド時に組み込む(静的リンクする)もの。

$ svn co https://svn.stepmania.com/svn/trunk/stepmania/
$ cd stepmania/
$ ./autogen.sh
$ ./Utils/build.sh
Downloading ffmpeg...okay.
okay.
Downloading ffmpeg patch...okay.
Patching ffmpeg...okay.
Configuring ffmpeg...okay.
Building ffmpeg...okay.
Configuring StepMania...okay.
Building StepMania...okay.
Copying StepMania binaries...okay.

この場合最上位ディレクトリに実行ファイルstepmaniaが生成される。
これを実行してみたところ、Xvid入りの.aviファイルでは動画背景が動くようになった。

しかし、wmv2のものは真っ黒だった。これはXvidなどの別コーデックにエンコードすればよさそう。

バージョン4の挙動について

まだ一部動作におかしい部分がある。TSUHSUIXAMUSHなど、挙動がバージョン3.9と異なるものもある。
また、端末には

WARNING: Error playing command: /Themes/default/BGAnimations/ScreenEvaluationStage decorations/default.lua:56: attempt to index field '?' (a nil value)
WARNING: /Themes/default/BGAnimations/ScreenEvaluationStage decorations/default.lua:56: unknown(self = (null),pss = (null),index = -1,pSongOrCourse = (null),pSteps = (null),hsl = (null),(*temporary) = (null),(*temporary) = (null),(*temporary) = (null),(*temporary) = 0,(*temporary) = 0,(*temporary) = (null),(*temporary) = (null),(*temporary) = (null),(*temporary) = attempt to index field '?' (a nil value))

のようなメッセージが出ることもある。

使用したバージョン:

  • StepMania4 r27866
  • lib64ffmpeg-devel 0.4.9-3.pre1.14161.1.1mdv2009.0

*1:一方、GNU/Linux上の静的リンクライブラリの拡張子は「.a」となる