2016-08-17 9 views
1

私はOpenH264コーデックで作業しています。 OpenH264はヘッダ関連の情報にExp-Golomb Codingを使用しています。私はいくつかのウェブサイトを研究し、Exp-Golomb Codingについての少しの情報を集めました。 OpenH264はExp-Golombの4種類のコーディング方法を使用します。それらは:値が共に負である Exp-Golomb CodeWordの構築と解析の方法

  • [値のみ1または0である]

    • うえ【値は唯一の非負量である]
    • と正の量]の値は、標準コードマップは、値に対して定義され
    • ミー []

    私は方法で構築するか構文解析する方法を学んだUe

    Exp-Golomb(Ue)= [M-Zeros] [1] [INFO]の構文形式。

    建設:と仮定我々は持っているCode_Num =今226

    M =床(LOG2(Code_Num))=床(LOG2(226))= 7
    INFO = Code_Num + 1 - POW( 2、M)= 226 + 1 - だからバイナリ
    128 = 99 =(1100011)、
    コードワード= 0000000 1 1100011 [のM-ゼロ、1無視ビット、INFO]

    解析: と仮定CodeWord = 000000011100011
    Code_Num = pow(2、M)+ INF O-1 = 128 + 99-1 = 226

    ここでExp-Golomb(Ue)を計算することができます。しかし、私はSe、Te、Meに関するすべての理論を学びたい。しかし、私は他の方法のためのリソースを見つけることができません。私を助けてください。

  • 答えて

    1

    OpenH264は、H.264/AVCビデオコーデックの実装です。

    AVCはさまざまなヘッダーでExp-Golombコーディングを使用していますが、互換性のあるすべてのエンコーダも同様です。

    また、te(v)は、切捨て指数ゴロム符号化を表す。

    とにかく、あなたはwiki page:

    に署名した指数ゴロムコードを読み取るに関する情報が、実際に素早くTLを見つけることができます; DR等= 1 0、= 010 1、-1 = 011、

    ですこの混乱のためとして

    :署名された、あなたは、エンコード時に1を追加し、(のみ符号なし指数ゴロム用)の復号時に1を引くことになっている、まったく正確ではありません

    M = floor(log2(Code_Num)) = floor(log2(226)) = 7 INFO = Code_Num + 1 - pow(2,M) = 226 + 1 - 128 = 99 = (1100011) in Binary So, CodeWord = 0000000 1 1100011 [M-zeros, 1 ignoring bit, INFO]

    、指数ゴロム共同利用完全に異なるシステム。

    編集:指数ゴロムマップされた

    が正確に符号なし指数ゴロム、プラステーブルルックアップと同じです。

    切り捨て指数ゴロムは、ストップビットを除いて、別名アルファ符号標準RICEと同じであるあなたが私のプロジェクトを見て、あなた自身のデコーダ/エンコーダを作成するような気がしない場合は0

    あるBitIO ReadRICE/WriteRICE、ReadExpGolomb/WriteExpGolomb関数を使っているので、BitIO on Github

    関連する問題