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

📄 sesenc.cpp

📁 《Visual C++小波变换技术与工程实践》靳济芳编著的光盘程序。
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			m_rgvolmd [iLayer][iVO].bIntraCAE = pArgs->rgbIntraCAE [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].bInterCAE = pArgs->rgbInterCAE [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].bNoUpdate = pArgs->rgbNoUpdate [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].bUpsampling = pArgs->rgbUpsampling [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].bIntraBlocks = pArgs->rgbIntraBlocks [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].bInterBlocks = pArgs->rgbInterBlocks [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].bInter4vBlocks = pArgs->rgbInter4vBlocks [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].bNotCodedBlocks = pArgs->rgbNotCodedBlocks [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].bDCTCoefs = pArgs->rgbDCTCoefs [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].bDCTLines = pArgs->rgbDCTLines [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].bVLCSymbols = pArgs->rgbVLCSymbols [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].bVLCBits = pArgs->rgbVLCBits [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].bAPM = pArgs->rgbAPM [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].bNPM = pArgs->rgbNPM [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].bInterpolateMCQ = pArgs->rgbInterpolateMCQ [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].bForwBackMCQ = pArgs->rgbForwBackMCQ [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].bHalfpel2 = pArgs->rgbHalfpel2 [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].bHalfpel4 = pArgs->rgbHalfpel4 [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].bSadct = pArgs->rgbSadct [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].bQuarterpel = pArgs->rgbQuarterpel [iLayer][iVO];
			// START: Complexity Estimation syntax support - Update version 2 - Massimo Ravasi (EPFL) - 11 Nov 1999
			// redundant flags to avoid start code emulation
			m_rgvolmd [iLayer][iVO].bShapeComplexityEstimationDisable = ! (
				   m_rgvolmd [iLayer][iVO].bOpaque
				|| m_rgvolmd [iLayer][iVO].bTransparent
				|| m_rgvolmd [iLayer][iVO].bIntraCAE
				|| m_rgvolmd [iLayer][iVO].bInterCAE
				|| m_rgvolmd [iLayer][iVO].bNoUpdate
				|| m_rgvolmd [iLayer][iVO].bUpsampling);
			m_rgvolmd [iLayer][iVO].bTextureComplexityEstimationSet1Disable = ! (
				   m_rgvolmd [iLayer][iVO].bIntraBlocks
				|| m_rgvolmd [iLayer][iVO].bInterBlocks
				|| m_rgvolmd [iLayer][iVO].bInter4vBlocks
				|| m_rgvolmd [iLayer][iVO].bNotCodedBlocks);
			m_rgvolmd [iLayer][iVO].bTextureComplexityEstimationSet2Disable = ! (
				   m_rgvolmd [iLayer][iVO].bDCTCoefs
				|| m_rgvolmd [iLayer][iVO].bDCTLines
				|| m_rgvolmd [iLayer][iVO].bVLCSymbols
				|| m_rgvolmd [iLayer][iVO].bVLCBits);
			m_rgvolmd [iLayer][iVO].bMotionCompensationComplexityDisable = ! (
				   m_rgvolmd [iLayer][iVO].bAPM
				|| m_rgvolmd [iLayer][iVO].bNPM
				|| m_rgvolmd [iLayer][iVO].bInterpolateMCQ
				|| m_rgvolmd [iLayer][iVO].bForwBackMCQ
				|| m_rgvolmd [iLayer][iVO].bHalfpel2
				|| m_rgvolmd [iLayer][iVO].bHalfpel4);
			m_rgvolmd [iLayer][iVO].bVersion2ComplexityEstimationDisable = ! (
				   m_rgvolmd [iLayer][iVO].bSadct
				|| m_rgvolmd [iLayer][iVO].bQuarterpel);
			// END: Complexity Estimation syntax support - Update version 2
			// END: Complexity Estimation syntax support

			m_rgvolmd [iLayer][iVO].bAllowSkippedPMBs = pArgs->rgbAllowSkippedPMBs [iVO];


			// HHI Schueuer for sadct
			m_rgvolmd [iLayer][iVO].bSadctDisable		= pArgs->rgbSadctDisable [iLayer][iVO];
			// end

			// START: Vol Control Parameters
			if(pArgs->rguiVolControlParameters[0]!=NULL)
			{
				m_rgvolmd [iLayer][iVO].uiVolControlParameters = pArgs->rguiVolControlParameters [iLayer][iVO];
				m_rgvolmd [iLayer][iVO].uiChromaFormat = pArgs->rguiChromaFormat [iLayer][iVO];
				m_rgvolmd [iLayer][iVO].uiLowDelay = pArgs->rguiLowDelay [iLayer][iVO];
				m_rgvolmd [iLayer][iVO].uiVBVParams = pArgs->rguiVBVParams [iLayer][iVO];
				m_rgvolmd [iLayer][iVO].uiBitRate = pArgs->rguiBitRate [iLayer][iVO];
				m_rgvolmd [iLayer][iVO].uiVbvBufferSize = pArgs->rguiVbvBufferSize [iLayer][iVO];
				m_rgvolmd [iLayer][iVO].uiVbvBufferOccupany = pArgs->rguiVbvBufferOccupany [iLayer][iVO];
			}
			else
				m_rgvolmd [iLayer][iVO].uiVolControlParameters = 0;
			// END: Vol Control Parameters
			m_rgvolmd [iLayer][iVO].bRoundingControlDisable	= (iLayer== BASE_LAYER) ? pArgs->rgbRoundingControlDisable[iVO] : 0;
			m_rgvolmd [iLayer][iVO].iInitialRoundingType = (iLayer== BASE_LAYER) ? pArgs->rgiInitialRoundingType[iVO] : 0;
			m_rgvolmd [iLayer][iVO].bVPBitTh		= pArgs->rgbVPBitTh[iLayer][iVO];
			m_rgvolmd [iLayer][iVO].bDataPartitioning = pArgs->rgbDataPartitioning [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].bReversibleVlc  = pArgs->rgbReversibleVlc [iLayer][iVO];
//RESYNC_MARKER_FIX
			m_rgvolmd [iLayer][iVO].bResyncMarkerDisable = pArgs->rgbResyncMarkerDisable [iLayer][iVO];
//~RESYNC_MARKER_FIX
// RRV insertion
			m_rgvopmd [iLayer][iVO].RRVmode = pArgs->RRVmode[iLayer][iVO];
			m_rgvolmd [iLayer][iVO].breduced_resolution_vop_enable
				= pArgs->RRVmode[iLayer][iVO].iOnOff;
// ~RRV
			m_rgvolmd [iLayer][iVO].fQuantizer		= pArgs->rgfQuant [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].bNoGrayQuantUpdate 
													= pArgs->rgbNoAlphaQuantUpdate [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].dFrameHz		= pArgs->rgdFrameFrequency [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].iMVRadiusPerFrameAwayFromRef = pArgs->rguiSearchRange [iLayer][iVO];
			m_rgvopmd [iLayer][iVO].iSearchRangeForward	= pArgs->rguiSearchRange [iLayer][iVO];
			m_rgvopmd [iLayer][iVO].iSearchRangeBackward= pArgs->rguiSearchRange [iLayer][iVO];
			m_rgvopmd [iLayer][iVO].intStepI		= pArgs->rgiStepI [iLayer][iVO];
			m_rgvopmd [iLayer][iVO].intStep			= pArgs->rgiStepP [iLayer][iVO];
			m_rgvopmd [iLayer][iVO].intStepB		= pArgs->rgiStepB [iLayer][iVO];
			m_rgvopmd [iLayer][iVO].intStepIAlpha[0]	= pArgs->rgiStepIAlpha [iLayer][iVO];
			m_rgvopmd [iLayer][iVO].intStepPAlpha[0]	= pArgs->rgiStepPAlpha [iLayer][iVO];
			m_rgvopmd [iLayer][iVO].intStepBAlpha[0]	= pArgs->rgiStepBAlpha [iLayer][iVO];
			m_rgvopmd [iLayer][iVO].iIntraDcSwitchThr 
													= pArgs->rgiIntraDCSwitchingThr [iLayer][iVO];
			m_rgvopmd [iLayer][iVO].bInterlace		= pArgs->rgbInterlacedCoding [iLayer][iVO];
			m_rgvopmd [iLayer][iVO].bTopFieldFirst	= pArgs->rgbTopFieldFirst [iLayer][iVO];
			m_rgvopmd [iLayer][iVO].bAlternateScan	= pArgs->rgbAlternateScan [iLayer][iVO];
			m_rgvopmd [iLayer][iVO].iDirectModeRadius = pArgs->rgiDirectModeRadius [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].bLoadIntraMatrix= pArgs->rgbLoadIntraMatrix [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].bLoadInterMatrix= pArgs->rgbLoadInterMatrix [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].bLoadIntraMatrixAlpha 
													= pArgs->rgbLoadIntraMatrixAlpha [iLayer][iVO];
			m_rgvolmd [iLayer][iVO].bLoadInterMatrixAlpha 
													= pArgs->rgbLoadInterMatrixAlpha [iLayer][iVO];
			memcpy (m_rgvolmd [iLayer][iVO].rgiIntraQuantizerMatrix,		pArgs->rgppiIntraQuantizerMatrix [iLayer][iVO], BLOCK_SQUARE_SIZE * sizeof (Int));
			memcpy (m_rgvolmd [iLayer][iVO].rgiInterQuantizerMatrix,		pArgs->rgppiInterQuantizerMatrix [iLayer][iVO], BLOCK_SQUARE_SIZE * sizeof (Int));
			memcpy (m_rgvolmd [iLayer][iVO].rgiIntraQuantizerMatrixAlpha[0],	pArgs->rgppiIntraQuantizerMatrixAlpha [iLayer][iVO], BLOCK_SQUARE_SIZE * sizeof (Int));
			memcpy (m_rgvolmd [iLayer][iVO].rgiInterQuantizerMatrixAlpha[0],	pArgs->rgppiInterQuantizerMatrixAlpha [iLayer][iVO], BLOCK_SQUARE_SIZE * sizeof (Int));

			m_rgvolmd [iLayer][iVO].bDeblockFilterDisable 
													= pArgs->rgbDeblockFilterDisable [iVO];
			m_rgvolmd [iLayer][iVO].iBbetweenP	= pArgs->rgiNumOfBbetweenPVOP [iVO];
			m_rgvolmd [iLayer][iVO].iPbetweenI	= pArgs->rgiNumOfPbetweenIVOP [iVO];
			m_rgvolmd [iLayer][iVO].iGOVperiod = pArgs->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	= pArgs->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			= pArgs->rgbDumpMB [iVO];
			m_rgvolmd [iLayer][iVO].bTrace			= pArgs->rgbTrace [iVO];
			m_rgvolmd [iLayer][iVO].bTemporalScalability = FALSE;
			m_rgvolmd [iLayer][iVO].bSpatialScalability = m_rgbSpatialScalability[iVO];		//OBSS_SAIT_991015 //OBSS
			m_rgvolmd [iLayer][iVO].iHierarchyType = 0;										//OBSSFIX_V2-8
			if(m_rgvolmd[iLayer][iVO].volType == ENHN_LAYER && m_rgbSpatialScalability [iVO] && pArgs->rgiTemporalRate[iVO] == pArgs->rgiEnhcTemporalRate[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 = pArgs->iSpatialOption; // This Option is for Spatial Scalable
				m_rgvolmd[iLayer][iVO].iver_sampling_factor_n = pArgs->uiVer_sampling_n;
				m_rgvolmd[iLayer][iVO].iver_sampling_factor_m = pArgs->uiVer_sampling_m;
				m_rgvolmd[iLayer][iVO].ihor_sampling_factor_n = pArgs->uiHor_sampling_n;
				m_rgvolmd[iLayer][iVO].ihor_sampling_factor_m = pArgs->uiHor_sampling_m;
//OBSS_SAIT_991015
				m_rgvolmd[iLayer][iVO].iEnhnTypeSpatial = 0;		//for OBSS partial enhancement mode
				m_rgvolmd[iLayer][iVO].iFrmWidth_SS = pArgs->uiFrameWidth_SS;
				m_rgvolmd[iLayer][iVO].iFrmHeight_SS = pArgs->uiFrameHeight_SS;
//OBSSFIX_MODE3
				if(iLayer == ENHN_LAYER && m_rgvolmd[0][iVO].fAUsage == RECTANGLE &&
					m_rgvolmd[iLayer][iVO].iHierarchyType == 0 && pArgs->rgiEnhancementTypeSpatial[iVO] != 0){
					m_rgvolmd[iLayer][iVO].iEnhnType = pArgs->rgiEnhancementTypeSpatial[iVO]; //for OBSS partial enhancement mode
					m_rgvolmd[iLayer][iVO].iEnhnTypeSpatial = pArgs->rgiEnhancementTypeSpatial[iVO]; //for OBSS partial enhancement mode
					m_rgvolmd[iLayer][iVO].fAUsage   = ONE_BIT;
				}
//~OBSSFIX_MODE3
				if(	m_rgvolmd [iLayer][iVO].fAUsage	== ONE_BIT && m_rgvolmd[iLayer][iVO].iHierarchyType ==0 ) {
					//for OBSS partial enhancement mode
//OBSSFIX_MODE3
					m_rgvolmd[iLayer][iVO].iEnhnTypeSpatial = pArgs->rgiEnhancementTypeSpatial [iVO];
					m_rgvolmd[iLayer][iVO].iEnhnType = pArgs->rgiEnhancementTypeSpatial [iVO]; 
//~OBSSFIX_MODE3
					m_rgvolmd[iLayer][iVO].iuseRefShape = pArgs->uiUse_ref_shape; 
					m_rgvolmd[iLayer][iVO].iuseRefTexture = pArgs->uiUse_ref_texture; 
					m_rgvolmd[iLayer][iVO].iver_sampling_factor_n_shape = pArgs->uiVer_sampling_n_shape;
					m_rgvolmd[iLayer][iVO].iver_sampling_factor_m_shape = pArgs->uiVer_sampling_m_shape;
					m_rgvolmd[iLayer][iVO].ihor_sampling_factor_n_shape = pArgs->uiHor_sampling_n_shape;
					m_rgvolmd[iLayer][iVO].ihor_sampling_factor_m_shape = pArgs->uiHor_sampling_m_shape;
				}
//~OBSS_SAIT_991015
			} 
// begin: added by Sharp (98/2/12)
			else if (m_rgbSpatialScalability [iVO] && pArgs->rgiTemporalRate[iVO] != pArgs->rgiEnhcTemporalRate[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	= pArgs->rgiEnhancementType [iVO];
				if ( pArgs->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	= pArgs->rgiEnhcTemporalRate [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_rguiSpriteUsage[iVO - m_iFirstVO] == 1 && m_rgNumOfPnts [iVO - m_iFirstVO] > 0) // GMC
				readPntFile (iVO);

    m_SptMode =	pArgs->pSpriteMode[0];
	m_rgiMVFileUsage = pArgs->rgiMVFileUsage;
	m_pchMVFileName  = pArgs->pchMVFileName;
}

Void CSessionEncoder::encode ()
{
	FILE* pfYuvSrc = NULL;
	FILE* pfYuvSrcSpatialEnhn = NULL;
	FILE* pfSegSrc = NULL;
	FILE* rgpfReconYUV [2];
	FILE* rgpfReconSeg [2];
	Int iVO;
	UInt iVOrelative = 0;
//OBSS_SAIT_991015
	FILE* pfSegSrcSpatialEnhn = NULL;	
	static CRct pBase_stack_rctBase;
	static ShapeMode* pBase_stack_Baseshpmd = NULL;
	static CMotionVector* pBase_stack_mvBaseBY = NULL;	
	static ShapeMode* pBase_tmp_Baseshpmd = NULL;
	static CMotionVector* pBase_tmp_mvBaseBY = NULL;	
	static Int iBase_stack_x, iBase_stack_y;
//~OBSS_SAIT_991015

// 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;
	CEnhcBufferEncoder* pBufP2;
	CEnhcBufferEncoder* pBufB1;
	CEnhcBufferEncoder* pBufB2;
	CEnhcBufferEncoder* pBufE;

	// for backward/forward shape
	Void set_modes(VOLMode* volmd, VOPMode* vopmd);
	VOLMode* volmd_backShape;
	VOLMode* volmd_forwShape;
	VOPMode* vopmd_backShape;
	VOPMode* vopmd_forwShape;

	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());

⌨️ 快捷键说明

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