convertpar.cpp
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:83k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*************************************************************************
  2. This software module was originally developed by 
  3. Simon Winder (swinder@microsoft.com), Microsoft Corporation
  4. in the course of development of the MPEG-4 Video (ISO/IEC 14496-2). 
  5. This software module is an implementation of a part of one or more MPEG-4 Video tools 
  6. as specified by the MPEG-4 Video. 
  7. ISO/IEC gives users of the MPEG-4 Video free license to this software module or modifications 
  8. thereof for use in hardware or software products claiming conformance to the MPEG-4 Video. 
  9. Those intending to use this software module in hardware or software products are advised that its use may infringe existing patents. 
  10. The original developer of this software module and his/her company, 
  11. the subsequent editors and their companies, 
  12. and ISO/IEC have no liability for use of this software module or modifications thereof in an implementation. 
  13. Copyright is not released for non MPEG-4 Video conforming products. 
  14. Sharp retains full right to use the code for his/her own purpose, 
  15. assign or donate the code to a third party and to inhibit third parties from using the code for non <MPEG standard> conforming products. 
  16. This copyright notice must be included in all copies or derivative works. 
  17. Copyright (c) 1997.
  18. *************************************************************************/
  19. #include <stdio.h>
  20. #include <stdlib.h>
  21. #include <string.h>
  22. typedef unsigned int UInt;
  23. typedef int Int;
  24. typedef void Void;
  25. typedef int Bool;
  26. typedef double Double;
  27. typedef enum {Q_H263, Q_MPEG} Quantizer; 
  28. typedef enum AlphaUsage {RECTANGLE, ONE_BIT, EIGHT_BIT} AlphaUsage;
  29. typedef enum ChromType {FOUR_FOUR_FOUR, FOUR_TWO_TWO, FOUR_TWO_ZERO} ChromType;
  30. typedef enum {BASIC_SPRITE, LOW_LATENCY, PIECE_OBJECT, PIECE_UPDATE} SptMode;
  31. typedef char Char;
  32. Void nextValidLine (FILE *pfPara, UInt* pnLine);
  33. Void readBoolVOLFlag (Bool * rgbTable [2], UInt nVO, FILE * pfCfg, UInt * pnLine, Bool bAnyScalability);
  34. Void readItem(UInt *rguiTable [2], UInt nVO, FILE * pfCfg, UInt * pnLine, Bool bAnyScalability);
  35. #define BASE_LAYER 0
  36. #define ENHN_LAYER 1
  37. #define NO_SCALABILITY  0
  38. #define TEMPORAL_SCALABILITY 1
  39. #define SPATIAL_SCALABILITY  2
  40. #define FALSE 0
  41. #define TRUE 1
  42. #define BLOCK_SQUARE_SIZE    64
  43. #define RC_MPEG4 1
  44. #define RC_TM5 3
  45. Void fatal_error(char *pchError, Bool bFlag = FALSE);
  46. void my_assert(int iFlag)
  47. {
  48. if(!iFlag)
  49. fatal_error("Some assert failed! Check original par file format.n");
  50. }
  51. int main (Int argc, Char* argv[])
  52. {
  53. UInt nLine = 1;
  54. UInt* pnLine = &nLine;
  55. FILE *pfPara;
  56. FILE *pfOut = stdout;
  57. if (argc != 2 && argc !=3)
  58. {
  59. fprintf (stderr,"Usage: %s old_par_file [new_par_file]n", argv[0]);
  60. fatal_error("Conversion aborted");
  61. }
  62. if ((pfPara = fopen (argv[1], "r")) == NULL )
  63. {
  64. fprintf (stderr,"Source parameter file not foundn");
  65. fatal_error("Conversion aborted");
  66. }
  67. if(argc==3)
  68. {
  69. if ((pfOut = fopen (argv[2], "w")) == NULL )
  70. {
  71. fprintf (stderr,"Could not open %s for writing.n", argv[2]);
  72. fatal_error("Conversion aborted");
  73. }
  74. }
  75. // all the parameters to the encoder
  76. Int iVersion;
  77. Int iVTCFlag;
  78. UInt uiFrmWidth, uiFrmHeight;
  79. UInt firstFrm, lastFrm;
  80. Bool bNot8Bit;
  81. UInt uiQuantPrecision;
  82. UInt nBits;
  83. UInt firstVO, lastVO;
  84. UInt nVO;
  85. UInt uiFrmWidth_SS,uiFrmHeight_SS;
  86. UInt uiHor_sampling_m,uiHor_sampling_n;
  87. UInt uiVer_sampling_m,uiVer_sampling_n;
  88. Bool bAnyScalability;
  89. Int iSpatialOption;
  90. char *pchPrefix;
  91. char *pchBmpDir;
  92. char *pchOutBmpDir;
  93. char *pchOutStrFile;
  94. char *pchSptDir;
  95. char *pchSptPntDir;
  96. Int *rgiTemporalScalabilityType;
  97. Bool *rgbSpatialScalability;
  98. Bool *rgbScalability;
  99. Int *rgiEnhancementType;
  100. AlphaUsage *rgfAlphaUsage;
  101. Bool *rgbShapeOnly;
  102. Int *rgiBinaryAlphaTH;
  103. Int *rgbNoCrChange;
  104. Int *rgiBinaryAlphaRR;
  105. Bool *rgbRoundingControlDisable;
  106. Int *rgiInitialRoundingType;
  107. Int *rgiNumPbetweenIVOP;
  108. Int *rgiNumBbetweenPVOP;
  109. Int *rgiGOVperiod;
  110. Bool *rgbDeblockFilterDisable;
  111. Int *rgiTSRate;
  112. Int *rgiEnhcTSRate;
  113. ChromType *rgfChrType;
  114. Bool *rgbAllowSkippedPMBs;
  115. SptMode *rgSpriteMode;
  116. Bool *rgbDumpMB;
  117. Bool *rgbTrace;
  118. UInt *rguiSpriteUsage; 
  119. UInt *rguiWarpingAccuracy; 
  120. Int *rgiNumPnts;
  121. UInt *rguiRateControl [2];
  122. UInt *rguiBitsBudget [2];
  123. Bool *rgbAdvPredDisable [2];
  124. Bool *rgbErrorResilientDisable [2];
  125. Bool *rgbDataPartitioning [2];
  126. Bool *rgbReversibleVlc [2];
  127. Int *rgiVPBitTh [2];
  128. Bool *rgbInterlacedCoding [2];
  129. Quantizer* rgfQuant [2];
  130. Bool *rgbLoadIntraMatrix [2];
  131. Int **rgppiIntraQuantizerMatrix [2];
  132. Bool *rgbLoadInterMatrix [2];
  133. Int **rgppiInterQuantizerMatrix [2];
  134. Bool *rgiIntraDCSwitchingThr [2];
  135. Int *rgiIStep [2];
  136. Int *rgiPStep [2];
  137. Int *rgiStepBCode [2];
  138. Bool *rgbLoadIntraMatrixAlpha [2];
  139. Int **rgppiIntraQuantizerMatrixAlpha [2];
  140. Bool *rgbLoadInterMatrixAlpha [2];
  141. Int **rgppiInterQuantizerMatrixAlpha [2];
  142. Int *rgiIStepAlpha [2];
  143. Int *rgiPStepAlpha [2];
  144. Int *rgiBStepAlpha [2];
  145. Bool *rgbNoGrayQuantUpdate [2];
  146. UInt *rguiSearchRange [2];
  147. Bool *rgbOriginalME [2];
  148. Bool *rgbComplexityEstimationDisable [2];
  149. Bool *rgbOpaque [2];
  150. Bool *rgbTransparent [2];
  151. Bool *rgbIntraCAE [2];
  152. Bool *rgbInterCAE [2];
  153. Bool *rgbNoUpdate [2];
  154. Bool *rgbUpsampling [2];
  155. Bool *rgbIntraBlocks [2];
  156. Bool *rgbInterBlocks [2];
  157. Bool *rgbInter4vBlocks [2];
  158. Bool *rgbNotCodedBlocks [2];
  159. Bool *rgbDCTCoefs [2];
  160. Bool *rgbDCTLines [2];
  161. Bool *rgbVLCSymbols [2];
  162. Bool *rgbVLCBits [2];
  163. Bool *rgbAPM [2];
  164. Bool *rgbNPM [2];
  165. Bool *rgbInterpolateMCQ [2];
  166. Bool *rgbForwBackMCQ [2];
  167. Bool *rgbHalfpel2 [2];
  168. Bool *rgbHalfpel4 [2];
  169. UInt *rguiVolControlParameters[2];
  170. UInt *rguiChromaFormat[2];
  171. UInt *rguiLowDelay[2];
  172. UInt *rguiVBVParams[2];
  173. UInt *rguiBitRate[2];
  174. UInt *rguiVbvBufferSize[2];
  175. UInt *rguiVbvBufferOccupany[2];
  176. Double *rgdFrameFrequency[2];
  177. Bool *rgbTopFieldFirst [2];
  178. Bool *rgbAlternateScan [2];
  179. Int *rgiDirectModeRadius [2];
  180. Int *rgiMVFileUsage[2];
  181. char **pchMVFileName[2];
  182. UInt iObj;
  183. // verify version number
  184. nextValidLine (pfPara, pnLine);
  185. if ( fscanf (pfPara, "%u", &iVersion) != 1 ) {
  186. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  187. fatal_error("Conversion aborted");
  188. }
  189. if (iVersion != 813 && iVersion != 812 && iVersion != 814 && iVersion != 815) {
  190. // version 812 does not have rounding control flags
  191. // version 813 does not have VOL control parameters
  192. // version 814 does not have skipped mb enable
  193. fprintf(stderr, "unknown parameter file versionn");
  194. fatal_error("Conversion aborted");
  195. }
  196. /*************/
  197. fprintf(pfOut,"!!!MS!!!nn// This is the new parameter file format.  The parameters in this file can ben// specified in any order.n");
  198. fprintf(pfOut,"nVersion = 901nn");
  199. /*************/
  200. ///// WAVELET VTC: begin ///////////////////////////////
  201. // sarnoff: wavelet visual texture coding 
  202. nextValidLine (pfPara, pnLine);
  203. if ( fscanf (pfPara, "%d", &iVTCFlag) != 1) {
  204. fprintf(stderr, "wrong parameter VTC flag on line %dn", *pnLine);
  205. fatal_error("Conversion aborted");
  206. }
  207. fatal_error("iVTCFlag must be 0 or 1", iVTCFlag==0 || iVTCFlag==1);
  208. // read VTC control file
  209. char VTCCtlFile[80];
  210. nextValidLine (pfPara, pnLine);
  211. if ( fscanf (pfPara, "%s", VTCCtlFile) != 1) {
  212. fprintf(stderr, "wrong parameter VTC flag on line %dn", *pnLine);
  213. fatal_error("Conversion aborted");
  214. }
  215. /*************/
  216. fprintf(pfOut, "VTC.Enable = %dnVTC.Filename = "%s"n", iVTCFlag, VTCCtlFile);
  217. /*************/
  218. if (iVTCFlag==1) {
  219. fclose(pfPara);
  220. if(argc==3)
  221. fclose(pfOut);
  222. return 0;
  223. }
  224. ///// WAVELET VTC: end ///////////////////////////////
  225. // frame size code
  226. nextValidLine (pfPara, pnLine);
  227. if (fscanf (pfPara, "%u", &uiFrmWidth) != 1) {
  228. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  229. fatal_error("Conversion aborted");
  230. }
  231. nextValidLine (pfPara, pnLine);
  232. if (fscanf (pfPara, "%u", &uiFrmHeight) != 1) {
  233. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  234. fatal_error("Conversion aborted");
  235. }
  236. // first and last frame number
  237. nextValidLine (pfPara, pnLine);
  238. if ( fscanf (pfPara, "%u", &firstFrm) != 1) {
  239. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  240. fatal_error("Conversion aborted");
  241. }
  242. nextValidLine (pfPara, pnLine);
  243. if ( fscanf (pfPara, "%u", &lastFrm) != 1) {
  244. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  245. fatal_error("Conversion aborted");
  246. }
  247. my_assert (lastFrm >= firstFrm);
  248. /*************/
  249. fprintf(pfOut, "nSource.Width = %dnSource.Height = %dnSource.FirstFrame = %dnSource.LastFrame = %dn",
  250. uiFrmWidth, uiFrmHeight, firstFrm, lastFrm);
  251. /*************/
  252. // NBIT: not 8-bit flag
  253. nextValidLine (pfPara, pnLine);
  254. if ( fscanf (pfPara, "%d", &bNot8Bit) != 1) {
  255. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  256. fatal_error("Conversion aborted");
  257. }
  258. my_assert (bNot8Bit==0 || bNot8Bit==1);
  259. // NBIT: quant precision
  260. nextValidLine (pfPara, pnLine);
  261. if ( fscanf (pfPara, "%d", &uiQuantPrecision) != 1) {
  262. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  263. fatal_error("Conversion aborted");
  264. }
  265. if (bNot8Bit==0) {
  266. uiQuantPrecision = 5;
  267. }
  268. // NBIT: number of bits per pixel
  269. nextValidLine (pfPara, pnLine);
  270. if ( fscanf (pfPara, "%d", &nBits) != 1) {
  271. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  272. fatal_error("Conversion aborted");
  273. }
  274. my_assert (nBits>=4 && nBits<=12);
  275. if (bNot8Bit==0) {
  276. nBits = 8;
  277. }
  278. /*************/
  279. fprintf(pfOut, "Source.BitsPerPel = %dnNot8Bit.QuantPrecision = %dnNot8Bit.Enable = %dn",
  280. nBits, uiQuantPrecision, bNot8Bit);
  281. /*************/
  282. // object indexes
  283. nextValidLine (pfPara, pnLine);
  284. if ( fscanf (pfPara, "%u", &firstVO) != 1) {
  285. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  286. fatal_error("Conversion aborted");
  287. }
  288. nextValidLine (pfPara, pnLine);
  289. if ( fscanf (pfPara, "%u", &lastVO) != 1) {
  290. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  291. fatal_error("Conversion aborted");
  292. }
  293. my_assert (lastVO >= firstVO);
  294. nVO = lastVO - firstVO + 1;
  295. /*************/
  296. fprintf(pfOut, "Source.ObjectIndex.First = %dnSource.ObjectIndex.Last = %dn",
  297. firstVO, lastVO);
  298. /*************/
  299. // allocate per-vo parameters
  300. rgiTemporalScalabilityType = new Int [nVO];
  301. rgbSpatialScalability = new Bool [nVO];
  302. rgbScalability = new Bool [nVO];
  303. rgiEnhancementType = new Int [nVO];
  304. rgfAlphaUsage = new AlphaUsage [nVO];
  305. rgbShapeOnly = new Bool [nVO];
  306. rgiBinaryAlphaTH = new Int [nVO];
  307. rgbNoCrChange = new Bool [nVO];
  308. rgiBinaryAlphaRR = new Int [nVO];
  309. rgbRoundingControlDisable = new Bool [nVO];
  310. rgiInitialRoundingType = new Int [nVO];
  311. rgiNumPbetweenIVOP = new Int [nVO];
  312. rgiNumBbetweenPVOP = new Int [nVO];
  313. rgiGOVperiod = new Int [nVO];
  314. rgbDeblockFilterDisable = new Bool [nVO];
  315. rgiTSRate = new Int [nVO];
  316. rgiEnhcTSRate = new Int [nVO];
  317. rgfChrType = new ChromType [nVO];
  318. rgbAllowSkippedPMBs = new Bool [nVO];
  319. rgSpriteMode = new SptMode [nVO];
  320. rgbDumpMB = new Bool [nVO];
  321. rgbTrace = new Bool [nVO];
  322. rguiSpriteUsage = new UInt [nVO]; 
  323. rguiWarpingAccuracy = new UInt [nVO]; 
  324. rgiNumPnts = new Int [nVO]; 
  325. Int iL;
  326. for(iL = BASE_LAYER; iL<=ENHN_LAYER; iL++)
  327. {
  328. // allocate per-layer parameters
  329. rguiRateControl [iL] = new UInt [nVO];
  330. rguiBitsBudget [iL] = new UInt [nVO];
  331. rgbAdvPredDisable [iL] = new Bool [nVO];
  332. rgbErrorResilientDisable [iL] = new Bool [nVO];
  333. rgbDataPartitioning [iL] = new Bool [nVO];
  334. rgbReversibleVlc [iL] = new Bool [nVO];
  335. rgiVPBitTh [iL] = new Int [nVO];
  336. rgbInterlacedCoding [iL] = new Bool [nVO];
  337. rgfQuant [iL] = new Quantizer [nVO]; 
  338. rgbLoadIntraMatrix [iL] = new Bool [nVO];
  339. rgppiIntraQuantizerMatrix [iL] = new Int * [nVO];
  340. rgbLoadInterMatrix [iL] = new Bool [nVO];
  341. rgppiInterQuantizerMatrix [iL] = new Int * [nVO];
  342. rgiIntraDCSwitchingThr [iL] = new Int [nVO]; 
  343. rgiIStep [iL] = new Int [nVO]; 
  344. rgiPStep [iL] = new Int [nVO]; 
  345. rgiStepBCode [iL] = new Int [nVO]; 
  346. rgbLoadIntraMatrixAlpha [iL] = new Bool [nVO]; 
  347. rgppiIntraQuantizerMatrixAlpha [iL] = new Int * [nVO];
  348. rgbLoadInterMatrixAlpha [iL] = new Bool [nVO]; 
  349. rgppiInterQuantizerMatrixAlpha [iL] = new Int * [nVO];
  350. rgiIStepAlpha [iL] = new Int [nVO]; 
  351. rgiPStepAlpha [iL] = new Int [nVO]; 
  352. rgiBStepAlpha [iL] = new Int [nVO]; 
  353. rgbNoGrayQuantUpdate [iL] = new Bool [nVO];
  354. rguiSearchRange [iL] = new UInt [nVO];
  355. rgbOriginalME [iL] = new Bool [nVO];
  356. rgbComplexityEstimationDisable [iL] = new Bool [nVO];
  357. rgbOpaque [iL] = new Bool [nVO];
  358. rgbTransparent [iL] = new Bool [nVO];
  359. rgbIntraCAE [iL] = new Bool [nVO];
  360. rgbInterCAE [iL] = new Bool [nVO];
  361. rgbNoUpdate [iL] = new Bool [nVO];
  362. rgbUpsampling [iL] = new Bool [nVO];
  363. rgbIntraBlocks [iL] = new Bool [nVO];
  364. rgbInterBlocks [iL] = new Bool [nVO];
  365. rgbInter4vBlocks [iL] = new Bool [nVO];
  366. rgbNotCodedBlocks [iL] = new Bool [nVO];
  367. rgbDCTCoefs [iL] = new Bool [nVO];
  368. rgbDCTLines [iL] = new Bool [nVO];
  369. rgbVLCSymbols [iL] = new Bool [nVO];
  370. rgbVLCBits [iL] = new Bool [nVO];
  371. rgbAPM [iL] = new Bool [nVO];
  372. rgbNPM [iL] = new Bool [nVO];
  373. rgbInterpolateMCQ [iL] = new Bool [nVO];
  374. rgbForwBackMCQ [iL] = new Bool [nVO];
  375. rgbHalfpel2 [iL] = new Bool [nVO];
  376. rgbHalfpel4 [iL] = new Bool [nVO];
  377. rguiVolControlParameters [iL] = new UInt [nVO];
  378. rguiChromaFormat [iL] = new UInt [nVO];
  379. rguiLowDelay [iL] = new UInt [nVO];
  380. rguiVBVParams [iL] = new UInt [nVO];
  381. rguiBitRate [iL] = new UInt [nVO];
  382. rguiVbvBufferSize [iL] = new UInt [nVO];
  383. rguiVbvBufferOccupany [iL] = new UInt [nVO];
  384. rgdFrameFrequency [iL] = new Double [nVO];
  385. rgbTopFieldFirst [iL] = new Bool [nVO]; 
  386. rgbAlternateScan [iL] = new Bool [nVO]; 
  387. rgiDirectModeRadius [iL] = new Bool [nVO]; 
  388. rgiMVFileUsage[iL] = new Int [nVO];
  389. pchMVFileName[iL] = new char * [nVO];
  390. }
  391. for (iObj = 0; iObj < nVO; iObj++)
  392. {
  393. // per object alloc
  394. rgppiIntraQuantizerMatrix [BASE_LAYER] [iObj] = new Int [BLOCK_SQUARE_SIZE];
  395. rgppiIntraQuantizerMatrix [ENHN_LAYER] [iObj] = new Int [BLOCK_SQUARE_SIZE];
  396. rgppiInterQuantizerMatrix [BASE_LAYER] [iObj] = new Int [BLOCK_SQUARE_SIZE];
  397. rgppiInterQuantizerMatrix [ENHN_LAYER] [iObj] = new Int [BLOCK_SQUARE_SIZE];
  398. rgppiIntraQuantizerMatrixAlpha [BASE_LAYER] [iObj] = new Int [BLOCK_SQUARE_SIZE];
  399. rgppiIntraQuantizerMatrixAlpha [ENHN_LAYER] [iObj] = new Int [BLOCK_SQUARE_SIZE];
  400. rgppiInterQuantizerMatrixAlpha [BASE_LAYER] [iObj] = new Int [BLOCK_SQUARE_SIZE];
  401. rgppiInterQuantizerMatrixAlpha [ENHN_LAYER] [iObj] = new Int [BLOCK_SQUARE_SIZE];
  402. }
  403. //scalability indicators: 1 = temporal, 2 = spatial scalability
  404. nextValidLine (pfPara, pnLine);
  405. bAnyScalability = FALSE;
  406. for (iObj = 0; iObj < nVO; iObj++) {
  407. if (fscanf (pfPara, "%d", &rgbScalability [iObj]) != 1) {
  408. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  409. fatal_error("Conversion aborted");
  410. }
  411. if (rgbScalability[iObj] == TEMPORAL_SCALABILITY || 
  412. rgbScalability[iObj] == SPATIAL_SCALABILITY)
  413. bAnyScalability = TRUE;
  414. else
  415. my_assert (rgbScalability[iObj] == NO_SCALABILITY);
  416. if(rgbScalability[iObj] == SPATIAL_SCALABILITY || rgbScalability[iObj] == TEMPORAL_SCALABILITY) // modifiedy by Sharp(98/2/12)
  417. rgbSpatialScalability[iObj] = TRUE; 
  418. else 
  419. rgbSpatialScalability[iObj] = FALSE;
  420. /*************/
  421. fprintf(pfOut, "Scalability [%d] = "%s"n", iObj,
  422. rgbScalability[iObj] == TEMPORAL_SCALABILITY ? "Temporal" : (rgbScalability[iObj] == SPATIAL_SCALABILITY ? "Spatial" : "None"));
  423. /*************/
  424. }
  425. //coded added by Sony, only deals with ONE VO.
  426. //Type option of Spatial Scalable Coding
  427. //This parameter is used for dicision VOP prediction types of Enhancement layer in Spatial Scalable Coding
  428. //If this option is set to 0, Enhancement layer is coded as "PPPPPP......",
  429. //else if set to 1 ,It's coded as "PBBBB......."
  430. nextValidLine(pfPara,pnLine);
  431. my_assert (nVO == 1);
  432. fscanf(pfPara,"%d",&iSpatialOption);
  433. if(rgbScalability[0] == SPATIAL_SCALABILITY)
  434. if (iSpatialOption == 1)
  435. fprintf(stdout,"Enhancement layer is coded as "PPPPP....."n");
  436. else if (iSpatialOption == 0)
  437. fprintf(stdout,"Enhancement layer is coded as "PBBBB....."n");
  438. else {
  439. fprintf(stderr,"The parameter "SpatialOption" is not set correctlyn");
  440. fatal_error("Conversion aborted");
  441. }
  442. /*************/
  443. fprintf(pfOut, "Scalability.Spatial.PredictionType [0] = "%s"n", iSpatialOption==0 ? "PBB" : "PPP");
  444. /*************/
  445. //Load enhancement layer (Spatial Scalable) size
  446. nextValidLine(pfPara,pnLine);
  447. fscanf(pfPara,"%d",&uiFrmWidth_SS);
  448. fscanf(pfPara,"%d",&uiFrmHeight_SS);
  449. //load upsampling factor 
  450. nextValidLine(pfPara,pnLine);
  451. fscanf(pfPara,"%d",&uiHor_sampling_n);
  452. fscanf(pfPara,"%d",&uiHor_sampling_m);
  453. nextValidLine(pfPara,pnLine);
  454. fscanf(pfPara,"%d",&uiVer_sampling_n);
  455. fscanf(pfPara,"%d",&uiVer_sampling_m);
  456. /*************/
  457. fprintf(pfOut, "Scalability.Spatial.Width [0] = %dn", uiFrmWidth_SS);
  458. fprintf(pfOut, "Scalability.Spatial.Height [0] = %dn", uiFrmHeight_SS);
  459. fprintf(pfOut, "Scalability.Spatial.HorizFactor.N [0] = %dn", uiHor_sampling_n);
  460. fprintf(pfOut, "Scalability.Spatial.HorizFactor.M [0] = %dn", uiHor_sampling_m);
  461. fprintf(pfOut, "Scalability.Spatial.VertFactor.N [0] = %dn", uiVer_sampling_n);
  462. fprintf(pfOut, "Scalability.Spatial.VertFactor.M [0] = %dn", uiVer_sampling_m);
  463. /*************/
  464. // form of temporal scalability indicators
  465. // case 0  Enhn    P   P   ....
  466. //         Base  I   P   P ....
  467. // case 1  Enhn    B B   B B   ....
  468. //         Base  I     P     P ....
  469. // case 2  Enhn    P   B   B   ....
  470. //         Base  I   B   P   B ....
  471. nextValidLine (pfPara, pnLine);
  472. for (iObj = 0; iObj < nVO; iObj++) {
  473. if (fscanf (pfPara, "%d", &rgiTemporalScalabilityType [iObj]) != 1) {
  474. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  475. fatal_error("Conversion aborted");
  476. }
  477. my_assert (rgiTemporalScalabilityType [iObj] == 0 || 
  478. rgiTemporalScalabilityType [iObj] == 1 || 
  479. rgiTemporalScalabilityType [iObj] == 2 ||
  480. rgiTemporalScalabilityType [iObj] == 3 ||
  481. rgiTemporalScalabilityType [iObj] == 4);
  482. /*************/
  483. fprintf(pfOut, "Scalability.Temporal.PredictionType [%d] = %dn", iObj, rgiTemporalScalabilityType [iObj]);
  484. /*************/
  485. }
  486. // enhancement_type for scalability
  487. nextValidLine (pfPara, pnLine);
  488. for (iObj = 0; iObj < nVO; iObj++) {
  489. if (fscanf (pfPara, "%d", &rgiEnhancementType [iObj]) != 1) {
  490. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  491. fatal_error("Conversion aborted");
  492. }
  493. my_assert (rgiEnhancementType [iObj] == 0 || //  entire region of the base layer is enhanced
  494. // begin: modified by Sharp (98/3/24)
  495. rgiEnhancementType [iObj] == 1 ||  // partial region of the base layer is enhanced (with background composition)
  496. rgiEnhancementType [iObj] == 2);  // partial region of the base layer is enhanced (without background composition)
  497. // end: modified by Sharp (98/3/24)
  498. /*************/
  499. fprintf(pfOut, "Scalability.Temporal.EnhancementType [%d] = "%s"n", iObj,
  500. rgiEnhancementType [iObj] == 0 ? "Full" : (rgiEnhancementType [iObj] == 1 ? "PartC" : "PartNC"));
  501. /*************/
  502. }
  503. // rate control flag
  504. nextValidLine (pfPara, pnLine);
  505. for (iObj = 0; iObj < nVO; iObj++) {
  506. if (fscanf (pfPara, "%u", &rguiRateControl [BASE_LAYER] [iObj] ) != 1) {
  507. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  508. fatal_error("Conversion aborted");
  509. }
  510. my_assert (rguiRateControl [BASE_LAYER] [iObj]  == RC_MPEG4 || 
  511. rguiRateControl [BASE_LAYER] [iObj]  == RC_TM5 ||
  512. rguiRateControl [BASE_LAYER] [iObj]  == 0);
  513. /*************/
  514. fprintf(pfOut, "RateControl.Type [%d] = "%s"n", iObj,
  515. rguiRateControl [BASE_LAYER] [iObj] == 0 ? "None" : (rguiRateControl [BASE_LAYER] [iObj] == RC_MPEG4 ? "MP4" : "TM5"));
  516. /*************/
  517. }
  518. if (bAnyScalability) {
  519. for (iObj = 0; iObj < nVO; iObj++) {
  520. if (fscanf (pfPara, "%u", &rguiRateControl [ENHN_LAYER] [iObj]) != 1) {
  521. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  522. fatal_error("Conversion aborted");
  523. }
  524. my_assert (rguiRateControl [ENHN_LAYER] [iObj]  == 0 || 
  525. rguiRateControl [ENHN_LAYER] [iObj]  == RC_MPEG4 ||
  526. rguiRateControl [ENHN_LAYER] [iObj]  == RC_TM5);
  527. /*************/
  528. fprintf(pfOut, "RateControl.Type [%d] = "%s"n", iObj + nVO,
  529. rguiRateControl [ENHN_LAYER] [iObj] == 0 ? "None" : (rguiRateControl [ENHN_LAYER] [iObj] == RC_MPEG4 ? "MP4" : "TM5"));
  530. /*************/
  531. }
  532. }
  533. // bit budget for each object.
  534. nextValidLine (pfPara, pnLine);
  535. for (iObj = 0; iObj < nVO; iObj++) {
  536. if (fscanf (pfPara, "%d", &rguiBitsBudget [BASE_LAYER] [iObj]) != 1) {
  537. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  538. fatal_error("Conversion aborted");
  539. }
  540. /*************/
  541. fprintf(pfOut, "RateControl.BitsPerVOP [%d] = %dn", iObj, rguiBitsBudget [BASE_LAYER] [iObj]);
  542. /*************/
  543. }
  544. if (bAnyScalability) {
  545. for (iObj = 0; iObj < nVO; iObj++) {
  546. if (fscanf (pfPara, "%d", &rguiBitsBudget [ENHN_LAYER] [iObj]) != 1) {
  547. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  548. fatal_error("Conversion aborted");
  549. }
  550. my_assert (rguiBitsBudget [ENHN_LAYER] [iObj]  > 0);
  551. /*************/
  552. fprintf(pfOut, "RateControl.BitsPerVOP [%d] = %dn", iObj + nVO, rguiBitsBudget [ENHN_LAYER] [iObj]);
  553. /*************/
  554. }
  555. }
  556. // alpha usage for each object.  0: rectangle, 1: binary, 2: 8-bit, 3: shape only
  557. nextValidLine (pfPara, pnLine);
  558. for (iObj = 0; iObj < nVO; iObj++) {
  559. UInt uiAlpha;
  560. if (fscanf (pfPara, "%d", &uiAlpha) != 1) {
  561. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  562. fatal_error("Conversion aborted");
  563. }
  564. else {
  565. my_assert (uiAlpha == 0 || uiAlpha == 1 || uiAlpha == 2 || uiAlpha == 3);
  566. if(uiAlpha<3)
  567. {
  568. rgfAlphaUsage [iObj] = (AlphaUsage) uiAlpha;
  569. rgbShapeOnly [iObj] = FALSE;
  570. }
  571. else
  572. {
  573. rgfAlphaUsage [iObj] = ONE_BIT;
  574. rgbShapeOnly [iObj] = TRUE;
  575. }
  576. }
  577. /*************/
  578. fprintf(pfOut, "Alpha.Type [%d] = "%s"n", iObj,
  579. uiAlpha==0 ? "None" : (uiAlpha==1 ? "Binary" : (uiAlpha==2 ? "Gray" : "ShapeOnly")));
  580. /*************/
  581. }
  582. // binary shape rounding para
  583. nextValidLine (pfPara, pnLine);
  584. for (iObj = 0; iObj < nVO; iObj++) {
  585. if (fscanf (pfPara, "%d", &rgiBinaryAlphaTH [iObj]) != 1) {
  586. fprintf (stderr, "wrong parameter file format on line %dn", *pnLine);
  587. fatal_error("Conversion aborted");
  588. }
  589. my_assert (rgiBinaryAlphaTH [iObj] >= 0);
  590. /*************/
  591. fprintf(pfOut, "Alpha.Binary.RoundingThreshold [%d] = %dn", iObj, rgiBinaryAlphaTH [iObj]);
  592. /*************/
  593. }
  594. // binary shape size conversion flag
  595. nextValidLine (pfPara, pnLine);
  596. for (iObj = 0; iObj < nVO; iObj++) {
  597. if (fscanf (pfPara, "%d", &rgbNoCrChange [iObj]) != 1) {
  598. fprintf (stderr, "wrong parameter file format on line %dn", *pnLine);
  599. fatal_error("Conversion aborted");
  600. }
  601. my_assert (rgbNoCrChange [iObj] == TRUE || rgbNoCrChange [iObj] == FALSE); //boolean value
  602. if (rgiBinaryAlphaTH [iObj] == 0)
  603. my_assert (rgbNoCrChange [iObj] == TRUE); //MB-level size conversion of shape is off in lossless moden");
  604. /*************/
  605. fprintf(pfOut, "Alpha.Binary.SizeConversion.Enable [%d] = %dn", iObj, !rgbNoCrChange [iObj]);
  606. /*************/
  607. }
  608. // Added for error resilient mode by Toshiba(1997-11-14)
  609. nextValidLine (pfPara, pnLine);
  610. for (iObj = 0; iObj < nVO; iObj++) {
  611. if (fscanf (pfPara, "%d", &rgiBinaryAlphaRR [iObj]) != 1) {
  612. fprintf (stderr, "wrong parameter file format on line %dn", *pnLine);
  613. fatal_error("Conversion aborted");
  614. }
  615. my_assert (rgiBinaryAlphaRR [iObj] >= 0);
  616. /*************/
  617. fprintf(pfOut, "ErrorResil.AlphaRefreshRate [%d] = %dn", iObj, rgiBinaryAlphaRR [iObj]);
  618. /*************/
  619. }
  620. // End Toshiba(1997-11-14)
  621. // rounding control disable
  622. if(iVersion > 812)
  623. nextValidLine (pfPara, pnLine);
  624. for (iObj = 0; iObj < nVO; iObj++) {
  625. if(iVersion > 812)
  626. {
  627. if (fscanf (pfPara, "%d", &rgbRoundingControlDisable [iObj]) != 1) {
  628. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  629. fatal_error("Conversion aborted");
  630. }
  631. }
  632. else
  633. rgbRoundingControlDisable [iObj] = 0;
  634. my_assert (rgbRoundingControlDisable [iObj]  == 0 || rgbRoundingControlDisable [iObj] == 1);
  635. /*************/
  636. fprintf(pfOut, "Motion.RoundingControl.Enable [%d] = %dn", iObj, !rgbRoundingControlDisable [iObj]);
  637. /*************/
  638. }
  639. if(iVersion > 812)
  640. nextValidLine (pfPara, pnLine);
  641. for (iObj = 0; iObj < nVO; iObj++) {
  642. if(iVersion > 812)
  643. {
  644. if (fscanf (pfPara, "%d", &rgiInitialRoundingType [iObj]) != 1) {
  645. fprintf (stderr, "wrong parameter file format on line %dn", *pnLine);
  646. fatal_error("Conversion aborted");
  647. }
  648. }
  649. else
  650. rgiInitialRoundingType [iObj] = 0;
  651. my_assert (rgiInitialRoundingType [iObj] == 0 || rgiInitialRoundingType [iObj] == 1);
  652. /*************/
  653. fprintf(pfOut, "Motion.RoundingControl.StartValue [%d] = %dn", iObj, rgiInitialRoundingType [iObj]);
  654. /*************/
  655. }
  656. // error resilient coding disable
  657. nextValidLine (pfPara, pnLine);
  658. Int iErrorResilientFlags;
  659. for (iObj = 0; iObj < nVO; iObj++) {
  660. if (fscanf (pfPara, "%d", &iErrorResilientFlags) != 1) {
  661. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  662. fatal_error("Conversion aborted");
  663. }
  664. rgbErrorResilientDisable [BASE_LAYER] [iObj] = iErrorResilientFlags & 0x1;
  665. // Modified for error resilient mode by Toshiba(1998-1-16)
  666. rgbDataPartitioning [BASE_LAYER] [iObj]  = (iErrorResilientFlags & 0x2) ? TRUE : FALSE;
  667. rgbReversibleVlc [BASE_LAYER] [iObj]  = (iErrorResilientFlags & 0x4) ? TRUE : FALSE;
  668. // End Toshiba(1998-1-16)
  669. if( rgbErrorResilientDisable [BASE_LAYER] [iObj])
  670. rgiBinaryAlphaRR [iObj] = -1;
  671. /*************/
  672. fprintf(pfOut, "ErrorResil.RVLC.Enable [%d] = %dn", iObj, rgbReversibleVlc [BASE_LAYER] [iObj]);
  673. fprintf(pfOut, "ErrorResil.DataPartition.Enable [%d] = %dn", iObj, rgbDataPartitioning [BASE_LAYER] [iObj]);
  674. fprintf(pfOut, "ErrorResil.VideoPacket.Enable [%d] = %dn", iObj, !rgbErrorResilientDisable [BASE_LAYER] [iObj]);
  675. /*************/
  676. }
  677. if (bAnyScalability) {
  678. for (iObj = 0; iObj < nVO; iObj++) {
  679. if (fscanf (pfPara, "%d", &rgbErrorResilientDisable [ENHN_LAYER] [iObj]) != 1) {
  680. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  681. fatal_error("Conversion aborted");
  682. }
  683. my_assert (rgbErrorResilientDisable [ENHN_LAYER] [iObj] == TRUE); //error resilient coding not supported as for now
  684. rgbErrorResilientDisable [ENHN_LAYER] [iObj] = TRUE;
  685. rgbDataPartitioning [ENHN_LAYER] [iObj] = FALSE;
  686. rgbReversibleVlc [ENHN_LAYER] [iObj] = FALSE;
  687. /*************/
  688. fprintf(pfOut, "ErrorResil.RVLC.Enable [%d] = %dn", iObj + nVO, rgbReversibleVlc [ENHN_LAYER] [iObj]);
  689. fprintf(pfOut, "ErrorResil.DataPartition.Enable [%d] = %dn", iObj + nVO, rgbDataPartitioning [ENHN_LAYER] [iObj]);
  690. fprintf(pfOut, "ErrorResil.VideoPacket.Enable [%d] = %dn", iObj + nVO, !rgbErrorResilientDisable [ENHN_LAYER] [iObj]);
  691. /*************/
  692. }
  693. }
  694. // Bit threshold for video packet spacing control
  695. nextValidLine (pfPara, pnLine);
  696. for (iObj = 0; iObj < nVO; iObj++) {
  697. if (fscanf (pfPara, "%d", &rgiVPBitTh [BASE_LAYER] [iObj]) != 1) {
  698. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  699. fatal_error("Conversion aborted");
  700. }
  701. if (rgbErrorResilientDisable [BASE_LAYER] [iObj])
  702. rgiVPBitTh [BASE_LAYER] [iObj] = -1; // set VPBitTh to negative value
  703. /*************/
  704. fprintf(pfOut, "ErrorResil.VideoPacket.Length [%d] = %dn", iObj, rgiVPBitTh [BASE_LAYER] [iObj]);
  705. /*************/
  706. }
  707. if (bAnyScalability) {
  708. for (iObj = 0; iObj < nVO; iObj++) {
  709. if (fscanf (pfPara, "%d", &rgiVPBitTh [ENHN_LAYER] [iObj]) != 1) {
  710. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  711. fatal_error("Conversion aborted");
  712. }
  713. rgiVPBitTh [ENHN_LAYER] [iObj] = -1;
  714. /*************/
  715. fprintf(pfOut, "ErrorResil.VideoPacket.Length [%d] = %dn", iObj + nVO, rgiVPBitTh [ENHN_LAYER] [iObj]);
  716. /*************/
  717. }
  718. }
  719. // Interlaced coding
  720. nextValidLine (pfPara, pnLine);
  721. for (iObj = 0; iObj < nVO; iObj++) {
  722. if (fscanf (pfPara, "%d", &rgbInterlacedCoding [BASE_LAYER] [iObj]) != 1) {
  723. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  724. fatal_error("Conversion aborted");
  725. }
  726. my_assert (rgbInterlacedCoding [BASE_LAYER] [iObj] == 0 || rgbInterlacedCoding [BASE_LAYER] [iObj] == 1);
  727. /*************/
  728. fprintf(pfOut, "Motion.Interlaced.Enable [%d] = %dn", iObj, rgbInterlacedCoding [BASE_LAYER] [iObj]);
  729. /*************/
  730. }
  731. if (bAnyScalability) {
  732. for (iObj = 0; iObj < nVO; iObj++) {
  733. if (fscanf (pfPara, "%d", &rgbInterlacedCoding [ENHN_LAYER] [iObj]) != 1) {
  734. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  735. fatal_error("Conversion aborted");
  736. }
  737. my_assert (rgbInterlacedCoding [ENHN_LAYER] [iObj] == 0 || rgbInterlacedCoding [ENHN_LAYER] [iObj] == 1);
  738. /*************/
  739. fprintf(pfOut, "Motion.Interlaced.Enable [%d] = %dn", iObj + nVO, rgbInterlacedCoding [ENHN_LAYER] [iObj]);
  740. /*************/
  741. }
  742. }
  743. // quantizer selection: 0 -- H.263, 1 -- MPEG
  744. nextValidLine (pfPara, pnLine);
  745. for (iObj = 0; iObj < nVO; iObj++) {
  746.   int read;
  747. if (fscanf (pfPara, "%d", &read) != 1) {
  748. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  749. fatal_error("Conversion aborted");
  750. }
  751. rgfQuant [BASE_LAYER] [iObj] = (Quantizer)read;
  752. my_assert (rgfQuant [BASE_LAYER] [iObj] ==0 || rgfQuant [BASE_LAYER] [iObj] == 1);
  753. /*************/
  754. fprintf(pfOut, "Quant.Type [%d] = "%s"n", iObj, rgfQuant [BASE_LAYER] [iObj]==0 ? "H263" : "MPEG");
  755. /*************/
  756. }
  757. if (bAnyScalability) {
  758. for (iObj = 0; iObj < nVO; iObj++) {
  759.   int read;
  760. if (fscanf (pfPara, "%d", &read) != 1) {
  761. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  762. fatal_error("Conversion aborted");
  763. }
  764. rgfQuant [ENHN_LAYER] [iObj] = (Quantizer)read;
  765. my_assert (rgfQuant [ENHN_LAYER] [iObj] ==0 || rgfQuant [ENHN_LAYER] [iObj] == 1);
  766. /*************/
  767. fprintf(pfOut, "Quant.Type [%d] = "%s"n", iObj + nVO, rgfQuant [ENHN_LAYER] [iObj]==0 ? "H263" : "MPEG");
  768. /*************/
  769. }
  770. }
  771. // load non-default intra Q-Matrix, 0 -- FALSE, 1 -- TRUE
  772. nextValidLine (pfPara, pnLine);
  773. for (iObj = 0; iObj < nVO; iObj++) {
  774. if (fscanf (pfPara, "%d", &rgbLoadIntraMatrix [BASE_LAYER] [iObj]) != 1) {
  775. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  776. fatal_error("Conversion aborted");
  777. }
  778. my_assert (rgbLoadIntraMatrix [BASE_LAYER] [iObj] ==0 || 
  779. rgbLoadIntraMatrix [BASE_LAYER] [iObj] == 1);
  780. /*************/
  781. fprintf(pfOut, "Texture.QuantMatrix.Intra.Enable [%d] = %dn", iObj, rgbLoadIntraMatrix [BASE_LAYER] [iObj]);
  782. /*************/
  783. if (rgbLoadIntraMatrix [BASE_LAYER] [iObj]) {
  784. /*************/
  785. fprintf(pfOut, "Texture.QuantMatrix.Intra [%d] = {", iObj);
  786. /*************/
  787. UInt i = 0;
  788. do {
  789. if(i>0)
  790. /*************/
  791. fprintf(pfOut, ", ");
  792. /*************/
  793. if (fscanf (pfPara, "%d", &rgppiIntraQuantizerMatrix [BASE_LAYER] [iObj] [i]) != 1) {
  794. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  795. fatal_error("Conversion aborted");
  796. }
  797. /*************/
  798. fprintf(pfOut, "%d", rgppiIntraQuantizerMatrix [BASE_LAYER] [iObj] [i]);
  799. /*************/
  800. } while (rgppiIntraQuantizerMatrix [BASE_LAYER] [iObj] [i] != 0 && ++i < BLOCK_SQUARE_SIZE);
  801. /*************/
  802. fprintf(pfOut, "}n");
  803. /*************/
  804. }
  805. }
  806. if (bAnyScalability) {
  807. for (iObj = 0; iObj < nVO; iObj++) {
  808. if (fscanf (pfPara, "%d", &rgbLoadIntraMatrix [ENHN_LAYER] [iObj]) != 1) {
  809. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  810. fatal_error("Conversion aborted");
  811. }
  812. my_assert (rgbLoadIntraMatrix [ENHN_LAYER] [iObj] ==0 || 
  813. rgbLoadIntraMatrix [ENHN_LAYER] [iObj] == 1);
  814. /*************/
  815. fprintf(pfOut, "Texture.QuantMatrix.Intra.Enable [%d] = %dn", iObj + nVO, rgbLoadIntraMatrix [ENHN_LAYER] [iObj]);
  816. /*************/
  817. if (rgbLoadIntraMatrix [ENHN_LAYER] [iObj]) {
  818. /*************/
  819. fprintf(pfOut, "Texture.QuantMatrix.Intra [%d] = {", iObj + nVO);
  820. /*************/
  821. UInt i = 0;
  822. do {
  823. if(i>0)
  824. /*************/
  825. fprintf(pfOut, ", ");
  826. /*************/
  827. if (fscanf (pfPara, "%d", &rgppiIntraQuantizerMatrix [ENHN_LAYER] [iObj] [i]) != 1) {
  828. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  829. fatal_error("Conversion aborted");
  830. }
  831. /*************/
  832. fprintf(pfOut, "%d", rgppiIntraQuantizerMatrix [ENHN_LAYER] [iObj] [i]);
  833. /*************/
  834. } while (rgppiIntraQuantizerMatrix [ENHN_LAYER] [iObj] [i] != 0 && ++i < BLOCK_SQUARE_SIZE);
  835. /*************/
  836. fprintf(pfOut, "}n");
  837. /*************/
  838. }
  839. }
  840. }
  841. // load non-default inter Q-Matrix, 0 -- FALSE, 1 -- TRUE
  842. nextValidLine (pfPara, pnLine);
  843. for (iObj = 0; iObj < nVO; iObj++) {
  844. if (fscanf (pfPara, "%d", &rgbLoadInterMatrix [BASE_LAYER] [iObj]) != 1) {
  845. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  846. fatal_error("Conversion aborted");
  847. }
  848. my_assert (rgbLoadInterMatrix [BASE_LAYER] [iObj] ==0 || 
  849. rgbLoadInterMatrix [BASE_LAYER] [iObj] == 1);
  850. /*************/
  851. fprintf(pfOut, "Texture.QuantMatrix.Inter.Enable [%d] = %dn", iObj, rgbLoadInterMatrix [BASE_LAYER] [iObj]);
  852. /*************/
  853. if (rgbLoadInterMatrix [BASE_LAYER] [iObj]) {
  854. /*************/
  855. fprintf(pfOut, "Texture.QuantMatrix.Inter [%d] = {", iObj);
  856. /*************/
  857. UInt i = 0;
  858. do {
  859. if(i>0)
  860. /*************/
  861. fprintf(pfOut, ", ");
  862. /*************/
  863. if (fscanf (pfPara, "%d", &rgppiInterQuantizerMatrix [BASE_LAYER] [iObj] [i]) != 1) {
  864. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  865. fatal_error("Conversion aborted");
  866. }
  867. /*************/
  868. fprintf(pfOut, "%d", rgppiInterQuantizerMatrix [BASE_LAYER] [iObj] [i]);
  869. /*************/
  870. } while (rgppiInterQuantizerMatrix [BASE_LAYER] [iObj] [i] != 0 && ++i < BLOCK_SQUARE_SIZE);
  871. /*************/
  872. fprintf(pfOut, "}n");
  873. /*************/
  874. }
  875. }
  876. if (bAnyScalability) {
  877. for (iObj = 0; iObj < nVO; iObj++) {
  878. if (fscanf (pfPara, "%d", &rgbLoadInterMatrix [ENHN_LAYER] [iObj]) != 1) {
  879. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  880. fatal_error("Conversion aborted");
  881. }
  882. my_assert (rgbLoadInterMatrix [ENHN_LAYER] [iObj] ==0 || 
  883. rgbLoadInterMatrix [ENHN_LAYER] [iObj] == 1);
  884. /*************/
  885. fprintf(pfOut, "Texture.QuantMatrix.Inter.Enable [%d] = %dn", iObj + nVO, rgbLoadInterMatrix [ENHN_LAYER] [iObj]);
  886. /*************/
  887. if (rgbLoadInterMatrix [ENHN_LAYER] [iObj]) {
  888. /*************/
  889. fprintf(pfOut, "Texture.QuantMatrix.Inter [%d] = {", iObj + nVO);
  890. /*************/
  891. UInt i = 0;
  892. do {
  893. if(i>0)
  894. /*************/
  895. fprintf(pfOut, ", ");
  896. /*************/
  897. if (fscanf (pfPara, "%d", &rgppiInterQuantizerMatrix [ENHN_LAYER] [iObj] [i]) != 1) {
  898. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  899. fatal_error("Conversion aborted");
  900. }
  901. /*************/
  902. fprintf(pfOut, "%d", rgppiInterQuantizerMatrix [ENHN_LAYER] [iObj] [i]);
  903. /*************/
  904. } while (rgppiInterQuantizerMatrix [ENHN_LAYER] [iObj] [i] != 0 && ++i < BLOCK_SQUARE_SIZE);
  905. /*************/
  906. fprintf(pfOut, "}n");
  907. /*************/
  908. }
  909. }
  910. }
  911. // threhold to code Intra-DC as AC
  912. nextValidLine (pfPara, pnLine);
  913. for (iObj = 0; iObj < nVO; iObj++) {
  914. if (fscanf (pfPara, "%d", &(rgiIntraDCSwitchingThr [BASE_LAYER] [iObj])) != 1) {
  915. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  916. fatal_error("Conversion aborted");
  917. }
  918. my_assert (rgiIntraDCSwitchingThr [BASE_LAYER] [iObj] >= 0 && 
  919. rgiIntraDCSwitchingThr [BASE_LAYER] [iObj] <= 7);
  920. /*************/
  921. fprintf(pfOut, "Texture.IntraDCThreshold [%d] = %dn", iObj, rgiIntraDCSwitchingThr [BASE_LAYER] [iObj]);
  922. /*************/
  923. }
  924. if (bAnyScalability) {
  925. for (iObj = 0; iObj < nVO; iObj++) {
  926. if (fscanf (pfPara, "%d", &(rgiIntraDCSwitchingThr [ENHN_LAYER] [iObj])) != 1) {
  927. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  928. fatal_error("Conversion aborted");
  929. }
  930. my_assert (rgiIntraDCSwitchingThr [ENHN_LAYER] [iObj] >= 0 && 
  931. rgiIntraDCSwitchingThr [ENHN_LAYER] [iObj] <= 7);
  932. /*************/
  933. fprintf(pfOut, "Texture.IntraDCThreshold [%d] = %dn", iObj + nVO, rgiIntraDCSwitchingThr [ENHN_LAYER] [iObj]);
  934. /*************/
  935. }
  936. }
  937. // I-VO quantization stepsize
  938. nextValidLine (pfPara, pnLine);
  939. for (iObj = 0; iObj < nVO; iObj++) {
  940. if (fscanf (pfPara, "%d", &(rgiIStep [BASE_LAYER] [iObj])) != 1) {
  941. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  942. fatal_error("Conversion aborted");
  943. }
  944. my_assert (rgiIStep [BASE_LAYER] [iObj] > 0 && rgiIStep [BASE_LAYER] [iObj] < (1<<uiQuantPrecision));
  945. /*************/
  946. fprintf(pfOut, "Texture.QuantStep.IVOP [%d] = %dn", iObj, rgiIStep [BASE_LAYER] [iObj]);
  947. /*************/
  948. }
  949. if (bAnyScalability) {
  950. for (iObj = 0; iObj < nVO; iObj++) {
  951. if (fscanf (pfPara, "%d", &(rgiIStep [ENHN_LAYER] [iObj])) != 1) {
  952. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  953. fatal_error("Conversion aborted");
  954. }
  955. my_assert (rgiIStep [ENHN_LAYER] [iObj] > 0 && rgiIStep [ENHN_LAYER] [iObj] < (1<<uiQuantPrecision));
  956. /*************/
  957. fprintf(pfOut, "Texture.QuantStep.IVOP [%d] = %dn", iObj + nVO, rgiIStep [ENHN_LAYER] [iObj]);
  958. /*************/
  959. }
  960. }
  961. // P-VO quantization stepsize
  962. nextValidLine (pfPara, pnLine);
  963. for (iObj = 0; iObj < nVO; iObj++) {
  964. if (fscanf (pfPara, "%d", &(rgiPStep [BASE_LAYER] [iObj])) != 1) {
  965. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  966. fatal_error("Conversion aborted");
  967. }
  968. my_assert (rgiPStep [BASE_LAYER] [iObj] > 0 && rgiPStep [BASE_LAYER] [iObj] < (1<<uiQuantPrecision));
  969. /*************/
  970. fprintf(pfOut, "Texture.QuantStep.PVOP [%d] = %dn", iObj, rgiPStep [BASE_LAYER] [iObj]);
  971. /*************/
  972. }
  973. if (bAnyScalability) {
  974. for (iObj = 0; iObj < nVO; iObj++) {
  975. if (fscanf (pfPara, "%d", &(rgiPStep [ENHN_LAYER] [iObj])) != 1) {
  976. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  977. fatal_error("Conversion aborted");
  978. }
  979. my_assert (rgiPStep [ENHN_LAYER] [iObj] > 0 && rgiPStep [ENHN_LAYER] [iObj] < (1<<uiQuantPrecision));
  980. /*************/
  981. fprintf(pfOut, "Texture.QuantStep.PVOP [%d] = %dn", iObj + nVO, rgiPStep [ENHN_LAYER] [iObj]);
  982. /*************/
  983. }
  984. }
  985. // quantization stepsize for B-VOP
  986. nextValidLine (pfPara, pnLine);
  987. for (iObj = 0; iObj < nVO; iObj++) {
  988. if (fscanf (pfPara, "%d", &(rgiStepBCode [BASE_LAYER] [iObj])) != 1) {
  989. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  990. fatal_error("Conversion aborted");
  991. }
  992. my_assert (rgiStepBCode [BASE_LAYER] [iObj] > 0 && rgiStepBCode [BASE_LAYER] [iObj] < (1<<uiQuantPrecision));
  993. /*************/
  994. fprintf(pfOut, "Texture.QuantStep.BVOP [%d] = %dn", iObj, rgiStepBCode [BASE_LAYER] [iObj]);
  995. /*************/
  996. }
  997. if (bAnyScalability) {
  998. for (iObj = 0; iObj < nVO; iObj++) {
  999. if (fscanf (pfPara, "%d", &(rgiStepBCode [ENHN_LAYER] [iObj])) != 1) {
  1000. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1001. fatal_error("Conversion aborted");
  1002. }
  1003. my_assert (rgiStepBCode [ENHN_LAYER] [iObj] > 0 && rgiStepBCode [ENHN_LAYER] [iObj] < (1<<uiQuantPrecision));
  1004. /*************/
  1005. fprintf(pfOut, "Texture.QuantStep.BVOP [%d] = %dn", iObj + nVO, rgiStepBCode [ENHN_LAYER] [iObj]);
  1006. /*************/
  1007. }
  1008. }
  1009. // load non-default gray alpha intra Q-Matrix, 0 -- FALSE, 1 -- TRUE
  1010. nextValidLine (pfPara, pnLine);
  1011. for (iObj = 0; iObj < nVO; iObj++) {
  1012. if (fscanf (pfPara, "%d", &rgbLoadIntraMatrixAlpha [BASE_LAYER] [iObj]) != 1) {
  1013. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1014. fatal_error("Conversion aborted");
  1015. }
  1016. my_assert (rgbLoadIntraMatrixAlpha [BASE_LAYER] [iObj] ==0 || 
  1017. rgbLoadIntraMatrixAlpha [BASE_LAYER] [iObj] == 1);
  1018. /*************/
  1019. fprintf(pfOut, "Alpha.QuantMatrix.Intra.Enable [%d] = %dn", iObj, rgbLoadIntraMatrixAlpha [BASE_LAYER] [iObj]);
  1020. /*************/
  1021. if (rgbLoadIntraMatrixAlpha [BASE_LAYER] [iObj]) {
  1022. /*************/
  1023. fprintf(pfOut, "Alpha.QuantMatrix.Intra [%d] = {", iObj);
  1024. /*************/
  1025. for (UInt i = 0; i < BLOCK_SQUARE_SIZE; i++) {
  1026. if(i>0)
  1027. /*************/
  1028. fprintf(pfOut, ", ");
  1029. /*************/
  1030. if (fscanf (pfPara, "%d", &rgppiIntraQuantizerMatrixAlpha [BASE_LAYER] [iObj] [i]) != 1) {
  1031. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1032. fatal_error("Conversion aborted");
  1033. }
  1034. /*************/
  1035. fprintf(pfOut, "%d", rgppiIntraQuantizerMatrixAlpha [BASE_LAYER] [iObj] [i]);
  1036. /*************/
  1037. }
  1038. /*************/
  1039. fprintf(pfOut, "}n");
  1040. /*************/
  1041. }
  1042. }
  1043. if (bAnyScalability) {
  1044. for (iObj = 0; iObj < nVO; iObj++) {
  1045. if (fscanf (pfPara, "%d", &rgbLoadIntraMatrixAlpha [ENHN_LAYER] [iObj]) != 1) {
  1046. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1047. fatal_error("Conversion aborted");
  1048. }
  1049. my_assert (rgbLoadIntraMatrixAlpha [ENHN_LAYER] [iObj] ==0 || 
  1050. rgbLoadIntraMatrixAlpha [ENHN_LAYER] [iObj] == 1);
  1051. /*************/
  1052. fprintf(pfOut, "Alpha.QuantMatrix.Intra.Enable [%d] = %dn", iObj + nVO, rgbLoadIntraMatrixAlpha [ENHN_LAYER] [iObj]);
  1053. /*************/
  1054. if (rgbLoadIntraMatrixAlpha [ENHN_LAYER] [iObj]) {
  1055. /*************/
  1056. fprintf(pfOut, "Alpha.QuantMatrix.Intra [%d] = {", iObj + nVO);
  1057. /*************/
  1058. for (UInt i = 0; i < BLOCK_SQUARE_SIZE; i++) {
  1059. if(i>0)
  1060. /*************/
  1061. fprintf(pfOut, ", ");
  1062. /*************/
  1063. if (fscanf (pfPara, "%d", &rgppiIntraQuantizerMatrixAlpha [ENHN_LAYER] [iObj] [i]) != 1) {
  1064. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1065. fatal_error("Conversion aborted");
  1066. }
  1067. /*************/
  1068. fprintf(pfOut, "%d", rgppiIntraQuantizerMatrixAlpha [ENHN_LAYER] [iObj] [i]);
  1069. /*************/
  1070. }
  1071. /*************/
  1072. fprintf(pfOut, "}n");
  1073. /*************/
  1074. }
  1075. }
  1076. }
  1077. // load non-default  gray alpha inter Q-Matrix, 0 -- FALSE, 1 -- TRUE
  1078. nextValidLine (pfPara, pnLine);
  1079. for (iObj = 0; iObj < nVO; iObj++) {
  1080. if (fscanf (pfPara, "%d", &rgbLoadInterMatrixAlpha [BASE_LAYER] [iObj]) != 1) {
  1081. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1082. fatal_error("Conversion aborted");
  1083. }
  1084. my_assert (rgbLoadInterMatrixAlpha [BASE_LAYER] [iObj] ==0 || 
  1085. rgbLoadInterMatrixAlpha [BASE_LAYER] [iObj] == 1);
  1086. /*************/
  1087. fprintf(pfOut, "Alpha.QuantMatrix.Inter.Enable [%d] = %dn", iObj, rgbLoadInterMatrixAlpha [BASE_LAYER] [iObj]);
  1088. /*************/
  1089. if (rgbLoadInterMatrixAlpha [BASE_LAYER] [iObj]) {
  1090. /*************/
  1091. fprintf(pfOut, "Alpha.QuantMatrix.Inter [%d] = {", iObj);
  1092. /*************/
  1093. for (UInt i = 0; i < BLOCK_SQUARE_SIZE; i++) {
  1094. if(i>0)
  1095. /*************/
  1096. fprintf(pfOut, ", ");
  1097. /*************/
  1098. if (fscanf (pfPara, "%d", &rgppiInterQuantizerMatrixAlpha [BASE_LAYER] [iObj] [i]) != 1) {
  1099. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1100. fatal_error("Conversion aborted");
  1101. }
  1102. /*************/
  1103. fprintf(pfOut, "%d", rgppiInterQuantizerMatrixAlpha [BASE_LAYER] [iObj] [i]);
  1104. /*************/
  1105. }
  1106. /*************/
  1107. fprintf(pfOut, "}n");
  1108. /*************/
  1109. }
  1110. }
  1111. if (bAnyScalability) {
  1112. for (iObj = 0; iObj < nVO; iObj++) {
  1113. if (fscanf (pfPara, "%d", &rgbLoadInterMatrixAlpha [ENHN_LAYER] [iObj]) != 1) {
  1114. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1115. fatal_error("Conversion aborted");
  1116. }
  1117. my_assert (rgbLoadInterMatrixAlpha [ENHN_LAYER] [iObj] ==0 || 
  1118. rgbLoadInterMatrixAlpha [ENHN_LAYER] [iObj] == 1);
  1119. /*************/
  1120. fprintf(pfOut, "Alpha.QuantMatrix.Inter.Enable [%d] = %dn", iObj + nVO, rgbLoadInterMatrixAlpha [ENHN_LAYER] [iObj]);
  1121. /*************/
  1122. if (rgbLoadInterMatrixAlpha [ENHN_LAYER] [iObj]) {
  1123. /*************/
  1124. fprintf(pfOut, "Alpha.QuantMatrix.Inter [%d] = {", iObj + nVO);
  1125. /*************/
  1126. for (UInt i = 0; i < BLOCK_SQUARE_SIZE; i++) {
  1127. if(i>0)
  1128. /*************/
  1129. fprintf(pfOut, ", ");
  1130. /*************/
  1131. if (fscanf (pfPara, "%d", &rgppiInterQuantizerMatrixAlpha [ENHN_LAYER] [iObj] [i]) != 1) {
  1132. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1133. fatal_error("Conversion aborted");
  1134. }
  1135. /*************/
  1136. fprintf(pfOut, "%d", rgppiInterQuantizerMatrixAlpha [ENHN_LAYER] [iObj] [i]);
  1137. /*************/
  1138. }
  1139. /*************/
  1140. fprintf(pfOut, "}n");
  1141. /*************/
  1142. }
  1143. }
  1144. }
  1145. // I-VO quantization stepsize for Alpha
  1146. nextValidLine (pfPara, pnLine);
  1147. for (iObj = 0; iObj < nVO; iObj++) {
  1148. if (fscanf (pfPara, "%d", &(rgiIStepAlpha [BASE_LAYER] [iObj])) != 1) {
  1149. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1150. fatal_error("Conversion aborted");
  1151. }
  1152. my_assert (rgiIStepAlpha [BASE_LAYER] [iObj] > 0 && rgiIStepAlpha [BASE_LAYER] [iObj] < 32);
  1153. /*************/
  1154. fprintf(pfOut, "Alpha.QuantStep.IVOP [%d] = %dn", iObj, rgiIStepAlpha [BASE_LAYER] [iObj]);
  1155. /*************/
  1156. }
  1157. if (bAnyScalability) {
  1158. for (iObj = 0; iObj < nVO; iObj++) {
  1159. if (fscanf (pfPara, "%d", &(rgiIStepAlpha [ENHN_LAYER] [iObj])) != 1) {
  1160. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1161. fatal_error("Conversion aborted");
  1162. }
  1163. my_assert (rgiIStepAlpha [ENHN_LAYER] [iObj] > 0 && rgiIStepAlpha [ENHN_LAYER] [iObj] < 32);
  1164. /*************/
  1165. fprintf(pfOut, "Alpha.QuantStep.IVOP [%d] = %dn", iObj + nVO, rgiIStepAlpha [ENHN_LAYER] [iObj]);
  1166. /*************/
  1167. }
  1168. }
  1169. // P-VO quantization stepsize for Alpha
  1170. nextValidLine (pfPara, pnLine);
  1171. for (iObj = 0; iObj < nVO; iObj++) {
  1172. if (fscanf (pfPara, "%d", &(rgiPStepAlpha [BASE_LAYER] [iObj])) != 1) {
  1173. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1174. fatal_error("Conversion aborted");
  1175. }
  1176. my_assert (rgiPStepAlpha [BASE_LAYER] [iObj] > 0 && rgiPStepAlpha [BASE_LAYER] [iObj] < 64);
  1177. /*************/
  1178. fprintf(pfOut, "Alpha.QuantStep.PVOP [%d] = %dn", iObj, rgiPStepAlpha [BASE_LAYER] [iObj]);
  1179. /*************/
  1180. }
  1181. if (bAnyScalability) {
  1182. for (iObj = 0; iObj < nVO; iObj++) {
  1183. if (fscanf (pfPara, "%d", &(rgiPStepAlpha [ENHN_LAYER] [iObj])) != 1) {
  1184. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1185. fatal_error("Conversion aborted");
  1186. }
  1187. my_assert (rgiPStepAlpha [ENHN_LAYER] [iObj] > 0 && rgiPStepAlpha [ENHN_LAYER] [iObj] < 64);
  1188. /*************/
  1189. fprintf(pfOut, "Alpha.QuantStep.PVOP [%d] = %dn", iObj + nVO, rgiPStepAlpha [ENHN_LAYER] [iObj]);
  1190. /*************/
  1191. }
  1192. }
  1193. // B-VO quantization stepsize for Alpha
  1194. nextValidLine (pfPara, pnLine);
  1195. for (iObj = 0; iObj < nVO; iObj++) {
  1196. if (fscanf (pfPara, "%d", &(rgiBStepAlpha [BASE_LAYER] [iObj])) != 1) {
  1197. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1198. fatal_error("Conversion aborted");
  1199. }
  1200. my_assert (rgiBStepAlpha [BASE_LAYER] [iObj] > 0 && rgiBStepAlpha [BASE_LAYER] [iObj] < 64);
  1201. /*************/
  1202. fprintf(pfOut, "Alpha.QuantStep.BVOP [%d] = %dn", iObj, rgiBStepAlpha [BASE_LAYER] [iObj]);
  1203. /*************/
  1204. }
  1205. if (bAnyScalability) {
  1206. for (iObj = 0; iObj < nVO; iObj++) {
  1207. if (fscanf (pfPara, "%d", &(rgiBStepAlpha [ENHN_LAYER] [iObj])) != 1) {
  1208. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1209. fatal_error("Conversion aborted");
  1210. }
  1211. my_assert (rgiBStepAlpha [ENHN_LAYER] [iObj] > 0 && rgiBStepAlpha [ENHN_LAYER] [iObj] < 64);
  1212. /*************/
  1213. fprintf(pfOut, "Alpha.QuantStep.BVOP [%d] = %dn", iObj + nVO, rgiBStepAlpha [ENHN_LAYER] [iObj]);
  1214. /*************/
  1215. }
  1216. }
  1217. // disable_gray_quant_update
  1218. nextValidLine (pfPara, pnLine);
  1219. for (iObj = 0; iObj < nVO; iObj++) {
  1220. if (fscanf (pfPara, "%d", &(rgbNoGrayQuantUpdate [BASE_LAYER] [iObj])) != 1) {
  1221. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1222. fatal_error("Conversion aborted");
  1223. }
  1224. /*************/
  1225. fprintf(pfOut, "Alpha.QuantDecouple.Enable [%d] = %dn", iObj, rgbNoGrayQuantUpdate [BASE_LAYER] [iObj]);
  1226. /*************/
  1227. }
  1228. if (bAnyScalability) {
  1229. for (iObj = 0; iObj < nVO; iObj++) {
  1230. if (fscanf (pfPara, "%d", &(rgbNoGrayQuantUpdate [ENHN_LAYER] [iObj])) != 1) {
  1231. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1232. fatal_error("Conversion aborted");
  1233. }
  1234. /*************/
  1235. fprintf(pfOut, "Alpha.QuantDecouple.Enable [%d] = %dn", iObj + nVO, rgbNoGrayQuantUpdate [ENHN_LAYER] [iObj]);
  1236. /*************/
  1237. }
  1238. }
  1239. // number of P-VOP's between 2 I-VOP's; if there are B-VOPs, the no. of encode frames will multiply
  1240. nextValidLine (pfPara, pnLine);
  1241. for (iObj = 0; iObj < nVO; iObj++) {
  1242. if (fscanf (pfPara, "%d", &rgiNumPbetweenIVOP [iObj]) != 1) {
  1243. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1244. fatal_error("Conversion aborted");
  1245. }
  1246. /*************/
  1247. fprintf(pfOut, "Motion.PBetweenICount [%d] = %dn", iObj, rgiNumPbetweenIVOP [iObj]);
  1248. /*************/
  1249. }
  1250. // number of B-VOP's between 2 P-VOP's
  1251. nextValidLine (pfPara, pnLine);
  1252. for (iObj = 0; iObj < nVO; iObj++) {
  1253. if (fscanf (pfPara, "%d", &rgiNumBbetweenPVOP [iObj]) != 1) {
  1254. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1255. fatal_error("Conversion aborted");
  1256. }
  1257. my_assert (rgiNumBbetweenPVOP [iObj] >= 0);
  1258. /*************/
  1259. fprintf(pfOut, "Motion.BBetweenPCount [%d] = %dn", iObj, rgiNumBbetweenPVOP [iObj]);
  1260. /*************/
  1261. }
  1262. if(iVersion>814)
  1263. {
  1264. // rgbAllowSkippedPMBs
  1265. nextValidLine (pfPara, pnLine);
  1266. for (iObj = 0; iObj < nVO; iObj++) {
  1267. if (fscanf (pfPara, "%d", &rgbAllowSkippedPMBs [iObj]) != 1) {
  1268. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1269. fatal_error("Conversion aborted");
  1270. }
  1271. my_assert (rgbAllowSkippedPMBs [iObj] == 0 || rgbAllowSkippedPMBs[iObj]==1);
  1272. }
  1273. }
  1274. else
  1275. for (iObj = 0; iObj < nVO; iObj++)
  1276. rgbAllowSkippedPMBs [iObj] = 1;
  1277. for (iObj = 0; iObj < nVO; iObj++)
  1278. /*************/
  1279. fprintf(pfOut, "Motion.SkippedMB.Enable [%d] = %dn", iObj, rgbAllowSkippedPMBs [iObj]);
  1280. /*************/
  1281. //added to encode GOV header by SONY 980212
  1282. //number of VOP between GOV header
  1283. //CAUTION:GOV period is not used in spatial scalable coding
  1284. nextValidLine (pfPara, pnLine);
  1285. for (iObj = 0; iObj < nVO; iObj++) {
  1286. if (fscanf (pfPara, "%d", &rgiGOVperiod [iObj]) != 1) {
  1287. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1288. fatal_error("Conversion aborted");
  1289. }
  1290. my_assert (rgiGOVperiod [iObj] >= 0);
  1291. /*************/
  1292. fprintf(pfOut, "GOV.Enable [%d] = %dn", iObj, rgiGOVperiod [iObj] > 0);
  1293. fprintf(pfOut, "GOV.Period [%d] = %dn", iObj, rgiGOVperiod [iObj]);
  1294. /*************/
  1295. }
  1296. //980212
  1297. // deblocking filter disable
  1298. nextValidLine (pfPara, pnLine);
  1299. for (iObj = 0; iObj < nVO; iObj++) {
  1300. if (fscanf (pfPara, "%d", &rgbDeblockFilterDisable [iObj]) != 1) {
  1301. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1302. fatal_error("Conversion aborted");
  1303. }
  1304. /*************/
  1305. fprintf(pfOut, "Motion.DeblockingFilter.Enable [%d] = %dn", iObj, !rgbDeblockFilterDisable [iObj]);
  1306. /*************/
  1307. }
  1308. // Temporal sampling rate
  1309. nextValidLine (pfPara, pnLine);
  1310. for (iObj = 0; iObj < nVO; iObj++) {
  1311. if (fscanf (pfPara, "%d", &rgiTSRate [iObj]) != 1) {
  1312. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1313. fatal_error("Conversion aborted");
  1314. }
  1315. my_assert (rgiTSRate [iObj] >= 1);
  1316. /*************/
  1317. fprintf(pfOut, "Source.SamplingRate [%d] = %dn", iObj, rgiTSRate [iObj]);
  1318. /*************/
  1319. }
  1320. if ( bAnyScalability ){ // This part is added by Norio Ito
  1321. for (iObj = 0; iObj < nVO; iObj++) {
  1322. if (fscanf (pfPara, "%d", &rgiEnhcTSRate [iObj]) != 1) {
  1323. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1324. fatal_error("Conversion aborted");
  1325. }
  1326. my_assert (rgiEnhcTSRate [iObj] >= 1);
  1327. /*************/
  1328. fprintf(pfOut, "Source.SamplingRate [%d] = %dn", iObj + nVO, rgiEnhcTSRate [iObj]);
  1329. /*************/
  1330. }
  1331. }
  1332. // maximum displacement
  1333. nextValidLine (pfPara, pnLine);
  1334. for (iObj = 0; iObj < nVO; iObj++) {
  1335. if (fscanf (pfPara, "%d", &rguiSearchRange [BASE_LAYER] [iObj]) != 1) {
  1336. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1337. fatal_error("Conversion aborted");
  1338. }
  1339. my_assert (rguiSearchRange [BASE_LAYER] [iObj] >= 1);
  1340. /*************/
  1341. fprintf(pfOut, "Motion.SearchRange [%d] = %dn", iObj, rguiSearchRange [BASE_LAYER] [iObj]);
  1342. /*************/
  1343. }
  1344. if (bAnyScalability) {
  1345. for (iObj = 0; iObj < nVO; iObj++) {
  1346. if (fscanf (pfPara, "%d", &rguiSearchRange [ENHN_LAYER] [iObj]) != 1) {
  1347. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1348. fatal_error("Conversion aborted");
  1349. }
  1350. my_assert (rguiSearchRange [ENHN_LAYER] [iObj] >= 1);
  1351. /*************/
  1352. fprintf(pfOut, "Motion.SearchRange [%d] = %dn", iObj + nVO, rguiSearchRange [ENHN_LAYER] [iObj]);
  1353. /*************/
  1354. }
  1355. }
  1356. // use original or reconstructed previous VO for ME
  1357. nextValidLine (pfPara, pnLine);
  1358. for (iObj = 0; iObj < nVO; iObj++) {
  1359. if (fscanf (pfPara, "%d", &rgbOriginalME [BASE_LAYER] [iObj]) != 1) {
  1360. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1361. fatal_error("Conversion aborted");
  1362. }
  1363. my_assert (rgbOriginalME [BASE_LAYER] [iObj] == 0 || rgbOriginalME [BASE_LAYER] [iObj] == 1);
  1364. /*************/
  1365. fprintf(pfOut, "Motion.UseSourceForME.Enable [%d] = %dn", iObj, rgbOriginalME [BASE_LAYER] [iObj]);
  1366. /*************/
  1367. }
  1368. if (bAnyScalability) {
  1369. for (iObj = 0; iObj < nVO; iObj++) {
  1370. if (fscanf (pfPara, "%d", &rgbOriginalME [ENHN_LAYER] [iObj]) != 1) {
  1371. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1372. fatal_error("Conversion aborted");
  1373. }
  1374. my_assert (rgbOriginalME [ENHN_LAYER] [iObj] == 0 || rgbOriginalME [ENHN_LAYER] [iObj] == 1);
  1375. /*************/
  1376. fprintf(pfOut, "Motion.UseSourceForME.Enable [%d] = %dn", iObj + nVO, rgbOriginalME [ENHN_LAYER] [iObj]);
  1377. /*************/
  1378. }
  1379. }
  1380. // disable advance prediction (obmc only)?
  1381. nextValidLine (pfPara, pnLine);
  1382. for (iObj = 0; iObj < nVO; iObj++) {
  1383. if (fscanf (pfPara, "%d", &rgbAdvPredDisable [BASE_LAYER] [iObj]) != 1) {
  1384. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1385. fatal_error("Conversion aborted");
  1386. }
  1387. my_assert (rgbAdvPredDisable [BASE_LAYER] [iObj] == 0 || rgbAdvPredDisable [BASE_LAYER] [iObj] == 1);
  1388. /*************/
  1389. fprintf(pfOut, "Motion.AdvancedPrediction.Enable [%d] = %dn", iObj, !rgbAdvPredDisable [BASE_LAYER] [iObj]);
  1390. /*************/
  1391. }
  1392. if (bAnyScalability) {
  1393. for (iObj = 0; iObj < nVO; iObj++) {
  1394. if (fscanf (pfPara, "%d", &rgbAdvPredDisable [ENHN_LAYER] [iObj]) != 1) {
  1395. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1396. fatal_error("Conversion aborted");
  1397. }
  1398. my_assert (rgbAdvPredDisable [ENHN_LAYER] [iObj] == 0 || rgbAdvPredDisable [ENHN_LAYER] [iObj] == 1);
  1399. /*************/
  1400. fprintf(pfOut, "Motion.AdvancedPrediction.Enable [%d] = %dn", iObj + nVO, !rgbAdvPredDisable [ENHN_LAYER] [iObj]);
  1401. /*************/
  1402. }
  1403. }
  1404. // START: Complexity Estimation syntax support - Marc Mongenet (EPFL) - 16 Jun 1998
  1405. readBoolVOLFlag (rgbComplexityEstimationDisable, nVO, pfPara, pnLine, bAnyScalability);
  1406. readBoolVOLFlag (rgbOpaque, nVO, pfPara, pnLine, bAnyScalability);
  1407. readBoolVOLFlag (rgbTransparent, nVO, pfPara, pnLine, bAnyScalability);
  1408. readBoolVOLFlag (rgbIntraCAE, nVO, pfPara, pnLine, bAnyScalability);
  1409. readBoolVOLFlag (rgbInterCAE, nVO, pfPara, pnLine, bAnyScalability);
  1410. readBoolVOLFlag (rgbNoUpdate, nVO, pfPara, pnLine, bAnyScalability);
  1411. readBoolVOLFlag (rgbUpsampling, nVO, pfPara, pnLine, bAnyScalability);
  1412. readBoolVOLFlag (rgbIntraBlocks, nVO, pfPara, pnLine, bAnyScalability);
  1413. readBoolVOLFlag (rgbInterBlocks, nVO, pfPara, pnLine, bAnyScalability);
  1414. readBoolVOLFlag (rgbInter4vBlocks, nVO, pfPara, pnLine, bAnyScalability);
  1415. readBoolVOLFlag (rgbNotCodedBlocks, nVO, pfPara, pnLine, bAnyScalability);
  1416. readBoolVOLFlag (rgbDCTCoefs, nVO, pfPara, pnLine, bAnyScalability);
  1417. readBoolVOLFlag (rgbDCTLines, nVO, pfPara, pnLine, bAnyScalability);
  1418. readBoolVOLFlag (rgbVLCSymbols, nVO, pfPara, pnLine, bAnyScalability);
  1419. readBoolVOLFlag (rgbVLCBits, nVO, pfPara, pnLine, bAnyScalability);
  1420. readBoolVOLFlag (rgbAPM, nVO, pfPara, pnLine, bAnyScalability);
  1421. readBoolVOLFlag (rgbNPM, nVO, pfPara, pnLine, bAnyScalability);
  1422. readBoolVOLFlag (rgbInterpolateMCQ, nVO, pfPara, pnLine, bAnyScalability);
  1423. readBoolVOLFlag (rgbForwBackMCQ, nVO, pfPara, pnLine, bAnyScalability);
  1424. readBoolVOLFlag (rgbHalfpel2, nVO, pfPara, pnLine, bAnyScalability);
  1425. readBoolVOLFlag (rgbHalfpel4, nVO, pfPara, pnLine, bAnyScalability);
  1426. // END: Complexity Estimation syntax support
  1427. /*************/
  1428. for(iObj = 0; iObj<nVO; iObj++)
  1429. {
  1430. fprintf(pfOut, "Complexity.Enable [%d] = %dn", iObj, !rgbComplexityEstimationDisable [BASE_LAYER] [iObj]);
  1431. if(!rgbComplexityEstimationDisable [BASE_LAYER] [iObj])
  1432. {
  1433. fprintf(pfOut, "Complexity.Opaque.Enable [%d] = %dn", iObj, rgbOpaque [BASE_LAYER] [iObj]);
  1434. fprintf(pfOut, "Complexity.Transparent.Enable [%d] = %dn", iObj, rgbTransparent [BASE_LAYER] [iObj]);
  1435. fprintf(pfOut, "Complexity.IntraCAE.Enable [%d] = %dn", iObj, rgbIntraCAE [BASE_LAYER] [iObj]);
  1436. fprintf(pfOut, "Complexity.InterCAE.Enable [%d] = %dn", iObj, rgbInterCAE [BASE_LAYER] [iObj]);
  1437. fprintf(pfOut, "Complexity.NoUpdate.Enable [%d] = %dn", iObj, rgbNoUpdate [BASE_LAYER] [iObj]);
  1438. fprintf(pfOut, "Complexity.UpSampling.Enable [%d] = %dn", iObj, rgbUpsampling [BASE_LAYER] [iObj]);
  1439. fprintf(pfOut, "Complexity.IntraBlocks.Enable [%d] = %dn", iObj, rgbIntraBlocks [BASE_LAYER] [iObj]);
  1440. fprintf(pfOut, "Complexity.InterBlocks.Enable [%d] = %dn", iObj, rgbInterBlocks [BASE_LAYER] [iObj]);
  1441. fprintf(pfOut, "Complexity.Inter4VBlocks.Enable [%d] = %dn", iObj, rgbInter4vBlocks [BASE_LAYER] [iObj]);
  1442. fprintf(pfOut, "Complexity.NotCodedBlocks.Enable [%d] = %dn", iObj, rgbNotCodedBlocks [BASE_LAYER] [iObj]);
  1443. fprintf(pfOut, "Complexity.DCTCoefs.Enable [%d] = %dn", iObj, rgbDCTCoefs [BASE_LAYER] [iObj]);
  1444. fprintf(pfOut, "Complexity.DCTLines.Enable [%d] = %dn", iObj, rgbDCTLines [BASE_LAYER] [iObj]);
  1445. fprintf(pfOut, "Complexity.VLCSymbols.Enable [%d] = %dn", iObj, rgbVLCSymbols [BASE_LAYER] [iObj]);
  1446. fprintf(pfOut, "Complexity.VLCBits.Enable [%d] = %dn", iObj, rgbVLCBits [BASE_LAYER] [iObj]);
  1447. fprintf(pfOut, "Complexity.APM.Enable [%d] = %dn", iObj, rgbAPM [BASE_LAYER] [iObj]);
  1448. fprintf(pfOut, "Complexity.NPM.Enable [%d] = %dn", iObj, rgbNPM [BASE_LAYER] [iObj]);
  1449. fprintf(pfOut, "Complexity.InterpMCQ.Enable [%d] = %dn", iObj, rgbInterpolateMCQ [BASE_LAYER] [iObj]);
  1450. fprintf(pfOut, "Complexity.ForwBackMCQ.Enable [%d] = %dn", iObj, rgbForwBackMCQ [BASE_LAYER] [iObj]);
  1451. fprintf(pfOut, "Complexity.HalfPel2.Enable [%d] = %dn", iObj, rgbHalfpel2 [BASE_LAYER] [iObj]);
  1452. fprintf(pfOut, "Complexity.HalfPel4.Enable [%d] = %dn", iObj, rgbHalfpel4 [BASE_LAYER] [iObj]);
  1453. }
  1454. if(bAnyScalability)
  1455. {
  1456. fprintf(pfOut, "Complexity.Enable [%d] = %dn", iObj + nVO, !rgbComplexityEstimationDisable [ENHN_LAYER] [iObj]);
  1457. if(!rgbComplexityEstimationDisable [BASE_LAYER] [iObj])
  1458. {
  1459. fprintf(pfOut, "Complexity.Opaque.Enable [%d] = %dn", iObj + nVO, rgbOpaque [ENHN_LAYER] [iObj]);
  1460. fprintf(pfOut, "Complexity.Transparent.Enable [%d] = %dn", iObj + nVO, rgbTransparent [ENHN_LAYER] [iObj]);
  1461. fprintf(pfOut, "Complexity.IntraCAE.Enable [%d] = %dn", iObj + nVO, rgbIntraCAE [ENHN_LAYER] [iObj]);
  1462. fprintf(pfOut, "Complexity.InterCAE.Enable [%d] = %dn", iObj + nVO, rgbInterCAE [ENHN_LAYER] [iObj]);
  1463. fprintf(pfOut, "Complexity.NoUpdate.Enable [%d] = %dn", iObj + nVO, rgbNoUpdate [ENHN_LAYER] [iObj]);
  1464. fprintf(pfOut, "Complexity.UpSampling.Enable [%d] = %dn", iObj + nVO, rgbUpsampling [ENHN_LAYER] [iObj]);
  1465. fprintf(pfOut, "Complexity.IntraBlocks.Enable [%d] = %dn", iObj + nVO, rgbIntraBlocks [ENHN_LAYER] [iObj]);
  1466. fprintf(pfOut, "Complexity.InterBlocks.Enable [%d] = %dn", iObj + nVO, rgbInterBlocks [ENHN_LAYER] [iObj]);
  1467. fprintf(pfOut, "Complexity.Inter4VBlocks.Enable [%d] = %dn", iObj + nVO, rgbInter4vBlocks [ENHN_LAYER] [iObj]);
  1468. fprintf(pfOut, "Complexity.NotCodedBlocks.Enable [%d] = %dn", iObj + nVO, rgbNotCodedBlocks [ENHN_LAYER] [iObj]);
  1469. fprintf(pfOut, "Complexity.DCTCoefs.Enable [%d] = %dn", iObj + nVO, rgbDCTCoefs [ENHN_LAYER] [iObj]);
  1470. fprintf(pfOut, "Complexity.DCTLines.Enable [%d] = %dn", iObj + nVO, rgbDCTLines [ENHN_LAYER] [iObj]);
  1471. fprintf(pfOut, "Complexity.VLCSymbols.Enable [%d] = %dn", iObj + nVO, rgbVLCSymbols [ENHN_LAYER] [iObj]);
  1472. fprintf(pfOut, "Complexity.VLCBits.Enable [%d] = %dn", iObj + nVO, rgbVLCBits [ENHN_LAYER] [iObj]);
  1473. fprintf(pfOut, "Complexity.APM.Enable [%d] = %dn", iObj + nVO, rgbAPM [ENHN_LAYER] [iObj]);
  1474. fprintf(pfOut, "Complexity.NPM.Enable [%d] = %dn", iObj + nVO, rgbNPM [ENHN_LAYER] [iObj]);
  1475. fprintf(pfOut, "Complexity.InterpMCQ.Enable [%d] = %dn", iObj + nVO, rgbInterpolateMCQ [ENHN_LAYER] [iObj]);
  1476. fprintf(pfOut, "Complexity.ForwBackMCQ.Enable [%d] = %dn", iObj + nVO, rgbForwBackMCQ [ENHN_LAYER] [iObj]);
  1477. fprintf(pfOut, "Complexity.HalfPel2.Enable [%d] = %dn", iObj + nVO, rgbHalfpel2 [ENHN_LAYER] [iObj]);
  1478. fprintf(pfOut, "Complexity.HalfPel4.Enable [%d] = %dn", iObj + nVO, rgbHalfpel4 [ENHN_LAYER] [iObj]);
  1479. }
  1480. }
  1481. }
  1482. /*************/
  1483. // START: VOL Control Parameters
  1484. if(iVersion>813)
  1485. {
  1486. readItem(rguiVolControlParameters, nVO, pfPara, pnLine, bAnyScalability);
  1487. readItem(rguiChromaFormat, nVO, pfPara, pnLine, bAnyScalability);
  1488. readItem(rguiLowDelay, nVO, pfPara, pnLine, bAnyScalability);
  1489. readItem(rguiVBVParams, nVO, pfPara, pnLine, bAnyScalability);
  1490. readItem(rguiBitRate, nVO, pfPara, pnLine, bAnyScalability);
  1491. readItem(rguiVbvBufferSize, nVO, pfPara, pnLine, bAnyScalability);
  1492. readItem(rguiVbvBufferOccupany, nVO, pfPara, pnLine, bAnyScalability);
  1493. }
  1494. else
  1495. {
  1496. for(iObj = 0; iObj<nVO; iObj++)
  1497. {
  1498. rguiVolControlParameters[BASE_LAYER][iObj] = 0;
  1499. rguiVolControlParameters[ENHN_LAYER][iObj] = 0;
  1500. rguiChromaFormat[BASE_LAYER][iObj] = 0;
  1501. rguiChromaFormat[ENHN_LAYER][iObj] = 0;
  1502. rguiLowDelay[BASE_LAYER][iObj] = 0;
  1503. rguiLowDelay[ENHN_LAYER][iObj] = 0;
  1504. rguiVBVParams[BASE_LAYER][iObj] = 0;
  1505. rguiVBVParams[ENHN_LAYER][iObj] = 0;
  1506. rguiBitRate[BASE_LAYER][iObj] = 0;
  1507. rguiBitRate[ENHN_LAYER][iObj] = 0;
  1508. rguiVbvBufferSize[BASE_LAYER][iObj] = 0;
  1509. rguiVbvBufferSize[ENHN_LAYER][iObj] = 0;
  1510. rguiVbvBufferOccupany[BASE_LAYER][iObj] = 0;
  1511. rguiVbvBufferOccupany[ENHN_LAYER][iObj] = 0;
  1512. }
  1513. }
  1514. for(iObj = 0; iObj<nVO; iObj++)
  1515. {
  1516. /*************/
  1517. fprintf(pfOut, "VOLControl.Enable [%d] = %dn", iObj, rguiVolControlParameters [BASE_LAYER] [iObj]);
  1518. fprintf(pfOut, "VOLControl.ChromaFormat [%d] = %dn", iObj, rguiChromaFormat [BASE_LAYER] [iObj]);
  1519. fprintf(pfOut, "VOLControl.LowDelay [%d] = %dn", iObj, rguiLowDelay [BASE_LAYER] [iObj]);
  1520. fprintf(pfOut, "VOLControl.VBVParams.Enable [%d] = %dn", iObj, rguiVBVParams [BASE_LAYER] [iObj]);
  1521. fprintf(pfOut, "VOLControl.Bitrate [%d] = %dn", iObj, rguiBitRate [BASE_LAYER] [iObj]);
  1522. fprintf(pfOut, "VOLControl.VBVBuffer.Size [%d] = %dn", iObj, rguiVbvBufferSize [BASE_LAYER] [iObj]);
  1523. fprintf(pfOut, "VOLControl.VBVBuffer.Occupancy [%d] = %dn", iObj, rguiVbvBufferOccupany [BASE_LAYER] [iObj]);
  1524. /*************/
  1525. if(bAnyScalability)
  1526. {
  1527. /*************/
  1528. fprintf(pfOut, "VOLControl.Enable [%d] = %dn", iObj + nVO, rguiVolControlParameters [ENHN_LAYER] [iObj]);
  1529. fprintf(pfOut, "VOLControl.ChromaFormat [%d] = %dn", iObj + nVO, rguiChromaFormat [ENHN_LAYER] [iObj]);
  1530. fprintf(pfOut, "VOLControl.LowDelay [%d] = %dn", iObj + nVO, rguiLowDelay [ENHN_LAYER] [iObj]);
  1531. fprintf(pfOut, "VOLControl.VBVParams.Enable [%d] = %dn", iObj + nVO, rguiVBVParams [ENHN_LAYER] [iObj]);
  1532. fprintf(pfOut, "VOLControl.Bitrate [%d] = %dn", iObj + nVO, rguiBitRate [ENHN_LAYER] [iObj]);
  1533. fprintf(pfOut, "VOLControl.VBVBuffer.Size [%d] = %dn", iObj + nVO, rguiVbvBufferSize [ENHN_LAYER] [iObj]);
  1534. fprintf(pfOut, "VOLControl.VBVBuffer.Occupancy [%d] = %dn", iObj + nVO, rguiVbvBufferOccupany [ENHN_LAYER] [iObj]);
  1535. /*************/
  1536. }
  1537. }
  1538. // END: VOL Control Parameters
  1539. // Interlaced CHANGE
  1540. // Sequence frame frequency (Hz).  Use double type because of 29.97Hz (etc)
  1541. nextValidLine (pfPara, pnLine);
  1542. for (iObj = 0; iObj < nVO; iObj++) {
  1543. if (fscanf (pfPara, "%lf", &(rgdFrameFrequency [BASE_LAYER] [iObj])) != 1) {
  1544. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1545. fatal_error("Conversion aborted");
  1546. }
  1547. my_assert(rgdFrameFrequency [BASE_LAYER] [iObj] > 0.0);
  1548. /*************/
  1549. fprintf(pfOut, "Source.FrameRate [%d] = %gn", iObj, rgdFrameFrequency [BASE_LAYER] [iObj]);
  1550. /*************/
  1551. }
  1552. if (bAnyScalability) {
  1553. for (iObj = 0; iObj < nVO; iObj++) {
  1554. if (fscanf (pfPara, "%lf", &(rgdFrameFrequency [ENHN_LAYER] [iObj])) != 1) {
  1555. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1556. fatal_error("Conversion aborted");
  1557. }
  1558. my_assert(rgdFrameFrequency [ENHN_LAYER] [iObj] > 0.0);
  1559. /*************/
  1560. fprintf(pfOut, "Source.FrameRate [%d] = %gn", iObj + nVO, rgdFrameFrequency [ENHN_LAYER] [iObj]);
  1561. /*************/
  1562. }
  1563. }
  1564. // top field first flag
  1565. nextValidLine (pfPara, pnLine);
  1566. for (iObj = 0; iObj < nVO; iObj++) {
  1567. if (fscanf (pfPara, "%d", &(rgbTopFieldFirst [BASE_LAYER] [iObj])) != 1) {
  1568. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1569. fatal_error("Conversion aborted");
  1570. }
  1571. my_assert (rgbTopFieldFirst [BASE_LAYER] [iObj] == 0 || 
  1572. rgbTopFieldFirst [BASE_LAYER] [iObj] == 1);
  1573. /*************/
  1574. fprintf(pfOut, "Motion.Interlaced.TopFieldFirst.Enable [%d] = %dn", iObj, rgbTopFieldFirst [BASE_LAYER] [iObj]);
  1575. /*************/
  1576. }
  1577. if (bAnyScalability) {
  1578. for (iObj = 0; iObj < nVO; iObj++) {
  1579. if (fscanf (pfPara, "%d", &(rgbTopFieldFirst [ENHN_LAYER] [iObj])) != 1) {
  1580. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1581. fatal_error("Conversion aborted");
  1582. }
  1583. my_assert (rgbTopFieldFirst [ENHN_LAYER] [iObj] == 0 || 
  1584. rgbTopFieldFirst [ENHN_LAYER] [iObj] == 1);
  1585. /*************/
  1586. fprintf(pfOut, "Motion.Interlaced.TopFieldFirst.Enable [%d] = %dn", iObj + nVO, rgbTopFieldFirst [ENHN_LAYER] [iObj]);
  1587. /*************/
  1588. }
  1589. }
  1590. // alternate scan flag
  1591. nextValidLine (pfPara, pnLine);
  1592. for (iObj = 0; iObj < nVO; iObj++) {
  1593. if (fscanf (pfPara, "%d", &(rgbAlternateScan [BASE_LAYER] [iObj])) != 1) {
  1594. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1595. fatal_error("Conversion aborted");
  1596. }
  1597. my_assert (rgbAlternateScan [BASE_LAYER] [iObj] == 0 || 
  1598. rgbAlternateScan [BASE_LAYER] [iObj] == 1);
  1599. /*************/
  1600. fprintf(pfOut, "Motion.Interlaced.AlternativeScan.Enable [%d] = %dn", iObj, rgbAlternateScan [BASE_LAYER] [iObj]);
  1601. /*************/
  1602. }
  1603. if (bAnyScalability) {
  1604. for (iObj = 0; iObj < nVO; iObj++) {
  1605. if (fscanf (pfPara, "%d", &(rgbAlternateScan [ENHN_LAYER] [iObj])) != 1) {
  1606. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1607. fatal_error("Conversion aborted");
  1608. }
  1609. my_assert (rgbAlternateScan [ENHN_LAYER] [iObj] == 0 || 
  1610. rgbAlternateScan [ENHN_LAYER] [iObj] == 1);
  1611. /*************/
  1612. fprintf(pfOut, "Motion.Interlaced.AlternativeScan.Enable [%d] = %dn", iObj + nVO, rgbAlternateScan [ENHN_LAYER] [iObj]);
  1613. /*************/
  1614. }
  1615. }
  1616. // Direct Mode search radius (half luma pixel units)
  1617. nextValidLine (pfPara, pnLine);
  1618. for (iObj = 0; iObj < nVO; iObj++) {
  1619. if (fscanf (pfPara, "%d", &(rgiDirectModeRadius [BASE_LAYER] [iObj])) != 1) {
  1620. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1621. fatal_error("Conversion aborted");
  1622. }
  1623. /*************/
  1624. fprintf(pfOut, "Motion.SearchRange.DirectMode [%d] = %dn", iObj, rgiDirectModeRadius [BASE_LAYER] [iObj]);
  1625. /*************/
  1626. }
  1627. if (bAnyScalability) {
  1628. for (iObj = 0; iObj < nVO; iObj++) {
  1629. if (fscanf (pfPara, "%d", &(rgiDirectModeRadius [ENHN_LAYER] [iObj])) != 1) {
  1630. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1631. fatal_error("Conversion aborted");
  1632. }
  1633. /*************/
  1634. fprintf(pfOut, "Motion.SearchRange.DirectMode [%d] = %dn", iObj + nVO, rgiDirectModeRadius [ENHN_LAYER] [iObj]);
  1635. /*************/
  1636. }
  1637. }
  1638. // motion vector file
  1639. nextValidLine(pfPara, pnLine);
  1640. for (iObj = 0; iObj < nVO; iObj++) {
  1641. if (fscanf (pfPara, "%d", &(rgiMVFileUsage [BASE_LAYER] [iObj])) != 1) {
  1642. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1643. fatal_error("Conversion aborted");
  1644. }
  1645. my_assert (rgiMVFileUsage [BASE_LAYER] [iObj] == 0 || // 0= not used
  1646. rgiMVFileUsage [BASE_LAYER] [iObj] == 1 || // 1= read motion vectors from file
  1647. rgiMVFileUsage [BASE_LAYER] [iObj] == 2 ); // 2= write motion vectors to file
  1648. /*************/
  1649. fprintf(pfOut, "Motion.ReadWriteMVs [%d] = "%s"n", iObj,
  1650. rgiMVFileUsage [BASE_LAYER] [iObj]==0 ? "Off" : (rgiMVFileUsage [BASE_LAYER] [iObj]==1 ? "Read" : "Write"));
  1651. /*************/
  1652. pchMVFileName [BASE_LAYER] [iObj] = NULL;
  1653. pchMVFileName [ENHN_LAYER] [iObj] = NULL;
  1654. char cFileName[256];
  1655. cFileName[0] = 0;
  1656. if ((rgiMVFileUsage [BASE_LAYER] [iObj] != 0) &&
  1657. (fscanf (pfPara, "%200s", cFileName) != 1)) {
  1658. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1659. fatal_error("Conversion aborted");
  1660. }
  1661. Int iLength = strlen(cFileName) + 1;
  1662. pchMVFileName [BASE_LAYER] [iObj] = new char [iLength];
  1663. memcpy(pchMVFileName [BASE_LAYER] [iObj], cFileName, iLength);
  1664. /*************/
  1665. fprintf(pfOut, "Motion.ReadWriteMVs.Filename [%d] = "%s"n", iObj, pchMVFileName [BASE_LAYER] [iObj]);
  1666. /*************/
  1667. }
  1668. if (bAnyScalability) {
  1669. for (iObj = 0; iObj < nVO; iObj++) {
  1670. if (fscanf (pfPara, "%d", &(rgiMVFileUsage [ENHN_LAYER] [iObj])) != 1) {
  1671. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1672. fatal_error("Conversion aborted");
  1673. }
  1674. my_assert (rgiMVFileUsage [ENHN_LAYER] [iObj] == 0 || 
  1675. rgiMVFileUsage [ENHN_LAYER] [iObj] == 1 ||
  1676. rgiMVFileUsage [ENHN_LAYER] [iObj] == 2 );
  1677. /*************/
  1678. fprintf(pfOut, "Motion.ReadWriteMVs [%d] = "%s"n", iObj + nVO,
  1679. rgiMVFileUsage [ENHN_LAYER] [iObj]==0 ? "Off" : (rgiMVFileUsage [ENHN_LAYER] [iObj]==1 ? "Read" : "Write"));
  1680. /*************/
  1681. char cFileName[256];
  1682. cFileName[0] = 0;
  1683. if ((rgiMVFileUsage [ENHN_LAYER] [iObj] != 0) &&
  1684. (fscanf (pfPara, "%s", cFileName) != 1)) {
  1685. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1686. fatal_error("Conversion aborted");
  1687. }
  1688. Int iLength = strlen(cFileName) + 1;
  1689. pchMVFileName [ENHN_LAYER] [iObj] = new char [iLength];
  1690. memcpy(pchMVFileName [ENHN_LAYER] [iObj], cFileName, iLength);
  1691. /*************/
  1692. fprintf(pfOut, "Motion.ReadWriteMVs.Filename [%d] = "%s"n", iObj + nVO, pchMVFileName [ENHN_LAYER] [iObj]);
  1693. /*************/
  1694. }
  1695. }
  1696. // file information
  1697. pchPrefix = new char [256];
  1698. nextValidLine (pfPara, pnLine);
  1699. fscanf (pfPara, "%s", pchPrefix);
  1700. // original file directory
  1701. pchBmpDir = new char [256];
  1702. nextValidLine (pfPara, pnLine);
  1703. fscanf (pfPara, "%100s", pchBmpDir);
  1704. /*************/
  1705. fprintf(pfOut, "Source.FilePrefix = "%s"n", pchPrefix);
  1706. fprintf(pfOut, "Source.Directory = "%s"n", pchBmpDir);
  1707. /*************/
  1708. // chrominance format
  1709. nextValidLine (pfPara, pnLine);
  1710. for (iObj = 0; iObj < nVO; iObj++) {
  1711. UInt uiChrType;
  1712. if (fscanf (pfPara, "%d", &uiChrType) != 1) {
  1713. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1714. fatal_error("Conversion aborted");
  1715. }
  1716. else {
  1717. my_assert (uiChrType == 0 || uiChrType == 1 || uiChrType == 2);
  1718. rgfChrType [iObj] = (ChromType) uiChrType;
  1719. }
  1720. /*************/
  1721. fprintf(pfOut, "Source.Format [%d] = "%s"n", iObj,
  1722. uiChrType==0 ? "444" : (uiChrType==1 ? "422" : "420"));
  1723. /*************/
  1724. }
  1725. // output file directory
  1726. pchOutBmpDir = new char [256];
  1727. nextValidLine (pfPara, pnLine);
  1728. fscanf (pfPara, "%100s", pchOutBmpDir);
  1729. // output bitstream file
  1730. pchOutStrFile = new char [256];
  1731. nextValidLine (pfPara, pnLine);
  1732. fscanf (pfPara, "%100s", pchOutStrFile);
  1733. /*************/
  1734. fprintf(pfOut, "Output.Directory.Bitstream = "%s"n", pchOutStrFile);
  1735. fprintf(pfOut, "Output.Directory.DecodedFrames = "%s"n", pchOutBmpDir);
  1736. /*************/
  1737. // statistics dumping options
  1738. nextValidLine (pfPara, pnLine);
  1739. for (iObj = 0; iObj < nVO; iObj++) {
  1740. if (fscanf (pfPara, "%d", &rgbDumpMB [iObj]) != 1) {
  1741. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1742. fatal_error("Conversion aborted");
  1743. }
  1744. my_assert (rgbDumpMB [iObj] == 0 || rgbDumpMB [iObj] == 1);
  1745. /*************/
  1746. fprintf(pfOut, "Trace.DetailedDump.Enable [%d] = %dn", iObj, rgbDumpMB [iObj]);
  1747. /*************/
  1748. }
  1749. // trace file options
  1750. nextValidLine (pfPara, pnLine);
  1751. for (iObj = 0; iObj < nVO; iObj++) {
  1752. if (fscanf (pfPara, "%d", &rgbTrace [iObj]) != 1) {
  1753. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1754. fatal_error("Conversion aborted");
  1755. }
  1756. my_assert (rgbTrace [iObj] == 0 || rgbTrace [iObj] == 1);
  1757. /*************/
  1758. fprintf(pfOut, "Trace.CreateFile.Enable [%d] = %dn", iObj, rgbTrace [iObj]);
  1759. /*************/
  1760. }
  1761. // sprite info
  1762. // sprite usage
  1763. nextValidLine (pfPara, pnLine);
  1764. for (iObj = 0; iObj < nVO; iObj++) {
  1765. if (fscanf (pfPara, "%d", &rguiSpriteUsage [iObj]) != 1) {
  1766. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1767. fatal_error("Conversion aborted");
  1768. }
  1769. my_assert ((rguiSpriteUsage [iObj] == 0) || (rguiSpriteUsage [iObj] == 1)); // only support static sprite at the moment
  1770. if (rgbScalability [iObj] == TRUE)
  1771. my_assert (rguiSpriteUsage [iObj] == 0);
  1772. /*************/
  1773. fprintf(pfOut, "Sprite.Type [%d] = "%s"n", iObj, rguiSpriteUsage [iObj]==0 ? "None" : "Static");
  1774. /*************/
  1775. }
  1776. // warping accuracy
  1777. nextValidLine (pfPara, pnLine);
  1778. for (iObj = 0; iObj < nVO; iObj++) {
  1779. if (fscanf (pfPara, "%d", &rguiWarpingAccuracy [iObj]) != 1) {
  1780. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1781. fatal_error("Conversion aborted");
  1782. }
  1783. if (rguiSpriteUsage [iObj] != 0)
  1784. my_assert (rguiWarpingAccuracy [iObj] == 0 || rguiWarpingAccuracy [iObj] == 1 || rguiWarpingAccuracy [iObj] == 2 || rguiWarpingAccuracy [iObj] == 3);
  1785. /*************/
  1786. fprintf(pfOut, "Sprite.WarpAccuracy [%d] = "1/%d"n", iObj, 1<<(rguiWarpingAccuracy [iObj]+1));
  1787. /*************/
  1788. }
  1789. // number of points
  1790. nextValidLine (pfPara, pnLine);
  1791. for (iObj = 0; iObj < nVO; iObj++) {
  1792. if (fscanf (pfPara, "%d", &rgiNumPnts [iObj]) != 1) {
  1793. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1794. fatal_error("Conversion aborted");
  1795. }
  1796. if (rgbScalability [iObj] == TRUE)
  1797. my_assert (rgiNumPnts [iObj] == -1);
  1798. if (rguiSpriteUsage [iObj] == 1) 
  1799. my_assert (rgiNumPnts [iObj] == 0 ||
  1800. rgiNumPnts [iObj] == 1 ||
  1801. rgiNumPnts [iObj] == 2 ||
  1802. rgiNumPnts [iObj] == 3 ||
  1803. rgiNumPnts [iObj] == 4);
  1804. /*************/
  1805. fprintf(pfOut, "Sprite.Points [%d] = %dn", iObj, rgiNumPnts [iObj]);
  1806. /*************/
  1807. }
  1808. // sprite directory
  1809. pchSptDir = new char [256];
  1810. nextValidLine (pfPara, pnLine);
  1811. fscanf (pfPara, "%100s", pchSptDir);
  1812. // point directory
  1813. pchSptPntDir = new char [256];
  1814. nextValidLine (pfPara, pnLine);
  1815. fscanf (pfPara, "%100s", pchSptPntDir);
  1816. /*************/
  1817. fprintf(pfOut, "Sprite.Directory = "%s"n", pchSptDir);
  1818. fprintf(pfOut, "Sprite.Points.Directory = "%s"n", pchSptPntDir);
  1819. /*************/
  1820. //  sprite reconstruction mode, i.e. Low-latency-sprite-enable
  1821. nextValidLine (pfPara, pnLine);
  1822. for (iObj = 0; iObj < nVO; iObj++)
  1823. {
  1824. UInt uiSptMode;
  1825. if (fscanf (pfPara, "%d", &uiSptMode) != 1) {
  1826. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1827. fatal_error("Conversion aborted");
  1828. }
  1829. else {
  1830. my_assert (uiSptMode == 0 || uiSptMode == 1 );
  1831. rgSpriteMode[iObj] = (SptMode) uiSptMode;
  1832. }
  1833. /*************/
  1834. fprintf(pfOut, "Sprite.Mode [%d] = "%s"n", iObj,
  1835. uiSptMode==0 ? "Basic" : (uiSptMode==1 ? "LowLatency" : (uiSptMode==2 ? "PieceObject" : "PieceUpdate")));
  1836. /*************/
  1837. }
  1838. fclose(pfPara);
  1839. if(argc==3)
  1840. fclose(pfOut);
  1841. for (Int iLayer = BASE_LAYER; iLayer <= ENHN_LAYER; iLayer++) {
  1842. delete [] rguiRateControl [iLayer];
  1843. delete [] rguiBitsBudget [iLayer];
  1844. delete [] rgbErrorResilientDisable [iLayer];
  1845. delete [] rgbDataPartitioning [iLayer];
  1846. delete [] rgbReversibleVlc [iLayer];
  1847. delete [] rgiVPBitTh [iLayer];
  1848. // for texture coding
  1849. delete [] rgfQuant [iLayer];
  1850. delete [] rgiIntraDCSwitchingThr [iLayer];
  1851. delete [] rgiIStep [iLayer]; // error signal quantization stepsize
  1852. delete [] rgiPStep [iLayer]; // error signal quantization stepsize
  1853. delete [] rgiIStepAlpha [iLayer]; // error signal quantization stepsize
  1854. delete [] rgiPStepAlpha [iLayer]; // error signal quantization stepsize
  1855. delete [] rgiBStepAlpha [iLayer];
  1856. delete [] rgbNoGrayQuantUpdate [iLayer]; //discouple change of gray quant with tex. quant
  1857. delete [] rgiStepBCode [iLayer]; // error signal quantization stepsize
  1858. delete [] rgbLoadIntraMatrix [iLayer];
  1859. delete [] rgbLoadInterMatrix [iLayer];
  1860. delete [] rgbLoadIntraMatrixAlpha [iLayer];
  1861. delete [] rgbLoadInterMatrixAlpha [iLayer];
  1862. for (iObj = 0; iObj < nVO; iObj++) {
  1863. delete [] rgppiIntraQuantizerMatrix  [iLayer] [iObj];
  1864. delete [] rgppiInterQuantizerMatrix  [iLayer] [iObj];
  1865. delete [] rgppiIntraQuantizerMatrixAlpha  [iLayer] [iObj];
  1866. delete [] rgppiInterQuantizerMatrixAlpha  [iLayer] [iObj];
  1867. if(pchMVFileName [iLayer] [iObj]!=NULL)
  1868. delete [] pchMVFileName [iLayer] [iObj];
  1869. }
  1870. delete [] rgppiIntraQuantizerMatrix [iLayer];
  1871. delete [] rgppiInterQuantizerMatrix [iLayer];
  1872. delete [] rgppiIntraQuantizerMatrixAlpha [iLayer];
  1873. delete [] rgppiInterQuantizerMatrixAlpha [iLayer];
  1874. delete [] pchMVFileName [iLayer];
  1875. // for motion esti.
  1876. delete [] rgbOriginalME [iLayer];
  1877. delete [] rgbAdvPredDisable [iLayer];
  1878. delete [] rguiSearchRange [iLayer];
  1879. // for interlace coding
  1880. delete [] rgbInterlacedCoding [iLayer];
  1881. delete [] rgbTopFieldFirst [iLayer];
  1882. delete [] rgiDirectModeRadius [iLayer];
  1883. delete [] rgiMVFileUsage [iLayer];
  1884. delete [] rgdFrameFrequency [iLayer];
  1885. delete [] rgbAlternateScan [iLayer];
  1886. delete [] rgbComplexityEstimationDisable [iLayer];
  1887. delete [] rgbOpaque [iLayer];
  1888. delete [] rgbTransparent [iLayer];
  1889. delete [] rgbIntraCAE [iLayer];
  1890. delete [] rgbInterCAE [iLayer];
  1891. delete [] rgbNoUpdate [iLayer];
  1892. delete [] rgbUpsampling [iLayer];
  1893. delete [] rgbIntraBlocks [iLayer];
  1894. delete [] rgbInterBlocks [iLayer];
  1895. delete [] rgbInter4vBlocks [iLayer];
  1896. delete [] rgbNotCodedBlocks [iLayer];
  1897. delete [] rgbDCTCoefs [iLayer];
  1898. delete [] rgbDCTLines [iLayer];
  1899. delete [] rgbVLCSymbols [iLayer];
  1900. delete [] rgbVLCBits [iLayer];
  1901. delete [] rgbAPM [iLayer];
  1902. delete [] rgbNPM [iLayer];
  1903. delete [] rgbInterpolateMCQ [iLayer];
  1904. delete [] rgbForwBackMCQ [iLayer];
  1905. delete [] rgbHalfpel2 [iLayer];
  1906. delete [] rgbHalfpel4 [iLayer];
  1907. delete [] rguiVolControlParameters [iLayer];
  1908. delete [] rguiChromaFormat [iLayer];
  1909. delete [] rguiLowDelay [iLayer];
  1910. delete [] rguiVBVParams [iLayer];
  1911. delete [] rguiBitRate [iLayer];
  1912. delete [] rguiVbvBufferSize [iLayer];
  1913. delete [] rguiVbvBufferOccupany [iLayer];
  1914. }
  1915. delete [] rgbScalability;
  1916.     delete [] rgbSpatialScalability;
  1917. delete [] rgiTemporalScalabilityType;
  1918. delete [] rgiEnhancementType;
  1919. // for mask coding, should fill in later on
  1920. delete [] rgfAlphaUsage; // alpha usage for each VO.  0: binary, 1: 8-bit
  1921. delete [] rgbShapeOnly;
  1922. delete [] rgiBinaryAlphaTH;
  1923. delete [] rgiBinaryAlphaRR; // Added for error resilient mode by Toshiba(1997-11-14)
  1924. delete [] rgbNoCrChange;
  1925. delete [] rgbDeblockFilterDisable;
  1926. delete [] rgfChrType;
  1927. delete [] rgiNumBbetweenPVOP; // no of B-VOPs between P-VOPs
  1928. delete [] rgiNumPbetweenIVOP; // no of P-VOPs between I-VOPs
  1929. //added to encode GOV header by SONY 980212
  1930. delete [] rgiGOVperiod;
  1931. //980212
  1932. delete [] rgiTSRate;
  1933. delete [] rgiEnhcTSRate; // added by Norio Ito
  1934. delete [] rgbAllowSkippedPMBs;
  1935. // rounding control
  1936. delete [] rgbRoundingControlDisable;
  1937. delete [] rgiInitialRoundingType;
  1938. // sprite
  1939. delete [] rguiSpriteUsage;
  1940. delete [] rguiWarpingAccuracy;
  1941. delete [] rgiNumPnts;
  1942. delete [] rgbDumpMB;
  1943. delete [] rgbTrace;
  1944. delete [] rgSpriteMode;
  1945. delete pchPrefix;
  1946. delete pchBmpDir;
  1947. delete pchOutBmpDir;
  1948. delete pchOutStrFile;
  1949. delete pchSptDir;
  1950. delete pchSptPntDir;
  1951. return 0;
  1952. }
  1953. Void nextValidLine (FILE *pfPara, UInt* pnLine) {
  1954. Int chBoL = 0;
  1955. Char pchPlaceHolder[200];
  1956. fgets (pchPlaceHolder, 200, pfPara); // get the next line 
  1957. (*pnLine)++;
  1958. while (feof (pfPara) == 0 && (chBoL = fgetc(pfPara)) == '%') {
  1959. // skip a line
  1960. fgets (pchPlaceHolder, 200, pfPara); // get the next line 
  1961. (*pnLine)++;
  1962. }
  1963. ungetc (chBoL, pfPara);
  1964. }
  1965. ///// WAVELET VTC: end ///////////////////////////////
  1966. Void readBoolVOLFlag (Bool * rgbTable [2], UInt nVO, FILE * pfCfg, UInt * pnLine, Bool bAnyScalability)
  1967. {
  1968. nextValidLine (pfCfg, pnLine);
  1969. for (UInt i = 0; i < nVO; ++i) {
  1970. if (fscanf (pfCfg, "%d", & rgbTable [BASE_LAYER] [i]) != 1) {
  1971. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1972. fatal_error("Conversion aborted");
  1973. }
  1974. my_assert (rgbTable [BASE_LAYER] [i] == 0 || rgbTable [BASE_LAYER] [i] == 1);
  1975. }
  1976. if (bAnyScalability) {
  1977. for (UInt i = 0; i < nVO; ++i) {
  1978. if (fscanf (pfCfg, "%d", & rgbTable [ENHN_LAYER] [i]) != 1) {
  1979. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1980. fatal_error("Conversion aborted");
  1981. }
  1982. my_assert (rgbTable [ENHN_LAYER] [i] == 0 || rgbTable [ENHN_LAYER] [i] == 1);
  1983. }
  1984. }
  1985. }
  1986. Void readItem(UInt *rguiTable [2], UInt nVO, FILE * pfCfg, UInt * pnLine, Bool bAnyScalability)
  1987. {
  1988. nextValidLine (pfCfg, pnLine);
  1989. for (UInt i = 0; i < nVO; ++i) {
  1990. if (fscanf (pfCfg, "%d", & rguiTable [BASE_LAYER] [i]) != 1) {
  1991. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  1992. fatal_error("Conversion aborted");
  1993. }
  1994. }
  1995. if (bAnyScalability) 
  1996. {
  1997. for (UInt i = 0; i < nVO; ++i) {
  1998. if (fscanf (pfCfg, "%d", & rguiTable [ENHN_LAYER] [i]) != 1) {
  1999. fprintf(stderr, "wrong parameter file format on line %dn", *pnLine);
  2000. fatal_error("Conversion aborted");
  2001. }
  2002. }
  2003. }
  2004. }
  2005. Void fatal_error(char *pchError, Bool bFlag)
  2006. {
  2007. if(bFlag)
  2008. return;
  2009. fprintf(stderr, "Error: %sn", pchError);
  2010. exit(1);
  2011. }