2013年1月28日月曜日

BaseJpegDecodeの修正

Logitech以外のJPEGパケットデータをBaseJpegDecodeでデコードしていると時々反応が無くなる時が以前からあった。
EOI以降にもデータを送ってくるらしく、偶然、マークが来たと解釈してセグメントの長さ分データをスキップしている為だった。SOIで開始するように修正したら、無反応になることは無くなった。
パケットが壊れている時もあろうから、厳密に各マークのセグメントの長さの妥当性を確認したほうがいいのかもしれない。

BaseJpegDecode - a mercurial repository | mbed

ついでにUSBのホストライブラリをuvchostからBaseUsbHostに切り替える。

SimpleJpegDecodeをテストしてみたら、なぜか、高周波成分がおそらく含まれている部分に白や黒のドットが現れる現象が出現した。文字や髪の毛のように大きく輝度や色差が変化するような部分の画像です。
なめらかな画像なら問題なく表示されるので、これはデバックが大変そう。
以前にSimpleJpegDecodeをテストしていた時は、まだaanIDCTに移行する前だったのでaanIDCTの移植に失敗したのかもしれない。

2012/10/31 - BaseJpegDecodeの修正

(追加)
python版は問題なく動いていたので調べてみたらaanIDCTの演算結果は8ビットに収まらない時があるようだった。
range_limitで-128から127に収めるように修正してみた。
BaseJpegDecode / source / — Bitbucket

(2013/1/28)
---

0 件のコメント: