2012年11月4日日曜日

jidctfst.cについて

逆DCTを高速化してみようと、
libjpeg(jpeg-8d)のjidctfst.c を参考にしてPythonで書いてみた。
aanIDCT.py

3,4ドット目の計算結果が微妙に違う。

調べてみると jidctfst.c と jidctflt.c は同じアルゴリズムAANで実装しているのだが、違うところがあった。
jidctflt.cを参考にして描き直してみたら、正しい計算結果になった。

違っていた箇所:
libjpeg
jpeg-8d
jidctfst.c
jpeg_idct_ifast()
縦と横の計算でそれぞれ2箇所あります。
tmp10 = MULTIPLY(z12, FIX_1_082392200) - z5; /* 2*(c2-c6) */
 ↓ 
   tmp10 = MULTIPLY(z12, - FIX_1_082392200) + z5; /* 2*(c2-c6) */

    tmp4 = tmp10 + tmp5;
 ↓ 
   tmp4 = tmp10 - tmp5;

スケールテーブル(dct_table)を作っているのは jddctmgr.c です。

(2012/11/4)
---

0 件のコメント: