HM编码器代码阅读(8)——其他的一些重要的变量和数据结构的说明

时间:2022-01-22 11:16:41
1、TComDataCU。TComDataCU:LCU 及其子 CU 的数据结构,存储了一个 LCU 所有的相关信息,里面重要的数据结构包括:
m_uiCUAddr:一个 LCU 在 slice 中的位置
m_uiAbsIdxInLCU:当前 CU 在 LCU 中的位置,位置用 Z 扫描顺序
m_puhWidth: CU 的宽度
m_puhHeight:CU 的高度
m_puhDepth: CU 所处的深度
m_pePartSize : PU 的类型
m_pePredMode:编码模式
m_pcTrCoeffY,m_pcTrCoeffCb,m_pcTrCoeffCr:量化后的系数
m_puhLumaIntraDir:亮度的模式信息
m_puhChromaIntraDir:色度的模式信息
m_puhInterDir:帧间的预测方向
m_apiMVPIdx:MVP 索引
m_apiMVPNum:MVP 的候选数
以上的数据结构都是以动态存储来分配空间,一般只有一维,这一维具体取值的含义就是 CU 里面的每个对应的 4x4 的小块的信息,而开辟的数目就是 CU 所包含的 4x4 的数目,而在实际编码时也是编码了这些信息。
需要着重说明 2 点 :
(1)  m_uiCUAddr 是一个 LCU 在 slice 中的位置,是 raster 的扫描顺序
HM编码器代码阅读(8)——其他的一些重要的变量和数据结构的说明
(2)  m_uiAbsIdxInLCU 是表明 CU 在 LCU 中的位置,Z 扫描顺序,最小单位为 1,代表      
其中的一个 4x4 子块,Z 扫描顺序如下图所示
HM编码器代码阅读(8)——其他的一些重要的变量和数据结构的说明
2、RDO 时所用到的主要临时变量:
2.1、m_ppcQTTempCoeffY, m_ppcQTTempCoeffCb, m_ppcQTTempCoeffCr: RQT时每层的量化系数,都保存在此,是为了确定最终分割后可以很容易的获取最优值
2.2、m_pcQTTempCoeffY,m_pcQTTempCoeffCb,m_pcQTTempCoeffCr:CU 层的量化系数暂存地,只有帧间编码时才会用到,是中间变量 
2.3、m_pcQTTempTComYuv : 重建视频的暂存缓冲区
2.4、m_puhQTTempCbf: cbf 的暂存
2.4、m_puhQTTempTrIdx:变换层数的暂存
2.5、m_ppcBestCU:存储每层最优(RD代价最小)的CU的信息
2.6、m_ppcTempCU:   存储每层CU的信息的临时变量
2.7、m_ppcPredYuvBest:  存储每层最优的预测值
2.8、m_ppcResiYuvBest:存储每层最优的残差值
2.9、m_ppcRecoYuvBest:存储每层最优的重建值
2.10、m_ppcPredYuvTemp:存储每层预测值的临时变量
2.11、m_ppcResiYuvTemp:存储每层残差值的临时变量
2.12、m_ppcRecoYuvTemp:存储每层重建值的临时变量
2.13、m_ppcOrigYuv: :存储每层对应的原始值
3、yuv 的存储的关系
3.1、TComYuv 数据结构。由 m_apiBufY,m_apiBufU 以及 m_apiBufV 三个 buffer 组成,通用的 yuv数据结构,存储是 yuv 的亮度和色度信息
3.2、TComPicYuv 数据结构。图像层级的 yuv 数据结构,存储的是一帧的 yuv 信息,主要用于 ALF 和去方块滤波等处理的过程中
3.3、TComYuv 的类型的变量存储的是 RDO 时的值,最优的信息要存在 TComPicYuv中,便于输出和进行全局处理