/* ************************************************************************* ** INTEL Corporation Proprietary Information ** ** This listing is supplied under the terms of a license ** agreement with INTEL Corporation and may not be copied ** nor disclosed except in accordance with the terms of ** that agreement. ** ** Copyright (c) 1995,1996 Intel Corporation. ** All Rights Reserved. ** ** ************************************************************************* */ //////////////////////////////////////////////////////////////////////////// // // $Author: JMCVEIGH $ // $Date: 05 Feb 1997 12:14:24 $ // $Archive: S:\h26x\src\common\cdrvdefs.h_v $ // $Header: S:\h26x\src\common\cdrvdefs.h_v 1.39 05 Feb 1997 12:14:24 JMCVEIGH $ // $Log: S:\h26x\src\common\cdrvdefs.h_v $ ;// ;// Rev 1.39 05 Feb 1997 12:14:24 JMCVEIGH ;// Support for improved PB-frames custom message handling. ;// ;// Rev 1.38 14 Jan 1997 11:17:14 JMCVEIGH ;// Put flag for old still-frame mode backward compatibility under ;// #ifdef H263P ;// ;// Rev 1.37 06 Jan 1997 17:38:08 JMCVEIGH ;// Added flag in LPDECINST to ensure backward compatibility with ;// old still-frame mode (crop CIF image to 320x240). ;// ;// Rev 1.36 16 Dec 1996 17:37:00 JMCVEIGH ;// Added H263Plus state and changed name for true B-frame mode. ;// ;// Rev 1.35 16 Dec 1996 13:40:46 MDUDA ;// Added compression and bit width fields to compress info. ;// ;// Rev 1.34 11 Dec 1996 14:56:46 JMCVEIGH ;// ;// Added H.263+ options to frame header structure and flags in ;// configuration structure. ;// ;// Rev 1.33 09 Dec 1996 17:43:10 JMCVEIGH ;// Added support for arbitrary frame size support. ;// ;// Rev 1.32 09 Dec 1996 09:24:42 MDUDA ;// ;// Re-arranged for H263P. ;// ;// Rev 1.31 10 Sep 1996 16:13:06 KLILLEVO ;// added custom message in decoder to turn block edge filter on or off ;// ;// Rev 1.30 10 Sep 1996 10:32:10 KLILLEVO ;// changed GlobalAlloc/GlobalLock to HeapAlloc ;// ;// Rev 1.29 06 Sep 1996 15:00:20 MBODART ;// Added performance counters for NT's perfmon. ;// New files: cxprf.cpp, cxprf.h and cxprf.cpp. ;// New directory: src\perf ;// Updated files: e1enc.{h,cpp}, d1dec.{h,cpp}, cdrvdefs.h, h261* makefiles. ;// ;// Rev 1.28 10 Jul 1996 08:26:38 SCDAY ;// H261 Quartz merge ;// ;// Rev 1.27 19 Jun 1996 14:37:26 RHAZRA ;// added #define FOURCC_YUY2 ;// ;// Rev 1.26 06 May 1996 12:56:34 BECHOLS ;// changed unbitspersecond to unBytesPerSecond. ;// ;// Rev 1.25 06 May 1996 00:42:36 BECHOLS ;// ;// Added support for the bit rate control in the configure dialog. ;// ;// Rev 1.24 26 Apr 1996 11:09:18 BECHOLS ;// ;// Added RTP stuff. ;// ;// Rev 1.23 02 Feb 1996 18:52:52 TRGARDOS ;// Added code to enable ICM_COMPRESS_FRAMES_INFO message. ;// ;// Rev 1.22 19 Jan 1996 15:32:50 TRGARDOS ;// Added TRPrev field to PictureHeader structure. ;// ;// Rev 1.21 11 Jan 1996 16:52:24 DBRUCKS ;// added variables to store the aspect ratio correction boolean ;// ;// Rev 1.20 04 Jan 1996 18:07:54 TRGARDOS ;// Added boolean for 320x240 input into COMPINSTINFO. ;// ;// Rev 1.19 27 Dec 1995 14:11:54 RMCKENZX ;// ;// Added copyright notice // // Rev 1.18 06 Dec 1995 09:22:56 DBRUCKS // // Added blazer data rate, frame rate, and quality variables to // COMPINSTINFO inside an H261 ifdef // // Rev 1.17 30 Oct 1995 12:02:12 TRGARDOS // Modified compressor instance structure to add // 240x180 support. // // Rev 1.16 27 Sep 1995 19:09:30 TRGARDOS // Changed enumeration name for picture code type. // // Rev 1.15 20 Sep 1995 12:37:40 DBRUCKS // save the fcc in uppercase // // Rev 1.14 19 Sep 1995 15:41:28 TRGARDOS // Fixed four cc comparison code. // // Rev 1.13 18 Sep 1995 08:42:46 CZHU // // Define FOURCC for YUV12 // // Rev 1.12 13 Sep 1995 17:08:26 TRGARDOS // Finished adding encoder support for YVU9 160x120 frames. // // Rev 1.11 12 Sep 1995 17:01:38 DBRUCKS // add twocc // // Rev 1.10 11 Sep 1995 11:14:48 DBRUCKS // add h261 ifdef // // Rev 1.9 29 Aug 1995 17:18:48 TRGARDOS // Padded H263HeaderStruct // // Rev 1.8 28 Aug 1995 17:45:04 DBRUCKS // add size defines // // Rev 1.7 28 Aug 1995 11:45:52 TRGARDOS // // Updated frame size bit field in PTYPE. // // Rev 1.6 25 Aug 1995 10:37:12 CZHU // Changed PITCH from const int to #define, because of compiler bug for inline // // Rev 1.5 25 Aug 1995 09:02:32 TRGARDOS // // Modified picture header structure. // // Rev 1.4 14 Aug 1995 11:34:52 TRGARDOS // Finished writing picture frame header. // // Rev 1.3 11 Aug 1995 17:27:56 TRGARDOS // Added bitstream writing and defined bitstream fields. // // Rev 1.2 07 Aug 1995 16:25:28 TRGARDOS // // Moved PITCH definition here from c3dec.h. // // Rev 1.1 03 Aug 1995 10:38:40 TRGARDOS // // Put picture header structure definition and GOB header // definition in here. // // Rev 1.0 31 Jul 1995 12:56:14 DBRUCKS // rename files // // Rev 1.0 17 Jul 1995 14:43:58 CZHU // Initial revision. // // Rev 1.0 17 Jul 1995 14:14:32 CZHU // Initial revision. ;// ;// Added encoder controls message support. ;// Modified RTP dialog box. ;// Change to PercentForcedUpdate ;// add T_CONFIGURATION ;// Integrate with build 29 ;// //////////////////////////////////////////////////////////////////////////// #ifndef DRV_DEFS_H #define DRV_DEFS_H #ifndef WIN32 /* * Define standard data types. */ typedef BYTE __huge* HPBYTE; typedef WORD __huge* HPWORD; typedef BYTE __far* LPBYTE; typedef WORD __far* LPWORD; typedef int __far* LPSHORT; typedef unsigned char U8; #ifndef I8 typedef signed char I8; #endif #ifndef U16 typedef unsigned int U16; #endif #ifndef I16 typedef signed int I16; #endif #ifndef U32 typedef unsigned long U32; #endif #ifndef INT #define INT short int /* signed 16 bit */ #endif #else //WIN32 typedef BYTE * HPBYTE; typedef WORD * HPWORD; typedef BYTE * LPBYTE; typedef WORD * LPWORD; typedef short int * LPSHORT; typedef unsigned char U8; #ifndef I8 typedef signed char I8; #endif #ifndef U16 typedef unsigned short int U16; #endif #ifndef I16 typedef signed short int I16; #endif #ifndef U32 typedef unsigned long U32; #endif #ifndef INT #define INT int /* signed 16 bit */ #endif #endif //WIN32 /* * Define custom DRVPROC messages for playback. */ #define PLAYBACK_CUSTOM_START (ICM_RESERVED_HIGH + 1) #define PLAYBACK_CUSTOM_END (PLAYBACK_CUSTOM_START + 9) #define PLAYBACK_CUSTOM_CHANGE_BRIGHTNESS (PLAYBACK_CUSTOM_START + 0) #define PLAYBACK_CUSTOM_CHANGE_CONTRAST (PLAYBACK_CUSTOM_START + 1) #define PLAYBACK_CUSTOM_CHANGE_SATURATION (PLAYBACK_CUSTOM_START + 2) #define PLAYBACK_CUSTOM_RESET_BRIGHTNESS (PLAYBACK_CUSTOM_START + 3) #define PLAYBACK_CUSTOM_RESET_SATURATION (PLAYBACK_CUSTOM_START + 4) #define PLAYBACK_CUSTOM_CHANGE_TINT (PLAYBACK_CUSTOM_START + 5) #define PLAYBACK_CUSTOM_RESET_TINT (PLAYBACK_CUSTOM_START + 6) #define PLAYBACK_CUSTOM_COLOR_CONVERT (PLAYBACK_CUSTOM_START + 7) typedef struct { char name[5]; HANDLE h; U16 FAR *log; U16 err; } TimeLog; /* * Define various constants. */ #define TOTAL 0 #define OVERHEAD 1 #define HUFF 2 #define YSLANT 3 #define VSLANT 4 #define USLANT 5 #define YDIFF 6 #define VDIFF 7 #define UDIFF 8 #define TORQUE 9 #define FILTER 10 #define CSC 11 #ifdef H263P enum FrameSize {FORBIDDEN=0, SQCIF=1, QCIF=2, CIF=3, fCIF=4, ssCIF=5, CUSTOM=6, EPTYPE=7}; #else enum FrameSize {FORBIDDEN=0, SQCIF=1, QCIF=2, CIF=3, fCIF=4, ssCIF=5}; #endif #define MAX_WIDTH 352 // CIF #define MAX_HEIGHT 288 // CIF #define PITCH (MAX_WIDTH+32) //** Decompressor Instance information typedef struct { BOOL Initialized; BOOL bProposedCorrectAspectRatio; // proposed BOOL bCorrectAspectRatio; // whether to correct the aspect ratio #ifdef H263P BOOL bCIFto320x240; // whether to crop CIF frames to 320x240 (old still-frame mode) #endif WORD xres, yres; // size of image within movie FrameSize FrameSz; // Which of the supported frame sizes. int pXScale, pYScale; // proposed scaling (Query) int XScale, YScale; // current scaling (Begin) UINT uColorConvertor; // Current Color Convertor WORD outputDepth; // and bit depth LPVOID pDecoderInst; BOOL UseActivePalette; /* decompress to active palette == 1 */ BOOL InitActivePalette; /* active palette initialized == 1 */ BOOL bUseBlockEdgeFilter;/* switch for block edge filter */ RGBQUAD ActivePalette[256]; /* stored active palette */ } DECINSTINFO, FAR *LPDECINST; //** Configuration Information typedef struct { BOOL bInitialized; // Whether custom msgs can be rcv'd. BOOL bCompressBegin; // Whether the CompressBegin msg was rcv'd. BOOL bRTPHeader; // Whether to generate RTP header info /* used if bRTPHeader */ UINT unPacketSize; // Maximum packet size BOOL bEncoderResiliency; // Whether to use resiliency restrictions /* used if bEncoderResiliency */ UINT unPacketLoss; BOOL bBitRateState; /* used if bBitRateState */ UINT unBytesPerSecond; /* The following information is determined from the packet loss value. */ /* These values are calculated each time we receive a resiliency msg or */ /* the value is changed through the dialog box. They are not stored in */ /* the registry. Only the above elements are stored in the registry. */ BOOL bDisallowPosVerMVs; // if true, disallow positive vertical MVs BOOL bDisallowAllVerMVs; // if true, disallow all vertical MVs UINT unPercentForcedUpdate; // Percent Forced Update per Frame UINT unDefaultIntraQuant; // Default Intra Quant UINT unDefaultInterQuant; // Default Inter Quant #ifdef H263P BOOL bH263PlusState; // Whether to use H.263+ BOOL bImprovedPBState; // Whether to use improved PB-frames BOOL bDeblockingFilterState; // Whether to use in-the-loop deblocking filter #endif } T_CONFIGURATION; //** Compressor Instance information typedef struct{ BOOL Initialized; WORD xres, yres; FrameSize FrameSz; // Which of the supported frame sizes. float FrameRate; U32 DataRate; // Data rate in bytes per second. HGLOBAL hEncoderInst; // Instance data private to encoder. LPVOID EncoderInst; WORD CompressedSize; BOOL Is160x120; BOOL Is240x180; BOOL Is320x240; #if defined(H263P) U32 InputCompression; U32 InputBitWidth; #endif T_CONFIGURATION Configuration; #ifdef USE_BILINEAR_MSH26X U32 InputCompression; U32 InputBitWidth; #endif } COMPINSTINFO, FAR *LPCODINST; //** //** Instance information //** typedef struct tagINSTINFO { DWORD dwFlags; DWORD fccHandler; // So we know what codec has been opened. BOOL enabled; LPCODINST CompPtr; // ICM LPDECINST DecompPtr; // ICM } INSTINFO, FAR *LPINST; //** local name definitions *** #ifdef H261 #ifdef QUARTZ #define FOURCC_H26X mmioFOURCC('M','2','6','1') #endif /* QUARTZ */ #define FOURCC_H263 mmioFOURCC('M','2','6','1') #else /* is H263 */ #ifdef QUARTZ #define FOURCC_H26X mmioFOURCC('M','2','6','3') #endif /* QUARTZ */ #define FOURCC_H263 mmioFOURCC('M','2','6','3') #ifdef USE_BILINEAR_MSH26X #define FOURCC_H26X mmioFOURCC('M','2','6','X') #endif #endif /* else is H263 */ #define FOURCC_YUV12 mmioFOURCC('I','4','2','0') #define FOURCC_IYUV mmioFOURCC('I','Y','U','V') #define FOURCC_YVU9 mmioFOURCC('Y','V','U','9') #define FOURCC_IF09 mmioFOURCC('I','F','0','9') #define FOURCC_YUY2 mmioFOURCC('Y','U','Y','2') #define FOURCC_UYVY mmioFOURCC('U','Y','V','Y') #define TWOCC_H26X aviTWOCC('i','v'); #define MOD4(a) ((a/4)*4) typedef struct { unsigned short PictureStartCodeZeros:16; unsigned short PictureStartCode:6; unsigned short TR:8; unsigned short Const:2; unsigned short Split:1; unsigned short DocCamera:1; unsigned short PicFreeze:1; unsigned short SrcFormat:3; unsigned short Inter:1; unsigned short UMV:1; unsigned short SAC:1; unsigned short AP:1; unsigned short PB:1; unsigned short CPM:1; } T_H263FrameHeader; enum EnumPicCodType {INTRAPIC=0, INTERPIC=1}; enum EnumOnOff {OFF=0, ON=1}; /* * If the size of T_H263FrameHeaderStruct is changed, then * that change must be updated in T_H263EncoderCatalog in e3enc.h */ typedef struct { U32 PictureStartCodeZeros; // 0..3 U8 TR; // 4 // PTYPE; U8 Const; // 5 -- two bit constant: 10 U8 SrcFormat; // 6 -- source format U8 Unassigned1; // 7 EnumOnOff Split; // 8..11 -- split screen indicator EnumOnOff DocCamera; // 12..15 -- document camera indicator EnumOnOff PicFreeze; // 16..19 -- freeze picture release EnumPicCodType PicCodType; // 20 -- picture coding type EnumOnOff UMV; // 24 -- optional unrestricted motion vector mode EnumOnOff SAC; // 28 -- optional syntax-based arithmetic coding mode EnumOnOff AP; // 32 -- optional advanced prediction mode EnumOnOff PB; // 36 -- optional PB frames mode // U8 PQUANT; // 40 U8 CPM; // 41 U8 PLCI; // 42 U8 TRB; // 43 U8 DBQUANT; // 44 U8 PEI; // 45 U8 PSPARE; // 46 U8 TRPrev; // 47 Temporal Reference of Previous frame #ifdef H263P // H.263+ encoding options, document LBC-96-358 EnumOnOff CustomPCF; // 48 Custom PCF EnumOnOff AdvancedIntra; // 52 Advanced intra coding (Annex I) EnumOnOff DeblockingFilter; // 56 In-the-loop deblocking filter (Annex J) EnumOnOff SliceStructured; // 60 Slice-structured (Annex K) EnumOnOff ImprovedPB; // 64 Improved PB-frame mode (Annex M) EnumOnOff BackChannel; // 68 Back-channel operation (Annex N) EnumOnOff Scalability; // 72 SNR and spatial scalability (Annex O) EnumOnOff TrueBFrame; // 76 True B-frame mode (Annex O) EnumOnOff RefPicResampling; // 80 Reference-picture resampling (Annex P) EnumOnOff RedResUpdate; // 84 Reduced-resolution update (Annex Q) #endif } T_H263FrameHeaderStruct; #ifdef H263P const int sizeof_T_H263FrameHeaderStruct = 88; #else const int sizeof_T_H263FrameHeaderStruct = 48; #endif typedef struct { unsigned short StartCodeZeros:16; unsigned short StartCode:1; unsigned short GN:5; unsigned short GLCI:2; unsigned short GFID:2; unsigned short GQUANT:5; } T_H263GOBHeader; #endif /* multi inclusion protection */