[CMAKE]
[reactos.git] / lib / drivers / sound / mmixer / mmixer.h
1 #pragma once
2
3 typedef enum
4 {
5 MM_STATUS_SUCCESS = 0,
6 MM_STATUS_NOTINITIALIZED,
7 MM_STATUS_NOT_IMPLEMENTED,
8 MM_STATUS_NO_MORE_DEVICES,
9 MM_STATUS_MORE_ENTRIES,
10 MM_STATUS_INVALID_PARAMETER,
11 MM_STATUS_UNSUCCESSFUL,
12 MM_STATUS_NO_MEMORY
13
14
15 }MIXER_STATUS;
16
17
18 typedef PVOID (*PMIXER_ALLOC)(
19 IN ULONG NumberOfBytes);
20
21 typedef VOID (*PMIXER_FREE)(
22 IN PVOID Block);
23
24 typedef MIXER_STATUS (*PMIXER_ENUM)(
25 IN PVOID EnumContext,
26 IN ULONG DeviceIndex,
27 OUT LPWSTR * DeviceName,
28 OUT PHANDLE OutHandle,
29 OUT PHANDLE OutDevInterfaceKey);
30
31 typedef MIXER_STATUS(*PMIXER_DEVICE_CONTROL)(
32 IN HANDLE hMixer,
33 IN ULONG dwIoControlCode,
34 IN PVOID lpInBuffer,
35 IN ULONG nInBufferSize,
36 OUT PVOID lpOutBuffer,
37 ULONG nOutBufferSize,
38 PULONG lpBytesReturned);
39
40 typedef MIXER_STATUS(*PMIXER_OPEN)(
41 IN LPWSTR DevicePath,
42 OUT PHANDLE hDevice);
43
44 typedef MIXER_STATUS(*PMIXER_CLOSE)(
45 IN HANDLE hDevice);
46
47 typedef MIXER_STATUS(*PMIXER_CLOSEKEY)(
48 IN HANDLE hKey);
49
50 typedef VOID (*PMIXER_EVENT)(
51 IN PVOID MixerEventContext,
52 IN HANDLE hMixer,
53 IN ULONG NotificationType,
54 IN ULONG Value);
55
56 typedef VOID (*PMIXER_COPY)(
57 IN PVOID Dst,
58 IN PVOID Src,
59 IN ULONG Length);
60
61 typedef MIXER_STATUS(*PMIXER_QUERY_KEY_VALUE)(
62 IN HANDLE hKey,
63 IN LPWSTR KeyName,
64 OUT PVOID * ResultBuffer,
65 OUT PULONG ResultLength,
66 OUT PULONG KeyType);
67
68 typedef MIXER_STATUS(*PMIXER_OPEN_KEY)(
69 IN HANDLE hKey,
70 IN LPWSTR SubKey,
71 IN ULONG DesiredAccess,
72 OUT PHANDLE OutKey);
73
74 typedef PVOID (*PMIXER_ALLOC_EVENT_DATA)(
75 IN ULONG ExtraBytes);
76
77 typedef VOID (*PMIXER_FREE_EVENT_DATA)(
78 IN PVOID EventData);
79
80 typedef MIXER_STATUS (*PIN_CREATE_CALLBACK)(
81 IN PVOID Context,
82 IN ULONG DeviceId,
83 IN ULONG PinId,
84 IN HANDLE hFilter,
85 IN PKSPIN_CONNECT PinConnect,
86 IN ACCESS_MASK DesiredAccess,
87 OUT PHANDLE PinHandle);
88
89 typedef struct
90 {
91 ULONG SizeOfStruct;
92 PVOID MixerContext;
93
94 PMIXER_ALLOC Alloc;
95 PMIXER_DEVICE_CONTROL Control;
96 PMIXER_FREE Free;
97 PMIXER_OPEN Open;
98 PMIXER_CLOSE Close;
99 PMIXER_COPY Copy;
100 PMIXER_OPEN_KEY OpenKey;
101 PMIXER_QUERY_KEY_VALUE QueryKeyValue;
102 PMIXER_CLOSEKEY CloseKey;
103 PMIXER_ALLOC_EVENT_DATA AllocEventData;
104 PMIXER_FREE_EVENT_DATA FreeEventData;
105 }MIXER_CONTEXT, *PMIXER_CONTEXT;
106
107 MIXER_STATUS
108 MMixerInitialize(
109 IN PMIXER_CONTEXT MixerContext,
110 IN PMIXER_ENUM EnumFunction,
111 IN PVOID EnumContext);
112
113 ULONG
114 MMixerGetCount(
115 IN PMIXER_CONTEXT MixerContext);
116
117 ULONG
118 MMixerGetWaveInCount(
119 IN PMIXER_CONTEXT MixerContext);
120
121 ULONG
122 MMixerGetWaveOutCount(
123 IN PMIXER_CONTEXT MixerContext);
124
125 ULONG
126 MMixerGetMidiInCount(
127 IN PMIXER_CONTEXT MixerContext);
128
129 ULONG
130 MMixerGetMidiOutCount(
131 IN PMIXER_CONTEXT MixerContext);
132
133
134
135 MIXER_STATUS
136 MMixerGetCapabilities(
137 IN PMIXER_CONTEXT MixerContext,
138 IN ULONG MixerIndex,
139 OUT LPMIXERCAPSW MixerCaps);
140
141 MIXER_STATUS
142 MMixerOpen(
143 IN PMIXER_CONTEXT MixerContext,
144 IN ULONG MixerId,
145 IN PVOID MixerEventContext,
146 IN PMIXER_EVENT MixerEventRoutine,
147 OUT PHANDLE MixerHandle);
148
149 MIXER_STATUS
150 MMixerGetLineInfo(
151 IN PMIXER_CONTEXT MixerContext,
152 IN HANDLE MixerHandle,
153 IN ULONG Flags,
154 OUT LPMIXERLINEW MixerLine);
155
156 MIXER_STATUS
157 MMixerGetLineControls(
158 IN PMIXER_CONTEXT MixerContext,
159 IN HANDLE MixerHandle,
160 IN ULONG Flags,
161 OUT LPMIXERLINECONTROLSW MixerLineControls);
162
163 MIXER_STATUS
164 MMixerSetControlDetails(
165 IN PMIXER_CONTEXT MixerContext,
166 IN HANDLE MixerHandle,
167 IN ULONG Flags,
168 OUT LPMIXERCONTROLDETAILS MixerControlDetails);
169
170 MIXER_STATUS
171 MMixerGetControlDetails(
172 IN PMIXER_CONTEXT MixerContext,
173 IN HANDLE MixerHandle,
174 IN ULONG Flags,
175 OUT LPMIXERCONTROLDETAILS MixerControlDetails);
176
177 MIXER_STATUS
178 MMixerWaveOutCapabilities(
179 IN PMIXER_CONTEXT MixerContext,
180 IN ULONG DeviceIndex,
181 OUT LPWAVEOUTCAPSW Caps);
182
183 MIXER_STATUS
184 MMixerWaveInCapabilities(
185 IN PMIXER_CONTEXT MixerContext,
186 IN ULONG DeviceIndex,
187 OUT LPWAVEINCAPSW Caps);
188
189 MIXER_STATUS
190 MMixerOpenWave(
191 IN PMIXER_CONTEXT MixerContext,
192 IN ULONG DeviceIndex,
193 IN ULONG bWaveIn,
194 IN LPWAVEFORMATEX WaveFormat,
195 IN PIN_CREATE_CALLBACK CreateCallback,
196 IN PVOID Context,
197 OUT PHANDLE PinHandle);
198
199 MIXER_STATUS
200 MMixerSetWaveStatus(
201 IN PMIXER_CONTEXT MixerContext,
202 IN HANDLE PinHandle,
203 IN KSSTATE State);
204
205 MIXER_STATUS
206 MMixerGetWaveDevicePath(
207 IN PMIXER_CONTEXT MixerContext,
208 IN ULONG bWaveIn,
209 IN ULONG DeviceId,
210 OUT LPWSTR * DevicePath);
211
212 MIXER_STATUS
213 MMixerMidiOutCapabilities(
214 IN PMIXER_CONTEXT MixerContext,
215 IN ULONG DeviceIndex,
216 OUT LPMIDIOUTCAPSW Caps);
217
218 MIXER_STATUS
219 MMixerMidiInCapabilities(
220 IN PMIXER_CONTEXT MixerContext,
221 IN ULONG DeviceIndex,
222 OUT LPMIDIINCAPSW Caps);
223
224 MIXER_STATUS
225 MMixerGetMidiDevicePath(
226 IN PMIXER_CONTEXT MixerContext,
227 IN ULONG bMidiIn,
228 IN ULONG DeviceId,
229 OUT LPWSTR * DevicePath);
230
231 MIXER_STATUS
232 MMixerSetMidiStatus(
233 IN PMIXER_CONTEXT MixerContext,
234 IN HANDLE PinHandle,
235 IN KSSTATE State);
236
237 MIXER_STATUS
238 MMixerOpenMidi(
239 IN PMIXER_CONTEXT MixerContext,
240 IN ULONG DeviceIndex,
241 IN ULONG bMidiIn,
242 IN PIN_CREATE_CALLBACK CreateCallback,
243 IN PVOID Context,
244 OUT PHANDLE PinHandle);