下图为官方标准中NAL层的句法元素,且以伪代码的形式给出了解码过程:
在HM中由TAppDecTop::decode()调用byteStreamNALUnit(bytestream, nalUnit, stats)实现如上伪代码:
/**
* Parse an AVC AnnexB Bytestream bs to extract a single nalUnit
* while accumulating bytestream statistics into stats.
*
* Returns false if EOF was reached (NB, nalunit data may be valid),
* otherwise true.
*/
Bool
byteStreamNALUnit(
InputByteStream& bs,
vector<uint8_t>& nalUnit,
AnnexBStats& stats)
{
Bool eof = false;
try
{
_byteStreamNALUnit(bs, nalUnit, stats); //!< 实际完成NAL解析工作的函数
}
catch (...) //!< 捕获所有异常
{
eof = true;
}
stats.m_numBytesInNALUnit = UInt(nalUnit.size());
return eof;
}
在分析NAL解析过程之前,先介绍几个会被调用到的子函数