fa7183da71de316e76826f2f9ce648944b1202c4
[reactos.git] / reactos / lib / drivers / sound / mmixer / mmixer.h
1 #ifndef MIXER_H__
2 #define MIXER_H__
3
4 typedef enum
5 {
6 MM_STATUS_SUCCESS = 0,
7 MM_STATUS_NOTINITIALIZED,
8 MM_STATUS_NOT_IMPLEMENTED,
9 MM_STATUS_NO_MORE_DEVICES,
10 MM_STATUS_MORE_ENTRIES,
11 MM_STATUS_INVALID_PARAMETER,
12 MM_STATUS_UNSUCCESSFUL,
13 MM_STATUS_NO_MEMORY
14
15
16 }MIXER_STATUS;
17
18
19 typedef PVOID (*PMIXER_ALLOC)(
20 IN ULONG NumberOfBytes);
21
22 typedef VOID (*PMIXER_FREE)(
23 IN PVOID Block);
24
25 typedef MIXER_STATUS (*PMIXER_ENUM)(
26 IN PVOID EnumContext,
27 IN ULONG DeviceIndex,
28 OUT LPWSTR * DeviceName,
29 OUT PHANDLE OutHandle,
30 OUT PHANDLE OutDevInterfaceKey);
31
32 typedef MIXER_STATUS(*PMIXER_DEVICE_CONTROL)(
33 IN HANDLE hMixer,
34 IN ULONG dwIoControlCode,
35 IN PVOID lpInBuffer,
36 IN ULONG nInBufferSize,
37 OUT PVOID lpOutBuffer,
38 ULONG nOutBufferSize,
39 PULONG lpBytesReturned);
40
41 typedef MIXER_STATUS(*PMIXER_OPEN)(
42 IN LPWSTR DevicePath,
43 OUT PHANDLE hDevice);
44
45 typedef MIXER_STATUS(*PMIXER_CLOSE)(
46 IN HANDLE hDevice);
47
48 typedef MIXER_STATUS(*PMIXER_CLOSEKEY)(
49 IN HANDLE hKey);
50
51 typedef VOID (*PMIXER_EVENT)(
52 IN PVOID MixerEvent);
53
54 typedef VOID (*PMIXER_COPY)(
55 IN PVOID Dst,
56 IN PVOID Src,
57 IN ULONG Length);
58
59 typedef MIXER_STATUS(*PMIXER_QUERY_KEY_VALUE)(
60 IN HANDLE hKey,
61 IN LPWSTR KeyName,
62 OUT PVOID * ResultBuffer,
63 OUT PULONG ResultLength,
64 OUT PULONG KeyType);
65
66 typedef MIXER_STATUS(*PMIXER_OPEN_KEY)(
67 IN HANDLE hKey,
68 IN LPWSTR SubKey,
69 IN ULONG DesiredAccess,
70 OUT PHANDLE OutKey);
71
72 typedef PVOID (*PMIXER_ALLOC_EVENT_DATA)(
73 IN ULONG ExtraBytes);
74
75 typedef VOID (*PMIXER_FREE_EVENT_DATA)(
76 IN PVOID EventData);
77
78 typedef struct
79 {
80 ULONG SizeOfStruct;
81 PVOID MixerContext;
82
83 PMIXER_ALLOC Alloc;
84 PMIXER_DEVICE_CONTROL Control;
85 PMIXER_FREE Free;
86 PMIXER_OPEN Open;
87 PMIXER_CLOSE Close;
88 PMIXER_COPY Copy;
89 PMIXER_OPEN_KEY OpenKey;
90 PMIXER_QUERY_KEY_VALUE QueryKeyValue;
91 PMIXER_CLOSEKEY CloseKey;
92 PMIXER_ALLOC_EVENT_DATA AllocEventData;
93 PMIXER_FREE_EVENT_DATA FreeEventData;
94 }MIXER_CONTEXT, *PMIXER_CONTEXT;
95
96 MIXER_STATUS
97 MMixerInitialize(
98 IN PMIXER_CONTEXT MixerContext,
99 IN PMIXER_ENUM EnumFunction,
100 IN PVOID EnumContext);
101
102 ULONG
103 MMixerGetCount(
104 IN PMIXER_CONTEXT MixerContext);
105
106 ULONG
107 MMixerGetWaveInCount(
108 IN PMIXER_CONTEXT MixerContext);
109
110 ULONG
111 MMixerGetWaveOutCount(
112 IN PMIXER_CONTEXT MixerContext);
113
114
115 MIXER_STATUS
116 MMixerGetCapabilities(
117 IN PMIXER_CONTEXT MixerContext,
118 IN ULONG MixerIndex,
119 OUT LPMIXERCAPSW MixerCaps);
120
121 MIXER_STATUS
122 MMixerOpen(
123 IN PMIXER_CONTEXT MixerContext,
124 IN ULONG MixerId,
125 IN PVOID MixerEvent,
126 IN PMIXER_EVENT MixerEventRoutine,
127 OUT PHANDLE MixerHandle);
128
129 MIXER_STATUS
130 MMixerGetLineInfo(
131 IN PMIXER_CONTEXT MixerContext,
132 IN HANDLE MixerHandle,
133 IN ULONG Flags,
134 OUT LPMIXERLINEW MixerLine);
135
136 MIXER_STATUS
137 MMixerGetLineControls(
138 IN PMIXER_CONTEXT MixerContext,
139 IN HANDLE MixerHandle,
140 IN ULONG Flags,
141 OUT LPMIXERLINECONTROLSW MixerLineControls);
142
143 MIXER_STATUS
144 MMixerSetControlDetails(
145 IN PMIXER_CONTEXT MixerContext,
146 IN HANDLE MixerHandle,
147 IN ULONG Flags,
148 OUT LPMIXERCONTROLDETAILS MixerControlDetails);
149
150 MIXER_STATUS
151 MMixerGetControlDetails(
152 IN PMIXER_CONTEXT MixerContext,
153 IN HANDLE MixerHandle,
154 IN ULONG Flags,
155 OUT LPMIXERCONTROLDETAILS MixerControlDetails);
156
157 MIXER_STATUS
158 MMixerWaveOutCapabilities(
159 IN PMIXER_CONTEXT MixerContext,
160 IN ULONG DeviceIndex,
161 OUT LPWAVEOUTCAPSW Caps);
162
163 MIXER_STATUS
164 MMixerWaveInCapabilities(
165 IN PMIXER_CONTEXT MixerContext,
166 IN ULONG DeviceIndex,
167 OUT LPWAVEINCAPSW Caps);
168
169 MIXER_STATUS
170 MMixerOpenWave(
171 IN PMIXER_CONTEXT MixerContext,
172 IN ULONG DeviceIndex,
173 IN ULONG bWaveIn,
174 IN LPWAVEFORMATEX WaveFormat,
175 OUT PHANDLE PinHandle);
176
177 MIXER_STATUS
178 MMixerSetWaveStatus(
179 IN PMIXER_CONTEXT MixerContext,
180 IN HANDLE PinHandle,
181 IN KSSTATE State);
182
183 #endif