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

📄 mcpad.cpp

📁 完整的RTP RTSP代码库
💻 CPP
📖 第 1 页 / 共 3 页
字号:
                                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 + -