4

私は現在、ロスレス JPEG (DNG、CR2 など) 用の OpenCL-Decoder に取り組んでいます。標準では、コンポーネントのレイアウト方法 (インターリーブと平面) にほとんど制限が課せられていません。これは、かなり柔軟性のない OpenCL カーネルと衝突します。

特に、コンポーネント識別子の概念は不必要に複雑に思えるので、正しく理解できているかどうか疑問に思っています:

SOF3 ヘッダー (フレーム 3 の開始、非差分、ハフマン コーディング、ロスレス (シーケンシャル)) には、各コンポーネントに関する情報が含まれています。それらは:

  • i(暗黙的): コンポーネントのインデックス
  • C_i: コンポーネント識別子
  • H_i/ V_i: 水平/垂直サンプリング係数
  • Tq_i:量子化テーブル先セレクタ

各フレームは、少なくとも 1 つの色成分のエンコードされた画像データを含む複数のスキャンで構成されている場合があります。各 SOS ヘッダー (スキャンの開始) は、特定のスキャンの一部となるコンポーネントを宣言します。コンポーネントごとに、以前に宣言された識別子 ( C_i) の 1 つが後方参照 ( Cs_j、スキャン コンポーネント セレクター) として使用されます。標準にはほとんど制限がありません (B.2.3 スキャン ヘッダー構文)。

ルール 1:

それぞれがフレーム ヘッダーで指定されCs_jた値の 1 つと一致C_iし、スキャン ヘッダーの順序はフレーム ヘッダーの順序に従います。> 1 の場合Ns、MCU 内のインターリーブされたコンポーネントの順序はCs_11 番目、Cs_22 番目などです。

ルール 2:

の値は~の値とCs_jは異なります。Cs_1Cs_j-1

私の質問は次のとおりです。

  1. ルール 1 は、コンポーネントの並べ替えを禁止します (たとえば、フレームでは R|G|B、スキャンでは B|G|R)。scan-R、scan-G、scan-B ではなく、scan-B、scan-G、scan-R の順序で、それぞれが単一のコンポーネント (平面構成) を含む複数のスキャンを作成することはできますか?
  2. スキャンでコンポーネントをスキップすることはできますか? たとえば、Frame で宣言された R|G|B の後に scan-R|B、次に scan_G が続きますか?
  3. スキャン内のコンポーネントが、フレーム ヘッダー内のC_iインデックス ( ) ではなく、識別子 ( ) によって参照されるのはなぜですか? iR:C_0=255、G:C_1=3、B:C_2=250 を宣言することは本当に有効ですか?
4

0 に答える 0