HEVC構文要素のコーディング
2551 ワード
H.265のシンタックス要素のバイナリ化符号化は主に,カットオフライス符号化(TR),k次指数コロンブス符号化,定長符号化(FL)である.注目すべきは、この3つの符号化スキームに加えて、H.265規格がpart_に与えられることである.mode、intra_chroma_pred_mode、inter_pred_idc、cu_qp_delta_abs、coeff_abs_level_remainingの5つの構文要素は、専門的なバイナリ化スキームを提供します.
構文の記述子:
ビット列:b(8):任意の形式の8ビットバイト(構文要素が8ビットであり、構文上の意味がないことを説明するため)f(n):nビット固定モードビット列(forbidden_zero_bitの値が0であるような値固定)i(n):nビットの符号付き整数(構文ではこのフォーマットは採用されていない)u(n):nビット符号なし整数、構文テーブルでnの値が'v'である場合、そのビット数は他の要素値によって決定される.解析プロセスはread_bits(n)の戻り値決定
指数コロンブスコード:
ue(v):符号なし整数指数コロンブス符号化の構文要素
Se(v):シンボル整数指数コロンブス符号化の文法要素があり、左位が先に
te(v):捨位指数コロンブス符号符号化文法要素、左位先
ce(v):CAVLC
ae(v):CABAC
HMでは、クラスSyntaxElementWriterにおいて、符号化端子に対応するバイナリ化された符号化
xWriteCode:定長符号化(FL)xWriteUvlc:符号なし0次指数コロンブス符号化xWriteSvlc:符号付き0次指数コロンブス符号化xWritFlag:長さ1の定長符号化(FL)HMで定義された4つのマクロは、呼び出し時に上記の4つの関数名を置き換える:
これに対応して、復号側において、クラスSyntaxElementParserが定義されており、説明は省略する
構文の記述子:
ビット列:b(8):任意の形式の8ビットバイト(構文要素が8ビットであり、構文上の意味がないことを説明するため)f(n):nビット固定モードビット列(forbidden_zero_bitの値が0であるような値固定)i(n):nビットの符号付き整数(構文ではこのフォーマットは採用されていない)u(n):nビット符号なし整数、構文テーブルでnの値が'v'である場合、そのビット数は他の要素値によって決定される.解析プロセスはread_bits(n)の戻り値決定
指数コロンブスコード:
ue(v):符号なし整数指数コロンブス符号化の構文要素
Se(v):シンボル整数指数コロンブス符号化の文法要素があり、左位が先に
te(v):捨位指数コロンブス符号符号化文法要素、左位先
ce(v):CAVLC
ae(v):CABAC
HMでは、クラスSyntaxElementWriterにおいて、符号化端子に対応するバイナリ化された符号化
class SyntaxElementWriter
{
protected:
TComBitIf* m_pcBitIf;
SyntaxElementWriter()
:m_pcBitIf(NULL)
{};
virtual ~SyntaxElementWriter() {};
Void setBitstream ( TComBitIf* p ) { m_pcBitIf = p; }
Void xWriteCode ( UInt uiCode, UInt uiLength );
Void xWriteUvlc ( UInt uiCode );
Void xWriteSvlc ( Int iCode );
Void xWriteFlag ( UInt uiCode );
#if ENC_DEC_TRACE
Void xWriteCodeTr ( UInt value, UInt length, const TChar *pSymbolName);
Void xWriteUvlcTr ( UInt value, const TChar *pSymbolName);
Void xWriteSvlcTr ( Int value, const TChar *pSymbolName);
Void xWriteFlagTr ( UInt value, const TChar *pSymbolName);
#endif
Void xWriteRbspTrailingBits();
UInt xConvertToUInt ( Int iValue ) { return ( iValue <= 0) ? -iValue<<1 : (iValue<<1)-1; }
};
//! \}
のうち、対応関係は以下の通りであるxWriteCode:定長符号化(FL)xWriteUvlc:符号なし0次指数コロンブス符号化xWriteSvlc:符号付き0次指数コロンブス符号化xWritFlag:長さ1の定長符号化(FL)HMで定義された4つのマクロは、呼び出し時に上記の4つの関数名を置き換える:
#if ENC_DEC_TRACE
#define WRITE_CODE( value, length, name) xWriteCodeTr ( value, length, name )
#define WRITE_UVLC( value, name) xWriteUvlcTr ( value, name )
#define WRITE_SVLC( value, name) xWriteSvlcTr ( value, name )
#define WRITE_FLAG( value, name) xWriteFlagTr ( value, name )
#else
#define WRITE_CODE( value, length, name) xWriteCode ( value, length )
#define WRITE_UVLC( value, name) xWriteUvlc ( value )
#define WRITE_SVLC( value, name) xWriteSvlc ( value )
#define WRITE_FLAG( value, name) xWriteFlag ( value )
#endif
これに対応して、復号側において、クラスSyntaxElementParserが定義されており、説明は省略する