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