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
;
31 ULONG PinConnectedFromCount
;
32 PULONG PinConnectedFrom
;
34 ULONG PinConnectedToCount
;
35 PULONG PinConnectedTo
;
39 }TOPOLOGY_NODE
, *PTOPOLOGY_NODE
;
45 ULONG NodesConnectedToCount
;
46 PTOPOLOGY_NODE
* NodesConnectedTo
;
48 ULONG NodesConnectedFromCount
;
49 PTOPOLOGY_NODE
* NodesConnectedFrom
;
51 ULONG PinConnectedFromCount
;
52 PULONG PinConnectedFrom
;
54 ULONG PinConnectedToCount
;
55 PULONG PinConnectedTo
;
63 ULONG TopologyPinsCount
;
66 ULONG TopologyNodesCount
;
67 PTOPOLOGY_NODE TopologyNodes
;
69 }TOPOLOGY
, *PTOPOLOGY
;
79 }MIXER_INFO
, *LPMIXER_INFO
;
87 LPMIXERCONTROLW LineControls
;
89 LIST_ENTRY LineControlsExtraData
;
90 }MIXERLINE_EXT
, *LPMIXERLINE_EXT
;
96 }MIXERCONTROL_DATA
, *LPMIXERCONTROL_DATA
;
100 MIXERCONTROL_DATA Header
;
104 ULONG InputSteppingDelta
;
107 }MIXERVOLUME_DATA
, *LPMIXERVOLUME_DATA
;
114 HANDLE hDeviceInterfaceKey
;
117 }MIXER_DATA
, *LPMIXER_DATA
;
126 WAVEOUTCAPSW OutCaps
;
129 }WAVE_INFO
, *LPWAVE_INFO
;
138 MIDIOUTCAPSW OutCaps
;
142 }MIDI_INFO
, *LPMIDI_INFO
;
146 ULONG MixerListCount
;
147 LIST_ENTRY MixerList
;
149 ULONG MixerDataCount
;
150 LIST_ENTRY MixerData
;
152 ULONG WaveInListCount
;
153 LIST_ENTRY WaveInList
;
155 ULONG WaveOutListCount
;
156 LIST_ENTRY WaveOutList
;
158 ULONG MidiInListCount
;
159 LIST_ENTRY MidiInList
;
161 ULONG MidiOutListCount
;
162 LIST_ENTRY MidiOutList
;
163 }MIXER_LIST
, *PMIXER_LIST
;
168 PVOID MixerEventContext
;
169 PMIXER_EVENT MixerEventRoutine
;
171 }EVENT_NOTIFICATION_ENTRY
, *PEVENT_NOTIFICATION_ENTRY
;
173 #define DESTINATION_LINE (0xFFFF0000)
174 #define SOURCE_LINE (0x10000)
176 MMixerGetFilterPinCount(
177 IN PMIXER_CONTEXT MixerContext
,
182 IN PKSMULTIPLE_ITEM MultipleItem
,
186 MMixerGetNodeIndexes(
187 IN PMIXER_CONTEXT MixerContext
,
188 IN PKSMULTIPLE_ITEM MultipleItem
,
192 OUT PULONG NodeReferenceCount
,
193 OUT PULONG
*NodeReference
);
195 PKSTOPOLOGY_CONNECTION
196 MMixerGetConnectionByIndex(
197 IN PKSMULTIPLE_ITEM MultipleItem
,
201 MMixerGetControlTypeFromTopologyNode(
205 MMixerGetSourceMixerLineByLineId(
206 LPMIXER_INFO MixerInfo
,
210 MMixerGetFilterTopologyProperty(
211 IN PMIXER_CONTEXT MixerContext
,
214 OUT PKSMULTIPLE_ITEM
* OutMultipleItem
);
218 IN PMIXER_CONTEXT MixerContext
,
219 IN LPMIXER_INFO MixerInfo
);
222 MMixerGetPhysicalConnection(
223 IN PMIXER_CONTEXT MixerContext
,
226 OUT PKSPIN_PHYSICALCONNECTION
*OutConnection
);
230 IN PMIXER_CONTEXT MixerContext
,
231 IN PMIXER_LIST MixerList
,
232 IN LPMIXER_DATA MixerData
,
233 IN PULONG DeviceCount
);
236 MMixerAllocatePinConnect(
237 IN PMIXER_CONTEXT MixerContext
,
238 ULONG DataFormatSize
);
241 MMixerGetAudioPinDataRanges(
242 IN PMIXER_CONTEXT MixerContext
,
245 IN OUT PKSMULTIPLE_ITEM
* OutMultipleItem
);
248 MMixerInitializeMidiForFilter(
249 IN PMIXER_CONTEXT MixerContext
,
250 IN PMIXER_LIST MixerList
,
251 IN LPMIXER_DATA MixerData
,
252 IN PTOPOLOGY Topology
);
256 IN PMIXER_CONTEXT MixerContext
);
259 MMixerGetMixerInfoByIndex(
260 IN PMIXER_CONTEXT MixerContext
,
261 IN ULONG MixerIndex
);
264 MMixerGetSourceMixerLineByComponentType(
265 LPMIXER_INFO MixerInfo
,
266 DWORD dwComponentType
);
269 MMixerGetMixerControlById(
270 LPMIXER_INFO MixerInfo
,
272 LPMIXERLINE_EXT
*MixerLine
,
273 LPMIXERCONTROLW
*MixerControl
,
277 MMixerSetGetMuteControlDetails(
278 IN PMIXER_CONTEXT MixerContext
,
279 IN LPMIXER_INFO MixerInfo
,
282 IN LPMIXERCONTROLDETAILS MixerControlDetails
,
286 MMixerSetGetVolumeControlDetails(
287 IN PMIXER_CONTEXT MixerContext
,
288 IN LPMIXER_INFO MixerInfo
,
291 LPMIXERCONTROLW MixerControl
,
292 IN LPMIXERCONTROLDETAILS MixerControlDetails
,
293 LPMIXERLINE_EXT MixerLine
);
296 MMixerSetGetControlDetails(
297 IN PMIXER_CONTEXT MixerContext
,
303 IN PLONG InputValue
);
306 MMixerGetDataByDeviceId(
307 IN PMIXER_LIST MixerList
,
311 MMixerGetDataByDeviceName(
312 IN PMIXER_LIST MixerList
,
313 IN LPWSTR DeviceName
);
316 MMixerCreateMixerData(
317 IN PMIXER_CONTEXT MixerContext
,
318 IN PMIXER_LIST MixerList
,
320 IN LPWSTR DeviceName
,
325 MMixerInitializeWaveInfo(
326 IN PMIXER_CONTEXT MixerContext
,
327 IN PMIXER_LIST MixerList
,
328 IN LPMIXER_DATA MixerData
,
329 IN LPWSTR DeviceName
,
336 IN PMIXER_CONTEXT MixerContext
,
337 IN OUT LPMIXER_INFO MixerInfo
,
339 IN PMIXER_EVENT MixerEventRoutine
);
343 IN PMIXER_CONTEXT MixerContext
,
344 OUT LPWSTR DeviceName
,
348 MMixerInitializePinConnect(
349 IN OUT PKSPIN_CONNECT PinConnect
,
353 MMixerGetPinDataFlowAndCommunication(
354 IN PMIXER_CONTEXT MixerContext
,
357 OUT PKSPIN_DATAFLOW DataFlow
,
358 OUT PKSPIN_COMMUNICATION Communication
);
364 MMixerCreateTopology(
365 IN PMIXER_CONTEXT MixerContext
,
367 IN PKSMULTIPLE_ITEM NodeConnections
,
368 IN PKSMULTIPLE_ITEM NodeTypes
,
369 OUT PTOPOLOGY
*OutTopology
);
372 MMixerGetAllUpOrDownstreamPinsFromNodeIndex(
373 IN PMIXER_CONTEXT MixerContext
,
374 IN PTOPOLOGY Topology
,
377 OUT PULONG OutPinsCount
,
381 MMixerGetAllUpOrDownstreamPinsFromPinIndex(
382 IN PMIXER_CONTEXT MixerContext
,
383 IN PTOPOLOGY Topology
,
386 OUT PULONG OutPinsCount
,
390 MMixerGetNextNodesFromPinIndex(
391 IN PMIXER_CONTEXT MixerContext
,
392 IN PTOPOLOGY Topology
,
395 OUT PULONG OutNodesCount
,
396 OUT PULONG OutNodes
);
399 MMixerAllocateTopologyPinArray(
400 IN PMIXER_CONTEXT MixerContext
,
401 IN PTOPOLOGY Topology
,
402 OUT PULONG
* OutPins
);
405 MMixerAllocateTopologyNodeArray(
406 IN PMIXER_CONTEXT MixerContext
,
407 IN PTOPOLOGY Topology
,
408 OUT PULONG
* OutPins
);
411 MMixerGetAllUpOrDownstreamNodesFromPinIndex(
412 IN PMIXER_CONTEXT MixerContext
,
413 IN PTOPOLOGY Topology
,
416 OUT PULONG OutNodesCount
,
417 OUT PULONG OutNodes
);
420 MMixerIsNodeTerminator(
421 IN PTOPOLOGY Topology
,
423 OUT ULONG
* bTerminator
);
426 MMixerGetNextNodesFromNodeIndex(
427 IN PMIXER_CONTEXT MixerContext
,
428 IN PTOPOLOGY Topology
,
431 OUT PULONG OutNodesCount
,
432 OUT PULONG OutNodes
);
435 MMixerGetNodeTypeFromTopology(
436 IN PTOPOLOGY Topology
,
440 MMixerGetAllUpOrDownstreamNodesFromNodeIndex(
441 IN PMIXER_CONTEXT MixerContext
,
442 IN PTOPOLOGY Topology
,
445 OUT PULONG OutNodesCount
,
446 OUT PULONG OutNodes
);
449 MMixerIsNodeConnectedToPin(
450 IN PMIXER_CONTEXT MixerContext
,
451 IN PTOPOLOGY Topology
,
455 OUT PULONG bConnected
);
458 MMixerGetNodeIndexFromGuid(
459 IN PTOPOLOGY Topology
,
460 IN
const GUID
*NodeType
);
463 MMixerSetTopologyNodeReserved(
464 IN PTOPOLOGY Topology
,
468 MMixerIsTopologyNodeReserved(
469 IN PTOPOLOGY Topology
,
471 OUT PULONG bReserved
);
474 MMixerGetTopologyPinCount(
475 IN PTOPOLOGY Topology
,
476 OUT PULONG PinCount
);