1 /** 2 * @file msacm.h 3 * Copyright 2012, 2013 MinGW.org project 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a 6 * copy of this software and associated documentation files (the "Software"), 7 * to deal in the Software without restriction, including without limitation 8 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 * and/or sell copies of the Software, and to permit persons to whom the 10 * Software is furnished to do so, subject to the following conditions: 11 * 12 * The above copyright notice and this permission notice (including the next 13 * paragraph) shall be included in all copies or substantial portions of the 14 * Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22 * DEALINGS IN THE SOFTWARE. 23 */ 24 #ifndef _MSACM_H 25 #define _MSACM_H 26 #pragma GCC system_header 27 #include <_mingw.h> 28 29 #ifdef __cplusplus 30 extern "C" { 31 #endif 32 33 DECLARE_HANDLE(HACMDRIVERID); 34 typedef HACMDRIVERID *PHACMDRIVERID; 35 typedef HACMDRIVERID *LPHACMDRIVERID; 36 DECLARE_HANDLE(HACMDRIVER); 37 typedef HACMDRIVER *PHACMDRIVER; 38 typedef HACMDRIVER *LPHACMDRIVER; 39 DECLARE_HANDLE(HACMSTREAM); 40 typedef HACMSTREAM *PHACMSTREAM; 41 typedef HACMSTREAM *LPHACMSTREAM; 42 DECLARE_HANDLE(HACMOBJ); 43 typedef HACMOBJ *PHACMOBJ; 44 typedef HACMOBJ *LPHACMOBJ; 45 46 /*found through experimentation*/ 47 #define ACMDRIVERDETAILS_SHORTNAME_CHARS 32 48 #define ACMDRIVERDETAILS_LONGNAME_CHARS 128 49 #define ACMDRIVERDETAILS_COPYRIGHT_CHARS 80 50 #define ACMDRIVERDETAILS_LICENSING_CHARS 128 51 52 /*I don't know the right values for these macros*/ 53 #define ACMFORMATDETAILS_FORMAT_CHARS 256 54 #define ACMFORMATTAGDETAILS_FORMATTAG_CHARS 256 55 #define ACMDRIVERDETAILS_FEATURES_CHARS 256 56 57 /*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmformatdetails_str.asp*/ 58 typedef struct { 59 DWORD cbStruct; 60 DWORD dwFormatIndex; 61 DWORD dwFormatTag; 62 DWORD fdwSupport; 63 LPWAVEFORMATEX pwfx; 64 DWORD cbwfx; 65 char szFormat[ACMFORMATDETAILS_FORMAT_CHARS]; 66 } ACMFORMATDETAILSA, *LPACMFORMATDETAILSA; 67 typedef struct { 68 DWORD cbStruct; 69 DWORD dwFormatIndex; 70 DWORD dwFormatTag; 71 DWORD fdwSupport; 72 LPWAVEFORMATEX pwfx; 73 DWORD cbwfx; 74 WCHAR szFormat[ACMFORMATDETAILS_FORMAT_CHARS]; 75 } ACMFORMATDETAILSW, *LPACMFORMATDETAILSW; 76 77 /*msdn.microsoft.com/en-us/library/dd742926%28VS.85%29.aspx*/ 78 typedef struct { 79 DWORD cbStruct; 80 DWORD fdwStatus; 81 DWORD_PTR dwUser; 82 LPBYTE pbSrc; 83 DWORD cbSrcLength; 84 DWORD cbSrcLengthUsed; 85 DWORD_PTR dwSrcUser; 86 LPBYTE pbDst; 87 DWORD cbDstLength; 88 DWORD cbDstLengthUsed; 89 DWORD_PTR dwDstUser; 90 DWORD dwReservedDriver[10]; 91 } ACMSTREAMHEADER, *LPACMSTREAMHEADER; 92 93 /*msdn.microsoft.com/en-us/library/dd757711%28v=VS.85%29.aspx*/ 94 typedef struct { 95 DWORD cbStruct; 96 DWORD dwFilterTag; 97 DWORD fdwFilter; 98 DWORD dwReserved[5]; 99 } WAVEFILTER, *LPWAVEFILTER; 100 101 /*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmformattagdetails_str.asp*/ 102 typedef struct { 103 DWORD cbStruct; 104 DWORD dwFormatTagIndex; 105 DWORD dwFormatTag; 106 DWORD cbFormatSize; 107 DWORD fdwSupport; 108 DWORD cStandardFormats; 109 char szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS]; 110 } ACMFORMATTAGDETAILSA, *LPACMFORMATTAGDETAILSA; 111 typedef struct { 112 DWORD cbStruct; 113 DWORD dwFormatTagIndex; 114 DWORD dwFormatTag; 115 DWORD cbFormatSize; 116 DWORD fdwSupport; 117 DWORD cStandardFormats; 118 WCHAR szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS]; 119 } ACMFORMATTAGDETAILSW, *LPACMFORMATTAGDETAILSW; 120 121 /*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmdriverdetails_str.asp*/ 122 typedef struct { 123 DWORD cbStruct; 124 FOURCC fccType; 125 FOURCC fccComp; 126 WORD wMid; 127 WORD wPid; 128 DWORD vdwACM; 129 DWORD vdwDriver; 130 DWORD fdwSupport; 131 DWORD cFormatTags; 132 DWORD cFilterTags; 133 HICON hicon; 134 char szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS]; 135 char szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS]; 136 char szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS]; 137 char szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS]; 138 char szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS]; 139 } ACMDRIVERDETAILSA, *LPACMDRIVERDETAILSA; 140 typedef struct { 141 DWORD cbStruct; 142 FOURCC fccType; 143 FOURCC fccComp; 144 WORD wMid; 145 WORD wPid; 146 DWORD vdwACM; 147 DWORD vdwDriver; 148 DWORD fdwSupport; 149 DWORD cFormatTags; 150 DWORD cFilterTags; 151 HICON hicon; 152 WCHAR szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS]; 153 WCHAR szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS]; 154 WCHAR szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS]; 155 WCHAR szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS]; 156 WCHAR szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS]; 157 } ACMDRIVERDETAILSW, *LPACMDRIVERDETAILSW; 158 159 /*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmformatenumcallback.asp*/ 160 typedef BOOL (CALLBACK *ACMFORMATENUMCBA) ( 161 HACMDRIVERID hadid, 162 LPACMFORMATDETAILSA pafd, 163 DWORD_PTR dwInstance, 164 DWORD fdwSupport 165 ); 166 typedef BOOL (CALLBACK *ACMFORMATENUMCBW) ( 167 HACMDRIVERID hadid, 168 LPACMFORMATDETAILSW pafd, 169 DWORD_PTR dwInstance, 170 DWORD fdwSupport 171 ); 172 173 /*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmformattagenumcallback.asp*/ 174 typedef BOOL (CALLBACK *ACMFORMATTAGENUMCBA) ( 175 HACMDRIVERID hadid, 176 LPACMFORMATTAGDETAILSA paftd, 177 DWORD_PTR dwInstance, 178 DWORD fdwSupport 179 ); 180 typedef BOOL (CALLBACK *ACMFORMATTAGENUMCBW) ( 181 HACMDRIVERID hadid, 182 LPACMFORMATTAGDETAILSW paftd, 183 DWORD_PTR dwInstance, 184 DWORD fdwSupport 185 ); 186 187 /*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmdriverenumcallback.asp*/ 188 typedef BOOL (CALLBACK *ACMDRIVERENUMCB) ( 189 HACMDRIVERID hadid, 190 DWORD_PTR dwInstance, 191 DWORD fdwSupport 192 ); 193 194 /*and now the functions...*/ 195 196 /*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmdriveropen.asp*/ 197 MMRESULT WINAPI acmDriverOpen(LPHACMDRIVER phad, HACMDRIVERID hadid, DWORD fdwOpen); 198 /*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmdriverenum.asp*/ 199 MMRESULT WINAPI acmDriverEnum(ACMDRIVERENUMCB fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum); 200 /*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmformatenum.asp*/ 201 MMRESULT WINAPI acmFormatEnumA(HACMDRIVER had, LPACMFORMATDETAILSA pafd, ACMFORMATENUMCBA fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum); 202 MMRESULT WINAPI acmFormatEnumW(HACMDRIVER had, LPACMFORMATDETAILSW pafd, ACMFORMATENUMCBW fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum); 203 204 /*msdn.microsoft.com/en-us/library/dd742885%28VS.85%29.aspx*/ 205 MMRESULT WINAPI acmDriverAddA(LPHACMDRIVERID phadid, HINSTANCE hinstModule, LPARAM lParam, DWORD dwPriority, DWORD fdwAdd); 206 MMRESULT WINAPI acmDriverAddW(LPHACMDRIVERID phadid, HINSTANCE hinstModule, LPARAM lParam, DWORD dwPriority, DWORD fdwAdd); 207 208 /*msdn.microsoft.com/en-us/library/dd742897%28v=VS.85%29.aspx*/ 209 MMRESULT WINAPI acmDriverRemove(HACMDRIVERID hadid, DWORD fdwRemove); 210 211 /*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmdriverclose.asp*/ 212 MMRESULT WINAPI acmDriverClose(HACMDRIVER had, DWORD fdwClose); 213 /*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmdriverdetails.asp*/ 214 MMRESULT WINAPI acmDriverDetailsA(HACMDRIVERID hadid, LPACMDRIVERDETAILSA padd, DWORD fdwDetails); 215 MMRESULT WINAPI acmDriverDetailsW(HACMDRIVERID hadid, LPACMDRIVERDETAILSW padd, DWORD fdwDetails); 216 /*msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_acmformattagenum.asp*/ 217 MMRESULT WINAPI acmFormatTagEnumA(HACMDRIVER had, LPACMFORMATTAGDETAILSA paftd, ACMFORMATTAGENUMCBA fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum); 218 MMRESULT WINAPI acmFormatTagEnumW(HACMDRIVER had, LPACMFORMATTAGDETAILSW paftd, ACMFORMATTAGENUMCBW fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum); 219 220 /*msdn.microsoft.com/en-us/library/dd742922(VS.85).aspx*/ 221 MMRESULT WINAPI acmMetrics(HACMOBJ hao, UINT uMetric, LPVOID pMetric); 222 223 /*msdn.microsoft.com/en-us/library/dd742928%28VS.85%29.aspx*/ 224 MMRESULT WINAPI acmStreamOpen(LPHACMSTREAM phas, HACMDRIVER had, LPWAVEFORMATEX pwfxSrc, LPWAVEFORMATEX pwfxDst, LPWAVEFILTER pwfltr, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen); 225 226 /*msdn.microsoft.com/en-us/library/dd742931%28VS.85%29.aspx*/ 227 MMRESULT WINAPI acmStreamSize(HACMSTREAM has, DWORD cbInput, LPDWORD pdwOutputBytes, DWORD fdwSize); 228 229 /*msdn.microsoft.com/en-us/library/dd742929%28VS.85%29.aspx*/ 230 MMRESULT WINAPI acmStreamPrepareHeader(HACMSTREAM has, LPACMSTREAMHEADER pash, DWORD fdwPrepare); 231 232 /*msdn.microsoft.com/en-us/library/dd742932%28VS.85%29.aspx*/ 233 MMRESULT WINAPI acmStreamUnprepareHeader(HACMSTREAM has, LPACMSTREAMHEADER pash, DWORD fdwUnprepare); 234 235 /*msdn.microsoft.com/en-us/library/dd742930%28VS.85%29.aspx*/ 236 MMRESULT WINAPI acmStreamReset(HACMSTREAM has, DWORD fdwReset); 237 238 /*msdn.microsoft.com/en-us/library/dd742923%28VS.85%29.aspx*/ 239 MMRESULT WINAPI acmStreamClose(HACMSTREAM has, DWORD fdwClose); 240 241 /*msdn.microsoft.com/en-us/library/dd742924%28VS.85%29.aspx*/ 242 MMRESULT WINAPI acmStreamConvert(HACMSTREAM has, LPACMSTREAMHEADER pash, DWORD fdwConvert); 243 244 typedef __AW(ACMFORMATDETAILS) ACMFORMATDETAILS, *LPACMFORMATDETAILS; 245 typedef __AW(ACMFORMATTAGDETAILS) ACMFORMATTAGDETAILS, *LPACMFORMATTAGDETAILS; 246 typedef __AW(ACMDRIVERDETAILS) ACMDRIVERDETAILS, *LPACMDRIVERDETAILS; 247 typedef __AW(ACMFORMATENUMCB) ACMFORMATENUMCB; 248 typedef __AW(ACMFORMATTAGENUMCB) ACMFORMATTAGENUMCB; 249 #define acmFormatEnum __AW(acmFormatEnum) 250 #define acmDriverDetails __AW(acmDriverDetails) 251 #define acmFormatTagEnum __AW(acmFormatTagEnum) 252 #define acmDriverAdd __AW(acmDriverAdd) 253 254 #ifdef __cplusplus 255 } 256 #endif 257 258 #endif 259