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

📄 yuvpicbuffer.cpp

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