QTheora (0.9.0) | 2009-09-09 12:00 |
フレームタイプ (Intra, Inter), qi (フレーム品質パラメータ) をデコードする。
Inter フレームのとき、フレーム内の各々のブロックが符号化されているか否を判別する。 Intra フレームの場合は、全てのブロックが符号化されるので、処理はスキップされる。 符号化されないブロックは、参照フレームの該当ブロックをそのままコピーすることになる。
デコードは、ビット単位のランレングス法 (7.2) をベースに、3パスに分かれて処理される。
Inter フレームのとき、各マクロブロックの符号化モードをデコードする。 Intra フレームの場合は、全てのマクロブロックが INTRA モードとなるので、処理はスキップされる。
符号化モードは、以下の8つ。
デコードは、ハフマンコードもしくは固定長コードで、マクロブロック毎に抽出する。輝度プレーンに符号化された ブロックがないマクロブロックは、スキップされ INTER_NOMV モードなる。
Inter フレームのとき、各マクロブロックの符号化モードに応じて、モーションベクターをデコードする。 Intra フレームの場合は、モーションベクターを要さないので、処理はスキップされる。
モーションベクターのデコードが必要な符号化モードは、以下の通り。
INTER_NOMV, INTER_GOLDEN_NOMV は、(0, 0) のベクター (動きなし) が適用される。 INTER_MV_LAST, INTER_MV_LAST2 では、直前にデコードされたベクターを使用する。 INTER_MV_FOUR は、ブロック単位のモーションベクターで、最大4つのベクターを抽出する。
モーションベクターのデコードは、ハフマンコードもしくは固定長コードで行われる。
モーションベクターの範囲は、X, Y 軸共に 「-15.5 ... 15.5」(半ピクセル精度) である。
Block の DCT 係数をデコードする。通常、MPEG 系の CODEC では、Block 単位でコーディング されるが、Theora では、各係数毎に全ての Block を走査 (64 パス) する。そのため、 全 Block の DCT 係数をバッファリングする必要がある。
各 DCT 係数のデコードでは、ハフマンコードで 32 種のトークン値をデコードする。 トークン値に応じて、EOB ラン値, 係数値, ゼロラン値をデコードする。
EOB ラン値が 1 以上のとき、その数のブロックのデコードを終了させる。 EOB ラン値が 0 のとき、ゼロランの数、係数 0 を設定し、係数値を格納する。
コーディングが完了している係数については、スキップされる。
トークン値のデコードに使用するハフマンコードブックは、DC 係数用と、AC 係数用に、それぞれ 16 の候補から選択される。輝度プレーンと色差プレーンでは、別の候補が選択される。AC 係数 は、4 つのクラスに分けられ、コードブックの候補クラスが変更される。トークン値用のハフマン コードブックは、16 * (1 + 4) = 80 個用意されている。
Block の DC 係数は、他の類似 CODEC と同様に、予測符号化されているため、コーディング された誤差から、実係数を復元する。
係数値予測は、同列の左側の Block 、前列の左, 同, 右側の Block の近傍 4 Block から、Block 位置、 近傍 Block のマクロブロック符号化モードを考慮した、重みつき平均によって行われる。
[PageInfo]
LastUpdate: 2009-08-28 13:57:10, ModifiedBy: noumiakira
[License]
Creative Commons 2.1 Attribution-ShareAlike
[Permissions]
view:all, edit:members, delete/config:members