📄 param.c
字号:
case 'F': if (strncmp(input, "FRAME_INPUT_DIR", 15) == 0) { charPtr = SkipSpacesTabs(&input[15]); if ( strncmp(charPtr, "stdin", 5) == 0 || strncmp(charPtr, "STDIN", 5) == 0 ) { SetStdinInput(frameInputSourceP); } strcpy(currentFramePath, charPtr); } else if ( strncmp(input, "FRAME_INPUT", 11) == 0 ) { ReadInputFileNames(fpointer, "FRAME_END_INPUT", frameInputSourceP->stdinUsed ? NULL : frameInputSourceP); optionSeen[OPTION_FRAME_INPUT] = TRUE; } else if ( strncmp(input, "FORCE_I_ALIGN", 13) == 0 ) { forceIalign = TRUE; } else if ( strncmp(input, "FORCE_ENCODE_LAST_FRAME", 23) == 0 ) { /* NO-OP. We used to drop trailing B frames by default and you needed this option to change the last frame to I so you could encode all the frames. Now we just do that all the time. Why wouldn't we? */ } else if ( strncmp(input, "FRAME_RATE", 10) == 0 ) { charPtr = SkipSpacesTabs(&input[10]); frameRate = GetFrameRate(charPtr); frameRateRounded = (int) VidRateNum[frameRate]; if ( (frameRate % 3) == 1) { frameRateInteger = FALSE; } optionSeen[OPTION_FRAME_RATE] = TRUE; } break; 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]); if ( strncmp(charPtr, "stdin", 5) == 0 || strncmp(charPtr, "STDIN", 5) == 0 ) { SetStdinInput(inputSourceP); } strcpy(currentGOPPath, charPtr); } else if ( strncmp(input, "GOP_INPUT", 9) == 0 ) { ReadInputFileNames(fpointer, "GOP_END_INPUT", gopInputSourceP->stdinUsed ? NULL : gopInputSourceP); optionSeen[OPTION_GOP_INPUT] = TRUE; } else if ( strncmp(input, "GAMMA", 5) == 0) { charPtr = SkipSpacesTabs(&input[5]); GammaCorrection = TRUE; sscanf(charPtr,"%f",&GammaValue); optionSeen[OPTION_GAMMA] = 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]); if ( strncmp(charPtr, "stdin", 5) == 0 || strncmp(charPtr, "STDIN", 5) == 0 ) SetStdinInput(paramP->inputSourceP); 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 */ ReadInputFileNames(fpointer, "END_INPUT", inputSourceP->stdinUsed ? NULL : inputSourceP); 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; } else if ( strncmp(input, "IQTABLE", 7) == 0 ) { processIqtable(fpointer); optionSeen[OPTION_IQTABLE] = TRUE; } break; case 'K': if (strncmp(input, "KEEP_TEMP_FILES", 15) == 0) keepTempFiles = TRUE; break; case 'N': if ( strncmp(input, "NIQTABLE", 8) == 0 ) { for ( row = 0; row < 8; row ++ ) { fgets(input, 256, fpointer); charPtr = input; if (8!=sscanf(charPtr,"%d %d %d %d %d %d %d %d", &niqtable[row*8+0], &niqtable[row*8+1], &niqtable[row*8+2], &niqtable[row*8+3], &niqtable[row*8+4], &niqtable[row*8+5], &niqtable[row*8+6], &niqtable[row*8+7])) { fprintf(stderr, "Line %d of NIQTABLE doesn't have 8 elements!\n", row); exit(1); } for ( col = 0; col < 8; col++ ) { if ((niqtable[row*8+col]<1) || (niqtable[row*8+col]>255)) { fprintf(stderr, "Warning: NIQTable Element %1d,%1d (%d) " "corrected to 1-255.\n", row+1, col+1, niqtable[row*8+col]); niqtable[row*8+col]=(niqtable[row*8+col]<1)?1:255; }} } customNIQtable = niqtable; optionSeen[OPTION_NIQTABLE] = TRUE; } 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 '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 ) { SetParallelPerfect(FALSE); charPtr = SkipSpacesTabs(&input[20]); parallelTestFrames = atoi(charPtr); } else if ( strncmp(input, "PARALLEL_TIME_CHUNKS", 20) == 0 ) { SetParallelPerfect(FALSE); charPtr = SkipSpacesTabs(&input[20]); parallelTimeChunks = atoi(charPtr); } else if ( strncmp(input, "PARALLEL_CHUNK_TAPER", 20) == 0 ) { SetParallelPerfect(FALSE); parallelTimeChunks = -1; } else if ( strncmp(input, "PARALLEL_PERFECT", 16) == 0 ) { SetParallelPerfect(TRUE); } else if ( strncmp(input, "PARALLEL", 8) == 0 ) { ReadMachineNames(fpointer); optionSeen[OPTION_PARALLEL] = TRUE; } break; case 'R': if ( strncmp(input, "RANGE", 5) == 0 ) { int num_ranges=0,a,b; charPtr = SkipSpacesTabs(&input[5]); optionSeen[OPTION_RANGE] = TRUE; num_ranges=sscanf(charPtr,"%d %d",&a,&b); if (num_ranges==2) { SetSearchRange(a,b); } else if (sscanf(charPtr,"%d [%d]",&a,&b)==2) { SetSearchRange(a,b); } else SetSearchRange(a,a); } 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); } else if ( strncmp(input, "RESIZE", 6) == 0 ) { charPtr = SkipSpacesTabs(&input[6]); sscanf(charPtr, "%dx%d", &outputWidth, &outputHeight); outputWidth &= ~(DCTSIZE * 2 - 1); outputHeight &= ~(DCTSIZE * 2 - 1); optionSeen[OPTION_RESIZE] = TRUE; } 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; } else if ( strncmp(input, "SPECIFICS_FILE", 14) == 0 ) { charPtr = SkipSpacesTabs(&input[14]); strcpy(specificsFile, charPtr); specificsOn=TRUE; optionSeen[OPTION_SPECIFICS] = TRUE; } else if ( strncmp(input, "SPECIFICS_DEFINES", 16) == 0 ) { charPtr = SkipSpacesTabs(&input[17]); strcpy(specificsDefines, charPtr); optionSeen[OPTION_DEFS_SPECIFICS] = TRUE; } else if (strncmp(input, "SEQUENCE_SIZE", 13) == 0) { charPtr = SkipSpacesTabs(&input[13]); mult_seq_headers = atoi(charPtr); } else if (strncmp(input, "SIZE", 4) == 0 ) { charPtr = SkipSpacesTabs(&input[4]); sscanf(charPtr, "%dx%d", &yuvWidth, &yuvHeight); realWidth = yuvWidth; realHeight = yuvHeight; Fsize_Validate(&yuvWidth, &yuvHeight); optionSeen[OPTION_YUV_SIZE] = TRUE; } break; case 'T': if ( strncmp(input, "TUNE", 4) == 0) { tuneingOn = TRUE; charPtr = SkipSpacesTabs(&input[4]); ParseTuneParam(charPtr); } break; case 'U': if (strncmp(input, "USER_DATA", 9) == 0) { charPtr = SkipSpacesTabs(&input[9]); strcpy(userDataFileName, charPtr); optionSeen[OPTION_USER_DATA] = TRUE; } break; case 'W': if (strncmp(input, "WARN_UNDERFLOW", 14) == 0) paramP->warnUnderflow = TRUE; if (strncmp(input, "WARN_OVERFLOW", 13) == 0) paramP->warnOverflow = 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; Fsize_Validate(&yuvWidth, &yuvHeight); optionSeen[OPTION_YUV_SIZE] = TRUE; } else if (strncmp(input, "Y_SIZE", 6) == 0) { charPtr = SkipSpacesTabs(&input[6]); sscanf(charPtr, "%dx%d", &yuvWidth, &yuvHeight); realWidth = yuvWidth; realHeight = yuvHeight; Fsize_Validate(&yuvWidth, &yuvHeight); optionSeen[OPTION_YUV_SIZE] = TRUE; } else if (strncmp(input, "YUV_FORMAT", 10) == 0) { charPtr = SkipSpacesTabs(&input[10]); strcpy(yuvConversion, charPtr); optionSeen[OPTION_YUV_FORMAT] = TRUE; } break; } } fclose(fpointer); setInputSource(function, ¶mP->inputSourceP, inputSourceP, gopInputSourceP, frameInputSourceP); verifyNoMissingOption(function); /* error checking */ if (!paramP->inputSourceP->stdinUsed && paramP->inputSourceP->numInputFiles == 0) pm_error("You have not specified any input. See the " "INPUT_DIR, INPUT, GOP_INPUT_DIR, GOP_INPUT, " "FRAME_INPUT_DIR, and FRAME_INPUT options"); if (yuvUsed) { if (!optionSeen[OPTION_YUV_SIZE]) pm_error("YUV format used but YUV_SIZE not given"); if (!optionSeen[OPTION_YUV_FORMAT]) { strcpy (yuvConversion, "EYUV"); pm_message("WARNING: YUV format not specified; " "defaulting to Berkeley YUV (EYUV)"); } } if (paramP->inputSourceP->stdinUsed && optionSeen[OPTION_PARALLEL] ) pm_error("stdin reading for parallel execution not enabled yet."); if (optionSeen[OPTION_PARALLEL] && !optionSeen[OPTION_YUV_SIZE]) pm_error("Specify SIZE WxH for parallel encoding"); if (optionSeen[OPTION_IO_CONVERT] != optionSeen[OPTION_SLAVE_CONVERT]) pm_error("Must have either both IO_SERVER_CONVERT and SLAVE_CONVERT " "or neither"); if (optionSeen[OPTION_DEFS_SPECIFICS] && !optionSeen[OPTION_SPECIFICS]) pm_error("Does not make sense to define Specifics file options, " "but no specifics file!"); SetIOConvert(optionSeen[OPTION_IO_CONVERT]); SetResize(optionSeen[OPTION_RESIZE]); if (function == ENCODE_FRAMES) { SetFCode(); if (psearchAlg == PSEARCH_TWOLEVEL) SetPixelSearch("HALF"); }}/* * Copyright (c) 1995 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. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -