ほっしーの技術ネタ備忘録

技術ネタの備忘録です。基本的に私が忘れないためのものです。他の人の役にも立つといいなぁ。

高速iDCT

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/
ここを見るとなんとなく似たような感じの計算をしてるような気はする。


つまり離散コサイン変換の公式をそのままぶち込むとあまりにも遅くて、
数学的に速度を向上させる必要があったのね...


……そんなことわかるかぁーー!!