IPPのサンプルに入っていたMP3エンコーダをビルドしてみた

気分転換に。ほんとはMPEG-4デコーダの性能テストをするつもりだったんだけど、どうにも上手く動いてくれないので見送り(IPP or サンプルのバグ?)。

ippmp3enc -i inputfile.wav -o outputfile.mp3 -c (チャンネル数1〜2) -b (出力ビットレート) -s (ソースサンプリングレート)

っていうふうに使うらしいです。試しに3分13秒の44100KHz/2chソースを128kbpsでエンコードすると、所要時間は2:32。ふむ、リアルタイムエンコードができますな。さすがCPUの製造元。でも速度重視なだけに音は悪いす。

まぁ僕的には必要無いシロモノ。

どうやってIPP4.1を使ったか

IPP4.1のオブジェクトファイルは[VFP float][Soft FP]ってのになってる。僕が作ったgccは[FPA float]なんで、ldに怒られてリンクできない。まぁFPエミュレーションをソフトでやるか、カーネルでやるかってことですな。gccをSoftFPで作りなおしたらいいような気がするけど、よーわからんし、そうすると今度はシステムのライブラリをリンク出来ないように思うので、quick and dirtyにhack。

IPP4.1のオブジェクトファイルのヘッダを無理矢理[FPA float]に書き換える。関数の引数にfloat/doubleを使っていなければ問題ないはず。arでバラしたオブジェクトファイルの頭から+37バイト目が0x06になっているが、これを0x00に書き換えればオーケー。無事リンクできる。

IPP4.1にはiWMMXt対応版もあるので、SL-C3000ではお手軽に高速化できるね。