// // Euresys DirectShow input filter // // public definitions & interfaces // #pragma once #include "multicam.h" typedef enum { ESF_STANDARD_PAL = 0, ESF_STANDARD_NTSC } ESF_VIDEO_STANDARD; typedef enum { ESF_RESOLUTION_FRAME = 0, ESF_RESOLUTION_FIELD, ESF_RESOLUTION_CIF, ESF_RESOLUTION_QCIF, ESF_RESOLUTION_CUSTOM } ESF_RESOLUTION; typedef enum { ESF_BITRATECONTROL_CBR = 0, ESF_BITRATECONTROL_VBR } ESF_BITRATECONTROL; typedef enum { ESF_GOPSTRUCTURE_IONLY = 0, ESF_GOPSTRUCTURE_IPONLY, ESF_GOPSTRUCTURE_IPB } ESF_GOPSTRUCTURE; // {C8D2D5D0-02DF-41d4-BD80-7681CD059B52} DEFINE_GUID(CLSID_ESFilter, 0xc8d2d5d0, 0x2df, 0x41d4, 0xbd, 0x80, 0x76, 0x81, 0xcd, 0x5, 0x9b, 0x52); // // IESFProperties Interface // // {EC67FA27-4176-4659-ADCF-944D0941667F} DEFINE_GUID(IID_IESFProperties, 0xec67fa27, 0x4176, 0x4659, 0xad, 0xcf, 0x94, 0x4d, 0x9, 0x41, 0x66, 0x7f); interface IESFProperties : public IUnknown { // Capture rate control STDMETHOD(GetCaptureRateRange)(double *plMinValue, double *plMaxValue, double *plDefaultValue = NULL) = 0; STDMETHOD(SetCaptureRate)(double lValue) = 0; STDMETHOD(GetCaptureRate)(double *plValue) = 0; // Resolution selection STDMETHOD(SetResolution)(ESF_RESOLUTION Resolution, long lWidth = 0, long lHeight = 0) = 0; // Width and height are ignored if Resolution is not ESF_RESOLUTION_CUSTOM. STDMETHOD(GetResolution)(ESF_RESOLUTION *pResolution, long *plWidth = NULL, long *plHeight = NULL) = 0; STDMETHOD(GetCustomResolutionRange)(long *plMinWidth, long *plMaxWidth, long *plMinHeight, long *plMaxHeight) = 0; // Brightness control STDMETHOD(GetBrightnessRange)(long *plMinValue, long *plMaxValue, long *plDefaultValue = NULL) = 0; STDMETHOD(SetBrightness)(long lValue) = 0; STDMETHOD(GetBrightness)(long *plValue) = 0; // Contrast control STDMETHOD(GetContrastRange)(long *plMinValue, long *plMaxValue, long *plDefaultValue = NULL) = 0; STDMETHOD(SetContrast)(long lValue) = 0; STDMETHOD(GetContrast)(long *plValue) = 0; // Saturation control STDMETHOD(GetSaturationRange)(long *plMinValue, long *plMaxValue, long *plDefaultValue = NULL) = 0; STDMETHOD(SetSaturation)(long lValue) = 0; STDMETHOD(GetSaturation)(long *plValue) = 0; // Camera specification STDMETHOD(GetVideoStandard)(ESF_VIDEO_STANDARD *pStandard, bool *pbMonochrome) = 0; STDMETHOD(SetVideoStandard)(ESF_VIDEO_STANDARD Standard, bool bMonochrome) = 0; // Source selection STDMETHOD(GetBoardRange)(long *plMinValue, long *plMaxValue) = 0; STDMETHOD(SetBoard)(long lBoardId) = 0; STDMETHOD(GetBoard)(long *plBoardId) = 0; STDMETHOD(GetConnectorRange)(long *plMinValue, long *plMaxValue) = 0; STDMETHOD(SetConnector)(long lConnectorId) = 0; STDMETHOD(GetConnector)(long *plConnectorId) = 0; // Capture Region selection STDMETHOD(GetCaptureRegionSizeRange)(long *plMinSizeX, long *plMaxSizeX, long *plMinSizeY, long *plMaxSizeY) = 0; STDMETHOD(SetCaptureRegionSize)(long lSizeX, long lSizeY) = 0; STDMETHOD(GetCaptureRegionSize)(long *plSizeX, long *plSizeY) = 0; STDMETHOD(GetCaptureRegionPosRange)(long *plMinPositionX, long *plMaxPositionX, long *plMinPositionY, long *plMaxPositionY) = 0; STDMETHOD(SetCaptureRegionPos)(long lPositionX, long lPositionY) = 0; STDMETHOD(GetCaptureRegionPos)(long *plPositionX, long *plPositionY) = 0; // Output Format selection STDMETHOD(GetOutputFormatsList)(ULONG *pcElems, GUID **ppElems) = 0; STDMETHOD(SetOutputFormat)(GUID Format) = 0; STDMETHOD(GetOutputFormat)(GUID *pFormat) = 0; // Individual Control STDMETHOD(SetIndividualControl)(bool bActive) = 0; STDMETHOD(GetIndividualControl)(bool *pbActive) = 0; // Video Signal detection STDMETHOD(IsVideoSignalPresent)(void) = 0; // Camera specification with broadcast support STDMETHOD(GetVideoStandardEx)(ESF_VIDEO_STANDARD *pStandard, bool *pbMonochrome, bool *pbBroadcast) = 0; STDMETHOD(SetVideoStandardEx)(ESF_VIDEO_STANDARD Standard, bool bMonochrome, bool bBroadcast) = 0; }; // // IESFCompression Interface // // {A41D0CDA-FE6D-46b7-BBF9-3FF677CDABB7} DEFINE_GUID(IID_IESFCompression, 0xa41d0cda, 0xfe6d, 0x46b7, 0xbb, 0xf9, 0x3f, 0xf6, 0x77, 0xcd, 0xab, 0xb7); interface IESFCompression : public IUnknown { // Bitrate Control STDMETHOD(SetBitrateControl)(ESF_BITRATECONTROL BitrateControl) = 0; STDMETHOD(GetBitrateControl)(ESF_BITRATECONTROL *pBitrateControl) = 0; // Average Bit Rate STDMETHOD(GetAverageBitrateRange)(long *plMinValue, long *plMaxValue, long *plDefaultValue = NULL) = 0; STDMETHOD(SetAverageBitrate)(long lValue) = 0; STDMETHOD(GetAverageBitrate)(long *plValue) = 0; // Video Quality STDMETHOD(GetVideoQualityRange)(long *plMinValue, long *plMaxValue, long *plDefaultValue = NULL) = 0; STDMETHOD(SetVideoQuality)(long lValue) = 0; STDMETHOD(GetVideoQuality)(long *plValue) = 0; // Gop structure STDMETHOD(SetGopStructure)(ESF_GOPSTRUCTURE GopStructure) = 0; STDMETHOD(GetGopStructure)(ESF_GOPSTRUCTURE *pGopStructure) = 0; STDMETHOD(GetGopSizeRange)(long *plMinValue, long *plMaxValue, long *plDefaultValue = NULL) = 0; STDMETHOD(SetGopSize)(long lValue) = 0; STDMETHOD(GetGopSize)(long *plValue) = 0; }; // // IMCBord Interface // // {A97BB8BD-9ABE-44e0-9F5A-E055A6B6FA36} DEFINE_GUID(IID_IMCBoard, 0xa97bb8bd, 0x9abe, 0x44e0, 0x9f, 0x5a, 0xe0, 0x55, 0xa6, 0xb6, 0xfa, 0x36); interface IMCBoard : public IUnknown { STDMETHOD(GetParamFloat)(UINT32 unParamId, double *pdValue) = 0; STDMETHOD(GetParamInt)(UINT32 unParamId, long *plValue) = 0; STDMETHOD(GetParamStr)(UINT32 unParamId, PWSTR pszValue, long ccValue) = 0; STDMETHOD(GetParamNmFloat)(PCWSTR pszName, double *pdValue) = 0; STDMETHOD(GetParamNmInt)(PCWSTR pszName, long *plValue) = 0; STDMETHOD(GetParamNmStr)(PCWSTR pszName, PWSTR pszValue, long ccValue) = 0; STDMETHOD(SetParamFloat)(UINT32 unParamId, double dValue) = 0; STDMETHOD(SetParamInt)(UINT32 unParamId, long lValue) = 0; STDMETHOD(SetParamStr)(UINT32 unParamId, PCWSTR pszValue) = 0; STDMETHOD(SetParamNmFloat)(PCWSTR pszName, double dValue) = 0; STDMETHOD(SetParamNmInt)(PCWSTR pszName, long lValue) = 0; STDMETHOD(SetParamNmStr)(PCWSTR pszName, PCWSTR pszValue) = 0; }; // // IMCEnumBords Interface // // {C1A9226F-D740-439a-A8CC-FFB46977FBC3} DEFINE_GUID(IID_IMCEnumBoards, 0xc1a9226f, 0xd740, 0x439a, 0xa8, 0xcc, 0xff, 0xb4, 0x69, 0x77, 0xfb, 0xc3); interface IMCEnumBoards : public IUnknown { STDMETHOD(Next)(ULONG celt, IMCBoard **ppEureCard, ULONG *pceltFetched) = 0; STDMETHOD(Skip)(ULONG celt) = 0; STDMETHOD(Reset)() = 0; STDMETHOD(Clone)(IMCEnumBoards **ppEnumBoards) = 0; }; // // IMCConfig Interface // // {7377EB18-82DE-43ff-8DB2-01FEA57EEA66} DEFINE_GUID(IID_IMCConfig, 0x7377eb18, 0x82de, 0x43ff, 0x8d, 0xb2, 0x1, 0xfe, 0xa5, 0x7e, 0xea, 0x66); interface IMCConfig : public IUnknown { STDMETHOD(GetBoardEnum)(IMCEnumBoards **ppEnumBoards) = 0; }; // // IESFAllocatorNegociation // // {3475FA59-2661-4d91-BA60-9FE92E180395} DEFINE_GUID(IID_IESFAllocatorNegociation, 0x3475fa59, 0x2661, 0x4d91, 0xba, 0x60, 0x9f, 0xe9, 0x2e, 0x18, 0x3, 0x95); interface IESFAllocatorNegociation : public IUnknown { STDMETHOD(UseInputPinAllocator)(BOOL bUseInputPinAllocator) = 0; }; // // Property Pages GUIDS // // Configuration Property page // {CE39B2A2-DF66-4D8B-93CD-DC6A1EADF09A} DEFINE_GUID(CLSID_ConfigPropPage, 0xCE39B2A2, 0xDF66, 0x4D8B, 0x93, 0xCD, 0xDC, 0x6A, 0x1E, 0xAD, 0xF0, 0x9A); // Adjustment Property page // {E873C3B6-950F-45CD-A184-95428036FB6A} DEFINE_GUID(CLSID_AdjustPropPage, 0xE873C3B6, 0x950F, 0x45CD, 0xA1, 0x84, 0x95, 0x42, 0x80, 0x36, 0xFB, 0x6A); // Compression Property page // {15CF19B6-1F28-4B06-A3D8-FC58B7A108C5} DEFINE_GUID(CLSID_CompressionPropPage, 0x15CF19B6, 0x1F28, 0x4B06, 0xA3, 0xD8, 0xFC, 0x58, 0xB7, 0xA1, 0x08, 0xC5); // // Filter Events // #define EC_ESF_SIGNAL_LOST EC_USER + 0x00 #define EC_ESF_SIGNAL_RESTORED EC_USER + 0x01 // // Error Codes // #define MCSTATUS_TO_HRESULT(status) \ MAKE_HRESULT((status == MC_OK)? SEVERITY_SUCCESS : SEVERITY_ERROR, FACILITY_ITF, (0x4000 - status)) #define HRESULT_TO_MCSTATUS(hr) (MCSTATUS)(0x4000 - HRESULT_CODE(hr)) #define E_ESF_BAD_PARAMETER (MCSTATUS_TO_HRESULT(MC_BAD_PARAMETER)) #define E_ESF_OUT_OF_BOUND (MCSTATUS_TO_HRESULT(MC_OUT_OF_BOUND)) #define E_ESF_INVALID_VALUE (MCSTATUS_TO_HRESULT(MC_INVALID_VALUE)) #define E_ESF_FATAL_ERROR (MCSTATUS_TO_HRESULT(MC_FATAL_ERROR))