mplayer-w100

久しぶりの更新です。公開当初はまったく反応無かったのに、何故か最近は話題にのぼることが多いですね。また、メールで貴重な情報を頂いたので、それならばと更新してみました。

変更点ですが、まず QVGA モードで実行しても画面に縞状のノイズが入らないようにしました。オーバレイ表示領域を左に 2 ドットずらすことによりノイズが解消されたのですが、副作用としてムービーの左 2x320 ドットが見えなるのと、画面上 320x2 ドットにノイズが出ます。とはいえ画面全体のノイズよりはマシでしょう。

以上の方法は宮本さんから教えて頂きました。どうもありがとうございます。

また、ダブルバッファリングにも対応しました。僅かな速度向上とティアリング解消、OSD*1のちらつき解消です。

mplayer を終了したあと画面がおかしくなった場合は、適当なソフトで VGAQVGA を切り替えれば直ると思います。それでも直らないという方がおられるようですが、僕は一度も経験したことがないのでなんとも言えません。

# これ書きながら作業してたら力尽きたので、明日 ipk にしてアップします。

*1:オンスクリーンディスプレイ

mplayer の最適な設定

ベンチマークに用いたムービーはこちら(http://www2.odn.ne.jp/~ccs50140/beyond_cloud/index.html)の cloud_l.mpg を TMpegEnc で VideoCD 規格にエンコードし直したもので、CF に置きました*1ベンチマークは -benchmark を用いて行ないます。

まず、オプションについて。-quiet はターミナルへの無駄な出力を抑えて負荷を軽くするために、-framedrop は映像と音の同期を取るためにどんな場合でも必須だと思います。

mplayer -quiet -framedrop -vo fbdev cloud_l.mpg
BENCHMARKn: disp: 3919 (20.14 fps)  drop: 1930 (32%)  total: 5849 (30.06 fps)

最初は W100 を使わずに再生してみました。

mplayer -quiet -framedrop -vo fbdev:vidix cloud_l.mpg
BENCHMARKn: disp: 5184 (26.66 fps)  drop: 665 (11%)  total: 5849 (30.08 fps)

次に W100 を使っての再生です。さきほどの結果に比べて 1.23 倍速くなっています。これからはこの結果を基準に比較していきます。

mplayer -quiet -framedrop -vo fbdev:vidix -dr cloud_l.mpg
BENCHMARKn: disp: 5246 (26.99 fps)  drop: 603 (10%)  total: 5849 (30.09 fps)

-dr は中間バッファを用いないで直接フレームバッファに画像を描画するオプションです。1.2% の速度向上が見られます。僅かな差ですが、使って損するものでもないです。

mplayer -quiet -framedrop -vo fbdev:vidix -double cloud_l.mpg
BENCHMARKn: disp: 5357 (27.55 fps)  drop: 492 (8%)  total: 5849 (30.08 fps)

-double を指定するとダブルバッファリングを行なうようになります*2。2.1% 高速になっています。

mplayer -quiet -framedrop -vo fbdev:vidix -vop rotate=1 cloud_l.mpg
BENCHMARKn: disp: 4313 (22.18 fps)  drop: 1536 (26%)  total: 5849 (30.08 fps)

前回までの設定だけでは画像が左に 90 度回転した状態になっており、実用にはなりません。よって普通はこのオプションを使うでしょう。ただし、16.8% も遅くなってしまいます。

mplayer -quiet -framedrop -vo fbdev:vidix /mnt/smb/cloud_l.mpg
BENCHMARKn: disp: 2239 (11.51 fps)  drop: 3613 (61%)  total: 5852 (30.08 fps)

参考までに USB 接続した母艦から Samba 経由で再生した場合です。帯域が細いのか、CPU を持っていかれるのか分かりませんが、お話にならない遅さです。

以上の結果から、普通に使うのであれば "-frameskip -quiet -vo fbdev:vidix -dr -double -vop rotate=1" が最適だと思います。

個人的にはダウンロード、キャプチャーしたムービーで、そのまま SL-C750 で再生可能なものは殆ど無い*3ですから、いつも必要に応じて再エンコードしています。で、どっちみち再エンコードをするのであれば、ついでにムービーそのものを左 90 度回転させて 240x320 にしてしまうのが良いと思います*4。そうすれば -vop rotate=1 が必要無くなり、特に負荷の高い mpeg4 系の再生が少し軽くなるでしょう。

*1:実際に利用するシーンでは VideoCD 規格のムービーは、画像サイズや高すぎるビットレートなどの点で使うことはないでしょうけど

*2:画像サイズによってはトリプルバッファリング以上になることもあります

*3:640x480 ならその時点でアウト

*4:PocketMVP のフォーラムでは pre-rotate と呼ばれていました