📄 mcpad.cpp
字号:
iLeftX=iX; if(iX>0) iLeftColour=ppxlcTexture[iLeftX-1]; } else if(bInVop==FALSE && *ppxlcAlpha!=transpValue) { bInVop=TRUE; if(iLeftColour==invalidColour) iLeftColour=ppxlcTexture[iX]; else iLeftColour=(iLeftColour+ppxlcTexture[iX]+1)>>1; for(iJ=iLeftX;iJ<iX;iJ++) ppxlcTexture[iJ]=(PixelC)iLeftColour; } } ppxlcAlphaBase += iFieldSkip; if(bInVop==FALSE) { if(iLeftX==0) { m_pbEmptyRowArray[iY]=TRUE; bEmptyRow=TRUE; } else { for(iJ=iLeftX;iJ<iX;iJ++) ppxlcTexture[iJ]=(PixelC)iLeftColour; } } } if(bEmptyRow) { ppxlcTexture=ppxlcTextureBase; PixelC *ppxlcUpperRow = NULL; for(iY=0;iY<(CoordI)uiBlkYSize;iY++,ppxlcTexture+=iFieldSkip) if(!m_pbEmptyRowArray[iY]) ppxlcUpperRow = ppxlcTexture; else { PixelC *ppxlcLowerRow = ppxlcTexture+iFieldSkip; CoordI iYY; for(iYY=iY+1;iYY<(CoordI)uiBlkYSize;iYY++,ppxlcLowerRow+=iFieldSkip) if(!m_pbEmptyRowArray[iYY]) break; if(iYY<(CoordI)uiBlkYSize) { if(ppxlcUpperRow==NULL) { for(;ppxlcTexture<ppxlcLowerRow;ppxlcTexture+=iFieldSkip) memcpy(ppxlcTexture,ppxlcLowerRow,uiBlkXSize*iUnit); } else { for(;ppxlcTexture<ppxlcLowerRow;ppxlcTexture+=iFieldSkip) for(iX=0;iX<(CoordI)uiBlkXSize;iX++) ppxlcTexture[iX]= (ppxlcUpperRow[iX]+ppxlcLowerRow[iX]+1)>>1; } } else { assert(ppxlcUpperRow!=NULL); for(iYY=iY;iYY<(CoordI)uiBlkYSize;iYY++,ppxlcTexture+=iFieldSkip) memcpy(ppxlcTexture,ppxlcUpperRow,uiBlkXSize*iUnit); } iY=iYY-1; ppxlcTexture -= iFieldSkip; } }}Void CVideoObject::padNeighborTranspMBFields ( CoordI xb, CoordI yb, CMBMode *pmbmd, Int mode, PixelC *ppxlcMBField1, PixelC *ppxlcMBField2, Int uiBlkXSize, Int uiStride){ CMBMode* pmbmdLeft = pmbmd - 1; CMBMode* pmbmdAbov = pmbmd - m_iNumMBX; if (xb > 0) { if (pmbmdLeft->m_rgFieldTranspStatus [mode] == ALL) if (!(pmbmdLeft->m_rgbFieldPadded [mode])) { mcPadLeftMBFields (ppxlcMBField1, ppxlcMBField2, uiBlkXSize, uiStride); pmbmdLeft->m_rgbFieldPadded[mode] = TRUE; } } if (yb > 0) { if (pmbmdAbov->m_rgFieldTranspStatus [mode] == ALL) if (!(pmbmdAbov->m_rgbFieldPadded [mode])) { mcPadTopMBFields (ppxlcMBField1, ppxlcMBField2, uiBlkXSize, uiStride); pmbmdAbov->m_rgbFieldPadded[mode] = TRUE; } } }Void CVideoObject::padCurrAndTopTranspMBFieldsFromNeighbor ( CoordI xb, CoordI yb, CMBMode *pmbmd, Int mode, PixelC* ppxlcMBField1, PixelC* ppxlcMBField2, Int uiBlkXSize, Int uiStride){ CMBMode* pmbmdLeft = pmbmd - 1; CMBMode* pmbmdAbov = pmbmd - m_iNumMBX; if (xb > 0) { if (pmbmdLeft->m_rgFieldTranspStatus [mode] != ALL) { mcPadCurrMBFieldsFromLeft (ppxlcMBField1, ppxlcMBField2, uiBlkXSize, uiStride); pmbmd->m_rgbFieldPadded [mode] = TRUE; } } if (yb > 0) { if (pmbmdAbov->m_rgFieldTranspStatus [mode] != ALL) { if (!(pmbmd->m_rgbFieldPadded [mode])) { mcPadCurrMBFieldsFromTop (ppxlcMBField1, ppxlcMBField2, uiBlkXSize, uiStride); pmbmd->m_rgbFieldPadded [mode] = TRUE; } } else { if (!(pmbmdAbov->m_rgbFieldPadded [mode])) mcSetTopMBFieldsGray (ppxlcMBField1, ppxlcMBField2, uiBlkXSize, uiStride); } } if(yb == m_iNumMBY-1) { if(xb > 0 && pmbmdLeft->m_rgFieldTranspStatus [mode] == ALL && !(pmbmdLeft->m_rgbFieldPadded [mode])) mcSetLeftMBFieldsGray (ppxlcMBField1, ppxlcMBField2, uiBlkXSize, uiStride); if(xb == m_iNumMBX-1 && !(pmbmd->m_rgbFieldPadded [mode])) mcSetCurrMBFieldsGray (ppxlcMBField1, ppxlcMBField2, uiBlkXSize, uiStride); }}Void CVideoObject::mcPadLeftMBFields ( PixelC* ppxlcMBField1, PixelC* ppxlcMBField2, Int uiBlkXSize, Int uiStride){ UInt iy, uiBlkYSize = uiBlkXSize/2; for (iy = 0; iy < uiBlkYSize; iy++) { pxlcmemset (ppxlcMBField1 - uiBlkXSize, *ppxlcMBField1, uiBlkXSize); ppxlcMBField1 += 2*uiStride; } if (!ppxlcMBField2) return; for (iy = 0; iy < uiBlkYSize; iy++) { pxlcmemset (ppxlcMBField2 - uiBlkXSize, *ppxlcMBField2, uiBlkXSize); ppxlcMBField2 += 2*uiStride; }} Void CVideoObject::mcPadTopMBFields ( PixelC* ppxlcMBField1, PixelC* ppxlcMBField2, Int iBlkXSize, Int iStride){ Int ix, iy, iBlkYSize = iBlkXSize/2; for (ix = 0; ix < iBlkXSize; ix++) { PixelC* ppxlcYCol = ppxlcMBField1; for (iy = 0; iy < iBlkYSize; iy++) { ppxlcYCol -= 2*iStride; *ppxlcYCol = *ppxlcMBField1; } ppxlcMBField1++; } if (!ppxlcMBField2) return; for (ix = 0; ix < iBlkXSize; ix++) { PixelC* ppxlcACol = ppxlcMBField2; for (iy = 0; iy < iBlkYSize; iy++) { ppxlcACol -= 2*iStride; *ppxlcACol = *ppxlcMBField2; } ppxlcMBField2++; }}Void CVideoObject::mcPadCurrMBFieldsFromLeft ( PixelC* ppxlcMBField1, PixelC* ppxlcMBField2, Int uiBlkXSize, Int uiStride){ UInt iy, uiBlkYSize = uiBlkXSize/2; for (iy = 0; iy < uiBlkYSize; iy++) { pxlcmemset (ppxlcMBField1, *(ppxlcMBField1 - 1), uiBlkXSize); ppxlcMBField1 += 2*uiStride; } if (!ppxlcMBField2) return; for (iy = 0; iy < uiBlkYSize; iy++) { pxlcmemset (ppxlcMBField2, *(ppxlcMBField2 - 1), uiBlkXSize); ppxlcMBField2 += 2*uiStride; }} Void CVideoObject::mcPadCurrMBFieldsFromTop ( PixelC* ppxlcMBField1, PixelC* ppxlcMBField2, Int iBlkXSize, Int iStride){ Int ix, iy, iBlkYSize = iBlkXSize/2; PixelC *ppxlcSrcMBField = ppxlcMBField1-2*iStride; for (ix = 0; ix < iBlkXSize; ix++) { PixelC* ppxlcDstMBField = ppxlcSrcMBField; for (iy = 0; iy < iBlkYSize; iy++) { ppxlcDstMBField += 2*iStride; *ppxlcDstMBField = *ppxlcSrcMBField; } ppxlcSrcMBField++; } if(!ppxlcMBField2) return; ppxlcSrcMBField = ppxlcMBField2-2*iStride; for (ix = 0; ix < iBlkXSize; ix++) { PixelC* ppxlcDstMBField = ppxlcSrcMBField; for (iy = 0; iy < iBlkYSize; iy++) { ppxlcDstMBField += 2*iStride; *ppxlcDstMBField = *ppxlcSrcMBField; } ppxlcSrcMBField++; }}Void CVideoObject::mcSetTopMBFieldsGray ( PixelC* ppxlcMBField1, PixelC* ppxlcMBField2, Int uiBlkXSize, Int uiStride){ UInt iy, uiBlkYSize = uiBlkXSize/2; PixelC pxlcGrayVal = 128; if(m_volmd.bNot8Bit) pxlcGrayVal = 1<<(m_volmd.nBits-1); ppxlcMBField1 -= 2*uiStride; for (iy = 0; iy < uiBlkYSize; iy++) { pxlcmemset (ppxlcMBField1, pxlcGrayVal, uiBlkXSize); ppxlcMBField1 -= 2*uiStride; } if (!ppxlcMBField2) return; ppxlcMBField2 -= 2*uiStride; for (iy = 0; iy < uiBlkYSize; iy++) { pxlcmemset (ppxlcMBField2, pxlcGrayVal, uiBlkXSize); ppxlcMBField2 -= 2*uiStride; }} Void CVideoObject::mcSetLeftMBFieldsGray ( PixelC* ppxlcMBField1, PixelC* ppxlcMBField2, Int uiBlkXSize, Int uiStride){ UInt iy, uiBlkYSize = uiBlkXSize/2; PixelC pxlcGrayVal = 128; if(m_volmd.bNot8Bit) pxlcGrayVal = 1<<(m_volmd.nBits-1); ppxlcMBField1 = ppxlcMBField1-uiBlkXSize; for (iy = 0; iy < uiBlkYSize; iy++) { pxlcmemset (ppxlcMBField1, pxlcGrayVal, uiBlkXSize); ppxlcMBField1 += 2*uiStride; } if (!ppxlcMBField2) return; ppxlcMBField2 = ppxlcMBField2-uiBlkXSize; for (iy = 0; iy < uiBlkYSize; iy++) { pxlcmemset (ppxlcMBField2, pxlcGrayVal, uiBlkXSize); ppxlcMBField2 += 2*uiStride; }} Void CVideoObject::mcSetCurrMBFieldsGray ( PixelC* ppxlcMBField1, PixelC* ppxlcMBField2, Int uiBlkXSize, Int uiStride){ UInt iy, uiBlkYSize = uiBlkXSize/2; PixelC pxlcGrayVal = 128; if(m_volmd.bNot8Bit) pxlcGrayVal = 1<<(m_volmd.nBits-1); for (iy = 0; iy < uiBlkYSize; iy++) { pxlcmemset (ppxlcMBField1, pxlcGrayVal, uiBlkXSize); ppxlcMBField1 += 2*uiStride; } if (!ppxlcMBField2) return; for (iy = 0; iy < uiBlkYSize; iy++) { pxlcmemset (ppxlcMBField2, pxlcGrayVal, uiBlkXSize); ppxlcMBField2 += 2*uiStride; }} // End of HYUNDAI(1998-5-9)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -