Added support for mappings with no associated file.
[wine] / include / msacm.h
1 /*
2  *      msacm.h   -       Declarations for MSACM
3  */
4
5 #ifndef __WINE_MSACM_H
6 #define __WINE_MSACM_H
7
8 #include "wintypes.h"
9 #include "driver.h"
10 #include "mmsystem.h"
11 #include "mmreg.h"
12
13 /***********************************************************************
14  * Types
15  */
16
17 /* FIXME: Move to wintypes.h */
18 #define DECLARE_HANDLE(a) \
19 typedef HANDLE16 a##16; \
20 typedef HANDLE a; \
21 typedef a##16 *P##a##16; \
22 typedef a##16 *NP##a##16; \
23 typedef a##16 *LP##a##16; \
24 typedef a *P##a;
25
26 DECLARE_HANDLE(HACMDRIVERID)
27 DECLARE_HANDLE(HACMDRIVER)
28 DECLARE_HANDLE(HACMSTREAM)
29 DECLARE_HANDLE(HACMOBJ)
30
31 /* FIXME: Remove when define moved to wintypes.h */
32 #undef DECLARE_HANDLE
33
34 /***********************************************************************
35  * Defines/Enums
36  */
37
38 #define ACMERR_BASE        512
39 #define ACMERR_NOTPOSSIBLE (ACMERR_BASE + 0)
40 #define ACMERR_BUSY        (ACMERR_BASE + 1)
41 #define ACMERR_UNPREPARED  (ACMERR_BASE + 2)
42 #define ACMERR_CANCELED    (ACMERR_BASE + 3)
43
44 #define MM_ACM_OPEN  MM_STREAM_OPEN
45 #define MM_ACM_CLOSE MM_STREAM_CLOSE
46 #define MM_ACM_DONE  MM_STREAM_DONE
47
48 #define ACM_DRIVERADDF_FUNCTION   0x00000003L
49 #define ACM_DRIVERADDF_NOTIFYHWND 0x00000004L
50 #define ACM_DRIVERADDF_TYPEMASK   0x00000007L
51 #define ACM_DRIVERADDF_LOCAL      0x00000000L
52 #define ACM_DRIVERADDF_GLOBAL     0x00000008L
53
54 #define ACMDRIVERDETAILS_SHORTNAME_CHARS  32
55 #define ACMDRIVERDETAILS_LONGNAME_CHARS  128
56 #define ACMDRIVERDETAILS_COPYRIGHT_CHARS  80
57 #define ACMDRIVERDETAILS_LICENSING_CHARS 128
58 #define ACMDRIVERDETAILS_FEATURES_CHARS  512
59
60 #define ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC mmioFOURCC('a', 'u', 'd', 'c')
61 #define ACMDRIVERDETAILS_FCCCOMP_UNDEFINED  mmioFOURCC('\0', '\0', '\0', '\0')
62
63 #define ACMDRIVERDETAILS_SUPPORTF_CODEC     0x00000001L
64 #define ACMDRIVERDETAILS_SUPPORTF_CONVERTER 0x00000002L
65 #define ACMDRIVERDETAILS_SUPPORTF_FILTER    0x00000004L
66 #define ACMDRIVERDETAILS_SUPPORTF_HARDWARE  0x00000008L
67 #define ACMDRIVERDETAILS_SUPPORTF_ASYNC     0x00000010L
68 #define ACMDRIVERDETAILS_SUPPORTF_LOCAL     0x40000000L
69 #define ACMDRIVERDETAILS_SUPPORTF_DISABLED  0x80000000L
70
71 #define ACM_DRIVERENUMF_NOLOCAL  0x40000000L
72 #define ACM_DRIVERENUMF_DISABLED 0x80000000L
73
74 #define ACM_DRIVERPRIORITYF_ENABLE    0x00000001L
75 #define ACM_DRIVERPRIORITYF_DISABLE   0x00000002L
76 #define ACM_DRIVERPRIORITYF_ABLEMASK  0x00000003L
77 #define ACM_DRIVERPRIORITYF_BEGIN     0x00010000L
78 #define ACM_DRIVERPRIORITYF_END       0x00020000L
79 #define ACM_DRIVERPRIORITYF_DEFERMASK 0x00030000L
80
81 #define MM_ACM_FILTERCHOOSE 0x8000
82
83 #define FILTERCHOOSE_MESSAGE          0
84 #define FILTERCHOOSE_FILTERTAG_VERIFY (FILTERCHOOSE_MESSAGE+0)
85 #define FILTERCHOOSE_FILTER_VERIFY    (FILTERCHOOSE_MESSAGE+1)
86 #define FILTERCHOOSE_CUSTOM_VERIFY    (FILTERCHOOSE_MESSAGE+2)
87
88 #define ACMFILTERCHOOSE_STYLEF_SHOWHELP             0x00000004L
89 #define ACMFILTERCHOOSE_STYLEF_ENABLEHOOK           0x00000008L
90 #define ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATE       0x00000010L
91 #define ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATEHANDLE 0x00000020L
92 #define ACMFILTERCHOOSE_STYLEF_INITTOFILTERSTRUCT   0x00000040L
93 #define ACMFILTERCHOOSE_STYLEF_CONTEXTHELP          0x00000080L
94
95 #define ACMFILTERDETAILS_FILTER_CHARS 128
96
97 #define ACM_FILTERDETAILSF_INDEX     0x00000000L
98 #define ACM_FILTERDETAILSF_FILTER    0x00000001L
99 #define ACM_FILTERDETAILSF_QUERYMASK 0x0000000FL
100
101 #define ACMFILTERTAGDETAILS_FILTERTAG_CHARS 48
102
103 #define ACM_FILTERTAGDETAILSF_INDEX       0x00000000L
104 #define ACM_FILTERTAGDETAILSF_FILTERTAG   0x00000001L
105 #define ACM_FILTERTAGDETAILSF_LARGESTSIZE 0x00000002L
106 #define ACM_FILTERTAGDETAILSF_QUERYMASK   0x0000000FL
107
108 #define ACM_FILTERENUMF_DWFILTERTAG 0x00010000L
109
110 #define ACMHELPMSGSTRINGA       "acmchoose_help"
111 #define ACMHELPMSGSTRINGW       L"acmchoose_help"
112 #define ACMHELPMSGSTRING16       "acmchoose_help"
113
114 #define ACMHELPMSGCONTEXTMENUA  "acmchoose_contextmenu"
115 #define ACMHELPMSGCONTEXTMENUW  L"acmchoose_contextmenu"
116 #define ACMHELPMSGCONTEXTMENU16   "acmchoose_contextmenu"
117
118 #define ACMHELPMSGCONTEXTHELPA  "acmchoose_contexthelp"
119 #define ACMHELPMSGCONTEXTHELPW  L"acmchoose_contexthelp"
120 #define ACMHELPMSGCONTEXTHELP16   "acmchoose_contexthelp"
121
122 #define MM_ACM_FORMATCHOOSE 0x8000
123
124 #define FORMATCHOOSE_MESSAGE          0
125 #define FORMATCHOOSE_FORMATTAG_VERIFY (FORMATCHOOSE_MESSAGE+0)
126 #define FORMATCHOOSE_FORMAT_VERIFY    (FORMATCHOOSE_MESSAGE+1)
127 #define FORMATCHOOSE_CUSTOM_VERIFY    (FORMATCHOOSE_MESSAGE+2)
128
129 #define ACMFORMATCHOOSE_STYLEF_SHOWHELP             0x00000004L
130 #define ACMFORMATCHOOSE_STYLEF_ENABLEHOOK           0x00000008L
131 #define ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATE       0x00000010L
132 #define ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATEHANDLE 0x00000020L
133 #define ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT      0x00000040L
134 #define ACMFORMATCHOOSE_STYLEF_CONTEXTHELP          0x00000080L
135
136 #define ACMFORMATDETAILS_FORMAT_CHARS   128
137
138 #define ACM_FORMATDETAILSF_INDEX     0x00000000L
139 #define ACM_FORMATDETAILSF_FORMAT    0x00000001L
140 #define ACM_FORMATDETAILSF_QUERYMASK 0x0000000FL
141
142 #define ACM_FORMATENUMF_WFORMATTAG     0x00010000L
143 #define ACM_FORMATENUMF_NCHANNELS      0x00020000L
144 #define ACM_FORMATENUMF_NSAMPLESPERSEC 0x00040000L
145 #define ACM_FORMATENUMF_WBITSPERSAMPLE 0x00080000L
146 #define ACM_FORMATENUMF_CONVERT        0x00100000L
147 #define ACM_FORMATENUMF_SUGGEST        0x00200000L
148 #define ACM_FORMATENUMF_HARDWARE       0x00400000L
149 #define ACM_FORMATENUMF_INPUT          0x00800000L
150 #define ACM_FORMATENUMF_OUTPUT         0x01000000L
151
152 #define ACM_FORMATSUGGESTF_WFORMATTAG     0x00010000L
153 #define ACM_FORMATSUGGESTF_NCHANNELS      0x00020000L
154 #define ACM_FORMATSUGGESTF_NSAMPLESPERSEC 0x00040000L
155 #define ACM_FORMATSUGGESTF_WBITSPERSAMPLE 0x00080000L
156 #define ACM_FORMATSUGGESTF_TYPEMASK       0x00FF0000L
157
158 #define ACMFORMATTAGDETAILS_FORMATTAG_CHARS 48
159
160 #define ACM_FORMATTAGDETAILSF_INDEX       0x00000000L
161 #define ACM_FORMATTAGDETAILSF_FORMATTAG   0x00000001L
162 #define ACM_FORMATTAGDETAILSF_LARGESTSIZE 0x00000002L
163 #define ACM_FORMATTAGDETAILSF_QUERYMASK   0x0000000FL
164
165 #define ACM_METRIC_COUNT_DRIVERS            1
166 #define ACM_METRIC_COUNT_CODECS             2
167 #define ACM_METRIC_COUNT_CONVERTERS         3
168 #define ACM_METRIC_COUNT_FILTERS            4
169 #define ACM_METRIC_COUNT_DISABLED           5
170 #define ACM_METRIC_COUNT_HARDWARE           6
171 #define ACM_METRIC_COUNT_LOCAL_DRIVERS     20
172 #define ACM_METRIC_COUNT_LOCAL_CODECS      21
173 #define ACM_METRIC_COUNT_LOCAL_CONVERTERS  22
174 #define ACM_METRIC_COUNT_LOCAL_FILTERS     23
175 #define ACM_METRIC_COUNT_LOCAL_DISABLED    24
176 #define ACM_METRIC_HARDWARE_WAVE_INPUT     30
177 #define ACM_METRIC_HARDWARE_WAVE_OUTPUT    31
178 #define ACM_METRIC_MAX_SIZE_FORMAT         50
179 #define ACM_METRIC_MAX_SIZE_FILTER         51
180 #define ACM_METRIC_DRIVER_SUPPORT         100
181 #define ACM_METRIC_DRIVER_PRIORITY        101
182
183 #define ACM_STREAMCONVERTF_BLOCKALIGN 0x00000004
184 #define ACM_STREAMCONVERTF_START      0x00000010
185 #define ACM_STREAMCONVERTF_END        0x00000020
186
187 #define ACMSTREAMHEADER_STATUSF_DONE     0x00010000L
188 #define ACMSTREAMHEADER_STATUSF_PREPARED 0x00020000L
189 #define ACMSTREAMHEADER_STATUSF_INQUEUE  0x00100000L
190
191 #define ACM_STREAMOPENF_QUERY       0x00000001
192 #define ACM_STREAMOPENF_ASYNC       0x00000002
193 #define ACM_STREAMOPENF_NONREALTIME 0x00000004
194
195 #define ACM_STREAMSIZEF_SOURCE      0x00000000L
196 #define ACM_STREAMSIZEF_DESTINATION 0x00000001L
197 #define ACM_STREAMSIZEF_QUERYMASK   0x0000000FL
198
199 #define ACMDM_USER                  (DRV_USER + 0x0000)
200 #define ACMDM_RESERVED_LOW          (DRV_USER + 0x2000)
201 #define ACMDM_RESERVED_HIGH         (DRV_USER + 0x2FFF)
202
203 #define ACMDM_BASE                  ACMDM_RESERVED_LOW
204
205 #define ACMDM_DRIVER_ABOUT          (ACMDM_BASE + 11)
206
207 /***********************************************************************
208  * Callbacks
209  */
210
211 typedef BOOL (CALLBACK *ACMDRIVERENUMCB)(
212   HACMDRIVERID hadid, DWORD dwInstance, DWORD fdwSupport
213 );
214
215 typedef BOOL16 (CALLBACK *ACMDRIVERENUMCB16)(
216   HACMDRIVERID16 hadid, DWORD dwInstance, DWORD fdwSupport
217 );
218
219 typedef UINT (CALLBACK *ACMFILTERCHOOSEHOOKPROCA)(
220   HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam
221 );
222
223 typedef UINT (CALLBACK *ACMFILTERCHOOSEHOOKPROCW)(
224   HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam
225 );
226
227 typedef UINT (CALLBACK *ACMFILTERCHOOSEHOOKPROC16)(
228   HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam
229 );
230
231 typedef UINT (CALLBACK *ACMFORMATCHOOSEHOOKPROCA)(
232   HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam
233 );
234
235 typedef UINT (CALLBACK *ACMFORMATCHOOSEHOOKPROCW)(
236   HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam
237 );
238
239 typedef UINT16 (CALLBACK *ACMFORMATCHOOSEHOOKPROC16)(
240   HWND16 hwnd, UINT16 uMsg, WPARAM16 wParam, LPARAM lParam
241 );
242
243 /***********************************************************************
244  * Structures
245  */
246
247 typedef struct _ACMDRIVERDETAILSA
248 {
249   DWORD    cbStruct;
250
251   FOURCC   fccType;
252   FOURCC   fccComp;
253
254   WORD     wMid;
255   WORD     wPid;
256
257   DWORD    vdwACM;
258   DWORD    vdwDriver;
259
260   DWORD    fdwSupport;
261   DWORD    cFormatTags;
262   DWORD    cFilterTags;
263
264   HICON  hicon;
265
266   CHAR     szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];
267   CHAR     szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];
268   CHAR     szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];
269   CHAR     szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];
270   CHAR     szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];
271 } ACMDRIVERDETAILSA, *PACMDRIVERDETAILSA;
272
273 typedef struct _ACMDRIVERDETAILSW
274 {
275   DWORD    cbStruct;
276
277   FOURCC   fccType;
278   FOURCC   fccComp;
279
280   WORD     wMid;
281   WORD     wPid;
282
283   DWORD    vdwACM;
284   DWORD    vdwDriver;
285
286   DWORD    fdwSupport;
287   DWORD    cFormatTags;
288   DWORD    cFilterTags;
289
290   HICON  hicon;
291
292   WCHAR    szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];
293   WCHAR    szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];
294   WCHAR    szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];
295   WCHAR    szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];
296   WCHAR    szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];
297 } ACMDRIVERDETAILSW, *PACMDRIVERDETAILSW;
298
299 typedef struct _ACMDRIVERDETAILS16
300 {
301   DWORD   cbStruct;
302
303   FOURCC  fccType;
304   FOURCC  fccComp;
305
306   WORD    wMid;
307   WORD    wPid;
308
309   DWORD   vdwACM;
310   DWORD   vdwDriver;
311
312   DWORD   fdwSupport;
313   DWORD   cFormatTags;
314   DWORD   cFilterTags;
315
316   HICON16 hicon;
317
318   CHAR    szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];
319   CHAR    szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];
320   CHAR    szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];
321   CHAR    szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];
322   CHAR    szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];
323 } ACMDRIVERDETAILS16, *NPACMDRIVERDETAILS16, *LPACMDRIVERDETAILS16;
324
325 typedef struct _ACMFILTERCHOOSEA
326 {
327   DWORD         cbStruct;
328   DWORD         fdwStyle;
329
330   HWND        hwndOwner;
331
332   PWAVEFILTER   pwfltr;
333   DWORD         cbwfltr;
334
335   LPCSTR        pszTitle;
336
337   CHAR          szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
338   CHAR          szFilter[ACMFILTERDETAILS_FILTER_CHARS];
339   LPSTR         pszName;
340   DWORD         cchName;
341
342   DWORD         fdwEnum;
343   PWAVEFILTER   pwfltrEnum;
344     
345   HINSTANCE   hInstance;
346   LPCSTR        pszTemplateName;
347   LPARAM        lCustData;
348   ACMFILTERCHOOSEHOOKPROCA pfnHook;
349 } ACMFILTERCHOOSEA, *PACMFILTERCHOOSEA;
350
351 typedef struct _ACMFILTERCHOOSEW
352 {
353   DWORD         cbStruct;
354   DWORD         fdwStyle;
355
356   HWND        hwndOwner;
357
358   PWAVEFILTER   pwfltr;
359   DWORD         cbwfltr;
360
361   LPCWSTR       pszTitle;
362
363   WCHAR         szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
364   WCHAR         szFilter[ACMFILTERDETAILS_FILTER_CHARS];
365   LPWSTR        pszName;
366   DWORD         cchName;
367
368   DWORD         fdwEnum;
369   PWAVEFILTER   pwfltrEnum;
370     
371   HINSTANCE   hInstance;
372   LPCWSTR       pszTemplateName;
373   LPARAM        lCustData;
374   ACMFILTERCHOOSEHOOKPROCW pfnHook;
375 } ACMFILTERCHOOSEW, *PACMFILTERCHOOSEW;
376
377 typedef struct _ACMFILTERCHOOSE16
378 {
379   DWORD          cbStruct;
380   DWORD          fdwStyle;
381
382   HWND16         hwndOwner;
383
384   LPWAVEFILTER   pwfltr;
385   DWORD          cbwfltr;
386
387   LPCSTR         pszTitle;
388
389   char           szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
390   char           szFilter[ACMFILTERDETAILS_FILTER_CHARS];
391   LPSTR          pszName;
392   DWORD          cchName;
393
394   DWORD          fdwEnum;
395   LPWAVEFILTER   pwfltrEnum;
396     
397   HINSTANCE16    hInstance;
398   LPCSTR         pszTemplateName;
399   LPARAM         lCustData;
400   ACMFILTERCHOOSEHOOKPROC16 pfnHook;
401 } ACMFILTERCHOOSE16, *NPACMFILTERCHOOSE16, *LPACMFILTERCHOOSE16;
402
403 typedef struct _ACMFILTERDETAILSA
404 {
405   DWORD           cbStruct;
406   DWORD           dwFilterIndex;
407   DWORD           dwFilterTag;
408   DWORD           fdwSupport;
409   PWAVEFILTER     pwfltr;
410   DWORD           cbwfltr;
411   CHAR            szFilter[ACMFILTERDETAILS_FILTER_CHARS];
412 } ACMFILTERDETAILSA, *PACMFILTERDETAILSA;
413
414 typedef struct _ACMFILTERDETAILSW
415 {
416   DWORD          cbStruct;
417   DWORD          dwFilterIndex;
418   DWORD          dwFilterTag;
419   DWORD          fdwSupport;
420   PWAVEFILTER    pwfltr;
421   DWORD          cbwfltr;
422   WCHAR          szFilter[ACMFILTERDETAILS_FILTER_CHARS];
423 } ACMFILTERDETAILSW, *PACMFILTERDETAILSW;
424
425 typedef struct _ACMFILTERDETAILS16
426 {
427   DWORD          cbStruct;
428   DWORD          dwFilterIndex;
429   DWORD          dwFilterTag;
430   DWORD          fdwSupport;
431   LPWAVEFILTER   pwfltr;
432   DWORD          cbwfltr;
433   CHAR           szFilter[ACMFILTERDETAILS_FILTER_CHARS];
434 } ACMFILTERDETAILS16, *NPACMFILTERDETAILS16, *LPACMFILTERDETAILS16;
435
436 typedef struct _ACMFILTERTAGDETAILSA
437 {
438   DWORD cbStruct;
439   DWORD dwFilterTagIndex;
440   DWORD dwFilterTag;
441   DWORD cbFilterSize;
442   DWORD fdwSupport;
443   DWORD cStandardFilters;
444   CHAR  szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
445 } ACMFILTERTAGDETAILSA, *PACMFILTERTAGDETAILSA;
446
447 typedef struct _ACMFILTERTAGDETAILSW
448 {
449   DWORD cbStruct;
450   DWORD dwFilterTagIndex;
451   DWORD dwFilterTag;
452   DWORD cbFilterSize;
453   DWORD fdwSupport;
454   DWORD cStandardFilters;
455   WCHAR szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
456 } ACMFILTERTAGDETAILSW, *PACMFILTERTAGDETAILSW;
457
458 typedef struct _ACMFILTERTAGDETAILS16
459 {
460   DWORD cbStruct;
461   DWORD dwFilterTagIndex;
462   DWORD dwFilterTag;
463   DWORD cbFilterSize;
464   DWORD fdwSupport;
465   DWORD cStandardFilters;
466   CHAR  szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
467 } ACMFILTERTAGDETAILS16, *NPACMFILTERTAGDETAILS16, *LPACMFILTERTAGDETAILS16;
468
469 typedef struct _ACMFORMATCHOOSEA
470 {
471   DWORD           cbStruct;
472   DWORD           fdwStyle;
473  
474   HWND          hwndOwner;
475
476   PWAVEFORMATEX   pwfx;
477   DWORD           cbwfx;
478   LPCSTR          pszTitle;
479     
480   CHAR            szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
481   CHAR            szFormat[ACMFORMATDETAILS_FORMAT_CHARS];    
482
483   LPSTR           pszName;
484   DWORD           cchName;
485
486   DWORD           fdwEnum;
487   PWAVEFORMATEX   pwfxEnum;
488     
489   HINSTANCE     hInstance;
490   LPCSTR          pszTemplateName;
491   LPARAM          lCustData;
492   ACMFORMATCHOOSEHOOKPROCA pfnHook;
493 } ACMFORMATCHOOSEA, *PACMFORMATCHOOSEA;
494
495 typedef struct _ACMFORMATCHOOSEW
496 {
497   DWORD           cbStruct;
498   DWORD           fdwStyle;
499     
500   HWND          hwndOwner;
501
502   PWAVEFORMATEX   pwfx;
503   DWORD           cbwfx;
504   LPCWSTR         pszTitle;
505     
506   WCHAR           szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
507   WCHAR           szFormat[ACMFORMATDETAILS_FORMAT_CHARS];    
508
509   LPWSTR          pszName;
510   DWORD           cchName;
511
512   DWORD           fdwEnum;
513   LPWAVEFORMATEX  pwfxEnum;
514     
515   HINSTANCE     hInstance;
516   LPCWSTR         pszTemplateName;
517   LPARAM          lCustData;
518   ACMFORMATCHOOSEHOOKPROCW pfnHook;
519 } ACMFORMATCHOOSEW, *PACMFORMATCHOOSEW;
520
521 typedef struct _ACMFORMATCHOOSE16
522 {
523   DWORD            cbStruct;
524   DWORD            fdwStyle;
525     
526   HWND16           hwndOwner;
527
528   LPWAVEFORMATEX   pwfx;
529   DWORD            cbwfx;
530   LPCSTR           pszTitle;
531     
532   CHAR             szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
533   CHAR             szFormat[ACMFORMATDETAILS_FORMAT_CHARS];    
534
535   LPSTR            pszName;
536   DWORD            cchName;
537
538   DWORD            fdwEnum;
539   LPWAVEFORMATEX   pwfxEnum;
540     
541   HINSTANCE16      hInstance;
542   LPCSTR           pszTemplateName;
543   LPARAM           lCustData;
544   ACMFORMATCHOOSEHOOKPROC16 pfnHook;
545 } ACMFORMATCHOOSE16, *NPACMFORMATCHOOSE16, *LPACMFORMATCHOOSE16;
546
547 typedef struct _ACMFORMATDETAILSA
548 {
549   DWORD           cbStruct;
550   DWORD           dwFormatIndex;
551   DWORD           dwFormatTag;
552   DWORD           fdwSupport;
553   PWAVEFORMATEX   pwfx;
554   DWORD           cbwfx;
555   CHAR            szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
556 } ACMFORMATDETAILSA, *PACMFORMATDETAILSA;
557
558 typedef struct _ACMFORMATDETAILSW
559 {
560     DWORD           cbStruct;
561     DWORD           dwFormatIndex;
562     DWORD           dwFormatTag;
563     DWORD           fdwSupport;
564     PWAVEFORMATEX   pwfx;
565     DWORD           cbwfx;
566     WCHAR           szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
567 } ACMFORMATDETAILSW, *PACMFORMATDETAILSW;
568
569 typedef struct _ACMFORMATDETAILS16
570 {
571     DWORD            cbStruct;
572     DWORD            dwFormatIndex;
573     DWORD            dwFormatTag;
574     DWORD            fdwSupport;
575     LPWAVEFORMATEX   pwfx;
576     DWORD            cbwfx;
577     CHAR             szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
578 } ACMFORMATDETAILS16, *NPACMFORMATDETAILS16, *LPACMFORMATDETAILS16;
579
580 typedef struct _ACMFORMATTAGDETAILSA
581 {
582   DWORD cbStruct;
583   DWORD dwFormatTagIndex;
584   DWORD dwFormatTag;
585   DWORD cbFormatSize;
586   DWORD fdwSupport;
587   DWORD cStandardFormats;
588   CHAR  szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
589 } ACMFORMATTAGDETAILSA, *PACMFORMATTAGDETAILSA;
590
591 typedef struct _ACMFORMATTAGDETAILSW
592 {
593   DWORD cbStruct;
594   DWORD dwFormatTagIndex;
595   DWORD dwFormatTag;
596   DWORD cbFormatSize;
597   DWORD fdwSupport;
598   DWORD cStandardFormats;
599   WCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
600 } ACMFORMATTAGDETAILSW, *PACMFORMATTAGDETAILSW;
601
602 typedef struct _ACMFORMATTAGDETAILS16
603 {
604   DWORD cbStruct;
605   DWORD dwFormatTagIndex;
606   DWORD dwFormatTag;
607   DWORD cbFormatSize;
608   DWORD fdwSupport;
609   DWORD cStandardFormats;
610   CHAR  szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
611 } ACMFORMATTAGDETAILS16, *NPACMFORMATTAGDETAILS16, *LPACMFORMATTAGDETAILS16;
612
613 typedef struct _ACMSTREAMHEADER
614 {
615   DWORD  cbStruct;
616   DWORD  fdwStatus;
617   DWORD  dwUser;
618   LPBYTE pbSrc;
619   DWORD  cbSrcLength;
620   DWORD  cbSrcLengthUsed;
621   DWORD  dwSrcUser;
622   LPBYTE pbDst;
623   DWORD  cbDstLength;
624   DWORD  cbDstLengthUsed;
625   DWORD  dwDstUser;
626   DWORD  dwReservedDriver[10];
627 } ACMSTREAMHEADER16, *NPACMSTREAMHEADER16, *LPACMSTREAMHEADER16,
628   ACMSTREAMHEADER, *PACMSTREAMHEADER;
629
630 /***********************************************************************
631  * Callbacks 2
632  */
633
634 typedef BOOL (CALLBACK *ACMFILTERENUMCBA)(
635   HACMDRIVERID hadid, PACMFILTERDETAILSA pafd,
636   DWORD dwInstance, DWORD fdwSupport
637 );
638
639 typedef BOOL (CALLBACK *ACMFILTERENUMCBW)(
640   HACMDRIVERID hadid, PACMFILTERDETAILSW pafd,
641   DWORD dwInstance, DWORD fdwSupport
642 );
643
644 typedef BOOL16 (CALLBACK *ACMFILTERENUMCB16)(
645  HACMDRIVERID16 hadid, LPACMFILTERDETAILS16 pafd,
646  DWORD dwInstance, DWORD fdwSupport
647 );
648
649 typedef BOOL (CALLBACK *ACMFILTERTAGENUMCBA)(
650   HACMDRIVERID hadid, PACMFILTERTAGDETAILSA paftd,
651   DWORD dwInstance, DWORD fdwSupport
652 );
653
654 typedef BOOL (CALLBACK *ACMFILTERTAGENUMCBW)(
655   HACMDRIVERID hadid, PACMFILTERTAGDETAILSW paftd,
656   DWORD dwInstance, DWORD fdwSupport
657 );
658
659 typedef BOOL16 (CALLBACK *ACMFILTERTAGENUMCB16)(
660   HACMDRIVERID16 hadid, LPACMFILTERTAGDETAILS16 paftd,
661   DWORD dwInstance, DWORD fdwSupport
662 );
663
664 typedef BOOL (CALLBACK *ACMFORMATENUMCBA)(
665   HACMDRIVERID hadid, PACMFORMATDETAILSA pafd,
666   DWORD dwInstance, DWORD fdwSupport
667 );
668
669 typedef BOOL (CALLBACK *ACMFORMATENUMCBW)(
670   HACMDRIVERID hadid, PACMFORMATDETAILSW pafd,
671   DWORD dwInstance, DWORD fdwSupport
672 );
673
674 typedef BOOL16 (CALLBACK *ACMFORMATENUMCB16)(
675   HACMDRIVERID16 hadid, LPACMFORMATDETAILS16 pafd,
676   DWORD dwInstance, DWORD fdwSupport
677 );
678
679 typedef BOOL (CALLBACK *ACMFORMATTAGENUMCBA)(
680   HACMDRIVERID hadid, PACMFORMATTAGDETAILSA paftd,
681   DWORD dwInstance, DWORD fdwSupport
682 );
683
684 typedef BOOL (CALLBACK *ACMFORMATTAGENUMCBW)(
685   HACMDRIVERID hadid, PACMFORMATTAGDETAILSW paftd,
686   DWORD dwInstance, DWORD fdwSupport
687 );
688
689 typedef BOOL16 (CALLBACK *ACMFORMATTAGENUMCB16)(
690   HACMDRIVERID16 hadid, LPACMFORMATTAGDETAILS16 paftd,
691   DWORD dwInstance, DWORD fdwSupport
692 );
693
694 /***********************************************************************
695  * Functions - Win16
696  */
697
698 DWORD WINAPI acmGetVersion16(
699 );
700 MMRESULT16 WINAPI acmMetrics16(
701   HACMOBJ16 hao, UINT16 uMetric, LPVOID pMetric
702 );
703 MMRESULT16 WINAPI acmDriverEnum16(
704   ACMDRIVERENUMCB16 fnCallback, DWORD dwInstance, DWORD fdwEnum
705 );
706 MMRESULT16 WINAPI acmDriverDetails16(
707   HACMDRIVERID16 hadid, LPACMDRIVERDETAILS16 padd, DWORD fdwDetails
708 );
709 MMRESULT16 WINAPI acmDriverAdd16(
710   LPHACMDRIVERID16 phadid, HINSTANCE16 hinstModule,
711   LPARAM lParam, DWORD dwPriority, DWORD fdwAdd
712 );
713 MMRESULT16 WINAPI acmDriverRemove16(
714   HACMDRIVERID16 hadid, DWORD fdwRemove
715 );
716 MMRESULT16 WINAPI acmDriverOpen16(
717   LPHACMDRIVER16 phad, HACMDRIVERID16 hadid, DWORD fdwOpen
718 );
719 MMRESULT16 WINAPI acmDriverClose16(
720   HACMDRIVER16 had, DWORD fdwClose
721 );
722 LRESULT WINAPI acmDriverMessage16(
723   HACMDRIVER16 had, UINT16 uMsg, LPARAM lParam1, LPARAM lParam2
724 );
725 MMRESULT16 WINAPI acmDriverID16(
726   HACMOBJ16 hao, LPHACMDRIVERID16 phadid, DWORD fdwDriverID
727 );
728 MMRESULT16 WINAPI acmDriverPriority16(
729  HACMDRIVERID16 hadid, DWORD dwPriority, DWORD fdwPriority
730 );
731 MMRESULT16 WINAPI acmFormatTagDetails16(
732   HACMDRIVER16 had, LPACMFORMATTAGDETAILS16 paftd, DWORD fdwDetails
733 );
734 MMRESULT16 WINAPI acmFormatTagEnum16(
735   HACMDRIVER16 had, LPACMFORMATTAGDETAILS16 paftd,
736   ACMFORMATTAGENUMCB16 fnCallback, DWORD dwInstance, DWORD fdwEnum
737 );
738 MMRESULT16 WINAPI acmFormatChoose16(
739   LPACMFORMATCHOOSE16 pafmtc
740 );
741 MMRESULT16 WINAPI acmFormatDetails16(
742   HACMDRIVER16 had, LPACMFORMATDETAILS16 pafd, DWORD fdwDetails
743 );
744 MMRESULT16 WINAPI acmFormatEnum16(
745   HACMDRIVER16 had, LPACMFORMATDETAILS16 pafd,
746   ACMFORMATENUMCB16 fnCallback, DWORD dwInstance, DWORD fdwEnum
747 );
748 MMRESULT16 WINAPI acmFormatSuggest16(
749   HACMDRIVER16 had, LPWAVEFORMATEX pwfxSrc, 
750   LPWAVEFORMATEX pwfxDst, DWORD cbwfxDst, DWORD fdwSuggest
751 );
752 MMRESULT16 WINAPI acmFilterTagDetails16(
753   HACMDRIVER16 had, LPACMFILTERTAGDETAILS16 paftd, DWORD fdwDetails
754 );
755 MMRESULT16 WINAPI acmFilterTagEnum16(
756   HACMDRIVER16 had, LPACMFILTERTAGDETAILS16 paftd,
757   ACMFILTERTAGENUMCB16 fnCallback, DWORD dwInstance, DWORD fdwEnum
758 );
759 MMRESULT16 WINAPI acmFilterChoose16(
760   LPACMFILTERCHOOSE16 pafltrc
761 );
762 MMRESULT16 WINAPI acmFilterDetails16(
763   HACMDRIVER16 had, LPACMFILTERDETAILS16 pafd, DWORD fdwDetails
764 );
765 MMRESULT16 WINAPI acmFilterEnum16(
766   HACMDRIVER16 had, LPACMFILTERDETAILS16 pafd,
767   ACMFILTERENUMCB16 fnCallback, DWORD dwInstance, DWORD fdwEnum
768 );
769 MMRESULT16 WINAPI acmStreamOpen16(
770   LPHACMSTREAM16 phas, HACMDRIVER16 had,
771   LPWAVEFORMATEX pwfxSrc, LPWAVEFORMATEX pwfxDst,
772   LPWAVEFILTER pwfltr, DWORD dwCallback,
773   DWORD dwInstance, DWORD fdwOpen
774 );
775 MMRESULT16 WINAPI acmStreamClose16(
776   HACMSTREAM16 has, DWORD fdwClose
777 );
778 MMRESULT16 WINAPI acmStreamSize16(
779   HACMSTREAM16 has, DWORD cbInput, 
780   LPDWORD pdwOutputBytes, DWORD fdwSize
781 );
782 MMRESULT16 WINAPI acmStreamConvert16(
783   HACMSTREAM16 has, LPACMSTREAMHEADER16 pash, DWORD fdwConvert
784 );
785 MMRESULT16 WINAPI acmStreamReset16(
786   HACMSTREAM16 has, DWORD fdwReset
787 );
788 MMRESULT16 WINAPI acmStreamPrepareHeader16(
789   HACMSTREAM16 has, LPACMSTREAMHEADER16 pash, DWORD fdwPrepare
790 );
791 MMRESULT16 WINAPI acmStreamUnprepareHeader16(
792   HACMSTREAM16 has, LPACMSTREAMHEADER16 pash, DWORD fdwUnprepare
793 );
794
795 /***********************************************************************
796  * Functions - Win32
797  */
798
799 MMRESULT WINAPI acmDriverAddA(
800   PHACMDRIVERID phadid, HINSTANCE hinstModule,
801   LPARAM lParam, DWORD dwPriority, DWORD fdwAdd
802 );
803 MMRESULT WINAPI acmDriverAddW(
804   PHACMDRIVERID phadid, HINSTANCE hinstModule,
805   LPARAM lParam, DWORD dwPriority, DWORD fdwAdd
806 );
807 MMRESULT WINAPI acmDriverClose(
808   HACMDRIVER had, DWORD fdwClose
809 );
810 MMRESULT WINAPI acmDriverDetailsA(
811   HACMDRIVERID hadid, PACMDRIVERDETAILSA padd, DWORD fdwDetails
812 );
813 MMRESULT WINAPI acmDriverDetailsW(
814   HACMDRIVERID hadid, PACMDRIVERDETAILSW padd, DWORD fdwDetails
815 );
816 MMRESULT WINAPI acmDriverEnum(
817   ACMDRIVERENUMCB fnCallback, DWORD dwInstance, DWORD fdwEnum
818 );
819 MMRESULT WINAPI acmDriverID(
820   HACMOBJ hao, PHACMDRIVERID phadid, DWORD fdwDriverID
821 );
822 LRESULT WINAPI acmDriverMessage(
823   HACMDRIVER had, UINT uMsg, LPARAM lParam1, LPARAM lParam2
824 );
825 MMRESULT WINAPI acmDriverOpen(
826   PHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpen
827 );
828 MMRESULT WINAPI acmDriverPriority(
829   HACMDRIVERID hadid, DWORD dwPriority, DWORD fdwPriority
830 );
831 MMRESULT WINAPI acmDriverRemove(
832   HACMDRIVERID hadid, DWORD fdwRemove
833 );
834 MMRESULT WINAPI acmFilterChooseA(
835   PACMFILTERCHOOSEA pafltrc
836 );
837 MMRESULT WINAPI acmFilterChooseW(
838   PACMFILTERCHOOSEW pafltrc
839 );
840 MMRESULT WINAPI acmFilterDetailsA(
841   HACMDRIVER had, PACMFILTERDETAILSA pafd, DWORD fdwDetails
842 );
843 MMRESULT WINAPI acmFilterDetailsW(
844   HACMDRIVER had, PACMFILTERDETAILSW pafd, DWORD fdwDetails
845 );
846 MMRESULT WINAPI acmFilterEnumA(
847   HACMDRIVER had, PACMFILTERDETAILSA pafd, 
848   ACMFILTERENUMCBA fnCallback, DWORD dwInstance, DWORD fdwEnum
849 );
850 MMRESULT WINAPI acmFilterEnumW(
851   HACMDRIVER had, PACMFILTERDETAILSW pafd, 
852   ACMFILTERENUMCBW fnCallback, DWORD dwInstance, DWORD fdwEnum
853 );
854 MMRESULT WINAPI acmFilterTagDetailsA(
855   HACMDRIVER had, PACMFILTERTAGDETAILSA paftd, DWORD fdwDetails
856 );
857 MMRESULT WINAPI acmFilterTagDetailsW(
858   HACMDRIVER had, PACMFILTERTAGDETAILSW paftd, DWORD fdwDetails
859 );
860 MMRESULT WINAPI acmFilterTagEnumA(
861   HACMDRIVER had, PACMFILTERTAGDETAILSA paftd,
862   ACMFILTERTAGENUMCBA fnCallback, DWORD dwInstance, DWORD fdwEnum
863 );
864 MMRESULT WINAPI acmFilterTagEnumW(
865   HACMDRIVER had, PACMFILTERTAGDETAILSW paftd,
866   ACMFILTERTAGENUMCBW fnCallback, DWORD dwInstance, DWORD fdwEnum
867 );
868 MMRESULT WINAPI acmFormatChooseA(
869   PACMFORMATCHOOSEA pafmtc
870 );
871 MMRESULT WINAPI acmFormatChooseW(
872   PACMFORMATCHOOSEW pafmtc
873 );
874 MMRESULT WINAPI acmFormatDetailsA(
875   HACMDRIVER had, PACMFORMATDETAILSA pafd, DWORD fdwDetails
876 );
877 MMRESULT WINAPI acmFormatDetailsW(
878   HACMDRIVER had, PACMFORMATDETAILSW pafd, DWORD fdwDetails
879 );
880 MMRESULT WINAPI acmFormatEnumA(
881   HACMDRIVER had, PACMFORMATDETAILSA pafd,
882   ACMFORMATENUMCBA fnCallback, DWORD dwInstance, DWORD fdwEnum
883 );
884 MMRESULT WINAPI acmFormatEnumW(
885   HACMDRIVER had, PACMFORMATDETAILSW pafd,
886   ACMFORMATENUMCBW fnCallback, DWORD dwInstance,  DWORD fdwEnum
887 );
888 MMRESULT WINAPI acmFormatSuggest(
889   HACMDRIVER had, PWAVEFORMATEX pwfxSrc, PWAVEFORMATEX pwfxDst,
890   DWORD cbwfxDst, DWORD fdwSuggest
891 );
892 MMRESULT WINAPI acmFormatTagDetailsA(
893   HACMDRIVER had, PACMFORMATTAGDETAILSA paftd, DWORD fdwDetails
894 );
895 MMRESULT WINAPI acmFormatTagDetailsW(
896   HACMDRIVER had, PACMFORMATTAGDETAILSW paftd, DWORD fdwDetails
897 );
898 MMRESULT WINAPI acmFormatTagEnumA(
899   HACMDRIVER had, PACMFORMATTAGDETAILSA paftd,
900   ACMFORMATTAGENUMCBA fnCallback, DWORD dwInstance, DWORD fdwEnum
901 );
902 MMRESULT WINAPI acmFormatTagEnumW(
903   HACMDRIVER had, PACMFORMATTAGDETAILSW paftd,
904   ACMFORMATTAGENUMCBW fnCallback, DWORD dwInstance, DWORD fdwEnum
905 );
906 DWORD WINAPI acmGetVersion(
907 );
908 MMRESULT WINAPI acmMetrics(
909   HACMOBJ hao, UINT  uMetric, LPVOID  pMetric
910 );
911 MMRESULT WINAPI acmStreamClose(
912   HACMSTREAM has, DWORD fdwClose
913 );
914 MMRESULT WINAPI acmStreamConvert(
915   HACMSTREAM has, PACMSTREAMHEADER pash, DWORD fdwConvert
916 );
917 MMRESULT WINAPI acmStreamMessage(
918   HACMSTREAM has, UINT uMsg, LPARAM lParam1, LPARAM lParam2
919 );
920 MMRESULT WINAPI acmStreamOpen(
921   PHACMSTREAM phas, HACMDRIVER had, PWAVEFORMATEX pwfxSrc,
922   PWAVEFORMATEX pwfxDst, PWAVEFILTER pwfltr, DWORD dwCallback,
923   DWORD dwInstance, DWORD fdwOpen
924 );
925 MMRESULT WINAPI acmStreamPrepareHeader(
926   HACMSTREAM has, PACMSTREAMHEADER pash, DWORD fdwPrepare
927 );
928 MMRESULT WINAPI acmStreamReset(
929   HACMSTREAM has, DWORD fdwReset
930 );
931 MMRESULT WINAPI acmStreamSize(
932   HACMSTREAM has, DWORD cbInput, 
933   LPDWORD pdwOutputBytes, DWORD fdwSize
934 );
935 MMRESULT WINAPI acmStreamUnprepareHeader(
936   HACMSTREAM has, PACMSTREAMHEADER pash, DWORD fdwUnprepare
937 );
938
939 /***********************************************************************
940  * Wine specific - Win32
941  */
942 typedef struct _WINE_ACMBUILTINDRIVER
943 {
944   LPSTR        pszDriverAlias;
945   DRIVERPROC pfnDriverProc;
946 } WINE_ACMBUILTINDRIVER, *PWINE_ACMBUILTINDRIVER;
947
948 typedef struct _WINE_ACMLOCALDRIVER
949 {
950   DRIVERPROC pfnDriverProc;
951 } WINE_ACMLOCALDRIVER, *PWINE_ACMLOCALDRIVER;
952
953 typedef struct _WINE_ACMDRIVERID *PWINE_ACMDRIVERID;
954
955 typedef struct _WINE_ACMOBJ
956 {
957   PWINE_ACMDRIVERID pACMDriverID;
958 } WINE_ACMOBJ, *PWINE_ACMOBJ;
959
960 typedef struct _WINE_ACMDRIVER
961 {
962   WINE_ACMOBJ  obj;
963   HDRVR        hDrvr;
964 } WINE_ACMDRIVER, *PWINE_ACMDRIVER;
965
966 typedef struct _WINE_ACMSTREAM
967 {
968   WINE_ACMOBJ  obj;
969   /* FIME: More fields needed */
970 } WINE_ACMSTREAM, *PWINE_ACMSTREAM;
971
972 typedef struct _WINE_ACMDRIVERID
973 {
974   LPSTR                    pszDriverAlias;
975   LPSTR                    pszFileName;
976   PWINE_ACMLOCALDRIVER   pACMLocalDriver;
977   BOOL                   bEnabled;
978   PWINE_ACMDRIVER        pACMDriver;           /* NULL if not open */
979   PWINE_ACMDRIVERID      pNextACMDriverID;
980   PWINE_ACMDRIVERID      pPreviousACMDriverID;
981 } WINE_ACMDRIVERID;
982
983 /* From builtin.c */
984 extern WINE_ACMBUILTINDRIVER MSACM_BuiltinDrivers[];
985
986 /* From interal.c */
987 extern HANDLE MSACM_hHeap;
988 extern PWINE_ACMDRIVERID MSACM_pFirstACMDriverID;
989 extern PWINE_ACMDRIVERID MSACM_pLastACMDriverID;
990 PWINE_ACMDRIVERID MSACM_RegisterDriver(
991   LPSTR pszDriverAlias, LPSTR pszFileName,
992   PWINE_ACMLOCALDRIVER pLocalDriver);
993 void MSACM_RegisterAllDrivers();
994 PWINE_ACMDRIVERID MSACM_UnregisterDriver(PWINE_ACMDRIVERID p);
995 void MSACM_UnregisterAllDrivers();
996 PWINE_ACMDRIVERID MSACM_GetDriverID(HACMDRIVERID hDriverID);
997 PWINE_ACMDRIVER MSACM_GetDriver(HACMDRIVER hDriver);
998 PWINE_ACMOBJ MSACM_GetObj(HACMOBJ hObj);
999 HDRVR MSACM_OpenDriverProc(DRIVERPROC pfnDriverProc);
1000
1001 #endif  /* __WINE_MSACM_H */
1002
1003