x264

次なるターゲットは画像エンコ。ということでx264で試してみる。
とりあえずsnapshotをダウンロードして、クロスコンパイル。って、全然通らず。クロスコンパイルはあまり考慮されていないconfigureスクリプト。適当に直してしまう。
ビルドすると今度はaltivec関係のコードでいくつかエラーが出る。なんかsignedの扱いが厳しい。ここも適当に直す。パッチは後日。

で、ビルドが通ったのでspiderman2のtrailerから1分ほどYUV4MPEGなデータを作って早速実行。やっぱ遅い。いろいろコンパイルオプションを変更した結果、オプティマイズは-O3 -funroll-loops -fschedule-insns -m32がよさげ。この結果は

$ time x264-ppu-20061211-2245/x264 spiderman2.y4m -o spiderman2.ppu.264
yuv4mpeg: 720x480@29970029/1000000fps, 0:0
x264 [info]: using cpu capabilities Altivec
x264 [info]: slice I:9     Avg QP:23.00  size: 11043  PSNR Mean Y:51.22 U:49.27 V:49.41 Avg:50.20 Global:44.02
x264 [info]: slice P:1783  Avg QP:26.00  size:  3943  PSNR Mean Y:42.52 U:41.16 V:42.11 Avg:42.06 Global:41.82
x264 [info]: mb I  I16..4: 68.8%  0.0% 31.2%
x264 [info]: mb P  I16..4:  4.3%  0.0%  4.6%  P16..4: 16.0%  6.8%  1.6%  0.0%  0.0%    skip:66.7%
x264 [info]: SSIM Mean Y:0.9737312
x264 [info]: PSNR Mean Y:42.567 U:41.201 V:42.147 Avg:42.101 Global:41.825 kb/s:953.94

encoded 1792 frames, 6.36 fps, 954.04 kb/s

real    4m41.821s
user    4m12.448s
sys     0m4.056s

おそい。ちなみにAthlon 3800(2.5GHz)だと、

$ time x264-i386-20061211/x264 spiderman2.y4m -o spiderman2.i386.264
yuv4mpeg: 720x480@29970029/1000000fps, 0:0
x264 [info]: using cpu capabilities MMX MMXEXT SSE SSE2 3DNow!
x264 [info]: slice I:9     Avg QP:23.00  size: 11043  PSNR Mean Y:51.22 U:54.92 V:54.93 Avg:52.09 Global:46.38
x264 [info]: slice P:1783  Avg QP:26.00  size:  3943  PSNR Mean Y:42.52 U:46.67 V:47.32 Avg:43.56 Global:43.34
x264 [info]: mb I  I16..4: 68.8%  0.0% 31.2%
x264 [info]: mb P  I16..4:  4.3%  0.0%  4.6%  P16..4: 16.0%  6.8%  1.6%  0.0%  0.0%    skip:66.7%
x264 [info]: SSIM Mean Y:0.9737313
x264 [info]: PSNR Mean Y:42.567 U:46.708 V:47.359 Avg:43.603 Global:43.348 kb/s:953.94

encoded 1792 frames, 25.23 fps, 954.04 kb/s

real    1m11.071s
user    1m4.311s
sys     0m1.435s

やっぱり速い。恐るべしAthlon。エンコ結果は何故かppuでエンコした方が1バイト大きいです。自分のパッチがまずいのか、最初からこんなもんか不明。mplayerで見た感じは同じですが。