📄 distortion.cpp
字号:
pucOrg += MB_BUFFER_WIDTH;
pucCur += iStride;
}
return uiSum;
}
UInt XDistortion::xGetYuvSAD16x( XDistSearchStruct* pcDSS )
{
XPel* pucCur = pcDSS->pYSearch;
XPel* pucOrg = pcDSS->pYOrg;
Int iStride = pcDSS->iYStride;
Int iRows = pcDSS->iRows;
UInt uiSumY = 0;
UInt uiSumU = 0;
UInt uiSumV = 0;
for( ; iRows != 0; iRows-- )
{
uiSumY += Abs( pucOrg[0x0] - pucCur[0x0] );
uiSumY += Abs( pucOrg[0x1] - pucCur[0x1] );
uiSumY += Abs( pucOrg[0x2] - pucCur[0x2] );
uiSumY += Abs( pucOrg[0x3] - pucCur[0x3] );
uiSumY += Abs( pucOrg[0x4] - pucCur[0x4] );
uiSumY += Abs( pucOrg[0x5] - pucCur[0x5] );
uiSumY += Abs( pucOrg[0x6] - pucCur[0x6] );
uiSumY += Abs( pucOrg[0x7] - pucCur[0x7] );
uiSumY += Abs( pucOrg[0x8] - pucCur[0x8] );
uiSumY += Abs( pucOrg[0x9] - pucCur[0x9] );
uiSumY += Abs( pucOrg[0xa] - pucCur[0xa] );
uiSumY += Abs( pucOrg[0xb] - pucCur[0xb] );
uiSumY += Abs( pucOrg[0xc] - pucCur[0xc] );
uiSumY += Abs( pucOrg[0xd] - pucCur[0xd] );
uiSumY += Abs( pucOrg[0xe] - pucCur[0xe] );
uiSumY += Abs( pucOrg[0xf] - pucCur[0xf] );
pucOrg += MB_BUFFER_WIDTH;
pucCur += iStride;
}
pucCur = pcDSS->pUSearch;
pucOrg = pcDSS->pUOrg;
iStride = pcDSS->iCStride;
iRows = pcDSS->iRows / 2;
for( ; iRows != 0; iRows-- )
{
uiSumU += Abs( pucOrg[0x0] - pucCur[0x0] );
uiSumU += Abs( pucOrg[0x1] - pucCur[0x1] );
uiSumU += Abs( pucOrg[0x2] - pucCur[0x2] );
uiSumU += Abs( pucOrg[0x3] - pucCur[0x3] );
uiSumU += Abs( pucOrg[0x4] - pucCur[0x4] );
uiSumU += Abs( pucOrg[0x5] - pucCur[0x5] );
uiSumU += Abs( pucOrg[0x6] - pucCur[0x6] );
uiSumU += Abs( pucOrg[0x7] - pucCur[0x7] );
pucOrg += MB_BUFFER_WIDTH;
pucCur += iStride;
}
pucCur = pcDSS->pVSearch;
pucOrg = pcDSS->pVOrg;
iRows = pcDSS->iRows / 2;
for( ; iRows != 0; iRows-- )
{
uiSumV += Abs( pucOrg[0x0] - pucCur[0x0] );
uiSumV += Abs( pucOrg[0x1] - pucCur[0x1] );
uiSumV += Abs( pucOrg[0x2] - pucCur[0x2] );
uiSumV += Abs( pucOrg[0x3] - pucCur[0x3] );
uiSumV += Abs( pucOrg[0x4] - pucCur[0x4] );
uiSumV += Abs( pucOrg[0x5] - pucCur[0x5] );
uiSumV += Abs( pucOrg[0x6] - pucCur[0x6] );
uiSumV += Abs( pucOrg[0x7] - pucCur[0x7] );
pucOrg += MB_BUFFER_WIDTH;
pucCur += iStride;
}
return uiSumY+uiSumU+uiSumV;
}
UInt XDistortion::xGetSSE16x( XDistSearchStruct* pcDSS )
{
XPel* pucCur = pcDSS->pYSearch;
XPel* pucOrg = pcDSS->pYOrg;
Int iStride = pcDSS->iYStride;
Int iRows = pcDSS->iRows;
UInt uiSum = 0;
Int iTemp;
for( ; iRows != 0; iRows-- )
{
iTemp = pucOrg[0x0] - pucCur[0x0];
uiSum += iTemp * iTemp;
iTemp = pucOrg[0x1] - pucCur[0x1];
uiSum += iTemp * iTemp;
iTemp = pucOrg[0x2] - pucCur[0x2];
uiSum += iTemp * iTemp;
iTemp = pucOrg[0x3] - pucCur[0x3];
uiSum += iTemp * iTemp;
iTemp = pucOrg[0x4] - pucCur[0x4];
uiSum += iTemp * iTemp;
iTemp = pucOrg[0x5] - pucCur[0x5];
uiSum += iTemp * iTemp;
iTemp = pucOrg[0x6] - pucCur[0x6];
uiSum += iTemp * iTemp;
iTemp = pucOrg[0x7] - pucCur[0x7];
uiSum += iTemp * iTemp;
iTemp = pucOrg[0x8] - pucCur[0x8];
uiSum += iTemp * iTemp;
iTemp = pucOrg[0x9] - pucCur[0x9];
uiSum += iTemp * iTemp;
iTemp = pucOrg[0xa] - pucCur[0xa];
uiSum += iTemp * iTemp;
iTemp = pucOrg[0xb] - pucCur[0xb];
uiSum += iTemp * iTemp;
iTemp = pucOrg[0xc] - pucCur[0xc];
uiSum += iTemp * iTemp;
iTemp = pucOrg[0xd] - pucCur[0xd];
uiSum += iTemp * iTemp;
iTemp = pucOrg[0xe] - pucCur[0xe];
uiSum += iTemp * iTemp;
iTemp = pucOrg[0xf] - pucCur[0xf];
uiSum += iTemp * iTemp;
pucOrg += MB_BUFFER_WIDTH;
pucCur += iStride;
}
return uiSum;
}
UInt XDistortion::xGetSAD8x( XDistSearchStruct* pcDSS )
{
XPel* pucCur = pcDSS->pYSearch;
XPel* pucOrg = pcDSS->pYOrg;
Int iStride = pcDSS->iYStride;
Int iRows = pcDSS->iRows;
UInt uiSum = 0;
for( ; iRows != 0; iRows-- )
{
uiSum += Abs( pucOrg[0] - pucCur[0] );
uiSum += Abs( pucOrg[1] - pucCur[1] );
uiSum += Abs( pucOrg[2] - pucCur[2] );
uiSum += Abs( pucOrg[3] - pucCur[3] );
uiSum += Abs( pucOrg[4] - pucCur[4] );
uiSum += Abs( pucOrg[5] - pucCur[5] );
uiSum += Abs( pucOrg[6] - pucCur[6] );
uiSum += Abs( pucOrg[7] - pucCur[7] );
pucOrg += MB_BUFFER_WIDTH;
pucCur += iStride;
}
return uiSum;
}
UInt XDistortion::xGetYuvSAD8x( XDistSearchStruct* pcDSS )
{
XPel* pucCur = pcDSS->pYSearch;
XPel* pucOrg = pcDSS->pYOrg;
Int iStride = pcDSS->iYStride;
Int iRows = pcDSS->iRows;
UInt uiSumY = 0;
UInt uiSumU = 0;
UInt uiSumV = 0;
for( ; iRows != 0; iRows-- )
{
uiSumY += Abs( pucOrg[0] - pucCur[0] );
uiSumY += Abs( pucOrg[1] - pucCur[1] );
uiSumY += Abs( pucOrg[2] - pucCur[2] );
uiSumY += Abs( pucOrg[3] - pucCur[3] );
uiSumY += Abs( pucOrg[4] - pucCur[4] );
uiSumY += Abs( pucOrg[5] - pucCur[5] );
uiSumY += Abs( pucOrg[6] - pucCur[6] );
uiSumY += Abs( pucOrg[7] - pucCur[7] );
pucOrg += MB_BUFFER_WIDTH;
pucCur += iStride;
}
pucCur = pcDSS->pUSearch;
pucOrg = pcDSS->pUOrg;
iStride = pcDSS->iCStride;
iRows = pcDSS->iRows / 2;
for( ; iRows != 0; iRows-- )
{
uiSumU += Abs( pucOrg[0] - pucCur[0] );
uiSumU += Abs( pucOrg[1] - pucCur[1] );
uiSumU += Abs( pucOrg[2] - pucCur[2] );
uiSumU += Abs( pucOrg[3] - pucCur[3] );
pucOrg += MB_BUFFER_WIDTH;
pucCur += iStride;
}
pucCur = pcDSS->pVSearch;
pucOrg = pcDSS->pVOrg;
iRows = pcDSS->iRows / 2;
for( ; iRows != 0; iRows-- )
{
uiSumV += Abs( pucOrg[0] - pucCur[0] );
uiSumV += Abs( pucOrg[1] - pucCur[1] );
uiSumV += Abs( pucOrg[2] - pucCur[2] );
uiSumV += Abs( pucOrg[3] - pucCur[3] );
pucOrg += MB_BUFFER_WIDTH;
pucCur += iStride;
}
return uiSumY+uiSumU+uiSumV;
}
UInt XDistortion::xGetSSE8x( XDistSearchStruct* pcDSS )
{
XPel* pucCur = pcDSS->pYSearch;
XPel* pucOrg = pcDSS->pYOrg;
Int iStride = pcDSS->iYStride;
Int iRows = pcDSS->iRows;
UInt uiSum = 0;
Int iTemp;
for( ; iRows != 0; iRows-- )
{
iTemp = pucOrg[0] - pucCur[0];
uiSum += iTemp * iTemp;
iTemp = pucOrg[1] - pucCur[1];
uiSum += iTemp * iTemp;
iTemp = pucOrg[2] - pucCur[2];
uiSum += iTemp * iTemp;
iTemp = pucOrg[3] - pucCur[3];
uiSum += iTemp * iTemp;
iTemp = pucOrg[4] - pucCur[4];
uiSum += iTemp * iTemp;
iTemp = pucOrg[5] - pucCur[5];
uiSum += iTemp * iTemp;
iTemp = pucOrg[6] - pucCur[6];
uiSum += iTemp * iTemp;
iTemp = pucOrg[7] - pucCur[7];
uiSum += iTemp * iTemp;
pucOrg += MB_BUFFER_WIDTH;
pucCur += iStride;
}
return uiSum;
}
UInt XDistortion::xGetSAD4x( XDistSearchStruct* pcDSS )
{
XPel* pucCur = pcDSS->pYSearch;
XPel* pucOrg = pcDSS->pYOrg;
Int iStride = pcDSS->iYStride;
Int iRows = pcDSS->iRows;
UInt uiSum = 0;
for( ; iRows != 0; iRows-- )
{
uiSum += Abs( pucOrg[0] - pucCur[0] );
uiSum += Abs( pucOrg[1] - pucCur[1] );
uiSum += Abs( pucOrg[2] - pucCur[2] );
uiSum += Abs( pucOrg[3] - pucCur[3] );
pucOrg += MB_BUFFER_WIDTH;
pucCur += iStride;
}
return uiSum;
}
UInt XDistortion::xGetYuvSAD4x( XDistSearchStruct* pcDSS )
{
XPel* pucCur = pcDSS->pYSearch;
XPel* pucOrg = pcDSS->pYOrg;
Int iStride = pcDSS->iYStride;
Int iRows = pcDSS->iRows;
UInt uiSumY = 0;
UInt uiSumU = 0;
UInt uiSumV = 0;
for( ; iRows != 0; iRows-- )
{
uiSumY += Abs( pucOrg[0] - pucCur[0] );
uiSumY += Abs( pucOrg[1] - pucCur[1] );
uiSumY += Abs( pucOrg[2] - pucCur[2] );
uiSumY += Abs( pucOrg[3] - pucCur[3] );
pucOrg += MB_BUFFER_WIDTH;
pucCur += iStride;
}
pucCur = pcDSS->pUSearch;
pucOrg = pcDSS->pUOrg;
iStride = pcDSS->iCStride;
iRows = pcDSS->iRows / 2;
for( ; iRows != 0; iRows-- )
{
uiSumU += Abs( pucOrg[0] - pucCur[0] );
uiSumU += Abs( pucOrg[1] - pucCur[1] );
pucOrg += MB_BUFFER_WIDTH;
pucCur += iStride;
}
pucCur = pcDSS->pVSearch;
pucOrg = pcDSS->pVOrg;
iRows = pcDSS->iRows / 2;
for( ; iRows != 0; iRows-- )
{
uiSumV += Abs( pucOrg[0] - pucCur[0] );
uiSumV += Abs( pucOrg[1] - pucCur[1] );
pucOrg += MB_BUFFER_WIDTH;
pucCur += iStride;
}
return uiSumY+uiSumU+uiSumV;
}
UInt XDistortion::xGetSSE4x( XDistSearchStruct* pcDSS )
{
XPel* pucCur = pcDSS->pYSearch;
XPel* pucOrg = pcDSS->pYOrg;
Int iStride = pcDSS->iYStride;
Int iRows = pcDSS->iRows;
UInt uiSum = 0;
Int iTemp;
for( ; iRows != 0; iRows-- )
{
iTemp = pucOrg[0] - pucCur[0];
uiSum += iTemp * iTemp;
iTemp = pucOrg[1] - pucCur[1];
uiSum += iTemp * iTemp;
iTemp = pucOrg[2] - pucCur[2];
uiSum += iTemp * iTemp;
iTemp = pucOrg[3] - pucCur[3];
uiSum += iTemp * iTemp;
pucOrg += MB_BUFFER_WIDTH;
pucCur += iStride;
}
return uiSum;
}
UInt XDistortion::xGetHAD16x ( XDistSearchStruct* pcDSS )
{
XPel* pucCur = pcDSS->pYSearch;
XPel* pucOrg = pcDSS->pYOrg;
Int iStride = pcDSS->iYStride;
Int iRows = pcDSS->iRows>>2;
UInt uiSum = 0;
for( ; iRows != 0; iRows-- )
{
uiSum += xCalcHadamard4x4( pucOrg+0x0, pucCur+0x0, iStride );
uiSum += xCalcHadamard4x4( pucOrg+0x4, pucCur+0x4, iStride );
uiSum += xCalcHadamard4x4( pucOrg+0x8, pucCur+0x8, iStride );
uiSum += xCalcHadamard4x4( pucOrg+0xc, pucCur+0xc, iStride );
pucOrg += 4*MB_BUFFER_WIDTH;
pucCur += 4*iStride;
}
return uiSum;
}
UInt XDistortion::xGetHAD8x ( XDistSearchStruct* pcDSS )
{
XPel* pucCur = pcDSS->pYSearch;
XPel* pucOrg = pcDSS->pYOrg;
Int iStride = pcDSS->iYStride;
Int iRows = pcDSS->iRows>>2;
UInt uiSum = 0;
for( ; iRows != 0; iRows-- )
{
uiSum += xCalcHadamard4x4( pucOrg+0x0, pucCur+0x0, iStride );
uiSum += xCalcHadamard4x4( pucOrg+0x4, pucCur+0x4, iStride );
pucOrg += 4*MB_BUFFER_WIDTH;
pucCur += 4*iStride;
}
return uiSum;
}
UInt XDistortion::xGetHAD4x ( XDistSearchStruct* pcDSS )
{
XPel* pucCur = pcDSS->pYSearch;
XPel* pucOrg = pcDSS->pYOrg;
Int iStride = pcDSS->iYStride;
Int iRows = pcDSS->iRows>>2;
UInt uiSum = 0;
for( ; iRows != 0; iRows-- )
{
uiSum += xCalcHadamard4x4( pucOrg+0x0, pucCur+0x0, iStride );
pucOrg += 4*MB_BUFFER_WIDTH;
pucCur += 4*iStride;
}
return uiSum;
}
UInt XDistortion::xGetBiSAD16x( XDistSearchStruct* pcDSS )
{
XPel* pucSrc1 = pcDSS->pYSearch;
XPel* pucSrc2 = pcDSS->pYFix;
XPel* pucOrg = pcDSS->pYOrg;
Int iStride = pcDSS->iYStride;
Int iRows = pcDSS->iRows;
UInt x;
UInt uiSum = 0;
UInt uiOffset1 = 0;
UInt uiOffset2 = 0;
iStride -= 16;
for( ; iRows != 0; iRows-- )
{
for( x = 16; x != 0; x-- )
{
uiSum += Abs( pucOrg[uiOffset1] - ((pucSrc1[uiOffset2] + pucSrc2[uiOffset1] + 1) >> 1) );
uiOffset1++;
uiOffset2++;
}
uiOffset1 += MB_BUFFER_WIDTH-16;
uiOffset2 += iStride;
}
return uiSum;
}
UInt XDistortion::xGetBiYuvSAD16x( XDistSearchStruct* pcDSS )
{
UInt x;
XPel* pucSrc1 = pcDSS->pYSearch;
XPel* pucSrc2 = pcDSS->pYFix;
XPel* pucOrg = pcDSS->pYOrg;
Int iStride = pcDSS->iYStride - 16;
Int iRows = pcDSS->iRows;
UInt uiSumY = 0;
UInt uiSumU = 0;
UInt uiSumV = 0;
UInt uiOffset1 = 0;
UInt uiOffset2 = 0;
for( ; iRows != 0; iRows-- )
{
for( x = 16; x != 0; x-- )
{
uiSumY += Abs( pucOrg[uiOffset1] - ((pucSrc1[uiOffset2] + pucSrc2[uiOffset1] + 1) >> 1) );
uiOffset1++;
uiOffset2++;
}
uiOffset1 += MB_BUFFER_WIDTH-16;
uiOffset2 += iStride;
}
pucSrc1 = pcDSS->pUSearch;
pucSrc2 = pcDSS->pUFix;
pucOrg = pcDSS->pUOrg;
iStride = pcDSS->iCStride - 8;
iRows = pcDSS->iRows / 2;
uiOffset1 = 0;
uiOffset2 = 0;
for( ; iRows != 0; iRows-- )
{
for( x = 8; x != 0; x-- )
{
uiSumU += Abs( pucOrg[uiOffset1] - ((pucSrc1[uiOffset2] + pucSrc2[uiOffset1] + 1) >> 1) );
uiOffset1++;
uiOffset2++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -