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 件のコメント:
コメントを投稿