3c6e086d78adeb5bdf77043a35dc68ee1c267d8d
[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 <debug.h>
18
19 typedef struct
20 {
21 LIST_ENTRY Entry;
22 MIXERCAPSW MixCaps;
23 HANDLE hMixer;
24 LIST_ENTRY LineList;
25 ULONG ControlId;
26 }MIXER_INFO, *LPMIXER_INFO;
27
28 typedef struct
29 {
30 LIST_ENTRY Entry;
31 ULONG PinId;
32 HANDLE hDevice;
33 MIXERLINEW Line;
34 LPMIXERCONTROLW LineControls;
35 PULONG NodeIds;
36 LIST_ENTRY LineControlsExtraData;
37 }MIXERLINE_EXT, *LPMIXERLINE_EXT;
38
39 typedef struct
40 {
41 LIST_ENTRY Entry;
42 ULONG dwControlID;
43 }MIXERCONTROL_DATA, *LPMIXERCONTROL_DATA;
44
45 typedef struct
46 {
47 MIXERCONTROL_DATA Header;
48 LONG SignedMinimum;
49 LONG SignedMaximum;
50 LONG SteppingDelta;
51 ULONG InputSteppingDelta;
52 ULONG ValuesCount;
53 PLONG Values;
54 }MIXERVOLUME_DATA, *LPMIXERVOLUME_DATA;
55
56 typedef struct
57 {
58 ULONG MixerListCount;
59 LIST_ENTRY MixerList;
60 }MIXER_LIST, *PMIXER_LIST;
61
62 #define DESTINATION_LINE 0xFFFF0000
63
64 ULONG
65 MMixerGetFilterPinCount(
66 IN PMIXER_CONTEXT MixerContext,
67 IN HANDLE hMixer);
68
69 LPGUID
70 MMixerGetNodeType(
71 IN PKSMULTIPLE_ITEM MultipleItem,
72 IN ULONG Index);
73
74 MIXER_STATUS
75 MMixerGetNodeIndexes(
76 IN PMIXER_CONTEXT MixerContext,
77 IN PKSMULTIPLE_ITEM MultipleItem,
78 IN ULONG NodeIndex,
79 IN ULONG bNode,
80 IN ULONG bFrom,
81 OUT PULONG NodeReferenceCount,
82 OUT PULONG *NodeReference);
83
84 PKSTOPOLOGY_CONNECTION
85 MMixerGetConnectionByIndex(
86 IN PKSMULTIPLE_ITEM MultipleItem,
87 IN ULONG Index);
88
89 ULONG
90 MMixerGetControlTypeFromTopologyNode(
91 IN LPGUID NodeType);
92
93 LPMIXERLINE_EXT
94 MMixerGetSourceMixerLineByLineId(
95 LPMIXER_INFO MixerInfo,
96 DWORD dwLineID);
97
98 MIXER_STATUS
99 MMixerGetFilterTopologyProperty(
100 IN PMIXER_CONTEXT MixerContext,
101 IN HANDLE hMixer,
102 IN ULONG PropertyId,
103 OUT PKSMULTIPLE_ITEM * OutMultipleItem);
104
105 VOID
106 MMixerFreeMixerInfo(
107 IN PMIXER_CONTEXT MixerContext,
108 IN LPMIXER_INFO MixerInfo);
109
110 MIXER_STATUS
111 MMixerGetTargetPins(
112 IN PMIXER_CONTEXT MixerContext,
113 IN PKSMULTIPLE_ITEM NodeTypes,
114 IN PKSMULTIPLE_ITEM NodeConnections,
115 IN ULONG NodeIndex,
116 IN ULONG bUpDirection,
117 OUT PULONG Pins,
118 IN ULONG PinCount);
119
120 MIXER_STATUS
121 MMixerGetPhysicalConnection(
122 IN PMIXER_CONTEXT MixerContext,
123 IN HANDLE hMixer,
124 IN ULONG PinId,
125 OUT PKSPIN_PHYSICALCONNECTION *OutConnection);
126
127 ULONG
128 MMixerGetIndexOfGuid(
129 PKSMULTIPLE_ITEM MultipleItem,
130 LPCGUID NodeType);
131
132 MIXER_STATUS
133 MMixerSetupFilter(
134 IN PMIXER_CONTEXT MixerContext,
135 IN PMIXER_LIST MixerList,
136 IN HANDLE hMixer,
137 IN PULONG DeviceCount,
138 IN LPWSTR DeviceName);
139
140 MIXER_STATUS
141 MMixerGetTargetPinsByNodeConnectionIndex(
142 IN PMIXER_CONTEXT MixerContext,
143 IN PKSMULTIPLE_ITEM NodeConnections,
144 IN PKSMULTIPLE_ITEM NodeTypes,
145 IN ULONG bUpDirection,
146 IN ULONG NodeConnectionIndex,
147 OUT PULONG Pins);
148
149 MIXER_STATUS
150 MMixerGetControlsFromPin(
151 IN PMIXER_CONTEXT MixerContext,
152 IN PKSMULTIPLE_ITEM NodeConnections,
153 IN PKSMULTIPLE_ITEM NodeTypes,
154 IN ULONG PinId,
155 IN ULONG bUpDirection,
156 OUT PULONG Nodes);
157
158 MIXER_STATUS
159 MMixerVerifyContext(
160 IN PMIXER_CONTEXT MixerContext);
161
162 LPMIXER_INFO
163 MMixerGetMixerInfoByIndex(
164 IN PMIXER_CONTEXT MixerContext,
165 IN ULONG MixerIndex);
166
167 LPMIXERLINE_EXT
168 MMixerGetSourceMixerLineByComponentType(
169 LPMIXER_INFO MixerInfo,
170 DWORD dwComponentType);
171
172 MIXER_STATUS
173 MMixerGetMixerControlById(
174 LPMIXER_INFO MixerInfo,
175 DWORD dwControlID,
176 LPMIXERLINE_EXT *MixerLine,
177 LPMIXERCONTROLW *MixerControl,
178 PULONG NodeId);
179
180 MIXER_STATUS
181 MMixerSetGetMuteControlDetails(
182 IN PMIXER_CONTEXT MixerContext,
183 IN HANDLE hMixer,
184 IN ULONG NodeId,
185 IN ULONG dwLineID,
186 IN LPMIXERCONTROLDETAILS MixerControlDetails,
187 IN ULONG bSet);
188
189 MIXER_STATUS
190 MMixerSetGetVolumeControlDetails(
191 IN PMIXER_CONTEXT MixerContext,
192 IN HANDLE hMixer,
193 IN ULONG NodeId,
194 IN ULONG bSet,
195 LPMIXERCONTROLW MixerControl,
196 IN LPMIXERCONTROLDETAILS MixerControlDetails,
197 LPMIXERLINE_EXT MixerLine);
198
199 MIXER_STATUS
200 MMixerSetGetControlDetails(
201 IN PMIXER_CONTEXT MixerContext,
202 IN HANDLE hMixer,
203 IN ULONG NodeId,
204 IN ULONG bSet,
205 IN ULONG PropertyId,
206 IN ULONG Channel,
207 IN PLONG InputValue);
208
209 #endif