You've already forked lazarus-ccr
1412 lines
51 KiB
ObjectPascal
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.
|