1 /**
2  * @file msacm.h
3  * Copyright 2012, 2013 MinGW.org project
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a
6  * copy of this software and associated documentation files (the "Software"),
7  * to deal in the Software without restriction, including without limitation
8  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9  * and/or sell copies of the Software, and to permit persons to whom the
10  * Software is furnished to do so, subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice (including the next
13  * paragraph) shall be included in all copies or substantial portions of the
14  * Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22  * DEALINGS IN THE SOFTWARE.
23  */
24 #ifndef _MSACM_H
25 #define _MSACM_H
26 #pragma GCC system_header
27 #include <_mingw.h>
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 
33 DECLARE_HANDLE(HACMDRIVERID);
34 typedef HACMDRIVERID *PHACMDRIVERID;
35 typedef HACMDRIVERID *LPHACMDRIVERID;
36 DECLARE_HANDLE(HACMDRIVER);
37 typedef HACMDRIVER *PHACMDRIVER;
38 typedef HACMDRIVER *LPHACMDRIVER;
39 DECLARE_HANDLE(HACMSTREAM);
40 typedef HACMSTREAM *PHACMSTREAM;
41 typedef HACMSTREAM *LPHACMSTREAM;
42 DECLARE_HANDLE(HACMOBJ);
43 typedef HACMOBJ *PHACMOBJ;
44 typedef HACMOBJ *LPHACMOBJ;
45 
46 /*found through experimentation*/
47 #define ACMDRIVERDETAILS_SHORTNAME_CHARS 32
48 #define ACMDRIVERDETAILS_LONGNAME_CHARS 128
49 #define ACMDRIVERDETAILS_COPYRIGHT_CHARS 80
50 #define ACMDRIVERDETAILS_LICENSING_CHARS 128
51 
52 /*I don't know the right values for these macros*/
53 #define ACMFORMATDETAILS_FORMAT_CHARS 256
54 #define ACMFORMATTAGDETAILS_FORMATTAG_CHARS 256
55 #define ACMDRIVERDETAILS_FEATURES_CHARS 256
56 
57 /*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmformatdetails_str.asp*/
58 typedef struct {
59 	DWORD          cbStruct;
60 	DWORD          dwFormatIndex;
61 	DWORD          dwFormatTag;
62 	DWORD          fdwSupport;
63 	LPWAVEFORMATEX pwfx;
64 	DWORD          cbwfx;
65 	char szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
66 } ACMFORMATDETAILSA, *LPACMFORMATDETAILSA;
67 typedef struct {
68 	DWORD          cbStruct;
69 	DWORD          dwFormatIndex;
70 	DWORD          dwFormatTag;
71 	DWORD          fdwSupport;
72 	LPWAVEFORMATEX pwfx;
73 	DWORD          cbwfx;
74 	WCHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
75 } ACMFORMATDETAILSW, *LPACMFORMATDETAILSW;
76 
77 /*msdn.microsoft.com/en-us/library/dd742926%28VS.85%29.aspx*/
78 typedef struct {
79   DWORD     cbStruct;
80   DWORD     fdwStatus;
81   DWORD_PTR dwUser;
82   LPBYTE    pbSrc;
83   DWORD     cbSrcLength;
84   DWORD     cbSrcLengthUsed;
85   DWORD_PTR dwSrcUser;
86   LPBYTE    pbDst;
87   DWORD     cbDstLength;
88   DWORD     cbDstLengthUsed;
89   DWORD_PTR dwDstUser;
90   DWORD     dwReservedDriver[10];
91 } ACMSTREAMHEADER, *LPACMSTREAMHEADER;
92 
93 /*msdn.microsoft.com/en-us/library/dd757711%28v=VS.85%29.aspx*/
94 typedef struct {
95   DWORD cbStruct;
96   DWORD dwFilterTag;
97   DWORD fdwFilter;
98   DWORD dwReserved[5];
99 } WAVEFILTER, *LPWAVEFILTER;
100 
101 /*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmformattagdetails_str.asp*/
102 typedef struct {
103 	DWORD cbStruct;
104 	DWORD dwFormatTagIndex;
105 	DWORD dwFormatTag;
106 	DWORD cbFormatSize;
107 	DWORD fdwSupport;
108 	DWORD cStandardFormats;
109 	char szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
110 } ACMFORMATTAGDETAILSA, *LPACMFORMATTAGDETAILSA;
111 typedef struct {
112 	DWORD cbStruct;
113 	DWORD dwFormatTagIndex;
114 	DWORD dwFormatTag;
115 	DWORD cbFormatSize;
116 	DWORD fdwSupport;
117 	DWORD cStandardFormats;
118 	WCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
119 } ACMFORMATTAGDETAILSW, *LPACMFORMATTAGDETAILSW;
120 
121 /*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmdriverdetails_str.asp*/
122 typedef struct {
123 	DWORD  cbStruct;
124 	FOURCC fccType;
125 	FOURCC fccComp;
126 	WORD   wMid;
127 	WORD   wPid;
128 	DWORD  vdwACM;
129 	DWORD  vdwDriver;
130 	DWORD  fdwSupport;
131 	DWORD  cFormatTags;
132 	DWORD  cFilterTags;
133 	HICON  hicon;
134 	char  szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];
135 	char  szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];
136 	char  szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];
137 	char  szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];
138 	char  szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];
139 } ACMDRIVERDETAILSA, *LPACMDRIVERDETAILSA;
140 typedef struct {
141 	DWORD  cbStruct;
142 	FOURCC fccType;
143 	FOURCC fccComp;
144 	WORD   wMid;
145 	WORD   wPid;
146 	DWORD  vdwACM;
147 	DWORD  vdwDriver;
148 	DWORD  fdwSupport;
149 	DWORD  cFormatTags;
150 	DWORD  cFilterTags;
151 	HICON  hicon;
152 	WCHAR  szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];
153 	WCHAR  szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];
154 	WCHAR  szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];
155 	WCHAR  szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];
156 	WCHAR  szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];
157 } ACMDRIVERDETAILSW, *LPACMDRIVERDETAILSW;
158 
159 /*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmformatenumcallback.asp*/
160 typedef BOOL (CALLBACK *ACMFORMATENUMCBA) (
161 	HACMDRIVERID        hadid,
162 	LPACMFORMATDETAILSA pafd,
163 	DWORD_PTR           dwInstance,
164 	DWORD               fdwSupport
165 );
166 typedef BOOL (CALLBACK *ACMFORMATENUMCBW) (
167 	HACMDRIVERID        hadid,
168 	LPACMFORMATDETAILSW pafd,
169 	DWORD_PTR           dwInstance,
170 	DWORD               fdwSupport
171 );
172 
173 /*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmformattagenumcallback.asp*/
174 typedef BOOL (CALLBACK *ACMFORMATTAGENUMCBA) (
175 	HACMDRIVERID           hadid,
176 	LPACMFORMATTAGDETAILSA paftd,
177 	DWORD_PTR              dwInstance,
178 	DWORD                  fdwSupport
179 );
180 typedef BOOL (CALLBACK *ACMFORMATTAGENUMCBW) (
181 	HACMDRIVERID           hadid,
182 	LPACMFORMATTAGDETAILSW paftd,
183 	DWORD_PTR              dwInstance,
184 	DWORD                  fdwSupport
185 );
186 
187 /*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmdriverenumcallback.asp*/
188 typedef BOOL (CALLBACK *ACMDRIVERENUMCB) (
189 	HACMDRIVERID hadid,
190 	DWORD_PTR    dwInstance,
191 	DWORD        fdwSupport
192 );
193 
194 /*and now the functions...*/
195 
196 /*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmdriveropen.asp*/
197 MMRESULT WINAPI acmDriverOpen(LPHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpen);
198 /*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmdriverenum.asp*/
199 MMRESULT WINAPI acmDriverEnum(ACMDRIVERENUMCB fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum);
200 /*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmformatenum.asp*/
201 MMRESULT WINAPI acmFormatEnumA(HACMDRIVER had, LPACMFORMATDETAILSA pafd, ACMFORMATENUMCBA fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum);
202 MMRESULT WINAPI acmFormatEnumW(HACMDRIVER had, LPACMFORMATDETAILSW pafd, ACMFORMATENUMCBW fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum);
203 
204 /*msdn.microsoft.com/en-us/library/dd742885%28VS.85%29.aspx*/
205 MMRESULT WINAPI acmDriverAddA(LPHACMDRIVERID phadid, HINSTANCE hinstModule, LPARAM lParam, DWORD dwPriority, DWORD fdwAdd);
206 MMRESULT WINAPI acmDriverAddW(LPHACMDRIVERID phadid, HINSTANCE hinstModule, LPARAM lParam, DWORD dwPriority, DWORD fdwAdd);
207 
208 /*msdn.microsoft.com/en-us/library/dd742897%28v=VS.85%29.aspx*/
209 MMRESULT WINAPI acmDriverRemove(HACMDRIVERID hadid, DWORD fdwRemove);
210 
211 /*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmdriverclose.asp*/
212 MMRESULT WINAPI acmDriverClose(HACMDRIVER had, DWORD fdwClose);
213 /*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmdriverdetails.asp*/
214 MMRESULT WINAPI acmDriverDetailsA(HACMDRIVERID hadid, LPACMDRIVERDETAILSA padd, DWORD fdwDetails);
215 MMRESULT WINAPI acmDriverDetailsW(HACMDRIVERID hadid, LPACMDRIVERDETAILSW padd, DWORD fdwDetails);
216 /*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmformattagenum.asp*/
217 MMRESULT WINAPI acmFormatTagEnumA(HACMDRIVER had, LPACMFORMATTAGDETAILSA paftd, ACMFORMATTAGENUMCBA fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum);
218 MMRESULT WINAPI acmFormatTagEnumW(HACMDRIVER had, LPACMFORMATTAGDETAILSW paftd, ACMFORMATTAGENUMCBW fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum);
219 
220 /*msdn.microsoft.com/en-us/library/dd742922(VS.85).aspx*/
221 MMRESULT WINAPI acmMetrics(HACMOBJ hao, UINT uMetric, LPVOID pMetric);
222 
223 /*msdn.microsoft.com/en-us/library/dd742928%28VS.85%29.aspx*/
224 MMRESULT WINAPI acmStreamOpen(LPHACMSTREAM phas, HACMDRIVER had, LPWAVEFORMATEX pwfxSrc, LPWAVEFORMATEX pwfxDst, LPWAVEFILTER pwfltr, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen);
225 
226 /*msdn.microsoft.com/en-us/library/dd742931%28VS.85%29.aspx*/
227 MMRESULT WINAPI acmStreamSize(HACMSTREAM has, DWORD cbInput, LPDWORD pdwOutputBytes, DWORD fdwSize);
228 
229 /*msdn.microsoft.com/en-us/library/dd742929%28VS.85%29.aspx*/
230 MMRESULT WINAPI acmStreamPrepareHeader(HACMSTREAM has, LPACMSTREAMHEADER pash, DWORD fdwPrepare);
231 
232 /*msdn.microsoft.com/en-us/library/dd742932%28VS.85%29.aspx*/
233 MMRESULT WINAPI acmStreamUnprepareHeader(HACMSTREAM has, LPACMSTREAMHEADER pash, DWORD fdwUnprepare);
234 
235 /*msdn.microsoft.com/en-us/library/dd742930%28VS.85%29.aspx*/
236 MMRESULT WINAPI acmStreamReset(HACMSTREAM has, DWORD fdwReset);
237 
238 /*msdn.microsoft.com/en-us/library/dd742923%28VS.85%29.aspx*/
239 MMRESULT WINAPI acmStreamClose(HACMSTREAM has, DWORD fdwClose);
240 
241 /*msdn.microsoft.com/en-us/library/dd742924%28VS.85%29.aspx*/
242 MMRESULT WINAPI acmStreamConvert(HACMSTREAM has, LPACMSTREAMHEADER pash, DWORD fdwConvert);
243 
244 typedef __AW(ACMFORMATDETAILS) ACMFORMATDETAILS, *LPACMFORMATDETAILS;
245 typedef __AW(ACMFORMATTAGDETAILS) ACMFORMATTAGDETAILS, *LPACMFORMATTAGDETAILS;
246 typedef __AW(ACMDRIVERDETAILS) ACMDRIVERDETAILS, *LPACMDRIVERDETAILS;
247 typedef __AW(ACMFORMATENUMCB) ACMFORMATENUMCB;
248 typedef __AW(ACMFORMATTAGENUMCB) ACMFORMATTAGENUMCB;
249 #define acmFormatEnum __AW(acmFormatEnum)
250 #define acmDriverDetails __AW(acmDriverDetails)
251 #define acmFormatTagEnum __AW(acmFormatTagEnum)
252 #define acmDriverAdd __AW(acmDriverAdd)
253 
254 #ifdef __cplusplus
255 }
256 #endif
257 
258 #endif
259