📄 convertpar.cpp
字号:
/*************************************************************************
This software module was originally developed by
Simon Winder (swinder@microsoft.com), Microsoft Corporation
in the course of development of the MPEG-4 Video (ISO/IEC 14496-2).
This software module is an implementation of a part of one or more MPEG-4 Video tools
as specified by the MPEG-4 Video.
ISO/IEC gives users of the MPEG-4 Video free license to this software module or modifications
thereof for use in hardware or software products claiming conformance to the MPEG-4 Video.
Those intending to use this software module in hardware or software products are advised that its use may infringe existing patents.
The original developer of this software module and his/her company,
the subsequent editors and their companies,
and ISO/IEC have no liability for use of this software module or modifications thereof in an implementation.
Copyright is not released for non MPEG-4 Video conforming products.
Sharp retains full right to use the code for his/her own purpose,
assign or donate the code to a third party and to inhibit third parties from using the code for non <MPEG standard> conforming products.
This copyright notice must be included in all copies or derivative works.
Copyright (c) 1997.
*************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef unsigned int UInt;
typedef int Int;
typedef void Void;
typedef int Bool;
typedef double Double;
typedef enum {Q_H263, Q_MPEG} Quantizer;
typedef enum AlphaUsage {RECTANGLE, ONE_BIT, EIGHT_BIT} AlphaUsage;
typedef enum ChromType {FOUR_FOUR_FOUR, FOUR_TWO_TWO, FOUR_TWO_ZERO} ChromType;
typedef enum {BASIC_SPRITE, LOW_LATENCY, PIECE_OBJECT, PIECE_UPDATE} SptMode;
typedef char Char;
Void nextValidLine (FILE *pfPara, UInt* pnLine);
Void readBoolVOLFlag (Bool * rgbTable [2], UInt nVO, FILE * pfCfg, UInt * pnLine, Bool bAnyScalability);
Void readItem(UInt *rguiTable [2], UInt nVO, FILE * pfCfg, UInt * pnLine, Bool bAnyScalability);
#define BASE_LAYER 0
#define ENHN_LAYER 1
#define NO_SCALABILITY 0
#define TEMPORAL_SCALABILITY 1
#define SPATIAL_SCALABILITY 2
#define FALSE 0
#define TRUE 1
#define BLOCK_SQUARE_SIZE 64
#define RC_MPEG4 1
#define RC_TM5 3
Void fatal_error(char *pchError, Bool bFlag = FALSE);
void my_assert(int iFlag)
{
if(!iFlag)
fatal_error("Some assert failed! Check original par file format.\n");
}
int main (Int argc, Char* argv[])
{
UInt nLine = 1;
UInt* pnLine = &nLine;
FILE *pfPara;
FILE *pfOut = stdout;
if (argc != 2 && argc !=3)
{
fprintf (stderr,"Usage: %s old_par_file [new_par_file]\n", argv[0]);
fatal_error("Conversion aborted");
}
if ((pfPara = fopen (argv[1], "r")) == NULL )
{
fprintf (stderr,"Source parameter file not found\n");
fatal_error("Conversion aborted");
}
if(argc==3)
{
if ((pfOut = fopen (argv[2], "w")) == NULL )
{
fprintf (stderr,"Could not open %s for writing.\n", argv[2]);
fatal_error("Conversion aborted");
}
}
// all the parameters to the encoder
Int iVersion;
Int iVTCFlag;
UInt uiFrmWidth, uiFrmHeight;
UInt firstFrm, lastFrm;
Bool bNot8Bit;
UInt uiQuantPrecision;
UInt nBits;
UInt firstVO, lastVO;
UInt nVO;
UInt uiFrmWidth_SS,uiFrmHeight_SS;
UInt uiHor_sampling_m,uiHor_sampling_n;
UInt uiVer_sampling_m,uiVer_sampling_n;
Bool bAnyScalability;
Int iSpatialOption;
char *pchPrefix;
char *pchBmpDir;
char *pchOutBmpDir;
char *pchOutStrFile;
char *pchSptDir;
char *pchSptPntDir;
Int *rgiTemporalScalabilityType;
Bool *rgbSpatialScalability;
Bool *rgbScalability;
Int *rgiEnhancementType;
AlphaUsage *rgfAlphaUsage;
Bool *rgbShapeOnly;
Int *rgiBinaryAlphaTH;
Int *rgbNoCrChange;
Int *rgiBinaryAlphaRR;
Bool *rgbRoundingControlDisable;
Int *rgiInitialRoundingType;
Int *rgiNumPbetweenIVOP;
Int *rgiNumBbetweenPVOP;
Int *rgiGOVperiod;
Bool *rgbDeblockFilterDisable;
Int *rgiTSRate;
Int *rgiEnhcTSRate;
ChromType *rgfChrType;
Bool *rgbAllowSkippedPMBs;
SptMode *rgSpriteMode;
Bool *rgbDumpMB;
Bool *rgbTrace;
UInt *rguiSpriteUsage;
UInt *rguiWarpingAccuracy;
Int *rgiNumPnts;
UInt *rguiRateControl [2];
UInt *rguiBitsBudget [2];
Bool *rgbAdvPredDisable [2];
Bool *rgbErrorResilientDisable [2];
Bool *rgbDataPartitioning [2];
Bool *rgbReversibleVlc [2];
Int *rgiVPBitTh [2];
Bool *rgbInterlacedCoding [2];
Quantizer* rgfQuant [2];
Bool *rgbLoadIntraMatrix [2];
Int **rgppiIntraQuantizerMatrix [2];
Bool *rgbLoadInterMatrix [2];
Int **rgppiInterQuantizerMatrix [2];
Bool *rgiIntraDCSwitchingThr [2];
Int *rgiIStep [2];
Int *rgiPStep [2];
Int *rgiStepBCode [2];
Bool *rgbLoadIntraMatrixAlpha [2];
Int **rgppiIntraQuantizerMatrixAlpha [2];
Bool *rgbLoadInterMatrixAlpha [2];
Int **rgppiInterQuantizerMatrixAlpha [2];
Int *rgiIStepAlpha [2];
Int *rgiPStepAlpha [2];
Int *rgiBStepAlpha [2];
Bool *rgbNoGrayQuantUpdate [2];
UInt *rguiSearchRange [2];
Bool *rgbOriginalME [2];
Bool *rgbComplexityEstimationDisable [2];
Bool *rgbOpaque [2];
Bool *rgbTransparent [2];
Bool *rgbIntraCAE [2];
Bool *rgbInterCAE [2];
Bool *rgbNoUpdate [2];
Bool *rgbUpsampling [2];
Bool *rgbIntraBlocks [2];
Bool *rgbInterBlocks [2];
Bool *rgbInter4vBlocks [2];
Bool *rgbNotCodedBlocks [2];
Bool *rgbDCTCoefs [2];
Bool *rgbDCTLines [2];
Bool *rgbVLCSymbols [2];
Bool *rgbVLCBits [2];
Bool *rgbAPM [2];
Bool *rgbNPM [2];
Bool *rgbInterpolateMCQ [2];
Bool *rgbForwBackMCQ [2];
Bool *rgbHalfpel2 [2];
Bool *rgbHalfpel4 [2];
UInt *rguiVolControlParameters[2];
UInt *rguiChromaFormat[2];
UInt *rguiLowDelay[2];
UInt *rguiVBVParams[2];
UInt *rguiBitRate[2];
UInt *rguiVbvBufferSize[2];
UInt *rguiVbvBufferOccupany[2];
Double *rgdFrameFrequency[2];
Bool *rgbTopFieldFirst [2];
Bool *rgbAlternateScan [2];
Int *rgiDirectModeRadius [2];
Int *rgiMVFileUsage[2];
char **pchMVFileName[2];
UInt iObj;
// verify version number
nextValidLine (pfPara, pnLine);
if ( fscanf (pfPara, "%u", &iVersion) != 1 ) {
fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine);
fatal_error("Conversion aborted");
}
if (iVersion != 813 && iVersion != 812 && iVersion != 814 && iVersion != 815) {
// version 812 does not have rounding control flags
// version 813 does not have VOL control parameters
// version 814 does not have skipped mb enable
fprintf(stderr, "unknown parameter file version\n");
fatal_error("Conversion aborted");
}
/*************/
fprintf(pfOut,"!!!MS!!!\n\n// This is the new parameter file format. The parameters in this file can be\n// specified in any order.\n");
fprintf(pfOut,"\nVersion = 901\n\n");
/*************/
///// WAVELET VTC: begin ///////////////////////////////
// sarnoff: wavelet visual texture coding
nextValidLine (pfPara, pnLine);
if ( fscanf (pfPara, "%d", &iVTCFlag) != 1) {
fprintf(stderr, "wrong parameter VTC flag on line %d\n", *pnLine);
fatal_error("Conversion aborted");
}
fatal_error("iVTCFlag must be 0 or 1", iVTCFlag==0 || iVTCFlag==1);
// read VTC control file
char VTCCtlFile[80];
nextValidLine (pfPara, pnLine);
if ( fscanf (pfPara, "%s", VTCCtlFile) != 1) {
fprintf(stderr, "wrong parameter VTC flag on line %d\n", *pnLine);
fatal_error("Conversion aborted");
}
/*************/
fprintf(pfOut, "VTC.Enable = %d\nVTC.Filename = \"%s\"\n", iVTCFlag, VTCCtlFile);
/*************/
if (iVTCFlag==1) {
fclose(pfPara);
if(argc==3)
fclose(pfOut);
return 0;
}
///// WAVELET VTC: end ///////////////////////////////
// frame size code
nextValidLine (pfPara, pnLine);
if (fscanf (pfPara, "%u", &uiFrmWidth) != 1) {
fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine);
fatal_error("Conversion aborted");
}
nextValidLine (pfPara, pnLine);
if (fscanf (pfPara, "%u", &uiFrmHeight) != 1) {
fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine);
fatal_error("Conversion aborted");
}
// first and last frame number
nextValidLine (pfPara, pnLine);
if ( fscanf (pfPara, "%u", &firstFrm) != 1) {
fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine);
fatal_error("Conversion aborted");
}
nextValidLine (pfPara, pnLine);
if ( fscanf (pfPara, "%u", &lastFrm) != 1) {
fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine);
fatal_error("Conversion aborted");
}
my_assert (lastFrm >= firstFrm);
/*************/
fprintf(pfOut, "\nSource.Width = %d\nSource.Height = %d\nSource.FirstFrame = %d\nSource.LastFrame = %d\n",
uiFrmWidth, uiFrmHeight, firstFrm, lastFrm);
/*************/
// NBIT: not 8-bit flag
nextValidLine (pfPara, pnLine);
if ( fscanf (pfPara, "%d", &bNot8Bit) != 1) {
fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine);
fatal_error("Conversion aborted");
}
my_assert (bNot8Bit==0 || bNot8Bit==1);
// NBIT: quant precision
nextValidLine (pfPara, pnLine);
if ( fscanf (pfPara, "%d", &uiQuantPrecision) != 1) {
fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine);
fatal_error("Conversion aborted");
}
if (bNot8Bit==0) {
uiQuantPrecision = 5;
}
// NBIT: number of bits per pixel
nextValidLine (pfPara, pnLine);
if ( fscanf (pfPara, "%d", &nBits) != 1) {
fprintf(stderr, "wrong parameter file format on line %d\n", *pnLine);
fatal_error("Conversion aborted");
}
my_assert (nBits>=4 && nBits<=12);
if (bNot8Bit==0) {
nBits = 8;
}
/*************/
fprintf(pfOut, "Source.BitsPerPel = %d\nNot8Bit.QuantPrecision = %d\nNot8Bit.Enable = %d\n",
nBits, uiQuantPrecision, bNot8Bit);
/*************/
// object indexes
nextValidLine (pfPara, pnLine);
if ( fscanf (pfPara, "%u", &firstVO) != 1) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -