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
;
133 ULONG MixerListCount
;
134 LIST_ENTRY MixerList
;
135 ULONG MixerDataCount
;
136 LIST_ENTRY MixerData
;
137 ULONG WaveInListCount
;
138 LIST_ENTRY WaveInList
;
139 ULONG WaveOutListCount
;
140 LIST_ENTRY WaveOutList
;
141 }MIXER_LIST
, *PMIXER_LIST
;
146 PVOID MixerEventContext
;
147 PMIXER_EVENT MixerEventRoutine
;
149 }EVENT_NOTIFICATION_ENTRY
, *PEVENT_NOTIFICATION_ENTRY
;
151 #define DESTINATION_LINE 0xFFFF0000
154 MMixerGetFilterPinCount(
155 IN PMIXER_CONTEXT MixerContext
,
160 IN PKSMULTIPLE_ITEM MultipleItem
,
164 MMixerGetNodeIndexes(
165 IN PMIXER_CONTEXT MixerContext
,
166 IN PKSMULTIPLE_ITEM MultipleItem
,
170 OUT PULONG NodeReferenceCount
,
171 OUT PULONG
*NodeReference
);
173 PKSTOPOLOGY_CONNECTION
174 MMixerGetConnectionByIndex(
175 IN PKSMULTIPLE_ITEM MultipleItem
,
179 MMixerGetControlTypeFromTopologyNode(
183 MMixerGetSourceMixerLineByLineId(
184 LPMIXER_INFO MixerInfo
,
188 MMixerGetFilterTopologyProperty(
189 IN PMIXER_CONTEXT MixerContext
,
192 OUT PKSMULTIPLE_ITEM
* OutMultipleItem
);
196 IN PMIXER_CONTEXT MixerContext
,
197 IN LPMIXER_INFO MixerInfo
);
201 IN PMIXER_CONTEXT MixerContext
,
202 IN PKSMULTIPLE_ITEM NodeTypes
,
203 IN PKSMULTIPLE_ITEM NodeConnections
,
205 IN ULONG bUpDirection
,
210 MMixerGetPhysicalConnection(
211 IN PMIXER_CONTEXT MixerContext
,
214 OUT PKSPIN_PHYSICALCONNECTION
*OutConnection
);
217 MMixerGetIndexOfGuid(
218 PKSMULTIPLE_ITEM MultipleItem
,
223 IN PMIXER_CONTEXT MixerContext
,
224 IN PMIXER_LIST MixerList
,
225 IN LPMIXER_DATA MixerData
,
226 IN PULONG DeviceCount
);
229 MMixerGetTargetPinsByNodeConnectionIndex(
230 IN PMIXER_CONTEXT MixerContext
,
231 IN PKSMULTIPLE_ITEM NodeConnections
,
232 IN PKSMULTIPLE_ITEM NodeTypes
,
233 IN ULONG bUpDirection
,
234 IN ULONG NodeConnectionIndex
,
239 MMixerGetControlsFromPin(
240 IN PMIXER_CONTEXT MixerContext
,
241 IN PKSMULTIPLE_ITEM NodeConnections
,
242 IN PKSMULTIPLE_ITEM NodeTypes
,
244 IN ULONG bUpDirection
,
249 IN PMIXER_CONTEXT MixerContext
);
252 MMixerGetMixerInfoByIndex(
253 IN PMIXER_CONTEXT MixerContext
,
254 IN ULONG MixerIndex
);
257 MMixerGetSourceMixerLineByComponentType(
258 LPMIXER_INFO MixerInfo
,
259 DWORD dwComponentType
);
262 MMixerGetMixerControlById(
263 LPMIXER_INFO MixerInfo
,
265 LPMIXERLINE_EXT
*MixerLine
,
266 LPMIXERCONTROLW
*MixerControl
,
270 MMixerSetGetMuteControlDetails(
271 IN PMIXER_CONTEXT MixerContext
,
272 IN LPMIXER_INFO MixerInfo
,
275 IN LPMIXERCONTROLDETAILS MixerControlDetails
,
279 MMixerSetGetVolumeControlDetails(
280 IN PMIXER_CONTEXT MixerContext
,
281 IN LPMIXER_INFO MixerInfo
,
284 LPMIXERCONTROLW MixerControl
,
285 IN LPMIXERCONTROLDETAILS MixerControlDetails
,
286 LPMIXERLINE_EXT MixerLine
);
289 MMixerSetGetControlDetails(
290 IN PMIXER_CONTEXT MixerContext
,
296 IN PLONG InputValue
);
299 MMixerGetDataByDeviceId(
300 IN PMIXER_LIST MixerList
,
304 MMixerGetDataByDeviceName(
305 IN PMIXER_LIST MixerList
,
306 IN LPWSTR DeviceName
);
309 MMixerCreateMixerData(
310 IN PMIXER_CONTEXT MixerContext
,
311 IN PMIXER_LIST MixerList
,
313 IN LPWSTR DeviceName
,
319 IN PMIXER_CONTEXT MixerContext
,
320 IN LPMIXER_INFO MixerInfo
,
324 MMixerInitializeWaveInfo(
325 IN PMIXER_CONTEXT MixerContext
,
326 IN PMIXER_LIST MixerList
,
327 IN LPMIXER_DATA MixerData
,
328 IN LPWSTR DeviceName
,
335 IN PMIXER_CONTEXT MixerContext
,
336 IN OUT LPMIXER_INFO MixerInfo
,
338 IN PMIXER_EVENT MixerEventRoutine
);
343 MMixerCreateTopology(
344 IN PMIXER_CONTEXT MixerContext
,
346 IN PKSMULTIPLE_ITEM NodeConnections
,
347 IN PKSMULTIPLE_ITEM NodeTypes
,
348 OUT PTOPOLOGY
*OutTopology
);
351 MMixerGetAllUpOrDownstreamPinsFromNodeIndex(
352 IN PMIXER_CONTEXT MixerContext
,
353 IN PTOPOLOGY Topology
,
356 OUT PULONG OutPinsCount
,
360 MMixerGetAllUpOrDownstreamPinsFromPinIndex(
361 IN PMIXER_CONTEXT MixerContext
,
362 IN PTOPOLOGY Topology
,
365 OUT PULONG OutPinsCount
,
369 MMixerGetNextNodesFromPinIndex(
370 IN PMIXER_CONTEXT MixerContext
,
371 IN PTOPOLOGY Topology
,
374 OUT PULONG OutNodesCount
,
375 OUT PULONG OutNodes
);
378 MMixerAllocateTopologyPinArray(
379 IN PMIXER_CONTEXT MixerContext
,
380 IN PTOPOLOGY Topology
,
381 OUT PULONG
* OutPins
);
384 MMixerAllocateTopologyNodeArray(
385 IN PMIXER_CONTEXT MixerContext
,
386 IN PTOPOLOGY Topology
,
387 OUT PULONG
* OutPins
);
390 MMixerGetAllUpOrDownstreamNodesFromPinIndex(
391 IN PMIXER_CONTEXT MixerContext
,
392 IN PTOPOLOGY Topology
,
395 OUT PULONG OutNodesCount
,
396 OUT PULONG OutNodes
);
399 MMixerIsNodeTerminator(
400 IN PTOPOLOGY Topology
,
402 OUT ULONG
* bTerminator
);
405 MMixerGetNextNodesFromNodeIndex(
406 IN PMIXER_CONTEXT MixerContext
,
407 IN PTOPOLOGY Topology
,
410 OUT PULONG OutNodesCount
,
411 OUT PULONG OutNodes
);
414 MMixerGetNodeTypeFromTopology(
415 IN PTOPOLOGY Topology
,
419 MMixerGetAllUpOrDownstreamNodesFromNodeIndex(
420 IN PMIXER_CONTEXT MixerContext
,
421 IN PTOPOLOGY Topology
,
424 OUT PULONG OutNodesCount
,
425 OUT PULONG OutNodes
);
428 MMixerIsNodeConnectedToPin(
429 IN PMIXER_CONTEXT MixerContext
,
430 IN PTOPOLOGY Topology
,
434 OUT PULONG bConnected
);
437 MMixerGetNodeIndexFromGuid(
438 IN PTOPOLOGY Topology
,
439 IN
const GUID
*NodeType
);
442 MMixerSetTopologyNodeReserved(
443 IN PTOPOLOGY Topology
,
447 MMixerIsTopologyNodeReserved(
448 IN PTOPOLOGY Topology
,
450 OUT PULONG bReserved
);