1 /*****************************************************************************
2 * vlc_dshow.h : DirectShow access module for vlc
3 *****************************************************************************
4 * Copyright (C) 2002, 2004, 2010-2011 the VideoLAN team
7 * Author: Gildas Bazin <gbazin@videolan.org>
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.
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.
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 *****************************************************************************/
24 /*****************************************************************************
26 *****************************************************************************/
41 # define _I64_MAX LONG_LONG_MAX
43 # define LONGLONG long long
48 #define INSTANCEDATA_OF_PROPERTY_PTR(x) ((PKSPROPERTY((x))) + 1)
49 #define INSTANCEDATA_OF_PROPERTY_SIZE(x) (sizeof((x)) - sizeof(KSPROPERTY))
54 /*****************************************************************************
56 *****************************************************************************/
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);
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);
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);
80 DEFINE_GUID(MEDIASUBTYPE_DIVX ,0x58564944, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
83 DEFINE_GUID(MEDIASUBTYPE_IEEE_FLOAT ,0x00000003, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71);
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 ****************************************************************************/
91 /* http://msdn.microsoft.com/en-us/library/ff567297%28VS.85%29.aspx */
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;
116 /* http://msdn.microsoft.com/en-us/library/ff567800%28VS.85%29.aspx and following */
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
127 KSPROPERTY_TUNER_IF_MEDIUM, // R O-Medium for IF or Transport Pin
129 /* Mandatory for Vista and + */
130 KSPROPERTY_TUNER_SCAN_CAPS, // R -overall device capabilities for scanning
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
138 /* http://msdn.microsoft.com/en-us/library/ff567689%28v=VS.85%29.aspx */
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;
145 /* http://msdn.microsoft.com/en-us/library/ff567687%28v=VS.85%29.aspx */
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
152 /* http://msdn.microsoft.com/en-us/library/ff562676%28VS.85%29.aspx */
162 } KSIDENTIFIER, *PKSIDENTIFIER;
164 typedef KSIDENTIFIER KSPROPERTY, *PKSPROPERTY;
166 /* http://msdn.microsoft.com/en-us/library/ff565872%28v=VS.85%29.aspx */
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;
179 /* http://msdn.microsoft.com/en-us/library/ff565839%28v=VS.85%29.aspx */
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;
191 /* http://msdn.microsoft.com/en-us/library/ff565918%28v=VS.85%29.aspx */
194 ULONG Standard; // KS_AnalogVideo_*
195 } KSPROPERTY_TUNER_STANDARD_S, *PKSPROPERTY_TUNER_STANDARD_S;
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
209 #define AMPROPERTY_PIN_CATEGORY 0
210 typedef enum tagAMTunerSubChannel {
211 AMTUNER_SUBCHAN_NO_TUNE = -2,
212 AMTUNER_SUBCHAN_DEFAULT = -1
215 /* http://msdn.microsoft.com/en-us/library/dd407232%28v=vs.85%29.aspx */
216 typedef enum tagTunerInputType {
218 TunerInputAntenna = TunerInputCable + 1
221 typedef enum tagAMTunerEventType {
222 AMTUNER_EVENT_CHANGED = 0x1
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,
231 PhysConn_Video_YRYBY,
232 PhysConn_Video_SerialDigital,
233 PhysConn_Video_ParallelDigital,
238 PhysConn_Video_VideoDecoder,
239 PhysConn_Video_VideoEncoder,
240 PhysConn_Video_SCART,
241 PhysConn_Video_Black,
242 PhysConn_Audio_Tuner = 4096, /* 0x1000 */
245 PhysConn_Audio_AESDigital,
246 PhysConn_Audio_SPDIFDigital,
251 PhysConn_Audio_AudioDecoder
252 } PhysicalConnectorType;
254 /* http://msdn.microsoft.com/en-us/library/dd407352%28v=vs.85%29.aspx */
255 typedef struct _VIDEO_STREAM_CONFIG_CAPS {
259 SIZE MinCroppingSize;
260 SIZE MaxCroppingSize;
261 int CropGranularityX;
262 int CropGranularityY;
267 int OutputGranularityX;
268 int OutputGranularityY;
273 LONGLONG MinFrameInterval;
274 LONGLONG MaxFrameInterval;
275 LONG MinBitsPerSecond;
276 LONG MaxBitsPerSecond;
277 } VIDEO_STREAM_CONFIG_CAPS;
279 /* http://msdn.microsoft.com/en-us/library/dd317597%28v=vs.85%29.aspx */
280 typedef struct _AUDIO_STREAM_CONFIG_CAPS {
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;
293 /* http://msdn.microsoft.com/en-us/library/dd389142%28v=vs.85%29.aspx */
295 #define INTERFACE IAMBufferNegotiation
296 DECLARE_INTERFACE_(IAMBufferNegotiation, IUnknown)
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 *);
305 /* http://msdn.microsoft.com/en-us/library/dd389171%28v=vs.85%29.aspx */
307 #define INTERFACE IAMCrossbar
308 DECLARE_INTERFACE_(IAMCrossbar, IUnknown)
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 *);
320 /* http://msdn.microsoft.com/en-us/library/dd375945%28v=vs.85%29.aspx */
322 #define INTERFACE IAMTunerNotification
323 DECLARE_INTERFACE_( IAMTunerNotification, IUnknown)
325 STDMETHOD(QueryInterface) (THIS_ REFIID, PVOID*) PURE;
326 STDMETHOD_(ULONG, AddRef) (THIS);
327 STDMETHOD_(ULONG, Release) (THIS);
328 STDMETHOD(OnEvent) (THIS_ AMTunerEventType);
331 /* http://msdn.microsoft.com/en-us/library/dd375971%28v=vs.85%29.aspx */
333 #define INTERFACE IAMTVTuner
334 DECLARE_INTERFACE_(IAMTVTuner, IUnknown)
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 *);
367 /* http://msdn.microsoft.com/en-us/library/dd375962%28v=vs.85%29.aspx */
369 #define INTERFACE IAMTVAudio
370 DECLARE_INTERFACE_(IAMTVAudio, IUnknown)
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*);
383 #endif /* VLC_DSHOW_H */