版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_28446365/article/details/79894977
二维可分离滤波得垂直梯度
__inline Void TComPrediction::gradFilter2DVer (Pel* piSrc, Int iSrcStride, Int iWidth, Int iHeight, Int iDstStride,
Pel*& rpiDst, Int iMV, const Int iShift)
{
Pel* piDst = rpiDst;
Int iSum =0;
Pel* piSrcTmp = piSrc-BIO_FILTER_HALF_LENGTH_MINUS_1*iSrcStride;
Pel* piSrcTmp1 = piSrcTmp+iSrcStride;
Pel* piSrcTmp2 = piSrcTmp1+iSrcStride;
Pel* piSrcTmp3 = piSrcTmp2+iSrcStride;
Pel* piSrcTmp4 = piSrcTmp3+iSrcStride;
Pel* piSrcTmp5 = piSrcTmp4+iSrcStride;
static const Int iOffSet = iShift>0?(1<<(iShift-1)):0;
for ( Int y = iHeight; y != 0; y-- )
{
for ( Int x = 0; x < iWidth; x++ )
{
iSum = m_lumaGradientFilter[iMV][0]* piSrcTmp[x]
+m_lumaGradientFilter[iMV][1]*piSrcTmp1[x]
+m_lumaGradientFilter[iMV][2]*piSrcTmp2[x]
+m_lumaGradientFilter[iMV][3]*piSrcTmp3[x]
+m_lumaGradientFilter[iMV][4]*piSrcTmp4[x]
+m_lumaGradientFilter[iMV][5]*piSrcTmp5[x];
iSum = (iSum>=0)?((iSum +iOffSet)>>iShift):-(((-iSum +iOffSet)>>iShift));
piDst[x ] = (Pel) (iSum);
}
piSrcTmp+=iSrcStride;
piSrcTmp1+=iSrcStride;
piSrcTmp2+=iSrcStride;
piSrcTmp3+=iSrcStride;
piSrcTmp4+=iSrcStride;
piSrcTmp5+=iSrcStride;
piSrc += iSrcStride;
piDst += iDstStride;
}
return;
}