今日の作業

17:31

YUVオーバレイの幅(インプットスタイルで見た時の高さのこと)は16の倍数でないといけないのだけど、そのへんの処理にバグがあった。とりあえず修正。

ホワイトアウトしてもフリーズすることが無いようにbvddを変更。

18:58

そろそろローテートの最適化をしようかな。

僕としてはプリローテートを推すところだけど、レビューなど見てると-vf rotateを使って遅いと言ってる人が多いので。

21:23

ローテートのテスト用の実装が動いた。とりえあずiWMMXt使用。

ベンチマーク結果。ソースはXviD 1000kbps 24fpsで解像度はファイル名のとおり。

mplayer -vo bvdd /mnt/card/AIR_352x640.avi -quiet -benchmark -nosound -nodouble
BENCHMARKs: VC:  49.025s VO:   0.102s A:   0.000s Sys:   3.138s =   52.265s

mplayer -vo bvdd /mnt/card/AIR_640x352.avi -quiet -benchmark -nosound -nodouble
BENCHMARKs: VC:  63.757s VO:   0.103s A:   0.000s Sys:   1.891s =   65.750s

mplayer -vo bvdd /mnt/card/AIR_640x352.avi -quiet -benchmark -nosound -nodouble -vf rotate=1
BENCHMARKs: VC:  55.917s VO: 188.095s A:   0.000s Sys:   3.013s =  247.024s

うん、-vf rotateから3.8倍の高速化。わかっていたことだけどね。でもやっぱりプリローテートに比べるとそれなりに遅くなる。

21:34

問題は、これを実際に組み込むとすると、動的コード生成を行なう必要があること。となると、BetaPlayerのように簡易アセンブラを作らないといけない。さすがに大変だから、最適化の度合いを下げて静的コードで対応するか。

23:14

ARM版も実装してみた。

mplayer -vo bvdd /mnt/card/AIR_640x352.avi -quiet -benchmark -nosound -nodouble
BENCHMARKs: VC: 110.370s VO:   0.112s A:   0.000s Sys:   0.794s =  111.276s

遅い! つってもvfより速いから、これでいいや。無いよりマシ程度に。

24:06

iWMMXt版を書き直し。

mplayer -vo bvdd /mnt/card/AIR_640x352.avi -quiet -benchmark -nosound -nodouble
BENCHMARKs: VC:  63.360s VO:   0.116s A:   0.000s Sys:   0.784s =   64.260s

なんか速くなってるし……。これでいいや。

24:18

PLDを仕込んでみた。

mplayer -vo bvdd /mnt/card/AIR_640x352.avi -quiet -benchmark -nosound -nodouble
BENCHMARKs: VC:  62.462s VO:   0.113s A:   0.000s Sys:   0.789s =   63.364s

微妙に速くなる。

今日はここまで。明日はコンパイラの最適化オプションの検証でもするかな。