home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 June / PCFJune.iso / Xenon / C++ / FreeCommandLineTools.exe / Include / msacm.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-01-31  |  57.2 KB  |  1,895 lines

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