docs: document --quvi-format
[mplayer.git] / stream / tvi_dshow.h
blob7ec1ce8e50090b5d1802c4097ada76980395a6b2
1 /*
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)
24 #define INITGUID
25 #include <inttypes.h>
26 #include <windows.h>
27 //#include <ole2.h>
28 #include <vfw.h>
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;
50 typedef struct
52 long cBuffers;
53 long cbBuffer;
54 long cbAlign;
55 long cbPrefix;
56 }ALLOCATOR_PROPERTIES;
58 typedef
59 enum tagTunerInputType { TunerInputCable = 0,
60 TunerInputAntenna = TunerInputCable + 1
61 } TunerInputType;
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
68 } AMTunerModeType;
69 enum tagAMTunerSubChannel { AMTUNER_SUBCHAN_NO_TUNE = -2,
70 AMTUNER_SUBCHAN_DEFAULT = -1
71 } AMTunerSubChannel;
72 typedef enum tagVideoProcAmpProperty {
73 VideoProcAmp_Brightness,
74 VideoProcAmp_Contrast,
75 VideoProcAmp_Hue,
76 VideoProcAmp_Saturation,
77 VideoProcAmp_Sharpness,
78 VideoProcAmp_Gamma,
79 VideoProcAmp_ColorEnable,
80 VideoProcAmp_WhiteBalance,
81 VideoProcAmp_BacklightCompensation,
82 VideoProcAmp_Gain
83 } VideoProcAmpProperty;
85 typedef long OAFilterState;
86 typedef
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
141 // supported
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
149 int CropAlignY;
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
156 int ShrinkTapsX; //
157 int ShrinkTapsY; //
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 {
165 GUID guid;
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
180 } VideoProcAmpFlags;
181 typedef enum {
182 PINDIR_INPUT = 0,
183 PINDIR_OUTPUT
184 } PIN_DIRECTION;
186 #define KSPROPERTY_SUPPORT_GET 1
187 #define KSPROPERTY_SUPPORT_SET 2
188 typedef struct {
189 GUID Set;
190 ULONG Id;
191 ULONG Flags;
192 } KSIDENTIFIER;
194 typedef KSIDENTIFIER KSPROPERTY;
197 typedef struct {
198 KSPROPERTY Property;
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;
209 typedef struct {
210 KSPROPERTY Property;
211 ULONG Mode; // IN: KSPROPERTY_TUNER_MODE
212 } KSPROPERTY_TUNER_MODE_S, *PKSPROPERTY_TUNER_MODE_S;
214 typedef struct {
215 KSPROPERTY Property;
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;
224 typedef struct {
225 KSPROPERTY Property;
226 ULONG CurrentFrequency;
227 ULONG PLLOffset;
228 ULONG SignalStrength;
229 ULONG Busy;
230 } KSPROPERTY_TUNER_STATUS_S, *PKSPROPERTY_TUNER_STATUS_S;
231 typedef enum {
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;
237 typedef enum {
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
246 } KSPROPERTY_TUNER;
247 typedef enum {
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
251 } KS_TUNER_STRATEGY;
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,
258 } TVAudioMode;
260 typedef struct FilterInfo {
261 WCHAR achName[128];
262 LPFILTERGRAPH pGraph;
263 } FILTER_INFO;
265 typedef struct PinInfo {
266 LPBASEFILTER pFilter;
267 PIN_DIRECTION dir;
268 unsigned short achName[128];
269 } PIN_INFO;
270 //-----------------------------------
273 #undef INTERFACE
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);
297 #undef INTERFACE
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 **);
319 #undef INTERFACE
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,
340 long);
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 *);
356 #undef INTERFACE
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,
366 DISPID *);
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 *);
380 #undef INTERFACE
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 *);
405 #undef INTERFACE
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 **);
430 #undef INTERFACE
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 **,
438 DWORD);
441 #undef INTERFACE
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__
457 #undef INTERFACE
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);
467 #endif
469 #undef INTERFACE
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 *);
482 #undef INTERFACE
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 *);
494 #undef INTERFACE
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 *);
506 #undef INTERFACE
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 *);
524 #undef INTERFACE
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,
536 long);
537 STDMETHOD(UnRegisterNotificationCallBack) (THIS_
538 LPAMTUNERNOTIFICATION);
542 #undef INTERFACE
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);
553 #undef INTERFACE
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);
569 #undef INTERFACE
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);
586 #undef INTERFACE
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 *);
612 #undef INTERFACE
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* );
638 #undef INTERFACE
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 *);
650 #undef INTERFACE
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**); \
714 #endif
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)
720 #ifdef __GNUC__
721 #define OLE_CALL_ARGS(p, method, a1, args...) (p)->lpVtbl->method(p, a1, ##args)
722 #else
723 #define OLE_CALL_ARGS(p, method, ...) (p)->lpVtbl->method(p, __VA_ARGS__)
724 #endif
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 */