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

📄 param.c

📁 These are all the utilities you need to generate MPEG-I movies on a UNIX box with full motion video
💻 C
📖 第 1 页 / 共 2 页
字号:
/*===========================================================================* * param.c								     * *									     * *	Procedures to read in parameter file				     * *									     * * EXPORTED PROCEDURES:							     * *	ReadParamFile							     * *	GetNthInputFileName						     * *									     * *===========================================================================*//* * Copyright (c) 1993 The Regents of the University of California. * All rights reserved. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose, without fee, and without written agreement is * hereby granted, provided that the above copyright notice and the following * two paragraphs appear in all copies of this software. * * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. *//*   *  $Header: /n/picasso/users/keving/encode/src/RCS/param.c,v 1.2 1993/07/22 22:23:43 keving Exp keving $ *  $Log: param.c,v $ * Revision 1.2  1993/07/22  22:23:43  keving * nothing * * Revision 1.1  1993/06/30  20:06:09  keving * nothing * *//*==============* * HEADER FILES * *==============*/#include "all.h"#include "mtypes.h"#include "mpeg.h"#include "search.h"#include "prototypes.h"#include "parallel.h"#include "param.h"#include "readframe.h"#include "fsize.h"/*===========* * CONSTANTS * *===========*/#define INPUT_ENTRY_BLOCK_SIZE   128#define FIRST_OPTION 0#define OPTION_GOP  0#define OPTION_PATTERN 1#define OPTION_PIXEL 2#define OPTION_PQSCALE 3#define OPTION_OUTPUT 4#define OPTION_RANGE 5#define OPTION_PSEARCH_ALG 6#define OPTION_IQSCALE 7#define OPTION_INPUT_DIR 8#define OPTION_INPUT_CONVERT 9#define OPTION_INPUT 10#define OPTION_BQSCALE 11#define OPTION_BASE_FORMAT 12#define OPTION_SPF 13#define OPTION_BSEARCH_ALG 14#define OPTION_REF_FRAME    15#define LAST_OPTION 15/* YUV_SIZE not required, so put after LAST_OPTION */#define OPTION_IO_CONVERT   16#define OPTION_SLAVE_CONVERT	17#define OPTION_YUV_SIZE	18/*=======================* * STRUCTURE DEFINITIONS * *=======================*/typedef struct InputFileEntryStruct {    char    left[256];    char    right[256];    boolean glob;	    /* if FALSE, left is complete name */    int	    startID;    int	    endID;    int	    skip;    int	    numPadding;	    /* -1 if there is none */    int	    numFiles;} InputFileEntry;/*==================* * STATIC VARIABLES * *==================*/static InputFileEntry **inputFileEntries;static int numInputFileEntries = 0;static int  maxInputFileEntries;/*==================* * GLOBAL VARIABLES * *==================*/extern char currentPath[MAXPATHLEN];extern char currentGOPPath[MAXPATHLEN];extern char currentFramePath[MAXPATHLEN];char	outputFileName[256];int numInputFiles = 0;char inputConversion[1024];char ioConversion[1024];char slaveConversion[1024];boolean optionSeen[OPTION_YUV_SIZE+1];int numMachines;char	machineName[MAX_MACHINES][256];char	userName[MAX_MACHINES][256];char	executable[MAX_MACHINES][1024];char	remoteParamFile[MAX_MACHINES][1024];boolean	remote[MAX_MACHINES];/*===============================* * INTERNAL PROCEDURE prototypes * *===============================*/static void	ReadInputFileNames _ANSI_ARGS_((FILE *fpointer,						char *endInput));static char	*SkipSpacesTabs _ANSI_ARGS_((char *start));static void	ReadMachineNames _ANSI_ARGS_((FILE *fpointer));/*=====================* * EXPORTED PROCEDURES * *=====================*//*===========================================================================* * * ReadParamFile * *	read the parameter file *	function is ENCODE_FRAMES, COMBINE_GOPS, or COMBINE_FRAMES, and *	    will slightly modify the procedure's behavior as to what it *	    is looking for in the parameter file * * RETURNS:	TRUE if the parameter file was read correctly; FALSE if not * * SIDE EFFECTS:    sets parameters accordingly, as well as machine info for *		    parallel execution and input file names * *===========================================================================*/booleanReadParamFile(fileName, function)    char *fileName;    int function;{    FILE *fpointer;    char    input[256];    char    *charPtr;    boolean yuvUsed = FALSE;    static char *optionText[LAST_OPTION+1] = { "GOP", "PATTERN", "PIXEL", "PQSCALE",	"OUTPUT", "RANGE", "PSEARCH_ALG", "IQSCALE", "INPUT_DIR",	"INPUT_CONVERT", "INPUT", "BQSCALE", "BASE_FILE_FORMAT",	"SLICES_PER_FRAME", "BSEARCH_ALG", "REFERENCE_FRAME" };    register int index;    if ( (fpointer = fopen(fileName, "r")) == NULL ) {	fprintf(stderr, "Error:  Cannot open parameter file:  %s\n", fileName);	return FALSE;    }    /* should set defaults */    numInputFiles = 0;    numMachines = 0;    sprintf(currentPath, ".");    sprintf(currentGOPPath, ".");    sprintf(currentFramePath, ".");    SetRemoteShell("rsh");    switch(function) {	case ENCODE_FRAMES:	    for ( index = FIRST_OPTION; index <= LAST_OPTION; index++ ) {		optionSeen[index] = FALSE;	    }	    optionSeen[OPTION_YUV_SIZE] = FALSE;	    optionSeen[OPTION_IO_CONVERT] = FALSE;	    optionSeen[OPTION_SLAVE_CONVERT] = FALSE;	    break;	case COMBINE_GOPS:	    for ( index = FIRST_OPTION; index <= LAST_OPTION; index++ ) {		optionSeen[index] = TRUE;	    }	    optionSeen[OPTION_YUV_SIZE] = FALSE;	    optionSeen[OPTION_OUTPUT] = FALSE;	    break;	case COMBINE_FRAMES:	    for ( index = FIRST_OPTION; index <= LAST_OPTION; index++ ) {		optionSeen[index] = TRUE;	    }	    optionSeen[OPTION_GOP] = FALSE;	    optionSeen[OPTION_OUTPUT] = FALSE;	    optionSeen[OPTION_YUV_SIZE] = FALSE;	    break;    }    while ( fgets(input, 256, fpointer) != NULL ) {	if ( input[0] == '#' ) {	    /* skip comments */	    continue;	}	input[strlen(input)-1] = '\0';	/* get rid of newline */	switch(input[0]) {	    case 'G':		if ( strncmp(input, "GOP_SIZE", 8) == 0 ) {		    charPtr = SkipSpacesTabs(&input[8]);		    SetGOPSize(atoi(charPtr));		    optionSeen[OPTION_GOP] = TRUE;		} else if ( strncmp(input, "GOP_INPUT_DIR", 13) == 0 ) {		    charPtr = SkipSpacesTabs(&input[13]);		    strcpy(currentGOPPath, charPtr);		} else if ( strncmp(input, "GOP_INPUT", 9) == 0 ) {		    if ( function == COMBINE_GOPS ) {			ReadInputFileNames(fpointer, "GOP_END_INPUT");		    }		}		break;	    case 'F':		if ( strncmp(input, "FRAME_INPUT_DIR", 15) == 0 ) {		    charPtr = SkipSpacesTabs(&input[15]);		    strcpy(currentFramePath, charPtr);		} else if ( strncmp(input, "FRAME_INPUT", 11) == 0 ) {		    if ( function == COMBINE_FRAMES ) {			ReadInputFileNames(fpointer, "FRAME_END_INPUT");		    }		} else if ( strncmp(input, "FORCE_I_ALIGN", 13) == 0 ) {		    forceIalign = TRUE;		}		break;	    case 'P':		if ( strncmp(input, "PATTERN", 7) == 0 ) {		    charPtr = SkipSpacesTabs(&input[7]);		    SetFramePattern(charPtr);		    optionSeen[OPTION_PATTERN] = TRUE;		} else if ( strncmp(input, "PIXEL", 5) == 0 ) {		    charPtr = SkipSpacesTabs(&input[5]);		    SetPixelSearch(charPtr);		    optionSeen[OPTION_PIXEL] = TRUE;		} else if ( strncmp(input, "PQSCALE", 7) == 0 ) {		    charPtr = SkipSpacesTabs(&input[7]);		    SetPQScale(atoi(charPtr));		    optionSeen[OPTION_PQSCALE] = TRUE;		} else if ( strncmp(input, "PSEARCH_ALG", 11) == 0 ) {		    charPtr = SkipSpacesTabs(&input[11]);		    SetPSearchAlg(charPtr);		    optionSeen[OPTION_PSEARCH_ALG] = TRUE;		} else if ( strncmp(input, "PARALLEL_TEST_FRAMES", 20) == 0 ) {		    charPtr = SkipSpacesTabs(&input[20]);		    parallelTestFrames = atoi(charPtr);		} else if ( strncmp(input, "PARALLEL_TIME_CHUNKS", 20) == 0 ) {		    charPtr = SkipSpacesTabs(&input[20]);		    parallelTimeChunks = atoi(charPtr);		} else if ( strncmp(input, "PARALLEL_PERFECT", 16) == 0 ) {		    SetParallelPerfect();		} else if ( strncmp(input, "PARALLEL", 8) == 0 ) {		    ReadMachineNames(fpointer);		}		break;	    case 'O':		if ( strncmp(input, "OUTPUT", 6) == 0 ) {		    charPtr = SkipSpacesTabs(&input[6]);		    if ( whichGOP == -1 ) {			strcpy(outputFileName, charPtr);		    } else {			sprintf(outputFileName, "%s.gop.%d",				charPtr, whichGOP);		    }		    optionSeen[OPTION_OUTPUT] = TRUE;		}		break;	    case 'R':		if ( strncmp(input, "RANGE", 5) == 0 ) {		    charPtr = SkipSpacesTabs(&input[5]);		    SetSearchRange(atoi(charPtr));		    optionSeen[OPTION_RANGE] = TRUE;		} else if ( strncmp(input, "REFERENCE_FRAME", 15) == 0 ) {		    charPtr = SkipSpacesTabs(&input[15]);		    SetReferenceFrameType(charPtr);		    optionSeen[OPTION_REF_FRAME] = TRUE;		} else if ( strncmp(input, "RSH", 3) == 0 ) {		    charPtr = SkipSpacesTabs(&input[3]);		    SetRemoteShell(charPtr);		}		break;	    case 'S':		if ( strncmp(input, "SLICES_PER_FRAME", 16) == 0 ) {		    charPtr = SkipSpacesTabs(&input[16]);		    SetSlicesPerFrame(atoi(charPtr));		    optionSeen[OPTION_SPF] = TRUE;		} else if ( strncmp(input, "SLAVE_CONVERT", 13) == 0 ) {		    charPtr = SkipSpacesTabs(&input[13]);		    strcpy(slaveConversion, charPtr);		    optionSeen[OPTION_SLAVE_CONVERT] = TRUE;		}		break;	    case 'I':		if ( strncmp(input, "IQSCALE", 7) == 0 ) {		    charPtr = SkipSpacesTabs(&input[7]);		    SetIQScale(atoi(charPtr));		    optionSeen[OPTION_IQSCALE] = TRUE;		} else if ( strncmp(input, "INPUT_DIR", 9) == 0 ) {		    charPtr = SkipSpacesTabs(&input[9]);		    strcpy(currentPath, charPtr);		    optionSeen[OPTION_INPUT_DIR] = TRUE;		} else if ( strncmp(input, "INPUT_CONVERT", 13) == 0 ) {		    charPtr = SkipSpacesTabs(&input[13]);		    strcpy(inputConversion, charPtr);		    optionSeen[OPTION_INPUT_CONVERT] = TRUE;		} else if ( strcmp(input, "INPUT") == 0 ) {   /* yes, strcmp */		    if ( function == ENCODE_FRAMES ) {			ReadInputFileNames(fpointer, "END_INPUT");			optionSeen[OPTION_INPUT] = TRUE;		    }		} else if ( strncmp(input, "IO_SERVER_CONVERT", 17) == 0 ) {		    charPtr = SkipSpacesTabs(&input[17]);		    strcpy(ioConversion, charPtr);		    optionSeen[OPTION_IO_CONVERT] = TRUE;		}		break;	    case 'B':		if ( strncmp(input, "BQSCALE", 7) == 0 ) {		    charPtr = SkipSpacesTabs(&input[7]);		    SetBQScale(atoi(charPtr));		    optionSeen[OPTION_BQSCALE] = TRUE;		} else if ( strncmp(input, "BASE_FILE_FORMAT", 16) == 0 ) {		    charPtr = SkipSpacesTabs(&input[16]);		    SetFileFormat(charPtr);		    if ( strcmp(charPtr, "YUV") == 0 ) {		        yuvUsed = TRUE;		    }		    optionSeen[OPTION_BASE_FORMAT] = TRUE;		} else if ( strncmp(input, "BSEARCH_ALG", 11) == 0 ) {		    charPtr = SkipSpacesTabs(&input[11]);		    SetBSearchAlg(charPtr);		    optionSeen[OPTION_BSEARCH_ALG] = TRUE;		}		break;	    case 'Y':		if ( strncmp(input, "YUV_SIZE", 8) == 0 ) {		    charPtr = SkipSpacesTabs(&input[8]);		    sscanf(charPtr, "%dx%d", &yuvWidth, &yuvHeight);		    realWidth = yuvWidth;		    realHeight = yuvHeight;

⌨️ 快捷键说明

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