|
|
/*
* @DEC_COPYRIGHT@ */ /*
* HISTORY * $Log: slib.h,v $ * Revision 1.1.6.22 1996/12/13 18:19:02 Hans_Graves * Added SlibErrorNoBeginning enum * [1996/12/13 17:42:20 Hans_Graves] * * Revision 1.1.6.21 1996/12/10 19:21:51 Hans_Graves * Added Avg/VarVideoTimeDiff and SlibFrameToTime100() macro * [1996/12/10 19:17:53 Hans_Graves] * * Revision 1.1.6.20 1996/12/05 20:10:13 Hans_Graves * Added AvgVideoTimeDiff and AvgAudioTimeDiff to SlibInfo_t * [1996/12/05 20:07:53 Hans_Graves] * * Revision 1.1.6.19 1996/12/03 00:08:29 Hans_Graves * Added unit SLIB_UNIT_PERCENT100 and Seek type SLIB_SEEK_RESYNC. * [1996/12/03 00:02:47 Hans_Graves] * * Revision 1.1.6.18 1996/11/20 02:15:07 Hans_Graves * Added SEEK_AHEAD. * [1996/11/20 01:49:55 Hans_Graves] * * Revision 1.1.6.17 1996/11/18 23:07:14 Hans_Graves * Change operations to the time-based instead of frame-based. * [1996/11/18 22:56:34 Hans_Graves] * * Revision 1.1.6.16 1996/11/11 18:21:02 Hans_Graves * Added proto for slibRenamePin(). * [1996/11/11 17:58:03 Hans_Graves] * * Revision 1.1.6.15 1996/11/08 21:50:59 Hans_Graves * Added AC3 stuff. Better seperation of stream types. * [1996/11/08 21:18:22 Hans_Graves] * * Revision 1.1.6.14 1996/10/31 00:08:53 Hans_Graves * Added SLIB_TIME_UNKNOWN * [1996/10/31 00:07:57 Hans_Graves] * * Revision 1.1.6.13 1996/10/28 17:32:23 Hans_Graves * MME-1402, 1431, 1435: Timestamp related changes. * [1996/10/28 17:19:38 Hans_Graves] * * Revision 1.1.6.12 1996/10/17 00:23:30 Hans_Graves * Added SLIB_PARAM_VIDEOFRAME and SLIB_PARAM_FRAMEDURATION. * [1996/10/17 00:17:53 Hans_Graves] * * Revision 1.1.6.11 1996/10/12 17:18:19 Hans_Graves * Added params HALFPEL and SKIPPEL. Seperated MPEG2_SYSTEMS into TRANSPORT and PROGRAM. * [1996/10/12 16:57:14 Hans_Graves] * * Revision 1.1.6.10 1996/10/03 19:14:19 Hans_Graves * Added PTimeCode and DTimeCode to Info struct. * [1996/10/03 19:08:35 Hans_Graves] * * Revision 1.1.6.9 1996/09/29 22:19:35 Hans_Graves * Added stride support. Added SlibQueryData(). * [1996/09/29 21:28:25 Hans_Graves] * * Revision 1.1.6.8 1996/09/25 19:16:41 Hans_Graves * Reduce number of includes needed publicly by adding SLIB_INTERNAL ifdef. * [1996/09/25 19:02:38 Hans_Graves] * * Revision 1.1.6.7 1996/09/23 18:04:01 Hans_Graves * Added STATS params. * [1996/09/23 18:03:23 Hans_Graves] * * Revision 1.1.6.6 1996/09/18 23:46:20 Hans_Graves * Clean up. Added SlibAddBufferEx() and SlibReadData() protos. * [1996/09/18 21:59:36 Hans_Graves] * * Revision 1.1.6.5 1996/08/09 20:51:19 Hans_Graves * Fix proto for SlibRegisterVideoBuffer() * [1996/08/09 20:06:26 Hans_Graves] * * Revision 1.1.6.4 1996/07/19 02:11:05 Hans_Graves * New params. Added SlibRegisterVideoBuffer. * [1996/07/19 01:26:07 Hans_Graves] * * Revision 1.1.6.3 1996/05/10 21:16:53 Hans_Graves * Changes for Callback support. * [1996/05/10 20:59:56 Hans_Graves] * * Revision 1.1.6.2 1996/05/07 19:56:00 Hans_Graves * Added Callback framework. * [1996/05/07 17:23:12 Hans_Graves] * * Revision 1.1.4.13 1996/04/24 22:33:42 Hans_Graves * Added proto for slibValidateBitrates() * [1996/04/24 22:27:46 Hans_Graves] * * Revision 1.1.4.12 1996/04/23 21:01:41 Hans_Graves * Added SlibErrorSettingNotEqual * [1996/04/23 20:59:36 Hans_Graves] * * Revision 1.1.4.11 1996/04/22 15:04:50 Hans_Graves * Added protos for: slibValidateVideoParams, slibValidateAudioParams, SlibValidateParams * [1996/04/22 15:03:17 Hans_Graves] * * Revision 1.1.4.10 1996/04/19 21:52:20 Hans_Graves * Additions to SlibInfo: TotalBitRate, MuxBitRate, SystemTimeStamp, PacketCount * [1996/04/19 21:49:13 Hans_Graves] * * Revision 1.1.4.9 1996/04/15 14:18:35 Hans_Graves * Added temp audio buffer info * [1996/04/15 14:09:23 Hans_Graves] * * Revision 1.1.4.8 1996/04/10 21:47:36 Hans_Graves * Moved definition for EXTERN to SC.h * [1996/04/10 21:24:09 Hans_Graves] * * Added QUALITY and FAST params * [1996/04/10 20:41:21 Hans_Graves] * * Revision 1.1.4.7 1996/04/09 16:04:39 Hans_Graves * Added EXTERN define for cplusplus compatibility * [1996/04/09 14:49:16 Hans_Graves] * * Revision 1.1.4.6 1996/04/01 19:07:50 Hans_Graves * Change slibVerifyVideoParams() proto * [1996/04/01 19:05:31 Hans_Graves] * * Revision 1.1.4.5 1996/04/01 16:23:11 Hans_Graves * NT porting * [1996/04/01 16:15:51 Hans_Graves] * * Revision 1.1.4.4 1996/03/29 22:21:13 Hans_Graves * Added HeaderProcessed to SlibInfo * [1996/03/27 21:52:31 Hans_Graves] * * Revision 1.1.4.3 1996/03/12 16:15:42 Hans_Graves * Added SLIB_PARAM_FILEBUFSIZE parameter * [1996/03/12 16:11:55 Hans_Graves] * * Revision 1.1.4.2 1996/03/08 18:46:31 Hans_Graves * Added Imagebuf to SlibInfo_t * [1996/03/08 16:23:53 Hans_Graves] * * Revision 1.1.2.13 1996/02/19 18:03:53 Hans_Graves * Added more SEEK types. * [1996/02/19 17:59:12 Hans_Graves] * * Revision 1.1.2.12 1996/02/13 18:47:45 Hans_Graves * Fix some Seek related bugs * [1996/02/13 18:41:51 Hans_Graves] * * Revision 1.1.2.11 1996/02/07 23:23:51 Hans_Graves * Added slibCountCodesOnPin() prototype * [1996/02/07 23:19:11 Hans_Graves] * * Revision 1.1.2.10 1996/02/06 22:53:55 Hans_Graves * Prototype updates * [1996/02/06 22:44:06 Hans_Graves] * * Revision 1.1.2.9 1996/02/02 17:36:01 Hans_Graves * Updated prototypes * [1996/02/02 17:28:41 Hans_Graves] * * Revision 1.1.2.8 1996/01/30 22:23:06 Hans_Graves * Added AVI YUV support * [1996/01/30 22:22:00 Hans_Graves] * * Revision 1.1.2.7 1996/01/15 16:26:26 Hans_Graves * Added: TYPE_WAVE, more PARAMs, SlibWriteAudio() * [1996/01/15 15:44:44 Hans_Graves] * * Revision 1.1.2.6 1996/01/11 16:17:26 Hans_Graves * Added SlibGet/SetParam() prototypes * [1996/01/11 16:13:44 Hans_Graves] * * Revision 1.1.2.5 1996/01/08 16:41:25 Hans_Graves * Cleaned up prototypes * [1996/01/08 15:48:38 Hans_Graves] * * Revision 1.1.2.4 1995/12/07 19:31:27 Hans_Graves * Added JPEG Decoding and MPEG encoding support * [1995/12/07 18:28:11 Hans_Graves] * * Revision 1.1.2.3 1995/11/09 23:14:03 Hans_Graves * Added Time structure members and prototypes * [1995/11/09 23:10:32 Hans_Graves] * * Revision 1.1.2.2 1995/11/06 18:47:45 Hans_Graves * First time under SLIB * [1995/11/06 18:34:32 Hans_Graves] * * $EndLog$ */ /*****************************************************************************
** Copyright (c) Digital Equipment Corporation, 1995 ** ** ** ** 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. ** ******************************************************************************/
#ifndef _SLIB_H_
#define _SLIB_H_
#ifdef WIN32
#include <windows.h>
#endif
#include "SC.h"
#ifdef SLIB_INTERNAL
#include "SV.h"
#include "SA.h"
#include "scon.h"
#endif /* SLIB_INTERNAL */
typedef void *SlibHandle_t; typedef ScBoolean_t SlibBoolean_t; typedef int SlibStream_t; typedef qword SlibTime_t; typedef qword SlibPosition_t;
#define SLIB_TIME_NONE (SlibTime_t)(-1)
#define SLIB_TIME_UNKNOWN (SlibTime_t)(-2)
/* units used in seeking */ typedef enum { SLIB_UNIT_NONE, SLIB_UNIT_FRAMES, /* frames */ SLIB_UNIT_MS, /* milliseconds */ SLIB_UNIT_PERCENT100, /* one hundredth of percent */ } SlibUnit_t;
#define SlibTimeIsValid(stime) ((stime)>=0)
#define SlibTimeIsInValid(stime) ((stime)<0)
#define SlibTimeToFrame(Sh,vs,stime) \
((qword)((stime)*SlibGetParamFloat(Sh, vs, SLIB_PARAM_FPS))/1000) #define SlibFrameToTime(Sh,vs,frame) \
((SlibTime_t)((float)(frame*1000)/SlibGetParamFloat(Sh, vs, SLIB_PARAM_FPS))) #define SlibFrameToTime100(Sh,vs,frame) \
((SlibTime_t)((float)(frame*100000)/SlibGetParamFloat(Sh, vs, SLIB_PARAM_FPS)))
typedef qword SlibListParam1_t; typedef qword SlibListParam2_t;
typedef struct SlibList_s { int Enum; /* an enumerated value associated with the entry */ char *Name; /* the name of an entry in the list. NULL = last entry */ char *Desc; /* a lengthy description of the entry */ SlibListParam1_t param1; SlibListParam2_t param2; } SlibList_t;
typedef enum { SlibErrorNone = 0, SlibErrorInternal, SlibErrorMemory, SlibErrorBadArgument, SlibErrorBadHandle, SlibErrorBadStream, SlibErrorBadMode, SlibErrorUnsupportedFormat, SlibErrorReading, SlibErrorWriting, SlibErrorBufSize, SlibErrorEndOfStream, SlibErrorForwardOnly, SlibErrorUnsupportedParam, SlibErrorImageSize, /* Invalid image height and/or width */ SlibErrorSettingNotEqual, /* The exact Parameter setting was not accepted */ SlibErrorInit, /* initialization error */ SlibErrorFileSize, /* file size unknown */ SlibErrorBadPosition, /* position argument to seek is invalid */ SlibErrorBadUnit, /* units are invalid */ SlibErrorNoBeginning, /* couldn't begin the codecs */ SlibErrorNoData, /* no data available */ } SlibStatus_t;
typedef enum { SLIB_MODE_NONE, SLIB_MODE_COMPRESS, SLIB_MODE_COMPRESS_APPEND, SLIB_MODE_DECOMPRESS, } SlibMode_t;
typedef enum { SLIB_TYPE_UNKNOWN=0, /* MPEG elementary stream types */ SLIB_TYPE_MPEG1_VIDEO=0x01, SLIB_TYPE_MPEG1_AUDIO=0x02, SLIB_TYPE_MPEG2_VIDEO=0x04, SLIB_TYPE_MPEG2_AUDIO=0x08, SLIB_TYPE_AC3_AUDIO=0x10, /* MPEG multiplex types */ SLIB_TYPE_MPEG_SYSTEMS=0x100, SLIB_TYPE_MPEG_SYSTEMS_MPEG2=0x104, /* MPEG Systems with MPEG2 data */ SLIB_TYPE_MPEG_TRANSPORT=0x200, SLIB_TYPE_MPEG_PROGRAM=0x400, /* H26? stream types */ SLIB_TYPE_H261=0x800, SLIB_TYPE_RTP_H261=0x808, SLIB_TYPE_H263=0x810, SLIB_TYPE_RTP_H263=0x818, /* RIFF stream types */ SLIB_TYPE_RIFF=0x1000, SLIB_TYPE_PCM_WAVE, SLIB_TYPE_AVI, SLIB_TYPE_MJPG_AVI, SLIB_TYPE_JPEG_AVI, SLIB_TYPE_YUV_AVI, /* Other stream types */ SLIB_TYPE_JPEG_QUICKTIME=0x2000, SLIB_TYPE_JFIF, SLIB_TYPE_MJPG, SLIB_TYPE_JPEG, SLIB_TYPE_YUV, SLIB_TYPE_RGB, SLIB_TYPE_PCM, /* G72? stream types */ SLIB_TYPE_G723=0x4000, /* Miscellaneous types */ SLIB_TYPE_RASTER=0x8000, SLIB_TYPE_BMP, /* Test stream types */ SLIB_TYPE_SLIB=0xC000, SLIB_TYPE_SHUFF } SlibType_t;
#ifdef OLD_SLIB
#define SLIB_TYPE_MPEG1_SYSTEMS SLIB_TYPE_MPEG_SYSTEMS
#define SLIB_TYPE_MPEG2_SYSTEMS SLIB_TYPE_MPEG_TRANSPORT
#define SLIB_TYPE_MPEG2_TRANSPORT SLIB_TYPE_MPEG_TRANSPORT
#define SLIB_TYPE_MPEG2_PROGRAM SLIB_TYPE_MPEG_PROGRAM
#endif /* OLD_SLIB */
#define SlibTypeIsMPEG(stype) (stype>=SLIB_TYPE_MPEG1_VIDEO && \
stype<=SLIB_TYPE_MPEG_PROGRAM) #define SlibTypeIsMPEGVideo(stype) (stype<=SLIB_TYPE_MPEG_PROGRAM && \
(stype&0x705)) #define SlibTypeIsMPEGAudio(stype) (stype<=SLIB_TYPE_MPEG_PROGRAM && \
(stype&0x70A)) #define SlibTypeIsMPEGMux(stype) (stype>=SLIB_TYPE_MPEG_SYSTEMS && \
stype<=SLIB_TYPE_MPEG_PROGRAM) #define SlibTypeIsMPEG2(stype) (stype==SLIB_TYPE_MPEG2_VIDEO || \
stype==SLIB_TYPE_MPEG_PROGRAM || \ stype==SLIB_TYPE_MPEG_TRANSPORT || \ stype==SLIB_TYPE_MPEG2_AUDIO) #define SlibTypeIsMPEG1(stype) (stype==SLIB_TYPE_MPEG1_VIDEO || \
stype==SLIB_TYPE_MPEG1_AUDIO || \ stype==SLIB_TYPE_MPEG_SYSTEMS) #define SlibTypeIsH26X(stype) ((stype&0xFF00)==0x0800)
#define SlibTypeIsAVI(stype) (stype>=SLIB_TYPE_AVI && \
stype<=SLIB_TYPE_YUV_AVI) #define SlibTypeIsAudioOnly(stype) (stype==SLIB_TYPE_MPEG1_AUDIO || \
stype==SLIB_TYPE_AC3_AUDIO || \ stype==SLIB_TYPE_G723 || \ stype==SLIB_TYPE_PCM || \ stype==SLIB_TYPE_PCM_WAVE) #define SlibTypeIsVideoOnly(stype) (stype==SLIB_TYPE_MPEG1_VIDEO || \
stype==SLIB_TYPE_MPEG2_VIDEO || \ SlibTypeIsH26X(stype) || \ stype==SLIB_TYPE_YUV || \ stype==SLIB_TYPE_RGB || \ stype==SLIB_TYPE_BMP || \ stype==SLIB_TYPE_RASTER) #define SlibTypeIsMux(stype) (SlibTypeIsMPEGMux(stype) || \
SlibTypeIsAVI(stype)) #define SlibTypeHasTimeStamps(stype) (SlibTypeIsMPEGMux(stype))
typedef enum { SLIB_DATA_COMPRESSED=0, SLIB_DATA_AUDIO, SLIB_DATA_VIDEO, SLIB_DATA_PRIVATE } SlibDataType_t;
typedef enum { SLIB_MSG_CONTINUE=0, SLIB_MSG_OPEN=0x01, SLIB_MSG_ENDOFDATA=0x10, SLIB_MSG_ENDOFSTREAM, SLIB_MSG_BUFDONE, SLIB_MSG_REPOSITION=0x20, SLIB_MSG_BADPOSITION, SLIB_MSG_CLOSE=0x80 } SlibMessage_t;
typedef qword SlibCBParam1_t; typedef qword SlibCBParam2_t;
typedef enum { SLIB_QUERY_QUERIES, SLIB_QUERY_TYPES, SLIB_QUERY_COMP_TYPES, SLIB_QUERY_DECOMP_TYPES, SLIB_QUERY_MODES, SLIB_QUERY_PARAMETERS, SLIB_QUERY_ERRORS } SlibQueryType_t;
typedef enum { /* these use position */ SLIB_SEEK_EXACT=0x00, /* jump to the exact frame */ SLIB_SEEK_KEY, /* jump to the closest key (I) frame */ SLIB_SEEK_AHEAD, /* jump ahead by a certain amount */ SLIB_SEEK_NEXT_NEAR=0x08, /* advance to a frame near the requested frame */ SLIB_SEEK_NEXT_EXACT, /* advance to the exact requested frame */ /* these don't use position */ SLIB_SEEK_NEXT_KEY=0x10, /* advance to the next key (I) frame */ SLIB_SEEK_NEXT_SUBKEY, /* advance to the next key (I) or subkey (P) frame */ SLIB_SEEK_NEXT, /* advance one frame */ SLIB_SEEK_RESET=0x100, /* reset the streams */ SLIB_SEEK_RESYNC /* sync up all the streams */ } SlibSeekType_t;
#define SlibSeekTypeUsesPosition(seektype) (seektype<SLIB_SEEK_NEXT_KEY)
typedef struct SlibSeekInfo_s { SlibTime_t VideoTimeStamp; SlibTime_t AudioTimeStamp; qword FramesSkipped; } SlibSeekInfo_t;
typedef enum { /* SLIB Parameters */ SLIB_PARAM_VERSION=0x00, /* SLIB version number */ SLIB_PARAM_VERSION_DATE, /* SLIB build date */ SLIB_PARAM_NEEDACCURACY, /* need accurate frame counts and audio lengths */ SLIB_PARAM_DEBUG, /* debug handle */ SLIB_PARAM_TYPE, /* stream type */ SLIB_PARAM_OVERFLOWSIZE, /* pin overflowing size */ SLIB_PARAM_KEY, /* SLIB security key */ /* Video Parameters */ SLIB_PARAM_FPS=0x100, SLIB_PARAM_WIDTH, SLIB_PARAM_HEIGHT, SLIB_PARAM_IMAGESIZE, SLIB_PARAM_VIDEOBITRATE, SLIB_PARAM_VIDEOFORMAT, SLIB_PARAM_VIDEOBITS, SLIB_PARAM_VIDEOSTREAMS, SLIB_PARAM_VIDEOLENGTH, /* total video length in miliiseconds */ SLIB_PARAM_VIDEOFRAMES, /* total video frames */ SLIB_PARAM_VIDEOQUALITY, /* video quality */ SLIB_PARAM_VIDEOASPECTRATIO, /* video aspect ratio: height/width */ SLIB_PARAM_NATIVEVIDEOFORMAT, /* native/compressed format */ SLIB_PARAM_NATIVEWIDTH, /* native/compressed width */ SLIB_PARAM_NATIVEHEIGHT, /* native/compress height */ SLIB_PARAM_VIDEOPROGRAM, /* Video Program ID (Transport) */ SLIB_PARAM_STRIDE, /* bytes between scan lines */ SLIB_PARAM_VIDEOFRAME, /* video frame */ SLIB_PARAM_FRAMEDURATION, /* video frame duration in 100-nanosec units */ SLIB_PARAM_VIDEOMAINSTREAM, /* Main Video Stream (Systems+Program) */ SLIB_PARAM_FRAMETYPE, /* frame type - I, P, B or D */ /* Audio Parameters */ SLIB_PARAM_AUDIOFORMAT=0x200, SLIB_PARAM_AUDIOBITRATE, SLIB_PARAM_AUDIOSTREAMS, SLIB_PARAM_AUDIOCHANNELS, SLIB_PARAM_AUDIOLENGTH, /* milliseconds of audio */ SLIB_PARAM_AUDIOQUALITY, /* audio quality */ SLIB_PARAM_SAMPLESPERSEC, SLIB_PARAM_BITSPERSAMPLE, SLIB_PARAM_NATIVESAMPLESPERSEC, SLIB_PARAM_NATIVEBITSPERSAMPLE, SLIB_PARAM_AUDIOPROGRAM, /* Audio Program ID (Transport) */ SLIB_PARAM_AUDIOMAINSTREAM, /* Main Audio Stream (Systems+Program) */ /* Common Codec Parameters */ SLIB_PARAM_FASTENCODE=0x400,/* fast encoding desired */ SLIB_PARAM_FASTDECODE, /* fast decoding desired */ SLIB_PARAM_KEYSPACING, /* I frames */ SLIB_PARAM_SUBKEYSPACING, /* P frames */ SLIB_PARAM_MOTIONALG=0x420, /* Motion estimation algorithm */ SLIB_PARAM_MOTIONSEARCH, /* Motion search limit */ SLIB_PARAM_MOTIONTHRESH, /* Motion threshold */ SLIB_PARAM_ALGFLAGS, /* Algorithm flags */ SLIB_PARAM_FORMATEXT, /* Format Extensions */ SLIB_PARAM_QUANTI=0x480, /* Intra-frame Quantization Step */ SLIB_PARAM_QUANTP, /* Inter-frame Quantization Step */ SLIB_PARAM_QUANTB, /* Bi-directional frame Quantization Step */ SLIB_PARAM_QUANTD, /* D (preview) frame Quantization Step */ /* File/Stream Parameters */ SLIB_PARAM_BITRATE=0x800, /* overall bitrate */ SLIB_PARAM_TIMECODE, /* actual timecode */ SLIB_PARAM_CALCTIMECODE, /* calculated timecode - 0 based */ SLIB_PARAM_FILESIZE, SLIB_PARAM_FILEBUFSIZE, /* file read/write buffer size */ SLIB_PARAM_PTIMECODE, /* presentation timestamp */ SLIB_PARAM_DTIMECODE, /* decoding timestamp */ SLIB_PARAM_PERCENT100, /* position in 100th of percent units */ /* Buffering/delay Parameters */ SLIB_PARAM_VBVBUFFERSIZE=0x1000, /* Video Buffer Verifier buf size in bytes */ SLIB_PARAM_VBVDELAY, /* Video Buffer Verifier delay */ SLIB_PARAM_PACKETSIZE, /* Packet size (RTP) */ SLIB_PARAM_MININPUTSIZE, /* Minimum input sample size */ SLIB_PARAM_INPUTSIZE, /* Suggested input sample size */ SLIB_PARAM_COMPBUFSIZE, /* Slib Internal compressed buffer size */ /* Stats Parameters */ SLIB_PARAM_STATS=0x1800, /* Turn stats recording on/off */ SLIB_PARAM_STATS_RESET, /* Reset stats */ SLIB_PARAM_STATS_TIME, /* Ellapsed time */ SLIB_PARAM_STATS_FRAMES, /* Frames encoded/decoded/skipped */ SLIB_PARAM_STATS_FRAMESPROCESSED, /* Frames encoded/decoded */ SLIB_PARAM_STATS_FRAMESSKIPPED, /* Frames skipped */ SLIB_PARAM_STATS_FPS, /* Frames per second */ /* Miscellaneous Parameters */ SLIB_PARAM_CB_IMAGE=0x1C00, /* Turn image callbacks on/off */ SLIB_PARAM_CB_TIMESTAMP, /* Turn timestamp callbacks on/off */ } SlibParameter_t;
typedef enum { SLIB_CODEC_STATE_NONE, /* codec is unopened */ SLIB_CODEC_STATE_OPEN, /* codec is opened */ SLIB_CODEC_STATE_INITED, /* codec is opened and inited */ SLIB_CODEC_STATE_BEGUN, /* codec is opened, inited and begun */ SLIB_CODEC_STATE_REPOSITIONING, /* codec is opened, inited and begun,
but stream is being repositioned */ } SlibCodecState_t; /*
** Stream selections */ #define SLIB_STREAM_ALL -1
#define SLIB_STREAM_MAINVIDEO 0
#define SLIB_STREAM_MAINAUDIO 1
typedef struct SlibQueryInfo_s { SlibType_t Type; dword HeaderStart; dword HeaderSize; dword Bitrate; /* overall bitrate */ /* Video info */ int VideoStreams; short Width; short Height; dword VideoBitrate; float FramesPerSec; qword VideoLength; /* Audio info */ int AudioStreams; unsigned int SamplesPerSec; int BitsPerSample; int Channels; dword AudioBitrate; qword AudioLength; } SlibQueryInfo_t;
#ifdef SLIB_INTERNAL
typedef struct SlibBuffer_s { qword offset; unsigned dword size; unsigned char *address; SlibTime_t time; struct SlibBuffer_s *next; } SlibBuffer_t;
typedef struct SlibPin_s { int ID; char name[15]; qword Offset; SlibBuffer_t *Buffers; SlibBuffer_t *BuffersTail; dword BufferCount; qword DataSize; /* total amount of data on pin */ struct SlibPin_s *next; } SlibPin_t;
typedef struct SlibStats_s { SlibBoolean_t Record; /* stats recording on/off */ SlibTime_t StartTime; SlibTime_t StopTime; qword FramesProcessed; qword FramesSkipped; } SlibStats_t;
typedef struct SlibInfo_s { SlibType_t Type; SlibMode_t Mode; /* Handles */ SvHandle_t Svh; /* video */ SaHandle_t Sah; /* audio */ SconHandle_t Sch; /* conversion */ SlibBoolean_t NeedAccuracy; dword TotalBitRate;/* overall bitrate: video+audio+mux */ dword MuxBitRate; /* bitrate required by multiplexing codes */ SlibTime_t SystemTimeStamp; /* timestamp for next data on pins */ int VideoPID; /* MPEG II Video Program ID */ int VideoMainStream; /* Main Stream used for video */ SlibType_t VideoType; /* Video Stream type */ /* Audio parameters */ int AudioStreams; unsigned int SamplesPerSec; int BitsPerSample; int Channels; dword AudioBitRate; int AudioPID; /* MPEG II Audio Program ID */ int AudioMainStream; /* Main Stream used for audio */ SlibType_t AudioType; /* Audio Stream type */ /* Video parameters */ int VideoStreams; word Width; word Height; dword Stride; dword VideoBitRate; float FramesPerSec; /* Data Exchange */ SlibPin_t *Pins; int PinCount; dword Offset; SlibBoolean_t IOError; /* file read/write error - EOF */ unsigned dword MaxBytesInput; /* used with slibSetMaxInput */ unsigned qword InputMarker; /* used with slibSetMaxInput */ /* stream dependent stuff */ SlibTime_t VideoLength; SlibBoolean_t VideoLengthKnown; SlibTime_t VideoTimeStamp; /* current video time */ SlibTime_t VideoFrameDuration; /* time between frames in 100th ms */ qword VideoFramesProcessed;/* frames processed since key points */ SlibTime_t AudioLength; SlibBoolean_t AudioLengthKnown; SlibTime_t AudioTimeStamp; /* current audio time */ SlibTime_t LastAudioTimeStamp; /* used when compressing */ int KeySpacing; int SubKeySpacing; SlibTime_t AudioPTimeBase; /* statring presentation timecode */ SlibTime_t AudioPTimeCode; /* presentation timecode */ SlibTime_t AudioDTimeCode; /* decoding timecode */ SlibTime_t LastAudioPTimeCode; /* last encoded decoding timecode */ SlibTime_t VideoPTimeBase; /* starting presentation timecode */ SlibTime_t VideoPTimeCode; /* presentation timecode */ SlibTime_t VideoDTimeCode; /* decoding timecode */ SlibTime_t LastVideoPTimeCode; /* last encoded decoding timecode */ SlibTime_t LastVideoDTimeCode; /* last encoded decoding timecode */ SlibTime_t AvgVideoTimeDiff; /* video times differences */ SlibTime_t VarVideoTimeDiff; /* video times differences variation */ unsigned qword BytesProcessed; /* bytes input or output */ /* Encoding info */ SlibBoolean_t HeaderProcessed; int PacketCount; unsigned qword BytesSincePack; /* Miscellaneous */ SlibMessage_t (*SlibCB)(SlibHandle_t, /* Callback to supply Bufs */ SlibMessage_t, SlibCBParam1_t, SlibCBParam2_t, void *); void *SlibCBUserData; int Fd; /* file descriptor */ unsigned qword FileSize; /* total file length in bytes */ unsigned dword FileBufSize; /* file read/write buffer size */ unsigned dword CompBufSize; /* compressed buffer size */ unsigned dword PacketSize; /* RTP */ BITMAPINFOHEADER *VideoFormat; WAVEFORMATEX *AudioFormat; BITMAPINFOHEADER *CodecVideoFormat; BITMAPINFOHEADER *CompVideoFormat; WAVEFORMATEX *CompAudioFormat; SlibBoolean_t VideoCodecState; SlibBoolean_t AudioCodecState; unsigned char *Multibuf; /* multiple image buffer - MPEG, H261 */ dword MultibufSize; unsigned char *Imagebuf; /* temp image buffer - for conversions */ dword ImageSize; unsigned char *CodecImagebuf; /* temp image buffer - for scaling */ dword CodecImageSize; unsigned char *IntImagebuf; /* intermediate image buffer - for scaling */ dword IntImageSize; unsigned char *Audiobuf; /* temp audio buffer - for conversions */ unsigned dword AudiobufSize; /* temp audio buffer - for conversions */ unsigned dword AudiobufUsed; /* byte used in audio buffer */ unsigned dword OverflowSize; /* max number of bytes on a stream */ unsigned dword VBVbufSize; /* video buffer verifier size */ SlibStats_t *stats; void *dbg; /* debug handle */ } SlibInfo_t;
#define slibTimeToFrame(Info,stime) ((qword)((stime)*Info->FramesPerSec)/1000)
#define slibFrameToTime(Info,frame) \
((SlibTime_t)((float)(frame*1000)/Info->FramesPerSec)) #define slibFrameToTime100(Info,frame) \
((SlibTime_t)((float)(frame*100000)/Info->FramesPerSec)) #define slibHasAudio(Info) (Info->AudioStreams>0 || Info->Sah)
#define slibHasVideo(Info) (Info->VideoStreams>0 || Info->Svh)
#define slibHasTimeCode(Info) (slibHasVideo(Info) && SlibTypeIsMPEG(Info->Type))
#define slibInSyncMode(Info) (Info->Fd<0 && Info->SlibCB==NULL)
#endif /* SLIB_INTERNAL */
/********************** Public Prototypes ***********************/ /*
* slib_api.c */ EXTERN SlibStatus_t SlibOpen(SlibHandle_t *handle, SlibMode_t smode, SlibType_t *stype, SlibMessage_t (*slibCB)(SlibHandle_t, SlibMessage_t, SlibCBParam1_t, SlibCBParam2_t, void *), void *cbuserdata); EXTERN SlibStatus_t SlibOpenSync(SlibHandle_t *handle, SlibMode_t smode, SlibType_t *stype, void *buffer, unsigned dword bufsize); EXTERN SlibStatus_t SlibOpenFile(SlibHandle_t *handle, SlibMode_t smode, SlibType_t *stype, char *filename); EXTERN SlibStatus_t SlibAddBuffer(SlibHandle_t handle, SlibDataType_t dtype, void *buffer, unsigned dword bufsize); EXTERN SlibStatus_t SlibAddBufferEx(SlibHandle_t handle, SlibDataType_t dtype, void *buffer, unsigned dword bufsize, void *userdata); EXTERN SlibStatus_t SlibRegisterVideoBuffer(SlibHandle_t handle, void *buffer, unsigned dword bufsize); EXTERN SlibStatus_t SlibReadAudio(SlibHandle_t handle, SlibStream_t stream, void *audiobuf, unsigned dword *audiobufsize); EXTERN SlibStatus_t SlibReadVideo(SlibHandle_t handle, SlibStream_t stream, void **videobuf, unsigned dword *videobufsize); EXTERN SlibStatus_t SlibWriteVideo(SlibHandle_t handle, SlibStream_t stream, void *videobuf, unsigned dword videobufsize); EXTERN SlibStatus_t SlibWriteAudio(SlibHandle_t handle, SlibStream_t stream, void *audiobuf, unsigned dword audiobufsize); EXTERN SlibStatus_t SlibReadData(SlibHandle_t handle, SlibStream_t stream, void **databuf, unsigned dword *databufsize, SlibStream_t *readstream); EXTERN SlibStatus_t SlibQueryData(void *databuf, unsigned dword databufsize, SlibQueryInfo_t *qinfo);
EXTERN SlibStatus_t SlibSeek(SlibHandle_t handle, SlibStream_t stream, SlibSeekType_t seektype, SlibPosition_t frame); EXTERN SlibStatus_t SlibSeekEx(SlibHandle_t handle, SlibStream_t stream, SlibSeekType_t seektype, SlibPosition_t position, SlibUnit_t units, SlibSeekInfo_t *seekinfo); EXTERN SlibBoolean_t SlibIsEnd(SlibHandle_t handle, SlibStream_t stream);
EXTERN SlibStatus_t SlibClose(SlibHandle_t handle);
EXTERN char *SlibGetErrorText(SlibStatus_t status); EXTERN SlibList_t *SlibQueryList(SlibQueryType_t qtype); EXTERN char *SlibQueryForDesc(SlibQueryType_t qtype, int enumval); EXTERN int SlibQueryForEnum(SlibQueryType_t qtype, char *name); EXTERN SlibList_t *SlibFindEnumEntry(SlibList_t *list, int enumval); /*
* slib_param.c */ EXTERN qword SlibGetFrameNumber(SlibHandle_t handle, SlibStream_t stream); EXTERN SlibTime_t SlibGetAudioTime(SlibHandle_t handle, SlibStream_t stream); EXTERN SlibTime_t SlibGetVideoTime(SlibHandle_t handle, SlibStream_t stream);
EXTERN SlibBoolean_t SlibCanSetParam(SlibHandle_t handle, SlibStream_t stream, SlibParameter_t param); EXTERN SlibBoolean_t SlibCanGetParam(SlibHandle_t handle, SlibStream_t stream, SlibParameter_t param); EXTERN SlibStatus_t SlibSetParamInt(SlibHandle_t handle, SlibStream_t stream, SlibParameter_t param, long value); EXTERN SlibStatus_t SlibSetParamLong(SlibHandle_t handle, SlibStream_t stream, SlibParameter_t param, qword value); EXTERN SlibStatus_t SlibSetParamFloat(SlibHandle_t handle, SlibStream_t stream, SlibParameter_t param, float value); EXTERN SlibStatus_t SlibSetParamBoolean(SlibHandle_t handle, SlibStream_t stream, SlibParameter_t param, SlibBoolean_t value); EXTERN SlibStatus_t SlibSetParamStruct(SlibHandle_t handle, SlibStream_t stream, SlibParameter_t param, void *data, unsigned dword datasize);
EXTERN long SlibGetParamInt(SlibHandle_t handle, SlibStream_t stream, SlibParameter_t param); EXTERN qword SlibGetParamLong(SlibHandle_t handle, SlibStream_t stream, SlibParameter_t param); EXTERN float SlibGetParamFloat(SlibHandle_t handle, SlibStream_t stream, SlibParameter_t param); EXTERN SlibBoolean_t SlibGetParamBoolean(SlibHandle_t handle, SlibStream_t stream, SlibParameter_t param); EXTERN char *SlibGetParamString(SlibHandle_t handle, SlibStream_t stream, SlibParameter_t param); EXTERN SlibStatus_t SlibValidateParams(SlibHandle_t handle);
/*
* slib_buffer.c */ EXTERN void *SlibAllocBuffer(unsigned int bytes); EXTERN void *SlibAllocBufferEx(SlibHandle_t handle, unsigned int bytes); EXTERN void *SlibAllocSharedBuffer(unsigned int bytes, int *shmid); EXTERN dword SlibGetSharedBufferID(void *address); EXTERN SlibStatus_t SlibAllocSubBuffer(void *address, unsigned int bytes); EXTERN SlibStatus_t SlibFreeBuffer(void *address); EXTERN SlibStatus_t SlibFreeBuffers(SlibHandle_t handle); EXTERN unsigned qword SlibMemUsed();
#ifdef SLIB_INTERNAL
/********************** Private Prototypes ***********************/ /*
* slib_api.c */ SlibStatus_t slibStartVideo(SlibInfo_t *Info, SlibBoolean_t fillbuf); SlibBoolean_t slibUpdatePositions(SlibInfo_t *Info, SlibBoolean_t exactonly); void slibAdvancePositions(SlibInfo_t *Info, qword frames); SlibBoolean_t slibUpdateLengths(SlibInfo_t *Info);
/*
* slib_render.c */ SlibStatus_t slibConvertAudio(SlibInfo_t *Info, void *inbuf, unsigned dword inbufsize, unsigned int insps, unsigned int inbps, void **poutbuf, unsigned dword *poutbufsize, unsigned int outsps, unsigned int outbps, unsigned int channels); SlibStatus_t slibRenderFrame(SlibInfo_t *Info, void *inbuf, unsigned dword informat, void **outbuf);
/*
* slib_video.c */ void SlibUpdateVideoInfo(SlibInfo_t *Info); SlibStatus_t slibValidateVideoParams(SlibInfo_t *Info); int slibCalcBits(unsigned dword fourcc, int currentbits);
/*
* slib_audio.c */ void SlibUpdateAudioInfo(SlibInfo_t *Info); SlibTime_t slibSkipAudio(SlibInfo_t *Info, SlibStream_t stream, SlibTime_t timems); SlibStatus_t slibValidateAudioParams(SlibInfo_t *Info);
/*
* slib_buffer.c */ SlibBoolean_t SlibValidBuffer(void *address); SlibStatus_t slibManageUserBuffer(SlibInfo_t *Info, void *address, unsigned int bytes, void *userdata); unsigned char *SlibGetBuffer(SlibInfo_t *Info, int pinid, unsigned dword *size, SlibTime_t *time); unsigned char *SlibPeekBuffer(SlibInfo_t *Info, int pinid, unsigned dword *size, SlibTime_t *time); unsigned char *slibSearchBuffersOnPin(SlibInfo_t *Info, SlibPin_t *pin, unsigned char *lastbuf, unsigned dword *size, unsigned int code, int codebytes, ScBoolean_t discard); SlibTime_t slibGetNextTimeOnPin(SlibInfo_t *Info, SlibPin_t *pin, unsigned dword maxbytes); void slibSetMaxInput(SlibInfo_t *Info, unsigned dword maxbytes); SlibPosition_t slibGetPinPosition(SlibInfo_t *Info, int pinid); SlibPosition_t slibSetPinPosition(SlibInfo_t *Info, int pinid, SlibPosition_t pos);
void slibRemovePins(SlibInfo_t *Info); void slibEmptyPins(SlibInfo_t *Info); SlibPin_t *slibRenamePin(SlibInfo_t *Info, int oldpinid, int newpinid, char *newname); SlibPin_t *slibGetPin(SlibInfo_t *Info, int pinid); SlibPin_t *slibAddPin(SlibInfo_t *Info, int pinid, char *name); SlibStatus_t slibAddBufferToPin(SlibPin_t *pin, void *buffer, unsigned dword size, SlibTime_t time); SlibStatus_t slibInsertBufferOnPin(SlibPin_t *pin, void *buffer, unsigned dword size, SlibTime_t time);
SlibStatus_t slibRemovePin(SlibInfo_t *Info, int pinid); SlibStatus_t slibEmptyPin(SlibInfo_t *Info, int pinid); SlibPin_t *slibLoadPin(SlibInfo_t *Info, int pinid); SlibPin_t *slibPreLoadPin(SlibInfo_t *Info, SlibPin_t *pin); SlibStatus_t slibPutBuffer(SlibInfo_t *Info, unsigned char *buffer, unsigned dword bufsize); qword slibDataOnPin(SlibInfo_t *Info, int pinid); qword slibDataOnPins(SlibInfo_t *Info); unsigned char *slibGetBufferFromPin(SlibInfo_t *Info, SlibPin_t *pin, unsigned dword *size, SlibTime_t *time); unsigned char *slibPeekBufferOnPin(SlibInfo_t *Info, SlibPin_t *pin, unsigned dword *size, SlibTime_t *time); unsigned char *slibPeekNextBufferOnPin(SlibInfo_t *Info, SlibPin_t *pin, unsigned char *lastbuffer, unsigned dword *size, SlibTime_t *time); unsigned int slibFillBufferFromPin(SlibInfo_t *Info, SlibPin_t *pin, unsigned char *fillbuf, unsigned dword bufsize, SlibTime_t *time); word slibGetWordFromPin(SlibInfo_t *Info, SlibPin_t *pin); dword slibGetDWordFromPin(SlibInfo_t *Info, SlibPin_t *pin); dword slibCountCodesOnPin(SlibInfo_t *Info, SlibPin_t *pin, unsigned int code, int codebytes, unsigned dword maxlen); SlibStatus_t slibReposition(SlibInfo_t *Info, SlibPosition_t position); void slibPinPrepareReposition(SlibInfo_t *Info, int pinid); void slibPinFinishReposition(SlibInfo_t *Info, int pinid); SlibBoolean_t slibCommitBuffers(SlibInfo_t *Info, SlibBoolean_t flush); void slibValidateBitrates(SlibInfo_t *Info); qword slibGetSystemTime(); #endif /* SLIB_INTERNAL */
#endif /* _SLIB_H_ */
|