24FPS で再生するとして展開は一枚 40ms 以内に収まる必要があるのね。
展開の際に必要な iDCT がどうしても 80ms 切れない……
整数化して 2600ms → 180ms MMXを使うようにして 180ms → 100ms 処理全体をアセンブラで書いて 100ms → 85ms
ほんとにすっごく頑張ったんですって。
そして今日になってみて調べてみると、
libjpeg だと 12ms で展開完了。
……なんでそんなに速いんですか!?
ソースを読むと、ループ回数が明らかに少ない。
自作だと 8 * 8 で 64 回回ってるのに対して
libjpeg だと 8 回が 2 個で 16 回。
http://momonga.t.u-tokyo.ac.jp/~ooura/fftman/
ここを見るとなんとなく似たような感じの計算をしてるような気はする。
つまり離散コサイン変換の公式をそのままぶち込むとあまりにも遅くて、
数学的に速度を向上させる必要があったのね...
……そんなことわかるかぁーー!!