3 #include <pseh/pseh2.h>
20 typedef struct __TOPOLOGY_NODE__
25 ULONG NodeConnectedToCount
;
26 struct __TOPOLOGY_NODE__
** NodeConnectedTo
;
28 ULONG NodeConnectedFromCount
;
29 struct __TOPOLOGY_NODE__
** NodeConnectedFrom
;
30 PULONG LogicalPinNodeConnectedFrom
;
32 ULONG PinConnectedFromCount
;
33 PULONG PinConnectedFrom
;
35 ULONG PinConnectedToCount
;
36 PULONG PinConnectedTo
;
40 }TOPOLOGY_NODE
, *PTOPOLOGY_NODE
;
46 ULONG NodesConnectedToCount
;
47 PTOPOLOGY_NODE
* NodesConnectedTo
;
49 ULONG NodesConnectedFromCount
;
50 PTOPOLOGY_NODE
* NodesConnectedFrom
;
52 ULONG PinConnectedFromCount
;
53 PULONG PinConnectedFrom
;
55 ULONG PinConnectedToCount
;
56 PULONG PinConnectedTo
;
65 ULONG TopologyPinsCount
;
68 ULONG TopologyNodesCount
;
69 PTOPOLOGY_NODE TopologyNodes
;
71 }TOPOLOGY
, *PTOPOLOGY
;
80 }MIXER_INFO
, *LPMIXER_INFO
;
85 MIXERCONTROLW Control
;
89 }MIXERCONTROL_EXT
, *LPMIXERCONTROL_EXT
;
96 LIST_ENTRY ControlsList
;
98 }MIXERLINE_EXT
, *LPMIXERLINE_EXT
;
104 }MIXERCONTROL_DATA
, *LPMIXERCONTROL_DATA
;
108 MIXERCONTROL_DATA Header
;
112 ULONG InputSteppingDelta
;
115 }MIXERVOLUME_DATA
, *LPMIXERVOLUME_DATA
;
122 HANDLE hDeviceInterfaceKey
;
125 LPMIXER_INFO MixerInfo
;
126 }MIXER_DATA
, *LPMIXER_DATA
;
135 WAVEOUTCAPSW OutCaps
;
138 }WAVE_INFO
, *LPWAVE_INFO
;
147 MIDIOUTCAPSW OutCaps
;
151 }MIDI_INFO
, *LPMIDI_INFO
;
155 ULONG MixerListCount
;
156 LIST_ENTRY MixerList
;
158 ULONG MixerDataCount
;
159 LIST_ENTRY MixerData
;
161 ULONG WaveInListCount
;
162 LIST_ENTRY WaveInList
;
164 ULONG WaveOutListCount
;
165 LIST_ENTRY WaveOutList
;
167 ULONG MidiInListCount
;
168 LIST_ENTRY MidiInList
;
170 ULONG MidiOutListCount
;
171 LIST_ENTRY MidiOutList
;
172 }MIXER_LIST
, *PMIXER_LIST
;
177 PVOID MixerEventContext
;
178 PMIXER_EVENT MixerEventRoutine
;
180 }EVENT_NOTIFICATION_ENTRY
, *PEVENT_NOTIFICATION_ENTRY
;
182 #define DESTINATION_LINE (0xFFFF0000)
183 #define SOURCE_LINE (0x10000)
185 MMixerGetFilterPinCount(
186 IN PMIXER_CONTEXT MixerContext
,
191 IN PKSMULTIPLE_ITEM MultipleItem
,
195 MMixerGetNodeIndexes(
196 IN PMIXER_CONTEXT MixerContext
,
197 IN PKSMULTIPLE_ITEM MultipleItem
,
201 OUT PULONG NodeReferenceCount
,
202 OUT PULONG
*NodeReference
);
204 PKSTOPOLOGY_CONNECTION
205 MMixerGetConnectionByIndex(
206 IN PKSMULTIPLE_ITEM MultipleItem
,
210 MMixerGetControlTypeFromTopologyNode(
214 MMixerGetSourceMixerLineByLineId(
215 LPMIXER_INFO MixerInfo
,
219 MMixerGetFilterTopologyProperty(
220 IN PMIXER_CONTEXT MixerContext
,
223 OUT PKSMULTIPLE_ITEM
* OutMultipleItem
);
227 IN PMIXER_CONTEXT MixerContext
,
228 IN LPMIXER_INFO MixerInfo
);
231 MMixerGetPhysicalConnection(
232 IN PMIXER_CONTEXT MixerContext
,
235 OUT PKSPIN_PHYSICALCONNECTION
*OutConnection
);
239 IN PMIXER_CONTEXT MixerContext
,
240 IN PMIXER_LIST MixerList
,
241 IN LPMIXER_DATA MixerData
,
242 IN PULONG DeviceCount
);
245 MMixerAllocatePinConnect(
246 IN PMIXER_CONTEXT MixerContext
,
247 ULONG DataFormatSize
);
250 MMixerGetAudioPinDataRanges(
251 IN PMIXER_CONTEXT MixerContext
,
254 IN OUT PKSMULTIPLE_ITEM
* OutMultipleItem
);
257 MMixerInitializeMidiForFilter(
258 IN PMIXER_CONTEXT MixerContext
,
259 IN PMIXER_LIST MixerList
,
260 IN LPMIXER_DATA MixerData
,
261 IN PTOPOLOGY Topology
);
265 IN PMIXER_CONTEXT MixerContext
);
268 MMixerGetMixerInfoByIndex(
269 IN PMIXER_CONTEXT MixerContext
,
270 IN ULONG MixerIndex
);
273 MMixerGetSourceMixerLineByComponentType(
274 LPMIXER_INFO MixerInfo
,
275 DWORD dwComponentType
);
278 MMixerGetMixerControlById(
279 LPMIXER_INFO MixerInfo
,
281 LPMIXERLINE_EXT
*MixerLine
,
282 LPMIXERCONTROL_EXT
*MixerControl
,
286 MMixerSetGetMuteControlDetails(
287 IN PMIXER_CONTEXT MixerContext
,
288 IN LPMIXER_INFO MixerInfo
,
289 IN LPMIXERCONTROL_EXT MixerControl
,
291 IN LPMIXERCONTROLDETAILS MixerControlDetails
,
295 MMixerSetGetVolumeControlDetails(
296 IN PMIXER_CONTEXT MixerContext
,
297 IN LPMIXER_INFO MixerInfo
,
300 LPMIXERCONTROL_EXT MixerControl
,
301 IN LPMIXERCONTROLDETAILS MixerControlDetails
,
302 LPMIXERLINE_EXT MixerLine
);
305 MMixerSetGetControlDetails(
306 IN PMIXER_CONTEXT MixerContext
,
312 IN PLONG InputValue
);
315 MMixerGetDataByDeviceId(
316 IN PMIXER_LIST MixerList
,
320 MMixerGetDataByDeviceName(
321 IN PMIXER_LIST MixerList
,
322 IN LPWSTR DeviceName
);
325 MMixerCreateMixerData(
326 IN PMIXER_CONTEXT MixerContext
,
327 IN PMIXER_LIST MixerList
,
329 IN LPWSTR DeviceName
,
334 MMixerInitializeWaveInfo(
335 IN PMIXER_CONTEXT MixerContext
,
336 IN PMIXER_LIST MixerList
,
337 IN LPMIXER_DATA MixerData
,
338 IN LPWSTR DeviceName
,
345 IN PMIXER_CONTEXT MixerContext
,
346 IN OUT LPMIXER_INFO MixerInfo
,
348 IN PMIXER_EVENT MixerEventRoutine
);
352 IN PMIXER_CONTEXT MixerContext
,
353 OUT LPWSTR DeviceName
,
357 MMixerInitializePinConnect(
358 IN OUT PKSPIN_CONNECT PinConnect
,
362 MMixerGetPinDataFlowAndCommunication(
363 IN PMIXER_CONTEXT MixerContext
,
366 OUT PKSPIN_DATAFLOW DataFlow
,
367 OUT PKSPIN_COMMUNICATION Communication
);
370 MMixerHandleAlternativeMixers(
371 IN PMIXER_CONTEXT MixerContext
,
372 IN PMIXER_LIST MixerList
,
373 IN LPMIXER_DATA MixerData
,
374 IN PTOPOLOGY Topology
);
377 MMixerGetMixerByName(
378 IN PMIXER_LIST MixerList
,
380 OUT LPMIXER_INFO
*MixerInfo
);
385 MMixerCreateTopology(
386 IN PMIXER_CONTEXT MixerContext
,
388 IN PKSMULTIPLE_ITEM NodeConnections
,
389 IN PKSMULTIPLE_ITEM NodeTypes
,
390 OUT PTOPOLOGY
*OutTopology
);
393 MMixerGetAllUpOrDownstreamPinsFromNodeIndex(
394 IN PMIXER_CONTEXT MixerContext
,
395 IN PTOPOLOGY Topology
,
398 OUT PULONG OutPinsCount
,
402 MMixerGetAllUpOrDownstreamPinsFromPinIndex(
403 IN PMIXER_CONTEXT MixerContext
,
404 IN PTOPOLOGY Topology
,
407 OUT PULONG OutPinsCount
,
411 MMixerGetNextNodesFromPinIndex(
412 IN PMIXER_CONTEXT MixerContext
,
413 IN PTOPOLOGY Topology
,
416 OUT PULONG OutNodesCount
,
417 OUT PULONG OutNodes
);
420 MMixerAllocateTopologyPinArray(
421 IN PMIXER_CONTEXT MixerContext
,
422 IN PTOPOLOGY Topology
,
423 OUT PULONG
* OutPins
);
426 MMixerAllocateTopologyNodeArray(
427 IN PMIXER_CONTEXT MixerContext
,
428 IN PTOPOLOGY Topology
,
429 OUT PULONG
* OutPins
);
432 MMixerGetAllUpOrDownstreamNodesFromPinIndex(
433 IN PMIXER_CONTEXT MixerContext
,
434 IN PTOPOLOGY Topology
,
437 OUT PULONG OutNodesCount
,
438 OUT PULONG OutNodes
);
441 MMixerIsNodeTerminator(
442 IN PTOPOLOGY Topology
,
444 OUT ULONG
* bTerminator
);
447 MMixerGetNextNodesFromNodeIndex(
448 IN PMIXER_CONTEXT MixerContext
,
449 IN PTOPOLOGY Topology
,
452 OUT PULONG OutNodesCount
,
453 OUT PULONG OutNodes
);
456 MMixerGetNodeTypeFromTopology(
457 IN PTOPOLOGY Topology
,
461 MMixerGetAllUpOrDownstreamNodesFromNodeIndex(
462 IN PMIXER_CONTEXT MixerContext
,
463 IN PTOPOLOGY Topology
,
466 OUT PULONG OutNodesCount
,
467 OUT PULONG OutNodes
);
470 MMixerIsNodeConnectedToPin(
471 IN PMIXER_CONTEXT MixerContext
,
472 IN PTOPOLOGY Topology
,
476 OUT PULONG bConnected
);
479 MMixerGetNodeIndexFromGuid(
480 IN PTOPOLOGY Topology
,
481 IN
const GUID
*NodeType
);
484 MMixerSetTopologyNodeReserved(
485 IN PTOPOLOGY Topology
,
489 MMixerIsTopologyNodeReserved(
490 IN PTOPOLOGY Topology
,
492 OUT PULONG bReserved
);
495 MMixerSetTopologyPinReserved(
496 IN PTOPOLOGY Topology
,
500 MMixerIsTopologyPinReserved(
501 IN PTOPOLOGY Topology
,
503 OUT PULONG bReserved
);
506 MMixerGetTopologyPinCount(
507 IN PTOPOLOGY Topology
,
508 OUT PULONG PinCount
);