1 /**
2  * @file strmif.h
3  * Copyright 2012, 2013 MinGW.org project
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a
6  * copy of this software and associated documentation files (the "Software"),
7  * to deal in the Software without restriction, including without limitation
8  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9  * and/or sell copies of the Software, and to permit persons to whom the
10  * Software is furnished to do so, subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice (including the next
13  * paragraph) shall be included in all copies or substantial portions of the
14  * Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22  * DEALINGS IN THE SOFTWARE.
23  */
24 #ifndef _STRMIF_H
25 #define _STRMIF_H
26 #pragma GCC system_header
27 #include <_mingw.h>
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 
33 /*--- DirectShow Reference - DirectShow Enumerated Types - TVAudioMode Enumeration */
34 #define TVAUDIO_MODE_MASK 0x000000FF
35 #define TVAUDIO_PRESET_MASK 0x0000FF00
36 /*--- DirectShow Reference - DirectShow Data Types */
37 typedef LONGLONG REFERENCE_TIME;
38 typedef double REFTIME;
39 /*--- DirectShow Reference - Constants and GUIDs */
40 enum {
41 	MERIT_PREFERRED = 0x800000,
42 	MERIT_NORMAL = 0x600000,
43 	MERIT_UNLIKELY = 0x400000,
44 	MERIT_DO_NOT_USE = 0x200000,
45 	MERIT_SW_COMPRESSOR = 0x100000,
46 	MERIT_HW_COMPRESSOR = 0x100050
47 };
48 /*--- DirectShow Reference - DirectShow Enumerated Types */
49 typedef enum _AM_AUDIO_RENDERER_STAT_PARAM {
50 	AM_AUDREND_STAT_PARAM_BREAK_COUNT = 1,
51 	AM_AUDREND_STAT_PARAM_SLAVE_MODE,
52 	AM_AUDREND_STAT_PARAM_SILENCE_DUR,
53 	AM_AUDREND_STAT_PARAM_LAST_BUFFER_DUR,
54 	AM_AUDREND_STAT_PARAM_DISCONTINUITIES,
55 	AM_AUDREND_STAT_PARAM_SLAVE_RATE,
56 	AM_AUDREND_STAT_PARAM_SLAVE_DROPWRITE_DUR,
57 	AM_AUDREND_STAT_PARAM_SLAVE_HIGHLOWERROR,
58 	AM_AUDREND_STAT_PARAM_SLAVE_LASTHIGHLOWERROR,
59 	AM_AUDREND_STAT_PARAM_SLAVE_ACCUMERROR,
60 	AM_AUDREND_STAT_PARAM_BUFFERFULLNESS,
61 	AM_AUDREND_STAT_PARAM_JITTER
62 } AM_AUDIO_RENDERER_STAT_PARAM;
63 typedef enum _AM_DVD_GRAPH_FLAGS {
64 	AM_DVD_HWDEC_PREFER = 0x01,
65 	AM_DVD_HWDEC_ONLY = 0x02,
66 	AM_DVD_SWDEC_PREFER = 0x04,
67 	AM_DVD_SWDEC_ONLY = 0x08,
68 	AM_DVD_NOVPE = 0x100,
69 	AM_DVD_VMR9_ONLY = 0x800,
70 	AM_DVD_EVR_ONLY = 0x1000
71 } AM_DVD_GRAPH_FLAGS;
72 typedef enum _AM_DVD_STREAM_FLAGS {
73 	AM_DVD_STREAM_VIDEO = 0x01,
74 	AM_DVD_STREAM_AUDIO = 0x02,
75 	AM_DVD_STREAM_SUBPIC = 0x04
76 } AM_DVD_STREAM_FLAGS;
77 typedef enum _AM_FILTER_MISC_FLAGS {
78 	AM_FILTER_MISC_FLAGS_IS_RENDERER = 0x00000001,
79 	AM_FILTER_MISC_FLAGS_IS_SOURCE = 0x00000002
80 } AM_FILTER_MISC_FLAGS;
81 typedef enum _AM_GRAPH_CONFIG_RECONNECT_FLAGS {
82 	AM_GRAPH_CONFIG_RECONNECT_DIRECTCONNECT = 0x00000001,
83 	AM_GRAPH_CONFIG_RECONNECT_CACHE_REMOVED_FILTERS = 0x00000002,
84 	AM_GRAPH_CONFIG_RECONNECT_USE_ONLY_CACHED_FILTERS = 0x00000004
85 } AM_GRAPH_CONFIG_RECONNECT_FLAGS;
86 typedef enum _AM_INTF_SEARCH_FLAGS {
87 	AM_INTF_SEARCH_INPUT_PIN = 0x00000001,
88 	AM_INTF_SEARCH_OUTPUT_PIN = 0x00000002,
89 	AM_INTF_SEARCH_FILTER = 0x00000004
90 } AM_INTF_SEARCH_FLAGS;
91 typedef enum _AM_OVERLAY_NOTIFY_FLAGS {
92 	AM_OVERLAY_NOTIFY_VISIBLE_CHANGE = 0x00000001,
93 	AM_OVERLAY_NOTIFY_SOURCE_CHANGE = 0x00000002,
94 	AM_OVERLAY_NOTIFY_DEST_CHANGE = 0x00000004
95 } AM_OVERLAY_NOTIFY_FLAGS;
96 typedef enum _AM_PIN_CONNECTION_BLOCK_FLAGS {
97 	AM_PIN_FLOW_CONTROL_BLOCK = 0x00000001,
98 	AM_PIN_PUSH_THROUGH_DATA = 0x00000002
99 } AM_PIN_CONNECTION_BLOCK_FLAGS;
100 typedef enum _AM_PUSHSOURCE_FLAGS {
101 	AM_PUSHSOURCECAPS_INTERNAL_RM = 0x00000001,
102 	AM_PUSHSOURCECAPS_NOT_LIVE = 0x00000002,
103 	AM_PUSHSOURCECAPS_PRIVATE_CLOCK = 0x00000004,
104 	AM_PUSHSOURCEREQS_USE_STREAM_CLOCK = 0x00010000
105 } AM_PUSHSOURCE_FLAGS;
106 typedef enum tagAM_SAMPLE_PROPERTY_FLAGS {
107 	AM_SAMPLE_SPLICEPOINT = 0x01,
108 	AM_SAMPLE_PREROLL = 0x02,
109 	AM_SAMPLE_DATADISCONTINUITY = 0x04,
110 	AM_SAMPLE_TYPECHANGED = 0x08,
111 	AM_SAMPLE_TIMEVALID = 0x10,
112 	AM_SAMPLE_TIMEDISCONTINUITY = 0x40,
113 	AM_SAMPLE_FLUSH_ON_PAUSE = 0x80,
114 	AM_SAMPLE_STOPVALID = 0x100,
115 	AM_SAMPLE_ENDOFSTREAM = 0x200,
116 	AM_STREAM_MEDIA = 0,
117 	AM_STREAM_CONTROL = 1
118 } AM_SAMPLE_PROPERTY_FLAGS;
119 typedef enum AM_SEEKING_SeekingCapabilities {
120 	AM_SEEKING_CanSeekAbsolute = 0x1,
121 	AM_SEEKING_CanSeekForwards = 0x2,
122 	AM_SEEKING_CanSeekBackwards = 0x4,
123 	AM_SEEKING_CanGetCurrentPos = 0x8,
124 	AM_SEEKING_CanGetStopPos = 0x10,
125 	AM_SEEKING_CanGetDuration = 0x20,
126 	AM_SEEKING_CanPlayBackwards = 0x40,
127 	AM_SEEKING_CanDoSegments = 0x80,
128 	AM_SEEKING_Source = 0x100
129 } AM_SEEKING_SEEKING_CAPABILITIES;
130 typedef enum {
131 	AM_STREAM_INFO_START_DEFINED = 0x00000001,
132 	AM_STREAM_INFO_STOP_DEFINED = 0x00000002,
133 	AM_STREAM_INFO_DISCARDING = 0x00000004,
134 	AM_STREAM_INFO_STOP_SEND_EXTRA = 0x00000010
135 } AM_STREAM_INFO_FLAGS;
136 enum AMOVERLAYFX {
137 	AMOVERFX_NOFX = 0x00000000,
138 	AMOVERFX_MIRRORLEFTRIGHT = 0x00000002,
139 	AMOVERFX_MIRRORUPDOWN = 0x00000004,
140 	AMOVERFX_DEINTERLACE = 0x00000008
141 };
142 typedef enum _AMRESCTL_RESERVEFLAGS {
143 	AMRESCTL_RESERVEFLAGS_RESERVE = 0x00,
144 	AMRESCTL_RESERVEFLAGS_UNRESERVE = 0x01
145 } AMRESCTL_RESERVEFLAGS;
146 typedef enum tagAMTunerModeType {
147 	AMTUNER_MODE_DEFAULT = 0x0000,
148 	AMTUNER_MODE_TV = 0x0001,
149 	AMTUNER_MODE_FM_RADIO = 0x0002,
150 	AMTUNER_MODE_AM_RADIO = 0x0004,
151 	AMTUNER_MODE_DSS = 0x0008
152 } AMTunerModeType;
153 typedef enum tagAnalogVideoStandard {
154 	AnalogVideo_None = 0x00000000,
155 	AnalogVideo_NTSC_M = 0x00000001,
156 	AnalogVideo_NTSC_M_J = 0x00000002,
157 	AnalogVideo_NTSC_433 = 0x00000004,
158 	AnalogVideo_PAL_B = 0x00000010,
159 	AnalogVideo_PAL_D = 0x00000020,
160 	AnalogVideo_PAL_H = 0x00000080,
161 	AnalogVideo_PAL_I = 0x00000100,
162 	AnalogVideo_PAL_M = 0x00000200,
163 	AnalogVideo_PAL_N = 0x00000400,
164 	AnalogVideo_PAL_60 = 0x00000800,
165 	AnalogVideo_SECAM_B = 0x00001000,
166 	AnalogVideo_SECAM_D = 0x00002000,
167 	AnalogVideo_SECAM_G = 0x00004000,
168 	AnalogVideo_SECAM_H = 0x00008000,
169 	AnalogVideo_SECAM_K = 0x00010000,
170 	AnalogVideo_SECAM_K1 = 0x00020000,
171 	AnalogVideo_SECAM_L = 0x00040000,
172 	AnalogVideo_SECAM_L1 = 0x00080000,
173 	AnalogVideo_PAL_N_COMBO = 0x00100000
174 } AnalogVideoStandard;
175 typedef enum {
176 	CameraControl_Flags_Auto = 0x0001,
177 	CameraControl_Flags_Manual = 0x0002
178 } CameraControlFlags;
179 typedef enum {
180 	CameraControl_Pan = 1,
181 	CameraControl_Tilt,
182 	CameraControl_Roll,
183 	CameraControl_Zoom,
184 	CameraControl_Exposure,
185 	CameraControl_Iris,
186 	CameraControl_Focus
187 } CameraControlProperty;
188 typedef enum {
189 	CompressionCaps_CanQuality = 0x01,
190 	CompressionCaps_CanCrunch = 0x02,
191 	CompressionCaps_CanKeyFrame = 0x04,
192 	CompressionCaps_CanBFrame = 0x08,
193 	CompressionCaps_CanWindow = 0x10
194 } CompressionCaps;
195 typedef enum {
196 	DECIMATION_LEGACY,
197 	DECIMATION_USE_DECODER_ONLY,
198 	DECIMATION_USE_VIDEOPORT_ONLY,
199 	DECIMATION_USE_OVERLAY_ONLY,
200 	DECIMATION_DEFAULT
201 } DECIMATION_USAGE;
202 typedef enum tagDVD_AUDIO_APPMODE {
203 	DVD_AudioMode_None = 0,
204 	DVD_AudioMode_Karaoke = 1,
205 	DVD_AudioMode_Surround = 2,
206 	DVD_AudioMode_Other = 3
207 } DVD_AUDIO_APPMODE;
208 typedef enum tagDVD_AUDIO_FORMAT {
209 	DVD_AudioFormat_AC3 = 0,
210 	DVD_AudioFormat_MPEG1 = 1,
211 	DVD_AudioFormat_MPEG1_DRC = 2,
212 	DVD_AudioFormat_MPEG2 = 3,
213 	DVD_AudioFormat_MPEG2_DRC = 4,
214 	DVD_AudioFormat_LPCM = 5,
215 	DVD_AudioFormat_DTS = 6,
216 	DVD_AudioFormat_SDDS = 7,
217 	DVD_AudioFormat_Other = 8
218 } DVD_AUDIO_FORMAT;
219 typedef enum tagDVD_AUDIO_LANG_EXT {
220 	DVD_AUD_EXT_NotSpecified = 0,
221 	DVD_AUD_EXT_Captions = 1,
222 	DVD_AUD_EXT_VisuallyImpaired = 2,
223 	DVD_AUD_EXT_DirectorComments1 = 3,
224 	DVD_AUD_EXT_DirectorComments2 = 4
225 } DVD_AUDIO_LANG_EXT;
226 typedef enum {
227 	DVD_CMD_FLAG_None = 0x00000000,
228 	DVD_CMD_FLAG_Flush = 0x00000001,
229 	DVD_CMD_FLAG_SendEvents = 0x00000002,
230 	DVD_CMD_FLAG_Block = 0x00000004,
231 	DVD_CMD_FLAG_StartWhenRendered = 0x00000008,
232 	DVD_CMD_FLAG_EndAfterRendered = 0x00000010
233 } DVD_CMD_FLAGS;
234 typedef enum tagDVD_DISC_SIDE {
235 	DVD_SIDE_A,
236 	DVD_SIDE_B
237 } DVD_DISC_SIDE;
238 typedef enum tagDVD_DOMAIN {
239 	DVD_DOMAIN_FirstPlay,
240 	DVD_DOMAIN_VideoManagerMenu,
241 	DVD_DOMAIN_VideoTitleSetMenu,
242 	DVD_DOMAIN_Title,
243 	DVD_DOMAIN_Stop
244 } DVD_DOMAIN;
245 typedef enum tagDVD_FRAMERATE {
246 	DVD_FPS_25 = 1,
247 	DVD_FPS_30NonDrop = 3
248 } DVD_FRAMERATE;
249 typedef enum tagDVD_KARAOKE_ASSIGNMENT {
250 	DVD_Assignment_reserved0 = 0,
251 	DVD_Assignment_reserved1 = 1,
252 	DVD_Assignment_LR = 2,
253 	DVD_Assignment_LRM = 3,
254 	DVD_Assignment_LR1 = 4,
255 	DVD_Assignment_LRM1 = 5,
256 	DVD_Assignment_LR12 = 6,
257 	DVD_Assignment_LRM12 = 7
258 } DVD_KARAOKE_ASSIGNMENT;
259 typedef enum tagDVD_KARAOKE_CONTENTS {
260 	DVD_Karaoke_GuideVocal1 = 0x0001,
261 	DVD_Karaoke_GuideVocal2 = 0x0002,
262 	DVD_Karaoke_GuideMelody1 = 0x0004,
263 	DVD_Karaoke_GuideMelody2 = 0x0008,
264 	DVD_Karaoke_GuideMelodyA = 0x0010,
265 	DVD_Karaoke_GuideMelodyB = 0x0020,
266 	DVD_Karaoke_SoundEffectA = 0x0040,
267 	DVD_Karaoke_SoundEffectB = 0x0080
268 } DVD_KARAOKE_CONTENTS;
269 typedef enum tagDVD_KARAOKE_DOWNMIX {
270 	DVD_Mix_0to0 = 0x0001,
271 	DVD_Mix_1to0 = 0x0002,
272 	DVD_Mix_2to0 = 0x0004,
273 	DVD_Mix_3to0 = 0x0008,
274 	DVD_Mix_4to0 = 0x0010,
275 	DVD_Mix_Lto0 = 0x0020,
276 	DVD_Mix_Rto0 = 0x0040,
277 	DVD_Mix_0to1 = 0x0100,
278 	DVD_Mix_1to1 = 0x0200,
279 	DVD_Mix_2to1 = 0x0400,
280 	DVD_Mix_3to1 = 0x0800,
281 	DVD_Mix_4to1 = 0x1000,
282 	DVD_Mix_Lto1 = 0x2000,
283 	DVD_Mix_Rto1 = 0x4000
284 } DVD_KARAOKE_DOWNMIX;
285 typedef enum tagDVD_MENU_ID {
286 	DVD_MENU_Title = 2,
287 	DVD_MENU_Root = 3,
288 	DVD_MENU_Subpicture = 4,
289 	DVD_MENU_Audio = 5,
290 	DVD_MENU_Angle = 6,
291 	DVD_MENU_Chapter = 7
292 } DVD_MENU_ID;
293 typedef enum {
294 	DVD_ResetOnStop = 1,
295 	DVD_NotifyParentalLevelChange = 2,
296 	DVD_HMSF_TimeCodeEvents = 3,
297 	DVD_AudioDuringFFwdRew = 4,
298 	DVD_EnableNonblockingAPIs = 5,
299 	DVD_CacheSizeInMB = 6,
300 	DVD_EnablePortableBookmarks = 7
301 } DVD_OPTION_FLAG;
302 typedef enum tagDVD_PARENTAL_LEVEL {
303 	DVD_PARENTAL_LEVEL_8 = 0x8000,
304 	DVD_PARENTAL_LEVEL_7 = 0x4000,
305 	DVD_PARENTAL_LEVEL_6 = 0x2000,
306 	DVD_PARENTAL_LEVEL_5 = 0x1000,
307 	DVD_PARENTAL_LEVEL_4 = 0x0800,
308 	DVD_PARENTAL_LEVEL_3 = 0x0400,
309 	DVD_PARENTAL_LEVEL_2 = 0x0200,
310 	DVD_PARENTAL_LEVEL_1 = 0x0100
311 } DVD_PARENTAL_LEVEL;
312 typedef enum tagDVD_PREFERRED_DISPLAY_MODE {
313 	DISPLAY_CONTENT_DEFAULT = 0,
314 	DISPLAY_16x9 = 1,
315 	DISPLAY_4x3_PANSCAN_PREFERRED = 2,
316 	DISPLAY_4x3_LETTERBOX_PREFERRED = 3
317 } DVD_PREFERRED_DISPLAY_MODE;
318 typedef enum tagDVD_RELATIVE_BUTTON {
319 	DVD_Relative_Upper = 1,
320 	DVD_Relative_Lower = 2,
321 	DVD_Relative_Left = 3,
322 	DVD_Relative_Right = 4
323 } DVD_RELATIVE_BUTTON;
324 typedef enum tagDVD_SUBPICTURE_LANG_EXT {
325 	DVD_SP_EXT_NotSpecified = 0,
326 	DVD_SP_EXT_Caption_Normal = 1,
327 	DVD_SP_EXT_Caption_Big = 2,
328 	DVD_SP_EXT_Caption_Children = 3,
329 	DVD_SP_EXT_CC_Normal = 5,
330 	DVD_SP_EXT_CC_Big = 6,
331 	DVD_SP_EXT_CC_Children = 7,
332 	DVD_SP_EXT_Forced = 9,
333 	DVD_SP_EXT_DirectorComments_Normal = 13,
334 	DVD_SP_EXT_DirectorComments_Big = 14,
335 	DVD_SP_EXT_DirectorComments_Children = 15
336 } DVD_SUBPICTURE_LANG_EXT;
337 typedef enum tagDVD_SUBPICTURE_TYPE {
338 	DVD_SPType_NotSpecified = 0,
339 	DVD_SPType_Language = 1,
340 	DVD_SPType_Other = 2
341 } DVD_SUBPICTURE_TYPE;
342 typedef enum tagDVD_SUBPICTURE_CODING {
343 	DVD_SPCoding_RunLength = 0,
344 	DVD_SPCoding_Extended = 1,
345 	DVD_SPCoding_Other = 2
346 } DVD_SUBPICTURE_CODING;
347 enum DVD_TextCharSet {
348 	DVD_CharSet_Unicode = 0,
349 	DVD_CharSet_ISO646 = 1,
350 	DVD_CharSet_JIS_Roman_Kanji = 2,
351 	DVD_CharSet_ISO8859_1 = 3,
352 	DVD_CharSet_ShiftJIS_Kanji_Roman_Katakana = 4
353 };
354 enum DVD_TextStringType {
355 	DVD_Struct_Volume = 0x01,
356 	DVD_Struct_Title = 0x02,
357 	DVD_Struct_ParentalID = 0x03,
358 	DVD_Struct_PartOfTitle = 0x04,
359 	DVD_Struct_Cell = 0x05,
360 	DVD_Stream_Audio = 0x10,
361 	DVD_Stream_Subpicture = 0x11,
362 	DVD_Stream_Angle = 0x12,
363 	DVD_Channel_Audio = 0x20,
364 	DVD_General_Name = 0x30,
365 	DVD_General_Comments = 0x31,
366 	DVD_Title_Series = 0x38,
367 	DVD_Title_Movie = 0x39,
368 	DVD_Title_Video = 0x3a,
369 	DVD_Title_Album = 0x3b,
370 	DVD_Title_Song = 0x3c,
371 	DVD_Title_Other = 0x3f,
372 	DVD_Title_Sub_Series = 0x40,
373 	DVD_Title_Sub_Movie = 0x41,
374 	DVD_Title_Sub_Video = 0x42,
375 	DVD_Title_Sub_Album = 0x43,
376 	DVD_Title_Sub_Song = 0x44,
377 	DVD_Title_Sub_Other = 0x47,
378 	DVD_Title_Orig_Series = 0x48,
379 	DVD_Title_Orig_Movie = 0x49,
380 	DVD_Title_Orig_Video = 0x4a,
381 	DVD_Title_Orig_Album = 0x4b,
382 	DVD_Title_Orig_Song = 0x4c,
383 	DVD_Title_Orig_Other = 0x4f,
384 	DVD_Other_Scene = 0x50,
385 	DVD_Other_Cut = 0x51,
386 	DVD_Other_Take = 0x52
387 };
388 typedef enum tagDVD_TIMECODE_FLAGS {
389 	DVD_TC_FLAG_25fps = 0x00000001,
390 	DVD_TC_FLAG_30fps = 0x00000002,
391 	DVD_TC_FLAG_DropFrame = 0x00000004,
392 	DVD_TC_FLAG_Interpolated = 0x00000008
393 } DVD_TIMECODE_FLAGS;
394 typedef enum tagDVD_TITLE_APPMODE {
395 	DVD_AppMode_Not_Specified = 0,
396 	DVD_AppMode_Karaoke = 1,
397 	DVD_AppMode_Other = 3
398 } DVD_TITLE_APPMODE;
399 typedef enum tagDVD_VIDEO_COMPRESSION {
400 	DVD_VideoCompression_Other = 0,
401 	DVD_VideoCompression_MPEG1 = 1,
402 	DVD_VideoCompression_MPEG2 = 2
403 } DVD_VIDEO_COMPRESSION;
404 typedef enum _DVDECODERRESOLUTION {
405 	DVDECODERRESOLUTION_720x480 = 1000,
406 	DVDECODERRESOLUTION_360x240 = 1001,
407 	DVDECODERRESOLUTION_180x120 = 1002,
408 	DVDECODERRESOLUTION_88x60 = 1003
409 } DVDECODERRESOLUTION;
410 typedef enum _DVRESOLUTION {
411 	DVRESOLUTION_FULL = 1000,
412 	DVRESOLUTION_HALF = 1001,
413 	DVRESOLUTION_QUARTER = 1002,
414 	DVRESOLUTION_DC = 1003
415 } DVRESOLUTION;
416 typedef enum _DVENCODERFORMAT {
417 	DVENCODERFORMAT_DVSD = 2007,
418 	DVENCODERFORMAT_DVHD = 2008,
419 	DVENCODERFORMAT_DVSL = 2009
420 } DVENCODERFORMAT;
421 typedef enum _DVENCODERRESOLUTION {
422 	DVENCODERRESOLUTION_720x480 = 2012,
423 	DVENCODERRESOLUTION_360x240 = 2013,
424 	DVENCODERRESOLUTION_180x120 = 2014,
425 	DVENCODERRESOLUTION_88x60 = 2015
426 } DVENCODERRESOLUTION;
427 typedef enum _DVENCODERVIDEOFORMAT {
428 	DVENCODERVIDEOFORMAT_NTSC = 2000,
429 	DVENCODERVIDEOFORMAT_PAL = 2001
430 } DVENCODERVIDEOFORMAT;
431 typedef enum _FilterState {
432 	State_Stopped,
433 	State_Paused,
434 	State_Running
435 } FILTER_STATE;
436 typedef enum {
437 	INTERLEAVE_NONE,
438 	INTERLEAVE_CAPTURE,
439 	INTERLEAVE_FULL,
440 	INTERLEAVE_NONE_BUFFERED
441 } InterleavingMode;
442 typedef enum {
443 	PhysConn_Video_Tuner = 1,
444 	PhysConn_Video_Composite,
445 	PhysConn_Video_SVideo,
446 	PhysConn_Video_RGB,
447 	PhysConn_Video_YRYBY,
448 	PhysConn_Video_SerialDigital,
449 	PhysConn_Video_ParallelDigital,
450 	PhysConn_Video_SCSI,
451 	PhysConn_Video_AUX,
452 	PhysConn_Video_1394,
453 	PhysConn_Video_USB,
454 	PhysConn_Video_VideoDecoder,
455 	PhysConn_Video_VideoEncoder,
456 	PhysConn_Video_SCART,
457 	PhysConn_Video_Black,
458 	PhysConn_Audio_Tuner = 4096,
459 	PhysConn_Audio_Line,
460 	PhysConn_Audio_Mic,
461 	PhysConn_Audio_AESDigital,
462 	PhysConn_Audio_SPDIFDigital,
463 	PhysConn_Audio_SCSI,
464 	PhysConn_Audio_AUX,
465 	PhysConn_Audio_1394,
466 	PhysConn_Audio_USB,
467 	PhysConn_Audio_AudioDecoder
468 } PhysicalConnectorType;
469 typedef enum _PinDirection {
470 	PINDIR_INPUT,
471 	PINDIR_OUTPUT
472 } PIN_DIRECTION;
473 typedef enum {
474 	Famine,
475 	Flood
476 } QualityMessageType;
477 enum {
478 	REG_PINFLAG_B_ZERO = 0x1,
479 	REG_PINFLAG_B_RENDERER = 0x2,
480 	REG_PINFLAG_B_MANY = 0x4,
481 	REG_PINFLAG_B_OUTPUT = 0x8
482 } REG_PINFLAG;
483 typedef enum _REM_FILTER_FLAGS {
484 	REMFILTERF_LEAVECONNECTED = 0x00000001
485 } REM_FILTER_FLAGS;
486 typedef enum {
487 	TunerInputCable,
488 	TunerInputAntenna
489 } TunerInputType;
490 typedef enum tagTVAudioMode {
491 	AMTVAUDIO_MODE_MONO = 0x0001,
492 	AMTVAUDIO_MODE_STEREO = 0x0002,
493 	AMTVAUDIO_MODE_LANG_A = 0x0010,
494 	AMTVAUDIO_MODE_LANG_B = 0x0020,
495 	AMTVAUDIO_MODE_LANG_C = 0x0040,
496 	AMTVAUDIO_PRESET_STEREO = 0x0200,
497 	AMTVAUDIO_PRESET_LANG_A = 0x1000,
498 	AMTVAUDIO_PRESET_LANG_B = 0x2000,
499 	AMTVAUDIO_PRESET_LANG_C = 0x4000
500 } TVAudioMode;
501 typedef enum {
502 	UOP_FLAG_Play_Title_Or_AtTime = 0x00000001,
503 	UOP_FLAG_Play_Chapter = 0x00000002,
504 	UOP_FLAG_Play_Title = 0x00000004,
505 	UOP_FLAG_Stop = 0x00000008,
506 	UOP_FLAG_ReturnFromSubMenu = 0x00000010,
507 	UOP_FLAG_Play_Chapter_Or_AtTime = 0x00000020,
508 	UOP_FLAG_PlayPrev_Or_Replay_Chapter = 0x00000040,
509 	UOP_FLAG_PlayNext_Chapter = 0x00000080,
510 	UOP_FLAG_Play_Forwards = 0x00000100,
511 	UOP_FLAG_Play_Backwards = 0x00000200,
512 	UOP_FLAG_ShowMenu_Title = 0x00000400,
513 	UOP_FLAG_ShowMenu_Root = 0x00000800,
514 	UOP_FLAG_ShowMenu_SubPic = 0x00001000,
515 	UOP_FLAG_ShowMenu_Audio = 0x00002000,
516 	UOP_FLAG_ShowMenu_Angle = 0x00004000,
517 	UOP_FLAG_ShowMenu_Chapter = 0x00008000,
518 	UOP_FLAG_Resume = 0x00010000,
519 	UOP_FLAG_Select_Or_Activate_Button = 0x00020000,
520 	UOP_FLAG_Still_Off = 0x00040000,
521 	UOP_FLAG_Pause_On = 0x00080000,
522 	UOP_FLAG_Select_Audio_Stream = 0x00100000,
523 	UOP_FLAG_Select_SubPic_Stream = 0x00200000,
524 	UOP_FLAG_Select_Angle = 0x00400000,
525 	UOP_FLAG_Select_Karaoke_Audio_Presentation_Mode = 0x00800000,
526 	UOP_FLAG_Select_Video_Mode_Preference = 0x01000000
527 } VALID_UOP_FLAG;
528 typedef enum {
529 	VfwCaptureDialog_Source = 0x01,
530 	VfwCaptureDialog_Format = 0x02,
531 	VfwCaptureDialog_Display = 0x04
532 } VfwCaptureDialogs;
533 typedef enum {
534 	VfwCompressDialog_Config = 0x01,
535 	VfwCompressDialog_About = 0x02,
536 	VfwCompressDialog_QueryConfig = 0x04,
537 	VfwCompressDialog_QueryAbout = 0x08
538 } VfwCompressDialogs;
539 typedef enum tagVideoControlFlags {
540 	VideoControlFlag_FlipHorizontal = 0x0001,
541 	VideoControlFlag_FlipVertical = 0x0002,
542 	VideoControlFlag_ExternalTriggerEnable = 0x0004,
543 	VideoControlFlag_Trigger = 0x0008
544 } VideoControlFlags;
545 typedef enum {
546 	ConstantBitRate = 0,
547 	VariableBitRateAverage,
548 	VariableBitRatePeak
549 } VIDEOENCODER_BITRATE_MODE;
550 typedef enum tagVideoProcAmpFlags {
551 	VideoProcAmp_Flags_Auto = 0x0001,
552 	VideoProcAmp_Flags_Manual = 0x0002
553 } VideoProcAmpFlags;
554 typedef enum tagVideoProcAmpProperty {
555 	VideoProcAmp_Brightness,
556 	VideoProcAmp_Contrast,
557 	VideoProcAmp_Hue,
558 	VideoProcAmp_Saturation,
559 	VideoProcAmp_Sharpness,
560 	VideoProcAmp_Gamma,
561 	VideoProcAmp_ColorEnable,
562 	VideoProcAmp_WhiteBalance,
563 	VideoProcAmp_BacklightCompensation,
564 	VideoProcAmp_Gain
565 } VideoProcAmpProperty;
566 enum VMR_ASPECT_RATIO_MODE {
567 	VMR_ARMODE_NONE,
568 	VMR_ARMODE_LETTER_BOX
569 };
570 typedef enum {
571 	DeinterlacePref_NextBest = 0x01,
572 	DeinterlacePref_BOB = 0x02,
573 	DeinterlacePref_Weave = 0x04,
574 	DeinterlacePref_Mask = 0x07
575 } VMRDeinterlacePrefs;
576 typedef enum {
577 	DeinterlaceTech_Unknown = 0x0000,
578 	DeinterlaceTech_BOBLineReplicate = 0x0001,
579 	DeinterlaceTech_BOBVerticalStretch = 0x0002,
580 	DeinterlaceTech_MedianFiltering = 0x0004,
581 	DeinterlaceTech_EdgeFiltering = 0x0010,
582 	DeinterlaceTech_FieldAdaptive = 0x0020,
583 	DeinterlaceTech_PixelAdaptive = 0x0040,
584 	DeinterlaceTech_MotionVectorSteered = 0x0080
585 } VMRDeinterlaceTech;
586 typedef enum {
587 	MixerPref_NoDecimation = 0x00000001,
588 	MixerPref_DecimateOutput = 0x00000002,
589 	MixerPref_ARAdjustXorY = 0x00000004,
590 	MixerPref_DecimationReserved = 0x00000008,
591 	MixerPref_DecimateMask = 0x0000000F,
592 	MixerPref_BiLinearFiltering = 0x00000010,
593 	MixerPref_PointFiltering = 0x00000020,
594 	MixerPref_FilteringMask = 0x000000F0,
595 	MixerPref_RenderTargetRGB = 0x00000100,
596 	MixerPref_RenderTargetYUV = 0x00001000,
597 	MixerPref_RenderTargetYUV420 = 0x00000200,
598 	MixerPref_RenderTargetYUV422 = 0x00000400,
599 	MixerPref_RenderTargetYUV444 = 0x00000800,
600 	MixerPref_RenderTargetReserved = 0x0000E000,
601 	MixerPref_RenderTargetMask = 0x0000FF00,
602 	MixerPref_DynamicSwitchToBOB = 0x00010000,
603 	MixerPref_DynamicDecimateBy2 = 0x00020000,
604 	MixerPref_DynamicReserved = 0x000C0000,
605 	MixerPref_DynamicMask = 0x000F0000
606 } VMRMixerPrefs;
607 enum VMRMode {
608 	VMRMode_Windowed = 0x00000001,
609 	VMRMode_Windowless = 0x00000002,
610 	VMRMode_Renderless = 0x00000004,
611 	VMRMode_Mask = 0x00000007
612 };
613 typedef enum {
614 	VMRSample_SyncPoint = 0x00000001,
615 	VMRSample_Preroll = 0x00000002,
616 	VMRSample_Discontinuity = 0x00000004,
617 	VMRSample_TimeValid = 0x00000008
618 } VMRPresentationFlags;
619 typedef enum {
620 	RenderPrefs_ForceOffscreen = 0x00000001,
621 	RenderPrefs_ForceOverlays = 0x00000002,
622 	RenderPrefs_AllowOverlays = 0x00000000,
623 	RenderPrefs_AllowOffscreen = 0x00000000,
624 	RenderPrefs_DoNotRenderColorKeyAndBorder = 0x00000008,
625 	RenderPrefs_RestrictToInitialMonitor = 0x00000010,
626 	RenderPrefs_PreferAGPMemWhenMixing = 0x00000020,
627 	RenderPrefs_Mask = 0x0000003f
628 } VMRRenderPrefs;
629 typedef enum {
630 	AMAP_PIXELFORMAT_VALID = 0x01,
631 	AMAP_3D_TARGET = 0x02,
632 	AMAP_ALLOW_SYSMEM = 0x04,
633 	AMAP_FORCE_SYSMEM = 0x08,
634 	AMAP_DIRECTED_FLIP = 0x10,
635 	AMAP_DXVA_TARGET = 0x20
636 } VMRSurfaceAllocationFlags;
637 /*--- DirectShow Reference - DirectShow Structures */
638 typedef struct _AllocatorProperties {
639 	long cBuffers;
640 	long cbBuffer;
641 	long cbAlign;
642 	long cbPrefix;
643 } ALLOCATOR_PROPERTIES;
644 typedef struct {
645 	HRESULT hrVPEStatus;
646 	BOOL bDvdVolInvalid;
647 	BOOL bDvdVolUnknown;
648 	BOOL bNoLine21In;
649 	BOOL bNoLine21Out;
650 	int iNumStreams;
651 	int iNumStreamsFailed;
652 	DWORD dwFailedStreamsFlag;
653 } AM_DVD_RENDERSTATUS;
654 typedef struct _AMCOPPCommand {
655 	GUID macKDI;
656 	GUID guidCommandID;
657 	DWORD dwSequence;
658 	DWORD cbSizeData;
659 	BYTE CommandData[4056];
660 } AMCOPPCommand,*LPAMCOPPCommand;
661 typedef struct _AMCOPPSignature {
662 	BYTE Signature[256];
663 } AMCOPPSignature;
664 typedef struct _AMCOPPStatusInput {
665 	GUID rApp;
666 	GUID guidStatusRequestID;
667 	DWORD dwSequence;
668 	DWORD cbSizeData;
669 	BYTE StatusData[4056];
670 } AMCOPPStatusInput,*LPAMCOPPStatusInput;
671 typedef struct _AMCOPPStatusOutput {
672 	GUID macKDI;
673 	DWORD cbSizeData;
674 	BYTE COPPStatus[4076];
675 } AMCOPPStatusOutput,*LPAMCOPPStatusOutput;
676 typedef struct _AMMediaType {
677 	GUID majortype;
678 	GUID subtype;
679 	BOOL bFixedSizeSamples;
680 	BOOL bTemporalCompression;
681 	ULONG lSampleSize;
682 	GUID formattype;
683 	IUnknown *pUnk;
684 	ULONG cbFormat;
685 	BYTE *pbFormat;
686 } AM_MEDIA_TYPE;
687 typedef struct tagAM_SAMPLE2_PROPERTIES {
688 	DWORD cbData;
689 	DWORD dwTypeSpecificFlags;
690 	DWORD dwSampleFlags;
691 	LONG lActual;
692 	REFERENCE_TIME tStart;
693 	REFERENCE_TIME tStop;
694 	DWORD dwStreamId;
695 	AM_MEDIA_TYPE *pMediaType;
696 	BYTE *pbBuffer;
697 	LONG cbBuffer;
698 } AM_SAMPLE2_PROPERTIES;
699 typedef struct {
700 	REFERENCE_TIME tStart;
701 	REFERENCE_TIME tStop;
702 	DWORD dwStartCookie;
703 	DWORD dwStopCookie;
704 	DWORD dwFlags;
705 } AM_STREAM_INFO;
706 typedef struct {
707 	const CLSID *clsMajorType;
708 	const CLSID *clsMinorType;
709 } REGPINTYPES;
710 typedef REGPINTYPES AMOVIESETUP_MEDIATYPE,*PAMOVIESETUP_MEDIATYPE,*LPAMOVIESETUP_MEDIATYPE;
711 typedef struct {
712 	LPWSTR strName;
713 	BOOL bRendered;
714 	BOOL bOutput;
715 	BOOL bZero;
716 	BOOL bMany;
717 	const CLSID *clsConnectsToFilter;
718 	const WCHAR *strConnectsToPin;
719 	UINT nMediaTypes;
720 	const REGPINTYPES *lpMediaType;
721 } REGFILTERPINS;
722 typedef REGFILTERPINS AMOVIESETUP_PIN,*PAMOVIESETUP_PIN,*LPAMOVIESETUP_PIN;
723 typedef struct _AMOVIESETUP_FILTER {
724 	const CLSID *clsID;
725 	const WCHAR *strName;
726 	DWORD dwMerit;
727 	UINT nPins;
728 	const AMOVIESETUP_PIN *lpPin;
729 } AMOVIESETUP_FILTER,*PAMOVIESETUP_FILTER,*LPAMOVIESETUP_FILTER;
730 typedef struct _AUDIO_STREAM_CONFIG_CAPS {
731 	GUID guid;
732 	ULONG MinimumChannels;
733 	ULONG MaximumChannels;
734 	ULONG ChannelsGranularity;
735 	ULONG MinimumBitsPerSample;
736 	ULONG MaximumBitsPerSample;
737 	ULONG BitsPerSampleGranularity;
738 	ULONG MinimumSampleFrequency;
739 	ULONG MaximumSampleFrequency;
740 	ULONG SampleFrequencyGranularity;
741 } AUDIO_STREAM_CONFIG_CAPS;
742 struct CodecAPIEventData {
743 	GUID guid;
744 	DWORD dataLength;
745 	DWORD reserved[3];
746 };
747 typedef struct tagCOLORKEY {
748 	DWORD KeyType;
749 	DWORD PaletteIndex;
750 	COLORREF LowColorValue;
751 	COLORREF HighColorValue;
752 } COLORKEY;
753 #define CK_NOCOLORKEY 0x00000000
754 #define CK_INDEX 0x00000001
755 #define CK_RGB 0x00000002
756 typedef struct {
757 	DWORD dw1;
758 	DWORD dw2;
759 } DDCOLORKEY;
760 typedef struct tagDVD_AudioAttributes {
761 	DVD_AUDIO_APPMODE AppMode;
762 	DVD_AUDIO_FORMAT AudioFormat;
763 	LCID Language;
764 	DVD_AUDIO_LANG_EXT LanguageExtension;
765 	BOOL fHasMultichannelInfo;
766 	DWORD dwFrequency;
767 	BYTE bQuantization;
768 	BYTE bNumberOfChannels;
769 	DWORD dwReserved[2];
770 } DVD_AudioAttributes;
771 typedef struct tagDVD_DECODER_CAPS {
772 	DWORD dwSize;
773 	DWORD dwAudioCaps;
774 	double dFwdMaxRateVideo;
775 	double dFwdMaxRateAudio;
776 	double dFwdMaxRateSP;
777 	double dBwdMaxRateVideo;
778 	double dBwdMaxRateAudio;
779 	double dBwdMaxRateSP;
780 	DWORD dwRes1;
781 	DWORD dwRes2;
782 	DWORD dwRes3;
783 	DWORD dwRes4;
784 } DVD_DECODER_CAPS;
785 #define DVD_AUDIO_CAPS_AC3 0x00000001
786 #define DVD_AUDIO_CAPS_MPEG2 0x00000002
787 #define DVD_AUDIO_CAPS_LPCM 0x00000004
788 #define DVD_AUDIO_CAPS_DTS 0x00000008
789 #define DVD_AUDIO_CAPS_SDDS 0x00000010
790 typedef struct tagDVD_HMSF_TIMECODE {
791 	BYTE bHours;
792 	BYTE bMinutes;
793 	BYTE bSeconds;
794 	BYTE bFrames;
795 } DVD_HMSF_TIMECODE;
796 typedef struct tagDVD_KaraokeAttributes {
797 	BYTE bVersion;
798 	BOOL fMasterOfCeremoniesInGuideVocal1;
799 	BOOL fDuet;
800 	DVD_KARAOKE_ASSIGNMENT ChannelAssignment;
801 	WORD wChannelContents[8];
802 } DVD_KaraokeAttributes;
803 typedef struct tagDVD_MUA_Coeff {
804 	double log2_alpha;
805 	double log2_beta;
806 } DVD_MUA_Coeff;
807 typedef struct tagDVD_MUA_MixingInfo {
808 	BOOL fMixTo0;
809 	BOOL fMixTo1;
810 	BOOL fMix0InPhase;
811 	BOOL fMix1InPhase;
812 	DWORD dwSpeakerPosition;
813 } DVD_MUA_MixingInfo;
814 #define KSAUDIO_SPEAKER_LEFT 0x00000001
815 #define KSAUDIO_SPEAKER_RIGHT 0x00000002
816 #define KSAUDIO_SPEAKER_CENTER 0x00000004
817 #define KSAUDIO_SPEAKER_SURROUND_LEFT 0x00000008
818 #define KSAUDIO_SPEAKER_SURROUND_RIGHT 0x00000010
819 #define KSAUDIO_SPEAKER_SUBWOOFER 0x00000020
820 #define KSAUDIO_SPEAKER_LEFT_OF_CENTER 0x00000040
821 #define KSAUDIO_SPEAKER_RIGHT_OF_CENTER 0x00000080
822 #define KSAUDIO_SPEAKER_SURROUND_MONO 0x00000100
823 #define KSAUDIO_SPEAKER_SIDE_LEFT 0x00000200
824 #define KSAUDIO_SPEAKER_SIDE_RIGHT 0x00000400
825 #define KSAUDIO_SPEAKER_TOP 0x00000800
826 typedef struct tagDVD_MultichannelAudioAttributes {
827 	DVD_MUA_MixingInfo Info[8];
828 	DVD_MUA_Coeff Coeff[8];
829 } DVD_MultichannelAudioAttributes;
830 typedef struct tagDVD_PLAYBACK_LOCATION {
831 	ULONG TitleNum;
832 	ULONG ChapterNum;
833 	ULONG TimeCode;
834 } DVD_PLAYBACK_LOCATION;
835 typedef struct tagDVD_PLAYBACK_LOCATION2 {
836 	ULONG TitleNum;
837 	ULONG ChapterNum;
838 	DVD_HMSF_TIMECODE TimeCode;
839 	ULONG TimeCodeFlags;
840 } DVD_PLAYBACK_LOCATION2;
841 typedef struct tagDVD_SubpictureAttributes {
842 	DVD_SUBPICTURE_TYPE Type;
843 	DVD_SUBPICTURE_CODING CodingMode;
844 	LCID Language;
845 	DVD_SUBPICTURE_LANG_EXT LanguageExtension;
846 } DVD_SubpictureAttributes;
847 typedef struct tagDVD_TIMECODE {
848 	ULONG Hours1:4;
849 	ULONG Hours10:4;
850 	ULONG Minutes1:4;
851 	ULONG Minutes10:4;
852 	ULONG Seconds1:4;
853 	ULONG Seconds10:4;
854 	ULONG Frames1:4;
855 	ULONG Frames10:2;
856 	ULONG FrameRateCode:2;
857 } DVD_TIMECODE;
858 typedef struct tagDVD_VideoAttributes {
859 	BOOL fPanscanPermitted;
860 	BOOL fLetterboxPermitted;
861 	ULONG ulAspectX;
862 	ULONG ulAspectY;
863 	ULONG ulFrameRate;
864 	ULONG ulFrameHeight;
865 	DVD_VIDEO_COMPRESSION Compression;
866 	BOOL fLine21Field1InGOP;
867 	BOOL fLine21Field2InGOP;
868 	ULONG ulSourceResolutionX;
869 	ULONG ulSourceResolutionY;
870 	BOOL fIsSourceLetterboxed;
871 	BOOL fIsFilmMode;
872 } DVD_VideoAttributes;
873 struct tagDVD_MenuAttributes {
874 	BOOL fCompatibleRegion[8];
875 	DVD_VideoAttributes VideoAttributes;
876 	BOOL fAudioPresent;
877 	DVD_AudioAttributes AudioAttributes;
878 	BOOL fSubpicturePresent;
879 	DVD_SubpictureAttributes SubpictureAttributes;
880 } DVD_MenuAttributes;
881 typedef struct tagDVD_TitleMainAttributes {
882 	DVD_TITLE_APPMODE AppMode;
883 	DVD_VideoAttributes VideoAttributes;
884 	ULONG ulNumberOfAudioStreams;
885 	DVD_AudioAttributes AudioAttributes[8];
886 	DVD_MultichannelAudioAttributes MultichannelAudioAttributes[8];
887 	ULONG ulNumberOfSubpictureStreams;
888 	DVD_SubpictureAttributes SubpictureAttributes[32];
889 } DVD_TitleAttributes;
890 typedef struct tag_DVINFO {
891 	DWORD dwDVAAuxSrc;
892 	DWORD dwDVAAuxCtl;
893 	DWORD dwDVAAuxSrc1;
894 	DWORD dwDVAAuxCtl1;
895 	DWORD dwDVVAuxSrc;
896 	DWORD dwDVVAuxCtl;
897 	DWORD dwDVReserved[2];
898 } DVINFO,*PDVINFO;
899 /***************
900 #define MAX_FILTER_NAME 128
901 typedef struct _FilterInfo {
902 	WCHAR achName[MAX_FILTER_NAME];
903 	IFilterGraph *pGraph;
904 } FILTER_INFO;
905 ***************/
906 typedef struct _NORMALIZEDRECT {
907 	float left;
908 	float top;
909 	float right;
910 	float bottom;
911 } NORMALIZEDRECT,*PNORMALIZEDRECT;
912 #define MAX_PIN_NAME 128
913 typedef struct _PinInfo {
914 	IBaseFilter *pFilter;
915 	PIN_DIRECTION dir;
916 	WCHAR achName[MAX_PIN_NAME];
917 } PIN_INFO;
918 typedef struct{
919 	QualityMessageType Type;
920 	long Proportion;
921 	REFERENCE_TIME Late;
922 	REFERENCE_TIME TimeStamp;
923 } Quality;
924 typedef struct {
925 	CLSID clsMedium;
926 	DWORD dw1;
927 	DWORD dw2;
928 } REGPINMEDIUM;
929 typedef struct {
930 	DWORD dwFlags;
931 	UINT cInstances;
932 	UINT nMediaTypes;
933 	const REGPINTYPES *lpMediaType;
934 	UINT nMediums;
935 	const REGPINMEDIUM *lpMedium;
936 	const CLSID *clsPinCategory;
937 } REGFILTERPINS2;
938 typedef struct {
939 	DWORD dwVersion;
940 	DWORD dwMerit;
941 	union {
942 		struct {
943 			ULONG cPins;
944 			const REGFILTERPINS *rgPins;
945 		};
946 		struct {
947 			ULONG cPins2;
948 			const REGFILTERPINS2 *rgPins2;
949 		};
950 	};
951 } REGFILTER2;
952 typedef struct {
953 	ULONG stream_id;
954 	DWORD dwMediaSampleContent;
955 	ULONG ulSubstreamFilterValue;
956 	int iDataOffset;
957 } STREAM_ID_MAP;
958 #define MPEG2_PROGRAM_STREAM_MAP 0x00000000
959 #define MPEG2_PROGRAM_ELEMENTARY_STREAM 0x00000001
960 #define MPEG2_PROGRAM_DIRECTORY_PES_PACKET 0x00000002
961 #define MPEG2_PROGRAM_PACK_HEADER 0x00000003
962 #define MPEG2_PROGRAM_PES_STREAM 0x00000004
963 #define MPEG2_PROGRAM_SYSTEM_HEADER 0x00000005
964 #define SUBSTREAM_FILTER_VAL_NONE 0x10000000
965 typedef struct tagTIMECODE {
966 	WORD wFrameRate;
967 	WORD wFrameFract;
968 	DWORD dwFrames;
969 } TIMECODE;
970 #define ED_FORMAT_SMPTE_30 0x00001196
971 #define ED_FORMAT_SMPTE_30DROP 0x00001197
972 #define ED_FORMAT_SMPTE_25 0x00001198
973 #define ED_FORMAT_SMPTE_24 0x00001199
974 typedef struct tagTIMECODE_SAMPLE {
975 	LONGLONG qwTick;
976 	TIMECODE timecode;
977 	DWORD dwUser;
978 	DWORD dwFlags;
979 } TIMECODE_SAMPLE;
980 /*#define AM_TIMECODE_FLAG_FCM */
981 /*#define AM_TIMECODE_FLAG_CF */
982 /*#define AM_TIMECODE_FLAG_FIELD */
983 /*#define AM_TIMECODE_FLAG_DF */
984 /*#define AM_TIMECODE_COLORFRAME */
985 /*#define AM_TIMECODE_COLORSEQUENCE */
986 /*#define AM_TIMECODE_FILMSEQUENCE_TYPE */
987 typedef struct _VIDEO_STREAM_CONFIG_CAPS {
988 	GUID guid;
989 	ULONG VideoStandard;
990 	SIZE InputSize;
991 	SIZE MinCroppingSize;
992 	SIZE MaxCroppingSize;
993 	int CropGranularityX;
994 	int CropGranularityY;
995 	int CropAlignX;
996 	int CropAlignY;
997 	SIZE MinOutputSize;
998 	SIZE MaxOutputSize;
999 	int OutputGranularityX;
1000 	int OutputGranularityY;
1001 	int StretchTapsX;
1002 	int StretchTapsY;
1003 	int ShrinkTapsX;
1004 	int ShrinkTapsY;
1005 	LONGLONG MinFrameInterval;
1006 	LONGLONG MaxFrameInterval;
1007 	LONG MinBitsPerSecond;
1008 	LONG MaxBitsPerSecond;
1009 } VIDEO_STREAM_CONFIG_CAPS;
1010 typedef struct tagVMRALLOCATIONINFO {
1011 	DWORD dwFlags;
1012 	LPBITMAPINFOHEADER lpHdr;
1013 	LPDDPIXELFORMAT lpPixFmt;
1014 	SIZE szAspectRatio;
1015 	DWORD dwMinBuffers;
1016 	DWORD dwMaxBuffers;
1017 	DWORD dwInterlaceFlags;
1018 	SIZE szNativeSize;
1019 } VMRALLOCATIONINFO;
1020 /**********
1021 typedef struct _VMRALPHABITMAP {
1022 	DWORD dwFlags;
1023 	HDC hdc;
1024 	LPDIRECTDRAWSURFACE7 pDDS;
1025 	RECT rSrc;
1026 	NORMALIZEDRECT rDest;
1027 	FLOAT fAlpha;
1028 	COLORREF clrSrcKey;
1029 } VMRALPHABITMAP,*PVMRALPHABITMAP;
1030 **********/
1031 #define VMRBITMAP_DISABLE 0x00000001
1032 #define VMRBITMAP_HDC 0x00000002
1033 #define VMRBITMAP_ENTIREDDS 0x00000004
1034 #define VMRBITMAP_SRCCOLORKEY 0x00000008
1035 #define VMRBITMAP_SRCRECT 0x00000010
1036 typedef struct _VMRDeinterlaceCaps {
1037 	DWORD dwSize;
1038 	DWORD dwNumPreviousOutputFrames;
1039 	DWORD dwNumForwardRefSamples;
1040 	DWORD dwNumBackwardRefSamples;
1041 	VMRDeinterlaceTech DeinterlaceTechnology;
1042 } VMRDeinterlaceCaps;
1043 typedef struct _VMRFrequency {
1044 	DWORD dwNumerator;
1045 	DWORD dwDenominator;
1046 } VMRFrequency;
1047 typedef struct tagVMRGUID {
1048 	GUID *pGUID;
1049 	GUID GUID;
1050 } VMRGUID;
1051 typedef struct tagVMRMONITORINFO {
1052 	VMRGUID guid;
1053 	RECT rcMonitor;
1054 	HMONITOR hMon;
1055 	DWORD dwFlags;
1056 	wchar_t szDevice[32];
1057 	wchar_t szDescription[256];
1058 } VMRMONITORINFO;
1059 /**********
1060 typedef struct tagVMRPRESENTATIONINFO {
1061 	DWORD dwFlags;
1062 	LPDIRECTDRAWSURFACE7 lpSurf;
1063 	REFERENCE_TIME rtStart;
1064 	REFERENCE_TIME rtEnd;
1065 	SIZE szAspectRatio;
1066 	RECT rcSrc;
1067 	RECT rcDst;
1068 	DWORD dwTypeSpecificFlags;
1069 	DWORD dwInterlaceFlags;
1070 } VMRPRESENTATIONINFO;
1071 **********/
1072 typedef struct _VMRVideoDesc {
1073 	DWORD dwSize;
1074 	DWORD dwSampleWidth;
1075 	DWORD dwSampleHeight;
1076 	BOOL SingleFieldPerSample;
1077 	DWORD dwFourCC;
1078 	VMRFrequency InputSampleFreq;
1079 	VMRFrequency OutputFrameFreq;
1080 } VMRVideoDesc;
1081 /**********
1082 typedef struct _VMRVIDEOSTREAMINFO {
1083 	LPDIRECTDRAWSURFACE7 pddsVideoSurface;
1084 	DWORD dwWidth;
1085 	DWORD dwHeight;
1086 	DWORD dwStrmID;
1087 	FLOAT fAlpha;
1088 	DDCOLORKEY ddClrKey;
1089 	NORMALIZEDRECT rNormal;
1090 } VMRVIDEOSTREAMINFO;
1091 **********/
1092 /*--- DirectShow Reference - Interfaces */
1093 #define INTERFACE IAMAnalogVideoDecoder
DECLARE_INTERFACE_(IAMAnalogVideoDecoder,IUnknown)1094 DECLARE_INTERFACE_(IAMAnalogVideoDecoder, IUnknown)
1095 {
1096 	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
1097 	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1098 	STDMETHOD_(ULONG,Release)(THIS) PURE;
1099 	STDMETHOD_(HRESULT,get_AvailableTVFormats)(THIS_ long*) PURE;
1100 	STDMETHOD_(HRESULT,get_HorizontalLocked)(THIS_ long*) PURE;
1101 	STDMETHOD_(HRESULT,get_NumberOfLines)(THIS_ long*) PURE;
1102 	STDMETHOD_(HRESULT,get_OutputEnable)(THIS_ long*) PURE;
1103 	STDMETHOD_(HRESULT,get_TVFormat)(THIS_ long*) PURE;
1104 	STDMETHOD_(HRESULT,get_VCRHorizontalLocking)(THIS_ long*) PURE;
1105 	STDMETHOD_(HRESULT,put_OutputEnable)(THIS_ long) PURE;
1106 	STDMETHOD_(HRESULT,put_TVFormat)(THIS_ long) PURE;
1107 	STDMETHOD_(HRESULT,put_VCRHorizontalLocking)(THIS_ long) PURE;
1108 };
1109 #undef INTERFACE
1110 #define INTERFACE IAMAudioInputMixer
DECLARE_INTERFACE_(IAMAudioInputMixer,IUnknown)1111 DECLARE_INTERFACE_(IAMAudioInputMixer, IUnknown)
1112 {
1113 	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
1114 	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1115 	STDMETHOD_(ULONG,Release)(THIS) PURE;
1116 	STDMETHOD_(HRESULT,get_Bass)(THIS_ double*) PURE;
1117 	STDMETHOD_(HRESULT,get_BassRange)(THIS_ double*) PURE;
1118 	STDMETHOD_(HRESULT,get_Enable)(THIS_ BOOL*) PURE;
1119 	STDMETHOD_(HRESULT,get_Loudness)(THIS_ BOOL*) PURE;
1120 	STDMETHOD_(HRESULT,get_MixLevel)(THIS_ double*) PURE;
1121 	STDMETHOD_(HRESULT,get_Mono)(THIS_ BOOL*) PURE;
1122 	STDMETHOD_(HRESULT,get_Pan)(THIS_ double*) PURE;
1123 	STDMETHOD_(HRESULT,get_Treble)(THIS_ double*) PURE;
1124 	STDMETHOD_(HRESULT,get_TrebleRange)(THIS_ double*) PURE;
1125 	STDMETHOD_(HRESULT,put_Bass)(THIS_ double) PURE;
1126 	STDMETHOD_(HRESULT,put_Enable)(THIS_ BOOL) PURE;
1127 	STDMETHOD_(HRESULT,put_Loudness)(THIS_ BOOL) PURE;
1128 	STDMETHOD_(HRESULT,put_MixLevel)(THIS_ double) PURE;
1129 	STDMETHOD_(HRESULT,put_Mono)(THIS_ BOOL) PURE;
1130 	STDMETHOD_(HRESULT,put_Pan)(THIS_ double) PURE;
1131 	STDMETHOD_(HRESULT,put_Treble)(THIS_ double) PURE;
1132 };
1133 #undef INTERFACE
1134 #define INTERFACE IAMAudioRendererStats
DECLARE_INTERFACE_(IAMAudioRendererStats,IUnknown)1135 DECLARE_INTERFACE_(IAMAudioRendererStats, IUnknown)
1136 {
1137 	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
1138 	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1139 	STDMETHOD_(ULONG,Release)(THIS) PURE;
1140 	STDMETHOD_(HRESULT,GetStatParam)(THIS_ DWORD,DWORD*,DWORD*) PURE;
1141 };
1142 #undef INTERFACE
1143 #define INTERFACE IAMBufferNegotiation
DECLARE_INTERFACE_(IAMBufferNegotiation,IUnknown)1144 DECLARE_INTERFACE_(IAMBufferNegotiation, IUnknown)
1145 {
1146 	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
1147 	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1148 	STDMETHOD_(ULONG,Release)(THIS) PURE;
1149 	STDMETHOD_(HRESULT,GetAllocatorProperties)(THIS_ ALLOCATOR_PROPERTIES*) PURE;
1150 	STDMETHOD_(HRESULT,SuggestAllocatorProperties)(THIS_ const ALLOCATOR_PROPERTIES*) PURE;
1151 };
1152 #undef INTERFACE
1153 #define INTERFACE IAMCameraControl
DECLARE_INTERFACE_(IAMCameraControl,IUnknown)1154 DECLARE_INTERFACE_(IAMCameraControl, IUnknown)
1155 {
1156 	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
1157 	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1158 	STDMETHOD_(ULONG,Release)(THIS) PURE;
1159 	STDMETHOD_(HRESULT,Get)(THIS_ long,long*,long*) PURE;
1160 	STDMETHOD_(HRESULT,GetRange)(THIS_ long,long*,long*,long*,long*,long*) PURE;
1161 	STDMETHOD_(HRESULT,Set)(THIS_ long,long,long) PURE;
1162 };
1163 #undef INTERFACE
1164 
1165 #define INTERFACE IAMCertifiedOutputProtection
DECLARE_INTERFACE_(IAMCertifiedOutputProtection,IUnknown)1166 DECLARE_INTERFACE_(IAMCertifiedOutputProtection, IUnknown)
1167 {
1168 	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
1169 	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
1170 	STDMETHOD_(ULONG,Release)(THIS) PURE;
1171 	STDMETHOD_(HRESULT,KeyExchange)(THIS_ GUID*,BYTE**,DWORD*) PURE;
1172 	STDMETHOD_(HRESULT,ProtectionCommand)(THIS_ const AMCOPPCommand*) PURE;
1173 	STDMETHOD_(HRESULT,ProtectionStatus)(THIS_ const AMCOPPStatusInput*,AMCOPPStatusOutput*) PURE;
1174 	STDMETHOD_(HRESULT,SessionSequenceStart)(THIS_ const AMCOPPSignature*) PURE;
1175 };
1176 #undef INTERFACE
1177 
1178 #ifdef __cplusplus
1179 }
1180 #endif
1181 
1182 #endif
1183