MSAcm.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:57k
源码类别:

模拟服务器

开发平台:

C/C++

  1. //==========================================================================;
  2. //
  3. //  msacm.h
  4. //
  5. //  Copyright (c) 1992-1999 Microsoft Corporation.  All Rights Reserved.
  6. //
  7. //  Description:
  8. //      Audio Compression Manager Public Header File
  9. //
  10. //  History:
  11. //
  12. //==========================================================================;
  13. #ifndef _INC_ACM
  14. #define _INC_ACM        /* #defined if msacm.h has been included */
  15. #if _MSC_VER > 1000
  16. #pragma once
  17. #endif
  18. #if !defined(_INC_MMREG) || (_INC_MMREG < 142)
  19. #ifndef RC_INVOKED
  20. #error MMREG.H version 142 or greater to be included first
  21. #endif
  22. #endif
  23. #if defined(WIN32) && !defined(_WIN32)
  24. #ifndef RC_INVOKED
  25. #pragma message("MSACM.H: defining _WIN32 because application defined WIN32")
  26. #endif
  27. #define _WIN32
  28. #endif
  29. #if defined(UNICODE) && !defined(_UNICODE)
  30. #ifndef RC_INVOKED
  31. #pragma message("MSACM.H: defining _UNICODE because application defined UNICODE")
  32. #endif
  33. #define _UNICODE
  34. #endif
  35. #include "pshpack1.h"   /* Assume byte packing throughout */
  36. #ifdef __cplusplus
  37. extern "C" {            /* Assume C declarations for C++ */
  38. #endif  /* __cplusplus */
  39. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  40. //
  41. //
  42. //
  43. //
  44. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  45. #ifndef DRV_MAPPER_PREFERRED_INPUT_GET
  46. #define DRV_MAPPER_PREFERRED_INPUT_GET  (DRV_USER + 0)
  47. #endif
  48. #ifndef DRV_MAPPER_PREFERRED_OUTPUT_GET
  49. #define DRV_MAPPER_PREFERRED_OUTPUT_GET (DRV_USER + 2)
  50. #endif
  51. #ifndef DRVM_MAPPER_STATUS
  52. #define DRVM_MAPPER             0x2000
  53. #define DRVM_MAPPER_STATUS      (DRVM_MAPPER+0)
  54. #endif
  55. #ifndef WIDM_MAPPER_STATUS
  56. #define WIDM_MAPPER_STATUS              (DRVM_MAPPER_STATUS + 0)
  57. #define WAVEIN_MAPPER_STATUS_DEVICE     0
  58. #define WAVEIN_MAPPER_STATUS_MAPPED     1
  59. #define WAVEIN_MAPPER_STATUS_FORMAT     2
  60. #endif
  61. #ifndef WODM_MAPPER_STATUS
  62. #define WODM_MAPPER_STATUS              (DRVM_MAPPER_STATUS + 0)
  63. #define WAVEOUT_MAPPER_STATUS_DEVICE    0
  64. #define WAVEOUT_MAPPER_STATUS_MAPPED    1
  65. #define WAVEOUT_MAPPER_STATUS_FORMAT    2
  66. #endif
  67. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  68. //
  69. //
  70. //
  71. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  72. #ifdef _WIN32
  73.     #define ACMAPI              WINAPI
  74. #else
  75. #ifdef _WINDLL
  76.     #define ACMAPI              _far _pascal _loadds
  77. #else
  78.     #define ACMAPI              _far _pascal
  79. #endif
  80. #endif
  81. //--------------------------------------------------------------------------;
  82. //
  83. //  ACM General API's and Defines
  84. //
  85. //
  86. //
  87. //
  88. //--------------------------------------------------------------------------;
  89. //
  90. //  there are four types of 'handles' used by the ACM. the first three
  91. //  are unique types that define specific objects:
  92. //
  93. //  HACMDRIVERID: used to _identify_ an ACM driver. this identifier can be
  94. //  used to _open_ the driver for querying details, etc about the driver.
  95. //
  96. //  HACMDRIVER: used to manage a driver (codec, filter, etc). this handle
  97. //  is much like a handle to other media drivers--you use it to send
  98. //  messages to the converter, query for capabilities, etc.
  99. //
  100. //  HACMSTREAM: used to manage a 'stream' (conversion channel) with the
  101. //  ACM. you use a stream handle to convert data from one format/type
  102. //  to another--much like dealing with a file handle.
  103. //
  104. //
  105. //  the fourth handle type is a generic type used on ACM functions that
  106. //  can accept two or more of the above handle types (for example the
  107. //  acmMetrics and acmDriverID functions).
  108. //
  109. //  HACMOBJ: used to identify ACM objects. this handle is used on functions
  110. //  that can accept two or more ACM handle types.
  111. //
  112. DECLARE_HANDLE(HACMDRIVERID);
  113. typedef HACMDRIVERID       *PHACMDRIVERID;
  114. typedef HACMDRIVERID   FAR *LPHACMDRIVERID;
  115. DECLARE_HANDLE(HACMDRIVER);
  116. typedef HACMDRIVER         *PHACMDRIVER;
  117. typedef HACMDRIVER     FAR *LPHACMDRIVER;
  118. DECLARE_HANDLE(HACMSTREAM);
  119. typedef HACMSTREAM         *PHACMSTREAM;
  120. typedef HACMSTREAM     FAR *LPHACMSTREAM;
  121. DECLARE_HANDLE(HACMOBJ);
  122. typedef HACMOBJ            *PHACMOBJ;
  123. typedef HACMOBJ        FAR *LPHACMOBJ;
  124. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  125. //
  126. //  ACM Error Codes
  127. //
  128. //  Note that these error codes are specific errors that apply to the ACM
  129. //  directly--general errors are defined as MMSYSERR_*.
  130. //
  131. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  132. #ifndef _MMRESULT_
  133. #define _MMRESULT_
  134. typedef UINT                MMRESULT;
  135. #endif
  136. #define ACMERR_BASE         (512)
  137. #define ACMERR_NOTPOSSIBLE  (ACMERR_BASE + 0)
  138. #define ACMERR_BUSY         (ACMERR_BASE + 1)
  139. #define ACMERR_UNPREPARED   (ACMERR_BASE + 2)
  140. #define ACMERR_CANCELED     (ACMERR_BASE + 3)
  141. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  142. //
  143. //  ACM Window Messages
  144. //
  145. //  These window messages are sent by the ACM or ACM drivers to notify
  146. //  applications of events.
  147. //
  148. //  Note that these window message numbers will also be defined in
  149. //  mmsystem.
  150. //
  151. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  152. #define MM_ACM_OPEN         (MM_STREAM_OPEN)  // conversion callback messages
  153. #define MM_ACM_CLOSE        (MM_STREAM_CLOSE)
  154. #define MM_ACM_DONE         (MM_STREAM_DONE)
  155. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  156. //
  157. //  acmGetVersion()
  158. //
  159. //  the ACM version is a 32 bit number that is broken into three parts as
  160. //  follows:
  161. //
  162. //      bits 24 - 31:   8 bit _major_ version number
  163. //      bits 16 - 23:   8 bit _minor_ version number
  164. //      bits  0 - 15:   16 bit build number
  165. //
  166. //  this is then displayed as follows:
  167. //
  168. //      bMajor = (BYTE)(dwVersion >> 24)
  169. //      bMinor = (BYTE)(dwVersion >> 16) &
  170. //      wBuild = LOWORD(dwVersion)
  171. //
  172. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  173. DWORD ACMAPI acmGetVersion
  174. (
  175.     void
  176. );
  177. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  178. //
  179. //  acmMetrics()
  180. //
  181. //
  182. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  183. MMRESULT ACMAPI acmMetrics
  184. (
  185.     HACMOBJ                 hao,
  186.     UINT                    uMetric,
  187.     LPVOID                  pMetric
  188. );
  189. #define ACM_METRIC_COUNT_DRIVERS            1
  190. #define ACM_METRIC_COUNT_CODECS             2
  191. #define ACM_METRIC_COUNT_CONVERTERS         3
  192. #define ACM_METRIC_COUNT_FILTERS            4
  193. #define ACM_METRIC_COUNT_DISABLED           5
  194. #define ACM_METRIC_COUNT_HARDWARE           6
  195. #define ACM_METRIC_COUNT_LOCAL_DRIVERS      20
  196. #define ACM_METRIC_COUNT_LOCAL_CODECS       21
  197. #define ACM_METRIC_COUNT_LOCAL_CONVERTERS   22
  198. #define ACM_METRIC_COUNT_LOCAL_FILTERS      23
  199. #define ACM_METRIC_COUNT_LOCAL_DISABLED     24
  200. #define ACM_METRIC_HARDWARE_WAVE_INPUT      30
  201. #define ACM_METRIC_HARDWARE_WAVE_OUTPUT     31
  202. #define ACM_METRIC_MAX_SIZE_FORMAT          50
  203. #define ACM_METRIC_MAX_SIZE_FILTER          51
  204. #define ACM_METRIC_DRIVER_SUPPORT           100
  205. #define ACM_METRIC_DRIVER_PRIORITY          101
  206. //--------------------------------------------------------------------------;
  207. //
  208. //  ACM Drivers
  209. //
  210. //
  211. //
  212. //
  213. //--------------------------------------------------------------------------;
  214. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  215. //
  216. //  acmDriverEnum()
  217. //
  218. //
  219. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  220. typedef BOOL (CALLBACK *ACMDRIVERENUMCB)
  221. (
  222.     HACMDRIVERID            hadid,
  223.     DWORD_PTR               dwInstance,
  224.     DWORD                   fdwSupport
  225. );
  226. MMRESULT ACMAPI acmDriverEnum
  227. (
  228.     ACMDRIVERENUMCB         fnCallback,
  229.     DWORD_PTR               dwInstance,
  230.     DWORD                   fdwEnum
  231. );
  232. #define ACM_DRIVERENUMF_NOLOCAL     0x40000000L
  233. #define ACM_DRIVERENUMF_DISABLED    0x80000000L
  234. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  235. //
  236. //  acmDriverID()
  237. //
  238. //
  239. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  240. MMRESULT ACMAPI acmDriverID
  241. (
  242.     HACMOBJ                 hao,
  243.     LPHACMDRIVERID          phadid,
  244.     DWORD                   fdwDriverID
  245. );
  246. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  247. //
  248. //  acmDriverAdd()
  249. //
  250. //
  251. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  252. #ifdef _WIN32
  253. MMRESULT ACMAPI acmDriverAddA
  254. (
  255.     LPHACMDRIVERID          phadid,
  256.     HINSTANCE               hinstModule,
  257.     LPARAM                  lParam,
  258.     DWORD                   dwPriority,
  259.     DWORD                   fdwAdd
  260. );
  261. MMRESULT ACMAPI acmDriverAddW
  262. (
  263.     LPHACMDRIVERID          phadid,
  264.     HINSTANCE               hinstModule,
  265.     LPARAM                  lParam,
  266.     DWORD                   dwPriority,
  267.     DWORD                   fdwAdd
  268. );
  269. #ifdef _UNICODE
  270. #define acmDriverAdd        acmDriverAddW
  271. #else
  272. #define acmDriverAdd        acmDriverAddA
  273. #endif
  274. #else
  275. MMRESULT ACMAPI acmDriverAdd
  276. (
  277.     LPHACMDRIVERID          phadid,
  278.     HINSTANCE               hinstModule,
  279.     LPARAM                  lParam,
  280.     DWORD                   dwPriority,
  281.     DWORD                   fdwAdd
  282. );
  283. #endif
  284. #define ACM_DRIVERADDF_FUNCTION     0x00000003L  // lParam is a procedure
  285. #define ACM_DRIVERADDF_NOTIFYHWND   0x00000004L  // lParam is notify hwnd
  286. #define ACM_DRIVERADDF_TYPEMASK     0x00000007L  // driver type mask
  287. #define ACM_DRIVERADDF_LOCAL        0x00000000L  // is local to current task
  288. #define ACM_DRIVERADDF_GLOBAL       0x00000008L  // is global
  289. //
  290. //  prototype for ACM driver procedures that are installed as _functions_
  291. //  or _notifations_ instead of as a standalone installable driver.
  292. //
  293. typedef LRESULT (CALLBACK *ACMDRIVERPROC)(DWORD_PTR, HACMDRIVERID, UINT, LPARAM, LPARAM);
  294. typedef ACMDRIVERPROC FAR *LPACMDRIVERPROC;
  295. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  296. //
  297. //  acmDriverRemove()
  298. //
  299. //
  300. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  301. MMRESULT ACMAPI acmDriverRemove
  302. (
  303.     HACMDRIVERID            hadid,
  304.     DWORD                   fdwRemove
  305. );
  306. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  307. //
  308. //  acmDriverOpen()
  309. //
  310. //
  311. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  312. MMRESULT ACMAPI acmDriverOpen
  313. (
  314.     LPHACMDRIVER            phad,
  315.     HACMDRIVERID            hadid,
  316.     DWORD                   fdwOpen
  317. );
  318. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  319. //
  320. //  acmDriverClose()
  321. //
  322. //
  323. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  324. MMRESULT ACMAPI acmDriverClose
  325. (
  326.     HACMDRIVER              had,
  327.     DWORD                   fdwClose
  328. );
  329. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  330. //
  331. //  acmDriverMessage()
  332. //
  333. //
  334. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  335. LRESULT ACMAPI acmDriverMessage
  336. (
  337.     HACMDRIVER              had,
  338.     UINT                    uMsg,
  339.     LPARAM                  lParam1,
  340.     LPARAM                  lParam2
  341. );
  342. //
  343. //
  344. //
  345. //
  346. #define ACMDM_USER                  (DRV_USER + 0x0000)
  347. #define ACMDM_RESERVED_LOW          (DRV_USER + 0x2000)
  348. #define ACMDM_RESERVED_HIGH         (DRV_USER + 0x2FFF)
  349. #define ACMDM_BASE                  ACMDM_RESERVED_LOW
  350. #define ACMDM_DRIVER_ABOUT          (ACMDM_BASE + 11)
  351. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  352. //
  353. //  acmDriverPriority
  354. //
  355. //
  356. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  357. MMRESULT ACMAPI acmDriverPriority
  358. (
  359.     HACMDRIVERID            hadid,
  360.     DWORD                   dwPriority,
  361.     DWORD                   fdwPriority
  362. );
  363. #define ACM_DRIVERPRIORITYF_ENABLE      0x00000001L
  364. #define ACM_DRIVERPRIORITYF_DISABLE     0x00000002L
  365. #define ACM_DRIVERPRIORITYF_ABLEMASK    0x00000003L
  366. #define ACM_DRIVERPRIORITYF_BEGIN       0x00010000L
  367. #define ACM_DRIVERPRIORITYF_END         0x00020000L
  368. #define ACM_DRIVERPRIORITYF_DEFERMASK   0x00030000L
  369. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  370. //
  371. //  acmDriverDetails()
  372. //
  373. //
  374. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  375. //
  376. //  ACMDRIVERDETAILS
  377. //
  378. //  the ACMDRIVERDETAILS structure is used to get various capabilities from
  379. //  an ACM driver (codec, converter, filter).
  380. //
  381. #define ACMDRIVERDETAILS_SHORTNAME_CHARS    32
  382. #define ACMDRIVERDETAILS_LONGNAME_CHARS     128
  383. #define ACMDRIVERDETAILS_COPYRIGHT_CHARS    80
  384. #define ACMDRIVERDETAILS_LICENSING_CHARS    128
  385. #define ACMDRIVERDETAILS_FEATURES_CHARS     512
  386. #ifdef _WIN32
  387. typedef struct tACMDRIVERDETAILSA
  388. {
  389.     DWORD           cbStruct;           // number of valid bytes in structure
  390.     FOURCC          fccType;            // compressor type 'audc'
  391.     FOURCC          fccComp;            // sub-type (not used; reserved)
  392.     WORD            wMid;               // manufacturer id
  393.     WORD            wPid;               // product id
  394.     DWORD           vdwACM;             // version of the ACM *compiled* for
  395.     DWORD           vdwDriver;          // version of the driver
  396.     DWORD           fdwSupport;         // misc. support flags
  397.     DWORD           cFormatTags;        // total unique format tags supported
  398.     DWORD           cFilterTags;        // total unique filter tags supported
  399.     HICON           hicon;              // handle to custom icon
  400.     char            szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];
  401.     char            szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];
  402.     char            szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];
  403.     char            szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];
  404.     char            szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];
  405. } ACMDRIVERDETAILSA, *PACMDRIVERDETAILSA, FAR *LPACMDRIVERDETAILSA;
  406. typedef struct tACMDRIVERDETAILSW
  407. {
  408.     DWORD           cbStruct;           // number of valid bytes in structure
  409.     FOURCC          fccType;            // compressor type 'audc'
  410.     FOURCC          fccComp;            // sub-type (not used; reserved)
  411.     WORD            wMid;               // manufacturer id
  412.     WORD            wPid;               // product id
  413.     DWORD           vdwACM;             // version of the ACM *compiled* for
  414.     DWORD           vdwDriver;          // version of the driver
  415.     DWORD           fdwSupport;         // misc. support flags
  416.     DWORD           cFormatTags;        // total unique format tags supported
  417.     DWORD           cFilterTags;        // total unique filter tags supported
  418.     HICON           hicon;              // handle to custom icon
  419.     WCHAR           szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];
  420.     WCHAR           szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];
  421.     WCHAR           szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];
  422.     WCHAR           szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];
  423.     WCHAR           szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];
  424. } ACMDRIVERDETAILSW, *PACMDRIVERDETAILSW, FAR *LPACMDRIVERDETAILSW;
  425. #ifdef _UNICODE
  426. #define ACMDRIVERDETAILS        ACMDRIVERDETAILSW
  427. #define PACMDRIVERDETAILS       PACMDRIVERDETAILSW
  428. #define LPACMDRIVERDETAILS      LPACMDRIVERDETAILSW
  429. #else
  430. #define ACMDRIVERDETAILS        ACMDRIVERDETAILSA
  431. #define PACMDRIVERDETAILS       PACMDRIVERDETAILSA
  432. #define LPACMDRIVERDETAILS      LPACMDRIVERDETAILSA
  433. #endif
  434. #else
  435. typedef struct tACMDRIVERDETAILS
  436. {
  437.     DWORD           cbStruct;           // number of valid bytes in structure
  438.     FOURCC          fccType;            // compressor type 'audc'
  439.     FOURCC          fccComp;            // sub-type (not used; reserved)
  440.     WORD            wMid;               // manufacturer id
  441.     WORD            wPid;               // product id
  442.     DWORD           vdwACM;             // version of the ACM *compiled* for
  443.     DWORD           vdwDriver;          // version of the driver
  444.     DWORD           fdwSupport;         // misc. support flags
  445.     DWORD           cFormatTags;        // total unique format tags supported
  446.     DWORD           cFilterTags;        // total unique filter tags supported
  447.     HICON           hicon;              // handle to custom icon
  448.     char            szShortName[ACMDRIVERDETAILS_SHORTNAME_CHARS];
  449.     char            szLongName[ACMDRIVERDETAILS_LONGNAME_CHARS];
  450.     char            szCopyright[ACMDRIVERDETAILS_COPYRIGHT_CHARS];
  451.     char            szLicensing[ACMDRIVERDETAILS_LICENSING_CHARS];
  452.     char            szFeatures[ACMDRIVERDETAILS_FEATURES_CHARS];
  453. } ACMDRIVERDETAILS, *PACMDRIVERDETAILS, FAR *LPACMDRIVERDETAILS;
  454. #endif
  455. //
  456. //  ACMDRIVERDETAILS.fccType
  457. //
  458. //  ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC: the FOURCC used in the fccType
  459. //  field of the ACMDRIVERDETAILS structure to specify that this is an ACM
  460. //  codec designed for audio.
  461. //
  462. //
  463. //  ACMDRIVERDETAILS.fccComp
  464. //
  465. //  ACMDRIVERDETAILS_FCCCOMP_UNDEFINED: the FOURCC used in the fccComp
  466. //  field of the ACMDRIVERDETAILS structure. this is currently an unused
  467. //  field.
  468. //
  469. #define ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC mmioFOURCC('a', 'u', 'd', 'c')
  470. #define ACMDRIVERDETAILS_FCCCOMP_UNDEFINED  mmioFOURCC('', '', '', '')
  471. //
  472. //  the following flags are used to specify the type of conversion(s) that
  473. //  the converter/codec/filter supports. these are placed in the fdwSupport
  474. //  field of the ACMDRIVERDETAILS structure. note that a converter can
  475. //  support one or more of these flags in any combination.
  476. //
  477. //  ACMDRIVERDETAILS_SUPPORTF_CODEC: this flag is set if the driver supports
  478. //  conversions from one format tag to another format tag. for example, if a
  479. //  converter compresses WAVE_FORMAT_PCM to WAVE_FORMAT_ADPCM, then this bit
  480. //  should be set.
  481. //
  482. //  ACMDRIVERDETAILS_SUPPORTF_CONVERTER: this flags is set if the driver
  483. //  supports conversions on the same format tag. as an example, the PCM
  484. //  converter that is built into the ACM sets this bit (and only this bit)
  485. //  because it converts only PCM formats (bits, sample rate).
  486. //
  487. //  ACMDRIVERDETAILS_SUPPORTF_FILTER: this flag is set if the driver supports
  488. //  transformations on a single format. for example, a converter that changed
  489. //  the 'volume' of PCM data would set this bit. 'echo' and 'reverb' are
  490. //  also filter types.
  491. //
  492. //  ACMDRIVERDETAILS_SUPPORTF_HARDWARE: this flag is set if the driver supports
  493. //  hardware input and/or output through a waveform device.
  494. //
  495. //  ACMDRIVERDETAILS_SUPPORTF_ASYNC: this flag is set if the driver supports
  496. //  async conversions.
  497. //
  498. //
  499. //  ACMDRIVERDETAILS_SUPPORTF_LOCAL: this flag is set _by the ACM_ if a
  500. //  driver has been installed local to the current task. this flag is also
  501. //  set in the fdwSupport argument to the enumeration callback function
  502. //  for drivers.
  503. //
  504. //  ACMDRIVERDETAILS_SUPPORTF_DISABLED: this flag is set _by the ACM_ if a
  505. //  driver has been disabled. this flag is also passed set in the fdwSupport
  506. //  argument to the enumeration callback function for drivers.
  507. //
  508. #define ACMDRIVERDETAILS_SUPPORTF_CODEC     0x00000001L
  509. #define ACMDRIVERDETAILS_SUPPORTF_CONVERTER 0x00000002L
  510. #define ACMDRIVERDETAILS_SUPPORTF_FILTER    0x00000004L
  511. #define ACMDRIVERDETAILS_SUPPORTF_HARDWARE  0x00000008L
  512. #define ACMDRIVERDETAILS_SUPPORTF_ASYNC     0x00000010L
  513. #define ACMDRIVERDETAILS_SUPPORTF_LOCAL     0x40000000L
  514. #define ACMDRIVERDETAILS_SUPPORTF_DISABLED  0x80000000L
  515. #ifdef _WIN32
  516. MMRESULT ACMAPI acmDriverDetailsA
  517. (
  518.     HACMDRIVERID            hadid,
  519.     LPACMDRIVERDETAILSA     padd,
  520.     DWORD                   fdwDetails
  521. );
  522. MMRESULT ACMAPI acmDriverDetailsW
  523. (
  524.     HACMDRIVERID            hadid,
  525.     LPACMDRIVERDETAILSW     padd,
  526.     DWORD                   fdwDetails
  527. );
  528. #ifdef _UNICODE
  529. #define acmDriverDetails    acmDriverDetailsW
  530. #else
  531. #define acmDriverDetails    acmDriverDetailsA
  532. #endif
  533. #else
  534. MMRESULT ACMAPI acmDriverDetails
  535. (
  536.     HACMDRIVERID            hadid,
  537.     LPACMDRIVERDETAILS      padd,
  538.     DWORD                   fdwDetails
  539. );
  540. #endif
  541. //--------------------------------------------------------------------------;
  542. //
  543. //  ACM Format Tags
  544. //
  545. //
  546. //
  547. //
  548. //--------------------------------------------------------------------------;
  549. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  550. //
  551. //  acmFormatTagDetails()
  552. //
  553. //
  554. //
  555. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  556. #define ACMFORMATTAGDETAILS_FORMATTAG_CHARS 48
  557. #ifdef _WIN32
  558. typedef struct tACMFORMATTAGDETAILSA
  559. {
  560.     DWORD           cbStruct;
  561.     DWORD           dwFormatTagIndex;
  562.     DWORD           dwFormatTag;
  563.     DWORD           cbFormatSize;
  564.     DWORD           fdwSupport;
  565.     DWORD           cStandardFormats;
  566.     char            szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
  567. } ACMFORMATTAGDETAILSA, *PACMFORMATTAGDETAILSA, FAR *LPACMFORMATTAGDETAILSA;
  568. typedef struct tACMFORMATTAGDETAILSW
  569. {
  570.     DWORD           cbStruct;
  571.     DWORD           dwFormatTagIndex;
  572.     DWORD           dwFormatTag;
  573.     DWORD           cbFormatSize;
  574.     DWORD           fdwSupport;
  575.     DWORD           cStandardFormats;
  576.     WCHAR           szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
  577. } ACMFORMATTAGDETAILSW, *PACMFORMATTAGDETAILSW, FAR *LPACMFORMATTAGDETAILSW;
  578. #ifdef _UNICODE
  579. #define ACMFORMATTAGDETAILS     ACMFORMATTAGDETAILSW
  580. #define PACMFORMATTAGDETAILS    PACMFORMATTAGDETAILSW
  581. #define LPACMFORMATTAGDETAILS   LPACMFORMATTAGDETAILSW
  582. #else
  583. #define ACMFORMATTAGDETAILS     ACMFORMATTAGDETAILSA
  584. #define PACMFORMATTAGDETAILS    PACMFORMATTAGDETAILSA
  585. #define LPACMFORMATTAGDETAILS   LPACMFORMATTAGDETAILSA
  586. #endif
  587. #else
  588. typedef struct tACMFORMATTAGDETAILS
  589. {
  590.     DWORD           cbStruct;
  591.     DWORD           dwFormatTagIndex;
  592.     DWORD           dwFormatTag;
  593.     DWORD           cbFormatSize;
  594.     DWORD           fdwSupport;
  595.     DWORD           cStandardFormats;
  596.     char            szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
  597. } ACMFORMATTAGDETAILS, *PACMFORMATTAGDETAILS, FAR *LPACMFORMATTAGDETAILS;
  598. #endif
  599. #ifdef _WIN32
  600. MMRESULT ACMAPI acmFormatTagDetailsA
  601. (
  602.     HACMDRIVER              had,
  603.     LPACMFORMATTAGDETAILSA  paftd,
  604.     DWORD                   fdwDetails
  605. );
  606. MMRESULT ACMAPI acmFormatTagDetailsW
  607. (
  608.     HACMDRIVER              had,
  609.     LPACMFORMATTAGDETAILSW  paftd,
  610.     DWORD                   fdwDetails
  611. );
  612. #ifdef _UNICODE
  613. #define acmFormatTagDetails     acmFormatTagDetailsW
  614. #else
  615. #define acmFormatTagDetails     acmFormatTagDetailsA
  616. #endif
  617. #else
  618. MMRESULT ACMAPI acmFormatTagDetails
  619. (
  620.     HACMDRIVER              had,
  621.     LPACMFORMATTAGDETAILS   paftd,
  622.     DWORD                   fdwDetails
  623. );
  624. #endif
  625. #define ACM_FORMATTAGDETAILSF_INDEX         0x00000000L
  626. #define ACM_FORMATTAGDETAILSF_FORMATTAG     0x00000001L
  627. #define ACM_FORMATTAGDETAILSF_LARGESTSIZE   0x00000002L
  628. #define ACM_FORMATTAGDETAILSF_QUERYMASK     0x0000000FL
  629. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  630. //
  631. //  acmFormatTagEnum()
  632. //
  633. //
  634. //
  635. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  636. #ifdef _WIN32
  637. typedef BOOL (CALLBACK *ACMFORMATTAGENUMCBA)
  638. (
  639.     HACMDRIVERID            hadid,
  640.     LPACMFORMATTAGDETAILSA  paftd,
  641.     DWORD_PTR               dwInstance,
  642.     DWORD                   fdwSupport
  643. );
  644. MMRESULT ACMAPI acmFormatTagEnumA
  645. (
  646.     HACMDRIVER              had,
  647.     LPACMFORMATTAGDETAILSA  paftd,
  648.     ACMFORMATTAGENUMCBA     fnCallback,
  649.     DWORD_PTR               dwInstance,
  650.     DWORD                   fdwEnum
  651. );
  652. typedef BOOL (CALLBACK *ACMFORMATTAGENUMCBW)
  653. (
  654.     HACMDRIVERID            hadid,
  655.     LPACMFORMATTAGDETAILSW  paftd,
  656.     DWORD_PTR               dwInstance,
  657.     DWORD                   fdwSupport
  658. );
  659. MMRESULT ACMAPI acmFormatTagEnumW
  660. (
  661.     HACMDRIVER              had,
  662.     LPACMFORMATTAGDETAILSW  paftd,
  663.     ACMFORMATTAGENUMCBW     fnCallback,
  664.     DWORD_PTR               dwInstance,
  665.     DWORD                   fdwEnum
  666. );
  667. #ifdef _UNICODE
  668. #define ACMFORMATTAGENUMCB      ACMFORMATTAGENUMCBW
  669. #define acmFormatTagEnum        acmFormatTagEnumW
  670. #else
  671. #define ACMFORMATTAGENUMCB      ACMFORMATTAGENUMCBA
  672. #define acmFormatTagEnum        acmFormatTagEnumA
  673. #endif
  674. #else
  675. typedef BOOL (CALLBACK *ACMFORMATTAGENUMCB)
  676. (
  677.     HACMDRIVERID            hadid,
  678.     LPACMFORMATTAGDETAILS   paftd,
  679.     DWORD_PTR               dwInstance,
  680.     DWORD                   fdwSupport
  681. );
  682. MMRESULT ACMAPI acmFormatTagEnum
  683. (
  684.     HACMDRIVER              had,
  685.     LPACMFORMATTAGDETAILS   paftd,
  686.     ACMFORMATTAGENUMCB      fnCallback,
  687.     DWORD_PTR               dwInstance,
  688.     DWORD                   fdwEnum
  689. );
  690. #endif
  691. //--------------------------------------------------------------------------;
  692. //
  693. //  ACM Formats
  694. //
  695. //
  696. //
  697. //
  698. //--------------------------------------------------------------------------;
  699. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  700. //
  701. //  acmFormatDetails()
  702. //
  703. //
  704. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  705. #define ACMFORMATDETAILS_FORMAT_CHARS   128
  706. #ifdef _WIN32
  707. typedef struct tACMFORMATDETAILSA
  708. {
  709.     DWORD           cbStruct;
  710.     DWORD           dwFormatIndex;
  711.     DWORD           dwFormatTag;
  712.     DWORD           fdwSupport;
  713.     LPWAVEFORMATEX  pwfx;
  714.     DWORD           cbwfx;
  715.     char            szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
  716. } ACMFORMATDETAILSA, *PACMFORMATDETAILSA, FAR *LPACMFORMATDETAILSA;
  717. typedef struct tACMFORMATDETAILSW
  718. {
  719.     DWORD           cbStruct;
  720.     DWORD           dwFormatIndex;
  721.     DWORD           dwFormatTag;
  722.     DWORD           fdwSupport;
  723.     LPWAVEFORMATEX  pwfx;
  724.     DWORD           cbwfx;
  725.     WCHAR           szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
  726. } ACMFORMATDETAILSW, *PACMFORMATDETAILSW, FAR *LPACMFORMATDETAILSW;
  727. #ifdef _UNICODE
  728. #define ACMFORMATDETAILS    ACMFORMATDETAILSW
  729. #define PACMFORMATDETAILS   PACMFORMATDETAILSW
  730. #define LPACMFORMATDETAILS  LPACMFORMATDETAILSW
  731. #else
  732. #define ACMFORMATDETAILS    ACMFORMATDETAILSA
  733. #define PACMFORMATDETAILS   PACMFORMATDETAILSA
  734. #define LPACMFORMATDETAILS  LPACMFORMATDETAILSA
  735. #endif
  736. #else
  737. typedef struct tACMFORMATDETAILS
  738. {
  739.     DWORD           cbStruct;
  740.     DWORD           dwFormatIndex;
  741.     DWORD           dwFormatTag;
  742.     DWORD           fdwSupport;
  743.     LPWAVEFORMATEX  pwfx;
  744.     DWORD           cbwfx;
  745.     char            szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
  746. } ACMFORMATDETAILS, *PACMFORMATDETAILS, FAR *LPACMFORMATDETAILS;
  747. #endif
  748. #ifdef _WIN32
  749. MMRESULT ACMAPI acmFormatDetailsA
  750. (
  751.     HACMDRIVER              had,
  752.     LPACMFORMATDETAILSA     pafd,
  753.     DWORD                   fdwDetails
  754. );
  755. MMRESULT ACMAPI acmFormatDetailsW
  756. (
  757.     HACMDRIVER              had,
  758.     LPACMFORMATDETAILSW     pafd,
  759.     DWORD                   fdwDetails
  760. );
  761. #ifdef _UNICODE
  762. #define acmFormatDetails    acmFormatDetailsW
  763. #else
  764. #define acmFormatDetails    acmFormatDetailsA
  765. #endif
  766. #else
  767. MMRESULT ACMAPI acmFormatDetails
  768. (
  769.     HACMDRIVER              had,
  770.     LPACMFORMATDETAILS      pafd,
  771.     DWORD                   fdwDetails
  772. );
  773. #endif
  774. #define ACM_FORMATDETAILSF_INDEX        0x00000000L
  775. #define ACM_FORMATDETAILSF_FORMAT       0x00000001L
  776. #define ACM_FORMATDETAILSF_QUERYMASK    0x0000000FL
  777. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  778. //
  779. //  acmFormatEnum()
  780. //
  781. //
  782. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  783. #ifdef _WIN32
  784. typedef BOOL (CALLBACK *ACMFORMATENUMCBA)
  785. (
  786.     HACMDRIVERID            hadid,
  787.     LPACMFORMATDETAILSA     pafd,
  788.     DWORD_PTR               dwInstance,
  789.     DWORD                   fdwSupport
  790. );
  791. MMRESULT ACMAPI acmFormatEnumA
  792. (
  793.     HACMDRIVER              had,
  794.     LPACMFORMATDETAILSA     pafd,
  795.     ACMFORMATENUMCBA        fnCallback,
  796.     DWORD_PTR               dwInstance,
  797.     DWORD                   fdwEnum
  798. );
  799. typedef BOOL (CALLBACK *ACMFORMATENUMCBW)
  800. (
  801.     HACMDRIVERID            hadid,
  802.     LPACMFORMATDETAILSW     pafd,
  803.     DWORD_PTR               dwInstance,
  804.     DWORD                   fdwSupport
  805. );
  806. MMRESULT ACMAPI acmFormatEnumW
  807. (
  808.     HACMDRIVER              had,
  809.     LPACMFORMATDETAILSW     pafd,
  810.     ACMFORMATENUMCBW        fnCallback,
  811.     DWORD_PTR               dwInstance,
  812.     DWORD                   fdwEnum
  813. );
  814. #ifdef _UNICODE
  815. #define ACMFORMATENUMCB     ACMFORMATENUMCBW
  816. #define acmFormatEnum       acmFormatEnumW
  817. #else
  818. #define ACMFORMATENUMCB     ACMFORMATENUMCBA
  819. #define acmFormatEnum       acmFormatEnumA
  820. #endif
  821. #else
  822. typedef BOOL (CALLBACK *ACMFORMATENUMCB)
  823. (
  824.     HACMDRIVERID            hadid,
  825.     LPACMFORMATDETAILS      pafd,
  826.     DWORD_PTR               dwInstance,
  827.     DWORD                   fdwSupport
  828. );
  829. MMRESULT ACMAPI acmFormatEnum
  830. (
  831.     HACMDRIVER              had,
  832.     LPACMFORMATDETAILS      pafd,
  833.     ACMFORMATENUMCB         fnCallback,
  834.     DWORD_PTR               dwInstance,
  835.     DWORD                   fdwEnum
  836. );
  837. #endif
  838. #define ACM_FORMATENUMF_WFORMATTAG       0x00010000L
  839. #define ACM_FORMATENUMF_NCHANNELS        0x00020000L
  840. #define ACM_FORMATENUMF_NSAMPLESPERSEC   0x00040000L
  841. #define ACM_FORMATENUMF_WBITSPERSAMPLE   0x00080000L
  842. #define ACM_FORMATENUMF_CONVERT          0x00100000L
  843. #define ACM_FORMATENUMF_SUGGEST          0x00200000L
  844. #define ACM_FORMATENUMF_HARDWARE         0x00400000L
  845. #define ACM_FORMATENUMF_INPUT            0x00800000L
  846. #define ACM_FORMATENUMF_OUTPUT           0x01000000L
  847. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  848. //
  849. //  acmFormatSuggest()
  850. //
  851. //
  852. //
  853. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  854. MMRESULT ACMAPI acmFormatSuggest
  855. (
  856.     HACMDRIVER          had,
  857.     LPWAVEFORMATEX      pwfxSrc,
  858.     LPWAVEFORMATEX      pwfxDst,
  859.     DWORD               cbwfxDst,
  860.     DWORD               fdwSuggest
  861. );
  862. #define ACM_FORMATSUGGESTF_WFORMATTAG       0x00010000L
  863. #define ACM_FORMATSUGGESTF_NCHANNELS        0x00020000L
  864. #define ACM_FORMATSUGGESTF_NSAMPLESPERSEC   0x00040000L
  865. #define ACM_FORMATSUGGESTF_WBITSPERSAMPLE   0x00080000L
  866. #define ACM_FORMATSUGGESTF_TYPEMASK         0x00FF0000L
  867. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  868. //
  869. //  acmFormatChoose()
  870. //
  871. //
  872. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  873. #ifdef _WIN32
  874. #define ACMHELPMSGSTRINGA       "acmchoose_help"
  875. #define ACMHELPMSGSTRINGW       L"acmchoose_help"
  876. #define ACMHELPMSGCONTEXTMENUA  "acmchoose_contextmenu"
  877. #define ACMHELPMSGCONTEXTMENUW  L"acmchoose_contextmenu"
  878. #define ACMHELPMSGCONTEXTHELPA  "acmchoose_contexthelp"
  879. #define ACMHELPMSGCONTEXTHELPW  L"acmchoose_contexthelp"
  880. #ifdef _UNICODE
  881. #define ACMHELPMSGSTRING        ACMHELPMSGSTRINGW
  882. #define ACMHELPMSGCONTEXTMENU   ACMHELPMSGCONTEXTMENUW
  883. #define ACMHELPMSGCONTEXTHELP   ACMHELPMSGCONTEXTHELPW
  884. #else
  885. #define ACMHELPMSGSTRING        ACMHELPMSGSTRINGA
  886. #define ACMHELPMSGCONTEXTMENU   ACMHELPMSGCONTEXTMENUA
  887. #define ACMHELPMSGCONTEXTHELP   ACMHELPMSGCONTEXTHELPA
  888. #endif
  889. #else
  890. #define ACMHELPMSGSTRING        "acmchoose_help"
  891. #define ACMHELPMSGCONTEXTMENU   "acmchoose_contextmenu"
  892. #define ACMHELPMSGCONTEXTHELP   "acmchoose_contexthelp"
  893. #endif
  894. //
  895. //  MM_ACM_FORMATCHOOSE is sent to hook callbacks by the Format Chooser
  896. //  Dialog...
  897. //
  898. #define MM_ACM_FORMATCHOOSE             (0x8000)
  899. #define FORMATCHOOSE_MESSAGE            0
  900. #define FORMATCHOOSE_FORMATTAG_VERIFY   (FORMATCHOOSE_MESSAGE+0)
  901. #define FORMATCHOOSE_FORMAT_VERIFY      (FORMATCHOOSE_MESSAGE+1)
  902. #define FORMATCHOOSE_CUSTOM_VERIFY      (FORMATCHOOSE_MESSAGE+2)
  903. #ifdef _WIN32
  904. typedef UINT (CALLBACK *ACMFORMATCHOOSEHOOKPROCA)
  905. (
  906.     HWND                    hwnd,
  907.     UINT                    uMsg,
  908.     WPARAM                  wParam,
  909.     LPARAM                  lParam
  910. );
  911. typedef UINT (CALLBACK *ACMFORMATCHOOSEHOOKPROCW)
  912. (
  913.     HWND                    hwnd,
  914.     UINT                    uMsg,
  915.     WPARAM                  wParam,
  916.     LPARAM                  lParam
  917. );
  918. #ifdef _UNICODE
  919. #define ACMFORMATCHOOSEHOOKPROC     ACMFORMATCHOOSEHOOKPROCW
  920. #else
  921. #define ACMFORMATCHOOSEHOOKPROC     ACMFORMATCHOOSEHOOKPROCA
  922. #endif
  923. #else
  924. typedef UINT (CALLBACK *ACMFORMATCHOOSEHOOKPROC)
  925. (
  926.     HWND                    hwnd,
  927.     UINT                    uMsg,
  928.     WPARAM                  wParam,
  929.     LPARAM                  lParam
  930. );
  931. #endif
  932. //
  933. //
  934. //
  935. //
  936. #ifdef _WIN32
  937. typedef struct tACMFORMATCHOOSEA
  938. {
  939.     DWORD           cbStruct;           // sizeof(ACMFORMATCHOOSE)
  940.     DWORD           fdwStyle;           // chooser style flags
  941.     HWND            hwndOwner;          // caller's window handle
  942.     LPWAVEFORMATEX  pwfx;               // ptr to wfx buf to receive choice
  943.     DWORD           cbwfx;              // size of mem buf for pwfx
  944.     LPCSTR          pszTitle;           // dialog box title bar
  945.     char            szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
  946.     char            szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
  947.     LPSTR           pszName;            // custom name selection
  948.     DWORD           cchName;            // size in chars of mem buf for pszName
  949.     DWORD           fdwEnum;            // format enumeration restrictions
  950.     LPWAVEFORMATEX  pwfxEnum;           // format describing restrictions
  951.     HINSTANCE       hInstance;          // app instance containing dlg template
  952.     LPCSTR          pszTemplateName;    // custom template name
  953.     LPARAM          lCustData;          // data passed to hook fn.
  954.     ACMFORMATCHOOSEHOOKPROCA pfnHook;   // ptr to hook function
  955. } ACMFORMATCHOOSEA, *PACMFORMATCHOOSEA, FAR *LPACMFORMATCHOOSEA;
  956. typedef struct tACMFORMATCHOOSEW
  957. {
  958.     DWORD           cbStruct;           // sizeof(ACMFORMATCHOOSE)
  959.     DWORD           fdwStyle;           // chooser style flags
  960.     HWND            hwndOwner;          // caller's window handle
  961.     LPWAVEFORMATEX  pwfx;               // ptr to wfx buf to receive choice
  962.     DWORD           cbwfx;              // size of mem buf for pwfx
  963.     LPCWSTR         pszTitle;           // dialog box title bar
  964.     WCHAR           szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
  965.     WCHAR           szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
  966.     LPWSTR          pszName;            // custom name selection
  967.     DWORD           cchName;            // size in chars of mem buf for pszName
  968.     DWORD           fdwEnum;            // format enumeration restrictions
  969.     LPWAVEFORMATEX  pwfxEnum;           // format describing restrictions
  970.     HINSTANCE       hInstance;          // app instance containing dlg template
  971.     LPCWSTR         pszTemplateName;    // custom template name
  972.     LPARAM          lCustData;          // data passed to hook fn.
  973.     ACMFORMATCHOOSEHOOKPROCW pfnHook;   // ptr to hook function
  974. } ACMFORMATCHOOSEW, *PACMFORMATCHOOSEW, FAR *LPACMFORMATCHOOSEW;
  975. #ifdef _UNICODE
  976. #define ACMFORMATCHOOSE     ACMFORMATCHOOSEW
  977. #define PACMFORMATCHOOSE    PACMFORMATCHOOSEW
  978. #define LPACMFORMATCHOOSE   LPACMFORMATCHOOSEW
  979. #else
  980. #define ACMFORMATCHOOSE     ACMFORMATCHOOSEA
  981. #define PACMFORMATCHOOSE    PACMFORMATCHOOSEA
  982. #define LPACMFORMATCHOOSE   LPACMFORMATCHOOSEA
  983. #endif
  984. #else
  985. typedef struct tACMFORMATCHOOSE
  986. {
  987.     DWORD           cbStruct;           // sizeof(ACMFORMATCHOOSE)
  988.     DWORD           fdwStyle;           // chooser style flags
  989.     HWND            hwndOwner;          // caller's window handle
  990.     LPWAVEFORMATEX  pwfx;               // ptr to wfx buf to receive choice
  991.     DWORD           cbwfx;              // size of mem buf for pwfx
  992.     LPCSTR          pszTitle;           // dialog box title bar
  993.     char            szFormatTag[ACMFORMATTAGDETAILS_FORMATTAG_CHARS];
  994.     char            szFormat[ACMFORMATDETAILS_FORMAT_CHARS];
  995.     LPSTR           pszName;            // custom name selection
  996.     DWORD           cchName;            // size in chars of mem buf for pszName
  997.     DWORD           fdwEnum;            // format enumeration restrictions
  998.     LPWAVEFORMATEX  pwfxEnum;           // format describing restrictions
  999.     HINSTANCE       hInstance;          // app instance containing dlg template
  1000.     LPCSTR          pszTemplateName;    // custom template name
  1001.     LPARAM          lCustData;          // data passed to hook fn.
  1002.     ACMFORMATCHOOSEHOOKPROC pfnHook;    // ptr to hook function
  1003. } ACMFORMATCHOOSE, *PACMFORMATCHOOSE, FAR *LPACMFORMATCHOOSE;
  1004. #endif
  1005. //
  1006. //  ACMFORMATCHOOSE.fdwStyle
  1007. //
  1008. //
  1009. //
  1010. #define ACMFORMATCHOOSE_STYLEF_SHOWHELP              0x00000004L
  1011. #define ACMFORMATCHOOSE_STYLEF_ENABLEHOOK            0x00000008L
  1012. #define ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATE        0x00000010L
  1013. #define ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATEHANDLE  0x00000020L
  1014. #define ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT       0x00000040L
  1015. #define ACMFORMATCHOOSE_STYLEF_CONTEXTHELP           0x00000080L
  1016. #ifdef _WIN32
  1017. MMRESULT ACMAPI acmFormatChooseA
  1018. (
  1019.     LPACMFORMATCHOOSEA      pafmtc
  1020. );
  1021. MMRESULT ACMAPI acmFormatChooseW
  1022. (
  1023.     LPACMFORMATCHOOSEW      pafmtc
  1024. );
  1025. #ifdef _UNICODE
  1026. #define acmFormatChoose     acmFormatChooseW
  1027. #else
  1028. #define acmFormatChoose     acmFormatChooseA
  1029. #endif
  1030. #else
  1031. MMRESULT ACMAPI acmFormatChoose
  1032. (
  1033.     LPACMFORMATCHOOSE       pafmtc
  1034. );
  1035. #endif
  1036. //--------------------------------------------------------------------------;
  1037. //
  1038. //  ACM Filter Tags
  1039. //
  1040. //
  1041. //
  1042. //
  1043. //--------------------------------------------------------------------------;
  1044. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1045. //
  1046. //  acmFilterTagDetails()
  1047. //
  1048. //
  1049. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1050. #define ACMFILTERTAGDETAILS_FILTERTAG_CHARS 48
  1051. #ifdef _WIN32
  1052. typedef struct tACMFILTERTAGDETAILSA
  1053. {
  1054.     DWORD           cbStruct;
  1055.     DWORD           dwFilterTagIndex;
  1056.     DWORD           dwFilterTag;
  1057.     DWORD           cbFilterSize;
  1058.     DWORD           fdwSupport;
  1059.     DWORD           cStandardFilters;
  1060.     char            szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
  1061. } ACMFILTERTAGDETAILSA, *PACMFILTERTAGDETAILSA, FAR *LPACMFILTERTAGDETAILSA;
  1062. typedef struct tACMFILTERTAGDETAILSW
  1063. {
  1064.     DWORD           cbStruct;
  1065.     DWORD           dwFilterTagIndex;
  1066.     DWORD           dwFilterTag;
  1067.     DWORD           cbFilterSize;
  1068.     DWORD           fdwSupport;
  1069.     DWORD           cStandardFilters;
  1070.     WCHAR           szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
  1071. } ACMFILTERTAGDETAILSW, *PACMFILTERTAGDETAILSW, FAR *LPACMFILTERTAGDETAILSW;
  1072. #ifdef _UNICODE
  1073. #define ACMFILTERTAGDETAILS     ACMFILTERTAGDETAILSW
  1074. #define PACMFILTERTAGDETAILS    PACMFILTERTAGDETAILSW
  1075. #define LPACMFILTERTAGDETAILS   LPACMFILTERTAGDETAILSW
  1076. #else
  1077. #define ACMFILTERTAGDETAILS     ACMFILTERTAGDETAILSA
  1078. #define PACMFILTERTAGDETAILS    PACMFILTERTAGDETAILSA
  1079. #define LPACMFILTERTAGDETAILS   LPACMFILTERTAGDETAILSA
  1080. #endif
  1081. #else
  1082. typedef struct tACMFILTERTAGDETAILS
  1083. {
  1084.     DWORD           cbStruct;
  1085.     DWORD           dwFilterTagIndex;
  1086.     DWORD           dwFilterTag;
  1087.     DWORD           cbFilterSize;
  1088.     DWORD           fdwSupport;
  1089.     DWORD           cStandardFilters;
  1090.     char            szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
  1091. } ACMFILTERTAGDETAILS, *PACMFILTERTAGDETAILS, FAR *LPACMFILTERTAGDETAILS;
  1092. #endif
  1093. #ifdef _WIN32
  1094. MMRESULT ACMAPI acmFilterTagDetailsA
  1095. (
  1096.     HACMDRIVER              had,
  1097.     LPACMFILTERTAGDETAILSA  paftd,
  1098.     DWORD                   fdwDetails
  1099. );
  1100. MMRESULT ACMAPI acmFilterTagDetailsW
  1101. (
  1102.     HACMDRIVER              had,
  1103.     LPACMFILTERTAGDETAILSW  paftd,
  1104.     DWORD                   fdwDetails
  1105. );
  1106. #ifdef _UNICODE
  1107. #define acmFilterTagDetails     acmFilterTagDetailsW
  1108. #else
  1109. #define acmFilterTagDetails     acmFilterTagDetailsA
  1110. #endif
  1111. #else
  1112. MMRESULT ACMAPI acmFilterTagDetails
  1113. (
  1114.     HACMDRIVER              had,
  1115.     LPACMFILTERTAGDETAILS   paftd,
  1116.     DWORD                   fdwDetails
  1117. );
  1118. #endif
  1119. #define ACM_FILTERTAGDETAILSF_INDEX         0x00000000L
  1120. #define ACM_FILTERTAGDETAILSF_FILTERTAG     0x00000001L
  1121. #define ACM_FILTERTAGDETAILSF_LARGESTSIZE   0x00000002L
  1122. #define ACM_FILTERTAGDETAILSF_QUERYMASK     0x0000000FL
  1123. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1124. //
  1125. //  acmFilterTagEnum()
  1126. //
  1127. //
  1128. //
  1129. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1130. #ifdef _WIN32
  1131. typedef BOOL (CALLBACK *ACMFILTERTAGENUMCBA)
  1132. (
  1133.     HACMDRIVERID            hadid,
  1134.     LPACMFILTERTAGDETAILSA  paftd,
  1135.     DWORD_PTR               dwInstance,
  1136.     DWORD                   fdwSupport
  1137. );
  1138. MMRESULT ACMAPI acmFilterTagEnumA
  1139. (
  1140.     HACMDRIVER              had,
  1141.     LPACMFILTERTAGDETAILSA  paftd,
  1142.     ACMFILTERTAGENUMCBA     fnCallback,
  1143.     DWORD_PTR               dwInstance,
  1144.     DWORD                   fdwEnum
  1145. );
  1146. typedef BOOL (CALLBACK *ACMFILTERTAGENUMCBW)
  1147. (
  1148.     HACMDRIVERID            hadid,
  1149.     LPACMFILTERTAGDETAILSW  paftd,
  1150.     DWORD_PTR               dwInstance,
  1151.     DWORD                   fdwSupport
  1152. );
  1153. MMRESULT ACMAPI acmFilterTagEnumW
  1154. (
  1155.     HACMDRIVER              had,
  1156.     LPACMFILTERTAGDETAILSW  paftd,
  1157.     ACMFILTERTAGENUMCBW     fnCallback,
  1158.     DWORD_PTR               dwInstance,
  1159.     DWORD                   fdwEnum
  1160. );
  1161. #ifdef _UNICODE
  1162. #define ACMFILTERTAGENUMCB  ACMFILTERTAGENUMCBW
  1163. #define acmFilterTagEnum    acmFilterTagEnumW
  1164. #else
  1165. #define ACMFILTERTAGENUMCB  ACMFILTERTAGENUMCBA
  1166. #define acmFilterTagEnum    acmFilterTagEnumA
  1167. #endif
  1168. #else
  1169. typedef BOOL (CALLBACK *ACMFILTERTAGENUMCB)
  1170. (
  1171.     HACMDRIVERID            hadid,
  1172.     LPACMFILTERTAGDETAILS   paftd,
  1173.     DWORD_PTR               dwInstance,
  1174.     DWORD                   fdwSupport
  1175. );
  1176. MMRESULT ACMAPI acmFilterTagEnum
  1177. (
  1178.     HACMDRIVER              had,
  1179.     LPACMFILTERTAGDETAILS   paftd,
  1180.     ACMFILTERTAGENUMCB      fnCallback,
  1181.     DWORD_PTR               dwInstance,
  1182.     DWORD                   fdwEnum
  1183. );
  1184. #endif
  1185. //--------------------------------------------------------------------------;
  1186. //
  1187. //  ACM Filters
  1188. //
  1189. //
  1190. //
  1191. //
  1192. //--------------------------------------------------------------------------;
  1193. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1194. //
  1195. //  acmFilterDetails()
  1196. //
  1197. //
  1198. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1199. #define ACMFILTERDETAILS_FILTER_CHARS   128
  1200. #ifdef _WIN32
  1201. typedef struct tACMFILTERDETAILSA
  1202. {
  1203.     DWORD           cbStruct;
  1204.     DWORD           dwFilterIndex;
  1205.     DWORD           dwFilterTag;
  1206.     DWORD           fdwSupport;
  1207.     LPWAVEFILTER    pwfltr;
  1208.     DWORD           cbwfltr;
  1209.     char            szFilter[ACMFILTERDETAILS_FILTER_CHARS];
  1210. } ACMFILTERDETAILSA, *PACMFILTERDETAILSA, FAR *LPACMFILTERDETAILSA;
  1211. typedef struct tACMFILTERDETAILSW
  1212. {
  1213.     DWORD           cbStruct;
  1214.     DWORD           dwFilterIndex;
  1215.     DWORD           dwFilterTag;
  1216.     DWORD           fdwSupport;
  1217.     LPWAVEFILTER    pwfltr;
  1218.     DWORD           cbwfltr;
  1219.     WCHAR           szFilter[ACMFILTERDETAILS_FILTER_CHARS];
  1220. } ACMFILTERDETAILSW, *PACMFILTERDETAILSW, FAR *LPACMFILTERDETAILSW;
  1221. #ifdef _UNICODE
  1222. #define ACMFILTERDETAILS    ACMFILTERDETAILSW
  1223. #define PACMFILTERDETAILS   PACMFILTERDETAILSW
  1224. #define LPACMFILTERDETAILS  LPACMFILTERDETAILSW
  1225. #else
  1226. #define ACMFILTERDETAILS    ACMFILTERDETAILSA
  1227. #define PACMFILTERDETAILS   PACMFILTERDETAILSA
  1228. #define LPACMFILTERDETAILS  LPACMFILTERDETAILSA
  1229. #endif
  1230. #else
  1231. typedef struct tACMFILTERDETAILS
  1232. {
  1233.     DWORD           cbStruct;
  1234.     DWORD           dwFilterIndex;
  1235.     DWORD           dwFilterTag;
  1236.     DWORD           fdwSupport;
  1237.     LPWAVEFILTER    pwfltr;
  1238.     DWORD           cbwfltr;
  1239.     char            szFilter[ACMFILTERDETAILS_FILTER_CHARS];
  1240. } ACMFILTERDETAILS, *PACMFILTERDETAILS, FAR *LPACMFILTERDETAILS;
  1241. #endif
  1242. #ifdef _WIN32
  1243. MMRESULT ACMAPI acmFilterDetailsA
  1244. (
  1245.     HACMDRIVER              had,
  1246.     LPACMFILTERDETAILSA     pafd,
  1247.     DWORD                   fdwDetails
  1248. );
  1249. MMRESULT ACMAPI acmFilterDetailsW
  1250. (
  1251.     HACMDRIVER              had,
  1252.     LPACMFILTERDETAILSW     pafd,
  1253.     DWORD                   fdwDetails
  1254. );
  1255. #ifdef _UNICODE
  1256. #define acmFilterDetails    acmFilterDetailsW
  1257. #else
  1258. #define acmFilterDetails    acmFilterDetailsA
  1259. #endif
  1260. #else
  1261. MMRESULT ACMAPI acmFilterDetails
  1262. (
  1263.     HACMDRIVER              had,
  1264.     LPACMFILTERDETAILS      pafd,
  1265.     DWORD                   fdwDetails
  1266. );
  1267. #endif
  1268. #define ACM_FILTERDETAILSF_INDEX        0x00000000L
  1269. #define ACM_FILTERDETAILSF_FILTER       0x00000001L
  1270. #define ACM_FILTERDETAILSF_QUERYMASK    0x0000000FL
  1271. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1272. //
  1273. //  acmFilterEnum()
  1274. //
  1275. //
  1276. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1277. #ifdef _WIN32
  1278. typedef BOOL (CALLBACK *ACMFILTERENUMCBA)
  1279. (
  1280.     HACMDRIVERID            hadid,
  1281.     LPACMFILTERDETAILSA     pafd,
  1282.     DWORD_PTR               dwInstance,
  1283.     DWORD                   fdwSupport
  1284. );
  1285. MMRESULT ACMAPI acmFilterEnumA
  1286. (
  1287.     HACMDRIVER              had,
  1288.     LPACMFILTERDETAILSA     pafd,
  1289.     ACMFILTERENUMCBA        fnCallback,
  1290.     DWORD_PTR               dwInstance,
  1291.     DWORD                   fdwEnum
  1292. );
  1293. typedef BOOL (CALLBACK *ACMFILTERENUMCBW)
  1294. (
  1295.     HACMDRIVERID            hadid,
  1296.     LPACMFILTERDETAILSW     pafd,
  1297.     DWORD_PTR               dwInstance,
  1298.     DWORD                   fdwSupport
  1299. );
  1300. MMRESULT ACMAPI acmFilterEnumW
  1301. (
  1302.     HACMDRIVER              had,
  1303.     LPACMFILTERDETAILSW     pafd,
  1304.     ACMFILTERENUMCBW        fnCallback,
  1305.     DWORD_PTR               dwInstance,
  1306.     DWORD                   fdwEnum
  1307. );
  1308. #ifdef _UNICODE
  1309. #define ACMFILTERENUMCB     ACMFILTERENUMCBW
  1310. #define acmFilterEnum       acmFilterEnumW
  1311. #else
  1312. #define ACMFILTERENUMCB     ACMFILTERENUMCBA
  1313. #define acmFilterEnum       acmFilterEnumA
  1314. #endif
  1315. #else
  1316. typedef BOOL (CALLBACK *ACMFILTERENUMCB)
  1317. (
  1318.     HACMDRIVERID            hadid,
  1319.     LPACMFILTERDETAILS      pafd,
  1320.     DWORD_PTR               dwInstance,
  1321.     DWORD                   fdwSupport
  1322. );
  1323. MMRESULT ACMAPI acmFilterEnum
  1324. (
  1325.     HACMDRIVER              had,
  1326.     LPACMFILTERDETAILS      pafd,
  1327.     ACMFILTERENUMCB         fnCallback,
  1328.     DWORD_PTR               dwInstance,
  1329.     DWORD                   fdwEnum
  1330. );
  1331. #endif
  1332. #define ACM_FILTERENUMF_DWFILTERTAG         0x00010000L
  1333. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1334. //
  1335. //  acmFilterChoose()
  1336. //
  1337. //
  1338. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1339. //
  1340. //  MM_ACM_FILTERCHOOSE is sent to hook callbacks by the Filter Chooser
  1341. //  Dialog...
  1342. //
  1343. #define MM_ACM_FILTERCHOOSE             (0x8000)
  1344. #define FILTERCHOOSE_MESSAGE            0
  1345. #define FILTERCHOOSE_FILTERTAG_VERIFY   (FILTERCHOOSE_MESSAGE+0)
  1346. #define FILTERCHOOSE_FILTER_VERIFY      (FILTERCHOOSE_MESSAGE+1)
  1347. #define FILTERCHOOSE_CUSTOM_VERIFY      (FILTERCHOOSE_MESSAGE+2)
  1348. #ifdef _WIN32
  1349. typedef UINT (CALLBACK *ACMFILTERCHOOSEHOOKPROCA)
  1350. (
  1351.     HWND                    hwnd,
  1352.     UINT                    uMsg,
  1353.     WPARAM                  wParam,
  1354.     LPARAM                  lParam
  1355. );
  1356. typedef UINT (CALLBACK *ACMFILTERCHOOSEHOOKPROCW)
  1357. (
  1358.     HWND                    hwnd,
  1359.     UINT                    uMsg,
  1360.     WPARAM                  wParam,
  1361.     LPARAM                  lParam
  1362. );
  1363. #ifdef _UNICODE
  1364. #define ACMFILTERCHOOSEHOOKPROC     ACMFILTERCHOOSEHOOKPROCW
  1365. #else
  1366. #define ACMFILTERCHOOSEHOOKPROC     ACMFILTERCHOOSEHOOKPROCA
  1367. #endif
  1368. #else
  1369. typedef UINT (CALLBACK *ACMFILTERCHOOSEHOOKPROC)
  1370. (
  1371.     HWND                    hwnd,
  1372.     UINT                    uMsg,
  1373.     WPARAM                  wParam,
  1374.     LPARAM                  lParam
  1375. );
  1376. #endif
  1377. //
  1378. //  ACMFILTERCHOOSE
  1379. //
  1380. //
  1381. #ifdef _WIN32
  1382. typedef struct tACMFILTERCHOOSEA
  1383. {
  1384.     DWORD           cbStruct;           // sizeof(ACMFILTERCHOOSE)
  1385.     DWORD           fdwStyle;           // chooser style flags
  1386.     HWND            hwndOwner;          // caller's window handle
  1387.     LPWAVEFILTER    pwfltr;             // ptr to wfltr buf to receive choice
  1388.     DWORD           cbwfltr;            // size of mem buf for pwfltr
  1389.     LPCSTR          pszTitle;
  1390.     char            szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
  1391.     char            szFilter[ACMFILTERDETAILS_FILTER_CHARS];
  1392.     LPSTR           pszName;            // custom name selection
  1393.     DWORD           cchName;            // size in chars of mem buf for pszName
  1394.     DWORD           fdwEnum;            // filter enumeration restrictions
  1395.     LPWAVEFILTER    pwfltrEnum;         // filter describing restrictions
  1396.     HINSTANCE       hInstance;          // app instance containing dlg template
  1397.     LPCSTR          pszTemplateName;    // custom template name
  1398.     LPARAM          lCustData;          // data passed to hook fn.
  1399.     ACMFILTERCHOOSEHOOKPROCA pfnHook;    // ptr to hook function
  1400. } ACMFILTERCHOOSEA, *PACMFILTERCHOOSEA, FAR *LPACMFILTERCHOOSEA;
  1401. typedef struct tACMFILTERCHOOSEW
  1402. {
  1403.     DWORD           cbStruct;           // sizeof(ACMFILTERCHOOSE)
  1404.     DWORD           fdwStyle;           // chooser style flags
  1405.     HWND            hwndOwner;          // caller's window handle
  1406.     LPWAVEFILTER    pwfltr;             // ptr to wfltr buf to receive choice
  1407.     DWORD           cbwfltr;            // size of mem buf for pwfltr
  1408.     LPCWSTR         pszTitle;
  1409.     WCHAR           szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
  1410.     WCHAR           szFilter[ACMFILTERDETAILS_FILTER_CHARS];
  1411.     LPWSTR          pszName;            // custom name selection
  1412.     DWORD           cchName;            // size in chars of mem buf for pszName
  1413.     DWORD           fdwEnum;            // filter enumeration restrictions
  1414.     LPWAVEFILTER    pwfltrEnum;         // filter describing restrictions
  1415.     HINSTANCE       hInstance;          // app instance containing dlg template
  1416.     LPCWSTR         pszTemplateName;    // custom template name
  1417.     LPARAM          lCustData;          // data passed to hook fn.
  1418.     ACMFILTERCHOOSEHOOKPROCW pfnHook;    // ptr to hook function
  1419. } ACMFILTERCHOOSEW, *PACMFILTERCHOOSEW, FAR *LPACMFILTERCHOOSEW;
  1420. #ifdef _UNICODE
  1421. #define ACMFILTERCHOOSE     ACMFILTERCHOOSEW
  1422. #define PACMFILTERCHOOSE    PACMFILTERCHOOSEW
  1423. #define LPACMFILTERCHOOSE   LPACMFILTERCHOOSEW
  1424. #else
  1425. #define ACMFILTERCHOOSE     ACMFILTERCHOOSEA
  1426. #define PACMFILTERCHOOSE    PACMFILTERCHOOSEA
  1427. #define LPACMFILTERCHOOSE   LPACMFILTERCHOOSEA
  1428. #endif
  1429. #else
  1430. typedef struct tACMFILTERCHOOSE
  1431. {
  1432.     DWORD           cbStruct;           // sizeof(ACMFILTERCHOOSE)
  1433.     DWORD           fdwStyle;           // chooser style flags
  1434.     HWND            hwndOwner;          // caller's window handle
  1435.     LPWAVEFILTER    pwfltr;             // ptr to wfltr buf to receive choice
  1436.     DWORD           cbwfltr;            // size of mem buf for pwfltr
  1437.     LPCSTR          pszTitle;
  1438.     char            szFilterTag[ACMFILTERTAGDETAILS_FILTERTAG_CHARS];
  1439.     char            szFilter[ACMFILTERDETAILS_FILTER_CHARS];
  1440.     LPSTR           pszName;            // custom name selection
  1441.     DWORD           cchName;            // size in chars of mem buf for pszName
  1442.     DWORD           fdwEnum;            // filter enumeration restrictions
  1443.     LPWAVEFILTER    pwfltrEnum;         // filter describing restrictions
  1444.     HINSTANCE       hInstance;          // app instance containing dlg template
  1445.     LPCSTR          pszTemplateName;    // custom template name
  1446.     LPARAM          lCustData;          // data passed to hook fn.
  1447.     ACMFILTERCHOOSEHOOKPROC pfnHook;    // ptr to hook function
  1448. } ACMFILTERCHOOSE, *PACMFILTERCHOOSE, FAR *LPACMFILTERCHOOSE;
  1449. #endif
  1450. //
  1451. //  ACMFILTERCHOOSE.fdwStyle
  1452. //
  1453. //
  1454. #define ACMFILTERCHOOSE_STYLEF_SHOWHELP              0x00000004L
  1455. #define ACMFILTERCHOOSE_STYLEF_ENABLEHOOK            0x00000008L
  1456. #define ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATE        0x00000010L
  1457. #define ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATEHANDLE  0x00000020L
  1458. #define ACMFILTERCHOOSE_STYLEF_INITTOFILTERSTRUCT    0x00000040L
  1459. #define ACMFILTERCHOOSE_STYLEF_CONTEXTHELP           0x00000080L
  1460. #ifdef _WIN32
  1461. MMRESULT ACMAPI acmFilterChooseA
  1462. (
  1463.     LPACMFILTERCHOOSEA      pafltrc
  1464. );
  1465. MMRESULT ACMAPI acmFilterChooseW
  1466. (
  1467.     LPACMFILTERCHOOSEW      pafltrc
  1468. );
  1469. #ifdef _UNICODE
  1470. #define acmFilterChoose     acmFilterChooseW
  1471. #else
  1472. #define acmFilterChoose     acmFilterChooseA
  1473. #endif
  1474. #else
  1475. MMRESULT ACMAPI acmFilterChoose
  1476. (
  1477.     LPACMFILTERCHOOSE       pafltrc
  1478. );
  1479. #endif
  1480. //--------------------------------------------------------------------------;
  1481. //
  1482. //  ACM Stream API's
  1483. //
  1484. //
  1485. //
  1486. //--------------------------------------------------------------------------;
  1487. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1488. //
  1489. //  acmStreamOpen()
  1490. //
  1491. //
  1492. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1493. #ifdef  _WIN64
  1494. #define _DRVRESERVED    15
  1495. #else
  1496. #define _DRVRESERVED    10
  1497. #endif  // _WIN64
  1498. typedef struct tACMSTREAMHEADER
  1499. {
  1500.     DWORD           cbStruct;               // sizeof(ACMSTREAMHEADER)
  1501.     DWORD           fdwStatus;              // ACMSTREAMHEADER_STATUSF_*
  1502.     DWORD_PTR       dwUser;                 // user instance data for hdr
  1503.     LPBYTE          pbSrc;
  1504.     DWORD           cbSrcLength;
  1505.     DWORD           cbSrcLengthUsed;
  1506.     DWORD_PTR       dwSrcUser;              // user instance data for src
  1507.     LPBYTE          pbDst;
  1508.     DWORD           cbDstLength;
  1509.     DWORD           cbDstLengthUsed;
  1510.     DWORD_PTR       dwDstUser;              // user instance data for dst
  1511.     DWORD           dwReservedDriver[_DRVRESERVED];   // driver reserved work space
  1512. } ACMSTREAMHEADER, *PACMSTREAMHEADER, FAR *LPACMSTREAMHEADER;
  1513. //
  1514. //  ACMSTREAMHEADER.fdwStatus
  1515. //
  1516. //  ACMSTREAMHEADER_STATUSF_DONE: done bit for async conversions.
  1517. //
  1518. #define ACMSTREAMHEADER_STATUSF_DONE        0x00010000L
  1519. #define ACMSTREAMHEADER_STATUSF_PREPARED    0x00020000L
  1520. #define ACMSTREAMHEADER_STATUSF_INQUEUE     0x00100000L
  1521. MMRESULT ACMAPI acmStreamOpen
  1522. (
  1523.     LPHACMSTREAM            phas,       // pointer to stream handle
  1524.     HACMDRIVER              had,        // optional driver handle
  1525.     LPWAVEFORMATEX          pwfxSrc,    // source format to convert
  1526.     LPWAVEFORMATEX          pwfxDst,    // required destination format
  1527.     LPWAVEFILTER            pwfltr,     // optional filter
  1528.     DWORD_PTR               dwCallback, // callback
  1529.     DWORD_PTR               dwInstance, // callback instance data
  1530.     DWORD                   fdwOpen     // ACM_STREAMOPENF_* and CALLBACK_*
  1531. );
  1532. #define ACM_STREAMOPENF_QUERY           0x00000001
  1533. #define ACM_STREAMOPENF_ASYNC           0x00000002
  1534. #define ACM_STREAMOPENF_NONREALTIME     0x00000004
  1535. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1536. //
  1537. //  acmStreamClose()
  1538. //
  1539. //
  1540. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1541. MMRESULT ACMAPI acmStreamClose
  1542. (
  1543.     HACMSTREAM              has,
  1544.     DWORD                   fdwClose
  1545. );
  1546. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1547. //
  1548. //  acmStreamSize()
  1549. //
  1550. //
  1551. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1552. MMRESULT ACMAPI acmStreamSize
  1553. (
  1554.     HACMSTREAM              has,
  1555.     DWORD                   cbInput,
  1556.     LPDWORD                 pdwOutputBytes,
  1557.     DWORD                   fdwSize
  1558. );
  1559. #define ACM_STREAMSIZEF_SOURCE          0x00000000L
  1560. #define ACM_STREAMSIZEF_DESTINATION     0x00000001L
  1561. #define ACM_STREAMSIZEF_QUERYMASK       0x0000000FL
  1562. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1563. //
  1564. //  acmStreamReset()
  1565. //
  1566. //
  1567. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1568. MMRESULT ACMAPI acmStreamReset
  1569. (
  1570.     HACMSTREAM              has,
  1571.     DWORD                   fdwReset
  1572. );
  1573. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1574. //
  1575. //  acmStreamMessage()
  1576. //
  1577. //
  1578. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1579. MMRESULT ACMAPI acmStreamMessage
  1580. (
  1581.     HACMSTREAM              has,
  1582.     UINT                    uMsg,
  1583.     LPARAM                  lParam1,
  1584.     LPARAM                  lParam2
  1585. );
  1586. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1587. //
  1588. //  acmStreamConvert()
  1589. //
  1590. //
  1591. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1592. MMRESULT ACMAPI acmStreamConvert
  1593. (
  1594.     HACMSTREAM              has,
  1595.     LPACMSTREAMHEADER       pash,
  1596.     DWORD                   fdwConvert
  1597. );
  1598. #define ACM_STREAMCONVERTF_BLOCKALIGN   0x00000004
  1599. #define ACM_STREAMCONVERTF_START        0x00000010
  1600. #define ACM_STREAMCONVERTF_END          0x00000020
  1601. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1602. //
  1603. //  acmStreamPrepareHeader()
  1604. //
  1605. //
  1606. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1607. MMRESULT ACMAPI acmStreamPrepareHeader
  1608. (
  1609.     HACMSTREAM          has,
  1610.     LPACMSTREAMHEADER   pash,
  1611.     DWORD               fdwPrepare
  1612. );
  1613. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1614. //
  1615. //  acmStreamUnprepareHeader()
  1616. //
  1617. //
  1618. //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
  1619. MMRESULT ACMAPI acmStreamUnprepareHeader
  1620. (
  1621.     HACMSTREAM          has,
  1622.     LPACMSTREAMHEADER   pash,
  1623.     DWORD               fdwUnprepare
  1624. );
  1625. #include "poppack.h"    /* Revert to default packing */
  1626. #ifdef __cplusplus
  1627. }                       /* End of extern "C" { */
  1628. #endif  /* __cplusplus */
  1629. #endif  /* _INC_ACM */