From a70405848cb06782036364a88e27f452fb0a0b32 Mon Sep 17 00:00:00 2001 From: giraffedata Date: Sat, 31 Dec 2022 00:32:37 +0000 Subject: promote Development to Advanced git-svn-id: http://svn.code.sf.net/p/netpbm/code/advanced@4489 9d0c8265-081b-0410-96cb-a4ca84ce46f8 --- converter/ppm/ppmtompeg/frame.c | 68 ++++++++++++------------ converter/ppm/ppmtompeg/readframe.c | 103 +++++++++++++++++++----------------- 2 files changed, 88 insertions(+), 83 deletions(-) (limited to 'converter/ppm') diff --git a/converter/ppm/ppmtompeg/frame.c b/converter/ppm/ppmtompeg/frame.c index f5a0d39d..09e35410 100644 --- a/converter/ppm/ppmtompeg/frame.c +++ b/converter/ppm/ppmtompeg/frame.c @@ -12,7 +12,7 @@ * Frame_AllocYCC * * Frame_AllocDecoded * * Frame_AllocHalf * - * Frame_Resize * + * Frame_Resize * * * *===========================================================================*/ @@ -52,7 +52,7 @@ *===========*/ /* The maximum number of B-Frames allowed between reference frames. */ -#define B_FRAME_RUN 16 +#define B_FRAME_RUN 16 /*==================* * GLOBAL VARIABLES * @@ -64,13 +64,13 @@ static unsigned int numOfFrames; /*==================================================== * Resize_Array_Width -* +* * This function will resize any array width up * or down in size. The algorithm is based on the * least common multiple approach more commonly * used in audio frequency adjustments. *=====================================================*/ -static void +static void Resize_Array_Width(uint8 ** const inarray, int const in_x, int const in_y, @@ -86,7 +86,7 @@ Resize_Array_Width(uint8 ** const inarray, uint8 pointA,pointB; double slope,diff; #endif - + for (i = 0; i < in_y; ++i) { /* For each row */ unsigned int j; inptr = &inarray[i][0]; @@ -106,7 +106,7 @@ Resize_Array_Width(uint8 ** const inarray, in_total = in_total - out_x; --inptr; } - } else { + } else { #ifdef DOING_INTERPOLATION pointA = *inptr; #endif @@ -124,10 +124,10 @@ Resize_Array_Width(uint8 ** const inarray, } else { *outptr = (pointB - (uint8)(slope*(((float)(out_x)) - diff))); - } + } #endif /* Non-Interpolative solution */ - *outptr = *inptr; + *outptr = *inptr; ++outptr; out_total = out_total + in_x; @@ -153,7 +153,7 @@ Resize_Array_Width(uint8 ** const inarray, * Same as Resize_array_Width except pointer * manipulation must change. *===============================*/ -static void +static void Resize_Array_Height(uint8 ** const inarray, int const in_x, int const in_y, @@ -176,7 +176,7 @@ Resize_Array_Height(uint8 ** const inarray, out_total = 0; k = 0; for(j=0; j < out_y; ++j){ /* for each output value */ - if (in_total == out_total) { + if (in_total == out_total) { outarray[j][i] = inarray[k][i]; out_total=out_total+in_y; while(in_total < out_total){ @@ -187,7 +187,7 @@ Resize_Array_Height(uint8 ** const inarray, in_total = in_total - out_y; --k; } - } else { + } else { #ifdef DOING_INTERPOLATION pointA = inarray[k][i]; if (k != (in_y - 1)) { @@ -210,7 +210,7 @@ Resize_Array_Height(uint8 ** const inarray, in_total = in_total - out_y; --k; } - } + } } } } @@ -220,7 +220,7 @@ Resize_Array_Height(uint8 ** const inarray, /*======================================================== * Resize_Width *======================================================*/ -static void +static void Resize_Width(MpegFrame * const omfrw, MpegFrame * const mfrw, int const in_x, @@ -274,12 +274,12 @@ Resize_Width(MpegFrame * const omfrw, free(mfrw->orig_y[i]); } free(mfrw->orig_y); - + for (i = 0; i < in_y / 2; ++i) { free(mfrw->orig_cr[i]); } free(mfrw->orig_cr); - + for (i = 0; i < in_y / 2; ++i) { free(mfrw->orig_cb[i]); } @@ -300,9 +300,9 @@ Resize_Height(MpegFrame * const omfrh, int const in_x, int const in_y, int const out_y) { - - unsigned int y; - + + unsigned int y; + Fsize_y = out_y; /* Allocate new frame memory */ @@ -347,12 +347,12 @@ Resize_Height(MpegFrame * const omfrh, free(mfrh->orig_y[i]); } free(mfrh->orig_y); - + for (i = 0; i < in_y / 2; ++i) { free(mfrh->orig_cr[i]); } free(mfrh->orig_cr); - + for (i = 0; i < in_y / 2; ++i) { free(mfrh->orig_cb[i]); } @@ -386,8 +386,8 @@ Frame_Init(unsigned int const numOfFramesRequested) { for (idx = 0; idx < numOfFrames; ++idx) { MALLOCVAR(frameMemory[idx]); frameMemory[idx]->inUse = FALSE; - frameMemory[idx]->orig_y = NULL; - frameMemory[idx]->y_blocks = NULL; + frameMemory[idx]->orig_y = NULL; + frameMemory[idx]->y_blocks = NULL; frameMemory[idx]->decoded_y = NULL; frameMemory[idx]->halfX = NULL; frameMemory[idx]->next = NULL; @@ -458,11 +458,11 @@ FreeFrame(MpegFrame * const frameP) { for ( i = 0; i < Fsize_y; ++i ) free(frameP->halfX[i]); free(frameP->halfX); - + for (i = 0; i < Fsize_y-1; ++i) free(frameP->halfY[i]); free(frameP->halfY); - + for (i = 0; i < Fsize_y-1; ++i) free(frameP->halfBoth[i]); free(frameP->halfBoth); @@ -542,7 +542,7 @@ GetUnusedFrame() { "See the man page for help.\n"); exit(1); } - return frameMemory[idx]; + return frameMemory[idx]; } @@ -638,7 +638,7 @@ Frame_AllocBlocks(MpegFrame * const frameP) { MALLOCARRAY(frameP->y_blocks[i], dctx); ERRCHK(frameP->y_blocks[i], "malloc"); } - + MALLOCARRAY(frameP->cr_blocks, dcty / 2); ERRCHK(frameP->cr_blocks, "malloc"); MALLOCARRAY(frameP->cb_blocks, dcty / 2); @@ -672,7 +672,7 @@ Frame_AllocYCC(MpegFrame * const frameP) { /* already allocated */ } else { unsigned int y; - + DBG_PRINT(("ycc_calc:\n")); /* * first, allocate tons of memory @@ -755,7 +755,7 @@ Frame_AllocHalf(MpegFrame * const frameP) { * * allocate memory for decoded frame for the given frame, if required * if makeReference == TRUE, then makes it reference frame - * + * * RETURNS: nothing * * SIDE EFFECTS: none @@ -781,14 +781,14 @@ Frame_AllocDecoded(MpegFrame * const frameP, MALLOCARRAY(frameP->decoded_y[y], Fsize_x); ERRCHK(frameP->decoded_y[y], "malloc"); } - + MALLOCARRAY(frameP->decoded_cr, Fsize_y / 2); ERRCHK(frameP->decoded_cr, "malloc"); for (y = 0; y < (Fsize_y / 2); ++y) { MALLOCARRAY(frameP->decoded_cr[y], Fsize_x / 2); ERRCHK(frameP->decoded_cr[y], "malloc"); } - + MALLOCARRAY(frameP->decoded_cb, Fsize_y / 2); ERRCHK(frameP->decoded_cb, "malloc"); for (y = 0; y < (Fsize_y / 2); ++y) { @@ -810,7 +810,7 @@ Frame_AllocDecoded(MpegFrame * const frameP, * * Frame_Resize by James Boucher * Boston University Multimedia Communications Lab - * + * * This function takes the mf input frame, read in READFrame(), * and resizes all the input component arrays to the output * dimensions specified in the parameter file as OUT_SIZE. @@ -828,11 +828,11 @@ Frame_Resize(MpegFrame * const omf, MpegFrame * frameAP; /* intermediate frame */ MALLOCVAR_NOFAIL(frameAP); - + if (insize_x != outsize_x && insize_y != outsize_y) { Resize_Width(frameAP, mf, insize_x, insize_y, outsize_x); Resize_Height(omf, frameAP, outsize_x, insize_y, outsize_y); - } else + } else if (insize_x ==outsize_x && insize_y != outsize_y) { Resize_Height(omf, mf, insize_x, insize_y, outsize_y); } else @@ -843,3 +843,5 @@ Frame_Resize(MpegFrame * const omf, free(frameAP); } + + diff --git a/converter/ppm/ppmtompeg/readframe.c b/converter/ppm/ppmtompeg/readframe.c index 2a359b2f..dcc02052 100644 --- a/converter/ppm/ppmtompeg/readframe.c +++ b/converter/ppm/ppmtompeg/readframe.c @@ -1,13 +1,13 @@ /*===========================================================================* - * readframe.c - * - * procedures to read in frames - * - * EXPORTED PROCEDURES: - * ReadFrame - * SetFileType - * SetFileFormat - * + * readframe.c + * + * procedures to read in frames + * + * EXPORTED PROCEDURES: + * ReadFrame + * SetFileType + * SetFileFormat + * *===========================================================================*/ /* COPYRIGHT INFORMATION IS AT THE END OF THIS FILE */ @@ -62,7 +62,7 @@ struct YuvLine { #ifdef __OS2__ #define popen _popen #endif - + /*==================* * Global VARIABLES * @@ -100,7 +100,7 @@ static void DoKillDim (MpegFrame *mf, int w, int h); -void +void SetResize(bool const set) { resizeFrame = set; } @@ -134,7 +134,7 @@ ReadPNM(MpegFrame * const mpegFrameP, static void openFile(struct inputSource * const inputSourceP, unsigned int const frameNumber, - const char * const conversion, + const char * const conversion, FILE ** const ifPP) { if (inputSourceP->stdinUsed) { @@ -145,24 +145,24 @@ openFile(struct inputSource * const inputSourceP, "INPUT_CONVERTER * in the parameter file or supply the " "frames in files by specifying a directory with " "INPUT_DIRECTORY in the parameter file."); - + *ifPP = stdin; } else { const char * fileName; const char * fullFileName; - + GetNthInputFileName(inputSourceP, frameNumber, &fileName); - + pm_asprintf(&fullFileName, "%s/%s", currentPath, fileName); - + CurrFile = fullFileName; - + if (fileType == ANY_FILE_TYPE) { char command[1024]; const char * convertPtr; char * commandPtr; const char * charPtr; - + /* replace every occurrence of '*' with fullFileName */ convertPtr = conversion; commandPtr = command; @@ -172,7 +172,7 @@ openFile(struct inputSource * const inputSourceP, ++commandPtr; ++convertPtr; } - + if (*convertPtr == '*') { /* copy fullFileName */ charPtr = fullFileName; @@ -185,7 +185,7 @@ openFile(struct inputSource * const inputSourceP, } } *commandPtr = '\0'; - + *ifPP = popen(command, "r"); if (*ifPP == NULL) { pm_message( @@ -201,7 +201,7 @@ openFile(struct inputSource * const inputSourceP, *ifPP = fopen(fullFileName, "rb"); if (*ifPP == NULL) pm_error("Couldn't open input file '%s'", fullFileName); - + if (baseFormat == JMOVIE_FILE_TYPE) unlink(fullFileName); } @@ -238,7 +238,7 @@ fileIsAtEnd(FILE * const ifP) { c = getc(ifP); if (c == EOF) { - if (feof(ifP)) + if (feof(ifP)) eof = TRUE; else pm_error("File error on getc() to position to image"); @@ -248,7 +248,7 @@ fileIsAtEnd(FILE * const ifP) { eof = FALSE; rc = ungetc(c, ifP); - if (rc == EOF) + if (rc == EOF) pm_error("File error doing ungetc() to position to image."); } return eof; @@ -262,14 +262,11 @@ ReadFrameFile(MpegFrame * const frameP, const char * const conversion, bool * const eofP) { /*---------------------------------------------------------------------------- - Read a frame from the file 'ifP'. + Read a frame from the file 'ifP', doing adjustments as indicated. Return *eofP == TRUE iff we encounter EOF before we can get the frame. -----------------------------------------------------------------------------*/ - MpegFrame tempFrame; - MpegFrame * framePtr; - /* To make this code fit Netpbm properly, we should remove handling of all types except PNM and use pm_nextimage() to handle sensing of end of stream. @@ -278,53 +275,59 @@ ReadFrameFile(MpegFrame * const frameP, if (fileIsAtEnd(ifP)) *eofP = TRUE; else { + MpegFrame preResizeFrame; + /* The frame object that holds the frame before resizing */ + MpegFrame * rawFrameP; + /* The frame object with which we read in the raw frame */ + *eofP = FALSE; if (resizeFrame) { - tempFrame.inUse = FALSE; - tempFrame.orig_y = NULL; - tempFrame.y_blocks = NULL; - tempFrame.decoded_y = NULL; - tempFrame.halfX = NULL; - framePtr = &tempFrame; + preResizeFrame.inUse = FALSE; + preResizeFrame.orig_y = NULL; + preResizeFrame.y_blocks = NULL; + preResizeFrame.decoded_y = NULL; + preResizeFrame.halfX = NULL; + rawFrameP = &preResizeFrame; } else - framePtr = frameP; + rawFrameP = frameP; switch(baseFormat) { case YUV_FILE_TYPE: /* Encoder YUV */ if ((strncmp (yuvConversion, "EYUV", 4) == 0) || - (strncmp (yuvConversion, "UCB", 3) == 0)) + (strncmp (yuvConversion, "UCB", 3) == 0)) - ReadEYUV(framePtr, ifP, realWidth, realHeight); + ReadEYUV(rawFrameP, ifP, realWidth, realHeight); else /* Abekas-type (interlaced) YUV */ - ReadAYUV(framePtr, ifP, realWidth, realHeight); + ReadAYUV(rawFrameP, ifP, realWidth, realHeight); break; case Y_FILE_TYPE: - ReadY(framePtr, ifP, realWidth, realHeight); + ReadY(rawFrameP, ifP, realWidth, realHeight); break; case PNM_FILE_TYPE: - ReadPNM(framePtr, ifP); + ReadPNM(rawFrameP, ifP); break; case SUB4_FILE_TYPE: - ReadSub4(framePtr, ifP, yuvWidth, yuvHeight); + ReadSub4(rawFrameP, ifP, yuvWidth, yuvHeight); break; case JPEG_FILE_TYPE: case JMOVIE_FILE_TYPE: - ReadJPEG(framePtr, ifP); + ReadJPEG(rawFrameP, ifP); break; default: break; } - if (resizeFrame) - Frame_Resize(frameP, &tempFrame, Fsize_x, Fsize_y, + if (resizeFrame) { + assert(rawFrameP == &preResizeFrame); + Frame_Resize(frameP, &preResizeFrame, Fsize_x, Fsize_y, outputWidth, outputHeight); - + } if (GammaCorrection) DoGamma(frameP, Fsize_x, Fsize_y); @@ -338,7 +341,7 @@ ReadFrameFile(MpegFrame * const frameP, void -ReadFrame(MpegFrame * const frameP, +ReadFrame(MpegFrame * const frameP, struct inputSource * const inputSourceP, unsigned int const frameNumber, const char * const conversion, @@ -693,7 +696,7 @@ SeparateLine(fpointer, lineptr, width) fprintf(stderr, " or any even-length string consisting of the letters U, V, and Y.\n"); exit(1); } - + } } @@ -738,7 +741,7 @@ ReadY(mf, fpointer, width, height) for (y = Fsize_y; y < height; y++) { safe_fread(junk, 1, width, fpointer); } - + for (y = 0 ; y < (Fsize_y >> 1); y++) { memset(mf->orig_cb[y], 128, (Fsize_x>>1)); memset(mf->orig_cr[y], 128, (Fsize_x>>1)); @@ -830,7 +833,7 @@ int w,h; int i,j; if (!init_done) { - for(i=0; i<256; i++) + for(i=0; i<256; i++) GammaVal[i]=(unsigned char) (pow(((double) i)/255.0,GammaValue)*255.0+0.5); init_done=TRUE; } @@ -871,7 +874,7 @@ int w,h; ^ kill_dim_break ^kill_dim_end kill_dim_slope gives the slope (y = kill_dim_slope * x +0) - from 0 to kill_dim_break + from 0 to kill_dim_break * *===========================================================================*/ @@ -930,7 +933,7 @@ int w,h; * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */ -/* +/* * $Header: /n/picasso/project/mpeg/mpeg_dist/mpeg_encode/RCS/readframe.c,v 1.27 1995/08/14 22:31:40 smoot Exp $ * $Log: readframe.c,v $ * Revision 1.27 1995/08/14 22:31:40 smoot -- cgit 1.4.1