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 + -
显示快捷键?