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