首页 > 代码库 > HEVC残差系数解码代码详解

HEVC残差系数解码代码详解

上一篇中主要介绍了编码中的原理,这里主要是结合HM中的代码介绍读残差系数的方法

HM变换系数熵解码简介:

 

初始一个TU对象

成员变量介绍:

 

public:

    typedef enum TU_SPLIT_MODE { DONT_SPLIT=0, VERTICAL_SPLIT=1, QUAD_SPLIT=2, NUMBER_OF_SPLIT_MODES=3 } SPLIT_MODE;  //<TU在递归过程中的三种劈分方式

    static const UInt NUMBER_OF_SECTIONS[NUMBER_OF_SPLIT_MODES];

  protected:

    ChromaFormat  mChromaFormat;

    Bool          mbProcessLastOfLevel; // if true, then if size n/2 x n/2 is invalid, the nxn block for a channel is processed only for the last block, not the first.

    UInt          mCuDepth;  //<CU是TU的根节点,记录CU深度

    UInt          mTrDepthRelCU[MAX_NUM_COMPONENT]; //<记录TU相对于CU的深度

    UInt          mSection;//<如果进行劈分,那么劈分后处理SubCU的index

    TU_SPLIT_MODE mSplitMode;//< the split mode

    TComRectangle mRect[MAX_NUM_COMPONENT]; //<当前TU的位置信息    Bool          mCodeAll[MAX_NUM_COMPONENT];

    UInt          mOrigWidth[MAX_NUM_COMPONENT];

    UInt          mOffsets[MAX_NUM_COMPONENT];//<cur TU 与 CU左上角的偏移量,比如TU 为8*8,那么处理第二个TU则偏移64个bit

    UInt          mAbsPartIdxCU;//<the abs index of CU in LCU

    UInt          mAbsPartIdxTURelCU;//<the abs index of TU in cur CU

    UInt          mAbsPartIdxStep;//<if split, the added index

    TComDataCU   *mpcCU;

    UInt          mLog2TrLumaSize;//< relative to the size of Cur TU

TComTU       *mpParent; //<如果劈分进行递归,对应父节点


下面是解码的这个外围的流程图

技术分享

技术分享


其中涉及到两个比较重要得函数:

pareseCBF 和 parseCoeffNxN,前一个函数比较简单,后面将重点分析一下第二个函数

因为涉及好多的表格,这里不好编辑,我就直接把截图放上来

技术分享

技术分享技术分享

文档下载链接

http://download.csdn.net/detail/xietingcandice/8329321



HEVC残差系数解码代码详解