msacm.pp 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188
  1. {
  2. This file is part of the Free Pascal run time library.
  3. Copyright (c) 2008 Free Pascal development team.
  4. See the file COPYING.FPC, included in this distribution,
  5. for details about the copyright.
  6. This program is distributed in the hope that it will be useful,
  7. but WITHOUT ANY WARRANTY; without even the implied warranty of
  8. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  9. ********************************************************************** }
  10. // -----------------------------------------------------------------------------
  11. //
  12. // msacm.h Audio Compression Manager Public Header File
  13. //
  14. // -----------------------------------------------------------------------------
  15. //
  16. // Microsoft Windows Mobile 6.0 for PocketPC SDK.
  17. //
  18. {$IFNDEF FPC_DOTTEDUNITS}
  19. unit msacm;
  20. {$ENDIF FPC_DOTTEDUNITS}
  21. {$CALLING cdecl}
  22. {$PACKRECORDS 1} // #pragma pack(1) /* Assume byte packing throughout */
  23. interface
  24. {$IFDEF FPC_DOTTEDUNITS}
  25. uses WinApi.Windows, WinceAPI.Mmreg;
  26. {$ELSE FPC_DOTTEDUNITS}
  27. uses Windows, mmreg;
  28. {$ENDIF FPC_DOTTEDUNITS}
  29. //
  30. // there are four types of 'handles' used by the ACM. the first three
  31. // are unique types that define specific objects:
  32. //
  33. // HACMDRIVERID: used to _identify_ an ACM driver. this identifier can be
  34. // used to _open_ the driver for querying details, etc about the driver.
  35. //
  36. // HACMDRIVER: used to manage a driver (codec, filter, etc). this handle
  37. // is much like a handle to other media drivers--you use it to send
  38. // messages to the converter, query for capabilities, etc.
  39. //
  40. // HACMSTREAM: used to manage a 'stream' (conversion channel) with the
  41. // ACM. you use a stream handle to convert data from one format/type
  42. // to another--much like dealing with a file handle.
  43. //
  44. //
  45. // the fourth handle type is a generic type used on ACM functions that
  46. // can accept two or more of the above handle types (for example the
  47. // acmMetrics and acmDriverID functions).
  48. //
  49. // HACMOBJ: used to identify ACM objects. this handle is used on functions
  50. // that can accept two or more ACM handle types.
  51. //
  52. type
  53. HACMDRIVERID = HANDLE;
  54. PHACMDRIVERID = ^HACMDRIVERID;
  55. LPHACMDRIVERID = ^HACMDRIVERID;
  56. HACMDRIVER = HANDLE;
  57. PHACMDRIVER = ^HACMDRIVER;
  58. LPHACMDRIVER = ^HACMDRIVER;
  59. HACMSTREAM = HANDLE;
  60. PHACMSTREAM = ^HACMSTREAM;
  61. LPHACMSTREAM = ^HACMSTREAM;
  62. HACMOBJ = HANDLE;
  63. PHACMOBJ = ^HACMOBJ;
  64. LPHACMOBJ = ^HACMOBJ;
  65. // - Module: msacmdrv.h
  66. // -----------------------------------------------------------------------------
  67. //
  68. // Audio Compression Manager Public Header File for Drivers
  69. //
  70. // -----------------------------------------------------------------------------
  71. const
  72. // Driver messages
  73. DRV_LOAD = $0001;
  74. DRV_ENABLE = $0002;
  75. DRV_OPEN = $0003;
  76. DRV_CLOSE = $0004;
  77. DRV_DISABLE = $0005;
  78. DRV_FREE = $0006;
  79. DRV_CONFIGURE = $0007;
  80. DRV_QUERYCONFIGURE = $0008;
  81. DRV_INSTALL = $0009;
  82. DRV_REMOVE = $000A;
  83. DRV_EXITSESSION = $000B;
  84. DRV_POWER = $000F;
  85. DRV_RESERVED = $0800;
  86. DRV_USER = $4000;
  87. type
  88. DRVCONFIGINFOEX = record
  89. dwDCISize:DWORD;
  90. lpszDCISectionName:LPCWSTR;
  91. lpszDCIAliasName:LPCWSTR;
  92. dnDevNode:DWORD;
  93. end;
  94. PDRVCONFIGINFOEX = ^DRVCONFIGINFOEX;
  95. NPDRVCONFIGINFOEX = ^DRVCONFIGINFOEX;
  96. LPDRVCONFIGINFOEX = ^DRVCONFIGINFOEX;
  97. // LPARAM of DRV_CONFIGURE message
  98. type
  99. tagDRVCONFIGINFO = record
  100. dwDCISize:DWORD;
  101. lpszDCISectionName:LPCWSTR;
  102. lpszDCIAliasName:LPCWSTR;
  103. end;
  104. DRVCONFIGINFO = tagDRVCONFIGINFO;
  105. PDRVCONFIGINFO = ^tagDRVCONFIGINFO;
  106. NPDRVCONFIGINFO = ^tagDRVCONFIGINFO;
  107. LPDRVCONFIGINFO = ^tagDRVCONFIGINFO;
  108. // Supported return values for DRV_CONFIGURE message
  109. const
  110. DRVCNF_CANCEL = $0000;
  111. DRVCNF_OK = $0001;
  112. DRVCNF_RESTART = $0002;
  113. // return values from DriverProc() function
  114. const
  115. DRV_CANCEL = DRVCNF_CANCEL;
  116. DRV_OK = DRVCNF_OK;
  117. DRV_RESTART = DRVCNF_RESTART;
  118. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  119. //
  120. // ACM Driver Version:
  121. //
  122. // the version is a 32 bit number that is broken into three parts as
  123. // follows:
  124. //
  125. // bits 24 - 31: 8 bit _major_ version number
  126. // bits 16 - 23: 8 bit _minor_ version number
  127. // bits 0 - 15: 16 bit build number
  128. //
  129. // this is then displayed as follows:
  130. //
  131. // bMajor = (BYTE)(dwVersion >> 24)
  132. // bMinor = (BYTE)(dwVersion >> 16) &
  133. // wBuild = LOWORD(dwVersion)
  134. //
  135. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  136. function MAKE_ACM_VERSION(mjr:byte; mnr:byte; bld:word):DWORD;
  137. {$DEFINE ACMDRVOPENDESC_SECTIONNAME_CHARS}
  138. type
  139. tACMDRVOPENDESC = record
  140. cbStruct:DWORD; // sizeof(ACMDRVOPENDESC)
  141. fccType:FOURCC; // 'audc'
  142. fccComp:FOURCC; // sub-type (not used--must be 0)
  143. dwVersion:DWORD; // current version of ACM opening you
  144. dwFlags:DWORD; //
  145. dwError:DWORD; // result from DRV_OPEN request
  146. pszSectionName:LPCTSTR; // see DRVCONFIGINFO.lpszDCISectionName
  147. pszAliasName:LPCTSTR; // see DRVCONFIGINFO.lpszDCIAliasName
  148. dnDevNode:DWORD; // devnode id for pnp drivers.
  149. end;
  150. ACMDRVOPENDESC = tACMDRVOPENDESC;
  151. PACMDRVOPENDESC = ^tACMDRVOPENDESC;
  152. LPACMDRVOPENDESC = ^tACMDRVOPENDESC;
  153. type
  154. tACMDRVSTREAMINSTANCE = record
  155. cbStruct:DWORD;
  156. pwfxSrc:LPWAVEFORMATEX;
  157. pwfxDst:LPWAVEFORMATEX;
  158. pwfltr:LPWAVEFILTER;
  159. dwCallback:DWORD;
  160. dwInstance:DWORD;
  161. fdwOpen:DWORD;
  162. fdwDriver:DWORD;
  163. dwDriver:DWORD;
  164. has:HACMSTREAM;
  165. end;
  166. ACMDRVSTREAMINSTANCE = tACMDRVSTREAMINSTANCE;
  167. PACMDRVSTREAMINSTANCE = ^tACMDRVSTREAMINSTANCE;
  168. LPACMDRVSTREAMINSTANCE = ^tACMDRVSTREAMINSTANCE;
  169. //
  170. // NOTE! this structure must match the ACMSTREAMHEADER in msacm.h but
  171. // defines more information for the driver writing convenience
  172. //
  173. type
  174. LPACMDRVSTREAMHEADER = ^tACMDRVSTREAMHEADER;
  175. tACMDRVSTREAMHEADER = record
  176. cbStruct:DWORD;
  177. fdwStatus:DWORD;
  178. dwUser:DWORD;
  179. pbSrc:LPBYTE;
  180. cbSrcLength:DWORD;
  181. cbSrcLengthUsed:DWORD;
  182. dwSrcUser:DWORD;
  183. pbDst:LPBYTE;
  184. cbDstLength:DWORD;
  185. cbDstLengthUsed:DWORD;
  186. dwDstUser:DWORD;
  187. fdwConvert:DWORD; // flags passed from convert func
  188. padshNext:LPACMDRVSTREAMHEADER; // for async driver queueing
  189. fdwDriver:DWORD; // driver instance flags
  190. dwDriver:DWORD; // driver instance data
  191. //
  192. // all remaining fields are used by the ACM for bookkeeping purposes.
  193. // an ACM driver should never use these fields (though than can be
  194. // helpful for debugging)--note that the meaning of these fields
  195. // may change, so do NOT rely on them in shipping code.
  196. //
  197. fdwPrepared:DWORD;
  198. dwPrepared:DWORD;
  199. pbPreparedSrc:LPBYTE;
  200. cbPreparedSrcLength:DWORD;
  201. pbPreparedDst:LPBYTE;
  202. cbPreparedDstLength:DWORD;
  203. end;
  204. ACMDRVSTREAMHEADER = tACMDRVSTREAMHEADER;
  205. PACMDRVSTREAMHEADER = ^tACMDRVSTREAMHEADER;
  206. //
  207. // structure for ACMDM_STREAM_SIZE message
  208. //
  209. type
  210. tACMDRVSTREAMSIZE = record
  211. cbStruct:DWORD;
  212. fdwSize:DWORD;
  213. cbSrcLength:DWORD;
  214. cbDstLength:DWORD;
  215. end;
  216. ACMDRVSTREAMSIZE = tACMDRVSTREAMSIZE;
  217. PACMDRVSTREAMSIZE = ^tACMDRVSTREAMSIZE;
  218. LPACMDRVSTREAMSIZE = ^tACMDRVSTREAMSIZE;
  219. //
  220. // structure containing the information for the ACMDM_FORMAT_SUGGEST message
  221. //
  222. type
  223. tACMDRVFORMATSUGGEST = record
  224. cbStruct:DWORD; // sizeof(ACMDRVFORMATSUGGEST)
  225. fdwSuggest:DWORD; // Suggest flags
  226. pwfxSrc:LPWAVEFORMATEX; // Source Format
  227. cbwfxSrc:DWORD; // Source Size
  228. pwfxDst:LPWAVEFORMATEX; // Dest format
  229. cbwfxDst:DWORD; // Dest Size
  230. end;
  231. ACMDRVFORMATSUGGEST = tACMDRVFORMATSUGGEST;
  232. PACMDRVFORMATSUGGEST = ^tACMDRVFORMATSUGGEST;
  233. LPACMDRVFORMATSUGGEST = ^tACMDRVFORMATSUGGEST;
  234. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  235. //
  236. // ACM Driver Messages
  237. //
  238. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  239. const
  240. ACMDM_USER = DRV_USER + $0000;
  241. ACMDM_RESERVED_LOW = DRV_USER + $2000;
  242. ACMDM_RESERVED_HIGH = DRV_USER + $2FFF;
  243. ACMDM_BASE = ACMDM_RESERVED_LOW;
  244. ACMDM_DRIVER_ABOUT = ACMDM_BASE + 11;
  245. const
  246. ACMDM_DRIVER_NOTIFY = ACMDM_BASE + 1;
  247. ACMDM_DRIVER_DETAILS = ACMDM_BASE + 10;
  248. ACMDM_HARDWARE_WAVE_CAPS_INPUT = ACMDM_BASE + 20;
  249. ACMDM_HARDWARE_WAVE_CAPS_OUTPUT = ACMDM_BASE + 21;
  250. ACMDM_FORMATTAG_DETAILS = ACMDM_BASE + 25;
  251. ACMDM_FORMAT_DETAILS = ACMDM_BASE + 26;
  252. ACMDM_FORMAT_SUGGEST = ACMDM_BASE + 27;
  253. ACMDM_FILTERTAG_DETAILS = ACMDM_BASE + 50;
  254. ACMDM_FILTER_DETAILS = ACMDM_BASE + 51;
  255. ACMDM_STREAM_OPEN = ACMDM_BASE + 76;
  256. ACMDM_STREAM_CLOSE = ACMDM_BASE + 77;
  257. ACMDM_STREAM_SIZE = ACMDM_BASE + 78;
  258. ACMDM_STREAM_CONVERT = ACMDM_BASE + 79;
  259. ACMDM_STREAM_RESET = ACMDM_BASE + 80;
  260. ACMDM_STREAM_PREPARE = ACMDM_BASE + 81;
  261. ACMDM_STREAM_UNPREPARE = ACMDM_BASE + 82;
  262. ACMDM_STREAM_UPDATE = ACMDM_BASE + 83;
  263. // - End of module: msacmdrv.h
  264. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  265. //
  266. //
  267. //
  268. //
  269. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  270. const
  271. DRV_MAPPER_PREFERRED_INPUT_GET = DRV_USER + 0;
  272. DRV_MAPPER_PREFERRED_OUTPUT_GET = DRV_USER + 2;
  273. DRVM_MAPPER_STATUS = $2000;
  274. WIDM_MAPPER_STATUS = DRVM_MAPPER_STATUS + 0;
  275. WAVEIN_MAPPER_STATUS_DEVICE = 0;
  276. WAVEIN_MAPPER_STATUS_MAPPED = 1;
  277. WAVEIN_MAPPER_STATUS_FORMAT = 2;
  278. WODM_MAPPER_STATUS = DRVM_MAPPER_STATUS + 0;
  279. WAVEOUT_MAPPER_STATUS_DEVICE = 0;
  280. WAVEOUT_MAPPER_STATUS_MAPPED = 1;
  281. WAVEOUT_MAPPER_STATUS_FORMAT = 2;
  282. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  283. //
  284. // ACM Error Codes
  285. //
  286. // Note that these error codes are specific errors that apply to the ACM
  287. // directly--general errors are defined as MMSYSERR_*.
  288. //
  289. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  290. type
  291. MMRESULT = UINT;
  292. const
  293. ACMERR_BASE = 512;
  294. ACMERR_NOTPOSSIBLE = ACMERR_BASE + 0;
  295. ACMERR_BUSY = ACMERR_BASE + 1;
  296. ACMERR_UNPREPARED = ACMERR_BASE + 2;
  297. ACMERR_CANCELED = ACMERR_BASE + 3;
  298. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  299. //
  300. // ACM Window Messages
  301. //
  302. // These window messages are sent by the ACM or ACM drivers to notify
  303. // applications of events.
  304. //
  305. // Note that these window message numbers will also be defined in
  306. // mmsystem.
  307. //
  308. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  309. const
  310. MM_ACM_OPEN = $03D4; // MM_STREAM_OPEN // conversion callback messages
  311. MM_ACM_CLOSE = $03D5; // MM_STREAM_CLOSE
  312. MM_ACM_DONE = $03D6; // MM_STREAM_DONE
  313. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  314. //
  315. // acmGetVersion()
  316. //
  317. // the ACM version is a 32 bit number that is broken into three parts as
  318. // follows:
  319. //
  320. // bits 24 - 31: 8 bit _major_ version number
  321. // bits 16 - 23: 8 bit _minor_ version number
  322. // bits 0 - 15: 16 bit build number
  323. //
  324. // this is then displayed as follows:
  325. //
  326. // bMajor = (BYTE)(dwVersion >> 24)
  327. // bMinor = (BYTE)(dwVersion >> 16) &
  328. // wBuild = LOWORD(dwVersion)
  329. //
  330. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  331. function acmGetVersion:DWORD; external KernelDLL name 'acmGetVersion'; // index 2A5
  332. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  333. //
  334. // acmMetrics()
  335. //
  336. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  337. function acmMetrics(hao:HACMOBJ; uMetric:UINT; pMetric:LPVOID):MMRESULT; external KernelDLL name 'acmMetrics'; // index 2A6
  338. const
  339. ACM_METRIC_COUNT_DRIVERS = 1;
  340. ACM_METRIC_COUNT_CODECS = 2;
  341. ACM_METRIC_COUNT_CONVERTERS = 3;
  342. ACM_METRIC_COUNT_FILTERS = 4;
  343. ACM_METRIC_COUNT_DISABLED = 5;
  344. ACM_METRIC_COUNT_HARDWARE = 6;
  345. ACM_METRIC_COUNT_LOCAL_DRIVERS = 20;
  346. ACM_METRIC_COUNT_LOCAL_CODECS = 21;
  347. ACM_METRIC_COUNT_LOCAL_CONVERTERS = 22;
  348. ACM_METRIC_COUNT_LOCAL_FILTERS = 23;
  349. ACM_METRIC_COUNT_LOCAL_DISABLED = 24;
  350. ACM_METRIC_HARDWARE_WAVE_INPUT = 30;
  351. ACM_METRIC_HARDWARE_WAVE_OUTPUT = 31;
  352. ACM_METRIC_MAX_SIZE_FORMAT = 50;
  353. ACM_METRIC_MAX_SIZE_FILTER = 51;
  354. ACM_METRIC_DRIVER_SUPPORT = 100;
  355. ACM_METRIC_DRIVER_PRIORITY = 101;
  356. //--------------------------------------------------------------------------;
  357. //
  358. // ACM Drivers
  359. //
  360. //--------------------------------------------------------------------------;
  361. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  362. //
  363. // acmDriverEnum()
  364. //
  365. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  366. type
  367. ACMDRIVERENUMCB = function(hadid:HACMDRIVERID; dwInstance:DWORD; fdwSupport:DWORD):BOOL; cdecl;
  368. function acmDriverEnum(fnCallback:ACMDRIVERENUMCB; dwInstance:DWORD; fdwEnum:DWORD):MMRESULT; external KernelDLL name 'acmDriverEnum'; // index 28E
  369. const
  370. ACM_DRIVERENUMF_NOLOCAL = $40000000;
  371. ACM_DRIVERENUMF_DISABLED = $80000000;
  372. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  373. //
  374. // acmDriverID()
  375. //
  376. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  377. function acmDriverID(hao:HACMOBJ; phadid:LPHACMDRIVERID; fdwDriverID:DWORD):MMRESULT; external KernelDLL name 'acmDriverID'; // index 28F
  378. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  379. //
  380. // acmDriverAdd()
  381. //
  382. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  383. function acmDriverAdd(phadid:LPHACMDRIVERID;
  384. hinstModule:HINST;
  385. lParam:LPARAM;
  386. dwPriority:DWORD;
  387. fdwAdd:DWORD):MMRESULT; external KernelDLL name 'acmDriverAdd'; // index 28B
  388. const
  389. ACM_DRIVERADDF_NOTIFYHWND = $00000004; // lParam is notify hwnd
  390. //
  391. // prototype for ACM driver procedures that are installed as _functions_
  392. // or _notifications_ instead of as a standalone installable driver.
  393. //
  394. type
  395. ACMDRIVERPROC = function(dwID:DWORD; hDrvID:HACMDRIVERID; uMsg:UINT; lParam1:LPARAM; lParam2:LPARAM):LRESULT; cdecl;
  396. LPACMDRIVERPROC = ^ACMDRIVERPROC;
  397. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  398. //
  399. // acmDriverRemove()
  400. //
  401. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  402. function acmDriverRemove(hadid:HACMDRIVERID; fdwRemove:DWORD):MMRESULT; external KernelDLL name 'acmDriverRemove'; // index 293
  403. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  404. //
  405. // acmDriverOpen()
  406. //
  407. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  408. function acmDriverOpen(phad:LPHACMDRIVER; hadid:HACMDRIVERID; fdwOpen:DWORD):MMRESULT; external KernelDLL name 'acmDriverOpen'; // index 291
  409. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  410. //
  411. // acmDriverClose()
  412. //
  413. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  414. function acmDriverClose(had:HACMDRIVER; fdwClose:DWORD):MMRESULT; external KernelDLL name 'acmDriverClose'; // index 28C
  415. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  416. //
  417. // acmDriverMessage()
  418. //
  419. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  420. function acmDriverMessage(had:HACMDRIVER; uMsg:UINT; lParam1:LPARAM; lParam2:LPARAM):LRESULT; external KernelDLL name 'acmDriverMessage'; // index 290
  421. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  422. //
  423. // acmDriverPriority
  424. //
  425. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  426. function acmDriverPriority(hadid:HACMDRIVERID; dwPriority:DWORD; fdwPriority:DWORD):MMRESULT; external KernelDLL name 'acmDriverPriority'; // index 292
  427. const
  428. ACM_DRIVERPRIORITYF_ENABLE = $00000001;
  429. ACM_DRIVERPRIORITYF_DISABLE = $00000002;
  430. ACM_DRIVERPRIORITYF_ABLEMASK = $00000003;
  431. ACM_DRIVERPRIORITYF_BEGIN = $00010000;
  432. ACM_DRIVERPRIORITYF_END = $00020000;
  433. ACM_DRIVERPRIORITYF_DEFERMASK = $00030000;
  434. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  435. //
  436. // acmDriverDetails()
  437. //
  438. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  439. //
  440. // ACMDRIVERDETAILS
  441. //
  442. // the ACMDRIVERDETAILS structure is used to get various capabilities from
  443. // an ACM driver (codec, converter, filter).
  444. //
  445. const
  446. ACMDRIVERDETAILS_SHORTNAME_CHARS = 32;
  447. ACMDRIVERDETAILS_LONGNAME_CHARS = 128;
  448. ACMDRIVERDETAILS_COPYRIGHT_CHARS = 80;
  449. ACMDRIVERDETAILS_LICENSING_CHARS = 128;
  450. ACMDRIVERDETAILS_FEATURES_CHARS = 512;
  451. type
  452. tACMDRIVERDETAILS = record
  453. cbStruct:DWORD; // number of valid bytes in structure
  454. fccType:FOURCC; // compressor type 'audc'
  455. fccComp:FOURCC; // sub-type (not used; reserved)
  456. wMid:word; // manufacturer id
  457. wPid:word; // product id
  458. vdwACM:DWORD; // version of the ACM *compiled* for
  459. vdwDriver:DWORD; // version of the driver
  460. fdwSupport:DWORD; // misc. support flags
  461. cFormatTags:DWORD; // total unique format tags supported
  462. cFilterTags:DWORD; // total unique filter tags supported
  463. _hicon:HICON; // handle to custom icon
  464. szShortName:array[0..ACMDRIVERDETAILS_SHORTNAME_CHARS-1] of WCHAR;
  465. szLongName:array[0..ACMDRIVERDETAILS_LONGNAME_CHARS-1] of WCHAR;
  466. szCopyright:array[0..ACMDRIVERDETAILS_COPYRIGHT_CHARS-1] of WCHAR;
  467. szLicensing:array[0..ACMDRIVERDETAILS_LICENSING_CHARS-1] of WCHAR;
  468. szFeatures:array[0..ACMDRIVERDETAILS_FEATURES_CHARS-1] of WCHAR;
  469. end;
  470. _ACMDRIVERDETAILS = tACMDRIVERDETAILS;
  471. PACMDRIVERDETAILS = ^tACMDRIVERDETAILS;
  472. LPACMDRIVERDETAILS = ^tACMDRIVERDETAILS;
  473. //
  474. // ACMDRIVERDETAILS.fccType
  475. //
  476. // ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC: the FOURCC used in the fccType
  477. // field of the ACMDRIVERDETAILS structure to specify that this is an ACM
  478. // codec designed for audio.
  479. //
  480. //
  481. // ACMDRIVERDETAILS.fccComp
  482. //
  483. // ACMDRIVERDETAILS_FCCCOMP_UNDEFINED: the FOURCC used in the fccComp
  484. // field of the ACMDRIVERDETAILS structure. this is currently an unused
  485. // field.
  486. //
  487. const
  488. ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC = FOURCC(byte(AnsiChar('a')) or
  489. (byte(AnsiChar('u')) shl 8) or
  490. (byte(AnsiChar('d')) shl 16) or
  491. (byte(AnsiChar('c')) shl 24)
  492. );
  493. ACMDRIVERDETAILS_FCCCOMP_UNDEFINED = FOURCC(byte(AnsiChar(#0)) or
  494. (byte(AnsiChar(#0)) shl 8) or
  495. (byte(AnsiChar(#0)) shl 16) or
  496. (byte(AnsiChar(#0)) shl 24)
  497. );
  498. //
  499. // the following flags are used to specify the type of conversion(s) that
  500. // the converter/codec/filter supports. these are placed in the fdwSupport
  501. // field of the ACMDRIVERDETAILS structure. note that a converter can
  502. // support one or more of these flags in any combination.
  503. //
  504. // ACMDRIVERDETAILS_SUPPORTF_CODEC: this flag is set if the driver supports
  505. // conversions from one format tag to another format tag. for example, if a
  506. // converter compresses WAVE_FORMAT_PCM to WAVE_FORMAT_ADPCM, then this bit
  507. // should be set.
  508. //
  509. // ACMDRIVERDETAILS_SUPPORTF_CONVERTER: this flags is set if the driver
  510. // supports conversions on the same format tag. as an example, the PCM
  511. // converter that is built into the ACM sets this bit (and only this bit)
  512. // because it converts only PCM formats (bits, sample rate).
  513. //
  514. // ACMDRIVERDETAILS_SUPPORTF_FILTER: this flag is set if the driver supports
  515. // transformations on a single format. for example, a converter that changed
  516. // the 'volume' of PCM data would set this bit. 'echo' and 'reverb' are
  517. // also filter types.
  518. //
  519. // ACMDRIVERDETAILS_SUPPORTF_HARDWARE: this flag is set if the driver supports
  520. // hardware input and/or output through a waveform device.
  521. //
  522. // ACMDRIVERDETAILS_SUPPORTF_ASYNC: this flag is set if the driver supports
  523. // async conversions.
  524. //
  525. //
  526. // ACMDRIVERDETAILS_SUPPORTF_LOCAL: this flag is set _by the ACM_ if a
  527. // driver has been installed local to the current task. this flag is also
  528. // set in the fdwSupport argument to the enumeration callback function
  529. // for drivers.
  530. //
  531. // ACMDRIVERDETAILS_SUPPORTF_DISABLED: this flag is set _by the ACM_ if a
  532. // driver has been disabled. this flag is also passed set in the fdwSupport
  533. // argument to the enumeration callback function for drivers.
  534. //
  535. const
  536. ACMDRIVERDETAILS_SUPPORTF_CODEC = $00000001;
  537. ACMDRIVERDETAILS_SUPPORTF_CONVERTER = $00000002;
  538. ACMDRIVERDETAILS_SUPPORTF_FILTER = $00000004;
  539. ACMDRIVERDETAILS_SUPPORTF_HARDWARE = $00000008;
  540. ACMDRIVERDETAILS_SUPPORTF_ASYNC = $00000010;
  541. ACMDRIVERDETAILS_SUPPORTF_LOCAL = $40000000;
  542. ACMDRIVERDETAILS_SUPPORTF_DISABLED = $80000000;
  543. function acmDriverDetails(hadid:HACMDRIVERID;
  544. padd:LPACMDRIVERDETAILS;
  545. fdwDetails:DWORD):MMRESULT; external KernelDLL name 'acmDriverDetails'; // index 28D
  546. //--------------------------------------------------------------------------;
  547. //
  548. // ACM Format Tags
  549. //
  550. //--------------------------------------------------------------------------;
  551. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  552. //
  553. // acmFormatTagDetails()
  554. //
  555. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  556. const
  557. ACMFORMATTAGDETAILS_FORMATTAG_CHARS = 48;
  558. type
  559. tACMFORMATTAGDETAILSW = record
  560. cbStruct:DWORD;
  561. dwFormatTagIndex:DWORD;
  562. dwFormatTag:DWORD;
  563. cbFormatSize:DWORD;
  564. fdwSupport:DWORD;
  565. cStandardFormats:DWORD;
  566. szFormatTag:array[0..ACMFORMATTAGDETAILS_FORMATTAG_CHARS-1] of WCHAR;
  567. end;
  568. tACMFORMATTAGDETAILS = tACMFORMATTAGDETAILSW;
  569. _ACMFORMATTAGDETAILS = tACMFORMATTAGDETAILSW;
  570. PACMFORMATTAGDETAILS = ^tACMFORMATTAGDETAILSW;
  571. LPACMFORMATTAGDETAILS = ^tACMFORMATTAGDETAILSW;
  572. function acmFormatTagDetails(had:HACMDRIVER;
  573. paftd:LPACMFORMATTAGDETAILS;
  574. fdwDetails:DWORD):MMRESULT; external KernelDLL name 'acmFormatTagDetails'; // index 29B
  575. const
  576. ACM_FORMATTAGDETAILSF_INDEX = $00000000;
  577. ACM_FORMATTAGDETAILSF_FORMATTAG = $00000001;
  578. ACM_FORMATTAGDETAILSF_LARGESTSIZE = $00000002;
  579. ACM_FORMATTAGDETAILSF_QUERYMASK = $0000000F;
  580. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  581. //
  582. // acmFormatTagEnum()
  583. //
  584. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  585. type
  586. ACMFORMATTAGENUMCB = function(hadid:HACMDRIVERID;
  587. paftd:LPACMFORMATTAGDETAILS;
  588. dwInstance:DWORD;
  589. fdwSupport:DWORD):BOOL; cdecl;
  590. function acmFormatTagEnum(had:HACMDRIVER;
  591. paftd:LPACMFORMATTAGDETAILS;
  592. fnCallback:ACMFORMATTAGENUMCB;
  593. dwInstance:DWORD;
  594. fdwEnum:DWORD):MMRESULT; external KernelDLL name 'acmFormatTagEnum'; // index 29C
  595. //--------------------------------------------------------------------------;
  596. //
  597. // ACM Formats
  598. //
  599. //--------------------------------------------------------------------------;
  600. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  601. //
  602. // acmFormatDetails()
  603. //
  604. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  605. const
  606. ACMFORMATDETAILS_FORMAT_CHARS = 128;
  607. type
  608. tACMFORMATDETAILS = record
  609. cbStruct:DWORD;
  610. dwFormatIndex:DWORD;
  611. dwFormatTag:DWORD;
  612. fdwSupport:DWORD;
  613. pwfx:LPWAVEFORMATEX;
  614. cbwfx:DWORD;
  615. szFormat:array[0..ACMFORMATDETAILS_FORMAT_CHARS-1] of WCHAR;
  616. end;
  617. _ACMFORMATDETAILS = tACMFORMATDETAILS;
  618. PACMFORMATDETAILS = ^tACMFORMATDETAILS;
  619. LPACMFORMATDETAILS = ^tACMFORMATDETAILS;
  620. function acmFormatDetails(had:HACMDRIVER; pafd:LPACMFORMATDETAILS; fdwDetails:DWORD):MMRESULT; external KernelDLL name 'acmFormatDetails'; // index 298
  621. const
  622. ACM_FORMATDETAILSF_INDEX = $00000000;
  623. ACM_FORMATDETAILSF_FORMAT = $00000001;
  624. ACM_FORMATDETAILSF_QUERYMASK = $0000000F;
  625. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  626. //
  627. // acmFormatEnum()
  628. //
  629. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  630. type
  631. ACMFORMATENUMCB = function(hadid:HACMDRIVERID;
  632. pafd:LPACMFORMATDETAILS;
  633. dwInstance:DWORD;
  634. fdwSupport:DWORD):BOOL; cdecl;
  635. function acmFormatEnum(had:HACMDRIVER;
  636. pafd:LPACMFORMATDETAILS;
  637. fnCallback:ACMFORMATENUMCB;
  638. dwInstance:DWORD;
  639. fdwEnum:DWORD):MMRESULT; external KernelDLL name 'acmFormatEnum'; // index 299
  640. const
  641. ACM_FORMATENUMF_WFORMATTAG = $00010000;
  642. ACM_FORMATENUMF_NCHANNELS = $00020000;
  643. ACM_FORMATENUMF_NSAMPLESPERSEC = $00040000;
  644. ACM_FORMATENUMF_WBITSPERSAMPLE = $00080000;
  645. ACM_FORMATENUMF_CONVERT = $00100000;
  646. ACM_FORMATENUMF_SUGGEST = $00200000;
  647. ACM_FORMATENUMF_HARDWARE = $00400000;
  648. ACM_FORMATENUMF_INPUT = $00800000;
  649. ACM_FORMATENUMF_OUTPUT = $01000000;
  650. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  651. //
  652. // acmFormatSuggest()
  653. //
  654. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  655. function acmFormatSuggest(had:HACMDRIVER;
  656. pwfxSrc:LPWAVEFORMATEX;
  657. pwfxDst:LPWAVEFORMATEX;
  658. cbwfxDst:DWORD;
  659. fdwSuggest:DWORD):MMRESULT; external KernelDLL name 'acmFormatSuggest'; // index 29A
  660. const
  661. ACM_FORMATSUGGESTF_WFORMATTAG = $00010000;
  662. ACM_FORMATSUGGESTF_NCHANNELS = $00020000;
  663. ACM_FORMATSUGGESTF_NSAMPLESPERSEC = $00040000;
  664. ACM_FORMATSUGGESTF_WBITSPERSAMPLE = $00080000;
  665. ACM_FORMATSUGGESTF_TYPEMASK = $00FF0000;
  666. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  667. //
  668. // acmFormatChoose()
  669. //
  670. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  671. const
  672. ACMHELPMSGSTRING = 'acmchoose_help';
  673. ACMHELPMSGCONTEXTMENU = 'acmchoose_contextmenu';
  674. ACMHELPMSGCONTEXTHELP = 'acmchoose_contexthelp';
  675. //
  676. // MM_ACM_FORMATCHOOSE is sent to hook callbacks by the Format Chooser
  677. // Dialog...
  678. //
  679. const
  680. MM_ACM_FORMATCHOOSE = $8000;
  681. FORMATCHOOSE_MESSAGE = 0;
  682. FORMATCHOOSE_FORMATTAG_VERIFY = FORMATCHOOSE_MESSAGE + 0;
  683. FORMATCHOOSE_FORMAT_VERIFY = FORMATCHOOSE_MESSAGE + 1;
  684. FORMATCHOOSE_CUSTOM_VERIFY = FORMATCHOOSE_MESSAGE + 2;
  685. type
  686. ACMFORMATCHOOSEHOOKPROC = function(hwnd:HWND;
  687. uMsg:UINT;
  688. wParam:WPARAM;
  689. lParam:LPARAM):UINT; cdecl;
  690. type
  691. tACMFORMATCHOOSE = record
  692. cbStruct:DWORD; // sizeof(ACMFORMATCHOOSE)
  693. fdwStyle:DWORD; // chooser style flags
  694. hwndOwner:HWND; // caller's window handle
  695. pwfx:LPWAVEFORMATEX; // ptr to wfx buf to receive choice
  696. cbwfx:DWORD; // size of mem buf for pwfx
  697. pszTitle:LPCWSTR; // dialog box title bar
  698. szFormatTag:array[0..ACMFORMATTAGDETAILS_FORMATTAG_CHARS-1] of WCHAR;
  699. szFormat:array[0..ACMFORMATDETAILS_FORMAT_CHARS-1] of WCHAR;
  700. pszName:LPWSTR; // custom name selection
  701. cchName:DWORD; // size in chars of mem buf for pszName
  702. fdwEnum:DWORD; // format enumeration restrictions
  703. pwfxEnum:LPWAVEFORMATEX; // format describing restrictions
  704. hInstance:HINST; // app instance containing dlg template
  705. pszTemplateName:LPCWSTR; // custom template name
  706. lCustData:LPARAM; // data passed to hook fn.
  707. pfnHook:ACMFORMATCHOOSEHOOKPROC; // ptr to hook function
  708. end;
  709. _ACMFORMATCHOOSE = tACMFORMATCHOOSE;
  710. PACMFORMATCHOOSE = ^tACMFORMATCHOOSE;
  711. LPACMFORMATCHOOSE = ^tACMFORMATCHOOSE;
  712. //
  713. // ACMFORMATCHOOSE.fdwStyle
  714. //
  715. const
  716. ACMFORMATCHOOSE_STYLEF_SHOWHELP = $00000004;
  717. ACMFORMATCHOOSE_STYLEF_ENABLEHOOK = $00000008;
  718. ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATE = $00000010;
  719. ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATEHANDLE = $00000020;
  720. ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT = $00000040;
  721. ACMFORMATCHOOSE_STYLEF_CONTEXTHELP = $00000080;
  722. function acmFormatChoose(pafmtc:LPACMFORMATCHOOSE):MMRESULT; external KernelDLL name 'acmFormatChoose'; // index 2A7
  723. //--------------------------------------------------------------------------;
  724. //
  725. // ACM Filter Tags
  726. //
  727. //--------------------------------------------------------------------------;
  728. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  729. //
  730. // acmFilterTagDetails()
  731. //
  732. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  733. const
  734. ACMFILTERTAGDETAILS_FILTERTAG_CHARS = 48;
  735. type
  736. tACMFILTERTAGDETAILS = record
  737. cbStruct:DWORD;
  738. dwFilterTagIndex:DWORD;
  739. dwFilterTag:DWORD;
  740. cbFilterSize:DWORD;
  741. fdwSupport:DWORD;
  742. cStandardFilters:DWORD;
  743. szFilterTag:array[0..ACMFILTERTAGDETAILS_FILTERTAG_CHARS-1] of WCHAR;
  744. end;
  745. _ACMFILTERTAGDETAILS = tACMFILTERTAGDETAILS;
  746. PACMFILTERTAGDETAILS = ^tACMFILTERTAGDETAILS;
  747. LPACMFILTERTAGDETAILS = ^tACMFILTERTAGDETAILS;
  748. function acmFilterTagDetails(had:HACMDRIVER;
  749. paftd:LPACMFILTERTAGDETAILS;
  750. fdwDetails:DWORD):MMRESULT; external KernelDLL name 'acmFilterTagDetails'; // index 296
  751. const
  752. ACM_FILTERTAGDETAILSF_INDEX = $00000000;
  753. ACM_FILTERTAGDETAILSF_FILTERTAG = $00000001;
  754. ACM_FILTERTAGDETAILSF_LARGESTSIZE = $00000002;
  755. ACM_FILTERTAGDETAILSF_QUERYMASK = $0000000F;
  756. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  757. //
  758. // acmFilterTagEnum()
  759. //
  760. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  761. type
  762. ACMFILTERTAGENUMCB = function(hadid:HACMDRIVERID;
  763. paftd:LPACMFILTERTAGDETAILS;
  764. dwInstance:DWORD;
  765. fdwSupport:DWORD):BOOL; cdecl;
  766. function acmFilterTagEnum(had:HACMDRIVER;
  767. paftd:LPACMFILTERTAGDETAILS;
  768. fnCallback:ACMFILTERTAGENUMCB;
  769. dwInstance:DWORD;
  770. fdwEnum:DWORD):MMRESULT; external KernelDLL name 'acmFilterTagEnum'; // index 297
  771. //--------------------------------------------------------------------------;
  772. //
  773. // ACM Filters
  774. //
  775. //--------------------------------------------------------------------------;
  776. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  777. //
  778. // acmFilterDetails()
  779. //
  780. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  781. const
  782. ACMFILTERDETAILS_FILTER_CHARS = 128;
  783. type
  784. tACMFILTERDETAILS = record
  785. cbStruct:DWORD;
  786. dwFilterIndex:DWORD;
  787. dwFilterTag:DWORD;
  788. fdwSupport:DWORD;
  789. pwfltr:LPWAVEFILTER;
  790. cbwfltr:DWORD;
  791. szFilter:array[0..ACMFILTERDETAILS_FILTER_CHARS-1] of WCHAR;
  792. end;
  793. _ACMFILTERDETAILS = tACMFILTERDETAILS;
  794. PACMFILTERDETAILS = ^tACMFILTERDETAILS;
  795. LPACMFILTERDETAILS = ^tACMFILTERDETAILS;
  796. function acmFilterDetails(had:HACMDRIVER;
  797. pafd:LPACMFILTERDETAILS;
  798. fdwDetails:DWORD):MMRESULT; external KernelDLL name 'acmFilterDetails'; // index 294
  799. const
  800. ACM_FILTERDETAILSF_INDEX = $00000000;
  801. ACM_FILTERDETAILSF_FILTER = $00000001;
  802. ACM_FILTERDETAILSF_QUERYMASK = $0000000F;
  803. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  804. //
  805. // acmFilterEnum()
  806. //
  807. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  808. type
  809. ACMFILTERENUMCB = function(hadid:HACMDRIVERID;
  810. pafd:LPACMFILTERDETAILS;
  811. dwInstance:DWORD;
  812. fdwSupport:DWORD):BOOL; cdecl;
  813. function acmFilterEnum(had:HACMDRIVER;
  814. pafd:LPACMFILTERDETAILS;
  815. fnCallback:ACMFILTERENUMCB;
  816. dwInstance:DWORD;
  817. fdwEnum:DWORD):MMRESULT; external KernelDLL name 'acmFilterEnum'; // index 295
  818. const
  819. ACM_FILTERENUMF_DWFILTERTAG = $00010000;
  820. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  821. //
  822. // acmFilterChoose()
  823. //
  824. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  825. //
  826. // MM_ACM_FILTERCHOOSE is sent to hook callbacks by the Filter Chooser
  827. // Dialog...
  828. //
  829. const
  830. MM_ACM_FILTERCHOOSE = $8000;
  831. FILTERCHOOSE_MESSAGE = 0;
  832. FILTERCHOOSE_FILTERTAG_VERIFY = FILTERCHOOSE_MESSAGE + 0;
  833. FILTERCHOOSE_FILTER_VERIFY = FILTERCHOOSE_MESSAGE + 1;
  834. FILTERCHOOSE_CUSTOM_VERIFY = FILTERCHOOSE_MESSAGE + 2;
  835. type
  836. ACMFILTERCHOOSEHOOKPROC = function(hwnd:HWND;
  837. uMsg:UINT;
  838. wParam:WPARAM;
  839. lParam:LPARAM):UINT; cdecl;
  840. //
  841. // ACMFILTERCHOOSE
  842. //
  843. type
  844. tACMFILTERCHOOSE = record
  845. cbStruct:DWORD; // sizeof(ACMFILTERCHOOSE)
  846. fdwStyle:DWORD; // chooser style flags
  847. hwndOwner:HWND; // caller's window handle
  848. pwfltr:LPWAVEFILTER; // ptr to wfltr buf to receive choice
  849. cbwfltr:DWORD; // size of mem buf for pwfltr
  850. pszTitle:LPCWSTR;
  851. szFilterTag:array[0..ACMFILTERTAGDETAILS_FILTERTAG_CHARS-1] of WCHAR;
  852. szFilter:array[0..ACMFILTERDETAILS_FILTER_CHARS-1] of WCHAR;
  853. pszName:LPWSTR; // custom name selection
  854. cchName:DWORD; // size in chars of mem buf for pszName
  855. fdwEnum:DWORD; // filter enumeration restrictions
  856. pwfltrEnum:LPWAVEFILTER; // filter describing restrictions
  857. hInstance:HINST; // app instance containing dlg template
  858. pszTemplateName:LPCWSTR; // custom template name
  859. lCustData:LPARAM; // data passed to hook fn.
  860. pfnHook:ACMFILTERCHOOSEHOOKPROC; // ptr to hook function
  861. end;
  862. _ACMFILTERCHOOSE = tACMFILTERCHOOSE;
  863. PACMFILTERCHOOSE = ^tACMFILTERCHOOSE;
  864. LPACMFILTERCHOOSE = ^tACMFILTERCHOOSE;
  865. //
  866. // ACMFILTERCHOOSE.fdwStyle
  867. //
  868. const
  869. ACMFILTERCHOOSE_STYLEF_SHOWHELP = $00000004;
  870. ACMFILTERCHOOSE_STYLEF_ENABLEHOOK = $00000008;
  871. ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATE = $00000010;
  872. ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATEHANDLE = $00000020;
  873. ACMFILTERCHOOSE_STYLEF_INITTOFILTERSTRUCT = $00000040;
  874. ACMFILTERCHOOSE_STYLEF_CONTEXTHELP = $00000080;
  875. function acmFilterChoose(pafltrc:LPACMFILTERCHOOSE):MMRESULT; external KernelDLL name 'acmFilterChoose'; // index 2A8
  876. //--------------------------------------------------------------------------;
  877. //
  878. // ACM Stream API's
  879. //
  880. //--------------------------------------------------------------------------;
  881. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  882. //
  883. // acmStreamOpen()
  884. //
  885. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  886. type
  887. tACMSTREAMHEADER = record
  888. cbStruct:DWORD; // sizeof(ACMSTREAMHEADER)
  889. fdwStatus:DWORD; // ACMSTREAMHEADER_STATUSF_*
  890. dwUser:DWORD; // user instance data for hdr
  891. pbSrc:LPBYTE;
  892. cbSrcLength:DWORD;
  893. cbSrcLengthUsed:DWORD;
  894. dwSrcUser:DWORD; // user instance data for src
  895. pbDst:LPBYTE;
  896. cbDstLength:DWORD;
  897. cbDstLengthUsed:DWORD;
  898. dwDstUser:DWORD; // user instance data for dst
  899. dwReservedDriver:array[0..9] of DWORD; // driver reserved work space
  900. end;
  901. ACMSTREAMHEADER = tACMSTREAMHEADER;
  902. PACMSTREAMHEADER = ^tACMSTREAMHEADER;
  903. LPACMSTREAMHEADER = ^tACMSTREAMHEADER;
  904. //
  905. // ACMSTREAMHEADER.fdwStatus
  906. //
  907. // ACMSTREAMHEADER_STATUSF_DONE: done bit for async conversions.
  908. //
  909. const
  910. ACMSTREAMHEADER_STATUSF_DONE = $00010000;
  911. ACMSTREAMHEADER_STATUSF_PREPARED = $00020000;
  912. ACMSTREAMHEADER_STATUSF_INQUEUE = $00100000;
  913. function acmStreamOpen(phas:LPHACMSTREAM; // pointer to stream handle
  914. had:HACMDRIVER; // optional driver handle
  915. pwfxSrc:LPWAVEFORMATEX; // source format to convert
  916. pwfxDst:LPWAVEFORMATEX; // required destination format
  917. pwfltr:LPWAVEFILTER; // optional filter
  918. dwCallback:DWORD; // callback
  919. dwInstance:DWORD; // callback instance data
  920. fdwOpen:DWORD // ACM_STREAMOPENF_* and CALLBACK_*
  921. ):MMRESULT; external KernelDLL name 'acmStreamOpen'; // index 2A0
  922. const
  923. ACM_STREAMOPENF_QUERY = $00000001;
  924. ACM_STREAMOPENF_ASYNC = $00000002;
  925. ACM_STREAMOPENF_NONREALTIME = $00000004;
  926. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  927. //
  928. // acmStreamClose()
  929. //
  930. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  931. function acmStreamClose(has:HACMSTREAM;
  932. fdwClose:DWORD):MMRESULT; external KernelDLL name 'acmStreamClose'; // index 29D
  933. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  934. //
  935. // acmStreamSize()
  936. //
  937. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  938. function acmStreamSize(has:HACMSTREAM;
  939. cbInput:DWORD;
  940. pdwOutputBytes:LPDWORD;
  941. fdwSize:DWORD):MMRESULT; external KernelDLL name 'acmStreamSize'; // index 2A3
  942. const
  943. ACM_STREAMSIZEF_SOURCE = $00000000;
  944. ACM_STREAMSIZEF_DESTINATION = $00000001;
  945. ACM_STREAMSIZEF_QUERYMASK = $0000000F;
  946. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  947. //
  948. // acmStreamReset()
  949. //
  950. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  951. function acmStreamReset(has:HACMSTREAM;
  952. fdwReset:DWORD):MMRESULT; external KernelDLL name 'acmStreamReset'; // index 2A2
  953. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  954. //
  955. // acmStreamMessage()
  956. //
  957. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  958. function acmStreamMessage(has:HACMSTREAM;
  959. uMsg:UINT;
  960. lParam1:LPARAM;
  961. lParam2:LPARAM):MMRESULT; external KernelDLL name 'acmStreamMessage'; // index 29F
  962. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  963. //
  964. // acmStreamConvert()
  965. //
  966. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  967. function acmStreamConvert(has:HACMSTREAM;
  968. pash:LPACMSTREAMHEADER;
  969. fdwConvert:DWORD):MMRESULT; external KernelDLL name 'acmStreamConvert'; // index 29E
  970. const
  971. ACM_STREAMCONVERTF_BLOCKALIGN = $00000004;
  972. ACM_STREAMCONVERTF_START = $00000010;
  973. ACM_STREAMCONVERTF_END = $00000020;
  974. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  975. //
  976. // acmStreamPrepareHeader()
  977. //
  978. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  979. function acmStreamPrepareHeader(has:HACMSTREAM;
  980. pash:LPACMSTREAMHEADER;
  981. fdwPrepare:DWORD):MMRESULT; external KernelDLL name 'acmStreamPrepareHeader'; // index 2A1
  982. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  983. //
  984. // acmStreamUnprepareHeader()
  985. //
  986. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  987. function acmStreamUnprepareHeader(has:HACMSTREAM;
  988. pash:LPACMSTREAMHEADER;
  989. fdwUnprepare:DWORD):MMRESULT; external KernelDLL name 'acmStreamUnprepareHeader'; // index 2A4
  990. {$PACKRECORDS DEFAULT} // #pragma pack() /* Revert to default packing */
  991. // Module: msacmdlg.h
  992. // -----------------------------------------------------------------------------
  993. //
  994. // Audio Compression Manager Common Dialogs Identifiers
  995. //
  996. // -----------------------------------------------------------------------------
  997. const
  998. DLG_ACMFORMATCHOOSE_ID = 70;
  999. IDD_ACMFORMATCHOOSE_CMB_FORMATTAG = 101;
  1000. IDD_ACMFORMATCHOOSE_CMB_FORMAT = 102;
  1001. DLG_ACMFILTERCHOOSE_ID = 71;
  1002. IDD_ACMFILTERCHOOSE_CMB_FILTERTAG = 101;
  1003. IDD_ACMFILTERCHOOSE_CMB_FILTER = 102;
  1004. // End of module msacmdlg.h
  1005. implementation
  1006. // - Module: msacmdrv.h
  1007. // -----------------------------------------------------------------------------
  1008. //
  1009. // Audio Compression Manager Public Header File for Drivers
  1010. //
  1011. // -----------------------------------------------------------------------------
  1012. function MAKE_ACM_VERSION(mjr:byte; mnr:byte; bld:word):DWORD; inline;
  1013. begin
  1014. MAKE_ACM_VERSION:=(DWORD(mjr) shl 24) or (DWORD(mnr) shl 16) or bld;
  1015. end;
  1016. // - End of module: msacmdrv.h
  1017. end.