⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 distortion.cpp

📁 JVT-Z203_jsvm.rar
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    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 + -