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

📄 mcpad.cpp

📁 小波图像变换
💻 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 + -