今日の作業
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より速いから、これでいいや。無いよりマシ程度に。