#ifndef DEC5BOARDLIB_EX_H #define DEC5BOARDLIB_EX_H #include "Cmn5BoardLibEx.h" #pragma pack( push, DEC5BOARDLIB_EX_H ) #pragma pack(8) extern "C" const IID IID_IDec5 ; //IID for Dec5 // {E973EE47-92A5-432f-8D70-BC67241BDA6C} DEFINE_GUID( IID_IDec5, 0xe973ee47, 0x92a5, 0x432f, 0x8d, 0x70, 0xbc, 0x67, 0x24, 0x1b, 0xda, 0x6c); // HP3000 playback modes #define DEC5_PLAYBACK_MODE_REALTIME 0x00000002 #define DEC5_PLAYBACK_MODE_CAPONLY 0x00000003 // HP3000 SUB playback modes #define DEC5_SUB_PLAYBACK_MODE_PLAY 0x11 #define DEC5_SUB_PLAYBACK_MODE_BPLAY 0x12 #define DEC5_SUB_PLAYBACK_MODE_IPLAY 0x13 #define DEC5_SUB_PLAYBACK_MODE_BIPLAY 0x14 #define DEC5_SUB_PLAYBACK_MODE_SLOW 0x15 #define DEC5_SUB_PLAYBACK_MODE_BSLOW 0x16 #define DEC5_SUB_PLAYBACK_MODE_SCAN 0x17 #define DEC5_SUB_PLAYBACK_MODE_BSCAN 0x18 #define DEC5_SUB_PLAYBACK_MODE_PAUSE 0x19 #define DEC5_SUB_PLAYBACK_MODE_STEP 0x1A #define DEC5_SUB_PLAYBACK_MODE_BSTEP 0x1B #define DEC5_SUB_PLAYBACK_MODE_RESUME 0x1C #define DEC5_SUB_PLAYBACK_MODE_STOP 0x1D #define DEC5_SUB_PLAYBACK_MODE_GETVIDEOPTS 0x1E enum DecoderPropertyCmd { DEC5_DPC_VIDEO_FORMAT = 0x01000001, // exclusively used only at HP3000 DEC5_DPC_VIDEO_IMAGE_SIZE = 0x01000004, // exclusively used only at HP3000 DEC5_DPC_PLAYBACK_MODE = 0x01040002, // exclusively used only at HP3000 DEC5_DPC_FRAMERATE = 0x01050001, // exclusively used only at HP3000 }; enum DecoderAdjustCmd { DEC5_DAC_VIDEO_IMAGE_SIZE = 0x01000001, // exclusively used only at HP3000 DEC5_DAC_SUB_PLAYBACK_MODE = 0x01040002, // exclusively used only at HP3000 DEC5_DAC_FRAMERATE = 0x01050001, // exclusively used only at HP3000 DEC5_DAC_PLAYBACK_MODE = 0x01050002, // exclusively used only at HP3000 }; typedef struct _DEC5_BOARD_INFO{ ULONG uBoardID; ULONG uModelID; ULONG uSlotNumber; ULONG uMaxVP; ULONG uMaxChannel; ULONG uMaxDO; ULONG uMaxDI; ULONG uCodecType; ULONG uVideoCodecType; ULONG uAudioCodecType; const CMN5_RESOLUTION_INFO* pResInfo; //132*sizeof(ULONG) ULONG uHWRevision; //add 2005, 8,2 ULONG reserved[CMN5_MAX_RESERVED_BOARD_INFO - 12]; } DEC5_BOARD_INFO; typedef struct _DEC5_DATA_INFO_EX { _CMN5_DATA_INFO_DATA_EX_CMM_BODY; union { ULONG reserved[32]; struct{ union{ ULONG reservedDec5Cmn[16]; struct { ULONG uDataSize; ULONG uFrameType; #if _MSC_VER >= 1300 LARGE_INTEGER_CAP PTS; // OUT: PTS (Presentation Time Stamp) to avoid byte alignment problem #else LARGE_INTEGER PTS; // OUT: PTS (Presentation Time Stamp) #endif ULONG uFreeBufferSize; // OUT: The remained buffer size of video data BOOL bPend; BOOL bStartOfStream; // OUT: To indicate the start of stream ULONG uSubErrCode; // OUT: The detailed information for the uErrCode }; }; union{ ULONG reservedDec5Model[16]; //DMP Dec5SetEventData struct { ULONG uDMPSetOption; //IN: set the frame's decoding option ULONG uDMPSetUserData0; //IN: Application specific custom data 1/2 ULONG uDMPSetUserData1; //IN: Application specific custom data 2/2 }; //DMP Dec5GetEventData struct { ULONG uDMPGetImgSize; //OUT: decoded frame's image size ULONG uDMPGetUserData0; //OUT: Application specific custom data 1/2 ULONG uDMPGetUserData1; //OUT: Application specific custom data 2/2 }; //HP Dec5SetEventData struct { #if _MSC_VER >= 1300 LARGE_INTEGER_CAP CTS; // IN: CTS (Composition Time Stamp) of frame to be decoded. The user defined type is used to avoid byte alignment problem #else LARGE_INTEGER CTS; // IN: CTS (Composition Time Stamp) of frame to be decoded. #endif BOOL bReset; // OUT: Chip was reset. Need stream header and new GOP }; //HP Dec5GetEventData struct { #if _MSC_VER >= 1300 LARGE_INTEGER_CAP uDecCurrentCTS; // OUT: CTS (Composition Time Stamp) of current frame being decoded. The user defined type is used to avoid byte alignment problem #else LARGE_INTEGER uDecCurrentCTS; // OUT: CTS (Composition Time Stamp) of current frame being decoded #endif }; //other board specific structure can be used here... }; }; }; } DEC5_DATA_INFO_EX; extern "C" { ////////////////////////////////////////////////////////////////////////////////// // APIs BOOL CMN5_API Dec5GetLastErrorCode(CMN5_ERROR_CODE_ITEM *pEcode); BOOL CMN5_API Dec5QueryInfo(ULONG uQueryInfoCmd, ULONG uIn, void *pOut); BOOL CMN5_API Dec5GetSystemInfo(CMN5_SYSTEM_INFO *pInfo); BOOL CMN5_API Dec5GetBoardInfo(ULONG uBdID,const CMN5_BOARD_INFO_DESC *pDesc, DEC5_BOARD_INFO *pInfo); BOOL CMN5_API Dec5Activate(ULONG uBdID,const UCHAR ActivationCode[CMN5_ACTIVATION_CODE_SIZE]); BOOL CMN5_API Dec5Setup(void); BOOL CMN5_API Dec5Endup(void); BOOL CMN5_API Dec5Run(void); BOOL CMN5_API Dec5Stop(void); BOOL CMN5_API Dec5ChannelEnable(ULONG uBdID, ULONG uCh, BOOL bEnable); BOOL CMN5_API Dec5SetCaptureMethod(ULONG uFuncType, ULONG uMethod); BOOL CMN5_API Dec5SetCallback(ULONG uFuncType, CMN5_CALLBACK_ONE_PARAM fStart, CMN5_CALLBACK_TWO_PARAM fCall, CMN5_CALLBACK_ONE_PARAM fStop, void *pContext); BOOL CMN5_API Dec5QueryData(void *pData, DWORD uTimeOut); BOOL CMN5_API Dec5ReleaseData(const void *pData); BOOL CMN5_API Dec5SetEventHandle(ULONG uType, HANDLE hHandle); BOOL CMN5_API Dec5GetEventHandle(ULONG uType, HANDLE *pHandle); BOOL CMN5_API Dec5GetEventData(ULONG uType, void *pData); BOOL CMN5_API Dec5SetEventData(ULONG uType, void *pData); BOOL CMN5_API Dec5SetImageSize(ULONG uBdID, ULONG uCh, ULONG uImageSize); BOOL CMN5_API Dec5GetImageSize(ULONG uBdID, ULONG uCh, ULONG *puImageSize); BOOL CMN5_API Dec5SetVideoFormat(ULONG uBdID, ULONG uFormat); BOOL CMN5_API Dec5GetVideoFormat(ULONG uBdID, ULONG *puFormat); BOOL CMN5_API Dec5SetCodecProperty(ULONG uBdID, ULONG uCh, ULONG uCodecPropertyCmd, ULONG uParam0, ULONG uParam1, ULONG uParam2, ULONG uParam3); BOOL CMN5_API Dec5GetCodecProperty(ULONG uBdID, ULONG uCh, ULONG uCodecPropertyCmd, ULONG *puParam0, ULONG *puParam1, ULONG *puParam2, ULONG *puParam3); BOOL CMN5_API Dec5SetCodecAdjust(ULONG uBdID, ULONG uCh, ULONG uCodecAdjustCmd, ULONG uParam0, ULONG uParam1, ULONG uParam2, ULONG uParam3); BOOL CMN5_API Dec5GetCodecAdjust(ULONG uBdID, ULONG uCh, ULONG uCodecAdjustCmd, ULONG *puParam0, ULONG *puParam1, ULONG *puParam2, ULONG *puParam3); BOOL CMN5_API Dec5SetMultiCodecProperties(ULONG uNumCmd, CMN5_MULTI_COMMAND *pCmds); BOOL CMN5_API Dec5GetMultiCodecProperties(ULONG uNumCmd, CMN5_MULTI_COMMAND *pCmds); BOOL CMN5_API Dec5SetMultiCodecAdjusts(ULONG uNumCmd, CMN5_MULTI_COMMAND *pCmds); BOOL CMN5_API Dec5GetMultiCodecAdjusts(ULONG uNumCmd, CMN5_MULTI_COMMAND *pCmds); BOOL CMN5_API Dec5GetVideoStatus(ULONG uBdID, ULONG uMaxCh, ULONG *pbwData); BOOL CMN5_API Dec5SetDO(ULONG uBdID, ULONG uMaxDO,const ULONG *pbwData); BOOL CMN5_API Dec5GetDO(ULONG uBdID, ULONG uMaxDO, ULONG *pbwData); BOOL CMN5_API Dec5GetDI(ULONG uBdID, ULONG uMaxDI, ULONG *pbwData); BOOL CMN5_API Dec5SetExtVideoOut(ULONG uBdID, ULONG uCh); BOOL CMN5_API Dec5GetExtVideoOut(ULONG uBdID, ULONG *puCh); BOOL CMN5_API Dec5SetWatchdog(ULONG uBdID, ULONG uWatchdogCmd, ULONG uParam1, ULONG uParam2); BOOL CMN5_API Dec5I2CTransfer(ULONG uBdID, ULONG uVPID, ULONG uDevID, ULONG uI2CCmd, ULONG uAddr, UCHAR *pData); BOOL CMN5_API Dec5WriteUserEEPROM(ULONG uBdID, ULONG uVPID,const UCHAR *pData); BOOL CMN5_API Dec5ReadUserEEPROM(ULONG uBdID, ULONG uVPID, UCHAR *pData); // *********************************************************************** // Vendoer Specific IO API // *********************************************************************** BOOL CMN5_API Dec5SetSpecialIOMode(ULONG uBdID, ULONG uData); BOOL CMN5_API Dec5GetSpecialIOMode(ULONG uBdID, ULONG *puData); BOOL CMN5_API Dec5WriteSpecialIOData(ULONG uBdID, ULONG uData); BOOL CMN5_API Dec5ReadSpecialIOData(ULONG uBdID, ULONG *puData); } // extern "C" #if !defined(KERNEL_MODE_CODE) // Interface definition for IDec5 interface IDec5 : IUnknown { STDMETHOD_(BOOL, Dec5GetLastErrorCode)(CMN5_ERROR_CODE_ITEM *pEcode) PURE; STDMETHOD_(BOOL, Dec5QueryInfo)(ULONG uQueryInfoCmd, ULONG uIn, void *pOut) PURE; STDMETHOD_(BOOL, Dec5GetSystemInfo)(CMN5_SYSTEM_INFO *pInfo) PURE; STDMETHOD_(BOOL, Dec5GetBoardInfo)(ULONG uBdID,const CMN5_BOARD_INFO_DESC *pDesc, DEC5_BOARD_INFO *pInfo) PURE; STDMETHOD_(BOOL, Dec5Activate)(ULONG uBdID,const UCHAR ActivationCode[CMN5_ACTIVATION_CODE_SIZE]) PURE; STDMETHOD_(BOOL, Dec5Setup)(void) PURE; STDMETHOD_(BOOL, Dec5Endup)(void) PURE; STDMETHOD_(BOOL, Dec5Run)(void) PURE; STDMETHOD_(BOOL, Dec5Stop)(void) PURE; STDMETHOD_(BOOL, Dec5ChannelEnable)(ULONG uBdID, ULONG uCh, BOOL bEnable) PURE; STDMETHOD_(BOOL, Dec5SetCaptureMethod)(ULONG uFuncType, ULONG uMethod) PURE; STDMETHOD_(BOOL, Dec5SetCallback)(ULONG uFuncType, CMN5_CALLBACK_ONE_PARAM fStart, CMN5_CALLBACK_TWO_PARAM fCall, CMN5_CALLBACK_ONE_PARAM fStop, void *pContext) PURE; STDMETHOD_(BOOL, Dec5QueryData)(void *pData, DWORD uTimeOut) PURE; STDMETHOD_(BOOL, Dec5ReleaseData)(const void *pData) PURE; STDMETHOD_(BOOL, Dec5SetEventHandle)(ULONG uType, HANDLE hHandle) PURE; STDMETHOD_(BOOL, Dec5GetEventHandle)(ULONG uType, HANDLE *pHandle) PURE; STDMETHOD_(BOOL, Dec5GetEventData)(ULONG uType, void *pData) PURE; STDMETHOD_(BOOL, Dec5SetEventData)(ULONG uType, void *pData) PURE; STDMETHOD_(BOOL, Dec5SetImageSize)(ULONG uBdID, ULONG uCh, ULONG uImageSize) PURE; STDMETHOD_(BOOL, Dec5GetImageSize)(ULONG uBdID, ULONG uCh, ULONG *puImageSize) PURE; STDMETHOD_(BOOL, Dec5SetVideoFormat)(ULONG uBdID, ULONG uFormat) PURE; STDMETHOD_(BOOL, Dec5GetVideoFormat)(ULONG uBdID, ULONG *puFormat) PURE; STDMETHOD_(BOOL, Dec5SetCodecProperty)(ULONG uBdID, ULONG uCh, ULONG uCodecPropertyCmd, ULONG uParam0, ULONG uParam1, ULONG uParam2, ULONG uParam3) PURE; STDMETHOD_(BOOL, Dec5GetCodecProperty)(ULONG uBdID, ULONG uCh, ULONG uCodecPropertyCmd, ULONG *puParam0, ULONG *puParam1, ULONG *puParam2, ULONG *puParam3) PURE; STDMETHOD_(BOOL, Dec5SetCodecAdjust)(ULONG uBdID, ULONG uCh, ULONG uCodecAdjustCmd, ULONG uParam0, ULONG uParam1, ULONG uParam2, ULONG uParam3) PURE; STDMETHOD_(BOOL, Dec5GetCodecAdjust)(ULONG uBdID, ULONG uCh, ULONG uCodecAdjustCmd, ULONG *puParam0, ULONG *puParam1, ULONG *puParam2, ULONG *puParam3) PURE; STDMETHOD_(BOOL, Dec5SetMultiCodecProperties)(ULONG uNumCmd, CMN5_MULTI_COMMAND *pCmds) PURE; STDMETHOD_(BOOL, Dec5GetMultiCodecProperties)(ULONG uNumCmd, CMN5_MULTI_COMMAND *pCmds) PURE; STDMETHOD_(BOOL, Dec5SetMultiCodecAdjusts)(ULONG uNumCmd, CMN5_MULTI_COMMAND *pCmds) PURE; STDMETHOD_(BOOL, Dec5GetMultiCodecAdjusts)(ULONG uNumCmd, CMN5_MULTI_COMMAND *pCmds) PURE; STDMETHOD_(BOOL, Dec5GetVideoStatus)(ULONG uBdID, ULONG uMaxCh, ULONG *pbwData) PURE; STDMETHOD_(BOOL, Dec5SetDO)(ULONG uBdID, ULONG uMaxDO,const ULONG *pbwData) PURE; STDMETHOD_(BOOL, Dec5GetDO)(ULONG uBdID, ULONG uMaxDO, ULONG *pbwData) PURE; STDMETHOD_(BOOL, Dec5GetDI)(ULONG uBdID, ULONG uMaxDI, ULONG *pbwData) PURE; STDMETHOD_(BOOL, Dec5SetExtVideoOut)(ULONG uBdID, ULONG uCh) PURE; STDMETHOD_(BOOL, Dec5GetExtVideoOut)(ULONG uBdID, ULONG *puCh) PURE; STDMETHOD_(BOOL, Dec5SetWatchdog)(ULONG uBdID, ULONG uWatchdogCmd, ULONG uParam0, ULONG uParam1) PURE; STDMETHOD_(BOOL, Dec5I2CTransfer)(ULONG uBdID, ULONG uVPID, ULONG uDevID, ULONG uI2CCmd, ULONG uAddr, UCHAR *pData) PURE; STDMETHOD_(BOOL, Dec5WriteUserEEPROM)(ULONG uBdID, ULONG uVPID,const UCHAR *pData) PURE; STDMETHOD_(BOOL, Dec5ReadUserEEPROM)(ULONG uBdID, ULONG uVPID, UCHAR *pData) PURE; // *********************************************************************** // Vendoer Specific IO API // *********************************************************************** STDMETHOD_(BOOL, Dec5SetSpecialIOMode)(ULONG uBdID, ULONG uData) PURE; STDMETHOD_(BOOL, Dec5GetSpecialIOMode)(ULONG uBdID, ULONG *puData) PURE; STDMETHOD_(BOOL, Dec5WriteSpecialIOData)(ULONG uBdID, ULONG uData) PURE; STDMETHOD_(BOOL, Dec5ReadSpecialIOData)(ULONG uBdID, ULONG *puData) PURE; }; #endif #pragma pack( pop, DEC5BOARDLIB_EX_H ) #endif