JPEG プログラミング

Live Video Streaming にあたって
画像をJPEG圧縮して送るようにしたいということで
JPEGプログラミング。

ただのJPEGであれば既存のライブラリを使えばいいのだが
DCTの結果を他の目的で流用したり
フレーム中の任意のブロックのみエンコードしたり
といったことがしたいので
ライブラリそのままとは行かない。

いい本があったので参考に組んでみる。

JPEG 概念からC++での実装まで 第2版

丁寧な解説と分かりやすいソース。
おかげでエンコード・デコードの流れを理解できた。

しかし、プログラムの方は、ちゃんと動作はするものの
処理時間がかかりすぎて使い物にならなかった。

プロファイルを取ってみればDCT・IDCTが相当重いようだった。

そこで他をあたることにした。

JPEGのエンコード・デコードライブラリとしては
IJG(Independent JPEG Group) のライブラリが有名らしい。

Independent JPEG Group

DCT・IDCTの部分を見れば、なにやら期待できそうな感じだ。
しかしながら、マクロや独自の型が多用されていて
部分的に使うのは難しく感じた。

渋っていたところ、いい物を見つけた。

ファイヤー和田研 内の システムアーキテクチャ論 2004/06/05 実習2

IJGのライブラリからエンコード部分のみ器用に抜き出したソース。

早速試すと、エンコードの処理時間が 1/10 ぐらいに(劇的だな…)。

残るはデコード部分だが、これに関しては

MPEG-2 VIDEO VFAPI Plug-In

のIDCTの部分のソースコードが非常に参考になった。
波長が合うということなのか、読みやすく感じたし
モジュール化がされていて部分的に抜き出し易くなっていた。

ついでに色空間の変換にテーブルを使うことにした。

Software Library の YCbCr→RGB変換Cソース(ver0.01)(02.7.12 bug fixed)

その他参考になりそうなページとしては

Software Laboratory Alpha

があった。

・SIMD Enhanced JPEG Plug-in Ver.0.17
・アセンブリ言語版 DCT ルーチン for IJG JPEG Software

を公開している。


今頃JPEGかよ…という感もあるけど、バリバリ現役の画像形式だし。
大体、JPEG 2000 は?
大分経つけど普及してないよなぁ。
ストレージ容量や回線速度の増えっぷりからして出番ないんじゃない?
名前変えたら? JPEG XP にでもしたら?
Research | - | trackbacks (0)

Trackbacks