/* * @DEC_COPYRIGHT@ */ /* * HISTORY * $Log: SV.h,v $ * Revision 1.1.10.6 1996/10/28 17:32:21 Hans_Graves * MME-01402. Added TimeStamp support to Callbacks. * [1996/10/28 17:05:52 Hans_Graves] * * Revision 1.1.10.5 1996/10/12 17:18:18 Hans_Graves * Rearranged PARAMs. Added SV_PARAM_HALFPEL and SV_PARAM_SKIPPEL. * [1996/10/12 16:55:44 Hans_Graves] * * Revision 1.1.10.4 1996/09/18 23:45:53 Hans_Graves * More PARAMs * [1996/09/18 21:56:45 Hans_Graves] * * Revision 1.1.10.3 1996/07/19 02:11:02 Hans_Graves * Added SV_PARAM_DEBUG * [1996/07/19 01:23:39 Hans_Graves] * * Revision 1.1.10.2 1996/05/07 19:55:54 Hans_Graves * Added SV_HUFF_DECODE and SV_HUFF_ENCODE * [1996/05/07 17:23:47 Hans_Graves] * * Revision 1.1.8.6 1996/04/10 21:47:20 Hans_Graves * Added PARAMs. Replaced externs with EXTERN. * [1996/04/10 21:22:51 Hans_Graves] * * Revision 1.1.8.5 1996/04/04 23:35:03 Hans_Graves * Added SV_PARAM_FINALFORMAT enum * [1996/04/04 23:02:48 Hans_Graves] * * Revision 1.1.8.4 1996/04/01 15:17:45 Bjorn_Engberg * Replace include mmsystem.h with windows.h and mmreg.h for NT. * [1996/04/01 14:58:57 Bjorn_Engberg] * * Revision 1.1.8.3 1996/03/29 22:21:06 Hans_Graves * Include here only * [1996/03/29 21:48:59 Hans_Graves] * * Revision 1.1.8.2 1996/03/16 19:22:55 Karen_Dintino * added H261 NT includes * [1996/03/16 18:39:31 Karen_Dintino] * * Revision 1.1.6.4 1996/02/06 22:53:54 Hans_Graves * Added PARAM enums * [1996/02/06 22:18:07 Hans_Graves] * * Revision 1.1.6.3 1996/01/02 18:31:16 Bjorn_Engberg * Added and improved function prototypes. * [1996/01/02 15:03:05 Bjorn_Engberg] * * Revision 1.1.6.2 1995/12/07 19:31:23 Hans_Graves * Added defs for SV_MPEG_ENCODE,SV_MPEG2_DECODE,SV_MPEG2_ENCODE,IT_FULL,FULL_WIDTH,FULL_HEIGHT * [1995/12/07 17:59:38 Hans_Graves] * * Revision 1.1.2.18 1995/09/22 18:17:02 Hans_Graves * Remove MPEG_SUPPORT, H261_SUPPORT, and JPEG_SUPPORT * [1995/09/22 18:14:14 Hans_Graves] * * Revision 1.1.2.17 1995/09/22 15:04:40 Hans_Graves * Added definitions for MPEG_SUPPORT, H261_SUPPORT, and JPEG_SUPPORT * [1995/09/22 15:04:22 Hans_Graves] * * Revision 1.1.2.16 1995/09/20 14:59:39 Bjorn_Engberg * Port to NT * [1995/09/20 14:40:10 Bjorn_Engberg] * * Add ICMODE_OLDQ flag on ICOpen for softjpeg to use old quant tables * [1995/08/31 20:57:52 Paul_Gauthier] * * Revision 1.1.2.15 1995/09/05 14:52:39 Hans_Graves * Removed BI_* definitions - moved to SC.h * [1995/09/05 14:50:45 Hans_Graves] * * Revision 1.1.2.14 1995/08/31 21:13:27 Paul_Gauthier * Add SV_JPEG_QUANT_NEW/OLD definitions * [1995/08/31 21:13:04 Paul_Gauthier] * * Revision 1.1.2.12 1995/08/08 13:21:17 Hans_Graves * Added Motion Estimation types * [1995/08/07 22:03:30 Hans_Graves] * * Revision 1.1.2.11 1995/07/31 21:11:02 Karen_Dintino * Add yuv12 definition * [1995/07/31 19:27:58 Karen_Dintino] * * Revision 1.1.2.10 1995/07/26 17:48:56 Hans_Graves * Added prototypes for sv_GetMpegImageInfo() and sv_GetH261ImageInfo(). * [1995/07/26 17:45:14 Hans_Graves] * * Revision 1.1.2.9 1995/07/21 17:41:03 Hans_Graves * Moved Callback related stuff to SC.h * [1995/07/21 17:27:31 Hans_Graves] * * Revision 1.1.2.8 1995/07/17 22:01:33 Hans_Graves * Defined SvBufferInfo_t as ScBufferInfo_t. * [1995/07/17 21:45:06 Hans_Graves] * * Revision 1.1.2.7 1995/07/17 16:12:05 Hans_Graves * Added extern's to prototypes. * [1995/07/17 15:56:16 Hans_Graves] * * Revision 1.1.2.6 1995/07/01 18:43:17 Karen_Dintino * {** Merge Information **} * {** Command used: bsubmit **} * {** Ancestor revision: 1.1.2.4 **} * {** Merge revision: 1.1.2.5 **} * {** End **} * Add H.261 Decompress support * [1995/07/01 18:27:43 Karen_Dintino] * * Revision 1.1.2.5 1995/06/22 21:35:06 Hans_Graves * Moved filetypes to SC.h * [1995/06/22 21:29:42 Hans_Graves] * * Added TimeCode parameter to SvPictureInfo struct * [1995/04/26 19:23:55 Hans_Graves] * * Revision 1.1.2.4 1995/06/19 20:30:48 Karen_Dintino * Added support for H.261 * [1995/06/19 20:13:47 Karen_Dintino] * * Revision 1.1.2.3 1995/06/09 18:33:31 Hans_Graves * Added SvGetInputBitstream() prototype. * [1995/06/09 16:36:52 Hans_Graves] * * Revision 1.1.2.2 1995/05/31 18:09:38 Hans_Graves * Inclusion in new SLIB location. * [1995/05/31 15:28:39 Hans_Graves] * * Revision 1.1.2.9 1995/01/17 16:40:30 Paul_Gauthier * Use Modified Adjust LUTs for Indeo video * [1995/01/17 16:38:31 Paul_Gauthier] * * Revision 1.1.2.8 1994/12/12 15:39:28 Paul_Gauthier * Merge changes from other SLIB versions * [1994/12/12 15:34:59 Paul_Gauthier] * * Revision 1.1.2.7 1994/11/18 18:48:26 Paul_Gauthier * Cleanup & bug fixes * [1994/11/18 18:45:02 Paul_Gauthier] * * Revision 1.1.2.6 1994/11/08 21:58:59 Paul_Gauthier * Changed to * [1994/11/08 21:47:58 Paul_Gauthier] * * Revision 1.1.2.5 1994/10/25 19:17:47 Paul_Gauthier * Changes for random access * [1994/10/25 19:09:07 Paul_Gauthier] * * Revision 1.1.2.4 1994/10/13 20:34:55 Paul_Gauthier * MPEG cleanup * [1994/10/12 21:08:45 Paul_Gauthier] * * Revision 1.1.2.3 1994/10/10 21:45:43 Tom_Morris * Rename Status to not conflict with X11 * [1994/10/10 21:44:59 Tom_Morris] * * Revision 1.1.2.2 1994/10/07 14:51:19 Paul_Gauthier * SLIB v3.0 incl. MPEG Decode * [1994/10/07 13:56:05 Paul_Gauthier] * * $EndLog$ */ /* **++ ** FACILITY: Workstation Multimedia (WMM) v1.0 ** ** FILE NAME: ** MODULE NAME: ** ** MODULE DESCRIPTION: ** ** DESIGN OVERVIEW: ** **-- */ /* "%Z% %M% revision %I%; last modified %G%"; */ /* ** SV.h ** ** User required data structures for Software Video Codec ** */ /***************************************************************************** ** Copyright (c) Digital Equipment Corporation, 1993 ** ** ** ** All Rights Reserved. Unpublished rights reserved under the copyright ** ** laws of the United States. ** ** ** ** The software contained on this media is proprietary to and embodies ** ** the confidential technology of Digital Equipment Corporation. ** ** Possession, use, duplication or dissemination of the software and ** ** media is authorized only pursuant to a valid written license from ** ** Digital Equipment Corporation. ** ** ** ** RESTRICTED RIGHTS LEGEND Use, duplication, or disclosure by the U.S. ** ** Government is subject to restrictions as set forth in Subparagraph ** ** (c)(1)(ii) of DFARS 252.227-7013, or in FAR 52.227-19, as applicable. ** ******************************************************************************/ /*--------------------------------------------------------------------------- * Modification History: SV.h * * 08-Sep-1994 PSG Modified to include MPEG decoder * 10-Jan-1994 VB Created for SLIB *--------------------------------------------------------------------------*/ #ifndef _SV_H_ #define _SV_H_ #ifndef _SV_COMMON_ #define _SV_COMMON_ #include #include "SC.h" #define SV_CONTINUE 0 #define SV_ABORT 1 typedef void *SvHandle_t; /* Identifies a codec or renderer */ typedef ScStatus_t SvStatus_t; /* Return status code */ #ifdef WIN32 #include #include #else /* !WIN32 */ #include #endif /* !WIN32 */ #endif /* _SV_COMMON_ */ #define SV_USE_BUFFER STREAM_USE_BUFFER #define SV_USE_BUFFER_QUEUE STREAM_USE_QUEUE #define SV_USE_FILE STREAM_USE_FILE typedef enum { SV_JPEG_DECODE = 100, SV_JPEG_ENCODE = 101, SV_MPEG_DECODE = 102, SV_MPEG_ENCODE = 103, SV_MPEG2_DECODE = 104, SV_MPEG2_ENCODE = 105, SV_H261_DECODE = 106, SV_H261_ENCODE = 107, SV_H263_DECODE = 108, SV_H263_ENCODE = 109, SV_HUFF_DECODE = 110, SV_HUFF_ENCODE = 111 } SvCodecType_e; /* ** Parameters */ typedef enum { /* General params */ SV_PARAM_WIDTH = 0x10, /* image width */ SV_PARAM_HEIGHT, /* image height */ SV_PARAM_BITRATE, /* bit rate (bits per second) */ SV_PARAM_NATIVEFORMAT, /* native decompressed format (FOURCC) */ SV_PARAM_FINALFORMAT, /* Final format (format returned by codec) */ SV_PARAM_BITSPERPIXEL, /* Average bits per pixel */ SV_PARAM_FPS, /* frames per second */ SV_PARAM_ASPECTRATIO, /* Aspect ratio: height/width */ SV_PARAM_BITSTREAMING, /* is this a bitstreaming CODEC */ /* Frame params */ SV_PARAM_FRAME = 0x30, /* current frame number */ SV_PARAM_KEYSPACING, /* I frames */ SV_PARAM_SUBKEYSPACING, /* P frames */ /* Timecode/length */ SV_PARAM_TIMECODE = 0x50, /* Actual frame timecode */ SV_PARAM_CALCTIMECODE, /* Calculated frame timecode for start of seq */ SV_PARAM_LENGTH, /* total video length in miliiseconds */ SV_PARAM_FRAMES, /* total video frames */ /* Decode params */ SV_PARAM_FRAMETYPE = 0x70, /* I, P, B or D frame */ /* Encode params */ SV_PARAM_ALGFLAGS, /* Algorithm flags */ SV_PARAM_MOTIONALG, /* Motion estimation algorithm */ SV_PARAM_MOTIONSEARCH, /* Motion search limit */ SV_PARAM_MOTIONTHRESH, /* Motion threshold */ SV_PARAM_QUANTI, /* Intra-frame Quantization Step */ SV_PARAM_QUANTP, /* Inter-frame Quantization Step */ SV_PARAM_QUANTB, /* Bi-drectional frame Quantization Step */ SV_PARAM_QUANTD, /* D (preview) frame Quantization Step */ /* Encode/Decode params */ SV_PARAM_QUALITY=0x90, /* Quality: 0=worst 99>=best */ SV_PARAM_FASTDECODE, /* Fast decode desired */ SV_PARAM_FASTENCODE, /* Fast decode desired */ SV_PARAM_VBVBUFFERSIZE, /* Video Buffer Verifier buffer size in bytes */ SV_PARAM_VBVDELAY, /* Video Buffer Verifier delay */ SV_PARAM_FORMATEXT, /* format extensions (i.e. rtp) */ SV_PARAM_PACKETSIZE, /* packet size in bytes (rtp) */ SV_PARAM_DEBUG, /* Setup debug info */ } SvParameter_t; /* ** Old & new quantization modes for use by the "convertjpeg" program ** that converts JPEG clips using old quantiztion algorithm to new algorithm */ typedef enum { SV_JPEG_QUANT_NEW = 0, SV_JPEG_QUANT_OLD = 1 } SvQuantMode_e; /* ** Store basic info for user about the codec */ typedef struct SV_INFO_s { u_int Version; /* Codec version number */ int CodecStarted; /* SvDecompressBegin/End */ u_int NumOperations; /* Current # of decompresses */ } SV_INFO_t; /* ** Image types */ #define IT_NTSC 0 #define IT_CIF 1 #define IT_QCIF 2 #define IT_FULL 3 /* ** Algorithms (Motion Estimation) */ #define ME_CRAWL 1 #define ME_BRUTE 2 #define ME_TEST1 3 #define ME_TEST2 4 #define ME_FASTEST ME_CRAWL /* ** Standard Image sizes */ #define FULL_WIDTH 640 #define FULL_HEIGHT 480 #define NTSC_WIDTH 320 #define NTSC_HEIGHT 240 #define SIF_WIDTH 352 #define SIF_HEIGHT 240 #define CIF_WIDTH 352 #define CIF_HEIGHT 288 #define SQCIF_WIDTH 128 #define SQCIF_HEIGHT 96 #define QCIF_WIDTH 176 #define QCIF_HEIGHT 144 #define CIF4_WIDTH (CIF_WIDTH*2) #define CIF4_HEIGHT (CIF_HEIGHT*2) #define CIF16_WIDTH (CIF_WIDTH*4) #define CIF16_HEIGHT (CIF_HEIGHT*4) /******************** MPEG structures & constants ***************************/ /* ** Picture types */ #define SV_I_PICTURE 1 #define SV_P_PICTURE 2 #define SV_B_PICTURE 4 #define SV_D_PICTURE 8 #define SV_ANY_PICTURE SV_I_PICTURE | SV_P_PICTURE | SV_B_PICTURE #define SV_ALL_PICTURES SV_ANY_PICTURE | SV_D_PICTURE /* ** Status values returned by SvFindNextPicture */ #define SV_CAN_DECOMPRESS 1 #define SV_CANNOT_DECOMPRESS 2 /* ** SvPictureInfo_t describes picture found by CODEC */ typedef struct SvPictureInfo_s { int Type; /* SV_I_PICTURE | SV_P_PICTURE | */ /* SV_B_PICTURE | SV_D_PICTURE */ int myStatus; /* CAN_DECOMPRESS or CANNOT_DECOMPRESS */ int TemporalRef; /* Temporal reference # from picture header */ int PicNumber; /* Cummulative picture num from stream start */ qword ByteOffset; /* Cummulative byte offset from stream start */ qword TimeCode; /* TimeCode: hours (5 bits), min (6 bits), */ /* sec (6 bits), frame (6 bits) */ } SvPictureInfo_t; /* ** SvCallbackInfo_t passes info back & forth during callback */ typedef ScCallbackInfo_t SvCallbackInfo_t; /* ** Structure used in sv_GetMpegImageInfo call */ typedef struct SvImageInfo_s { int len; /* Meaning depends on file format */ int precision; /* Bits per pixel */ int height; /* Height of images in pixels */ int width; /* Width of images in pixels */ int numcomps; /* Number of color components present */ float picture_rate; /* Picture rate decoded from seq header */ } SvImageInfo_t; /******************** End of MPEG structures & constants *********************/ /******************** JPEG structures & constants ****************************/ /* ** Huffman Tables (JPEG) */ typedef struct SvHTable_s { u_int bits[16]; u_int value[256]; } SvHTable_t; typedef struct SvHuffmanTables_s { SvHTable_t DcY; SvHTable_t DcUV; SvHTable_t AcY; SvHTable_t AcUV; } SvHuffmanTables_t; /* ** Quantization Tables (JPEG) */ typedef u_int SvQTable_t; typedef struct SvQuantTables_s { SvQTable_t c1[64]; SvQTable_t c2[64]; SvQTable_t c3[64]; } SvQuantTables_t; /******************** End of JPEG structures & constants *********************/ /* ** Table of contents structure */ typedef struct SvToc_s { u_int offset; /* Byte offset of start of video frame */ u_int size; /* Size in bytes of frame */ u_int type; /* Type of frame (SV_I_PICTURE, ...) */ } SvToc_t; typedef struct IndexStr { /* AVI-format table of contents entry */ size_t size; unsigned long offset; } IndexStr, indexStr; #define SvSetRate(Svh, Rate) SvSetParamInt(Svh, SV_PARAM_BITRATE, Rate) #define SvSetFrameRate(Svh, FrameRate) SvSetParamFloat(Svh, SV_PARAM_FPS, FrameRate) EXTERN SvStatus_t SvOpenCodec (SvCodecType_e CodecType, SvHandle_t *Svh); EXTERN SvStatus_t SvCloseCodec (SvHandle_t Svh); EXTERN SvStatus_t SvDecompressQuery(SvHandle_t Svh, BITMAPINFOHEADER *ImgIn, BITMAPINFOHEADER *ImgOut); EXTERN SvStatus_t SvDecompressBegin (SvHandle_t Svh, BITMAPINFOHEADER *ImgIn, BITMAPINFOHEADER *ImgOut); EXTERN SvStatus_t SvGetDecompressSize (SvHandle_t Svh, int *MinSize); EXTERN SvStatus_t SvDecompress (SvHandle_t Svh, u_char *CompData, int MaxCompLen, u_char *DcmpImage, int MaxOutLen); EXTERN SvStatus_t SvDecompressEnd (SvHandle_t Svh); EXTERN SvStatus_t SvSetDataSource (SvHandle_t Svh, int Source, int Fd, void *Buffer_UserData, int BufSize); EXTERN SvStatus_t SvSetDataDestination (SvHandle_t Svh, int Source, int Fd, void *Buffer_UserData, int BufSize); EXTERN ScBitstream_t *SvGetDataSource (SvHandle_t Svh); EXTERN ScBitstream_t *SvGetDataDestination (SvHandle_t Svh); EXTERN ScBitstream_t *SvGetInputBitstream (SvHandle_t Svh); EXTERN SvStatus_t SvFlush(SvHandle_t Svh); EXTERN SvStatus_t SvAddBuffer (SvHandle_t Svh, SvCallbackInfo_t *BufferInfo); EXTERN SvStatus_t SvFindNextPicture (SvHandle_t Svh, SvPictureInfo_t *PictureInfo); #ifdef JPEG_SUPPORT EXTERN SvStatus_t SvSetDcmpHTables (SvHandle_t Svh, SvHuffmanTables_t *Ht); EXTERN SvStatus_t SvGetDcmpHTables (SvHandle_t Svh, SvHuffmanTables_t *Ht); EXTERN SvStatus_t SvSetCompHTables (SvHandle_t Svh, SvHuffmanTables_t *Ht); EXTERN SvStatus_t SvGetCompHTables (SvHandle_t Svh, SvHuffmanTables_t *Ht); EXTERN SvStatus_t SvSetDcmpQTables (SvHandle_t Svh, SvQuantTables_t *Qt); EXTERN SvStatus_t SvGetDcmpQTables (SvHandle_t Svh, SvQuantTables_t *Qt); EXTERN SvStatus_t SvSetCompQTables (SvHandle_t Svh, SvQuantTables_t *Qt); EXTERN SvStatus_t SvGetCompQTables (SvHandle_t Svh, SvQuantTables_t *Qt); EXTERN SvStatus_t SvSetQuantMode (SvHandle_t Svh, int QuantMode); EXTERN SvStatus_t SvGetQuality (SvHandle_t Svh, int *Quality); EXTERN SvStatus_t SvSetQuality (SvHandle_t Svh, int Quality); #endif /* JPEG_SUPPORT */ EXTERN SvStatus_t SvSetParamBoolean(SvHandle_t Svh, SvParameter_t param, ScBoolean_t value); EXTERN SvStatus_t SvSetParamInt(SvHandle_t Svh, SvParameter_t param, qword value); EXTERN SvStatus_t SvSetParamFloat(SvHandle_t Svh, SvParameter_t param, float value); EXTERN ScBoolean_t SvGetParamBoolean(SvHandle_t Svh, SvParameter_t param); EXTERN qword SvGetParamInt(SvHandle_t Svh, SvParameter_t param); EXTERN float SvGetParamFloat(SvHandle_t Svh, SvParameter_t param); EXTERN SvStatus_t SvCompressBegin (SvHandle_t Svh, BITMAPINFOHEADER *ImgIn, BITMAPINFOHEADER *ImgOut); EXTERN SvStatus_t SvCompressEnd (SvHandle_t Svh); EXTERN SvStatus_t SvCompress (SvHandle_t Svh, u_char *CompData, int MaxCompLen, u_char *InputImage, int InLen, int *CmpBytes); EXTERN SvStatus_t SvCompressQuery (SvHandle_t Svh, BITMAPINFOHEADER *ImgIn, BITMAPINFOHEADER *ImgOut); EXTERN SvStatus_t SvGetCompressSize (SvHandle_t Svh, int *MaxSize); EXTERN SvStatus_t SvGetInfo (SvHandle_t Svh, SV_INFO_t *lpinfo, BITMAPINFOHEADER *ImgOut); EXTERN SvStatus_t SvRegisterCallback (SvHandle_t, int (*Callback)(SvHandle_t, SvCallbackInfo_t *, SvPictureInfo_t *), void *UserData); #ifdef MPEG_SUPPORT EXTERN SvStatus_t SvDecompressMPEG (SvHandle_t Svh, u_char *MultiBuf, int MaxMultiSize, u_char **ImagePtr); EXTERN SvStatus_t sv_GetMpegImageInfo(int fd, SvImageInfo_t *iminfo); #endif /* MPEG_SUPPORT */ #ifdef H261_SUPPORT EXTERN SvStatus_t SvDecompressH261 (SvHandle_t Svh, u_char *MultiBuf, int MaxMultiSize, u_char **ImagePtr); EXTERN SvStatus_t sv_GetH261ImageInfo(int fd, SvImageInfo_t *iminfo); #endif /* H261_SUPPORT */ #endif /* _SV_H_ */