📄 yuvpicbuffer.cpp
字号:
pScr += iSrcStride;
}
pScr = pcYuvMbBuffer->getMbCrAddr();
pDes = getMbCrAddr();
if(bTopIntra)
{
pDes+=4*iDesStride;
pScr+=4*iSrcStride;
}
for( y = 0; y < uiSizeCr; y++ )
{
::memcpy( pDes, pScr, 8* sizeof(XPel) );
pDes += iDesStride,
pScr += iSrcStride;
}
return Err::m_nOK;
}
//TMM_INTERLACE }
//JVT-X046 {
void YuvPicBuffer::setMBZero( UInt uiMBY, UInt uiMBX )
{
m_rcYuvBufferCtrl.initMb(uiMBY,uiMBX,false);
Int iDesStride = getLStride();
XPel* pDes = getMbLumAddr();
UInt y,x;
for ( y = 0; y < 16; y++ )
{
for ( x = 0; x < 16; x++ )
pDes[x] = 0;
pDes += iDesStride;
}
iDesStride >>= 1;
pDes = getMbCbAddr();
for ( y = 0; y < 8; y++ )
{
for ( x = 0; x < 8; x++ )
pDes[x] = 0;
pDes += iDesStride;
}
pDes = getMbCrAddr();
for ( y = 0; y < 8; y++ )
{
for ( x = 0; x < 8; x++)
pDes[x] = 0;
pDes += iDesStride;
}
m_rcYuvBufferCtrl.initMb();
}
ErrVal YuvPicBuffer::predictionSlices(YuvPicBuffer* pcSrcYuvPicBuffer, YuvPicBuffer* pcMCPYuvPicBuffer, UInt uiMbY, UInt uiMbX )
{
pcSrcYuvPicBuffer->m_rcYuvBufferCtrl.initMb(uiMbY,uiMbX,false);
pcMCPYuvPicBuffer->m_rcYuvBufferCtrl.initMb(uiMbY,uiMbX,false);
m_rcYuvBufferCtrl.initMb(uiMbY,uiMbX,false);
XPel* pSrc = pcSrcYuvPicBuffer->getMbLumAddr();
XPel* pMCP = pcMCPYuvPicBuffer->getMbLumAddr();
XPel* pDes = getMbLumAddr();
Int iSrcStride = pcSrcYuvPicBuffer->getLStride();
Int iMCPStride = pcMCPYuvPicBuffer->getLStride();
Int iDesStride = getLStride();
UInt x,y;
//===== luminance =====
for( y = 0; y < 16; y++ )
{
for (x = 0; x < 16; x++)
{
pDes[x] = pSrc[x] - pMCP[x];
}
pSrc += iSrcStride;
pMCP += iMCPStride;
pDes += iDesStride;
}
//===== chrominance U =====
iSrcStride >>= 1;
iMCPStride >>= 1;
iDesStride >>= 1;
pSrc = pcSrcYuvPicBuffer->getMbCbAddr();
pMCP = pcMCPYuvPicBuffer->getMbCbAddr();
pDes = getMbCbAddr();
for( y = 0; y < 8; y++ )
{
for( x = 0; x < 8; x++ )
{
pDes[x] = pSrc[x] - pMCP[x];
}
pSrc += iSrcStride;
pMCP += iMCPStride;
pDes += iDesStride;
}
//===== chrominance V =====
pSrc = pcSrcYuvPicBuffer->getMbCrAddr();
pMCP = pcMCPYuvPicBuffer->getMbCrAddr();
pDes = getMbCrAddr();
for( y = 0; y < 8; y++ )
{
for( x = 0; x < 8; x++ )
{
pDes[x] = pSrc[x] - pMCP[x];
}
pSrc += iSrcStride;
pMCP += iMCPStride;
pDes += iDesStride;
}
return Err::m_nOK;
}
ErrVal YuvPicBuffer::inversepredictionSlices(YuvPicBuffer* pcSrcYuvPicBuffer, YuvPicBuffer* pcMCPYuvPicBuffer, UInt uiMbY, UInt uiMbX )
{
pcSrcYuvPicBuffer->m_rcYuvBufferCtrl.initMb(uiMbY,uiMbX,false);
pcMCPYuvPicBuffer->m_rcYuvBufferCtrl.initMb(uiMbY,uiMbX,false);
m_rcYuvBufferCtrl.initMb(uiMbY,uiMbX,false);
XPel* pSrc = pcSrcYuvPicBuffer->getMbLumAddr();
XPel* pMCP = pcMCPYuvPicBuffer->getMbLumAddr();
XPel* pDes = getMbLumAddr();
Int iSrcStride = pcSrcYuvPicBuffer->getLStride();
Int iMCPStride = pcMCPYuvPicBuffer->getLStride();
Int iDesStride = getLStride();
UInt x,y;
//===== luminance =====
for( y = 0; y < 16; y++ )
{
for (x = 0; x < 16; x++)
{
pDes[x] = pSrc[x] + pMCP[x];
}
pSrc += iSrcStride;
pMCP += iMCPStride;
pDes += iDesStride;
}
//===== chrominance U =====
iSrcStride >>= 1;
iMCPStride >>= 1;
iDesStride >>= 1;
pSrc = pcSrcYuvPicBuffer->getMbCbAddr();
pMCP = pcMCPYuvPicBuffer->getMbCbAddr();
pDes = getMbCbAddr();
for( y = 0; y < 8; y++ )
{
for( x = 0; x < 8; x++ )
{
pDes[x] = pSrc[x] + pMCP[x];
}
pSrc += iSrcStride;
pMCP += iMCPStride;
pDes += iDesStride;
}
//===== chrominance V =====
pSrc = pcSrcYuvPicBuffer->getMbCrAddr();
pMCP = pcMCPYuvPicBuffer->getMbCrAddr();
pDes = getMbCrAddr();
for( y = 0; y < 8; y++ )
{
for( x = 0; x < 8; x++ )
{
pDes[x] = pSrc[x] + pMCP[x];
}
pSrc += iSrcStride;
pMCP += iMCPStride;
pDes += iDesStride;
}
return Err::m_nOK;
}
ErrVal YuvPicBuffer::copyMb(YuvPicBuffer* pcSrcYuvPicBuffer,UInt uiMbY, UInt uiMbX)
{
pcSrcYuvPicBuffer->m_rcYuvBufferCtrl.initMb(uiMbY,uiMbX,false);
m_rcYuvBufferCtrl.initMb(uiMbY,uiMbX,false);
XPel* pSrc = pcSrcYuvPicBuffer->getMbLumAddr();
XPel* pDes = getMbLumAddr();
Int iSrcStride = pcSrcYuvPicBuffer->getLStride();
Int iDesStride = getLStride();
UInt x,y;
//===== luminance =====
for( y = 0; y < 16; y++ )
{
for (x = 0; x < 16; x++)
{
pDes[x] = pSrc[x];
}
pSrc += iSrcStride;
pDes += iDesStride;
}
//===== chrominance U =====
iSrcStride >>= 1;
iDesStride >>= 1;
pSrc = pcSrcYuvPicBuffer->getMbCbAddr();
pDes = getMbCbAddr();
for( y = 0; y < 8; y++ )
{
for( x = 0; x < 8; x++ )
{
pDes[x] = pSrc[x];
}
pSrc += iSrcStride;
pDes += iDesStride;
}
//===== chrominance V =====
pSrc = pcSrcYuvPicBuffer->getMbCrAddr();
pDes = getMbCrAddr();
for( y = 0; y < 8; y++ )
{
for( x = 0; x < 8; x++ )
{
pDes[x] = pSrc[x];
}
pSrc += iSrcStride;
pDes += iDesStride;
}
return Err::m_nOK;
}
//JVT-X046 }
ErrVal YuvPicBuffer::prediction( YuvPicBuffer* pcSrcYuvPicBuffer,
YuvPicBuffer* 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] = 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] = 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] = pSrc[x] - pMCP[x];
}
pSrc += iSrcStride;
pMCP += iMCPStride;
pDes += iDesStride;
}
return Err::m_nOK;
}
ErrVal YuvPicBuffer::update( YuvPicBuffer* pcSrcYuvPicBuffer,
YuvPicBuffer* 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 YuvPicBuffer::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 YuvPicBuffer::subtract( YuvPicBuffer* pcSrcYuvPicBuffer0,
YuvPicBuffer* 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 YuvPicBuffer::add( YuvPicBuffer* 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 =====
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -