/* * This file is part of MPlayer. * * MPlayer is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * MPlayer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with MPlayer; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef MPLAYER_TVI_DSHOW_H #define MPLAYER_TVI_DSHOW_H /// \defgroup tvi_dshow TV driver (Directshow) #define INITGUID #include #include //#include #include #include "loader/dshow/mediatype.h" #include "loader/dshow/guids.h" #define wtoa(strW,strA,lenA) WideCharToMultiByte(0,0,strW,-1,strA,lenA,NULL,NULL) #define atow(strA,strW,lenW) MultiByteToWideChar(0,0,strA,strlen(strA),strW,lenW) typedef struct DISPPARAMS *LPDISPPARAMS; typedef struct IFileSinkFilter *LPFILESINKFILTER; typedef struct IAMCopyCaptureFileProgress *LPAMCOPYCAPTUREFILEPROGRESS; typedef struct IErrorLog *LPERRORLOG; typedef struct IAMTunerNotification *LPAMTUNERNOTIFICATION; typedef struct IFilterGraph *LPFILTERGRAPH; typedef struct IBaseFilter *LPBASEFILTER; typedef struct IPin *LPPIN; typedef struct IEnumPins *LPENUMPINS; typedef struct IEnumFilters *LPENUMFILTERS; typedef struct IEnumMediaTypes *LPENUMMEDIATYPES; typedef struct IReferenceClock *LPREFERENCECLOCK; typedef struct IMediaSample *LPMEDIASAMPLE; typedef struct IVideoWindow *LPVIDEOWINDOW; typedef struct { long cBuffers; long cbBuffer; long cbAlign; long cbPrefix; }ALLOCATOR_PROPERTIES; typedef enum tagTunerInputType { TunerInputCable = 0, TunerInputAntenna = TunerInputCable + 1 } TunerInputType; typedef enum tagAMTunerModeType { AMTUNER_MODE_DEFAULT = 0x0000, AMTUNER_MODE_TV = 0x0001, AMTUNER_MODE_FM_RADIO = 0x0002, AMTUNER_MODE_AM_RADIO = 0x0004, AMTUNER_MODE_DSS = 0x0008 } AMTunerModeType; enum tagAMTunerSubChannel { AMTUNER_SUBCHAN_NO_TUNE = -2, AMTUNER_SUBCHAN_DEFAULT = -1 } AMTunerSubChannel; typedef enum tagVideoProcAmpProperty { VideoProcAmp_Brightness, VideoProcAmp_Contrast, VideoProcAmp_Hue, VideoProcAmp_Saturation, VideoProcAmp_Sharpness, VideoProcAmp_Gamma, VideoProcAmp_ColorEnable, VideoProcAmp_WhiteBalance, VideoProcAmp_BacklightCompensation, VideoProcAmp_Gain } VideoProcAmpProperty; typedef long OAFilterState; typedef enum tagAnalogVideoStandard { AnalogVideo_None = 0, AnalogVideo_NTSC_M = 0x1, AnalogVideo_NTSC_M_J = 0x2, AnalogVideo_NTSC_433 = 0x4, AnalogVideo_PAL_B = 0x10, AnalogVideo_PAL_D = 0x20, AnalogVideo_PAL_G = 0x40, AnalogVideo_PAL_H = 0x80, AnalogVideo_PAL_I = 0x100, AnalogVideo_PAL_M = 0x200, AnalogVideo_PAL_N = 0x400, AnalogVideo_PAL_60 = 0x800, AnalogVideo_SECAM_B = 0x1000, AnalogVideo_SECAM_D = 0x2000, AnalogVideo_SECAM_G = 0x4000, AnalogVideo_SECAM_H = 0x8000, AnalogVideo_SECAM_K = 0x10000, AnalogVideo_SECAM_K1 = 0x20000, AnalogVideo_SECAM_L = 0x40000, AnalogVideo_SECAM_L1 = 0x80000 } AnalogVideoStandard; typedef LONG_PTR OAHWND; typedef enum tagPhysicalConnectorType { PhysConn_Video_Tuner = 1, PhysConn_Video_Composite = PhysConn_Video_Tuner + 1, PhysConn_Video_SVideo = PhysConn_Video_Composite + 1, PhysConn_Video_RGB = PhysConn_Video_SVideo + 1, PhysConn_Video_YRYBY = PhysConn_Video_RGB + 1, PhysConn_Video_SerialDigital = PhysConn_Video_YRYBY + 1, PhysConn_Video_ParallelDigital = PhysConn_Video_SerialDigital + 1, PhysConn_Video_SCSI = PhysConn_Video_ParallelDigital + 1, PhysConn_Video_AUX = PhysConn_Video_SCSI + 1, PhysConn_Video_1394 = PhysConn_Video_AUX + 1, PhysConn_Video_USB = PhysConn_Video_1394 + 1, PhysConn_Video_VideoDecoder = PhysConn_Video_USB + 1, PhysConn_Video_VideoEncoder = PhysConn_Video_VideoDecoder + 1, PhysConn_Video_SCART = PhysConn_Video_VideoEncoder + 1, PhysConn_Video_Black = PhysConn_Video_SCART + 1, PhysConn_Audio_Tuner = 0x1000, PhysConn_Audio_Line = PhysConn_Audio_Tuner + 1, PhysConn_Audio_Mic = PhysConn_Audio_Line + 1, PhysConn_Audio_AESDigital = PhysConn_Audio_Mic + 1, PhysConn_Audio_SPDIFDigital = PhysConn_Audio_AESDigital + 1, PhysConn_Audio_SCSI = PhysConn_Audio_SPDIFDigital + 1, PhysConn_Audio_AUX = PhysConn_Audio_SCSI + 1, PhysConn_Audio_1394 = PhysConn_Audio_AUX + 1, PhysConn_Audio_USB = PhysConn_Audio_1394 + 1, PhysConn_Audio_AudioDecoder = PhysConn_Audio_USB + 1 } PhysicalConnectorType; typedef struct VIDEO_STREAM_CONFIG_CAPS { GUID guid; // will be MEDIATYPE_Video ULONG VideoStandard; // logical OR of all AnalogVideoStandards // supported SIZE InputSize; // the inherent size of the incoming signal // (every pixel unique) SIZE MinCroppingSize; // smallest rcSrc cropping rect allowed SIZE MaxCroppingSize; // largest rcSrc cropping rect allowed int CropGranularityX; // granularity of cropping size int CropGranularityY; int CropAlignX; // alignment of cropping rect int CropAlignY; SIZE MinOutputSize; // smallest bitmap stream can produce SIZE MaxOutputSize; // largest bitmap stream can produce int OutputGranularityX; // granularity of output bitmap size int OutputGranularityY; int StretchTapsX; // 0, no stretch, 1 pix dup, 2 interp, ... int StretchTapsY; // Describes quality of hardware scaler int ShrinkTapsX; // int ShrinkTapsY; // LONGLONG MinFrameInterval; // 100 nS units LONGLONG MaxFrameInterval; LONG MinBitsPerSecond; LONG MaxBitsPerSecond; } VIDEO_STREAM_CONFIG_CAPS, *PVIDEO_STREAM_CONFIG_CAPS; typedef struct AUDIO_STREAM_CONFIG_CAPS { GUID guid; ULONG MinimumChannels; ULONG MaximumChannels; ULONG ChannelsGranularity; ULONG MinimumBitsPerSample; ULONG MaximumBitsPerSample; ULONG BitsPerSampleGranularity; ULONG MinimumSampleFrequency; ULONG MaximumSampleFrequency; ULONG SampleFrequencyGranularity; } AUDIO_STREAM_CONFIG_CAPS; typedef enum tagVideoProcAmpFlags { VideoProcAmp_Flags_Auto = 0x0001, VideoProcAmp_Flags_Manual = 0x0002 } VideoProcAmpFlags; typedef enum { PINDIR_INPUT = 0, PINDIR_OUTPUT } PIN_DIRECTION; #define KSPROPERTY_SUPPORT_GET 1 #define KSPROPERTY_SUPPORT_SET 2 typedef struct { GUID Set; ULONG Id; ULONG Flags; } KSIDENTIFIER; typedef KSIDENTIFIER KSPROPERTY; typedef struct { KSPROPERTY Property; ULONG Mode; // IN: KSPROPERTY_TUNER_MODE ULONG StandardsSupported; // KS_AnalogVideo_* (if TV or DSS) ULONG MinFrequency; // Hz ULONG MaxFrequency; // Hz ULONG TuningGranularity; // Hz ULONG NumberOfInputs; // count of inputs ULONG SettlingTime; // milliSeconds ULONG Strategy; // KS_TUNER_STRATEGY } KSPROPERTY_TUNER_MODE_CAPS_S, *PKSPROPERTY_TUNER_MODE_CAPS_S; typedef struct { KSPROPERTY Property; ULONG Mode; // IN: KSPROPERTY_TUNER_MODE } KSPROPERTY_TUNER_MODE_S, *PKSPROPERTY_TUNER_MODE_S; typedef struct { KSPROPERTY Property; ULONG Frequency; // Hz ULONG LastFrequency; // Hz (last known good) ULONG TuningFlags; // KS_TUNER_TUNING_FLAGS ULONG VideoSubChannel; // DSS ULONG AudioSubChannel; // DSS ULONG Channel; // VBI decoders ULONG Country; // VBI decoders } KSPROPERTY_TUNER_FREQUENCY_S, *PKSPROPERTY_TUNER_FREQUENCY_S; typedef struct { KSPROPERTY Property; ULONG CurrentFrequency; ULONG PLLOffset; ULONG SignalStrength; ULONG Busy; } KSPROPERTY_TUNER_STATUS_S, *PKSPROPERTY_TUNER_STATUS_S; typedef enum { KS_TUNER_TUNING_EXACT = 1, // No fine tuning KS_TUNER_TUNING_FINE, // Fine grained search KS_TUNER_TUNING_COARSE, // Coarse search } KS_TUNER_TUNING_FLAGS; typedef enum { KSPROPERTY_TUNER_CAPS, // R -overall device capabilities KSPROPERTY_TUNER_MODE_CAPS, // R -capabilities in this mode KSPROPERTY_TUNER_MODE, // RW -set a mode (TV, FM, AM, DSS) KSPROPERTY_TUNER_STANDARD, // R -get TV standard (only if TV mode) KSPROPERTY_TUNER_FREQUENCY, // RW -set/get frequency KSPROPERTY_TUNER_INPUT, // RW -select an input KSPROPERTY_TUNER_STATUS, // R -tuning status KSPROPERTY_TUNER_IF_MEDIUM // R O-Medium for IF or Transport Pin } KSPROPERTY_TUNER; typedef enum { KS_TUNER_STRATEGY_PLL = 0X01, // Tune by PLL offset KS_TUNER_STRATEGY_SIGNAL_STRENGTH = 0X02, // Tune by signal strength KS_TUNER_STRATEGY_DRIVER_TUNES = 0X04, // Driver does fine tuning } KS_TUNER_STRATEGY; typedef enum tagTVAudioMode { AMTVAUDIO_MODE_MONO = 0x0001, AMTVAUDIO_MODE_STEREO = 0x0002, AMTVAUDIO_MODE_LANG_A = 0x0010, AMTVAUDIO_MODE_LANG_B = 0x0020, AMTVAUDIO_MODE_LANG_C = 0x0040, } TVAudioMode; typedef struct FilterInfo { WCHAR achName[128]; LPFILTERGRAPH pGraph; } FILTER_INFO; typedef struct PinInfo { LPBASEFILTER pFilter; PIN_DIRECTION dir; unsigned short achName[128]; } PIN_INFO; //----------------------------------- #undef INTERFACE #define INTERFACE IPin DECLARE_INTERFACE(IPin) { STDMETHOD(QueryInterface) (THIS_ const GUID *, void **); STDMETHOD_(long, AddRef) (THIS); STDMETHOD_(long, Release) (THIS); STDMETHOD(Connect) (THIS_ IPin *, AM_MEDIA_TYPE *); STDMETHOD(ReceiveConnection) (THIS_ IPin *, const AM_MEDIA_TYPE *); STDMETHOD(Disconnect) (THIS); STDMETHOD(ConnectedTo) (THIS_ IPin **); STDMETHOD(ConnectionMediaType) (THIS_ AM_MEDIA_TYPE * pmt); STDMETHOD(QueryPinInfo) (THIS_ PIN_INFO *); STDMETHOD(QueryDirection) (THIS_ PIN_DIRECTION *); STDMETHOD(QueryId) (THIS_ unsigned short **); STDMETHOD(QueryAccept) (THIS_ const AM_MEDIA_TYPE *); STDMETHOD(EnumMediaTypes) (THIS_ LPENUMMEDIATYPES *); STDMETHOD(QueryInternalConnections) (THIS_ IPin **, unsigned long *); STDMETHOD(EndOfStream) (THIS); STDMETHOD(BeginFlush) (THIS); STDMETHOD(EndFlush) (THIS); STDMETHOD(NewSegment) (THIS_ REFERENCE_TIME, REFERENCE_TIME, double); }; #undef INTERFACE #define INTERFACE IBaseFilter DECLARE_INTERFACE(IBaseFilter) { STDMETHOD(QueryInterface) (THIS_ const GUID *, void **); STDMETHOD_(long, AddRef) (THIS); STDMETHOD_(long, Release) (THIS); STDMETHOD(GetClassID) (THIS_ CLSID * pClassID); STDMETHOD(Stop) (THIS); STDMETHOD(Pause) (THIS); STDMETHOD(Run) (THIS_ REFERENCE_TIME tStart); STDMETHOD(GetState) (THIS_ unsigned long, void *); STDMETHOD(SetSyncSource) (THIS_ LPREFERENCECLOCK); STDMETHOD(GetSyncSource) (THIS_ LPREFERENCECLOCK *); STDMETHOD(EnumPins) (THIS_ LPENUMPINS *); STDMETHOD(FindPin) (THIS_ const unsigned short *, LPPIN *); STDMETHOD(QueryFilterInfo) (THIS_ void *); STDMETHOD(JoinFilterGraph) (THIS_ LPFILTERGRAPH, const unsigned short *); STDMETHOD(QueryVendorInfo) (THIS_ unsigned short **); }; #undef INTERFACE #define INTERFACE IAMTVTuner DECLARE_INTERFACE(IAMTVTuner) { STDMETHOD(QueryInterface) (THIS_ const GUID *, void **); STDMETHOD_(long, AddRef) (THIS); STDMETHOD_(long, Release) (THIS); STDMETHOD(put_Channel) (THIS_ long, long, long); STDMETHOD(get_Channel) (THIS_ long *, long *, long *); STDMETHOD(ChannelMinMax) (THIS_ long *, long *); STDMETHOD(put_CountryCode) (THIS_ long); STDMETHOD(get_CountryCode) (THIS_ long *); STDMETHOD(put_TuningSpace) (THIS_ long); STDMETHOD(get_TuningSpace) (THIS_ long *); STDMETHOD(Logon) (THIS_ HANDLE); STDMETHOD(Logout) (IAMTVTuner *); STDMETHOD(SignalPresen) (THIS_ long *); STDMETHOD(put_Mode) (THIS_ AMTunerModeType); STDMETHOD(get_Mode) (THIS_ AMTunerModeType *); STDMETHOD(GetAvailableModes) (THIS_ long *); STDMETHOD(RegisterNotificationCallBack) (THIS_ LPAMTUNERNOTIFICATION, long); STDMETHOD(UnRegisterNotificationCallBack) (THIS_ LPAMTUNERNOTIFICATION); STDMETHOD(get_AvailableTVFormats) (THIS_ long *); STDMETHOD(get_TVFormat) (THIS_ long *); STDMETHOD(AutoTune) (THIS_ long, long *); STDMETHOD(StoreAutoTune) (IAMTVTuner *); STDMETHOD(get_NumInputConnections) (THIS_ long *); STDMETHOD(put_InputType) (THIS_ long, TunerInputType); STDMETHOD(get_InputType) (THIS_ long, TunerInputType *); STDMETHOD(put_ConnectInput) (THIS_ long); STDMETHOD(get_ConnectInput) (THIS_ long *); STDMETHOD(get_VideoFrequency) (THIS_ long *); STDMETHOD(get_AudioFrequency) (THIS_ long *); }; #undef INTERFACE #define INTERFACE IMediaControl DECLARE_INTERFACE(IMediaControl) { STDMETHOD(QueryInterface) (THIS_ const GUID *, void **); STDMETHOD_(long, AddRef) (THIS); STDMETHOD_(long, Release) (THIS); STDMETHOD(GetTypeInfoCount) (THIS_ UINT *); STDMETHOD(GetTypeInfo) (THIS_ UINT, LCID, LPTYPEINFO *); STDMETHOD(GetIDsOfNames) (THIS_ REFIID, LPOLESTR *, UINT, LCID, DISPID *); STDMETHOD(Invoke) (THIS_ DISPID, REFIID, LCID, WORD, LPDISPPARAMS, VARIANT *, EXCEPINFO *, UINT *); STDMETHOD(Run) (THIS); STDMETHOD(Pause) (THIS); STDMETHOD(Stop) (THIS); STDMETHOD(GetState) (THIS_ LONG, OAFilterState *); STDMETHOD(RenderFile) (THIS_ BSTR); STDMETHOD(AddSourceFilter) (THIS_ BSTR, LPDISPATCH *); STDMETHOD(get_FilterCollection) (THIS_ LPDISPATCH *); STDMETHOD(get_RegFilterCollection) (THIS_ LPDISPATCH *); STDMETHOD(StopWhenReady) (IMediaControl *); }; #undef INTERFACE #define INTERFACE IGraphBuilder DECLARE_INTERFACE(IGraphBuilder) { STDMETHOD(QueryInterface) (THIS_ const GUID *, void **); STDMETHOD_(long, AddRef) (THIS); STDMETHOD_(long, Release) (THIS); STDMETHOD(AddFilter) (THIS_ IBaseFilter *, LPCWSTR); STDMETHOD(RemoveFilter) (THIS_ IBaseFilter *); STDMETHOD(EnumFilters) (THIS_ LPENUMFILTERS *); STDMETHOD(FindFilterByName) (THIS_ LPCWSTR, IBaseFilter **); STDMETHOD(ConnectDirect) (THIS_ IPin *, IPin *, const AM_MEDIA_TYPE *); STDMETHOD(Reconnect) (THIS_ IPin *); STDMETHOD(Disconnect) (THIS_ IPin *); STDMETHOD(SetDefaultSyncSource) (IGraphBuilder *); STDMETHOD(Connect) (THIS_ IPin *, IPin *); STDMETHOD(Render) (THIS_ IPin *); STDMETHOD(RenderFile) (THIS_ LPCWSTR, LPCWSTR); STDMETHOD(AddSourceFilter) (THIS_ LPCWSTR, LPCWSTR, IBaseFilter **); STDMETHOD(SetLogFile) (THIS_ DWORD_PTR); STDMETHOD(Abort) (IGraphBuilder *); STDMETHOD(ShouldOperationContinue) (IGraphBuilder *); }; #undef INTERFACE #define INTERFACE ICaptureGraphBuilder2 DECLARE_INTERFACE(ICaptureGraphBuilder2) { STDMETHOD(QueryInterface) (THIS_ const GUID *, void **); STDMETHOD_(long, AddRef) (THIS); STDMETHOD_(long, Release) (THIS); STDMETHOD(SetFiltergraph) (THIS_ IGraphBuilder *); STDMETHOD(GetFiltergraph) (THIS_ IGraphBuilder **); STDMETHOD(SetOutputFileName) (THIS_ const GUID *, LPCOLESTR, IBaseFilter **, LPFILESINKFILTER *); STDMETHOD(FindInterface) (THIS_ const GUID *, const GUID *, IBaseFilter *, REFIID, void **); STDMETHOD(RenderStream) (THIS_ const GUID *, const GUID *, IUnknown *, IBaseFilter *, IBaseFilter *); STDMETHOD(ControlStream) (THIS_ const GUID *, const GUID *, IBaseFilter *, REFERENCE_TIME *, REFERENCE_TIME *, WORD, WORD); STDMETHOD(AllocCapFile) (THIS_ LPCOLESTR, DWORDLONG); STDMETHOD(CopyCaptureFile) (THIS_ LPOLESTR, LPOLESTR, int, LPAMCOPYCAPTUREFILEPROGRESS); STDMETHOD(FindPin) (THIS_ IUnknown *, PIN_DIRECTION, const GUID *, const GUID *, BOOL, int, IPin **); }; #undef INTERFACE #define INTERFACE ICreateDevEnum DECLARE_INTERFACE(ICreateDevEnum) { STDMETHOD(QueryInterface) (THIS_ const GUID *, void **); STDMETHOD_(long, AddRef) (THIS); STDMETHOD_(long, Release) (THIS); STDMETHOD(CreateClassEnumerator) (THIS_ REFCLSID, IEnumMoniker **, DWORD); }; #undef INTERFACE #define INTERFACE IAMCrossbar DECLARE_INTERFACE(IAMCrossbar) { STDMETHOD(QueryInterface) (THIS_ const GUID *, void **); STDMETHOD_(long, AddRef) (THIS); STDMETHOD_(long, Release) (THIS); STDMETHOD(get_PinCounts) (THIS_ long *, long *); STDMETHOD(CanRoute) (THIS_ long, long); STDMETHOD(Route) (THIS_ long, long); STDMETHOD(get_IsRoutedTo) (THIS_ long, long *); STDMETHOD(get_CrossbarPinInfo) (THIS_ BOOL, long, long *, long *); }; #ifndef __IPropertyBag_INTERFACE_DEFINED__ #define __IPropertyBag_INTERFACE_DEFINED__ #undef INTERFACE #define INTERFACE IPropertyBag DECLARE_INTERFACE(IPropertyBag) { STDMETHOD(QueryInterface) (THIS_ const GUID *, void **); STDMETHOD_(long, AddRef) (THIS); STDMETHOD_(long, Release) (THIS); STDMETHOD(Read) (THIS_ LPCOLESTR, LPVARIANT, LPERRORLOG); STDMETHOD(Write) (THIS_ LPCOLESTR, LPVARIANT); }; #endif #undef INTERFACE #define INTERFACE IAMStreamConfig DECLARE_INTERFACE(IAMStreamConfig) { STDMETHOD(QueryInterface) (THIS_ const GUID *, void **); STDMETHOD_(long, AddRef) (THIS); STDMETHOD_(long, Release) (THIS); HRESULT(STDMETHODCALLTYPE * SetFormat) (THIS_ AM_MEDIA_TYPE *); HRESULT(STDMETHODCALLTYPE * GetFormat) (THIS_ AM_MEDIA_TYPE **); HRESULT(STDMETHODCALLTYPE * GetNumberOfCapabilities) (THIS_ int *,int *); HRESULT(STDMETHODCALLTYPE * GetStreamCaps) (THIS_ int,AM_MEDIA_TYPE **, BYTE *); }; #undef INTERFACE #define INTERFACE IAMVideoProcAmp DECLARE_INTERFACE(IAMVideoProcAmp) { STDMETHOD(QueryInterface) (THIS_ const GUID *, void **); STDMETHOD_(long, AddRef) (THIS); STDMETHOD_(long, Release) (THIS); STDMETHOD(GetRange) (THIS_ long, long *, long *, long *, long *,long *); STDMETHOD(Set) (THIS_ long, long, long); STDMETHOD(Get) (THIS_ long, long *, long *); }; #undef INTERFACE #define INTERFACE IKsPropertySet DECLARE_INTERFACE(IKsPropertySet) { STDMETHOD(QueryInterface) (THIS_ const GUID *, void **); STDMETHOD_(long, AddRef) (THIS); STDMETHOD_(long, Release) (THIS); HRESULT(STDMETHODCALLTYPE * Set) (THIS_ REFGUID, DWORD, LPVOID, DWORD,LPVOID, DWORD); HRESULT(STDMETHODCALLTYPE * Get) (THIS_ REFGUID, DWORD, LPVOID, DWORD,LPVOID, DWORD, DWORD *); HRESULT(STDMETHODCALLTYPE * QuerySupported) (THIS_ REFGUID, DWORD,DWORD *); }; #undef INTERFACE #define INTERFACE IAMAnalogVideoDecoder DECLARE_INTERFACE(IAMAnalogVideoDecoder) { STDMETHOD(QueryInterface) (THIS_ const GUID *, void **); STDMETHOD_(long, AddRef) (THIS); STDMETHOD_(long, Release) (THIS); STDMETHOD(get_AvailableTVFormats) (THIS_ long *); STDMETHOD(put_TVFormat) (THIS_ long); STDMETHOD(get_TVFormat) (THIS_ long *); STDMETHOD(get_HorizontalLocked) (THIS_ long *); STDMETHOD(put_VCRHorizontalLocking) (THIS_ long); STDMETHOD(get_VCRHorizontalLocking) (THIS_ long *); STDMETHOD(get_NumberOfLines) (THIS_ long *); STDMETHOD(put_OutputEnable) (THIS_ long); STDMETHOD(get_OutputEnable) (THIS_ long *); }; #undef INTERFACE #define INTERFACE IAMTVAudio DECLARE_INTERFACE(IAMTVAudio) { STDMETHOD(QueryInterface) (THIS_ const GUID *, void **); STDMETHOD_(long, AddRef) (THIS); STDMETHOD_(long, Release) (THIS); STDMETHOD(GetHardwareSupportedTVAudioModes) (THIS_ long *); STDMETHOD(GetAvailableTVAudioModes) (THIS_ long *); STDMETHOD(get_TVAudioMode) (THIS_ long *); STDMETHOD(put_TVAudioMode) (THIS_ long); STDMETHOD(RegisterNotificationCallBack) (THIS_ LPAMTUNERNOTIFICATION, long); STDMETHOD(UnRegisterNotificationCallBack) (THIS_ LPAMTUNERNOTIFICATION); }; #undef INTERFACE #define INTERFACE ISampleGrabberCB DECLARE_INTERFACE(ISampleGrabberCB) { STDMETHOD(QueryInterface) (THIS_ const GUID *, void **); STDMETHOD_(long, AddRef) (THIS); STDMETHOD_(long, Release) (THIS); STDMETHOD(SampleCB) (THIS_ double, LPMEDIASAMPLE); STDMETHOD(BufferCB) (THIS_ double, BYTE *, long); }; #undef INTERFACE #define INTERFACE ISampleGrabber DECLARE_INTERFACE(ISampleGrabber) { STDMETHOD(QueryInterface) (THIS_ const GUID *, void **); STDMETHOD_(long, AddRef) (THIS); STDMETHOD_(long, Release) (THIS); STDMETHOD(SetOneShot) (THIS_ BOOL); STDMETHOD(SetMediaType) (THIS_ const AM_MEDIA_TYPE *); STDMETHOD(GetConnectedMediaType) (THIS_ AM_MEDIA_TYPE *); STDMETHOD(SetBufferSamples) (THIS_ BOOL); STDMETHOD(GetCurrentBuffer) (THIS_ long *, long *); STDMETHOD(GetCurrentSample) (THIS_ LPMEDIASAMPLE *); STDMETHOD(SetCallback) (THIS_ ISampleGrabberCB *, long); }; #undef INTERFACE #define INTERFACE IFilterGraph DECLARE_INTERFACE(IFilterGraph) { STDMETHOD(QueryInterface) (THIS_ const GUID *, void **); STDMETHOD_(long, AddRef) (THIS); STDMETHOD_(long, Release) (THIS); STDMETHOD(AddFilter) (THIS_ LPBASEFILTER, LPCWSTR); STDMETHOD(RemoveFilter) (THIS_ LPBASEFILTER); STDMETHOD(EnumFilters) (THIS_ LPENUMFILTERS *); STDMETHOD(FindFilterByName) (THIS_ LPCWSTR, LPBASEFILTER *); STDMETHOD(ConnectDirect) (THIS_ IPin *, IPin *, const AM_MEDIA_TYPE *); STDMETHOD(Reconnect) (THIS_ LPPIN); STDMETHOD(Disconnect) (THIS_ LPPIN); STDMETHOD(SetDefaultSyncSource) (THIS); }; #undef INTERFACE #define INTERFACE IAMAudioInputMixer DECLARE_INTERFACE(IAMAudioInputMixer) { STDMETHOD(QueryInterface) (THIS_ const GUID *, void **); STDMETHOD_(long, AddRef) (THIS); STDMETHOD_(long, Release) (THIS); STDMETHOD(put_Enable) (THIS_ BOOL); STDMETHOD(get_Enable) (THIS_ BOOL *); STDMETHOD(put_Mono) (THIS_ BOOL); STDMETHOD(get_Mono) (THIS_ BOOL *); STDMETHOD(put_MixLevel) (THIS_ double); STDMETHOD(get_MixLevel) (THIS_ double *); STDMETHOD(put_Pan) (THIS_ double); STDMETHOD(get_Pan) (THIS_ double *); STDMETHOD(put_Loudness) (THIS_ BOOL); STDMETHOD(get_Loudness) (THIS_ BOOL *); STDMETHOD(put_Treble) (THIS_ double); STDMETHOD(get_Treble) (THIS_ double *); STDMETHOD(get_TrebleRange) (THIS_ double *); STDMETHOD(put_Bass) (THIS_ double); STDMETHOD(get_Bass) (THIS_ double *); STDMETHOD(get_BassRange) (THIS_ double *); }; #undef INTERFACE #define INTERFACE IMediaSample DECLARE_INTERFACE(IMediaSample) { STDMETHOD(QueryInterface) (THIS_ const GUID *, void **); STDMETHOD_(long, AddRef) (THIS); STDMETHOD_(long, Release) (THIS); STDMETHOD(GetPointer )(THIS_ unsigned char** ); STDMETHOD_(LONG,GetSize )(THIS); STDMETHOD(GetTime )(THIS_ REFERENCE_TIME* ,REFERENCE_TIME* ); STDMETHOD(SetTime )(THIS_ REFERENCE_TIME* ,REFERENCE_TIME* ); STDMETHOD(IsSyncPoint )(THIS); STDMETHOD(SetSyncPoint )(THIS_ long ); STDMETHOD(IsPreroll )(THIS); STDMETHOD(SetPreroll )(THIS_ long ); STDMETHOD_(LONG,GetActualDataLength)(THIS); STDMETHOD(SetActualDataLength )(THIS_ long ); STDMETHOD(GetMediaType )(THIS_ AM_MEDIA_TYPE** ); STDMETHOD(SetMediaType )(THIS_ AM_MEDIA_TYPE* ); STDMETHOD(IsDiscontinuity )(THIS); STDMETHOD(SetDiscontinuity )(THIS_ long ); STDMETHOD(GetMediaTime )(THIS_ long long* ,long long* ); STDMETHOD(SetMediaTime )(THIS_ long long* ,long long* ); }; #undef INTERFACE #define INTERFACE IAMBufferNegotiation DECLARE_INTERFACE(IAMBufferNegotiation) { STDMETHOD(QueryInterface )(THIS_ REFIID ,void **); STDMETHOD_(ULONG,AddRef )(THIS); STDMETHOD_(ULONG,Release )(THIS); STDMETHOD(SuggestAllocatorProperties )(THIS_ const ALLOCATOR_PROPERTIES *); STDMETHOD(GetAllocatorProperties )(THIS_ ALLOCATOR_PROPERTIES *); }; #undef INTERFACE #define INTERFACE IVideoWindow DECLARE_INTERFACE(IVideoWindow) { STDMETHOD(QueryInterface )(THIS_ REFIID ,void **); STDMETHOD_(ULONG,AddRef )(THIS); STDMETHOD_(ULONG,Release )(THIS); STDMETHOD(GetTypeInfoCount) (THIS_ UINT * ); STDMETHOD(GetTypeInfo) (THIS_ UINT ,LCID , ITypeInfo ** ); STDMETHOD(GetIDsOfNames) (THIS_ REFIID ,LPOLESTR * , UINT ,LCID , DISPID * ); STDMETHOD(Invoke) (THIS_ DISPID ,REFIID , LCID , WORD ,void *, VARIANT * ,EXCEPINFO * , UINT * ); STDMETHOD(put_Caption) (THIS_ BSTR ); STDMETHOD(get_Caption) (THIS_ BSTR * ); STDMETHOD(put_WindowStyle) (THIS_ long ); STDMETHOD(get_WindowStyle) (THIS_ long *); STDMETHOD(put_WindowStyleEx) (THIS_ long ); STDMETHOD(get_WindowStyleEx) (THIS_ long *); STDMETHOD(put_AutoShow) (THIS_ long ); STDMETHOD(get_AutoShow) (THIS_ long *); STDMETHOD(put_WindowState) (THIS_ long ); STDMETHOD(get_WindowState) (THIS_ long *); STDMETHOD(put_BackgroundPalette) (THIS_ long ); STDMETHOD(get_BackgroundPalette) (THIS_ long *); STDMETHOD(put_Visible) (THIS_ long ); STDMETHOD(get_Visible) (THIS_ long *); STDMETHOD(put_Left) (THIS_ long ); STDMETHOD(get_Left) (THIS_ long *); STDMETHOD(put_Width) (THIS_ long ); STDMETHOD(get_Width) (THIS_ long *); STDMETHOD(put_Top) (THIS_ long ); STDMETHOD(get_Top) (THIS_ long *); STDMETHOD(put_Height) (THIS_ long ); STDMETHOD(get_Height) (THIS_ long *); STDMETHOD(put_Owner) (THIS_ OAHWND ); STDMETHOD(get_Owner) (THIS_ OAHWND * ); STDMETHOD(put_MessageDrain) (THIS_ OAHWND ); STDMETHOD(get_MessageDrain) (THIS_ OAHWND * ); STDMETHOD(get_BorderColor) (THIS_ long *); STDMETHOD(put_BorderColor) (THIS_ long ); STDMETHOD(get_FullScreenMode) (THIS_ long *); STDMETHOD(put_FullScreenMode) (THIS_ long ); STDMETHOD(SetWindowForeground) (THIS_ long ); STDMETHOD(NotifyOwnerMessage) (THIS_ OAHWND ,long , LONG_PTR ,LONG_PTR ); STDMETHOD(SetWindowPosition) (THIS_ long ,long , long ,long ); STDMETHOD(GetWindowPosition) (THIS_ long *,long *, long *,long *); STDMETHOD(GetMinIdealImageSize) (THIS_ long *, long *); STDMETHOD(GetMaxIdealImageSize) (THIS_ long *, long *); STDMETHOD(GetRestorePosition) (THIS_ long *,long *, long *,long *); STDMETHOD(HideCursor) (THIS_ long ); STDMETHOD(IsCursorHidden) (THIS_ long *); }; #ifndef DECLARE_ENUMERATOR_ #define DECLARE_ENUMERATOR_(I,T) \ DECLARE_INTERFACE_(I,IUnknown) \ { \ STDMETHOD(QueryInterface)(I*, REFIID,PVOID*); \ STDMETHOD_(ULONG,AddRef)(I*); \ STDMETHOD_(ULONG,Release)(I*); \ STDMETHOD(Next)(I*, ULONG,T*,ULONG*); \ STDMETHOD(Skip)(I*, ULONG); \ STDMETHOD(Reset)(I*); \ STDMETHOD(Clone)(I*, I**); \ } #endif DECLARE_ENUMERATOR_(IEnumFilters, LPBASEFILTER); DECLARE_ENUMERATOR_(IEnumPins, LPPIN); DECLARE_ENUMERATOR_(IEnumMediaTypes, AM_MEDIA_TYPE *); #define OLE_CALL(p,method) (p)->lpVtbl->method(p) #ifdef __GNUC__ #define OLE_CALL_ARGS(p, method, a1, args...) (p)->lpVtbl->method(p, a1, ##args) #else #define OLE_CALL_ARGS(p, method, ...) (p)->lpVtbl->method(p, __VA_ARGS__) #endif #define OLE_RELEASE_SAFE(p) if(p){ OLE_CALL((IUnknown*)p,Release); p=NULL;} #define OLE_QUERYINTERFACE(p,iface,ptr) OLE_CALL_ARGS((IUnknown*)p,QueryInterface,&iface,(void*)&ptr) #endif /* MPLAYER_TVI_DSHOW_H */