Hopefully fail to break anything in the process of syncing with trunk (r47786)
[reactos.git] / lib / drivers / sound / mmixer / priv.h
1 #pragma once
2
3 #include <pseh/pseh2.h>
4 #include <ntddk.h>
5
6 #include <windef.h>
7 #define NOBITMAP
8 #include <mmreg.h>
9 #include <ks.h>
10 #include <ksmedia.h>
11 #include <mmreg.h>
12 #include <mmsystem.h>
13
14 #include "mmixer.h"
15
16 #include <stdio.h>
17 #define YDEBUG
18 #include <debug.h>
19
20 typedef struct
21 {
22 KSEVENTDATA EventData;
23 LIST_ENTRY Entry;
24 }EVENT_ITEM, *LPEVENT_ITEM;
25
26 typedef struct
27 {
28 LIST_ENTRY Entry;
29 MIXERCAPSW MixCaps;
30 HANDLE hMixer;
31 LIST_ENTRY LineList;
32 ULONG ControlId;
33 LIST_ENTRY EventList;
34 }MIXER_INFO, *LPMIXER_INFO;
35
36 typedef struct
37 {
38 LIST_ENTRY Entry;
39 ULONG PinId;
40 HANDLE hDevice;
41 MIXERLINEW Line;
42 LPMIXERCONTROLW LineControls;
43 PULONG NodeIds;
44 LIST_ENTRY LineControlsExtraData;
45 }MIXERLINE_EXT, *LPMIXERLINE_EXT;
46
47 typedef struct
48 {
49 LIST_ENTRY Entry;
50 ULONG dwControlID;
51 }MIXERCONTROL_DATA, *LPMIXERCONTROL_DATA;
52
53 typedef struct
54 {
55 MIXERCONTROL_DATA Header;
56 LONG SignedMinimum;
57 LONG SignedMaximum;
58 LONG SteppingDelta;
59 ULONG InputSteppingDelta;
60 ULONG ValuesCount;
61 PLONG Values;
62 }MIXERVOLUME_DATA, *LPMIXERVOLUME_DATA;
63
64 typedef struct
65 {
66 LIST_ENTRY Entry;
67 ULONG DeviceId;
68 HANDLE hDevice;
69 HANDLE hDeviceInterfaceKey;
70 LPWSTR DeviceName;
71 }MIXER_DATA, *LPMIXER_DATA;
72
73 typedef struct
74 {
75 LIST_ENTRY Entry;
76 ULONG DeviceId;
77 ULONG PinId;
78 union
79 {
80 WAVEOUTCAPSW OutCaps;
81 WAVEINCAPSW InCaps;
82 }u;
83 }WAVE_INFO, *LPWAVE_INFO;
84
85 typedef struct
86 {
87 ULONG MixerListCount;
88 LIST_ENTRY MixerList;
89 ULONG MixerDataCount;
90 LIST_ENTRY MixerData;
91 ULONG WaveInListCount;
92 LIST_ENTRY WaveInList;
93 ULONG WaveOutListCount;
94 LIST_ENTRY WaveOutList;
95 }MIXER_LIST, *PMIXER_LIST;
96
97 #define DESTINATION_LINE 0xFFFF0000
98
99 ULONG
100 MMixerGetFilterPinCount(
101 IN PMIXER_CONTEXT MixerContext,
102 IN HANDLE hMixer);
103
104 LPGUID
105 MMixerGetNodeType(
106 IN PKSMULTIPLE_ITEM MultipleItem,
107 IN ULONG Index);
108
109 MIXER_STATUS
110 MMixerGetNodeIndexes(
111 IN PMIXER_CONTEXT MixerContext,
112 IN PKSMULTIPLE_ITEM MultipleItem,
113 IN ULONG NodeIndex,
114 IN ULONG bNode,
115 IN ULONG bFrom,
116 OUT PULONG NodeReferenceCount,
117 OUT PULONG *NodeReference);
118
119 PKSTOPOLOGY_CONNECTION
120 MMixerGetConnectionByIndex(
121 IN PKSMULTIPLE_ITEM MultipleItem,
122 IN ULONG Index);
123
124 ULONG
125 MMixerGetControlTypeFromTopologyNode(
126 IN LPGUID NodeType);
127
128 LPMIXERLINE_EXT
129 MMixerGetSourceMixerLineByLineId(
130 LPMIXER_INFO MixerInfo,
131 DWORD dwLineID);
132
133 MIXER_STATUS
134 MMixerGetFilterTopologyProperty(
135 IN PMIXER_CONTEXT MixerContext,
136 IN HANDLE hMixer,
137 IN ULONG PropertyId,
138 OUT PKSMULTIPLE_ITEM * OutMultipleItem);
139
140 VOID
141 MMixerFreeMixerInfo(
142 IN PMIXER_CONTEXT MixerContext,
143 IN LPMIXER_INFO MixerInfo);
144
145 MIXER_STATUS
146 MMixerGetTargetPins(
147 IN PMIXER_CONTEXT MixerContext,
148 IN PKSMULTIPLE_ITEM NodeTypes,
149 IN PKSMULTIPLE_ITEM NodeConnections,
150 IN ULONG NodeIndex,
151 IN ULONG bUpDirection,
152 OUT PULONG Pins,
153 IN ULONG PinCount);
154
155 MIXER_STATUS
156 MMixerGetPhysicalConnection(
157 IN PMIXER_CONTEXT MixerContext,
158 IN HANDLE hMixer,
159 IN ULONG PinId,
160 OUT PKSPIN_PHYSICALCONNECTION *OutConnection);
161
162 ULONG
163 MMixerGetIndexOfGuid(
164 PKSMULTIPLE_ITEM MultipleItem,
165 LPCGUID NodeType);
166
167 MIXER_STATUS
168 MMixerSetupFilter(
169 IN PMIXER_CONTEXT MixerContext,
170 IN PMIXER_LIST MixerList,
171 IN LPMIXER_DATA MixerData,
172 IN PULONG DeviceCount);
173
174 MIXER_STATUS
175 MMixerGetTargetPinsByNodeConnectionIndex(
176 IN PMIXER_CONTEXT MixerContext,
177 IN PKSMULTIPLE_ITEM NodeConnections,
178 IN PKSMULTIPLE_ITEM NodeTypes,
179 IN ULONG bUpDirection,
180 IN ULONG NodeConnectionIndex,
181 IN ULONG PinCount,
182 OUT PULONG Pins);
183
184 MIXER_STATUS
185 MMixerGetControlsFromPin(
186 IN PMIXER_CONTEXT MixerContext,
187 IN PKSMULTIPLE_ITEM NodeConnections,
188 IN PKSMULTIPLE_ITEM NodeTypes,
189 IN ULONG PinId,
190 IN ULONG bUpDirection,
191 OUT PULONG Nodes);
192
193 MIXER_STATUS
194 MMixerVerifyContext(
195 IN PMIXER_CONTEXT MixerContext);
196
197 LPMIXER_INFO
198 MMixerGetMixerInfoByIndex(
199 IN PMIXER_CONTEXT MixerContext,
200 IN ULONG MixerIndex);
201
202 LPMIXERLINE_EXT
203 MMixerGetSourceMixerLineByComponentType(
204 LPMIXER_INFO MixerInfo,
205 DWORD dwComponentType);
206
207 MIXER_STATUS
208 MMixerGetMixerControlById(
209 LPMIXER_INFO MixerInfo,
210 DWORD dwControlID,
211 LPMIXERLINE_EXT *MixerLine,
212 LPMIXERCONTROLW *MixerControl,
213 PULONG NodeId);
214
215 MIXER_STATUS
216 MMixerSetGetMuteControlDetails(
217 IN PMIXER_CONTEXT MixerContext,
218 IN HANDLE hMixer,
219 IN ULONG NodeId,
220 IN ULONG dwLineID,
221 IN LPMIXERCONTROLDETAILS MixerControlDetails,
222 IN ULONG bSet);
223
224 MIXER_STATUS
225 MMixerSetGetVolumeControlDetails(
226 IN PMIXER_CONTEXT MixerContext,
227 IN HANDLE hMixer,
228 IN ULONG NodeId,
229 IN ULONG bSet,
230 LPMIXERCONTROLW MixerControl,
231 IN LPMIXERCONTROLDETAILS MixerControlDetails,
232 LPMIXERLINE_EXT MixerLine);
233
234 MIXER_STATUS
235 MMixerSetGetControlDetails(
236 IN PMIXER_CONTEXT MixerContext,
237 IN HANDLE hMixer,
238 IN ULONG NodeId,
239 IN ULONG bSet,
240 IN ULONG PropertyId,
241 IN ULONG Channel,
242 IN PLONG InputValue);
243
244 LPMIXER_DATA
245 MMixerGetDataByDeviceId(
246 IN PMIXER_LIST MixerList,
247 IN ULONG DeviceId);
248
249 LPMIXER_DATA
250 MMixerGetDataByDeviceName(
251 IN PMIXER_LIST MixerList,
252 IN LPWSTR DeviceName);
253
254 MIXER_STATUS
255 MMixerCreateMixerData(
256 IN PMIXER_CONTEXT MixerContext,
257 IN PMIXER_LIST MixerList,
258 IN ULONG DeviceId,
259 IN LPWSTR DeviceName,
260 IN HANDLE hDevice,
261 IN HANDLE hKey);
262
263 MIXER_STATUS
264 MMixerGetDeviceName(
265 IN PMIXER_CONTEXT MixerContext,
266 IN LPMIXER_INFO MixerInfo,
267 IN HANDLE hKey);
268
269 MIXER_STATUS
270 MMixerInitializeWaveInfo(
271 IN PMIXER_CONTEXT MixerContext,
272 IN PMIXER_LIST MixerList,
273 IN LPMIXER_DATA MixerData,
274 IN LPWSTR DeviceName,
275 IN ULONG bWaveIn,
276 IN ULONG PinId);
277
278 MIXER_STATUS
279 MMixerAddEvents(
280 IN PMIXER_CONTEXT MixerContext,
281 IN OUT LPMIXER_INFO MixerInfo);