From 1fd361a1ea06e44286c213ca1f814f49306fdc43 Mon Sep 17 00:00:00 2001 From: giraffedata Date: Sat, 19 Aug 2006 03:12:28 +0000 Subject: Create Subversion repository git-svn-id: http://svn.code.sf.net/p/netpbm/code/trunk@1 9d0c8265-081b-0410-96cb-a4ca84ce46f8 --- converter/ppm/ppmtompeg/headers/all.h | 95 +++++ converter/ppm/ppmtompeg/headers/ansi.h | 76 ++++ converter/ppm/ppmtompeg/headers/bitio.h | 140 +++++++ converter/ppm/ppmtompeg/headers/block.h | 53 +++ converter/ppm/ppmtompeg/headers/byteorder.h | 77 ++++ converter/ppm/ppmtompeg/headers/combine.h | 20 + converter/ppm/ppmtompeg/headers/dct.h | 79 ++++ converter/ppm/ppmtompeg/headers/frame.h | 147 +++++++ converter/ppm/ppmtompeg/headers/frames.h | 487 ++++++++++++++++++++++++ converter/ppm/ppmtompeg/headers/frametype.h | 17 + converter/ppm/ppmtompeg/headers/fsize.h | 49 +++ converter/ppm/ppmtompeg/headers/general.h | 174 +++++++++ converter/ppm/ppmtompeg/headers/huff.h | 34 ++ converter/ppm/ppmtompeg/headers/input.h | 70 ++++ converter/ppm/ppmtompeg/headers/jpeg.h | 12 + converter/ppm/ppmtompeg/headers/mheaders.h | 114 ++++++ converter/ppm/ppmtompeg/headers/motion_search.h | 154 ++++++++ converter/ppm/ppmtompeg/headers/mpeg.h | 116 ++++++ converter/ppm/ppmtompeg/headers/mproto.h | 132 +++++++ converter/ppm/ppmtompeg/headers/mtypes.h | 109 ++++++ converter/ppm/ppmtompeg/headers/opts.h | 125 ++++++ converter/ppm/ppmtompeg/headers/parallel.h | 135 +++++++ converter/ppm/ppmtompeg/headers/param.h | 87 +++++ converter/ppm/ppmtompeg/headers/postdct.h | 40 ++ converter/ppm/ppmtompeg/headers/prototypes.h | 78 ++++ converter/ppm/ppmtompeg/headers/psocket.h | 41 ++ converter/ppm/ppmtompeg/headers/rate.h | 204 ++++++++++ converter/ppm/ppmtompeg/headers/readframe.h | 69 ++++ converter/ppm/ppmtompeg/headers/rgbtoycc.h | 39 ++ converter/ppm/ppmtompeg/headers/specifics.h | 36 ++ 30 files changed, 3009 insertions(+) create mode 100644 converter/ppm/ppmtompeg/headers/all.h create mode 100644 converter/ppm/ppmtompeg/headers/ansi.h create mode 100644 converter/ppm/ppmtompeg/headers/bitio.h create mode 100644 converter/ppm/ppmtompeg/headers/block.h create mode 100644 converter/ppm/ppmtompeg/headers/byteorder.h create mode 100644 converter/ppm/ppmtompeg/headers/combine.h create mode 100644 converter/ppm/ppmtompeg/headers/dct.h create mode 100644 converter/ppm/ppmtompeg/headers/frame.h create mode 100644 converter/ppm/ppmtompeg/headers/frames.h create mode 100644 converter/ppm/ppmtompeg/headers/frametype.h create mode 100644 converter/ppm/ppmtompeg/headers/fsize.h create mode 100644 converter/ppm/ppmtompeg/headers/general.h create mode 100644 converter/ppm/ppmtompeg/headers/huff.h create mode 100644 converter/ppm/ppmtompeg/headers/input.h create mode 100644 converter/ppm/ppmtompeg/headers/jpeg.h create mode 100644 converter/ppm/ppmtompeg/headers/mheaders.h create mode 100644 converter/ppm/ppmtompeg/headers/motion_search.h create mode 100644 converter/ppm/ppmtompeg/headers/mpeg.h create mode 100644 converter/ppm/ppmtompeg/headers/mproto.h create mode 100644 converter/ppm/ppmtompeg/headers/mtypes.h create mode 100644 converter/ppm/ppmtompeg/headers/opts.h create mode 100644 converter/ppm/ppmtompeg/headers/parallel.h create mode 100644 converter/ppm/ppmtompeg/headers/param.h create mode 100644 converter/ppm/ppmtompeg/headers/postdct.h create mode 100644 converter/ppm/ppmtompeg/headers/prototypes.h create mode 100644 converter/ppm/ppmtompeg/headers/psocket.h create mode 100644 converter/ppm/ppmtompeg/headers/rate.h create mode 100644 converter/ppm/ppmtompeg/headers/readframe.h create mode 100644 converter/ppm/ppmtompeg/headers/rgbtoycc.h create mode 100644 converter/ppm/ppmtompeg/headers/specifics.h (limited to 'converter/ppm/ppmtompeg/headers') diff --git a/converter/ppm/ppmtompeg/headers/all.h b/converter/ppm/ppmtompeg/headers/all.h new file mode 100644 index 00000000..e350aab8 --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/all.h @@ -0,0 +1,95 @@ +/*===========================================================================* + * all.h * + * * + * stuff included from ALL source files * + * * + *===========================================================================*/ + +/* + * 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. + */ + +/* + * $Header: /u/smoot/md/mpeg_encode/headers/RCS/all.h,v 1.9 1995/06/05 21:11:06 smoot Exp $ + * $Log: all.h,v $ + * Revision 1.9 1995/06/05 21:11:06 smoot + * added little_endian force for irizx + * + * Revision 1.8 1995/02/02 22:02:18 smoot + * added ifdefs for compatability on stranger and stranger architectures... + * + * Revision 1.7 1995/02/02 07:26:45 eyhung + * added parens to all.h to remove compiler warning + * + * Revision 1.6 1995/02/02 01:47:11 eyhung + * added MAXINT + * + * Revision 1.5 1995/01/19 23:54:33 eyhung + * Changed copyrights + * + * Revision 1.4 1994/11/14 22:52:04 smoot + * Added linux #include for time.h + * + * Revision 1.3 1994/11/12 02:12:13 keving + * nothing + * + * Revision 1.2 1993/07/22 22:24:23 keving + * nothing + * + * Revision 1.1 1993/07/09 00:17:23 keving + * nothing + * + */ + + +#ifndef ENCODE_ALL_INCLUDED +#define ENCODE_ALL_INCLUDED + +#include +#include +#include +#include +#include + +/* There's got to be a better way.... */ +#ifdef LINUX +#include +#endif +#ifdef MIPS +#include +#endif +#ifdef IRIX +#define FORCE_LITTLE_ENDIAN +#include +#endif + +#include "ansi.h" +#include "general.h" + +/* some machines have #define index strchr; get rid of this nonsense */ +#ifdef index +#undef index +#endif /* index */ + +#ifndef MAXINT +#define MAXINT 0x7fffffff +#endif + +#endif /* ENCODE_ALL_INCLUDED */ diff --git a/converter/ppm/ppmtompeg/headers/ansi.h b/converter/ppm/ppmtompeg/headers/ansi.h new file mode 100644 index 00000000..b3c3ab17 --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/ansi.h @@ -0,0 +1,76 @@ +/*===========================================================================* + * ansi.h * + * * + * macro for non-ansi compilers * + * * + *===========================================================================*/ + +/* + * 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. + */ + +/* + * $Header: /n/picasso/project/mpeg/mpeg_dist/mpeg_encode/headers/RCS/ansi.h,v 1.6 1995/08/15 23:43:13 smoot Exp $ + * $Log: ansi.h,v $ + * Revision 1.6 1995/08/15 23:43:13 smoot + * *** empty log message *** + * + * Revision 1.5 1995/01/19 23:54:35 eyhung + * Changed copyrights + * + * Revision 1.4 1994/11/12 02:12:13 keving + * nothing + * + * Revision 1.3 1993/07/22 22:24:23 keving + * nothing + * + * Revision 1.2 1993/07/09 00:17:23 keving + * nothing + * + * Revision 1.1 1993/06/14 22:50:22 keving + * nothing + * + */ + + +#ifndef ANSI_INCLUDED +#define ANSI_INCLUDED + + +/* + * _ANSI_ARGS_ macro stolen from Tcl6.5 by John Ousterhout + */ +#undef _ANSI_ARGS_ +#undef const +#ifdef NON_ANSI_COMPILER +#define _ANSI_ARGS_(x) () +#define CONST +#else +#define _ANSI_ARGS_(x) x +#define CONST const +#ifdef __cplusplus +#define VARARGS (...) +#else +#define VARARGS () +#endif +#endif + + +#endif /* ANSI_INCLUDED */ diff --git a/converter/ppm/ppmtompeg/headers/bitio.h b/converter/ppm/ppmtompeg/headers/bitio.h new file mode 100644 index 00000000..89e61fbb --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/bitio.h @@ -0,0 +1,140 @@ +/*===========================================================================* + * bitio.h * + * * + * bitwise input/output * + * * + *===========================================================================*/ + +/* + * 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. + */ + +/* + * $Header: /n/charlie-brown/project/mm/mpeg/mpeg_dist/mpeg_encode/headers/RCS/bitio.h,v 1.8 1995/01/19 23:54:37 eyhung Exp $ + * $Log: bitio.h,v $ + * Revision 1.8 1995/01/19 23:54:37 eyhung + * Changed copyrights + * + * Revision 1.7 1994/11/12 02:12:14 keving + * nothing + * + * Revision 1.6 1993/07/22 22:24:23 keving + * nothing + * + * Revision 1.5 1993/07/09 00:17:23 keving + * nothing + * + * Revision 1.4 1993/06/03 21:08:53 keving + * nothing + * + * Revision 1.3 1993/01/18 10:20:02 dwallach + * *** empty log message *** + * + * Revision 1.2 1993/01/18 10:17:29 dwallach + * RCS headers installed, code indented uniformly + * + * Revision 1.2 1993/01/18 10:17:29 dwallach + * RCS headers installed, code indented uniformly + * + */ + + +#ifndef BIT_IO_INCLUDED +#define BIT_IO_INCLUDED + + +/*==============* + * HEADER FILES * + *==============*/ + +#include "general.h" +#include "ansi.h" + + +/*===========* + * CONSTANTS * + *===========*/ + +#define WORDS_PER_BUCKET 128 +#define MAXBITS_PER_BUCKET (WORDS_PER_BUCKET * 32) +#define MAX_BUCKETS 128 +#define MAX_BITS MAX_BUCKETS*MAXBITS_PER_BUCKET + + +/*=======================* + * STRUCTURE DEFINITIONS * + *=======================*/ + +typedef struct bitBucket { + struct bitBucket *nextPtr; + uint32 bits[WORDS_PER_BUCKET]; + int bitsleft, bitsleftcur, currword; +} ActualBucket; + +typedef struct _BitBucket { + int totalbits; + int cumulativeBits; + int bitsWritten; + FILE *filePtr; + ActualBucket *firstPtr; + ActualBucket *lastPtr; +} BitBucket; + + +/*========* + * MACROS * + *========*/ + +#define SET_ITH_BIT(bits, i) (bits |= (1 << (i))) +#define GET_ITH_BIT(bits, i) (bits & (1 << (i))) + + +/*===============================* + * EXTERNAL PROCEDURE prototypes * + *===============================*/ + +void +Bitio_Free(BitBucket * const bbPtr); + +void +Bitio_Write(BitBucket * const bbPtr, + uint32 const bits, + int const nbits); + +void +Bitio_BytePad(BitBucket * const bbPtr); + +BitBucket * +Bitio_New(FILE * const filePtr); + +BitBucket * +Bitio_New_Filename(const char * const fileName); + +void +Bitio_Flush(BitBucket * const bbPtr); + +void +Bitio_Close(BitBucket * const bbPtr); + +void +Bitio_WriteToSocket(BitBucket * const bbPtr, + int const socket); + +#endif /* BIT_IO_INCLUDED */ diff --git a/converter/ppm/ppmtompeg/headers/block.h b/converter/ppm/ppmtompeg/headers/block.h new file mode 100644 index 00000000..46050492 --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/block.h @@ -0,0 +1,53 @@ +void +ComputeDiffDCTs(MpegFrame * const current, + MpegFrame * const prev, + int const by, + int const bx, + vector const m, + int * const pattern); + +void +ComputeDiffDCTBlock(Block current, + Block dest, + Block motionBlock, + boolean * const significantDifferenceP); + +void +ComputeMotionBlock(uint8 ** const prev, + int const by, + int const bx, + vector const m, + Block * const motionBlockP); + +void +ComputeMotionLumBlock(MpegFrame * const prevFrame, + int const by, + int const bx, + vector const m, + LumBlock * const motionBlockP); + +void +BlockToData(uint8 ** const data, + Block block, + int const by, + int const bx); + +void +AddMotionBlock(Block block, + uint8 ** const prev, + int const by, + int const bx, + vector const m); + +void +AddBMotionBlock(Block block, + uint8 ** const prev, + uint8 ** const next, + int const by, + int const bx, + int const mode, + motion const motion); + +void +BlockifyFrame(MpegFrame * const frameP); + diff --git a/converter/ppm/ppmtompeg/headers/byteorder.h b/converter/ppm/ppmtompeg/headers/byteorder.h new file mode 100644 index 00000000..0070252a --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/byteorder.h @@ -0,0 +1,77 @@ +/*===========================================================================* + * byteorder.h * + * * + * stuff to handle different byte order * + * * + *===========================================================================*/ + +/* + * 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. + */ + +/* + * $Header: /u/smoot/md/mpeg_encode/headers/RCS/byteorder.h,v 1.3 1995/01/19 23:54:39 eyhung Exp $ + * $Log: byteorder.h,v $ + * Revision 1.3 1995/01/19 23:54:39 eyhung + * Changed copyrights + * + * Revision 1.3 1995/01/19 23:54:39 eyhung + * Changed copyrights + * + * Revision 1.2 1994/11/12 02:12:15 keving + * nothing + * + * Revision 1.1 1993/07/22 22:24:23 keving + * nothing + * + */ + + +#include "general.h" + + +#ifdef FORCE_BIG_ENDIAN + /* leave byte order as it is */ +#define htonl(x) (x) +#define ntohl(x) (x) +#define htons(x) (x) +#define ntohs(x) (x) +#else +#ifdef FORCE_LITTLE_ENDIAN + /* need to reverse byte order */ + /* note -- we assume here that htonl is called on a variable, not a + * constant; thus, this is not for general use, but works with bitio.c + */ +#define htonl(x) \ + ((((unsigned char *)(&x))[0] << 24) | \ + (((unsigned char *)(&x))[1] << 16) | \ + (((unsigned char *)(&x))[2] << 8) | \ + (((unsigned char *)(&x))[3])) +#define ntohl(x) htonl(x) +#define htons(x) \ + ((((unsigned char *)(&x))[0] << 8) | \ + ((unsigned char *)(&x))[1]) +#define ntohs(x) htons(x) +#else + /* let in.h handle it, if possible */ +#include +#include +#endif /* FORCE_LITTLE_ENDIAN */ +#endif /* FORCE_BIG_ENDIAN */ diff --git a/converter/ppm/ppmtompeg/headers/combine.h b/converter/ppm/ppmtompeg/headers/combine.h new file mode 100644 index 00000000..e28c6dee --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/combine.h @@ -0,0 +1,20 @@ +struct inputSource; + +void +GOPsToMPEG(struct inputSource * const inputSourceP, + const char * const outputFileName, + FILE * const outputFilePtr); + +typedef void (*fileAcquisitionFn)(void * const handle, + unsigned int const frameNumber, + FILE ** const ifPP); + + +typedef void (*fileDispositionFn)(void * const handle, + unsigned int const frameNumber); + +void +FramesToMPEG(FILE * const outputFile, + void * const inputHandle, + fileAcquisitionFn acquireInputFile, + fileDispositionFn disposeInputFile); diff --git a/converter/ppm/ppmtompeg/headers/dct.h b/converter/ppm/ppmtompeg/headers/dct.h new file mode 100644 index 00000000..e024b6c1 --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/dct.h @@ -0,0 +1,79 @@ +/*===========================================================================* + * dct.h * + * * + * DCT procedures * + * * + *===========================================================================*/ + +/* + * 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. + */ + + +#ifndef DCT_INCLUDED +#define DCT_INCLUDED + + +#include "ansi.h" + + + +#define DCTSIZE 8 /* you really don't want to change this */ +#define DCTSIZE_SQ 64 /* you really don't want to change this */ + +#define DCTSIZE2 64 +typedef short DCTELEM; +typedef DCTELEM DCTBLOCK[DCTSIZE2]; +typedef DCTELEM DCTBLOCK_2D[DCTSIZE][DCTSIZE]; + + +/* + * from mfwddct.c: + */ +extern void mp_fwd_dct_block2 _ANSI_ARGS_((DCTBLOCK_2D src, DCTBLOCK_2D dest)); + +/* jrevdct.c */ +extern void init_pre_idct _ANSI_ARGS_((void )); +extern void mpeg_jrevdct _ANSI_ARGS_((DCTBLOCK data )); + + +/* We assume that right shift corresponds to signed division by 2 with + * rounding towards minus infinity. This is correct for typical "arithmetic + * shift" instructions that shift in copies of the sign bit. But some + * C compilers implement >> with an unsigned shift. For these machines you + * must define RIGHT_SHIFT_IS_UNSIGNED. + * RIGHT_SHIFT provides a proper signed right shift of an int32 quantity. + * It is only applied with constant shift counts. SHIFT_TEMPS must be + * included in the variables of any routine using RIGHT_SHIFT. + */ + +#ifdef RIGHT_SHIFT_IS_UNSIGNED +#define SHIFT_TEMPS int32 shift_temp; +#define RIGHT_SHIFT(x,shft) \ + ((shift_temp = (x)) < 0 ? \ + (shift_temp >> (shft)) | ((~((int32) 0)) << (32-(shft))) : \ + (shift_temp >> (shft))) +#else +#define SHIFT_TEMPS +#define RIGHT_SHIFT(x,shft) ((x) >> (shft)) +#endif + + +#endif /* DCT_INCLUDED */ diff --git a/converter/ppm/ppmtompeg/headers/frame.h b/converter/ppm/ppmtompeg/headers/frame.h new file mode 100644 index 00000000..1003ee15 --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/frame.h @@ -0,0 +1,147 @@ +/*===========================================================================* + * frame.h * + * * + * basic frames procedures * + * * + *===========================================================================*/ + +/* + * 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. + */ + + +#ifndef FRAME_INCLUDED +#define FRAME_INCLUDED + +/*==============* + * HEADER FILES * + *==============*/ + +#include "general.h" +#include "ansi.h" +#include "mtypes.h" + +/*===========* + * CONSTANTS * + *===========*/ +#define TYPE_IFRAME 2 +#define TYPE_PFRAME 3 +#define TYPE_BFRAME 4 + + +/*=======================* + * STRUCTURE DEFINITIONS * + *=======================*/ + +typedef struct mpegFrame { + int type; + char inputFileName[256]; + int id; /* the frame number -- starts at 0 */ + boolean inUse; /* TRUE iff this frame is currently being used */ + /* FALSE means any data here can be thrashed */ + + /* + * now, the YCrCb data. All pixel information is stored in unsigned + * 8-bit pieces. We separate y, cr, and cb because cr and cb are + * subsampled by a factor of 2. + * + * if orig_y is NULL, then orig_cr, orig_cb are undefined + */ + uint8 **orig_y, **orig_cr, **orig_cb; + + /* now, the decoded data -- relevant only if + * referenceFrame == DECODED_FRAME + * + * if decoded_y is NULL, then decoded_cr, decoded_cb are undefined + */ + uint8 **decoded_y, **decoded_cr, **decoded_cb; + + /* reference data */ + uint8 **ref_y, **ref_cr, **ref_cb; + + /* + * these are the Blocks which will ultimately compose MacroBlocks. + * A Block is in a format that mp_fwddct() can crunch. + * if y_blocks is NULL, then cr_blocks, cb_blocks are undefined + */ + Block **y_blocks, **cr_blocks, **cb_blocks; + + /* + * this is the half-pixel luminance data (for reference frames) + */ + uint8 **halfX, **halfY, **halfBoth; + + boolean halfComputed; /* TRUE iff half-pixels already computed */ + + struct mpegFrame *next; /* points to the next B-frame to be encoded, if + * stdin is used as the input. + */ +} MpegFrame; + + +void +Frame_Init(unsigned int const numOfFramesRequested); + +void +Frame_Exit(void); + +void +Frame_Free(MpegFrame * const frameP); + +MpegFrame * +Frame_New(int const id, + int const type); + +void +Frame_AllocBlocks(MpegFrame * const frameP); + +void +Frame_AllocYCC(MpegFrame * const frameP); + +void +Frame_AllocHalf(MpegFrame * const frameP); + +void +Frame_AllocDecoded(MpegFrame * const frameP, + boolean const makeReference); + +void +Frame_Resize(MpegFrame * const omf, + MpegFrame * const mf, + int const insize_x, + int const insize_y, + int const outsize_x, + int const outsize_y); + + +extern void Frame_Free _ANSI_ARGS_((MpegFrame *frame)); +extern void Frame_Exit _ANSI_ARGS_((void)); +extern void Frame_AllocPPM _ANSI_ARGS_((MpegFrame * frame)); +extern void Frame_AllocYCC _ANSI_ARGS_((MpegFrame * mf)); +extern void Frame_AllocDecoded _ANSI_ARGS_((MpegFrame *frame, + boolean makeReference)); +extern void Frame_AllocHalf _ANSI_ARGS_((MpegFrame *frame)); +extern void Frame_AllocBlocks _ANSI_ARGS_((MpegFrame *mf)); +extern void Frame_Resize _ANSI_ARGS_((MpegFrame *omf, MpegFrame *mf, + int insize_x, int insize_y, + int outsize_x, int outsize_y)); + + +#endif /* FRAME_INCLUDED */ diff --git a/converter/ppm/ppmtompeg/headers/frames.h b/converter/ppm/ppmtompeg/headers/frames.h new file mode 100644 index 00000000..3fefaea7 --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/frames.h @@ -0,0 +1,487 @@ +/*===========================================================================* + * frames.h + * + * stuff dealing with frames + * + *===========================================================================*/ + +#ifndef FRAMES_INCLUDED +#define FRAMES_INCLUDED + +/*==============* + * HEADER FILES * + *==============*/ + +#include "ansi.h" +#include "mtypes.h" +#include "mheaders.h" +#include "frame.h" + + +/*===========* + * CONSTANTS * + *===========*/ + +#define I_FRAME 1 +#define P_FRAME 2 +#define B_FRAME 3 + +#define LUM_BLOCK 0 +#define CHROM_BLOCK 1 +#define CR_BLOCK 2 +#define CB_BLOCK 3 + +#define MOTION_FORWARD 0 +#define MOTION_BACKWARD 1 +#define MOTION_INTERPOLATE 2 + + +#define USE_HALF 0 +#define USE_FULL 1 + + /* motion vector stuff */ +#define FORW_F_CODE fCode /* from picture header */ +#define BACK_F_CODE fCode +#define FORW_F (1 << (FORW_F_CODE - 1)) +#define BACK_F (1 << (BACK_F_CODE - 1)) +#define RANGE_NEG (-(1 << (3 + FORW_F_CODE))) +#define RANGE_POS ((1 << (3 + FORW_F_CODE))-1) +#define MODULUS (1 << (4 + FORW_F_CODE)) + +#define ORIGINAL_FRAME 0 +#define DECODED_FRAME 1 + + +/*=======================* + * STRUCTURE DEFINITIONS * + *=======================*/ + +typedef struct FrameTableStruct { + /* the following are all initted once and never changed */ + /* (they depend only on the pattern */ + char typ; + struct FrameTableStruct *next; + struct FrameTableStruct *prev; + + /* nextOutput is a pointer to next frame table entry to output */ + struct FrameTableStruct *nextOutput; + + boolean freeNow; /* TRUE iff no frames point back to this */ + + int number; + + int bFrameNumber; /* actual frame number, if a b-frame */ + +} FrameTable; + + +/*==================* + * TYPE DEFINITIONS * + *==================*/ + +typedef struct dct_data_tye_struct { + char useMotion; + char pattern, mode; + int fmotionX, fmotionY, bmotionX, bmotionY; +} dct_data_type; + +void EncodeYDC _ANSI_ARGS_((int32 dc_term, int32 *pred_term, BitBucket *bb)); +void +EncodeCDC(int32 const dc_term, + int32 * const pred_term, + BitBucket * const bb); + + +/*========* + * MACROS * + *========*/ + +/* return ceiling(a/b) where a, b are ints, using temp value c */ +#define int_ceil_div(a,b,c) ((b*(c = a/b) < a) ? (c+1) : c) +#define int_floor_div(a,b,c) ((b*(c = a/b) > a) ? (c-1) : c) + +/* assumes many things: + * block indices are (y,x) + * variables y_dc_pred, cr_dc_pred, and cb_dc_pred + * flat block fb exists + */ +#define GEN_I_BLOCK(frameType, frame, bb, mbAI, qscale) { \ + boolean overflow, overflowChange=FALSE; \ + int overflowValue = 0; \ + do { \ + overflow = Mpost_QuantZigBlock(dct[y][x], fb[0], \ + qscale, TRUE)==MPOST_OVERFLOW; \ + overflow |= Mpost_QuantZigBlock(dct[y][x+1], fb[1], \ + qscale, TRUE)==MPOST_OVERFLOW; \ + overflow |= Mpost_QuantZigBlock(dct[y+1][x], fb[2], \ + qscale, TRUE)==MPOST_OVERFLOW; \ + overflow |= Mpost_QuantZigBlock(dct[y+1][x+1], fb[3], \ + qscale, TRUE)==MPOST_OVERFLOW; \ + overflow |= Mpost_QuantZigBlock(dctb[y >> 1][x >> 1], \ + fb[4], qscale, TRUE)==MPOST_OVERFLOW; \ + overflow |= Mpost_QuantZigBlock(dctr[y >> 1][x >> 1], \ + fb[5], qscale, TRUE)==MPOST_OVERFLOW; \ + if ((overflow) && (qscale!=31)) { \ + overflowChange = TRUE; overflowValue++; \ + qscale++; \ + } else overflow = FALSE; \ + } while (overflow); \ + Mhead_GenMBHeader(bb, \ + frameType /* pict_code_type */, mbAI /* addr_incr */, \ + qscale /* q_scale */, \ + 0 /* forw_f_code */, 0 /* back_f_code */, \ + 0 /* horiz_forw_r */, 0 /* vert_forw_r */, \ + 0 /* horiz_back_r */, 0 /* vert_back_r */, \ + 0 /* motion_forw */, 0 /* m_horiz_forw */, \ + 0 /* m_vert_forw */, 0 /* motion_back */, \ + 0 /* m_horiz_back */, 0 /* m_vert_back */, \ + 0 /* mb_pattern */, TRUE /* mb_intra */); \ + \ + /* Y blocks */ \ + EncodeYDC(fb[0][0], &y_dc_pred, bb); \ + Mpost_RLEHuffIBlock(fb[0], bb); \ + EncodeYDC(fb[1][0], &y_dc_pred, bb); \ + Mpost_RLEHuffIBlock(fb[1], bb); \ + EncodeYDC(fb[2][0], &y_dc_pred, bb); \ + Mpost_RLEHuffIBlock(fb[2], bb); \ + EncodeYDC(fb[3][0], &y_dc_pred, bb); \ + Mpost_RLEHuffIBlock(fb[3], bb); \ + \ + /* CB block */ \ + EncodeCDC(fb[4][0], &cb_dc_pred, bb); \ + Mpost_RLEHuffIBlock(fb[4], bb); \ + \ + /* CR block */ \ + EncodeCDC(fb[5][0], &cr_dc_pred, bb); \ + Mpost_RLEHuffIBlock(fb[5], bb); \ + if (overflowChange) qscale -= overflowValue; \ + } + +#define BLOCK_TO_FRAME_COORD(bx1, bx2, x1, x2) { \ + x1 = (bx1)*DCTSIZE; \ + x2 = (bx2)*DCTSIZE; \ + } + +static __inline__ void +MotionToFrameCoord(int const by, + int const bx, + int const my, + int const mx, + int * const yP, + int * const xP) { +/*---------------------------------------------------------------------------- + Given a DCT block location and a motion vector, return the pixel + coordinates to which the upper left corner of the block moves. + + Return negative coordinates if it moves out of frame. +-----------------------------------------------------------------------------*/ + *yP = by * DCTSIZE + my; + *xP = bx * DCTSIZE + mx; +} + +#define COORD_IN_FRAME(fy,fx, type) \ + ((type == LUM_BLOCK) ? \ + ((fy >= 0) && (fx >= 0) && (fy < Fsize_y) && (fx < Fsize_x)) : \ + ((fy >= 0) && (fx >= 0) && (fy < (Fsize_y>>1)) && (fx < (Fsize_x>>1)))) + + +static __inline__ void +encodeMotionVector(int const x, + int const y, + vector * const qP, + vector * const rP, + int const f, + int const fCode) { + + int tempX; + int tempY; + int tempC; + + if (x < RANGE_NEG) + tempX = x + MODULUS; + else if (x > RANGE_POS) + tempX = x - MODULUS; + else + tempX = x; + + if (y < RANGE_NEG) + tempY = y + MODULUS; + else if (y > RANGE_POS) + tempY = y - MODULUS; + else + tempY = y; + + if (tempX >= 0) { + qP->x = int_ceil_div(tempX, f, tempC); + rP->x = f - 1 + tempX - qP->x*f; + } else { + qP->x = int_floor_div(tempX, f, tempC); + rP->x = f - 1 - tempX + qP->x*f; + } + + if (tempY >= 0) { + qP->y = int_ceil_div(tempY, f, tempC); + rP->y = f - 1 + tempY - qP->y*f; + } else { + qP->y = int_floor_div(tempY, f, tempC); + rP->y = f - 1 - tempY + qP->y*f; + } +} + + +#define DoQuant(bit, src, dest) \ + if (pattern & bit) { \ + switch (Mpost_QuantZigBlock(src, dest, QScale, FALSE)) { \ + case MPOST_NON_ZERO: \ + break; \ + case MPOST_ZERO: \ + pattern ^= bit; \ + break; \ + case MPOST_OVERFLOW: \ + if (QScale != 31) { \ + QScale++; \ + overflowChange = TRUE; \ + overflowValue++; \ + goto calc_blocks; \ + } \ + break; \ + } \ + } + +/*===============================* + * EXTERNAL PROCEDURE prototypes * + *===============================*/ + +void +ComputeBMotionLumBlock(MpegFrame * const prev, + MpegFrame * const next, + int const by, + int const bx, + int const mode, + motion const motion, + LumBlock * const motionBlockP); + +int +BMotionSearch(const LumBlock * const currentBlockP, + MpegFrame * const prev, + MpegFrame * const next, + int const by, + int const bx, + motion * const motionP, + int const oldMode); + +void GenIFrame (BitBucket * const bb, + MpegFrame * const mf); +void GenPFrame (BitBucket * const bb, + MpegFrame * const current, + MpegFrame * const prev); +void GenBFrame (BitBucket * const bb, + MpegFrame * const curr, + MpegFrame * const prev, + MpegFrame * const next); +void AllocDctBlocks _ANSI_ARGS_((void )); + + +float +IFrameTotalTime(void); + +float +PFrameTotalTime(void); + +float +BFrameTotalTime(void); + +void +ShowIFrameSummary(unsigned int const inputFrameBits, + unsigned int const totalBits, + FILE * const fpointer); + +void +ShowPFrameSummary(unsigned int const inputFrameBits, + unsigned int const totalBits, + FILE * const fpointer); + +void +ShowBFrameSummary(unsigned int const inputFrameBits, + unsigned int const totalBits, + FILE * const fpointer); + +/* DIFFERENCE FUNCTIONS */ + +int32 +LumBlockMAD(const LumBlock * const currentBlockP, + const LumBlock * const motionBlockP, + int32 const bestSoFar); + +int32 +LumBlockMSE(const LumBlock * const currentBlockP, + const LumBlock * const motionBlockP, + int32 const bestSoFar); + +int32 +LumMotionError(const LumBlock * const currentBlockP, + MpegFrame * const prev, + int const by, + int const bx, + vector const m, + int32 const bestSoFar); + +int32 +LumAddMotionError(const LumBlock * const currentBlockP, + const LumBlock * const blockSoFarP, + MpegFrame * const prev, + int const by, + int const bx, + vector const m, + int32 const bestSoFar); + +int32 +LumMotionErrorA(const LumBlock * const currentBlockP, + MpegFrame * const prevFrame, + int const by, + int const bx, + vector const m, + int32 const bestSoFar); + +int32 +LumMotionErrorB(const LumBlock * const currentP, + MpegFrame * const prevFrame, + int const by, + int const bx, + vector const m, + int32 const bestSoFar); + +int32 +LumMotionErrorC(const LumBlock * const currentP, + MpegFrame * const prevFrame, + int const by, + int const bx, + vector const m, + int32 const bestSoFar); + +int32 +LumMotionErrorD(const LumBlock * const currentP, + MpegFrame * const prevFrame, + int const by, + int const bx, + vector const m, + int32 const bestSoFar); + +int32 +LumMotionErrorSubSampled(const LumBlock * const currentBlockP, + MpegFrame * const prevFrame, + int const by, + int const bx, + vector const m, + int const startY, + int const startX); + +void +BlockComputeSNR(MpegFrame * const current, + float * const snr, + float * const psnr); + +int32 +time_elapsed(void); + +void +AllocDctBlocks(void); + +/*==================* + * GLOBAL VARIABLES * + *==================*/ + +extern int pixelFullSearch; +extern int searchRangeP,searchRangeB; /* defined in psearch.c */ +extern int qscaleI; +extern int gopSize; +extern int slicesPerFrame; +extern int blocksPerSlice; +extern int referenceFrame; +extern int specificsOn; +extern int quietTime; /* shut up for at least quietTime seconds; + * negative means shut up forever + */ +extern boolean realQuiet; /* TRUE = no messages to stdout */ + +extern boolean frameSummary; /* TRUE = frame summaries should be printed */ +extern boolean printSNR; +extern boolean printMSE; +extern boolean decodeRefFrames; /* TRUE = should decode I and P frames */ +extern int fCodeI,fCodeP,fCodeB; +extern boolean forceEncodeLast; +extern int TIME_RATE; + +#endif /* FRAMES_INCLUDED */ + + +/* + * 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. + */ + +/* + * $Header: /n/picasso/project/mpeg/mpeg_dist/mpeg_encode/headers/RCS/frames.h,v 1.13 1995/08/15 23:43:04 smoot Exp $ + * $Log: frames.h,v $ + * Revision 1.13 1995/08/15 23:43:04 smoot + * *** empty log message *** + * + * Revision 1.12 1995/04/14 23:13:18 smoot + * Reorganized for better rate control. Added overflow in DCT values + * handling. + * + * Revision 1.11 1995/01/19 23:54:46 smoot + * allow computediffdcts to un-assert parts of the pattern + * + * Revision 1.10 1995/01/16 07:43:10 eyhung + * Added realQuiet + * + * Revision 1.9 1995/01/10 23:15:28 smoot + * Fixed searchRange lack of def + * + * Revision 1.8 1994/11/15 00:55:36 smoot + * added printMSE + * + * Revision 1.7 1994/11/14 22:51:02 smoot + * added specifics flag. Added BlockComputeSNR parameters + * + * Revision 1.6 1994/11/01 05:07:23 darryl + * with rate control changes added + * + * Revision 1.1 1994/09/27 01:02:55 darryl + * Initial revision + * + * Revision 1.5 1993/07/22 22:24:23 keving + * nothing + * + * Revision 1.4 1993/07/09 00:17:23 keving + * nothing + * + * Revision 1.3 1993/06/03 21:08:53 keving + * nothing + * + * Revision 1.2 1993/03/02 19:00:27 keving + * nothing + * + * Revision 1.1 1993/02/19 20:15:51 keving + * nothing + * + */ + + diff --git a/converter/ppm/ppmtompeg/headers/frametype.h b/converter/ppm/ppmtompeg/headers/frametype.h new file mode 100644 index 00000000..63bee964 --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/frametype.h @@ -0,0 +1,17 @@ +#ifndef FRAMETYPE_H_INCLUDED +#define FRAMETYPE_H_INCLUDED + +char +FType_Type(unsigned int const frameNum); + +unsigned int +FType_FutureRef(unsigned int const currFrameNum); + +int FType_PastRef _ANSI_ARGS_((int currFrameNum)); + +void SetFramePattern(const char * const pattern); + +void +ComputeFrameTable(unsigned int const numFrames); + +#endif diff --git a/converter/ppm/ppmtompeg/headers/fsize.h b/converter/ppm/ppmtompeg/headers/fsize.h new file mode 100644 index 00000000..6a1c910e --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/fsize.h @@ -0,0 +1,49 @@ +/*===========================================================================* + * fsize.h * + * * + * procedures to deal with frame size * + * * + *===========================================================================*/ + +/* + * 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. + */ + + +#ifndef FSIZE_H_INCLUDED +#define FSIZE_H_INCLUDED + +extern int Fsize_x; +extern int Fsize_y; + + +void +Fsize_Reset(void); + +void +Fsize_Validate(int * const xP, + int * const yP); + +void +Fsize_Note(int const id, + unsigned int const width, + unsigned int const height); + +#endif diff --git a/converter/ppm/ppmtompeg/headers/general.h b/converter/ppm/ppmtompeg/headers/general.h new file mode 100644 index 00000000..f29c9445 --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/general.h @@ -0,0 +1,174 @@ +/*===========================================================================* + * general.h * + * * + * very general stuff * + * * + *===========================================================================*/ + +/* + * 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. + */ + +/* + * $Header: /n/picasso/project/mpeg/mpeg_dist/mpeg_encode/headers/RCS/general.h,v 1.7 1995/08/04 23:34:13 smoot Exp $ + * $Log: general.h,v $ + * Revision 1.7 1995/08/04 23:34:13 smoot + * jpeg5 changed the silly HAVE_BOOLEAN define.... + * + * Revision 1.6 1995/01/19 23:54:49 eyhung + * Changed copyrights + * + * Revision 1.5 1994/11/12 02:12:48 keving + * nothing + * + * Revision 1.4 1993/07/22 22:24:23 keving + * nothing + * + * Revision 1.3 1993/07/09 00:17:23 keving + * nothing + * + * Revision 1.2 1993/06/03 21:08:53 keving + * nothing + * + * Revision 1.1 1993/02/22 22:39:19 keving + * nothing + * + */ + + +#ifndef GENERAL_INCLUDED +#define GENERAL_INCLUDED + + +/* prototypes for library procedures + * + * if your /usr/include headers do not have these, then pass -DMISSING_PROTOS + * to your compiler + * + */ +#ifdef MISSING_PROTOS +int fprintf(); +int fwrite(); +int fread(); +int fflush(); +int fclose(); + +int sscanf(); +int bzero(); +int bcopy(); +int system(); +int time(); +int perror(); + +int socket(); +int bind(); +int listen(); +int accept(); +int connect(); +int close(); +int read(); +int write(); + +int pclose(); + +#endif + + +/*===========* + * CONSTANTS * + *===========*/ + +#ifndef NULL +#define NULL 0 +#endif + +#ifndef TRUE +#define TRUE 1 +#define FALSE 0 +#endif + +#define SPACE ' ' +#define TAB '\t' +#define SEMICOLON ';' +#define NULL_CHAR '\0' +#define NEWLINE '\n' + + +/*==================* + * TYPE DEFINITIONS * + *==================*/ + +#ifndef HAVE_BOOLEAN +typedef int boolean; +#define HAVE_BOOLEAN +/* JPEG library also defines boolean */ +#endif + +/* In the following, we need the "signed" in order to make these typedefs + match those in AIX system header files. Otherwise, compile fails on + AIX. 2000.09.11. +*/ +typedef unsigned char uint8; +typedef signed char int8; +typedef unsigned short uint16; +typedef signed short int16; + +/* The 32 bit integer types are probably obsolete. + + parallel.c used to use them as buffers for socket I/O, because in the + protocol on the socket, an integer is represented by 4 octets. But + the proper type for that is unsigned char[4], so we changed parallel.c + to that in September 2004. + + A user of TRU64 4.0f in May 2000 used a -DLONG_32 option, but did + not indicate that it was really necessary. After that, Configure + added -DLONG_32 for all TRU64 builds. A user of TRU64 5.1A in July + 2003 demonstrated that int is in fact 4 bytes on his machine (and + long is 8 bytes). So we removed the -DLONG_32 from Configure. This + whole issue may too be obsolete because of the fixing of parallel.c + mentioned above. +*/ + + /* LONG_32 should only be defined iff + * 1) long's are 32 bits and + * 2) int's are not + */ +#ifdef LONG_32 +typedef unsigned long uint32; +typedef long int32; +#else +typedef unsigned int uint32; +typedef signed int int32; +#endif + + +/*========* + * MACROS * + *========*/ + +#undef max +#define max(a,b) ((a) > (b) ? (a) : (b)) +#undef min +#define min(a,b) ((a) < (b) ? (a) : (b)) +#undef abs +#define abs(a) ((a) >= 0 ? (a) : -(a)) + + +#endif diff --git a/converter/ppm/ppmtompeg/headers/huff.h b/converter/ppm/ppmtompeg/headers/huff.h new file mode 100644 index 00000000..47ffb843 --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/huff.h @@ -0,0 +1,34 @@ +/* + * 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. + */ + +/* + * $Header: /n/charlie-brown/project/mm/mpeg/mpeg_dist/mpeg_encode/headers/RCS/huff.h,v 1.3 1995/01/19 23:54:51 eyhung Exp $ + */ + +/* + * THIS FILE IS MACHINE GENERATED! DO NOT EDIT! + */ +#define HUFF_MAXRUN 32 +#define HUFF_MAXLEVEL 41 + +extern int huff_maxlevel[]; +extern uint32 *huff_table[]; +extern int *huff_bits[]; diff --git a/converter/ppm/ppmtompeg/headers/input.h b/converter/ppm/ppmtompeg/headers/input.h new file mode 100644 index 00000000..75734237 --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/input.h @@ -0,0 +1,70 @@ +#ifndef INPUT_H_INCLUDED +#define INPUT_H_INCLUDED + +#include "pm_c_util.h" +#include "ppm.h" +#include "frame.h" + +struct InputFileEntry; + +struct inputSource { +/*---------------------------------------------------------------------------- + This describes the source of data for the program. + Typically, the source data is a bunch of raw frames in PPM format. + But sometimes, it is a bunch of already encoded frames or GOPs. +-----------------------------------------------------------------------------*/ + bool stdinUsed; + int numInputFiles; + /* This is the maximum number of input files available. If + we're reading from explicitly named files, it is exactly + the number available. If we're reading from a stream, it's + infinity. (At the moment, "reading from a stream" is + equivalent to "reading from Standard Input"). + */ + + /* Members below here defined only if 'stdinUsed' is false */ + + struct InputFileEntry ** inputFileEntries; + /* Each element of this array describes a set of input files. + Valid elements are consecutive starting at index 0. + */ + unsigned int numInputFileEntries; + /* Number of valid entries in array inputFileEntries[] */ + unsigned int ifArraySize; + /* Number of allocated entries in the array inputFileEntries[] */ +}; + + +void +GetNthInputFileName(struct inputSource * const inputSourceP, + unsigned int const n, + const char ** const fileName); + +void +ReadNthFrame(struct inputSource * const inputSourceP, + unsigned int const frameNumber, + boolean const remoteIO, + boolean const childProcess, + boolean const separateConversion, + const char * const slaveConversion, + const char * const inputConversion, + MpegFrame * const frameP, + bool * const endOfStreamP); + +void +JM2JPEG(struct inputSource * const inputSourceP); + +void +AddInputFiles(struct inputSource * const inputSourceP, + const char * const input); + +void +SetStdinInput(struct inputSource * const inputSourceP); + +void +CreateInputSource(struct inputSource ** const inputSourcePP); + +void +DestroyInputSource(struct inputSource * const inputSourceP); + +#endif diff --git a/converter/ppm/ppmtompeg/headers/jpeg.h b/converter/ppm/ppmtompeg/headers/jpeg.h new file mode 100644 index 00000000..62c6f930 --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/jpeg.h @@ -0,0 +1,12 @@ +#include "ansi.h" + + +void +JMovie2JPEG(const char * const infilename, + const char * const obase, + int const start, + int const end); + +void +ReadJPEG(MpegFrame * const mf, + FILE * const fp); diff --git a/converter/ppm/ppmtompeg/headers/mheaders.h b/converter/ppm/ppmtompeg/headers/mheaders.h new file mode 100644 index 00000000..21d43e3d --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/mheaders.h @@ -0,0 +1,114 @@ +/*===========================================================================* + * mheaders.h * + * * + * MPEG headers * + * * + *===========================================================================*/ + +/* + * 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. + */ + +/* + * $Header: /n/picasso/project/mm/mpeg/mpeg_dist/mpeg_encode/headers/RCS/mheaders.h,v 1.4 1995/03/27 19:29:24 smoot Exp $ + * $Log: mheaders.h,v $ + * Revision 1.4 1995/03/27 19:29:24 smoot + * changed to remove mb_quant + * + * Revision 1.3 1995/01/19 23:54:56 eyhung + * Changed copyrights + * + * Revision 1.2 1994/11/12 02:12:51 keving + * nothing + * + * Revision 1.1 1993/07/22 22:24:23 keving + * nothing + * + * + */ + + +#ifndef MHEADERS_INCLUDED +#define MHEADERS_INCLUDED + + +/*==============* + * HEADER FILES * + *==============*/ + +#include "general.h" +#include "ansi.h" +#include "bitio.h" + + +/*===============================* + * EXTERNAL PROCEDURE prototypes * + *===============================*/ + +void SetGOPStartTime _ANSI_ARGS_((int index)); + +void +Mhead_GenSequenceHeader(BitBucket * const bbPtr, + uint32 const hsize, + uint32 const vsize, + int32 const pratio, + int32 const pict_rate, + int32 const bit_rate_arg, + int32 const buf_size_arg, + int32 const c_param_flag_arg, + const int32 * const iq_matrix, + const int32 * const niq_matrix, + uint8 * const ext_data, + int32 const ext_data_size, + uint8 * const user_data, + int32 const user_data_size); + +void Mhead_GenSequenceEnder _ANSI_ARGS_((BitBucket *bbPtr)); +void Mhead_GenGOPHeader _ANSI_ARGS_((BitBucket *bbPtr, + int32 drop_frame_flag, + int32 tc_hrs, int32 tc_min, + int32 tc_sec, int32 tc_pict, + int32 closed_gop, int32 broken_link, + uint8 *ext_data, int32 ext_data_size, + uint8 *user_data, int32 user_data_size)); +void Mhead_GenPictureHeader _ANSI_ARGS_((BitBucket *bbPtr, int frameType, + int pictCount, int f_code)); +void Mhead_GenSliceHeader _ANSI_ARGS_((BitBucket *bbPtr, uint32 slicenum, + uint32 qscale, uint8 *extra_info, + uint32 extra_info_size)); +void Mhead_GenSliceEnder _ANSI_ARGS_((BitBucket *bbPtr)); +void Mhead_GenMBHeader _ANSI_ARGS_((BitBucket *bbPtr, + uint32 pict_code_type, uint32 addr_incr, + uint32 q_scale, + uint32 forw_f_code, uint32 back_f_code, + uint32 horiz_forw_r, uint32 vert_forw_r, + uint32 horiz_back_r, uint32 vert_back_r, + int32 motion_forw, int32 m_horiz_forw, + int32 m_vert_forw, int32 motion_back, + int32 m_horiz_back, int32 m_vert_back, + uint32 mb_pattern, uint32 mb_intra)); + + +#endif /* MHEADERS_INCLUDED */ + + + + + diff --git a/converter/ppm/ppmtompeg/headers/motion_search.h b/converter/ppm/ppmtompeg/headers/motion_search.h new file mode 100644 index 00000000..ab83cbca --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/motion_search.h @@ -0,0 +1,154 @@ +/*===========================================================================* + * search.h * + * * + * stuff dealing with the motion search * + * * + *===========================================================================*/ + +/*==============* + * HEADER FILES * + *==============*/ + +#include "ansi.h" + + +/*===========* + * CONSTANTS * + *===========*/ + +#define PSEARCH_SUBSAMPLE 0 +#define PSEARCH_EXHAUSTIVE 1 +#define PSEARCH_LOGARITHMIC 2 +#define PSEARCH_TWOLEVEL 3 + +#define BSEARCH_EXHAUSTIVE 0 +#define BSEARCH_CROSS2 1 +#define BSEARCH_SIMPLE 2 + + +/*========* + * MACROS * + *========*/ + +#define COMPUTE_MOTION_BOUNDARY(by,bx,stepSize,leftMY,leftMX,rightMY,rightMX)\ +leftMY = -2*DCTSIZE*by; /* these are valid motion vectors */ \ +leftMX = -2*DCTSIZE*bx; \ +/* these are invalid motion vectors */ \ +rightMY = 2*(Fsize_y - (by+2)*DCTSIZE + 1) - 1; \ +rightMX = 2*(Fsize_x - (bx+2)*DCTSIZE + 1) - 1; \ +\ +if ( stepSize == 2 ) { \ + rightMY++; \ + rightMX++; \ + } + +#define VALID_MOTION(m) \ +(((m).y >= leftMY) && ((m).y < rightMY) && \ + ((m).x >= leftMX) && ((m).x < rightMX) ) + + +/*===============================* + * EXTERNAL PROCEDURE prototypes * + *===============================*/ + +void +SetPSearchAlg(const char * const alg); +void +SetBSearchAlg(const char * const alg); +const char * +BSearchName(void); +const char * +PSearchName(void); + +int +PLogarithmicSearch(const LumBlock * const currentBlockP, + MpegFrame * const prev, + int const by, + int const bx, + vector * const motionP, + int const searchRange); + +int +PSubSampleSearch(const LumBlock * const currentBlockP, + MpegFrame * const prev, + int const by, + int const bx, + vector * const motionP, + int const searchRange); + +int +PLocalSearch(const LumBlock * const currentBlockP, + MpegFrame * const prev, + int const by, + int const bx, + vector * const motionP, + int const bestSoFar, + int const searchRange); + +int +PTwoLevelSearch(const LumBlock * const currentBlockP, + MpegFrame * const prev, + int const by, + int const bx, + vector * const motionP, + int const bestSoFar, + int const searchRange); +void +PMotionSearch(const LumBlock * const currentBlockP, + MpegFrame * const prev, + int const by, + int const bx, + vector * const motionP); + +/*==================* + * GLOBAL VARIABLES * + *==================*/ + +extern int psearchAlg; + +/* + * 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. + */ + +/* + * $Header: /n/picasso/project/mpeg/mpeg_dist/mpeg_encode/headers/RCS/search.h,v 1.6 1995/08/15 23:43:36 smoot Exp $ + * $Log: search.h,v $ + * Revision 1.6 1995/08/15 23:43:36 smoot + * *** empty log message *** + * + * Revision 1.5 1995/01/19 23:55:20 eyhung + * Changed copyrights + * + * Revision 1.4 1994/12/07 00:42:01 smoot + * Added seperate P and B search ranges + * + * Revision 1.3 1994/11/12 02:12:58 keving + * nothing + * + * Revision 1.2 1993/07/22 22:24:23 keving + * nothing + * + * Revision 1.1 1993/07/09 00:17:23 keving + * nothing + * + */ + + + diff --git a/converter/ppm/ppmtompeg/headers/mpeg.h b/converter/ppm/ppmtompeg/headers/mpeg.h new file mode 100644 index 00000000..d739dede --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/mpeg.h @@ -0,0 +1,116 @@ +/*===========================================================================* + * mpeg.h * + * * + * no comment * + * * + *===========================================================================*/ + +/* + * 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. + */ + +/*==============* + * HEADER FILES * + *==============*/ + +#include + +#include "pm_c_util.h" +#include "ppm.h" +#include "ansi.h" +#include "mtypes.h" +#include "frame.h" + +struct inputSource; + +/*===============================* + * EXTERNAL PROCEDURE prototypes * + *===============================*/ + +enum frameContext {CONTEXT_WHOLESTREAM, CONTEXT_GOP, CONTEXT_JUSTFRAMES}; + +void +GenMPEGStream(struct inputSource * const inputSourceP, + enum frameContext const context, + unsigned int const frameStart, + unsigned int const frameEnd, + int32 const qtable[], + int32 const niqtable[], + bool const childProcess, + FILE * const ofp, + const char * const outputFileName, + bool const wantVbvUnderflowWarning, + bool const wantVbvOverflowWarning, + unsigned int * const inputFrameBitsP, + unsigned int * const totalBitsP); + +void +PrintStartStats(time_t const startTime, + bool const specificFrames, + unsigned int const firstFrame, + unsigned int const lastFrame, + struct inputSource * const inputSourceP); + +void +PrintEndStats(time_t const startTime, + time_t const endTime, + unsigned int const inputFrameBits, + unsigned int const totalBits); + +void +ComputeGOPFrames(int const whichGOP, + unsigned int * const firstFrameP, + unsigned int * const lastFrameP, + unsigned int const numFrames); + +extern void IncrementTCTime _ANSI_ARGS_((void)); +void SetReferenceFrameType(const char * const type); + +boolean +NonLocalRefFrame(int const id); + +void +ReadDecodedRefFrame(MpegFrame * const frameP, + unsigned int const frameNumber); + +extern void WriteDecodedFrame _ANSI_ARGS_((MpegFrame *frame)); +extern void SetBitRateFileName _ANSI_ARGS_((char *fileName)); +extern void SetFrameRate _ANSI_ARGS_((void)); + + +/*==================* + * GLOBAL VARIABLES * + *==================*/ + +extern MpegFrame *frameMemory[3]; +extern int32 tc_hrs, tc_min, tc_sec, tc_pict, tc_extra; +extern int totalFramesSent; +extern int gopSize; +extern char *framePattern; +extern int framePatternLen; +extern int32 qtable[]; +extern int32 niqtable[]; +extern int32 *customQtable; +extern int32 *customNIQtable; +extern int aspectRatio; +extern int frameRate; +extern int frameRateRounded; +extern boolean frameRateInteger; + diff --git a/converter/ppm/ppmtompeg/headers/mproto.h b/converter/ppm/ppmtompeg/headers/mproto.h new file mode 100644 index 00000000..c3b0f4b3 --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/mproto.h @@ -0,0 +1,132 @@ +/*===========================================================================* + * mproto.h * + * * + * basically a lot of miscellaneous prototypes * + * * + *===========================================================================*/ + +/* + * 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. + */ + +/* + * $Header: /n/picasso/project/mm/mpeg/mpeg_dist/mpeg_encode/headers/RCS/mproto.h,v 1.12 1995/03/29 20:14:29 smoot Exp $ + * $Log: mproto.h,v $ + * Revision 1.12 1995/03/29 20:14:29 smoot + * deleted unneeded dct prototype + * + * Revision 1.11 1995/01/19 23:55:02 eyhung + * Changed copyrights + * + * Revision 1.10 1995/01/16 06:20:10 eyhung + * Changed ReadYUV to ReadEYUV + * + * Revision 1.9 1993/07/22 22:24:23 keving + * nothing + * + * Revision 1.8 1993/07/09 00:17:23 keving + * nothing + * + * Revision 1.7 1993/06/03 21:08:53 keving + * nothing + * + * Revision 1.6 1993/02/24 19:13:33 keving + * nothing + * + * Revision 1.5 1993/02/17 23:18:20 dwallach + * checkin prior to keving's joining the project + * + * Revision 1.4 1993/01/18 10:20:02 dwallach + * *** empty log message *** + * + * Revision 1.3 1993/01/18 10:17:29 dwallach + * RCS headers installed, code indented uniformly + * + * Revision 1.3 1993/01/18 10:17:29 dwallach + * RCS headers installed, code indented uniformly + * + */ + + +/*==============* + * HEADER FILES * + *==============*/ + +#include "general.h" +#include "ansi.h" +#include "bitio.h" + + +#define DCTSIZE2 DCTSIZE*DCTSIZE +typedef short DCTELEM; +typedef DCTELEM DCTBLOCK[DCTSIZE2]; + + + +/*===============================* + * EXTERNAL PROCEDURE prototypes * + *===============================*/ + +/* + * from mbasic.c: + */ +void mp_reset _ANSI_ARGS_((void)); +void mp_free _ANSI_ARGS_((MpegFrame *mf)); +MpegFrame *mp_new _ANSI_ARGS_((int fnumber, char type, MpegFrame *oldFrame)); +void mp_ycc_calc _ANSI_ARGS_((MpegFrame *mf)); +void mp_dct_blocks _ANSI_ARGS_((MpegFrame *mf)); +void AllocDecoded _ANSI_ARGS_((MpegFrame *frame)); + +/* + * from moutput.c: + */ +boolean mp_quant_zig_block _ANSI_ARGS_((Block in, FlatBlock out, int qscale, int iblock)); +void UnQuantZig _ANSI_ARGS_((FlatBlock in, Block out, int qscale, boolean iblock)); +void mp_rle_huff_block _ANSI_ARGS_((FlatBlock in, BitBucket *out)); +void mp_rle_huff_pblock _ANSI_ARGS_((FlatBlock in, BitBucket *out)); +void mp_create_blocks _ANSI_ARGS_((MpegFrame *mf)); + + + + +void ReadEYUV _ANSI_ARGS_((MpegFrame * mf, FILE *fpointer, int width, + int height)); +boolean ReadPPM _ANSI_ARGS_((MpegFrame *mf, FILE *fpointer)); +void PPMtoYCC _ANSI_ARGS_((MpegFrame * mf)); + +void MotionSearchPreComputation _ANSI_ARGS_((MpegFrame *frame)); +boolean PMotionSearch _ANSI_ARGS_((LumBlock currentBlock, MpegFrame *prev, + int by, int bx, int *motionY, int *motionX)); +void ComputeHalfPixelData _ANSI_ARGS_((MpegFrame *frame)); +void mp_validate_size _ANSI_ARGS_((int *x, int *y)); +void AllocYCC _ANSI_ARGS_((MpegFrame * mf)); + + +/* jrevdct.c */ +void init_pre_idct _ANSI_ARGS_((void )); +void j_rev_dct_sparse _ANSI_ARGS_((DCTBLOCK data , int pos )); +void j_rev_dct _ANSI_ARGS_((DCTBLOCK data )); +void j_rev_dct_sparse _ANSI_ARGS_((DCTBLOCK data , int pos )); +void j_rev_dct _ANSI_ARGS_((DCTBLOCK data )); + +/* block.c */ +void BlockToData _ANSI_ARGS_((uint8 **data, Block block, int by, int bx)); +void AddMotionBlock _ANSI_ARGS_((Block block, uint8 **prev, int by, int bx, + int my, int mx)); diff --git a/converter/ppm/ppmtompeg/headers/mtypes.h b/converter/ppm/ppmtompeg/headers/mtypes.h new file mode 100644 index 00000000..0db5a330 --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/mtypes.h @@ -0,0 +1,109 @@ +/*===========================================================================* + * mtypes.h + * + * MPEG data types + * + *===========================================================================*/ + +/* Copyright information is at end of file */ + +#ifndef MTYPES_INCLUDED +#define MTYPES_INCLUDED + + +/*==============* + * HEADER FILES * + *==============*/ + +#include "general.h" +#include "dct.h" + + +/*===========* + * CONSTANTS * + *===========*/ + +#define TYPE_BOGUS 0 /* for the header of the circular list */ +#define TYPE_VIRGIN 1 + +#define STATUS_EMPTY 0 +#define STATUS_LOADED 1 +#define STATUS_WRITTEN 2 + + +typedef struct vector { + int y; + int x; +} vector; + +typedef struct motion { + vector fwd; + vector bwd; +} motion; + +/*==================* + * TYPE DEFINITIONS * + *==================*/ + +/* + * your basic Block type + */ +typedef int16 Block[DCTSIZE][DCTSIZE]; +typedef int16 FlatBlock[DCTSIZE_SQ]; +typedef struct { + int32 l[2*DCTSIZE][2*DCTSIZE]; +} LumBlock; +typedef int32 ChromBlock[DCTSIZE][DCTSIZE]; + +/*========* + * MACROS * + *========*/ + +#ifdef ABS +#undef ABS +#endif + +#define ABS(x) (((x)<0)?-(x):(x)) + +#ifdef HEINOUS_DEBUG_MODE +#define DBG_PRINT(x) {printf x; fflush(stdout);} +#else +#define DBG_PRINT(x) +#endif + +#define ERRCHK(bool, str) {if(!(bool)) {perror(str); exit(1);}} + +/* For Specifics */ +typedef struct detalmv_def { + int typ,fx,fy,bx,by; +} BlockMV; +#define TYP_SKIP 0 +#define TYP_FORW 1 +#define TYP_BACK 2 +#define TYP_BOTH 3 + + +#endif /* MTYPES_INCLUDED */ + + +/* + * 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. + */ + diff --git a/converter/ppm/ppmtompeg/headers/opts.h b/converter/ppm/ppmtompeg/headers/opts.h new file mode 100644 index 00000000..5901a677 --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/opts.h @@ -0,0 +1,125 @@ +/* + * opts.h - set optional parameters + */ + +/* + * 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. + */ + +/* + * $Header: /n/picasso/project/mpeg/mpeg_dist/mpeg_encode/headers/RCS/opts.h,v 1.3 1995/08/15 23:43:43 smoot Exp $ + * $Log: opts.h,v $ + * Revision 1.3 1995/08/15 23:43:43 smoot + * *** empty log message *** + * + * Revision 1.2 1995/05/02 22:00:51 smoot + * added TUNEing stuff + * + * Revision 1.1 1995/04/14 23:12:53 smoot + * Initial revision + * + */ + +#include "general.h" +#include "ansi.h" +#include "mtypes.h" + +/* + TUNE b [limit] lower limit on how different a block must be to be DCT coded + TUNE c [file [color-diff]] Collect statistics on Quantization + TUNE d [RateScale DistortionScale] Do a DCT in the P search, not just DIFF + TUNE k [breakpt end [slope]] Squash small lum values + TUNE l Figure out Laplacian distrib and use them to dequantize and do snr calc + TUNE n Dont consider DC differenece in DCT searches + TUNE q Do MSE for distortion measure, not MAD + TUNE s [Max] | [LumMax ChromMax] Squash small differences in successive frames + TUNE u disallow skip blocks in B frames + TUNE w filename [c] Write I block distortion numbers to file [with bit-rates] + TUNE z Zaps Intra blocks in P/B frames. + + [ Note k and s make -snr numbers a lie, by playing with input ] + [ Note d n and q are contradictory (can only use one) ] + [ Note c will not work on parallel encodings ] +*/ + +extern boolean tuneingOn; + +/* Smash to no-change a motion block DCT with MAD less than: */ +/* DETAL b value */ +extern int block_bound; + +/* Collect info on quantization */ +extern boolean collect_quant; +extern int collect_quant_detailed; +extern FILE *collect_quant_fp; + +/* Nuke dim areas */ +extern int kill_dim, kill_dim_break, kill_dim_end; +extern float kill_dim_slope; + + +/* Stuff to control MV search comparisons */ +#define DEFAULT_SEARCH 0 +#define LOCAL_DCT 1 /* Do DCT in search (SLOW!!!!) */ +#define NO_DC_SEARCH 2 /* Dont consider DC component in motion searches */ +#define DO_Mean_Squared_Distortion 3 /* Do Squared distortion, not ABS */ + +/* Parameters for special searches */ +/* LOCAL_DCT */ +extern float LocalDCTRateScale, LocalDCTDistortScale; + +/* Search Type Variable */ +extern int SearchCompareMode; + +/* squash small differences */ +extern boolean squash_small_differences; +extern int SquashMaxLum, SquashMaxChr; + +/* Disallows Intra blocks in P/B code */ +extern boolean IntraPBAllowed; + +/* Write out distortion numbers */ +extern boolean WriteDistortionNumbers; +extern int collect_distortion_detailed; +extern FILE *distortion_fp; +extern FILE *fp_table_rate[31], *fp_table_dist[31]; + +/* Laplacian Distrib */ +extern boolean DoLaplace; +extern double **L1, **L2, **Lambdas; +extern int LaplaceNum, LaplaceCnum; + +/* Turn on/off skipping in B frames */ +extern boolean BSkipBlocks; + +/* Procedures Prototypes */ +int GetIQScale _ANSI_ARGS_((void)); +int GetPQScale _ANSI_ARGS_((void)); +int GetBQScale _ANSI_ARGS_((void)); +void Tune_Init _ANSI_ARGS_((void)); +int CalcRLEHuffLength _ANSI_ARGS_((FlatBlock in)); +void ParseTuneParam(const char * const charPtr); +int mse _ANSI_ARGS_((Block blk1, Block blk2)); +void Mpost_UnQuantZigBlockLaplace _ANSI_ARGS_((FlatBlock in, Block out, int qscale, boolean iblock)); +extern void CalcLambdas(void); + + + + diff --git a/converter/ppm/ppmtompeg/headers/parallel.h b/converter/ppm/ppmtompeg/headers/parallel.h new file mode 100644 index 00000000..e18d3f46 --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/parallel.h @@ -0,0 +1,135 @@ +/*===========================================================================* + * parallel.h + * + * parallel encoding + * + *===========================================================================*/ + +/* + * 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. + */ + +/*==============* + * HEADER FILES * + *==============*/ + +#include "ansi.h" +#include "bitio.h" +#include "frame.h" + + +struct inputSource; + +/*===============================* + * EXTERNAL PROCEDURE prototypes * + *===============================*/ + +void +MasterServer(struct inputSource * const inputSourceP, + const char * const paramFileName, + const char * const outputFileName); + +void +NotifyMasterDone(const char * const hostName, + int const portNum, + int const machineNumber, + unsigned int const seconds, + boolean * const moreWorkToDoP, + int * const frameStartP, + int * const frameEndP); + +void +IoServer(struct inputSource * const inputSourceP, + const char * const parallelHostName, + int const portNum); + +void +CombineServer(int const numInputFiles, + const char * const masterHostName, + int const masterPortNum, + const char* const outputFileName); + +void +DecodeServer(int const numInputFiles, + const char * const decodeFileName, + const char * const parallelHostName, + int const portNum); + +void +WaitForOutputFile(int number); + +void +GetRemoteFrame(MpegFrame * const frameP, + int const frameNumber); + +void +SendRemoteFrame(int const frameNumber, + BitBucket * const bbP); + +void +NoteFrameDone(int frameStart, int frameEnd); + +void +SetIOConvert(boolean separate); + +void +SetRemoteShell(const char * const shell); + +void +NotifyDecodeServerReady(int const id); + +void +WaitForDecodedFrame(int id); + +void +SendDecodedFrame(MpegFrame * const frameP); + +void +GetRemoteDecodedRefFrame(MpegFrame * const frameP, + int const frameNumber); + +void +SetParallelPerfect(boolean val); + + +/*==================* + * GLOBAL VARIABLES * + *==================*/ + +extern int parallelTestFrames; +extern int parallelTimeChunks; + +extern const char *IOhostName; +extern int ioPortNumber; +extern int decodePortNumber; + +extern boolean ioServer; +extern boolean niceProcesses; +extern boolean forceIalign; +extern int machineNumber; +extern boolean remoteIO; +extern boolean separateConversion; + + + + + + + diff --git a/converter/ppm/ppmtompeg/headers/param.h b/converter/ppm/ppmtompeg/headers/param.h new file mode 100644 index 00000000..31be61ee --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/param.h @@ -0,0 +1,87 @@ +/*===========================================================================* + * param.h * + * * + * reading the parameter file * + * * + *===========================================================================*/ + +/* + * 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. + */ + +#include "pm_c_util.h" +#include "ansi.h" +#include "input.h" + + +/*===========* + * CONSTANTS * + *===========*/ + +#define MAX_MACHINES 256 +#ifndef MAXPATHLEN +#define MAXPATHLEN 1024 +#endif + +#define ENCODE_FRAMES 0 +#define COMBINE_GOPS 1 +#define COMBINE_FRAMES 2 + + +struct params { + struct inputSource * inputSourceP; + bool warnUnderflow; + bool warnOverflow; +}; + + +void +ReadParamFile(const char * const fileName, + int const function, + struct params * const paramP); + +/*==================* + * GLOBAL VARIABLES * + *==================*/ + +/* All this stuff ought to be in a struct param instead */ + +extern char outputFileName[256]; +extern int whichGOP; +extern int numMachines; +extern char machineName[MAX_MACHINES][256]; +extern char userName[MAX_MACHINES][256]; +extern char executable[MAX_MACHINES][1024]; +extern char remoteParamFile[MAX_MACHINES][1024]; +extern boolean remote[MAX_MACHINES]; +extern char currentPath[MAXPATHLEN]; +extern char currentFramePath[MAXPATHLEN]; +extern char currentGOPPath[MAXPATHLEN]; +extern char inputConversion[1024]; +extern char yuvConversion[256]; +extern int yuvWidth, yuvHeight; +extern int realWidth, realHeight; +extern char ioConversion[1024]; +extern char slaveConversion[1024]; +extern FILE *bitRateFile; +extern boolean showBitRatePerFrame; +extern boolean computeMVHist; +extern const double VidRateNum[9]; +extern boolean keepTempFiles; diff --git a/converter/ppm/ppmtompeg/headers/postdct.h b/converter/ppm/ppmtompeg/headers/postdct.h new file mode 100644 index 00000000..3f3b51fe --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/postdct.h @@ -0,0 +1,40 @@ +/*===========================================================================* + * postdct.h * + * * + * MPEG post-DCT processing * + * * + *===========================================================================*/ + +/* + * 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. + */ + +#include "bitio.h" + + +int Mpost_QuantZigBlock (Block in, FlatBlock out, int qscale, int iblock); +void Mpost_UnQuantZigBlock (FlatBlock in, Block out, + int qscale, boolean iblock); +void Mpost_RLEHuffIBlock (FlatBlock in, BitBucket *out); +void Mpost_RLEHuffPBlock (FlatBlock in, BitBucket *out); + +#define MPOST_ZERO 0 +#define MPOST_NON_ZERO 1 +#define MPOST_OVERFLOW (-1) diff --git a/converter/ppm/ppmtompeg/headers/prototypes.h b/converter/ppm/ppmtompeg/headers/prototypes.h new file mode 100644 index 00000000..d729aafa --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/prototypes.h @@ -0,0 +1,78 @@ +/*===========================================================================* + * prototypes.h * + * * + * miscellaneous prototypes * + * * + *===========================================================================*/ + +/* + * 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. + */ +/*==============* + * HEADER FILES * + *==============*/ + +#include "general.h" +#include "ansi.h" +#include "frame.h" + + +/*===============================* + * EXTERNAL PROCEDURE prototypes * + *===============================*/ + +int GetBQScale _ANSI_ARGS_((void)); +int GetPQScale _ANSI_ARGS_((void)); +void ResetBFrameStats _ANSI_ARGS_((void)); +void ResetPFrameStats _ANSI_ARGS_((void)); +void SetSearchRange (int const pixelsP, + int const pixelsB); +void ResetIFrameStats _ANSI_ARGS_((void)); +void +SetPixelSearch(const char * const searchType); +void SetIQScale _ANSI_ARGS_((int qI)); +void SetPQScale _ANSI_ARGS_((int qP)); +void SetBQScale _ANSI_ARGS_((int qB)); +float EstimateSecondsPerIFrame _ANSI_ARGS_((void)); +float EstimateSecondsPerPFrame _ANSI_ARGS_((void)); +float EstimateSecondsPerBFrame _ANSI_ARGS_((void)); +void SetGOPSize _ANSI_ARGS_((int size)); +void +SetStatFileName(const char * const fileName); +void SetSlicesPerFrame _ANSI_ARGS_((int number)); +void SetBlocksPerSlice _ANSI_ARGS_((void)); + + +void DCTFrame _ANSI_ARGS_((MpegFrame * mf)); + +void PPMtoYCC _ANSI_ARGS_((MpegFrame * mf)); + +void MotionSearchPreComputation _ANSI_ARGS_((MpegFrame *frame)); + +void ComputeHalfPixelData _ANSI_ARGS_((MpegFrame *frame)); +void mp_validate_size _ANSI_ARGS_((int *x, int *y)); + +extern void SetFCode _ANSI_ARGS_((void)); + + +/* psearch.c */ +void ShowPMVHistogram _ANSI_ARGS_((FILE *fpointer)); +void ShowBBMVHistogram _ANSI_ARGS_((FILE *fpointer)); +void ShowBFMVHistogram _ANSI_ARGS_((FILE *fpointer)); diff --git a/converter/ppm/ppmtompeg/headers/psocket.h b/converter/ppm/ppmtompeg/headers/psocket.h new file mode 100644 index 00000000..214f5dce --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/psocket.h @@ -0,0 +1,41 @@ +#ifndef PSOCKET_H_INCLUDED +#define PSOCKET_H_INCLUDED + +#include + +void +ReadInt(int const socketFd, + int * const valueP); + +void +ReadBytes(int const fd, + unsigned char * const buf, + unsigned int const nbyte); + +void +WriteInt(int const socketFd, + int const value); + +void +WriteBytes(int const fd, + unsigned char * const buf, + unsigned int const nbyte); + +void +ConnectToSocket(const char * const machineName, + int const portNum, + struct hostent ** const hostEnt, + int * const socketFdP, + const char ** const errorP); + +void +CreateListeningSocket(int * const socketP, + int * const portNumP, + const char ** const errorP); + +void +AcceptConnection(int const listenSocketFd, + int * const connectSocketFdP, + const char ** const errorP); + +#endif diff --git a/converter/ppm/ppmtompeg/headers/rate.h b/converter/ppm/ppmtompeg/headers/rate.h new file mode 100644 index 00000000..df5ca1cc --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/rate.h @@ -0,0 +1,204 @@ +/*===========================================================================* + * rate.h * + * * + * Procedures concerned with rate control + * * + * EXPORTED PROCEDURES: * + * getRateMode() + * setBitRate() + * getBitRate() + * setBufferSize() + * getBufferSize() + * initRateControl() + * targetRateControl() + * updateRateControl() + * MB_RateOut() + * * + *===========================================================================*/ + +/* COPYRIGHT INFO HERE */ + +#define VARIABLE_RATE 0 +#define FIXED_RATE 1 + + +/*==================* + * Exported VARIABLES * + *==================*/ + + +extern int rc_bitsThisMB; +extern int rc_numBlocks; +extern int rc_totalQuant; +extern int rc_quantOverride; + + +/*=====================* + * EXPORTED PROCEDURES * + *=====================*/ + +/*===========================================================================* + * + * initRateControl + * + * initialize the allocation parameters. + *===========================================================================*/ +int +initRateControl(bool const wantUnderflowWarning, + bool const wantOverflowWarning); + +/*===========================================================================* + * + * targetRateControl + * + * Determine the target allocation for given picture type. + * + * RETURNS: target size in bits + *===========================================================================*/ +void +targetRateControl(MpegFrame * const frameP); + + +/*===========================================================================* + * + * MB_RateOut + * + * Prints out sampling of MB rate control data. Every "nth" block + * stats are printed, with "n" controled by global RC_MB_SAMPLE_RATE + * + * RETURNS: nothing + *===========================================================================*/ +extern void MB_RateOut _ANSI_ARGS_((int type)); + + +/*===========================================================================* + * + * updateRateControl + * + * Update the statistics kept, after end of frame + * + * RETURNS: nothing + * + * SIDE EFFECTS: many global variables + *===========================================================================*/ +void +updateRateControl(int const type); + + +/*===========================================================================* + * + * needQScaleChange(current Q scale, 4 luminance blocks) + * + * + * RETURNS: new Qscale + *===========================================================================*/ +extern int needQScaleChange _ANSI_ARGS_((int oldQScale, Block blk0, Block blk1, Block blk2, Block blk3)); + +/*===========================================================================* + * + * incNumBlocks() + * + * + * RETURNS: nothing + *===========================================================================*/ +extern void incNumBlocks _ANSI_ARGS_((int num)); + + +/*===========================================================================* + * + * incMacroBlockBits() + * + * Increments the number of Macro Block bits and the total of Frame + * bits by the number passed. + * + * RETURNS: nothing + *===========================================================================*/ +extern void incMacroBlockBits _ANSI_ARGS_((int num)); + + +/*===========================================================================* + * + * SetRateControl () + * + * Checks the string parsed from the parameter file. Verifies + * number and sets global values. + * + * RETURNS: nothing + *===========================================================================*/ +extern void SetRateControl _ANSI_ARGS_((char *charPtr)); + + +/*===========================================================================* + * + * setBufferSize () + * + * Checks the string parsed from the parameter file. Verifies + * number and sets global values. + * + * RETURNS: nothing + *===========================================================================*/ +extern void +setBufferSize(const char * const charPtr); + + +/*===========================================================================* + * + * getBufferSize () + * + * returns the buffer size read from the parameter file. Size is + * in bits- not in units of 16k as written to the sequence header. + * + * RETURNS: int (or -1 if invalid) + *===========================================================================*/ +extern int getBufferSize _ANSI_ARGS_((void)); + + +/*===========================================================================* + * + * setBitRate () + * + * Checks the string parsed from the parameter file. Verifies + * number and sets global values. + * + * RETURNS: nothing + * + * SIDE EFFECTS: global variables + *===========================================================================*/ +extern void +setBitRate(const char * const charPtr); + + +/*===========================================================================* + * + * getBitRate () + * + * Returns the bit rate read from the parameter file. This is the + * real rate in bits per second, not in 400 bit units as is written to + * the sequence header. + * + * RETURNS: int (-1 if Variable mode operation) + *===========================================================================*/ +extern int getBitRate _ANSI_ARGS_((void)); + + +/*===========================================================================* + * + * getRateMode () + * + * Returns the rate mode- interpreted waa either Fixed or Variable + * + * RETURNS: integer + *===========================================================================*/ +extern int getRateMode _ANSI_ARGS_((void)); + + +/*===========================================================================* + * + * incQuantOverride() + * + * counter of override of quantization + * + * RETURNS: nothing + *===========================================================================*/ +extern void incQuantOverride _ANSI_ARGS_((int num)); + diff --git a/converter/ppm/ppmtompeg/headers/readframe.h b/converter/ppm/ppmtompeg/headers/readframe.h new file mode 100644 index 00000000..3a6876b1 --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/readframe.h @@ -0,0 +1,69 @@ +/*===========================================================================* + * readframe.h * + * * + * stuff dealing with reading frames * + * * + *===========================================================================*/ + +/* + * 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. + */ + +#include "pm_c_util.h" + +/*===========* + * CONSTANTS * + *===========*/ + +#define PPM_FILE_TYPE 0 +#define YUV_FILE_TYPE 2 +#define ANY_FILE_TYPE 3 +#define BASE_FILE_TYPE 4 +#define PNM_FILE_TYPE 5 +#define SUB4_FILE_TYPE 6 +#define JPEG_FILE_TYPE 7 +#define JMOVIE_FILE_TYPE 8 +#define Y_FILE_TYPE 9 + + +struct inputSource; + +void +ReadFrameFile(MpegFrame * const frameP, + FILE * const ifP, + const char * const conversion, + bool * const eofP); + +void +ReadFrame(MpegFrame * const frameP, + struct inputSource * const inputSourceP, + unsigned int const frameNumber, + const char * const conversion, + bool * const endOfStreamP); + +FILE * +ReadIOConvert(struct inputSource * const inputSourceP, + unsigned int const frameNumber); + +extern void SetFileType(const char * const conversion); +extern void SetFileFormat(const char * const format); +extern void SetResize(bool const set); + +extern int baseFormat; diff --git a/converter/ppm/ppmtompeg/headers/rgbtoycc.h b/converter/ppm/ppmtompeg/headers/rgbtoycc.h new file mode 100644 index 00000000..52159963 --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/rgbtoycc.h @@ -0,0 +1,39 @@ +/*===========================================================================* + * rgbtoycc.h * + * * + * Procedures to convert from RGB space to YUV space * + * * + *===========================================================================*/ + +/* + * 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. + */ + + + +#include "frame.h" +#include "pnm.h" + +void +PNMtoYUV(MpegFrame * const frame, + xel ** const xels, + unsigned int const cols, + unsigned int const rows, + xelval const maxval); diff --git a/converter/ppm/ppmtompeg/headers/specifics.h b/converter/ppm/ppmtompeg/headers/specifics.h new file mode 100644 index 00000000..7bcf4ace --- /dev/null +++ b/converter/ppm/ppmtompeg/headers/specifics.h @@ -0,0 +1,36 @@ +#include "ansi.h" + + +/*===========* + * TYPES * + *===========*/ + +typedef struct bs_def { + int num; + boolean relative; + char qscale; + BlockMV *mv; /* defined in mtypes.h */ + struct bs_def *next; +} Block_Specifics; + +typedef struct detail_def { + int num; + char qscale; + struct detail_def *next; +} Slice_Specifics; + +typedef struct fsl_def { + int framenum; + int frametype; + char qscale; + Slice_Specifics *slc; + Block_Specifics *bs; + struct fsl_def *next; +} FrameSpecList; + + +void Specifics_Init _ANSI_ARGS_((void)); +int SpecLookup _ANSI_ARGS_((int fn, int typ, int num, + BlockMV **info, int start_qs)); +int SpecTypeLookup _ANSI_ARGS_((int fn)); + -- cgit 1.4.1