📄 mcpad.cpp
字号:
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 + -