📄 intyuvpicbuffer.cpp
字号:
for( x = 0; x < uiWidth; x++ )
{
pDes[x] = gClip( pSrc[x] + ( ( pMCP[x] + pAdd ) >> uiShift ) );
}
pSrc += iSrcStride;
pMCP += iMCPStride;
pDes += iDesStride;
}
return Err::m_nOK;
}
ErrVal IntYuvPicBuffer::clip()
{
m_rcYuvBufferCtrl.initMb();
XPel* pDes = getMbLumAddr();
Int iDesStride = getLStride();
UInt uiHeight = getLHeight();
UInt uiWidth = getLWidth ();
UInt y, x;
//===== luminance =====
for( y = 0; y < uiHeight; y++ )
{
for( x = 0; x < uiWidth; x++ )
{
pDes[x] = gClip( pDes[x] );
}
pDes += iDesStride;
}
//===== chrominance U =====
iDesStride >>= 1;
uiHeight >>= 1;
uiWidth >>= 1;
pDes = getMbCbAddr();
for( y = 0; y < uiHeight; y++ )
{
for( x = 0; x < uiWidth; x++ )
{
pDes[x] = gClip( pDes[x] );
}
pDes += iDesStride;
}
//===== chrominance V =====
pDes = getMbCrAddr();
for( y = 0; y < uiHeight; y++ )
{
for( x = 0; x < uiWidth; x++ )
{
pDes[x] = gClip( pDes[x] );
}
pDes += iDesStride;
}
return Err::m_nOK;
}
ErrVal IntYuvPicBuffer::subtract( IntYuvPicBuffer* pcSrcYuvPicBuffer0,
IntYuvPicBuffer* pcSrcYuvPicBuffer1 )
{
pcSrcYuvPicBuffer0->m_rcYuvBufferCtrl.initMb();
pcSrcYuvPicBuffer1->m_rcYuvBufferCtrl.initMb();
m_rcYuvBufferCtrl.initMb();
XPel* pSrc0 = pcSrcYuvPicBuffer0->getMbLumAddr();
XPel* pSrc1 = pcSrcYuvPicBuffer1->getMbLumAddr();
XPel* pDes = getMbLumAddr();
Int iSrc0Stride = pcSrcYuvPicBuffer0->getLStride();
Int iSrc1Stride = pcSrcYuvPicBuffer1->getLStride();
Int iDesStride = getLStride();
UInt uiHeight = getLHeight();
UInt uiWidth = getLWidth ();
UInt y, x;
//===== luminance =====
for( y = 0; y < uiHeight; y++ )
{
for( x = 0; x < uiWidth; x++ )
{
pDes[x] = pSrc0[x] - pSrc1[x];
}
pSrc0 += iSrc0Stride;
pSrc1 += iSrc1Stride;
pDes += iDesStride;
}
//===== chrominance U =====
iSrc0Stride >>= 1;
iSrc1Stride >>= 1;
iDesStride >>= 1;
uiHeight >>= 1;
uiWidth >>= 1;
pSrc0 = pcSrcYuvPicBuffer0->getMbCbAddr();
pSrc1 = pcSrcYuvPicBuffer1->getMbCbAddr();
pDes = getMbCbAddr();
for( y = 0; y < uiHeight; y++ )
{
for( x = 0; x < uiWidth; x++ )
{
pDes[x] = pSrc0[x] - pSrc1[x];
}
pSrc0 += iSrc0Stride;
pSrc1 += iSrc1Stride;
pDes += iDesStride;
}
//===== chrominance V =====
pSrc0 = pcSrcYuvPicBuffer0->getMbCrAddr();
pSrc1 = pcSrcYuvPicBuffer1->getMbCrAddr();
pDes = getMbCrAddr();
for( y = 0; y < uiHeight; y++ )
{
for( x = 0; x < uiWidth; x++ )
{
pDes[x] = pSrc0[x] - pSrc1[x];
}
pSrc0 += iSrc0Stride;
pSrc1 += iSrc1Stride;
pDes += iDesStride;
}
return Err::m_nOK;
}
ErrVal IntYuvPicBuffer::add( IntYuvPicBuffer* pcSrcYuvPicBuffer )
{
pcSrcYuvPicBuffer->m_rcYuvBufferCtrl.initMb();
m_rcYuvBufferCtrl.initMb();
XPel* pSrc = pcSrcYuvPicBuffer->getMbLumAddr();
XPel* pDes = getMbLumAddr();
Int iSrcStride = pcSrcYuvPicBuffer->getLStride();
Int iDesStride = getLStride();
UInt uiHeight = pcSrcYuvPicBuffer->getLHeight();
UInt uiWidth = pcSrcYuvPicBuffer->getLWidth ();
UInt y, x;
//===== luminance =====
for( y = 0; y < uiHeight; y++ )
{
for( x = 0; x < uiWidth; x++ )
{
pDes[x] += pSrc[x];
}
pSrc += iSrcStride;
pDes += iDesStride;
}
//===== chrominance U =====
iSrcStride >>= 1;
iDesStride >>= 1;
uiHeight >>= 1;
uiWidth >>= 1;
pSrc = pcSrcYuvPicBuffer->getMbCbAddr();
pDes = getMbCbAddr();
for( y = 0; y < uiHeight; y++ )
{
for( x = 0; x < uiWidth; x++ )
{
pDes[x] += pSrc[x];
}
pSrc += iSrcStride;
pDes += iDesStride;
}
//===== chrominance V =====
pSrc = pcSrcYuvPicBuffer->getMbCrAddr();
pDes = getMbCrAddr();
for( y = 0; y < uiHeight; y++ )
{
for( x = 0; x < uiWidth; x++ )
{
pDes[x] += pSrc[x];
}
pSrc += iSrcStride;
pDes += iDesStride;
}
return Err::m_nOK;
}
ErrVal IntYuvPicBuffer::addWeighted( IntYuvPicBuffer* pcSrcYuvPicBuffer,
Double dWeight )
{
pcSrcYuvPicBuffer->m_rcYuvBufferCtrl.initMb();
m_rcYuvBufferCtrl.initMb();
XPel* pSrc = pcSrcYuvPicBuffer->getMbLumAddr();
XPel* pDes = getMbLumAddr();
Int iSrcStride = pcSrcYuvPicBuffer->getLStride();
Int iDesStride = getLStride();
UInt uiHeight = pcSrcYuvPicBuffer->getLHeight();
UInt uiWidth = pcSrcYuvPicBuffer->getLWidth ();
UInt y, x;
Int iWeightT, iWeightS;
iWeightS = (Int) (dWeight * 256 + 0.5);
iWeightT = 256 - iWeightS;
//===== luminance =====
for( y = 0; y < uiHeight; y++ )
{
for( x = 0; x < uiWidth; x++ )
{
pDes[x] = ( pDes[x] * iWeightT + pSrc[x] * iWeightS + 128) >> 8;
// pDes[x] += pSrc[x];
}
pSrc += iSrcStride;
pDes += iDesStride;
}
//===== chrominance U =====
iSrcStride >>= 1;
iDesStride >>= 1;
uiHeight >>= 1;
uiWidth >>= 1;
pSrc = pcSrcYuvPicBuffer->getMbCbAddr();
pDes = getMbCbAddr();
for( y = 0; y < uiHeight; y++ )
{
for( x = 0; x < uiWidth; x++ )
{
pDes[x] = ( pDes[x] * iWeightT + pSrc[x] * iWeightS + 128) >> 8;
// pDes[x] += pSrc[x];
}
pSrc += iSrcStride;
pDes += iDesStride;
}
//===== chrominance V =====
pSrc = pcSrcYuvPicBuffer->getMbCrAddr();
pDes = getMbCrAddr();
for( y = 0; y < uiHeight; y++ )
{
for( x = 0; x < uiWidth; x++ )
{
pDes[x] = ( pDes[x] * iWeightT + pSrc[x] * iWeightS + 128) >> 8;
// pDes[x] += pSrc[x];
}
pSrc += iSrcStride;
pDes += iDesStride;
}
return Err::m_nOK;
}
ErrVal IntYuvPicBuffer::inverseUpdate( IntYuvPicBuffer* pcSrcYuvPicBuffer,
IntYuvPicBuffer* pcMCPYuvPicBuffer,
UInt uiShift )
{
pcSrcYuvPicBuffer->m_rcYuvBufferCtrl.initMb();
pcMCPYuvPicBuffer->m_rcYuvBufferCtrl.initMb();
m_rcYuvBufferCtrl.initMb();
XPel* pSrc = pcSrcYuvPicBuffer->getMbLumAddr();
XPel* pMCP = pcMCPYuvPicBuffer->getMbLumAddr();
XPel* pDes = getMbLumAddr();
Int iSrcStride = pcSrcYuvPicBuffer->getLStride();
Int iMCPStride = pcMCPYuvPicBuffer->getLStride();
Int iDesStride = getLStride();
UInt uiHeight = getLHeight();
UInt uiWidth = getLWidth ();
UInt y, x;
//UInt uiShift = 1;
XPel pAdd = 0;
//===== luminance =====
for( y = 0; y < uiHeight; y++ )
{
for( x = 0; x < uiWidth; x++ )
{
pDes[x] = gClip( pSrc[x] - ( ( pMCP[x] + pAdd ) >> uiShift ) );
}
pSrc += iSrcStride;
pMCP += iMCPStride;
pDes += iDesStride;
}
//===== chrominance U =====
iSrcStride >>= 1;
iMCPStride >>= 1;
iDesStride >>= 1;
uiHeight >>= 1;
uiWidth >>= 1;
pSrc = pcSrcYuvPicBuffer->getMbCbAddr();
pMCP = pcMCPYuvPicBuffer->getMbCbAddr();
pDes = getMbCbAddr();
for( y = 0; y < uiHeight; y++ )
{
for( x = 0; x < uiWidth; x++ )
{
pDes[x] = gClip( pSrc[x] - ( ( pMCP[x] + pAdd ) >> uiShift ) );
}
pSrc += iSrcStride;
pMCP += iMCPStride;
pDes += iDesStride;
}
//===== chrominance V =====
pSrc = pcSrcYuvPicBuffer->getMbCrAddr();
pMCP = pcMCPYuvPicBuffer->getMbCrAddr();
pDes = getMbCrAddr();
for( y = 0; y < uiHeight; y++ )
{
for( x = 0; x < uiWidth; x++ )
{
pDes[x] = gClip( pSrc[x] - ( ( pMCP[x] + pAdd ) >> uiShift ) );
}
pSrc += iSrcStride;
pMCP += iMCPStride;
pDes += iDesStride;
}
return Err::m_nOK;
}
ErrVal IntYuvPicBuffer::inversePrediction( IntYuvPicBuffer* pcSrcYuvPicBuffer,
IntYuvPicBuffer* pcMCPYuvPicBuffer )
{
pcSrcYuvPicBuffer->m_rcYuvBufferCtrl.initMb();
pcMCPYuvPicBuffer->m_rcYuvBufferCtrl.initMb();
m_rcYuvBufferCtrl.initMb();
XPel* pSrc = pcSrcYuvPicBuffer->getMbLumAddr();
XPel* pMCP = pcMCPYuvPicBuffer->getMbLumAddr();
XPel* pDes = getMbLumAddr();
Int iSrcStride = pcSrcYuvPicBuffer->getLStride();
Int iMCPStride = pcMCPYuvPicBuffer->getLStride();
Int iDesStride = getLStride();
UInt uiHeight = getLHeight();
UInt uiWidth = getLWidth ();
UInt y, x;
//===== luminance =====
for( y = 0; y < uiHeight; y++ )
{
for( x = 0; x < uiWidth; x++ )
{
pDes[x] = gClip( pSrc[x] + pMCP[x] );
}
pSrc += iSrcStride;
pMCP += iMCPStride;
pDes += iDesStride;
}
//===== chrominance U =====
iSrcStride >>= 1;
iMCPStride >>= 1;
iDesStride >>= 1;
uiHeight >>= 1;
uiWidth >>= 1;
pSrc = pcSrcYuvPicBuffer->getMbCbAddr();
pMCP = pcMCPYuvPicBuffer->getMbCbAddr();
pDes = getMbCbAddr();
for( y = 0; y < uiHeight; y++ )
{
for( x = 0; x < uiWidth; x++ )
{
pDes[x] = gClip( pSrc[x] + pMCP[x] );
}
pSrc += iSrcStride;
pMCP += iMCPStride;
pDes += iDesStride;
}
//===== chrominance V =====
pSrc = pcSrcYuvPicBuffer->getMbCrAddr();
pMCP = pcMCPYuvPicBuffer->getMbCrAddr();
pDes = getMbCrAddr();
for( y = 0; y < uiHeight; y++ )
{
for( x = 0; x < uiWidth; x++ )
{
pDes[x] = gClip( pSrc[x] + pMCP[x] );
}
pSrc += iSrcStride;
pMCP += iMCPStride;
pDes += iDesStride;
}
return Err::m_nOK;
}
ErrVal IntYuvPicBuffer::copy( IntYuvPicBuffer* pcSrcYuvPicBuffer )
{
pcSrcYuvPicBuffer->m_rcYuvBufferCtrl.initMb();
m_rcYuvBufferCtrl.initMb();
XPel* pSrc = pcSrcYuvPicBuffer->getMbLumAddr();
XPel* pDes = getMbLumAddr();
Int iSrcStride = pcSrcYuvPicBuffer->getLStride();
Int iDesStride = getLStride();
UInt uiHeight = pcSrcYuvPicBuffer->getLHeight();
UInt uiWidth = pcSrcYuvPicBuffer->getLWidth ();
UInt y, x;
//===== luminance =====
for( y = 0; y < uiHeight; y++ )
{
for( x = 0; x < uiWidth; x++ )
{
pDes[x] = pSrc[x];
}
pSrc += iSrcStride;
pDes += iDesStride;
}
//===== chrominance U =====
iSrcStride >>= 1;
iDesStride >>= 1;
uiHeight >>= 1;
uiWidth >>= 1;
pSrc = pcSrcYuvPicBuffer->getMbCbAddr();
pDes = getMbCbAddr();
for( y = 0; y < uiHeight; y++ )
{
for( x = 0; x < uiWidth; x++ )
{
pDes[x] = pSrc[x];
}
pSrc += iSrcStride;
pDes += iDesStride;
}
//===== chrominance V =====
pSrc = pcSrcYuvPicBuffer->getMbCrAddr();
pDes = getMbCrAddr();
for( y = 0; y < uiHeight; y++ )
{
for( x = 0; x < uiWidth; x++ )
{
pDes[x] = pSrc[x];
}
pSrc += iSrcStride;
pDes += iDesStride;
}
return Err::m_nOK;
}
//TMM_EC {{
ErrVal IntYuvPicBuffer::copy( YuvPicBuffer* pcSrcYuvPicBuffer )
{
pcSrcYuvPicBuffer->m_rcYuvBufferCtrl.initMb();
m_rcYuvBufferCtrl.initMb();
Pel* pSrc = pcSrcYuvPicBuffer->getMbLumAddr();
XPel* pDes = getMbLumAddr();
Int iSrcStride = pcSrcYuvPicBuffer->getLStride();
Int iDesStride = getLStride();
UInt uiHeight = pcSrcYuvPicBuffer->getLHeight();
UInt uiWidth = pcSrcYuvPicBuffer->getLWidth ();
UInt y, x;
//===== luminance =====
for( y = 0; y < uiHeight; y++ )
{
for( x = 0; x < uiWidth; x++ )
{
pDes[x] = pSrc[x];
}
pSrc += iSrcStride;
pDes += iDesStride;
}
//===== chrominance U =====
iSrcStride >>= 1;
iDesStride >>= 1;
uiHeight >>= 1;
uiWidth >>= 1;
pSrc = pcSrcYuvPicBuffer->getMbCbAddr();
pDes = getMbCbAddr();
for( y = 0; y < uiHeight; y++ )
{
for( x = 0; x < uiWidth; x++ )
{
pDes[x] = pSrc[x];
}
pSrc += iSrcStride;
pDes += iDesStride;
}
//===== chrominance V =====
pSrc = pcSrcYuvPicBuffer->getMbCrAddr();
pDes = getMbCrAddr();
for( y = 0; y < uiHeight; y++ )
{
for( x = 0; x < uiWidth; x++ )
{
pDes[x] = pSrc[x];
}
pSrc += iSrcStride;
pDes += iDesStride;
}
return Err::m_nOK;
}
//TMM_EC }}
ErrVal IntYuvPicBuffer::copyTo( YuvPicBuffer* pcDesYuvPicBuffer )
{
pcDesYuvPicBuffer->m_rcYuvBufferCtrl.initMb();
m_rcYuvBufferCtrl.initMb();
Pel* pDes = pcDesYuvPicBuffer->getMbLumAddr();
XPel* pSrc = getMbLumAddr();
Int iDesStride = pcDesYuvPicBuffer->getLStride();
Int iSrcStride = getLStride();
UInt uiHeight = pcDesYuvPicBuffer->getLHeight();
UInt uiWidth = pcDesYuvPicBuffer->getLWidth ();
UInt y, x;
//===== luminance =====
for( y = 0; y < uiHeight; y++ )
{
for( x = 0; x < uiWidth; x++ )
{
pDes[x] = (Pel)pSrc[x];
}
pSrc += iSrcStride;
pDes += iDesStride;
}
//===== chrominance U =====
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -