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