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

📄 mcpad.cpp

📁 完整的RTP RTSP代码库
💻 CPP
📖 第 1 页 / 共 3 页
字号:
        ppxlcMBA++;      }    }}Void CVideoObject::mcPadCurrMBFromLeft (PixelC* ppxlcMBY,                                        PixelC* ppxlcMBU,                                        PixelC* ppxlcMBV,                                        PixelC** pppxlcMBA){	UInt iy;	for (iy = 0; iy < BLOCK_SIZE; iy++) {		pxlcmemset (ppxlcMBY, *(ppxlcMBY - 1), MB_SIZE);		pxlcmemset (ppxlcMBU, *(ppxlcMBU - 1), BLOCK_SIZE);		pxlcmemset (ppxlcMBV, *(ppxlcMBV - 1), BLOCK_SIZE);		ppxlcMBY += m_iFrameWidthY;		ppxlcMBU += m_iFrameWidthUV;		ppxlcMBV += m_iFrameWidthUV;			pxlcmemset (ppxlcMBY, *(ppxlcMBY - 1), MB_SIZE);		ppxlcMBY += m_iFrameWidthY;	}  if(m_volmd.fAUsage == EIGHT_BIT)    for(Int iAuxComp=0;iAuxComp<m_volmd.iAuxCompCount;iAuxComp++) { // MAC (SB) 29-Nov-99      PixelC* ppxlcMBA = pppxlcMBA[iAuxComp];      for (iy = 0; iy < BLOCK_SIZE; iy++) {        pxlcmemset (ppxlcMBA, *(ppxlcMBA - 1), MB_SIZE);        ppxlcMBA += m_iFrameWidthY;        pxlcmemset (ppxlcMBA, *(ppxlcMBA - 1), MB_SIZE);        ppxlcMBA += m_iFrameWidthY;      }    }}Void CVideoObject::mcPadCurrMBFromTop (PixelC* ppxlcMBY, PixelC* ppxlcMBU, PixelC* ppxlcMBV, PixelC** pppxlcMBA){	UInt ix, iy;	for (ix = 0; ix < MB_SIZE; ix++) {		PixelC* ppxlcYCol = ppxlcMBY;		PixelC pxlcY = *(ppxlcMBY - m_iFrameWidthY);		for (iy = 0; iy < MB_SIZE; iy++) {			*ppxlcYCol = pxlcY;			ppxlcYCol += m_iFrameWidthY;		}		ppxlcMBY++;	}	for (ix = 0; ix < BLOCK_SIZE; ix++) {		PixelC* ppxlcUCol = ppxlcMBU;		PixelC* ppxlcVCol = ppxlcMBV;		PixelC pxlcU = *(ppxlcMBU - m_iFrameWidthUV);		PixelC pxlcV = *(ppxlcMBV - m_iFrameWidthUV);		for (iy = 0; iy < BLOCK_SIZE; iy++) {			*ppxlcUCol = pxlcU;			*ppxlcVCol = pxlcV;			ppxlcUCol += m_iFrameWidthUV;			ppxlcVCol += m_iFrameWidthUV;		}		ppxlcMBU++;		ppxlcMBV++;	}	if(m_volmd.fAUsage == EIGHT_BIT)    for(Int iAuxComp=0;iAuxComp<m_volmd.iAuxCompCount;iAuxComp++) { // MAC (SB) 29-Nov-99      PixelC* ppxlcMBA = pppxlcMBA[iAuxComp];      for (ix = 0; ix < MB_SIZE; ix++) {        PixelC* ppxlcACol = ppxlcMBA;        PixelC pxlcA = *(ppxlcMBA - m_iFrameWidthY);        for (iy = 0; iy < MB_SIZE; iy++) {          *ppxlcACol = pxlcA;          ppxlcACol += m_iFrameWidthY;        }        ppxlcMBA++;      }    }}Void CVideoObject::mcSetTopMBGray (PixelC* ppxlcMBY, PixelC* ppxlcMBU, PixelC* ppxlcMBV, PixelC** pppxlcMBA){	PixelC pxlcGrayVal = 128;	if(m_volmd.bNot8Bit)		pxlcGrayVal = 1<<(m_volmd.nBits-1);	UInt iy;	for (iy = 0; iy < BLOCK_SIZE; iy++) {		ppxlcMBY -= m_iFrameWidthY;		ppxlcMBU -= m_iFrameWidthUV;		ppxlcMBV -= m_iFrameWidthUV;		pxlcmemset (ppxlcMBY, pxlcGrayVal, MB_SIZE);		pxlcmemset (ppxlcMBU, pxlcGrayVal, BLOCK_SIZE);		pxlcmemset (ppxlcMBV, pxlcGrayVal, BLOCK_SIZE);		ppxlcMBY -= m_iFrameWidthY;		pxlcmemset (ppxlcMBY, pxlcGrayVal, MB_SIZE);	}	if(m_volmd.fAUsage == EIGHT_BIT)    for(Int iAuxComp=0;iAuxComp<m_volmd.iAuxCompCount;iAuxComp++) { // MAC (SB) 29-Nov-99      PixelC* ppxlcMBA = pppxlcMBA[iAuxComp];      for (iy = 0; iy < BLOCK_SIZE; iy++) {        ppxlcMBA -= m_iFrameWidthY;        pxlcmemset (ppxlcMBA, pxlcGrayVal, MB_SIZE);        ppxlcMBA -= m_iFrameWidthY;        pxlcmemset (ppxlcMBA, pxlcGrayVal, MB_SIZE);      }    }}Void CVideoObject::mcSetLeftMBGray (PixelC* ppxlcMBY, PixelC* ppxlcMBU, PixelC* ppxlcMBV, PixelC** pppxlcMBA){  PixelC** pppxlcMBA_tmp = new PixelC* [m_volmd.iAuxCompCount];  for(Int iAuxComp=0;iAuxComp<m_volmd.iAuxCompCount;iAuxComp++) // MAC (SB) 29-Nov-99    pppxlcMBA_tmp[iAuxComp] = pppxlcMBA[iAuxComp]-MB_SIZE;	mcSetCurrMBGray(		ppxlcMBY-MB_SIZE,		ppxlcMBU-BLOCK_SIZE,		ppxlcMBV-BLOCK_SIZE,		(m_volmd.fAUsage == EIGHT_BIT) ? pppxlcMBA_tmp : (PixelC **)NULL	);  delete [] pppxlcMBA_tmp;}Void CVideoObject::mcSetCurrMBGray (PixelC* ppxlcMBY, PixelC* ppxlcMBU, PixelC* ppxlcMBV, PixelC** pppxlcMBA){	PixelC pxlcGrayVal = 128;	if(m_volmd.bNot8Bit)		pxlcGrayVal = 1<<(m_volmd.nBits-1);	UInt iy;	for (iy = 0; iy < BLOCK_SIZE; iy++) {		pxlcmemset (ppxlcMBY, pxlcGrayVal, MB_SIZE);		pxlcmemset (ppxlcMBU, pxlcGrayVal, BLOCK_SIZE);		pxlcmemset (ppxlcMBV, pxlcGrayVal, BLOCK_SIZE);		ppxlcMBY += m_iFrameWidthY;		ppxlcMBU += m_iFrameWidthUV;		ppxlcMBV += m_iFrameWidthUV;		pxlcmemset (ppxlcMBY, pxlcGrayVal, MB_SIZE);		ppxlcMBY += m_iFrameWidthY;	}	if(m_volmd.fAUsage == EIGHT_BIT)    for(Int iAuxComp=0;iAuxComp<m_volmd.iAuxCompCount;iAuxComp++) { // MAC (SB) 29-Nov-99      PixelC* ppxlcMBA = pppxlcMBA[iAuxComp];      for (iy = 0; iy < BLOCK_SIZE; iy++) {        pxlcmemset (ppxlcMBA, pxlcGrayVal, MB_SIZE);        ppxlcMBA += m_iFrameWidthY;        pxlcmemset (ppxlcMBA, pxlcGrayVal, MB_SIZE);        ppxlcMBA += m_iFrameWidthY;      }    }}// Added for field based MC padding by Hyundai(1998-5-9)Void CVideoObject::fieldBasedMCPadding (CMBMode* pmbmd, CVOPU8YUVBA* pvopcCurrQ){  Int     iMBX, iMBY;    PixelC* ppxlcCurrY  = (PixelC*) pvopcCurrQ->pixelsY () + m_iStartInRefToCurrRctY;  PixelC* ppxlcCurrU  = (PixelC*) pvopcCurrQ->pixelsU () + m_iStartInRefToCurrRctUV;  PixelC* ppxlcCurrV  = (PixelC*) pvopcCurrQ->pixelsV () + m_iStartInRefToCurrRctUV;  PixelC* ppxlcCurrBY = (PixelC*) pvopcCurrQ->pixelsBY () + m_iStartInRefToCurrRctY;  PixelC* ppxlcCurrBUV = (PixelC*) pvopcCurrQ->pixelsBUV () + m_iStartInRefToCurrRctUV;  // 12.22.98 begin of changes	PixelC** pppxlcCurrMBA = NULL;  if (m_volmd.fAUsage == EIGHT_BIT) {    pppxlcCurrMBA = new PixelC* [m_volmd.iAuxCompCount];  }   // 12.22.98 end of changes  for (iMBY = 0; iMBY < m_iNumMBY; iMBY++) {    PixelC* ppxlcCurrMBY  = ppxlcCurrY;    PixelC* ppxlcCurrMBU  = ppxlcCurrU;    PixelC* ppxlcCurrMBV  = ppxlcCurrV;    PixelC* ppxlcCurrMBBY = ppxlcCurrBY;    PixelC* ppxlcCurrMBBUV = ppxlcCurrBUV;//    PixelC* ppxlcCurrMBA;    // 12.22.98 begin of changes//    if (m_volmd.fAUsage == EIGHT_BIT)//      ppxlcCurrMBA  = ppxlcCurrA;     // 12.22.98 end of changes    for (iMBX = 0; iMBX < m_iNumMBX; iMBX++) {      memset(pmbmd->m_rgbFieldPadded, 0, 5*sizeof(Bool));      fieldBasedDownSampleBY (ppxlcCurrMBBY, ppxlcCurrMBBUV);      decideFieldTransparencyStatus (pmbmd, ppxlcCurrMBBY, ppxlcCurrMBBUV);      for(Int iAuxComp=0;iAuxComp<m_volmd.iAuxCompCount;iAuxComp++) { // MAC (SB) 29-Nov-99        pppxlcCurrMBA[iAuxComp] = (PixelC*) pvopcCurrQ->pixelsA (iAuxComp) + m_iStartInRefToCurrRctY;        pppxlcCurrMBA[iAuxComp] += MB_SIZE * iMBX + m_iFrameWidthYxMBSize * iMBY;      }      mcPadCurrAndNeighborsMBFields (iMBX, iMBY, pmbmd, ppxlcCurrMBY, ppxlcCurrMBU, ppxlcCurrMBV, ppxlcCurrMBBY, ppxlcCurrMBBUV,pppxlcCurrMBA);      ppxlcCurrMBY += MB_SIZE;      ppxlcCurrMBU += BLOCK_SIZE;      ppxlcCurrMBV += BLOCK_SIZE;      ppxlcCurrMBBY += MB_SIZE;      ppxlcCurrMBBUV += BLOCK_SIZE;      // 12.22.98 begin of changes//      if (m_volmd.fAUsage == EIGHT_BIT)//        ppxlcCurrMBA  += MB_SIZE;       // 12.22.98 end of changes      pmbmd++;    }    ppxlcCurrY += m_iFrameWidthYxMBSize;    ppxlcCurrU += m_iFrameWidthUVxBlkSize;    ppxlcCurrV += m_iFrameWidthUVxBlkSize;    ppxlcCurrBY += m_iFrameWidthYxMBSize;    ppxlcCurrBUV += m_iFrameWidthUVxBlkSize;    // 12.22.98 begin of changes//    if (m_volmd.fAUsage == EIGHT_BIT)//      ppxlcCurrA  += m_iFrameWidthYxMBSize;     // 12.22.98 end of changes  }  if (m_volmd.fAUsage == EIGHT_BIT) {    delete [] pppxlcCurrMBA;  } }Void CVideoObject::mcPadCurrAndNeighborsMBFields (        Int     iMBX,        Int     iMBY,        CMBMode *pmbmd,        PixelC* ppxlcRefMBY,        PixelC* ppxlcRefMBU,        PixelC* ppxlcRefMBV,        PixelC* ppxlcRefMBBY,        PixelC* ppxlcRefMBBUV,		    PixelC** pppxlcRefMBA){  // 2.9.99 begin of changes.  X. Chen, 		if (m_volmd.fAUsage == EIGHT_BIT) {      for(Int iAuxComp=0;iAuxComp<m_volmd.iAuxCompCount;iAuxComp++)  // MAC (SB) 29-Nov-99        mcPadFieldsCurr (iMBX, iMBY, pmbmd, MB_FIELDY, ppxlcRefMBY, pppxlcRefMBA[iAuxComp], ppxlcRefMBBY, MB_SIZE, m_iFrameWidthY);    } else      // 2.9.99 end of changes      mcPadFieldsCurr (iMBX, iMBY, pmbmd, MB_FIELDY, ppxlcRefMBY, NULL, ppxlcRefMBBY, MB_SIZE, m_iFrameWidthY);    mcPadFieldsCurr (iMBX, iMBY, pmbmd, MB_FIELDC, ppxlcRefMBU, ppxlcRefMBV, ppxlcRefMBBUV, BLOCK_SIZE, m_iFrameWidthUV);}Void CVideoObject::mcPadFieldsCurr (        Int     iMBX,        Int     iMBY,        CMBMode *pmbmd,        Int     mode,        PixelC  *ppxlcCurrMB1,        PixelC  *ppxlcCurrMB2,        PixelC  *ppxlcCurrMBB,        Int     uiBlkXSize,        Int     uiStride){        PixelC  *ppxlcCurrTopField1 = ppxlcCurrMB1,                *ppxlcCurrBotField1 = ppxlcCurrMB1 + uiStride,                *ppxlcCurrTopField2 = ((ppxlcCurrMB2) ? ppxlcCurrMB2 : NULL),                *ppxlcCurrBotField2 = ((ppxlcCurrMB2) ? ppxlcCurrMB2 + uiStride : NULL),                *ppxlcCurrTopFieldB = ppxlcCurrMBB,                *ppxlcCurrBotFieldB = ppxlcCurrMBB + uiStride;         if (pmbmd->m_rgFieldTranspStatus [mode] != ALL) {       // Top Field MC Padding                if (pmbmd->m_rgFieldTranspStatus [mode] == PARTIAL) {                        mcPadOneField (ppxlcCurrTopField1, ppxlcCurrTopFieldB, uiBlkXSize, uiStride);                        if (ppxlcCurrTopField2)                                mcPadOneField (ppxlcCurrTopField2, ppxlcCurrTopFieldB, uiBlkXSize, uiStride);                }                padNeighborTranspMBFields (iMBX, iMBY, pmbmd, mode, ppxlcCurrTopField1, ppxlcCurrTopField2, uiBlkXSize, uiStride);        } else  padCurrAndTopTranspMBFieldsFromNeighbor (iMBX, iMBY, pmbmd, mode, ppxlcCurrTopField1, ppxlcCurrTopField2, uiBlkXSize, uiStride);        if (pmbmd->m_rgFieldTranspStatus [mode+1] != ALL) {     // Bottom Field MC Padding                if (pmbmd->m_rgFieldTranspStatus [mode+1] == PARTIAL) {                        mcPadOneField (ppxlcCurrBotField1, ppxlcCurrBotFieldB, uiBlkXSize, uiStride);                        if (ppxlcCurrBotField2)                                mcPadOneField (ppxlcCurrBotField2, ppxlcCurrBotFieldB, uiBlkXSize, uiStride);                }                padNeighborTranspMBFields (iMBX, iMBY, pmbmd, mode+1, ppxlcCurrBotField1, ppxlcCurrBotField2, uiBlkXSize, uiStride);        } else  padCurrAndTopTranspMBFieldsFromNeighbor (iMBX, iMBY, pmbmd, mode+1, ppxlcCurrBotField1, ppxlcCurrBotField2, uiBlkXSize, uiStride);}Void CVideoObject::mcPadOneField (        PixelC          *ppxlcTextureBase,        const PixelC    *ppxlcAlphaBase,        Int             uiBlkXSize,        Int             uiStride){        Int     iUnit = sizeof(PixelC);        Int     uiBlkYSize = uiBlkXSize/2;        Int     iFieldSkip = 2*uiStride;        CoordI  iX,iY,iJ,iLeftX = 0;        Bool    bEmptyRow = FALSE;        Bool    bInVop;        Int     iLeftColour;                  PixelC  *ppxlcTexture = ppxlcTextureBase;        for (iY=0;iY<(CoordI)uiBlkYSize;iY++, ppxlcTexture+=iFieldSkip) {                bInVop = TRUE;                iLeftColour = invalidColour;                m_pbEmptyRowArray[iY]=0;                const PixelC *ppxlcAlpha = ppxlcAlphaBase;                for(iX=0;iX<(CoordI)uiBlkXSize;iX++,ppxlcAlpha++) {                        if(bInVop==TRUE && *ppxlcAlpha==transpValue) {                                bInVop=FALSE;

⌨️ 快捷键说明

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