diff fuhtark_test/include/winapi/msacm.h @ 1500:91c8c3b7cbf0

add: futhark tests for generating vulkan api
author sam <sam@basx.dev>
date Wed, 26 Nov 2025 21:36:48 +0700
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fuhtark_test/include/winapi/msacm.h	Wed Nov 26 21:36:48 2025 +0700
@@ -0,0 +1,707 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the w64 mingw-runtime package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+#ifndef _INC_ACM
+#define _INC_ACM
+
+#if !defined(_INC_MMREG) || (_INC_MMREG < 142)
+#ifndef RC_INVOKED
+#error MMREG.H version 142 or greater to be included first
+#endif
+#endif
+
+#if defined(UNICODE) && !defined(_UNICODE)
+#ifndef RC_INVOKED
+#warning MSACM.H: Defining _UNICODE because application defined UNICODE
+#endif
+#define _UNICODE
+#endif
+
+#include "pshpack1.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef DRV_MAPPER_PREFERRED_INPUT_GET
+#define DRV_MAPPER_PREFERRED_INPUT_GET (DRV_USER + 0)
+#endif
+
+#ifndef DRV_MAPPER_PREFERRED_OUTPUT_GET
+#define DRV_MAPPER_PREFERRED_OUTPUT_GET (DRV_USER + 2)
+#endif
+
+#ifndef DRVM_MAPPER_STATUS
+#define DRVM_MAPPER (0x2000)
+#define DRVM_MAPPER_STATUS (DRVM_MAPPER+0)
+#endif
+
+#ifndef WIDM_MAPPER_STATUS
+#define WIDM_MAPPER_STATUS (DRVM_MAPPER_STATUS + 0)
+#define WAVEIN_MAPPER_STATUS_DEVICE 0
+#define WAVEIN_MAPPER_STATUS_MAPPED 1
+#define WAVEIN_MAPPER_STATUS_FORMAT 2
+#endif
+
+#ifndef WODM_MAPPER_STATUS
+#define WODM_MAPPER_STATUS (DRVM_MAPPER_STATUS + 0)
+#define WAVEOUT_MAPPER_STATUS_DEVICE 0
+#define WAVEOUT_MAPPER_STATUS_MAPPED 1
+#define WAVEOUT_MAPPER_STATUS_FORMAT 2
+#endif
+
+#define ACMAPI WINAPI
+
+  DECLARE_HANDLE(HACMDRIVERID);
+
+  typedef HACMDRIVERID *PHACMDRIVERID;
+  typedef HACMDRIVERID *LPHACMDRIVERID;
+
+  DECLARE_HANDLE(HACMDRIVER);
+
+  typedef HACMDRIVER *PHACMDRIVER;
+  typedef HACMDRIVER *LPHACMDRIVER;
+
+  DECLARE_HANDLE(HACMSTREAM);
+
+  typedef HACMSTREAM *PHACMSTREAM;
+  typedef HACMSTREAM *LPHACMSTREAM;
+
+  DECLARE_HANDLE(HACMOBJ);
+
+  typedef HACMOBJ *PHACMOBJ;
+  typedef HACMOBJ *LPHACMOBJ;
+
+#ifndef _MMRESULT_
+#define _MMRESULT_
+  typedef UINT MMRESULT;
+#endif
+
+#define ACMERR_BASE (512)
+#define ACMERR_NOTPOSSIBLE (ACMERR_BASE + 0)
+#define ACMERR_BUSY (ACMERR_BASE + 1)
+#define ACMERR_UNPREPARED (ACMERR_BASE + 2)
+#define ACMERR_CANCELED (ACMERR_BASE + 3)
+
+#define MM_ACM_OPEN (MM_STREAM_OPEN)
+#define MM_ACM_CLOSE (MM_STREAM_CLOSE)
+#define MM_ACM_DONE (MM_STREAM_DONE)
+
+  DWORD ACMAPI acmGetVersion(void);
+  MMRESULT ACMAPI acmMetrics(HACMOBJ hao,UINT uMetric,LPVOID pMetric);
+
+#define ACM_METRIC_COUNT_DRIVERS 1
+#define ACM_METRIC_COUNT_CODECS 2
+#define ACM_METRIC_COUNT_CONVERTERS 3
+#define ACM_METRIC_COUNT_FILTERS 4
+#define ACM_METRIC_COUNT_DISABLED 5
+#define ACM_METRIC_COUNT_HARDWARE 6
+#define ACM_METRIC_COUNT_LOCAL_DRIVERS 20
+#define ACM_METRIC_COUNT_LOCAL_CODECS 21
+#define ACM_METRIC_COUNT_LOCAL_CONVERTERS 22
+#define ACM_METRIC_COUNT_LOCAL_FILTERS 23
+#define ACM_METRIC_COUNT_LOCAL_DISABLED 24
+#define ACM_METRIC_HARDWARE_WAVE_INPUT 30
+#define ACM_METRIC_HARDWARE_WAVE_OUTPUT 31
+#define ACM_METRIC_MAX_SIZE_FORMAT 50
+#define ACM_METRIC_MAX_SIZE_FILTER 51
+#define ACM_METRIC_DRIVER_SUPPORT 100
+#define ACM_METRIC_DRIVER_PRIORITY 101
+
+  typedef WINBOOL (CALLBACK *ACMDRIVERENUMCB)(HACMDRIVERID hadid,DWORD_PTR dwInstance,DWORD fdwSupport);
+
+  MMRESULT ACMAPI acmDriverEnum(ACMDRIVERENUMCB fnCallback,DWORD_PTR dwInstance,DWORD fdwEnum);
+
+#define ACM_DRIVERENUMF_NOLOCAL 0x40000000L
+#define ACM_DRIVERENUMF_DISABLED 0x80000000L
+
+  MMRESULT ACMAPI acmDriverID(HACMOBJ hao,LPHACMDRIVERID phadid,DWORD fdwDriverID);
+  MMRESULT ACMAPI acmDriverAddA(LPHACMDRIVERID phadid,HINSTANCE hinstModule,LPARAM lParam,DWORD dwPriority,DWORD fdwAdd);
+  MMRESULT ACMAPI acmDriverAddW(LPHACMDRIVERID phadid,HINSTANCE hinstModule,LPARAM lParam,DWORD dwPriority,DWORD fdwAdd);
+#ifdef _UNICODE
+#define acmDriverAdd acmDriverAddW
+#else
+#define acmDriverAdd acmDriverAddA
+#endif
+
+#define ACM_DRIVERADDF_NAME 0x00000001L
+#define ACM_DRIVERADDF_FUNCTION 0x00000003L
+#define ACM_DRIVERADDF_NOTIFYHWND 0x00000004L
+#define ACM_DRIVERADDF_TYPEMASK 0x00000007L
+#define ACM_DRIVERADDF_LOCAL 0x00000000L
+#define ACM_DRIVERADDF_GLOBAL 0x00000008L
+
+  typedef LRESULT (CALLBACK *ACMDRIVERPROC)(DWORD_PTR,HACMDRIVERID,UINT,LPARAM,LPARAM);
+  typedef ACMDRIVERPROC *LPACMDRIVERPROC;
+
+  MMRESULT ACMAPI acmDriverRemove(HACMDRIVERID hadid,DWORD fdwRemove);
+  MMRESULT ACMAPI acmDriverOpen(LPHACMDRIVER phad,HACMDRIVERID hadid,DWORD fdwOpen);
+  MMRESULT ACMAPI acmDriverClose(HACMDRIVER had,DWORD fdwClose);
+  LRESULT ACMAPI acmDriverMessage(HACMDRIVER had,UINT uMsg,LPARAM lParam1,LPARAM lParam2);
+
+#define ACMDM_USER (DRV_USER + 0x0000)
+#define ACMDM_RESERVED_LOW (DRV_USER + 0x2000)
+#define ACMDM_RESERVED_HIGH (DRV_USER + 0x2FFF)
+
+#define ACMDM_BASE ACMDM_RESERVED_LOW
+
+#define ACMDM_DRIVER_ABOUT (ACMDM_BASE + 11)
+
+  MMRESULT ACMAPI acmDriverPriority(HACMDRIVERID hadid,DWORD dwPriority,DWORD fdwPriority);
+
+#define ACM_DRIVERPRIORITYF_ENABLE 0x00000001L
+#define ACM_DRIVERPRIORITYF_DISABLE 0x00000002L
+#define ACM_DRIVERPRIORITYF_ABLEMASK 0x00000003L
+#define ACM_DRIVERPRIORITYF_BEGIN 0x00010000L
+#define ACM_DRIVERPRIORITYF_END 0x00020000L
+#define ACM_DRIVERPRIORITYF_DEFERMASK 0x00030000L
+
+#define ACMDRIVERDETAILS_SHORTNAME_CHARS 32
+#define ACMDRIVERDETAILS_LONGNAME_CHARS 128
+#define ACMDRIVERDETAILS_COPYRIGHT_CHARS 80
+#define ACMDRIVERDETAILS_LICENSING_CHARS 128
+#define ACMDRIVERDETAILS_FEATURES_CHARS 512
+
+  typedef struct tACMDRIVERDETAILSA {
+    DWORD cbStruct;
+    FOURCC fccType;
+    FOURCC fccComp;
+    WORD wMid;
+    WORD wPid;
+    DWORD vdwACM;
+    DWORD vdwDriver;
+    DWORD fdwSupport;
+    DWORD cFormatTags;
+    DWORD cFilterTags;
+    HICON hicon;
+    char szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];
+    char szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];
+    char szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];
+    char szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];
+    char szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];
+  } ACMDRIVERDETAILSA,*PACMDRIVERDETAILSA,*LPACMDRIVERDETAILSA;
+
+  typedef struct tACMDRIVERDETAILSW {
+    DWORD cbStruct;
+    FOURCC fccType;
+    FOURCC fccComp;
+    WORD wMid;
+    WORD wPid;
+    DWORD vdwACM;
+    DWORD vdwDriver;
+    DWORD fdwSupport;
+    DWORD cFormatTags;
+    DWORD cFilterTags;
+    HICON hicon;
+    WCHAR szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];
+    WCHAR szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];
+    WCHAR szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];
+    WCHAR szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];
+    WCHAR szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];
+  } ACMDRIVERDETAILSW,*PACMDRIVERDETAILSW,*LPACMDRIVERDETAILSW;
+#ifdef _UNICODE
+#define ACMDRIVERDETAILS ACMDRIVERDETAILSW
+#define PACMDRIVERDETAILS PACMDRIVERDETAILSW
+#define LPACMDRIVERDETAILS LPACMDRIVERDETAILSW
+#else
+#define ACMDRIVERDETAILS ACMDRIVERDETAILSA
+#define PACMDRIVERDETAILS PACMDRIVERDETAILSA
+#define LPACMDRIVERDETAILS LPACMDRIVERDETAILSA
+#endif
+
+#define ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC mmioFOURCC('a','u','d','c')
+#define ACMDRIVERDETAILS_FCCCOMP_UNDEFINED mmioFOURCC('\0','\0','\0','\0')
+
+#define ACMDRIVERDETAILS_SUPPORTF_CODEC 0x00000001L
+#define ACMDRIVERDETAILS_SUPPORTF_CONVERTER 0x00000002L
+#define ACMDRIVERDETAILS_SUPPORTF_FILTER 0x00000004L
+#define ACMDRIVERDETAILS_SUPPORTF_HARDWARE 0x00000008L
+#define ACMDRIVERDETAILS_SUPPORTF_ASYNC 0x00000010L
+#define ACMDRIVERDETAILS_SUPPORTF_LOCAL 0x40000000L
+#define ACMDRIVERDETAILS_SUPPORTF_DISABLED 0x80000000L
+
+  MMRESULT ACMAPI acmDriverDetailsA(HACMDRIVERID hadid,LPACMDRIVERDETAILSA padd,DWORD fdwDetails);
+  MMRESULT ACMAPI acmDriverDetailsW(HACMDRIVERID hadid,LPACMDRIVERDETAILSW padd,DWORD fdwDetails);
+#ifdef _UNICODE
+#define acmDriverDetails acmDriverDetailsW
+#else
+#define acmDriverDetails acmDriverDetailsA
+#endif
+
+#define ACMFORMATTAGDETAILS_FORMATTAG_CHARS 48
+
+  typedef struct tACMFORMATTAGDETAILSA {
+    DWORD cbStruct;
+    DWORD dwFormatTagIndex;
+    DWORD dwFormatTag;
+    DWORD cbFormatSize;
+    DWORD fdwSupport;
+    DWORD cStandardFormats;
+    char szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
+  } ACMFORMATTAGDETAILSA,*PACMFORMATTAGDETAILSA,*LPACMFORMATTAGDETAILSA;
+
+  typedef struct tACMFORMATTAGDETAILSW {
+    DWORD cbStruct;
+    DWORD dwFormatTagIndex;
+    DWORD dwFormatTag;
+    DWORD cbFormatSize;
+    DWORD fdwSupport;
+    DWORD cStandardFormats;
+    WCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
+  } ACMFORMATTAGDETAILSW,*PACMFORMATTAGDETAILSW,*LPACMFORMATTAGDETAILSW;
+#ifdef _UNICODE
+#define ACMFORMATTAGDETAILS ACMFORMATTAGDETAILSW
+#define PACMFORMATTAGDETAILS PACMFORMATTAGDETAILSW
+#define LPACMFORMATTAGDETAILS LPACMFORMATTAGDETAILSW
+#else
+#define ACMFORMATTAGDETAILS ACMFORMATTAGDETAILSA
+#define PACMFORMATTAGDETAILS PACMFORMATTAGDETAILSA
+#define LPACMFORMATTAGDETAILS LPACMFORMATTAGDETAILSA
+#endif
+
+  MMRESULT ACMAPI acmFormatTagDetailsA(HACMDRIVER had,LPACMFORMATTAGDETAILSA paftd,DWORD fdwDetails);
+  MMRESULT ACMAPI acmFormatTagDetailsW(HACMDRIVER had,LPACMFORMATTAGDETAILSW paftd,DWORD fdwDetails);
+#ifdef _UNICODE
+#define acmFormatTagDetails acmFormatTagDetailsW
+#else
+#define acmFormatTagDetails acmFormatTagDetailsA
+#endif
+
+#define ACM_FORMATTAGDETAILSF_INDEX 0x00000000L
+#define ACM_FORMATTAGDETAILSF_FORMATTAG 0x00000001L
+#define ACM_FORMATTAGDETAILSF_LARGESTSIZE 0x00000002L
+#define ACM_FORMATTAGDETAILSF_QUERYMASK 0x0000000FL
+
+  typedef WINBOOL (CALLBACK *ACMFORMATTAGENUMCBA)(HACMDRIVERID hadid,LPACMFORMATTAGDETAILSA paftd,DWORD_PTR dwInstance,DWORD fdwSupport);
+  typedef WINBOOL (CALLBACK *ACMFORMATTAGENUMCBW)(HACMDRIVERID hadid,LPACMFORMATTAGDETAILSW paftd,DWORD_PTR dwInstance,DWORD fdwSupport);
+
+  MMRESULT ACMAPI acmFormatTagEnumA(HACMDRIVER had,LPACMFORMATTAGDETAILSA paftd,ACMFORMATTAGENUMCBA fnCallback,DWORD_PTR dwInstance,DWORD fdwEnum);
+  MMRESULT ACMAPI acmFormatTagEnumW(HACMDRIVER had,LPACMFORMATTAGDETAILSW paftd,ACMFORMATTAGENUMCBW fnCallback,DWORD_PTR dwInstance,DWORD fdwEnum);
+#ifdef _UNICODE
+#define ACMFORMATTAGENUMCB ACMFORMATTAGENUMCBW
+#define acmFormatTagEnum acmFormatTagEnumW
+#else
+#define ACMFORMATTAGENUMCB ACMFORMATTAGENUMCBA
+#define acmFormatTagEnum acmFormatTagEnumA
+#endif
+
+#define ACMFORMATDETAILS_FORMAT_CHARS 128
+
+  typedef struct tACMFORMATDETAILSA {
+    DWORD cbStruct;
+    DWORD dwFormatIndex;
+    DWORD dwFormatTag;
+    DWORD fdwSupport;
+    LPWAVEFORMATEX pwfx;
+    DWORD cbwfx;
+    char szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
+  } ACMFORMATDETAILSA,*PACMFORMATDETAILSA,*LPACMFORMATDETAILSA;
+
+  typedef struct tACMFORMATDETAILSW {
+    DWORD cbStruct;
+    DWORD dwFormatIndex;
+    DWORD dwFormatTag;
+    DWORD fdwSupport;
+    LPWAVEFORMATEX pwfx;
+    DWORD cbwfx;
+    WCHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
+  } ACMFORMATDETAILSW,*PACMFORMATDETAILSW,*LPACMFORMATDETAILSW;
+#ifdef _UNICODE
+#define ACMFORMATDETAILS ACMFORMATDETAILSW
+#define PACMFORMATDETAILS PACMFORMATDETAILSW
+#define LPACMFORMATDETAILS LPACMFORMATDETAILSW
+#else
+#define ACMFORMATDETAILS ACMFORMATDETAILSA
+#define PACMFORMATDETAILS PACMFORMATDETAILSA
+#define LPACMFORMATDETAILS LPACMFORMATDETAILSA
+#endif
+
+  MMRESULT ACMAPI acmFormatDetailsA(HACMDRIVER had,LPACMFORMATDETAILSA pafd,DWORD fdwDetails);
+  MMRESULT ACMAPI acmFormatDetailsW(HACMDRIVER had,LPACMFORMATDETAILSW pafd,DWORD fdwDetails);
+#ifdef _UNICODE
+#define acmFormatDetails acmFormatDetailsW
+#else
+#define acmFormatDetails acmFormatDetailsA
+#endif
+
+#define ACM_FORMATDETAILSF_INDEX 0x00000000L
+#define ACM_FORMATDETAILSF_FORMAT 0x00000001L
+#define ACM_FORMATDETAILSF_QUERYMASK 0x0000000FL
+
+  typedef WINBOOL (CALLBACK *ACMFORMATENUMCBA)(HACMDRIVERID hadid,LPACMFORMATDETAILSA pafd,DWORD_PTR dwInstance,DWORD fdwSupport);
+  typedef WINBOOL (CALLBACK *ACMFORMATENUMCBW)(HACMDRIVERID hadid,LPACMFORMATDETAILSW pafd,DWORD_PTR dwInstance,DWORD fdwSupport);
+
+  MMRESULT ACMAPI acmFormatEnumA(HACMDRIVER had,LPACMFORMATDETAILSA pafd,ACMFORMATENUMCBA fnCallback,DWORD_PTR dwInstance,DWORD fdwEnum);
+  MMRESULT ACMAPI acmFormatEnumW(HACMDRIVER had,LPACMFORMATDETAILSW pafd,ACMFORMATENUMCBW fnCallback,DWORD_PTR dwInstance,DWORD fdwEnum);
+#ifdef _UNICODE
+#define ACMFORMATENUMCB ACMFORMATENUMCBW
+#define acmFormatEnum acmFormatEnumW
+#else
+#define ACMFORMATENUMCB ACMFORMATENUMCBA
+#define acmFormatEnum acmFormatEnumA
+#endif
+
+#define ACM_FORMATENUMF_WFORMATTAG 0x00010000L
+#define ACM_FORMATENUMF_NCHANNELS 0x00020000L
+#define ACM_FORMATENUMF_NSAMPLESPERSEC 0x00040000L
+#define ACM_FORMATENUMF_WBITSPERSAMPLE 0x00080000L
+#define ACM_FORMATENUMF_CONVERT 0x00100000L
+#define ACM_FORMATENUMF_SUGGEST 0x00200000L
+#define ACM_FORMATENUMF_HARDWARE 0x00400000L
+#define ACM_FORMATENUMF_INPUT 0x00800000L
+#define ACM_FORMATENUMF_OUTPUT 0x01000000L
+
+  MMRESULT ACMAPI acmFormatSuggest
+    (HACMDRIVER had,LPWAVEFORMATEX pwfxSrc,LPWAVEFORMATEX pwfxDst,DWORD cbwfxDst,DWORD fdwSuggest);
+
+#define ACM_FORMATSUGGESTF_WFORMATTAG 0x00010000L
+#define ACM_FORMATSUGGESTF_NCHANNELS 0x00020000L
+#define ACM_FORMATSUGGESTF_NSAMPLESPERSEC 0x00040000L
+#define ACM_FORMATSUGGESTF_WBITSPERSAMPLE 0x00080000L
+
+#define ACM_FORMATSUGGESTF_TYPEMASK 0x00FF0000L
+
+#define ACMHELPMSGSTRINGA "acmchoose_help"
+#define ACMHELPMSGSTRINGW L"acmchoose_help"
+#define ACMHELPMSGCONTEXTMENUA "acmchoose_contextmenu"
+#define ACMHELPMSGCONTEXTMENUW L"acmchoose_contextmenu"
+#define ACMHELPMSGCONTEXTHELPA "acmchoose_contexthelp"
+#define ACMHELPMSGCONTEXTHELPW L"acmchoose_contexthelp"
+#ifdef _UNICODE
+#define ACMHELPMSGSTRING ACMHELPMSGSTRINGW
+#define ACMHELPMSGCONTEXTMENU ACMHELPMSGCONTEXTMENUW
+#define ACMHELPMSGCONTEXTHELP ACMHELPMSGCONTEXTHELPW
+#else
+#define ACMHELPMSGSTRING ACMHELPMSGSTRINGA
+#define ACMHELPMSGCONTEXTMENU ACMHELPMSGCONTEXTMENUA
+#define ACMHELPMSGCONTEXTHELP ACMHELPMSGCONTEXTHELPA
+#endif
+
+#define MM_ACM_FORMATCHOOSE (0x8000)
+
+#define FORMATCHOOSE_MESSAGE 0
+#define FORMATCHOOSE_FORMATTAG_VERIFY (FORMATCHOOSE_MESSAGE+0)
+#define FORMATCHOOSE_FORMAT_VERIFY (FORMATCHOOSE_MESSAGE+1)
+#define FORMATCHOOSE_CUSTOM_VERIFY (FORMATCHOOSE_MESSAGE+2)
+
+  typedef UINT (CALLBACK *ACMFORMATCHOOSEHOOKPROCA)(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
+  typedef UINT (CALLBACK *ACMFORMATCHOOSEHOOKPROCW)(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
+#ifdef _UNICODE
+#define ACMFORMATCHOOSEHOOKPROC ACMFORMATCHOOSEHOOKPROCW
+#else
+#define ACMFORMATCHOOSEHOOKPROC ACMFORMATCHOOSEHOOKPROCA
+#endif
+
+  typedef struct tACMFORMATCHOOSEA {
+    DWORD cbStruct;
+    DWORD fdwStyle;
+    HWND hwndOwner;
+    LPWAVEFORMATEX pwfx;
+    DWORD cbwfx;
+    LPCSTR pszTitle;
+    char szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
+    char szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
+    LPSTR pszName;
+    DWORD cchName;
+    DWORD fdwEnum;
+    LPWAVEFORMATEX pwfxEnum;
+    HINSTANCE hInstance;
+    LPCSTR pszTemplateName;
+    LPARAM lCustData;
+    ACMFORMATCHOOSEHOOKPROCA pfnHook;
+  } ACMFORMATCHOOSEA,*PACMFORMATCHOOSEA,*LPACMFORMATCHOOSEA;
+
+  typedef struct tACMFORMATCHOOSEW {
+    DWORD cbStruct;
+    DWORD fdwStyle;
+    HWND hwndOwner;
+    LPWAVEFORMATEX pwfx;
+    DWORD cbwfx;
+    LPCWSTR pszTitle;
+    WCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
+    WCHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
+    LPWSTR pszName;
+    DWORD cchName;
+    DWORD fdwEnum;
+    LPWAVEFORMATEX pwfxEnum;
+    HINSTANCE hInstance;
+    LPCWSTR pszTemplateName;
+    LPARAM lCustData;
+    ACMFORMATCHOOSEHOOKPROCW pfnHook;
+  } ACMFORMATCHOOSEW,*PACMFORMATCHOOSEW,*LPACMFORMATCHOOSEW;
+#ifdef _UNICODE
+#define ACMFORMATCHOOSE ACMFORMATCHOOSEW
+#define PACMFORMATCHOOSE PACMFORMATCHOOSEW
+#define LPACMFORMATCHOOSE LPACMFORMATCHOOSEW
+#else
+#define ACMFORMATCHOOSE ACMFORMATCHOOSEA
+#define PACMFORMATCHOOSE PACMFORMATCHOOSEA
+#define LPACMFORMATCHOOSE LPACMFORMATCHOOSEA
+#endif
+
+#define ACMFORMATCHOOSE_STYLEF_SHOWHELP 0x00000004L
+#define ACMFORMATCHOOSE_STYLEF_ENABLEHOOK 0x00000008L
+#define ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATE 0x00000010L
+#define ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATEHANDLE 0x00000020L
+#define ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT 0x00000040L
+#define ACMFORMATCHOOSE_STYLEF_CONTEXTHELP 0x00000080L
+
+  MMRESULT ACMAPI acmFormatChooseA(LPACMFORMATCHOOSEA pafmtc);
+  MMRESULT ACMAPI acmFormatChooseW(LPACMFORMATCHOOSEW pafmtc);
+#ifdef _UNICODE
+#define acmFormatChoose acmFormatChooseW
+#else
+#define acmFormatChoose acmFormatChooseA
+#endif
+
+#define ACMFILTERTAGDETAILS_FILTERTAG_CHARS 48
+
+  typedef struct tACMFILTERTAGDETAILSA {
+    DWORD cbStruct;
+    DWORD dwFilterTagIndex;
+    DWORD dwFilterTag;
+    DWORD cbFilterSize;
+    DWORD fdwSupport;
+    DWORD cStandardFilters;
+    char szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
+  } ACMFILTERTAGDETAILSA,*PACMFILTERTAGDETAILSA,*LPACMFILTERTAGDETAILSA;
+
+  typedef struct tACMFILTERTAGDETAILSW {
+    DWORD cbStruct;
+    DWORD dwFilterTagIndex;
+    DWORD dwFilterTag;
+    DWORD cbFilterSize;
+    DWORD fdwSupport;
+    DWORD cStandardFilters;
+    WCHAR szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
+  } ACMFILTERTAGDETAILSW,*PACMFILTERTAGDETAILSW,*LPACMFILTERTAGDETAILSW;
+#ifdef _UNICODE
+#define ACMFILTERTAGDETAILS ACMFILTERTAGDETAILSW
+#define PACMFILTERTAGDETAILS PACMFILTERTAGDETAILSW
+#define LPACMFILTERTAGDETAILS LPACMFILTERTAGDETAILSW
+#else
+#define ACMFILTERTAGDETAILS ACMFILTERTAGDETAILSA
+#define PACMFILTERTAGDETAILS PACMFILTERTAGDETAILSA
+#define LPACMFILTERTAGDETAILS LPACMFILTERTAGDETAILSA
+#endif
+
+  MMRESULT ACMAPI acmFilterTagDetailsA(HACMDRIVER had,LPACMFILTERTAGDETAILSA paftd,DWORD fdwDetails);
+  MMRESULT ACMAPI acmFilterTagDetailsW(HACMDRIVER had,LPACMFILTERTAGDETAILSW paftd,DWORD fdwDetails);
+#ifdef _UNICODE
+#define acmFilterTagDetails acmFilterTagDetailsW
+#else
+#define acmFilterTagDetails acmFilterTagDetailsA
+#endif
+
+#define ACM_FILTERTAGDETAILSF_INDEX 0x00000000L
+#define ACM_FILTERTAGDETAILSF_FILTERTAG 0x00000001L
+#define ACM_FILTERTAGDETAILSF_LARGESTSIZE 0x00000002L
+#define ACM_FILTERTAGDETAILSF_QUERYMASK 0x0000000FL
+
+  typedef WINBOOL (CALLBACK *ACMFILTERTAGENUMCBA)(HACMDRIVERID hadid,LPACMFILTERTAGDETAILSA paftd,DWORD_PTR dwInstance,DWORD fdwSupport);
+  typedef WINBOOL (CALLBACK *ACMFILTERTAGENUMCBW)(HACMDRIVERID hadid,LPACMFILTERTAGDETAILSW paftd,DWORD_PTR dwInstance,DWORD fdwSupport);
+
+  MMRESULT ACMAPI acmFilterTagEnumA(HACMDRIVER had,LPACMFILTERTAGDETAILSA paftd,ACMFILTERTAGENUMCBA fnCallback,DWORD_PTR dwInstance,DWORD fdwEnum);
+  MMRESULT ACMAPI acmFilterTagEnumW(HACMDRIVER had,LPACMFILTERTAGDETAILSW paftd,ACMFILTERTAGENUMCBW fnCallback,DWORD_PTR dwInstance,DWORD fdwEnum);
+#ifdef _UNICODE
+#define ACMFILTERTAGENUMCB ACMFILTERTAGENUMCBW
+#define acmFilterTagEnum acmFilterTagEnumW
+#else
+#define ACMFILTERTAGENUMCB ACMFILTERTAGENUMCBA
+#define acmFilterTagEnum acmFilterTagEnumA
+#endif
+
+#define ACMFILTERDETAILS_FILTER_CHARS 128
+
+  typedef struct tACMFILTERDETAILSA {
+    DWORD cbStruct;
+    DWORD dwFilterIndex;
+    DWORD dwFilterTag;
+    DWORD fdwSupport;
+    LPWAVEFILTER pwfltr;
+    DWORD cbwfltr;
+    char szFilter[ACMFILTERDETAILS_FILTER_CHARS];
+  } ACMFILTERDETAILSA,*PACMFILTERDETAILSA,*LPACMFILTERDETAILSA;
+
+  typedef struct tACMFILTERDETAILSW {
+    DWORD cbStruct;
+    DWORD dwFilterIndex;
+    DWORD dwFilterTag;
+    DWORD fdwSupport;
+    LPWAVEFILTER pwfltr;
+    DWORD cbwfltr;
+    WCHAR szFilter[ACMFILTERDETAILS_FILTER_CHARS];
+  } ACMFILTERDETAILSW,*PACMFILTERDETAILSW,*LPACMFILTERDETAILSW;
+#ifdef _UNICODE
+#define ACMFILTERDETAILS ACMFILTERDETAILSW
+#define PACMFILTERDETAILS PACMFILTERDETAILSW
+#define LPACMFILTERDETAILS LPACMFILTERDETAILSW
+#else
+#define ACMFILTERDETAILS ACMFILTERDETAILSA
+#define PACMFILTERDETAILS PACMFILTERDETAILSA
+#define LPACMFILTERDETAILS LPACMFILTERDETAILSA
+#endif
+
+  MMRESULT ACMAPI acmFilterDetailsA(HACMDRIVER had,LPACMFILTERDETAILSA pafd,DWORD fdwDetails);
+  MMRESULT ACMAPI acmFilterDetailsW(HACMDRIVER had,LPACMFILTERDETAILSW pafd,DWORD fdwDetails);
+#ifdef _UNICODE
+#define acmFilterDetails acmFilterDetailsW
+#else
+#define acmFilterDetails acmFilterDetailsA
+#endif
+
+#define ACM_FILTERDETAILSF_INDEX 0x00000000L
+#define ACM_FILTERDETAILSF_FILTER 0x00000001L
+#define ACM_FILTERDETAILSF_QUERYMASK 0x0000000FL
+
+  typedef WINBOOL (CALLBACK *ACMFILTERENUMCBA)(HACMDRIVERID hadid,LPACMFILTERDETAILSA pafd,DWORD_PTR dwInstance,DWORD fdwSupport);
+  typedef WINBOOL (CALLBACK *ACMFILTERENUMCBW)(HACMDRIVERID hadid,LPACMFILTERDETAILSW pafd,DWORD_PTR dwInstance,DWORD fdwSupport);
+
+  MMRESULT ACMAPI acmFilterEnumA(HACMDRIVER had,LPACMFILTERDETAILSA pafd,ACMFILTERENUMCBA fnCallback,DWORD_PTR dwInstance,DWORD fdwEnum);
+  MMRESULT ACMAPI acmFilterEnumW(HACMDRIVER had,LPACMFILTERDETAILSW pafd,ACMFILTERENUMCBW fnCallback,DWORD_PTR dwInstance,DWORD fdwEnum);
+#ifdef _UNICODE
+#define ACMFILTERENUMCB ACMFILTERENUMCBW
+#define acmFilterEnum acmFilterEnumW
+#else
+#define ACMFILTERENUMCB ACMFILTERENUMCBA
+#define acmFilterEnum acmFilterEnumA
+#endif
+
+#define ACM_FILTERENUMF_DWFILTERTAG 0x00010000L
+
+#define MM_ACM_FILTERCHOOSE (0x8000)
+
+#define FILTERCHOOSE_MESSAGE 0
+#define FILTERCHOOSE_FILTERTAG_VERIFY (FILTERCHOOSE_MESSAGE+0)
+#define FILTERCHOOSE_FILTER_VERIFY (FILTERCHOOSE_MESSAGE+1)
+#define FILTERCHOOSE_CUSTOM_VERIFY (FILTERCHOOSE_MESSAGE+2)
+
+  typedef UINT (CALLBACK *ACMFILTERCHOOSEHOOKPROCA)(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
+  typedef UINT (CALLBACK *ACMFILTERCHOOSEHOOKPROCW)(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam);
+#ifdef _UNICODE
+#define ACMFILTERCHOOSEHOOKPROC ACMFILTERCHOOSEHOOKPROCW
+#else
+#define ACMFILTERCHOOSEHOOKPROC ACMFILTERCHOOSEHOOKPROCA
+#endif
+
+  typedef struct tACMFILTERCHOOSEA {
+    DWORD cbStruct;
+    DWORD fdwStyle;
+    HWND hwndOwner;
+    LPWAVEFILTER pwfltr;
+    DWORD cbwfltr;
+    LPCSTR pszTitle;
+    char szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
+    char szFilter[ACMFILTERDETAILS_FILTER_CHARS];
+    LPSTR pszName;
+    DWORD cchName;
+    DWORD fdwEnum;
+    LPWAVEFILTER pwfltrEnum;
+    HINSTANCE hInstance;
+    LPCSTR pszTemplateName;
+    LPARAM lCustData;
+    ACMFILTERCHOOSEHOOKPROCA pfnHook;
+  } ACMFILTERCHOOSEA,*PACMFILTERCHOOSEA,*LPACMFILTERCHOOSEA;
+
+  typedef struct tACMFILTERCHOOSEW {
+    DWORD cbStruct;
+    DWORD fdwStyle;
+    HWND hwndOwner;
+    LPWAVEFILTER pwfltr;
+    DWORD cbwfltr;
+    LPCWSTR pszTitle;
+    WCHAR szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
+    WCHAR szFilter[ACMFILTERDETAILS_FILTER_CHARS];
+    LPWSTR pszName;
+    DWORD cchName;
+    DWORD fdwEnum;
+    LPWAVEFILTER pwfltrEnum;
+    HINSTANCE hInstance;
+    LPCWSTR pszTemplateName;
+    LPARAM lCustData;
+    ACMFILTERCHOOSEHOOKPROCW pfnHook;
+  } ACMFILTERCHOOSEW,*PACMFILTERCHOOSEW,*LPACMFILTERCHOOSEW;
+#ifdef _UNICODE
+#define ACMFILTERCHOOSE ACMFILTERCHOOSEW
+#define PACMFILTERCHOOSE PACMFILTERCHOOSEW
+#define LPACMFILTERCHOOSE LPACMFILTERCHOOSEW
+#else
+#define ACMFILTERCHOOSE ACMFILTERCHOOSEA
+#define PACMFILTERCHOOSE PACMFILTERCHOOSEA
+#define LPACMFILTERCHOOSE LPACMFILTERCHOOSEA
+#endif
+
+#define ACMFILTERCHOOSE_STYLEF_SHOWHELP 0x00000004L
+#define ACMFILTERCHOOSE_STYLEF_ENABLEHOOK 0x00000008L
+#define ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATE 0x00000010L
+#define ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATEHANDLE 0x00000020L
+#define ACMFILTERCHOOSE_STYLEF_INITTOFILTERSTRUCT 0x00000040L
+#define ACMFILTERCHOOSE_STYLEF_CONTEXTHELP 0x00000080L
+
+  MMRESULT ACMAPI acmFilterChooseA(LPACMFILTERCHOOSEA pafltrc);
+  MMRESULT ACMAPI acmFilterChooseW(LPACMFILTERCHOOSEW pafltrc);
+#ifdef _UNICODE
+#define acmFilterChoose acmFilterChooseW
+#else
+#define acmFilterChoose acmFilterChooseA
+#endif
+
+#ifdef _WIN64
+#define _DRVRESERVED 15
+#else
+#define _DRVRESERVED 10
+#endif
+
+  typedef struct tACMSTREAMHEADER {
+    DWORD cbStruct;
+    DWORD fdwStatus;
+    DWORD_PTR dwUser;
+    LPBYTE pbSrc;
+    DWORD cbSrcLength;
+    DWORD cbSrcLengthUsed;
+    DWORD_PTR dwSrcUser;
+    LPBYTE pbDst;
+    DWORD cbDstLength;
+    DWORD cbDstLengthUsed;
+    DWORD_PTR dwDstUser;
+    DWORD dwReservedDriver[_DRVRESERVED];
+  } ACMSTREAMHEADER,*PACMSTREAMHEADER,*LPACMSTREAMHEADER;
+
+#define ACMSTREAMHEADER_STATUSF_DONE 0x00010000L
+#define ACMSTREAMHEADER_STATUSF_PREPARED 0x00020000L
+#define ACMSTREAMHEADER_STATUSF_INQUEUE 0x00100000L
+
+  MMRESULT ACMAPI acmStreamOpen(LPHACMSTREAM phas,HACMDRIVER had,LPWAVEFORMATEX pwfxSrc,LPWAVEFORMATEX pwfxDst,LPWAVEFILTER pwfltr,DWORD_PTR dwCallback,DWORD_PTR dwInstance,DWORD fdwOpen);
+
+#define ACM_STREAMOPENF_QUERY 0x00000001
+#define ACM_STREAMOPENF_ASYNC 0x00000002
+#define ACM_STREAMOPENF_NONREALTIME 0x00000004
+
+  MMRESULT ACMAPI acmStreamClose
+    (HACMSTREAM has,DWORD fdwClose);
+
+  MMRESULT ACMAPI acmStreamSize(HACMSTREAM has,DWORD cbInput,LPDWORD pdwOutputBytes,DWORD fdwSize);
+
+#define ACM_STREAMSIZEF_SOURCE 0x00000000L
+#define ACM_STREAMSIZEF_DESTINATION 0x00000001L
+#define ACM_STREAMSIZEF_QUERYMASK 0x0000000FL
+
+  MMRESULT ACMAPI acmStreamReset(HACMSTREAM has,DWORD fdwReset);
+  MMRESULT ACMAPI acmStreamMessage(HACMSTREAM has,UINT uMsg,LPARAM lParam1,LPARAM lParam2);
+  MMRESULT ACMAPI acmStreamConvert(HACMSTREAM has,LPACMSTREAMHEADER pash,DWORD fdwConvert);
+
+#define ACM_STREAMCONVERTF_BLOCKALIGN 0x00000004
+#define ACM_STREAMCONVERTF_START 0x00000010
+#define ACM_STREAMCONVERTF_END 0x00000020
+
+  MMRESULT ACMAPI acmStreamPrepareHeader(HACMSTREAM has,LPACMSTREAMHEADER pash,DWORD fdwPrepare);
+  MMRESULT ACMAPI acmStreamUnprepareHeader(HACMSTREAM has,LPACMSTREAMHEADER pash,DWORD fdwUnprepare);
+
+#include "poppack.h"
+
+#ifdef __cplusplus
+}
+#endif
+#endif