libjpeg-turbo は元々、 libjpeg v6b の MMX アクセラレーション派生である libjpeg/SIMD に基づいていました。
Linux では、コーデックに関して、ほとんどのユーザーは通常、それを心配しません。多くのディストリビューションでは、アプリケーションの表示や編集に加えて、この問題はデフォルトでターゲットに含まれることですでに解決されているためです。いくつかの追加物を含む砂の。
しかし、ユーザーが編集作業や単純なレジャーなど、特定の側面でパフォーマンスを向上させたい場合はどうなるでしょうか。 この部分には、すべてのユーザーが関与するわけではありませんが、興味のあるユーザーは、各形式が提供する利点と欠点を調査する傾向があります。
ここで、今日説明するコーデックが登場します。つまり、JPEG 画像形式は、最も人気のある形式の XNUMX つですが、他の形式も存在するため、これが最適であるという意味ではありません。これに比べて多くの利点があります。
libjpeg-turboは、GitHubリポジトリに記載されているように、JPEGが他のフォーマットと比較して抱えるいくつかの欠点を解決するものです。
libjpeg-turbo は、SIMD 命令を使用して、x86、x86-64、Arm、PowerPC、および MIPS システムでのベンチマーク JPEG 圧縮および解凍を高速化する JPEG 画像コーデックです。また、x86、x86-64、および arm でのプログレッシブ JPEG 圧縮も高速化します。 このようなシステムでは、他のすべてが同じ場合、libjpeg-turbo は通常 libjpeg より 2 ~ 6 倍高速です。 他のタイプのシステムでは、高度に最適化されたハフマン コーディング ルーチンのおかげで、libjpeg-turbo は依然として libjpeg を大幅に上回るパフォーマンスを発揮します。 多くの場合、libjpeg-turbo のパフォーマンスは、独自の高速 JPEG コーデックのパフォーマンスに匹敵します。
libjpeg-turbo は、従来の libjpeg API と、強力ではないがより単純な TurboJPEG API の両方を実装します。 libjpeg-turbo は、32 ビットおよびビッグエンディアンのピクセル バッファー (RGBX、XBGR など) への圧縮/解凍を可能にする色空間拡張機能と、フル機能の Java インターフェイスも備えています。
Libjpeg-turboは、最速のエンコードおよびデコード速度を実現するために設計された、従来のlibjpegライブラリのAPI/ABI準拠フォークです。標準のlibjpeg APIに加え、独自のTurboJPEG APIと、画像を32ビットピクセルバッファ(RGBX、XBGR)に圧縮またはデコードできるカラーレンダリングモデルを備えた多数の拡張機能を提供します。
他のアーキテクチャでは、高速化効果はそれほど顕著ではありませんが、最適化されたハフマン符号化関数を使用しているため、このライブラリはlibjpegよりも明らかに高速であり、パフォーマンスの面では高品質の独自JPEGコーデックに匹敵します。
ibjpeg-turboが最近新しいバージョン3.0をリリースしたことを特筆すべきでしょう。この新バージョンで注目すべき主な新機能は以下のとおりです。
- 4:1:1 カラー サブサンプリングのサポートが追加されました。これにより、4:1:1 サブサンプリングされた JPEG 画像を品質を損なうことなく変換、クロップ、回転できるほか、解凍して YUV カラー モデルに変換できるようになりました。
- 最適なハフマン テーブルの計算が大幅に高速化されました。 小さい画像 (256×256) の場合、この変更により圧縮時間を最大 XNUMX 分の XNUMX に短縮できました。
- チャネルあたり 12 ビットの色表現を持つ JPEG 画像に算術エントロピー コーディングを適用する機能が追加されました。
- TurboJPEG API は、既存の制限を取り除き、拡張性を高めるために大幅に再設計されました。 たとえば、すべての C 関数には「tj3」というプレフィックスが付けられるようになりました。
- 多くのフラグとモードが関数の引数から一般的な API パラメータに変換されました。
- 非可逆モードおよび可逆モードで、チャネルごとに 12 ビットおよび 16 ビットのカラーの画像をサポートします。
- ロスレス JPEG ファイル モードが追加されました。これは、チャネルあたり 8、12、および 16 ビットのカラーの画像に使用できます。 新しい関数 jpeg_enable_lossless() とコマンドライン オプション「-lossless」を追加しました。
- Java TurboJPEG API の非推奨のフィールド、コンストラクター、およびメソッドを削除しました。
最後に、将来的には、libjpeg-turbo の作成者は、プロジェクトの作業をバグ修正を含むアップデートのリリースのみに制限する予定であることを言及しておく必要があります。 新しいバージョン 3.1 の開発は、プロジェクトの資金が得られるまで開始されません。
コードに興味のある方は、BSDライセンスに類似した3つのライセンス(IJG、BSDによる修正版、zlib)で配布されています。Linux、macOS、Windows用のバイナリが利用可能です。詳細情報やバイナリのダウンロードは、以下のリンクからどうぞ。