2010年9月9日木曜日

Flexの高速JPEGエンコーダーを求めて - metalbot氏のアレ(Alchemy利用)

FlexでJPEGをエンコードするとなれば、普通は標準APIのmx.graphics.codecパッケージにあるものを使うことになるだろう。しかし、まだ十分に速いとは言えない。そこでより高速なエンコーダーを探すことになる。

だいぶ前の話になるが、恐らく現状でも最速と思われるライブラリを使わせていただいていて大変役に立っている。

それはmetalbot氏が提供してくれているAlchemyを利用したライブラリだ。ライブラリそのものはもちろん、JPEGのライブラリも自分で取得してコンパイルしなければならないが、特に問題なくコンパイルできたことを覚えている。

このライブラリを知ったのは、このAdobeのフォーラムでだ。
Adobe Forums: Request: Port AS3 Corelib encoder...

上のフォーラムでのmetalbot氏のポストにあるように、ライブラリそのものはここ。
http://hurlant.com/as3_encoder_jpeg.tgz

JPEGのライブラリはここから取得する。
Independent JPEG Group

こちらにmetalbot氏のライブラリ、bytearray.org氏のライブラリ、標準のライブラリの速度比較がある。また再コンパイルする必要が出てきた時に参考になりそうだ。
WS-Blog >> Speed up JPEG encoding using Alchemy

さらにこのページには興味深いことが書かれていた。どうやらその後、Alchemyを利用した非同期バージョンのJPEGエンコーダーが出てきたらしい。
Alchemy - asynchronous jpeg encoding >> alchemy >> Devlogs >> segfaultlabs

同期バージョンに比べるとだいぶ遅いようだけれど、大きな画像をエンコードする場合には、多少遅くても非同期バージョンの方が進捗が表示できるのでユーザーのストレスが軽減できるということもある。

metalbot氏の同期バージョンが相当高速なので、今のところはまだ非同期バージョンの必要性は感じないけれど、いつか必要になるかもしれない。