2 * This file is part of MPlayer.
4 * MPlayer is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * MPlayer is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License along
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 #ifndef MPLAYER_TVI_DSHOW_H
20 #define MPLAYER_TVI_DSHOW_H
22 /// \defgroup tvi_dshow TV driver (Directshow)
29 #include "loader/dshow/mediatype.h"
30 #include "loader/dshow/guids.h"
32 #define wtoa(strW,strA,lenA) WideCharToMultiByte(0,0,strW,-1,strA,lenA,NULL,NULL)
33 #define atow(strA,strW,lenW) MultiByteToWideChar(0,0,strA,strlen(strA),strW,lenW)
35 typedef struct DISPPARAMS
*LPDISPPARAMS
;
36 typedef struct IFileSinkFilter
*LPFILESINKFILTER
;
37 typedef struct IAMCopyCaptureFileProgress
*LPAMCOPYCAPTUREFILEPROGRESS
;
38 typedef struct IErrorLog
*LPERRORLOG
;
39 typedef struct IAMTunerNotification
*LPAMTUNERNOTIFICATION
;
40 typedef struct IFilterGraph
*LPFILTERGRAPH
;
41 typedef struct IBaseFilter
*LPBASEFILTER
;
42 typedef struct IPin
*LPPIN
;
43 typedef struct IEnumPins
*LPENUMPINS
;
44 typedef struct IEnumFilters
*LPENUMFILTERS
;
45 typedef struct IEnumMediaTypes
*LPENUMMEDIATYPES
;
46 typedef struct IReferenceClock
*LPREFERENCECLOCK
;
47 typedef struct IMediaSample
*LPMEDIASAMPLE
;
48 typedef struct IVideoWindow
*LPVIDEOWINDOW
;
56 }ALLOCATOR_PROPERTIES
;
59 enum tagTunerInputType
{ TunerInputCable
= 0,
60 TunerInputAntenna
= TunerInputCable
+ 1
62 typedef enum tagAMTunerModeType
{
63 AMTUNER_MODE_DEFAULT
= 0x0000,
64 AMTUNER_MODE_TV
= 0x0001,
65 AMTUNER_MODE_FM_RADIO
= 0x0002,
66 AMTUNER_MODE_AM_RADIO
= 0x0004,
67 AMTUNER_MODE_DSS
= 0x0008
69 enum tagAMTunerSubChannel
{ AMTUNER_SUBCHAN_NO_TUNE
= -2,
70 AMTUNER_SUBCHAN_DEFAULT
= -1
72 typedef enum tagVideoProcAmpProperty
{
73 VideoProcAmp_Brightness
,
74 VideoProcAmp_Contrast
,
76 VideoProcAmp_Saturation
,
77 VideoProcAmp_Sharpness
,
79 VideoProcAmp_ColorEnable
,
80 VideoProcAmp_WhiteBalance
,
81 VideoProcAmp_BacklightCompensation
,
83 } VideoProcAmpProperty
;
85 typedef long OAFilterState
;
87 enum tagAnalogVideoStandard
{ AnalogVideo_None
= 0,
88 AnalogVideo_NTSC_M
= 0x1,
89 AnalogVideo_NTSC_M_J
= 0x2,
90 AnalogVideo_NTSC_433
= 0x4,
91 AnalogVideo_PAL_B
= 0x10,
92 AnalogVideo_PAL_D
= 0x20,
93 AnalogVideo_PAL_G
= 0x40,
94 AnalogVideo_PAL_H
= 0x80,
95 AnalogVideo_PAL_I
= 0x100,
96 AnalogVideo_PAL_M
= 0x200,
97 AnalogVideo_PAL_N
= 0x400,
98 AnalogVideo_PAL_60
= 0x800,
99 AnalogVideo_SECAM_B
= 0x1000,
100 AnalogVideo_SECAM_D
= 0x2000,
101 AnalogVideo_SECAM_G
= 0x4000,
102 AnalogVideo_SECAM_H
= 0x8000,
103 AnalogVideo_SECAM_K
= 0x10000,
104 AnalogVideo_SECAM_K1
= 0x20000,
105 AnalogVideo_SECAM_L
= 0x40000,
106 AnalogVideo_SECAM_L1
= 0x80000
107 } AnalogVideoStandard
;
110 typedef LONG_PTR OAHWND
;
111 typedef enum tagPhysicalConnectorType
{ PhysConn_Video_Tuner
= 1,
112 PhysConn_Video_Composite
= PhysConn_Video_Tuner
+ 1,
113 PhysConn_Video_SVideo
= PhysConn_Video_Composite
+ 1,
114 PhysConn_Video_RGB
= PhysConn_Video_SVideo
+ 1,
115 PhysConn_Video_YRYBY
= PhysConn_Video_RGB
+ 1,
116 PhysConn_Video_SerialDigital
= PhysConn_Video_YRYBY
+ 1,
117 PhysConn_Video_ParallelDigital
= PhysConn_Video_SerialDigital
+ 1,
118 PhysConn_Video_SCSI
= PhysConn_Video_ParallelDigital
+ 1,
119 PhysConn_Video_AUX
= PhysConn_Video_SCSI
+ 1,
120 PhysConn_Video_1394
= PhysConn_Video_AUX
+ 1,
121 PhysConn_Video_USB
= PhysConn_Video_1394
+ 1,
122 PhysConn_Video_VideoDecoder
= PhysConn_Video_USB
+ 1,
123 PhysConn_Video_VideoEncoder
= PhysConn_Video_VideoDecoder
+ 1,
124 PhysConn_Video_SCART
= PhysConn_Video_VideoEncoder
+ 1,
125 PhysConn_Video_Black
= PhysConn_Video_SCART
+ 1,
126 PhysConn_Audio_Tuner
= 0x1000,
127 PhysConn_Audio_Line
= PhysConn_Audio_Tuner
+ 1,
128 PhysConn_Audio_Mic
= PhysConn_Audio_Line
+ 1,
129 PhysConn_Audio_AESDigital
= PhysConn_Audio_Mic
+ 1,
130 PhysConn_Audio_SPDIFDigital
= PhysConn_Audio_AESDigital
+ 1,
131 PhysConn_Audio_SCSI
= PhysConn_Audio_SPDIFDigital
+ 1,
132 PhysConn_Audio_AUX
= PhysConn_Audio_SCSI
+ 1,
133 PhysConn_Audio_1394
= PhysConn_Audio_AUX
+ 1,
134 PhysConn_Audio_USB
= PhysConn_Audio_1394
+ 1,
135 PhysConn_Audio_AudioDecoder
= PhysConn_Audio_USB
+ 1
136 } PhysicalConnectorType
;
138 typedef struct VIDEO_STREAM_CONFIG_CAPS
{
139 GUID guid
; // will be MEDIATYPE_Video
140 ULONG VideoStandard
; // logical OR of all AnalogVideoStandards
142 SIZE InputSize
; // the inherent size of the incoming signal
143 // (every pixel unique)
144 SIZE MinCroppingSize
; // smallest rcSrc cropping rect allowed
145 SIZE MaxCroppingSize
; // largest rcSrc cropping rect allowed
146 int CropGranularityX
; // granularity of cropping size
147 int CropGranularityY
;
148 int CropAlignX
; // alignment of cropping rect
150 SIZE MinOutputSize
; // smallest bitmap stream can produce
151 SIZE MaxOutputSize
; // largest bitmap stream can produce
152 int OutputGranularityX
; // granularity of output bitmap size
153 int OutputGranularityY
;
154 int StretchTapsX
; // 0, no stretch, 1 pix dup, 2 interp, ...
155 int StretchTapsY
; // Describes quality of hardware scaler
158 LONGLONG MinFrameInterval
; // 100 nS units
159 LONGLONG MaxFrameInterval
;
160 LONG MinBitsPerSecond
;
161 LONG MaxBitsPerSecond
;
162 } VIDEO_STREAM_CONFIG_CAPS
, *PVIDEO_STREAM_CONFIG_CAPS
;
164 typedef struct AUDIO_STREAM_CONFIG_CAPS
{
166 ULONG MinimumChannels
;
167 ULONG MaximumChannels
;
168 ULONG ChannelsGranularity
;
169 ULONG MinimumBitsPerSample
;
170 ULONG MaximumBitsPerSample
;
171 ULONG BitsPerSampleGranularity
;
172 ULONG MinimumSampleFrequency
;
173 ULONG MaximumSampleFrequency
;
174 ULONG SampleFrequencyGranularity
;
175 } AUDIO_STREAM_CONFIG_CAPS
;
177 typedef enum tagVideoProcAmpFlags
{
178 VideoProcAmp_Flags_Auto
= 0x0001,
179 VideoProcAmp_Flags_Manual
= 0x0002
186 #define KSPROPERTY_SUPPORT_GET 1
187 #define KSPROPERTY_SUPPORT_SET 2
194 typedef KSIDENTIFIER KSPROPERTY
;
199 ULONG Mode
; // IN: KSPROPERTY_TUNER_MODE
200 ULONG StandardsSupported
; // KS_AnalogVideo_* (if TV or DSS)
201 ULONG MinFrequency
; // Hz
202 ULONG MaxFrequency
; // Hz
203 ULONG TuningGranularity
; // Hz
204 ULONG NumberOfInputs
; // count of inputs
205 ULONG SettlingTime
; // milliSeconds
206 ULONG Strategy
; // KS_TUNER_STRATEGY
207 } KSPROPERTY_TUNER_MODE_CAPS_S
, *PKSPROPERTY_TUNER_MODE_CAPS_S
;
211 ULONG Mode
; // IN: KSPROPERTY_TUNER_MODE
212 } KSPROPERTY_TUNER_MODE_S
, *PKSPROPERTY_TUNER_MODE_S
;
216 ULONG Frequency
; // Hz
217 ULONG LastFrequency
; // Hz (last known good)
218 ULONG TuningFlags
; // KS_TUNER_TUNING_FLAGS
219 ULONG VideoSubChannel
; // DSS
220 ULONG AudioSubChannel
; // DSS
221 ULONG Channel
; // VBI decoders
222 ULONG Country
; // VBI decoders
223 } KSPROPERTY_TUNER_FREQUENCY_S
, *PKSPROPERTY_TUNER_FREQUENCY_S
;
226 ULONG CurrentFrequency
;
228 ULONG SignalStrength
;
230 } KSPROPERTY_TUNER_STATUS_S
, *PKSPROPERTY_TUNER_STATUS_S
;
232 KS_TUNER_TUNING_EXACT
= 1, // No fine tuning
233 KS_TUNER_TUNING_FINE
, // Fine grained search
234 KS_TUNER_TUNING_COARSE
, // Coarse search
235 } KS_TUNER_TUNING_FLAGS
;
238 KSPROPERTY_TUNER_CAPS
, // R -overall device capabilities
239 KSPROPERTY_TUNER_MODE_CAPS
, // R -capabilities in this mode
240 KSPROPERTY_TUNER_MODE
, // RW -set a mode (TV, FM, AM, DSS)
241 KSPROPERTY_TUNER_STANDARD
, // R -get TV standard (only if TV mode)
242 KSPROPERTY_TUNER_FREQUENCY
, // RW -set/get frequency
243 KSPROPERTY_TUNER_INPUT
, // RW -select an input
244 KSPROPERTY_TUNER_STATUS
, // R -tuning status
245 KSPROPERTY_TUNER_IF_MEDIUM
// R O-Medium for IF or Transport Pin
248 KS_TUNER_STRATEGY_PLL
= 0X01, // Tune by PLL offset
249 KS_TUNER_STRATEGY_SIGNAL_STRENGTH
= 0X02, // Tune by signal strength
250 KS_TUNER_STRATEGY_DRIVER_TUNES
= 0X04, // Driver does fine tuning
252 typedef enum tagTVAudioMode
{
253 AMTVAUDIO_MODE_MONO
= 0x0001,
254 AMTVAUDIO_MODE_STEREO
= 0x0002,
255 AMTVAUDIO_MODE_LANG_A
= 0x0010,
256 AMTVAUDIO_MODE_LANG_B
= 0x0020,
257 AMTVAUDIO_MODE_LANG_C
= 0x0040,
260 typedef struct FilterInfo
{
262 LPFILTERGRAPH pGraph
;
265 typedef struct PinInfo
{
266 LPBASEFILTER pFilter
;
268 unsigned short achName
[128];
270 //-----------------------------------
274 #define INTERFACE IPin
275 DECLARE_INTERFACE(IPin
)
277 STDMETHOD(QueryInterface
) (THIS_
const GUID
*, void **);
278 STDMETHOD_(long, AddRef
) (THIS
);
279 STDMETHOD_(long, Release
) (THIS
);
280 STDMETHOD(Connect
) (THIS_ IPin
*, AM_MEDIA_TYPE
*);
281 STDMETHOD(ReceiveConnection
) (THIS_ IPin
*, const AM_MEDIA_TYPE
*);
282 STDMETHOD(Disconnect
) (THIS
);
283 STDMETHOD(ConnectedTo
) (THIS_ IPin
**);
284 STDMETHOD(ConnectionMediaType
) (THIS_ AM_MEDIA_TYPE
* pmt
);
285 STDMETHOD(QueryPinInfo
) (THIS_ PIN_INFO
*);
286 STDMETHOD(QueryDirection
) (THIS_ PIN_DIRECTION
*);
287 STDMETHOD(QueryId
) (THIS_
unsigned short **);
288 STDMETHOD(QueryAccept
) (THIS_
const AM_MEDIA_TYPE
*);
289 STDMETHOD(EnumMediaTypes
) (THIS_ LPENUMMEDIATYPES
*);
290 STDMETHOD(QueryInternalConnections
) (THIS_ IPin
**, unsigned long *);
291 STDMETHOD(EndOfStream
) (THIS
);
292 STDMETHOD(BeginFlush
) (THIS
);
293 STDMETHOD(EndFlush
) (THIS
);
294 STDMETHOD(NewSegment
) (THIS_ REFERENCE_TIME
, REFERENCE_TIME
, double);
298 #define INTERFACE IBaseFilter
299 DECLARE_INTERFACE(IBaseFilter
)
301 STDMETHOD(QueryInterface
) (THIS_
const GUID
*, void **);
302 STDMETHOD_(long, AddRef
) (THIS
);
303 STDMETHOD_(long, Release
) (THIS
);
304 STDMETHOD(GetClassID
) (THIS_ CLSID
* pClassID
);
305 STDMETHOD(Stop
) (THIS
);
306 STDMETHOD(Pause
) (THIS
);
307 STDMETHOD(Run
) (THIS_ REFERENCE_TIME tStart
);
308 STDMETHOD(GetState
) (THIS_
unsigned long, void *);
309 STDMETHOD(SetSyncSource
) (THIS_ LPREFERENCECLOCK
);
310 STDMETHOD(GetSyncSource
) (THIS_ LPREFERENCECLOCK
*);
311 STDMETHOD(EnumPins
) (THIS_ LPENUMPINS
*);
312 STDMETHOD(FindPin
) (THIS_
const unsigned short *, LPPIN
*);
313 STDMETHOD(QueryFilterInfo
) (THIS_
void *);
314 STDMETHOD(JoinFilterGraph
) (THIS_ LPFILTERGRAPH
,
315 const unsigned short *);
316 STDMETHOD(QueryVendorInfo
) (THIS_
unsigned short **);
320 #define INTERFACE IAMTVTuner
321 DECLARE_INTERFACE(IAMTVTuner
)
323 STDMETHOD(QueryInterface
) (THIS_
const GUID
*, void **);
324 STDMETHOD_(long, AddRef
) (THIS
);
325 STDMETHOD_(long, Release
) (THIS
);
326 STDMETHOD(put_Channel
) (THIS_
long, long, long);
327 STDMETHOD(get_Channel
) (THIS_
long *, long *, long *);
328 STDMETHOD(ChannelMinMax
) (THIS_
long *, long *);
329 STDMETHOD(put_CountryCode
) (THIS_
long);
330 STDMETHOD(get_CountryCode
) (THIS_
long *);
331 STDMETHOD(put_TuningSpace
) (THIS_
long);
332 STDMETHOD(get_TuningSpace
) (THIS_
long *);
333 STDMETHOD(Logon
) (THIS_ HANDLE
);
334 STDMETHOD(Logout
) (IAMTVTuner
*);
335 STDMETHOD(SignalPresen
) (THIS_
long *);
336 STDMETHOD(put_Mode
) (THIS_ AMTunerModeType
);
337 STDMETHOD(get_Mode
) (THIS_ AMTunerModeType
*);
338 STDMETHOD(GetAvailableModes
) (THIS_
long *);
339 STDMETHOD(RegisterNotificationCallBack
) (THIS_ LPAMTUNERNOTIFICATION
,
341 STDMETHOD(UnRegisterNotificationCallBack
) (THIS_
342 LPAMTUNERNOTIFICATION
);
343 STDMETHOD(get_AvailableTVFormats
) (THIS_
long *);
344 STDMETHOD(get_TVFormat
) (THIS_
long *);
345 STDMETHOD(AutoTune
) (THIS_
long, long *);
346 STDMETHOD(StoreAutoTune
) (IAMTVTuner
*);
347 STDMETHOD(get_NumInputConnections
) (THIS_
long *);
348 STDMETHOD(put_InputType
) (THIS_
long, TunerInputType
);
349 STDMETHOD(get_InputType
) (THIS_
long, TunerInputType
*);
350 STDMETHOD(put_ConnectInput
) (THIS_
long);
351 STDMETHOD(get_ConnectInput
) (THIS_
long *);
352 STDMETHOD(get_VideoFrequency
) (THIS_
long *);
353 STDMETHOD(get_AudioFrequency
) (THIS_
long *);
357 #define INTERFACE IMediaControl
358 DECLARE_INTERFACE(IMediaControl
)
360 STDMETHOD(QueryInterface
) (THIS_
const GUID
*, void **);
361 STDMETHOD_(long, AddRef
) (THIS
);
362 STDMETHOD_(long, Release
) (THIS
);
363 STDMETHOD(GetTypeInfoCount
) (THIS_ UINT
*);
364 STDMETHOD(GetTypeInfo
) (THIS_ UINT
, LCID
, LPTYPEINFO
*);
365 STDMETHOD(GetIDsOfNames
) (THIS_ REFIID
, LPOLESTR
*, UINT
, LCID
,
367 STDMETHOD(Invoke
) (THIS_ DISPID
, REFIID
, LCID
, WORD
, LPDISPPARAMS
,
368 VARIANT
*, EXCEPINFO
*, UINT
*);
369 STDMETHOD(Run
) (THIS
);
370 STDMETHOD(Pause
) (THIS
);
371 STDMETHOD(Stop
) (THIS
);
372 STDMETHOD(GetState
) (THIS_ LONG
, OAFilterState
*);
373 STDMETHOD(RenderFile
) (THIS_ BSTR
);
374 STDMETHOD(AddSourceFilter
) (THIS_ BSTR
, LPDISPATCH
*);
375 STDMETHOD(get_FilterCollection
) (THIS_ LPDISPATCH
*);
376 STDMETHOD(get_RegFilterCollection
) (THIS_ LPDISPATCH
*);
377 STDMETHOD(StopWhenReady
) (IMediaControl
*);
381 #define INTERFACE IGraphBuilder
382 DECLARE_INTERFACE(IGraphBuilder
)
384 STDMETHOD(QueryInterface
) (THIS_
const GUID
*, void **);
385 STDMETHOD_(long, AddRef
) (THIS
);
386 STDMETHOD_(long, Release
) (THIS
);
387 STDMETHOD(AddFilter
) (THIS_ IBaseFilter
*, LPCWSTR
);
388 STDMETHOD(RemoveFilter
) (THIS_ IBaseFilter
*);
389 STDMETHOD(EnumFilters
) (THIS_ LPENUMFILTERS
*);
390 STDMETHOD(FindFilterByName
) (THIS_ LPCWSTR
, IBaseFilter
**);
391 STDMETHOD(ConnectDirect
) (THIS_ IPin
*, IPin
*, const AM_MEDIA_TYPE
*);
392 STDMETHOD(Reconnect
) (THIS_ IPin
*);
393 STDMETHOD(Disconnect
) (THIS_ IPin
*);
394 STDMETHOD(SetDefaultSyncSource
) (IGraphBuilder
*);
395 STDMETHOD(Connect
) (THIS_ IPin
*, IPin
*);
396 STDMETHOD(Render
) (THIS_ IPin
*);
397 STDMETHOD(RenderFile
) (THIS_ LPCWSTR
, LPCWSTR
);
398 STDMETHOD(AddSourceFilter
) (THIS_ LPCWSTR
, LPCWSTR
, IBaseFilter
**);
399 STDMETHOD(SetLogFile
) (THIS_ DWORD_PTR
);
400 STDMETHOD(Abort
) (IGraphBuilder
*);
401 STDMETHOD(ShouldOperationContinue
) (IGraphBuilder
*);
406 #define INTERFACE ICaptureGraphBuilder2
407 DECLARE_INTERFACE(ICaptureGraphBuilder2
)
409 STDMETHOD(QueryInterface
) (THIS_
const GUID
*, void **);
410 STDMETHOD_(long, AddRef
) (THIS
);
411 STDMETHOD_(long, Release
) (THIS
);
412 STDMETHOD(SetFiltergraph
) (THIS_ IGraphBuilder
*);
413 STDMETHOD(GetFiltergraph
) (THIS_ IGraphBuilder
**);
414 STDMETHOD(SetOutputFileName
) (THIS_
const GUID
*, LPCOLESTR
,
415 IBaseFilter
**, LPFILESINKFILTER
*);
416 STDMETHOD(FindInterface
) (THIS_
const GUID
*, const GUID
*,
417 IBaseFilter
*, REFIID
, void **);
418 STDMETHOD(RenderStream
) (THIS_
const GUID
*, const GUID
*, IUnknown
*,
419 IBaseFilter
*, IBaseFilter
*);
420 STDMETHOD(ControlStream
) (THIS_
const GUID
*, const GUID
*,
421 IBaseFilter
*, REFERENCE_TIME
*,
422 REFERENCE_TIME
*, WORD
, WORD
);
423 STDMETHOD(AllocCapFile
) (THIS_ LPCOLESTR
, DWORDLONG
);
424 STDMETHOD(CopyCaptureFile
) (THIS_ LPOLESTR
, LPOLESTR
, int,
425 LPAMCOPYCAPTUREFILEPROGRESS
);
426 STDMETHOD(FindPin
) (THIS_ IUnknown
*, PIN_DIRECTION
, const GUID
*,
427 const GUID
*, BOOL
, int, IPin
**);
431 #define INTERFACE ICreateDevEnum
432 DECLARE_INTERFACE(ICreateDevEnum
)
434 STDMETHOD(QueryInterface
) (THIS_
const GUID
*, void **);
435 STDMETHOD_(long, AddRef
) (THIS
);
436 STDMETHOD_(long, Release
) (THIS
);
437 STDMETHOD(CreateClassEnumerator
) (THIS_ REFCLSID
, IEnumMoniker
**,
442 #define INTERFACE IAMCrossbar
443 DECLARE_INTERFACE(IAMCrossbar
)
445 STDMETHOD(QueryInterface
) (THIS_
const GUID
*, void **);
446 STDMETHOD_(long, AddRef
) (THIS
);
447 STDMETHOD_(long, Release
) (THIS
);
448 STDMETHOD(get_PinCounts
) (THIS_
long *, long *);
449 STDMETHOD(CanRoute
) (THIS_
long, long);
450 STDMETHOD(Route
) (THIS_
long, long);
451 STDMETHOD(get_IsRoutedTo
) (THIS_
long, long *);
452 STDMETHOD(get_CrossbarPinInfo
) (THIS_ BOOL
, long, long *, long *);
455 #ifndef __IPropertyBag_INTERFACE_DEFINED__
456 #define __IPropertyBag_INTERFACE_DEFINED__
458 #define INTERFACE IPropertyBag
459 DECLARE_INTERFACE(IPropertyBag
)
461 STDMETHOD(QueryInterface
) (THIS_
const GUID
*, void **);
462 STDMETHOD_(long, AddRef
) (THIS
);
463 STDMETHOD_(long, Release
) (THIS
);
464 STDMETHOD(Read
) (THIS_ LPCOLESTR
, LPVARIANT
, LPERRORLOG
);
465 STDMETHOD(Write
) (THIS_ LPCOLESTR
, LPVARIANT
);
470 #define INTERFACE IAMStreamConfig
471 DECLARE_INTERFACE(IAMStreamConfig
)
473 STDMETHOD(QueryInterface
) (THIS_
const GUID
*, void **);
474 STDMETHOD_(long, AddRef
) (THIS
);
475 STDMETHOD_(long, Release
) (THIS
);
476 HRESULT(STDMETHODCALLTYPE
* SetFormat
) (THIS_ AM_MEDIA_TYPE
*);
477 HRESULT(STDMETHODCALLTYPE
* GetFormat
) (THIS_ AM_MEDIA_TYPE
**);
478 HRESULT(STDMETHODCALLTYPE
* GetNumberOfCapabilities
) (THIS_
int *,int *);
479 HRESULT(STDMETHODCALLTYPE
* GetStreamCaps
) (THIS_
int,AM_MEDIA_TYPE
**, BYTE
*);
483 #define INTERFACE IAMVideoProcAmp
484 DECLARE_INTERFACE(IAMVideoProcAmp
)
486 STDMETHOD(QueryInterface
) (THIS_
const GUID
*, void **);
487 STDMETHOD_(long, AddRef
) (THIS
);
488 STDMETHOD_(long, Release
) (THIS
);
489 STDMETHOD(GetRange
) (THIS_
long, long *, long *, long *, long *,long *);
490 STDMETHOD(Set
) (THIS_
long, long, long);
491 STDMETHOD(Get
) (THIS_
long, long *, long *);
495 #define INTERFACE IKsPropertySet
496 DECLARE_INTERFACE(IKsPropertySet
)
498 STDMETHOD(QueryInterface
) (THIS_
const GUID
*, void **);
499 STDMETHOD_(long, AddRef
) (THIS
);
500 STDMETHOD_(long, Release
) (THIS
);
501 HRESULT(STDMETHODCALLTYPE
* Set
) (THIS_ REFGUID
, DWORD
, LPVOID
, DWORD
,LPVOID
, DWORD
);
502 HRESULT(STDMETHODCALLTYPE
* Get
) (THIS_ REFGUID
, DWORD
, LPVOID
, DWORD
,LPVOID
, DWORD
, DWORD
*);
503 HRESULT(STDMETHODCALLTYPE
* QuerySupported
) (THIS_ REFGUID
, DWORD
,DWORD
*);
507 #define INTERFACE IAMAnalogVideoDecoder
508 DECLARE_INTERFACE(IAMAnalogVideoDecoder
)
510 STDMETHOD(QueryInterface
) (THIS_
const GUID
*, void **);
511 STDMETHOD_(long, AddRef
) (THIS
);
512 STDMETHOD_(long, Release
) (THIS
);
513 STDMETHOD(get_AvailableTVFormats
) (THIS_
long *);
514 STDMETHOD(put_TVFormat
) (THIS_
long);
515 STDMETHOD(get_TVFormat
) (THIS_
long *);
516 STDMETHOD(get_HorizontalLocked
) (THIS_
long *);
517 STDMETHOD(put_VCRHorizontalLocking
) (THIS_
long);
518 STDMETHOD(get_VCRHorizontalLocking
) (THIS_
long *);
519 STDMETHOD(get_NumberOfLines
) (THIS_
long *);
520 STDMETHOD(put_OutputEnable
) (THIS_
long);
521 STDMETHOD(get_OutputEnable
) (THIS_
long *);
525 #define INTERFACE IAMTVAudio
526 DECLARE_INTERFACE(IAMTVAudio
)
528 STDMETHOD(QueryInterface
) (THIS_
const GUID
*, void **);
529 STDMETHOD_(long, AddRef
) (THIS
);
530 STDMETHOD_(long, Release
) (THIS
);
531 STDMETHOD(GetHardwareSupportedTVAudioModes
) (THIS_
long *);
532 STDMETHOD(GetAvailableTVAudioModes
) (THIS_
long *);
533 STDMETHOD(get_TVAudioMode
) (THIS_
long *);
534 STDMETHOD(put_TVAudioMode
) (THIS_
long);
535 STDMETHOD(RegisterNotificationCallBack
) (THIS_ LPAMTUNERNOTIFICATION
,
537 STDMETHOD(UnRegisterNotificationCallBack
) (THIS_
538 LPAMTUNERNOTIFICATION
);
543 #define INTERFACE ISampleGrabberCB
544 DECLARE_INTERFACE(ISampleGrabberCB
)
546 STDMETHOD(QueryInterface
) (THIS_
const GUID
*, void **);
547 STDMETHOD_(long, AddRef
) (THIS
);
548 STDMETHOD_(long, Release
) (THIS
);
549 STDMETHOD(SampleCB
) (THIS_
double, LPMEDIASAMPLE
);
550 STDMETHOD(BufferCB
) (THIS_
double, BYTE
*, long);
554 #define INTERFACE ISampleGrabber
555 DECLARE_INTERFACE(ISampleGrabber
)
557 STDMETHOD(QueryInterface
) (THIS_
const GUID
*, void **);
558 STDMETHOD_(long, AddRef
) (THIS
);
559 STDMETHOD_(long, Release
) (THIS
);
560 STDMETHOD(SetOneShot
) (THIS_ BOOL
);
561 STDMETHOD(SetMediaType
) (THIS_
const AM_MEDIA_TYPE
*);
562 STDMETHOD(GetConnectedMediaType
) (THIS_ AM_MEDIA_TYPE
*);
563 STDMETHOD(SetBufferSamples
) (THIS_ BOOL
);
564 STDMETHOD(GetCurrentBuffer
) (THIS_
long *, long *);
565 STDMETHOD(GetCurrentSample
) (THIS_ LPMEDIASAMPLE
*);
566 STDMETHOD(SetCallback
) (THIS_ ISampleGrabberCB
*, long);
570 #define INTERFACE IFilterGraph
571 DECLARE_INTERFACE(IFilterGraph
)
573 STDMETHOD(QueryInterface
) (THIS_
const GUID
*, void **);
574 STDMETHOD_(long, AddRef
) (THIS
);
575 STDMETHOD_(long, Release
) (THIS
);
576 STDMETHOD(AddFilter
) (THIS_ LPBASEFILTER
, LPCWSTR
);
577 STDMETHOD(RemoveFilter
) (THIS_ LPBASEFILTER
);
578 STDMETHOD(EnumFilters
) (THIS_ LPENUMFILTERS
*);
579 STDMETHOD(FindFilterByName
) (THIS_ LPCWSTR
, LPBASEFILTER
*);
580 STDMETHOD(ConnectDirect
) (THIS_ IPin
*, IPin
*, const AM_MEDIA_TYPE
*);
581 STDMETHOD(Reconnect
) (THIS_ LPPIN
);
582 STDMETHOD(Disconnect
) (THIS_ LPPIN
);
583 STDMETHOD(SetDefaultSyncSource
) (THIS
);
587 #define INTERFACE IAMAudioInputMixer
588 DECLARE_INTERFACE(IAMAudioInputMixer
)
590 STDMETHOD(QueryInterface
) (THIS_
const GUID
*, void **);
591 STDMETHOD_(long, AddRef
) (THIS
);
592 STDMETHOD_(long, Release
) (THIS
);
593 STDMETHOD(put_Enable
) (THIS_ BOOL
);
594 STDMETHOD(get_Enable
) (THIS_ BOOL
*);
595 STDMETHOD(put_Mono
) (THIS_ BOOL
);
596 STDMETHOD(get_Mono
) (THIS_ BOOL
*);
597 STDMETHOD(put_MixLevel
) (THIS_
double);
598 STDMETHOD(get_MixLevel
) (THIS_
double *);
599 STDMETHOD(put_Pan
) (THIS_
double);
600 STDMETHOD(get_Pan
) (THIS_
double *);
601 STDMETHOD(put_Loudness
) (THIS_ BOOL
);
602 STDMETHOD(get_Loudness
) (THIS_ BOOL
*);
603 STDMETHOD(put_Treble
) (THIS_
double);
604 STDMETHOD(get_Treble
) (THIS_
double *);
605 STDMETHOD(get_TrebleRange
) (THIS_
double *);
606 STDMETHOD(put_Bass
) (THIS_
double);
607 STDMETHOD(get_Bass
) (THIS_
double *);
608 STDMETHOD(get_BassRange
) (THIS_
double *);
613 #define INTERFACE IMediaSample
614 DECLARE_INTERFACE(IMediaSample
)
616 STDMETHOD(QueryInterface
) (THIS_
const GUID
*, void **);
617 STDMETHOD_(long, AddRef
) (THIS
);
618 STDMETHOD_(long, Release
) (THIS
);
619 STDMETHOD(GetPointer
)(THIS_
unsigned char** );
620 STDMETHOD_(LONG
,GetSize
)(THIS
);
621 STDMETHOD(GetTime
)(THIS_ REFERENCE_TIME
* ,REFERENCE_TIME
* );
622 STDMETHOD(SetTime
)(THIS_ REFERENCE_TIME
* ,REFERENCE_TIME
* );
623 STDMETHOD(IsSyncPoint
)(THIS
);
624 STDMETHOD(SetSyncPoint
)(THIS_
long );
625 STDMETHOD(IsPreroll
)(THIS
);
626 STDMETHOD(SetPreroll
)(THIS_
long );
627 STDMETHOD_(LONG
,GetActualDataLength
)(THIS
);
628 STDMETHOD(SetActualDataLength
)(THIS_
long );
629 STDMETHOD(GetMediaType
)(THIS_ AM_MEDIA_TYPE
** );
630 STDMETHOD(SetMediaType
)(THIS_ AM_MEDIA_TYPE
* );
631 STDMETHOD(IsDiscontinuity
)(THIS
);
632 STDMETHOD(SetDiscontinuity
)(THIS_
long );
633 STDMETHOD(GetMediaTime
)(THIS_
long long* ,long long* );
634 STDMETHOD(SetMediaTime
)(THIS_
long long* ,long long* );
639 #define INTERFACE IAMBufferNegotiation
640 DECLARE_INTERFACE(IAMBufferNegotiation
)
642 STDMETHOD(QueryInterface
)(THIS_ REFIID
,void **);
643 STDMETHOD_(ULONG
,AddRef
)(THIS
);
644 STDMETHOD_(ULONG
,Release
)(THIS
);
645 STDMETHOD(SuggestAllocatorProperties
)(THIS_
const ALLOCATOR_PROPERTIES
*);
646 STDMETHOD(GetAllocatorProperties
)(THIS_ ALLOCATOR_PROPERTIES
*);
651 #define INTERFACE IVideoWindow
652 DECLARE_INTERFACE(IVideoWindow
)
654 STDMETHOD(QueryInterface
)(THIS_ REFIID
,void **);
655 STDMETHOD_(ULONG
,AddRef
)(THIS
);
656 STDMETHOD_(ULONG
,Release
)(THIS
);
657 STDMETHOD(GetTypeInfoCount
) (THIS_ UINT
* );
658 STDMETHOD(GetTypeInfo
) (THIS_ UINT
,LCID
, ITypeInfo
** );
659 STDMETHOD(GetIDsOfNames
) (THIS_ REFIID
,LPOLESTR
* , UINT
,LCID
, DISPID
* );
660 STDMETHOD(Invoke
) (THIS_ DISPID
,REFIID
, LCID
, WORD
,void *, VARIANT
* ,EXCEPINFO
* , UINT
* );
661 STDMETHOD(put_Caption
) (THIS_ BSTR
);
662 STDMETHOD(get_Caption
) (THIS_ BSTR
* );
663 STDMETHOD(put_WindowStyle
) (THIS_
long );
664 STDMETHOD(get_WindowStyle
) (THIS_
long *);
665 STDMETHOD(put_WindowStyleEx
) (THIS_
long );
666 STDMETHOD(get_WindowStyleEx
) (THIS_
long *);
667 STDMETHOD(put_AutoShow
) (THIS_
long );
668 STDMETHOD(get_AutoShow
) (THIS_
long *);
669 STDMETHOD(put_WindowState
) (THIS_
long );
670 STDMETHOD(get_WindowState
) (THIS_
long *);
671 STDMETHOD(put_BackgroundPalette
) (THIS_
long );
672 STDMETHOD(get_BackgroundPalette
) (THIS_
long *);
673 STDMETHOD(put_Visible
) (THIS_
long );
674 STDMETHOD(get_Visible
) (THIS_
long *);
675 STDMETHOD(put_Left
) (THIS_
long );
676 STDMETHOD(get_Left
) (THIS_
long *);
677 STDMETHOD(put_Width
) (THIS_
long );
678 STDMETHOD(get_Width
) (THIS_
long *);
679 STDMETHOD(put_Top
) (THIS_
long );
680 STDMETHOD(get_Top
) (THIS_
long *);
681 STDMETHOD(put_Height
) (THIS_
long );
682 STDMETHOD(get_Height
) (THIS_
long *);
683 STDMETHOD(put_Owner
) (THIS_ OAHWND
);
684 STDMETHOD(get_Owner
) (THIS_ OAHWND
* );
685 STDMETHOD(put_MessageDrain
) (THIS_ OAHWND
);
686 STDMETHOD(get_MessageDrain
) (THIS_ OAHWND
* );
687 STDMETHOD(get_BorderColor
) (THIS_
long *);
688 STDMETHOD(put_BorderColor
) (THIS_
long );
689 STDMETHOD(get_FullScreenMode
) (THIS_
long *);
690 STDMETHOD(put_FullScreenMode
) (THIS_
long );
691 STDMETHOD(SetWindowForeground
) (THIS_
long );
692 STDMETHOD(NotifyOwnerMessage
) (THIS_ OAHWND
,long , LONG_PTR
,LONG_PTR
);
693 STDMETHOD(SetWindowPosition
) (THIS_
long ,long , long ,long );
694 STDMETHOD(GetWindowPosition
) (THIS_
long *,long *, long *,long *);
695 STDMETHOD(GetMinIdealImageSize
) (THIS_
long *, long *);
696 STDMETHOD(GetMaxIdealImageSize
) (THIS_
long *, long *);
697 STDMETHOD(GetRestorePosition
) (THIS_
long *,long *, long *,long *);
698 STDMETHOD(HideCursor
) (THIS_
long );
699 STDMETHOD(IsCursorHidden
) (THIS_
long *);
702 #ifndef DECLARE_ENUMERATOR_
703 #define DECLARE_ENUMERATOR_(I,T) \
704 DECLARE_INTERFACE_(I,IUnknown) \
706 STDMETHOD(QueryInterface)(I*, REFIID,PVOID*); \
707 STDMETHOD_(ULONG,AddRef)(I*); \
708 STDMETHOD_(ULONG,Release)(I*); \
709 STDMETHOD(Next)(I*, ULONG,T*,ULONG*); \
710 STDMETHOD(Skip)(I*, ULONG); \
711 STDMETHOD(Reset)(I*); \
712 STDMETHOD(Clone)(I*, I**); \
715 DECLARE_ENUMERATOR_(IEnumFilters
, LPBASEFILTER
);
716 DECLARE_ENUMERATOR_(IEnumPins
, LPPIN
);
717 DECLARE_ENUMERATOR_(IEnumMediaTypes
, AM_MEDIA_TYPE
*);
719 #define OLE_CALL(p,method) (p)->lpVtbl->method(p)
721 #define OLE_CALL_ARGS(p, method, a1, args...) (p)->lpVtbl->method(p, a1, ##args)
723 #define OLE_CALL_ARGS(p, method, ...) (p)->lpVtbl->method(p, __VA_ARGS__)
725 #define OLE_RELEASE_SAFE(p) if(p){ OLE_CALL((IUnknown*)p,Release); p=NULL;}
726 #define OLE_QUERYINTERFACE(p,iface,ptr) OLE_CALL_ARGS((IUnknown*)p,QueryInterface,&iface,(void*)&ptr)
728 #endif /* MPLAYER_TVI_DSHOW_H */