HM代码中有两个类用来保存YUV数据。分别在TComPicYuv.h和TComYuv.h中
- TComYuv
class TComYuv
{
Pel* m_apiBuf[MAX_NUM_COMPONENT];
UInt m_iWidth;
UInt m_iHeight;
Pel* getAddr(const ComponentID id)
// Get stride value of YUV buffer
UInt getStride (const ComponentID id) const { return m_iWidth >> getComponentScaleX(id); }
}
getAddr()用于获取保存yuv数据的数组的起始地址;getStride()用于获取每个分量的宽度步长,一般用在读取YUV数据和复制YUV数据中。
- TComPicYuv 保存Pic level YUV数据的类
class TComPicYuv
{
private:
Pel* m_apiPicBuf[MAX_NUM_COMPONENT];
Pel* m_piPicOrg[MAX_NUM_COMPONENT];
Int m_picWidth;
Int m_picHeight;
public:
Pel* getAddr (const ComponentID ch) { return m_piPicOrg[ch]; }
Int getStride (const ComponentID id) const { return ((m_picWidth ) + (m_marginX <<1)) >> getComponentScaleX(id); }
}
同样有两个队YUV对象比较重要的函数:getAddr()和getStride()
当前的intra 码率控制使用了YUV数据中的Y分量,经过累加的8*8Hardama变换,得到每个CTU的complexity。可以借鉴这个,来获取每个CTUY分量的原始值。