本文参考:https://blog.csdn.net/HEVC_CJL/article/details/8175721
函数:fillReferenceSamples()
Void fillReferenceSamples( const Int bitDepth,
#if O0043_BEST_EFFORT_DECODING
const Int bitDepthDelta,
#endif
const Pel* piRoiOrigin,
Pel* piIntraTemp,
const Bool* bNeighborFlags,
const Int iNumIntraNeighbor,
const Int unitWidth,
const Int unitHeight,
const Int iAboveUnits,
const Int iLeftUnits,
const UInt uiWidth,
const UInt uiHeight,
const Int iPicStride )
{
const Pel* piRoiTemp;
Int i, j;
Int iDCValue = 1 << (bitDepth - 1);
const Int iTotalUnits = iAboveUnits + iLeftUnits + 1; //+1 for top-left
//第一种,所有参考数据都不可得。 直接按照1>>(bitDepth-1)赋值 piIntraTemp就是参考像素的指针。
if (iNumIntraNeighbor == 0)
{
// Fill border with DC value
for (i=0; i<uiWidth; i++)
{
piIntraTemp[i] = iDCValue;
}
for (i=1; i<uiHeight; i++)
{
piIntraTemp[i*uiWidth] = iDCValue;
}
}
/*
* 所有参考点都可获得,直接设置为当前CU的参考值。
*/
else if (iNumIntraNeighbor == iTotalUnits)
{
// Fill top-left border and top and top right with rec. samples
piRoiTemp = piRoiOrigin - iPicStride - 1;//左上角边界,其实就是CU左上角的一个点
for (i=0; i<uiWidth; i++)
{
#if O0043_BEST_EFFORT_DECODING
piIntraTemp[i] = piRoiTemp[i] << bitDepthDelta;
#else
piIntraTemp[i] = piRoiTemp[i];
#endif
}
// Fill left and below left border with rec. samples
piRoiTemp = piRoiOrigin - 1;
for (i=1; i<uiHeight; i++)
{
#if O0043_BEST_EFFORT_DECODING
piIntraTemp[i*uiWidth] = (*(piRoiTemp)) << bitDepthDelta;
#else
piIntraTemp[i*uiWidth] = *(piRoiTemp);
#endif
piRoiTemp += iPicStride;
}
}
/*
* 参考像素是部分可获得的情况
*/
//................
疑问:ipicStride这个参数,输入视频是352,单步调试这个数值是512。我认为他应该是输入视频的宽。