参见Void TComPicYuv::create(……)函数中的几句代码:
m_apiPicBufY = (Pel*)xMalloc( Pel, ( m_iPicWidth + (m_iLumaMarginX <<1)) * ( m_iPicHeight + (m_iLumaMarginY <<1)));
m_apiPicBufU = (Pel*)xMalloc( Pel, ((m_iPicWidth >> 1) + (m_iChromaMarginX<<1)) * ((m_iPicHeight >> 1) + (m_iChromaMarginY<<1)));
m_apiPicBufV = (Pel*)xMalloc( Pel, ((m_iPicWidth >> 1) + (m_iChromaMarginX<<1)) * ((m_iPicHeight >> 1) + (m_iChromaMarginY<<1)))
m_piPicOrgY = m_apiPicBufY + m_iLumaMarginY * getStride() + m_iLumaMarginX;
m_piPicOrgU = m_apiPicBufU + m_iChromaMarginY * getCStride() + m_iChromaMarginX;
m_piPicOrgV = m_apiPicBufV + m_iChromaMarginY * getCStride() + m_iChromaMarginX;
可知,m_apiPicBufY 向系统申请了m_iPicHeight + (m_iLumaMarginY <<1) 行 、m_iPicWidth + (m_iLumaMarginX <<1) 列的像素空间,m_iPicWidth 和 m_iPicHeight 自然是图像的宽高,m_iLumaMarginY 和 m_iLumaMarginX 则是图像边缘 padding 的大小。而 m_piPicOrgY 与 m_apiPicBufY 有一定的区别,m_apiPicBufY 包含 padding ,而 m_piPicOrgY 不包含 padding,因此就有了 m_piPicOrgY 的计算公式,计算过程考虑了padding带来的偏移。
padding 的作用大概是 使插值滤波器在计算图像边界插值点处也能正常工作。