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

📄 sys_encoder_shpenc.cpp

📁 完整的RTP RTSP代码库
💻 CPP
📖 第 1 页 / 共 4 页
字号:
			m_pbitstrmShapeMBOut->setBookmark ();			// try intra			UInt nBitsModeIntra = codeShapeModeInter (INTRA_CAE, shpmdColocatedMB);#ifdef __TRACE_AND_STATS_			m_pbitstrmOut->trace ("MB_CAE_INTRA_HORIZONTAL_CODING (TRIAL)");#endif // __TRACE_AND_STATS_			UInt nBitsHIntra = encodeCAEIntra (INTRA_CAE, HORIZONTAL);#ifdef __TRACE_AND_STATS_			m_pbitstrmOut->trace ("MB_CAE_INTRA_VERTICAL_CODING (TRIAL)");#endif // __TRACE_AND_STATS_			UInt nBitsVIntra = encodeCAEIntra (INTRA_CAE, VERTICAL);			UInt nBitsIntra = nBitsModeIntra + min (nBitsVIntra, nBitsHIntra);			// try inter			UInt nBitsMV=0;			UInt nBitsModeInter = codeShapeModeInter (pmbmd->m_shpmd, shpmdColocatedMB);			if(pmbmd->m_shpmd==INTER_CAE_MVDNZ)				nBitsMV = encodeMVDS (mvBYD);#ifdef __TRACE_AND_STATS_			m_pbitstrmOut->trace ("MB_CAE_INTER_VERTICAL_CODING (TRIAL)");#endif // __TRACE_AND_STATS_			UInt nBitsVInter = encodeCAEInter (pmbmd->m_shpmd, VERTICAL);#ifdef __TRACE_AND_STATS_			m_pbitstrmOut->trace ("MB_CAE_INTER_HORIZONTAL_CODING (TRIAL)");#endif // __TRACE_AND_STATS_			UInt nBitsHInter = encodeCAEInter (pmbmd->m_shpmd, HORIZONTAL);			UInt nBitsInter = nBitsModeInter + nBitsMV + min (nBitsVInter, nBitsHInter);			m_pbitstrmShapeMBOut->gotoBookmark ();						if (nBitsInter < nBitsIntra)			{				// choose inter coding#ifdef __TRACE_AND_STATS_				m_pbitstrmOut->trace ("MB_CAE_INTER_CODING (REAL)");				m_pbitstrmOut->trace (mvShapeMVP, "MB_SHP_MV_PRED (half pel)");				m_pbitstrmOut->trace (*pmvBY, "MB_SHP_MV (half pel)");				m_pbitstrmOut->trace (mvBYD, "MB_SHP_MVD (half pel)");#endif // __TRACE_AND_STATS_				codeShapeModeInter (pmbmd->m_shpmd, shpmdColocatedMB);				if(pmbmd->m_shpmd==INTER_CAE_MVDNZ)					encodeMVDS (mvBYD);				if(nBitsVInter<nBitsHInter)					encodeCAEInter (pmbmd->m_shpmd, VERTICAL);				else					encodeCAEInter (pmbmd->m_shpmd, HORIZONTAL);				return nBitsInter;			}			else			{				// choose intra coding#ifdef __TRACE_AND_STATS_				m_pbitstrmOut->trace ("MB_CAE_INTRA_CODING (REAL)");#endif // __TRACE_AND_STATS_				pmvBY->iMVX = NOT_MV;				pmvBY->iMVY = NOT_MV;				pmbmd->m_shpmd = INTRA_CAE;				codeShapeModeInter (pmbmd->m_shpmd, shpmdColocatedMB);				if(nBitsVIntra<nBitsHIntra)					encodeCAEIntra (pmbmd->m_shpmd, VERTICAL);				else					encodeCAEIntra (pmbmd->m_shpmd, HORIZONTAL);				return nBitsIntra;			}		}	case MVDZ_NOUPDT:	case MVDNZ_NOUPDT:		{#ifdef __TRACE_AND_STATS_			m_pbitstrmOut->trace ("MB_CAE_INTER_CODING_NO_UPDATE");			m_pbitstrmOut->trace (mvShapeMVP, "MB_SHP_MV_PRED (half pel)");			m_pbitstrmOut->trace (*pmvBY, "MB_SHP_MV (half pel)");			m_pbitstrmOut->trace (mvBYD, "MB_SHP_MVD (half pel)");#endif // __TRACE_AND_STATS_			copyReconShapeToMbAndRef (m_ppxlcCurrMBBY, ppxlcSrcFrm, m_puciPredBAB->pixels (), MC_BAB_SIZE, MC_BAB_BORDER);#ifdef __TRACE_AND_STATS_			m_pbitstrmOut->trace ((PixelC *)m_puciPredBAB->pixels(), MC_BAB_SIZE, MC_BAB_SIZE, "MB_MC_PRED_BAB");#endif // __TRACE_AND_STATS_			Int nBits = codeShapeModeInter (pmbmd->m_shpmd, shpmdColocatedMB);			if(pmbmd->m_shpmd==MVDNZ_NOUPDT)				nBits += encodeMVDS (mvBYD);				return nBits;		}	default:		assert(FALSE);		return 0;	}}//OBSS_SAIT_991015//for SI coding -PVOPInt CVideoObjectEncoder::codeSIShapePVOP (PixelC* ppxlcSrcFrm,										 CVOPU8YUVBA* pvopcRefQ,										 CMBMode* pmbmd, 										 const ShapeMode& shpmdColocatedMB,										 const CMotionVector* pmv, 										 CMotionVector* pmvBY, 										 CoordI iX, CoordI iY, 										 Int iMBX, Int iMBY){	m_iInverseCR = 1;	m_iWidthCurrBAB = BAB_SIZE;	pmbmd->m_shpssmd = UNDEFINED;	//	CMotionVector mvBYD (0, 0);#ifdef __TRACE_AND_STATS_	if(pmbmd->m_rgTranspStatus [0] == NONE)		m_pbitstrmOut->trace ("ORIGINAL BAB IS ALL MPEG4_OPAQUE");	else if(pmbmd->m_rgTranspStatus [0] == ALL)		m_pbitstrmOut->trace ("ORIGINAL BAB IS ALL TRANSP");	else		m_pbitstrmOut->trace (m_ppxlcCurrMBBY, MB_SIZE, MB_SIZE, "ORIGINAL_BAB");#endif // __TRACE_AND_STATS_	Int iMBnum = VPMBnum(iMBX, iMBY);	m_bVPNoLeft = bVPNoLeft(iMBnum, iMBX);	m_bVPNoTop = bVPNoTop(iMBnum);	m_bVPNoRightTop = bVPNoRightTop(iMBnum, iMBX);	m_bVPNoLeftTop = bVPNoLeftTop(iMBnum, iMBX);	m_bVPNoRight = bVPNoRight(iMBX);	m_bVPNoBottom = bVPNoBottom(iMBY);	motionCompBY ((PixelC*) m_puciPredBAB->pixels (),				  (PixelC*) pvopcRefQ->getPlane (BY_PLANE)->pixels (),				  iX-1, 						  iY-1);	//-1 due to 18x18 motion comp	pmvBY->iMVX = 0;	pmvBY->iMVY = 0;	if (!isErrorLarge (m_ppxlcCurrMBBY, m_rgiSubBlkIndx16x16, 16,		m_puciPredBAB->pixels (), m_rgiSubBlkIndx18x18, 18, pmbmd))		pmbmd->m_shpssmd = INTRA_NOT_CODED; //NO_UPDATE	else		pmbmd->m_shpssmd = INTRA_CODED; //CODED	if((m_volmd.iuseRefShape ==1) && !m_volmd.bShapeOnly) {		copyReconShapeToMbAndRef (m_ppxlcCurrMBBY, ppxlcSrcFrm, m_puciPredBAB->pixels (), MC_BAB_SIZE, MC_BAB_BORDER);		Int nBits =0;		return nBits;	} 	switch(pmbmd->m_shpssmd){	case INTRA_CODED:	{	m_bNoShapeChg = TRUE;	m_iInverseCR = 1;	m_iWidthCurrBAB = BAB_SIZE;	// copy data to ReconCurrBAB	PixelC* ppxlcDst = m_ppxlcReconCurrBAB + BAB_BORDER + BAB_BORDER * TOTAL_BAB_SIZE;	PixelC* ppxlcSrc = m_ppxlcCurrMBBY;	Int iUnit = sizeof(PixelC); // NBIT: for memcpy	Int i;	for (i = 0; i < MB_SIZE; i++) {		memcpy (ppxlcDst, ppxlcSrc, MB_SIZE*iUnit);		ppxlcSrc += MB_SIZE;		ppxlcDst += BAB_SIZE;	}	// make borders	copyLeftTopBorderFromVOP (ppxlcSrcFrm, m_ppxlcReconCurrBAB);	makeRightBottomBorder (	m_ppxlcReconCurrBAB, 							TOTAL_BAB_SIZE,							(PixelC*)((pvopcRefQ->getPlane (BY_PLANE)->pixels ())+(iY + EXPANDY_REF_FRAME) * m_iFrameWidthY + iX + EXPANDY_REF_FRAME),							m_iFrameWidthY);	// assign encoding buffer	m_rgpxlcCaeSymbol = m_ppxlcReconCurrBAB;		if (m_bNoShapeChg)  copyReconShapeToRef (ppxlcSrcFrm, m_ppxlcReconCurrBAB, TOTAL_BAB_SIZE, BAB_BORDER);	else				copyReconShapeToMbAndRef (m_ppxlcCurrMBBY, ppxlcSrcFrm, m_ppxlcReconCurrBAB, TOTAL_BAB_SIZE, BAB_BORDER);#ifdef __TRACE_AND_STATS_	m_pbitstrmOut->trace ((PixelC *)m_puciPredBAB->pixels(), MC_BAB_SIZE, MC_BAB_SIZE, "MB_MC_PRED_BAB");	m_pbitstrmOut->trace (m_ppxlcReconCurrBAB, TOTAL_BAB_SIZE, TOTAL_BAB_SIZE, "MB_RECON_BAB (Ignore Borders)");	m_pbitstrmOut->trace (m_rgpxlcCaeSymbol, m_iWidthCurrBAB , m_iWidthCurrBAB , "MB_ENCODED_BAB");#endif // __TRACE_AND_STATS_//OBSS shape mode coding	UInt nBitsModeIntra=0;	nBitsModeIntra = codeShapeModeSSIntra (INTRA_CODED, shpmdColocatedMB);#ifdef __TRACE_AND_STATS_			m_pbitstrmOut->trace ("INTRA_CODED_CODING");#endif // __TRACE_AND_STATS_			UInt nBitsSIIntra = encodeSIIntra (INTRA_CODED, (pvopcRefQ->getPlane (BY_PLANE)->m_pbHorSamplingChk)+iX, (pvopcRefQ->getPlane (BY_PLANE)->m_pbVerSamplingChk)+iY);#ifdef __TRACE_AND_STATS_			m_pbitstrmOut->trace ("SI_INTRA_CODING");#endif // __TRACE_AND_STATS_			UInt nBitsIntra = nBitsModeIntra + nBitsSIIntra;	return nBitsIntra;	}	case INTRA_NOT_CODED: 	{#ifdef __TRACE_AND_STATS_			m_pbitstrmOut->trace ("SPATIAL_SCALABLE_SHAPE_NO_UPDATE");			m_pbitstrmOut->trace (*pmvBY, "MB_SHP_MV (half pel)");#endif // __TRACE_AND_STATS_		copyReconShapeToMbAndRef (m_ppxlcCurrMBBY, ppxlcSrcFrm, m_puciPredBAB->pixels (), /*BAB_SIZE-BAB_BORDER*2*/MC_BAB_SIZE, /*0*/MC_BAB_BORDER);#ifdef __TRACE_AND_STATS_		m_pbitstrmOut->trace ((PixelC *)m_puciPredBAB->pixels(), MC_BAB_SIZE, MC_BAB_SIZE, "MB_MC_PRED_BAB_SS");#endif // __TRACE_AND_STATS_//OBSS shape mode coding		Int nBits=0;		nBits = codeShapeModeSSIntra (INTRA_NOT_CODED, shpmdColocatedMB);		return nBits;	} 	default:		assert(FALSE);		return 0;	}}//for BVOP SI shape codingInt CVideoObjectEncoder::codeSIShapeBVOP (PixelC* ppxlcSrcFrm,										 CVOPU8YUVBA* pvopcRefQ0,	//previous VOP										 CVOPU8YUVBA* pvopcRefQ1,	//lower reference VOP										 CMBMode* pmbmd, 										 const ShapeMode& shpmdColocatedMB,										 const CMotionVector* pmv, 										 CMotionVector* pmvBY, 										 CMotionVector* pmvBaseBY, 										 CoordI iX, CoordI iY, 										 Int iMBX, Int iMBY){	UInt nBitsIntra=0;	m_iInverseCR = 1;	m_iWidthCurrBAB = BAB_SIZE;	pmbmd->m_shpssmd = UNDEFINED;	//	CMotionVector mvBYD (0, 0);#ifdef __TRACE_AND_STATS_	if(pmbmd->m_rgTranspStatus [0] == NONE)		m_pbitstrmOut->trace ("ORIGINAL BAB IS ALL MPEG4_OPAQUE");	else if(pmbmd->m_rgTranspStatus [0] == ALL)		m_pbitstrmOut->trace ("ORIGINAL BAB IS ALL TRANSP");	else		m_pbitstrmOut->trace (m_ppxlcCurrMBBY, MB_SIZE, MB_SIZE, "ORIGINAL_BAB");#endif // __TRACE_AND_STATS_	Int iMBnum = VPMBnum(iMBX, iMBY);	m_bVPNoLeft = bVPNoLeft(iMBnum, iMBX);	m_bVPNoTop = bVPNoTop(iMBnum);	m_bVPNoRightTop = bVPNoRightTop(iMBnum, iMBX);	m_bVPNoLeftTop = bVPNoLeftTop(iMBnum, iMBX);	m_bVPNoRight = bVPNoRight(iMBX);	m_bVPNoBottom = bVPNoBottom(iMBY);	// copy data to ReconCurrBAB	PixelC* ppxlcDst = m_ppxlcReconCurrBAB + BAB_BORDER + BAB_BORDER * TOTAL_BAB_SIZE;	PixelC* ppxlcSrc = m_ppxlcCurrMBBY;	Int iUnit = sizeof(PixelC); // NBIT: for memcpy	Int i;	for (i = 0; i < MB_SIZE; i++) {		memcpy (ppxlcDst, ppxlcSrc, MB_SIZE*iUnit);		ppxlcSrc += MB_SIZE;		ppxlcDst += BAB_SIZE;	}	motionCompLowerBY ((PixelC*) m_puciPredBAB->pixels (),				  (PixelC*) pvopcRefQ1->getPlane (BY_PLANE)->pixels (),				  iX-1, 						  iY-1);	//-1 due to 18x18 motion comp		// make borders	copyLeftTopBorderFromVOP (ppxlcSrcFrm, m_ppxlcReconCurrBAB);	makeRightBottomBorder (	m_ppxlcReconCurrBAB, TOTAL_BAB_SIZE,							(PixelC*)((pvopcRefQ1->getPlane (BY_PLANE)->pixels ())+(iY + EXPANDY_REF_FRAME) * m_iFrameWidthY + iX + EXPANDY_REF_FRAME),							m_iFrameWidthY);		// assign encoding buffer	m_rgpxlcCaeSymbol = m_ppxlcReconCurrBAB;	if((m_volmd.iuseRefShape ==1) && !m_volmd.bShapeOnly) {		copyReconShapeToMbAndRef (m_ppxlcCurrMBBY, ppxlcSrcFrm, m_puciPredBAB->pixels (), MC_BAB_SIZE, MC_BAB_BORDER);		Int nBits =0;		return nBits;	} 	if (!isErrorLarge (m_ppxlcCurrMBBY, m_rgiSubBlkIndx16x16, 16,		m_puciPredBAB->pixels (), m_rgiSubBlkIndx18x18, 18, pmbmd)){		if(!(shpmdColocatedMB == 0 || shpmdColocatedMB == 1)){			if (pmvBaseBY->iMVX == NOT_MV && pmvBaseBY->iMVY == NOT_MV ){				pmvBaseBY->iMVX = 0;				pmvBaseBY->iMVY = 0;			}			motionCompBY ((PixelC*) m_puciPredBAB->pixels (),						  (PixelC*) pvopcRefQ0->getPlane (BY_PLANE)->pixels (),						  (((pmvBaseBY->iMVX)*m_volmd.ihor_sampling_factor_n_shape+(SIGN(pmvBaseBY->iMVX))*m_volmd.ihor_sampling_factor_m_shape/2)/m_volmd.ihor_sampling_factor_m_shape) + iX - 1,								  (((pmvBaseBY->iMVY)*m_volmd.iver_sampling_factor_n_shape+(SIGN(pmvBaseBY->iMVY))*m_volmd.iver_sampling_factor_m_shape/2)/m_volmd.iver_sampling_factor_m_shape) + iY - 1);	//-1 due to 18x18 motion comp			if (!isErrorLarge (m_ppxlcCurrMBBY, m_rgiSubBlkIndx16x16, 16,					m_puciPredBAB->pixels (), m_rgiSubBlkIndx18x18, 18, pmbmd)){					pmvBY->iMVX = (((pmvBaseBY->iMVX)*m_volmd.ihor_sampling_factor_n_shape+(SIGN(pmvBaseBY->iMVX))*m_volmd.ihor_sampling_factor_m_shape/2)/m_volmd.ihor_sampling_factor_m_shape);					pmvBY->iMVY = (((pmvBaseBY->iMVY)*m_volmd.iver_sampling_factor_n_shape+(SIGN(pmvBaseBY->iMVY))*m_volmd.iver_sampling_factor_m_shape/2)/m_volmd.iver_sampling_factor_m_shape);					pmbmd->m_shpssmd = INTER_NOT_CODED; //INTER_NO_UPDATE//INTER_NOT_CODED mode Coding				#ifdef __TRACE_AND_STATS_					m_pbitstrmOut->trace ("SCALABLE_SHAPE_INTER_NO_UPDATE");					m_pbitstrmOut->trace (*pmvBY, "MB_SHP_MV (half pel)");				#endif // __TRACE_AND_STATS_				copyReconShapeToMbAndRef (m_ppxlcCurrMBBY, ppxlcSrcFrm, m_puciPredBAB->pixels (), MC_BAB_SIZE, MC_BAB_BORDER);				#ifdef __TRACE_AND_STATS_				m_pbitstrmOut->trace ((PixelC *)m_puciPredBAB->pixels(), MC_BAB_SIZE, MC_BAB_SIZE, "MB_MC_PRED_BAB_SS");				#endif // __TRACE_AND_STATS_				//OBSS shape mode coding				Int nBits=0;				nBits = codeShapeModeSSInter (INTER_NOT_CODED, shpmdColocatedMB);				return nBits;						}			else {				motionCompLowerBY ((PixelC*) m_puciPredBAB->pixels (),							  (PixelC*) pvopcRefQ1->getPlane (BY_PLANE)->pixels (),							  iX-1, 									  iY-1);	//-1 due to 18x18 motion comp			}		}		pmvBY->iMVX = 0;		pmvBY->iMVY = 0;		pmbmd->m_shpssmd = INTRA_NOT_CODED; //INTRA_NO_UPDATE//INTRA_NOT_CODED mode Coding		#ifdef __TRACE_AND_STATS_		m_pbitstrmOut->trace ("SCALABLE_SHAPE_INTRA_NO_UPDATE");		m_pbitstrmOut->trace (*pmvBY, "MB_SHP_MV (half pel)");		#endif // __TRACE_AND_STATS_		copyReconShapeToMbAndRef (m_ppxlcCurrMBBY, ppxlcSrcFrm, m_puciPredBAB->pixels (), MC_BAB_SIZE, MC_BAB_BORDER);		#ifdef __TRACE_AND_STATS_		m_pbitstrmOut->trace ((PixelC *)m_puciPredBAB->pixels(), MC_BAB_SIZE, MC_BAB_SIZE, "MB_MC_PRED_BAB_SS");		#endif // __TRACE_AND_STATS_		//SS shape mode coding		Int nBits=0;		nBits = codeShapeModeSSInter (INTRA_NOT_CODED, shpmdColocatedMB);		return nBits;		}	else {	m_pbitstrmShapeMBOut->setBookmark ();//try INTRA_CODED	UInt nBitsModeIntra = codeShapeModeSSInter (INTRA_CODED, shpmdColocatedMB);#ifdef __TRACE_AND_STATS_	m_pbitstrmOut->trace ("SCALABLE_SHAPE_INTRA_CODED_CODING (TRIAL)");#endif // __TRACE_AND_STATS_	UInt nBitsSIIntra = encodeSIIntra (INTRA_CODED, (pvopcRefQ1->getPlane (BY_PLANE)->m_pbHorSamplingChk)+iX, (pvopcRefQ1->getPlane (BY_PLANE)->m_pbVerSamplingChk)+iY);	nBitsIntra = nBitsModeIntra + nBitsSIIntra;	m_pbitstrmShapeMBOut->gotoBookmark ();			//if lower layer has no motion vector then the current MV is set to (0,0)	if (pmvBaseBY->iMVX == NOT_MV && pmvBaseBY->iMVY == NOT_MV ){		pmvBaseBY->iMVX = 0;		pmvBaseBY->iMVY = 0;	}	motionCompBY (	(PixelC*) m_puciPredBAB->pixels (),					(PixelC*) pvopcRefQ0->getPlane (BY_PLANE)->pixels (),					(((pmvBaseBY->iMVX)*m_volmd.ihor_sampling_factor_n_shape+(SIGN(pmvBaseBY->iMVX))*m_volmd.ihor_sampling_factor_m_shape/2)/m_volmd.ihor_sampling_factor_m_shape) + iX - 1,							(((pmvBaseBY->iMVY)*m_volmd.iver_sampling_factor_n_shape+(SIGN(pmvBaseBY->iMVY))*m_volmd.iver_sampling_factor_m_shape/2)/m_volmd.iver_sampling_factor_m_shape) + iY - 1);	//-1 due to 18x18 motion comp	if (!isErrorLarge (m_ppxlcCurrMBBY, m_rgiSubBlkIndx16x16, 16,			m_puciPredBAB->pixels (), m_rgiSubBlkIndx18x18, 18, pmbmd)){			pmvBY->iMVX = (((pmvBaseBY->iMVX)*m_volmd.ihor_sampling_factor_n_shape+(SIGN(pmvBaseBY->iMVX))*m_volmd.ihor_sampling_factor_m_shape/2)/m_volmd.ihor_sampling_factor_m_shape);			pmvBY->iMVY = (((pmvBaseBY->iMVY)*m_volmd.iver_sampling_factor_n_shape+(SIGN(pmvBaseBY->iMVY))*m_volmd.iver_sampling_factor_m_shape/2)/m_volmd.iver_sampling_factor_m_shape);			pmbmd->m_shpssmd = INTER_NOT_CODED; //INTER_NO_UPDATE//INTER_NOT_CODED mode Coding			#ifdef __TRACE_AND_STATS_				m_pbitstrmOut->trace ("SCALABLE_SHAPE_INTER_NO_UPDATE");				m_pbitstrmOut->trace (*pmvBY, "MB_SHP_MV (half pel)");			#endif // __TRACE_AND_STATS_			copyReconShapeToMbAndRef (m_ppxlcCurrMBBY, ppxlcSrcFrm, m_puciPredBAB->pixels (), MC_BAB_SIZE, MC_BAB_BORDER);			#ifdef __TRACE_AND_STATS_			m_pbitstrmOut->trace ((PixelC *)m_puciPredBAB->pixels(), MC_BAB_SIZE, MC_BAB_SIZE, "MB_MC_PRED_BAB_SS");			#endif // __TRACE_AND_STATS_			//OBSS shape mode coding			Int nBits=0;			nBits = codeShapeModeSSInter (INTER_NOT_CODED, shpmdColocatedMB);

⌨️ 快捷键说明

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