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

📄 encoder.cpp

📁 网络MPEG4IP流媒体开发源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		{			uiQuantPrecision = 5;			nBits = 8;		}		fatal_error("Number of bits per pel is out of range", nBits>=4 && nBits<=12);		Int iLen;		char *pchTmp;		GetSVal(&par, "Source.FilePrefix", -1, &pchTmp);		iLen = strlen(pchTmp) + 1;		pchPrefix = new char [iLen];		memcpy(pchPrefix, pchTmp, iLen);		GetSVal(&par, "Source.Directory", -1, &pchTmp);		iLen = strlen(pchTmp) + 1;		pchBmpDir = new char [iLen];		memcpy(pchBmpDir, pchTmp, iLen);		GetSVal(&par, "Output.Directory.DecodedFrames", -1, &pchTmp);			iLen = strlen(pchTmp) + 1;		pchOutBmpDir = new char [iLen];		memcpy(pchOutBmpDir, pchTmp, iLen);		GetSVal(&par, "Output.Directory.Bitstream", -1, &pchTmp);		iLen = strlen(pchTmp) + 1;		pchOutStrFile = new char [iLen];		memcpy(pchOutStrFile, pchTmp, iLen);		GetSVal(&par, "Sprite.Directory", -1, &pchTmp);		iLen = strlen(pchTmp) + 1;		pchSptDir = new char [iLen];		memcpy(pchSptDir, pchTmp, iLen);		GetSVal(&par, "Sprite.Points.Directory", -1, &pchTmp);		iLen = strlen(pchTmp) + 1;		pchSptPntDir = new char [iLen];		memcpy(pchSptPntDir, pchTmp, iLen);		GetIVal(&par, "Source.ObjectIndex.First", -1, (Int *)&firstVO);		GetIVal(&par, "Source.ObjectIndex.Last", -1, (Int *)&lastVO);		fatal_error("First and last object indices don't make sense", lastVO>=firstVO);		nVO = lastVO - firstVO + 1;		// allocate per-vo parameters		rgiTemporalScalabilityType = new Int [nVO];		rgbSpatialScalability = new Bool [nVO];		rgbScalability = new Bool [nVO];		rgiEnhancementType = new Int [nVO];		rgfAlphaUsage = new AlphaUsage [nVO];		rgbShapeOnly = new Bool [nVO];		rgiBinaryAlphaTH = new Int [nVO];		rgbNoCrChange = new Bool [nVO];		rgiBinaryAlphaRR = new Int [nVO];		rgbRoundingControlDisable = new Bool [nVO];		rgiInitialRoundingType = new Int [nVO];		rgiNumPbetweenIVOP = new Int [nVO];		rgiNumBbetweenPVOP = new Int [nVO];		rgiGOVperiod = new Int [nVO];		rgbDeblockFilterDisable = new Bool [nVO];		rgiTSRate = new Int [nVO];		rgiEnhcTSRate = new Int [nVO];		rgfChrType = new ChromType [nVO];		rgbAllowSkippedPMBs = new Bool [nVO];		rgSpriteMode = new SptMode [nVO];		rgbDumpMB = new Bool [nVO];		rgbTrace = new Bool [nVO];		rguiSpriteUsage = new UInt [nVO]; 		rguiWarpingAccuracy = new UInt [nVO]; 		rgiNumPnts = new Int [nVO]; 				Int iL;		for(iL = BASE_LAYER; iL<=ENHN_LAYER; iL++)		{			// allocate per-layer parameters			rguiRateControl [iL] = new UInt [nVO];			rguiBitsBudget [iL] = new UInt [nVO];			rgbAdvPredDisable [iL] = new Bool [nVO];			rgbErrorResilientDisable [iL] = new Bool [nVO];			rgbDataPartitioning [iL] = new Bool [nVO];			rgbReversibleVlc [iL] = new Bool [nVO];			rgiVPBitTh [iL] = new Int [nVO];			rgbInterlacedCoding [iL] = new Bool [nVO];				rgfQuant [iL] = new Quantizer [nVO]; 			rgbLoadIntraMatrix [iL] = new Bool [nVO];			rgppiIntraQuantizerMatrix [iL] = new Int * [nVO];			rgbLoadInterMatrix [iL] = new Bool [nVO];			rgppiInterQuantizerMatrix [iL] = new Int * [nVO];			rgiIntraDCSwitchingThr [iL] = new Int [nVO]; 			rgiIStep [iL] = new Int [nVO]; 			rgiPStep [iL] = new Int [nVO]; 			rgiStepBCode [iL] = new Int [nVO]; 			rgbLoadIntraMatrixAlpha [iL] = new Bool [nVO]; 				rgppiIntraQuantizerMatrixAlpha [iL] = new Int * [nVO];			rgbLoadInterMatrixAlpha [iL] = new Bool [nVO]; 				rgppiInterQuantizerMatrixAlpha [iL] = new Int * [nVO];			rgiIStepAlpha [iL] = new Int [nVO]; 			rgiPStepAlpha [iL] = new Int [nVO]; 			rgiBStepAlpha [iL] = new Int [nVO]; 			rgbNoGrayQuantUpdate [iL] = new Bool [nVO];			rguiSearchRange [iL] = new UInt [nVO];			rgbOriginalME [iL] = new Bool [nVO];			rgbComplexityEstimationDisable [iL] = new Bool [nVO];			rgbOpaque [iL] = new Bool [nVO];			rgbTransparent [iL] = new Bool [nVO];			rgbIntraCAE [iL] = new Bool [nVO];			rgbInterCAE [iL] = new Bool [nVO];			rgbNoUpdate [iL] = new Bool [nVO];			rgbUpsampling [iL] = new Bool [nVO];			rgbIntraBlocks [iL] = new Bool [nVO];			rgbInterBlocks [iL] = new Bool [nVO];			rgbInter4vBlocks [iL] = new Bool [nVO];			rgbNotCodedBlocks [iL] = new Bool [nVO];			rgbDCTCoefs [iL] = new Bool [nVO];			rgbDCTLines [iL] = new Bool [nVO];			rgbVLCSymbols [iL] = new Bool [nVO];			rgbVLCBits [iL] = new Bool [nVO];			rgbAPM [iL] = new Bool [nVO];			rgbNPM [iL] = new Bool [nVO];			rgbInterpolateMCQ [iL] = new Bool [nVO];			rgbForwBackMCQ [iL] = new Bool [nVO];			rgbHalfpel2 [iL] = new Bool [nVO];			rgbHalfpel4 [iL] = new Bool [nVO];			rguiVolControlParameters [iL] = new UInt [nVO];			rguiChromaFormat [iL] = new UInt [nVO];			rguiLowDelay [iL] = new UInt [nVO];			rguiVBVParams [iL] = new UInt [nVO];			rguiBitRate [iL] = new UInt [nVO];			rguiVbvBufferSize [iL] = new UInt [nVO];			rguiVbvBufferOccupany [iL] = new UInt [nVO];			rgdFrameFrequency [iL] = new Double [nVO];			rgbTopFieldFirst [iL] = new Bool [nVO]; 			rgbAlternateScan [iL] = new Bool [nVO]; 			rgiDirectModeRadius [iL] = new Bool [nVO]; 			rgiMVFileUsage[iL] = new Int [nVO];			pchMVFileName[iL] = new char * [nVO];		}		for (iObj = 0; iObj < nVO; iObj++)		{			// per object alloc			rgppiIntraQuantizerMatrix [BASE_LAYER] [iObj] = new Int [BLOCK_SQUARE_SIZE];			rgppiIntraQuantizerMatrix [ENHN_LAYER] [iObj] = new Int [BLOCK_SQUARE_SIZE];			rgppiInterQuantizerMatrix [BASE_LAYER] [iObj] = new Int [BLOCK_SQUARE_SIZE];			rgppiInterQuantizerMatrix [ENHN_LAYER] [iObj] = new Int [BLOCK_SQUARE_SIZE];			rgppiIntraQuantizerMatrixAlpha [BASE_LAYER] [iObj] = new Int [BLOCK_SQUARE_SIZE];			rgppiIntraQuantizerMatrixAlpha [ENHN_LAYER] [iObj] = new Int [BLOCK_SQUARE_SIZE];			rgppiInterQuantizerMatrixAlpha [BASE_LAYER] [iObj] = new Int [BLOCK_SQUARE_SIZE];			rgppiInterQuantizerMatrixAlpha [ENHN_LAYER] [iObj] = new Int [BLOCK_SQUARE_SIZE];			pchMVFileName[BASE_LAYER] [iObj] = NULL;			pchMVFileName[ENHN_LAYER] [iObj] = NULL;			// per object parameters			GetSVal(&par, "Scalability", iObj, &pchTmp);			if(strcmp(pchTmp, "Temporal")==0)			{				bAnyScalability = TRUE;				rgbScalability[iObj] = TEMPORAL_SCALABILITY;			}			else if(strcmp(pchTmp, "Spatial")==0)			{				bAnyScalability = TRUE;				rgbScalability[iObj] = SPATIAL_SCALABILITY;			}			else if(strcmp(pchTmp, "None")==0)			{				bAnyScalability = FALSE;				rgbScalability[iObj] = NO_SCALABILITY;			}			else				fatal_error("Unknown scalability type");			if(rgbScalability[iObj] == SPATIAL_SCALABILITY || rgbScalability[iObj] == TEMPORAL_SCALABILITY)				rgbSpatialScalability[iObj] = TRUE; 			else 				rgbSpatialScalability[iObj] = FALSE; 		}		//coded added by Sony, only deals with ONE VO.		//Type option of Spatial Scalable Coding		//This parameter is used for dicision VOP prediction types of Enhancement layer in Spatial Scalable Coding		//If this option is set to 0, Enhancement layer is coded as "PPPPPP......",		//else if set to 1 ,It's coded as "PBBBB......."		if(rgbScalability[0] == SPATIAL_SCALABILITY)		{			fatal_error("Spatial scalability currently only works with one VO", nVO==1);						GetSVal(&par, "Scalability.Spatial.PredictionType", 0, &pchTmp);			if(strcmp(pchTmp, "PPP")==0)				iSpatialOption = 1;			else if(strcmp(pchTmp, "PBB")==0)				iSpatialOption = 0;			else				fatal_error("Unknown spatial scalability prediction type");					if (iSpatialOption == 1)					fprintf(stdout,"Enhancement layer is coded as \"PPPPP.....\"\n");			else					fprintf(stdout,"Enhancement layer is coded as \"PBBBB.....\"\n");		}		if(bAnyScalability)		{			//Load enhancement layer (Spatial Scalable) size			// should really be inside above if-statement			GetIVal(&par, "Scalability.Spatial.Width", 0, (Int *)&uiFrmWidth_SS);			GetIVal(&par, "Scalability.Spatial.Height", 0, (Int *)&uiFrmHeight_SS);						//load upsampling factor 			GetIVal(&par, "Scalability.Spatial.HorizFactor.N", 0, (Int *)&uiHor_sampling_n);			GetIVal(&par, "Scalability.Spatial.HorizFactor.M", 0, (Int *)&uiHor_sampling_m);			GetIVal(&par, "Scalability.Spatial.VertFactor.N", 0, (Int *)&uiVer_sampling_n);			GetIVal(&par, "Scalability.Spatial.VertFactor.M", 0, (Int *)&uiVer_sampling_m);		}		for (iObj = 0; iObj < nVO; iObj++)		{			if(bAnyScalability)			{				// temporal scalability				// form of temporal scalability indicators				// case 0  Enhn    P   P   ....				//         Base  I   P   P ....				// case 1  Enhn    B B   B B   ....				//         Base  I     P     P ....				// case 2  Enhn    P   B   B   ....				//         Base  I   B   P   B ....				GetIVal(&par, "Scalability.Temporal.PredictionType", iObj, &rgiTemporalScalabilityType [iObj]);				fatal_error("Scalability.Temporal.PredictionType must range from 0 to 4",					rgiTemporalScalabilityType [iObj]>=0 && rgiTemporalScalabilityType [iObj]<=4);				GetSVal(&par, "Scalability.Temporal.EnhancementType", iObj, &pchTmp);				if(strcmp(pchTmp, "Full")==0)					rgiEnhancementType [iObj] = 0;				else if(strcmp(pchTmp, "PartC")==0)					rgiEnhancementType [iObj] = 1;				else if(strcmp(pchTmp, "PartNC")==0)					rgiEnhancementType [iObj] = 2;				else					fatal_error("Unknown temporal scalability enhancement type");			}					// alpha usage			GetSVal(&par, "Alpha.Type", iObj, &pchTmp);			rgbShapeOnly[iObj] = FALSE;			if(strcmp(pchTmp, "None")==0)				rgfAlphaUsage[iObj] = RECTANGLE;			else if(strcmp(pchTmp, "Binary")==0)				rgfAlphaUsage[iObj] = ONE_BIT;			else if(strcmp(pchTmp, "Gray")==0)				rgfAlphaUsage[iObj] = EIGHT_BIT;							else if(strcmp(pchTmp, "ShapeOnly")==0)			{				rgbShapeOnly[iObj] = TRUE;				rgfAlphaUsage[iObj] = ONE_BIT;			}			else				fatal_error("Unknown alpha type");						GetIVal(&par, "Alpha.Binary.RoundingThreshold", iObj, &rgiBinaryAlphaTH [iObj]);			fatal_error("Binary rounding threshold must be >= 0", rgiBinaryAlphaTH [iObj] >= 0);			Bool bSizeConvEnable;			readBoolParam(&par, "Alpha.Binary.SizeConversion.Enable", iObj, &bSizeConvEnable);			rgbNoCrChange [iObj] = !bSizeConvEnable;			if (rgiBinaryAlphaTH [iObj] == 0 && rgbNoCrChange [iObj] == 0)			{				printf("Size conversion was disabled since binary rounding threshold is zero");				rgbNoCrChange [iObj] = TRUE;			}			GetIVal(&par, "ErrorResil.AlphaRefreshRate", iObj, &rgiBinaryAlphaRR [iObj]);			fatal_error("Alpha refresh rate must be >= 0", rgiBinaryAlphaRR [iObj] >= 0);			Bool bRoundingControlEnable;			readBoolParam(&par, "Motion.RoundingControl.Enable", iObj, &bRoundingControlEnable);			rgbRoundingControlDisable [iObj] = !bRoundingControlEnable;			GetIVal(&par, "Motion.RoundingControl.StartValue", iObj, &rgiInitialRoundingType [iObj]);			fatal_error("Rounding control start value must be either 0 or 1",				rgiInitialRoundingType [iObj]==0 || rgiInitialRoundingType [iObj]==1);			GetIVal(&par, "Motion.PBetweenICount", iObj, &rgiNumPbetweenIVOP [iObj]);			if(rgiNumPbetweenIVOP [iObj] < 0)				rgiNumPbetweenIVOP [iObj] = lastFrm - firstFrm + 1;		//only 1 I at the beginning						GetIVal(&par, "Motion.BBetweenPCount", iObj, &rgiNumBbetweenPVOP [iObj]);			fatal_error("Motion.BBetweenPCount must be >= 0", rgiNumBbetweenPVOP [iObj]>=0);			//number of VOP between GOV header			//CAUTION:GOV period is not used in spatial scalable coding			Bool bGOVEnable;			readBoolParam(&par, "GOV.Enable", iObj, &bGOVEnable);			if(!bGOVEnable)				rgiGOVperiod[iObj] = 0;			else				GetIVal(&par, "GOV.Period", iObj, &rgiGOVperiod[iObj]);			Bool bDeblockingFilterEnable;			readBoolParam(&par, "Motion.DeblockingFilter.Enable", iObj, &bDeblockingFilterEnable);			rgbDeblockFilterDisable[iObj] = !bDeblockingFilterEnable;			GetSVal(&par, "Source.Format", iObj, &pchTmp);			if(strcmp(pchTmp, "444")==0)				rgfChrType[iObj] = FOUR_FOUR_FOUR;			else if(strcmp(pchTmp, "422")==0)				rgfChrType[iObj] = FOUR_TWO_TWO;			else if(strcmp(pchTmp, "420")==0)				rgfChrType[iObj] = FOUR_TWO_ZERO;			else				fatal_error("Unrecognised source format");			GetSVal(&par, "Sprite.Type", iObj, &pchTmp);			if(strcmp(pchTmp, "None")==0)				rguiSpriteUsage[iObj] = 0;			else if(strcmp(pchTmp, "Static")==0)				rguiSpriteUsage[iObj] = 1;			else				fatal_error("Unknown value for Sprite.Type");			if (rgbScalability [iObj] == TRUE && rguiSpriteUsage[iObj]==1)				fatal_error("Sprite and scalability modes cannot be combined");			GetSVal(&par, "Sprite.WarpAccuracy", iObj, &pchTmp);			if(strcmp(pchTmp, "1/2")==0)				rguiWarpingAccuracy[iObj] = 0;			else if(strcmp(pchTmp, "1/4")==0)				rguiWarpingAccuracy[iObj] = 1;			else if(strcmp(pchTmp, "1/8")==0)				rguiWarpingAccuracy[iObj] = 2;			else if(strcmp(pchTmp, "1/16")==0)				rguiWarpingAccuracy[iObj] = 3;			else				fatal_error("Unknown value for Sprite.WarpAccuracy");			GetIVal(&par, "Sprite.Points", iObj, &rgiNumPnts[iObj]);			fatal_error("Sprite.Points must lie in the range -1 to 4", rgiNumPnts[iObj]>=-1 && rgiNumPnts[iObj]<5);			GetSVal(&par, "Sprite.Mode", iObj, &pchTmp);			if(strcmp(pchTmp, "Basic")==0)				rgSpriteMode[iObj] = BASIC_SPRITE;			else if(strcmp(pchTmp, "LowLatency")==0)				rgSpriteMode[iObj] = LOW_LATENCY;			else if(strcmp(pchTmp, "PieceObject")==0)				rgSpriteMode[iObj] = PIECE_OBJECT;			else if(strcmp(pchTmp, "PieceUpdate")==0)				rgSpriteMode[iObj] = PIECE_UPDATE;			else				fatal_error("Unkown value for Sprite.Mode");			if(rguiSpriteUsage[iObj]==0)			{				rgiNumPnts[iObj] = -1;

⌨️ 快捷键说明

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