480x640でエンコード

昔、mencoderのフロントエンドを作りかけていたのですが、結局完成していません。ちょっと探してみましたが、PocketDivXEncoder(http://divx.ppccool.com/)が良さげです。

Advanced optionsを開いて、機種をVGA(e800)、Orientationを操作パネルが右サイドに来るように変更すれば良いようです。

mplayer iWMMXt最適化がだいたい終了

結果はこんな感じで。それなりに苦労した割にはさほど速くならないなぁ。

ベンチマークなど。


$ ./mplayer -vo bvdd /hdd3/RL_XQ_480x640_1500_128.avi -quiet -rtprio 2 -benchmark -nosound
BENCHMARKs: VC: 124.453s VO: 0.096s A: 0.000s Sys: 3.304s = 127.853s
BENCHMARK%: VC: 97.3402% VO: 0.0753% A: 0.0000% Sys: 2.5845% = 100.0000%

$ ./mplayer -vo bvdd /hdd3/RL_XQ_480x640_1500_128.avi -quiet -rtprio 2 -benchmark
BENCHMARKs: VC: 119.853s VO: 0.095s A: 12.719s Sys: 19.177s = 151.845s
BENCHMARK%: VC: 78.9313% VO: 0.0628% A: 8.3766% Sys: 12.6293% = 100.0000%

ソースは151秒。映像処理124秒 + 音声処理13秒 = 137秒。音付きで再生したときのSysの部分は同期を取るためにスリープしている時間ですね。betaplayerのベンチ風に言うと110%のデコード性能ってとこですか。ベースがmplayerであること、オーバレイ以外はすべてソフトウェアで処理してることなど考えると、かなり健闘していると思います。

それにしても、VGADivX


************************************************
**** Your system is too SLOW to play this! ****
************************************************

のメッセージを見ずに再生出来るなんて、感動もんです。

VGA動画ですが、僕も最初に見たときは感動しましたね。MPEG1なら20fps前後で再生できそうとあって、俄然最適化に力が入りました。C3000 が予想通りの性能なら、mplayerでもDivXVGA動画がフルフレーム再生可能なはずです。あまり予想に自信が無いので表では口にしていませんが。:) -- atty? 2004-11-09 (火) 11:35:52

この発言もなんとか成就。まぁこれはノーマルカーネルを想定していたので、ちょっと負けた気分ですが……。

年内にやるべきこと。

  • フロントエンド
  • オーバレイ表示の安定化
  • 256KBのSRAMを使ってバス消費率を下げる(どのくらい速くなるかは未知数)
    • 変化無し。面倒になるだけなのでボツ。
  • ベースフレームを4bppにしてバス消費率を下げる

メモ。

  • QVGAモードはサポートしない!QVGA->VGAの拡大処理をソフトウェアでやってもお釣りがくるはずなので。
  • -
- with -ffast-math
BENCHMARKs: VC: 124.029s VO:   0.097s A:   0.000s Sys:   3.495s =  127.622s
BENCHMARK%: VC: 97.1853% VO:  0.0762% A:  0.0000% Sys:  2.7385% = 100.0000%

- without -ffast-math
BENCHMARKs: VC: 115.892s VO:   0.094s A:   0.000s Sys:   2.906s =  118.892s
BENCHMARK%: VC: 97.4764% VO:  0.0791% A:  0.0000% Sys:  2.4445% = 100.0000%

-ffast-mathを外したほうが速くなる罠。なぜに?。gccのオプションも一通り検証するべきだな。

ていうかこんなことで10秒も速くなるなんて……orz

gcc-4.0も試してみようかなぁ。

mplayer / MPEG-1/2も試してみた

dsputilの最適化をlibmpeg2にも適用したので。モノはmencoderで480x640、ビットレート1150kbpsにエンコード

$  ./mplayer -vo bvdd /mnt/card/RL_XQ_480x640_1150_128_mpeg1.mpg -quiet -
rtprio 2 -benchmark -nosound
BENCHMARKs: VC:  40.277s VO:  26.724s A:   0.000s Sys:   8.465s =   75.465s
$ ./mplayer -vo bvdd /mnt/card/RL_XQ_480x640_1150_128_mpeg2.mpg -q
uiet -rtprio 2 -benchmark -nosound
BENCHMARKs: VC:  38.651s VO:  25.941s A:   0.000s Sys:   9.913s =   74.504s

って、なんですか、この速さは!? betaplayer式で言うところの200%、fps換算で48fps。mplayer-w100で「360x640が20fpsでねぇ〜」とか言っていたのがアホらしくなってきます。

MPEG-1/2なら標準クロックでもフルフレームで再生できますね(試しました)。ていうか、液晶が小さいからMPEG-1/2でもブロックノイズなどはそれほど気になりませんし、ストレージはたっぷりあるので、MPEG-2常用でいいんじゃないかと思ったり。