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

📄 sesenc.cpp

📁 网络MPEG4IP流媒体开发源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			m_rgvolmd [iLayer][iVO].bIntraCAE = rgbIntraCAE [iLayer][iVO];			m_rgvolmd [iLayer][iVO].bInterCAE = rgbInterCAE [iLayer][iVO];			m_rgvolmd [iLayer][iVO].bNoUpdate = rgbNoUpdate [iLayer][iVO];			m_rgvolmd [iLayer][iVO].bUpsampling = rgbUpsampling [iLayer][iVO];			m_rgvolmd [iLayer][iVO].bIntraBlocks = rgbIntraBlocks [iLayer][iVO];			m_rgvolmd [iLayer][iVO].bInterBlocks = rgbInterBlocks [iLayer][iVO];			m_rgvolmd [iLayer][iVO].bInter4vBlocks = rgbInter4vBlocks [iLayer][iVO];			m_rgvolmd [iLayer][iVO].bNotCodedBlocks = rgbNotCodedBlocks [iLayer][iVO];			m_rgvolmd [iLayer][iVO].bDCTCoefs = rgbDCTCoefs [iLayer][iVO];			m_rgvolmd [iLayer][iVO].bDCTLines = rgbDCTLines [iLayer][iVO];			m_rgvolmd [iLayer][iVO].bVLCSymbols = rgbVLCSymbols [iLayer][iVO];			m_rgvolmd [iLayer][iVO].bVLCBits = rgbVLCBits [iLayer][iVO];			m_rgvolmd [iLayer][iVO].bAPM = rgbAPM [iLayer][iVO];			m_rgvolmd [iLayer][iVO].bNPM = rgbNPM [iLayer][iVO];			m_rgvolmd [iLayer][iVO].bInterpolateMCQ = rgbInterpolateMCQ [iLayer][iVO];			m_rgvolmd [iLayer][iVO].bForwBackMCQ = rgbForwBackMCQ [iLayer][iVO];			m_rgvolmd [iLayer][iVO].bHalfpel2 = rgbHalfpel2 [iLayer][iVO];			m_rgvolmd [iLayer][iVO].bHalfpel4 = rgbHalfpel4 [iLayer][iVO];			m_rgvolmd [iLayer][iVO].bAllowSkippedPMBs = rgbAllowSkippedPMBs [iVO];			// END: Complexity Estimation syntax support			// START: Vol Control Parameters			if(rguiVolControlParameters[0]!=NULL)			{				m_rgvolmd [iLayer][iVO].uiVolControlParameters = rguiVolControlParameters [iLayer][iVO];				m_rgvolmd [iLayer][iVO].uiChromaFormat = rguiChromaFormat [iLayer][iVO];				m_rgvolmd [iLayer][iVO].uiLowDelay = rguiLowDelay [iLayer][iVO];				m_rgvolmd [iLayer][iVO].uiVBVParams = rguiVBVParams [iLayer][iVO];				m_rgvolmd [iLayer][iVO].uiBitRate = rguiBitRate [iLayer][iVO];				m_rgvolmd [iLayer][iVO].uiVbvBufferSize = rguiVbvBufferSize [iLayer][iVO];				m_rgvolmd [iLayer][iVO].uiVbvBufferOccupany = rguiVbvBufferOccupany [iLayer][iVO];			}			else				m_rgvolmd [iLayer][iVO].uiVolControlParameters = 0;			// END: Vol Control Parameters			m_rgvolmd [iLayer][iVO].bRoundingControlDisable	= (iLayer== BASE_LAYER) ? rgbRoundingControlDisable[iVO] : 0;			m_rgvolmd [iLayer][iVO].iInitialRoundingType = (iLayer== BASE_LAYER) ? rgiInitialRoundingType[iVO] : 0;			m_rgvolmd [iLayer][iVO].bVPBitTh		= rgbVPBitTh[iLayer][iVO];			m_rgvolmd [iLayer][iVO].bDataPartitioning = rgbDataPartitioning [iLayer][iVO];			m_rgvolmd [iLayer][iVO].bReversibleVlc  = rgbReversibleVlc [iLayer][iVO];			m_rgvolmd [iLayer][iVO].fQuantizer		= rgfQuant [iLayer][iVO];			m_rgvolmd [iLayer][iVO].bNoGrayQuantUpdate 													= rgbNoAlphaQuantUpdate [iLayer][iVO];			m_rgvolmd [iLayer][iVO].dFrameHz		= rgdFrameFrequency [iLayer][iVO];			m_rgvolmd [iLayer][iVO].iMVRadiusPerFrameAwayFromRef = rguiSearchRange [iLayer][iVO];			m_rgvopmd [iLayer][iVO].iSearchRangeForward	= rguiSearchRange [iLayer][iVO];			m_rgvopmd [iLayer][iVO].iSearchRangeBackward= rguiSearchRange [iLayer][iVO];			m_rgvopmd [iLayer][iVO].intStepI		= rgiStepI [iLayer][iVO];			m_rgvopmd [iLayer][iVO].intStep			= rgiStepP [iLayer][iVO];			m_rgvopmd [iLayer][iVO].intStepB		= rgiStepB [iLayer][iVO];			m_rgvopmd [iLayer][iVO].intStepIAlpha	= rgiStepIAlpha [iLayer][iVO];			m_rgvopmd [iLayer][iVO].intStepPAlpha	= rgiStepPAlpha [iLayer][iVO];			m_rgvopmd [iLayer][iVO].intStepBAlpha	= rgiStepBAlpha [iLayer][iVO];			m_rgvopmd [iLayer][iVO].iIntraDcSwitchThr 													= rgiIntraDCSwitchingThr [iLayer][iVO];			m_rgvopmd [iLayer][iVO].bInterlace		= rgbInterlacedCoding [iLayer][iVO];			m_rgvopmd [iLayer][iVO].bTopFieldFirst	= rgbTopFieldFirst [iLayer][iVO];			m_rgvopmd [iLayer][iVO].bAlternateScan	= rgbAlternateScan [iLayer][iVO];			m_rgvopmd [iLayer][iVO].iDirectModeRadius = rgiDirectModeRadius [iLayer][iVO];			m_rgvolmd [iLayer][iVO].bLoadIntraMatrix= rgbLoadIntraMatrix [iLayer][iVO];			m_rgvolmd [iLayer][iVO].bLoadInterMatrix= rgbLoadInterMatrix [iLayer][iVO];			m_rgvolmd [iLayer][iVO].bLoadIntraMatrixAlpha 													= rgbLoadIntraMatrixAlpha [iLayer][iVO];			m_rgvolmd [iLayer][iVO].bLoadInterMatrixAlpha 													= rgbLoadInterMatrixAlpha [iLayer][iVO];			memcpy (m_rgvolmd [iLayer][iVO].rgiIntraQuantizerMatrix,		rgppiIntraQuantizerMatrix [iLayer][iVO], BLOCK_SQUARE_SIZE * sizeof (Int));			memcpy (m_rgvolmd [iLayer][iVO].rgiInterQuantizerMatrix,		rgppiInterQuantizerMatrix [iLayer][iVO], BLOCK_SQUARE_SIZE * sizeof (Int));			memcpy (m_rgvolmd [iLayer][iVO].rgiIntraQuantizerMatrixAlpha,	rgppiIntraQuantizerMatrixAlpha [iLayer][iVO], BLOCK_SQUARE_SIZE * sizeof (Int));			memcpy (m_rgvolmd [iLayer][iVO].rgiInterQuantizerMatrixAlpha,	rgppiInterQuantizerMatrixAlpha [iLayer][iVO], BLOCK_SQUARE_SIZE * sizeof (Int));			m_rgvolmd [iLayer][iVO].bDeblockFilterDisable 													= rgbDeblockFilterDisable [iVO];			m_rgvolmd [iLayer][iVO].iBbetweenP	= rgiNumOfBbetweenPVOP [iVO];			m_rgvolmd [iLayer][iVO].iPbetweenI	= rgiNumOfPbetweenIVOP [iVO];			m_rgvolmd [iLayer][iVO].iGOVperiod = rgiGOVperiod [iVO]; // count of o/p frames between govs			// set up temporal sampling rate and clock rate from source frame rate.			m_rgvolmd [iLayer][iVO].iTemporalRate	= rgiTemporalRate [iVO]; // frames to skip			Double dFrameHz = m_rgvolmd [iLayer][iVO].dFrameHz;			// this code copes with e.g. 12.5 fps and 29.97 fps by multiplying up the ticks per second			// count appropriately			Int iClockRate = (int)dFrameHz;			if(dFrameHz != (double)iClockRate)			{				iClockRate = (int)(dFrameHz * 10.0);				if(dFrameHz * 10.0 != (double)iClockRate)					iClockRate = (int)(dFrameHz * 100.0);	 // not much point going to 1000*			}			m_rgvolmd [iLayer][iVO].iClockRate = iClockRate;			m_rgvolmd [iLayer][iVO].bDumpMB			= rgbDumpMB [iVO];			m_rgvolmd [iLayer][iVO].bTrace			= rgbTrace [iVO];			m_rgvolmd [iLayer][iVO].bTemporalScalability = FALSE;			if(m_rgvolmd[iLayer][iVO].volType == ENHN_LAYER && m_rgbSpatialScalability [iVO] && rgiTemporalRate[iVO] == rgiEnhnTemporalRate[iVO]){				// modified by Sharp (98/02/09)//#ifdef _Scalable_SONY_				m_rgvolmd[iLayer][iVO].iHierarchyType = 0; //iHierarchyType 0 means spatial scalability//#endif _Scalable_SONY_				m_rgvolmd[iLayer][iVO].iEnhnType = 0; // Spatial Scalable Enhancement layer shuold be set to Rectangular shape				m_rgvolmd[iLayer][iVO].iSpatialOption = iSpatialOption; // This Option is for Spatial Scalable				m_rgvolmd[iLayer][iVO].iver_sampling_factor_n = uiVer_sampling_n;				m_rgvolmd[iLayer][iVO].iver_sampling_factor_m = uiVer_sampling_m;				m_rgvolmd[iLayer][iVO].ihor_sampling_factor_n = uiHor_sampling_n;				m_rgvolmd[iLayer][iVO].ihor_sampling_factor_m = uiHor_sampling_m;			} // begin: added by Sharp (98/2/12)			else if (m_rgbSpatialScalability [iVO] && rgiTemporalRate[iVO] != rgiEnhnTemporalRate[iVO]){				m_rgvolmd [iLayer][iVO].bTemporalScalability = TRUE;//#ifdef _Scalable_SONY_				m_rgvolmd[iLayer][iVO].iHierarchyType = 1; //iHierarchyType 1 means temporal scalability//#endif _Scalable_SONY_				m_rgvolmd [iLayer][iVO].iEnhnType	= rgiEnhancementType [iVO];				if ( rgiEnhancementType[iVO] != 0 ) // modified by Sharp (98/3/24)					m_rgvolmd [BASE_LAYER][iVO].fAUsage = RECTANGLE;				if ( iLayer == ENHN_LAYER ) {					m_rgvolmd [ENHN_LAYER][iVO].iTemporalRate	= rgiEnhnTemporalRate [iVO];					Double dFrameHz = m_rgvolmd [ENHN_LAYER][iVO].dFrameHz;					// this code copes with e.g. 12.5 fps and 29.97 fps by multiplying up the ticks per second					// count appropriately					Int iClockRate = (int)dFrameHz;					if(dFrameHz != (double)iClockRate)					{						iClockRate = (int)(dFrameHz * 10.0);						if(dFrameHz * 10.0 != (double)iClockRate)							iClockRate = (int)(dFrameHz * 100.0);	 // not much point going to 1000*					}					m_rgvolmd [ENHN_LAYER][iVO].iClockRate = iClockRate;				}				m_rgvolmd[iLayer][iVO].iver_sampling_factor_n = 1;				m_rgvolmd[iLayer][iVO].iver_sampling_factor_m = 1;				m_rgvolmd[iLayer][iVO].ihor_sampling_factor_n = 1;				m_rgvolmd[iLayer][iVO].ihor_sampling_factor_m = 1;			}// end: added by Sharp (98/2/12)			else {				m_rgvolmd[iLayer][iVO].iver_sampling_factor_n = 1;				m_rgvolmd[iLayer][iVO].iver_sampling_factor_m = 1;				m_rgvolmd[iLayer][iVO].ihor_sampling_factor_n = 1;				m_rgvolmd[iLayer][iVO].ihor_sampling_factor_m = 1;			}		}	}	static Char pchYUV [100], pchSeg [100];	// check whether there are data for separate layers	sprintf (pchYUV, ROOT_YUVFILE, m_pchBmpFiles, m_pchPrefix);	sprintf (pchSeg, ROOT_SEGFILE, m_pchBmpFiles, m_pchPrefix);	m_bTexturePerVOP = !fileExistence (pchYUV);	m_bAlphaPerVOP = !fileExistence (pchSeg);	m_bPrevObjectExists = FALSE; // added by Sharp (98/2/13)	// sprite info	m_ppstSrc = new CSiteD* [m_iNumVO];	m_pppstDst = new CSiteD** [m_iNumVO];	for (iVO = 0; iVO < m_iNumVO; iVO++) {		m_ppstSrc [iVO] = (m_rgNumOfPnts [iVO] > 0) ? new CSiteD [m_rgNumOfPnts [iVO]] : NULL;		m_pppstDst [iVO] = new CSiteD* [m_iNumFrame];		for (Int ifr = 0; ifr < m_iNumFrame; ifr++) {			m_pppstDst [iVO] [ifr] = 				(m_rgNumOfPnts [iVO] > 0) ? new CSiteD [m_rgNumOfPnts [iVO]] : 				NULL;		}	}	for (iVO = m_iFirstVO; iVO <= m_iLastVO; iVO++)		if (m_rgNumOfPnts [iVO - m_iFirstVO] > 0)				readPntFile (iVO);    m_SptMode =	pSpriteMode[0];	m_rgiMVFileUsage = rgiMVFileUsage;	m_pchMVFileName  = pchMVFileName;}	Void CSessionEncoder::encode (){	FILE* pfYuvSrc = NULL;	FILE* pfYuvSrcSpatialEnhn = NULL;	FILE* pfSegSrc = NULL;	FILE* rgpfReconYUV [2];	FILE* rgpfReconSeg [2];	Int iVO;	UInt iVOrelative = 0;// begin: added by Sharp (98/2/12)	Bool bTemporalScalability = m_rgvolmd[BASE_LAYER][0].bTemporalScalability;//	Bool bTemporalScalability = TRUE;	// for a buffer management of temporal scalability	CEnhcBufferEncoder* pBufP1 = NULL;	CEnhcBufferEncoder* pBufP2 = NULL;	CEnhcBufferEncoder* pBufB1 = NULL;	CEnhcBufferEncoder* pBufB2 = NULL;	CEnhcBufferEncoder* pBufE = NULL;	// for backward/forward shape	Void set_modes(VOLMode* volmd, VOPMode* vopmd);	VOLMode* volmd_backShape = NULL;	VOLMode* volmd_forwShape = NULL;	VOPMode* vopmd_backShape = NULL;	VOPMode* vopmd_forwShape = NULL;	if ( bTemporalScalability ){		pBufP1 = new CEnhcBufferEncoder(m_rctOrg.width, m_rctOrg.height());		pBufP2 = new CEnhcBufferEncoder(m_rctOrg.width, m_rctOrg.height());		pBufB1 = new CEnhcBufferEncoder(m_rctOrg.width, m_rctOrg.height());		pBufB2 = new CEnhcBufferEncoder(m_rctOrg.width, m_rctOrg.height());		pBufE  = new CEnhcBufferEncoder(m_rctOrg.width, m_rctOrg.height());		volmd_backShape = new VOLMode;		volmd_forwShape = new VOLMode;		vopmd_backShape = new VOPMode;		vopmd_forwShape = new VOPMode;		set_modes(volmd_backShape, vopmd_backShape);		set_modes(volmd_forwShape, vopmd_forwShape);	}// end: added by Sharp (98/2/12)	for (iVO = m_iFirstVO; iVO <= (Int) m_iLastVO; iVO++, iVOrelative++) {		ofstream* rgpostrm [2];		ofstream* rgpostrmTrace [2];		PixelC pxlcObjColor;		VOLMode volmd = m_rgvolmd [BASE_LAYER] [iVOrelative];		VOLMode volmd_enhn = m_rgvolmd [ENHN_LAYER] [iVOrelative]; // added by Sharp (98/2/10)		getInputFiles (	pfYuvSrc, pfSegSrc, pfYuvSrcSpatialEnhn,						rgpfReconYUV, rgpfReconSeg, 						rgpostrm, rgpostrmTrace, pxlcObjColor, iVO, volmd, volmd_enhn); // modified by Sharp(98/2/10)		CRct rctOrg;		CVideoObjectEncoder* rgpvoenc [2];		if (m_rguiSpriteUsage [iVOrelative] == 1) {			// change m_rctOrg to sprite size			rctOrg = m_rctOrg;			m_rctFrame = m_rctOrg;			m_rctOrg = findSptRct (iVO);		}		initVOEncoder (rgpvoenc, iVO, rgpostrmTrace);#undef write		rgpostrm [BASE_LAYER]->write (rgpvoenc [BASE_LAYER]->pOutStream ()->str (),			//VO and VOL header									  rgpvoenc [BASE_LAYER]->pOutStream ()->pcount ());		if(m_rgbSpatialScalability[iVOrelative]){			rgpostrm[ENHN_LAYER]->write(rgpvoenc [ENHN_LAYER]->pOutStream () ->str(),										rgpvoenc [ENHN_LAYER]->pOutStream () ->pcount ());		}	// begin: added by Sharp (98/2/12)		// for back/forward shape		if ( bTemporalScalability ){		  initVObfShape (rgpvoenc[ENHN_LAYER]->rgpbfShape, iVO, *volmd_backShape, *vopmd_backShape, *volmd_forwShape, *vopmd_forwShape);		  // copy pointers		  rgpvoenc[ENHN_LAYER]->rgpbfShape[0]->m_pchBitsBuffer = rgpvoenc[ENHN_LAYER]->m_pchBitsBuffer;		  rgpvoenc[ENHN_LAYER]->rgpbfShape[0]->m_pbitstrmOut   = rgpvoenc[ENHN_LAYER]->m_pbitstrmOut;		  rgpvoenc[ENHN_LAYER]->rgpbfShape[0]->m_pentrencSet   = rgpvoenc[ENHN_LAYER]->m_pentrencSet;		  rgpvoenc[ENHN_LAYER]->rgpbfShape[0]->m_pchShapeBitsBuffer = rgpvoenc[ENHN_LAYER]->m_pchShapeBitsBuffer;	// Oct 8		  rgpvoenc[ENHN_LAYER]->rgpbfShape[0]->m_pbitstrmShape      = rgpvoenc[ENHN_LAYER]->m_pbitstrmShape;		//		  rgpvoenc[ENHN_LAYER]->rgpbfShape[0]->m_pbitstrmShapeMBOut = rgpvoenc[ENHN_LAYER]->m_pbitstrmShapeMBOut;	//		  rgpvoenc[ENHN_LAYER]->rgpbfShape[1]->m_pchBitsBuffer = rgpvoenc[ENHN_LAYER]->m_pchBitsBuffer;		  rgpvoenc[ENHN_LAYER]->rgpbfShape[1]->m_pbitstrmOut   = rgpvoenc[ENHN_LAYER]->m_pbitstrmOut;		  rgpvoenc[ENHN_LAYER]->rgpbfShape[1]->m_pentrencSet   = rgpvoenc[ENHN_LAYER]->m_pentrencSet;		  rgpvoenc[ENHN_LAYER]->rgpbfShape[1]->m_pchShapeBitsBuffer = rgpvoenc[ENHN_LAYER]->m_pchShapeBitsBuffer;	// Oct 8		  rgpvoenc[ENHN_LAYER]->rgpbfShape[1]->m_pbitstrmShape	    = rgpvoenc[ENHN_LAYER]->m_pbitstrmShape;		//		  rgpvoenc[ENHN_LAYER]->rgpbfShape[1]->m_pbitstrmShapeMBOut = rgpvoenc[ENHN_LAYER]->m_pbitstrmShapeMBOut;	//		}	// end: added by Sharp (98/2/12)		if (m_rguiSpriteUsage [iVO - m_iFirstVO] == 1) {			// load sprite data into m_pvopcOrig			loadSpt (iVO, rgpvoenc [BASE_LAYER] -> m_pvopcOrig);			// encode the initial sprite			if (m_SptMode == BASIC_SPRITE) 				rgpvoenc [BASE_LAYER] -> encode (TRUE, -1, IVOP);			else				rgpvoenc [BASE_LAYER] -> encodeInitSprite (rctOrg);			if (m_rgNumOfPnts [iVOrelative] > 0) {				// change m_pvopcRefQ1 to m_pvopcSptQ for warping				rgpvoenc [BASE_LAYER] -> swapRefQ1toSpt ();				// restore m_pvopcCurrQ size to the normal one				m_rctOrg = rctOrg;				rgpvoenc [BASE_LAYER] -> changeSizeofCurrQ (rctOrg);			}			rgpostrm [BASE_LAYER]->write (rgpvoenc [BASE_LAYER]->pOutStream ()->str (), //write sprite unit										  rgpvoenc [BASE_LAYER]->pOutStream ()->pcount ());		}		assert (!m_rctOrg.empty ());		if (rgpvoenc [BASE_LAYER]->m_uiRateControl>=RC_TM5) {			assert (!m_rgbSpatialScalability [iVOrelative]);			assert (!bTemporalScalability);			assert (volmd.iTemporalRate==1);#ifndef __TRACE_AND_STATS_			cerr << "Compile flag __TRACE_AND_STATS_ required for stats for TM5 rate control." << endl;			exit(1);#endif // __TRACE_AND_STATS_			char pchQname[100];			pchQname[0] = 0;			//if( m_bRGBfiles ) {			//	if( m_pchOutStrFiles && m_pchOutStrFiles[0]) sprintf (pchQname, m_pchOutStrFiles, "q", iVO);			//} else {				if( m_pchOutStrFiles && m_pchOutStrFiles[0]) {					sprintf (pchQname, SUB_CMPFILE, m_pchOutStrFiles, iVO, m_pchPrefix);				}			//}			rgpvoenc [BASE_LAYER]->m_tm5rc.tm5rc_init_seq ( pchQname,				rgpvoenc [BASE_LAYER]->m_uiRateControl,				m_rgvolmd [BASE_LAYER] [iVOrelative].fAUsage,				m_rctOrg.width,				m_rctOrg.height(),				(UInt)((m_rguiBudget [BASE_LAYER] [iVOrelative] * m_rgvolmd [BASE_LAYER][iVOrelative].dFrameHz)				 / (m_iLastFrame - m_iFirstFrame + 1)),				m_rgvolmd [BASE_LAYER][iVOrelative].dFrameHz			);		}		// algorithm for generation of IPB sequences with arbitrary shape		 //   (transparency allows for possible skipped frames) 		 //   P prediction across skips is not allowed #define DUMP_CURR	0#define DUMP_PREV	1#define DUMP_NONE	2		Int iRefFrame;		Int iDT = volmd.iTemporalRate;		Int iDT_enhn = volmd_enhn.iTemporalRate; // added by Sharp (98/2/12)		Int iRefInterval = volmd.iBbetweenP + 1;		Int iPCount;		Bool bObjectExists;		const CVOPU8YUVBA* pvopcBaseQuant = NULL;

⌨️ 快捷键说明

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