]> git.sesse.net Git - vlc/blob - modules/access/dshow/vlc_dshow.h
DShow: Split the GUIDs and the definition to another header
[vlc] / modules / access / dshow / vlc_dshow.h
1 /*****************************************************************************
2  * common.h : DirectShow access module for vlc
3  *****************************************************************************
4  * Copyright (C) 2002, 2004, 2010 the VideoLAN team
5  * $Id$
6  *
7  * Author: Gildas Bazin <gbazin@videolan.org>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
22  *****************************************************************************/
23
24 /*****************************************************************************
25  * Preamble
26  *****************************************************************************/
27 #include <string>
28 #include <list>
29 #include <deque>
30 using namespace std;
31
32 #ifndef _MSC_VER
33 #   include <wtypes.h>
34 #   include <unknwn.h>
35 #   include <ole2.h>
36 #   include <limits.h>
37 #   ifdef _WINGDI_
38 #      undef _WINGDI_
39 #   endif
40 #   define _WINGDI_ 1
41 #   define AM_NOVTABLE
42 #   define _OBJBASE_H_
43 #   undef _X86_
44 #   ifndef _I64_MAX
45 #     define _I64_MAX LONG_LONG_MAX
46 #   endif
47 #   define LONGLONG long long
48 #endif
49
50 #include <dshow.h>
51
52 #define INSTANCEDATA_OF_PROPERTY_PTR(x) ((PKSPROPERTY((x))) + 1)
53 #define INSTANCEDATA_OF_PROPERTY_SIZE(x) (sizeof((x)) - sizeof(KSPROPERTY))
54
55 /*****************************************************************************
56  * DirectShow GUIDs.
57  *****************************************************************************/
58 static const GUID PROPSETID_TUNER = {0x6a2e0605, 0x28e4, 0x11d0, {0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56}};
59 const GUID IID_IAMBufferNegotiation = {0x56ed71a0, 0xaf5f, 0x11d0, {0xb3, 0xf0, 0x00, 0xaa, 0x00, 0x37, 0x61, 0xc5}};
60 const GUID IID_IAMTVAudio      = {0x83EC1C30, 0x23D1, 0x11d1, {0x99, 0xE6, 0x00, 0xA0, 0xC9, 0x56, 0x02, 0x66}};
61 const GUID IID_IAMCrossbar     = {0xC6E13380, 0x30AC, 0x11d0, {0xA1, 0x8C, 0x00, 0xA0, 0xC9, 0x11, 0x89, 0x56}};
62 const GUID IID_IAMTVTuner      = {0x211A8766, 0x03AC, 0x11d1, {0x8D, 0x13, 0x00, 0xAA, 0x00, 0xBD, 0x83, 0x39}};
63
64 /****************************************************************************
65  * The following should be in ks.h and ksmedia.h, but since they are not in
66  * the current version of Mingw, we will be defined here.
67  ****************************************************************************/
68
69 /* http://msdn.microsoft.com/en-us/library/ff567297%28VS.85%29.aspx */
70 typedef enum  {
71         KS_AnalogVideo_None          = 0x00000000,
72         KS_AnalogVideo_NTSC_M        = 0x00000001,
73         KS_AnalogVideo_NTSC_M_J      = 0x00000002,
74         KS_AnalogVideo_NTSC_433      = 0x00000004,
75         KS_AnalogVideo_PAL_B         = 0x00000010,
76         KS_AnalogVideo_PAL_D         = 0x00000020,
77         KS_AnalogVideo_PAL_G         = 0x00000040,
78         KS_AnalogVideo_PAL_H         = 0x00000080,
79         KS_AnalogVideo_PAL_I         = 0x00000100,
80         KS_AnalogVideo_PAL_M         = 0x00000200,
81         KS_AnalogVideo_PAL_N         = 0x00000400,
82         KS_AnalogVideo_PAL_60        = 0x00000800,
83         KS_AnalogVideo_SECAM_B       = 0x00001000,
84         KS_AnalogVideo_SECAM_D       = 0x00002000,
85         KS_AnalogVideo_SECAM_G       = 0x00004000,
86         KS_AnalogVideo_SECAM_H       = 0x00008000,
87         KS_AnalogVideo_SECAM_K       = 0x00010000,
88         KS_AnalogVideo_SECAM_K1      = 0x00020000,
89         KS_AnalogVideo_SECAM_L       = 0x00040000,
90         KS_AnalogVideo_SECAM_L1      = 0x00080000,
91         KS_AnalogVideo_PAL_N_COMBO   = 0x00100000
92 } KS_AnalogVideoStandard;
93
94 /* http://msdn.microsoft.com/en-us/library/ff567800%28VS.85%29.aspx and following */
95 typedef enum {
96     KSPROPERTY_TUNER_CAPS,              // R  -overall device capabilities
97     KSPROPERTY_TUNER_MODE_CAPS,         // R  -capabilities in this mode
98     KSPROPERTY_TUNER_MODE,              // RW -set a mode (TV, FM, AM, DSS)
99     KSPROPERTY_TUNER_STANDARD,          // R  -get TV standard (only if TV mode)
100     KSPROPERTY_TUNER_FREQUENCY,         // RW -set/get frequency
101     KSPROPERTY_TUNER_INPUT,             // RW -select an input
102     KSPROPERTY_TUNER_STATUS,            // R  -tuning status
103
104     /* Optional */
105     KSPROPERTY_TUNER_IF_MEDIUM,         // R O-Medium for IF or Transport Pin
106
107     /* Mandatory for Vista and + */
108     KSPROPERTY_TUNER_SCAN_CAPS,         // R  -overall device capabilities for scanning
109
110     /* Optional ones */
111     KSPROPERTY_TUNER_SCAN_STATUS,       // R  -status of scan
112     KSPROPERTY_TUNER_STANDARD_MODE,     // RW -autodetect mode for signal standard
113     KSPROPERTY_TUNER_NETWORKTYPE_SCAN_CAPS // R -network type specific tuner capabilities
114 } KSPROPERTY_TUNER;
115
116 /* http://msdn.microsoft.com/en-us/library/ff567689%28v=VS.85%29.aspx */
117 typedef enum {
118     KS_TUNER_TUNING_EXACT = 1,        // Tunes directly to the right freq
119     KS_TUNER_TUNING_FINE,             // Comprehensive search to the right freq
120     KS_TUNER_TUNING_COARSE,           // Fast search
121 }KS_TUNER_TUNING_FLAGS;
122
123 /* http://msdn.microsoft.com/en-us/library/ff567687%28v=VS.85%29.aspx */
124 typedef enum {
125     KS_TUNER_STRATEGY_PLL             = 0X01, // Phase locked loop (PLL) offset tuning
126     KS_TUNER_STRATEGY_SIGNAL_STRENGTH = 0X02, // Signal strength tuning
127     KS_TUNER_STRATEGY_DRIVER_TUNES    = 0X04, // Driver tunes
128 }KS_TUNER_STRATEGY;
129
130 /* http://msdn.microsoft.com/en-us/library/ff562676%28VS.85%29.aspx */
131 typedef struct {
132     union {
133         struct {
134             GUID    Set;
135             ULONG   Id;
136             ULONG   Flags;
137         };
138         LONGLONG    Alignment;
139     };
140 } KSIDENTIFIER, *PKSIDENTIFIER;
141
142 typedef KSIDENTIFIER KSPROPERTY, *PKSPROPERTY;
143
144 /* http://msdn.microsoft.com/en-us/library/ff565872%28v=VS.85%29.aspx */
145 typedef struct {
146     KSPROPERTY Property;
147     ULONG  Mode;                        // KSPROPERTY_TUNER_MODE_*
148     ULONG  StandardsSupported;          // KS_AnalogVideo_* (if Mode is TV or DSS)
149     ULONG  MinFrequency;                // Hz
150     ULONG  MaxFrequency;                // Hz
151     ULONG  TuningGranularity;           // Hz
152     ULONG  NumberOfInputs;              // number of inputs
153     ULONG  SettlingTime;                // milliSeconds
154     ULONG  Strategy;                    // KS_TUNER_STRATEGY
155 } KSPROPERTY_TUNER_MODE_CAPS_S, *PKSPROPERTY_TUNER_MODE_CAPS_S;
156
157 /* http://msdn.microsoft.com/en-us/library/ff565839%28v=VS.85%29.aspx */
158 typedef struct {
159     KSPROPERTY Property;
160     ULONG  Frequency;                   // Hz
161     ULONG  LastFrequency;               // Hz (last tuned)
162     ULONG  TuningFlags;                 // KS_TUNER_TUNING_FLAGS
163     ULONG  VideoSubChannel;             // DSS
164     ULONG  AudioSubChannel;             // DSS
165     ULONG  Channel;                     // VBI decoders
166     ULONG  Country;                     // VBI decoders
167 } KSPROPERTY_TUNER_FREQUENCY_S, *PKSPROPERTY_TUNER_FREQUENCY_S;
168
169 /* http://msdn.microsoft.com/en-us/library/ff565918%28v=VS.85%29.aspx */
170 typedef struct {
171     KSPROPERTY Property;
172     ULONG  Standard;                    // KS_AnalogVideo_*
173 } KSPROPERTY_TUNER_STANDARD_S, *PKSPROPERTY_TUNER_STANDARD_S;
174
175 /* http://msdn.microsoft.com/en-us/library/dd373441%28v=vs.85%29.aspx */
176 typedef enum tagAMTunerModeType {
177     AMTUNER_MODE_DEFAULT    = 0x0000,
178     AMTUNER_MODE_TV         = 0x0001,
179     AMTUNER_MODE_FM_RADIO   = 0x0002,
180     AMTUNER_MODE_AM_RADIO   = 0x0004,
181     AMTUNER_MODE_DSS        = 0x0008
182 } AMTunerModeType;
183
184 #define AMPROPERTY_PIN_CATEGORY 0
185 typedef enum tagAMTunerSubChannel {
186     AMTUNER_SUBCHAN_NO_TUNE = -2,
187     AMTUNER_SUBCHAN_DEFAULT = -1
188 } AMTunerSubChannel;
189
190 /* http://msdn.microsoft.com/en-us/library/dd407232%28v=vs.85%29.aspx */
191 typedef enum tagTunerInputType {
192     TunerInputCable = 0,
193     TunerInputAntenna = TunerInputCable + 1
194 } TunerInputType;
195
196 typedef enum tagAMTunerEventType {
197     AMTUNER_EVENT_CHANGED = 0x1
198 } AMTunerEventType;
199
200 /* http://msdn.microsoft.com/en-us/library/dd377421%28v=vs.85%29.aspx */
201 typedef enum tagPhysicalConnectorType {
202     PhysConn_Video_Tuner             = 1,
203     PhysConn_Video_Composite,
204     PhysConn_Video_SVideo,
205     PhysConn_Video_RGB,
206     PhysConn_Video_YRYBY,
207     PhysConn_Video_SerialDigital,
208     PhysConn_Video_ParallelDigital,
209     PhysConn_Video_SCSI,
210     PhysConn_Video_AUX,
211     PhysConn_Video_1394,
212     PhysConn_Video_USB,
213     PhysConn_Video_VideoDecoder,
214     PhysConn_Video_VideoEncoder,
215     PhysConn_Video_SCART,
216     PhysConn_Video_Black,
217     PhysConn_Audio_Tuner             = 4096, /* 0x1000 */
218     PhysConn_Audio_Line,
219     PhysConn_Audio_Mic,
220     PhysConn_Audio_AESDigital,
221     PhysConn_Audio_SPDIFDigital,
222     PhysConn_Audio_SCSI,
223     PhysConn_Audio_AUX,
224     PhysConn_Audio_1394,
225     PhysConn_Audio_USB,
226     PhysConn_Audio_AudioDecoder
227 } PhysicalConnectorType;
228
229 /* http://msdn.microsoft.com/en-us/library/dd407352%28v=vs.85%29.aspx */
230 typedef struct _VIDEO_STREAM_CONFIG_CAPS {
231     GUID     guid;
232     ULONG    VideoStandard;
233     SIZE     InputSize;
234     SIZE     MinCroppingSize;
235     SIZE     MaxCroppingSize;
236     int      CropGranularityX;
237     int      CropGranularityY;
238     int      CropAlignX;
239     int      CropAlignY;
240     SIZE     MinOutputSize;
241     SIZE     MaxOutputSize;
242     int      OutputGranularityX;
243     int      OutputGranularityY;
244     int      StretchTapsX;
245     int      StretchTapsY;
246     int      ShrinkTapsX;
247     int      ShrinkTapsY;
248     LONGLONG MinFrameInterval;
249     LONGLONG MaxFrameInterval;
250     LONG     MinBitsPerSecond;
251     LONG     MaxBitsPerSecond;
252 } VIDEO_STREAM_CONFIG_CAPS;
253
254 /* http://msdn.microsoft.com/en-us/library/dd317597%28v=vs.85%29.aspx */
255 typedef struct _AUDIO_STREAM_CONFIG_CAPS {
256     GUID  guid;
257     ULONG MinimumChannels;
258     ULONG MaximumChannels;
259     ULONG ChannelsGranularity;
260     ULONG MinimumBitsPerSample;
261     ULONG MaximumBitsPerSample;
262     ULONG BitsPerSampleGranularity;
263     ULONG MinimumSampleFrequency;
264     ULONG MaximumSampleFrequency;
265     ULONG SampleFrequencyGranularity;
266 } AUDIO_STREAM_CONFIG_CAPS;
267
268 /* http://msdn.microsoft.com/en-us/library/dd389142%28v=vs.85%29.aspx */
269 #undef INTERFACE
270 #define INTERFACE IAMBufferNegotiation
271 DECLARE_INTERFACE_(IAMBufferNegotiation, IUnknown)
272 {
273     STDMETHOD(QueryInterface) (THIS_ REFIID, PVOID*) PURE;
274     STDMETHOD_(ULONG,AddRef )(THIS);
275     STDMETHOD_(ULONG,Release )(THIS);
276     STDMETHOD(SuggestAllocatorProperties )(THIS_ const ALLOCATOR_PROPERTIES *);
277     STDMETHOD(GetAllocatorProperties )(THIS_ ALLOCATOR_PROPERTIES *);
278 };
279
280 /* http://msdn.microsoft.com/en-us/library/dd389171%28v=vs.85%29.aspx */
281 #undef INTERFACE
282 #define INTERFACE IAMCrossbar
283 DECLARE_INTERFACE_(IAMCrossbar, IUnknown)
284 {
285     STDMETHOD(QueryInterface) (THIS_ REFIID, PVOID*) PURE;
286     STDMETHOD_(ULONG, AddRef) (THIS);
287     STDMETHOD_(ULONG, Release) (THIS);
288     STDMETHOD(get_PinCounts) (THIS_ long *, long *);
289     STDMETHOD(CanRoute) (THIS_ long, long);
290     STDMETHOD(Route) (THIS_ long, long);
291     STDMETHOD(get_IsRoutedTo) (THIS_ long, long *);
292     STDMETHOD(get_CrossbarPinInfo) (THIS_ BOOL, long, long *, long *);
293 };
294
295 /* http://msdn.microsoft.com/en-us/library/dd375945%28v=vs.85%29.aspx */
296 #undef INTERFACE
297 #define INTERFACE IAMTunerNotification
298 DECLARE_INTERFACE_( IAMTunerNotification, IUnknown)
299 {
300     STDMETHOD(QueryInterface) (THIS_ REFIID, PVOID*) PURE;
301     STDMETHOD_(ULONG, AddRef) (THIS);
302     STDMETHOD_(ULONG, Release) (THIS);
303     STDMETHOD(OnEvent) (THIS_ AMTunerEventType);
304 };
305
306 /* http://msdn.microsoft.com/en-us/library/dd375971%28v=vs.85%29.aspx */
307 #undef INTERFACE
308 #define INTERFACE IAMTVTuner
309 DECLARE_INTERFACE_(IAMTVTuner, IUnknown)
310 {
311     STDMETHOD(QueryInterface) (THIS_ REFIID, PVOID*) PURE;
312     STDMETHOD_(ULONG, AddRef) (THIS);
313     STDMETHOD_(ULONG, Release) (THIS);
314     STDMETHOD(put_Channel) (THIS_ long, long, long);
315     STDMETHOD(get_Channel) (THIS_ long *, long *, long *);
316     STDMETHOD(ChannelMinMax) (THIS_ long *, long *);
317     STDMETHOD(put_CountryCode) (THIS_ long);
318     STDMETHOD(get_CountryCode) (THIS_ long *);
319     STDMETHOD(put_TuningSpace) (THIS_ long);
320     STDMETHOD(get_TuningSpace) (THIS_ long *);
321     STDMETHOD(Logon) (THIS_ HANDLE);
322     STDMETHOD(Logout) (IAMTVTuner *);
323     STDMETHOD(SignalPresen) (THIS_ long *);
324     STDMETHOD(put_Mode) (THIS_ AMTunerModeType);
325     STDMETHOD(get_Mode) (THIS_ AMTunerModeType *);
326     STDMETHOD(GetAvailableModes) (THIS_ long *);
327     STDMETHOD(RegisterNotificationCallBack) (THIS_ IAMTunerNotification *, long);
328     STDMETHOD(UnRegisterNotificationCallBack) (THIS_ IAMTunerNotification *);
329     STDMETHOD(get_AvailableTVFormats) (THIS_ long *);
330     STDMETHOD(get_TVFormat) (THIS_ long *);
331     STDMETHOD(AutoTune) (THIS_ long, long *);
332     STDMETHOD(StoreAutoTune) (IAMTVTuner *);
333     STDMETHOD(get_NumInputConnections) (THIS_ long *);
334     STDMETHOD(put_InputType) (THIS_ long, TunerInputType);
335     STDMETHOD(get_InputType) (THIS_ long, TunerInputType *);
336     STDMETHOD(put_ConnectInput) (THIS_ long);
337     STDMETHOD(get_ConnectInput) (THIS_ long *);
338     STDMETHOD(get_VideoFrequency) (THIS_ long *);
339     STDMETHOD(get_AudioFrequency) (THIS_ long *);
340 };
341
342 /* http://msdn.microsoft.com/en-us/library/dd375962%28v=vs.85%29.aspx */
343 #undef INTERFACE
344 #define INTERFACE IAMTVAudio
345 DECLARE_INTERFACE_(IAMTVAudio, IUnknown)
346 {
347     STDMETHOD(QueryInterface) (THIS_ REFIID, PVOID*) PURE;
348     STDMETHOD_(ULONG, AddRef) (THIS);
349     STDMETHOD_(ULONG, Release) (THIS);
350     STDMETHOD(GetHardwareSupportedTVAudioModes) (THIS_ long *);
351     STDMETHOD(GetAvailableTVAudioModes) (THIS_ long *);
352     STDMETHOD(get_TVAudioMode) (THIS_ long *);
353     STDMETHOD(put_TVAudioMode) (THIS_ long);
354     STDMETHOD(RegisterNotificationCallBack) (THIS_ IAMTunerNotification*, long);
355     STDMETHOD(UnRegisterNotificationCallBack) (THIS_ IAMTunerNotification*);
356 };
357