参考8.4.4.2.3,博客http://blog.csdn.net/hevc_cjl/article/details/8184276写的很详细了,可以看看
Void TComPattern::initAdiPattern( TComDataCU* pcCU, //当前待处理的CU
UInt uiZorderIdxInPart, //当前待处理的PU相对于pcCU的位置,以4*4块为单位
UInt uiPartDepth, //当前PU的深度(相对于当前的CU),非0即1
Int* piAdiBuf, //其指向的空间是为了存储预测数据,这里只是使用上一行,左一列来存储参考点的数据
Int iOrgBufStride, //m_iYuvExtStride = ((MAX_CU_SIZE + 8) << 4);为什么??
Int iOrgBufHeight, //m_iYuvExtHeight = ((MAX_CU_SIZE + 2) << 4);为什么??
Bool& bAbove, //指示上面块可否使用,根据代码调试的过程看,这个是为了计算均值时使用的一个标记
Bool& bLeft, //指示左面块可否使用,同上
Bool bLMmode ) // using for LM chroma or not(暂时不清楚啥意思)
{
Pel* piRoiOrigin;//指向原始数据
Int* piAdiTemp;
//当前PU的尺寸:先计算当前CU的尺寸,在根据uiPartDepth计算
UInt uiCuWidth = pcCU->getWidth(0) >> uiPartDepth;
UInt uiCuHeight = pcCU->getHeight(0)>> uiPartDepth;
//参考点水平和竖直方向上的个数(比当前PU的尺寸大一倍)
UInt uiCuWidth2 = uiCuWidth<<1;
UInt uiCuHeight2 = uiCuHeight<<1;
UInt uiWidth;
UInt uiHeight;
//当前图像的跨度(比图像的宽稍微大点)
Int iPicStride = pcCU->getPic()->getStride();
Int iUnitSiz