msacm.pp 42 KB

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