[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
126 MIXER_STATUS
127 MMixerGetCapabilities(
128 IN PMIXER_CONTEXT MixerContext,
129 IN ULONG MixerIndex,
130 OUT LPMIXERCAPSW MixerCaps);
131
132 MIXER_STATUS
133 MMixerOpen(
134 IN PMIXER_CONTEXT MixerContext,
135 IN ULONG MixerId,
136 IN PVOID MixerEventContext,
137 IN PMIXER_EVENT MixerEventRoutine,
138 OUT PHANDLE MixerHandle);
139
140 MIXER_STATUS
141 MMixerGetLineInfo(
142 IN PMIXER_CONTEXT MixerContext,
143 IN HANDLE MixerHandle,
144 IN ULONG Flags,
145 OUT LPMIXERLINEW MixerLine);
146
147 MIXER_STATUS
148 MMixerGetLineControls(
149 IN PMIXER_CONTEXT MixerContext,
150 IN HANDLE MixerHandle,
151 IN ULONG Flags,
152 OUT LPMIXERLINECONTROLSW MixerLineControls);
153
154 MIXER_STATUS
155 MMixerSetControlDetails(
156 IN PMIXER_CONTEXT MixerContext,
157 IN HANDLE MixerHandle,
158 IN ULONG Flags,
159 OUT LPMIXERCONTROLDETAILS MixerControlDetails);
160
161 MIXER_STATUS
162 MMixerGetControlDetails(
163 IN PMIXER_CONTEXT MixerContext,
164 IN HANDLE MixerHandle,
165 IN ULONG Flags,
166 OUT LPMIXERCONTROLDETAILS MixerControlDetails);
167
168 MIXER_STATUS
169 MMixerWaveOutCapabilities(
170 IN PMIXER_CONTEXT MixerContext,
171 IN ULONG DeviceIndex,
172 OUT LPWAVEOUTCAPSW Caps);
173
174 MIXER_STATUS
175 MMixerWaveInCapabilities(
176 IN PMIXER_CONTEXT MixerContext,
177 IN ULONG DeviceIndex,
178 OUT LPWAVEINCAPSW Caps);
179
180 MIXER_STATUS
181 MMixerOpenWave(
182 IN PMIXER_CONTEXT MixerContext,
183 IN ULONG DeviceIndex,
184 IN ULONG bWaveIn,
185 IN LPWAVEFORMATEX WaveFormat,
186 IN PIN_CREATE_CALLBACK CreateCallback,
187 IN PVOID Context,
188 OUT PHANDLE PinHandle);
189
190 MIXER_STATUS
191 MMixerSetWaveStatus(
192 IN PMIXER_CONTEXT MixerContext,
193 IN HANDLE PinHandle,
194 IN KSSTATE State);
195
196 MIXER_STATUS
197 MMixerGetWaveDevicePath(
198 IN PMIXER_CONTEXT MixerContext,
199 IN ULONG bWaveIn,
200 IN ULONG DeviceId,
201 OUT LPWSTR * DevicePath);