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

📄 errdec.cpp

📁 完整的RTP RTSP代码库
💻 CPP
📖 第 1 页 / 共 4 页
字号:
			if (pmbmd->m_rgTranspStatus [0] != ALL)				decodeMBTextureHeadOfIVOP_DataPartitioning (pmbmd, piMCBPC);			pmbmd++;			piMCBPC++;		}		pmbmd = pmbmdFirst;		piIntraDC = piIntraDCFirst;		ppxlcRefBY = (PixelC*) m_pvopcRefQ1->pixelsBY () + m_iStartInRefToCurrRctY + (mbnFirst/m_iNumMBX)*m_iFrameWidthYxMBSize;		ppxlcRefBUV = (PixelC*) m_pvopcRefQ1->pixelsBUV () + m_iStartInRefToCurrRctUV + (mbnFirst/m_iNumMBX)*m_iFrameWidthUVxBlkSize;		ppxlcRefMBBY = ppxlcRefBY + (mbnFirst%m_iNumMBX)*MB_SIZE;		ppxlcRefMBBUV = ppxlcRefBUV + (mbnFirst%m_iNumMBX)*BLOCK_SIZE;		for(i=mbnFirst;i<mbn;i++) {			pmbmd->m_bPadded = FALSE;			iMBX = i % m_iNumMBX;			iMBY = i / m_iNumMBX;			if(iMBX == 0 ) {				ppxlcRefMBY = ppxlcRefY;				ppxlcRefMBU = ppxlcRefU;				ppxlcRefMBV = ppxlcRefV;//				ppxlcRefMBA  = ppxlcRefA;				ppxlcRefMBBY = ppxlcRefBY;				ppxlcRefMBBUV = ppxlcRefBUV;			}			copyRefShapeToMb(m_ppxlcCurrMBBY, ppxlcRefMBBY);			// Changed HHI 2000-04-11			downSampleBY (m_ppxlcCurrMBBY, m_ppxlcCurrMBBUV, pmbmd); // downsample original BY now for LPE padding (using original shape)			if (pmbmd->m_rgTranspStatus [0] != ALL) {				// 09/16/99 HHI Schueuer: added for sadct				if (!m_volmd.bSadctDisable)					deriveSADCTRowLengths(m_rgiCurrMBCoeffWidth, m_ppxlcCurrMBBY, m_ppxlcCurrMBBUV, pmbmd ->m_rgTranspStatus);				// end HHI				// 09/16/99 HHI Schueuer: added for sadct				if (!m_volmd.bSadctDisable)					decodeTextureIntraMB_DataPartitioning (pmbmd, iMBX, iMBY, ppxlcRefMBY, ppxlcRefMBU, ppxlcRefMBV, piIntraDC, m_ppxlcCurrMBBY, m_ppxlcCurrMBBUV);				else					// end HHI 					decodeTextureIntraMB_DataPartitioning (pmbmd, iMBX, iMBY, ppxlcRefMBY, ppxlcRefMBU, ppxlcRefMBV, piIntraDC); 				// MC padding				if (pmbmd -> m_rgTranspStatus [0] == PARTIAL)					mcPadCurrMB (ppxlcRefMBY, ppxlcRefMBU, ppxlcRefMBV, NULL/*ppxlcRefMBA*/);				padNeighborTranspMBs (					iMBX, iMBY,					pmbmd,					ppxlcRefMBY, ppxlcRefMBU, ppxlcRefMBV, NULL /*ppxlcRefMBA*/				);			}			else {				padCurrAndTopTranspMBFromNeighbor (					iMBX, iMBY,					pmbmd,					ppxlcRefMBY, ppxlcRefMBU, ppxlcRefMBV, NULL /*ppxlcRefMBA*/				);			}//			ppxlcRefMBA += MB_SIZE;			ppxlcRefMBBY += MB_SIZE;			ppxlcRefMBBUV += BLOCK_SIZE;			pmbmd++;			piIntraDC += V_BLOCK;			ppxlcRefMBY += MB_SIZE;			ppxlcRefMBU += BLOCK_SIZE;			ppxlcRefMBV += BLOCK_SIZE;			if(iMBX == m_iNumMBX - 1) {				MacroBlockMemory** ppmbmTemp = m_rgpmbmAbove;				m_rgpmbmAbove = m_rgpmbmCurr;				m_rgpmbmCurr  = ppmbmTemp;				ppxlcRefY += m_iFrameWidthYxMBSize;				ppxlcRefU += m_iFrameWidthUVxBlkSize;				ppxlcRefV += m_iFrameWidthUVxBlkSize;//				ppxlcRefA += m_iFrameWidthYxMBSize;				ppxlcRefBY += m_iFrameWidthYxMBSize;				ppxlcRefBUV += m_iFrameWidthUVxBlkSize;			}		}	} while( checkResyncMarker() );	delete m_piMCBPC;	delete m_piIntraDC;}Void CVideoObjectDecoder::decodePVOP_WithShape_DataPartitioning (){	//assert (m_volmd.nBits==8);	assert (m_volmd.fAUsage!=EIGHT_BIT);	Int iMBX, iMBY;	CoordI y = m_rctCurrVOPY.top; 	CoordI x = m_rctCurrVOPY.left;	CoordI y_s = m_rctCurrVOPY.top; 	CoordI x_s = m_rctCurrVOPY.left;	CMBMode* pmbmd = m_rgmbmd;	CMotionVector* pmv = m_rgmv;	CMotionVector* pmvBY = m_rgmvBY;	PixelC* ppxlcCurrQY  = (PixelC*) m_pvopcRefQ1->pixelsY () + m_iStartInRefToCurrRctY;	PixelC* ppxlcCurrQU  = (PixelC*) m_pvopcRefQ1->pixelsU () + m_iStartInRefToCurrRctUV;	PixelC* ppxlcCurrQV  = (PixelC*) m_pvopcRefQ1->pixelsV () + m_iStartInRefToCurrRctUV;	PixelC* ppxlcCurrQBY = (PixelC*) m_pvopcRefQ1->pixelsBY () + m_iStartInRefToCurrRctY;//	PixelC* ppxlcCurrQA  = (PixelC*) m_pvopcRefQ1->pixelsA () + m_iStartInRefToCurrRctY;	PixelC* ppxlcCurrQBUV = (PixelC*) m_pvopcRefQ1->pixelsBUV () + m_iStartInRefToCurrRctUV;		Int iCurrentQP  = m_vopmd.intStep;		Int	iVideoPacketNumber = 0; 			//	added for error resilience mode by Toshiba	m_iVPMBnum = 0;	m_piMCBPC = new Int[m_iNumMBX*m_iNumMBY];	Int*	piMCBPC = m_piMCBPC;	m_piIntraDC = new Int[m_iNumMBX*m_iNumMBY*V_BLOCK];	Int*	piIntraDC = m_piIntraDC;	Int	i;	Int	mbn = 0, mbnFirst = 0;	PixelC* ppxlcCurrQMBY = NULL;	PixelC* ppxlcCurrQMBU = NULL;	PixelC* ppxlcCurrQMBV = NULL;	PixelC* ppxlcCurrQMBBY = NULL;	PixelC* ppxlcCurrQMBBUV;	//PixelC* ppxlcCurrQMBA;	Bool bMBBackup = FALSE;	CMBMode* pmbmdBackup = NULL;	Int iMBXBackup = 0, iMBYBackup = 0;	CMotionVector* pmvBackup = NULL;	PixelC* ppxlcCurrQMBYBackup = NULL;	PixelC* ppxlcCurrQMBUBackup = NULL;	PixelC* ppxlcCurrQMBVBackup = NULL;	PixelC* ppxlcCurrQMBBYBackup = NULL;	PixelC* ppxlcCurrQMBBUVBackup;	//PixelC* ppxlcCurrQMBABackup;	Bool bPaddedLBackup = FALSE;	Bool bPaddedTBackup = FALSE;	Bool bRestartDelayedQP = TRUE;	do{		CMBMode* pmbmdFirst = pmbmd;		CMotionVector* pmvFirst = pmv;		Int* piMCBPCFirst = piMCBPC;		Int* piIntraDCFirst = piIntraDC;		mbnFirst = mbn;		if( checkResyncMarker() ){			decodeVideoPacketHeader(iCurrentQP);			iVideoPacketNumber++;			bRestartDelayedQP = TRUE;		}		do{			pmbmd->m_iVideoPacketNumber = iVideoPacketNumber;			iMBX = mbn % m_iNumMBX;			iMBY = mbn / m_iNumMBX;			if(iMBX == 0 ) {				ppxlcCurrQMBBY = ppxlcCurrQBY;				ppxlcCurrQMBBUV = ppxlcCurrQBUV;				x_s = m_rctCurrVOPY.left;				if(iMBY != 0)	y_s += MB_SIZE;			} else {				x_s += MB_SIZE;			}			ShapeMode shpmdColocatedMB;			if(m_vopmd.bShapeCodingType) {				shpmdColocatedMB = m_rgmbmdRef [					MIN (MAX (0, iMBX), m_iNumMBXRef - 1) +  					MIN (MAX (0, iMBY), m_iNumMBYRef - 1) * m_iNumMBXRef				].m_shpmd;				decodeInterShape (					m_pvopcRefQ0,					pmbmd, 					iMBX, iMBY, 					x_s, y_s, 					pmv, pmvBY, 					m_ppxlcCurrMBBY, ppxlcCurrQMBBY,					shpmdColocatedMB				);			}			else	{				decodeIntraShape (pmbmd, iMBX, iMBY, m_ppxlcCurrMBBY,					ppxlcCurrQMBBY);			}			downSampleBY (m_ppxlcCurrMBBY, m_ppxlcCurrMBBUV, pmbmd);			if (pmbmd->m_rgTranspStatus [0] != ALL && m_volmd.bShapeOnly==FALSE) {				Bool bStuffing;				do {					bStuffing = decodeMBTextureModeOfPVOP_DataPartitioning(pmbmd, piMCBPC);				} while(bStuffing);				if(!pmbmd -> m_bMCSEL)					decodeMVWithShape (pmbmd, iMBX, iMBY, pmv);				else				{					Int iPmvx, iPmvy, iHalfx, iHalfy;					globalmv (iPmvx, iPmvy, iHalfx, iHalfy,						m_rctCurrVOPY.left+iMBX*MB_SIZE,						m_rctCurrVOPY.top+iMBY*MB_SIZE,						m_vopmd.mvInfoForward.uiRange,						m_volmd.bQuarterSample);					CVector vctOrg;					vctOrg.x = iPmvx*2 + iHalfx;					vctOrg.y = iPmvy*2 + iHalfy;					*pmv= CMotionVector (iPmvx, iPmvy);					pmv -> iHalfX = iHalfx;					pmv -> iHalfY = iHalfy;					pmv -> computeTrueMV ();					pmv -> computeMV ();					for (UInt i = 1; i < PVOP_MV_PER_REF_PER_MB; i++)						pmv[i] = *pmv;				}				if(pmbmd->m_bhas4MVForward)					padMotionVectors(pmbmd,pmv);			}			if(bMBBackup){				copyRefShapeToMb(m_ppxlcCurrMBBY, ppxlcCurrQMBBYBackup);				// Changed HHI 2000-04-11				downSampleBY (m_ppxlcCurrMBBY, m_ppxlcCurrMBBUV, pmbmdBackup); // downsample original BY now for LPE padding (using original shape)				pmbmdBackup->m_bPadded = FALSE;				if(iMBXBackup > 0) (pmbmdBackup-1)->m_bPadded = bPaddedLBackup;				if(iMBYBackup > 0) (pmbmdBackup-m_iNumMBX)->m_bPadded = bPaddedTBackup;				if (pmbmdBackup->m_rgTranspStatus [0] != ALL) {					if (pmbmdBackup->m_dctMd == INTER || pmbmdBackup->m_dctMd == INTERQ)	{			 			motionCompMB (							m_ppxlcPredMBY, m_pvopcRefQ0->pixelsY (),							pmvBackup, pmbmdBackup, 							iMBXBackup, iMBYBackup, 							x, y,							pmbmdBackup->m_bSkip, FALSE,							&m_rctRefVOPY0						);						if (!(pmbmdBackup->m_bSkip && !pmbmdBackup->m_bMCSEL)) { // GMC							CoordI iXRefUV, iYRefUV;// GMC						   if (!pmbmdBackup->m_bMCSEL)// ~GMC							mvLookupUVWithShape (pmbmdBackup, pmvBackup, iXRefUV, iYRefUV);// GMC						   if(pmbmdBackup->m_bMCSEL) {							FindGlobalChromPredForGMC(x,y,m_ppxlcPredMBU,m_ppxlcPredMBV);						   }else// ~GMC							motionCompUV (m_ppxlcPredMBU, m_ppxlcPredMBV, m_pvopcRefQ0,								x, y, iXRefUV, iYRefUV, m_vopmd.iRoundingControl,&m_rctRefVOPY0);// GMC						   if (pmbmdBackup->m_bSkip)							assignPredToCurrQ (ppxlcCurrQMBYBackup, ppxlcCurrQMBUBackup, ppxlcCurrQMBVBackup);						   else// ~GMC							addErrorAndPredToCurrQ (ppxlcCurrQMBYBackup, ppxlcCurrQMBUBackup, ppxlcCurrQMBVBackup);						}						else {							if (m_volmd.bAdvPredDisable)								copyFromRefToCurrQ (m_pvopcRefQ0, x, y, ppxlcCurrQMBYBackup, ppxlcCurrQMBUBackup, ppxlcCurrQMBVBackup, &m_rctRefVOPY0);							else								copyFromPredForYAndRefForCToCurrQ (x, y, ppxlcCurrQMBYBackup, ppxlcCurrQMBUBackup, ppxlcCurrQMBVBackup, &m_rctRefVOPY0);						}					}					if (pmbmdBackup->m_rgTranspStatus [0] == PARTIAL)						mcPadCurrMB (ppxlcCurrQMBYBackup, ppxlcCurrQMBUBackup, ppxlcCurrQMBVBackup, NULL/*ppxlcCurrQMBABackup*/);					padNeighborTranspMBs (						iMBXBackup, iMBYBackup,						pmbmdBackup,						ppxlcCurrQMBYBackup, ppxlcCurrQMBUBackup, ppxlcCurrQMBVBackup, NULL /*ppxlcCurrQMBABackup*/					);				}				else {					padCurrAndTopTranspMBFromNeighbor (						iMBXBackup, iMBYBackup,						pmbmdBackup,						ppxlcCurrQMBYBackup, ppxlcCurrQMBUBackup, ppxlcCurrQMBVBackup, NULL/*ppxlcCurrQMBABackup*/					);				}				bMBBackup = FALSE;			}			pmbmd++;			pmv += PVOP_MV_PER_REF_PER_MB;			pmvBY++;			mbn++;			piMCBPC++;			ppxlcCurrQMBBY += MB_SIZE;			ppxlcCurrQMBBUV += BLOCK_SIZE;			if(iMBX == m_iNumMBX - 1) {				ppxlcCurrQBY += m_iFrameWidthYxMBSize;				ppxlcCurrQBUV += m_iFrameWidthUVxBlkSize;			}			assert(mbn<=(m_iNumMBX*m_iNumMBY));		} while( !checkMotionMarker() );		m_pbitstrmIn -> getBits (NUMBITS_DP_MOTION_MARKER);		pmbmd = pmbmdFirst;		piMCBPC = piMCBPCFirst;		piIntraDC = piIntraDCFirst;		for(i=mbnFirst;i<mbn;i++) {			if (pmbmd->m_rgTranspStatus [0] != ALL && m_volmd.bShapeOnly==FALSE) {				decodeMBTextureHeadOfPVOP_DataPartitioning (pmbmd, iCurrentQP, piMCBPC, piIntraDC, &bRestartDelayedQP);			}			pmbmd++;			piMCBPC++;			piIntraDC += V_BLOCK;		}		pmbmd = pmbmdFirst;		pmv = pmvFirst;		piIntraDC = piIntraDCFirst;		ppxlcCurrQBY = (PixelC*) m_pvopcRefQ1->pixelsBY () + m_iStartInRefToCurrRctY + (mbnFirst/m_iNumMBX)*m_iFrameWidthYxMBSize;		ppxlcCurrQBUV = (PixelC*) m_pvopcRefQ1->pixelsBUV () + m_iStartInRefToCurrRctUV + (mbnFirst/m_iNumMBX)*m_iFrameWidthUVxBlkSize;		ppxlcCurrQMBBY = ppxlcCurrQBY + (mbnFirst%m_iNumMBX)*MB_SIZE;		ppxlcCurrQMBBUV = ppxlcCurrQBUV + (mbnFirst%m_iNumMBX)*BLOCK_SIZE;		for(i=mbnFirst;i<mbn;i++) {			pmbmd->m_bPadded = FALSE;			iMBX = i % m_iNumMBX;			iMBY = i / m_iNumMBX;			if(iMBX == 0 ) {				ppxlcCurrQMBY = ppxlcCurrQY;				ppxlcCurrQMBU = ppxlcCurrQU;				ppxlcCurrQMBV = ppxlcCurrQV;				ppxlcCurrQMBBY = ppxlcCurrQBY;//				ppxlcCurrQMBA  = ppxlcCurrQA;				ppxlcCurrQMBBUV = ppxlcCurrQBUV;				x = m_rctCurrVOPY.left;				if(iMBY != 0)	y += MB_SIZE;			} else {				x += MB_SIZE;			}			copyRefShapeToMb(m_ppxlcCurrMBBY, ppxlcCurrQMBBY);			// Changed HHI 2000-04-11			downSampleBY (m_ppxlcCurrMBBY, m_ppxlcCurrMBBUV, pmbmd); // downsample original BY now for LPE padding (using original shape)			if (pmbmd->m_rgTranspStatus [0] != ALL && m_volmd.bShapeOnly==FALSE) {				// 09/16/99 HHI Schueuer: added for sadct				if (!m_volmd.bSadctDisable)					deriveSADCTRowLengths(m_rgiCurrMBCoeffWidth, m_ppxlcCurrMBBY, m_ppxlcCurrMBBUV, pmbmd ->m_rgTranspStatus);				// end HHI				if (pmbmd->m_dctMd == INTRA || pmbmd->m_dctMd == INTRAQ){					// 09/16/99 HHI Schueuer: inserted for sadct					if (!m_volmd.bSadctDisable)						decodeTextureIntraMB_DataPartitioning (pmbmd, iMBX, iMBY, ppxlcCurrQMBY, ppxlcCurrQMBU, ppxlcCurrQMBV, piIntraDC, m_ppxlcCurrMBBY, m_ppxlcCurrMBBUV);					else						decodeTextureIntraMB_DataPartitioning (pmbmd, iMBX, iMBY, ppxlcCurrQMBY, ppxlcCurrQMBU, ppxlcCurrQMBV, piIntraDC);				}				// end HHI				else {					if (!pmbmd->m_bSkip){						// 09/16/99 HHI Schueuer: inserted for sadct						if (!m_volmd.bSadctDisable)							decodeTextureInterMB (pmbmd, m_ppxlcCurrMBBY, m_ppxlcCurrMBBUV);						else						// end HHI 									decodeTextureInterMB (pmbmd);					}				}			}			if(i==mbn-1){				bMBBackup = TRUE;				pmbmdBackup = pmbmd;				pmvBackup = pmv;				iMBXBackup = iMBX;				iMBYBackup = iMBY;				ppxlcCurrQMBYBackup = ppxlcCurrQMBY;				ppxlcCurrQMBUBackup = ppxlcCurrQMBU;				ppxlcCurrQMBVBackup = ppxlcCurrQMBV;				ppxlcCurrQMBBYBackup = ppxlcCurrQMBBY;				ppxlcCurrQMBBUVBackup = ppxlcCurrQMBBUV;				//ppxlcCurrQMBABackup = ppxlcCurrQMBA;				bPaddedLBackup = (pmbmdBackup-1)->m_bPadded;				bPaddedTBackup = (pmbmdBackup-m_iNumMBX)->m_bPadded;			}			if (pmbmd->m_rgTranspStatus [0] != ALL) {				if (pmbmd->m_dctMd == INTER || pmbmd->m_dctMd == INTERQ) {					//	Addded for data partitioning mode by Toshiba(1997-11-26:DP+RVLC)		 			motionCompMB (						m_ppxlcPredMBY, m_pvopcRefQ0->pixelsY (),						pmv, pmbmd, 						iMBX, iMBY, 						x, y,						pmbmd->m_bSkip, FALSE,						&m_rctRefVOPY0					);					if (!(pmbmd->m_bSkip && !pmbmd->m_bMCSEL)) { // GMC						CoordI iXRefUV, iYRefUV;// GMC					   if(!pmbmd->m_bMCSEL)// ~GMC						mvLookupUVWithShape (pmbmd, pmv, iXRefUV, iYRefUV);// GMC					   if(pmbmd->m_bMCSEL){							FindGlobalChromPredForGMC(x,y,m_ppxlcPredMBU,m_ppxlcPredMBV);					   }					   else// ~GMC						motionCompUV (m_ppxlcPredMBU, m_ppxlcPredMBV, m_pvopcRefQ0,							x, y, iXRefUV, iYRefUV, m_vopmd.iRoundingControl,&m_rctRefVOPY0);// GMC					   if(pmbmd->m_bSkip)						assignPredToCurrQ (ppxlcCurrQMBY, ppxlcCurrQMBU, ppxlcCurrQMBV);					   else// ~GMC						addErrorAndPredToCurrQ (ppxlcCurrQMBY, ppxlcCurrQMBU, ppxlcCurrQMBV);					}					else {						if (m_volmd.bAdvPredDisable)							copyFromRefToCurrQ (m_pvopcRefQ0, x, y, ppxlcCurrQMBY, ppxlcCurrQMBU, ppxlcCurrQMBV, &m_rctRefVOPY0);						else							copyFromPredForYAndRefForCToCurrQ (x, y, ppxlcCurrQMBY, ppxlcCurrQMBU, ppxlcCurrQMBV, &m_rctRefVOPY0);					}				}				if (pmbmd->m_rgTranspStatus [0] == PARTIAL)					mcPadCurrMB (ppxlcCurrQMBY, ppxlcCurrQMBU, ppxlcCurrQMBV, NULL/*ppxlcCurrQMBA*/);				padNeighborTranspMBs (					iMBX, iMBY,					pmbmd,					ppxlcCurrQMBY, ppxlcCurrQMBU, ppxlcCurrQMBV, NULL /*ppxlcCurrQMBA*/				);			}			else {				padCurrAndTopTranspMBFromNeighbor (					iMBX, iMBY,					pmbmd,					ppxlcCurrQMBY, ppxlcCurrQMBU, ppxlcCurrQMBV, NULL /*ppxlcCurrQMBA*/				);			}			pmbmd++;			pmv += PVOP_MV_PER_REF_PER_MB;			piIntraDC += V_BLOCK;			ppxlcCurrQMBY += MB_SIZE;			ppxlcCurrQMBU += BLOCK_SIZE;			ppxlcCurrQMBV += BLOCK_SIZE;			ppxlcCurrQMBBY += MB_SIZE;			ppxlcCurrQMBBUV += BLOCK_SIZE;			//ppxlcCurrQMBA += MB_SIZE;			if(iMBX == m_iNumMBX - 1) {				MacroBlockMemory** ppmbmTemp = m_rgpmbmAbove;				m_rgpmbmAbove = m_rgpmbmCurr;				m_rgpmbmCurr  = ppmbmTemp;				ppxlcCurrQY += m_iFrameWidthYxMBSize;				ppxlcCurrQU += m_iFrameWidthUVxBlkSize;				ppxlcCurrQV += m_iFrameWidthUVxBlkSize;				ppxlcCurrQBY += m_iFrameWidthYxMBSize;				ppxlcCurrQBUV += m_iFrameWidthYxBlkSize;//				ppxlcCurrQA  += m_iFrameWidthYxMBSize;			}		}	} while( checkResyncMarker() );	delete m_piIntraDC;	delete m_piMCBPC;}// End ToshibaVoid CVideoObjectDecoder::decodeMBTextureDCOfIVOP_DataPartitioning (CMBMode* pmbmd, Int& iCurrentQP,																	Int* piIntraDC, Bool *pbRestart){	Int iBlk = 0;		pmbmd->m_intStepDelta = 0;	pmbmd->m_bSkip = FALSE;

⌨️ 快捷键说明

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