[MMIXER]
[reactos.git] / reactos / lib / drivers / sound / mmixer / priv.h
1 #ifndef PRIV_H__
2 #define PRIV_H__
3
4 #include <pseh/pseh2.h>
5 #include <ntddk.h>
6
7 #include <windef.h>
8 #define NOBITMAP
9 #include <mmreg.h>
10 #include <ks.h>
11 #include <ksmedia.h>
12 #include <mmreg.h>
13 #include <mmsystem.h>
14
15 #include "mmixer.h"
16
17 #include <stdio.h>
18
19 #include <debug.h>
20
21 typedef struct
22 {
23 LIST_ENTRY Entry;
24 MIXERCAPSW MixCaps;
25 HANDLE hMixer;
26 LIST_ENTRY LineList;
27 ULONG ControlId;
28 }MIXER_INFO, *LPMIXER_INFO;
29
30 typedef struct
31 {
32 LIST_ENTRY Entry;
33 ULONG PinId;
34 HANDLE hDevice;
35 MIXERLINEW Line;
36 LPMIXERCONTROLW LineControls;
37 PULONG NodeIds;
38 LIST_ENTRY LineControlsExtraData;
39 }MIXERLINE_EXT, *LPMIXERLINE_EXT;
40
41 typedef struct
42 {
43 LIST_ENTRY Entry;
44 ULONG dwControlID;
45 }MIXERCONTROL_DATA, *LPMIXERCONTROL_DATA;
46
47 typedef struct
48 {
49 MIXERCONTROL_DATA Header;
50 LONG SignedMinimum;
51 LONG SignedMaximum;
52 LONG SteppingDelta;
53 ULONG InputSteppingDelta;
54 ULONG ValuesCount;
55 PLONG Values;
56 }MIXERVOLUME_DATA, *LPMIXERVOLUME_DATA;
57
58 typedef struct
59 {
60 LIST_ENTRY Entry;
61 ULONG DeviceId;
62 HANDLE hDevice;
63 HANDLE hDeviceInterfaceKey;
64 LPWSTR DeviceName;
65 }MIXER_DATA, *LPMIXER_DATA;
66
67 typedef struct
68 {
69 ULONG MixerListCount;
70 LIST_ENTRY MixerList;
71 ULONG MixerDataCount;
72 LIST_ENTRY MixerData;
73 }MIXER_LIST, *PMIXER_LIST;
74
75 #define DESTINATION_LINE 0xFFFF0000
76
77 ULONG
78 MMixerGetFilterPinCount(
79 IN PMIXER_CONTEXT MixerContext,
80 IN HANDLE hMixer);
81
82 LPGUID
83 MMixerGetNodeType(
84 IN PKSMULTIPLE_ITEM MultipleItem,
85 IN ULONG Index);
86
87 MIXER_STATUS
88 MMixerGetNodeIndexes(
89 IN PMIXER_CONTEXT MixerContext,
90 IN PKSMULTIPLE_ITEM MultipleItem,
91 IN ULONG NodeIndex,
92 IN ULONG bNode,
93 IN ULONG bFrom,
94 OUT PULONG NodeReferenceCount,
95 OUT PULONG *NodeReference);
96
97 PKSTOPOLOGY_CONNECTION
98 MMixerGetConnectionByIndex(
99 IN PKSMULTIPLE_ITEM MultipleItem,
100 IN ULONG Index);
101
102 ULONG
103 MMixerGetControlTypeFromTopologyNode(
104 IN LPGUID NodeType);
105
106 LPMIXERLINE_EXT
107 MMixerGetSourceMixerLineByLineId(
108 LPMIXER_INFO MixerInfo,
109 DWORD dwLineID);
110
111 MIXER_STATUS
112 MMixerGetFilterTopologyProperty(
113 IN PMIXER_CONTEXT MixerContext,
114 IN HANDLE hMixer,
115 IN ULONG PropertyId,
116 OUT PKSMULTIPLE_ITEM * OutMultipleItem);
117
118 VOID
119 MMixerFreeMixerInfo(
120 IN PMIXER_CONTEXT MixerContext,
121 IN LPMIXER_INFO MixerInfo);
122
123 MIXER_STATUS
124 MMixerGetTargetPins(
125 IN PMIXER_CONTEXT MixerContext,
126 IN PKSMULTIPLE_ITEM NodeTypes,
127 IN PKSMULTIPLE_ITEM NodeConnections,
128 IN ULONG NodeIndex,
129 IN ULONG bUpDirection,
130 OUT PULONG Pins,
131 IN ULONG PinCount);
132
133 MIXER_STATUS
134 MMixerGetPhysicalConnection(
135 IN PMIXER_CONTEXT MixerContext,
136 IN HANDLE hMixer,
137 IN ULONG PinId,
138 OUT PKSPIN_PHYSICALCONNECTION *OutConnection);
139
140 ULONG
141 MMixerGetIndexOfGuid(
142 PKSMULTIPLE_ITEM MultipleItem,
143 LPCGUID NodeType);
144
145 MIXER_STATUS
146 MMixerSetupFilter(
147 IN PMIXER_CONTEXT MixerContext,
148 IN PMIXER_LIST MixerList,
149 IN LPMIXER_DATA MixerData,
150 IN PULONG DeviceCount);
151
152 MIXER_STATUS
153 MMixerGetTargetPinsByNodeConnectionIndex(
154 IN PMIXER_CONTEXT MixerContext,
155 IN PKSMULTIPLE_ITEM NodeConnections,
156 IN PKSMULTIPLE_ITEM NodeTypes,
157 IN ULONG bUpDirection,
158 IN ULONG NodeConnectionIndex,
159 OUT PULONG Pins);
160
161 MIXER_STATUS
162 MMixerGetControlsFromPin(
163 IN PMIXER_CONTEXT MixerContext,
164 IN PKSMULTIPLE_ITEM NodeConnections,
165 IN PKSMULTIPLE_ITEM NodeTypes,
166 IN ULONG PinId,
167 IN ULONG bUpDirection,
168 OUT PULONG Nodes);
169
170 MIXER_STATUS
171 MMixerVerifyContext(
172 IN PMIXER_CONTEXT MixerContext);
173
174 LPMIXER_INFO
175 MMixerGetMixerInfoByIndex(
176 IN PMIXER_CONTEXT MixerContext,
177 IN ULONG MixerIndex);
178
179 LPMIXERLINE_EXT
180 MMixerGetSourceMixerLineByComponentType(
181 LPMIXER_INFO MixerInfo,
182 DWORD dwComponentType);
183
184 MIXER_STATUS
185 MMixerGetMixerControlById(
186 LPMIXER_INFO MixerInfo,
187 DWORD dwControlID,
188 LPMIXERLINE_EXT *MixerLine,
189 LPMIXERCONTROLW *MixerControl,
190 PULONG NodeId);
191
192 MIXER_STATUS
193 MMixerSetGetMuteControlDetails(
194 IN PMIXER_CONTEXT MixerContext,
195 IN HANDLE hMixer,
196 IN ULONG NodeId,
197 IN ULONG dwLineID,
198 IN LPMIXERCONTROLDETAILS MixerControlDetails,
199 IN ULONG bSet);
200
201 MIXER_STATUS
202 MMixerSetGetVolumeControlDetails(
203 IN PMIXER_CONTEXT MixerContext,
204 IN HANDLE hMixer,
205 IN ULONG NodeId,
206 IN ULONG bSet,
207 LPMIXERCONTROLW MixerControl,
208 IN LPMIXERCONTROLDETAILS MixerControlDetails,
209 LPMIXERLINE_EXT MixerLine);
210
211 MIXER_STATUS
212 MMixerSetGetControlDetails(
213 IN PMIXER_CONTEXT MixerContext,
214 IN HANDLE hMixer,
215 IN ULONG NodeId,
216 IN ULONG bSet,
217 IN ULONG PropertyId,
218 IN ULONG Channel,
219 IN PLONG InputValue);
220
221 LPMIXER_DATA
222 MMixerGetDataByDeviceId(
223 IN PMIXER_LIST MixerList,
224 IN ULONG DeviceId);
225
226 LPMIXER_DATA
227 MMixerGetDataByDeviceName(
228 IN PMIXER_LIST MixerList,
229 IN LPWSTR DeviceName);
230
231 MIXER_STATUS
232 MMixerCreateMixerData(
233 IN PMIXER_CONTEXT MixerContext,
234 IN PMIXER_LIST MixerList,
235 IN ULONG DeviceId,
236 IN LPWSTR DeviceName,
237 IN HANDLE hDevice,
238 IN HANDLE hKey);
239
240 MIXER_STATUS
241 MMixerGetDeviceName(
242 IN PMIXER_CONTEXT MixerContext,
243 IN LPMIXER_INFO MixerInfo,
244 IN HANDLE hKey);
245
246 #endif