Files
lazarus-ccr/components/acs/Src/fileformats/windows/msacm.pas

1412 lines
51 KiB
ObjectPascal

{******************************************************************}
{ }
{ borland delphi runtime library }
{ microsoft audio compression manager interface unit }
{ }
{ portions created by microsoft are }
{ copyright (c) 1995-1999 microsoft corporation. }
{ all rights reserved. }
{ }
{ the original file is: msacm.h, released 9 march 1999. }
{ the original pascal code is: msacm.pas, released 21 july 1999. }
{ the initial developer of the pascal code is francois piette }
{ francois.piette@swing.be, http://www.rtfm.be/fpiette/indexuk.htm }
{ rue de grady 24, 4053 embourg, belgium }
{ }
{ portions created by francois piette are }
{ copyright (c) 1999 francois piette. }
{ }
{ contributor(s): marcel van brakel (brakelm@bart.nl) }
{ }
{ obtained through: }
{ joint endeavour of delphi innovators (project jedi) }
{ }
{ you may retrieve the latest version of this file at the project }
{ jedi home page, located at http://delphi-jedi.org }
{ }
{ the contents of this file are used with permission, subject to }
{ the mozilla public license version 1.1 (the "license"); you may }
{ not use this file except in compliance with the license. you may }
{ obtain a copy of the license at }
{ http://www.mozilla.org/npl/npl-1_1final.html }
{ }
{ software distributed under the license is distributed on an }
{ "as is" basis, without warranty of any kind, either express or }
{ implied. see the license for the specific language governing }
{ rights and limitations under the license. }
{ }
{******************************************************************}
unit msacm;
{$WEAKPACKAGEUNIT}
interface
{$HPPEMIT ''}
{$HPPEMIT '#include "MSAcm.h"'}
{$HPPEMIT ''}
uses
Windows, MMSystem;
type
PWaveFilter = ^TWaveFilter;
// Defined in mmreg.h
WAVEFILTER = packed record
cbStruct: DWORD; // Size of the filter in bytes
dwFilterTag: DWORD; // filter type
fdwFilter: DWORD; // Flags for the filter (Universal Dfns)
dwReserved: array [0..4] of DWORD; // Reserved for system use
end;
TWaveFilter = WAVEFILTER;
const
DRV_MAPPER_PREFERRED_INPUT_GET = DRV_USER + 0;
{$EXTERNALSYM DRV_MAPPER_PREFERRED_INPUT_GET}
DRV_MAPPER_PREFERRED_OUTPUT_GET = DRV_USER + 2;
{$EXTERNALSYM DRV_MAPPER_PREFERRED_OUTPUT_GET}
DRVM_MAPPER_STATUS = $2000;
{$EXTERNALSYM DRVM_MAPPER_STATUS}
WIDM_MAPPER_STATUS = DRVM_MAPPER_STATUS + 0;
{$EXTERNALSYM WIDM_MAPPER_STATUS}
WAVEIN_MAPPER_STATUS_DEVICE = 0;
{$EXTERNALSYM WAVEIN_MAPPER_STATUS_DEVICE}
WAVEIN_MAPPER_STATUS_MAPPED = 1;
{$EXTERNALSYM WAVEIN_MAPPER_STATUS_MAPPED}
WAVEIN_MAPPER_STATUS_FORMAT = 2;
{$EXTERNALSYM WAVEIN_MAPPER_STATUS_FORMAT}
WODM_MAPPER_STATUS = DRVM_MAPPER_STATUS + 0;
{$EXTERNALSYM WODM_MAPPER_STATUS}
WAVEOUT_MAPPER_STATUS_DEVICE = 0;
{$EXTERNALSYM WAVEOUT_MAPPER_STATUS_DEVICE}
WAVEOUT_MAPPER_STATUS_MAPPED = 1;
{$EXTERNALSYM WAVEOUT_MAPPER_STATUS_MAPPED}
WAVEOUT_MAPPER_STATUS_FORMAT = 2;
{$EXTERNALSYM WAVEOUT_MAPPER_STATUS_FORMAT}
//--------------------------------------------------------------------------
//
// ACM General API's and Defines
//
//--------------------------------------------------------------------------
// there are four types of 'handles' used by the ACM. the first three
// are unique types that define specific objects:
//
// HACMDRIVERID: used to _identify_ an ACM driver. this identifier can be
// used to _open_ the driver for querying details, etc about the driver.
//
// HACMDRIVER: used to manage a driver (codec, filter, etc). this handle
// is much like a handle to other media drivers--you use it to send
// messages to the converter, query for capabilities, etc.
//
// HACMSTREAM: used to manage a 'stream' (conversion channel) with the
// ACM. you use a stream handle to convert data from one format/type
// to another--much like dealing with a file handle.
//
//
// the fourth handle type is a generic type used on ACM functions that
// can accept two or more of the above handle types (for example the
// acmMetrics and acmDriverID functions).
//
// HACMOBJ: used to identify ACM objects. this handle is used on functions
// that can accept two or more ACM handle types.
type
HACMDRIVERID__ = record
Unused: Integer;
end;
{$EXTERNALSYM HACMDRIVERID__}
HACMDRIVERID = ^HACMDRIVERID__;
{$EXTERNALSYM HACMDRIVERID}
PHACMDRIVERID = ^HACMDRIVERID;
{$EXTERNALSYM PHACMDRIVERID}
LPHACMDRIVERID = ^HACMDRIVERID;
{$EXTERNALSYM LPHACMDRIVERID}
HACMDRIVER__ = record
Unused: Integer;
end;
{$EXTERNALSYM HACMDRIVER__}
HACMDRIVER = ^HACMDRIVER__;
{$EXTERNALSYM HACMDRIVER}
PHACMDRIVER = ^HACMDRIVER;
{$EXTERNALSYM PHACMDRIVER}
LPHACMDRIVER = ^HACMDRIVER;
{$EXTERNALSYM LPHACMDRIVER}
HACMSTREAM__ = record
Unused: Integer;
end;
{$EXTERNALSYM HACMSTREAM__}
HACMSTREAM = ^HACMSTREAM__;
{$EXTERNALSYM HACMSTREAM}
PHACMSTREAM = ^HACMSTREAM;
{$EXTERNALSYM PHACMSTREAM}
LPHACMSTREAM = ^HACMSTREAM;
{$EXTERNALSYM LPHACMSTREAM}
HACMOBJ__ = record
Unused: Integer;
end;
{$EXTERNALSYM HACMOBJ__}
HACMOBJ = ^HACMOBJ__;
{$EXTERNALSYM HACMOBJ}
PHACMOBJ = ^HACMOBJ;
{$EXTERNALSYM PHACMOBJ}
LPHACMOBJ = ^HACMOBJ;
{$EXTERNALSYM LPHACMOBJ}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//
// ACM Error Codes
//
// Note that these error codes are specific errors that apply to the ACM
// directly--general errors are defined as MMSYSERR_*.
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
type
MMRESULT = UINT;
{$EXTERNALSYM MMRESULT}
const
ACMERR_BASE = 512;
{$EXTERNALSYM ACMERR_BASE}
ACMERR_NOTPOSSIBLE = (ACMERR_BASE + 0);
{$EXTERNALSYM ACMERR_NOTPOSSIBLE}
ACMERR_BUSY = (ACMERR_BASE + 1);
{$EXTERNALSYM ACMERR_BUSY}
ACMERR_UNPREPARED = (ACMERR_BASE + 2);
{$EXTERNALSYM ACMERR_UNPREPARED}
ACMERR_CANCELED = (ACMERR_BASE + 3);
{$EXTERNALSYM ACMERR_CANCELED}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//
// ACM Window Messages
//
// These window messages are sent by the ACM or ACM drivers to notify
// applications of events.
//
// Note that these window message numbers will also be defined in
// mmsystem.
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
const
MM_ACM_OPEN = MM_STREAM_OPEN; // conversion callback messages
{$EXTERNALSYM MM_ACM_OPEN}
MM_ACM_CLOSE = MM_STREAM_CLOSE;
{$EXTERNALSYM MM_ACM_CLOSE}
MM_ACM_DONE = MM_STREAM_DONE;
{$EXTERNALSYM MM_ACM_DONE}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//
// acmGetVersion()
//
// the ACM version is a 32 bit number that is broken into three parts as
// follows:
//
// bits 24 - 31: 8 bit _major_ version number
// bits 16 - 23: 8 bit _minor_ version number
// bits 0 - 15: 16 bit build number
//
// this is then displayed as follows:
//
// bMajor = (BYTE)(dwVersion >> 24)
// bMinor = (BYTE)(dwVersion >> 16) &
// wBuild = LOWORD(dwVersion)
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
function acmGetVersion: DWORD; stdcall;
{$EXTERNALSYM acmGetVersion}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmMetrics()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
function acmMetrics(hao: HACMOBJ; uMetric: UINT; var pMetric): MMRESULT; stdcall;
{$EXTERNALSYM acmMetrics}
const
ACM_METRIC_COUNT_DRIVERS = 1;
{$EXTERNALSYM ACM_METRIC_COUNT_DRIVERS}
ACM_METRIC_COUNT_CODECS = 2;
{$EXTERNALSYM ACM_METRIC_COUNT_CODECS}
ACM_METRIC_COUNT_CONVERTERS = 3;
{$EXTERNALSYM ACM_METRIC_COUNT_CONVERTERS}
ACM_METRIC_COUNT_FILTERS = 4;
{$EXTERNALSYM ACM_METRIC_COUNT_FILTERS}
ACM_METRIC_COUNT_DISABLED = 5;
{$EXTERNALSYM ACM_METRIC_COUNT_DISABLED}
ACM_METRIC_COUNT_HARDWARE = 6;
{$EXTERNALSYM ACM_METRIC_COUNT_HARDWARE}
ACM_METRIC_COUNT_LOCAL_DRIVERS = 20;
{$EXTERNALSYM ACM_METRIC_COUNT_LOCAL_DRIVERS}
ACM_METRIC_COUNT_LOCAL_CODECS = 21;
{$EXTERNALSYM ACM_METRIC_COUNT_LOCAL_CODECS}
ACM_METRIC_COUNT_LOCAL_CONVERTERS = 22;
{$EXTERNALSYM ACM_METRIC_COUNT_LOCAL_CONVERTERS}
ACM_METRIC_COUNT_LOCAL_FILTERS = 23;
{$EXTERNALSYM ACM_METRIC_COUNT_LOCAL_FILTERS}
ACM_METRIC_COUNT_LOCAL_DISABLED = 24;
{$EXTERNALSYM ACM_METRIC_COUNT_LOCAL_DISABLED}
ACM_METRIC_HARDWARE_WAVE_INPUT = 30;
{$EXTERNALSYM ACM_METRIC_HARDWARE_WAVE_INPUT}
ACM_METRIC_HARDWARE_WAVE_OUTPUT = 31;
{$EXTERNALSYM ACM_METRIC_HARDWARE_WAVE_OUTPUT}
ACM_METRIC_MAX_SIZE_FORMAT = 50;
{$EXTERNALSYM ACM_METRIC_MAX_SIZE_FORMAT}
ACM_METRIC_MAX_SIZE_FILTER = 51;
{$EXTERNALSYM ACM_METRIC_MAX_SIZE_FILTER}
ACM_METRIC_DRIVER_SUPPORT = 100;
{$EXTERNALSYM ACM_METRIC_DRIVER_SUPPORT}
ACM_METRIC_DRIVER_PRIORITY = 101;
{$EXTERNALSYM ACM_METRIC_DRIVER_PRIORITY}
//--------------------------------------------------------------------------;
//
// ACM Drivers
//
//--------------------------------------------------------------------------;
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmDriverEnum()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
type
ACMDRIVERENUMCB = function (hadif: HACMDRIVERID; dwInstance, fdwSupport: DWORD): BOOL; stdcall;
{$EXTERNALSYM ACMDRIVERENUMCB}
function acmDriverEnum(fnCallback: ACMDRIVERENUMCB; dwInstance: DWORD;
fdwEnum: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmDriverEnum}
const
ACM_DRIVERENUMF_NOLOCAL = $40000000;
{$EXTERNALSYM ACM_DRIVERENUMF_NOLOCAL}
ACM_DRIVERENUMF_DISABLED = $80000000;
{$EXTERNALSYM ACM_DRIVERENUMF_DISABLED}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmDriverID()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
function acmDriverID(hao: HACMOBJ; var phadid: HACMDRIVERID; fdwDriverID: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmDriverID}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmDriverAdd()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
function acmDriverAddA(var phadid: HACMDRIVERID; hinstModule: HINST; Param: LPARAM;
dwPriority: DWORD; fdwAdd: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmDriverAddA}
function acmDriverAddW(var phadid: HACMDRIVERID; hinstModule: HINST; Param: LPARAM;
dwPriority: DWORD; fdwAdd: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmDriverAddW}
function acmDriverAdd(var phadid: HACMDRIVERID; hinstModule: HINST; Param: LPARAM;
dwPriority: DWORD; fdwAdd: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmDriverAdd}
const
ACM_DRIVERADDF_FUNCTION = $00000003; // lParam is a procedure
{$EXTERNALSYM ACM_DRIVERADDF_FUNCTION}
ACM_DRIVERADDF_NOTIFYHWND = $00000004; // lParam is notify hwnd
{$EXTERNALSYM ACM_DRIVERADDF_NOTIFYHWND}
ACM_DRIVERADDF_TYPEMASK = $00000007; // driver type mask
{$EXTERNALSYM ACM_DRIVERADDF_TYPEMASK}
ACM_DRIVERADDF_LOCAL = $00000000; // is local to current task
{$EXTERNALSYM ACM_DRIVERADDF_LOCAL}
ACM_DRIVERADDF_GLOBAL = $00000008; // is global
{$EXTERNALSYM ACM_DRIVERADDF_GLOBAL}
//
// prototype for ACM driver procedures that are installed as _functions_
// or _notifations_ instead of as a standalone installable driver.
//
type
ACMDRIVERPROC = function (dwID: DWORD; hdrvr: HACMDRIVERID; uMsg: UINT;
lParam1: LPARAM; lParam2: LPARAM) : LRESULT; stdcall;
{$EXTERNALSYM ACMDRIVERPROC}
LPACMDRIVERPROC = ^ACMDRIVERPROC;
{$EXTERNALSYM LPACMDRIVERPROC}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmDriverRemove()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
function acmDriverRemove(hadid: HACMDRIVERID; fdwRemove: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmDriverRemove}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmDriverOpen()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
function acmDriverOpen(var phad: HACMDRIVER; hadid: HACMDRIVERID; fdwOpen: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmDriverOpen}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmDriverClose()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
function acmDriverClose(had: HACMDRIVER; fdwClose: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmDriverClose}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmDriverMessage()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
function acmDriverMessage(had: HACMDRIVER; uMsg: UINT; Param1, Param2: LPARAM): LRESULT; stdcall;
{$EXTERNALSYM acmDriverMessage}
const
ACMDM_USER = DRV_USER + $0000;
{$EXTERNALSYM ACMDM_USER}
ACMDM_RESERVED_LOW = DRV_USER + $2000;
{$EXTERNALSYM ACMDM_RESERVED_LOW}
ACMDM_RESERVED_HIGH = DRV_USER + $2FFF;
{$EXTERNALSYM ACMDM_RESERVED_HIGH}
ACMDM_BASE = ACMDM_RESERVED_LOW;
{$EXTERNALSYM ACMDM_BASE}
ACMDM_DRIVER_ABOUT = ACMDM_BASE + 11;
{$EXTERNALSYM ACMDM_DRIVER_ABOUT}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmDriverPriority
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
function acmDriverPriority(hadid: HACMDRIVERID; dwPriority, fdwPriority: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmDriverPriority}
const
ACM_DRIVERPRIORITYF_ENABLE = $00000001;
{$EXTERNALSYM ACM_DRIVERPRIORITYF_ENABLE}
ACM_DRIVERPRIORITYF_DISABLE = $00000002;
{$EXTERNALSYM ACM_DRIVERPRIORITYF_DISABLE}
ACM_DRIVERPRIORITYF_ABLEMASK = $00000003;
{$EXTERNALSYM ACM_DRIVERPRIORITYF_ABLEMASK}
ACM_DRIVERPRIORITYF_BEGIN = $00010000;
{$EXTERNALSYM ACM_DRIVERPRIORITYF_BEGIN}
ACM_DRIVERPRIORITYF_END = $00020000;
{$EXTERNALSYM ACM_DRIVERPRIORITYF_END}
ACM_DRIVERPRIORITYF_DEFERMASK = $00030000;
{$EXTERNALSYM ACM_DRIVERPRIORITYF_DEFERMASK}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmDriverDetails()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// ACMDRIVERDETAILS
//
// the ACMDRIVERDETAILS structure is used to get various capabilities from
// an ACM driver (codec, converter, filter).
//
const
ACMDRIVERDETAILS_SHORTNAME_CHARS = 32;
{$EXTERNALSYM ACMDRIVERDETAILS_SHORTNAME_CHARS}
ACMDRIVERDETAILS_LONGNAME_CHARS = 128;
{$EXTERNALSYM ACMDRIVERDETAILS_LONGNAME_CHARS}
ACMDRIVERDETAILS_COPYRIGHT_CHARS = 80;
{$EXTERNALSYM ACMDRIVERDETAILS_COPYRIGHT_CHARS}
ACMDRIVERDETAILS_LICENSING_CHARS = 128;
{$EXTERNALSYM ACMDRIVERDETAILS_LICENSING_CHARS}
ACMDRIVERDETAILS_FEATURES_CHARS = 512;
{$EXTERNALSYM ACMDRIVERDETAILS_FEATURES_CHARS}
type
PAcmDriverDetailsA = ^TAcmDriverDetailsA;
PAcmDriverDetailsW = ^TAcmDriverDetailsW;
PAcmDriverDetails = PAcmDriverDetailsA;
_ACMDRIVERDETAILSA = packed record
cbStruct: DWORD;
fccType: FOURCC;
fccComp: FOURCC;
wMid: Word;
wPid: Word;
vdwACM: DWORD;
vdwDriver: DWORD;
fdwSupport: DWORD;
cFormatTags: DWORD;
cFilterTags: DWORD;
hicon: HICON;
szShortName: array [0..ACMDRIVERDETAILS_SHORTNAME_CHARS - 1] of AnsiChar;
szLongName: array [0..ACMDRIVERDETAILS_LONGNAME_CHARS - 1] of AnsiChar;
szCopyright: array [0..ACMDRIVERDETAILS_COPYRIGHT_CHARS - 1] of AnsiChar;
szLicensing: array [0..ACMDRIVERDETAILS_LICENSING_CHARS - 1] of AnsiChar;
szFeatures: array [0..ACMDRIVERDETAILS_FEATURES_CHARS - 1] of AnsiChar;
end;
{$EXTERNALSYM _ACMDRIVERDETAILSA}
_ACMDRIVERDETAILSW = packed record
cbStruct: DWORD;
fccType: FOURCC;
fccComp: FOURCC;
wMid: Word;
wPid: Word;
vdwACM: DWORD;
vdwDriver: DWORD;
fdwSupport: DWORD;
cFormatTags: DWORD;
cFilterTags: DWORD;
hicon: HICON;
szShortName: array [0..ACMDRIVERDETAILS_SHORTNAME_CHARS - 1] of WideChar;
szLongName: array [0..ACMDRIVERDETAILS_LONGNAME_CHARS - 1] of WideChar;
szCopyright: array [0..ACMDRIVERDETAILS_COPYRIGHT_CHARS - 1] of WideChar;
szLicensing: array [0..ACMDRIVERDETAILS_LICENSING_CHARS - 1] of WideChar;
szFeatures: array [0..ACMDRIVERDETAILS_FEATURES_CHARS - 1] of WideChar;
end;
{$EXTERNALSYM _ACMDRIVERDETAILSW}
_ACMDRIVERDETAILS = _ACMDRIVERDETAILSA;
TAcmDriverDetailsA = _ACMDRIVERDETAILSA;
TAcmDriverDetailsW = _ACMDRIVERDETAILSW;
TAcmDriverDetails = TAcmDriverDetailsA;
//
// ACMDRIVERDETAILS.fccType
//
// ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC: the FOURCC used in the fccType
// field of the ACMDRIVERDETAILS structure to specify that this is an ACM
// codec designed for audio.
//
//
// ACMDRIVERDETAILS.fccComp
//
// ACMDRIVERDETAILS_FCCCOMP_UNDEFINED: the FOURCC used in the fccComp
// field of the ACMDRIVERDETAILS structure. this is currently an unused
// field.
//
const
ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC = $63647561; // 'audc';
{$EXTERNALSYM ACMDRIVERDETAILS_FCCTYPE_AUDIOCODEC}
ACMDRIVERDETAILS_FCCCOMP_UNDEFINED = 0; // '0000';
{$EXTERNALSYM ACMDRIVERDETAILS_FCCCOMP_UNDEFINED}
//
// the following flags are used to specify the type of conversion(s) that
// the converter/codec/filter supports. these are placed in the fdwSupport
// field of the ACMDRIVERDETAILS structure. note that a converter can
// support one or more of these flags in any combination.
//
// ACMDRIVERDETAILS_SUPPORTF_CODEC: this flag is set if the driver supports
// conversions from one format tag to another format tag. for example, if a
// converter compresses WAVE_FORMAT_PCM to WAVE_FORMAT_ADPCM, then this bit
// should be set.
//
// ACMDRIVERDETAILS_SUPPORTF_CONVERTER: this flags is set if the driver
// supports conversions on the same format tag. as an example, the PCM
// converter that is built into the ACM sets this bit (and only this bit)
// because it converts only PCM formats (bits, sample rate).
//
// ACMDRIVERDETAILS_SUPPORTF_FILTER: this flag is set if the driver supports
// transformations on a single format. for example, a converter that changed
// the 'volume' of PCM data would set this bit. 'echo' and 'reverb' are
// also filter types.
//
// ACMDRIVERDETAILS_SUPPORTF_HARDWARE: this flag is set if the driver supports
// hardware input and/or output through a waveform device.
//
// ACMDRIVERDETAILS_SUPPORTF_ASYNC: this flag is set if the driver supports
// async conversions.
//
//
// ACMDRIVERDETAILS_SUPPORTF_LOCAL: this flag is set _by the ACM_ if a
// driver has been installed local to the current task. this flag is also
// set in the fdwSupport argument to the enumeration callback function
// for drivers.
//
// ACMDRIVERDETAILS_SUPPORTF_DISABLED: this flag is set _by the ACM_ if a
// driver has been disabled. this flag is also passed set in the fdwSupport
// argument to the enumeration callback function for drivers.
//
const
ACMDRIVERDETAILS_SUPPORTF_CODEC = $00000001;
{$EXTERNALSYM ACMDRIVERDETAILS_SUPPORTF_CODEC}
ACMDRIVERDETAILS_SUPPORTF_CONVERTER = $00000002;
{$EXTERNALSYM ACMDRIVERDETAILS_SUPPORTF_CONVERTER}
ACMDRIVERDETAILS_SUPPORTF_FILTER = $00000004;
{$EXTERNALSYM ACMDRIVERDETAILS_SUPPORTF_FILTER}
ACMDRIVERDETAILS_SUPPORTF_HARDWARE = $00000008;
{$EXTERNALSYM ACMDRIVERDETAILS_SUPPORTF_HARDWARE}
ACMDRIVERDETAILS_SUPPORTF_ASYNC = $00000010;
{$EXTERNALSYM ACMDRIVERDETAILS_SUPPORTF_ASYNC}
ACMDRIVERDETAILS_SUPPORTF_LOCAL = $40000000;
{$EXTERNALSYM ACMDRIVERDETAILS_SUPPORTF_LOCAL}
ACMDRIVERDETAILS_SUPPORTF_DISABLED = $80000000;
{$EXTERNALSYM ACMDRIVERDETAILS_SUPPORTF_DISABLED}
function acmDriverDetailsA(hadid: HACMDRIVERID; var padd: TAcmDriverDetailsA;
fdwDetails: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmDriverDetailsA}
function acmDriverDetailsW(hadid: HACMDRIVERID; var padd: TAcmDriverDetailsW;
fdwDetails: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmDriverDetailsW}
function acmDriverDetails(hadid: HACMDRIVERID; var padd: TAcmDriverDetails;
fdwDetails: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmDriverDetails}
//--------------------------------------------------------------------------;
//
// ACM Format Tags
//
//--------------------------------------------------------------------------;
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmFormatTagDetails()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
const
ACMFORMATTAGDETAILS_FORMATTAG_CHARS = 48;
{$EXTERNALSYM ACMFORMATTAGDETAILS_FORMATTAG_CHARS}
type
PAcmFormatTagDetailsA = ^TAcmFormatTagDetailsA;
PAcmFormatTagDetailsW = ^TAcmFormatTagDetailsW;
PAcmFormatTagDetails = PAcmFormatTagDetailsA;
_ACMFORMATTAGDETAILSA = packed record
cbStruct: DWORD;
dwFormatTagIndex: DWORD;
dwFormatTag: DWORD;
cbFormatSize: DWORD;
fdwSupport: DWORD;
cStandardFormats: DWORD;
szFormatTag: array [0..ACMFORMATTAGDETAILS_FORMATTAG_CHARS - 1] of AnsiChar;
end;
{$EXTERNALSYM _ACMFORMATTAGDETAILSA}
_ACMFORMATTAGDETAILSW = packed record
cbStruct: DWORD;
dwFormatTagIndex: DWORD;
dwFormatTag: DWORD;
cbFormatSize: DWORD;
fdwSupport: DWORD;
cStandardFormats: DWORD;
szFormatTag: array [0..ACMFORMATTAGDETAILS_FORMATTAG_CHARS - 1] of WideChar;
end;
{$EXTERNALSYM _ACMFORMATTAGDETAILSW}
_ACMFORMATTAGDETAILS = _ACMFORMATTAGDETAILSA;
TAcmFormatTagDetailsA = _ACMFORMATTAGDETAILSA;
TAcmFormatTagDetailsW = _ACMFORMATTAGDETAILSW;
TAcmFormatTagDetails = TAcmFormatTagDetailsA;
function acmFormatTagDetailsA(had: HACMDRIVER; var paftd: TAcmFormatTagDetailsA;
fdwDetails: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmFormatTagDetailsA}
function acmFormatTagDetailsW(had: HACMDRIVER; var paftd: TAcmFormatTagDetailsW;
fdwDetails: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmFormatTagDetailsW}
function acmFormatTagDetails(had: HACMDRIVER; var paftd: TAcmFormatTagDetails;
fdwDetails: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmFormatTagDetails}
const
ACM_FORMATTAGDETAILSF_INDEX = $00000000;
{$EXTERNALSYM ACM_FORMATTAGDETAILSF_INDEX}
ACM_FORMATTAGDETAILSF_FORMATTAG = $00000001;
{$EXTERNALSYM ACM_FORMATTAGDETAILSF_FORMATTAG}
ACM_FORMATTAGDETAILSF_LARGESTSIZE = $00000002;
{$EXTERNALSYM ACM_FORMATTAGDETAILSF_LARGESTSIZE}
ACM_FORMATTAGDETAILSF_QUERYMASK = $0000000F;
{$EXTERNALSYM ACM_FORMATTAGDETAILSF_QUERYMASK}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmFormatTagEnum()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
type
ACMFORMATTAGENUMCBA = function (hadid: HACMDRIVERID; paftd: PAcmFormatTagDetailsA;
dwInstance: DWORD; fdwSupport: DWORD): BOOL; stdcall;
{$EXTERNALSYM ACMFORMATTAGENUMCBA}
ACMFORMATTAGENUMCBW = function (hadid: HACMDRIVERID; paftd: PAcmFormatTagDetailsW;
dwInstance: DWORD; fdwSupport: DWORD): BOOL; stdcall;
{$EXTERNALSYM ACMFORMATTAGENUMCBW}
ACMFORMATTAGENUMCB = ACMFORMATTAGENUMCBA;
function acmFormatTagEnumA(had: HACMDRIVER; var paftd: TAcmFormatTagDetailsA;
fnCallback: ACMFORMATTAGENUMCBA; dwInstance: DWORD; fdwEnum: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmFormatTagEnumA}
function acmFormatTagEnumW(had: HACMDRIVER; var paftd: TAcmFormatTagDetailsW;
fnCallback: ACMFORMATTAGENUMCBW; dwInstance: DWORD; fdwEnum: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmFormatTagEnumW}
function acmFormatTagEnum(had: HACMDRIVER; var paftd: TAcmFormatTagDetails;
fnCallback: ACMFORMATTAGENUMCB; dwInstance: DWORD; fdwEnum: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmFormatTagEnum}
//--------------------------------------------------------------------------;
//
// ACM Formats
//
//--------------------------------------------------------------------------;
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmFormatDetails()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
const
ACMFORMATDETAILS_FORMAT_CHARS = 128;
{$EXTERNALSYM ACMFORMATDETAILS_FORMAT_CHARS}
type
PAcmFormatDetailsA = ^TAcmFormatDetailsA;
PAcmFormatDetailsW = ^TAcmFormatDetailsW;
PAcmFormatDetails = PAcmFormatDetailsA;
_ACMFORMATDETAILSA = packed record
cbStruct: DWORD;
dwFormatIndex: DWORD;
dwFormatTag: DWORD;
fdwSupport: DWORD;
pwfx: PWAVEFORMATEX;
cbwfx: DWORD;
szFormat: array [0..ACMFORMATDETAILS_FORMAT_CHARS - 1] of AnsiChar;
end;
{$EXTERNALSYM _ACMFORMATDETAILSA}
_ACMFORMATDETAILSW = packed record
cbStruct: DWORD;
dwFormatIndex: DWORD;
dwFormatTag: DWORD;
fdwSupport: DWORD;
pwfx: PWAVEFORMATEX;
cbwfx: DWORD;
szFormat: array [0..ACMFORMATDETAILS_FORMAT_CHARS - 1] of WideChar;
end;
{$EXTERNALSYM _ACMFORMATDETAILSW}
_ACMFORMATDETAILS = _ACMFORMATDETAILSA;
TAcmFormatDetailsA = _ACMFORMATDETAILSA;
TAcmFormatDetailsW = _ACMFORMATDETAILSW;
TAcmFormatDetails = TAcmFormatDetailsA;
function acmFormatDetailsA(had: HACMDRIVER; var pafd: TAcmFormatDetailsA;
fdwDetails: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmFormatDetailsA}
function acmFormatDetailsW(had: HACMDRIVER; var pafd: TAcmFormatDetailsW;
fdwDetails: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmFormatDetailsW}
function acmFormatDetails(had: HACMDRIVER; var pafd: TAcmFormatDetails;
fdwDetails: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmFormatDetails}
const
ACM_FORMATDETAILSF_INDEX = $00000000;
{$EXTERNALSYM ACM_FORMATDETAILSF_INDEX}
ACM_FORMATDETAILSF_FORMAT = $00000001;
{$EXTERNALSYM ACM_FORMATDETAILSF_FORMAT}
ACM_FORMATDETAILSF_QUERYMASK = $0000000F;
{$EXTERNALSYM ACM_FORMATDETAILSF_QUERYMASK}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmFormatEnum()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
type
ACMFORMATENUMCBA = function (hadid:HACMDRIVERID; pafd: PAcmFormatDetailsA;
dwInstance: DWORD; fdwSupport: DWORD): BOOL; stdcall;
{$EXTERNALSYM ACMFORMATENUMCBA}
ACMFORMATENUMCBW = function (hadid:HACMDRIVERID; pafd: PAcmFormatDetailsW;
dwInstance: DWORD; fdwSupport: DWORD): BOOL; stdcall;
{$EXTERNALSYM ACMFORMATENUMCBW}
ACMFORMATENUMCB = ACMFORMATENUMCBA;
function acmFormatEnumA(had: HACMDRIVER; var pafd: TAcmFormatDetailsA;
fnCallback: ACMFORMATENUMCBA; dwInstance, fdwEnum: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmFormatEnumA}
function acmFormatEnumW(had: HACMDRIVER; var pafd: TAcmFormatDetailsW;
fnCallback: ACMFORMATENUMCBW; dwInstance, fdwEnum: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmFormatEnumW}
function acmFormatEnum(had: HACMDRIVER; var pafd: TAcmFormatDetails;
fnCallback: ACMFORMATENUMCB; dwInstance, fdwEnum: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmFormatEnum}
const
ACM_FORMATENUMF_WFORMATTAG = $00010000;
{$EXTERNALSYM ACM_FORMATENUMF_WFORMATTAG}
ACM_FORMATENUMF_NCHANNELS = $00020000;
{$EXTERNALSYM ACM_FORMATENUMF_NCHANNELS}
ACM_FORMATENUMF_NSAMPLESPERSEC = $00040000;
{$EXTERNALSYM ACM_FORMATENUMF_NSAMPLESPERSEC}
ACM_FORMATENUMF_WBITSPERSAMPLE = $00080000;
{$EXTERNALSYM ACM_FORMATENUMF_WBITSPERSAMPLE}
ACM_FORMATENUMF_CONVERT = $00100000;
{$EXTERNALSYM ACM_FORMATENUMF_CONVERT}
ACM_FORMATENUMF_SUGGEST = $00200000;
{$EXTERNALSYM ACM_FORMATENUMF_SUGGEST}
ACM_FORMATENUMF_HARDWARE = $00400000;
{$EXTERNALSYM ACM_FORMATENUMF_HARDWARE}
ACM_FORMATENUMF_INPUT = $00800000;
{$EXTERNALSYM ACM_FORMATENUMF_INPUT}
ACM_FORMATENUMF_OUTPUT = $01000000;
{$EXTERNALSYM ACM_FORMATENUMF_OUTPUT}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmFormatSuggest()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
function acmFormatSuggest(had: HACMDRIVER; var pwfxSrc: TWAVEFORMATEX;
var pwfxDst: TWAVEFORMATEX; cbwfxDst: DWORD; fdwSuggest: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmFormatSuggest}
const
ACM_FORMATSUGGESTF_WFORMATTAG = $00010000;
{$EXTERNALSYM ACM_FORMATSUGGESTF_WFORMATTAG}
ACM_FORMATSUGGESTF_NCHANNELS = $00020000;
{$EXTERNALSYM ACM_FORMATSUGGESTF_NCHANNELS}
ACM_FORMATSUGGESTF_NSAMPLESPERSEC = $00040000;
{$EXTERNALSYM ACM_FORMATSUGGESTF_NSAMPLESPERSEC}
ACM_FORMATSUGGESTF_WBITSPERSAMPLE = $00080000;
{$EXTERNALSYM ACM_FORMATSUGGESTF_WBITSPERSAMPLE}
ACM_FORMATSUGGESTF_TYPEMASK = $00FF0000;
{$EXTERNALSYM ACM_FORMATSUGGESTF_TYPEMASK}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmFormatChoose()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
const
ACMHELPMSGSTRINGA = 'acmchoose_help';
{$EXTERNALSYM ACMHELPMSGSTRINGA}
ACMHELPMSGSTRINGW = 'acmchoose_help';
{$EXTERNALSYM ACMHELPMSGSTRINGW}
ACMHELPMSGSTRING = ACMHELPMSGSTRINGA;
ACMHELPMSGCONTEXTMENUA = 'acmchoose_contextmenu';
{$EXTERNALSYM ACMHELPMSGCONTEXTMENUA}
ACMHELPMSGCONTEXTMENUW = 'acmchoose_contextmenu';
{$EXTERNALSYM ACMHELPMSGCONTEXTMENUW}
ACMHELPMSGCONTEXTMENU = ACMHELPMSGCONTEXTMENUA;
ACMHELPMSGCONTEXTHELPA = 'acmchoose_contexthelp';
{$EXTERNALSYM ACMHELPMSGCONTEXTHELPA}
ACMHELPMSGCONTEXTHELPW = 'acmchoose_contexthelp';
{$EXTERNALSYM ACMHELPMSGCONTEXTHELPW}
ACMHELPMSGCONTEXTHELP = ACMHELPMSGCONTEXTHELPA;
//
// MM_ACM_FORMATCHOOSE is sent to hook callbacks by the Format Chooser
// Dialog...
//
const
MM_ACM_FORMATCHOOSE = $8000;
{$EXTERNALSYM MM_ACM_FORMATCHOOSE}
FORMATCHOOSE_MESSAGE = 0;
{$EXTERNALSYM FORMATCHOOSE_MESSAGE}
FORMATCHOOSE_FORMATTAG_VERIFY = FORMATCHOOSE_MESSAGE + 0;
{$EXTERNALSYM FORMATCHOOSE_FORMATTAG_VERIFY}
FORMATCHOOSE_FORMAT_VERIFY = FORMATCHOOSE_MESSAGE + 1;
{$EXTERNALSYM FORMATCHOOSE_FORMAT_VERIFY}
FORMATCHOOSE_CUSTOM_VERIFY = FORMATCHOOSE_MESSAGE + 2;
{$EXTERNALSYM FORMATCHOOSE_CUSTOM_VERIFY}
type
ACMFORMATCHOOSEHOOKPROCA = function (hwnd: HWND; uMsg: UINT; wParam: WPARAM;
lParam: LPARAM): UINT; stdcall;
{$EXTERNALSYM ACMFORMATCHOOSEHOOKPROCA}
ACMFORMATCHOOSEHOOKPROCW = function (hwnd: HWND; uMsg: UINT; wParam: WPARAM;
lParam: LPARAM): UINT; stdcall;
{$EXTERNALSYM ACMFORMATCHOOSEHOOKPROCW}
ACMFORMATCHOOSEHOOKPROC = ACMFORMATCHOOSEHOOKPROCA;
PAcmFormatChooseA = ^TAcmFormatChooseA;
PAcmFormatChooseW = ^TAcmFormatChooseW;
PAcmFormatChoose = PAcmFormatChooseA;
_ACMFORMATCHOOSEA = packed record
cbStruct: DWORD;
fdwStyle: DWORD;
hwndOwner: HWND;
pwfx: PWAVEFORMATEX;
cbwfx: DWORD;
pszTitle: PAnsiChar;
szFormatTag: array [0..ACMFORMATTAGDETAILS_FORMATTAG_CHARS-1] of AnsiChar;
szFormat: array [0..ACMFORMATDETAILS_FORMAT_CHARS-1] of AnsiChar;
pszName: PAnsiChar;
cchName: DWORD;
fdwEnum: DWORD;
pwfxEnum: PWAVEFORMATEX;
hInstance: HINST;
pszTemplateName: PAnsiChar;
lCustData: LPARAM;
pfnHook: ACMFORMATCHOOSEHOOKPROCA;
end;
{$EXTERNALSYM _ACMFORMATCHOOSEA}
_ACMFORMATCHOOSEW = packed record
cbStruct: DWORD;
fdwStyle: DWORD;
hwndOwner: HWND;
pwfx: PWAVEFORMATEX;
cbwfx: DWORD;
pszTitle: PWideChar;
szFormatTag: array [0..ACMFORMATTAGDETAILS_FORMATTAG_CHARS-1] of WideChar;
szFormat: array [0..ACMFORMATDETAILS_FORMAT_CHARS-1] of WideChar;
pszName: PWideChar;
cchName: DWORD;
fdwEnum: DWORD;
pwfxEnum: PWAVEFORMATEX;
hInstance: HINST;
pszTemplateName: PWideChar;
lCustData: LPARAM;
pfnHook: ACMFORMATCHOOSEHOOKPROCW;
end;
{$EXTERNALSYM _ACMFORMATCHOOSEW}
_ACMFORMATCHOOSE = _ACMFORMATCHOOSEA;
TAcmFormatChooseA = _ACMFORMATCHOOSEA;
TAcmFormatChooseW = _ACMFORMATCHOOSEW;
TAcmFormatChoose = TAcmFormatChooseA;
//
// ACMFORMATCHOOSE.fdwStyle
//
const
ACMFORMATCHOOSE_STYLEF_SHOWHELP = $00000004;
{$EXTERNALSYM ACMFORMATCHOOSE_STYLEF_SHOWHELP}
ACMFORMATCHOOSE_STYLEF_ENABLEHOOK = $00000008;
{$EXTERNALSYM ACMFORMATCHOOSE_STYLEF_ENABLEHOOK}
ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATE = $00000010;
{$EXTERNALSYM ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATE}
ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATEHANDLE = $00000020;
{$EXTERNALSYM ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATEHANDLE}
ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT = $00000040;
{$EXTERNALSYM ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT}
ACMFORMATCHOOSE_STYLEF_CONTEXTHELP = $00000080;
{$EXTERNALSYM ACMFORMATCHOOSE_STYLEF_CONTEXTHELP}
function acmFormatChooseA(var pafmtc: TAcmFormatChooseA): MMRESULT; stdcall;
{$EXTERNALSYM acmFormatChooseA}
function acmFormatChooseW(var pafmtc: TAcmFormatChooseW): MMRESULT; stdcall;
{$EXTERNALSYM acmFormatChooseW}
function acmFormatChoose(var pafmtc: TAcmFormatChoose): MMRESULT; stdcall;
{$EXTERNALSYM acmFormatChoose}
//--------------------------------------------------------------------------;
//
// ACM Filter Tags
//
//--------------------------------------------------------------------------;
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmFilterTagDetails()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
const
ACMFILTERTAGDETAILS_FILTERTAG_CHARS = 48;
{$EXTERNALSYM ACMFILTERTAGDETAILS_FILTERTAG_CHARS}
type
PAcmFilterTagDetailsA = ^TAcmFilterTagDetailsA;
PAcmFilterTagDetailsW = ^TAcmFilterTagDetailsW;
PAcmFilterTagDetails = PAcmFilterTagDetailsA;
_ACMFILTERTAGDETAILSA = packed record
cbStruct: DWORD;
dwFilterTagIndex: DWORD;
dwFilterTag: DWORD;
cbFilterSize: DWORD;
fdwSupport: DWORD;
cStandardFilters: DWORD;
szFilterTag: array [0..ACMFILTERTAGDETAILS_FILTERTAG_CHARS-1] of AnsiChar;
end;
{$EXTERNALSYM _ACMFILTERTAGDETAILSA}
_ACMFILTERTAGDETAILSW = packed record
cbStruct: DWORD;
dwFilterTagIndex: DWORD;
dwFilterTag: DWORD;
cbFilterSize: DWORD;
fdwSupport: DWORD;
cStandardFilters: DWORD;
szFilterTag: array [0..ACMFILTERTAGDETAILS_FILTERTAG_CHARS-1] of WideChar;
end;
{$EXTERNALSYM _ACMFILTERTAGDETAILSW}
_ACMFILTERTAGDETAILS = _ACMFILTERTAGDETAILSA;
TAcmFilterTagDetailsA = _ACMFILTERTAGDETAILSA;
TAcmFilterTagDetailsW = _ACMFILTERTAGDETAILSW;
TAcmFilterTagDetails = TAcmFilterTagDetailsA;
function acmFilterTagDetailsA(had: HACMDRIVER; var paftd: TAcmFilterTagDetailsA;
fdwDetails: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmFilterTagDetailsA}
function acmFilterTagDetailsW(had: HACMDRIVER; var paftd: TAcmFilterTagDetailsW;
fdwDetails: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmFilterTagDetailsW}
function acmFilterTagDetails(had: HACMDRIVER; var paftd: TAcmFilterTagDetails;
fdwDetails: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmFilterTagDetails}
const
ACM_FILTERTAGDETAILSF_INDEX = $00000000;
{$EXTERNALSYM ACM_FILTERTAGDETAILSF_INDEX}
ACM_FILTERTAGDETAILSF_FILTERTAG = $00000001;
{$EXTERNALSYM ACM_FILTERTAGDETAILSF_FILTERTAG}
ACM_FILTERTAGDETAILSF_LARGESTSIZE = $00000002;
{$EXTERNALSYM ACM_FILTERTAGDETAILSF_LARGESTSIZE}
ACM_FILTERTAGDETAILSF_QUERYMASK = $0000000F;
{$EXTERNALSYM ACM_FILTERTAGDETAILSF_QUERYMASK}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmFilterTagEnum()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
type
ACMFILTERTAGENUMCBA = function (hadid: HACMDRIVERID; paftd: PAcmFilterTagDetailsA;
dwInstance: DWORD; fdwSupport: DWORD) : BOOL; stdcall;
{$EXTERNALSYM ACMFILTERTAGENUMCBA}
ACMFILTERTAGENUMCBW = function (hadid: HACMDRIVERID; paftd: PAcmFilterTagDetailsW;
dwInstance: DWORD; fdwSupport: DWORD) : BOOL; stdcall;
{$EXTERNALSYM ACMFILTERTAGENUMCBW}
ACMFILTERTAGENUMCB = ACMFILTERTAGENUMCBA;
function acmFilterTagEnumA(had: HACMDRIVER; var paftd: TAcmFilterTagDetailsA;
fnCallback: ACMFILTERTAGENUMCBA; dwInstance: DWORD; fdwEnum: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmFilterTagEnumA}
function acmFilterTagEnumW(had: HACMDRIVER; var paftd: TAcmFilterTagDetailsW;
fnCallback: ACMFILTERTAGENUMCBW; dwInstance: DWORD; fdwEnum: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmFilterTagEnumW}
function acmFilterTagEnum(had: HACMDRIVER; var paftd: TAcmFilterTagDetails;
fnCallback: ACMFILTERTAGENUMCB; dwInstance: DWORD; fdwEnum: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmFilterTagEnum}
//--------------------------------------------------------------------------;
//
// ACM Filters
//
//--------------------------------------------------------------------------;
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmFilterDetails()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
const
ACMFILTERDETAILS_FILTER_CHARS = 128;
{$EXTERNALSYM ACMFILTERDETAILS_FILTER_CHARS}
type
PAcmFilterDetailsA = ^TAcmFilterDetailsA;
PAcmFilterDetailsW = ^TAcmFilterDetailsW;
PAcmFilterDetails = PAcmFilterDetailsA;
_ACMFILTERDETAILSA = packed record
cbStruct: DWORD;
dwFilterIndex: DWORD;
dwFilterTag: DWORD;
fdwSupport: DWORD;
pwfltr: PWAVEFILTER;
cbwfltr: DWORD;
szFilter: array [0..ACMFILTERDETAILS_FILTER_CHARS - 1] of AnsiChar;
end;
{$EXTERNALSYM _ACMFILTERDETAILSA}
_ACMFILTERDETAILSW = packed record
cbStruct: DWORD;
dwFilterIndex: DWORD;
dwFilterTag: DWORD;
fdwSupport: DWORD;
pwfltr: PWAVEFILTER;
cbwfltr: DWORD;
szFilter: array [0..ACMFILTERDETAILS_FILTER_CHARS - 1] of WideChar;
end;
{$EXTERNALSYM _ACMFILTERDETAILSW}
_ACMFILTERDETAILS = _ACMFILTERDETAILSA;
TAcmFilterDetailsA = _ACMFILTERDETAILSA;
TAcmFilterDetailsW = _ACMFILTERDETAILSW;
TAcmFilterDetails = TAcmFilterDetailsA;
function acmFilterDetailsA(had: HACMDRIVER; var pafd: TAcmFilterDetailsA;
fdwDetails: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmFilterDetailsA}
function acmFilterDetailsW(had: HACMDRIVER; var pafd: TAcmFilterDetailsW;
fdwDetails: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmFilterDetailsW}
function acmFilterDetails(had: HACMDRIVER; var pafd: TAcmFilterDetails;
fdwDetails: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmFilterDetails}
const
ACM_FILTERDETAILSF_INDEX = $00000000;
{$EXTERNALSYM ACM_FILTERDETAILSF_INDEX}
ACM_FILTERDETAILSF_FILTER = $00000001;
{$EXTERNALSYM ACM_FILTERDETAILSF_FILTER}
ACM_FILTERDETAILSF_QUERYMASK = $0000000F;
{$EXTERNALSYM ACM_FILTERDETAILSF_QUERYMASK}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmFilterEnum()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
type
ACMFILTERENUMCBA = function (hadid: HACMDRIVERID; pafd: PAcmFilterDetailsA;
dwInstance: DWORD; fdwSupport: DWORD) : BOOL; stdcall;
ACMFILTERENUMCBW = function (hadid: HACMDRIVERID; pafd: PAcmFilterDetailsW;
dwInstance: DWORD; fdwSupport: DWORD) : BOOL; stdcall;
ACMFILTERENUMCB = ACMFILTERENUMCBA;
function acmFilterEnumA(had: HACMDRIVER; var pafd: TAcmFilterDetailsA;
fnCallback: ACMFILTERENUMCBA; dwInstance: DWORD; fdwEnum: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmFilterEnumA}
function acmFilterEnumW(had: HACMDRIVER; var pafd: TAcmFilterDetailsW;
fnCallback: ACMFILTERENUMCBW; dwInstance: DWORD; fdwEnum: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmFilterEnumW}
function acmFilterEnum(had: HACMDRIVER; var pafd: TAcmFilterDetails;
fnCallback: ACMFILTERENUMCB; dwInstance: DWORD; fdwEnum: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmFilterEnum}
const
ACM_FILTERENUMF_DWFILTERTAG = $00010000;
{$EXTERNALSYM ACM_FILTERENUMF_DWFILTERTAG}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmFilterChoose()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// MM_ACM_FILTERCHOOSE is sent to hook callbacks by the Filter Chooser
// Dialog...
//
const
MM_ACM_FILTERCHOOSE = $8000;
{$EXTERNALSYM MM_ACM_FILTERCHOOSE}
FILTERCHOOSE_MESSAGE = 0;
{$EXTERNALSYM FILTERCHOOSE_MESSAGE}
FILTERCHOOSE_FILTERTAG_VERIFY = FILTERCHOOSE_MESSAGE + 0;
{$EXTERNALSYM FILTERCHOOSE_FILTERTAG_VERIFY}
FILTERCHOOSE_FILTER_VERIFY = FILTERCHOOSE_MESSAGE + 1;
{$EXTERNALSYM FILTERCHOOSE_FILTER_VERIFY}
FILTERCHOOSE_CUSTOM_VERIFY = FILTERCHOOSE_MESSAGE + 2;
{$EXTERNALSYM FILTERCHOOSE_CUSTOM_VERIFY}
type
ACMFILTERCHOOSEHOOKPROCA = function (hwd: HWND; uMsg: UINT; wParam: WPARAM;
lParam: LPARAM): UINT; stdcall;
{$EXTERNALSYM ACMFILTERCHOOSEHOOKPROCA}
ACMFILTERCHOOSEHOOKPROCW = function (hwd: HWND; uMsg: UINT; wParam: WPARAM;
lParam: LPARAM): UINT; stdcall;
{$EXTERNALSYM ACMFILTERCHOOSEHOOKPROCW}
ACMFILTERCHOOSEHOOKPROC = ACMFILTERCHOOSEHOOKPROCA;
//
// ACMFILTERCHOOSE
//
//
type
PAcmFilterChooseA = ^TAcmFilterChooseA;
PAcmFilterChooseW = ^TAcmFilterChooseW;
PAcmFilterChoose = PAcmFilterChooseA;
_ACMFILTERCHOOSEA = packed record
cbStruct: DWORD;
fdwStyle: DWORD;
hwndOwner: HWND;
pwfltr: PWAVEFILTER;
cbwfltr: DWORD;
pszTitle: PAnsiChar;
szFilterTag: array [0..ACMFILTERTAGDETAILS_FILTERTAG_CHARS - 1] of AnsiChar;
szFilter: array [0..ACMFILTERDETAILS_FILTER_CHARS - 1] of AnsiChar;
pszName: PAnsiChar;
cchName: DWORD;
fdwEnum: DWORD;
pwfltrEnum: PWAVEFILTER;
hInstance: HINST;
pszTemplateName: PAnsiChar;
lCustData: LPARAM;
pfnHook: ACMFILTERCHOOSEHOOKPROCA;
end;
{$EXTERNALSYM _ACMFILTERCHOOSEA}
_ACMFILTERCHOOSEW = packed record
cbStruct: DWORD;
fdwStyle: DWORD;
hwndOwner: HWND;
pwfltr: PWAVEFILTER;
cbwfltr: DWORD;
pszTitle: PWideChar;
szFilterTag: array [0..ACMFILTERTAGDETAILS_FILTERTAG_CHARS - 1] of WideChar;
szFilter: array [0..ACMFILTERDETAILS_FILTER_CHARS - 1] of WideChar;
pszName: PWideChar;
cchName: DWORD;
fdwEnum: DWORD;
pwfltrEnum: PWAVEFILTER;
hInstance: HINST;
pszTemplateName: PWideChar;
lCustData: LPARAM;
pfnHook: ACMFILTERCHOOSEHOOKPROCW;
end;
{$EXTERNALSYM _ACMFILTERCHOOSEW}
_ACMFILTERCHOOSE = _ACMFILTERCHOOSEA;
TAcmFilterChooseA = _ACMFILTERCHOOSEA;
TAcmFilterChooseW = _ACMFILTERCHOOSEW;
TAcmFilterChoose = TAcmFilterChooseA;
//
// ACMFILTERCHOOSE.fdwStyle
//
const
ACMFILTERCHOOSE_STYLEF_SHOWHELP = $00000004;
{$EXTERNALSYM ACMFILTERCHOOSE_STYLEF_SHOWHELP}
ACMFILTERCHOOSE_STYLEF_ENABLEHOOK = $00000008;
{$EXTERNALSYM ACMFILTERCHOOSE_STYLEF_ENABLEHOOK}
ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATE = $00000010;
{$EXTERNALSYM ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATE}
ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATEHANDLE = $00000020;
{$EXTERNALSYM ACMFILTERCHOOSE_STYLEF_ENABLETEMPLATEHANDLE}
ACMFILTERCHOOSE_STYLEF_INITTOFILTERSTRUCT = $00000040;
{$EXTERNALSYM ACMFILTERCHOOSE_STYLEF_INITTOFILTERSTRUCT}
ACMFILTERCHOOSE_STYLEF_CONTEXTHELP = $00000080;
{$EXTERNALSYM ACMFILTERCHOOSE_STYLEF_CONTEXTHELP}
function acmFilterChooseA(var pafltrc: TAcmFilterChooseA): MMRESULT; stdcall;
{$EXTERNALSYM acmFilterChooseA}
function acmFilterChooseW(var pafltrc: TAcmFilterChooseW): MMRESULT; stdcall;
{$EXTERNALSYM acmFilterChooseW}
function acmFilterChoose(var pafltrc: TAcmFilterChoose): MMRESULT; stdcall;
{$EXTERNALSYM acmFilterChoose}
//--------------------------------------------------------------------------;
//
// ACM Stream API's
//
//--------------------------------------------------------------------------;
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmStreamOpen()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
type
PAcmStreamHeader = ^TAcmStreamHeader;
ACMSTREAMHEADER = packed record
cbStruct: DWORD;
fdwStatus: DWORD;
dwUser: DWORD;
pbSrc: PBYTE;
cbSrcLength: DWORD;
cbSrcLengthUsed: DWORD;
dwSrcUser: DWORD;
pbDst: PBYTE;
cbDstLength: DWORD;
cbDstLengthUsed: DWORD;
dwDstUser: DWORD;
dwReservedDriver: array [0..10 - 1] of DWORD;
end;
{$EXTERNALSYM tACMSTREAMHEADER}
TAcmStreamHeader = ACMSTREAMHEADER;
//
// ACMSTREAMHEADER.fdwStatus
//
// ACMSTREAMHEADER_STATUSF_DONE: done bit for async conversions.
//
const
ACMSTREAMHEADER_STATUSF_DONE = $00010000;
{$EXTERNALSYM ACMSTREAMHEADER_STATUSF_DONE}
ACMSTREAMHEADER_STATUSF_PREPARED = $00020000;
{$EXTERNALSYM ACMSTREAMHEADER_STATUSF_PREPARED}
ACMSTREAMHEADER_STATUSF_INQUEUE = $00100000;
{$EXTERNALSYM ACMSTREAMHEADER_STATUSF_INQUEUE}
function acmStreamOpen(var phas: HACMSTREAM; had: HACMDRIVER; var pwfxSrc: TWAVEFORMATEX;
var pwfxDst: TWAVEFORMATEX; pwfltr: PWAVEFILTER; dwCallback: DWORD; dwInstance: DWORD;
fdwOpen: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmStreamOpen}
const
ACM_STREAMOPENF_QUERY = $00000001;
{$EXTERNALSYM ACM_STREAMOPENF_QUERY}
ACM_STREAMOPENF_ASYNC = $00000002;
{$EXTERNALSYM ACM_STREAMOPENF_ASYNC}
ACM_STREAMOPENF_NONREALTIME = $00000004;
{$EXTERNALSYM ACM_STREAMOPENF_NONREALTIME}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmStreamClose()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
function acmStreamClose(has: HACMSTREAM; fdwClose: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmStreamClose}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmStreamSize()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
function acmStreamSize(has: HACMSTREAM; cbInput: DWORD; var pdwOutputBytes: DWORD;
fdwSize: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmStreamSize}
const
ACM_STREAMSIZEF_SOURCE = $00000000;
{$EXTERNALSYM ACM_STREAMSIZEF_SOURCE}
ACM_STREAMSIZEF_DESTINATION = $00000001;
{$EXTERNALSYM ACM_STREAMSIZEF_DESTINATION}
ACM_STREAMSIZEF_QUERYMASK = $0000000F;
{$EXTERNALSYM ACM_STREAMSIZEF_QUERYMASK}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmStreamReset()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
function acmStreamReset(has: HACMSTREAM; fdwReset: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmStreamReset}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmStreamMessage()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
function acmStreamMessage(has: HACMSTREAM; uMsg: UINT; var lParam1: LPARAM;
var lParam2: LPARAM): MMRESULT; stdcall;
{$EXTERNALSYM acmStreamMessage}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmStreamConvert()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
function acmStreamConvert(has: HACMSTREAM; var pash: TAcmStreamHeader;
fdwConvert: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmStreamConvert}
const
ACM_STREAMCONVERTF_BLOCKALIGN = $00000004;
{$EXTERNALSYM ACM_STREAMCONVERTF_BLOCKALIGN}
ACM_STREAMCONVERTF_START = $00000010;
{$EXTERNALSYM ACM_STREAMCONVERTF_START}
ACM_STREAMCONVERTF_END = $00000020;
{$EXTERNALSYM ACM_STREAMCONVERTF_END}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmStreamPrepareHeader()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
function acmStreamPrepareHeader(has: HACMSTREAM; var pash: TAcmStreamHeader;
fdwPrepare: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmStreamPrepareHeader}
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
//
// acmStreamUnprepareHeader()
//
//- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;
function acmStreamUnprepareHeader(has: HACMSTREAM; var pash: TAcmStreamHeader;
fdwUnprepare: DWORD): MMRESULT; stdcall;
{$EXTERNALSYM acmStreamUnprepareHeader}
implementation
const
msacm32 = 'msacm32.dll';
function acmGetVersion; external msacm32 name 'acmGetVersion';
function acmMetrics; external msacm32 name 'acmMetrics';
function acmDriverEnum; external msacm32 name 'acmDriverEnum';
function acmDriverID; external msacm32 name 'acmDriverID';
function acmDriverAddA; external msacm32 name 'acmDriverAddA';
function acmDriverAddW; external msacm32 name 'acmDriverAddW';
function acmDriverAdd; external msacm32 name 'acmDriverAddA';
function acmDriverRemove; external msacm32 name 'acmDriverRemove';
function acmDriverOpen; external msacm32 name 'acmDriverOpen';
function acmDriverClose; external msacm32 name 'acmDriverClose';
function acmDriverMessage; external msacm32 name 'acmDriverMessage';
function acmDriverPriority; external msacm32 name 'acmDriverPriority';
function acmDriverDetailsA; external msacm32 name 'acmDriverDetailsA';
function acmDriverDetailsW; external msacm32 name 'acmDriverDetailsW';
function acmDriverDetails; external msacm32 name 'acmDriverDetailsA';
function acmFormatTagDetailsA; external msacm32 name 'acmFormatTagDetailsA';
function acmFormatTagDetailsW; external msacm32 name 'acmFormatTagDetailsW';
function acmFormatTagDetails; external msacm32 name 'acmFormatTagDetailsA';
function acmFormatDetailsA; external msacm32 name 'acmFormatDetailsA';
function acmFormatDetailsW; external msacm32 name 'acmFormatDetailsW';
function acmFormatDetails; external msacm32 name 'acmFormatDetailsA';
function acmFormatChooseA; external msacm32 name 'acmFormatChooseA';
function acmFormatChooseW; external msacm32 name 'acmFormatChooseW';
function acmFormatChoose; external msacm32 name 'acmFormatChooseA';
function acmFormatEnumA; external msacm32 name 'acmFormatEnumA';
function acmFormatEnumW; external msacm32 name 'acmFormatEnumW';
function acmFormatEnum; external msacm32 name 'acmFormatEnumA';
function acmFormatTagEnumA; external msacm32 name 'acmFormatTagEnumA';
function acmFormatTagEnumW; external msacm32 name 'acmFormatTagEnumW';
function acmFormatTagEnum; external msacm32 name 'acmFormatTagEnumA';
function acmFormatSuggest; external msacm32 name 'acmFormatSuggest';
function acmFilterTagDetailsA; external msacm32 name 'acmFilterTagDetailsA';
function acmFilterTagDetailsW; external msacm32 name 'acmFilterTagDetailsW';
function acmFilterTagDetails; external msacm32 name 'acmFilterTagDetailsA';
function acmFilterTagEnumA; external msacm32 name 'acmFilterTagEnumA';
function acmFilterTagEnumW; external msacm32 name 'acmFilterTagEnumW';
function acmFilterTagEnum; external msacm32 name 'acmFilterTagEnumA';
function acmFilterDetailsA; external msacm32 name 'acmFilterDetailsA';
function acmFilterDetailsW; external msacm32 name 'acmFilterDetailsW';
function acmFilterDetails; external msacm32 name 'acmFilterDetailsA';
function acmFilterEnumA; external msacm32 name 'acmFilterEnumA';
function acmFilterEnumW; external msacm32 name 'acmFilterEnumW';
function acmFilterEnum; external msacm32 name 'acmFilterEnumA';
function acmFilterChooseA; external msacm32 name 'acmFilterChooseA';
function acmFilterChooseW; external msacm32 name 'acmFilterChooseW';
function acmFilterChoose; external msacm32 name 'acmFilterChooseA';
function acmStreamOpen; external msacm32 name 'acmStreamOpen';
function acmStreamClose; external msacm32 name 'acmStreamClose';
function acmStreamSize; external msacm32 name 'acmStreamSize';
function acmStreamReset; external msacm32 name 'acmStreamReset';
function acmStreamMessage; external msacm32 name 'acmStreamMessage';
function acmStreamConvert; external msacm32 name 'acmStreamConvert';
function acmStreamPrepareHeader; external msacm32 name 'acmStreamPrepareHeader';
function acmStreamUnprepareHeader; external msacm32 name 'acmStreamUnprepareHeader';
end.