前面两篇已经将NAL的解析过程的核心部分介绍完了,本篇主要讨论如何将NAL的payload部分转化为原始数据,即从EBSP到RBSP的过程。
该过程由TAppDecTop::decode()的子函数read(nalu, nalUnit)调用convertPayloadToRBSP(nalUnitBuf, pcBitstream, (nalUnitBuf[0] & 64) == 0)实现。
read(nalu, nalUnit); //!< nalUnit-->nalu (EBSP-->RBSP)
/**
* create a NALunit structure with given header values and storage for
* a bitstream
*/
void read(InputNALUnit& nalu, vector<uint8_t>& nalUnitBuf)
{
/* perform anti-emulation prevention */
TComInputBitstream *pcBitstream = new TComInputBitstream(NULL);
#if HM9_NALU_TYPES
convertPayloadToRBSP(nalUnitBuf, pcBitstream, (nalUnitBuf[0] & 64) == 0); //!< 实现真正的EBSP-->RBSP
#else
convertPayloadToRBSP(nalUnitBuf, pcBitstream);
#endif
nalu.m_Bitstream = new TComInputBitstream(&nalUnitBuf);
delete pcBitstream;
readNalUnitHeade