Void TComPicYuv::create ( const Int picWidth, ///< picture width
const Int picHeight, ///< picture height
const ChromaFormat chromaFormatIDC, ///< chroma format
const UInt maxCUWidth, ///< used for generating offsets to CUs.
const UInt maxCUHeight, ///< used for generating offsets to CUs.
const UInt maxCUDepth, ///< used for generating offsets to CUs.
const Bool bUseMargin) ///< if true, then a margin of uiMaxCUWidth+16 and uiMaxCUHeight+16 is created around the image.
{
createWithoutCUInfo(picWidth, picHeight, chromaFormatIDC, bUseMargin, maxCUWidth, maxCUHeight);
const Int numCuInWidth = m_picWidth / maxCUWidth + (m_picWidth % maxCUWidth != 0);//一幅圖像中,一行分成的塊數
const Int numCuInHeight = m_picHeight / maxCUHeight + (m_picHeight % maxCUHeight != 0);//一幅圖像中,一列分成的塊數
for(Int chan=0; chan<MAX_NUM_CHANNEL_TYPE; chan++)
{
const ChannelType ch= ChannelType(chan);
const Int ctuHeight = maxCUHeight>>getChannelTypeScaleY(ch);
const Int ctuWidth = maxCUWidth>>getChannelTypeScaleX(ch);
const Int stride = getStride(ch);
m_ctuOffsetInBuffer[chan] = new Int[numCuInWidth * numCuInHeight];
for (Int cuRow = 0; cuRow < numCuInHeight; cuRow++)
{
for (Int cuCol = 0; cuCol < numCuInWidth; cuCol++)
{
m_ctuOffsetInBuffer[chan][cuRow * numCuInWidth + cuCol] = stride * cuRow * ctuHeight + cuCol * ctuWidth;//CU按Z形掃描的位置
}
}
m_subCuOffsetInBuffer[chan] = new Int[(size_t)1 << (2 * maxCUDepth)];
const Int numSubBlockPartitions=(1<<maxCUDepth);
const Int minSubBlockHeight =(ctuHeight >> maxCUDepth);
const Int minSubBlockWidth =(ctuWidth >> maxCUDepth);
for (Int buRow = 0; buRow < numSubBlockPartitions; buRow++)
{
for (Int buCol = 0; buCol < numSubBlockPartitions; buCol++)
{
m_subCuOffsetInBuffer[chan][(buRow << maxCUDepth) + buCol] = stride * buRow * minSubBlockHeight + buCol * minSubBlockWidth;
}
}
}
}
Void TComPicYuv::create
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.