/[cvs]/api/include/ksmedia.h
ViewVC logotype

Annotation of /api/include/ksmedia.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (hide annotations) (vendor branch)
Sun Jul 1 20:47:59 2001 UTC (23 years, 4 months ago) by bearsoft
Branch: lazy, MAIN
CVS Tags: start, HEAD
Changes since 1.1: +0 -0 lines
File MIME type: text/plain
First import

1 bearsoft 1.1 /*++
2    
3     Copyright (C) Microsoft Corporation, 1996 - 2000
4    
5     Module Name:
6    
7     ksmedia.h
8    
9     Abstract:
10    
11     WDM-CSA Multimedia Definitions.
12    
13     --*/
14    
15     #if !defined(_KS_)
16     #error KS.H must be included before KSMEDIA.H
17     #endif // !defined(_KS_)
18    
19     #if !defined(_KSMEDIA_)
20     #define _KSMEDIA_
21    
22     typedef struct {
23     KSPROPERTY Property;
24     KSMULTIPLE_ITEM MultipleItem;
25     } KSMULTIPLE_DATA_PROP, *PKSMULTIPLE_DATA_PROP;
26    
27     #define STATIC_KSMEDIUMSETID_MidiBus \
28     0x05908040L, 0x3246, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
29     DEFINE_GUIDSTRUCT("05908040-3246-11D0-A5D6-28DB04C10000", KSMEDIUMSETID_MidiBus);
30     #define KSMEDIUMSETID_MidiBus DEFINE_GUIDNAMED(KSMEDIUMSETID_MidiBus)
31    
32     #define STATIC_KSMEDIUMSETID_VPBus \
33     0xA18C15ECL, 0xCE43, 0x11D0, 0xAB, 0xE7, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
34     DEFINE_GUIDSTRUCT("A18C15EC-CE43-11D0-ABE7-00A0C9223196", KSMEDIUMSETID_VPBus);
35     #define KSMEDIUMSETID_VPBus DEFINE_GUIDNAMED(KSMEDIUMSETID_VPBus)
36    
37     #define STATIC_KSINTERFACESETID_Media \
38     0x3A13EB40L, 0x30A7, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
39     DEFINE_GUIDSTRUCT("3A13EB40-30A7-11D0-A5D6-28DB04C10000", KSINTERFACESETID_Media);
40     #define KSINTERFACESETID_Media DEFINE_GUIDNAMED(KSINTERFACESETID_Media)
41    
42     typedef enum {
43     KSINTERFACE_MEDIA_MUSIC,
44     KSINTERFACE_MEDIA_WAVE_BUFFERED,
45     KSINTERFACE_MEDIA_WAVE_QUEUED
46     } KSINTERFACE_MEDIA;
47    
48    
49     // USB Terminals
50     #define INIT_USB_TERMINAL(guid, id)\
51     {\
52     (guid)->Data1 = 0xDFF219E0 + (USHORT)(id);\
53     (guid)->Data2 = 0xF70F;\
54     (guid)->Data3 = 0x11D0;\
55     (guid)->Data4[0] = 0xb9;\
56     (guid)->Data4[1] = 0x17;\
57     (guid)->Data4[2] = 0x00;\
58     (guid)->Data4[3] = 0xa0;\
59     (guid)->Data4[4] = 0xc9;\
60     (guid)->Data4[5] = 0x22;\
61     (guid)->Data4[6] = 0x31;\
62     (guid)->Data4[7] = 0x96;\
63     }
64     #define EXTRACT_USB_TERMINAL(guid)\
65     (USHORT)((guid)->Data1 - 0xDFF219E0)
66     #define DEFINE_USB_TERMINAL_GUID(id)\
67     0xDFF219E0+(USHORT)(id), 0xF70F, 0x11D0, 0xB9, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
68    
69     #define STATIC_KSNODETYPE_MICROPHONE\
70     DEFINE_USB_TERMINAL_GUID(0x0201)
71     DEFINE_GUIDSTRUCT("DFF21BE1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_MICROPHONE);
72     #define KSNODETYPE_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_MICROPHONE)
73    
74     #define STATIC_KSNODETYPE_DESKTOP_MICROPHONE\
75     DEFINE_USB_TERMINAL_GUID(0x0202)
76     DEFINE_GUIDSTRUCT("DFF21BE2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DESKTOP_MICROPHONE);
77     #define KSNODETYPE_DESKTOP_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_DESKTOP_MICROPHONE)
78    
79     #define STATIC_KSNODETYPE_PERSONAL_MICROPHONE\
80     DEFINE_USB_TERMINAL_GUID(0x0203)
81     DEFINE_GUIDSTRUCT("DFF21BE3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_PERSONAL_MICROPHONE);
82     #define KSNODETYPE_PERSONAL_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_PERSONAL_MICROPHONE)
83    
84     #define STATIC_KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE\
85     DEFINE_USB_TERMINAL_GUID(0x0204)
86     DEFINE_GUIDSTRUCT("DFF21BE4-F70F-11D0-B917-00A0C9223196", KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE);
87     #define KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE DEFINE_GUIDNAMED(KSNODETYPE_OMNI_DIRECTIONAL_MICROPHONE)
88    
89     #define STATIC_KSNODETYPE_MICROPHONE_ARRAY\
90     DEFINE_USB_TERMINAL_GUID(0x0205)
91     DEFINE_GUIDSTRUCT("DFF21BE5-F70F-11D0-B917-00A0C9223196", KSNODETYPE_MICROPHONE_ARRAY);
92     #define KSNODETYPE_MICROPHONE_ARRAY DEFINE_GUIDNAMED(KSNODETYPE_MICROPHONE_ARRAY)
93    
94     #define STATIC_KSNODETYPE_PROCESSING_MICROPHONE_ARRAY\
95     DEFINE_USB_TERMINAL_GUID(0x0206)
96     DEFINE_GUIDSTRUCT("DFF21BE6-F70F-11D0-B917-00A0C9223196", KSNODETYPE_PROCESSING_MICROPHONE_ARRAY);
97     #define KSNODETYPE_PROCESSING_MICROPHONE_ARRAY DEFINE_GUIDNAMED(KSNODETYPE_PROCESSING_MICROPHONE_ARRAY)
98    
99     #define STATIC_KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR \
100     0x830a44f2, 0xa32d, 0x476b, 0xbe, 0x97, 0x42, 0x84, 0x56, 0x73, 0xb3, 0x5a
101     DEFINE_GUIDSTRUCT("830a44f2-a32d-476b-be97-42845673b35a", KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR);
102     #define KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR DEFINE_GUIDNAMED(KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR)
103    
104     #define STATIC_KSNODETYPE_SPEAKER\
105     DEFINE_USB_TERMINAL_GUID(0x0301)
106     DEFINE_GUIDSTRUCT("DFF21CE1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_SPEAKER);
107     #define KSNODETYPE_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_SPEAKER)
108    
109     #define STATIC_KSNODETYPE_HEADPHONES\
110     DEFINE_USB_TERMINAL_GUID(0x0302)
111     DEFINE_GUIDSTRUCT("DFF21CE2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_HEADPHONES);
112     #define KSNODETYPE_HEADPHONES DEFINE_GUIDNAMED(KSNODETYPE_HEADPHONES)
113    
114     #define STATIC_KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO\
115     DEFINE_USB_TERMINAL_GUID(0x0303)
116     DEFINE_GUIDSTRUCT("DFF21CE3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO);
117     #define KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_HEAD_MOUNTED_DISPLAY_AUDIO)
118    
119     #define STATIC_KSNODETYPE_DESKTOP_SPEAKER\
120     DEFINE_USB_TERMINAL_GUID(0x0304)
121     DEFINE_GUIDSTRUCT("DFF21CE4-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DESKTOP_SPEAKER);
122     #define KSNODETYPE_DESKTOP_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_DESKTOP_SPEAKER)
123    
124     #define STATIC_KSNODETYPE_ROOM_SPEAKER\
125     DEFINE_USB_TERMINAL_GUID(0x0305)
126     DEFINE_GUIDSTRUCT("DFF21CE5-F70F-11D0-B917-00A0C9223196", KSNODETYPE_ROOM_SPEAKER);
127     #define KSNODETYPE_ROOM_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_ROOM_SPEAKER)
128    
129     #define STATIC_KSNODETYPE_COMMUNICATION_SPEAKER\
130     DEFINE_USB_TERMINAL_GUID(0x0306)
131     DEFINE_GUIDSTRUCT("DFF21CE6-F70F-11D0-B917-00A0C9223196", KSNODETYPE_COMMUNICATION_SPEAKER);
132     #define KSNODETYPE_COMMUNICATION_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_COMMUNICATION_SPEAKER)
133    
134     #define STATIC_KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER\
135     DEFINE_USB_TERMINAL_GUID(0x0307)
136     DEFINE_GUIDSTRUCT("DFF21CE7-F70F-11D0-B917-00A0C9223196", KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER);
137     #define KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER DEFINE_GUIDNAMED(KSNODETYPE_LOW_FREQUENCY_EFFECTS_SPEAKER)
138    
139     #define STATIC_KSNODETYPE_HANDSET\
140     DEFINE_USB_TERMINAL_GUID(0x0401)
141     DEFINE_GUIDSTRUCT("DFF21DE1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_HANDSET);
142     #define KSNODETYPE_HANDSET DEFINE_GUIDNAMED(KSNODETYPE_HANDSET)
143    
144     #define STATIC_KSNODETYPE_HEADSET\
145     DEFINE_USB_TERMINAL_GUID(0x0402)
146     DEFINE_GUIDSTRUCT("DFF21DE2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_HEADSET);
147     #define KSNODETYPE_HEADSET DEFINE_GUIDNAMED(KSNODETYPE_HEADSET)
148    
149     #define STATIC_KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION\
150     DEFINE_USB_TERMINAL_GUID(0x0403)
151     DEFINE_GUIDSTRUCT("DFF21DE3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION);
152     #define KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION DEFINE_GUIDNAMED(KSNODETYPE_SPEAKERPHONE_NO_ECHO_REDUCTION)
153    
154     #define STATIC_KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE\
155     DEFINE_USB_TERMINAL_GUID(0x0404)
156     DEFINE_GUIDSTRUCT("DFF21DE4-F70F-11D0-B917-00A0C9223196", KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE);
157     #define KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE DEFINE_GUIDNAMED(KSNODETYPE_ECHO_SUPPRESSING_SPEAKERPHONE)
158    
159     #define STATIC_KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE\
160     DEFINE_USB_TERMINAL_GUID(0x0405)
161     DEFINE_GUIDSTRUCT("DFF21DE5-F70F-11D0-B917-00A0C9223196", KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE);
162     #define KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE DEFINE_GUIDNAMED(KSNODETYPE_ECHO_CANCELING_SPEAKERPHONE)
163    
164     #define STATIC_KSNODETYPE_PHONE_LINE\
165     DEFINE_USB_TERMINAL_GUID(0x0501)
166     DEFINE_GUIDSTRUCT("DFF21EE1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_PHONE_LINE);
167     #define KSNODETYPE_PHONE_LINE DEFINE_GUIDNAMED(KSNODETYPE_PHONE_LINE)
168    
169     #define STATIC_KSNODETYPE_TELEPHONE\
170     DEFINE_USB_TERMINAL_GUID(0x0502)
171     DEFINE_GUIDSTRUCT("DFF21EE2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_TELEPHONE);
172     #define KSNODETYPE_TELEPHONE DEFINE_GUIDNAMED(KSNODETYPE_TELEPHONE)
173    
174     #define STATIC_KSNODETYPE_DOWN_LINE_PHONE\
175     DEFINE_USB_TERMINAL_GUID(0x0503)
176     DEFINE_GUIDSTRUCT("DFF21EE3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DOWN_LINE_PHONE);
177     #define KSNODETYPE_DOWN_LINE_PHONE DEFINE_GUIDNAMED(KSNODETYPE_DOWN_LINE_PHONE)
178    
179     #define STATIC_KSNODETYPE_ANALOG_CONNECTOR\
180     DEFINE_USB_TERMINAL_GUID(0x601)
181     DEFINE_GUIDSTRUCT("DFF21FE1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_ANALOG_CONNECTOR);
182     #define KSNODETYPE_ANALOG_CONNECTOR DEFINE_GUIDNAMED(KSNODETYPE_ANALOG_CONNECTOR)
183    
184     #define STATIC_KSNODETYPE_DIGITAL_AUDIO_INTERFACE\
185     DEFINE_USB_TERMINAL_GUID(0x0602)
186     DEFINE_GUIDSTRUCT("DFF21FE2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DIGITAL_AUDIO_INTERFACE);
187     #define KSNODETYPE_DIGITAL_AUDIO_INTERFACE DEFINE_GUIDNAMED(KSNODETYPE_DIGITAL_AUDIO_INTERFACE)
188    
189     #define STATIC_KSNODETYPE_LINE_CONNECTOR\
190     DEFINE_USB_TERMINAL_GUID(0x0603)
191     DEFINE_GUIDSTRUCT("DFF21FE3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_LINE_CONNECTOR);
192     #define KSNODETYPE_LINE_CONNECTOR DEFINE_GUIDNAMED(KSNODETYPE_LINE_CONNECTOR)
193    
194     #define STATIC_KSNODETYPE_LEGACY_AUDIO_CONNECTOR\
195     DEFINE_USB_TERMINAL_GUID(0x0604)
196     DEFINE_GUIDSTRUCT("DFF21FE4-F70F-11D0-B917-00A0C9223196", KSNODETYPE_LEGACY_AUDIO_CONNECTOR);
197     #define KSNODETYPE_LEGACY_AUDIO_CONNECTOR DEFINE_GUIDNAMED(KSNODETYPE_LEGACY_AUDIO_CONNECTOR)
198    
199     #define STATIC_KSNODETYPE_SPDIF_INTERFACE\
200     DEFINE_USB_TERMINAL_GUID(0x0605)
201     DEFINE_GUIDSTRUCT("DFF21FE5-F70F-11D0-B917-00A0C9223196", KSNODETYPE_SPDIF_INTERFACE);
202     #define KSNODETYPE_SPDIF_INTERFACE DEFINE_GUIDNAMED(KSNODETYPE_SPDIF_INTERFACE)
203    
204     #define STATIC_KSNODETYPE_1394_DA_STREAM\
205     DEFINE_USB_TERMINAL_GUID(0x0606)
206     DEFINE_GUIDSTRUCT("DFF21FE6-F70F-11D0-B917-00A0C9223196", KSNODETYPE_1394_DA_STREAM);
207     #define KSNODETYPE_1394_DA_STREAM DEFINE_GUIDNAMED(KSNODETYPE_1394_DA_STREAM)
208    
209     #define STATIC_KSNODETYPE_1394_DV_STREAM_SOUNDTRACK\
210     DEFINE_USB_TERMINAL_GUID(0x0607)
211     DEFINE_GUIDSTRUCT("DFF21FE7-F70F-11D0-B917-00A0C9223196", KSNODETYPE_1394_DV_STREAM_SOUNDTRACK);
212     #define KSNODETYPE_1394_DV_STREAM_SOUNDTRACK DEFINE_GUIDNAMED(KSNODETYPE_1394_DV_STREAM_SOUNDTRACK)
213    
214     #define STATIC_KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE\
215     DEFINE_USB_TERMINAL_GUID(0x0701)
216     DEFINE_GUIDSTRUCT("DFF220E1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE);
217     #define KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE DEFINE_GUIDNAMED(KSNODETYPE_LEVEL_CALIBRATION_NOISE_SOURCE)
218    
219     #define STATIC_KSNODETYPE_EQUALIZATION_NOISE\
220     DEFINE_USB_TERMINAL_GUID(0x0702)
221     DEFINE_GUIDSTRUCT("DFF220E2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_EQUALIZATION_NOISE);
222     #define KSNODETYPE_EQUALIZATION_NOISE DEFINE_GUIDNAMED(KSNODETYPE_EQUALIZATION_NOISE)
223    
224     #define STATIC_KSNODETYPE_CD_PLAYER\
225     DEFINE_USB_TERMINAL_GUID(0x0703)
226     DEFINE_GUIDSTRUCT("DFF220E3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_CD_PLAYER);
227     #define KSNODETYPE_CD_PLAYER DEFINE_GUIDNAMED(KSNODETYPE_CD_PLAYER)
228    
229     #define STATIC_KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE\
230     DEFINE_USB_TERMINAL_GUID(0x0704)
231     DEFINE_GUIDSTRUCT("DFF220E4-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE);
232     #define KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE DEFINE_GUIDNAMED(KSNODETYPE_DAT_IO_DIGITAL_AUDIO_TAPE)
233    
234     #define STATIC_KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE\
235     DEFINE_USB_TERMINAL_GUID(0x0705)
236     DEFINE_GUIDSTRUCT("DFF220E5-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE);
237     #define KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE DEFINE_GUIDNAMED(KSNODETYPE_DCC_IO_DIGITAL_COMPACT_CASSETTE)
238    
239     #define STATIC_KSNODETYPE_MINIDISK\
240     DEFINE_USB_TERMINAL_GUID(0x0706)
241     DEFINE_GUIDSTRUCT("DFF220E6-F70F-11D0-B917-00A0C9223196", KSNODETYPE_MINIDISK);
242     #define KSNODETYPE_MINIDISK DEFINE_GUIDNAMED(KSNODETYPE_MINIDISK)
243    
244     #define STATIC_KSNODETYPE_ANALOG_TAPE\
245     DEFINE_USB_TERMINAL_GUID(0x0707)
246     DEFINE_GUIDSTRUCT("DFF220E7-F70F-11D0-B917-00A0C9223196", KSNODETYPE_ANALOG_TAPE);
247     #define KSNODETYPE_ANALOG_TAPE DEFINE_GUIDNAMED(KSNODETYPE_ANALOG_TAPE)
248    
249     #define STATIC_KSNODETYPE_PHONOGRAPH\
250     DEFINE_USB_TERMINAL_GUID(0x0708)
251     DEFINE_GUIDSTRUCT("DFF220E8-F70F-11D0-B917-00A0C9223196", KSNODETYPE_PHONOGRAPH);
252     #define KSNODETYPE_PHONOGRAPH DEFINE_GUIDNAMED(KSNODETYPE_PHONOGRAPH)
253    
254     #define STATIC_KSNODETYPE_VCR_AUDIO\
255     DEFINE_USB_TERMINAL_GUID(0x0708)
256     DEFINE_GUIDSTRUCT("DFF220E9-F70F-11D0-B917-00A0C9223196", KSNODETYPE_VCR_AUDIO);
257     #define KSNODETYPE_VCR_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_VCR_AUDIO)
258    
259     #define STATIC_KSNODETYPE_VIDEO_DISC_AUDIO\
260     DEFINE_USB_TERMINAL_GUID(0x070A)
261     DEFINE_GUIDSTRUCT("DFF220EA-F70F-11D0-B917-00A0C9223196", KSNODETYPE_VIDEO_DISC_AUDIO);
262     #define KSNODETYPE_VIDEO_DISC_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_VIDEO_DISC_AUDIO)
263    
264     #define STATIC_KSNODETYPE_DVD_AUDIO\
265     DEFINE_USB_TERMINAL_GUID(0x070B)
266     DEFINE_GUIDSTRUCT("DFF220EB-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DVD_AUDIO);
267     #define KSNODETYPE_DVD_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_DVD_AUDIO)
268    
269     #define STATIC_KSNODETYPE_TV_TUNER_AUDIO\
270     DEFINE_USB_TERMINAL_GUID(0x070C)
271     DEFINE_GUIDSTRUCT("DFF220EC-F70F-11D0-B917-00A0C9223196", KSNODETYPE_TV_TUNER_AUDIO);
272     #define KSNODETYPE_TV_TUNER_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_TV_TUNER_AUDIO)
273    
274     #define STATIC_KSNODETYPE_SATELLITE_RECEIVER_AUDIO\
275     DEFINE_USB_TERMINAL_GUID(0x070D)
276     DEFINE_GUIDSTRUCT("DFF220ED-F70F-11D0-B917-00A0C9223196", KSNODETYPE_SATELLITE_RECEIVER_AUDIO);
277     #define KSNODETYPE_SATELLITE_RECEIVER_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_SATELLITE_RECEIVER_AUDIO)
278    
279     #define STATIC_KSNODETYPE_CABLE_TUNER_AUDIO\
280     DEFINE_USB_TERMINAL_GUID(0x070E)
281     DEFINE_GUIDSTRUCT("DFF220EE-F70F-11D0-B917-00A0C9223196", KSNODETYPE_CABLE_TUNER_AUDIO);
282     #define KSNODETYPE_CABLE_TUNER_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_CABLE_TUNER_AUDIO)
283    
284     #define STATIC_KSNODETYPE_DSS_AUDIO\
285     DEFINE_USB_TERMINAL_GUID(0x070F)
286     DEFINE_GUIDSTRUCT("DFF220EF-F70F-11D0-B917-00A0C9223196", KSNODETYPE_DSS_AUDIO);
287     #define KSNODETYPE_DSS_AUDIO DEFINE_GUIDNAMED(KSNODETYPE_DSS_AUDIO)
288    
289     #define STATIC_KSNODETYPE_RADIO_RECEIVER\
290     DEFINE_USB_TERMINAL_GUID(0x0710)
291     DEFINE_GUIDSTRUCT("DFF220F0-F70F-11D0-B917-00A0C9223196", KSNODETYPE_RADIO_RECEIVER);
292     #define KSNODETYPE_RADIO_RECEIVER DEFINE_GUIDNAMED(KSNODETYPE_RADIO_RECEIVER)
293    
294     #define STATIC_KSNODETYPE_RADIO_TRANSMITTER\
295     DEFINE_USB_TERMINAL_GUID(0x0711)
296     DEFINE_GUIDSTRUCT("DFF220F1-F70F-11D0-B917-00A0C9223196", KSNODETYPE_RADIO_TRANSMITTER);
297     #define KSNODETYPE_RADIO_TRANSMITTER DEFINE_GUIDNAMED(KSNODETYPE_RADIO_TRANSMITTER)
298    
299     #define STATIC_KSNODETYPE_MULTITRACK_RECORDER\
300     DEFINE_USB_TERMINAL_GUID(0x0712)
301     DEFINE_GUIDSTRUCT("DFF220F2-F70F-11D0-B917-00A0C9223196", KSNODETYPE_MULTITRACK_RECORDER);
302     #define KSNODETYPE_MULTITRACK_RECORDER DEFINE_GUIDNAMED(KSNODETYPE_MULTITRACK_RECORDER)
303    
304     #define STATIC_KSNODETYPE_SYNTHESIZER\
305     DEFINE_USB_TERMINAL_GUID(0x0713)
306     DEFINE_GUIDSTRUCT("DFF220F3-F70F-11D0-B917-00A0C9223196", KSNODETYPE_SYNTHESIZER);
307     #define KSNODETYPE_SYNTHESIZER DEFINE_GUIDNAMED(KSNODETYPE_SYNTHESIZER)
308    
309     // Microsoft's WDMAUD virtual swsynth pin name guid
310    
311     #define STATIC_KSNODETYPE_SWSYNTH\
312     0x423274A0L, 0x8B81, 0x11D1, 0xA0, 0x50, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
313     DEFINE_GUIDSTRUCT("423274A0-8B81-11D1-A050-0000F8004788", KSNODETYPE_SWSYNTH);
314     #define KSNODETYPE_SWSYNTH DEFINE_GUIDNAMED(KSNODETYPE_SWSYNTH)
315    
316     // Microsoft's SWMIDI midi pin and node name guid
317    
318     #define STATIC_KSNODETYPE_SWMIDI\
319     0xCB9BEFA0L, 0xA251, 0x11D1, 0xA0, 0x50, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
320     DEFINE_GUIDSTRUCT("CB9BEFA0-A251-11D1-A050-0000F8004788", KSNODETYPE_SWMIDI);
321     #define KSNODETYPE_SWMIDI DEFINE_GUIDNAMED(KSNODETYPE_SWMIDI)
322    
323     #define STATIC_KSNODETYPE_DRM_DESCRAMBLE\
324     0xFFBB6E3FL, 0xCCFE, 0x4D84, 0x90, 0xD9, 0x42, 0x14, 0x18, 0xB0, 0x3A, 0x8E
325     DEFINE_GUIDSTRUCT("FFBB6E3F-CCFE-4D84-90D9-421418B03A8E", KSNODETYPE_DRM_DESCRAMBLE);
326     #define KSNODETYPE_DRM_DESCRAMBLE DEFINE_GUIDNAMED(KSNODETYPE_DRM_DESCRAMBLE)
327    
328     // General categories
329     #define STATIC_KSCATEGORY_AUDIO \
330     0x6994AD04L, 0x93EF, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
331     DEFINE_GUIDSTRUCT("6994AD04-93EF-11D0-A3CC-00A0C9223196", KSCATEGORY_AUDIO);
332     #define KSCATEGORY_AUDIO DEFINE_GUIDNAMED(KSCATEGORY_AUDIO)
333    
334     #define STATIC_KSCATEGORY_VIDEO \
335     0x6994AD05L, 0x93EF, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
336     DEFINE_GUIDSTRUCT("6994AD05-93EF-11D0-A3CC-00A0C9223196", KSCATEGORY_VIDEO);
337     #define KSCATEGORY_VIDEO DEFINE_GUIDNAMED(KSCATEGORY_VIDEO)
338    
339     #define STATIC_KSCATEGORY_TEXT \
340     0x6994AD06L, 0x93EF, 0x11D0, 0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
341     DEFINE_GUIDSTRUCT("6994AD06-93EF-11D0-A3CC-00A0C9223196", KSCATEGORY_TEXT);
342     #define KSCATEGORY_TEXT DEFINE_GUIDNAMED(KSCATEGORY_TEXT)
343    
344     #define STATIC_KSCATEGORY_NETWORK \
345     0x67C9CC3CL, 0x69C4, 0x11D2, 0x87, 0x59, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
346     DEFINE_GUIDSTRUCT("67C9CC3C-69C4-11D2-8759-00A0C9223196", KSCATEGORY_NETWORK);
347     #define KSCATEGORY_NETWORK DEFINE_GUIDNAMED(KSCATEGORY_NETWORK)
348    
349     #define STATIC_KSCATEGORY_TOPOLOGY \
350     0xDDA54A40L, 0x1E4C, 0x11D1, 0xA0, 0x50, 0x40, 0x57, 0x05, 0xC1, 0x00, 0x00
351     DEFINE_GUIDSTRUCT("DDA54A40-1E4C-11D1-A050-405705C10000", KSCATEGORY_TOPOLOGY);
352     #define KSCATEGORY_TOPOLOGY DEFINE_GUIDNAMED(KSCATEGORY_TOPOLOGY)
353    
354     #define STATIC_KSCATEGORY_VIRTUAL \
355     0x3503EAC4L, 0x1F26, 0x11D1, 0x8A, 0xB0, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
356     DEFINE_GUIDSTRUCT("3503EAC4-1F26-11D1-8AB0-00A0C9223196", KSCATEGORY_VIRTUAL);
357     #define KSCATEGORY_VIRTUAL DEFINE_GUIDNAMED(KSCATEGORY_VIRTUAL)
358    
359     #define STATIC_KSCATEGORY_ACOUSTIC_ECHO_CANCEL \
360     0xBF963D80L, 0xC559, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
361     DEFINE_GUIDSTRUCT("BF963D80-C559-11D0-8A2B-00A0C9255AC1", KSCATEGORY_ACOUSTIC_ECHO_CANCEL);
362     #define KSCATEGORY_ACOUSTIC_ECHO_CANCEL DEFINE_GUIDNAMED(KSCATEGORY_ACOUSTIC_ECHO_CANCEL)
363    
364    
365     #define STATIC_KSCATEGORY_SYSAUDIO \
366     0xA7C7A5B1L, 0x5AF3, 0x11D1, 0x9C, 0xED, 0x00, 0xA0, 0x24, 0xBF, 0x04, 0x07
367     DEFINE_GUIDSTRUCT("A7C7A5B1-5AF3-11D1-9CED-00A024BF0407", KSCATEGORY_SYSAUDIO);
368     #define KSCATEGORY_SYSAUDIO DEFINE_GUIDNAMED(KSCATEGORY_SYSAUDIO)
369    
370     #define STATIC_KSCATEGORY_WDMAUD \
371     0x3E227E76L, 0x690D, 0x11D2, 0x81, 0x61, 0x00, 0x00, 0xF8, 0x77, 0x5B, 0xF1
372     DEFINE_GUIDSTRUCT("3E227E76-690D-11D2-8161-0000F8775BF1", KSCATEGORY_WDMAUD);
373     #define KSCATEGORY_WDMAUD DEFINE_GUIDNAMED(KSCATEGORY_WDMAUD)
374    
375     #define STATIC_KSCATEGORY_AUDIO_GFX \
376     0x9BAF9572L, 0x340C, 0x11D3, 0xAB, 0xDC, 0x00, 0xA0, 0xC9, 0x0A, 0xB1, 0x6F
377     DEFINE_GUIDSTRUCT("9BAF9572-340C-11D3-ABDC-00A0C90AB16F", KSCATEGORY_AUDIO_GFX);
378     #define KSCATEGORY_AUDIO_GFX DEFINE_GUIDNAMED(KSCATEGORY_AUDIO_GFX)
379    
380     #define STATIC_KSCATEGORY_AUDIO_SPLITTER \
381     0x9EA331FAL, 0xB91B, 0x45F8, 0x92, 0x85, 0xBD, 0x2B, 0xC7, 0x7A, 0xFC, 0xDE
382     DEFINE_GUIDSTRUCT("9EA331FA-B91B-45F8-9285-BD2BC77AFCDE", KSCATEGORY_AUDIO_SPLITTER);
383     #define KSCATEGORY_AUDIO_SPLITTER DEFINE_GUIDNAMED(KSCATEGORY_AUDIO_SPLITTER)
384    
385     #define STATIC_KSCATEGORY_SYNTHESIZER STATIC_KSNODETYPE_SYNTHESIZER
386     #define KSCATEGORY_SYNTHESIZER KSNODETYPE_SYNTHESIZER
387    
388     #define STATIC_KSCATEGORY_DRM_DESCRAMBLE STATIC_KSNODETYPE_DRM_DESCRAMBLE
389     #define KSCATEGORY_DRM_DESCRAMBLE KSNODETYPE_DRM_DESCRAMBLE
390    
391     #define STATIC_KSCATEGORY_AUDIO_DEVICE \
392     0xFBF6F530L, 0x07B9, 0x11D2, 0xA7, 0x1E, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
393     DEFINE_GUIDSTRUCT("FBF6F530-07B9-11D2-A71E-0000F8004788", KSCATEGORY_AUDIO_DEVICE);
394     #define KSCATEGORY_AUDIO_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_AUDIO_DEVICE)
395    
396     #define STATIC_KSCATEGORY_PREFERRED_WAVEOUT_DEVICE \
397     0xD6C5066EL, 0x72C1, 0x11D2, 0x97, 0x55, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
398     DEFINE_GUIDSTRUCT("D6C5066E-72C1-11D2-9755-0000F8004788", KSCATEGORY_PREFERRED_WAVEOUT_DEVICE);
399     #define KSCATEGORY_PREFERRED_WAVEOUT_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_PREFERRED_WAVEOUT_DEVICE)
400    
401     #define STATIC_KSCATEGORY_PREFERRED_WAVEIN_DEVICE \
402     0xD6C50671L, 0x72C1, 0x11D2, 0x97, 0x55, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
403     DEFINE_GUIDSTRUCT("D6C50671-72C1-11D2-9755-0000F8004788", KSCATEGORY_PREFERRED_WAVEIN_DEVICE);
404     #define KSCATEGORY_PREFERRED_WAVEIN_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_PREFERRED_WAVEIN_DEVICE)
405    
406     #define STATIC_KSCATEGORY_PREFERRED_MIDIOUT_DEVICE \
407     0xD6C50674L, 0x72C1, 0x11D2, 0x97, 0x55, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
408     DEFINE_GUIDSTRUCT("D6C50674-72C1-11D2-9755-0000F8004788", KSCATEGORY_PREFERRED_MIDIOUT_DEVICE);
409     #define KSCATEGORY_PREFERRED_MIDIOUT_DEVICE DEFINE_GUIDNAMED(KSCATEGORY_PREFERRED_MIDIOUT_DEVICE)
410    
411     // Special pin category for wdmaud
412    
413     #define STATIC_KSCATEGORY_WDMAUD_USE_PIN_NAME \
414     0x47A4FA20L, 0xA251, 0x11D1, 0xA0, 0x50, 0x00, 0x00, 0xF8, 0x00, 0x47, 0x88
415     DEFINE_GUIDSTRUCT("47A4FA20-A251-11D1-A050-0000F8004788", KSCATEGORY_WDMAUD_USE_PIN_NAME);
416     #define KSCATEGORY_WDMAUD_USE_PIN_NAME DEFINE_GUIDNAMED(KSCATEGORY_WDMAUD_USE_PIN_NAME)
417    
418     // Escalante Platform Interface
419    
420     #define STATIC_KSCATEGORY_ESCALANTE_PLATFORM_DRIVER \
421     0x74f3aea8L, 0x9768, 0x11d1, 0x8e, 0x07, 0x00, 0xa0, 0xc9, 0x5e, 0xc2, 0x2e
422     DEFINE_GUIDSTRUCT("74f3aea8-9768-11d1-8e07-00a0c95ec22e", KSCATEGORY_ESCALANTE_PLATFORM_DRIVER);
423     #define KSCATEGORY_ESCALANTE_PLATFORM_DRIVER DEFINE_GUIDNAMED(KSCATEGORY_ESCALANTE_PLATFORM_DRIVER)
424    
425     // -- major types ---
426    
427     // 'vids' == MEDIATYPE_Video,
428     #define STATIC_KSDATAFORMAT_TYPE_VIDEO\
429     0x73646976L, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
430     DEFINE_GUIDSTRUCT("73646976-0000-0010-8000-00aa00389b71", KSDATAFORMAT_TYPE_VIDEO);
431     #define KSDATAFORMAT_TYPE_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_VIDEO)
432    
433     // 'auds' == MEDIATYPE_Audio
434     #define STATIC_KSDATAFORMAT_TYPE_AUDIO\
435     0x73647561L, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
436     DEFINE_GUIDSTRUCT("73647561-0000-0010-8000-00aa00389b71", KSDATAFORMAT_TYPE_AUDIO);
437     #define KSDATAFORMAT_TYPE_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_AUDIO)
438    
439     // 'txts' == MEDIATYPE_Text
440     #define STATIC_KSDATAFORMAT_TYPE_TEXT\
441     0x73747874L, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
442     DEFINE_GUIDSTRUCT("73747874-0000-0010-8000-00aa00389b71", KSDATAFORMAT_TYPE_TEXT);
443     #define KSDATAFORMAT_TYPE_TEXT DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_TEXT)
444    
445     #if !defined( DEFINE_WAVEFORMATEX_GUID )
446     #define DEFINE_WAVEFORMATEX_GUID(x) (USHORT)(x), 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
447     #endif
448    
449     #define STATIC_KSDATAFORMAT_SUBTYPE_WAVEFORMATEX\
450     0x00000000L, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
451     DEFINE_GUIDSTRUCT("00000000-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_WAVEFORMATEX);
452     #define KSDATAFORMAT_SUBTYPE_WAVEFORMATEX DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_WAVEFORMATEX)
453    
454     #define INIT_WAVEFORMATEX_GUID(Guid, x)\
455     {\
456     *(Guid) = KSDATAFORMAT_SUBTYPE_WAVEFORMATEX;\
457     (Guid)->Data1 = (USHORT)(x);\
458     }
459    
460     #define EXTRACT_WAVEFORMATEX_ID(Guid)\
461     (USHORT)((Guid)->Data1)
462    
463     #define IS_VALID_WAVEFORMATEX_GUID(Guid)\
464     (!memcmp(((PUSHORT)&KSDATAFORMAT_SUBTYPE_WAVEFORMATEX) + 1, ((PUSHORT)(Guid)) + 1, sizeof(GUID) - sizeof(USHORT)))
465    
466     #if !defined(INIT_MMREG_MID)
467     //{d5a47fa7-6d98-11d1-a21a-00a0c9223196}
468     #define INIT_MMREG_MID(guid, id)\
469     {\
470     (guid)->Data1 = 0xd5a47fa7 + (USHORT)(id);\
471     (guid)->Data2 = 0x6d98;\
472     (guid)->Data3 = 0x11d1;\
473     (guid)->Data4[0] = 0xa2;\
474     (guid)->Data4[1] = 0x1a;\
475     (guid)->Data4[2] = 0x00;\
476     (guid)->Data4[3] = 0xa0;\
477     (guid)->Data4[4] = 0xc9;\
478     (guid)->Data4[5] = 0x22;\
479     (guid)->Data4[6] = 0x31;\
480     (guid)->Data4[7] = 0x96;\
481     }
482     #define EXTRACT_MMREG_MID(guid)\
483     (USHORT)((guid)->Data1 - 0xd5a47fa7)
484     #define DEFINE_MMREG_MID_GUID(id)\
485     0xd5a47fa7+(USHORT)(id), 0x6d98, 0x11d1, 0xa2, 0x1a, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96
486    
487     #define IS_COMPATIBLE_MMREG_MID(guid)\
488     (((guid)->Data1 >= 0xd5a47fa7) &&\
489     ((guid)->Data1 < 0xd5a47fa7 + 0xffff) &&\
490     ((guid)->Data2 == 0x6d98) &&\
491     ((guid)->Data3 == 0x11d1) &&\
492     ((guid)->Data4[0] == 0xa2) &&\
493     ((guid)->Data4[1] == 0x1a) &&\
494     ((guid)->Data4[2] == 0x00) &&\
495     ((guid)->Data4[3] == 0xa0) &&\
496     ((guid)->Data4[4] == 0xc9) &&\
497     ((guid)->Data4[5] == 0x22) &&\
498     ((guid)->Data4[6] == 0x31) &&\
499     ((guid)->Data4[7] == 0x96))
500     #endif // !defined(INIT_MMREG_MID)
501    
502     #if !defined(INIT_MMREG_PID)
503     //{e36dc2ac-6d9a-11d1-a21a-00a0c9223196}
504     #define INIT_MMREG_PID(guid, id)\
505     {\
506     (guid)->Data1 = 0xe36dc2ac + (USHORT)(id);\
507     (guid)->Data2 = 0x6d9a;\
508     (guid)->Data3 = 0x11d1;\
509     (guid)->Data4[0] = 0xa2;\
510     (guid)->Data4[1] = 0x1a;\
511     (guid)->Data4[2] = 0x00;\
512     (guid)->Data4[3] = 0xa0;\
513     (guid)->Data4[4] = 0xc9;\
514     (guid)->Data4[5] = 0x22;\
515     (guid)->Data4[6] = 0x31;\
516     (guid)->Data4[7] = 0x96;\
517     }
518     #define EXTRACT_MMREG_PID(guid)\
519     (USHORT)((guid)->Data1 - 0xe36dc2ac)
520     #define DEFINE_MMREG_PID_GUID(id)\
521     0xe36dc2ac+(USHORT)(id), 0x6d9a, 0x11d1, 0xa2, 0x1a, 0x00, 0xa0, 0xc9, 0x22, 0x31, 0x96
522    
523     #define IS_COMPATIBLE_MMREG_PID(guid)\
524     (((guid)->Data1 >= 0xe36dc2ac) &&\
525     ((guid)->Data1 < 0xe36dc2ac + 0xffff) &&\
526     ((guid)->Data2 == 0x6d9a) &&\
527     ((guid)->Data3 == 0x11d1) &&\
528     ((guid)->Data4[0] == 0xa2) &&\
529     ((guid)->Data4[1] == 0x1a) &&\
530     ((guid)->Data4[2] == 0x00) &&\
531     ((guid)->Data4[3] == 0xa0) &&\
532     ((guid)->Data4[4] == 0xc9) &&\
533     ((guid)->Data4[5] == 0x22) &&\
534     ((guid)->Data4[6] == 0x31) &&\
535     ((guid)->Data4[7] == 0x96))
536     #endif // !defined(INIT_MMREG_PID)
537    
538     #define STATIC_KSDATAFORMAT_SUBTYPE_ANALOG\
539     0x6dba3190L, 0x67bd, 0x11cf, 0xa0, 0xf7, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
540     DEFINE_GUIDSTRUCT("6dba3190-67bd-11cf-a0f7-0020afd156e4", KSDATAFORMAT_SUBTYPE_ANALOG);
541     #define KSDATAFORMAT_SUBTYPE_ANALOG DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_ANALOG)
542    
543     #define STATIC_KSDATAFORMAT_SUBTYPE_PCM\
544     DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_PCM)
545     DEFINE_GUIDSTRUCT("00000001-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_PCM);
546     #define KSDATAFORMAT_SUBTYPE_PCM DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_PCM)
547    
548     #if defined(_INC_MMREG)
549     #define STATIC_KSDATAFORMAT_SUBTYPE_IEEE_FLOAT\
550     DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_IEEE_FLOAT)
551     DEFINE_GUIDSTRUCT("00000003-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_IEEE_FLOAT);
552     #define KSDATAFORMAT_SUBTYPE_IEEE_FLOAT DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_IEEE_FLOAT)
553    
554     #define STATIC_KSDATAFORMAT_SUBTYPE_DRM\
555     DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_DRM)
556     DEFINE_GUIDSTRUCT("00000009-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_DRM);
557     #define KSDATAFORMAT_SUBTYPE_DRM DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DRM)
558    
559     #define STATIC_KSDATAFORMAT_SUBTYPE_ALAW\
560     DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_ALAW)
561     DEFINE_GUIDSTRUCT("00000006-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_ALAW);
562     #define KSDATAFORMAT_SUBTYPE_ALAW DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_ALAW)
563    
564     #define STATIC_KSDATAFORMAT_SUBTYPE_MULAW\
565     DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_MULAW)
566     DEFINE_GUIDSTRUCT("00000007-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_MULAW);
567     #define KSDATAFORMAT_SUBTYPE_MULAW DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MULAW)
568    
569     #define STATIC_KSDATAFORMAT_SUBTYPE_ADPCM\
570     DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_ADPCM)
571     DEFINE_GUIDSTRUCT("00000002-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_ADPCM);
572     #define KSDATAFORMAT_SUBTYPE_ADPCM DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_ADPCM)
573    
574     #define STATIC_KSDATAFORMAT_SUBTYPE_MPEG\
575     DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_MPEG)
576     DEFINE_GUIDSTRUCT("00000050-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_MPEG);
577     #define KSDATAFORMAT_SUBTYPE_MPEG DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG)
578     #endif // defined(_INC_MMREG)
579    
580     #define STATIC_KSDATAFORMAT_SPECIFIER_VC_ID\
581     0xAD98D184L, 0xAAC3, 0x11D0, 0xA4, 0x1C, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
582     DEFINE_GUIDSTRUCT("AD98D184-AAC3-11D0-A41C-00A0C9223196", KSDATAFORMAT_SPECIFIER_VC_ID);
583     #define KSDATAFORMAT_SPECIFIER_VC_ID DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VC_ID)
584    
585     #define STATIC_KSDATAFORMAT_SPECIFIER_WAVEFORMATEX\
586     0x05589f81L, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a
587     DEFINE_GUIDSTRUCT("05589f81-c356-11ce-bf01-00aa0055595a", KSDATAFORMAT_SPECIFIER_WAVEFORMATEX);
588     #define KSDATAFORMAT_SPECIFIER_WAVEFORMATEX DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
589    
590     #define STATIC_KSDATAFORMAT_SPECIFIER_DSOUND\
591     0x518590a2L, 0xa184, 0x11d0, 0x85, 0x22, 0x00, 0xc0, 0x4f, 0xd9, 0xba, 0xf3
592     DEFINE_GUIDSTRUCT("518590a2-a184-11d0-8522-00c04fd9baf3", KSDATAFORMAT_SPECIFIER_DSOUND);
593     #define KSDATAFORMAT_SPECIFIER_DSOUND DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DSOUND)
594    
595     #if defined(_INC_MMSYSTEM) || defined(_INC_MMREG)
596     #if !defined( PACK_PRAGMAS_NOT_SUPPORTED )
597     #include <pshpack1.h>
598     #endif
599     typedef struct {
600     KSDATAFORMAT DataFormat;
601     WAVEFORMATEX WaveFormatEx;
602     } KSDATAFORMAT_WAVEFORMATEX, *PKSDATAFORMAT_WAVEFORMATEX;
603    
604     #ifndef _WAVEFORMATEXTENSIBLE_
605     #define _WAVEFORMATEXTENSIBLE_
606     typedef struct {
607     WAVEFORMATEX Format;
608     union {
609     WORD wValidBitsPerSample; /* bits of precision */
610     WORD wSamplesPerBlock; /* valid if wBitsPerSample==0 */
611     WORD wReserved; /* If neither applies, set to zero. */
612     } Samples;
613     DWORD dwChannelMask; /* which channels are */
614     /* present in stream */
615     GUID SubFormat;
616     } WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;
617     #endif // !_WAVEFORMATEXTENSIBLE_
618    
619     #if !defined(WAVE_FORMAT_EXTENSIBLE)
620     #define WAVE_FORMAT_EXTENSIBLE 0xFFFE
621     #endif // !defined(WAVE_FORMAT_EXTENSIBLE)
622    
623     // DirectSound buffer description
624     typedef struct {
625     ULONG Flags;
626     ULONG Control;
627     WAVEFORMATEX WaveFormatEx;
628     } KSDSOUND_BUFFERDESC, *PKSDSOUND_BUFFERDESC;
629    
630     // DirectSound format
631     typedef struct {
632     KSDATAFORMAT DataFormat;
633     KSDSOUND_BUFFERDESC BufferDesc;
634     } KSDATAFORMAT_DSOUND, *PKSDATAFORMAT_DSOUND;
635    
636     #if !defined( PACK_PRAGMAS_NOT_SUPPORTED )
637     #include <poppack.h>
638     #endif
639     #endif // defined(_INC_MMSYSTEM) || defined(_INC_MMREG)
640    
641    
642    
643     // DirectSound buffer flags
644     #define KSDSOUND_BUFFER_PRIMARY 0x00000001
645     #define KSDSOUND_BUFFER_STATIC 0x00000002
646     #define KSDSOUND_BUFFER_LOCHARDWARE 0x00000004
647     #define KSDSOUND_BUFFER_LOCSOFTWARE 0x00000008
648    
649     // DirectSound buffer control flags
650     #define KSDSOUND_BUFFER_CTRL_3D 0x00000001
651     #define KSDSOUND_BUFFER_CTRL_FREQUENCY 0x00000002
652     #define KSDSOUND_BUFFER_CTRL_PAN 0x00000004
653     #define KSDSOUND_BUFFER_CTRL_VOLUME 0x00000008
654     #define KSDSOUND_BUFFER_CTRL_POSITIONNOTIFY 0x00000010
655    
656     #define KSDSOUND_BUFFER_CTRL_HRTF_3D 0x40000000
657    
658     typedef struct {
659     #if defined(_NTDDK_)
660     ULONGLONG PlayOffset;
661     ULONGLONG WriteOffset;
662     #else // !_NTDDK_
663     DWORDLONG PlayOffset;
664     DWORDLONG WriteOffset;
665     #endif // !_NTDDK_
666     } KSAUDIO_POSITION, *PKSAUDIO_POSITION;
667    
668     // DirectSound3D FIR context
669     typedef struct {
670     LONG Channel;
671     FLOAT VolSmoothScale;
672     FLOAT TotalDryAttenuation;
673     FLOAT TotalWetAttenuation;
674     LONG SmoothFrequency;
675     LONG Delay;
676     } KSDS3D_ITD_PARAMS, *PKSDS3D_ITD_PARAMS;
677    
678     typedef struct {
679     ULONG Enabled;
680     KSDS3D_ITD_PARAMS LeftParams;
681     KSDS3D_ITD_PARAMS RightParams;
682     ULONG Reserved;
683     } KSDS3D_ITD_PARAMS_MSG, *PKSDS3D_ITD_PARAMS_MSG;
684    
685     // DirectSound3D HRTF messages
686    
687     typedef struct {
688     ULONG Size; // This is the size of the struct in bytes
689     ULONG Enabled;
690     BOOL SwapChannels;
691     BOOL ZeroAzimuth;
692     BOOL CrossFadeOutput;
693     ULONG FilterSize; // This is the additional size of the filter coeff in bytes
694     } KSDS3D_HRTF_PARAMS_MSG, *PKSDS3D_HRTF_PARAMS_MSG;
695    
696    
697     // HRTF filter quality levels
698     typedef enum {
699     FULL_FILTER,
700     LIGHT_FILTER,
701     KSDS3D_FILTER_QUALITY_COUNT
702     } KSDS3D_HRTF_FILTER_QUALITY;
703    
704     typedef struct {
705     ULONG Size; // This is the size of the struct in bytes
706     KSDS3D_HRTF_FILTER_QUALITY Quality;
707     FLOAT SampleRate;
708     ULONG MaxFilterSize;
709     ULONG FilterTransientMuteLength;
710     ULONG FilterOverlapBufferLength;
711     ULONG OutputOverlapBufferLength;
712     ULONG Reserved;
713     } KSDS3D_HRTF_INIT_MSG, *PKSDS3D_HRTF_INIT_MSG;
714    
715     // Coefficient formats
716     typedef enum {
717     FLOAT_COEFF,
718     SHORT_COEFF,
719     KSDS3D_COEFF_COUNT
720     } KSDS3D_HRTF_COEFF_FORMAT;
721    
722     // Filter methods
723     typedef enum {
724     DIRECT_FORM,
725     CASCADE_FORM,
726     KSDS3D_FILTER_METHOD_COUNT
727     } KSDS3D_HRTF_FILTER_METHOD;
728    
729     // Filter methods
730     typedef enum {
731     DS3D_HRTF_VERSION_1
732     } KSDS3D_HRTF_FILTER_VERSION;
733    
734     typedef struct {
735     KSDS3D_HRTF_FILTER_METHOD FilterMethod;
736     KSDS3D_HRTF_COEFF_FORMAT CoeffFormat;
737     KSDS3D_HRTF_FILTER_VERSION Version;
738     ULONG Reserved;
739     } KSDS3D_HRTF_FILTER_FORMAT_MSG, *PKSDS3D_HRTF_FILTER_FORMAT_MSG;
740    
741     //===========================================================================
742     // DirectSound3D HAL
743    
744    
745     typedef struct _DS3DVECTOR {
746     union {
747     FLOAT x;
748     FLOAT dvX;
749     };
750     union {
751     FLOAT y;
752     FLOAT dvY;
753     };
754     union {
755     FLOAT z;
756     FLOAT dvZ;
757     };
758     } DS3DVECTOR, *PDS3DVECTOR;
759    
760    
761     //===========================================================================
762     //===========================================================================
763    
764     // KSPROPSETID_DirectSound3DListener : {437B3414-D060-11d0-8583-00C04FD9BAF3}
765    
766     #define STATIC_KSPROPSETID_DirectSound3DListener\
767     0x437b3414L, 0xd060, 0x11d0, 0x85, 0x83, 0x00, 0xc0, 0x4f, 0xd9, 0xba, 0xf3
768     DEFINE_GUIDSTRUCT("437b3414-d060-11d0-8583-00c04fd9baf3",KSPROPSETID_DirectSound3DListener);
769     #define KSPROPSETID_DirectSound3DListener DEFINE_GUIDNAMED(KSPROPSETID_DirectSound3DListener)
770    
771     typedef enum {
772     KSPROPERTY_DIRECTSOUND3DLISTENER_ALL,
773     KSPROPERTY_DIRECTSOUND3DLISTENER_POSITION,
774     KSPROPERTY_DIRECTSOUND3DLISTENER_VELOCITY,
775     KSPROPERTY_DIRECTSOUND3DLISTENER_ORIENTATION,
776     KSPROPERTY_DIRECTSOUND3DLISTENER_DISTANCEFACTOR,
777     KSPROPERTY_DIRECTSOUND3DLISTENER_ROLLOFFFACTOR,
778     KSPROPERTY_DIRECTSOUND3DLISTENER_DOPPLERFACTOR,
779     KSPROPERTY_DIRECTSOUND3DLISTENER_BATCH,
780     KSPROPERTY_DIRECTSOUND3DLISTENER_ALLOCATION
781     } KSPROPERTY_DIRECTSOUND3DLISTENER;
782    
783     typedef struct {
784     DS3DVECTOR Position;
785     DS3DVECTOR Velocity;
786     DS3DVECTOR OrientFront;
787     DS3DVECTOR OrientTop;
788     FLOAT DistanceFactor;
789     FLOAT RolloffFactor;
790     FLOAT DopplerFactor;
791     } KSDS3D_LISTENER_ALL, *PKSDS3D_LISTENER_ALL;
792    
793     typedef struct {
794     DS3DVECTOR Front;
795     DS3DVECTOR Top;
796     } KSDS3D_LISTENER_ORIENTATION, *PKSDS3D_LISTENER_ORIENTATION;
797    
798    
799     //===========================================================================
800     //===========================================================================
801     // KSPROPSETID_DirectSound3DBuffer : {437B3411-D060-11d0-8583-00C04FD9BAF3}
802    
803     #define STATIC_KSPROPSETID_DirectSound3DBuffer\
804     0x437b3411L, 0xd060, 0x11d0, 0x85, 0x83, 0x00, 0xc0, 0x4f, 0xd9, 0xba, 0xf3
805     DEFINE_GUIDSTRUCT("437b3411-d060-11d0-8583-00c04fd9baf3", KSPROPSETID_DirectSound3DBuffer);
806     #define KSPROPSETID_DirectSound3DBuffer DEFINE_GUIDNAMED(KSPROPSETID_DirectSound3DBuffer)
807    
808    
809     typedef enum {
810     KSPROPERTY_DIRECTSOUND3DBUFFER_ALL,
811     KSPROPERTY_DIRECTSOUND3DBUFFER_POSITION,
812     KSPROPERTY_DIRECTSOUND3DBUFFER_VELOCITY,
813     KSPROPERTY_DIRECTSOUND3DBUFFER_CONEANGLES,
814     KSPROPERTY_DIRECTSOUND3DBUFFER_CONEORIENTATION,
815     KSPROPERTY_DIRECTSOUND3DBUFFER_CONEOUTSIDEVOLUME,
816     KSPROPERTY_DIRECTSOUND3DBUFFER_MINDISTANCE,
817     KSPROPERTY_DIRECTSOUND3DBUFFER_MAXDISTANCE,
818     KSPROPERTY_DIRECTSOUND3DBUFFER_MODE
819     } KSPROPERTY_DIRECTSOUND3DBUFFER;
820    
821    
822     typedef struct {
823     DS3DVECTOR Position;
824     DS3DVECTOR Velocity;
825     ULONG InsideConeAngle;
826     ULONG OutsideConeAngle;
827     DS3DVECTOR ConeOrientation;
828     LONG ConeOutsideVolume;
829     FLOAT MinDistance;
830     FLOAT MaxDistance;
831     ULONG Mode;
832     } KSDS3D_BUFFER_ALL, *PKSDS3D_BUFFER_ALL;
833    
834     typedef struct {
835     ULONG InsideConeAngle;
836     ULONG OutsideConeAngle;
837     } KSDS3D_BUFFER_CONE_ANGLES, *PKSDS3D_BUFFER_CONE_ANGLES;
838    
839     #define KSAUDIO_STEREO_SPEAKER_GEOMETRY_HEADPHONE (-1)
840     #define KSAUDIO_STEREO_SPEAKER_GEOMETRY_MIN 5
841     #define KSAUDIO_STEREO_SPEAKER_GEOMETRY_NARROW 10
842     #define KSAUDIO_STEREO_SPEAKER_GEOMETRY_WIDE 20
843     #define KSAUDIO_STEREO_SPEAKER_GEOMETRY_MAX 180
844    
845     #define KSDSOUND_3D_MODE_NORMAL 0x00000000
846     #define KSDSOUND_3D_MODE_HEADRELATIVE 0x00000001
847     #define KSDSOUND_3D_MODE_DISABLE 0x00000002
848    
849     typedef struct {
850     KSDATARANGE DataRange;
851     ULONG MaximumChannels;
852     ULONG MinimumBitsPerSample;
853     ULONG MaximumBitsPerSample;
854     ULONG MinimumSampleFrequency;
855     ULONG MaximumSampleFrequency;
856     } KSDATARANGE_AUDIO, *PKSDATARANGE_AUDIO;
857    
858     //---------------------------------------------------------------------------
859    
860     #define STATIC_KSDATAFORMAT_SUBTYPE_RIFF\
861     0x4995DAEEL, 0x9EE6, 0x11D0, 0xA4, 0x0E, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
862     DEFINE_GUIDSTRUCT("4995DAEE-9EE6-11D0-A40E-00A0C9223196", KSDATAFORMAT_SUBTYPE_RIFF);
863     #define KSDATAFORMAT_SUBTYPE_RIFF DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RIFF)
864    
865     #define STATIC_KSDATAFORMAT_SUBTYPE_RIFFWAVE\
866     0xe436eb8bL, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70
867     DEFINE_GUIDSTRUCT("e436eb8b-524f-11ce-9f53-0020af0ba770", KSDATAFORMAT_SUBTYPE_RIFFWAVE);
868     #define KSDATAFORMAT_SUBTYPE_RIFFWAVE DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RIFFWAVE)
869    
870     //===========================================================================
871     //===========================================================================
872    
873     #define STATIC_KSPROPSETID_Bibliographic \
874     0x07BA150EL, 0xE2B1, 0x11D0, 0xAC, 0x17, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
875     DEFINE_GUIDSTRUCT("07BA150E-E2B1-11D0-AC17-00A0C9223196", KSPROPSETID_Bibliographic);
876     #define KSPROPSETID_Bibliographic DEFINE_GUIDNAMED(KSPROPSETID_Bibliographic)
877    
878     //Repeatable tags contain all entries within the property, each preceeded by length
879     typedef enum {
880     KSPROPERTY_BIBLIOGRAPHIC_LEADER = 'RDL ',
881     KSPROPERTY_BIBLIOGRAPHIC_LCCN = '010 ',
882     KSPROPERTY_BIBLIOGRAPHIC_ISBN = '020 ',
883     KSPROPERTY_BIBLIOGRAPHIC_ISSN = '220 ',
884     KSPROPERTY_BIBLIOGRAPHIC_CATALOGINGSOURCE = '040 ',
885     KSPROPERTY_BIBLIOGRAPHIC_MAINPERSONALNAME = '001 ',
886     KSPROPERTY_BIBLIOGRAPHIC_MAINCORPORATEBODY = '011 ',
887     KSPROPERTY_BIBLIOGRAPHIC_MAINMEETINGNAME = '111 ',
888     KSPROPERTY_BIBLIOGRAPHIC_MAINUNIFORMTITLE = '031 ',
889     KSPROPERTY_BIBLIOGRAPHIC_UNIFORMTITLE = '042 ',
890     KSPROPERTY_BIBLIOGRAPHIC_TITLESTATEMENT = '542 ',
891     KSPROPERTY_BIBLIOGRAPHIC_VARYINGFORMTITLE = '642 ',
892     KSPROPERTY_BIBLIOGRAPHIC_PUBLICATION = '062 ',
893     KSPROPERTY_BIBLIOGRAPHIC_PHYSICALDESCRIPTION = '003 ',
894     KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYTITLE = '044 ',
895     KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENT = '094 ',
896     KSPROPERTY_BIBLIOGRAPHIC_GENERALNOTE = '005 ',
897     KSPROPERTY_BIBLIOGRAPHIC_BIBLIOGRAPHYNOTE = '405 ',
898     KSPROPERTY_BIBLIOGRAPHIC_CONTENTSNOTE = '505 ',
899     KSPROPERTY_BIBLIOGRAPHIC_CREATIONCREDIT = '805 ',
900     KSPROPERTY_BIBLIOGRAPHIC_CITATION = '015 ',
901     KSPROPERTY_BIBLIOGRAPHIC_PARTICIPANT = '115 ',
902     KSPROPERTY_BIBLIOGRAPHIC_SUMMARY = '025 ',
903     KSPROPERTY_BIBLIOGRAPHIC_TARGETAUDIENCE = '125 ',
904     KSPROPERTY_BIBLIOGRAPHIC_ADDEDFORMAVAILABLE = '035 ',
905     KSPROPERTY_BIBLIOGRAPHIC_SYSTEMDETAILS = '835 ',
906     KSPROPERTY_BIBLIOGRAPHIC_AWARDS = '685 ',
907     KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYPERSONALNAME = '006 ',
908     KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYTOPICALTERM = '056 ',
909     KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYGEOGRAPHIC = '156 ',
910     KSPROPERTY_BIBLIOGRAPHIC_INDEXTERMGENRE = '556 ',
911     KSPROPERTY_BIBLIOGRAPHIC_INDEXTERMCURRICULUM = '856 ',
912     KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYUNIFORMTITLE = '037 ',
913     KSPROPERTY_BIBLIOGRAPHIC_ADDEDENTRYRELATED = '047 ',
914     KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENTPERSONALNAME = '008 ',
915     KSPROPERTY_BIBLIOGRAPHIC_SERIESSTATEMENTUNIFORMTITLE = '038 '
916     } KSPROPERTY_BIBLIOGRAPHIC;
917    
918     #define STATIC_KSPROPSETID_TopologyNode\
919     0x45FFAAA1L, 0x6E1B, 0x11D0, 0xBC, 0xF2, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00
920     DEFINE_GUIDSTRUCT("45FFAAA1-6E1B-11D0-BCF2-444553540000", KSPROPSETID_TopologyNode);
921     #define KSPROPSETID_TopologyNode DEFINE_GUIDNAMED(KSPROPSETID_TopologyNode)
922    
923     typedef enum {
924     KSPROPERTY_TOPOLOGYNODE_ENABLE = 1,
925     KSPROPERTY_TOPOLOGYNODE_RESET
926     } KSPROPERTY_TOPOLOGYNODE;
927    
928     //===========================================================================
929     #define STATIC_KSPROPSETID_DrmAudioStream\
930     0x2f2c8ddd, 0x4198, 0x4fac, 0xba, 0x29, 0x61, 0xbb, 0x5, 0xb7, 0xde, 0x6
931     DEFINE_GUIDSTRUCT("2F2C8DDD-4198-4fac-BA29-61BB05B7DE06", KSPROPSETID_DrmAudioStream);
932     #define KSPROPSETID_DrmAudioStream DEFINE_GUIDNAMED(KSPROPSETID_DrmAudioStream)
933    
934     typedef enum {
935     KSPROPERTY_DRMAUDIOSTREAM_CONTENTID,
936     KSPROPERTY_DRMAUDIOSTREAM_AUTHENTICATEFUNCTION
937     } KSPROPERTY_DRMAUDIOSTREAM;
938    
939     //===========================================================================
940     #define STATIC_KSPROPSETID_Audio\
941     0x45FFAAA0L, 0x6E1B, 0x11D0, 0xBC, 0xF2, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00
942     DEFINE_GUIDSTRUCT("45FFAAA0-6E1B-11D0-BCF2-444553540000", KSPROPSETID_Audio);
943     #define KSPROPSETID_Audio DEFINE_GUIDNAMED(KSPROPSETID_Audio)
944    
945     typedef enum {
946     KSPROPERTY_AUDIO_LATENCY = 1,
947     KSPROPERTY_AUDIO_COPY_PROTECTION,
948     KSPROPERTY_AUDIO_CHANNEL_CONFIG,
949     KSPROPERTY_AUDIO_VOLUMELEVEL,
950     KSPROPERTY_AUDIO_POSITION,
951     KSPROPERTY_AUDIO_DYNAMIC_RANGE,
952     KSPROPERTY_AUDIO_QUALITY,
953     KSPROPERTY_AUDIO_SAMPLING_RATE,
954     KSPROPERTY_AUDIO_DYNAMIC_SAMPLING_RATE,
955     KSPROPERTY_AUDIO_MIX_LEVEL_TABLE,
956     KSPROPERTY_AUDIO_MIX_LEVEL_CAPS,
957     KSPROPERTY_AUDIO_MUX_SOURCE,
958     KSPROPERTY_AUDIO_MUTE,
959     KSPROPERTY_AUDIO_BASS,
960     KSPROPERTY_AUDIO_MID,
961     KSPROPERTY_AUDIO_TREBLE,
962     KSPROPERTY_AUDIO_BASS_BOOST,
963     KSPROPERTY_AUDIO_EQ_LEVEL,
964     KSPROPERTY_AUDIO_NUM_EQ_BANDS,
965     KSPROPERTY_AUDIO_EQ_BANDS,
966     KSPROPERTY_AUDIO_AGC,
967     KSPROPERTY_AUDIO_DELAY,
968     KSPROPERTY_AUDIO_LOUDNESS,
969     KSPROPERTY_AUDIO_WIDE_MODE,
970     KSPROPERTY_AUDIO_WIDENESS,
971     KSPROPERTY_AUDIO_REVERB_LEVEL,
972     KSPROPERTY_AUDIO_CHORUS_LEVEL,
973     KSPROPERTY_AUDIO_DEV_SPECIFIC,
974     KSPROPERTY_AUDIO_DEMUX_DEST,
975     KSPROPERTY_AUDIO_STEREO_ENHANCE,
976     KSPROPERTY_AUDIO_MANUFACTURE_GUID,
977     KSPROPERTY_AUDIO_PRODUCT_GUID,
978     KSPROPERTY_AUDIO_CPU_RESOURCES,
979     KSPROPERTY_AUDIO_STEREO_SPEAKER_GEOMETRY,
980     KSPROPERTY_AUDIO_SURROUND_ENCODE,
981     KSPROPERTY_AUDIO_3D_INTERFACE,
982     KSPROPERTY_AUDIO_PEAKMETER,
983     KSPROPERTY_AUDIO_ALGORITHM_INSTANCE
984     } KSPROPERTY_AUDIO;
985    
986     // Audio quality constants
987     #define KSAUDIO_QUALITY_WORST 0x0
988     #define KSAUDIO_QUALITY_PC 0x1
989     #define KSAUDIO_QUALITY_BASIC 0x2
990     #define KSAUDIO_QUALITY_ADVANCED 0x3
991    
992     // Audio CPU resource constants
993     #define KSAUDIO_CPU_RESOURCES_NOT_HOST_CPU 0x00000000
994     #define KSAUDIO_CPU_RESOURCES_HOST_CPU 0x7FFFFFFF
995    
996     typedef struct {
997     BOOL fCopyrighted;
998     BOOL fOriginal;
999     } KSAUDIO_COPY_PROTECTION, *PKSAUDIO_COPY_PROTECTION;
1000    
1001     typedef struct {
1002     LONG ActiveSpeakerPositions;
1003     } KSAUDIO_CHANNEL_CONFIG, *PKSAUDIO_CHANNEL_CONFIG;
1004    
1005     // Speaker Positions:
1006     #define SPEAKER_FRONT_LEFT 0x1
1007     #define SPEAKER_FRONT_RIGHT 0x2
1008     #define SPEAKER_FRONT_CENTER 0x4
1009     #define SPEAKER_LOW_FREQUENCY 0x8
1010     #define SPEAKER_BACK_LEFT 0x10
1011     #define SPEAKER_BACK_RIGHT 0x20
1012     #define SPEAKER_FRONT_LEFT_OF_CENTER 0x40
1013     #define SPEAKER_FRONT_RIGHT_OF_CENTER 0x80
1014     #define SPEAKER_BACK_CENTER 0x100
1015     #define SPEAKER_SIDE_LEFT 0x200
1016     #define SPEAKER_SIDE_RIGHT 0x400
1017     #define SPEAKER_TOP_CENTER 0x800
1018     #define SPEAKER_TOP_FRONT_LEFT 0x1000
1019     #define SPEAKER_TOP_FRONT_CENTER 0x2000
1020     #define SPEAKER_TOP_FRONT_RIGHT 0x4000
1021     #define SPEAKER_TOP_BACK_LEFT 0x8000
1022     #define SPEAKER_TOP_BACK_CENTER 0x10000
1023     #define SPEAKER_TOP_BACK_RIGHT 0x20000
1024    
1025     // Bit mask locations reserved for future use
1026     #define SPEAKER_RESERVED 0x7FFC0000
1027    
1028     // Used to specify that any possible permutation of speaker configurations
1029     #define SPEAKER_ALL 0x80000000
1030    
1031     // DirectSound Speaker Config
1032     #define KSAUDIO_SPEAKER_MONO (SPEAKER_FRONT_CENTER)
1033     #define KSAUDIO_SPEAKER_STEREO (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT)
1034     #define KSAUDIO_SPEAKER_QUAD (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \
1035     SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT)
1036     #define KSAUDIO_SPEAKER_SURROUND (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \
1037     SPEAKER_FRONT_CENTER | SPEAKER_BACK_CENTER)
1038     #define KSAUDIO_SPEAKER_5POINT1 (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \
1039     SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | \
1040     SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT)
1041     #define KSAUDIO_SPEAKER_7POINT1 (SPEAKER_FRONT_LEFT | SPEAKER_FRONT_RIGHT | \
1042     SPEAKER_FRONT_CENTER | SPEAKER_LOW_FREQUENCY | \
1043     SPEAKER_BACK_LEFT | SPEAKER_BACK_RIGHT | \
1044     SPEAKER_FRONT_LEFT_OF_CENTER | SPEAKER_FRONT_RIGHT_OF_CENTER)
1045    
1046     // DVD Speaker Positions
1047     #define KSAUDIO_SPEAKER_GROUND_FRONT_LEFT SPEAKER_FRONT_LEFT
1048     #define KSAUDIO_SPEAKER_GROUND_FRONT_CENTER SPEAKER_FRONT_CENTER
1049     #define KSAUDIO_SPEAKER_GROUND_FRONT_RIGHT SPEAKER_FRONT_RIGHT
1050     #define KSAUDIO_SPEAKER_GROUND_REAR_LEFT SPEAKER_BACK_LEFT
1051     #define KSAUDIO_SPEAKER_GROUND_REAR_RIGHT SPEAKER_BACK_RIGHT
1052     #define KSAUDIO_SPEAKER_TOP_MIDDLE SPEAKER_TOP_CENTER
1053     #define KSAUDIO_SPEAKER_SUPER_WOOFER SPEAKER_LOW_FREQUENCY
1054    
1055     typedef struct {
1056     ULONG QuietCompression;
1057     ULONG LoudCompression;
1058     } KSAUDIO_DYNAMIC_RANGE, *PKSAUDIO_DYNAMIC_RANGE;
1059    
1060     typedef struct {
1061     BOOL Mute;
1062     LONG Level;
1063     } KSAUDIO_MIXLEVEL, *PKSAUDIO_MIXLEVEL;
1064    
1065     typedef struct {
1066     BOOL Mute;
1067     LONG Minimum;
1068     LONG Maximum;
1069     LONG Reset;
1070     } KSAUDIO_MIX_CAPS, *PKSAUDIO_MIX_CAPS;
1071    
1072     typedef struct {
1073     ULONG InputChannels;
1074     ULONG OutputChannels;
1075     KSAUDIO_MIX_CAPS Capabilities[1];
1076     } KSAUDIO_MIXCAP_TABLE, *PKSAUDIO_MIXCAP_TABLE;
1077    
1078     typedef enum {
1079     SE_TECH_NONE,
1080     SE_TECH_ANALOG_DEVICES_PHAT,
1081     SE_TECH_CREATIVE,
1082     SE_TECH_NATIONAL_SEMI,
1083     SE_TECH_YAMAHA_YMERSION,
1084     SE_TECH_BBE,
1085     SE_TECH_CRYSTAL_SEMI,
1086     SE_TECH_QSOUND_QXPANDER,
1087     SE_TECH_SPATIALIZER,
1088     SE_TECH_SRS,
1089     SE_TECH_PLATFORM_TECH,
1090     SE_TECH_AKM,
1091     SE_TECH_AUREAL,
1092     SE_TECH_AZTECH,
1093     SE_TECH_BINAURA,
1094     SE_TECH_ESS_TECH,
1095     SE_TECH_HARMAN_VMAX,
1096     SE_TECH_NVIDEA,
1097     SE_TECH_PHILIPS_INCREDIBLE,
1098     SE_TECH_TEXAS_INST,
1099     SE_TECH_VLSI_TECH
1100     } SE_TECHNIQUE;
1101    
1102     typedef struct {
1103     SE_TECHNIQUE Technique;
1104     ULONG Center;
1105     ULONG Depth;
1106     ULONG Reserved;
1107     } KSAUDIO_STEREO_ENHANCE, *PKSAUDIO_STEREO_ENHANCE;
1108    
1109     //===========================================================================
1110     // Topology Node Type GUIDs
1111    
1112     #define STATIC_KSNODETYPE_DAC\
1113     0x507AE360L, 0xC554, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
1114     DEFINE_GUIDSTRUCT("507AE360-C554-11D0-8A2B-00A0C9255AC1", KSNODETYPE_DAC);
1115     #define KSNODETYPE_DAC DEFINE_GUIDNAMED(KSNODETYPE_DAC)
1116    
1117     #define STATIC_KSNODETYPE_ADC\
1118     0x4D837FE0L, 0xC555, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
1119     DEFINE_GUIDSTRUCT("4D837FE0-C555-11D0-8A2B-00A0C9255AC1", KSNODETYPE_ADC);
1120     #define KSNODETYPE_ADC DEFINE_GUIDNAMED(KSNODETYPE_ADC)
1121    
1122     #define STATIC_KSNODETYPE_SRC\
1123     0x9DB7B9E0L, 0xC555, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
1124     DEFINE_GUIDSTRUCT("9DB7B9E0-C555-11D0-8A2B-00A0C9255AC1", KSNODETYPE_SRC);
1125     #define KSNODETYPE_SRC DEFINE_GUIDNAMED(KSNODETYPE_SRC)
1126    
1127     #define STATIC_KSNODETYPE_SUPERMIX\
1128     0xE573ADC0L, 0xC555, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
1129     DEFINE_GUIDSTRUCT("E573ADC0-C555-11D0-8A2B-00A0C9255AC1", KSNODETYPE_SUPERMIX);
1130     #define KSNODETYPE_SUPERMIX DEFINE_GUIDNAMED(KSNODETYPE_SUPERMIX)
1131    
1132     #define STATIC_KSNODETYPE_MUX\
1133     0x2CEAF780L, 0xC556, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
1134     DEFINE_GUIDSTRUCT("2CEAF780-C556-11D0-8A2B-00A0C9255AC1", KSNODETYPE_MUX);
1135     #define KSNODETYPE_MUX DEFINE_GUIDNAMED(KSNODETYPE_MUX)
1136    
1137     #define STATIC_KSNODETYPE_DEMUX\
1138     0xC0EB67D4L, 0xE807, 0x11D0, 0x95, 0x8A, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1139     DEFINE_GUIDSTRUCT("C0EB67D4-E807-11D0-958A-00C04FB925D3", KSNODETYPE_DEMUX);
1140     #define KSNODETYPE_DEMUX DEFINE_GUIDNAMED(KSNODETYPE_DEMUX)
1141    
1142     #define STATIC_KSNODETYPE_SUM\
1143     0xDA441A60L, 0xC556, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
1144     DEFINE_GUIDSTRUCT("DA441A60-C556-11D0-8A2B-00A0C9255AC1", KSNODETYPE_SUM);
1145     #define KSNODETYPE_SUM DEFINE_GUIDNAMED(KSNODETYPE_SUM)
1146    
1147     #define STATIC_KSNODETYPE_MUTE\
1148     0x02B223C0L, 0xC557, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
1149     DEFINE_GUIDSTRUCT("02B223C0-C557-11D0-8A2B-00A0C9255AC1", KSNODETYPE_MUTE);
1150     #define KSNODETYPE_MUTE DEFINE_GUIDNAMED(KSNODETYPE_MUTE)
1151    
1152     #define STATIC_KSNODETYPE_VOLUME\
1153     0x3A5ACC00L, 0xC557, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
1154     DEFINE_GUIDSTRUCT("3A5ACC00-C557-11D0-8A2B-00A0C9255AC1", KSNODETYPE_VOLUME);
1155     #define KSNODETYPE_VOLUME DEFINE_GUIDNAMED(KSNODETYPE_VOLUME)
1156    
1157     #define STATIC_KSNODETYPE_TONE\
1158     0x7607E580L, 0xC557, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
1159     DEFINE_GUIDSTRUCT("7607E580-C557-11D0-8A2B-00A0C9255AC1", KSNODETYPE_TONE);
1160     #define KSNODETYPE_TONE DEFINE_GUIDNAMED(KSNODETYPE_TONE)
1161    
1162     #define STATIC_KSNODETYPE_EQUALIZER\
1163     0x9D41B4A0L, 0xC557, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
1164     DEFINE_GUIDSTRUCT("9D41B4A0-C557-11D0-8A2B-00A0C9255AC1", KSNODETYPE_EQUALIZER);
1165     #define KSNODETYPE_EQUALIZER DEFINE_GUIDNAMED(KSNODETYPE_EQUALIZER)
1166    
1167     #define STATIC_KSNODETYPE_AGC\
1168     0xE88C9BA0L, 0xC557, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
1169     DEFINE_GUIDSTRUCT("E88C9BA0-C557-11D0-8A2B-00A0C9255AC1", KSNODETYPE_AGC);
1170     #define KSNODETYPE_AGC DEFINE_GUIDNAMED(KSNODETYPE_AGC)
1171    
1172     #define STATIC_KSNODETYPE_NOISE_SUPPRESS\
1173     0xe07f903f, 0x62fd, 0x4e60, 0x8c, 0xdd, 0xde, 0xa7, 0x23, 0x66, 0x65, 0xb5
1174     DEFINE_GUIDSTRUCT("E07F903F-62FD-4e60-8CDD-DEA7236665B5", KSNODETYPE_NOISE_SUPPRESS);
1175     #define KSNODETYPE_NOISE_SUPPRESS DEFINE_GUIDNAMED(KSNODETYPE_NOISE_SUPPRESS)
1176    
1177     #define STATIC_KSNODETYPE_DELAY\
1178     0x144981E0L, 0xC558, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
1179     DEFINE_GUIDSTRUCT("144981E0-C558-11D0-8A2B-00A0C9255AC1", KSNODETYPE_DELAY);
1180     #define KSNODETYPE_DELAY DEFINE_GUIDNAMED(KSNODETYPE_DELAY)
1181    
1182     #define STATIC_KSNODETYPE_LOUDNESS\
1183     0x41887440L, 0xC558, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
1184     DEFINE_GUIDSTRUCT("41887440-C558-11D0-8A2B-00A0C9255AC1", KSNODETYPE_LOUDNESS);
1185     #define KSNODETYPE_LOUDNESS DEFINE_GUIDNAMED(KSNODETYPE_LOUDNESS)
1186    
1187     #define STATIC_KSNODETYPE_PROLOGIC_DECODER\
1188     0x831C2C80L, 0xC558, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
1189     DEFINE_GUIDSTRUCT("831C2C80-C558-11D0-8A2B-00A0C9255AC1", KSNODETYPE_PROLOGIC_DECODER);
1190     #define KSNODETYPE_PROLOGIC_DECODER DEFINE_GUIDNAMED(KSNODETYPE_PROLOGIC_DECODER)
1191    
1192     #define STATIC_KSNODETYPE_STEREO_WIDE\
1193     0xA9E69800L, 0xC558, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
1194     DEFINE_GUIDSTRUCT("A9E69800-C558-11D0-8A2B-00A0C9255AC1", KSNODETYPE_STEREO_WIDE);
1195     #define KSNODETYPE_STEREO_WIDE DEFINE_GUIDNAMED(KSNODETYPE_STEREO_WIDE)
1196    
1197     #define STATIC_KSNODETYPE_STEREO_ENHANCE\
1198     0xAF6878ACL, 0xE83F, 0x11D0, 0x95, 0x8A, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1199     DEFINE_GUIDSTRUCT("AF6878AC-E83F-11D0-958A-00C04FB925D3", KSNODETYPE_STEREO_ENHANCE);
1200     #define KSNODETYPE_STEREO_ENHANCE DEFINE_GUIDNAMED(KSNODETYPE_STEREO_ENHANCE)
1201    
1202     #define STATIC_KSNODETYPE_REVERB\
1203     0xEF0328E0L, 0xC558, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
1204     DEFINE_GUIDSTRUCT("EF0328E0-C558-11D0-8A2B-00A0C9255AC1", KSNODETYPE_REVERB);
1205     #define KSNODETYPE_REVERB DEFINE_GUIDNAMED(KSNODETYPE_REVERB)
1206    
1207     #define STATIC_KSNODETYPE_CHORUS\
1208     0x20173F20L, 0xC559, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
1209     DEFINE_GUIDSTRUCT("20173F20-C559-11D0-8A2B-00A0C9255AC1", KSNODETYPE_CHORUS);
1210     #define KSNODETYPE_CHORUS DEFINE_GUIDNAMED(KSNODETYPE_CHORUS)
1211    
1212     #define STATIC_KSNODETYPE_3D_EFFECTS\
1213     0x55515860L, 0xC559, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
1214     DEFINE_GUIDSTRUCT("55515860-C559-11D0-8A2B-00A0C9255AC1", KSNODETYPE_3D_EFFECTS);
1215     #define KSNODETYPE_3D_EFFECTS DEFINE_GUIDNAMED(KSNODETYPE_3D_EFFECTS)
1216    
1217     #define STATIC_KSNODETYPE_ACOUSTIC_ECHO_CANCEL STATIC_KSCATEGORY_ACOUSTIC_ECHO_CANCEL
1218     #define KSNODETYPE_ACOUSTIC_ECHO_CANCEL KSCATEGORY_ACOUSTIC_ECHO_CANCEL
1219    
1220     #define STATIC_KSNODETYPE_MICROPHONE_ARRAY_PROCESSOR STATIC_KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR
1221     #define KSNODETYPE_MICROPHONE_ARRAY_PROCESSOR KSCATEGORY_MICROPHONE_ARRAY_PROCESSOR
1222    
1223     #define STATIC_KSNODETYPE_DEV_SPECIFIC\
1224     0x941C7AC0L, 0xC559, 0x11D0, 0x8A, 0x2B, 0x00, 0xA0, 0xC9, 0x25, 0x5A, 0xC1
1225     DEFINE_GUIDSTRUCT("941C7AC0-C559-11D0-8A2B-00A0C9255AC1", KSNODETYPE_DEV_SPECIFIC);
1226     #define KSNODETYPE_DEV_SPECIFIC DEFINE_GUIDNAMED(KSNODETYPE_DEV_SPECIFIC)
1227    
1228     #define STATIC_KSNODETYPE_SURROUND_ENCODER\
1229     0x8074C5B2L, 0x3C66, 0x11D2, 0xB4, 0x5A, 0x30, 0x78, 0x30, 0x2C, 0x20, 0x30
1230     DEFINE_GUIDSTRUCT("8074C5B2-3C66-11D2-B45A-3078302C2030", KSNODETYPE_SURROUND_ENCODER);
1231     #define KSNODETYPE_SURROUND_ENCODER DEFINE_GUIDNAMED(KSNODETYPE_SURROUND_ENCODER)
1232    
1233     #define STATIC_KSNODETYPE_PEAKMETER\
1234     0xa085651eL, 0x5f0d, 0x4b36, 0xa8, 0x69, 0xd1, 0x95, 0xd6, 0xab, 0x4b, 0x9e
1235     DEFINE_GUIDSTRUCT("A085651E-5F0D-4b36-A869-D195D6AB4B9E", KSNODETYPE_PEAKMETER);
1236     #define KSNODETYPE_PEAKMETER DEFINE_GUIDNAMED(KSNODETYPE_PEAKMETER)
1237    
1238     //===========================================================================
1239     // Topology Node Name GUIDs for common audio nodes
1240     #define STATIC_KSAUDFNAME_BASS\
1241     0x185FEDE0L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1242     DEFINE_GUIDSTRUCT("185FEDE0-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_BASS);
1243     #define KSAUDFNAME_BASS DEFINE_GUIDNAMED(KSAUDFNAME_BASS)
1244    
1245     #define STATIC_KSAUDFNAME_TREBLE\
1246     0x185FEDE1L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1247     DEFINE_GUIDSTRUCT("185FEDE1-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_TREBLE);
1248     #define KSAUDFNAME_TREBLE DEFINE_GUIDNAMED(KSAUDFNAME_TREBLE)
1249    
1250     #define STATIC_KSAUDFNAME_3D_STEREO\
1251     0x185FEDE2L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1252     DEFINE_GUIDSTRUCT("185FEDE2-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_3D_STEREO);
1253     #define KSAUDFNAME_3D_STEREO DEFINE_GUIDNAMED(KSAUDFNAME_3D_STEREO)
1254    
1255     #define STATIC_KSAUDFNAME_MASTER_VOLUME\
1256     0x185FEDE3L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1257     DEFINE_GUIDSTRUCT("185FEDE3-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MASTER_VOLUME);
1258     #define KSAUDFNAME_MASTER_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MASTER_VOLUME)
1259    
1260     #define STATIC_KSAUDFNAME_MASTER_MUTE\
1261     0x185FEDE4L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1262     DEFINE_GUIDSTRUCT("185FEDE4-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MASTER_MUTE);
1263     #define KSAUDFNAME_MASTER_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MASTER_MUTE)
1264    
1265     #define STATIC_KSAUDFNAME_WAVE_VOLUME\
1266     0x185FEDE5L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1267     DEFINE_GUIDSTRUCT("185FEDE5-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_WAVE_VOLUME);
1268     #define KSAUDFNAME_WAVE_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_VOLUME)
1269    
1270     #define STATIC_KSAUDFNAME_WAVE_MUTE\
1271     0x185FEDE6L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1272     DEFINE_GUIDSTRUCT("185FEDE6-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_WAVE_MUTE);
1273     #define KSAUDFNAME_WAVE_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_MUTE)
1274    
1275     #define STATIC_KSAUDFNAME_MIDI_VOLUME\
1276     0x185FEDE7L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1277     DEFINE_GUIDSTRUCT("185FEDE7-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIDI_VOLUME);
1278     #define KSAUDFNAME_MIDI_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIDI_VOLUME)
1279    
1280     #define STATIC_KSAUDFNAME_MIDI_MUTE\
1281     0x185FEDE8L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1282     DEFINE_GUIDSTRUCT("185FEDE8-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIDI_MUTE);
1283     #define KSAUDFNAME_MIDI_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MIDI_MUTE)
1284    
1285     #define STATIC_KSAUDFNAME_CD_VOLUME\
1286     0x185FEDE9L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1287     DEFINE_GUIDSTRUCT("185FEDE9-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_CD_VOLUME);
1288     #define KSAUDFNAME_CD_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_CD_VOLUME)
1289    
1290     #define STATIC_KSAUDFNAME_CD_MUTE\
1291     0x185FEDEAL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1292     DEFINE_GUIDSTRUCT("185FEDEA-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_CD_MUTE);
1293     #define KSAUDFNAME_CD_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_CD_MUTE)
1294    
1295     #define STATIC_KSAUDFNAME_LINE_VOLUME\
1296     0x185FEDEBL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1297     DEFINE_GUIDSTRUCT("185FEDEB-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_LINE_VOLUME);
1298     #define KSAUDFNAME_LINE_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_LINE_VOLUME)
1299    
1300     #define STATIC_KSAUDFNAME_LINE_MUTE\
1301     0x185FEDECL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1302     DEFINE_GUIDSTRUCT("185FEDEC-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_LINE_MUTE);
1303     #define KSAUDFNAME_LINE_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_LINE_MUTE)
1304    
1305     #define STATIC_KSAUDFNAME_MIC_VOLUME\
1306     0x185FEDEDL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1307     DEFINE_GUIDSTRUCT("185FEDED-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIC_VOLUME);
1308     #define KSAUDFNAME_MIC_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIC_VOLUME)
1309    
1310     #define STATIC_KSAUDFNAME_MIC_MUTE\
1311     0x185FEDEEL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1312     DEFINE_GUIDSTRUCT("185FEDEE-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIC_MUTE);
1313     #define KSAUDFNAME_MIC_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MIC_MUTE)
1314    
1315     #define STATIC_KSAUDFNAME_RECORDING_SOURCE\
1316     0x185FEDEFL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1317     DEFINE_GUIDSTRUCT("185FEDEF-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_RECORDING_SOURCE);
1318     #define KSAUDFNAME_RECORDING_SOURCE DEFINE_GUIDNAMED(KSAUDFNAME_RECORDING_SOURCE)
1319    
1320     #define STATIC_KSAUDFNAME_PC_SPEAKER_VOLUME\
1321     0x185FEDF0L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1322     DEFINE_GUIDSTRUCT("185FEDF0-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_PC_SPEAKER_VOLUME);
1323     #define KSAUDFNAME_PC_SPEAKER_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_PC_SPEAKER_VOLUME)
1324    
1325     #define STATIC_KSAUDFNAME_PC_SPEAKER_MUTE\
1326     0x185FEDF1L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1327     DEFINE_GUIDSTRUCT("185FEDF1-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_PC_SPEAKER_MUTE);
1328     #define KSAUDFNAME_PC_SPEAKER_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_PC_SPEAKER_MUTE)
1329    
1330     #define STATIC_KSAUDFNAME_MIDI_IN_VOLUME\
1331     0x185FEDF2L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1332     DEFINE_GUIDSTRUCT("185FEDF2-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIDI_IN_VOLUME);
1333     #define KSAUDFNAME_MIDI_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIDI_IN_VOLUME)
1334    
1335     #define STATIC_KSAUDFNAME_CD_IN_VOLUME\
1336     0x185FEDF3L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1337     DEFINE_GUIDSTRUCT("185FEDF3-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_CD_IN_VOLUME);
1338     #define KSAUDFNAME_CD_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_CD_IN_VOLUME)
1339    
1340     #define STATIC_KSAUDFNAME_LINE_IN_VOLUME\
1341     0x185FEDF4L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1342     DEFINE_GUIDSTRUCT("185FEDF4-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_LINE_IN_VOLUME);
1343     #define KSAUDFNAME_LINE_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_LINE_IN_VOLUME)
1344    
1345     #define STATIC_KSAUDFNAME_MIC_IN_VOLUME\
1346     0x185FEDF5L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1347     DEFINE_GUIDSTRUCT("185FEDF5-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIC_IN_VOLUME);
1348     #define KSAUDFNAME_MIC_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MIC_IN_VOLUME)
1349    
1350     #define STATIC_KSAUDFNAME_WAVE_IN_VOLUME\
1351     0x185FEDF6L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1352     DEFINE_GUIDSTRUCT("185FEDF6-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_WAVE_IN_VOLUME);
1353     #define KSAUDFNAME_WAVE_IN_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_IN_VOLUME)
1354    
1355     #define STATIC_KSAUDFNAME_VOLUME_CONTROL\
1356     0x185FEDF7L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1357     DEFINE_GUIDSTRUCT("185FEDF7-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_VOLUME_CONTROL);
1358     #define KSAUDFNAME_VOLUME_CONTROL DEFINE_GUIDNAMED(KSAUDFNAME_VOLUME_CONTROL)
1359    
1360     #define STATIC_KSAUDFNAME_MIDI\
1361     0x185FEDF8L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1362     DEFINE_GUIDSTRUCT("185FEDF8-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_MIDI);
1363     #define KSAUDFNAME_MIDI DEFINE_GUIDNAMED(KSAUDFNAME_MIDI)
1364    
1365     #define STATIC_KSAUDFNAME_LINE_IN\
1366     0x185FEDF9L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1367     DEFINE_GUIDSTRUCT("185FEDF9-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_LINE_IN);
1368     #define KSAUDFNAME_LINE_IN DEFINE_GUIDNAMED(KSAUDFNAME_LINE_IN)
1369    
1370     #define STATIC_KSAUDFNAME_RECORDING_CONTROL\
1371     0x185FEDFAL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1372     DEFINE_GUIDSTRUCT("185FEDFA-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_RECORDING_CONTROL);
1373     #define KSAUDFNAME_RECORDING_CONTROL DEFINE_GUIDNAMED(KSAUDFNAME_RECORDING_CONTROL)
1374    
1375     #define STATIC_KSAUDFNAME_CD_AUDIO\
1376     0x185FEDFBL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1377     DEFINE_GUIDSTRUCT("185FEDFB-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_CD_AUDIO);
1378     #define KSAUDFNAME_CD_AUDIO DEFINE_GUIDNAMED(KSAUDFNAME_CD_AUDIO)
1379    
1380     #define STATIC_KSAUDFNAME_AUX_VOLUME\
1381     0x185FEDFCL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1382     DEFINE_GUIDSTRUCT("185FEDFC-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_AUX_VOLUME);
1383     #define KSAUDFNAME_AUX_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_AUX_VOLUME)
1384    
1385     #define STATIC_KSAUDFNAME_AUX_MUTE\
1386     0x185FEDFDL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1387     DEFINE_GUIDSTRUCT("185FEDFD-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_AUX_MUTE);
1388     #define KSAUDFNAME_AUX_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_AUX_MUTE)
1389    
1390     #define STATIC_KSAUDFNAME_AUX\
1391     0x185FEDFEL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1392     DEFINE_GUIDSTRUCT("185FEDFE-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_AUX);
1393     #define KSAUDFNAME_AUX DEFINE_GUIDNAMED(KSAUDFNAME_AUX)
1394    
1395     #define STATIC_KSAUDFNAME_PC_SPEAKER\
1396     0x185FEDFFL, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1397     DEFINE_GUIDSTRUCT("185FEDFF-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_PC_SPEAKER);
1398     #define KSAUDFNAME_PC_SPEAKER DEFINE_GUIDNAMED(KSAUDFNAME_PC_SPEAKER)
1399    
1400     #define STATIC_KSAUDFNAME_WAVE_OUT_MIX\
1401     0x185FEE00L, 0x9905, 0x11D1, 0x95, 0xA9, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1402     DEFINE_GUIDSTRUCT("185FEE00-9905-11D1-95A9-00C04FB925D3", KSAUDFNAME_WAVE_OUT_MIX);
1403     #define KSAUDFNAME_WAVE_OUT_MIX DEFINE_GUIDNAMED(KSAUDFNAME_WAVE_OUT_MIX)
1404    
1405     #define STATIC_KSAUDFNAME_MONO_OUT\
1406     0xf9b41dc3L, 0x96e2, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
1407     DEFINE_GUIDSTRUCT("F9B41DC3-96E2-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MONO_OUT);
1408     #define KSAUDFNAME_MONO_OUT DEFINE_GUIDNAMED(KSAUDFNAME_MONO_OUT)
1409    
1410     #define STATIC_KSAUDFNAME_STEREO_MIX\
1411     0xdff077L, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
1412     DEFINE_GUIDSTRUCT("00DFF077-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_STEREO_MIX);
1413     #define KSAUDFNAME_STEREO_MIX DEFINE_GUIDNAMED(KSAUDFNAME_STEREO_MIX)
1414    
1415     #define STATIC_KSAUDFNAME_MONO_MIX\
1416     0xdff078L, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
1417     DEFINE_GUIDSTRUCT("00DFF078-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MONO_MIX);
1418     #define KSAUDFNAME_MONO_MIX DEFINE_GUIDNAMED(KSAUDFNAME_MONO_MIX)
1419    
1420     #define STATIC_KSAUDFNAME_MONO_OUT_VOLUME\
1421     0x1ad247ebL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
1422     DEFINE_GUIDSTRUCT("1AD247EB-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MONO_OUT_VOLUME);
1423     #define KSAUDFNAME_MONO_OUT_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MONO_OUT_VOLUME)
1424    
1425     #define STATIC_KSAUDFNAME_MONO_OUT_MUTE\
1426     0x1ad247ecL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
1427     DEFINE_GUIDSTRUCT("1AD247EC-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MONO_OUT_MUTE);
1428     #define KSAUDFNAME_MONO_OUT_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MONO_OUT_MUTE)
1429    
1430     #define STATIC_KSAUDFNAME_STEREO_MIX_VOLUME\
1431     0x1ad247edL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
1432     DEFINE_GUIDSTRUCT("1AD247ED-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_STEREO_MIX_VOLUME);
1433     #define KSAUDFNAME_STEREO_MIX_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_STEREO_MIX_VOLUME)
1434    
1435     #define STATIC_KSAUDFNAME_STEREO_MIX_MUTE\
1436     0x22b0eafdL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
1437     DEFINE_GUIDSTRUCT("22B0EAFD-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_STEREO_MIX_MUTE);
1438     #define KSAUDFNAME_STEREO_MIX_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_STEREO_MIX_MUTE)
1439    
1440     #define STATIC_KSAUDFNAME_MONO_MIX_VOLUME\
1441     0x22b0eafeL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
1442     DEFINE_GUIDSTRUCT("22B0EAFE-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MONO_MIX_VOLUME);
1443     #define KSAUDFNAME_MONO_MIX_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_MONO_MIX_VOLUME)
1444    
1445     #define STATIC_KSAUDFNAME_MONO_MIX_MUTE\
1446     0x2bc31d69L, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
1447     DEFINE_GUIDSTRUCT("2BC31D69-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MONO_MIX_MUTE);
1448     #define KSAUDFNAME_MONO_MIX_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_MONO_MIX_MUTE)
1449    
1450     #define STATIC_KSAUDFNAME_MICROPHONE_BOOST\
1451     0x2bc31d6aL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
1452     DEFINE_GUIDSTRUCT("2BC31D6A-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_MICROPHONE_BOOST);
1453     #define KSAUDFNAME_MICROPHONE_BOOST DEFINE_GUIDNAMED(KSAUDFNAME_MICROPHONE_BOOST)
1454    
1455     #define STATIC_KSAUDFNAME_ALTERNATE_MICROPHONE\
1456     0x2bc31d6bL, 0x96e3, 0x11d2, 0xac, 0x4c, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
1457     DEFINE_GUIDSTRUCT("2BC31D6B-96E3-11d2-AC4C-00C04F8EFB68", KSAUDFNAME_ALTERNATE_MICROPHONE);
1458     #define KSAUDFNAME_ALTERNATE_MICROPHONE DEFINE_GUIDNAMED(KSAUDFNAME_ALTERNATE_MICROPHONE)
1459    
1460     #define STATIC_KSAUDFNAME_3D_DEPTH\
1461     0x63ff5747L, 0x991f, 0x11d2, 0xac, 0x4d, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
1462     DEFINE_GUIDSTRUCT("63FF5747-991F-11d2-AC4D-00C04F8EFB68", KSAUDFNAME_3D_DEPTH);
1463     #define KSAUDFNAME_3D_DEPTH DEFINE_GUIDNAMED(KSAUDFNAME_3D_DEPTH)
1464    
1465     #define STATIC_KSAUDFNAME_3D_CENTER\
1466     0x9f0670b4L, 0x991f, 0x11d2, 0xac, 0x4d, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
1467     DEFINE_GUIDSTRUCT("9F0670B4-991F-11d2-AC4D-00C04F8EFB68", KSAUDFNAME_3D_CENTER);
1468     #define KSAUDFNAME_3D_CENTER DEFINE_GUIDNAMED(KSAUDFNAME_3D_CENTER)
1469    
1470     #define STATIC_KSAUDFNAME_VIDEO_VOLUME\
1471     0x9b46e708L, 0x992a, 0x11d2, 0xac, 0x4d, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
1472     DEFINE_GUIDSTRUCT("9B46E708-992A-11d2-AC4D-00C04F8EFB68", KSAUDFNAME_VIDEO_VOLUME);
1473     #define KSAUDFNAME_VIDEO_VOLUME DEFINE_GUIDNAMED(KSAUDFNAME_VIDEO_VOLUME)
1474    
1475     #define STATIC_KSAUDFNAME_VIDEO_MUTE\
1476     0x9b46e709L, 0x992a, 0x11d2, 0xac, 0x4d, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
1477     DEFINE_GUIDSTRUCT("9B46E709-992A-11d2-AC4D-00C04F8EFB68", KSAUDFNAME_VIDEO_MUTE);
1478     #define KSAUDFNAME_VIDEO_MUTE DEFINE_GUIDNAMED(KSAUDFNAME_VIDEO_MUTE)
1479    
1480     #define STATIC_KSAUDFNAME_VIDEO\
1481     0x915daec4L, 0xa434, 0x11d2, 0xac, 0x52, 0x0, 0xc0, 0x4f, 0x8e, 0xfb, 0x68
1482     DEFINE_GUIDSTRUCT("915DAEC4-A434-11d2-AC52-00C04F8EFB68", KSAUDFNAME_VIDEO);
1483     #define KSAUDFNAME_VIDEO DEFINE_GUIDNAMED(KSAUDFNAME_VIDEO)
1484    
1485     #define STATIC_KSAUDFNAME_PEAKMETER\
1486     0x57e24340L, 0xfc5b, 0x4612, 0xa5, 0x62, 0x72, 0xb1, 0x1a, 0x29, 0xdf, 0xae
1487     DEFINE_GUIDSTRUCT("57E24340-FC5B-4612-A562-72B11A29DFAE", KSAUDFNAME_PEAKMETER);
1488     #define KSAUDFNAME_PEAKMETER DEFINE_GUIDNAMED(KSAUDFNAME_PEAKMETER)
1489    
1490     // Internal topology node pin definitions
1491    
1492     #define KSNODEPIN_STANDARD_IN 1
1493     #define KSNODEPIN_STANDARD_OUT 0
1494    
1495     #define KSNODEPIN_SUM_MUX_IN 1 // can be >= 1
1496     #define KSNODEPIN_SUM_MUX_OUT 0
1497    
1498     #define KSNODEPIN_DEMUX_IN 0
1499     #define KSNODEPIN_DEMUX_OUT 1 // can be >= 1
1500    
1501     #define KSNODEPIN_AEC_RENDER_IN 1
1502     #define KSNODEPIN_AEC_RENDER_OUT 0
1503     #define KSNODEPIN_AEC_CAPTURE_IN 2
1504     #define KSNODEPIN_AEC_CAPTURE_OUT 3
1505    
1506     //===========================================================================
1507     //===========================================================================
1508    
1509     #define STATIC_KSMETHODSETID_Wavetable\
1510     0xDCEF31EBL, 0xD907, 0x11D0, 0x95, 0x83, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1511     DEFINE_GUIDSTRUCT("DCEF31EB-D907-11D0-9583-00C04FB925D3", KSMETHODSETID_Wavetable);
1512     #define KSMETHODSETID_Wavetable DEFINE_GUIDNAMED(KSMETHODSETID_Wavetable)
1513    
1514     typedef enum {
1515     KSMETHOD_WAVETABLE_WAVE_ALLOC,
1516     KSMETHOD_WAVETABLE_WAVE_FREE,
1517     KSMETHOD_WAVETABLE_WAVE_FIND,
1518     KSMETHOD_WAVETABLE_WAVE_WRITE
1519     } KSMETHOD_WAVETABLE;
1520    
1521     typedef struct {
1522     KSIDENTIFIER Identifier; // wave identifier
1523     ULONG Size; // wave size
1524     BOOL Looped; // wave looped flag
1525     ULONG LoopPoint; // wave loop point
1526     BOOL InROM; // wave InROM flag
1527     KSDATAFORMAT Format; // wave format
1528     } KSWAVETABLE_WAVE_DESC, *PKSWAVETABLE_WAVE_DESC;
1529    
1530    
1531     //===========================================================================
1532     //===========================================================================
1533    
1534     /*
1535     Property sets and items
1536     */
1537    
1538     //===========================================================================
1539     //===========================================================================
1540    
1541     #define STATIC_KSPROPSETID_Itd3d\
1542     0x6429f090L, 0x9fd9, 0x11d0, 0xa7, 0x5b, 0x00, 0xa0, 0xc9, 0x03, 0x65, 0xe3
1543     DEFINE_GUIDSTRUCT("6429f090-9fd9-11d0-a75b-00a0c90365e3", KSPROPSETID_Itd3d);
1544     #define KSPROPSETID_Itd3d DEFINE_GUIDNAMED(KSPROPSETID_Itd3d)
1545    
1546     typedef enum {
1547     KSPROPERTY_ITD3D_PARAMS = 0
1548     } KSPROPERTY_ITD3D;
1549    
1550     //===========================================================================
1551     //===========================================================================
1552    
1553     #define STATIC_KSPROPSETID_Hrtf3d\
1554     0xb66decb0L, 0xa083, 0x11d0, 0x85, 0x1e, 0x00, 0xc0, 0x4f, 0xd9, 0xba, 0xf3
1555     DEFINE_GUIDSTRUCT("b66decb0-a083-11d0-851e-00c04fd9baf3", KSPROPSETID_Hrtf3d);
1556     #define KSPROPSETID_Hrtf3d DEFINE_GUIDNAMED(KSPROPSETID_Hrtf3d)
1557    
1558     typedef enum {
1559     KSPROPERTY_HRTF3D_PARAMS = 0,
1560     KSPROPERTY_HRTF3D_INITIALIZE,
1561     KSPROPERTY_HRTF3D_FILTER_FORMAT
1562     } KSPROPERTY_HRTF3D;
1563    
1564    
1565     //===========================================================================
1566     //===========================================================================
1567    
1568     #define STATIC_KSPROPSETID_Wave_Queued\
1569     0x16a15b10L, 0x16f0, 0x11d0, 0xa1, 0x95, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
1570     DEFINE_GUIDSTRUCT("16a15b10-16f0-11d0-a195-0020afd156e4", KSPROPSETID_Wave_Queued);
1571     #define KSPROPSETID_Wave_Queued DEFINE_GUIDNAMED(KSPROPSETID_Wave_Queued)
1572    
1573     #define KSPROPERTY_WAVE_QUEUED_POSITION 0x00000001
1574    
1575     #define STATIC_KSMETHODSETID_Wave_Queued\
1576     0x7432c160L, 0x8827, 0x11cf, 0xa1, 0x02, 0x00, 0x20, 0xaf, 0xd1, 0x56, 0xe4
1577     DEFINE_GUIDSTRUCT("7432c160-8827-11cf-a102-0020afd156e4", KSMETHODSETID_Wave_Queued);
1578     #define KSMETHODSETID_Wave_Queued DEFINE_GUIDNAMED(KSMETHODSETID_Wave_Queued)
1579    
1580     #define KSMETHOD_WAVE_QUEUED_BREAKLOOP 0x00000001
1581    
1582     #define STATIC_KSPROPSETID_Wave\
1583     0x924e54b0L, 0x630f, 0x11cf, 0xad, 0xa7, 0x08, 0x00, 0x3e, 0x30, 0x49, 0x4a
1584     DEFINE_GUIDSTRUCT("924e54b0-630f-11cf-ada7-08003e30494a", KSPROPSETID_Wave);
1585     #define KSPROPSETID_Wave DEFINE_GUIDNAMED(KSPROPSETID_Wave)
1586    
1587     typedef enum {
1588     KSPROPERTY_WAVE_COMPATIBLE_CAPABILITIES,
1589     KSPROPERTY_WAVE_INPUT_CAPABILITIES,
1590     KSPROPERTY_WAVE_OUTPUT_CAPABILITIES,
1591     KSPROPERTY_WAVE_BUFFER,
1592     KSPROPERTY_WAVE_FREQUENCY,
1593     KSPROPERTY_WAVE_VOLUME,
1594     KSPROPERTY_WAVE_PAN
1595     } KSPROPERTY_WAVE;
1596    
1597     typedef struct {
1598     ULONG ulDeviceType;
1599     } KSWAVE_COMPATCAPS, *PKSWAVE_COMPATCAPS;
1600    
1601     #define KSWAVE_COMPATCAPS_INPUT 0x00000000
1602     #define KSWAVE_COMPATCAPS_OUTPUT 0x00000001
1603    
1604     typedef struct {
1605     ULONG MaximumChannelsPerConnection;
1606     ULONG MinimumBitsPerSample;
1607     ULONG MaximumBitsPerSample;
1608     ULONG MinimumSampleFrequency;
1609     ULONG MaximumSampleFrequency;
1610     ULONG TotalConnections;
1611     ULONG ActiveConnections;
1612     } KSWAVE_INPUT_CAPABILITIES, *PKSWAVE_INPUT_CAPABILITIES;
1613    
1614     typedef struct {
1615     ULONG MaximumChannelsPerConnection;
1616     ULONG MinimumBitsPerSample;
1617     ULONG MaximumBitsPerSample;
1618     ULONG MinimumSampleFrequency;
1619     ULONG MaximumSampleFrequency;
1620     ULONG TotalConnections;
1621     ULONG StaticConnections;
1622     ULONG StreamingConnections;
1623     ULONG ActiveConnections;
1624     ULONG ActiveStaticConnections;
1625     ULONG ActiveStreamingConnections;
1626     ULONG Total3DConnections;
1627     ULONG Static3DConnections;
1628     ULONG Streaming3DConnections;
1629     ULONG Active3DConnections;
1630     ULONG ActiveStatic3DConnections;
1631     ULONG ActiveStreaming3DConnections;
1632     ULONG TotalSampleMemory;
1633     ULONG FreeSampleMemory;
1634     ULONG LargestFreeContiguousSampleMemory;
1635     } KSWAVE_OUTPUT_CAPABILITIES, *PKSWAVE_OUTPUT_CAPABILITIES;
1636    
1637     typedef struct {
1638     LONG LeftAttenuation;
1639     LONG RightAttenuation;
1640     } KSWAVE_VOLUME, *PKSWAVE_VOLUME;
1641    
1642     #define KSWAVE_BUFFER_ATTRIBUTEF_LOOPING 0x00000001
1643     #define KSWAVE_BUFFER_ATTRIBUTEF_STATIC 0x00000002
1644    
1645     typedef struct {
1646     ULONG Attributes;
1647     ULONG BufferSize;
1648     PVOID BufferAddress;
1649     } KSWAVE_BUFFER, *PKSWAVE_BUFFER;
1650    
1651     //===========================================================================
1652     //===========================================================================
1653    
1654     #define STATIC_KSMUSIC_TECHNOLOGY_PORT\
1655     0x86C92E60L, 0x62E8, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1656     DEFINE_GUIDSTRUCT("86C92E60-62E8-11CF-A5D6-28DB04C10000", KSMUSIC_TECHNOLOGY_PORT);
1657     #define KSMUSIC_TECHNOLOGY_PORT DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_PORT)
1658    
1659     #define STATIC_KSMUSIC_TECHNOLOGY_SQSYNTH\
1660     0x0ECF4380L, 0x62E9, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1661     DEFINE_GUIDSTRUCT("0ECF4380-62E9-11CF-A5D6-28DB04C10000", KSMUSIC_TECHNOLOGY_SQSYNTH);
1662     #define KSMUSIC_TECHNOLOGY_SQSYNTH DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_SQSYNTH)
1663    
1664     #define STATIC_KSMUSIC_TECHNOLOGY_FMSYNTH\
1665     0x252C5C80L, 0x62E9, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1666     DEFINE_GUIDSTRUCT("252C5C80-62E9-11CF-A5D6-28DB04C10000", KSMUSIC_TECHNOLOGY_FMSYNTH);
1667     #define KSMUSIC_TECHNOLOGY_FMSYNTH DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_FMSYNTH)
1668    
1669     #define STATIC_KSMUSIC_TECHNOLOGY_WAVETABLE\
1670     0x394EC7C0L, 0x62E9, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1671     DEFINE_GUIDSTRUCT("394EC7C0-62E9-11CF-A5D6-28DB04C10000", KSMUSIC_TECHNOLOGY_WAVETABLE);
1672     #define KSMUSIC_TECHNOLOGY_WAVETABLE DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_WAVETABLE)
1673    
1674     #define STATIC_KSMUSIC_TECHNOLOGY_SWSYNTH\
1675     0x37407736L, 0x3620, 0x11D1, 0x85, 0xD3, 0x00, 0x00, 0xF8, 0x75, 0x43, 0x80
1676     DEFINE_GUIDSTRUCT("37407736-3620-11D1-85D3-0000F8754380", KSMUSIC_TECHNOLOGY_SWSYNTH);
1677     #define KSMUSIC_TECHNOLOGY_SWSYNTH DEFINE_GUIDNAMED(KSMUSIC_TECHNOLOGY_SWSYNTH)
1678    
1679     #define STATIC_KSPROPSETID_WaveTable\
1680     0x8539E660L, 0x62E9, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1681     DEFINE_GUIDSTRUCT("8539E660-62E9-11CF-A5D6-28DB04C10000", KSPROPSETID_WaveTable);
1682     #define KSPROPSETID_WaveTable DEFINE_GUIDNAMED(KSPROPSETID_WaveTable)
1683    
1684     typedef enum {
1685     KSPROPERTY_WAVETABLE_LOAD_SAMPLE,
1686     KSPROPERTY_WAVETABLE_UNLOAD_SAMPLE,
1687     KSPROPERTY_WAVETABLE_MEMORY,
1688     KSPROPERTY_WAVETABLE_VERSION
1689     } KSPROPERTY_WAVETABLE;
1690    
1691     typedef struct {
1692     KSDATARANGE DataRange;
1693     GUID Technology;
1694     ULONG Channels;
1695     ULONG Notes;
1696     ULONG ChannelMask;
1697     } KSDATARANGE_MUSIC, *PKSDATARANGE_MUSIC;
1698    
1699     //===========================================================================
1700    
1701     #define STATIC_KSEVENTSETID_Cyclic\
1702     0x142C1AC0L, 0x072A, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1703     DEFINE_GUIDSTRUCT("142C1AC0-072A-11D0-A5D6-28DB04C10000", KSEVENTSETID_Cyclic);
1704     #define KSEVENTSETID_Cyclic DEFINE_GUIDNAMED(KSEVENTSETID_Cyclic)
1705    
1706     typedef enum {
1707     KSEVENT_CYCLIC_TIME_INTERVAL,
1708     } KSEVENT_CYCLIC_TIME;
1709    
1710     #define STATIC_KSPROPSETID_Cyclic\
1711     0x3FFEAEA0L, 0x2BEE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1712     DEFINE_GUIDSTRUCT("3FFEAEA0-2BEE-11CF-A5D6-28DB04C10000", KSPROPSETID_Cyclic);
1713     #define KSPROPSETID_Cyclic DEFINE_GUIDNAMED(KSPROPSETID_Cyclic)
1714    
1715     typedef enum {
1716     KSPROPERTY_CYCLIC_POSITION,
1717     } KSPROPERTY_CYCLIC;
1718    
1719     //===========================================================================
1720     #define STATIC_KSEVENTSETID_AudioControlChange\
1721     0xE85E9698L, 0xFA2F, 0x11D1, 0x95, 0xBD, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0xD3
1722     DEFINE_GUIDSTRUCT("E85E9698-FA2F-11D1-95BD-00C04FB925D3", KSEVENTSETID_AudioControlChange);
1723     #define KSEVENTSETID_AudioControlChange DEFINE_GUIDNAMED(KSEVENTSETID_AudioControlChange)
1724    
1725     typedef enum {
1726     KSEVENT_CONTROL_CHANGE,
1727     } KSEVENT_AUDIO_CONTROL_CHANGE;
1728    
1729     //===========================================================================
1730    
1731     #define STATIC_KSEVENTSETID_LoopedStreaming\
1732     0x4682B940L, 0xC6EF, 0x11D0, 0x96, 0xD8, 0x00, 0xAA, 0x00, 0x51, 0xE5, 0x1D
1733     DEFINE_GUIDSTRUCT("4682B940-C6EF-11D0-96D8-00AA0051E51D", KSEVENTSETID_LoopedStreaming);
1734     #define KSEVENTSETID_LoopedStreaming DEFINE_GUIDNAMED(KSEVENTSETID_LoopedStreaming)
1735    
1736     typedef enum {
1737     KSEVENT_LOOPEDSTREAMING_POSITION,
1738     } KSEVENT_LOOPEDSTREAMING;
1739    
1740     typedef struct {
1741     KSEVENTDATA KsEventData;
1742     #if defined(_NTDDK_)
1743     ULONGLONG Position;
1744     #else // !_NTDDK_
1745     DWORDLONG Position;
1746     #endif // !_NTDDK_
1747     } LOOPEDSTREAMING_POSITION_EVENT_DATA, *PLOOPEDSTREAMING_POSITION_EVENT_DATA ;
1748    
1749     #define STATIC_KSEVENTSETID_Sysaudio \
1750     0x04800320L, 0x4491, 0x11D1, 0xA0, 0x50, 0x40, 0x57, 0x05, 0xC1, 0x00, 0x00
1751     DEFINE_GUIDSTRUCT("04800320-4491-11D1-A050-405705C10000", KSEVENTSETID_Sysaudio);
1752     #define KSEVENTSETID_Sysaudio DEFINE_GUIDNAMED(KSEVENTSETID_Sysaudio)
1753    
1754     typedef enum {
1755     KSEVENT_SYSAUDIO_ADDREMOVE_DEVICE,
1756     KSEVENT_SYSAUDIO_CHANGE_DEVICE
1757     } KSEVENT_SYSAUDIO;
1758    
1759     #define STATIC_KSPROPSETID_Sysaudio\
1760     0xCBE3FAA0L, 0xCC75, 0x11D0, 0xB4, 0x65, 0x00, 0x00, 0x1A, 0x18, 0x18, 0xE6
1761     DEFINE_GUIDSTRUCT("CBE3FAA0-CC75-11D0-B465-00001A1818E6", KSPROPSETID_Sysaudio);
1762     #define KSPROPSETID_Sysaudio DEFINE_GUIDNAMED(KSPROPSETID_Sysaudio)
1763    
1764     typedef enum {
1765     KSPROPERTY_SYSAUDIO_DEVICE_COUNT = 1,
1766     KSPROPERTY_SYSAUDIO_DEVICE_FRIENDLY_NAME,
1767     KSPROPERTY_SYSAUDIO_DEVICE_INSTANCE,
1768     KSPROPERTY_SYSAUDIO_DEVICE_INTERFACE_NAME,
1769     KSPROPERTY_SYSAUDIO_SELECT_GRAPH,
1770     KSPROPERTY_SYSAUDIO_CREATE_VIRTUAL_SOURCE,
1771     KSPROPERTY_SYSAUDIO_DEVICE_DEFAULT,
1772     KSPROPERTY_SYSAUDIO_ALWAYS_CREATE_VIRTUAL_SOURCE,
1773     KSPROPERTY_SYSAUDIO_ADDREMOVE_LOCK,
1774     KSPROPERTY_SYSAUDIO_ADDREMOVE_UNLOCK,
1775     KSPROPERTY_SYSAUDIO_RENDER_PIN_INSTANCES,
1776     KSPROPERTY_SYSAUDIO_RENDER_CONNECTION_INDEX,
1777     KSPROPERTY_SYSAUDIO_CREATE_VIRTUAL_SOURCE_ONLY,
1778     KSPROPERTY_SYSAUDIO_INSTANCE_INFO,
1779     KSPROPERTY_SYSAUDIO_PREFERRED_DEVICE
1780     } KSPROPERTY_SYSAUDIO;
1781    
1782     typedef struct {
1783     KSPROPERTY Property;
1784     GUID PinCategory;
1785     GUID PinName;
1786     } SYSAUDIO_CREATE_VIRTUAL_SOURCE, *PSYSAUDIO_CREATE_VIRTUAL_SOURCE;
1787    
1788     typedef struct {
1789     KSPROPERTY Property;
1790     ULONG PinId;
1791     ULONG NodeId;
1792     ULONG Flags;
1793     ULONG Reserved;
1794     } SYSAUDIO_SELECT_GRAPH, *PSYSAUDIO_SELECT_GRAPH;
1795    
1796     typedef struct {
1797     KSPROPERTY Property;
1798     ULONG Flags;
1799     ULONG DeviceNumber;
1800     } SYSAUDIO_INSTANCE_INFO, *PSYSAUDIO_INSTANCE_INFO;
1801    
1802     #define SYSAUDIO_FLAGS_DONT_COMBINE_PINS 0x00000001
1803    
1804     typedef struct {
1805     KSPROPERTY Property;
1806     ULONG Flags;
1807     ULONG Index; // KSPROPERTY_SYSAUDIO_DEFAULT_TYPE
1808     } SYSAUDIO_PREFERRED_DEVICE, *PSYSAUDIO_PREFERRED_DEVICE;
1809    
1810     #define SYSAUDIO_FLAGS_CLEAR_PREFERRED 0x00000002
1811    
1812     typedef enum { // preferred device index
1813     KSPROPERTY_SYSAUDIO_NORMAL_DEFAULT = 0,
1814     KSPROPERTY_SYSAUDIO_PLAYBACK_DEFAULT,
1815     KSPROPERTY_SYSAUDIO_RECORD_DEFAULT,
1816     KSPROPERTY_SYSAUDIO_MIDI_DEFAULT,
1817     KSPROPERTY_SYSAUDIO_MIXER_DEFAULT
1818     } KSPROPERTY_SYSAUDIO_DEFAULT_TYPE;
1819    
1820     #define STATIC_KSPROPSETID_Sysaudio_Pin \
1821     0xA3A53220L, 0xC6E4, 0x11D0, 0xB4, 0x65, 0x00, 0x00, 0x1A, 0x18, 0x18, 0xE6
1822     DEFINE_GUIDSTRUCT("A3A53220-C6E4-11D0-B465-00001A1818E6", KSPROPSETID_Sysaudio_Pin);
1823     #define KSPROPSETID_Sysaudio_Pin DEFINE_GUIDNAMED(KSPROPSETID_Sysaudio_Pin)
1824    
1825     typedef enum {
1826     KSPROPERTY_SYSAUDIO_TOPOLOGY_CONNECTION_INDEX,
1827     KSPROPERTY_SYSAUDIO_ATTACH_VIRTUAL_SOURCE,
1828     KSPROPERTY_SYSAUDIO_PIN_VOLUME_NODE
1829     } KSPROPERTY_SYSAUDIO_PIN;
1830    
1831     typedef struct {
1832     KSPROPERTY Property;
1833     ULONG MixerPinId;
1834     ULONG Reserved;
1835     } SYSAUDIO_ATTACH_VIRTUAL_SOURCE, *PSYSAUDIO_ATTACH_VIRTUAL_SOURCE;
1836    
1837     typedef struct {
1838     KSPROPERTY Property;
1839     ULONG NodeId;
1840     ULONG Reserved;
1841     } KSNODEPROPERTY, *PKSNODEPROPERTY;
1842    
1843     typedef struct {
1844     KSNODEPROPERTY NodeProperty;
1845     LONG Channel; // value to get or set
1846     ULONG Reserved;
1847     } KSNODEPROPERTY_AUDIO_CHANNEL, *PKSNODEPROPERTY_AUDIO_CHANNEL;
1848    
1849     typedef struct {
1850     KSNODEPROPERTY NodeProperty;
1851     ULONG DevSpecificId;
1852     ULONG DeviceInfo;
1853     ULONG Length;
1854     } KSNODEPROPERTY_AUDIO_DEV_SPECIFIC, *PKSNODEPROPERTY_AUDIO_DEV_SPECIFIC;
1855    
1856     typedef struct {
1857     KSNODEPROPERTY NodeProperty;
1858     PVOID ListenerId;
1859     #ifndef _WIN64
1860     ULONG Reserved;
1861     #endif // _WIN64
1862     } KSNODEPROPERTY_AUDIO_3D_LISTENER, *PKSNODEPROPERTY_AUDIO_3D_LISTENER;
1863    
1864     typedef struct {
1865     KSNODEPROPERTY NodeProperty;
1866     PVOID AppContext;
1867     ULONG Length;
1868     #ifndef _WIN64
1869     ULONG Reserved;
1870     #endif // _WIN64
1871     } KSNODEPROPERTY_AUDIO_PROPERTY, *PKSNODEPROPERTY_AUDIO_PROPERTY;
1872    
1873     //===========================================================================
1874    
1875     #define STATIC_KSPROPSETID_Linear\
1876     0x5A2FFE80L, 0x16B9, 0x11D0, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1877     DEFINE_GUIDSTRUCT("5A2FFE80-16B9-11D0-A5D6-28DB04C10000", KSPROPSETID_Linear);
1878     #define KSPROPSETID_Linear DEFINE_GUIDNAMED(KSPROPSETID_Linear)
1879    
1880     typedef enum {
1881     KSPROPERTY_LINEAR_POSITION,
1882     } KSPROPERTY_LINEAR;
1883    
1884     //===========================================================================
1885    
1886     //
1887     // Midi definitions
1888     //
1889    
1890     /*
1891     Formats
1892     */
1893    
1894     #define STATIC_KSDATAFORMAT_TYPE_MUSIC\
1895     0xE725D360L, 0x62CC, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1896     DEFINE_GUIDSTRUCT("E725D360-62CC-11CF-A5D6-28DB04C10000", KSDATAFORMAT_TYPE_MUSIC);
1897     #define KSDATAFORMAT_TYPE_MUSIC DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MUSIC)
1898    
1899     // 'mids' == MEDIATYPE_Midi
1900     #define STATIC_KSDATAFORMAT_TYPE_MIDI\
1901     0x7364696DL, 0x0000, 0x0010, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71
1902     DEFINE_GUIDSTRUCT("7364696D-0000-0010-8000-00aa00389b71", KSDATAFORMAT_TYPE_MIDI);
1903     #define KSDATAFORMAT_TYPE_MIDI DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MIDI)
1904    
1905     #define STATIC_KSDATAFORMAT_SUBTYPE_MIDI\
1906     0x1D262760L, 0xE957, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1907     DEFINE_GUIDSTRUCT("1D262760-E957-11CF-A5D6-28DB04C10000", KSDATAFORMAT_SUBTYPE_MIDI);
1908     #define KSDATAFORMAT_SUBTYPE_MIDI DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MIDI)
1909    
1910     #define STATIC_KSDATAFORMAT_SUBTYPE_MIDI_BUS\
1911     0x2CA15FA0L, 0x6CFE, 0x11CF, 0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00
1912     DEFINE_GUIDSTRUCT("2CA15FA0-6CFE-11CF-A5D6-28DB04C10000", KSDATAFORMAT_SUBTYPE_MIDI_BUS);
1913     #define KSDATAFORMAT_SUBTYPE_MIDI_BUS DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MIDI_BUS)
1914    
1915     #define STATIC_KSDATAFORMAT_SUBTYPE_RIFFMIDI\
1916     0x4995DAF0L, 0x9EE6, 0x11D0, 0xA4, 0x0E, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
1917     DEFINE_GUIDSTRUCT("4995DAF0-9EE6-11D0-A40E-00A0C9223196", KSDATAFORMAT_SUBTYPE_RIFFMIDI);
1918     #define KSDATAFORMAT_SUBTYPE_RIFFMIDI DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RIFFMIDI)
1919    
1920     /*
1921     KSDATAFORMAT_SUBTYPE_DIRECTMUSIC
1922     see DMusicKS.h
1923     */
1924    
1925     // WARNING! This structure MUST be dword aligned
1926     // regardless of the number of data bytes.
1927    
1928     typedef struct {
1929     ULONG TimeDeltaMs; // Delta Milliseconds from the previous midiformat
1930     // in the packet. The first midiformat in the packet
1931     // is a delta from the PTS in the KSSTREAM_HEADER.
1932     ULONG ByteCount; // Number of bytes of data that follow this struct.
1933     } KSMUSICFORMAT, *PKSMUSICFORMAT;
1934    
1935     //
1936     // This entire set of MPEG Standard/Dialect Guids are obsolete. Do not use them.
1937     //
1938     //====================================================================================================
1939     //====================================================================================================
1940     // The following official MPEG Formats, Subtypes and Specifiers are listed as required or optional
1941     // These official MPEG GUIDs are the preferred method of supporting MPEG/AC-3 media types in new code.
1942     // Older MPEG GUIDs should also be supported for compatibilty, but these new modes are still required.
1943     //====================================================================================================
1944     //====================================================================================================
1945    
1946     /*
1947     This is a summary of what media types/specifiers will be required for all DVD+DSS+DVB+DTV MPEG decoders.
1948     These media types are what the decoder driver must accept, hardware support for all of these media types
1949     may or may not actually be provided by the decoder natively. These media types are intended to define
1950     the "officially" supported MPEG/AC-3 media types that all WHQL certified decoders must implement. This
1951     specifically includes driver and/or hardware support for all the required standards and dialects.
1952    
1953     All MPEG video decoders must support all of the MPEG video modes shown as [required] below.
1954     All MPEG audio decoders must support all of the MPEG audio modes shown as [required] below.
1955     All AC-3 audio decoders must support all of the AC-3 audio modes shown as [required] below.
1956     The line items shown as [optional] need not be implemented, but are possible formats that might be implemented.
1957    
1958     Note that the input/output pin formats are defined by 2 or 3 GUIDs: TYPE, SUBTYPE, and maybe SPECIFIER.
1959     The specifiers are included if the data format is a "dialect" that needs to be differentiated during decoding.
1960     The decoder MUST be prepared to deal with ALL requests for _required_ "Standard" formats OR _required_ "Dialects".
1961    
1962     STATIC_KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM [required]
1963     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO [required]
1964     STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO [optional]
1965     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO [required]
1966     STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO [optional]
1967     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO [required]
1968     STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO [required]
1969     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO [required]
1970     STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO [optional]
1971     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO [required]
1972     STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO [optional]
1973     STATIC_KSDATAFORMAT_TYPE_STANDARD_PES_PACKET [required]
1974     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO [optional]
1975     STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO [optional]
1976     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO [optional]
1977     STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO [optional]
1978     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO [required]
1979     STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO [required]
1980     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO [required]
1981     STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO [required]
1982     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO [required]
1983     STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO [optional]
1984     STATIC_KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER [required]
1985     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO [required]
1986     STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO [required]
1987     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO [required]
1988     STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO [optional]
1989     STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO [required]
1990     STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO [optional]
1991    
1992     Note that the SPECIFIER GUIDs normally identify particular versions of MPEG such as DSS and DVD.
1993     This approach was taken to minimize the number of DSS/DVB/DVD/DTV etc. media SUBTYPES.
1994     These specifiers are currently required to disambiguate MPEG syntax _parsing_ by the decoder
1995     using alternate parsing routines or downloadable firmware or hardware decode settings.
1996    
1997     In the future these specifiers will be extended to cover new KS MPEG flavors such as DVB and DTV.
1998     Thus, the optional specifiers will be subject to clarification and/or definition as they are needed.
1999    
2000     Important note: Per the ITU MPEG specs, MPEG 2 media may contain pure MPEG 1 syntax and
2001     any "MPEG 2" PES packets may actually contain MPEG 1 payloads and MPEG 1 syntax. Some MPEG
2002     broadcasts can revert from MPEG2 to MPEG1 format data at their discretion, without warning.
2003    
2004     CAUTION: Decoders MUST attempt to process MPEG data AS SOON AS POSSIBLE after reception.
2005     In particular, elementary MPEG or MPEG PES packet streams should not be aggregated into DVD
2006     "pack headers" internally before submission to the codec hardware if AT ALL POSSIBLE. The
2007     reason is that mpeg data may need to be processed immediately but there may be no additional
2008     MPEG data forthcoming to fill up the PES packet OR DVD "pack" in a timely fashion. This is
2009     particularly true of MPEG dialects that utilize "repeat field signally" to reuse the last
2010     decoded MPEG video field.
2011    
2012     */
2013    
2014     /////////////////////////////////////////////////////////////////////////
2015     // The major data type GUIDs that define the data packet encapsulation //
2016     /////////////////////////////////////////////////////////////////////////
2017    
2018     // STATIC_KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM
2019     #define STATIC_KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM \
2020     0x36523b11L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
2021     DEFINE_GUIDSTRUCT("36523B11-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM );
2022     #define KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STANDARD_ELEMENTARY_STREAM)
2023    
2024     // STATIC_KSDATAFORMAT_TYPE_STANDARD_PES_PACKET
2025     #define STATIC_KSDATAFORMAT_TYPE_STANDARD_PES_PACKET \
2026     0x36523b12L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
2027     DEFINE_GUIDSTRUCT("36523B12-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_TYPE_STANDARD_PES_PACKET );
2028     #define KSDATAFORMAT_TYPE_STANDARD_PES_PACKET DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STANDARD_PES_PACKET)
2029    
2030     // STATIC_KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER
2031     #define STATIC_KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER \
2032     0x36523b13L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
2033     DEFINE_GUIDSTRUCT("36523B13-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER );
2034     #define KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_STANDARD_PACK_HEADER)
2035    
2036     ///////////////////////////////////////////////////////////////////////////////
2037     // The minor data subtype GUIDs that define the exact class of the data type.//
2038     ///////////////////////////////////////////////////////////////////////////////
2039    
2040     // STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO
2041     #define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO \
2042     0x36523b21L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
2043     DEFINE_GUIDSTRUCT("36523B21-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO );
2044     #define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_VIDEO)
2045    
2046     // STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO
2047     #define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO \
2048     0x36523b22L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
2049     DEFINE_GUIDSTRUCT("36523B22-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO );
2050     #define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG1_AUDIO)
2051    
2052     // STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO
2053     #define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO \
2054     0x36523b23L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
2055     DEFINE_GUIDSTRUCT("36523B23-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO );
2056     #define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_VIDEO)
2057    
2058     // STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO
2059     #define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO \
2060     0x36523b24L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
2061     DEFINE_GUIDSTRUCT("36523B24-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO );
2062     #define KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_MPEG2_AUDIO)
2063    
2064     // STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO
2065     #define STATIC_KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO \
2066     0x36523b25L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
2067     DEFINE_GUIDSTRUCT("36523B25-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO );
2068     #define KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_STANDARD_AC3_AUDIO)
2069    
2070     ///////////////////////////////////////////////////////////////////////////////
2071     // The low-level specifier GUIDs that define the flavor of the data subtype. //
2072     // Some SUBTYPES, notably MPEG2_VIDEO, MPEG2_AUDIO have different dialects. //
2073     // These specifiers are intended to be accompanied by a specifier structure. //
2074     ///////////////////////////////////////////////////////////////////////////////
2075    
2076     // STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO
2077     #define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO \
2078     0x36523b31L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
2079     DEFINE_GUIDSTRUCT("36523B31-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO );
2080     #define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_VIDEO)
2081    
2082     // STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO
2083     #define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO \
2084     0x36523b32L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
2085     DEFINE_GUIDSTRUCT("36523B32-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO );
2086     #define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG1_AUDIO)
2087    
2088     // STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO Associated with KS_MPEGVIDEOINFO2 defined later
2089     #define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO \
2090     0x36523b33L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
2091     DEFINE_GUIDSTRUCT("36523B33-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO );
2092     #define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_VIDEO)
2093    
2094     // STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO Associated with KS_MPEGAUDIOINFO defined later
2095     #define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO \
2096     0x36523b34L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
2097     DEFINE_GUIDSTRUCT("36523B34-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO );
2098     #define KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_MPEG2_AUDIO)
2099    
2100     // STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO
2101     #define STATIC_KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO \
2102     0x36523b35L, 0x8ee5, 0x11d1, 0x8c, 0xa3, 0x00, 0x60, 0xb0, 0x57, 0x66, 0x4a
2103     DEFINE_GUIDSTRUCT("36523B35-8EE5-11d1-8CA3-0060B057664A", KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO );
2104     #define KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_DIALECT_AC3_AUDIO)
2105    
2106     //====================================================================================================
2107     //====================================================================================================
2108     // *** COMPATIBILITY WARNING ***
2109     // The *following* older DSS, MPEG, DVD & AC-3 GUID definitions are retained for backward compability.
2110     // These MPEG GUIDs should also be supported for compatibilty, but the above newer modes are still required.
2111     //====================================================================================================
2112     //====================================================================================================
2113    
2114     //
2115     // DSS definitions
2116     //
2117    
2118     #define STATIC_KSDATAFORMAT_SUBTYPE_DSS_VIDEO\
2119     0xa0af4f81L, 0xe163, 0x11d0, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a
2120     DEFINE_GUIDSTRUCT("a0af4f81-e163-11d0-bad9-00609744111a", KSDATAFORMAT_SUBTYPE_DSS_VIDEO);
2121     #define KSDATAFORMAT_SUBTYPE_DSS_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DSS_VIDEO)
2122    
2123     #define STATIC_KSDATAFORMAT_SUBTYPE_DSS_AUDIO\
2124     0xa0af4f82L, 0xe163, 0x11d0, 0xba, 0xd9, 0x00, 0x60, 0x97, 0x44, 0x11, 0x1a
2125     DEFINE_GUIDSTRUCT("a0af4f82-e163-11d0-bad9-00609744111a", KSDATAFORMAT_SUBTYPE_DSS_AUDIO);
2126     #define KSDATAFORMAT_SUBTYPE_DSS_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DSS_AUDIO)
2127    
2128     //
2129     // End of obsolete MPEG definitions.
2130     //
2131    
2132     //
2133     // mpeg 1 definitions
2134     //
2135     #define STATIC_KSDATAFORMAT_SUBTYPE_MPEG1Packet\
2136     0xe436eb80, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70
2137     DEFINE_GUIDSTRUCT("e436eb80-524f-11ce-9F53-0020af0ba770", KSDATAFORMAT_SUBTYPE_MPEG1Packet);
2138     #define KSDATAFORMAT_SUBTYPE_MPEG1Packet DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG1Packet)
2139    
2140     #define STATIC_KSDATAFORMAT_SUBTYPE_MPEG1Payload\
2141     0xe436eb81, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70
2142     DEFINE_GUIDSTRUCT("e436eb81-524f-11ce-9F53-0020af0ba770", KSDATAFORMAT_SUBTYPE_MPEG1Payload);
2143     #define KSDATAFORMAT_SUBTYPE_MPEG1Payload DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG1Payload)
2144    
2145     // MEDIASUBTYPE_MPEG1Video
2146     #define STATIC_KSDATAFORMAT_SUBTYPE_MPEG1Video\
2147     0xe436eb86, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70
2148     DEFINE_GUIDSTRUCT("e436eb86-524f-11ce-9f53-0020af0ba770", KSDATAFORMAT_SUBTYPE_MPEG1Video);
2149     #define KSDATAFORMAT_SUBTYPE_MPEG1Video DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG1Video)
2150    
2151     //FORMAT_MPEGVideo
2152     #define STATIC_KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO\
2153     0x05589f82L, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a
2154     DEFINE_GUIDSTRUCT("05589f82-c356-11ce-bf01-00aa0055595a", KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO);
2155     #define KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_MPEG1_VIDEO)
2156    
2157     //
2158     // mpeg 2 definitions
2159     //
2160     #define STATIC_KSDATAFORMAT_TYPE_MPEG2_PES\
2161     0xe06d8020L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
2162     DEFINE_GUIDSTRUCT("e06d8020-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_TYPE_MPEG2_PES);
2163     #define KSDATAFORMAT_TYPE_MPEG2_PES DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MPEG2_PES)
2164    
2165     #define STATIC_KSDATAFORMAT_TYPE_MPEG2_PROGRAM\
2166     0xe06d8022L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
2167     DEFINE_GUIDSTRUCT("e06d8022-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_TYPE_MPEG2_PROGRAM);
2168     #define KSDATAFORMAT_TYPE_MPEG2_PROGRAM DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MPEG2_PROGRAM)
2169    
2170     #define STATIC_KSDATAFORMAT_TYPE_MPEG2_TRANSPORT\
2171     0xe06d8023L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
2172     DEFINE_GUIDSTRUCT("e06d8023-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_TYPE_MPEG2_TRANSPORT);
2173     #define KSDATAFORMAT_TYPE_MPEG2_TRANSPORT DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_MPEG2_TRANSPORT)
2174    
2175     #define STATIC_KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO\
2176     0xe06d8026L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
2177     DEFINE_GUIDSTRUCT("e06d8026-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO);
2178     #define KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG2_VIDEO)
2179    
2180     // use MPEGVIDEOINFO2 (defined below) with KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO
2181     #define STATIC_KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO\
2182     0xe06d80e3L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
2183     DEFINE_GUIDSTRUCT("e06d80e3-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO);
2184     #define KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_MPEG2_VIDEO)
2185    
2186    
2187     //
2188     // Mpeg2 video properties
2189     //
2190    
2191    
2192     #define STATIC_KSPROPSETID_Mpeg2Vid\
2193     0xC8E11B60L, 0x0CC9, 0x11D0, 0xBD, 0x69, 0x00, 0x35, 0x05, 0xC1, 0x03, 0xA9
2194     DEFINE_GUIDSTRUCT("C8E11B60-0CC9-11D0-BD69-003505C103A9", KSPROPSETID_Mpeg2Vid);
2195     #define KSPROPSETID_Mpeg2Vid DEFINE_GUIDNAMED( KSPROPSETID_Mpeg2Vid )
2196    
2197    
2198     typedef enum {
2199     KSPROPERTY_MPEG2VID_MODES, // available output modes of decoder
2200     KSPROPERTY_MPEG2VID_CUR_MODE, // current mode of the decoder
2201     KSPROPERTY_MPEG2VID_4_3_RECT, // output coordinates for 4:3 source
2202     KSPROPERTY_MPEG2VID_16_9_RECT, // output coordinates for 16:9 source
2203     KSPROPERTY_MPEG2VID_16_9_PANSCAN, // pan and scan vectors
2204     } KSPROPERTY_MPEG2VID;
2205    
2206     //
2207     // bit field definitions for MPEG2 VIDEO mode
2208     //
2209    
2210     #define KSMPEGVIDMODE_PANSCAN 0x0001
2211     #define KSMPEGVIDMODE_LTRBOX 0x0002
2212     #define KSMPEGVIDMODE_SCALE 0x0004
2213    
2214     //
2215     // rectangle definitions for the 4/3 and 16/9 cropping properties of
2216     // the MPEG2Video decoder
2217     //
2218    
2219     typedef struct _KSMPEGVID_RECT {
2220     ULONG StartX;
2221     ULONG StartY;
2222     ULONG EndX;
2223     ULONG EndY;
2224     } KSMPEGVID_RECT, *PKSMPEGVID_RECT;
2225    
2226     //
2227     // Params for pan / scan
2228     //
2229    
2230    
2231     //
2232     // MPEG2 Audio definition
2233     //
2234    
2235     #define STATIC_KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO\
2236     0xe06d802bL, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
2237     DEFINE_GUIDSTRUCT("e06d802b-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO);
2238     #define KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_MPEG2_AUDIO)
2239    
2240     #define STATIC_KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO\
2241     0xe06d80e5L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
2242     DEFINE_GUIDSTRUCT("e06d80e5-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO);
2243     #define KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_MPEG2_AUDIO)
2244    
2245     //
2246     // DVD LPCM Audio definition
2247     //
2248    
2249     #define STATIC_KSDATAFORMAT_SUBTYPE_LPCM_AUDIO\
2250     0xe06d8032L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
2251     DEFINE_GUIDSTRUCT("e06d8032-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SUBTYPE_LPCM_AUDIO);
2252     #define KSDATAFORMAT_SUBTYPE_LPCM_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_LPCM_AUDIO)
2253    
2254     #define STATIC_KSDATAFORMAT_SPECIFIER_LPCM_AUDIO\
2255     0xe06d80e6L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
2256     DEFINE_GUIDSTRUCT("e06d80e6-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SPECIFIER_LPCM_AUDIO);
2257     #define KSDATAFORMAT_SPECIFIER_LPCM_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_LPCM_AUDIO)
2258    
2259     //
2260     // AC-3 definition
2261     //
2262    
2263     #define STATIC_KSDATAFORMAT_SUBTYPE_AC3_AUDIO\
2264     0xe06d802cL, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
2265     DEFINE_GUIDSTRUCT("e06d802c-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SUBTYPE_AC3_AUDIO);
2266     #define KSDATAFORMAT_SUBTYPE_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_AC3_AUDIO)
2267    
2268     #define STATIC_KSDATAFORMAT_SPECIFIER_AC3_AUDIO\
2269     0xe06d80e4L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
2270     DEFINE_GUIDSTRUCT("e06d80e4-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SPECIFIER_AC3_AUDIO);
2271     #define KSDATAFORMAT_SPECIFIER_AC3_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_AC3_AUDIO)
2272    
2273     #define STATIC_KSPROPSETID_AC3\
2274     0xBFABE720L, 0x6E1F, 0x11D0, 0xBC, 0xF2, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00
2275     DEFINE_GUIDSTRUCT("BFABE720-6E1F-11D0-BCF2-444553540000", KSPROPSETID_AC3);
2276     #define KSPROPSETID_AC3 DEFINE_GUIDNAMED(KSPROPSETID_AC3)
2277    
2278     typedef enum {
2279     KSPROPERTY_AC3_ERROR_CONCEALMENT = 1,
2280     KSPROPERTY_AC3_ALTERNATE_AUDIO,
2281     KSPROPERTY_AC3_DOWNMIX,
2282     KSPROPERTY_AC3_BIT_STREAM_MODE,
2283     KSPROPERTY_AC3_DIALOGUE_LEVEL,
2284     KSPROPERTY_AC3_LANGUAGE_CODE,
2285     KSPROPERTY_AC3_ROOM_TYPE
2286     } KSPROPERTY_AC3;
2287    
2288     typedef struct {
2289     BOOL fRepeatPreviousBlock;
2290     BOOL fErrorInCurrentBlock;
2291     } KSAC3_ERROR_CONCEALMENT, *PKSAC3_ERROR_CONCEALMENT;
2292    
2293     typedef struct {
2294     BOOL fStereo;
2295     ULONG DualMode;
2296     } KSAC3_ALTERNATE_AUDIO, *PKSAC3_ALTERNATE_AUDIO;
2297    
2298     #define KSAC3_ALTERNATE_AUDIO_1 1
2299     #define KSAC3_ALTERNATE_AUDIO_2 2
2300     #define KSAC3_ALTERNATE_AUDIO_BOTH 3
2301    
2302     typedef struct {
2303     BOOL fDownMix;
2304     BOOL fDolbySurround;
2305     } KSAC3_DOWNMIX, *PKSAC3_DOWNMIX;
2306    
2307     typedef struct {
2308     LONG BitStreamMode;
2309     } KSAC3_BIT_STREAM_MODE, *PKSAC3_BIT_STREAM_MODE;
2310    
2311     #define KSAC3_SERVICE_MAIN_AUDIO 0
2312     #define KSAC3_SERVICE_NO_DIALOG 1
2313     #define KSAC3_SERVICE_VISUALLY_IMPAIRED 2
2314     #define KSAC3_SERVICE_HEARING_IMPAIRED 3
2315     #define KSAC3_SERVICE_DIALOG_ONLY 4
2316     #define KSAC3_SERVICE_COMMENTARY 5
2317     #define KSAC3_SERVICE_EMERGENCY_FLASH 6
2318     #define KSAC3_SERVICE_VOICE_OVER 7
2319    
2320     typedef struct {
2321     ULONG DialogueLevel;
2322     } KSAC3_DIALOGUE_LEVEL, *PKSAC3_DIALOGUE_LEVEL;
2323    
2324     typedef struct {
2325     BOOL fLargeRoom;
2326     } KSAC3_ROOM_TYPE, *PKSAC3_ROOM_TYPE;
2327    
2328    
2329     //
2330     // DTS and SDDS definitions (media subtype GUIDs)
2331     //
2332     #define STATIC_KSDATAFORMAT_SUBTYPE_DTS_AUDIO\
2333     0xe06d8033L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
2334     DEFINE_GUIDSTRUCT("e06d8033-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SUBTYPE_DTS_AUDIO);
2335     #define KSDATAFORMAT_SUBTYPE_DTS_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DTS_AUDIO)
2336    
2337     #define STATIC_KSDATAFORMAT_SUBTYPE_SDDS_AUDIO\
2338     0xe06d8034L, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
2339     DEFINE_GUIDSTRUCT("e06d8034-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SUBTYPE_SDDS_AUDIO);
2340     #define KSDATAFORMAT_SUBTYPE_SDDS_AUDIO DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_SDDS_AUDIO)
2341    
2342    
2343     //
2344     // audio decoder output properties
2345     //
2346    
2347     #define STATIC_KSPROPSETID_AudioDecoderOut\
2348     0x6ca6e020L, 0x43bd, 0x11d0, 0xbd, 0x6a, 0x00, 0x35, 0x05, 0xc1, 0x03, 0xa9
2349     DEFINE_GUIDSTRUCT("6ca6e020-43bd-11d0-bd6a-003505c103a9", KSPROPSETID_AudioDecoderOut);
2350     #define KSPROPSETID_AudioDecoderOut DEFINE_GUIDNAMED(KSPROPSETID_AudioDecoderOut)
2351    
2352     typedef enum {
2353     KSPROPERTY_AUDDECOUT_MODES, // available output modes of decoder
2354     KSPROPERTY_AUDDECOUT_CUR_MODE, // current mode of the decoder
2355     } KSPROPERTY_AUDDECOUT;
2356    
2357     #define KSAUDDECOUTMODE_STEREO_ANALOG 0x0001
2358     #define KSAUDDECOUTMODE_PCM_51 0x0002
2359     #define KSAUDDECOUTMODE_SPDIFF 0x0004
2360    
2361    
2362    
2363     //
2364     // subpicture definition
2365     //
2366    
2367     #define STATIC_KSDATAFORMAT_SUBTYPE_SUBPICTURE\
2368     0xe06d802dL, 0xdb46, 0x11cf, 0xb4, 0xd1, 0x00, 0x80, 0x5f, 0x6c, 0xbb, 0xea
2369     DEFINE_GUIDSTRUCT("e06d802d-db46-11cf-b4d1-00805f6cbbea", KSDATAFORMAT_SUBTYPE_SUBPICTURE);
2370     #define KSDATAFORMAT_SUBTYPE_SUBPICTURE DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_SUBPICTURE)
2371    
2372    
2373     #define STATIC_KSPROPSETID_DvdSubPic\
2374     0xac390460L, 0x43af, 0x11d0, 0xbd, 0x6a, 0x00, 0x35, 0x05, 0xc1, 0x03, 0xa9
2375     DEFINE_GUIDSTRUCT("ac390460-43af-11d0-bd6a-003505c103a9", KSPROPSETID_DvdSubPic);
2376     #define KSPROPSETID_DvdSubPic DEFINE_GUIDNAMED(KSPROPSETID_DvdSubPic)
2377    
2378     typedef enum {
2379     KSPROPERTY_DVDSUBPIC_PALETTE,
2380     KSPROPERTY_DVDSUBPIC_HLI,
2381     KSPROPERTY_DVDSUBPIC_COMPOSIT_ON, // TRUE for subpicture is displayed
2382     } KSPROPERTY_DVDSUBPIC;
2383    
2384     typedef struct _KS_DVD_YCrCb {
2385     UCHAR Reserved;
2386     UCHAR Y;
2387     UCHAR Cr;
2388     UCHAR Cb;
2389     } KS_DVD_YCrCb, *PKS_DVD_YCrCb;
2390    
2391     /* The KS_DVD_YUV structure is now superseded by KS_DVD_YCrCb above and is
2392     here for backward compatibility only */
2393    
2394     typedef struct _KS_DVD_YUV {
2395     UCHAR Reserved;
2396     UCHAR Y;
2397     UCHAR V;
2398     UCHAR U;
2399     } KS_DVD_YUV, *PKS_DVD_YUV;
2400    
2401     typedef struct _KSPROPERTY_SPPAL {
2402     KS_DVD_YUV sppal[16];
2403     } KSPROPERTY_SPPAL, *PKSPROPERTY_SPPAL;
2404    
2405     typedef struct _KS_COLCON {
2406     UCHAR emph1col:4;
2407     UCHAR emph2col:4;
2408     UCHAR backcol:4;
2409     UCHAR patcol:4;
2410     UCHAR emph1con:4;
2411     UCHAR emph2con:4;
2412     UCHAR backcon:4;
2413     UCHAR patcon:4;
2414    
2415     } KS_COLCON, *PKS_COLCON;
2416    
2417     typedef struct _KSPROPERTY_SPHLI {
2418     USHORT HLISS;
2419     USHORT Reserved;
2420     ULONG StartPTM; // start presentation time in x/90000
2421     ULONG EndPTM; // end PTM in x/90000
2422     USHORT StartX;
2423     USHORT StartY;
2424     USHORT StopX;
2425     USHORT StopY;
2426     KS_COLCON ColCon; // color contrast description (4 bytes as given in HLI)
2427     } KSPROPERTY_SPHLI, *PKSPROPERTY_SPHLI;
2428    
2429     typedef BOOL KSPROPERTY_COMPOSIT_ON, *PKSPROPERTY_COMPOSIT_ON;
2430    
2431     #define STATIC_KSPROPSETID_CopyProt \
2432     0x0E8A0A40L, 0x6AEF, 0x11D0, 0x9E, 0xD0, 0x00, 0xA0, 0x24, 0xCA, 0x19, 0xB3
2433     DEFINE_GUIDSTRUCT("0E8A0A40-6AEF-11D0-9ED0-00A024CA19B3", KSPROPSETID_CopyProt);
2434     #define KSPROPSETID_CopyProt DEFINE_GUIDNAMED(KSPROPSETID_CopyProt)
2435    
2436     typedef enum {
2437    
2438     KSPROPERTY_DVDCOPY_CHLG_KEY = 0x01,
2439     KSPROPERTY_DVDCOPY_DVD_KEY1,
2440     KSPROPERTY_DVDCOPY_DEC_KEY2,
2441     KSPROPERTY_DVDCOPY_TITLE_KEY,
2442     KSPROPERTY_COPY_MACROVISION,
2443     KSPROPERTY_DVDCOPY_REGION,
2444     KSPROPERTY_DVDCOPY_SET_COPY_STATE,
2445     KSPROPERTY_DVDCOPY_DISC_KEY = 0x80
2446    
2447     } KSPROPERTY_COPYPROT;
2448    
2449     typedef struct _KS_DVDCOPY_CHLGKEY {
2450     BYTE ChlgKey[10];
2451     BYTE Reserved[2];
2452     } KS_DVDCOPY_CHLGKEY, *PKS_DVDCOPY_CHLGKEY;
2453    
2454     typedef struct _KS_DVDCOPY_BUSKEY {
2455     BYTE BusKey[5];
2456     BYTE Reserved[1];
2457     } KS_DVDCOPY_BUSKEY, *PKS_DVDCOPY_BUSKEY;
2458    
2459    
2460     typedef struct _KS_DVDCOPY_DISCKEY {
2461     BYTE DiscKey[2048];
2462     } KS_DVDCOPY_DISCKEY, *PKS_DVDCOPY_DISCKEY;
2463    
2464     typedef struct _KS_DVDCOPY_REGION {
2465     UCHAR Reserved;
2466     UCHAR RegionData;
2467     UCHAR Reserved2[2];
2468     } KS_DVDCOPY_REGION, *PKS_DVDCOPY_REGION;
2469    
2470     typedef struct _KS_DVDCOPY_TITLEKEY {
2471     ULONG KeyFlags;
2472     ULONG ReservedNT[2];
2473     UCHAR TitleKey[6];
2474     UCHAR Reserved[2];
2475     } KS_DVDCOPY_TITLEKEY, *PKS_DVDCOPY_TITLEKEY;
2476    
2477     typedef struct _KS_COPY_MACROVISION {
2478     ULONG MACROVISIONLevel;
2479     } KS_COPY_MACROVISION, *PKS_COPY_MACROVISION;
2480    
2481     typedef struct _KS_DVDCOPY_SET_COPY_STATE {
2482     ULONG DVDCopyState;
2483     } KS_DVDCOPY_SET_COPY_STATE, *PKS_DVDCOPY_SET_COPY_STATE;
2484    
2485     typedef enum {
2486     KS_DVDCOPYSTATE_INITIALIZE, // indicates we are starting a full
2487     // copy protection sequence.
2488     KS_DVDCOPYSTATE_INITIALIZE_TITLE, // indicates we are starting a title
2489     // key copy protection sequence
2490     KS_DVDCOPYSTATE_AUTHENTICATION_NOT_REQUIRED,
2491     KS_DVDCOPYSTATE_AUTHENTICATION_REQUIRED,
2492     KS_DVDCOPYSTATE_DONE,
2493     } KS_DVDCOPYSTATE;
2494    
2495     typedef enum {
2496     KS_MACROVISION_DISABLED,
2497     KS_MACROVISION_LEVEL1,
2498     KS_MACROVISION_LEVEL2,
2499     KS_MACROVISION_LEVEL3
2500     } KS_COPY_MACROVISION_LEVEL, *PKS_COPY_MACROVISION_LEVEL;
2501    
2502     //
2503     // CGMS Copy Protection Flags
2504     //
2505    
2506     #define KS_DVD_CGMS_RESERVED_MASK 0x00000078
2507    
2508     #define KS_DVD_CGMS_COPY_PROTECT_MASK 0x00000018
2509     #define KS_DVD_CGMS_COPY_PERMITTED 0x00000000
2510     #define KS_DVD_CGMS_COPY_ONCE 0x00000010
2511     #define KS_DVD_CGMS_NO_COPY 0x00000018
2512    
2513     #define KS_DVD_COPYRIGHT_MASK 0x00000040
2514     #define KS_DVD_NOT_COPYRIGHTED 0x00000000
2515     #define KS_DVD_COPYRIGHTED 0x00000040
2516    
2517     #define KS_DVD_SECTOR_PROTECT_MASK 0x00000020
2518     #define KS_DVD_SECTOR_NOT_PROTECTED 0x00000000
2519     #define KS_DVD_SECTOR_PROTECTED 0x00000020
2520    
2521    
2522     //===========================================================================
2523     // The following MUST match the structures in WinGDI.h and AMVideo.h
2524     //===========================================================================
2525    
2526     #define STATIC_KSCATEGORY_TVTUNER \
2527     0xa799a800L, 0xa46d, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0x24, 0x01, 0xdc, 0xd4
2528     DEFINE_GUIDSTRUCT("a799a800-a46d-11d0-a18c-00a02401dcd4", KSCATEGORY_TVTUNER);
2529     #define KSCATEGORY_TVTUNER DEFINE_GUIDNAMED(KSCATEGORY_TVTUNER)
2530    
2531     #define STATIC_KSCATEGORY_CROSSBAR \
2532     0xa799a801L, 0xa46d, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0x24, 0x01, 0xdc, 0xd4
2533     DEFINE_GUIDSTRUCT("a799a801-a46d-11d0-a18c-00a02401dcd4", KSCATEGORY_CROSSBAR);
2534     #define KSCATEGORY_CROSSBAR DEFINE_GUIDNAMED(KSCATEGORY_CROSSBAR)
2535    
2536     #define STATIC_KSCATEGORY_TVAUDIO \
2537     0xa799a802L, 0xa46d, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0x24, 0x01, 0xdc, 0xd4
2538     DEFINE_GUIDSTRUCT("a799a802-a46d-11d0-a18c-00a02401dcd4", KSCATEGORY_TVAUDIO);
2539     #define KSCATEGORY_TVAUDIO DEFINE_GUIDNAMED(KSCATEGORY_TVAUDIO)
2540    
2541     #define STATIC_KSCATEGORY_VPMUX \
2542     0xa799a803L, 0xa46d, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0x24, 0x01, 0xdc, 0xd4
2543     DEFINE_GUIDSTRUCT("a799a803-a46d-11d0-a18c-00a02401dcd4", KSCATEGORY_VPMUX);
2544     #define KSCATEGORY_VPMUX DEFINE_GUIDNAMED(KSCATEGORY_VPMUX)
2545    
2546     #define STATIC_KSCATEGORY_VBICODEC \
2547     0x07dad660L, 0x22f1, 0x11d1, 0xa9, 0xf4, 0x00, 0xc0, 0x4f, 0xbb, 0xde, 0x8f
2548     DEFINE_GUIDSTRUCT("07dad660-22f1-11d1-a9f4-00c04fbbde8f", KSCATEGORY_VBICODEC);
2549     #define KSCATEGORY_VBICODEC DEFINE_GUIDNAMED(KSCATEGORY_VBICODEC)
2550    
2551     // SUBTYPE_VPVideo
2552     #define STATIC_KSDATAFORMAT_SUBTYPE_VPVideo\
2553     0x5a9b6a40L, 0x1a22, 0x11d1, 0xba, 0xd9, 0x0, 0x60, 0x97, 0x44, 0x11, 0x1a
2554     DEFINE_GUIDSTRUCT("5a9b6a40-1a22-11d1-bad9-00609744111a", KSDATAFORMAT_SUBTYPE_VPVideo);
2555     #define KSDATAFORMAT_SUBTYPE_VPVideo DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_VPVideo)
2556    
2557     // SUBTYPE_VPVBI
2558     #define STATIC_KSDATAFORMAT_SUBTYPE_VPVBI\
2559     0x5a9b6a41L, 0x1a22, 0x11d1, 0xba, 0xd9, 0x0, 0x60, 0x97, 0x44, 0x11, 0x1a
2560     DEFINE_GUIDSTRUCT("5a9b6a41-1a22-11d1-bad9-00609744111a", KSDATAFORMAT_SUBTYPE_VPVBI);
2561     #define KSDATAFORMAT_SUBTYPE_VPVBI DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_VPVBI)
2562    
2563    
2564     // FORMAT_VideoInfo
2565     #define STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO\
2566     0x05589f80L, 0xc356, 0x11ce, 0xbf, 0x01, 0x00, 0xaa, 0x00, 0x55, 0x59, 0x5a
2567     DEFINE_GUIDSTRUCT("05589f80-c356-11ce-bf01-00aa0055595a", KSDATAFORMAT_SPECIFIER_VIDEOINFO);
2568     #define KSDATAFORMAT_SPECIFIER_VIDEOINFO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VIDEOINFO)
2569    
2570     // FORMAT_VideoInfo2
2571     #define STATIC_KSDATAFORMAT_SPECIFIER_VIDEOINFO2\
2572     0xf72a76A0L, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba
2573     DEFINE_GUIDSTRUCT("f72a76A0-eb0a-11d0-ace4-0000c0cc16ba", KSDATAFORMAT_SPECIFIER_VIDEOINFO2);
2574     #define KSDATAFORMAT_SPECIFIER_VIDEOINFO2 DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VIDEOINFO2)
2575    
2576     // MEDIATYPE_AnalogVideo
2577     #define STATIC_KSDATAFORMAT_TYPE_ANALOGVIDEO\
2578     0x0482dde1L, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65
2579     DEFINE_GUIDSTRUCT("0482dde1-7817-11cf-8a03-00aa006ecb65", KSDATAFORMAT_TYPE_ANALOGVIDEO);
2580     #define KSDATAFORMAT_TYPE_ANALOGVIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_ANALOGVIDEO)
2581    
2582     // FORMAT_AnalogVideo
2583     #define STATIC_KSDATAFORMAT_SPECIFIER_ANALOGVIDEO\
2584     0x0482dde0L, 0x7817, 0x11cf, 0x8a, 0x03, 0x00, 0xaa, 0x00, 0x6e, 0xcb, 0x65
2585     DEFINE_GUIDSTRUCT("0482dde0-7817-11cf-8a03-00aa006ecb65", KSDATAFORMAT_SPECIFIER_ANALOGVIDEO);
2586     #define KSDATAFORMAT_SPECIFIER_ANALOGVIDEO DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_ANALOGVIDEO)
2587    
2588     // FORMAT_VBI
2589     #define STATIC_KSDATAFORMAT_SPECIFIER_VBI\
2590     0xf72a76e0L, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba
2591     DEFINE_GUIDSTRUCT("f72a76e0-eb0a-11d0-ace4-0000c0cc16ba", KSDATAFORMAT_SPECIFIER_VBI);
2592     #define KSDATAFORMAT_SPECIFIER_VBI DEFINE_GUIDNAMED(KSDATAFORMAT_SPECIFIER_VBI)
2593    
2594     // MEDIATYPE_VBI
2595     #define STATIC_KSDATAFORMAT_TYPE_VBI\
2596     0xf72a76e1L, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba
2597     DEFINE_GUIDSTRUCT("f72a76e1-eb0a-11d0-ace4-0000c0cc16ba", KSDATAFORMAT_TYPE_VBI);
2598     #define KSDATAFORMAT_TYPE_VBI DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_VBI)
2599    
2600     // SUBTYPE_RAW8
2601     #define STATIC_KSDATAFORMAT_SUBTYPE_RAW8\
2602     0xca20d9a0, 0x3e3e, 0x11d1, 0x9b, 0xf9, 0x0, 0xc0, 0x4f, 0xbb, 0xde, 0xbf
2603     DEFINE_GUIDSTRUCT("ca20d9a0-3e3e-11d1-9bf9-00c04fbbdebf", KSDATAFORMAT_SUBTYPE_RAW8);
2604     #define KSDATAFORMAT_SUBTYPE_RAW8 DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_RAW8)
2605    
2606     // MEDIASUBTYPE_CC
2607     #define STATIC_KSDATAFORMAT_SUBTYPE_CC\
2608     0x33214cc1, 0x11f, 0x11d2, 0xb4, 0xb1, 0x0, 0xa0, 0xd1, 0x2, 0xcf, 0xbe
2609     DEFINE_GUIDSTRUCT("33214CC1-011F-11D2-B4B1-00A0D102CFBE", KSDATAFORMAT_SUBTYPE_CC);
2610     #define KSDATAFORMAT_SUBTYPE_CC DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_CC)
2611    
2612     // MEDIASUBTYPE_NABTS
2613     #define STATIC_KSDATAFORMAT_SUBTYPE_NABTS\
2614     0xf72a76e2L, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba
2615     DEFINE_GUIDSTRUCT("f72a76e2-eb0a-11d0-ace4-0000c0cc16ba", KSDATAFORMAT_SUBTYPE_NABTS);
2616     #define KSDATAFORMAT_SUBTYPE_NABTS DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_NABTS)
2617    
2618     // MEDIASUBTYPE_TELETEXT
2619     #define STATIC_KSDATAFORMAT_SUBTYPE_TELETEXT\
2620     0xf72a76e3L, 0xeb0a, 0x11d0, 0xac, 0xe4, 0x00, 0x00, 0xc0, 0xcc, 0x16, 0xba
2621     DEFINE_GUIDSTRUCT("f72a76e3-eb0a-11d0-ace4-0000c0cc16ba", KSDATAFORMAT_SUBTYPE_TELETEXT);
2622     #define KSDATAFORMAT_SUBTYPE_TELETEXT DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_TELETEXT)
2623    
2624    
2625    
2626     /* constants for the biCompression field */
2627     #define KS_BI_RGB 0L
2628     #define KS_BI_RLE8 1L
2629     #define KS_BI_RLE4 2L
2630     #define KS_BI_BITFIELDS 3L
2631    
2632     typedef struct tagKS_RGBQUAD { // rgbq
2633     BYTE rgbBlue;
2634     BYTE rgbGreen;
2635     BYTE rgbRed;
2636     BYTE rgbReserved;
2637     } KS_RGBQUAD, *PKS_RGBQUAD;
2638    
2639     /* constants for palettes */
2640     #define KS_iPALETTE_COLORS 256 // Maximum colours in palette
2641     #define KS_iEGA_COLORS 16 // Number colours in EGA palette
2642     #define KS_iMASK_COLORS 3 // Maximum three components
2643     #define KS_iTRUECOLOR 16 // Minimum true colour device
2644     #define KS_iRED 0 // Index position for RED mask
2645     #define KS_iGREEN 1 // Index position for GREEN mask
2646     #define KS_iBLUE 2 // Index position for BLUE mask
2647     #define KS_iPALETTE 8 // Maximum colour depth using a palette
2648     #define KS_iMAXBITS 8 // Maximum bits per colour component
2649     #define KS_SIZE_EGA_PALETTE (KS_iEGA_COLORS * sizeof(KS_RGBQUAD))
2650     #define KS_SIZE_PALETTE (KS_iPALETTE_COLORS * sizeof(KS_RGBQUAD))
2651    
2652     typedef struct tagKS_BITMAPINFOHEADER{
2653     DWORD biSize;
2654     LONG biWidth;
2655     LONG biHeight;
2656     WORD biPlanes;
2657     WORD biBitCount;
2658     DWORD biCompression;
2659     DWORD biSizeImage;
2660     LONG biXPelsPerMeter;
2661     LONG biYPelsPerMeter;
2662     DWORD biClrUsed;
2663     DWORD biClrImportant;
2664     } KS_BITMAPINFOHEADER, *PKS_BITMAPINFOHEADER;
2665    
2666     // Used for true colour images that also have a palette
2667    
2668     typedef struct tag_KS_TRUECOLORINFO {
2669     DWORD dwBitMasks[KS_iMASK_COLORS];
2670     KS_RGBQUAD bmiColors[KS_iPALETTE_COLORS];
2671     } KS_TRUECOLORINFO, *PKS_TRUECOLORINFO;
2672    
2673    
2674     #define KS_WIDTHBYTES(bits) ((DWORD)(((bits)+31) & (~31)) / 8)
2675     #define KS_DIBWIDTHBYTES(bi) (DWORD)KS_WIDTHBYTES((DWORD)(bi).biWidth * (DWORD)(bi).biBitCount)
2676     #define KS__DIBSIZE(bi) (KS_DIBWIDTHBYTES(bi) * (DWORD)(bi).biHeight)
2677     #define KS_DIBSIZE(bi) ((bi).biHeight < 0 ? (-1)*(KS__DIBSIZE(bi)) : KS__DIBSIZE(bi))
2678    
2679     typedef LONGLONG REFERENCE_TIME;
2680    
2681     // The BITMAPINFOHEADER contains all the details about the video stream such
2682     // as the actual image dimensions and their pixel depth. A source filter may
2683     // also request that the sink take only a section of the video by providing a
2684     // clipping rectangle in rcSource. In the worst case where the sink filter
2685     // forgets to check this on connection it will simply render the whole thing
2686     // which isn't a disaster. Ideally a sink filter will check the rcSource and
2687     // if it doesn't support image extraction and the rectangle is not empty then
2688     // it will reject the connection. A filter should use SetRectEmpty to reset a
2689     // rectangle to all zeroes (and IsRectEmpty to later check the rectangle).
2690     // The rcTarget specifies the destination rectangle for the video, for most
2691     // source filters they will set this to all zeroes, a downstream filter may
2692     // request that the video be placed in a particular area of the buffers it
2693     // supplies in which case it will call QueryAccept with a non empty target
2694    
2695     typedef struct tagKS_VIDEOINFOHEADER {
2696    
2697     RECT rcSource; // The bit we really want to use
2698     RECT rcTarget; // Where the video should go
2699     DWORD dwBitRate; // Approximate bit data rate
2700     DWORD dwBitErrorRate; // Bit error rate for this stream
2701     REFERENCE_TIME AvgTimePerFrame; // Average time per frame (100ns units)
2702    
2703     KS_BITMAPINFOHEADER bmiHeader;
2704    
2705     } KS_VIDEOINFOHEADER, *PKS_VIDEOINFOHEADER;
2706    
2707     // !!! WARNING !!!
2708     // DO NOT use the following structure unless you are sure that the BITMAPINFOHEADER
2709     // has a normal biSize == sizeof(BITMAPINFOHEADER) !
2710     // !!! WARNING !!!
2711    
2712     typedef struct tagKS_VIDEOINFO {
2713    
2714     RECT rcSource; // The bit we really want to use
2715     RECT rcTarget; // Where the video should go
2716     DWORD dwBitRate; // Approximate bit data rate
2717     DWORD dwBitErrorRate; // Bit error rate for this stream
2718     REFERENCE_TIME AvgTimePerFrame; // Average time per frame (100ns units)
2719    
2720     KS_BITMAPINFOHEADER bmiHeader;
2721    
2722     union {
2723     KS_RGBQUAD bmiColors[KS_iPALETTE_COLORS]; // Colour palette
2724     DWORD dwBitMasks[KS_iMASK_COLORS]; // True colour masks
2725     KS_TRUECOLORINFO TrueColorInfo; // Both of the above
2726     };
2727    
2728     } KS_VIDEOINFO, *PKS_VIDEOINFO;
2729    
2730    
2731     #define KS_SIZE_MASKS (KS_iMASK_COLORS * sizeof(DWORD))
2732     #define KS_SIZE_PREHEADER (FIELD_OFFSET(KS_VIDEOINFOHEADER,bmiHeader))
2733    
2734     // For normal size
2735     // #define KS_SIZE_VIDEOHEADER (sizeof(KS_BITMAPINFOHEADER) + KS_SIZE_PREHEADER)
2736     // !!! for abnormal biSizes
2737     #define KS_SIZE_VIDEOHEADER(pbmi) ((pbmi)->bmiHeader.biSize + KS_SIZE_PREHEADER)
2738    
2739     // VBI
2740     // Used for NABTS, CC, Intercast,
2741     typedef struct tagKS_VBIINFOHEADER {
2742     ULONG StartLine; // inclusive
2743     ULONG EndLine; // inclusive
2744     ULONG SamplingFrequency; // Hz.
2745     ULONG MinLineStartTime; // microSec * 100 from HSync LE
2746     ULONG MaxLineStartTime; // microSec * 100 from HSync LE
2747     ULONG ActualLineStartTime; // microSec * 100 from HSync LE
2748     ULONG ActualLineEndTime; // microSec * 100 from HSync LE
2749     ULONG VideoStandard; // KS_AnalogVideoStandard*
2750     ULONG SamplesPerLine;
2751     ULONG StrideInBytes; // May be > SamplesPerLine
2752     ULONG BufferSize; // Bytes
2753     } KS_VBIINFOHEADER, *PKS_VBIINFOHEADER;
2754    
2755     // VBI Sampling Rates
2756     #define KS_VBIDATARATE_NABTS (5727272L)
2757     #define KS_VBIDATARATE_CC ( 503493L) // ~= 1/1.986125e-6
2758     #define KS_VBISAMPLINGRATE_4X_NABTS ((long)(4*KS_VBIDATARATE_NABTS))
2759     #define KS_VBISAMPLINGRATE_47X_NABTS ((long)(27000000))
2760     #define KS_VBISAMPLINGRATE_5X_NABTS ((long)(5*KS_VBIDATARATE_NABTS))
2761    
2762     #define KS_47NABTS_SCALER (KS_VBISAMPLINGRATE_47X_NABTS/(double)KS_VBIDATARATE_NABTS)
2763    
2764     // Analog video variant - Use this when the format is FORMAT_AnalogVideo
2765     //
2766     // rcSource defines the portion of the active video signal to use
2767     // rcTarget defines the destination rectangle
2768     // both of the above are relative to the dwActiveWidth and dwActiveHeight fields
2769     // dwActiveWidth is currently set to 720 for all formats (but could change for HDTV)
2770     // dwActiveHeight is 483 for NTSC and 575 for PAL/SECAM (but could change for HDTV)
2771    
2772     typedef struct tagKS_AnalogVideoInfo {
2773     RECT rcSource; // Width max is 720, height varies w/ TransmissionStd
2774     RECT rcTarget; // Where the video should go
2775     DWORD dwActiveWidth; // Always 720 (CCIR-601 active samples per line)
2776     DWORD dwActiveHeight; // 483 for NTSC, 575 for PAL/SECAM
2777     REFERENCE_TIME AvgTimePerFrame; // Normal ActiveMovie units (100 nS)
2778     } KS_ANALOGVIDEOINFO, *PKS_ANALOGVIDEOINFO;
2779    
2780     //===========================================================================
2781     // Data packet passed on Analog video stream channel change
2782     //===========================================================================
2783    
2784     #define KS_TVTUNER_CHANGE_BEGIN_TUNE 0x0001L // Starting a tuning operation
2785     #define KS_TVTUNER_CHANGE_END_TUNE 0x0002L // Ending a tuning operation
2786    
2787     typedef struct tagKS_TVTUNER_CHANGE_INFO {
2788     DWORD dwFlags; // KS_TVTUNER_CHANGE_*
2789     DWORD dwCountryCode;
2790     DWORD dwAnalogVideoStandard; // KS_AnalogVideoStandard
2791     DWORD dwChannel;
2792     } KS_TVTUNER_CHANGE_INFO, *PKS_TVTUNER_CHANGE_INFO;
2793    
2794     //===========================================================================
2795     // Video format blocks
2796     //===========================================================================
2797    
2798     typedef enum {
2799     KS_MPEG2Level_Low,
2800     KS_MPEG2Level_Main,
2801     KS_MPEG2Level_High1440,
2802     KS_MPEG2Level_High
2803     } KS_MPEG2Level;
2804    
2805     typedef enum {
2806     KS_MPEG2Profile_Simple,
2807     KS_MPEG2Profile_Main,
2808     KS_MPEG2Profile_SNRScalable,
2809     KS_MPEG2Profile_SpatiallyScalable,
2810     KS_MPEG2Profile_High
2811     } KS_MPEG2Profile;
2812    
2813     #define KS_INTERLACE_IsInterlaced 0x00000001 // if 0, other interlace bits are irrelevent
2814     #define KS_INTERLACE_1FieldPerSample 0x00000002 // else 2 fields per media sample
2815     #define KS_INTERLACE_Field1First 0x00000004 // else Field 2 is first; top field in PAL is field 1, top field in NTSC is field 2?
2816     #define KS_INTERLACE_UNUSED 0x00000008 //
2817     #define KS_INTERLACE_FieldPatternMask 0x00000030 // use this mask with AMINTERLACE_FieldPat*
2818     #define KS_INTERLACE_FieldPatField1Only 0x00000000 // Data never contains a Field2
2819     #define KS_INTERLACE_FieldPatField2Only 0x00000010 // Data never contains a Field1
2820     #define KS_INTERLACE_FieldPatBothRegular 0x00000020 // There will be a Field2 for every Field1 (required for Weave?)
2821     #define KS_INTERLACE_FieldPatBothIrregular 0x00000030 // Random pattern of Field1s and Field2s
2822     #define KS_INTERLACE_DisplayModeMask 0x000000c0
2823     #define KS_INTERLACE_DisplayModeBobOnly 0x00000000
2824     #define KS_INTERLACE_DisplayModeWeaveOnly 0x00000040
2825     #define KS_INTERLACE_DisplayModeBobOrWeave 0x00000080
2826    
2827    
2828    
2829     #define KS_MPEG2_DoPanScan 0x00000001 //if set, the MPEG-2 video decoder should crop output image
2830     // based on pan-scan vectors in picture_display_extension
2831     // and change the picture aspect ratio accordingly.
2832     #define KS_MPEG2_DVDLine21Field1 0x00000002 //if set, the MPEG-2 decoder must be able to produce an output
2833     // pin for DVD style closed caption data found in GOP layer of field 1
2834     #define KS_MPEG2_DVDLine21Field2 0x00000004 //if set, the MPEG-2 decoder must be able to produce an output
2835     // pin for DVD style closed caption data found in GOP layer of field 2
2836     #define KS_MPEG2_SourceIsLetterboxed 0x00000008 //if set, indicates that black bars have been encoded in the top
2837     // and bottom of the video.
2838     #define KS_MPEG2_FilmCameraMode 0x00000010 //if set, indicates "film mode" used for 625/50 content. If cleared,
2839     // indicates that "camera mode" was used.
2840     #define KS_MPEG2_LetterboxAnalogOut 0x00000020 //if set and this stream is sent to an analog output, it should
2841     // be letterboxed. Streams sent to VGA should be letterboxed only by renderers.
2842     #define KS_MPEG2_DSS_UserData 0x00000040 //if set, the MPEG-2 decoder must process DSS style user data
2843     #define KS_MPEG2_DVB_UserData 0x00000080 //if set, the MPEG-2 decoder must process DVB style user data
2844     #define KS_MPEG2_27MhzTimebase 0x00000100 //if set, the PTS,DTS timestamps advance at 27MHz rather than 90KHz
2845    
2846     typedef struct tagKS_VIDEOINFOHEADER2 {
2847     RECT rcSource;
2848     RECT rcTarget;
2849     DWORD dwBitRate;
2850     DWORD dwBitErrorRate;
2851     REFERENCE_TIME AvgTimePerFrame;
2852     DWORD dwInterlaceFlags; // use AMINTERLACE_* defines. Reject connection if undefined bits are not 0
2853     DWORD dwCopyProtectFlags; // use AMCOPYPROTECT_* defines. Reject connection if undefined bits are not 0
2854     DWORD dwPictAspectRatioX; // X dimension of picture aspect ratio, e.g. 16 for 16x9 display
2855     DWORD dwPictAspectRatioY; // Y dimension of picture aspect ratio, e.g. 9 for 16x9 display
2856     DWORD dwReserved1; // must be 0; reject connection otherwise
2857     DWORD dwReserved2; // must be 0; reject connection otherwise
2858     KS_BITMAPINFOHEADER bmiHeader;
2859     } KS_VIDEOINFOHEADER2, *PKS_VIDEOINFOHEADER2;
2860    
2861     typedef struct tagKS_MPEG1VIDEOINFO {
2862     KS_VIDEOINFOHEADER hdr; // Compatible with VIDEOINFO
2863     DWORD dwStartTimeCode; // 25-bit Group of pictures time code at start of data
2864     DWORD cbSequenceHeader; // Length in bytes of bSequenceHeader
2865     BYTE bSequenceHeader[1]; // Sequence header including quantization matrices if any
2866     } KS_MPEG1VIDEOINFO, *PKS_MPEG1VIDEOINFO;
2867    
2868     #define KS_MAX_SIZE_MPEG1_SEQUENCE_INFO 140
2869     #define KS_SIZE_MPEG1VIDEOINFO(pv) (FIELD_OFFSET(KS_MPEG1VIDEOINFO, bSequenceHeader[0]) + (pv)->cbSequenceHeader)
2870     #define KS_MPEG1_SEQUENCE_INFO(pv) ((const BYTE *)(pv)->bSequenceHeader)
2871    
2872     typedef struct tagKS_MPEGVIDEOINFO2 {
2873     KS_VIDEOINFOHEADER2 hdr;
2874     DWORD dwStartTimeCode; // ?? not used for DVD ??
2875     DWORD cbSequenceHeader; // is 0 for DVD (no sequence header)
2876     DWORD dwProfile; // use enum MPEG2Profile
2877     DWORD dwLevel; // use enum MPEG2Level
2878     DWORD dwFlags; // use AMMPEG2_* defines. Reject connection if undefined bits are not 0
2879     DWORD bSequenceHeader[1]; // DWORD instead of Byte for alignment purposes
2880     // For MPEG-2, if a sequence_header is included, the sequence_extension
2881     // should also be included
2882     } KS_MPEGVIDEOINFO2, *PKS_MPEGVIDEOINFO2;
2883    
2884    
2885     #define KS_SIZE_MPEGVIDEOINFO2(pv) (FIELD_OFFSET(KS_MPEGVIDEOINFO2, bSequenceHeader[0]) + (pv)->cbSequenceHeader)
2886     #define KS_MPEG1_SEQUENCE_INFO(pv) ((const BYTE *)(pv)->bSequenceHeader)
2887    
2888     //===========================================================================
2889     // Audio format blocks
2890     //===========================================================================
2891    
2892     //if set, the PTS,DTS timestamps advance at 27MHz rather than 90KHz
2893     #define KS_MPEGAUDIOINFO_27MhzTimebase 0x00000001
2894    
2895     typedef struct tagKS_MPEAUDIOINFO {
2896     DWORD dwFlags; // use KS_MPEGAUDIOINFO_* defines. Reject connection if undefined bits are not 0
2897     DWORD dwReserved1; // must be 0; reject connection otherwise
2898     DWORD dwReserved2; // must be 0; reject connection otherwise
2899     DWORD dwReserved3; // must be 0; reject connection otherwise
2900     } KS_MPEGAUDIOINFO, *PKS_MPEGAUDIOINFO;
2901    
2902     //===========================================================================
2903     // Video DATAFORMATs
2904     //===========================================================================
2905    
2906     typedef struct tagKS_DATAFORMAT_VIDEOINFOHEADER {
2907     KSDATAFORMAT DataFormat;
2908     KS_VIDEOINFOHEADER VideoInfoHeader;
2909     } KS_DATAFORMAT_VIDEOINFOHEADER, *PKS_DATAFORMAT_VIDEOINFOHEADER;
2910    
2911     typedef struct tagKS_DATAFORMAT_VIDEOINFOHEADER2 {
2912     KSDATAFORMAT DataFormat;
2913     KS_VIDEOINFOHEADER2 VideoInfoHeader2;
2914     } KS_DATAFORMAT_VIDEOINFOHEADER2, *PKS_DATAFORMAT_VIDEOINFOHEADER2;
2915    
2916     typedef struct tagKS_DATAFORMAT_VIDEOINFO_PALETTE {
2917     KSDATAFORMAT DataFormat;
2918     KS_VIDEOINFO VideoInfo;
2919     } KS_DATAFORMAT_VIDEOINFO_PALETTE, *PKS_DATAFORMAT_VIDEOINFO_PALETTE;
2920    
2921     typedef struct tagKS_DATAFORMAT_VBIINFOHEADER {
2922     KSDATAFORMAT DataFormat;
2923     KS_VBIINFOHEADER VBIInfoHeader;
2924     } KS_DATAFORMAT_VBIINFOHEADER, *PKS_DATAFORMAT_VBIINFOHEADER;
2925    
2926     typedef struct _KS_VIDEO_STREAM_CONFIG_CAPS {
2927     GUID guid; // will be MEDIATYPE_Video
2928     ULONG VideoStandard; // logical OR of all AnalogVideoStandards
2929     // supported
2930     SIZE InputSize; // the inherent size of the incoming signal
2931     // (every pixel unique)
2932     SIZE MinCroppingSize; // smallest rcSrc cropping rect allowed
2933     SIZE MaxCroppingSize; // largest rcSrc cropping rect allowed
2934     int CropGranularityX; // granularity of cropping size
2935     int CropGranularityY;
2936     int CropAlignX; // alignment of cropping rect
2937     int CropAlignY;
2938     SIZE MinOutputSize; // smallest bitmap stream can produce
2939     SIZE MaxOutputSize; // largest bitmap stream can produce
2940     int OutputGranularityX; // granularity of output bitmap size
2941     int OutputGranularityY;
2942     int StretchTapsX; // 0, no stretch, 1 pix dup, 2 interp, ...
2943     int StretchTapsY; // Describes quality of hardware scaler
2944     int ShrinkTapsX; //
2945     int ShrinkTapsY; //
2946     LONGLONG MinFrameInterval; // 100 nS units
2947     LONGLONG MaxFrameInterval;
2948     LONG MinBitsPerSecond;
2949     LONG MaxBitsPerSecond;
2950     } KS_VIDEO_STREAM_CONFIG_CAPS, *PKS_VIDEO_STREAM_CONFIG_CAPS;
2951    
2952     //===========================================================================
2953     // Video DATARANGEs
2954     //===========================================================================
2955    
2956     typedef struct tagKS_DATARANGE_VIDEO {
2957     KSDATARANGE DataRange;
2958     BOOL bFixedSizeSamples; // all samples same size?
2959     BOOL bTemporalCompression; // all I frames?
2960     DWORD StreamDescriptionFlags; // KS_VIDEO_DESC_*
2961     DWORD MemoryAllocationFlags; // KS_VIDEO_ALLOC_*
2962     KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps;
2963     KS_VIDEOINFOHEADER VideoInfoHeader; // default format
2964     } KS_DATARANGE_VIDEO, *PKS_DATARANGE_VIDEO;
2965    
2966     typedef struct tagKS_DATARANGE_VIDEO2 {
2967     KSDATARANGE DataRange;
2968     BOOL bFixedSizeSamples; // all samples same size?
2969     BOOL bTemporalCompression; // all I frames?
2970     DWORD StreamDescriptionFlags; // KS_VIDEO_DESC_*
2971     DWORD MemoryAllocationFlags; // KS_VIDEO_ALLOC_*
2972     KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps;
2973     KS_VIDEOINFOHEADER2 VideoInfoHeader; // default format
2974     } KS_DATARANGE_VIDEO2, *PKS_DATARANGE_VIDEO2;
2975    
2976     typedef struct tagKS_DATARANGE_MPEG1_VIDEO {
2977     KSDATARANGE DataRange;
2978     BOOL bFixedSizeSamples; // all samples same size?
2979     BOOL bTemporalCompression; // all I frames?
2980     DWORD StreamDescriptionFlags; // KS_VIDEO_DESC_*
2981     DWORD MemoryAllocationFlags; // KS_VIDEO_ALLOC_*
2982     KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps;
2983     KS_MPEG1VIDEOINFO VideoInfoHeader; // default format
2984     } KS_DATARANGE_MPEG1_VIDEO, *PKS_DATARANGE_MPEG1_VIDEO;
2985    
2986     typedef struct tagKS_DATARANGE_MPEG2_VIDEO {
2987     KSDATARANGE DataRange;
2988     BOOL bFixedSizeSamples; // all samples same size?
2989     BOOL bTemporalCompression; // all I frames?
2990     DWORD StreamDescriptionFlags; // KS_VIDEO_DESC_*
2991     DWORD MemoryAllocationFlags; // KS_VIDEO_ALLOC_*
2992     KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps;
2993     KS_MPEGVIDEOINFO2 VideoInfoHeader; // default format
2994     } KS_DATARANGE_MPEG2_VIDEO, *PKS_DATARANGE_MPEG2_VIDEO;
2995    
2996     typedef struct tagKS_DATARANGE_VIDEO_PALETTE {
2997     KSDATARANGE DataRange;
2998     BOOL bFixedSizeSamples; // all samples same size?
2999     BOOL bTemporalCompression; // all I frames?
3000     DWORD StreamDescriptionFlags; // KS_VIDEO_DESC_*
3001     DWORD MemoryAllocationFlags; // KS_VIDEO_ALLOC_*
3002     KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps;
3003     KS_VIDEOINFO VideoInfo; // default format
3004     } KS_DATARANGE_VIDEO_PALETTE, *PKS_DATARANGE_VIDEO_PALETTE;
3005    
3006     typedef struct tagKS_DATARANGE_VIDEO_VBI {
3007     KSDATARANGE DataRange;
3008     BOOL bFixedSizeSamples; // all samples same size?
3009     BOOL bTemporalCompression; // all I frames?
3010     DWORD StreamDescriptionFlags; // KS_VIDEO_DESC_*
3011     DWORD MemoryAllocationFlags; // KS_VIDEO_ALLOC_*
3012     KS_VIDEO_STREAM_CONFIG_CAPS ConfigCaps;
3013     KS_VBIINFOHEADER VBIInfoHeader; // default format
3014     } KS_DATARANGE_VIDEO_VBI, *PKS_DATARANGE_VIDEO_VBI;
3015    
3016     typedef struct tagKS_DATARANGE_ANALOGVIDEO {
3017     KSDATARANGE DataRange;
3018     KS_ANALOGVIDEOINFO AnalogVideoInfo;
3019     } KS_DATARANGE_ANALOGVIDEO, *PKS_DATARANGE_ANALOGVIDEO;
3020    
3021     //===========================================================================
3022     // StreamDescriptionFlags
3023     //
3024     // These define the "purpose" of each video stream
3025     //===========================================================================
3026    
3027     #define KS_VIDEOSTREAM_PREVIEW 0x0001 // Preview stream
3028     #define KS_VIDEOSTREAM_CAPTURE 0x0002 // Capture stream
3029     #define KS_VIDEOSTREAM_VBI 0x0010 // Field1 VBI
3030     #define KS_VIDEOSTREAM_NABTS 0x0020 // Field1 NABTS
3031     #define KS_VIDEOSTREAM_CC 0x0100 // Closed Captioning
3032     #define KS_VIDEOSTREAM_EDS 0x0200 // Extended Data Services
3033     #define KS_VIDEOSTREAM_TELETEXT 0x0400 // Field1 Teletext only
3034     #define KS_VIDEOSTREAM_STILL 0x1000 // Still image input
3035     #define KS_VIDEOSTREAM_IS_VPE 0x8000 // Is a VPE based stream?
3036    
3037     // MemoryAllocationFlags
3038     #define KS_VIDEO_ALLOC_VPE_SYSTEM 0x0001 // VPE surface in system memory
3039     #define KS_VIDEO_ALLOC_VPE_DISPLAY 0x0002 // VPE surface in display memory
3040     #define KS_VIDEO_ALLOC_VPE_AGP 0x0004 // VPE surface in AGP memory
3041    
3042     //////////////////////////////////////////////////////////////
3043     // Capture driver VBI property sets
3044     //////////////////////////////////////////////////////////////
3045    
3046     // {F162C607-7B35-496f-AD7F-2DCA3B46B718}
3047     #define STATIC_KSPROPSETID_VBICAP_PROPERTIES\
3048     0xf162c607, 0x7b35, 0x496f, 0xad, 0x7f, 0x2d, 0xca, 0x3b, 0x46, 0xb7, 0x18
3049     DEFINE_GUIDSTRUCT("F162C607-7B35-496f-AD7F-2DCA3B46B718", KSPROPSETID_VBICAP_PROPERTIES);
3050     #define KSPROPSETID_VBICAP_PROPERTIES DEFINE_GUIDNAMED(KSPROPSETID_VBICAP_PROPERTIES)
3051    
3052     typedef enum {
3053     KSPROPERTY_VBICAP_PROPERTIES_PROTECTION = 0x01,
3054     } KSPROPERTY_VBICAP;
3055    
3056     typedef struct _VBICAP_PROPERTIES_PROTECTION_S {
3057     KSPROPERTY Property;
3058     ULONG StreamIndex; // Index of stream
3059     ULONG Status;
3060     } VBICAP_PROPERTIES_PROTECTION_S, *PVBICAP_PROPERTIES_PROTECTION_S;
3061     #define KS_VBICAP_PROTECTION_MV_PRESENT 0x0001L
3062     #define KS_VBICAP_PROTECTION_MV_HARDWARE 0x0002L
3063     #define KS_VBICAP_PROTECTION_MV_DETECTED 0x0004L
3064    
3065    
3066     /***************************************************************************/
3067     /* VBI Related GUIDs, structs and properties for codecs(generic, cc, nabts)*/
3068     /***************************************************************************/
3069    
3070     ///////////////////////////////////////////////////////////////////////////////////////
3071     // IP/NABTS Protocol Reserved Group IDs - Overall Range 0x800-0x8FF [Decimal 2048-2079]
3072     // Intervening values(0-F) are used if there are multiple providers at a particular tier
3073     ///////////////////////////////////////////////////////////////////////////////////////
3074    
3075     // Used by individual content creators in show footage/data
3076     #define KS_NABTS_GROUPID_ORIGINAL_CONTENT_BASE 0x800
3077     #define KS_NABTS_GROUPID_ORIGINAL_CONTENT_ADVERTISER_BASE 0x810
3078    
3079     // Used by production company in finished show data
3080     #define KS_NABTS_GROUPID_PRODUCTION_COMPANY_CONTENT_BASE 0x820
3081     #define KS_NABTS_GROUPID_PRODUCTION_COMPANY_ADVERTISER_BASE 0x830
3082    
3083     // Used by broadcast syndicates in syndicated show data
3084     #define KS_NABTS_GROUPID_SYNDICATED_SHOW_CONTENT_BASE 0x840
3085     #define KS_NABTS_GROUPID_SYNDICATED_SHOW_ADVERTISER_BASE 0x850
3086    
3087     // Used by tv networks in network television data
3088     #define KS_NABTS_GROUPID_NETWORK_WIDE_CONTENT_BASE 0x860
3089     #define KS_NABTS_GROUPID_NETWORK_WIDE_ADVERTISER_BASE 0x870
3090    
3091     // Used by telvision stations in local programming data
3092     #define KS_NABTS_GROUPID_TELEVISION_STATION_CONTENT_BASE 0x880
3093     #define KS_NABTS_GROUPID_TELEVISION_STATION_ADVERTISER_BASE 0x890
3094    
3095     // Used by cable system in cable head-end originated data
3096     #define KS_NABTS_GROUPID_LOCAL_CABLE_SYSTEM_CONTENT_BASE 0x8A0
3097     #define KS_NABTS_GROUPID_LOCAL_CABLE_SYSTEM_ADVERTISER_BASE 0x8B0
3098    
3099     // The values between 0x8C0 - 0x8EF are reserved for future expansion
3100    
3101     // Used by Microsoft for Testing purposes (0x8F0 - 0x8FF)
3102     #define KS_NABTS_GROUPID_MICROSOFT_RESERVED_TEST_DATA_BASE 0x8F0
3103    
3104     //////////////////////////////////////////////////////////////
3105     // Stream Format FEC-corrected NABTS bundles
3106     //////////////////////////////////////////////////////////////
3107    
3108     #define STATIC_KSDATAFORMAT_TYPE_NABTS \
3109     0xe757bca0, 0x39ac, 0x11d1, 0xa9, 0xf5, 0x0, 0xc0, 0x4f, 0xbb, 0xde, 0x8f
3110     DEFINE_GUIDSTRUCT("E757BCA0-39AC-11d1-A9F5-00C04FBBDE8F", KSDATAFORMAT_TYPE_NABTS);
3111     #define KSDATAFORMAT_TYPE_NABTS DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_NABTS)
3112    
3113     #define STATIC_KSDATAFORMAT_SUBTYPE_NABTS_FEC \
3114     0xe757bca1, 0x39ac, 0x11d1, 0xa9, 0xf5, 0x0, 0xc0, 0x4f, 0xbb, 0xde, 0x8f
3115     DEFINE_GUIDSTRUCT("E757BCA1-39AC-11d1-A9F5-00C04FBBDE8F", KSDATAFORMAT_SUBTYPE_NABTS_FEC);
3116     #define KSDATAFORMAT_SUBTYPE_NABTS_FEC DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_NABTS_FEC)
3117    
3118    
3119     //////////////////////////////////////////////////////////////
3120     // NABTS Bundle data structure definition
3121     //////////////////////////////////////////////////////////////
3122    
3123     #define MAX_NABTS_VBI_LINES_PER_FIELD 11
3124     #define NABTS_LINES_PER_BUNDLE 16
3125     #define NABTS_PAYLOAD_PER_LINE 28
3126     #define NABTS_BYTES_PER_LINE 36
3127    
3128     typedef struct _NABTSFEC_BUFFER {
3129     ULONG dataSize;
3130     USHORT groupID;
3131     USHORT Reserved;
3132     UCHAR data[NABTS_LINES_PER_BUNDLE * NABTS_PAYLOAD_PER_LINE];
3133     } NABTSFEC_BUFFER, *PNABTSFEC_BUFFER;
3134    
3135     //////////////////////////////////////////////////////////////
3136     // vbi codec filtering pin properties
3137     //////////////////////////////////////////////////////////////
3138    
3139     #define STATIC_KSPROPSETID_VBICodecFiltering \
3140     0xcafeb0caL, 0x8715, 0x11d0, 0xbd, 0x6a, 0x00, 0x35, 0xc0, 0xed, 0xba, 0xbe
3141     DEFINE_GUIDSTRUCT("cafeb0ca-8715-11d0-bd6a-0035c0edbabe", KSPROPSETID_VBICodecFiltering);
3142     #define KSPROPSETID_VBICodecFiltering DEFINE_GUIDNAMED(KSPROPSETID_VBICodecFiltering)
3143    
3144     typedef enum {
3145     KSPROPERTY_VBICODECFILTERING_SCANLINES_REQUESTED_BIT_ARRAY = 0x01,
3146     KSPROPERTY_VBICODECFILTERING_SCANLINES_DISCOVERED_BIT_ARRAY,
3147     KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_REQUESTED_BIT_ARRAY,
3148     KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_DISCOVERED_BIT_ARRAY,
3149     KSPROPERTY_VBICODECFILTERING_STATISTICS,
3150     } KSPROPERTY_VBICODECFILTERING;
3151    
3152     typedef struct _VBICODECFILTERING_SCANLINES {
3153     DWORD DwordBitArray[32]; // An array of scanline bits 0..1024(32*32)
3154     } VBICODECFILTERING_SCANLINES, *PVBICODECFILTERING_SCANLINES;
3155    
3156     typedef struct _VBICODECFILTERING_NABTS_SUBSTREAMS {
3157     DWORD SubstreamMask[128]; // An array of 4096 bits (one for each NABTS GroupID)
3158     } VBICODECFILTERING_NABTS_SUBSTREAMS, *PVBICODECFILTERING_NABTS_SUBSTREAMS;
3159    
3160     typedef struct _VBICODECFILTERING_CC_SUBSTREAMS {
3161     DWORD SubstreamMask; // An array of 32 bits (see KS_CC_SUBSTREAM *)
3162     } VBICODECFILTERING_CC_SUBSTREAMS, *PVBICODECFILTERING_CC_SUBSTREAMS;
3163    
3164     #define KS_CC_SUBSTREAM_ODD 0x0001L
3165     #define KS_CC_SUBSTREAM_EVEN 0x0002L
3166     #define KS_CC_SUBSTREAM_SERVICE_MASK_DC1 0x00F0L // DataChannel1: CC1,CC3,T1,T3
3167     #define KS_CC_SUBSTREAM_SERVICE_CC1 0x0010L
3168     #define KS_CC_SUBSTREAM_SERVICE_CC3 0x0020L
3169     #define KS_CC_SUBSTREAM_SERVICE_T1 0x0040L
3170     #define KS_CC_SUBSTREAM_SERVICE_T3 0x0080L
3171     #define KS_CC_SUBSTREAM_SERVICE_MASK_DC2 0x0F00L // DataChannel2: CC2,CC4,T2,T4
3172     #define KS_CC_SUBSTREAM_SERVICE_CC2 0x0100L
3173     #define KS_CC_SUBSTREAM_SERVICE_CC4 0x0200L
3174     #define KS_CC_SUBSTREAM_SERVICE_T2 0x0400L
3175     #define KS_CC_SUBSTREAM_SERVICE_T4 0x0800L
3176     #define KS_CC_SUBSTREAM_SERVICE_XDS 0x1000L
3177    
3178     ///////////////////////////////////////////////////////////////////
3179     // Hardware decoded CC stream format
3180     ///////////////////////////////////////////////////////////////////
3181    
3182     #define CC_MAX_HW_DECODE_LINES 12
3183     typedef struct _CC_BYTE_PAIR {
3184     BYTE Decoded[2];
3185     USHORT Reserved;
3186     } CC_BYTE_PAIR, *PCC_BYTE_PAIR;
3187    
3188     typedef struct _CC_HW_FIELD {
3189     VBICODECFILTERING_SCANLINES ScanlinesRequested;
3190     ULONG fieldFlags; // KS_VBI_FLAG_FIELD1,2
3191     LONGLONG PictureNumber;
3192     CC_BYTE_PAIR Lines[CC_MAX_HW_DECODE_LINES];
3193     } CC_HW_FIELD, *PCC_HW_FIELD;
3194    
3195     ///////////////////////////////////////////////////////////////////
3196     // Raw NABTS stream format (TYPE_NABTS, SUBTYPE_NABTS)
3197     ///////////////////////////////////////////////////////////////////
3198    
3199     // These low-level structures are byte packed( -Zp1 )
3200     #if !defined( PACK_PRAGMAS_NOT_SUPPORTED )
3201     #include <pshpack1.h>
3202     #endif
3203     typedef struct _NABTS_BUFFER_LINE {
3204     BYTE Confidence;
3205     BYTE Bytes[NABTS_BYTES_PER_LINE];
3206     } NABTS_BUFFER_LINE, *PNABTS_BUFFER_LINE;
3207    
3208     #define NABTS_BUFFER_PICTURENUMBER_SUPPORT 1
3209     typedef struct _NABTS_BUFFER {
3210     VBICODECFILTERING_SCANLINES ScanlinesRequested;
3211     LONGLONG PictureNumber;
3212     NABTS_BUFFER_LINE NabtsLines[MAX_NABTS_VBI_LINES_PER_FIELD];
3213     } NABTS_BUFFER, *PNABTS_BUFFER;
3214     #if !defined( PACK_PRAGMAS_NOT_SUPPORTED )
3215     #include <poppack.h>
3216     #endif
3217    
3218     //
3219     // Common codec statistics
3220     //
3221    
3222     typedef struct _VBICODECFILTERING_STATISTICS_COMMON {
3223     DWORD InputSRBsProcessed; // upstream SRBs received
3224     DWORD OutputSRBsProcessed; // downstream SRBs sent
3225     DWORD SRBsIgnored; // SRBs ignored due to no requests
3226     DWORD InputSRBsMissing; // SRBs dropped upstream
3227     DWORD OutputSRBsMissing; // Output dropped because no SRB pending
3228     DWORD OutputFailures; // dropped because of other failure
3229     DWORD InternalErrors; // could not process due to int. failure
3230     DWORD ExternalErrors; // could not process due to ext. failure
3231     DWORD InputDiscontinuities; // discontinuities received
3232     DWORD DSPFailures; // DSP confidence failure
3233     DWORD TvTunerChanges; // number of received KS_TVTUNER_CHANGE_BEGIN_TUNE and KS_TVTUNER_CHANGE_END_TUNE pairs.
3234     DWORD VBIHeaderChanges; // number of received KS_VBI_FLAG_VBIINFOHEADER_CHANGE
3235     DWORD LineConfidenceAvg; // Average of all DSP confidence results
3236     DWORD BytesOutput; // Bytes sent downstream
3237     } VBICODECFILTERING_STATISTICS_COMMON, *PVBICODECFILTERING_STATISTICS_COMMON;
3238    
3239     typedef struct _VBICODECFILTERING_STATISTICS_COMMON_PIN {
3240     DWORD SRBsProcessed; // SRBs sent/received
3241     DWORD SRBsIgnored; // SRBs ignored due to filtering
3242     DWORD SRBsMissing; // SRBs not sent/received
3243     DWORD InternalErrors; // could not send/receive due to int. failure
3244     DWORD ExternalErrors; // could not send/receive due to ext. failure
3245     DWORD Discontinuities; // discontinuities received/sent
3246     DWORD LineConfidenceAvg; // Average of all DSP confidence results for this pin
3247     DWORD BytesOutput; // Bytes sent downstream
3248     } VBICODECFILTERING_STATISTICS_COMMON_PIN, *PVBICODECFILTERING_STATISTICS_COMMON_PIN;
3249    
3250     //
3251     // Codec-specific statistics - NABTS
3252     //
3253    
3254     typedef struct _VBICODECFILTERING_STATISTICS_NABTS {
3255     VBICODECFILTERING_STATISTICS_COMMON Common; // Generic VBI statistics
3256     DWORD FECBundleBadLines; // Un-FEC-correctable lines
3257     DWORD FECQueueOverflows; // Number of times FEC queue overflowed
3258     DWORD FECCorrectedLines; // Lines CSUM corrected by FEC
3259     DWORD FECUncorrectableLines; // FEC input lines not CSUM correctable
3260     DWORD BundlesProcessed; // Bundles received from FEC
3261     DWORD BundlesSent2IP; // Bundles sent to IP driver
3262     DWORD FilteredLines; // Lines processed and then dropped
3263     // because no one was interested
3264     } VBICODECFILTERING_STATISTICS_NABTS, *PVBICODECFILTERING_STATISTICS_NABTS;
3265    
3266     typedef struct _VBICODECFILTERING_STATISTICS_NABTS_PIN {
3267     VBICODECFILTERING_STATISTICS_COMMON_PIN Common;// Generic VBI pin statistics
3268     } VBICODECFILTERING_STATISTICS_NABTS_PIN, *PVBICODECFILTERING_STATISTICS_NABTS_PIN;
3269    
3270     //
3271     // Codec-specific statistics - Closed Caption
3272     //
3273    
3274     typedef struct _VBICODECFILTERING_STATISTICS_CC {
3275     VBICODECFILTERING_STATISTICS_COMMON Common; // Generic VBI statistics
3276     } VBICODECFILTERING_STATISTICS_CC, *PVBICODECFILTERING_STATISTICS_CC;
3277    
3278    
3279     typedef struct _VBICODECFILTERING_STATISTICS_CC_PIN {
3280     VBICODECFILTERING_STATISTICS_COMMON_PIN Common;// Generic VBI pin statistics
3281     } VBICODECFILTERING_STATISTICS_CC_PIN, *PVBICODECFILTERING_STATISTICS_CC_PIN;
3282    
3283     ////////////////////////////////////////////////////////////////////////////
3284     // VBI codec property structures(based on KSPROPERTY_VBICODECFILTERING enum)
3285     ////////////////////////////////////////////////////////////////////////////
3286    
3287     // *** Most codecs support this property
3288     // KSPROPERTY_VBICODECFILTERING_SCANLINES_REQUESTED_BIT_ARRAY
3289     // KSPROPERTY_VBICODECFILTERING_SCANLINES_DISCOVERED_BIT_ARRAY,
3290     typedef struct {
3291     KSPROPERTY Property;
3292     VBICODECFILTERING_SCANLINES Scanlines;
3293     } KSPROPERTY_VBICODECFILTERING_SCANLINES_S, *PKSPROPERTY_VBICODECFILTERING_SCANLINES_S;
3294    
3295     // *** NABTS codecs support this property
3296     // KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_REQUESTED_BIT_ARRAY,
3297     // KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_DISCOVERED_BIT_ARRAY,
3298     typedef struct {
3299     KSPROPERTY Property;
3300     VBICODECFILTERING_NABTS_SUBSTREAMS Substreams;
3301     } KSPROPERTY_VBICODECFILTERING_NABTS_SUBSTREAMS_S, *PKSPROPERTY_VBICODECFILTERING_NABTS_SUBSTREAMS_S;
3302    
3303     // *** Closed captioning codecs support this property
3304     // KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_REQUESTED_BIT_ARRAY,
3305     // KSPROPERTY_VBICODECFILTERING_SUBSTREAMS_DISCOVERED_BIT_ARRAY,
3306     typedef struct {
3307     KSPROPERTY Property;
3308     VBICODECFILTERING_CC_SUBSTREAMS Substreams;
3309     } KSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S, *PKSPROPERTY_VBICODECFILTERING_CC_SUBSTREAMS_S;
3310    
3311     // *** Most codecs support these versions of the global and pin properties
3312     // KSPROPERTY_VBICODECFILTERING_STATISTICS
3313     typedef struct {
3314     KSPROPERTY Property;
3315     VBICODECFILTERING_STATISTICS_COMMON Statistics;
3316     } KSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_S, *PKSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_S;
3317    
3318     typedef struct {
3319     KSPROPERTY Property;
3320     VBICODECFILTERING_STATISTICS_COMMON_PIN Statistics;
3321     } KSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_PIN_S, *PKSPROPERTY_VBICODECFILTERING_STATISTICS_COMMON_PIN_S;
3322    
3323     // *** NABTS codecs support this version of the global and pin properties
3324     // KSPROPERTY_VBICODECFILTERING_STATISTICS
3325     typedef struct {
3326     KSPROPERTY Property;
3327     VBICODECFILTERING_STATISTICS_NABTS Statistics;
3328     } KSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_S, *PKSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_S;
3329    
3330     typedef struct {
3331     KSPROPERTY Property;
3332     VBICODECFILTERING_STATISTICS_NABTS_PIN Statistics;
3333     } KSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_PIN_S, *PKSPROPERTY_VBICODECFILTERING_STATISTICS_NABTS_PIN_S;
3334    
3335     // *** Closed captioning codecs support this version of the global and pin properties
3336     // KSPROPERTY_VBICODECFILTERING_STATISTICS
3337    
3338     typedef struct {
3339     KSPROPERTY Property;
3340     VBICODECFILTERING_STATISTICS_CC Statistics;
3341     } KSPROPERTY_VBICODECFILTERING_STATISTICS_CC_S, *PKSPROPERTY_VBICODECFILTERING_STATISTICS_CC_S;
3342    
3343     typedef struct {
3344     KSPROPERTY Property;
3345     VBICODECFILTERING_STATISTICS_CC_PIN Statistics;
3346     } KSPROPERTY_VBICODECFILTERING_STATISTICS_CC_PIN_S, *PKSPROPERTY_VBICODECFILTERING_STATISTICS_CC_PIN_S;
3347    
3348     // Standard Pin Names for the video capture filter
3349     //===========================================================================
3350    
3351     #define STATIC_PINNAME_VIDEO_CAPTURE \
3352     0xfb6c4281, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
3353     #define STATIC_PINNAME_CAPTURE STATIC_PINNAME_VIDEO_CAPTURE
3354     DEFINE_GUIDSTRUCT("FB6C4281-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_CAPTURE);
3355     #define PINNAME_VIDEO_CAPTURE DEFINE_GUIDNAMED(PINNAME_VIDEO_CAPTURE)
3356     #define PINNAME_CAPTURE PINNAME_VIDEO_CAPTURE
3357    
3358     #define STATIC_PINNAME_VIDEO_CC_CAPTURE \
3359     0x1aad8061, 0x12d, 0x11d2, 0xb4, 0xb1, 0x0, 0xa0, 0xd1, 0x2, 0xcf, 0xbe
3360     #define STATIC_PINNAME_CC_CAPTURE STATIC_PINNAME_VIDEO_CC_CAPTURE
3361     DEFINE_GUIDSTRUCT("1AAD8061-012D-11d2-B4B1-00A0D102CFBE", PINNAME_VIDEO_CC_CAPTURE);
3362     #define PINNAME_VIDEO_CC_CAPTURE DEFINE_GUIDNAMED(PINNAME_VIDEO_CC_CAPTURE)
3363    
3364     #define STATIC_PINNAME_VIDEO_NABTS_CAPTURE \
3365     0x29703660, 0x498a, 0x11d2, 0xb4, 0xb1, 0x0, 0xa0, 0xd1, 0x2, 0xcf, 0xbe
3366     #define STATIC_PINNAME_NABTS_CAPTURE STATIC_PINNAME_VIDEO_NABTS_CAPTURE
3367     DEFINE_GUIDSTRUCT("29703660-498A-11d2-B4B1-00A0D102CFBE", PINNAME_VIDEO_NABTS_CAPTURE);
3368     #define PINNAME_VIDEO_NABTS_CAPTURE DEFINE_GUIDNAMED(PINNAME_VIDEO_NABTS_CAPTURE)
3369    
3370     #define STATIC_PINNAME_VIDEO_PREVIEW \
3371     0xfb6c4282, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
3372     #define STATIC_PINNAME_PREVIEW STATIC_PINNAME_VIDEO_PREVIEW
3373     DEFINE_GUIDSTRUCT("FB6C4282-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_PREVIEW);
3374     #define PINNAME_VIDEO_PREVIEW DEFINE_GUIDNAMED(PINNAME_VIDEO_PREVIEW)
3375     #define PINNAME_PREVIEW PINNAME_VIDEO_PREVIEW
3376    
3377     #define STATIC_PINNAME_VIDEO_ANALOGVIDEOIN \
3378     0xfb6c4283, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
3379     DEFINE_GUIDSTRUCT("FB6C4283-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_ANALOGVIDEOIN);
3380     #define PINNAME_VIDEO_ANALOGVIDEOIN DEFINE_GUIDNAMED(PINNAME_VIDEO_ANALOGVIDEOIN)
3381    
3382     #define STATIC_PINNAME_VIDEO_VBI \
3383     0xfb6c4284, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
3384     DEFINE_GUIDSTRUCT("FB6C4284-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_VBI);
3385     #define PINNAME_VIDEO_VBI DEFINE_GUIDNAMED(PINNAME_VIDEO_VBI)
3386    
3387     #define STATIC_PINNAME_VIDEO_VIDEOPORT \
3388     0xfb6c4285, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
3389     DEFINE_GUIDSTRUCT("FB6C4285-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_VIDEOPORT);
3390     #define PINNAME_VIDEO_VIDEOPORT DEFINE_GUIDNAMED(PINNAME_VIDEO_VIDEOPORT)
3391    
3392     #define STATIC_PINNAME_VIDEO_NABTS \
3393     0xfb6c4286, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
3394     DEFINE_GUIDSTRUCT("FB6C4286-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_NABTS);
3395     #define PINNAME_VIDEO_NABTS DEFINE_GUIDNAMED(PINNAME_VIDEO_NABTS)
3396    
3397     #define STATIC_PINNAME_VIDEO_EDS \
3398     0xfb6c4287, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
3399     DEFINE_GUIDSTRUCT("FB6C4287-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_EDS);
3400     #define PINNAME_VIDEO_EDS DEFINE_GUIDNAMED(PINNAME_VIDEO_EDS)
3401    
3402     #define STATIC_PINNAME_VIDEO_TELETEXT \
3403     0xfb6c4288, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
3404     DEFINE_GUIDSTRUCT("FB6C4288-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_TELETEXT);
3405     #define PINNAME_VIDEO_TELETEXT DEFINE_GUIDNAMED(PINNAME_VIDEO_TELETEXT)
3406    
3407     #define STATIC_PINNAME_VIDEO_CC \
3408     0xfb6c4289, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
3409     DEFINE_GUIDSTRUCT("FB6C4289-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_CC);
3410     #define PINNAME_VIDEO_CC DEFINE_GUIDNAMED(PINNAME_VIDEO_CC)
3411    
3412     #define STATIC_PINNAME_VIDEO_STILL \
3413     0xfb6c428A, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
3414     DEFINE_GUIDSTRUCT("FB6C428A-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_STILL);
3415     #define PINNAME_VIDEO_STILL DEFINE_GUIDNAMED(PINNAME_VIDEO_STILL)
3416    
3417     #define STATIC_PINNAME_VIDEO_TIMECODE \
3418     0xfb6c428B, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
3419     DEFINE_GUIDSTRUCT("FB6C428B-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_TIMECODE);
3420     #define PINNAME_VIDEO_TIMECODE DEFINE_GUIDNAMED(PINNAME_VIDEO_TIMECODE)
3421    
3422     #define STATIC_PINNAME_VIDEO_VIDEOPORT_VBI \
3423     0xfb6c428C, 0x353, 0x11d1, 0x90, 0x5f, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
3424     DEFINE_GUIDSTRUCT("FB6C428C-0353-11d1-905F-0000C0CC16BA", PINNAME_VIDEO_VIDEOPORT_VBI);
3425     #define PINNAME_VIDEO_VIDEOPORT_VBI DEFINE_GUIDNAMED(PINNAME_VIDEO_VIDEOPORT_VBI)
3426    
3427     //===========================================================================
3428     // KSSTREAM_HEADER extensions for digital video
3429     //===========================================================================
3430    
3431     #define KS_VIDEO_FLAG_FRAME 0x0000L // Frame or Field (default is frame)
3432     #define KS_VIDEO_FLAG_FIELD1 0x0001L
3433     #define KS_VIDEO_FLAG_FIELD2 0x0002L
3434    
3435     #define KS_VIDEO_FLAG_I_FRAME 0x0000L // I, B, or P (default is I)
3436     #define KS_VIDEO_FLAG_P_FRAME 0x0010L
3437     #define KS_VIDEO_FLAG_B_FRAME 0x0020L
3438    
3439     typedef struct tagKS_FRAME_INFO {
3440     ULONG ExtendedHeaderSize; // Size of this extended header
3441     DWORD dwFrameFlags; // Field1, Field2, or Frame
3442     LONGLONG PictureNumber;
3443     LONGLONG DropCount;
3444    
3445     // The following are only set when using OverlayMixer
3446     HANDLE hDirectDraw; // user mode DDraw handle
3447     HANDLE hSurfaceHandle; // user mode surface handle
3448     RECT DirectDrawRect; // portion of surface locked
3449     // Reserved fields, never reference these
3450     DWORD Reserved1;
3451     DWORD Reserved2;
3452     DWORD Reserved3;
3453     DWORD Reserved4;
3454     } KS_FRAME_INFO, *PKS_FRAME_INFO;
3455    
3456     //===========================================================================
3457     // KSSTREAM_HEADER extensions for VBI
3458     //===========================================================================
3459    
3460     #define KS_VBI_FLAG_FIELD1 0x0001L
3461     #define KS_VBI_FLAG_FIELD2 0x0002L
3462    
3463     #define KS_VBI_FLAG_MV_PRESENT 0x0100L
3464     #define KS_VBI_FLAG_MV_HARDWARE 0x0200L
3465     #define KS_VBI_FLAG_MV_DETECTED 0x0400L
3466    
3467     #define KS_VBI_FLAG_TVTUNER_CHANGE 0x0010L // TvTunerChangeInfo is valid
3468     #define KS_VBI_FLAG_VBIINFOHEADER_CHANGE 0x0020L // VBIInfoHeader is valid
3469    
3470     typedef struct tagKS_VBI_FRAME_INFO {
3471     ULONG ExtendedHeaderSize; // Size of this extended header
3472     DWORD dwFrameFlags; // Field1, Field2, or Frame; & etc
3473     LONGLONG PictureNumber; // Test only?
3474     LONGLONG DropCount; // Test only?
3475     DWORD dwSamplingFrequency;
3476     KS_TVTUNER_CHANGE_INFO TvTunerChangeInfo;
3477     KS_VBIINFOHEADER VBIInfoHeader;
3478     } KS_VBI_FRAME_INFO, *PKS_VBI_FRAME_INFO;
3479    
3480    
3481     //===========================================================================
3482     // Analog video formats, used with:
3483     // Analog Video Decoders
3484     // TVTuners
3485     // Analog Video Encoders
3486     //
3487     // XXX_STANDARDS_SUPPORTED returns a bitmask
3488     //===========================================================================
3489    
3490     typedef enum
3491     {
3492     KS_AnalogVideo_None = 0x00000000, // This is a digital sensor
3493     KS_AnalogVideo_NTSC_M = 0x00000001, // 75 IRE Setup
3494     KS_AnalogVideo_NTSC_M_J = 0x00000002, // Japan, 0 IRE Setup
3495     KS_AnalogVideo_NTSC_433 = 0x00000004,
3496    
3497     KS_AnalogVideo_PAL_B = 0x00000010,
3498     KS_AnalogVideo_PAL_D = 0x00000020,
3499     KS_AnalogVideo_PAL_G = 0x00000040,
3500     KS_AnalogVideo_PAL_H = 0x00000080,
3501     KS_AnalogVideo_PAL_I = 0x00000100,
3502     KS_AnalogVideo_PAL_M = 0x00000200,
3503     KS_AnalogVideo_PAL_N = 0x00000400,
3504    
3505     KS_AnalogVideo_PAL_60 = 0x00000800,
3506    
3507     KS_AnalogVideo_SECAM_B = 0x00001000,
3508     KS_AnalogVideo_SECAM_D = 0x00002000,
3509     KS_AnalogVideo_SECAM_G = 0x00004000,
3510     KS_AnalogVideo_SECAM_H = 0x00008000,
3511     KS_AnalogVideo_SECAM_K = 0x00010000,
3512     KS_AnalogVideo_SECAM_K1 = 0x00020000,
3513     KS_AnalogVideo_SECAM_L = 0x00040000,
3514     KS_AnalogVideo_SECAM_L1 = 0x00080000,
3515    
3516     KS_AnalogVideo_PAL_N_COMBO
3517     = 0x00100000
3518     } KS_AnalogVideoStandard;
3519    
3520     #define KS_AnalogVideo_NTSC_Mask 0x00000007
3521     #define KS_AnalogVideo_PAL_Mask 0x00100FF0
3522     #define KS_AnalogVideo_SECAM_Mask 0x000FF000
3523    
3524     //===========================================================================
3525     // Property set definitions
3526     // The comments show whether a given property is:
3527     // R : READ only
3528     // w : WRITE only
3529     // RW : READ / WRITE
3530     // O : Optional (return E_UNSUPPORTED if you don't handle this)
3531     //===========================================================================
3532    
3533     #define STATIC_PROPSETID_ALLOCATOR_CONTROL\
3534     0x53171960, 0x148e, 0x11d2, 0x99, 0x79, 0x0, 0x0, 0xc0, 0xcc, 0x16, 0xba
3535     DEFINE_GUIDSTRUCT("53171960-148E-11d2-9979-0000C0CC16BA", PROPSETID_ALLOCATOR_CONTROL);
3536     #define PROPSETID_ALLOCATOR_CONTROL DEFINE_GUIDNAMED(PROPSETID_ALLOCATOR_CONTROL)
3537     typedef enum {
3538     KSPROPERTY_ALLOCATOR_CONTROL_HONOR_COUNT, // R O (will allocate exactly this number of buffers)
3539     KSPROPERTY_ALLOCATOR_CONTROL_SURFACE_SIZE, // R O (return 2 DWORDs specifying surface size)
3540     } KSPROPERTY_ALLOCATOR_CONTROL;
3541    
3542    
3543     //===========================================================================
3544    
3545     #define STATIC_PROPSETID_VIDCAP_VIDEOPROCAMP\
3546     0xC6E13360L, 0x30AC, 0x11d0, 0xa1, 0x8c, 0x00, 0xA0, 0xC9, 0x11, 0x89, 0x56
3547     DEFINE_GUIDSTRUCT("C6E13360-30AC-11d0-A18C-00A0C9118956", PROPSETID_VIDCAP_VIDEOPROCAMP);
3548     #define PROPSETID_VIDCAP_VIDEOPROCAMP DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOPROCAMP)
3549    
3550     typedef enum {
3551     KSPROPERTY_VIDEOPROCAMP_BRIGHTNESS, // RW O
3552     KSPROPERTY_VIDEOPROCAMP_CONTRAST, // RW O
3553     KSPROPERTY_VIDEOPROCAMP_HUE, // RW O
3554     KSPROPERTY_VIDEOPROCAMP_SATURATION, // RW O
3555     KSPROPERTY_VIDEOPROCAMP_SHARPNESS, // RW O
3556     KSPROPERTY_VIDEOPROCAMP_GAMMA, // RW O
3557     KSPROPERTY_VIDEOPROCAMP_COLORENABLE, // RW O
3558     KSPROPERTY_VIDEOPROCAMP_WHITEBALANCE, // RW O
3559     KSPROPERTY_VIDEOPROCAMP_BACKLIGHT_COMPENSATION,// RW O
3560     } KSPROPERTY_VIDCAP_VIDEOPROCAMP;
3561    
3562     typedef struct {
3563     KSPROPERTY Property;
3564     LONG Value; // Value to set or get
3565     ULONG Flags; // KSPROPERTY_VIDEOPROCAMP_FLAGS_*
3566     ULONG Capabilities; // KSPROPERTY_VIDEOPROCAMP_FLAGS_*
3567     } KSPROPERTY_VIDEOPROCAMP_S, *PKSPROPERTY_VIDEOPROCAMP_S;
3568    
3569     #define KSPROPERTY_VIDEOPROCAMP_FLAGS_AUTO 0X0001L
3570     #define KSPROPERTY_VIDEOPROCAMP_FLAGS_MANUAL 0X0002L
3571    
3572     //===========================================================================
3573    
3574     #define STATIC_PROPSETID_TUNER\
3575     0x6a2e0605L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
3576     DEFINE_GUIDSTRUCT("6a2e0605-28e4-11d0-a18c-00a0c9118956", PROPSETID_TUNER);
3577     #define PROPSETID_TUNER DEFINE_GUIDNAMED(PROPSETID_TUNER)
3578    
3579     typedef enum {
3580     KSPROPERTY_TUNER_CAPS, // R -overall device capabilities
3581     KSPROPERTY_TUNER_MODE_CAPS, // R -capabilities in this mode
3582     KSPROPERTY_TUNER_MODE, // RW -set a mode (TV, FM, AM, DSS)
3583     KSPROPERTY_TUNER_STANDARD, // R -get TV standard (only if TV mode)
3584     KSPROPERTY_TUNER_FREQUENCY, // RW -set/get frequency
3585     KSPROPERTY_TUNER_INPUT, // RW -select an input
3586     KSPROPERTY_TUNER_STATUS, // R -tuning status
3587     KSPROPERTY_TUNER_IF_MEDIUM // R O-Medium for IF or Transport Pin
3588     } KSPROPERTY_TUNER;
3589    
3590     typedef enum {
3591     KSPROPERTY_TUNER_MODE_TV = 0X0001,
3592     KSPROPERTY_TUNER_MODE_FM_RADIO = 0X0002,
3593     KSPROPERTY_TUNER_MODE_AM_RADIO = 0X0004,
3594     KSPROPERTY_TUNER_MODE_DSS = 0X0008,
3595     KSPROPERTY_TUNER_MODE_ATSC = 0X0010, // also used for DVB-T, DVB-C
3596     } KSPROPERTY_TUNER_MODES;
3597    
3598     // Describes how the device tunes. Only one of these flags may be set
3599     // in KSPROPERTY_TUNER_MODE_CAPS_S.Strategy
3600    
3601     // Describe how the driver should attempt to tune:
3602     // EXACT: just go to the frequency specified (no fine tuning)
3603     // FINE: (slow) do an exhaustive search for the best signal
3604     // COARSE: (fast) use larger frequency jumps to just determine if any signal
3605    
3606     typedef enum {
3607     KS_TUNER_TUNING_EXACT = 1, // No fine tuning
3608     KS_TUNER_TUNING_FINE, // Fine grained search
3609     KS_TUNER_TUNING_COARSE, // Coarse search
3610     }KS_TUNER_TUNING_FLAGS;
3611    
3612     typedef enum {
3613     KS_TUNER_STRATEGY_PLL = 0X01, // Tune by PLL offset
3614     KS_TUNER_STRATEGY_SIGNAL_STRENGTH = 0X02, // Tune by signal strength
3615     KS_TUNER_STRATEGY_DRIVER_TUNES = 0X04, // Driver does fine tuning
3616     }KS_TUNER_STRATEGY;
3617    
3618     typedef struct {
3619     KSPROPERTY Property;
3620     ULONG ModesSupported; // KS_PROPERTY_TUNER_MODES_*
3621     KSPIN_MEDIUM VideoMedium; // GUID_NULL (no pin), or GUID
3622     KSPIN_MEDIUM TVAudioMedium; // GUID_NULL (no pin), or GUID
3623     KSPIN_MEDIUM RadioAudioMedium; // GUID_NULL (no pin), or GUID
3624     } KSPROPERTY_TUNER_CAPS_S, *PKSPROPERTY_TUNER_CAPS_S;
3625    
3626     typedef struct {
3627     KSPROPERTY Property;
3628     KSPIN_MEDIUM IFMedium; // GUID_NULL (no pin), or GUID
3629     } KSPROPERTY_TUNER_IF_MEDIUM_S, *PKSPROPERTY_TUNER_IF_MEDIUM_S;
3630    
3631     typedef struct {
3632     KSPROPERTY Property;
3633     ULONG Mode; // IN: KSPROPERTY_TUNER_MODE
3634     ULONG StandardsSupported; // KS_AnalogVideo_* (if TV or DSS)
3635     ULONG MinFrequency; // Hz
3636     ULONG MaxFrequency; // Hz
3637     ULONG TuningGranularity; // Hz
3638     ULONG NumberOfInputs; // count of inputs
3639     ULONG SettlingTime; // milliSeconds
3640     ULONG Strategy; // KS_TUNER_STRATEGY
3641     } KSPROPERTY_TUNER_MODE_CAPS_S, *PKSPROPERTY_TUNER_MODE_CAPS_S;
3642    
3643     typedef struct {
3644     KSPROPERTY Property;
3645     ULONG Mode; // IN: KSPROPERTY_TUNER_MODE
3646     } KSPROPERTY_TUNER_MODE_S, *PKSPROPERTY_TUNER_MODE_S;
3647    
3648     typedef struct {
3649     KSPROPERTY Property;
3650     ULONG Frequency; // Hz
3651     ULONG LastFrequency; // Hz (last known good)
3652     ULONG TuningFlags; // KS_TUNER_TUNING_FLAGS
3653     ULONG VideoSubChannel; // DSS
3654     ULONG AudioSubChannel; // DSS
3655     ULONG Channel; // VBI decoders
3656     ULONG Country; // VBI decoders
3657     } KSPROPERTY_TUNER_FREQUENCY_S, *PKSPROPERTY_TUNER_FREQUENCY_S;
3658    
3659     typedef struct {
3660     KSPROPERTY Property;
3661     ULONG Standard; // KS_AnalogVideo_*
3662     } KSPROPERTY_TUNER_STANDARD_S, *PKSPROPERTY_TUNER_STANDARD_S;
3663    
3664     typedef struct {
3665     KSPROPERTY Property;
3666     ULONG InputIndex; // 0 to (n-1) inputs
3667     } KSPROPERTY_TUNER_INPUT_S, *PKSPROPERTY_TUNER_INPUT_S;
3668    
3669     typedef struct {
3670     KSPROPERTY Property;
3671     ULONG CurrentFrequency; // Hz
3672     ULONG PLLOffset; // if Strategy.KS_TUNER_STRATEGY_PLL
3673     ULONG SignalStrength; // if Stretegy.KS_TUNER_STRATEGY_SIGNAL_STRENGTH
3674     ULONG Busy; // TRUE if in the process of tuning
3675     } KSPROPERTY_TUNER_STATUS_S, *PKSPROPERTY_TUNER_STATUS_S;
3676    
3677     #define STATIC_EVENTSETID_TUNER\
3678     0x6a2e0606L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
3679     DEFINE_GUIDSTRUCT("6a2e0606-28e4-11d0-a18c-00a0c9118956", EVENTSETID_TUNER);
3680     #define EVENTSETID_TUNER DEFINE_GUIDNAMED(EVENTSETID_TUNER)
3681    
3682     typedef enum {
3683     KSEVENT_TUNER_CHANGED
3684     } KSEVENT_TUNER;
3685    
3686    
3687     //===========================================================================
3688    
3689     #define STATIC_PROPSETID_VIDCAP_VIDEOENCODER\
3690     0x6a2e0610L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
3691     DEFINE_GUIDSTRUCT("6a2e0610-28e4-11d0-a18c-00a0c9118956", PROPSETID_VIDCAP_VIDEOENCODER);
3692     #define PROPSETID_VIDCAP_VIDEOENCODER DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOENCODER)
3693    
3694     typedef enum {
3695     KSPROPERTY_VIDEOENCODER_CAPS, // R
3696     KSPROPERTY_VIDEOENCODER_STANDARD, // RW
3697     KSPROPERTY_VIDEOENCODER_COPYPROTECTION, // RW O
3698     KSPROPERTY_VIDEOENCODER_CC_ENABLE, // RW O
3699     } KSPROPERTY_VIDCAP_VIDEOENCODER;
3700    
3701     typedef struct {
3702     KSPROPERTY Property;
3703     LONG Value; // value to get or set
3704     ULONG Flags; //
3705     ULONG Capabilities; //
3706     } KSPROPERTY_VIDEOENCODER_S, *PKSPROPERTY_VIDEOENCODER_S;
3707    
3708     //===========================================================================
3709    
3710     #define STATIC_PROPSETID_VIDCAP_VIDEODECODER\
3711     0xC6E13350L, 0x30AC, 0x11d0, 0xA1, 0x8C, 0x00, 0xA0, 0xC9, 0x11, 0x89, 0x56
3712     DEFINE_GUIDSTRUCT("C6E13350-30AC-11d0-A18C-00A0C9118956", PROPSETID_VIDCAP_VIDEODECODER);
3713     #define PROPSETID_VIDCAP_VIDEODECODER DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEODECODER)
3714    
3715     typedef enum {
3716     KSPROPERTY_VIDEODECODER_CAPS, // R
3717     KSPROPERTY_VIDEODECODER_STANDARD, // RW
3718     KSPROPERTY_VIDEODECODER_STATUS, // R
3719     KSPROPERTY_VIDEODECODER_OUTPUT_ENABLE, // Rw O
3720     KSPROPERTY_VIDEODECODER_VCR_TIMING, // RW O
3721     } KSPROPERTY_VIDCAP_VIDEODECODER;
3722    
3723     typedef enum {
3724     KS_VIDEODECODER_FLAGS_CAN_DISABLE_OUTPUT = 0X0001, // VP Output can tri-stae
3725     KS_VIDEODECODER_FLAGS_CAN_USE_VCR_LOCKING = 0X0002, // VCR PLL timings
3726     KS_VIDEODECODER_FLAGS_CAN_INDICATE_LOCKED = 0X0004, // Can indicate valid signal
3727     }KS_VIDEODECODER_FLAGS;
3728    
3729     typedef struct {
3730     KSPROPERTY Property;
3731     ULONG StandardsSupported; // KS_AnalogVideo_*
3732     ULONG Capabilities; // KS_VIDEODECODER_FLAGS_*
3733     ULONG SettlingTime; // milliseconds
3734     ULONG HSyncPerVSync; // Number of HSync Pulses per VSync
3735     } KSPROPERTY_VIDEODECODER_CAPS_S, *PKSPROPERTY_VIDEODECODER_CAPS_S;
3736    
3737     typedef struct {
3738     KSPROPERTY Property;
3739     ULONG NumberOfLines; // 525 or 625 lines detected
3740     ULONG SignalLocked; // TRUE if signal is locked
3741     } KSPROPERTY_VIDEODECODER_STATUS_S, *PKSPROPERTY_VIDEODECODER_STATUS_S;
3742    
3743     typedef struct {
3744     KSPROPERTY Property;
3745     ULONG Value; // Get or set a value
3746     } KSPROPERTY_VIDEODECODER_S, *PKSPROPERTY_VIDEODECODER_S;
3747    
3748     #define STATIC_EVENTSETID_VIDEODECODER\
3749     0x6a2e0621L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
3750     DEFINE_GUIDSTRUCT("6a2e0621-28e4-11d0-a18c-00a0c9118956", EVENTSETID_VIDEODECODER);
3751     #define EVENTSETID_VIDEODECODER DEFINE_GUIDNAMED(EVENTSETID_VIDEODECODER)
3752    
3753     typedef enum {
3754     KSEVENT_VIDEODECODER_CHANGED
3755     } KSEVENT_VIDEODECODER;
3756    
3757     //===========================================================================
3758    
3759     #define STATIC_PROPSETID_VIDCAP_CAMERACONTROL\
3760     0xC6E13370L, 0x30AC, 0x11d0, 0xa1, 0x8C, 0x00, 0xA0, 0xC9, 0x11, 0x89, 0x56
3761     DEFINE_GUIDSTRUCT("C6E13370-30AC-11d0-A18C-00A0C9118956", PROPSETID_VIDCAP_CAMERACONTROL);
3762     #define PROPSETID_VIDCAP_CAMERACONTROL DEFINE_GUIDNAMED(PROPSETID_VIDCAP_CAMERACONTROL)
3763    
3764     typedef enum {
3765     KSPROPERTY_CAMERACONTROL_PAN, // RW O
3766     KSPROPERTY_CAMERACONTROL_TILT, // RW O
3767     KSPROPERTY_CAMERACONTROL_ROLL, // RW O
3768     KSPROPERTY_CAMERACONTROL_ZOOM, // RW O
3769     KSPROPERTY_CAMERACONTROL_EXPOSURE, // RW O
3770     KSPROPERTY_CAMERACONTROL_IRIS, // RW O
3771     KSPROPERTY_CAMERACONTROL_FOCUS, // RW O
3772     } KSPROPERTY_VIDCAP_CAMERACONTROL;
3773    
3774     typedef struct {
3775     KSPROPERTY Property;
3776     LONG Value; // value to get or set
3777     ULONG Flags; // KSPROPERTY_CAMERACONTROL_FLAGS_*
3778     ULONG Capabilities; // KSPROPERTY_CAMERACONTROL_FLAGS_*
3779     } KSPROPERTY_CAMERACONTROL_S, *PKSPROPERTY_CAMERACONTROL_S;
3780    
3781     #define KSPROPERTY_CAMERACONTROL_FLAGS_AUTO 0X0001L
3782     #define KSPROPERTY_CAMERACONTROL_FLAGS_MANUAL 0X0002L
3783    
3784     #define KSPROPERTY_CAMERACONTROL_FLAGS_ABSOLUTE 0X0000L
3785     #define KSPROPERTY_CAMERACONTROL_FLAGS_RELATIVE 0X0010L
3786    
3787    
3788     //===========================================================================
3789    
3790     #define STATIC_PROPSETID_VIDCAP_CROSSBAR\
3791     0x6a2e0640L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
3792     DEFINE_GUIDSTRUCT("6a2e0640-28e4-11d0-a18c-00a0c9118956", PROPSETID_VIDCAP_CROSSBAR);
3793     #define PROPSETID_VIDCAP_CROSSBAR DEFINE_GUIDNAMED(PROPSETID_VIDCAP_CROSSBAR)
3794    
3795     typedef enum {
3796     KSPROPERTY_CROSSBAR_CAPS, // R
3797     KSPROPERTY_CROSSBAR_PININFO, // R
3798     KSPROPERTY_CROSSBAR_CAN_ROUTE, // R
3799     KSPROPERTY_CROSSBAR_ROUTE, // RW
3800     } KSPROPERTY_VIDCAP_CROSSBAR;
3801    
3802     typedef struct {
3803     KSPROPERTY Property;
3804     ULONG NumberOfInputs; // the number of audio and video input pins
3805     ULONG NumberOfOutputs; // the number of audio and video output pins
3806     } KSPROPERTY_CROSSBAR_CAPS_S, *PKSPROPERTY_CROSSBAR_CAPS_S;
3807    
3808     typedef struct {
3809     KSPROPERTY Property;
3810     KSPIN_DATAFLOW Direction; // KSPIN_DATAFLOW_IN or KSPIN_DATAFLOW_OUT?
3811     ULONG Index; // Which pin to return data for?
3812     ULONG PinType; // KS_PhysConn_Video_* or KS_PhysConn_Audio_*
3813     ULONG RelatedPinIndex; // For video pins, this is the related audio pin
3814     KSPIN_MEDIUM Medium; // Identifies the hardware connection
3815     } KSPROPERTY_CROSSBAR_PININFO_S, *PKSPROPERTY_CROSSBAR_PININFO_S;
3816    
3817     typedef struct {
3818     KSPROPERTY Property;
3819     ULONG IndexInputPin; // Zero based index of the input pin
3820     ULONG IndexOutputPin; // Zero based index of the output pin
3821     ULONG CanRoute; // returns non-zero on CAN_ROUTE if routing is possible
3822     } KSPROPERTY_CROSSBAR_ROUTE_S, *PKSPROPERTY_CROSSBAR_ROUTE_S;
3823    
3824     #define STATIC_EVENTSETID_CROSSBAR\
3825     0x6a2e0641L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
3826     DEFINE_GUIDSTRUCT("6a2e0641-28e4-11d0-a18c-00a0c9118956", EVENTSETID_CROSSBAR);
3827     #define EVENTSETID_CROSSBAR DEFINE_GUIDNAMED(EVENTSETID_CROSSBAR)
3828    
3829     typedef enum {
3830     KSEVENT_CROSSBAR_CHANGED
3831     } KSEVENT_CROSSBAR;
3832    
3833     // The following IDs should match the AM equivalents
3834     typedef enum {
3835     KS_PhysConn_Video_Tuner = 1,
3836     KS_PhysConn_Video_Composite,
3837     KS_PhysConn_Video_SVideo,
3838     KS_PhysConn_Video_RGB,
3839     KS_PhysConn_Video_YRYBY,
3840     KS_PhysConn_Video_SerialDigital,
3841     KS_PhysConn_Video_ParallelDigital,
3842     KS_PhysConn_Video_SCSI,
3843     KS_PhysConn_Video_AUX,
3844     KS_PhysConn_Video_1394,
3845     KS_PhysConn_Video_USB,
3846     KS_PhysConn_Video_VideoDecoder,
3847     KS_PhysConn_Video_VideoEncoder,
3848     KS_PhysConn_Video_SCART,
3849    
3850     KS_PhysConn_Audio_Tuner = 4096,
3851     KS_PhysConn_Audio_Line,
3852     KS_PhysConn_Audio_Mic,
3853     KS_PhysConn_Audio_AESDigital,
3854     KS_PhysConn_Audio_SPDIFDigital,
3855     KS_PhysConn_Audio_SCSI,
3856     KS_PhysConn_Audio_AUX,
3857     KS_PhysConn_Audio_1394,
3858     KS_PhysConn_Audio_USB,
3859     KS_PhysConn_Audio_AudioDecoder,
3860     } KS_PhysicalConnectorType;
3861    
3862    
3863     //===========================================================================
3864    
3865     #define STATIC_PROPSETID_VIDCAP_TVAUDIO\
3866     0x6a2e0650L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
3867     DEFINE_GUIDSTRUCT("6a2e0650-28e4-11d0-a18c-00a0c9118956", PROPSETID_VIDCAP_TVAUDIO);
3868     #define PROPSETID_VIDCAP_TVAUDIO DEFINE_GUIDNAMED(PROPSETID_VIDCAP_TVAUDIO)
3869    
3870     typedef enum {
3871     KSPROPERTY_TVAUDIO_CAPS, // R
3872     KSPROPERTY_TVAUDIO_MODE, // RW
3873     KSPROPERTY_TVAUDIO_CURRENTLY_AVAILABLE_MODES // R
3874     } KSPROPERTY_VIDCAP_TVAUDIO;
3875    
3876     #define KS_TVAUDIO_MODE_MONO 0x0001 // Mono
3877     #define KS_TVAUDIO_MODE_STEREO 0x0002 // Stereo
3878     #define KS_TVAUDIO_MODE_LANG_A 0x0010 // Primary language
3879     #define KS_TVAUDIO_MODE_LANG_B 0x0020 // 2nd avail language
3880     #define KS_TVAUDIO_MODE_LANG_C 0x0040 // 3rd avail language
3881    
3882     typedef struct {
3883     KSPROPERTY Property;
3884     ULONG Capabilities; // Bitmask of KS_TVAUDIO_MODE_*
3885     KSPIN_MEDIUM InputMedium;
3886     KSPIN_MEDIUM OutputMedium;
3887     } KSPROPERTY_TVAUDIO_CAPS_S, *PKSPROPERTY_TVAUDIO_CAPS_S;
3888    
3889     typedef struct {
3890     KSPROPERTY Property;
3891     ULONG Mode; // KS_TVAUDIO_MODE_*
3892     } KSPROPERTY_TVAUDIO_S, *PKSPROPERTY_TVAUDIO_S;
3893    
3894    
3895     #define STATIC_KSEVENTSETID_VIDCAP_TVAUDIO\
3896     0x6a2e0651L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
3897     DEFINE_GUIDSTRUCT("6a2e0651-28e4-11d0-a18c-00a0c9118956", KSEVENTSETID_VIDCAP_TVAUDIO);
3898     #define KSEVENTSETID_VIDCAP_TVAUDIO DEFINE_GUIDNAMED(KSEVENTSETID_VIDCAP_TVAUDIO)
3899    
3900     typedef enum {
3901     KSEVENT_TVAUDIO_CHANGED,
3902     } KSEVENT_TVAUDIO;
3903    
3904     //===========================================================================
3905     #define STATIC_PROPSETID_VIDCAP_VIDEOCOMPRESSION\
3906     0xC6E13343L, 0x30AC, 0x11d0, 0xA1, 0x8C, 0x00, 0xA0, 0xC9, 0x11, 0x89, 0x56
3907     DEFINE_GUIDSTRUCT("C6E13343-30AC-11d0-A18C-00A0C9118956", PROPSETID_VIDCAP_VIDEOCOMPRESSION);
3908     #define PROPSETID_VIDCAP_VIDEOCOMPRESSION DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOCOMPRESSION)
3909    
3910     typedef enum {
3911     KSPROPERTY_VIDEOCOMPRESSION_GETINFO, // R
3912     KSPROPERTY_VIDEOCOMPRESSION_KEYFRAME_RATE, // RW
3913     KSPROPERTY_VIDEOCOMPRESSION_PFRAMES_PER_KEYFRAME, // RW
3914     KSPROPERTY_VIDEOCOMPRESSION_QUALITY, // RW
3915     KSPROPERTY_VIDEOCOMPRESSION_OVERRIDE_KEYFRAME, // W
3916     KSPROPERTY_VIDEOCOMPRESSION_OVERRIDE_FRAME_SIZE, // W
3917     KSPROPERTY_VIDEOCOMPRESSION_WINDOWSIZE, // RW
3918     } KSPROPERTY_VIDCAP_VIDEOCOMPRESSION;
3919    
3920     typedef enum {
3921     KS_CompressionCaps_CanQuality = 1,
3922     KS_CompressionCaps_CanCrunch = 2,
3923     KS_CompressionCaps_CanKeyFrame = 4,
3924     KS_CompressionCaps_CanBFrame = 8,
3925     KS_CompressionCaps_CanWindow = 0x10,
3926     } KS_CompressionCaps;
3927    
3928     typedef struct {
3929     KSPROPERTY Property;
3930     // Note, no VersionString!
3931     // Note, no DescriptionString!
3932     ULONG StreamIndex; // zero based index of stream
3933     LONG DefaultKeyFrameRate; // Key frame rate
3934     LONG DefaultPFrameRate; // Predeicted frames per Key frame
3935     LONG DefaultQuality; // 0 to 10000
3936     LONG NumberOfQualitySettings; // How many discreet quality settings?
3937     LONG Capabilities; // KS_CompressionCaps_*
3938     } KSPROPERTY_VIDEOCOMPRESSION_GETINFO_S, *PKSPROPERTY_VIDEOCOMPRESSION_GETINFO_S;
3939    
3940     typedef struct {
3941     KSPROPERTY Property;
3942     ULONG StreamIndex; // zero based index of stream
3943     LONG Value; // value to get or set
3944     } KSPROPERTY_VIDEOCOMPRESSION_S, *PKSPROPERTY_VIDEOCOMPRESSION_S;
3945    
3946     //===========================================================================
3947     // MEDIASUBTYPE_Overlay
3948     #define STATIC_KSDATAFORMAT_SUBTYPE_OVERLAY\
3949     0xe436eb7fL, 0x524f, 0x11ce, 0x9f, 0x53, 0x00, 0x20, 0xaf, 0x0b, 0xa7, 0x70
3950     DEFINE_GUIDSTRUCT("e436eb7f-524f-11ce-9f53-0020af0ba770", KSDATAFORMAT_SUBTYPE_OVERLAY);
3951     #define KSDATAFORMAT_SUBTYPE_OVERLAY DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_OVERLAY)
3952    
3953     #define STATIC_KSPROPSETID_OverlayUpdate\
3954     0x490EA5CFL, 0x7681, 0x11D1, 0xA2, 0x1C, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96
3955     DEFINE_GUIDSTRUCT("490EA5CF-7681-11D1-A21C-00A0C9223196", KSPROPSETID_OverlayUpdate);
3956     #define KSPROPSETID_OverlayUpdate DEFINE_GUIDNAMED(KSPROPSETID_OverlayUpdate)
3957    
3958     typedef enum {
3959     KSPROPERTY_OVERLAYUPDATE_INTERESTS,
3960     KSPROPERTY_OVERLAYUPDATE_CLIPLIST = 0x1,
3961     KSPROPERTY_OVERLAYUPDATE_PALETTE = 0x2,
3962     KSPROPERTY_OVERLAYUPDATE_COLORKEY = 0x4,
3963     KSPROPERTY_OVERLAYUPDATE_VIDEOPOSITION = 0x8,
3964     KSPROPERTY_OVERLAYUPDATE_DISPLAYCHANGE = 0x10,
3965     KSPROPERTY_OVERLAYUPDATE_COLORREF = 0x10000000
3966     } KSPROPERTY_OVERLAYUPDATE;
3967    
3968     typedef struct {
3969     ULONG PelsWidth;
3970     ULONG PelsHeight;
3971     ULONG BitsPerPel;
3972     WCHAR DeviceID[1];
3973     } KSDISPLAYCHANGE, *PKSDISPLAYCHANGE;
3974    
3975     #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_INTERESTS(Handler)\
3976     DEFINE_KSPROPERTY_ITEM(\
3977     KSPROPERTY_OVERLAYUPDATE_INTERESTS,\
3978     (Handler),\
3979     sizeof(KSPROPERTY),\
3980     sizeof(ULONG),\
3981     NULL, NULL, 0, NULL, NULL, 0)
3982    
3983     #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_PALETTE(Handler)\
3984     DEFINE_KSPROPERTY_ITEM(\
3985     KSPROPERTY_OVERLAYUPDATE_PALETTE,\
3986     NULL,\
3987     sizeof(KSPROPERTY),\
3988     0,\
3989     (Handler),\
3990     NULL, 0, NULL, NULL, 0)
3991    
3992     #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_COLORKEY(Handler)\
3993     DEFINE_KSPROPERTY_ITEM(\
3994     KSPROPERTY_OVERLAYUPDATE_COLORKEY,\
3995     NULL,\
3996     sizeof(KSPROPERTY),\
3997     sizeof(COLORKEY),\
3998     (Handler),\
3999     NULL, 0, NULL, NULL, 0)
4000    
4001     #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_CLIPLIST(Handler)\
4002     DEFINE_KSPROPERTY_ITEM(\
4003     KSPROPERTY_OVERLAYUPDATE_CLIPLIST,\
4004     NULL,\
4005     sizeof(KSPROPERTY),\
4006     2 * sizeof(RECT) + sizeof(RGNDATAHEADER),\
4007     (Handler),\
4008     NULL, 0, NULL, NULL, 0)
4009    
4010     #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_VIDEOPOSITION(Handler)\
4011     DEFINE_KSPROPERTY_ITEM(\
4012     KSPROPERTY_OVERLAYUPDATE_VIDEOPOSITION,\
4013     NULL,\
4014     sizeof(KSPROPERTY),\
4015     2 * sizeof(RECT),\
4016     (Handler),\
4017     NULL, 0, NULL, NULL, 0)
4018    
4019     #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_DISPLAYCHANGE(Handler)\
4020     DEFINE_KSPROPERTY_ITEM(\
4021     KSPROPERTY_OVERLAYUPDATE_DISPLAYCHANGE,\
4022     NULL,\
4023     sizeof(KSPROPERTY),\
4024     sizeof(KSDISPLAYCHANGE),\
4025     (Handler),\
4026     NULL, 0, NULL, NULL, 0)
4027    
4028     #define DEFINE_KSPROPERTY_ITEM_OVERLAYUPDATE_COLORREF(Handler)\
4029     DEFINE_KSPROPERTY_ITEM(\
4030     KSPROPERTY_OVERLAYUPDATE_COLORREF,\
4031     (Handler),\
4032     sizeof(KSPROPERTY),\
4033     sizeof(COLORREF),\
4034     NULL,\
4035     NULL, 0, NULL, NULL, 0)
4036    
4037     //===========================================================================
4038     #define STATIC_PROPSETID_VIDCAP_VIDEOCONTROL\
4039     0x6a2e0670L, 0x28e4, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
4040     DEFINE_GUIDSTRUCT("6a2e0670-28e4-11d0-a18c-00a0c9118956", PROPSETID_VIDCAP_VIDEOCONTROL);
4041     #define PROPSETID_VIDCAP_VIDEOCONTROL DEFINE_GUIDNAMED(PROPSETID_VIDCAP_VIDEOCONTROL)
4042    
4043     typedef enum {
4044     KSPROPERTY_VIDEOCONTROL_CAPS, // R
4045     KSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE, // R O
4046     KSPROPERTY_VIDEOCONTROL_FRAME_RATES, // R O
4047     KSPROPERTY_VIDEOCONTROL_MODE, // RWO
4048     } KSPROPERTY_VIDCAP_VIDEOCONTROL;
4049    
4050     typedef enum {
4051     KS_VideoControlFlag_FlipHorizontal = 0x0001,
4052     KS_VideoControlFlag_FlipVertical = 0x0002,
4053     KS_Obsolete_VideoControlFlag_ExternalTriggerEnable = 0x0010, // ***WARNING *** Flag msimatch with DSHOW.
4054     KS_Obsolete_VideoControlFlag_Trigger = 0x0020, // ***WARNING *** Flag msimatch with DSHOW.
4055     KS_VideoControlFlag_ExternalTriggerEnable = 0x0004,
4056     KS_VideoControlFlag_Trigger = 0x0008,
4057     } KS_VideoControlFlags;
4058    
4059     typedef struct {
4060     KSPROPERTY Property;
4061     ULONG StreamIndex;
4062     ULONG VideoControlCaps; // KS_VideoControlFlags_*
4063     } KSPROPERTY_VIDEOCONTROL_CAPS_S, *PKSPROPERTY_VIDEOCONTROL_CAPS_S;
4064    
4065     typedef struct {
4066     KSPROPERTY Property;
4067     ULONG StreamIndex;
4068     LONG Mode; // KS_VideoControlFlags_*
4069     } KSPROPERTY_VIDEOCONTROL_MODE_S, *PKSPROPERTY_VIDEOCONTROL_MODE_S;
4070    
4071     typedef struct {
4072     KSPROPERTY Property;
4073     ULONG StreamIndex; // Index of stream
4074     ULONG RangeIndex; // Index of range
4075     SIZE Dimensions; // Size of image
4076     LONGLONG CurrentActualFrameRate; // Only correct if pin is open
4077     LONGLONG CurrentMaxAvailableFrameRate; // Max Rate temporarily limited on USB or 1394?
4078     } KSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE_S, *PKSPROPERTY_VIDEOCONTROL_ACTUAL_FRAME_RATE_S;
4079    
4080     // KSPROPERTY_VIDEOCONTROL_FRAME_RATES returns a list of available frame rates in 100 nS units
4081     typedef struct {
4082     KSPROPERTY Property;
4083     ULONG StreamIndex; // Index of stream
4084     ULONG RangeIndex; // Index of range
4085     SIZE Dimensions; // Size of image
4086     } KSPROPERTY_VIDEOCONTROL_FRAME_RATES_S, *PKSPROPERTY_VIDEOCONTROL_FRAME_RATES_S;
4087    
4088     //===========================================================================
4089     #define STATIC_PROPSETID_VIDCAP_DROPPEDFRAMES\
4090     0xC6E13344L, 0x30AC, 0x11d0, 0xa1, 0x8c, 0x00, 0xa0, 0xc9, 0x11, 0x89, 0x56
4091     DEFINE_GUIDSTRUCT("C6E13344-30AC-11d0-A18C-00A0C9118956", PROPSETID_VIDCAP_DROPPEDFRAMES);
4092     #define PROPSETID_VIDCAP_DROPPEDFRAMES DEFINE_GUIDNAMED(PROPSETID_VIDCAP_DROPPEDFRAMES)
4093    
4094     typedef enum {
4095     KSPROPERTY_DROPPEDFRAMES_CURRENT // R
4096     } KSPROPERTY_VIDCAP_DROPPEDFRAMES;
4097    
4098     typedef struct {
4099     KSPROPERTY Property;
4100     LONGLONG PictureNumber; // Current Picture Number
4101     LONGLONG DropCount; // Count of frames dropped
4102     ULONG AverageFrameSize; // Average size of frames captured
4103     } KSPROPERTY_DROPPEDFRAMES_CURRENT_S, *PKSPROPERTY_DROPPEDFRAMES_CURRENT_S;
4104    
4105     //===========================================================================
4106     // VPE
4107    
4108     #define STATIC_KSPROPSETID_VPConfig\
4109     0xbc29a660L, 0x30e3, 0x11d0, 0x9e, 0x69, 0x00, 0xc0, 0x4f, 0xd7, 0xc1, 0x5b
4110     DEFINE_GUIDSTRUCT("bc29a660-30e3-11d0-9e69-00c04fd7c15b", KSPROPSETID_VPConfig);
4111     #define KSPROPSETID_VPConfig DEFINE_GUIDNAMED(KSPROPSETID_VPConfig)
4112    
4113     #define STATIC_KSPROPSETID_VPVBIConfig\
4114     0xec529b00L, 0x1a1f, 0x11d1, 0xba, 0xd9, 0x0, 0x60, 0x97, 0x44, 0x11, 0x1a
4115     DEFINE_GUIDSTRUCT("ec529b00-1a1f-11d1-bad9-00609744111a", KSPROPSETID_VPVBIConfig);
4116     #define KSPROPSETID_VPVBIConfig DEFINE_GUIDNAMED(KSPROPSETID_VPVBIConfig)
4117    
4118     // Both of the above property sets use the same list of properties below
4119    
4120     typedef enum {
4121     KSPROPERTY_VPCONFIG_NUMCONNECTINFO,
4122     KSPROPERTY_VPCONFIG_GETCONNECTINFO,
4123     KSPROPERTY_VPCONFIG_SETCONNECTINFO,
4124     KSPROPERTY_VPCONFIG_VPDATAINFO,
4125     KSPROPERTY_VPCONFIG_MAXPIXELRATE,
4126     KSPROPERTY_VPCONFIG_INFORMVPINPUT,
4127     KSPROPERTY_VPCONFIG_NUMVIDEOFORMAT,
4128     KSPROPERTY_VPCONFIG_GETVIDEOFORMAT,
4129     KSPROPERTY_VPCONFIG_SETVIDEOFORMAT,
4130     KSPROPERTY_VPCONFIG_INVERTPOLARITY,
4131     KSPROPERTY_VPCONFIG_DECIMATIONCAPABILITY, // E_NOTIMPL for VBI
4132     KSPROPERTY_VPCONFIG_SCALEFACTOR, // E_NOTIMPL for VBI
4133     KSPROPERTY_VPCONFIG_DDRAWHANDLE,
4134     KSPROPERTY_VPCONFIG_VIDEOPORTID,
4135     KSPROPERTY_VPCONFIG_DDRAWSURFACEHANDLE,
4136     KSPROPERTY_VPCONFIG_SURFACEPARAMS
4137     } KSPROPERTY_VPCONFIG;
4138    
4139     //=========================
4140     // IBasicAudio
4141     //
4142     #define STATIC_CLSID_KsIBasicAudioInterfaceHandler\
4143     0xb9f8ac3e, 0x0f71, 0x11d2, 0xb7, 0x2c, 0x00, 0xc0, 0x4f, 0xb6, 0xbd, 0x3d
4144     DEFINE_GUIDSTRUCT("b9f8ac3e-0f71-11d2-b72c-00c04fb6bd3d", CLSID_KsIBasicAudioInterfaceHandler);
4145     #define CLSID_KsIBasicAudioInterfaceHandler DEFINE_GUIDNAMED(CLSID_KsIBasicAudioInterfaceHandler)
4146    
4147    
4148     #if defined(__IVPType__)
4149    
4150     typedef struct {
4151     AMVPSIZE Size;
4152     DWORD MaxPixelsPerSecond;
4153     DWORD Reserved;
4154     } KSVPMAXPIXELRATE, *PKSVPMAXPIXELRATE;
4155    
4156     typedef struct {
4157     KSPROPERTY Property;
4158     AMVPSIZE Size;
4159     } KSVPSIZE_PROP, *PKSVPSIZE_PROP;
4160    
4161     typedef struct {
4162     DWORD dwPitch;
4163     DWORD dwXOrigin;
4164     DWORD dwYOrigin;
4165     } KSVPSURFACEPARAMS, *PKSVPSURFACEPARAMS;
4166    
4167     #else // !defined(__IVPType__)
4168    
4169     #if !defined(__DDRAW_INCLUDED__)
4170    
4171     //==========================================================================
4172     // The following definitions must be in sync with DDraw.h in DirectX SDK
4173     //==========================================================================
4174    
4175     /*
4176     * The FourCC code is valid.
4177     */
4178     #define DDPF_FOURCC 0x00000004l
4179    
4180    
4181     typedef struct _DDPIXELFORMAT
4182     {
4183     DWORD dwSize; // size of structure
4184     DWORD dwFlags; // pixel format flags
4185     DWORD dwFourCC; // (FOURCC code)
4186     union
4187     {
4188     DWORD dwRGBBitCount; // how many bits per pixel (BD_1,2,4,8,16,24,32)
4189     DWORD dwYUVBitCount; // how many bits per pixel (BD_4,8,16,24,32)
4190     DWORD dwZBufferBitDepth; // how many bits for z buffers (BD_8,16,24,32)
4191     DWORD dwAlphaBitDepth; // how many bits for alpha channels (BD_1,2,4,8)
4192     };
4193     union
4194     {
4195     DWORD dwRBitMask; // mask for red bit
4196     DWORD dwYBitMask; // mask for Y bits
4197     };
4198     union
4199     {
4200     DWORD dwGBitMask; // mask for green bits
4201     DWORD dwUBitMask; // mask for U bits
4202     };
4203     union
4204     {
4205     DWORD dwBBitMask; // mask for blue bits
4206     DWORD dwVBitMask; // mask for V bits
4207     };
4208     union
4209     {
4210     DWORD dwRGBAlphaBitMask; // mask for alpha channel
4211     DWORD dwYUVAlphaBitMask; // mask for alpha channel
4212     DWORD dwRGBZBitMask; // mask for Z channel
4213     DWORD dwYUVZBitMask; // mask for Z channel
4214     };
4215     } DDPIXELFORMAT, * LPDDPIXELFORMAT;
4216    
4217     #endif // !defined(__DDRAW_INCLUDED__)
4218    
4219     //==========================================================================
4220     // End of DDraw.h header info
4221     //==========================================================================
4222    
4223     //==========================================================================
4224     // The following definitions must be in sync with DVP.h in DirectX SDK
4225     //==========================================================================
4226    
4227     #if !defined(__DVP_INCLUDED__)
4228    
4229     typedef struct _DDVIDEOPORTCONNECT {
4230     DWORD dwSize; // size of the DDVIDEOPORTCONNECT structure
4231     DWORD dwPortWidth; // Width of the video port
4232     GUID guidTypeID; // Description of video port connection
4233     DWORD dwFlags; // Connection flags
4234     DWORD dwReserved1; // Reserved, set to zero.
4235     } DDVIDEOPORTCONNECT, * LPDDVIDEOPORTCONNECT;
4236    
4237     #define DDVPTYPE_E_HREFH_VREFH \
4238     0x54F39980L,0xDA60,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8
4239    
4240     #define DDVPTYPE_E_HREFL_VREFL \
4241     0xE09C77E0L,0xDA60,0x11CF,0x9B,0x06,0x00,0xA0,0xC9,0x03,0xA3,0xB8
4242    
4243     #endif // !defined(__DVP_INCLUDED__)
4244    
4245     //==========================================================================
4246     // End of DVP.h header info
4247     //==========================================================================
4248    
4249    
4250     //==========================================================================
4251     // The following definitions must be in sync with VPType.h in AM 2.0 SDK
4252     //==========================================================================
4253    
4254     // pixel aspect ratios corresponding to a 720x480 NTSC image or a 720x576 image
4255     typedef enum // AMPixAspectRatio
4256     {
4257     KS_PixAspectRatio_NTSC4x3,
4258     KS_PixAspectRatio_NTSC16x9,
4259     KS_PixAspectRatio_PAL4x3,
4260     KS_PixAspectRatio_PAL16x9,
4261     } KS_AMPixAspectRatio ;
4262    
4263     typedef enum // AMVP_SELECTFORMATBY
4264     {
4265     KS_AMVP_DO_NOT_CARE,
4266     KS_AMVP_BEST_BANDWIDTH,
4267     KS_AMVP_INPUT_SAME_AS_OUTPUT
4268     } KS_AMVP_SELECTFORMATBY;
4269    
4270     typedef enum // AMVP_MODE
4271     {
4272     KS_AMVP_MODE_WEAVE,
4273     KS_AMVP_MODE_BOBINTERLEAVED,
4274     KS_AMVP_MODE_BOBNONINTERLEAVED,
4275     KS_AMVP_MODE_SKIPEVEN,
4276     KS_AMVP_MODE_SKIPODD
4277     } KS_AMVP_MODE ;
4278    
4279     typedef struct tagKS_AMVPDIMINFO // AMVPDIMINFO
4280     {
4281     DWORD dwFieldWidth ; // [out] field width
4282     DWORD dwFieldHeight ; // [out] field height
4283     DWORD dwVBIWidth ; // [out] VBI data width
4284     DWORD dwVBIHeight ; // [out] VBI data height
4285     RECT rcValidRegion ; // [out] valid rect for data cropping
4286     } KS_AMVPDIMINFO, *PKS_AMVPDIMINFO ;
4287    
4288     typedef struct tagKS_AMVPDATAINFO // AMVPDATAINFO
4289     {
4290     DWORD dwSize; // Size of the struct
4291     DWORD dwMicrosecondsPerField; // Time taken by each field
4292     KS_AMVPDIMINFO amvpDimInfo; // Dimensional Information
4293     DWORD dwPictAspectRatioX; // Pict aspect ratio in X dimn
4294     DWORD dwPictAspectRatioY; // Pict aspect ratio in Y dimn
4295     BOOL bEnableDoubleClock; // Videoport should enable double clocking
4296     BOOL bEnableVACT; // Videoport should use an external VACT signal
4297     BOOL bDataIsInterlaced; // Indicates that the signal is interlaced
4298     LONG lHalfLinesOdd; // number of halflines in the odd field
4299     BOOL bFieldPolarityInverted; // Device inverts the polarity by default
4300     DWORD dwNumLinesInVREF; // Number of lines of data in VREF
4301     LONG lHalfLinesEven; // number of halflines in the even field
4302     DWORD dwReserved1; // Reserved for future use
4303     } KS_AMVPDATAINFO, *PKS_AMVPDATAINFO;
4304    
4305     typedef struct tagKS_AMVPSIZE // AMVPSIZE
4306     {
4307     DWORD dwWidth ; // [in] width in pixels
4308     DWORD dwHeight ; // [in] height in pixels
4309     } KS_AMVPSIZE, *PKS_AMVPSIZE ;
4310    
4311     //==========================================================================
4312     // End of VPType.h header info
4313     //==========================================================================
4314    
4315     typedef struct {
4316     KS_AMVPSIZE Size;
4317     DWORD MaxPixelsPerSecond;
4318     DWORD Reserved;
4319     } KSVPMAXPIXELRATE, *PKSVPMAXPIXELRATE;
4320    
4321     typedef struct {
4322     KSPROPERTY Property;
4323     KS_AMVPSIZE Size;
4324     } KSVPSIZE_PROP, *PKSVPSIZE_PROP;
4325    
4326     typedef struct {
4327     DWORD dwPitch;
4328     DWORD dwXOrigin;
4329     DWORD dwYOrigin;
4330     } KSVPSURFACEPARAMS, *PKSVPSURFACEPARAMS;
4331    
4332     #endif // !defined(__IVPType__)
4333    
4334     //
4335     // IVPNotify event notification
4336     //
4337     #define STATIC_KSEVENTSETID_VPNotify\
4338     0x20c5598eL, 0xd3c8, 0x11d0, 0x8d, 0xfc, 0x00, 0xc0, 0x4f, 0xd7, 0xc0, 0x8b
4339     DEFINE_GUIDSTRUCT("20c5598e-d3c8-11d0-8dfc-00c04fd7c08b", KSEVENTSETID_VPNotify);
4340     #define KSEVENTSETID_VPNotify DEFINE_GUIDNAMED(KSEVENTSETID_VPNotify)
4341    
4342     typedef enum {
4343     KSEVENT_VPNOTIFY_FORMATCHANGE,
4344     } KSEVENT_VPNOTIFY;
4345    
4346     //
4347     // VIDCAPTOSTI event notification
4348     //
4349     #define STATIC_KSEVENTSETID_VIDCAPTOSTI\
4350     0xdb47de20, 0xf628, 0x11d1, 0xba, 0x41, 0x0, 0xa0, 0xc9, 0xd, 0x2b, 0x5
4351     DEFINE_GUIDSTRUCT("DB47DE20-F628-11d1-BA41-00A0C90D2B05", KSEVENTSETID_VIDCAPTOSTI);
4352     #define KSEVENTSETID_VIDCAPNotify DEFINE_GUIDNAMED(KSEVENTSETID_VIDCAPTOSTI)
4353    
4354     typedef enum {
4355     KSEVENT_VIDCAPTOSTI_EXT_TRIGGER,
4356     } KSEVENT_VIDCAPTOSTI;
4357    
4358    
4359     //
4360     // IVPVBINotify event notification
4361     //
4362     #define STATIC_KSEVENTSETID_VPVBINotify\
4363     0xec529b01L, 0x1a1f, 0x11d1, 0xba, 0xd9, 0x0, 0x60, 0x97, 0x44, 0x11, 0x1a
4364     DEFINE_GUIDSTRUCT("ec529b01-1a1f-11d1-bad9-00609744111a", KSEVENTSETID_VPVBINotify);
4365     #define KSEVENTSETID_VPVBINotify DEFINE_GUIDNAMED(KSEVENTSETID_VPVBINotify)
4366    
4367     typedef enum {
4368     KSEVENT_VPVBINOTIFY_FORMATCHANGE,
4369     } KSEVENT_VPVBINOTIFY;
4370    
4371    
4372     //
4373     // closed caption information
4374     //
4375    
4376     #define STATIC_KSDATAFORMAT_TYPE_AUXLine21Data \
4377     0x670aea80L, 0x3a82, 0x11d0, 0xb7, 0x9b, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7
4378     DEFINE_GUIDSTRUCT("670aea80-3a82-11d0-b79b-00aa003767a7", KSDATAFORMAT_TYPE_AUXLine21Data);
4379     #define KSDATAFORMAT_TYPE_AUXLine21Data DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_AUXLine21Data)
4380    
4381     #define STATIC_KSDATAFORMAT_SUBTYPE_Line21_BytePair \
4382     0x6e8d4a22L, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7
4383     DEFINE_GUIDSTRUCT("6e8d4a22-310c-11d0-b79a-00aa003767a7", KSDATAFORMAT_SUBTYPE_Line21_BytePair);
4384     #define KSDATAFORMAT_SUBTYPE_Line21_BytePair DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_Line21_BytePair)
4385    
4386     #define STATIC_KSDATAFORMAT_SUBTYPE_Line21_GOPPacket \
4387     0x6e8d4a23L, 0x310c, 0x11d0, 0xb7, 0x9a, 0x00, 0xaa, 0x00, 0x37, 0x67, 0xa7
4388     DEFINE_GUIDSTRUCT("6e8d4a23-310c-11d0-b79a-00aa003767a7", KSDATAFORMAT_SUBTYPE_Line21_GOPPacket);
4389     #define KSDATAFORMAT_SUBTYPE_Line21_GOPPacket DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_Line21_GOPPacket)
4390    
4391     typedef struct _KSGOP_USERDATA {
4392     ULONG sc;
4393     ULONG reserved1;
4394     BYTE cFields;
4395     CHAR l21Data[3];
4396     } KSGOP_USERDATA, *PKSGOP_USERDATA;
4397    
4398     //
4399     // DVD encrypted PACK format type definition
4400     //
4401    
4402     #define STATIC_KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK\
4403     0xed0b916a, 0x044d, 0x11d1, 0xaa, 0x78, 0x00, 0xc0, 0x4f, 0xc3, 0x1d, 0x60
4404     DEFINE_GUIDSTRUCT("ed0b916a-044d-11d1-aa78-00c04fc31d60", KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK);
4405     #define KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK DEFINE_GUIDNAMED(KSDATAFORMAT_TYPE_DVD_ENCRYPTED_PACK)
4406    
4407     #define KS_AM_UseNewCSSKey 0x1
4408    
4409    
4410     // -----------------------------------------------------------------------
4411     // KS_AM_KSPROPSETID_TSRateChange property set definitions for time stamp
4412     // rate changes.
4413     // -----------------------------------------------------------------------
4414    
4415    
4416     #define STATIC_KSPROPSETID_TSRateChange\
4417     0xa503c5c0, 0x1d1d, 0x11d1, 0xad, 0x80, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0
4418    
4419     DEFINE_GUIDSTRUCT("A503C5C0-1D1D-11D1-AD80-444553540000", KSPROPSETID_TSRateChange);
4420     #define KSPROPSETID_TSRateChange DEFINE_GUIDNAMED(KSPROPSETID_TSRateChange)
4421     typedef enum {
4422     KS_AM_RATE_SimpleRateChange=1, // rw, use KS_AM_SimpleRateChange
4423     KS_AM_RATE_ExactRateChange=2, // rw, use KS_AM_ExactRateChange
4424     KS_AM_RATE_MaxFullDataRate=3, // r, use KS_AM_MaxFullDataRate
4425     KS_AM_RATE_Step=4 // w, use KS_AM_Step
4426     } KS_AM_PROPERTY_TS_RATE_CHANGE;
4427    
4428     typedef struct {
4429     // this is the simplest mechanism to set a time stamp rate change on
4430     // a filter (simplest for the person setting the rate change, harder
4431     // for the filter doing the rate change).
4432     REFERENCE_TIME StartTime; //stream time at which to start this rate
4433     LONG Rate; //new rate * 10000 (decimal)
4434     } KS_AM_SimpleRateChange, *PKS_AM_SimpleRateChange;
4435    
4436     typedef struct {
4437     REFERENCE_TIME OutputZeroTime; //input TS that maps to zero output TS
4438     LONG Rate; //new rate * 10000 (decimal)
4439     } KS_AM_ExactRateChange, *PKS_AM_ExactRateChange;
4440    
4441     typedef LONG KS_AM_MaxFullDataRate; //rate * 10000 (decimal)
4442    
4443     typedef DWORD KS_AM_Step; // number of frame to step
4444    
4445    
4446     #endif // !defined(_KSMEDIA_)

root@recompile.se
ViewVC Help
Powered by ViewVC 1.1.26