Use the right buffer size in SYSPARAMS_Load instead of some random
[wine] / include / msacm.h
1 /*
2  * Declarations for MSACM
3  *
4  * Copyright (C) the Wine project
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20
21 #ifndef __WINE_MSACM_H
22 #define __WINE_MSACM_H
23
24 #include "windef.h"
25 #include "mmsystem.h"
26 #include "mmreg.h"
27
28 #ifdef __cplusplus
29 extern "C" {
30 #endif /* defined(__cplusplus) */
31
32 #define ACMAPI              WINAPI
33
34 /***********************************************************************
35  * Defines/Enums
36  */
37 #define ACMERR_BASE        512
38 #define ACMERR_NOTPOSSIBLE (ACMERR_BASE + 0)
39 #define ACMERR_BUSY        (ACMERR_BASE + 1)
40 #define ACMERR_UNPREPARED  (ACMERR_BASE + 2)
41 #define ACMERR_CANCELED    (ACMERR_BASE + 3)
42
43 #define MM_ACM_OPEN  MM_STREAM_OPEN
44 #define MM_ACM_CLOSE MM_STREAM_CLOSE
45 #define MM_ACM_DONE  MM_STREAM_DONE
46
47 #define ACM_DRIVERADDF_FUNCTION   0x00000003L
48 #define ACM_DRIVERADDF_NOTIFYHWND 0x00000004L
49 #define ACM_DRIVERADDF_TYPEMASK   0x00000007L
50 #define ACM_DRIVERADDF_LOCAL      0x00000000L
51 #define ACM_DRIVERADDF_GLOBAL     0x00000008L
52
53 #define ACMDRIVERDETAILS_SHORTNAME_CHARS  32
54 #define ACMDRIVERDETAILS_LONGNAME_CHARS  128
55 #define ACMDRIVERDETAILS_COPYRIGHT_CHARS  80
56 #define ACMDRIVERDETAILS_LICENSING_CHARS 128
57 #define ACMDRIVERDETAILS_FEATURES_CHARS  512
58
59 #define ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC mmioFOURCC('a', 'u', 'd', 'c')
60 #define ACMDRIVERDETAILS_FCCCOMP_UNDEFINED  mmioFOURCC('\0', '\0', '\0', '\0')
61
62 #define ACMDRIVERDETAILS_SUPPORTF_CODEC     0x00000001L
63 #define ACMDRIVERDETAILS_SUPPORTF_CONVERTER 0x00000002L
64 #define ACMDRIVERDETAILS_SUPPORTF_FILTER    0x00000004L
65 #define ACMDRIVERDETAILS_SUPPORTF_HARDWARE  0x00000008L
66 #define ACMDRIVERDETAILS_SUPPORTF_ASYNC     0x00000010L
67 #define ACMDRIVERDETAILS_SUPPORTF_LOCAL     0x40000000L
68 #define ACMDRIVERDETAILS_SUPPORTF_DISABLED  0x80000000L
69
70 #define ACM_DRIVERENUMF_NOLOCAL  0x40000000L
71 #define ACM_DRIVERENUMF_DISABLED 0x80000000L
72
73 #define ACM_DRIVERPRIORITYF_ENABLE    0x00000001L
74 #define ACM_DRIVERPRIORITYF_DISABLE   0x00000002L
75 #define ACM_DRIVERPRIORITYF_ABLEMASK  0x00000003L
76 #define ACM_DRIVERPRIORITYF_BEGIN     0x00010000L
77 #define ACM_DRIVERPRIORITYF_END       0x00020000L
78 #define ACM_DRIVERPRIORITYF_DEFERMASK 0x00030000L
79
80 #define MM_ACM_FILTERCHOOSE 0x8000
81
82 #define FILTERCHOOSE_MESSAGE          0
83 #define FILTERCHOOSE_FILTERTAG_VERIFY (FILTERCHOOSE_MESSAGE+0)
84 #define FILTERCHOOSE_FILTER_VERIFY    (FILTERCHOOSE_MESSAGE+1)
85 #define FILTERCHOOSE_CUSTOM_VERIFY    (FILTERCHOOSE_MESSAGE+2)
86
87 #define ACMFILTERCHOOSE_STYLEF_SHOWHELP             0x00000004L
88 #define ACMFILTERCHOOSE_STYLEF_ENABLEHOOK           0x00000008L
89 #define ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATE       0x00000010L
90 #define ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATEHANDLE 0x00000020L
91 #define ACMFILTERCHOOSE_STYLEF_INITTOFILTERSTRUCT   0x00000040L
92 #define ACMFILTERCHOOSE_STYLEF_CONTEXTHELP          0x00000080L
93
94 #define ACMFILTERDETAILS_FILTER_CHARS 128
95
96 #define ACM_FILTERDETAILSF_INDEX     0x00000000L
97 #define ACM_FILTERDETAILSF_FILTER    0x00000001L
98 #define ACM_FILTERDETAILSF_QUERYMASK 0x0000000FL
99
100 #define ACMFILTERTAGDETAILS_FILTERTAG_CHARS 48
101
102 #define ACM_FILTERTAGDETAILSF_INDEX       0x00000000L
103 #define ACM_FILTERTAGDETAILSF_FILTERTAG   0x00000001L
104 #define ACM_FILTERTAGDETAILSF_LARGESTSIZE 0x00000002L
105 #define ACM_FILTERTAGDETAILSF_QUERYMASK   0x0000000FL
106
107 #define ACM_FILTERENUMF_DWFILTERTAG 0x00010000L
108
109 #define ACMHELPMSGSTRINGA       "acmchoose_help"
110 #if defined(__GNUC__)
111 # define ACMHELPMSGSTRINGW (const WCHAR []){ 'a','c','m', \
112   'c','h','o','o','s','e','_','h','e','l','p',0 }
113 #elif defined(_MSC_VER)
114 # define ACMHELPMSGSTRINGW      L"acmchoose_help"
115 #else
116 static const WCHAR ACMHELPMSGSTRINGW[] = { 'a','c','m',
117   'c','h','o','o','s','e','_','h','e','l','p',0 };
118 #endif
119 #define ACMHELPMSGSTRING WINELIB_NAME_AW(ACMHELPMSGSTRING)
120
121 #define ACMHELPMSGCONTEXTMENUA  "acmchoose_contextmenu"
122 #if defined(__GNUC__)
123 # define ACMHELPMSGCONTEXTMENUW (const WCHAR []){ 'a','c','m', \
124   'c','h','o','o','s','e','_','c','o','n','t','e','x','t','m','e','n','u',0 }
125 #elif defined(_MSC_VER)
126 # define ACMHELPMSGCONTEXTMENUW L"acmchoose_contextmenu"
127 #else
128 static const WCHAR ACMHELPMSGCONTEXTMENUW[] = { 'a','c','m',
129   'c','h','o','o','s','e','_','c','o','n','t','e','x','t','m','e','n','u',0 };
130 #endif
131 #define ACMHELPMSGCONTEXTMENU WINELIB_NAME_AW(ACMHELPMSGCONTEXTMENU)
132
133 #define ACMHELPMSGCONTEXTHELPA  "acmchoose_contexthelp"
134 #if defined(__GNUC__)
135 # define ACMHELPMSGCONTEXTHELPW (const WCHAR []){ 'a','c','m', \
136   'c','h','o','o','s','e','_','c','o','n','t','e','x','t','h','e','l','p',0 }
137 #elif defined(_MSC_VER)
138 # define ACMHELPMSGCONTEXTHELPW L"acmchoose_contexthelp"
139 #else
140 static const WCHAR ACMHELPMSGCONTEXTHELPW[] = { 'a','c','m',
141   'c','h','o','o','s','e','_','c','o','n','t','e','x','t','h','e','l','p',0 };
142 #endif
143 #define ACMHELPMSGCONTEXTHELP WINELIB_NAME_AW(ACMHELPMSGCONTEXTHELP)
144
145 #define MM_ACM_FORMATCHOOSE 0x8000
146
147 #define FORMATCHOOSE_MESSAGE          0
148 #define FORMATCHOOSE_FORMATTAG_VERIFY (FORMATCHOOSE_MESSAGE+0)
149 #define FORMATCHOOSE_FORMAT_VERIFY    (FORMATCHOOSE_MESSAGE+1)
150 #define FORMATCHOOSE_CUSTOM_VERIFY    (FORMATCHOOSE_MESSAGE+2)
151
152 #define ACMFORMATCHOOSE_STYLEF_SHOWHELP             0x00000004L
153 #define ACMFORMATCHOOSE_STYLEF_ENABLEHOOK           0x00000008L
154 #define ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATE       0x00000010L
155 #define ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATEHANDLE 0x00000020L
156 #define ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT      0x00000040L
157 #define ACMFORMATCHOOSE_STYLEF_CONTEXTHELP          0x00000080L
158
159 #define ACMFORMATDETAILS_FORMAT_CHARS   128
160
161 #define ACM_FORMATDETAILSF_INDEX     0x00000000L
162 #define ACM_FORMATDETAILSF_FORMAT    0x00000001L
163 #define ACM_FORMATDETAILSF_QUERYMASK 0x0000000FL
164
165 #define ACM_FORMATENUMF_WFORMATTAG     0x00010000L
166 #define ACM_FORMATENUMF_NCHANNELS      0x00020000L
167 #define ACM_FORMATENUMF_NSAMPLESPERSEC 0x00040000L
168 #define ACM_FORMATENUMF_WBITSPERSAMPLE 0x00080000L
169 #define ACM_FORMATENUMF_CONVERT        0x00100000L
170 #define ACM_FORMATENUMF_SUGGEST        0x00200000L
171 #define ACM_FORMATENUMF_HARDWARE       0x00400000L
172 #define ACM_FORMATENUMF_INPUT          0x00800000L
173 #define ACM_FORMATENUMF_OUTPUT         0x01000000L
174
175 #define ACM_FORMATSUGGESTF_WFORMATTAG     0x00010000L
176 #define ACM_FORMATSUGGESTF_NCHANNELS      0x00020000L
177 #define ACM_FORMATSUGGESTF_NSAMPLESPERSEC 0x00040000L
178 #define ACM_FORMATSUGGESTF_WBITSPERSAMPLE 0x00080000L
179 #define ACM_FORMATSUGGESTF_TYPEMASK       0x00FF0000L
180
181 #define ACMFORMATTAGDETAILS_FORMATTAG_CHARS 48
182
183 #define ACM_FORMATTAGDETAILSF_INDEX       0x00000000L
184 #define ACM_FORMATTAGDETAILSF_FORMATTAG   0x00000001L
185 #define ACM_FORMATTAGDETAILSF_LARGESTSIZE 0x00000002L
186 #define ACM_FORMATTAGDETAILSF_QUERYMASK   0x0000000FL
187
188 #define ACM_METRIC_COUNT_DRIVERS            1
189 #define ACM_METRIC_COUNT_CODECS             2
190 #define ACM_METRIC_COUNT_CONVERTERS         3
191 #define ACM_METRIC_COUNT_FILTERS            4
192 #define ACM_METRIC_COUNT_DISABLED           5
193 #define ACM_METRIC_COUNT_HARDWARE           6
194 #define ACM_METRIC_COUNT_LOCAL_DRIVERS     20
195 #define ACM_METRIC_COUNT_LOCAL_CODECS      21
196 #define ACM_METRIC_COUNT_LOCAL_CONVERTERS  22
197 #define ACM_METRIC_COUNT_LOCAL_FILTERS     23
198 #define ACM_METRIC_COUNT_LOCAL_DISABLED    24
199 #define ACM_METRIC_HARDWARE_WAVE_INPUT     30
200 #define ACM_METRIC_HARDWARE_WAVE_OUTPUT    31
201 #define ACM_METRIC_MAX_SIZE_FORMAT         50
202 #define ACM_METRIC_MAX_SIZE_FILTER         51
203 #define ACM_METRIC_DRIVER_SUPPORT         100
204 #define ACM_METRIC_DRIVER_PRIORITY        101
205
206 #define ACM_STREAMCONVERTF_BLOCKALIGN 0x00000004
207 #define ACM_STREAMCONVERTF_START      0x00000010
208 #define ACM_STREAMCONVERTF_END        0x00000020
209
210 #define ACMSTREAMHEADER_STATUSF_DONE     0x00010000L
211 #define ACMSTREAMHEADER_STATUSF_PREPARED 0x00020000L
212 #define ACMSTREAMHEADER_STATUSF_INQUEUE  0x00100000L
213
214 #define ACM_STREAMOPENF_QUERY       0x00000001
215 #define ACM_STREAMOPENF_ASYNC       0x00000002
216 #define ACM_STREAMOPENF_NONREALTIME 0x00000004
217
218 #define ACM_STREAMSIZEF_SOURCE      0x00000000L
219 #define ACM_STREAMSIZEF_DESTINATION 0x00000001L
220 #define ACM_STREAMSIZEF_QUERYMASK   0x0000000FL
221
222 #define ACMDM_USER                  (DRV_USER + 0x0000)
223 #define ACMDM_RESERVED_LOW          (DRV_USER + 0x2000)
224 #define ACMDM_RESERVED_HIGH         (DRV_USER + 0x2FFF)
225
226 #define ACMDM_BASE                  ACMDM_RESERVED_LOW
227
228 #define ACMDM_DRIVER_ABOUT          (ACMDM_BASE + 11)
229
230 /* handles */
231
232 DECLARE_HANDLE(HACMDRIVERID);
233 DECLARE_HANDLE(HACMDRIVER);
234 DECLARE_HANDLE(HACMSTREAM);
235 DECLARE_HANDLE(HACMOBJ);
236 typedef HACMDRIVERID *PHACMDRIVERID, *LPHACMDRIVERID;
237 typedef HACMDRIVER   *PHACMDRIVER, *LPHACMDRIVER;
238 typedef HACMSTREAM   *PHACMSTREAM, *LPHACMSTREAM;
239 typedef HACMOBJ      *PHACMOBJ, *LPHACMOBJ;
240
241 /***********************************************************************
242  * Callbacks
243  */
244
245 typedef BOOL (CALLBACK *ACMDRIVERENUMCB)(
246   HACMDRIVERID hadid, DWORD dwInstance, DWORD fdwSupport
247 );
248
249 typedef UINT (CALLBACK *ACMFILTERCHOOSEHOOKPROCA)(
250   HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam
251 );
252
253 typedef UINT (CALLBACK *ACMFILTERCHOOSEHOOKPROCW)(
254   HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam
255 );
256 #define ACMFILTERCHOOSEHOOKPROC WINELIB_NAME_AW(ACMFILTERCHOOSEHOOKPROC)
257
258 typedef UINT (CALLBACK *ACMFORMATCHOOSEHOOKPROCA)(
259   HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam
260 );
261
262 typedef UINT (CALLBACK *ACMFORMATCHOOSEHOOKPROCW)(
263   HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam
264 );
265 #define ACMFORMATCHOOSEHOOKPROC WINELIB_NAME_AW(ACMFORMATCHOOSEHOOKPROC)
266
267 /***********************************************************************
268  * Structures
269  */
270
271 typedef struct _ACMDRIVERDETAILSA
272 {
273   DWORD    cbStruct;
274
275   FOURCC   fccType;
276   FOURCC   fccComp;
277
278   WORD     wMid;
279   WORD     wPid;
280
281   DWORD    vdwACM;
282   DWORD    vdwDriver;
283
284   DWORD    fdwSupport;
285   DWORD    cFormatTags;
286   DWORD    cFilterTags;
287
288   HICON  hicon;
289
290   CHAR     szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];
291   CHAR     szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];
292   CHAR     szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];
293   CHAR     szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];
294   CHAR     szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];
295 } ACMDRIVERDETAILSA, *PACMDRIVERDETAILSA, *LPACMDRIVERDETAILSA;
296
297 typedef struct _ACMDRIVERDETAILSW
298 {
299   DWORD    cbStruct;
300
301   FOURCC   fccType;
302   FOURCC   fccComp;
303
304   WORD     wMid;
305   WORD     wPid;
306
307   DWORD    vdwACM;
308   DWORD    vdwDriver;
309
310   DWORD    fdwSupport;
311   DWORD    cFormatTags;
312   DWORD    cFilterTags;
313
314   HICON  hicon;
315
316   WCHAR    szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];
317   WCHAR    szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];
318   WCHAR    szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];
319   WCHAR    szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];
320   WCHAR    szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];
321 } ACMDRIVERDETAILSW, *PACMDRIVERDETAILSW, *LPACMDRIVERDETAILSW;
322
323 DECL_WINELIB_TYPE_AW(ACMDRIVERDETAILS)
324 DECL_WINELIB_TYPE_AW(PACMDRIVERDETAILS)
325 DECL_WINELIB_TYPE_AW(LPACMDRIVERDETAILS)
326
327 typedef struct _ACMFILTERCHOOSEA
328 {
329   DWORD         cbStruct;
330   DWORD         fdwStyle;
331
332   HWND        hwndOwner;
333
334   PWAVEFILTER   pwfltr;
335   DWORD         cbwfltr;
336
337   LPCSTR        pszTitle;
338
339   CHAR          szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
340   CHAR          szFilter[ACMFILTERDETAILS_FILTER_CHARS];
341   LPSTR         pszName;
342   DWORD         cchName;
343
344   DWORD         fdwEnum;
345   PWAVEFILTER   pwfltrEnum;
346
347   HINSTANCE   hInstance;
348   LPCSTR        pszTemplateName;
349   LPARAM        lCustData;
350   ACMFILTERCHOOSEHOOKPROCA pfnHook;
351 } ACMFILTERCHOOSEA, *PACMFILTERCHOOSEA, *LPACMFILTERCHOOSEA;
352
353 typedef struct _ACMFILTERCHOOSEW
354 {
355   DWORD         cbStruct;
356   DWORD         fdwStyle;
357
358   HWND        hwndOwner;
359
360   PWAVEFILTER   pwfltr;
361   DWORD         cbwfltr;
362
363   LPCWSTR       pszTitle;
364
365   WCHAR         szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
366   WCHAR         szFilter[ACMFILTERDETAILS_FILTER_CHARS];
367   LPWSTR        pszName;
368   DWORD         cchName;
369
370   DWORD         fdwEnum;
371   PWAVEFILTER   pwfltrEnum;
372
373   HINSTANCE   hInstance;
374   LPCWSTR       pszTemplateName;
375   LPARAM        lCustData;
376   ACMFILTERCHOOSEHOOKPROCW pfnHook;
377 } ACMFILTERCHOOSEW, *PACMFILTERCHOOSEW, *LPACMFILTERCHOOSEW;
378
379 DECL_WINELIB_TYPE_AW(ACMFILTERCHOOSE)
380 DECL_WINELIB_TYPE_AW(PACMFILTERCHOOSE)
381 DECL_WINELIB_TYPE_AW(LPACMFILTERCHOOSE)
382
383 typedef struct _ACMFILTERDETAILSA
384 {
385   DWORD           cbStruct;
386   DWORD           dwFilterIndex;
387   DWORD           dwFilterTag;
388   DWORD           fdwSupport;
389   PWAVEFILTER     pwfltr;
390   DWORD           cbwfltr;
391   CHAR            szFilter[ACMFILTERDETAILS_FILTER_CHARS];
392 } ACMFILTERDETAILSA, *PACMFILTERDETAILSA, *LPACMFILTERDETAILSA;
393
394 typedef struct _ACMFILTERDETAILSW
395 {
396   DWORD          cbStruct;
397   DWORD          dwFilterIndex;
398   DWORD          dwFilterTag;
399   DWORD          fdwSupport;
400   PWAVEFILTER    pwfltr;
401   DWORD          cbwfltr;
402   WCHAR          szFilter[ACMFILTERDETAILS_FILTER_CHARS];
403 } ACMFILTERDETAILSW, *PACMFILTERDETAILSW, *LPACMFILTERDETAILSW;
404
405 DECL_WINELIB_TYPE_AW(ACMFILTERDETAILS)
406 DECL_WINELIB_TYPE_AW(PACMFILTERDETAILS)
407 DECL_WINELIB_TYPE_AW(LPACMFILTERDETAILS)
408
409 typedef struct _ACMFILTERTAGDETAILSA
410 {
411   DWORD cbStruct;
412   DWORD dwFilterTagIndex;
413   DWORD dwFilterTag;
414   DWORD cbFilterSize;
415   DWORD fdwSupport;
416   DWORD cStandardFilters;
417   CHAR  szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
418 } ACMFILTERTAGDETAILSA, *PACMFILTERTAGDETAILSA, *LPACMFILTERTAGDETAILSA;
419
420 typedef struct _ACMFILTERTAGDETAILSW
421 {
422   DWORD cbStruct;
423   DWORD dwFilterTagIndex;
424   DWORD dwFilterTag;
425   DWORD cbFilterSize;
426   DWORD fdwSupport;
427   DWORD cStandardFilters;
428   WCHAR szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
429 } ACMFILTERTAGDETAILSW, *PACMFILTERTAGDETAILSW, *LPACMFILTERTAGDETAILSW;
430
431 DECL_WINELIB_TYPE_AW(ACMFILTERTAGDETAILS)
432 DECL_WINELIB_TYPE_AW(PACMFILTERTAGDETAILS)
433 DECL_WINELIB_TYPE_AW(LPACMFILTERTAGDETAILS)
434
435 typedef struct _ACMFORMATCHOOSEA
436 {
437   DWORD           cbStruct;
438   DWORD           fdwStyle;
439
440   HWND          hwndOwner;
441
442   PWAVEFORMATEX   pwfx;
443   DWORD           cbwfx;
444   LPCSTR          pszTitle;
445
446   CHAR            szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
447   CHAR            szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
448
449   LPSTR           pszName;
450   DWORD           cchName;
451
452   DWORD           fdwEnum;
453   PWAVEFORMATEX   pwfxEnum;
454
455   HINSTANCE     hInstance;
456   LPCSTR          pszTemplateName;
457   LPARAM          lCustData;
458   ACMFORMATCHOOSEHOOKPROCA pfnHook;
459 } ACMFORMATCHOOSEA, *PACMFORMATCHOOSEA, *LPACMFORMATCHOOSEA;
460
461 typedef struct _ACMFORMATCHOOSEW
462 {
463   DWORD           cbStruct;
464   DWORD           fdwStyle;
465
466   HWND          hwndOwner;
467
468   PWAVEFORMATEX   pwfx;
469   DWORD           cbwfx;
470   LPCWSTR         pszTitle;
471
472   WCHAR           szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
473   WCHAR           szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
474
475   LPWSTR          pszName;
476   DWORD           cchName;
477
478   DWORD           fdwEnum;
479   LPWAVEFORMATEX  pwfxEnum;
480
481   HINSTANCE     hInstance;
482   LPCWSTR         pszTemplateName;
483   LPARAM          lCustData;
484   ACMFORMATCHOOSEHOOKPROCW pfnHook;
485 } ACMFORMATCHOOSEW, *PACMFORMATCHOOSEW, *LPACMFORMATCHOOSEW;
486
487 DECL_WINELIB_TYPE_AW(ACMFORMATCHOOSE)
488 DECL_WINELIB_TYPE_AW(PACMFORMATCHOOSE)
489 DECL_WINELIB_TYPE_AW(LPACMFORMATCHOOSE)
490
491 typedef struct _ACMFORMATDETAILSA
492 {
493   DWORD           cbStruct;
494   DWORD           dwFormatIndex;
495   DWORD           dwFormatTag;
496   DWORD           fdwSupport;
497   PWAVEFORMATEX   pwfx;
498   DWORD           cbwfx;
499   CHAR            szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
500 } ACMFORMATDETAILSA, *PACMFORMATDETAILSA, *LPACMFORMATDETAILSA;
501
502 typedef struct _ACMFORMATDETAILSW
503 {
504     DWORD           cbStruct;
505     DWORD           dwFormatIndex;
506     DWORD           dwFormatTag;
507     DWORD           fdwSupport;
508     PWAVEFORMATEX   pwfx;
509     DWORD           cbwfx;
510     WCHAR           szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
511 } ACMFORMATDETAILSW, *PACMFORMATDETAILSW, *LPACMFORMATDETAILSW;
512
513 DECL_WINELIB_TYPE_AW(ACMFORMATDETAILS)
514 DECL_WINELIB_TYPE_AW(PACMFORMATDETAILS)
515 DECL_WINELIB_TYPE_AW(LPACMFORMATDETAILS)
516
517 typedef struct _ACMFORMATTAGDETAILSA
518 {
519   DWORD cbStruct;
520   DWORD dwFormatTagIndex;
521   DWORD dwFormatTag;
522   DWORD cbFormatSize;
523   DWORD fdwSupport;
524   DWORD cStandardFormats;
525   CHAR  szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
526 } ACMFORMATTAGDETAILSA, *PACMFORMATTAGDETAILSA, *LPACMFORMATTAGDETAILSA;
527
528 typedef struct _ACMFORMATTAGDETAILSW
529 {
530   DWORD cbStruct;
531   DWORD dwFormatTagIndex;
532   DWORD dwFormatTag;
533   DWORD cbFormatSize;
534   DWORD fdwSupport;
535   DWORD cStandardFormats;
536   WCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
537 } ACMFORMATTAGDETAILSW, *PACMFORMATTAGDETAILSW, *LPACMFORMATTAGDETAILSW;
538
539 DECL_WINELIB_TYPE_AW(ACMFORMATTAGDETAILS)
540 DECL_WINELIB_TYPE_AW(PACMFORMATTAGDETAILS)
541 DECL_WINELIB_TYPE_AW(LPACMFORMATTAGDETAILS)
542
543 typedef struct _ACMSTREAMHEADER
544 {
545   DWORD  cbStruct;
546   DWORD  fdwStatus;
547   DWORD  dwUser;
548   LPBYTE pbSrc;
549   DWORD  cbSrcLength;
550   DWORD  cbSrcLengthUsed;
551   DWORD  dwSrcUser;
552   LPBYTE pbDst;
553   DWORD  cbDstLength;
554   DWORD  cbDstLengthUsed;
555   DWORD  dwDstUser;
556   DWORD  dwReservedDriver[10];
557 } ACMSTREAMHEADER, *PACMSTREAMHEADER, *LPACMSTREAMHEADER;
558
559 /***********************************************************************
560  * Callbacks 2
561  */
562
563 typedef BOOL (CALLBACK *ACMFILTERENUMCBA)(
564   HACMDRIVERID hadid, PACMFILTERDETAILSA pafd,
565   DWORD dwInstance, DWORD fdwSupport
566 );
567
568 typedef BOOL (CALLBACK *ACMFILTERENUMCBW)(
569   HACMDRIVERID hadid, PACMFILTERDETAILSW pafd,
570   DWORD dwInstance, DWORD fdwSupport
571 );
572
573 #define ACMFILTERENUMCB WINELIB_NAME_AW(ACMFILTERENUMCB)
574
575 typedef BOOL (CALLBACK *ACMFILTERTAGENUMCBA)(
576   HACMDRIVERID hadid, PACMFILTERTAGDETAILSA paftd,
577   DWORD dwInstance, DWORD fdwSupport
578 );
579
580 typedef BOOL (CALLBACK *ACMFILTERTAGENUMCBW)(
581   HACMDRIVERID hadid, PACMFILTERTAGDETAILSW paftd,
582   DWORD dwInstance, DWORD fdwSupport
583 );
584
585 #define ACMFILTERTAGENUMCB WINELIB_NAME_AW(ACMFILTERTAGENUMCB)
586
587 typedef BOOL (CALLBACK *ACMFORMATENUMCBA)(
588   HACMDRIVERID hadid, PACMFORMATDETAILSA pafd,
589   DWORD dwInstance, DWORD fdwSupport
590 );
591
592 typedef BOOL (CALLBACK *ACMFORMATENUMCBW)(
593   HACMDRIVERID hadid, PACMFORMATDETAILSW pafd,
594   DWORD dwInstance, DWORD fdwSupport
595 );
596
597 #define ACMFORMATENUMCB WINELIB_NAME_AW(ACMFORMATENUMCB)
598
599 typedef BOOL (CALLBACK *ACMFORMATTAGENUMCBA)(
600   HACMDRIVERID hadid, PACMFORMATTAGDETAILSA paftd,
601   DWORD dwInstance, DWORD fdwSupport
602 );
603
604 typedef BOOL (CALLBACK *ACMFORMATTAGENUMCBW)(
605   HACMDRIVERID hadid, PACMFORMATTAGDETAILSW paftd,
606   DWORD dwInstance, DWORD fdwSupport
607 );
608
609 #define ACMFORMATTAGENUMCB WINELIB_NAME_AW(ACMFORMATTAGENUMCB)
610
611 /***********************************************************************
612  * Functions - Win32
613  */
614
615 MMRESULT WINAPI acmDriverAddA(
616   PHACMDRIVERID phadid, HINSTANCE hinstModule,
617   LPARAM lParam, DWORD dwPriority, DWORD fdwAdd
618 );
619 MMRESULT WINAPI acmDriverAddW(
620   PHACMDRIVERID phadid, HINSTANCE hinstModule,
621   LPARAM lParam, DWORD dwPriority, DWORD fdwAdd
622 );
623 #define acmDriverAdd WINELIB_NAME_AW(acmDriverAdd)
624
625 MMRESULT WINAPI acmDriverClose(
626   HACMDRIVER had, DWORD fdwClose
627 );
628 MMRESULT WINAPI acmDriverDetailsA(
629   HACMDRIVERID hadid, PACMDRIVERDETAILSA padd, DWORD fdwDetails
630 );
631 MMRESULT WINAPI acmDriverDetailsW(
632   HACMDRIVERID hadid, PACMDRIVERDETAILSW padd, DWORD fdwDetails
633 );
634 #define acmDriverDetails WINELIB_NAME_AW(acmDriverDetails)
635
636 MMRESULT WINAPI acmDriverEnum(
637   ACMDRIVERENUMCB fnCallback, DWORD dwInstance, DWORD fdwEnum
638 );
639 MMRESULT WINAPI acmDriverID(
640   HACMOBJ hao, PHACMDRIVERID phadid, DWORD fdwDriverID
641 );
642 LRESULT WINAPI acmDriverMessage(
643   HACMDRIVER had, UINT uMsg, LPARAM lParam1, LPARAM lParam2
644 );
645 MMRESULT WINAPI acmDriverOpen(
646   PHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpen
647 );
648 MMRESULT WINAPI acmDriverPriority(
649   HACMDRIVERID hadid, DWORD dwPriority, DWORD fdwPriority
650 );
651 MMRESULT WINAPI acmDriverRemove(
652   HACMDRIVERID hadid, DWORD fdwRemove
653 );
654 MMRESULT WINAPI acmFilterChooseA(
655   PACMFILTERCHOOSEA pafltrc
656 );
657 MMRESULT WINAPI acmFilterChooseW(
658   PACMFILTERCHOOSEW pafltrc
659 );
660 #define acmFilterChoose WINELIB_NAME_AW(acmFilterChoose)
661
662 MMRESULT WINAPI acmFilterDetailsA(
663   HACMDRIVER had, PACMFILTERDETAILSA pafd, DWORD fdwDetails
664 );
665 MMRESULT WINAPI acmFilterDetailsW(
666   HACMDRIVER had, PACMFILTERDETAILSW pafd, DWORD fdwDetails
667 );
668 #define acmFilterDetails WINELIB_NAME_AW(acmFilterDetails)
669
670 MMRESULT WINAPI acmFilterEnumA(
671   HACMDRIVER had, PACMFILTERDETAILSA pafd,
672   ACMFILTERENUMCBA fnCallback, DWORD dwInstance, DWORD fdwEnum
673 );
674 MMRESULT WINAPI acmFilterEnumW(
675   HACMDRIVER had, PACMFILTERDETAILSW pafd,
676   ACMFILTERENUMCBW fnCallback, DWORD dwInstance, DWORD fdwEnum
677 );
678 #define acmFilterEnum WINELIB_NAME_AW(acmFilterEnum)
679
680 MMRESULT WINAPI acmFilterTagDetailsA(
681   HACMDRIVER had, PACMFILTERTAGDETAILSA paftd, DWORD fdwDetails
682 );
683 MMRESULT WINAPI acmFilterTagDetailsW(
684   HACMDRIVER had, PACMFILTERTAGDETAILSW paftd, DWORD fdwDetails
685 );
686 #define acmFilterTagDetails WINELIB_NAME_AW(acmFilterTagDetails)
687
688 MMRESULT WINAPI acmFilterTagEnumA(
689   HACMDRIVER had, PACMFILTERTAGDETAILSA paftd,
690   ACMFILTERTAGENUMCBA fnCallback, DWORD dwInstance, DWORD fdwEnum
691 );
692 MMRESULT WINAPI acmFilterTagEnumW(
693   HACMDRIVER had, PACMFILTERTAGDETAILSW paftd,
694   ACMFILTERTAGENUMCBW fnCallback, DWORD dwInstance, DWORD fdwEnum
695 );
696 #define acmFilterTagEnum WINELIB_NAME_AW(acmFilterTagEnum)
697
698 MMRESULT WINAPI acmFormatChooseA(
699   PACMFORMATCHOOSEA pafmtc
700 );
701 MMRESULT WINAPI acmFormatChooseW(
702   PACMFORMATCHOOSEW pafmtc
703 );
704 #define acmFormatChoose WINELIB_NAME_AW(acmFormatChoose)
705
706 MMRESULT WINAPI acmFormatDetailsA(
707   HACMDRIVER had, PACMFORMATDETAILSA pafd, DWORD fdwDetails
708 );
709 MMRESULT WINAPI acmFormatDetailsW(
710   HACMDRIVER had, PACMFORMATDETAILSW pafd, DWORD fdwDetails
711 );
712 #define acmFormatDetails WINELIB_NAME_AW(acmFormatDetails)
713
714 MMRESULT WINAPI acmFormatEnumA(
715   HACMDRIVER had, PACMFORMATDETAILSA pafd,
716   ACMFORMATENUMCBA fnCallback, DWORD dwInstance, DWORD fdwEnum
717 );
718 MMRESULT WINAPI acmFormatEnumW(
719   HACMDRIVER had, PACMFORMATDETAILSW pafd,
720   ACMFORMATENUMCBW fnCallback, DWORD dwInstance,  DWORD fdwEnum
721 );
722 #define acmFormatEnum WINELIB_NAME_AW(acmFormatEnum)
723
724 MMRESULT WINAPI acmFormatSuggest(
725   HACMDRIVER had, PWAVEFORMATEX pwfxSrc, PWAVEFORMATEX pwfxDst,
726   DWORD cbwfxDst, DWORD fdwSuggest
727 );
728 MMRESULT WINAPI acmFormatTagDetailsA(
729   HACMDRIVER had, PACMFORMATTAGDETAILSA paftd, DWORD fdwDetails
730 );
731 MMRESULT WINAPI acmFormatTagDetailsW(
732   HACMDRIVER had, PACMFORMATTAGDETAILSW paftd, DWORD fdwDetails
733 );
734 #define acmFormatTagDetails WINELIB_NAME_AW(acmFormatTagDetails)
735
736 MMRESULT WINAPI acmFormatTagEnumA(
737   HACMDRIVER had, PACMFORMATTAGDETAILSA paftd,
738   ACMFORMATTAGENUMCBA fnCallback, DWORD dwInstance, DWORD fdwEnum
739 );
740 MMRESULT WINAPI acmFormatTagEnumW(
741   HACMDRIVER had, PACMFORMATTAGDETAILSW paftd,
742   ACMFORMATTAGENUMCBW fnCallback, DWORD dwInstance, DWORD fdwEnum
743 );
744 #define acmFormatTagEnum WINELIB_NAME_AW(acmFormatTagEnum)
745
746 DWORD WINAPI acmGetVersion(void
747 );
748 MMRESULT WINAPI acmMetrics(
749   HACMOBJ hao, UINT  uMetric, LPVOID  pMetric
750 );
751 MMRESULT WINAPI acmStreamClose(
752   HACMSTREAM has, DWORD fdwClose
753 );
754 MMRESULT WINAPI acmStreamConvert(
755   HACMSTREAM has, PACMSTREAMHEADER pash, DWORD fdwConvert
756 );
757 MMRESULT WINAPI acmStreamMessage(
758   HACMSTREAM has, UINT uMsg, LPARAM lParam1, LPARAM lParam2
759 );
760 MMRESULT WINAPI acmStreamOpen(
761   PHACMSTREAM phas, HACMDRIVER had, PWAVEFORMATEX pwfxSrc,
762   PWAVEFORMATEX pwfxDst, PWAVEFILTER pwfltr, DWORD dwCallback,
763   DWORD dwInstance, DWORD fdwOpen
764 );
765 MMRESULT WINAPI acmStreamPrepareHeader(
766   HACMSTREAM has, PACMSTREAMHEADER pash, DWORD fdwPrepare
767 );
768 MMRESULT WINAPI acmStreamReset(
769   HACMSTREAM has, DWORD fdwReset
770 );
771 MMRESULT WINAPI acmStreamSize(
772   HACMSTREAM has, DWORD cbInput,
773   LPDWORD pdwOutputBytes, DWORD fdwSize
774 );
775 MMRESULT WINAPI acmStreamUnprepareHeader(
776   HACMSTREAM has, PACMSTREAMHEADER pash, DWORD fdwUnprepare
777 );
778
779 #ifdef __cplusplus
780 } /* extern "C" */
781 #endif /* defined(__cplusplus) */
782
783 #endif  /* __WINE_MSACM_H */