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