熵编码的重要类:TEncEntropy和TEncEntropyIf
TEncEntropyIf是纯熵编码的类,只有纯虚成员函数,没有数据成员。因此TEncEntropyIf是一个抽象类,等待被继承,纯虚函数在继承类中被定义。
**纯虚函数只有函数的名字而不具备函数的作用,留待派生中被定义。
...
virtual Void codeVPS ( const TComVPS* pcVPS ) = 0;
virtual Void codeSPS ( const TComSPS* pcSPS ) = 0;
virtual Void codePPS ( const TComPPS* pcPPS ) = 0;
virtual Void codeSliceHeader ( TComSlice* pcSlice ) = 0;
...
在TEncEntropy类中,包含唯一的一个数据成员: TEncEntropyIf* m_pcEntropyCoderIf;
这个类的定义如下:
/// entropy encoder class
class TEncEntropy
{
public:
Void setEntropyCoder ( TEncEntropyIf* e );
Void setBitstream ( TComBitIf* p ) { m_pcEntropyCoderIf->setBitstream(p); }
Void resetBits () { m_pcEntropyCoderIf->resetBits(); }
UInt getNumberOfWrittenBits () { return m_pcEntropyCoderIf->getNumberOfWrittenBits(); }
Void resetEntropy (const TComSlice *pSlice) { m_pcEntropyCoderIf->resetEntropy(pSlice); }
SliceType determineCabacInitIdx (const TComSlice *pSlice) { return m_pcEntropyCoderIf->determineCabacInitIdx(pSlice); }
Void encodeSliceHeader ( TComSlice* pcSlice );
Void encodeTilesWPPEntryPoint( TComSlice* pSlice );
Void encodeTerminatingBit ( UInt uiIsLast );
Void encodeSliceFinish ();
TEncEntropyIf* m_pcEntropyCoderIf;
public:
Void encodeVPS ( const TComVPS* pcVPS);
// SPS
Void encodeSPS ( const TCom