2 Copyright (c) 2006-2007 dogbert <dogber1@gmail.com>
5 Redistribution and use in source and binary forms, with or without
6 modification, are permitted provided that the following conditions
8 1. Redistributions of source code must retain the above copyright
9 notice, this list of conditions and the following disclaimer.
10 2. Redistributions in binary form must reproduce the above copyright
11 notice, this list of conditions and the following disclaimer in the
12 documentation and/or other materials provided with the distribution.
13 3. The name of the author may not be used to endorse or promote products
14 derived from this software without specific prior written permission.
16 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 #ifndef _MINWAVETABLES_HPP_
29 #define _MINWAVETABLES_HPP_
31 #define STATIC_KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF\
32 DEFINE_WAVEFORMATEX_GUID(WAVE_FORMAT_DOLBY_AC3_SPDIF)
33 DEFINE_GUIDSTRUCT("00000092-0000-0010-8000-00aa00389b71", KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF);
34 #define KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF DEFINE_GUIDNAMED(KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF)
36 NTSTATUS NTAPI PropertyHandler_ChannelConfig(PPCPROPERTY_REQUEST PropertyRequest);
39 static KSDATARANGE_AUDIO WavePinDataRangesPCMStream[] =
43 sizeof(KSDATARANGE_AUDIO),
47 STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
48 STATICGUIDOF(KSDATAFORMAT_SUBTYPE_PCM),
49 STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
52 MIN_BITS_PER_SAMPLE_PCM,
53 MAX_BITS_PER_SAMPLE_PCM,
59 static KSDATARANGE_AUDIO WavePinDataRangesAC3Stream[] =
63 sizeof(KSDATARANGE_AUDIO),
67 STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
68 STATICGUIDOF(KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF),
69 STATICGUIDOF(KSDATAFORMAT_SPECIFIER_WAVEFORMATEX)
72 MIN_BITS_PER_SAMPLE_AC3,
73 MAX_BITS_PER_SAMPLE_AC3,
79 sizeof(KSDATARANGE_AUDIO),
83 STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
84 STATICGUIDOF(KSDATAFORMAT_SUBTYPE_DOLBY_AC3_SPDIF),
85 STATICGUIDOF(KSDATAFORMAT_SPECIFIER_DSOUND)
88 MIN_BITS_PER_SAMPLE_AC3,
89 MAX_BITS_PER_SAMPLE_AC3,
95 static PKSDATARANGE WavePinDataRangePointersPCMStream[] =
97 PKSDATARANGE(&WavePinDataRangesPCMStream[0])
100 static PKSDATARANGE WavePinDataRangePointersAC3Stream[] =
102 PKSDATARANGE(&WavePinDataRangesAC3Stream[0]),
103 PKSDATARANGE(&WavePinDataRangesAC3Stream[1]),
108 static KSDATARANGE WavePinDataRangesPCMBridge[] =
115 STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
116 STATICGUIDOF(KSDATAFORMAT_SUBTYPE_ANALOG),
117 STATICGUIDOF(KSDATAFORMAT_SPECIFIER_NONE)
121 static KSDATARANGE WavePinDataRangesAC3Bridge[] =
128 STATICGUIDOF(KSDATAFORMAT_TYPE_AUDIO),
129 STATICGUIDOF(KSDATAFORMAT_SUBTYPE_AC3_AUDIO),
130 STATICGUIDOF(KSDATAFORMAT_SPECIFIER_NONE)
134 static PKSDATARANGE WavePinDataRangePointersPCMBridge[] =
136 &WavePinDataRangesPCMBridge[0]
139 static PKSDATARANGE WavePinDataRangePointersAC3Bridge[] =
141 &WavePinDataRangesAC3Bridge[0]
144 static PCPIN_DESCRIPTOR WaveMiniportPins[] =
146 // PIN_WAVE_CAPTURE_SINK - 0
157 SIZEOF_ARRAY(WavePinDataRangePointersPCMStream),
158 WavePinDataRangePointersPCMStream,
160 KSPIN_COMMUNICATION_SINK,
162 &KSAUDFNAME_RECORDING_CONTROL,
167 // PIN_WAVE_CAPTURE_SOURCE - 1
178 SIZEOF_ARRAY(WavePinDataRangePointersPCMBridge),
179 WavePinDataRangePointersPCMBridge,
181 KSPIN_COMMUNICATION_NONE,
188 // PIN_WAVE_RENDER_SINK - 2
199 SIZEOF_ARRAY(WavePinDataRangePointersPCMStream),
200 WavePinDataRangePointersPCMStream,
202 KSPIN_COMMUNICATION_SINK,
204 &KSAUDFNAME_VOLUME_CONTROL,
209 // PIN_WAVE_RENDER_SOURCE - 3
220 SIZEOF_ARRAY(WavePinDataRangePointersPCMBridge),
221 WavePinDataRangePointersPCMBridge,
223 KSPIN_COMMUNICATION_NONE,
230 // PIN_WAVE_AC3_RENDER_SINK - 4
232 MAX_AC3_INPUT_STREAMS,
233 MAX_AC3_INPUT_STREAMS,
241 SIZEOF_ARRAY(WavePinDataRangePointersAC3Stream),
242 WavePinDataRangePointersAC3Stream,
244 KSPIN_COMMUNICATION_SINK,
252 // PIN_WAVE_AC3_RENDER_SOURCE - 5
263 SIZEOF_ARRAY(WavePinDataRangePointersAC3Bridge),
264 WavePinDataRangePointersAC3Bridge,
266 KSPIN_COMMUNICATION_NONE,
267 &KSNODETYPE_SPDIF_INTERFACE,
274 static PCPROPERTY_ITEM PropertiesChannels[] =
278 KSPROPERTY_AUDIO_CHANNEL_CONFIG,
279 KSPROPERTY_TYPE_BASICSUPPORT | KSPROPERTY_TYPE_GET | KSPROPERTY_TYPE_SET,
280 (PCPFNPROPERTY_HANDLER)PropertyHandler_ChannelConfig
283 DEFINE_PCAUTOMATION_TABLE_PROP(AutomationChans,PropertiesChannels);
285 static PCNODE_DESCRIPTOR WaveMiniportNodes[] =
286 {// Flags AutomationTable Type Name
287 // 0 - KSNODE_WAVE_ADC
288 { 0, NULL, &KSNODETYPE_ADC, NULL },
289 // 1 - KSNODE_WAVE_VOLUME1
290 { 0, NULL, &KSNODETYPE_VOLUME, NULL },
291 // 2 - KSNODE_WAVE_3D_EFFECTS
292 { 0, NULL, &KSNODETYPE_3D_EFFECTS, NULL },
293 // 3 - KSNODE_WAVE_SUPERMIX
294 { 0, NULL, &KSNODETYPE_SUPERMIX, NULL },
295 // 4 - KSNODE_WAVE_VOLUME2
296 { 0, NULL, &KSNODETYPE_VOLUME, NULL },
297 // 5 - KSNODE_WAVE_SRC
298 { 0, NULL, &KSNODETYPE_SRC, NULL },
299 // 6 - KSNODE_WAVE_SUM
300 { 0, NULL, &KSNODETYPE_SUM, NULL },
301 // 7 - KSNODE_WAVE_DAC
302 { 0, &AutomationChans, &KSNODETYPE_DAC, NULL },
303 // 8 - KSNODE_WAVE_SPDIF (XP crashes if the pins are directly connected)
304 { 0, NULL, &KSNODETYPE_SPDIF_INTERFACE, NULL },
307 static PCCONNECTION_DESCRIPTOR WaveMiniportConnections[] =
308 {// FromNode, FromPin, ToNode, ToPin
309 { PCFILTER_NODE, PIN_WAVE_CAPTURE_SOURCE, KSNODE_WAVE_ADC, 1 },
310 { KSNODE_WAVE_ADC, 0, PCFILTER_NODE, PIN_WAVE_CAPTURE_SINK },
312 { PCFILTER_NODE, PIN_WAVE_RENDER_SINK, KSNODE_WAVE_VOLUME1, 1 },
313 { KSNODE_WAVE_VOLUME1, 0, KSNODE_WAVE_3D_EFFECTS, 1 },
314 { KSNODE_WAVE_3D_EFFECTS, 0, KSNODE_WAVE_SUPERMIX, 1 },
315 { KSNODE_WAVE_SUPERMIX, 0, KSNODE_WAVE_VOLUME2, 1 },
316 { KSNODE_WAVE_VOLUME2, 0, KSNODE_WAVE_SRC, 1 },
317 { KSNODE_WAVE_SRC, 0, KSNODE_WAVE_SUM, 1 },
318 { KSNODE_WAVE_SUM, 0, KSNODE_WAVE_DAC, 1 },
319 { KSNODE_WAVE_DAC, 0, PCFILTER_NODE, PIN_WAVE_RENDER_SOURCE },
321 { PCFILTER_NODE, PIN_WAVE_AC3_RENDER_SINK,KSNODE_WAVE_SPDIF, 1 },
322 { KSNODE_WAVE_SPDIF, 0, PCFILTER_NODE, PIN_WAVE_AC3_RENDER_SOURCE },
325 static PCFILTER_DESCRIPTOR WaveMiniportFilterDescriptor =
328 NULL, // AutomationTable
329 sizeof(PCPIN_DESCRIPTOR), // PinSize
330 SIZEOF_ARRAY(WaveMiniportPins), // PinCount
331 WaveMiniportPins, // Pins
332 sizeof(PCNODE_DESCRIPTOR), // NodeSize
333 SIZEOF_ARRAY(WaveMiniportNodes), // NodeCount
334 WaveMiniportNodes, // Nodes
335 SIZEOF_ARRAY(WaveMiniportConnections), // ConnectionCount
336 WaveMiniportConnections, // Connections
338 NULL // Categories - use the default categories (audio, render, capture)
341 #endif //_MINWAVETABLES_HPP_