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

📄 shpdec.cpp

📁 网络MPEG4IP流媒体开发源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				upSampleShape(ppxlcMBBYFrm,m_rgpxlcCaeSymbol,m_ppxlcReconCurrBAB);			copyReconShapeToMbAndRef (ppxlcMBBY, ppxlcMBBYFrm, m_ppxlcReconCurrBAB, TOTAL_BAB_SIZE, BAB_BORDER);	//copy rounded data		}		else {			copyReconShapeToMbAndRef (ppxlcMBBY, ppxlcMBBYFrm, m_puciPredBAB->pixels (), MC_BAB_SIZE, MC_BAB_BORDER);		}				decideTransparencyStatus (pmbmd, ppxlcMBBY);		assert (pmbmd->m_rgTranspStatus [0] != ALL);	}//putchar('\n');}Int CVideoObjectDecoder::shpMdTableIndex (const CMBMode* pmbmd, Int iMBX, Int iMBY){		//get previous shape codes; 	//	Added for error resilient mode by Toshiba(1997-11-14)	Bool bLeftBndry, bRightTopBndry, bTopBndry, bLeftTopBndry;	Int iMBnum = VPMBnum(iMBX, iMBY);	bLeftBndry = bVPNoLeft(iMBnum, iMBX);	bTopBndry = bVPNoTop(iMBnum);	bRightTopBndry = bVPNoRightTop(iMBnum, iMBX);	bLeftTopBndry = bVPNoLeftTop(iMBnum, iMBX);	ShapeMode shpmdTop	= !bTopBndry ? (pmbmd - m_iNumMBX)->m_shpmd : ALL_TRANSP;	ShapeMode shpmdTopR	= !bRightTopBndry ? (pmbmd - m_iNumMBX + 1)->m_shpmd : ALL_TRANSP;	ShapeMode shpmdTopL	= !bLeftTopBndry ? (pmbmd - m_iNumMBX - 1)->m_shpmd : ALL_TRANSP;	ShapeMode shpmdLeft	= !bLeftBndry ? (pmbmd - 1)->m_shpmd : ALL_TRANSP;	return (shpmdTopL * 81 +  shpmdTop * 27 + shpmdTopR * 9 + shpmdLeft * 3);	//const CMBMode* pmbmdTop = pmbmd - m_iNumMBX;	//ShapeMode shpmdTop		= (iMBY > 0) ? pmbmdTop->m_shpmd : ALL_TRANSP;	//ShapeMode shpmdTopR	= (iMBY > 0 && iMBX < m_iNumMBX - 1) ? (pmbmdTop + 1)->m_shpmd : ALL_TRANSP;	//ShapeMode shpmdTopL	= (iMBY > 0 && iMBX > 0) ? (pmbmdTop - 1)->m_shpmd : ALL_TRANSP;	//ShapeMode shpmdLeft		= (iMBX > 0) ? (pmbmd - 1)->m_shpmd : ALL_TRANSP;	//return (shpmdTopL * 81 +  shpmdTop * 27 + shpmdTopR * 9 + shpmdLeft * 3);	// End Toshiba(1997-11-14)}Void CVideoObjectDecoder::decodeIntraCaeBAB (PixelC* ppxlcBYMB, PixelC* ppxlcBYFrm){	if (m_volmd.bNoCrChange == TRUE || m_pbitstrmIn->getBits (1) == 0)	{		m_iInverseCR = 1;		m_iWidthCurrBAB = BAB_SIZE;		copyLeftTopBorderFromVOP (ppxlcBYFrm, m_ppxlcReconCurrBAB);  //used for upsample and CAE		m_rgpxlcCaeSymbol = m_ppxlcReconCurrBAB;		//assign encoding buffer		if (m_pbitstrmIn->getBits (1) == 1) 			decodeIntraCAEH ();			//right bottom border made on the fly		else			decodeIntraCAEV ();	}	else	{		if (m_pbitstrmIn->getBits (1) == 0)	{			m_iInverseCR = 2;			m_iWidthCurrBAB = 12;			subsampleLeftTopBorderFromVOP (ppxlcBYFrm, m_ppxlcCurrMBBYDown2);			m_rgpxlcCaeSymbol = m_ppxlcCurrMBBYDown2;		//assign encoding buffer		}		else {			m_iInverseCR = 4;			m_iWidthCurrBAB = 8;			subsampleLeftTopBorderFromVOP (ppxlcBYFrm, m_ppxlcCurrMBBYDown4);			m_rgpxlcCaeSymbol = m_ppxlcCurrMBBYDown4;		//assign encoding buffer		}		if (m_pbitstrmIn->getBits (1) == 1) 			decodeIntraCAEH ();     //right bottom border made on the fly		else			decodeIntraCAEV (); 		upSampleShape(ppxlcBYFrm,m_rgpxlcCaeSymbol,m_ppxlcReconCurrBAB);	}		copyReconShapeToMbAndRef (ppxlcBYMB, ppxlcBYFrm, m_ppxlcReconCurrBAB, TOTAL_BAB_SIZE, BAB_BORDER);}Void CVideoObjectDecoder::decodeIntraCAEH (){	StartArDecoder (m_parcodec, m_pbitstrmIn);	PixelC* ppxlcDstRow = m_rgpxlcCaeSymbol + m_iWidthCurrBAB * BAB_BORDER + BAB_BORDER;	for (Int iRow = BAB_BORDER; iRow < m_iWidthCurrBAB - BAB_BORDER; iRow++)	{		PixelC* ppxlcDst = ppxlcDstRow;		for (Int iCol = BAB_BORDER; iCol < m_iWidthCurrBAB - BAB_BORDER; iCol++)	{			Int iContext = contextIntra (ppxlcDst);//printf("%d ",iContext);			*ppxlcDst++ = (ArDecodeSymbol (gCAEintraProb [iContext], m_parcodec, m_pbitstrmIn)) ? MPEG4_OPAQUE : MPEG4_TRANSPARENT;		}		*ppxlcDst = *(ppxlcDst - 1);		*(ppxlcDst + 1) = *ppxlcDst;		//make right border on the fly		ppxlcDstRow += m_iWidthCurrBAB;	}//printf("\n\n");	StopArDecoder (m_parcodec, m_pbitstrmIn);	PixelC* ppxlcDst = m_rgpxlcCaeSymbol + 		m_iWidthCurrBAB * (m_iWidthCurrBAB - BAB_BORDER) + BAB_BORDER;	for (Int iCol = BAB_BORDER; iCol < m_iWidthCurrBAB; iCol++)	{		//make bottom border		*ppxlcDst = *(ppxlcDst - m_iWidthCurrBAB);		*(ppxlcDst + m_iWidthCurrBAB) = *ppxlcDst;		ppxlcDst++;	}}Void CVideoObjectDecoder::decodeIntraCAEV (){	StartArDecoder (m_parcodec, m_pbitstrmIn);	PixelC* ppxlcDstCol = m_rgpxlcCaeSymbol + m_iWidthCurrBAB * BAB_BORDER + BAB_BORDER;	for (Int iCol = BAB_BORDER; iCol < m_iWidthCurrBAB - BAB_BORDER; iCol++)	{		PixelC* ppxlcDst = ppxlcDstCol;		for (Int iRow = BAB_BORDER; iRow < m_iWidthCurrBAB - BAB_BORDER; iRow++)	{			Int iContext = contextIntraTranspose (ppxlcDst);			*ppxlcDst = (ArDecodeSymbol (gCAEintraProb [iContext], m_parcodec, m_pbitstrmIn)) ? MPEG4_OPAQUE : MPEG4_TRANSPARENT;			ppxlcDst += m_iWidthCurrBAB;		}		*ppxlcDst = *(ppxlcDst - m_iWidthCurrBAB);		*(ppxlcDst + m_iWidthCurrBAB) = *ppxlcDst;		//make bottom border on the fly		ppxlcDstCol++;	}	StopArDecoder (m_parcodec, m_pbitstrmIn);	PixelC* ppxlcDst = m_rgpxlcCaeSymbol + (m_iWidthCurrBAB - BAB_BORDER) + m_iWidthCurrBAB * BAB_BORDER;	for (Int iRow = BAB_BORDER; iRow < m_iWidthCurrBAB; iRow++)	{		//make right border		*ppxlcDst = *(ppxlcDst - 1);		*(ppxlcDst + 1) = *ppxlcDst;		ppxlcDst += m_iWidthCurrBAB;	}}Void CVideoObjectDecoder::decodeInterCAEH (const PixelC *ppxlcPredBAB){	StartArDecoder (m_parcodec, m_pbitstrmIn);	Int iSizePredBAB = m_iWidthCurrBAB - 2*BAB_BORDER + 2*MC_BAB_BORDER;	Int iSizeMB = m_iWidthCurrBAB - 2*BAB_BORDER;	PixelC* ppxlcDstRow  = m_rgpxlcCaeSymbol + m_iWidthCurrBAB * BAB_BORDER + BAB_BORDER;	const PixelC* ppxlcPredRow = ppxlcPredBAB + iSizePredBAB * MC_BAB_BORDER + MC_BAB_BORDER;	for (Int iRow = 0; iRow < iSizeMB; iRow++)	{		PixelC* ppxlcDst = ppxlcDstRow;		const PixelC* ppxlcPred = ppxlcPredRow;		for (Int iCol = 0; iCol < iSizeMB; iCol++)	{			Int iContext = contextInter (ppxlcDst, ppxlcPred);			*ppxlcDst++ = (ArDecodeSymbol (gCAEinterProb [iContext], m_parcodec, m_pbitstrmIn)) ? MPEG4_OPAQUE : MPEG4_TRANSPARENT;			ppxlcPred++;		}		*ppxlcDst = *(ppxlcDst - 1);		*(ppxlcDst + 1) = *ppxlcDst;		//make right border on the fly		ppxlcDstRow += m_iWidthCurrBAB;		ppxlcPredRow += iSizePredBAB;	}	StopArDecoder (m_parcodec, m_pbitstrmIn);	PixelC* ppxlcDst = m_rgpxlcCaeSymbol + 		m_iWidthCurrBAB * (m_iWidthCurrBAB - BAB_BORDER) + BAB_BORDER;	for (Int iCol = BAB_BORDER; iCol < m_iWidthCurrBAB; iCol++)	{		//make bottom border		*ppxlcDst = *(ppxlcDst - m_iWidthCurrBAB);		*(ppxlcDst + m_iWidthCurrBAB) = *ppxlcDst;		ppxlcDst++;	}}Void CVideoObjectDecoder::decodeInterCAEV (const PixelC *ppxlcPredBAB){	StartArDecoder (m_parcodec, m_pbitstrmIn);	Int iSizePredBAB = m_iWidthCurrBAB - 2*BAB_BORDER + 2*MC_BAB_BORDER;	Int iSizeMB = m_iWidthCurrBAB - 2*BAB_BORDER;	PixelC* ppxlcDstCol  = m_rgpxlcCaeSymbol + m_iWidthCurrBAB * BAB_BORDER + BAB_BORDER;	const PixelC* ppxlcPredCol = ppxlcPredBAB + iSizePredBAB * MC_BAB_BORDER + MC_BAB_BORDER;	for (Int iCol = 0; iCol < iSizeMB;iCol++)	{		PixelC* ppxlcDst = ppxlcDstCol;		const PixelC* ppxlcPred = ppxlcPredCol;		for (Int iRow = 0; iRow < iSizeMB; iRow++)	{			Int iContext = contextInterTranspose (ppxlcDst, ppxlcPred);			*ppxlcDst = (ArDecodeSymbol (gCAEinterProb [iContext], m_parcodec, m_pbitstrmIn)) ? MPEG4_OPAQUE : MPEG4_TRANSPARENT;			ppxlcDst += m_iWidthCurrBAB;			ppxlcPred += iSizePredBAB;		}		*ppxlcDst = *(ppxlcDst - m_iWidthCurrBAB);		*(ppxlcDst + m_iWidthCurrBAB) = *ppxlcDst;		//make bottom border on the fly		ppxlcDstCol++;		ppxlcPredCol++;	}	StopArDecoder (m_parcodec, m_pbitstrmIn);	PixelC* ppxlcDst = m_rgpxlcCaeSymbol + (m_iWidthCurrBAB - BAB_BORDER) + m_iWidthCurrBAB * BAB_BORDER;	for (Int iRow = BAB_BORDER; iRow < m_iWidthCurrBAB; iRow++)	{		//make right border		*ppxlcDst = *(ppxlcDst - 1);		*(ppxlcDst + 1) = *ppxlcDst;		ppxlcDst += m_iWidthCurrBAB;	}}Void CVideoObjectDecoder::decodeMVDS (CMotionVector& mvDiff){	mvDiff.iMVX = m_pentrdecSet->m_pentrdecShapeMV1->decodeSymbol ();				if (mvDiff.iMVX != 0)		if (m_pbitstrmIn->getBits (1) == 0)			mvDiff.iMVX *= -1;	if (mvDiff.iMVX == 0)			mvDiff.iMVY = m_pentrdecSet->m_pentrdecShapeMV2->decodeSymbol () + 1;				else		mvDiff.iMVY = m_pentrdecSet->m_pentrdecShapeMV1->decodeSymbol ();				if (mvDiff.iMVY != 0)		if (m_pbitstrmIn->getBits (1) == 0)			mvDiff.iMVY *= -1;	mvDiff.computeTrueMV ();}

⌨️ 快捷键说明

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