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 }MIXER_DATA
, *LPMIXER_DATA
;
134 WAVEOUTCAPSW OutCaps
;
137 }WAVE_INFO
, *LPWAVE_INFO
;
146 MIDIOUTCAPSW OutCaps
;
150 }MIDI_INFO
, *LPMIDI_INFO
;
154 ULONG MixerListCount
;
155 LIST_ENTRY MixerList
;
157 ULONG MixerDataCount
;
158 LIST_ENTRY MixerData
;
160 ULONG WaveInListCount
;
161 LIST_ENTRY WaveInList
;
163 ULONG WaveOutListCount
;
164 LIST_ENTRY WaveOutList
;
166 ULONG MidiInListCount
;
167 LIST_ENTRY MidiInList
;
169 ULONG MidiOutListCount
;
170 LIST_ENTRY MidiOutList
;
171 }MIXER_LIST
, *PMIXER_LIST
;
176 PVOID MixerEventContext
;
177 PMIXER_EVENT MixerEventRoutine
;
179 }EVENT_NOTIFICATION_ENTRY
, *PEVENT_NOTIFICATION_ENTRY
;
181 #define DESTINATION_LINE (0xFFFF0000)
182 #define SOURCE_LINE (0x10000)
184 MMixerGetFilterPinCount(
185 IN PMIXER_CONTEXT MixerContext
,
190 IN PKSMULTIPLE_ITEM MultipleItem
,
194 MMixerGetNodeIndexes(
195 IN PMIXER_CONTEXT MixerContext
,
196 IN PKSMULTIPLE_ITEM MultipleItem
,
200 OUT PULONG NodeReferenceCount
,
201 OUT PULONG
*NodeReference
);
203 PKSTOPOLOGY_CONNECTION
204 MMixerGetConnectionByIndex(
205 IN PKSMULTIPLE_ITEM MultipleItem
,
209 MMixerGetControlTypeFromTopologyNode(
213 MMixerGetSourceMixerLineByLineId(
214 LPMIXER_INFO MixerInfo
,
218 MMixerGetFilterTopologyProperty(
219 IN PMIXER_CONTEXT MixerContext
,
222 OUT PKSMULTIPLE_ITEM
* OutMultipleItem
);
226 IN PMIXER_CONTEXT MixerContext
,
227 IN LPMIXER_INFO MixerInfo
);
230 MMixerGetPhysicalConnection(
231 IN PMIXER_CONTEXT MixerContext
,
234 OUT PKSPIN_PHYSICALCONNECTION
*OutConnection
);
238 IN PMIXER_CONTEXT MixerContext
,
239 IN PMIXER_LIST MixerList
,
240 IN LPMIXER_DATA MixerData
,
241 IN PULONG DeviceCount
);
244 MMixerAllocatePinConnect(
245 IN PMIXER_CONTEXT MixerContext
,
246 ULONG DataFormatSize
);
249 MMixerGetAudioPinDataRanges(
250 IN PMIXER_CONTEXT MixerContext
,
253 IN OUT PKSMULTIPLE_ITEM
* OutMultipleItem
);
256 MMixerInitializeMidiForFilter(
257 IN PMIXER_CONTEXT MixerContext
,
258 IN PMIXER_LIST MixerList
,
259 IN LPMIXER_DATA MixerData
,
260 IN PTOPOLOGY Topology
);
264 IN PMIXER_CONTEXT MixerContext
);
267 MMixerGetMixerInfoByIndex(
268 IN PMIXER_CONTEXT MixerContext
,
269 IN ULONG MixerIndex
);
272 MMixerGetSourceMixerLineByComponentType(
273 LPMIXER_INFO MixerInfo
,
274 DWORD dwComponentType
);
277 MMixerGetMixerControlById(
278 LPMIXER_INFO MixerInfo
,
280 LPMIXERLINE_EXT
*MixerLine
,
281 LPMIXERCONTROL_EXT
*MixerControl
,
285 MMixerSetGetMuteControlDetails(
286 IN PMIXER_CONTEXT MixerContext
,
287 IN LPMIXER_INFO MixerInfo
,
288 IN LPMIXERCONTROL_EXT MixerControl
,
290 IN LPMIXERCONTROLDETAILS MixerControlDetails
,
294 MMixerSetGetVolumeControlDetails(
295 IN PMIXER_CONTEXT MixerContext
,
296 IN LPMIXER_INFO MixerInfo
,
299 LPMIXERCONTROL_EXT MixerControl
,
300 IN LPMIXERCONTROLDETAILS MixerControlDetails
,
301 LPMIXERLINE_EXT MixerLine
);
304 MMixerSetGetControlDetails(
305 IN PMIXER_CONTEXT MixerContext
,
311 IN PLONG InputValue
);
314 MMixerGetDataByDeviceId(
315 IN PMIXER_LIST MixerList
,
319 MMixerGetDataByDeviceName(
320 IN PMIXER_LIST MixerList
,
321 IN LPWSTR DeviceName
);
324 MMixerCreateMixerData(
325 IN PMIXER_CONTEXT MixerContext
,
326 IN PMIXER_LIST MixerList
,
328 IN LPWSTR DeviceName
,
333 MMixerInitializeWaveInfo(
334 IN PMIXER_CONTEXT MixerContext
,
335 IN PMIXER_LIST MixerList
,
336 IN LPMIXER_DATA MixerData
,
337 IN LPWSTR DeviceName
,
344 IN PMIXER_CONTEXT MixerContext
,
345 IN OUT LPMIXER_INFO MixerInfo
,
347 IN PMIXER_EVENT MixerEventRoutine
);
351 IN PMIXER_CONTEXT MixerContext
,
352 OUT LPWSTR DeviceName
,
356 MMixerInitializePinConnect(
357 IN OUT PKSPIN_CONNECT PinConnect
,
361 MMixerGetPinDataFlowAndCommunication(
362 IN PMIXER_CONTEXT MixerContext
,
365 OUT PKSPIN_DATAFLOW DataFlow
,
366 OUT PKSPIN_COMMUNICATION Communication
);
369 MMixerHandleAlternativeMixers(
370 IN PMIXER_CONTEXT MixerContext
,
371 IN PMIXER_LIST MixerList
,
372 IN LPMIXER_DATA MixerData
,
373 IN PTOPOLOGY Topology
);
379 MMixerCreateTopology(
380 IN PMIXER_CONTEXT MixerContext
,
382 IN PKSMULTIPLE_ITEM NodeConnections
,
383 IN PKSMULTIPLE_ITEM NodeTypes
,
384 OUT PTOPOLOGY
*OutTopology
);
387 MMixerGetAllUpOrDownstreamPinsFromNodeIndex(
388 IN PMIXER_CONTEXT MixerContext
,
389 IN PTOPOLOGY Topology
,
392 OUT PULONG OutPinsCount
,
396 MMixerGetAllUpOrDownstreamPinsFromPinIndex(
397 IN PMIXER_CONTEXT MixerContext
,
398 IN PTOPOLOGY Topology
,
401 OUT PULONG OutPinsCount
,
405 MMixerGetNextNodesFromPinIndex(
406 IN PMIXER_CONTEXT MixerContext
,
407 IN PTOPOLOGY Topology
,
410 OUT PULONG OutNodesCount
,
411 OUT PULONG OutNodes
);
414 MMixerAllocateTopologyPinArray(
415 IN PMIXER_CONTEXT MixerContext
,
416 IN PTOPOLOGY Topology
,
417 OUT PULONG
* OutPins
);
420 MMixerAllocateTopologyNodeArray(
421 IN PMIXER_CONTEXT MixerContext
,
422 IN PTOPOLOGY Topology
,
423 OUT PULONG
* OutPins
);
426 MMixerGetAllUpOrDownstreamNodesFromPinIndex(
427 IN PMIXER_CONTEXT MixerContext
,
428 IN PTOPOLOGY Topology
,
431 OUT PULONG OutNodesCount
,
432 OUT PULONG OutNodes
);
435 MMixerIsNodeTerminator(
436 IN PTOPOLOGY Topology
,
438 OUT ULONG
* bTerminator
);
441 MMixerGetNextNodesFromNodeIndex(
442 IN PMIXER_CONTEXT MixerContext
,
443 IN PTOPOLOGY Topology
,
446 OUT PULONG OutNodesCount
,
447 OUT PULONG OutNodes
);
450 MMixerGetNodeTypeFromTopology(
451 IN PTOPOLOGY Topology
,
455 MMixerGetAllUpOrDownstreamNodesFromNodeIndex(
456 IN PMIXER_CONTEXT MixerContext
,
457 IN PTOPOLOGY Topology
,
460 OUT PULONG OutNodesCount
,
461 OUT PULONG OutNodes
);
464 MMixerIsNodeConnectedToPin(
465 IN PMIXER_CONTEXT MixerContext
,
466 IN PTOPOLOGY Topology
,
470 OUT PULONG bConnected
);
473 MMixerGetNodeIndexFromGuid(
474 IN PTOPOLOGY Topology
,
475 IN
const GUID
*NodeType
);
478 MMixerSetTopologyNodeReserved(
479 IN PTOPOLOGY Topology
,
483 MMixerIsTopologyNodeReserved(
484 IN PTOPOLOGY Topology
,
486 OUT PULONG bReserved
);
489 MMixerSetTopologyPinReserved(
490 IN PTOPOLOGY Topology
,
494 MMixerIsTopologyPinReserved(
495 IN PTOPOLOGY Topology
,
497 OUT PULONG bReserved
);
500 MMixerGetTopologyPinCount(
501 IN PTOPOLOGY Topology
,
502 OUT PULONG PinCount
);