Intel IPP libjpeg を使用のため構築する
目的
Intel は、より速いアクセスのため intel チップ特有の特徴を利用する libjpeg の利用者に合わせたバージョン生産します。
ジレンマ
しかしながら、通常の libjpeg "6b" ビルドの代用においてドロップとして利用するには難しい点がいくつかあります。特に non-progressive モードにおいて、ジェネリック libjpeg とは違い、IPP libjpeg は必ず io バッファを完全に埋めるまたは空にするとは限りません。これは、libjpeg 6b behavior を想定するアプリケーションレベルコード(通常 io リダイレクトコード)において問題を引き起こします。
解決策
GDAL jpeg ドライバや GDAL GTiff ドライバ(jpeg 圧縮された tiff のための)のような場所にある ibjpeg インターフェイスをパッチします。
残念ながら、フラッシュ/フィル機能を呼び出す前に state information を適切に設定しない libjpeg 6b とパッチの間に互換性がないことが判明しました。これは、リコンパイルなしで IPP または non-IPP バージョンの libjpeg のどちらかと連動する GDAL のバージョンを持つことは“ほぼ”不可能だということを意味します。しかしながら、もし、r15507 にあるように state information を適切に設定するようlibjpeg 6b を修正すれば、他のパッチは安全であるといえます。r15507 が libjpeg を使用するアプリケーションを破損しないよう注意して下さい。libjpeg 6b は誰でも安全に適用することができます。
OSGeo4W においてどのように展開するか
以下を行う必要があります:
- r15507、r16363 そして r16601 (完了) を用いて libjpeg パッケージ(6b) を再構築
- JPEG (r15508) 使用可能ドライバにある IPP サポートを用いて GDAL を再構築(完了)
- tif_jpeg.c で使用可能な IPP サポートを用いて libtiff パッケージを再構築(完了)
- 標準 jpeg_osgeo.dll に取って代わる OSGeo4W の libjpeg-ipp パッケージを作成 (完了)
- 調整された GD (?) を用いて MapServer を再構築(未完)
Outstanding:
- MapServer GD はまだアップデートされていません。
- libjpeg-ipp を用いた libtiff は、"ファイルの途中終了" と言う誤ったメッセージを表示することがあります。
構築
"IPP 互換" の形で GDAL と libtiff を構築するためには、IPPJ_HUFF マクロを定義することが必要です。この作業は手動で行うことが可能です。
libtiff
libtiff\libtiff\tiffconf.h に次を追加します:
#define IPPJ_HUFF
GDAL
unix で GDALmake.opt を編集し、ファイルの上に "USER_DEFS=-DIPPJ_HUFF" マクロを追加します。
windows で /DIPPJ_HUFF を OPTFLAGS マクロに追加します。
関連ページ
- OSGeo4W libjpeg-ipp package: http://trac.osgeo.org/osgeo4w/wiki/pkg-libjpeg-ipp
- IPP GDAL ticket: http://trac.osgeo.org/gdal/ticket/2606
- IPP Libtiff ticket: http://bugzilla.maptools.org/show_bug.cgi?id=1951
- IPP Related GDAL problem ticket: http://trac.osgeo.org/gdal/ticket/2845