今の仕事に関係あるものの要求仕様にないところで、JPEG(ベースラインのみ)の実装をしてみました。
JPEG...夢でした。学生時代、まあ躁の気の迷いですから結局手つかずでしたが、「わかりやすいJPEG・MPEG2の実現法」なんて本を買ったりもしました。
ホストから短いパケット単位で送られてくるデータをその都度展開するという、能動的に読みに行く通常の動作と逆のものです。
マルチスレッドや割り込み優先度の差によって、データが必要サイズ揃うまで受信コールバックをブロックすればlibjpegの動作すら可能でしょうが、ちょっと作ってみたのです。必要RAMは3KB弱となりました。
以前Zlib展開の実装をしたことがありハフマン符号の理解があったこと、難関である逆離散コサイン変換に既存の(ライセンス的にOKな)関数を使ったことから、1週間程度で実用レベルのものができてしまいました。
ちなみに量子化テーブルやハフマンテーブルが一つのマーカーになっているもの、Y/C、DC/ACそれぞれ別々のマーカーになっているもの、と個性があるようでした。YCrCb 4:2:2のサンプルはImageMagickで作りましたが、出力できるソフトはあるのでしょうかね。
わかってしまえば至ってシンプルだなあ、というのが感想です。「非可逆」という割り切り、劇的な圧縮率。20年を越えて現役であり続けるのは凄いものです。
(追記2013/7/24)
YCrCb 4:2:2対応ソフトは少なくないようですが、GIFアニメ大学校様のこちらによると、Paint Shop Pro 8が色々設定できたようです。最新X5は不明ですが、さすがに4x2:2x2:2x2みたいなのは異常と言わざるを得ないような...。
JPEG...夢でした。学生時代、まあ躁の気の迷いですから結局手つかずでしたが、「わかりやすいJPEG・MPEG2の実現法」なんて本を買ったりもしました。
ホストから短いパケット単位で送られてくるデータをその都度展開するという、能動的に読みに行く通常の動作と逆のものです。
マルチスレッドや割り込み優先度の差によって、データが必要サイズ揃うまで受信コールバックをブロックすればlibjpegの動作すら可能でしょうが、ちょっと作ってみたのです。必要RAMは3KB弱となりました。
以前Zlib展開の実装をしたことがありハフマン符号の理解があったこと、難関である逆離散コサイン変換に既存の(ライセンス的にOKな)関数を使ったことから、1週間程度で実用レベルのものができてしまいました。
ちなみに量子化テーブルやハフマンテーブルが一つのマーカーになっているもの、Y/C、DC/ACそれぞれ別々のマーカーになっているもの、と個性があるようでした。YCrCb 4:2:2のサンプルはImageMagickで作りましたが、出力できるソフトはあるのでしょうかね。
わかってしまえば至ってシンプルだなあ、というのが感想です。「非可逆」という割り切り、劇的な圧縮率。20年を越えて現役であり続けるのは凄いものです。
(追記2013/7/24)
YCrCb 4:2:2対応ソフトは少なくないようですが、GIFアニメ大学校様のこちらによると、Paint Shop Pro 8が色々設定できたようです。最新X5は不明ですが、さすがに4x2:2x2:2x2みたいなのは異常と言わざるを得ないような...。
コメントする