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で見た感じは同じですが。