Tech と Culture

テクノロジーとカルチャー

IDCTハードウェア概要2

ここまでのIDCTブロックのハードウェアアルゴリズムを確認するために、jidctint.cをハードウェアと同じアルゴリズムに変更します。
とりあえず、データパスのビット数は考慮せずに、アルゴリズムの確認を行います。最終出力以外は、double型にします。最終出力は、これ以降の関数と関連しますので、オリジナルと同じものに型変換しています。
dct-coeff.png
係数行列は、上記のように2次元配列にしました。最初は8x8で設定しましたが、最終的には半分しか使いません。

演算部分は、8回ループの二重ループで良い筈ですが、コーディングでポインタ指定がうまくいきませんでしたので、アキュムレータに8回値を書き込むループは展開した状態で記述しました(アルゴリズム確認できれば何でも良いので)。
また入力に対しては逆量子化演算を行っています。
dct-coeff2.png
..................の部分含めて8x8=64行の演算を8回ループしています。
これで、double型の配列 wsptr に一回の一次元DCT計算結果の64要素が格納されます。

dct-coeff3.png

2回目の一次元DCTも64回フラットに書いた演算を8回ループでまわしました。最終出力は、JSAMPLE型にキャストしています。最後にレベルシフトを行っています。また最終出力が0-256の間に入るようにそれを超えた場合はrangelimitを行っています。

これをコンパイルして、djpegを実行すると、無事にXwindows上に動画が再生されました。
と言っても、実はちょっとした勘違い等が重なって、綺麗に表示されるまで結構手こずりました。そのおかげでハードウェア設計前にしっかりとアルゴリズム確認できました。やはり、先にソフトで確認するのは大事ですね。

次は、以前と同じようにビット数を考慮したCコードを記述して、確認します。