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

📄 mb.cpp

📁 完整的RTP RTSP代码库
💻 CPP
📖 第 1 页 / 共 2 页
字号:
                ppxlcBotFieldBY += iCFieldSkip;        }        piNonTransPixels[3] /= opaqueValue;        piNonTransPixels[4] /= opaqueValue;        for (ix=3; ix<=4; ix++) {                if (piNonTransPixels [ix] == 0)                        pmbmd-> m_rgFieldTranspStatus [ix] = ALL;                else if (piNonTransPixels [ix] == BLOCK_SQUARE_SIZE/2)                        pmbmd -> m_rgFieldTranspStatus [ix] = NONE;                else    pmbmd -> m_rgFieldTranspStatus [ix] = PARTIAL;        }                delete piNonTransPixels;}Void CVideoObject::fieldBasedDownSampleBY (        const PixelC* ppxlcMBBY,        PixelC* ppxlcMBBUV){        UInt  ix, iy, x, iFieldSkip = 4*m_iFrameWidthY;        const PixelC* ppxlcTopFieldBY = ppxlcMBBY;        const PixelC* ppxlcBotFieldBY = ppxlcMBBY + m_iFrameWidthY;        const PixelC* ppxlcTopFieldBYNext = ppxlcTopFieldBY + 2*m_iFrameWidthY;        const PixelC* ppxlcBotFieldBYNext = ppxlcBotFieldBY + 2*m_iFrameWidthY;         for (iy = 0; iy < BLOCK_SIZE/2; iy++) {                for (ix = 0, x = 0; ix < BLOCK_SIZE; ix++, x = 2*ix)                        ppxlcMBBUV [ix] = (ppxlcTopFieldBY [x] | ppxlcTopFieldBY [x+1] |                                                ppxlcTopFieldBYNext [x] | ppxlcTopFieldBYNext [x+1]);                ppxlcMBBUV += m_iFrameWidthUV;                for (ix = 0, x = 0; ix < BLOCK_SIZE; ix++, x = 2*ix)                        ppxlcMBBUV [ix] = (ppxlcBotFieldBY [x] | ppxlcBotFieldBY [x+1] |                                                ppxlcBotFieldBYNext [x] | ppxlcBotFieldBYNext [x+1]);                ppxlcMBBUV += m_iFrameWidthUV;                ppxlcTopFieldBY += iFieldSkip;                ppxlcBotFieldBY += iFieldSkip;                ppxlcTopFieldBYNext += iFieldSkip;                ppxlcBotFieldBYNext += iFieldSkip;        }}// End of Hyundai(1998-5-9)//Changed HHI 2000-04-11Void CVideoObject::downSampleBY (const PixelC* ppxlcMBBY, PixelC* ppxlcMBBUV, CMBMode* pmbmd){	const PixelC* ppxlcMBBYNextRow = ppxlcMBBY + MB_SIZE;	UInt ix, iy;	PixelC* ppxlcMBBUV_t = ppxlcMBBUV; // Changed HHI 2000-04-11	// Added for Chroma Subsampling by Hyundai(1998-5-9)        if (m_vopmd.bInterlace) {                UInt  x, iFieldSkip = 4*MB_SIZE;                const PixelC* ppxlcTopFieldBY = ppxlcMBBY;                const PixelC* ppxlcBotFieldBY = ppxlcMBBY + MB_SIZE;                const PixelC* ppxlcTopFieldBYNext = ppxlcTopFieldBY + 2*MB_SIZE;                const PixelC* ppxlcBotFieldBYNext = ppxlcBotFieldBY + 2*MB_SIZE;                for (iy = 0; iy < BLOCK_SIZE/2; iy++) {                        for (ix = 0, x = 0; ix < BLOCK_SIZE; ix++, x = 2*ix)                                ppxlcMBBUV [ix] = (ppxlcTopFieldBY [x] | ppxlcTopFieldBY [x+1] |                                                        ppxlcTopFieldBYNext [x] | ppxlcTopFieldBYNext [x+1]);                        ppxlcMBBUV += BLOCK_SIZE;                        for (ix = 0, x = 0; ix < BLOCK_SIZE; ix++, x = 2*ix)                                ppxlcMBBUV [ix] = (ppxlcBotFieldBY [x] | ppxlcBotFieldBY [x+1] |                                                        ppxlcBotFieldBYNext [x] | ppxlcBotFieldBYNext [x+1]);                        ppxlcMBBUV += BLOCK_SIZE;                        ppxlcTopFieldBY += iFieldSkip;                        ppxlcBotFieldBY += iFieldSkip;                        ppxlcTopFieldBYNext += iFieldSkip;                        ppxlcBotFieldBYNext += iFieldSkip;                }                // return;        } else		{	// End of Hyundai(1998-5-9)			for (iy = 0; iy < BLOCK_SIZE; iy++) {				for (ix = 0; ix < BLOCK_SIZE; ix++) {					ppxlcMBBUV [ix] = (						(ppxlcMBBY [2 * ix] | ppxlcMBBY [2 * ix + 1]) |						(ppxlcMBBYNextRow [2 * ix] | ppxlcMBBYNextRow [2 * ix + 1])						);				}				ppxlcMBBUV += BLOCK_SIZE;				ppxlcMBBY += 2 * MB_SIZE;				ppxlcMBBYNextRow += 2 * MB_SIZE;			}		}	// Begin Changed HHI 2000-04-11	if (pmbmd!=NULL) {		UInt uiNonTransPixelsUV = 0;		for (iy = 0; iy < BLOCK_SIZE; iy++) {			for (ix = 0; ix < BLOCK_SIZE; ix++) {				uiNonTransPixelsUV += ppxlcMBBUV_t[ix];			}			ppxlcMBBUV_t+=BLOCK_SIZE;		}		uiNonTransPixelsUV /= opaqueValue;		pmbmd->m_rgNumNonTranspPixels [5] = uiNonTransPixelsUV;		if (pmbmd -> m_rgNumNonTranspPixels [5] == 0)			pmbmd -> m_rgTranspStatus [U_BLOCK] = ALL;		else if (pmbmd -> m_rgNumNonTranspPixels [5] == BLOCK_SQUARE_SIZE)			pmbmd -> m_rgTranspStatus [U_BLOCK] = NONE;		else			pmbmd -> m_rgTranspStatus [U_BLOCK] = PARTIAL;		pmbmd->m_rgTranspStatus [V_BLOCK] = pmbmd->m_rgTranspStatus [U_BLOCK];	}	// End Changed HHI 2000-04-11}Void CVideoObject::addErrorAndPredToCurrQ (	PixelC* ppxlcQMBY, 	PixelC* ppxlcQMBU, 	PixelC* ppxlcQMBV){	CoordI ix, iy, ic = 0;// RRV modification	for (iy = 0; iy < (MB_SIZE *m_iRRVScale); iy++) {		for (ix = 0; ix < (MB_SIZE *m_iRRVScale); ix++, ic++) {// ~RRV			ppxlcQMBY [ix] = m_rgiClipTab [m_ppxlcPredMBY [ic] + m_ppxliErrorMBY [ic]];		}		ppxlcQMBY += m_iFrameWidthY;	}	ic = 0;// RRV modification	for (iy = 0; iy < (BLOCK_SIZE *m_iRRVScale); iy++) {		for (ix = 0; ix < (BLOCK_SIZE *m_iRRVScale); ix++, ic++) {// ~RRV			ppxlcQMBU [ix] = m_rgiClipTab [m_ppxlcPredMBU [ic] + m_ppxliErrorMBU [ic]];			ppxlcQMBV [ix] = m_rgiClipTab [m_ppxlcPredMBV [ic] + m_ppxliErrorMBV [ic]];		}		ppxlcQMBU += m_iFrameWidthUV;		ppxlcQMBV += m_iFrameWidthUV;	}}Void CVideoObject::addAlphaErrorAndPredToCurrQ (PixelC* ppxlcQMBA, Int iAuxComp){	CoordI ix, iy, ic = 0;    for (iy = 0; iy < MB_SIZE; iy++) {	 	for (ix = 0; ix < MB_SIZE; ix++, ic++)      ppxlcQMBA[ix] = m_rgiClipTab [m_ppxlcPredMBA[iAuxComp][ic] + m_ppxliErrorMBA[iAuxComp] [ic]];    ppxlcQMBA += m_iFrameWidthY;     	}}Void CVideoObject::assignPredToCurrQ (	PixelC* ppxlcQMBY, 	PixelC* ppxlcQMBU, 	PixelC* ppxlcQMBV){	CoordI ix;	const PixelC* ppxlcPredMBY = m_ppxlcPredMBY;	const PixelC* ppxlcPredMBU = m_ppxlcPredMBU;	const PixelC* ppxlcPredMBV = m_ppxlcPredMBV;// RRV modification	for (ix = 0; ix < (BLOCK_SIZE *m_iRRVScale); ix++) {		memcpy(ppxlcQMBY, ppxlcPredMBY,			   (MB_SIZE *m_iRRVScale) *sizeof(PixelC));		memcpy(ppxlcQMBU, ppxlcPredMBU,			   (BLOCK_SIZE *m_iRRVScale) *sizeof(PixelC));		memcpy(ppxlcQMBV, ppxlcPredMBV, 			   (BLOCK_SIZE *m_iRRVScale) *sizeof(PixelC));		ppxlcPredMBY += (MB_SIZE *m_iRRVScale);		ppxlcPredMBU += (BLOCK_SIZE *m_iRRVScale);		ppxlcPredMBV += (BLOCK_SIZE *m_iRRVScale);// ~RRV		ppxlcQMBY += m_iFrameWidthY;		ppxlcQMBU += m_iFrameWidthUV;		ppxlcQMBV += m_iFrameWidthUV;// RRV modification		memcpy(ppxlcQMBY, ppxlcPredMBY, 			   (MB_SIZE *m_iRRVScale) *sizeof(PixelC));		ppxlcPredMBY += (MB_SIZE *m_iRRVScale);// ~RRV		ppxlcQMBY += m_iFrameWidthY;	}}Void CVideoObject::assignAlphaPredToCurrQ (PixelC* ppxlcQMBA, Int iAuxComp){	CoordI ix;	const PixelC* ppxlcPredMBA = m_ppxlcPredMBA[iAuxComp];	for (ix = 0; ix < MB_SIZE; ix++) {		memcpy (ppxlcQMBA, ppxlcPredMBA, MB_SIZE*sizeof(PixelC));		ppxlcPredMBA += MB_SIZE;		ppxlcQMBA += m_iFrameWidthY;	}}Void CVideoObject::findColocatedMB (Int iMBX, Int iMBY,									const CMBMode*& pmbmdRef,									const CMotionVector*& pmvRef){	Bool bColocatedMBExist = FALSE;	if(m_bCodedFutureRef!=FALSE)		if(iMBX<m_iNumMBXRef && iMBX>=0 && iMBY<m_iNumMBYRef && iMBY>=0)		{			pmbmdRef = &m_rgmbmdRef [iMBX + iMBY * m_iNumMBXRef];			if(pmbmdRef -> m_rgTranspStatus [0] != ALL)			{				Int iOffset = min (max (0, iMBX), m_iNumMBXRef - 1) +  					min (max (0, iMBY), m_iNumMBYRef - 1) * m_iNumMBXRef;				pmvRef = m_rgmvRef + iOffset * PVOP_MV_PER_REF_PER_MB;				bColocatedMBExist = TRUE;			}		}	if(bColocatedMBExist==FALSE)	{		pmbmdRef = NULL;		pmvRef = NULL;	}}

⌨️ 快捷键说明

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