Sync with trunk head (part 1 of 2)
[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 OUT PULONG Pins);
182
183 MIXER_STATUS
184 MMixerGetControlsFromPin(
185 IN PMIXER_CONTEXT MixerContext,
186 IN PKSMULTIPLE_ITEM NodeConnections,
187 IN PKSMULTIPLE_ITEM NodeTypes,
188 IN ULONG PinId,
189 IN ULONG bUpDirection,
190 OUT PULONG Nodes);
191
192 MIXER_STATUS
193 MMixerVerifyContext(
194 IN PMIXER_CONTEXT MixerContext);
195
196 LPMIXER_INFO
197 MMixerGetMixerInfoByIndex(
198 IN PMIXER_CONTEXT MixerContext,
199 IN ULONG MixerIndex);
200
201 LPMIXERLINE_EXT
202 MMixerGetSourceMixerLineByComponentType(
203 LPMIXER_INFO MixerInfo,
204 DWORD dwComponentType);
205
206 MIXER_STATUS
207 MMixerGetMixerControlById(
208 LPMIXER_INFO MixerInfo,
209 DWORD dwControlID,
210 LPMIXERLINE_EXT *MixerLine,
211 LPMIXERCONTROLW *MixerControl,
212 PULONG NodeId);
213
214 MIXER_STATUS
215 MMixerSetGetMuteControlDetails(
216 IN PMIXER_CONTEXT MixerContext,
217 IN HANDLE hMixer,
218 IN ULONG NodeId,
219 IN ULONG dwLineID,
220 IN LPMIXERCONTROLDETAILS MixerControlDetails,
221 IN ULONG bSet);
222
223 MIXER_STATUS
224 MMixerSetGetVolumeControlDetails(
225 IN PMIXER_CONTEXT MixerContext,
226 IN HANDLE hMixer,
227 IN ULONG NodeId,
228 IN ULONG bSet,
229 LPMIXERCONTROLW MixerControl,
230 IN LPMIXERCONTROLDETAILS MixerControlDetails,
231 LPMIXERLINE_EXT MixerLine);
232
233 MIXER_STATUS
234 MMixerSetGetControlDetails(
235 IN PMIXER_CONTEXT MixerContext,
236 IN HANDLE hMixer,
237 IN ULONG NodeId,
238 IN ULONG bSet,
239 IN ULONG PropertyId,
240 IN ULONG Channel,
241 IN PLONG InputValue);
242
243 LPMIXER_DATA
244 MMixerGetDataByDeviceId(
245 IN PMIXER_LIST MixerList,
246 IN ULONG DeviceId);
247
248 LPMIXER_DATA
249 MMixerGetDataByDeviceName(
250 IN PMIXER_LIST MixerList,
251 IN LPWSTR DeviceName);
252
253 MIXER_STATUS
254 MMixerCreateMixerData(
255 IN PMIXER_CONTEXT MixerContext,
256 IN PMIXER_LIST MixerList,
257 IN ULONG DeviceId,
258 IN LPWSTR DeviceName,
259 IN HANDLE hDevice,
260 IN HANDLE hKey);
261
262 MIXER_STATUS
263 MMixerGetDeviceName(
264 IN PMIXER_CONTEXT MixerContext,
265 IN LPMIXER_INFO MixerInfo,
266 IN HANDLE hKey);
267
268 MIXER_STATUS
269 MMixerInitializeWaveInfo(
270 IN PMIXER_CONTEXT MixerContext,
271 IN PMIXER_LIST MixerList,
272 IN LPMIXER_DATA MixerData,
273 IN LPWSTR DeviceName,
274 IN ULONG bWaveIn,
275 IN ULONG PinId);
276
277 MIXER_STATUS
278 MMixerAddEvents(
279 IN PMIXER_CONTEXT MixerContext,
280 IN OUT LPMIXER_INFO MixerInfo);