www.pudn.com > NETVIDEO.rar > convertpar.cpp


/************************************************************************* 
 
This software module was originally developed by  
 
	Simon Winder (swinder@microsoft.com), Microsoft Corporation 
 
 
in the course of development of the MPEG-4 Video (ISO/IEC 14496-2).  
This software module is an implementation of a part of one or more MPEG-4 Video tools  
as specified by the MPEG-4 Video.  
ISO/IEC gives users of the MPEG-4 Video free license to this software module or modifications  
thereof for use in hardware or software products claiming conformance to the MPEG-4 Video.  
Those intending to use this software module in hardware or software products are advised that its use may infringe existing patents.  
The original developer of this software module and his/her company,  
the subsequent editors and their companies,  
and ISO/IEC have no liability for use of this software module or modifications thereof in an implementation.  
Copyright is not released for non MPEG-4 Video conforming products.  
Sharp retains full right to use the code for his/her own purpose,  
assign or donate the code to a third party and to inhibit third parties from using the code for non  conforming products.  
This copyright notice must be included in all copies or derivative works.  
 
Copyright (c) 1997. 
 
 
*************************************************************************/ 
 
 
#include  
#include  
#include  
 
typedef unsigned int UInt; 
typedef int Int; 
typedef void Void; 
typedef int Bool; 
typedef double Double; 
typedef enum {Q_H263, Q_MPEG} Quantizer;  
typedef enum AlphaUsage {RECTANGLE, ONE_BIT, EIGHT_BIT} AlphaUsage; 
typedef enum ChromType {FOUR_FOUR_FOUR, FOUR_TWO_TWO, FOUR_TWO_ZERO} ChromType; 
typedef enum {BASIC_SPRITE, LOW_LATENCY, PIECE_OBJECT, PIECE_UPDATE} SptMode; 
typedef char Char; 
 
Void nextValidLine (FILE *pfPara, UInt* pnLine); 
Void readBoolVOLFlag (Bool * rgbTable [2], UInt nVO, FILE * pfCfg, UInt * pnLine, Bool bAnyScalability); 
Void readItem(UInt *rguiTable [2], UInt nVO, FILE * pfCfg, UInt * pnLine, Bool bAnyScalability); 
 
#define BASE_LAYER 0 
#define ENHN_LAYER 1 
#define NO_SCALABILITY		 0 
#define TEMPORAL_SCALABILITY 1 
#define SPATIAL_SCALABILITY  2 
#define FALSE 0 
#define TRUE 1 
#define BLOCK_SQUARE_SIZE    64 
#define RC_MPEG4			1 
#define RC_TM5				3 
 
Void fatal_error(char *pchError, Bool bFlag = FALSE); 
 
void my_assert(int iFlag) 
{ 
	if(!iFlag) 
		fatal_error("Some assert failed! Check original par file format.\n"); 
} 
 
int main (Int argc, Char* argv[]) 
{ 
	UInt nLine = 1; 
	UInt* pnLine = &nLine; 
	FILE *pfPara; 
	FILE *pfOut = stdout; 
 
	if (argc != 2 && argc !=3) 
	{ 
		fprintf (stderr,"Usage: %s old_par_file [new_par_file]\n", argv[0]); 
		fatal_error("Conversion aborted"); 
	} 
	 
	if ((pfPara = fopen (argv[1], "r")) == NULL ) 
	{ 
		fprintf (stderr,"Source parameter file not found\n"); 
		fatal_error("Conversion aborted"); 
	} 
 
	if(argc==3) 
	{ 
		if ((pfOut = fopen (argv[2], "w")) == NULL ) 
		{ 
			fprintf (stderr,"Could not open %s for writing.\n", argv[2]); 
			fatal_error("Conversion aborted"); 
		} 
	} 
 
	// all the parameters to the encoder 
	Int iVersion; 
	Int iVTCFlag; 
	UInt uiFrmWidth, uiFrmHeight; 
	UInt firstFrm, lastFrm; 
	Bool bNot8Bit; 
	UInt uiQuantPrecision; 
	UInt nBits; 
	UInt firstVO, lastVO; 
	UInt nVO; 
	UInt uiFrmWidth_SS,uiFrmHeight_SS; 
	UInt uiHor_sampling_m,uiHor_sampling_n; 
	UInt uiVer_sampling_m,uiVer_sampling_n; 
	Bool bAnyScalability; 
	Int iSpatialOption; 
	char *pchPrefix;		 
	char *pchBmpDir; 
	char *pchOutBmpDir; 
	char *pchOutStrFile; 
	char *pchSptDir; 
	char *pchSptPntDir; 
	 
	Int *rgiTemporalScalabilityType; 
	Bool *rgbSpatialScalability; 
	Bool *rgbScalability; 
	Int *rgiEnhancementType; 
	AlphaUsage *rgfAlphaUsage; 
	Bool *rgbShapeOnly; 
	Int *rgiBinaryAlphaTH; 
	Int *rgbNoCrChange; 
	Int *rgiBinaryAlphaRR; 
	Bool *rgbRoundingControlDisable; 
	Int *rgiInitialRoundingType; 
	Int *rgiNumPbetweenIVOP; 
	Int *rgiNumBbetweenPVOP; 
	Int *rgiGOVperiod; 
	Bool *rgbDeblockFilterDisable; 
	Int *rgiTSRate; 
	Int *rgiEnhcTSRate; 
	ChromType *rgfChrType; 
	Bool *rgbAllowSkippedPMBs; 
	SptMode *rgSpriteMode; 
	Bool *rgbDumpMB; 
	Bool *rgbTrace; 
	UInt *rguiSpriteUsage;  
	UInt *rguiWarpingAccuracy;  
	Int *rgiNumPnts; 
	 
	UInt *rguiRateControl [2]; 
	UInt *rguiBitsBudget [2]; 
	Bool *rgbAdvPredDisable [2]; 
	Bool *rgbErrorResilientDisable [2]; 
	Bool *rgbDataPartitioning [2]; 
	Bool *rgbReversibleVlc [2]; 
	Int *rgiVPBitTh [2]; 
	Bool *rgbInterlacedCoding [2]; 
	Quantizer* rgfQuant [2]; 
	Bool *rgbLoadIntraMatrix [2]; 
	Int **rgppiIntraQuantizerMatrix [2]; 
	Bool *rgbLoadInterMatrix [2]; 
	Int **rgppiInterQuantizerMatrix [2]; 
	Bool *rgiIntraDCSwitchingThr [2]; 
	Int *rgiIStep [2]; 
	Int *rgiPStep [2]; 
	Int *rgiStepBCode [2]; 
	Bool *rgbLoadIntraMatrixAlpha [2]; 
	Int **rgppiIntraQuantizerMatrixAlpha [2]; 
	Bool *rgbLoadInterMatrixAlpha [2]; 
	Int **rgppiInterQuantizerMatrixAlpha [2]; 
	Int *rgiIStepAlpha [2];		 
	Int *rgiPStepAlpha [2]; 
	Int *rgiBStepAlpha [2]; 
	Bool *rgbNoGrayQuantUpdate [2]; 
	UInt *rguiSearchRange [2]; 
	Bool *rgbOriginalME [2]; 
	Bool *rgbComplexityEstimationDisable [2]; 
	Bool *rgbOpaque [2]; 
	Bool *rgbTransparent [2]; 
	Bool *rgbIntraCAE [2]; 
	Bool *rgbInterCAE [2]; 
	Bool *rgbNoUpdate [2]; 
	Bool *rgbUpsampling [2]; 
	Bool *rgbIntraBlocks [2]; 
	Bool *rgbInterBlocks [2]; 
	Bool *rgbInter4vBlocks [2]; 
	Bool *rgbNotCodedBlocks [2]; 
	Bool *rgbDCTCoefs [2]; 
	Bool *rgbDCTLines [2]; 
	Bool *rgbVLCSymbols [2]; 
	Bool *rgbVLCBits [2]; 
	Bool *rgbAPM [2]; 
	Bool *rgbNPM [2]; 
	Bool *rgbInterpolateMCQ [2]; 
	Bool *rgbForwBackMCQ [2]; 
	Bool *rgbHalfpel2 [2]; 
	Bool *rgbHalfpel4 [2]; 
	UInt *rguiVolControlParameters[2]; 
	UInt *rguiChromaFormat[2]; 
	UInt *rguiLowDelay[2]; 
	UInt *rguiVBVParams[2]; 
	UInt *rguiBitRate[2]; 
	UInt *rguiVbvBufferSize[2]; 
	UInt *rguiVbvBufferOccupany[2]; 
	Double *rgdFrameFrequency[2]; 
	Bool *rgbTopFieldFirst [2]; 
	Bool *rgbAlternateScan [2]; 
	Int *rgiDirectModeRadius [2]; 
	Int *rgiMVFileUsage[2]; 
	char **pchMVFileName[2]; 
 
	UInt iObj; 
 
	// verify version number 
	nextValidLine (pfPara, pnLine); 
	if ( fscanf (pfPara, "%u", &iVersion) != 1 )	{ 
		fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
		fatal_error("Conversion aborted"); 
	} 
 
	if (iVersion != 813 && iVersion != 812 && iVersion != 814 && iVersion != 815)	{ 
		// version 812 does not have rounding control flags 
		// version 813 does not have VOL control parameters 
		// version 814 does not have skipped mb enable 
		fprintf(stderr, "unknown parameter file version\n"); 
		fatal_error("Conversion aborted"); 
	} 
 
	/*************/ 
	fprintf(pfOut,"!!!MS!!!\n\n// This is the new parameter file format.  The parameters in this file can be\n// specified in any order.\n"); 
	fprintf(pfOut,"\nVersion = 901\n\n"); 
	/*************/ 
 
///// WAVELET VTC: begin /////////////////////////////// 
	// sarnoff: wavelet visual texture coding  
	nextValidLine (pfPara, pnLine); 
	if ( fscanf (pfPara, "%d", &iVTCFlag) != 1)	{ 
		fprintf(stderr, "wrong parameter VTC flag on line %d\n", *pnLine); 
		fatal_error("Conversion aborted"); 
	} 
	fatal_error("iVTCFlag must be 0 or 1", iVTCFlag==0 || iVTCFlag==1); 
 
	// read VTC control file 
 
	char VTCCtlFile[80]; 
	nextValidLine (pfPara, pnLine); 
	if ( fscanf (pfPara, "%s", VTCCtlFile) != 1)	{ 
		fprintf(stderr, "wrong parameter VTC flag on line %d\n", *pnLine); 
		fatal_error("Conversion aborted"); 
	} 
 
	/*************/ 
	fprintf(pfOut, "VTC.Enable = %d\nVTC.Filename = \"%s\"\n", iVTCFlag, VTCCtlFile); 
	/*************/ 
 
	if (iVTCFlag==1) { 
		fclose(pfPara); 
		if(argc==3) 
			fclose(pfOut); 
 
		return 0; 
	} 
 
///// WAVELET VTC: end /////////////////////////////// 
 
 
	 
	// frame size code 
 
	nextValidLine (pfPara, pnLine); 
	if (fscanf (pfPara, "%u", &uiFrmWidth) != 1)	{ 
		fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
		fatal_error("Conversion aborted"); 
	} 
	nextValidLine (pfPara, pnLine); 
	if (fscanf (pfPara, "%u", &uiFrmHeight) != 1)	{ 
		fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
		fatal_error("Conversion aborted"); 
	} 
 
	// first and last frame number 
	nextValidLine (pfPara, pnLine); 
	if ( fscanf (pfPara, "%u", &firstFrm) != 1) { 
		fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
		fatal_error("Conversion aborted"); 
	} 
	nextValidLine (pfPara, pnLine); 
	if ( fscanf (pfPara, "%u", &lastFrm) != 1) { 
		fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
		fatal_error("Conversion aborted"); 
	} 
	my_assert (lastFrm >= firstFrm); 
 
	/*************/ 
	fprintf(pfOut, "\nSource.Width = %d\nSource.Height = %d\nSource.FirstFrame = %d\nSource.LastFrame = %d\n", 
		uiFrmWidth, uiFrmHeight, firstFrm, lastFrm); 
	/*************/ 
 
	// NBIT: not 8-bit flag 
	nextValidLine (pfPara, pnLine); 
	if ( fscanf (pfPara, "%d", &bNot8Bit) != 1)	{ 
		fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
		fatal_error("Conversion aborted"); 
	} 
	my_assert (bNot8Bit==0 || bNot8Bit==1); 
 
	// NBIT: quant precision 
	nextValidLine (pfPara, pnLine); 
	if ( fscanf (pfPara, "%d", &uiQuantPrecision) != 1)	{ 
		fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
		fatal_error("Conversion aborted"); 
	} 
	if (bNot8Bit==0) { 
		uiQuantPrecision = 5; 
	} 
 
	// NBIT: number of bits per pixel 
	nextValidLine (pfPara, pnLine); 
	if ( fscanf (pfPara, "%d", &nBits) != 1)	{ 
		fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
		fatal_error("Conversion aborted"); 
	} 
	my_assert (nBits>=4 && nBits<=12); 
	if (bNot8Bit==0) { 
		nBits = 8; 
	} 
	 
	/*************/ 
	fprintf(pfOut, "Source.BitsPerPel = %d\nNot8Bit.QuantPrecision = %d\nNot8Bit.Enable = %d\n", 
		nBits, uiQuantPrecision, bNot8Bit); 
	/*************/ 
 
	// object indexes 
	nextValidLine (pfPara, pnLine); 
	if ( fscanf (pfPara, "%u", &firstVO) != 1)	{ 
		fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
		fatal_error("Conversion aborted"); 
	} 
	nextValidLine (pfPara, pnLine); 
	if ( fscanf (pfPara, "%u", &lastVO) != 1)	{ 
		fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
		fatal_error("Conversion aborted"); 
	} 
	my_assert (lastVO >= firstVO); 
	nVO = lastVO - firstVO + 1; 
 
	/*************/ 
	fprintf(pfOut, "Source.ObjectIndex.First = %d\nSource.ObjectIndex.Last = %d\n", 
		firstVO, lastVO); 
	/*************/ 
 
	// 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]; 
	} 
 
 
	//scalability indicators: 1 = temporal, 2 = spatial scalability 
 
 
	nextValidLine (pfPara, pnLine); 
	bAnyScalability = FALSE; 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &rgbScalability [iObj]) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		if (rgbScalability[iObj] == TEMPORAL_SCALABILITY ||  
			rgbScalability[iObj] == SPATIAL_SCALABILITY) 
			bAnyScalability = TRUE; 
		else 
			my_assert (rgbScalability[iObj] == NO_SCALABILITY); 
		if(rgbScalability[iObj] == SPATIAL_SCALABILITY || rgbScalability[iObj] == TEMPORAL_SCALABILITY) // modifiedy by Sharp(98/2/12) 
			rgbSpatialScalability[iObj] = TRUE;  
		else  
			rgbSpatialScalability[iObj] = FALSE; 
 
		/*************/ 
		fprintf(pfOut, "Scalability [%d] = \"%s\"\n", iObj, 
			rgbScalability[iObj] == TEMPORAL_SCALABILITY ? "Temporal" : (rgbScalability[iObj] == SPATIAL_SCALABILITY ? "Spatial" : "None")); 
		/*************/ 
	} 
 
	//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......." 
	nextValidLine(pfPara,pnLine); 
	my_assert (nVO == 1); 
	fscanf(pfPara,"%d",&iSpatialOption); 
	if(rgbScalability[0] == SPATIAL_SCALABILITY) 
		if (iSpatialOption == 1) 
				fprintf(stdout,"Enhancement layer is coded as \"PPPPP.....\"\n"); 
		else if (iSpatialOption == 0) 
				fprintf(stdout,"Enhancement layer is coded as \"PBBBB.....\"\n"); 
		else { 
			fprintf(stderr,"The parameter \"SpatialOption\" is not set correctly\n"); 
			fatal_error("Conversion aborted"); 
		} 
 
	/*************/ 
	fprintf(pfOut, "Scalability.Spatial.PredictionType [0] = \"%s\"\n", iSpatialOption==0 ? "PBB" : "PPP"); 
	/*************/ 
 
	//Load enhancement layer (Spatial Scalable) size 
	nextValidLine(pfPara,pnLine); 
	fscanf(pfPara,"%d",&uiFrmWidth_SS); 
	fscanf(pfPara,"%d",&uiFrmHeight_SS); 
 
	//load upsampling factor  
	nextValidLine(pfPara,pnLine); 
	fscanf(pfPara,"%d",&uiHor_sampling_n); 
	fscanf(pfPara,"%d",&uiHor_sampling_m); 
 
	nextValidLine(pfPara,pnLine); 
	fscanf(pfPara,"%d",&uiVer_sampling_n); 
	fscanf(pfPara,"%d",&uiVer_sampling_m); 
 
	/*************/ 
	fprintf(pfOut, "Scalability.Spatial.Width [0] = %d\n", uiFrmWidth_SS); 
	fprintf(pfOut, "Scalability.Spatial.Height [0] = %d\n", uiFrmHeight_SS); 
	fprintf(pfOut, "Scalability.Spatial.HorizFactor.N [0] = %d\n", uiHor_sampling_n); 
	fprintf(pfOut, "Scalability.Spatial.HorizFactor.M [0] = %d\n", uiHor_sampling_m); 
	fprintf(pfOut, "Scalability.Spatial.VertFactor.N [0] = %d\n", uiVer_sampling_n); 
	fprintf(pfOut, "Scalability.Spatial.VertFactor.M [0] = %d\n", uiVer_sampling_m); 
	/*************/ 
 
	// 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 .... 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &rgiTemporalScalabilityType [iObj]) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rgiTemporalScalabilityType [iObj] == 0 ||  
			rgiTemporalScalabilityType [iObj] == 1 ||  
			rgiTemporalScalabilityType [iObj] == 2 || 
			rgiTemporalScalabilityType [iObj] == 3 || 
			rgiTemporalScalabilityType [iObj] == 4); 
		/*************/ 
		fprintf(pfOut, "Scalability.Temporal.PredictionType [%d] = %d\n", iObj, rgiTemporalScalabilityType [iObj]); 
		/*************/ 
	} 
 
	// enhancement_type for scalability 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &rgiEnhancementType [iObj]) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rgiEnhancementType [iObj] == 0 || //  entire region of the base layer is enhanced 
// begin: modified by Sharp (98/3/24) 
			rgiEnhancementType [iObj] == 1 ||  // partial region of the base layer is enhanced (with background composition) 
			rgiEnhancementType [iObj] == 2);  // partial region of the base layer is enhanced (without background composition) 
// end: modified by Sharp (98/3/24) 
		/*************/ 
		fprintf(pfOut, "Scalability.Temporal.EnhancementType [%d] = \"%s\"\n", iObj, 
			rgiEnhancementType [iObj] == 0 ? "Full" : (rgiEnhancementType [iObj] == 1 ? "PartC" : "PartNC")); 
		/*************/ 
	} 
 
	// rate control flag 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%u", &rguiRateControl [BASE_LAYER] [iObj] ) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rguiRateControl [BASE_LAYER] [iObj]  == RC_MPEG4 ||  
				rguiRateControl [BASE_LAYER] [iObj]  == RC_TM5 || 
				rguiRateControl [BASE_LAYER] [iObj]  == 0); 
 
		/*************/ 
		fprintf(pfOut, "RateControl.Type [%d] = \"%s\"\n", iObj, 
			rguiRateControl [BASE_LAYER] [iObj] == 0 ? "None" : (rguiRateControl [BASE_LAYER] [iObj] == RC_MPEG4 ? "MP4" : "TM5")); 
		/*************/ 
	} 
	if (bAnyScalability)	{ 
		for (iObj = 0; iObj < nVO; iObj++)	{ 
			if (fscanf (pfPara, "%u", &rguiRateControl [ENHN_LAYER] [iObj]) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			my_assert (rguiRateControl [ENHN_LAYER] [iObj]  == 0 ||  
					rguiRateControl [ENHN_LAYER] [iObj]  == RC_MPEG4 || 
					rguiRateControl [ENHN_LAYER] [iObj]  == RC_TM5); 
			/*************/ 
			fprintf(pfOut, "RateControl.Type [%d] = \"%s\"\n", iObj + nVO, 
				rguiRateControl [ENHN_LAYER] [iObj] == 0 ? "None" : (rguiRateControl [ENHN_LAYER] [iObj] == RC_MPEG4 ? "MP4" : "TM5")); 
			/*************/ 
		} 
	} 
 
	// bit budget for each object. 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &rguiBitsBudget [BASE_LAYER] [iObj]) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		/*************/ 
		fprintf(pfOut, "RateControl.BitsPerVOP [%d] = %d\n", iObj, rguiBitsBudget [BASE_LAYER] [iObj]); 
		/*************/ 
	} 
	if (bAnyScalability)	{ 
		for (iObj = 0; iObj < nVO; iObj++)	{ 
			if (fscanf (pfPara, "%d", &rguiBitsBudget [ENHN_LAYER] [iObj]) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			my_assert (rguiBitsBudget [ENHN_LAYER] [iObj]  > 0); 
			/*************/ 
			fprintf(pfOut, "RateControl.BitsPerVOP [%d] = %d\n", iObj + nVO, rguiBitsBudget [ENHN_LAYER] [iObj]); 
			/*************/ 
		} 
	} 
 
 
	// alpha usage for each object.  0: rectangle, 1: binary, 2: 8-bit, 3: shape only 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		UInt uiAlpha; 
		if (fscanf (pfPara, "%d", &uiAlpha) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		else { 
			my_assert (uiAlpha == 0 || uiAlpha == 1 || uiAlpha == 2 || uiAlpha == 3); 
			if(uiAlpha<3) 
			{ 
				rgfAlphaUsage [iObj] = (AlphaUsage) uiAlpha; 
				rgbShapeOnly [iObj] = FALSE; 
			} 
			else 
			{ 
				rgfAlphaUsage [iObj] = ONE_BIT; 
				rgbShapeOnly [iObj] = TRUE; 
			} 
		} 
		/*************/ 
		fprintf(pfOut, "Alpha.Type [%d] = \"%s\"\n", iObj, 
			uiAlpha==0 ? "None" : (uiAlpha==1 ? "Binary" : (uiAlpha==2 ? "Gray" : "ShapeOnly"))); 
		/*************/ 
	} 
 
	// binary shape rounding para 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &rgiBinaryAlphaTH [iObj]) != 1)	{ 
			fprintf	(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rgiBinaryAlphaTH [iObj] >= 0); 
		/*************/ 
		fprintf(pfOut, "Alpha.Binary.RoundingThreshold [%d] = %d\n", iObj, rgiBinaryAlphaTH [iObj]); 
		/*************/ 
	} 
 
	// binary shape size conversion flag 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &rgbNoCrChange [iObj]) != 1)	{ 
			fprintf	(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rgbNoCrChange [iObj] == TRUE || rgbNoCrChange [iObj] == FALSE); //boolean value 
		if (rgiBinaryAlphaTH [iObj] == 0) 
			my_assert (rgbNoCrChange [iObj] == TRUE); //MB-level size conversion of shape is off in lossless mode\n"); 
		/*************/ 
		fprintf(pfOut, "Alpha.Binary.SizeConversion.Enable [%d] = %d\n", iObj, !rgbNoCrChange [iObj]); 
		/*************/ 
	} 
 
	//	Added for error resilient mode by Toshiba(1997-11-14) 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &rgiBinaryAlphaRR [iObj]) != 1)	{ 
			fprintf	(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rgiBinaryAlphaRR [iObj] >= 0); 
		/*************/ 
		fprintf(pfOut, "ErrorResil.AlphaRefreshRate [%d] = %d\n", iObj, rgiBinaryAlphaRR [iObj]); 
		/*************/ 
	} 
	// End Toshiba(1997-11-14) 
 
	// rounding control disable 
	if(iVersion > 812) 
		nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if(iVersion > 812) 
		{ 
			if (fscanf (pfPara, "%d", &rgbRoundingControlDisable [iObj]) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
		} 
		else 
			rgbRoundingControlDisable [iObj] = 0; 
		my_assert (rgbRoundingControlDisable [iObj]  == 0 || rgbRoundingControlDisable [iObj] == 1); 
		/*************/ 
		fprintf(pfOut, "Motion.RoundingControl.Enable [%d] = %d\n", iObj, !rgbRoundingControlDisable [iObj]); 
		/*************/ 
	} 
	if(iVersion > 812) 
		nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if(iVersion > 812) 
		{ 
			if (fscanf (pfPara, "%d", &rgiInitialRoundingType [iObj]) != 1)	{ 
				fprintf	(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
		} 
		else 
			rgiInitialRoundingType [iObj] = 0; 
		my_assert (rgiInitialRoundingType [iObj] == 0 || rgiInitialRoundingType [iObj] == 1); 
		/*************/ 
		fprintf(pfOut, "Motion.RoundingControl.StartValue [%d] = %d\n", iObj, rgiInitialRoundingType [iObj]); 
		/*************/ 
	} 
 
	// error resilient coding disable 
	nextValidLine (pfPara, pnLine); 
	Int iErrorResilientFlags; 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &iErrorResilientFlags) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		rgbErrorResilientDisable [BASE_LAYER] [iObj] = iErrorResilientFlags & 0x1; 
//	Modified for error resilient mode by Toshiba(1998-1-16) 
		rgbDataPartitioning [BASE_LAYER] [iObj]		 = (iErrorResilientFlags & 0x2) ? TRUE : FALSE; 
		rgbReversibleVlc [BASE_LAYER] [iObj]		 = (iErrorResilientFlags & 0x4) ? TRUE : FALSE; 
//	End Toshiba(1998-1-16) 
		if( rgbErrorResilientDisable [BASE_LAYER] [iObj]) 
			rgiBinaryAlphaRR [iObj] = -1; 
 
		/*************/ 
		fprintf(pfOut, "ErrorResil.RVLC.Enable [%d] = %d\n", iObj, rgbReversibleVlc [BASE_LAYER] [iObj]); 
		fprintf(pfOut, "ErrorResil.DataPartition.Enable [%d] = %d\n", iObj, rgbDataPartitioning [BASE_LAYER] [iObj]); 
		fprintf(pfOut, "ErrorResil.VideoPacket.Enable [%d] = %d\n", iObj, !rgbErrorResilientDisable [BASE_LAYER] [iObj]); 
		/*************/ 
	} 
	if (bAnyScalability)	{ 
		for (iObj = 0; iObj < nVO; iObj++)	{ 
			if (fscanf (pfPara, "%d", &rgbErrorResilientDisable [ENHN_LAYER] [iObj]) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			my_assert (rgbErrorResilientDisable [ENHN_LAYER] [iObj] == TRUE); //error resilient coding not supported as for now 
			rgbErrorResilientDisable [ENHN_LAYER] [iObj] = TRUE; 
			rgbDataPartitioning [ENHN_LAYER] [iObj] = FALSE; 
			rgbReversibleVlc [ENHN_LAYER] [iObj] = FALSE; 
			/*************/ 
			fprintf(pfOut, "ErrorResil.RVLC.Enable [%d] = %d\n", iObj + nVO, rgbReversibleVlc [ENHN_LAYER] [iObj]); 
			fprintf(pfOut, "ErrorResil.DataPartition.Enable [%d] = %d\n", iObj + nVO, rgbDataPartitioning [ENHN_LAYER] [iObj]); 
			fprintf(pfOut, "ErrorResil.VideoPacket.Enable [%d] = %d\n", iObj + nVO, !rgbErrorResilientDisable [ENHN_LAYER] [iObj]); 
			/*************/ 
		} 
	} 
 
	// Bit threshold for video packet spacing control 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &rgiVPBitTh [BASE_LAYER] [iObj]) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		if (rgbErrorResilientDisable [BASE_LAYER] [iObj]) 
			rgiVPBitTh [BASE_LAYER] [iObj] = -1;	// set VPBitTh to negative value 
		/*************/ 
		fprintf(pfOut, "ErrorResil.VideoPacket.Length [%d] = %d\n", iObj, rgiVPBitTh [BASE_LAYER] [iObj]); 
		/*************/ 
	} 
	if (bAnyScalability)	{ 
		for (iObj = 0; iObj < nVO; iObj++)	{ 
			if (fscanf (pfPara, "%d", &rgiVPBitTh [ENHN_LAYER] [iObj]) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			rgiVPBitTh [ENHN_LAYER] [iObj] = -1; 
			/*************/ 
			fprintf(pfOut, "ErrorResil.VideoPacket.Length [%d] = %d\n", iObj + nVO, rgiVPBitTh [ENHN_LAYER] [iObj]); 
			/*************/ 
		} 
	} 
 
	// Interlaced coding 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &rgbInterlacedCoding [BASE_LAYER] [iObj]) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rgbInterlacedCoding [BASE_LAYER] [iObj] == 0 || rgbInterlacedCoding [BASE_LAYER] [iObj] == 1); 
		/*************/ 
		fprintf(pfOut, "Motion.Interlaced.Enable [%d] = %d\n", iObj, rgbInterlacedCoding [BASE_LAYER] [iObj]); 
		/*************/ 
	} 
	if (bAnyScalability)	{ 
		for (iObj = 0; iObj < nVO; iObj++)	{ 
			if (fscanf (pfPara, "%d", &rgbInterlacedCoding [ENHN_LAYER] [iObj]) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			my_assert (rgbInterlacedCoding [ENHN_LAYER] [iObj] == 0 || rgbInterlacedCoding [ENHN_LAYER] [iObj] == 1); 
			/*************/ 
			fprintf(pfOut, "Motion.Interlaced.Enable [%d] = %d\n", iObj + nVO, rgbInterlacedCoding [ENHN_LAYER] [iObj]); 
			/*************/ 
		} 
	} 
	 
	// quantizer selection: 0 -- H.263, 1 -- MPEG 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
	  int read; 
		if (fscanf (pfPara, "%d", &read) != 1) { 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		rgfQuant [BASE_LAYER] [iObj] = (Quantizer)read; 
		my_assert (rgfQuant [BASE_LAYER] [iObj] ==0 || rgfQuant [BASE_LAYER] [iObj] == 1); 
		/*************/ 
		fprintf(pfOut, "Quant.Type [%d] = \"%s\"\n", iObj, rgfQuant [BASE_LAYER] [iObj]==0 ? "H263" : "MPEG"); 
		/*************/ 
	} 
	if (bAnyScalability)	{ 
		for (iObj = 0; iObj < nVO; iObj++)	{ 
		  int read; 
			if (fscanf (pfPara, "%d", &read) != 1) { 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			rgfQuant [ENHN_LAYER] [iObj] = (Quantizer)read; 
			my_assert (rgfQuant [ENHN_LAYER] [iObj] ==0 || rgfQuant [ENHN_LAYER] [iObj] == 1); 
			/*************/ 
			fprintf(pfOut, "Quant.Type [%d] = \"%s\"\n", iObj + nVO, rgfQuant [ENHN_LAYER] [iObj]==0 ? "H263" : "MPEG"); 
			/*************/ 
		} 
	} 
 
	// load non-default intra Q-Matrix, 0 -- FALSE, 1 -- TRUE 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &rgbLoadIntraMatrix [BASE_LAYER] [iObj]) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rgbLoadIntraMatrix [BASE_LAYER] [iObj] ==0 ||  
				rgbLoadIntraMatrix [BASE_LAYER] [iObj] == 1); 
		/*************/ 
		fprintf(pfOut, "Texture.QuantMatrix.Intra.Enable [%d] = %d\n", iObj, rgbLoadIntraMatrix [BASE_LAYER] [iObj]); 
		/*************/ 
		if (rgbLoadIntraMatrix [BASE_LAYER] [iObj]) { 
			/*************/ 
			fprintf(pfOut, "Texture.QuantMatrix.Intra [%d] = {", iObj); 
			/*************/ 
			UInt i = 0; 
			do { 
				if(i>0) 
					/*************/ 
					fprintf(pfOut, ", "); 
					/*************/ 
				if (fscanf (pfPara, "%d", &rgppiIntraQuantizerMatrix [BASE_LAYER] [iObj] [i]) != 1)	{ 
					fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
					fatal_error("Conversion aborted"); 
				} 
				/*************/ 
				fprintf(pfOut, "%d", rgppiIntraQuantizerMatrix [BASE_LAYER] [iObj] [i]); 
				/*************/ 
			} while (rgppiIntraQuantizerMatrix [BASE_LAYER] [iObj] [i] != 0 && ++i < BLOCK_SQUARE_SIZE); 
			/*************/ 
			fprintf(pfOut, "}\n"); 
			/*************/ 
		} 
	} 
	if (bAnyScalability)	{ 
		for (iObj = 0; iObj < nVO; iObj++)	{ 
			if (fscanf (pfPara, "%d", &rgbLoadIntraMatrix [ENHN_LAYER] [iObj]) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			my_assert (rgbLoadIntraMatrix [ENHN_LAYER] [iObj] ==0 ||  
					rgbLoadIntraMatrix [ENHN_LAYER] [iObj] == 1); 
			/*************/ 
			fprintf(pfOut, "Texture.QuantMatrix.Intra.Enable [%d] = %d\n", iObj + nVO, rgbLoadIntraMatrix [ENHN_LAYER] [iObj]); 
			/*************/ 
			if (rgbLoadIntraMatrix [ENHN_LAYER] [iObj]) { 
				/*************/ 
				fprintf(pfOut, "Texture.QuantMatrix.Intra [%d] = {", iObj + nVO); 
				/*************/ 
				UInt i = 0; 
				do { 
					if(i>0) 
						/*************/ 
						fprintf(pfOut, ", "); 
						/*************/ 
					if (fscanf (pfPara, "%d", &rgppiIntraQuantizerMatrix [ENHN_LAYER] [iObj] [i]) != 1)	{ 
						fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
						fatal_error("Conversion aborted"); 
					} 
					/*************/ 
					fprintf(pfOut, "%d", rgppiIntraQuantizerMatrix [ENHN_LAYER] [iObj] [i]); 
					/*************/ 
				} while (rgppiIntraQuantizerMatrix [ENHN_LAYER] [iObj] [i] != 0 && ++i < BLOCK_SQUARE_SIZE); 
				/*************/ 
				fprintf(pfOut, "}\n"); 
				/*************/ 
			} 
		} 
	} 
 
	// load non-default inter Q-Matrix, 0 -- FALSE, 1 -- TRUE 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &rgbLoadInterMatrix [BASE_LAYER] [iObj]) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rgbLoadInterMatrix [BASE_LAYER] [iObj] ==0 ||  
				rgbLoadInterMatrix [BASE_LAYER] [iObj] == 1); 
		/*************/ 
		fprintf(pfOut, "Texture.QuantMatrix.Inter.Enable [%d] = %d\n", iObj, rgbLoadInterMatrix [BASE_LAYER] [iObj]); 
		/*************/ 
		if (rgbLoadInterMatrix [BASE_LAYER] [iObj]) { 
			/*************/ 
			fprintf(pfOut, "Texture.QuantMatrix.Inter [%d] = {", iObj); 
			/*************/ 
			UInt i = 0; 
			do { 
				if(i>0) 
					/*************/ 
					fprintf(pfOut, ", "); 
					/*************/ 
				if (fscanf (pfPara, "%d", &rgppiInterQuantizerMatrix [BASE_LAYER] [iObj] [i]) != 1)	{ 
					fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
					fatal_error("Conversion aborted"); 
				} 
				/*************/ 
				fprintf(pfOut, "%d", rgppiInterQuantizerMatrix [BASE_LAYER] [iObj] [i]); 
				/*************/ 
			} while (rgppiInterQuantizerMatrix [BASE_LAYER] [iObj] [i] != 0 && ++i < BLOCK_SQUARE_SIZE); 
			/*************/ 
			fprintf(pfOut, "}\n"); 
			/*************/ 
		} 
	} 
	if (bAnyScalability)	{ 
		for (iObj = 0; iObj < nVO; iObj++)	{ 
			if (fscanf (pfPara, "%d", &rgbLoadInterMatrix [ENHN_LAYER] [iObj]) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			my_assert (rgbLoadInterMatrix [ENHN_LAYER] [iObj] ==0 ||  
					rgbLoadInterMatrix [ENHN_LAYER] [iObj] == 1); 
			/*************/ 
			fprintf(pfOut, "Texture.QuantMatrix.Inter.Enable [%d] = %d\n", iObj + nVO, rgbLoadInterMatrix [ENHN_LAYER] [iObj]); 
			/*************/ 
			if (rgbLoadInterMatrix [ENHN_LAYER] [iObj]) { 
				/*************/ 
				fprintf(pfOut, "Texture.QuantMatrix.Inter [%d] = {", iObj + nVO); 
				/*************/ 
				UInt i = 0; 
				do { 
					if(i>0) 
						/*************/ 
						fprintf(pfOut, ", "); 
						/*************/ 
					if (fscanf (pfPara, "%d", &rgppiInterQuantizerMatrix [ENHN_LAYER] [iObj] [i]) != 1)	{ 
						fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
						fatal_error("Conversion aborted"); 
					} 
					/*************/ 
					fprintf(pfOut, "%d", rgppiInterQuantizerMatrix [ENHN_LAYER] [iObj] [i]); 
					/*************/ 
				} while (rgppiInterQuantizerMatrix [ENHN_LAYER] [iObj] [i] != 0 && ++i < BLOCK_SQUARE_SIZE); 
				/*************/ 
				fprintf(pfOut, "}\n"); 
				/*************/ 
			} 
		} 
	} 
 
	// threhold to code Intra-DC as AC 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &(rgiIntraDCSwitchingThr [BASE_LAYER] [iObj])) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rgiIntraDCSwitchingThr [BASE_LAYER] [iObj] >= 0 &&  
				rgiIntraDCSwitchingThr [BASE_LAYER] [iObj] <= 7); 
		/*************/ 
		fprintf(pfOut, "Texture.IntraDCThreshold [%d] = %d\n", iObj, rgiIntraDCSwitchingThr [BASE_LAYER] [iObj]); 
		/*************/ 
	} 
	if (bAnyScalability)	{ 
		for (iObj = 0; iObj < nVO; iObj++)	{ 
			if (fscanf (pfPara, "%d", &(rgiIntraDCSwitchingThr [ENHN_LAYER] [iObj])) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			my_assert (rgiIntraDCSwitchingThr [ENHN_LAYER] [iObj] >= 0 &&  
					rgiIntraDCSwitchingThr [ENHN_LAYER] [iObj] <= 7); 
			/*************/ 
			fprintf(pfOut, "Texture.IntraDCThreshold [%d] = %d\n", iObj + nVO, rgiIntraDCSwitchingThr [ENHN_LAYER] [iObj]); 
			/*************/ 
		} 
	} 
 
	// I-VO quantization stepsize 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &(rgiIStep [BASE_LAYER] [iObj])) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rgiIStep [BASE_LAYER] [iObj] > 0 && rgiIStep [BASE_LAYER] [iObj] < (1< 0 && rgiIStep [ENHN_LAYER] [iObj] < (1< 0 && rgiPStep [BASE_LAYER] [iObj] < (1< 0 && rgiPStep [ENHN_LAYER] [iObj] < (1< 0 && rgiStepBCode [BASE_LAYER] [iObj] < (1< 0 && rgiStepBCode [ENHN_LAYER] [iObj] < (1<0) 
					/*************/ 
					fprintf(pfOut, ", "); 
					/*************/ 
				if (fscanf (pfPara, "%d", &rgppiIntraQuantizerMatrixAlpha [BASE_LAYER] [iObj] [i]) != 1)	{ 
					fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
					fatal_error("Conversion aborted"); 
				} 
				/*************/ 
				fprintf(pfOut, "%d", rgppiIntraQuantizerMatrixAlpha [BASE_LAYER] [iObj] [i]); 
				/*************/ 
			} 
			/*************/ 
			fprintf(pfOut, "}\n"); 
			/*************/ 
		} 
	} 
	if (bAnyScalability)	{ 
		for (iObj = 0; iObj < nVO; iObj++)	{ 
			if (fscanf (pfPara, "%d", &rgbLoadIntraMatrixAlpha [ENHN_LAYER] [iObj]) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			my_assert (rgbLoadIntraMatrixAlpha [ENHN_LAYER] [iObj] ==0 ||  
					rgbLoadIntraMatrixAlpha [ENHN_LAYER] [iObj] == 1); 
			/*************/ 
			fprintf(pfOut, "Alpha.QuantMatrix.Intra.Enable [%d] = %d\n", iObj + nVO, rgbLoadIntraMatrixAlpha [ENHN_LAYER] [iObj]); 
			/*************/ 
			if (rgbLoadIntraMatrixAlpha [ENHN_LAYER] [iObj]) { 
				/*************/ 
				fprintf(pfOut, "Alpha.QuantMatrix.Intra [%d] = {", iObj + nVO); 
				/*************/ 
				for (UInt i = 0; i < BLOCK_SQUARE_SIZE; i++) { 
					if(i>0) 
						/*************/ 
						fprintf(pfOut, ", "); 
						/*************/ 
					if (fscanf (pfPara, "%d", &rgppiIntraQuantizerMatrixAlpha [ENHN_LAYER] [iObj] [i]) != 1)	{ 
						fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
						fatal_error("Conversion aborted"); 
					} 
					/*************/ 
					fprintf(pfOut, "%d", rgppiIntraQuantizerMatrixAlpha [ENHN_LAYER] [iObj] [i]); 
					/*************/ 
				} 
				/*************/ 
				fprintf(pfOut, "}\n"); 
				/*************/ 
			} 
		} 
	} 
 
	// load non-default  gray alpha inter Q-Matrix, 0 -- FALSE, 1 -- TRUE 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &rgbLoadInterMatrixAlpha [BASE_LAYER] [iObj]) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rgbLoadInterMatrixAlpha [BASE_LAYER] [iObj] ==0 ||  
				rgbLoadInterMatrixAlpha [BASE_LAYER] [iObj] == 1); 
		/*************/ 
		fprintf(pfOut, "Alpha.QuantMatrix.Inter.Enable [%d] = %d\n", iObj, rgbLoadInterMatrixAlpha [BASE_LAYER] [iObj]); 
		/*************/ 
		if (rgbLoadInterMatrixAlpha [BASE_LAYER] [iObj]) { 
			/*************/ 
			fprintf(pfOut, "Alpha.QuantMatrix.Inter [%d] = {", iObj); 
			/*************/ 
			for (UInt i = 0; i < BLOCK_SQUARE_SIZE; i++) { 
				if(i>0) 
					/*************/ 
					fprintf(pfOut, ", "); 
					/*************/ 
				if (fscanf (pfPara, "%d", &rgppiInterQuantizerMatrixAlpha [BASE_LAYER] [iObj] [i]) != 1)	{ 
					fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
					fatal_error("Conversion aborted"); 
				} 
				/*************/ 
				fprintf(pfOut, "%d", rgppiInterQuantizerMatrixAlpha [BASE_LAYER] [iObj] [i]); 
				/*************/ 
			} 
			/*************/ 
			fprintf(pfOut, "}\n"); 
			/*************/ 
		} 
	} 
	if (bAnyScalability)	{ 
		for (iObj = 0; iObj < nVO; iObj++)	{ 
			if (fscanf (pfPara, "%d", &rgbLoadInterMatrixAlpha [ENHN_LAYER] [iObj]) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			my_assert (rgbLoadInterMatrixAlpha [ENHN_LAYER] [iObj] ==0 ||  
					rgbLoadInterMatrixAlpha [ENHN_LAYER] [iObj] == 1); 
			/*************/ 
			fprintf(pfOut, "Alpha.QuantMatrix.Inter.Enable [%d] = %d\n", iObj + nVO, rgbLoadInterMatrixAlpha [ENHN_LAYER] [iObj]); 
			/*************/ 
			if (rgbLoadInterMatrixAlpha [ENHN_LAYER] [iObj]) { 
				/*************/ 
				fprintf(pfOut, "Alpha.QuantMatrix.Inter [%d] = {", iObj + nVO); 
				/*************/ 
				for (UInt i = 0; i < BLOCK_SQUARE_SIZE; i++) { 
					if(i>0) 
						/*************/ 
						fprintf(pfOut, ", "); 
						/*************/ 
					if (fscanf (pfPara, "%d", &rgppiInterQuantizerMatrixAlpha [ENHN_LAYER] [iObj] [i]) != 1)	{ 
						fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
						fatal_error("Conversion aborted"); 
					} 
					/*************/ 
					fprintf(pfOut, "%d", rgppiInterQuantizerMatrixAlpha [ENHN_LAYER] [iObj] [i]); 
					/*************/ 
				} 
				/*************/ 
				fprintf(pfOut, "}\n"); 
				/*************/ 
			} 
		} 
	} 
 
	// I-VO quantization stepsize for Alpha 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &(rgiIStepAlpha [BASE_LAYER] [iObj])) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rgiIStepAlpha [BASE_LAYER] [iObj] > 0 && rgiIStepAlpha [BASE_LAYER] [iObj] < 32); 
		/*************/ 
		fprintf(pfOut, "Alpha.QuantStep.IVOP [%d] = %d\n", iObj, rgiIStepAlpha [BASE_LAYER] [iObj]); 
		/*************/ 
	} 
	if (bAnyScalability)	{ 
		for (iObj = 0; iObj < nVO; iObj++)	{ 
			if (fscanf (pfPara, "%d", &(rgiIStepAlpha [ENHN_LAYER] [iObj])) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			my_assert (rgiIStepAlpha [ENHN_LAYER] [iObj] > 0 && rgiIStepAlpha [ENHN_LAYER] [iObj] < 32); 
			/*************/ 
			fprintf(pfOut, "Alpha.QuantStep.IVOP [%d] = %d\n", iObj + nVO, rgiIStepAlpha [ENHN_LAYER] [iObj]); 
			/*************/ 
		} 
	} 
 
	// P-VO quantization stepsize for Alpha 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &(rgiPStepAlpha [BASE_LAYER] [iObj])) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rgiPStepAlpha [BASE_LAYER] [iObj] > 0 && rgiPStepAlpha [BASE_LAYER] [iObj] < 64); 
		/*************/ 
		fprintf(pfOut, "Alpha.QuantStep.PVOP [%d] = %d\n", iObj, rgiPStepAlpha [BASE_LAYER] [iObj]); 
		/*************/ 
	} 
	if (bAnyScalability)	{ 
		for (iObj = 0; iObj < nVO; iObj++)	{ 
			if (fscanf (pfPara, "%d", &(rgiPStepAlpha [ENHN_LAYER] [iObj])) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			my_assert (rgiPStepAlpha [ENHN_LAYER] [iObj] > 0 && rgiPStepAlpha [ENHN_LAYER] [iObj] < 64); 
			/*************/ 
			fprintf(pfOut, "Alpha.QuantStep.PVOP [%d] = %d\n", iObj + nVO, rgiPStepAlpha [ENHN_LAYER] [iObj]); 
			/*************/ 
		} 
	} 
 
	// B-VO quantization stepsize for Alpha 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &(rgiBStepAlpha [BASE_LAYER] [iObj])) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rgiBStepAlpha [BASE_LAYER] [iObj] > 0 && rgiBStepAlpha [BASE_LAYER] [iObj] < 64); 
		/*************/ 
		fprintf(pfOut, "Alpha.QuantStep.BVOP [%d] = %d\n", iObj, rgiBStepAlpha [BASE_LAYER] [iObj]); 
		/*************/ 
	} 
	if (bAnyScalability)	{ 
		for (iObj = 0; iObj < nVO; iObj++)	{ 
			if (fscanf (pfPara, "%d", &(rgiBStepAlpha [ENHN_LAYER] [iObj])) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			my_assert (rgiBStepAlpha [ENHN_LAYER] [iObj] > 0 && rgiBStepAlpha [ENHN_LAYER] [iObj] < 64); 
			/*************/ 
			fprintf(pfOut, "Alpha.QuantStep.BVOP [%d] = %d\n", iObj + nVO, rgiBStepAlpha [ENHN_LAYER] [iObj]); 
			/*************/ 
		} 
	} 
 
	// disable_gray_quant_update 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &(rgbNoGrayQuantUpdate [BASE_LAYER] [iObj])) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		/*************/ 
		fprintf(pfOut, "Alpha.QuantDecouple.Enable [%d] = %d\n", iObj, rgbNoGrayQuantUpdate [BASE_LAYER] [iObj]); 
		/*************/ 
	} 
	if (bAnyScalability)	{ 
		for (iObj = 0; iObj < nVO; iObj++)	{ 
			if (fscanf (pfPara, "%d", &(rgbNoGrayQuantUpdate [ENHN_LAYER] [iObj])) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			/*************/ 
			fprintf(pfOut, "Alpha.QuantDecouple.Enable [%d] = %d\n", iObj + nVO, rgbNoGrayQuantUpdate [ENHN_LAYER] [iObj]); 
			/*************/ 
		} 
	} 
 
	// number of P-VOP's between 2 I-VOP's; if there are B-VOPs, the no. of encode frames will multiply 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &rgiNumPbetweenIVOP [iObj]) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		/*************/ 
		fprintf(pfOut, "Motion.PBetweenICount [%d] = %d\n", iObj, rgiNumPbetweenIVOP [iObj]); 
		/*************/ 
	} 
 
	// number of B-VOP's between 2 P-VOP's 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &rgiNumBbetweenPVOP [iObj]) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rgiNumBbetweenPVOP [iObj] >= 0); 
		/*************/ 
		fprintf(pfOut, "Motion.BBetweenPCount [%d] = %d\n", iObj, rgiNumBbetweenPVOP [iObj]); 
		/*************/ 
	} 
 
	if(iVersion>814) 
	{ 
		// rgbAllowSkippedPMBs 
		nextValidLine (pfPara, pnLine); 
		for (iObj = 0; iObj < nVO; iObj++)	{ 
			if (fscanf (pfPara, "%d", &rgbAllowSkippedPMBs [iObj]) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			my_assert (rgbAllowSkippedPMBs [iObj] == 0 || rgbAllowSkippedPMBs[iObj]==1); 
		} 
	} 
	else 
		for (iObj = 0; iObj < nVO; iObj++) 
			rgbAllowSkippedPMBs [iObj] = 1; 
 
	for (iObj = 0; iObj < nVO; iObj++) 
		/*************/ 
		fprintf(pfOut, "Motion.SkippedMB.Enable [%d] = %d\n", iObj, rgbAllowSkippedPMBs [iObj]); 
		/*************/ 
 
	//added to encode GOV header by SONY 980212 
	//number of VOP between GOV header 
	//CAUTION:GOV period is not used in spatial scalable coding 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &rgiGOVperiod [iObj]) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rgiGOVperiod [iObj] >= 0); 
		/*************/ 
		fprintf(pfOut, "GOV.Enable [%d] = %d\n", iObj, rgiGOVperiod [iObj] > 0); 
		fprintf(pfOut, "GOV.Period [%d] = %d\n", iObj, rgiGOVperiod [iObj]); 
		/*************/ 
	} 
	//980212 
 
	// deblocking filter disable 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &rgbDeblockFilterDisable [iObj]) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		/*************/ 
		fprintf(pfOut, "Motion.DeblockingFilter.Enable [%d] = %d\n", iObj, !rgbDeblockFilterDisable [iObj]); 
		/*************/ 
	} 
 
	// Temporal sampling rate 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &rgiTSRate [iObj]) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rgiTSRate [iObj] >= 1); 
		/*************/ 
		fprintf(pfOut, "Source.SamplingRate [%d] = %d\n", iObj, rgiTSRate [iObj]); 
		/*************/ 
	} 
	if ( bAnyScalability ){ // This part is added by Norio Ito 
		for (iObj = 0; iObj < nVO; iObj++)	{ 
			if (fscanf (pfPara, "%d", &rgiEnhcTSRate [iObj]) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			my_assert (rgiEnhcTSRate [iObj] >= 1); 
			/*************/ 
			fprintf(pfOut, "Source.SamplingRate [%d] = %d\n", iObj + nVO, rgiEnhcTSRate [iObj]); 
			/*************/ 
		} 
	} 
 
	// maximum displacement 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++) { 
		if (fscanf (pfPara, "%d", &rguiSearchRange [BASE_LAYER] [iObj]) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rguiSearchRange [BASE_LAYER] [iObj] >= 1); 
		/*************/ 
		fprintf(pfOut, "Motion.SearchRange [%d] = %d\n", iObj, rguiSearchRange [BASE_LAYER] [iObj]); 
		/*************/ 
	} 
	if (bAnyScalability)	{ 
		for (iObj = 0; iObj < nVO; iObj++) { 
			if (fscanf (pfPara, "%d", &rguiSearchRange [ENHN_LAYER] [iObj]) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			my_assert (rguiSearchRange [ENHN_LAYER] [iObj] >= 1); 
			/*************/ 
			fprintf(pfOut, "Motion.SearchRange [%d] = %d\n", iObj + nVO, rguiSearchRange [ENHN_LAYER] [iObj]); 
			/*************/ 
		} 
	} 
 
	// use original or reconstructed previous VO for ME 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &rgbOriginalME [BASE_LAYER] [iObj]) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rgbOriginalME [BASE_LAYER] [iObj] == 0 || rgbOriginalME [BASE_LAYER] [iObj] == 1); 
		/*************/ 
		fprintf(pfOut, "Motion.UseSourceForME.Enable [%d] = %d\n", iObj, rgbOriginalME [BASE_LAYER] [iObj]); 
		/*************/ 
	} 
	if (bAnyScalability)	{ 
		for (iObj = 0; iObj < nVO; iObj++)	{ 
			if (fscanf (pfPara, "%d", &rgbOriginalME [ENHN_LAYER] [iObj]) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			my_assert (rgbOriginalME [ENHN_LAYER] [iObj] == 0 || rgbOriginalME [ENHN_LAYER] [iObj] == 1); 
			/*************/ 
			fprintf(pfOut, "Motion.UseSourceForME.Enable [%d] = %d\n", iObj + nVO, rgbOriginalME [ENHN_LAYER] [iObj]); 
			/*************/ 
		} 
	} 
 
	// disable advance prediction (obmc only)? 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &rgbAdvPredDisable [BASE_LAYER] [iObj]) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rgbAdvPredDisable [BASE_LAYER] [iObj] == 0 || rgbAdvPredDisable [BASE_LAYER] [iObj] == 1); 
		/*************/ 
		fprintf(pfOut, "Motion.AdvancedPrediction.Enable [%d] = %d\n", iObj, !rgbAdvPredDisable [BASE_LAYER] [iObj]); 
		/*************/ 
	} 
	if (bAnyScalability)	{ 
		for (iObj = 0; iObj < nVO; iObj++)	{ 
			if (fscanf (pfPara, "%d", &rgbAdvPredDisable [ENHN_LAYER] [iObj]) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			my_assert (rgbAdvPredDisable [ENHN_LAYER] [iObj] == 0 || rgbAdvPredDisable [ENHN_LAYER] [iObj] == 1); 
			/*************/ 
			fprintf(pfOut, "Motion.AdvancedPrediction.Enable [%d] = %d\n", iObj + nVO, !rgbAdvPredDisable [ENHN_LAYER] [iObj]); 
			/*************/ 
		} 
	} 
 
	// START: Complexity Estimation syntax support - Marc Mongenet (EPFL) - 16 Jun 1998 
	readBoolVOLFlag (rgbComplexityEstimationDisable, nVO, pfPara, pnLine, bAnyScalability); 
	readBoolVOLFlag (rgbOpaque, nVO, pfPara, pnLine, bAnyScalability); 
	readBoolVOLFlag (rgbTransparent, nVO, pfPara, pnLine, bAnyScalability); 
	readBoolVOLFlag (rgbIntraCAE, nVO, pfPara, pnLine, bAnyScalability); 
	readBoolVOLFlag (rgbInterCAE, nVO, pfPara, pnLine, bAnyScalability); 
	readBoolVOLFlag (rgbNoUpdate, nVO, pfPara, pnLine, bAnyScalability); 
	readBoolVOLFlag (rgbUpsampling, nVO, pfPara, pnLine, bAnyScalability); 
	readBoolVOLFlag (rgbIntraBlocks, nVO, pfPara, pnLine, bAnyScalability); 
	readBoolVOLFlag (rgbInterBlocks, nVO, pfPara, pnLine, bAnyScalability); 
	readBoolVOLFlag (rgbInter4vBlocks, nVO, pfPara, pnLine, bAnyScalability); 
	readBoolVOLFlag (rgbNotCodedBlocks, nVO, pfPara, pnLine, bAnyScalability); 
	readBoolVOLFlag (rgbDCTCoefs, nVO, pfPara, pnLine, bAnyScalability); 
	readBoolVOLFlag (rgbDCTLines, nVO, pfPara, pnLine, bAnyScalability); 
	readBoolVOLFlag (rgbVLCSymbols, nVO, pfPara, pnLine, bAnyScalability); 
	readBoolVOLFlag (rgbVLCBits, nVO, pfPara, pnLine, bAnyScalability); 
	readBoolVOLFlag (rgbAPM, nVO, pfPara, pnLine, bAnyScalability); 
	readBoolVOLFlag (rgbNPM, nVO, pfPara, pnLine, bAnyScalability); 
	readBoolVOLFlag (rgbInterpolateMCQ, nVO, pfPara, pnLine, bAnyScalability); 
	readBoolVOLFlag (rgbForwBackMCQ, nVO, pfPara, pnLine, bAnyScalability); 
	readBoolVOLFlag (rgbHalfpel2, nVO, pfPara, pnLine, bAnyScalability); 
	readBoolVOLFlag (rgbHalfpel4, nVO, pfPara, pnLine, bAnyScalability); 
	// END: Complexity Estimation syntax support 
 
	/*************/ 
	for(iObj = 0; iObj813) 
	{ 
		readItem(rguiVolControlParameters, nVO, pfPara, pnLine, bAnyScalability); 
		readItem(rguiChromaFormat, nVO, pfPara, pnLine, bAnyScalability); 
		readItem(rguiLowDelay, nVO, pfPara, pnLine, bAnyScalability); 
		readItem(rguiVBVParams, nVO, pfPara, pnLine, bAnyScalability); 
		readItem(rguiBitRate, nVO, pfPara, pnLine, bAnyScalability); 
		readItem(rguiVbvBufferSize, nVO, pfPara, pnLine, bAnyScalability); 
		readItem(rguiVbvBufferOccupany, nVO, pfPara, pnLine, bAnyScalability); 
	} 
	else 
	{ 
		for(iObj = 0; iObj 0.0); 
		/*************/ 
		fprintf(pfOut, "Source.FrameRate [%d] = %g\n", iObj, rgdFrameFrequency [BASE_LAYER] [iObj]); 
		/*************/ 
	} 
	if (bAnyScalability)	{ 
		for (iObj = 0; iObj < nVO; iObj++)	{ 
			if (fscanf (pfPara, "%lf", &(rgdFrameFrequency [ENHN_LAYER] [iObj])) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			my_assert(rgdFrameFrequency [ENHN_LAYER] [iObj] > 0.0); 
			/*************/ 
			fprintf(pfOut, "Source.FrameRate [%d] = %g\n", iObj + nVO, rgdFrameFrequency [ENHN_LAYER] [iObj]); 
			/*************/ 
		} 
	} 
 
	// top field first flag 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &(rgbTopFieldFirst [BASE_LAYER] [iObj])) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rgbTopFieldFirst [BASE_LAYER] [iObj] == 0 ||  
				rgbTopFieldFirst [BASE_LAYER] [iObj] == 1); 
		/*************/ 
		fprintf(pfOut, "Motion.Interlaced.TopFieldFirst.Enable [%d] = %d\n", iObj, rgbTopFieldFirst [BASE_LAYER] [iObj]); 
		/*************/ 
	} 
	if (bAnyScalability)	{ 
		for (iObj = 0; iObj < nVO; iObj++)	{ 
			if (fscanf (pfPara, "%d", &(rgbTopFieldFirst [ENHN_LAYER] [iObj])) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			my_assert (rgbTopFieldFirst [ENHN_LAYER] [iObj] == 0 ||  
					rgbTopFieldFirst [ENHN_LAYER] [iObj] == 1); 
		/*************/ 
		fprintf(pfOut, "Motion.Interlaced.TopFieldFirst.Enable [%d] = %d\n", iObj + nVO, rgbTopFieldFirst [ENHN_LAYER] [iObj]); 
		/*************/ 
		} 
	} 
 
	// alternate scan flag 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &(rgbAlternateScan [BASE_LAYER] [iObj])) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rgbAlternateScan [BASE_LAYER] [iObj] == 0 ||  
				rgbAlternateScan [BASE_LAYER] [iObj] == 1); 
		/*************/ 
		fprintf(pfOut, "Motion.Interlaced.AlternativeScan.Enable [%d] = %d\n", iObj, rgbAlternateScan [BASE_LAYER] [iObj]); 
		/*************/ 
	} 
	if (bAnyScalability)	{ 
		for (iObj = 0; iObj < nVO; iObj++)	{ 
			if (fscanf (pfPara, "%d", &(rgbAlternateScan [ENHN_LAYER] [iObj])) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			my_assert (rgbAlternateScan [ENHN_LAYER] [iObj] == 0 ||  
					rgbAlternateScan [ENHN_LAYER] [iObj] == 1); 
			/*************/ 
			fprintf(pfOut, "Motion.Interlaced.AlternativeScan.Enable [%d] = %d\n", iObj + nVO, rgbAlternateScan [ENHN_LAYER] [iObj]); 
			/*************/ 
		} 
	} 
 
	// Direct Mode search radius (half luma pixel units) 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &(rgiDirectModeRadius [BASE_LAYER] [iObj])) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		/*************/ 
		fprintf(pfOut, "Motion.SearchRange.DirectMode [%d] = %d\n", iObj, rgiDirectModeRadius [BASE_LAYER] [iObj]); 
		/*************/ 
	} 
	if (bAnyScalability)	{ 
		for (iObj = 0; iObj < nVO; iObj++)	{ 
			if (fscanf (pfPara, "%d", &(rgiDirectModeRadius [ENHN_LAYER] [iObj])) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			/*************/ 
			fprintf(pfOut, "Motion.SearchRange.DirectMode [%d] = %d\n", iObj + nVO, rgiDirectModeRadius [ENHN_LAYER] [iObj]); 
			/*************/ 
		} 
	} 
 
	// motion vector file 
	nextValidLine(pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &(rgiMVFileUsage [BASE_LAYER] [iObj])) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rgiMVFileUsage [BASE_LAYER] [iObj] == 0 ||	// 0= not used 
				rgiMVFileUsage [BASE_LAYER] [iObj] == 1 ||	// 1= read motion vectors from file 
				rgiMVFileUsage [BASE_LAYER] [iObj] == 2 );	// 2= write motion vectors to file 
		/*************/ 
		fprintf(pfOut, "Motion.ReadWriteMVs [%d] = \"%s\"\n", iObj, 
			rgiMVFileUsage [BASE_LAYER] [iObj]==0 ? "Off" : (rgiMVFileUsage [BASE_LAYER] [iObj]==1 ? "Read" : "Write")); 
		/*************/ 
 
		pchMVFileName [BASE_LAYER] [iObj] = NULL; 
		pchMVFileName [ENHN_LAYER] [iObj] = NULL; 
		 
		char cFileName[256]; 
		cFileName[0] = 0; 
		if ((rgiMVFileUsage [BASE_LAYER] [iObj] != 0) && 
			(fscanf (pfPara, "%200s", cFileName) != 1))	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		Int iLength = strlen(cFileName) + 1; 
		pchMVFileName [BASE_LAYER] [iObj] = new char [iLength]; 
		memcpy(pchMVFileName [BASE_LAYER] [iObj], cFileName, iLength); 
		/*************/ 
		fprintf(pfOut, "Motion.ReadWriteMVs.Filename [%d] = \"%s\"\n", iObj, pchMVFileName [BASE_LAYER] [iObj]); 
		/*************/ 
	} 
	if (bAnyScalability) { 
		for (iObj = 0; iObj < nVO; iObj++)	{ 
			if (fscanf (pfPara, "%d", &(rgiMVFileUsage [ENHN_LAYER] [iObj])) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			my_assert (rgiMVFileUsage [ENHN_LAYER] [iObj] == 0 ||  
					rgiMVFileUsage [ENHN_LAYER] [iObj] == 1 || 
					rgiMVFileUsage [ENHN_LAYER] [iObj] == 2 ); 
			/*************/ 
			fprintf(pfOut, "Motion.ReadWriteMVs [%d] = \"%s\"\n", iObj + nVO, 
				rgiMVFileUsage [ENHN_LAYER] [iObj]==0 ? "Off" : (rgiMVFileUsage [ENHN_LAYER] [iObj]==1 ? "Read" : "Write")); 
			/*************/ 
 
			char cFileName[256]; 
			cFileName[0] = 0; 
			if ((rgiMVFileUsage [ENHN_LAYER] [iObj] != 0) && 
				(fscanf (pfPara, "%s", cFileName) != 1))	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			Int iLength = strlen(cFileName) + 1; 
			pchMVFileName [ENHN_LAYER] [iObj] = new char [iLength]; 
			memcpy(pchMVFileName [ENHN_LAYER] [iObj], cFileName, iLength); 
			/*************/ 
			fprintf(pfOut, "Motion.ReadWriteMVs.Filename [%d] = \"%s\"\n", iObj + nVO, pchMVFileName [ENHN_LAYER] [iObj]); 
			/*************/ 
		} 
	} 
	 
	// file information		 
	pchPrefix = new char [256]; 
	nextValidLine (pfPara, pnLine); 
	fscanf (pfPara, "%s", pchPrefix); 
 
	// original file directory 
	pchBmpDir = new char [256]; 
	nextValidLine (pfPara, pnLine); 
	fscanf (pfPara, "%100s", pchBmpDir); 
 
	/*************/ 
	fprintf(pfOut, "Source.FilePrefix = \"%s\"\n", pchPrefix); 
	fprintf(pfOut, "Source.Directory = \"%s\"\n", pchBmpDir); 
	/*************/ 
 
	// chrominance format 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		UInt uiChrType; 
		if (fscanf (pfPara, "%d", &uiChrType) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		else { 
			my_assert (uiChrType == 0 || uiChrType == 1 || uiChrType == 2); 
			rgfChrType [iObj] = (ChromType) uiChrType; 
		} 
		/*************/ 
		fprintf(pfOut, "Source.Format [%d] = \"%s\"\n", iObj, 
			uiChrType==0 ? "444" : (uiChrType==1 ? "422" : "420")); 
		/*************/ 
	} 
 
	// output file directory 
	pchOutBmpDir = new char [256]; 
	nextValidLine (pfPara, pnLine); 
	fscanf (pfPara, "%100s", pchOutBmpDir); 
 
	// output bitstream file 
	pchOutStrFile = new char [256]; 
	nextValidLine (pfPara, pnLine); 
	fscanf (pfPara, "%100s", pchOutStrFile); 
 
	/*************/ 
	fprintf(pfOut, "Output.Directory.Bitstream = \"%s\"\n", pchOutStrFile); 
	fprintf(pfOut, "Output.Directory.DecodedFrames = \"%s\"\n", pchOutBmpDir); 
	/*************/ 
 
	// statistics dumping options 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &rgbDumpMB [iObj]) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rgbDumpMB [iObj] == 0 || rgbDumpMB [iObj] == 1); 
		/*************/ 
		fprintf(pfOut, "Trace.DetailedDump.Enable [%d] = %d\n", iObj, rgbDumpMB [iObj]); 
		/*************/ 
	} 
 
	// trace file options 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &rgbTrace [iObj]) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rgbTrace [iObj] == 0 || rgbTrace [iObj] == 1); 
		/*************/ 
		fprintf(pfOut, "Trace.CreateFile.Enable [%d] = %d\n", iObj, rgbTrace [iObj]); 
		/*************/ 
	} 
 
	// sprite info 
	// sprite usage 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &rguiSpriteUsage [iObj]) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert ((rguiSpriteUsage [iObj] == 0) || (rguiSpriteUsage [iObj] == 1)); // only support static sprite at the moment 
		if (rgbScalability [iObj] == TRUE) 
			my_assert (rguiSpriteUsage [iObj] == 0); 
		/*************/ 
		fprintf(pfOut, "Sprite.Type [%d] = \"%s\"\n", iObj, rguiSpriteUsage [iObj]==0 ? "None" : "Static"); 
		/*************/ 
	} 
 
	// warping accuracy 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &rguiWarpingAccuracy [iObj]) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		if (rguiSpriteUsage [iObj] != 0) 
			my_assert (rguiWarpingAccuracy [iObj] == 0 || rguiWarpingAccuracy [iObj] == 1 || rguiWarpingAccuracy [iObj] == 2 || rguiWarpingAccuracy [iObj] == 3); 
		/*************/ 
		fprintf(pfOut, "Sprite.WarpAccuracy [%d] = \"1/%d\"\n", iObj, 1<<(rguiWarpingAccuracy [iObj]+1)); 
		/*************/ 
	} 
 
	// number of points 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++)	{ 
		if (fscanf (pfPara, "%d", &rgiNumPnts [iObj]) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		if (rgbScalability [iObj] == TRUE) 
			my_assert (rgiNumPnts [iObj] == -1); 
		if (rguiSpriteUsage [iObj] == 1)  
			my_assert (rgiNumPnts [iObj] == 0 || 
					rgiNumPnts [iObj] == 1 || 
					rgiNumPnts [iObj] == 2 || 
					rgiNumPnts [iObj] == 3 || 
					rgiNumPnts [iObj] == 4); 
		/*************/ 
		fprintf(pfOut, "Sprite.Points [%d] = %d\n", iObj, rgiNumPnts [iObj]); 
		/*************/ 
	} 
 
	// sprite directory 
	pchSptDir = new char [256]; 
	nextValidLine (pfPara, pnLine); 
	fscanf (pfPara, "%100s", pchSptDir); 
 
	// point directory 
	pchSptPntDir = new char [256]; 
	nextValidLine (pfPara, pnLine); 
	fscanf (pfPara, "%100s", pchSptPntDir); 
 
	/*************/ 
	fprintf(pfOut, "Sprite.Directory = \"%s\"\n", pchSptDir); 
	fprintf(pfOut, "Sprite.Points.Directory = \"%s\"\n", pchSptPntDir); 
	/*************/ 
 
	//  sprite reconstruction mode, i.e. Low-latency-sprite-enable 
	nextValidLine (pfPara, pnLine); 
	for (iObj = 0; iObj < nVO; iObj++) 
	{ 
		UInt uiSptMode; 
		if (fscanf (pfPara, "%d", &uiSptMode) != 1)	{ 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		else { 
			my_assert (uiSptMode == 0 || uiSptMode == 1 ); 
			rgSpriteMode[iObj] = (SptMode) uiSptMode; 
		} 
		/*************/ 
		fprintf(pfOut, "Sprite.Mode [%d] = \"%s\"\n", iObj, 
			uiSptMode==0 ? "Basic" : (uiSptMode==1 ? "LowLatency" : (uiSptMode==2 ? "PieceObject" : "PieceUpdate"))); 
		/*************/ 
	} 
 
	fclose(pfPara);	 
	if(argc==3) 
		fclose(pfOut); 
 
	for (Int iLayer = BASE_LAYER; iLayer <= ENHN_LAYER; iLayer++)	{ 
		delete [] rguiRateControl [iLayer]; 
		delete [] rguiBitsBudget [iLayer]; 
		delete [] rgbErrorResilientDisable [iLayer]; 
		delete [] rgbDataPartitioning [iLayer]; 
		delete [] rgbReversibleVlc [iLayer]; 
		delete [] rgiVPBitTh [iLayer]; 
 
		// for texture coding 
		delete [] rgfQuant [iLayer]; 
		delete [] rgiIntraDCSwitchingThr [iLayer]; 
		delete [] rgiIStep [iLayer];				// error signal quantization stepsize 
		delete [] rgiPStep [iLayer];				// error signal quantization stepsize 
		delete [] rgiIStepAlpha [iLayer];		// error signal quantization stepsize 
		delete [] rgiPStepAlpha [iLayer];		// error signal quantization stepsize 
		delete [] rgiBStepAlpha [iLayer]; 
		delete [] rgbNoGrayQuantUpdate [iLayer]; //discouple change of gray quant with tex. quant 
		delete [] rgiStepBCode [iLayer];			// error signal quantization stepsize 
		delete [] rgbLoadIntraMatrix [iLayer]; 
		delete [] rgbLoadInterMatrix [iLayer]; 
		delete [] rgbLoadIntraMatrixAlpha [iLayer]; 
		delete [] rgbLoadInterMatrixAlpha [iLayer]; 
		for (iObj = 0; iObj < nVO; iObj++) { 
			delete [] rgppiIntraQuantizerMatrix  [iLayer] [iObj]; 
			delete [] rgppiInterQuantizerMatrix  [iLayer] [iObj]; 
			delete [] rgppiIntraQuantizerMatrixAlpha  [iLayer] [iObj]; 
			delete [] rgppiInterQuantizerMatrixAlpha  [iLayer] [iObj]; 
			if(pchMVFileName [iLayer] [iObj]!=NULL) 
				delete [] pchMVFileName [iLayer] [iObj]; 
 
		} 
		delete [] rgppiIntraQuantizerMatrix [iLayer]; 
		delete [] rgppiInterQuantizerMatrix [iLayer]; 
		delete [] rgppiIntraQuantizerMatrixAlpha [iLayer]; 
		delete [] rgppiInterQuantizerMatrixAlpha [iLayer]; 
		delete [] pchMVFileName [iLayer]; 
 
		// for motion esti. 
		delete [] rgbOriginalME [iLayer]; 
		delete [] rgbAdvPredDisable [iLayer]; 
		delete [] rguiSearchRange [iLayer]; 
 
		// for interlace coding 
		delete [] rgbInterlacedCoding [iLayer]; 
		delete [] rgbTopFieldFirst [iLayer]; 
		delete [] rgiDirectModeRadius [iLayer]; 
		delete [] rgiMVFileUsage [iLayer]; 
		 
		delete [] rgdFrameFrequency [iLayer]; 
		delete [] rgbAlternateScan [iLayer]; 
 
 
		delete [] rgbComplexityEstimationDisable [iLayer]; 
		delete [] rgbOpaque [iLayer]; 
		delete [] rgbTransparent [iLayer]; 
		delete [] rgbIntraCAE [iLayer]; 
		delete [] rgbInterCAE [iLayer]; 
		delete [] rgbNoUpdate [iLayer]; 
		delete [] rgbUpsampling [iLayer]; 
		delete [] rgbIntraBlocks [iLayer]; 
		delete [] rgbInterBlocks [iLayer]; 
		delete [] rgbInter4vBlocks [iLayer]; 
		delete [] rgbNotCodedBlocks [iLayer]; 
		delete [] rgbDCTCoefs [iLayer]; 
		delete [] rgbDCTLines [iLayer]; 
		delete [] rgbVLCSymbols [iLayer]; 
		delete [] rgbVLCBits [iLayer]; 
		delete [] rgbAPM [iLayer]; 
		delete [] rgbNPM [iLayer]; 
		delete [] rgbInterpolateMCQ [iLayer]; 
		delete [] rgbForwBackMCQ [iLayer]; 
		delete [] rgbHalfpel2 [iLayer]; 
		delete [] rgbHalfpel4 [iLayer]; 
 
		delete [] rguiVolControlParameters [iLayer]; 
		delete [] rguiChromaFormat [iLayer]; 
		delete [] rguiLowDelay [iLayer]; 
		delete [] rguiVBVParams [iLayer]; 
		delete [] rguiBitRate [iLayer]; 
		delete [] rguiVbvBufferSize [iLayer]; 
		delete [] rguiVbvBufferOccupany [iLayer]; 
	} 
 
	delete [] rgbScalability; 
    delete [] rgbSpatialScalability; 
	delete [] rgiTemporalScalabilityType; 
	delete [] rgiEnhancementType; 
 
	// for mask coding, should fill in later on 
	delete [] rgfAlphaUsage; // alpha usage for each VO.  0: binary, 1: 8-bit 
	delete [] rgbShapeOnly; 
	delete [] rgiBinaryAlphaTH; 
	delete [] rgiBinaryAlphaRR;	//	Added for error resilient mode by Toshiba(1997-11-14) 
	delete [] rgbNoCrChange; 
 
	delete [] rgbDeblockFilterDisable;	 
	delete [] rgfChrType; 
	delete [] rgiNumBbetweenPVOP;			// no of B-VOPs between P-VOPs 
	delete [] rgiNumPbetweenIVOP;			// no of P-VOPs between I-VOPs 
//added to encode GOV header by SONY 980212 
	delete [] rgiGOVperiod; 
//980212 
	delete [] rgiTSRate; 
	delete [] rgiEnhcTSRate; // added by Norio Ito 
	delete [] rgbAllowSkippedPMBs; 
 
	// rounding control 
	delete [] rgbRoundingControlDisable; 
	delete [] rgiInitialRoundingType; 
 
	// sprite 
	delete [] rguiSpriteUsage; 
	delete [] rguiWarpingAccuracy; 
	delete [] rgiNumPnts; 
	delete [] rgbDumpMB; 
	delete [] rgbTrace; 
	delete [] rgSpriteMode; 
 
	delete pchPrefix; 
	delete pchBmpDir; 
	delete pchOutBmpDir; 
	delete pchOutStrFile; 
	delete pchSptDir; 
	delete pchSptPntDir; 
 
	return 0; 
} 
 
 
Void nextValidLine (FILE *pfPara, UInt* pnLine)	{ 
 
	Int chBoL = 0; 
	Char pchPlaceHolder[200]; 
	fgets (pchPlaceHolder, 200, pfPara); // get the next line  
	(*pnLine)++; 
	while (feof (pfPara) == 0 && (chBoL = fgetc(pfPara)) == '%') { 
		// skip a line 
		fgets (pchPlaceHolder, 200, pfPara); // get the next line  
		(*pnLine)++; 
	} 
	ungetc (chBoL, pfPara);				 
 
} 
 
///// WAVELET VTC: end /////////////////////////////// 
 
Void readBoolVOLFlag (Bool * rgbTable [2], UInt nVO, FILE * pfCfg, UInt * pnLine, Bool bAnyScalability) 
{ 
	nextValidLine (pfCfg, pnLine); 
	for (UInt i = 0; i < nVO; ++i) { 
		if (fscanf (pfCfg, "%d", & rgbTable [BASE_LAYER] [i]) != 1) { 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
		my_assert (rgbTable [BASE_LAYER] [i] == 0 || rgbTable [BASE_LAYER] [i] == 1); 
	} 
	if (bAnyScalability) { 
		for (UInt i = 0; i < nVO; ++i)	{ 
			if (fscanf (pfCfg, "%d", & rgbTable [ENHN_LAYER] [i]) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
			my_assert (rgbTable [ENHN_LAYER] [i] == 0 || rgbTable [ENHN_LAYER] [i] == 1); 
		} 
	} 
} 
 
Void readItem(UInt *rguiTable [2], UInt nVO, FILE * pfCfg, UInt * pnLine, Bool bAnyScalability) 
{ 
	nextValidLine (pfCfg, pnLine); 
	for (UInt i = 0; i < nVO; ++i) { 
		if (fscanf (pfCfg, "%d", & rguiTable [BASE_LAYER] [i]) != 1) { 
			fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
			fatal_error("Conversion aborted"); 
		} 
	} 
	if (bAnyScalability)  
	{ 
		for (UInt i = 0; i < nVO; ++i)	{ 
			if (fscanf (pfCfg, "%d", & rguiTable [ENHN_LAYER] [i]) != 1)	{ 
				fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine); 
				fatal_error("Conversion aborted"); 
			} 
		} 
	} 
} 
 
Void fatal_error(char *pchError, Bool bFlag) 
{ 
	if(bFlag) 
		return; 
 
	fprintf(stderr, "Error: %s\n", pchError); 
	exit(1); 
}