Sync with trunk (r48123)
[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 MixerEvent);
52
53 typedef VOID (*PMIXER_COPY)(
54 IN PVOID Dst,
55 IN PVOID Src,
56 IN ULONG Length);
57
58 typedef MIXER_STATUS(*PMIXER_QUERY_KEY_VALUE)(
59 IN HANDLE hKey,
60 IN LPWSTR KeyName,
61 OUT PVOID * ResultBuffer,
62 OUT PULONG ResultLength,
63 OUT PULONG KeyType);
64
65 typedef MIXER_STATUS(*PMIXER_OPEN_KEY)(
66 IN HANDLE hKey,
67 IN LPWSTR SubKey,
68 IN ULONG DesiredAccess,
69 OUT PHANDLE OutKey);
70
71 typedef PVOID (*PMIXER_ALLOC_EVENT_DATA)(
72 IN ULONG ExtraBytes);
73
74 typedef VOID (*PMIXER_FREE_EVENT_DATA)(
75 IN PVOID EventData);
76
77 typedef MIXER_STATUS (*PIN_CREATE_CALLBACK)(
78 IN PVOID Context,
79 IN ULONG DeviceId,
80 IN ULONG PinId,
81 IN HANDLE hFilter,
82 IN PKSPIN_CONNECT PinConnect,
83 IN ACCESS_MASK DesiredAccess,
84 OUT PHANDLE PinHandle);
85
86 typedef struct
87 {
88 ULONG SizeOfStruct;
89 PVOID MixerContext;
90
91 PMIXER_ALLOC Alloc;
92 PMIXER_DEVICE_CONTROL Control;
93 PMIXER_FREE Free;
94 PMIXER_OPEN Open;
95 PMIXER_CLOSE Close;
96 PMIXER_COPY Copy;
97 PMIXER_OPEN_KEY OpenKey;
98 PMIXER_QUERY_KEY_VALUE QueryKeyValue;
99 PMIXER_CLOSEKEY CloseKey;
100 PMIXER_ALLOC_EVENT_DATA AllocEventData;
101 PMIXER_FREE_EVENT_DATA FreeEventData;
102 }MIXER_CONTEXT, *PMIXER_CONTEXT;
103
104 MIXER_STATUS
105 MMixerInitialize(
106 IN PMIXER_CONTEXT MixerContext,
107 IN PMIXER_ENUM EnumFunction,
108 IN PVOID EnumContext);
109
110 ULONG
111 MMixerGetCount(
112 IN PMIXER_CONTEXT MixerContext);
113
114 ULONG
115 MMixerGetWaveInCount(
116 IN PMIXER_CONTEXT MixerContext);
117
118 ULONG
119 MMixerGetWaveOutCount(
120 IN PMIXER_CONTEXT MixerContext);
121
122
123 MIXER_STATUS
124 MMixerGetCapabilities(
125 IN PMIXER_CONTEXT MixerContext,
126 IN ULONG MixerIndex,
127 OUT LPMIXERCAPSW MixerCaps);
128
129 MIXER_STATUS
130 MMixerOpen(
131 IN PMIXER_CONTEXT MixerContext,
132 IN ULONG MixerId,
133 IN PVOID MixerEvent,
134 IN PMIXER_EVENT MixerEventRoutine,
135 OUT PHANDLE MixerHandle);
136
137 MIXER_STATUS
138 MMixerGetLineInfo(
139 IN PMIXER_CONTEXT MixerContext,
140 IN HANDLE MixerHandle,
141 IN ULONG Flags,
142 OUT LPMIXERLINEW MixerLine);
143
144 MIXER_STATUS
145 MMixerGetLineControls(
146 IN PMIXER_CONTEXT MixerContext,
147 IN HANDLE MixerHandle,
148 IN ULONG Flags,
149 OUT LPMIXERLINECONTROLSW MixerLineControls);
150
151 MIXER_STATUS
152 MMixerSetControlDetails(
153 IN PMIXER_CONTEXT MixerContext,
154 IN HANDLE MixerHandle,
155 IN ULONG Flags,
156 OUT LPMIXERCONTROLDETAILS MixerControlDetails);
157
158 MIXER_STATUS
159 MMixerGetControlDetails(
160 IN PMIXER_CONTEXT MixerContext,
161 IN HANDLE MixerHandle,
162 IN ULONG Flags,
163 OUT LPMIXERCONTROLDETAILS MixerControlDetails);
164
165 MIXER_STATUS
166 MMixerWaveOutCapabilities(
167 IN PMIXER_CONTEXT MixerContext,
168 IN ULONG DeviceIndex,
169 OUT LPWAVEOUTCAPSW Caps);
170
171 MIXER_STATUS
172 MMixerWaveInCapabilities(
173 IN PMIXER_CONTEXT MixerContext,
174 IN ULONG DeviceIndex,
175 OUT LPWAVEINCAPSW Caps);
176
177 MIXER_STATUS
178 MMixerOpenWave(
179 IN PMIXER_CONTEXT MixerContext,
180 IN ULONG DeviceIndex,
181 IN ULONG bWaveIn,
182 IN LPWAVEFORMATEX WaveFormat,
183 IN PIN_CREATE_CALLBACK CreateCallback,
184 IN PVOID Context,
185 OUT PHANDLE PinHandle);
186
187 MIXER_STATUS
188 MMixerSetWaveStatus(
189 IN PMIXER_CONTEXT MixerContext,
190 IN HANDLE PinHandle,
191 IN KSSTATE State);
192
193 MIXER_STATUS
194 MMixerGetWaveDevicePath(
195 IN PMIXER_CONTEXT MixerContext,
196 IN ULONG bWaveIn,
197 IN ULONG DeviceId,
198 OUT LPWSTR * DevicePath);