illuminationcompensation.cpp

来自「JMVM MPEG MVC/3DAV 测试平台 国际通用标准」· C++ 代码 · 共 112 行

CPP
112
字号
#include "H264AVCCommonLib.h"
#include "H264AVCCommonLib/IlluminationCompensation.h"


H264AVC_NAMESPACE_BEGIN


/*
 * Class MbIcp
 */

void MbIcp::copyFrom( const MbIcp& cMbIcp )
{
  Icp cIcp = cMbIcp.getIcp(PART_8x8_0);
  m_acIcp[ 0 ] = cIcp;
  m_acIcp[ 1 ] = cIcp;
  m_acIcp[ 4 ] = cIcp;
  m_acIcp[ 5 ] = cIcp;

  cIcp = cMbIcp.getIcp(PART_8x8_1);
  m_acIcp[ 2 ] = cIcp;
  m_acIcp[ 3 ] = cIcp;
  m_acIcp[ 6 ] = cIcp;
  m_acIcp[ 7 ] = cIcp;

  cIcp = cMbIcp.getIcp(PART_8x8_2);
  m_acIcp[ 8 ] = cIcp;
  m_acIcp[ 9 ] = cIcp;
  m_acIcp[ 12 ] = cIcp;
  m_acIcp[ 13 ] = cIcp;

  cIcp = cMbIcp.getIcp(PART_8x8_3);
  m_acIcp[ 10 ] = cIcp;
  m_acIcp[ 11 ] = cIcp;
  m_acIcp[ 14 ] = cIcp;
  m_acIcp[ 15 ] = cIcp;
}


void MbIcp::calcIcOffset16x ( IcpInMs& rsIcpInMs, XPel* pucCur, XPel* pucRef, Int iStride, Int iRows, Int iStartPos )
{
  long offset  = 0;
  const long pels = ( iRows==16 ? 8 : ( iRows==8 ? 7 : 0 ) );

  // FIND OFFSET
  // Compensation for only luminance is considered

  for ( Int i=0; i<iStartPos; i++ )
  {
    pucCur  += MB_BUFFER_WIDTH;
    pucRef  += iStride;
  }

  for (; iRows !=0; iRows--)
  {
    offset += pucCur[0x0] - pucRef[0x0];
    offset += pucCur[0x1] - pucRef[0x1];
    offset += pucCur[0x2] - pucRef[0x2];
    offset += pucCur[0x3] - pucRef[0x3];
    offset += pucCur[0x4] - pucRef[0x4];
    offset += pucCur[0x5] - pucRef[0x5];
    offset += pucCur[0x6] - pucRef[0x6];
    offset += pucCur[0x7] - pucRef[0x7];
    offset += pucCur[0x8] - pucRef[0x8];
    offset += pucCur[0x9] - pucRef[0x9];
    offset += pucCur[0xa] - pucRef[0xa];
    offset += pucCur[0xb] - pucRef[0xb];
    offset += pucCur[0xc] - pucRef[0xc];
    offset += pucCur[0xd] - pucRef[0xd];
    offset += pucCur[0xe] - pucRef[0xe];
    offset += pucCur[0xf] - pucRef[0xf];
    pucCur += MB_BUFFER_WIDTH;
    pucRef += iStride;
  }

  rsIcpInMs.sOffset   = (short)( offset >> pels );
}


void MbIcp::calcIcOffset8x ( IcpInMs& rsIcpInMs, XPel* pucCur, XPel* pucRef, Int iStride, Int iRows, Int iStartPosX, Int iStartPosY )
{
  long offset  = 0;
  const long pels = ( iRows==16 ? 7 : ( iRows==8 ? 6 : 0 ) );

  // FIND OFFSET
  // Compensation for only luminance is considered

  for ( Int i=0; i<iStartPosY; i++ )
  {
    pucCur  += MB_BUFFER_WIDTH;
    pucRef  += iStride;
  }

  for (; iRows !=0; iRows--)
  {
    offset += pucCur[iStartPosX+0x0] - pucRef[iStartPosX+0x0];
    offset += pucCur[iStartPosX+0x1] - pucRef[iStartPosX+0x1];
    offset += pucCur[iStartPosX+0x2] - pucRef[iStartPosX+0x2];
    offset += pucCur[iStartPosX+0x3] - pucRef[iStartPosX+0x3];
    offset += pucCur[iStartPosX+0x4] - pucRef[iStartPosX+0x4];
    offset += pucCur[iStartPosX+0x5] - pucRef[iStartPosX+0x5];
    offset += pucCur[iStartPosX+0x6] - pucRef[iStartPosX+0x6];
    offset += pucCur[iStartPosX+0x7] - pucRef[iStartPosX+0x7];
    pucCur += MB_BUFFER_WIDTH;
    pucRef += iStride;
  }

  rsIcpInMs.sOffset   = (short)( offset >> pels );
}

H264AVC_NAMESPACE_END

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?