mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-06-25 15:38:24 +02:00
373 lines
16 KiB
ObjectPascal
373 lines
16 KiB
ObjectPascal
{
|
|
$Id$
|
|
Copyright (c) 1991, 1992 by International Business Machines Corporation
|
|
Copyright (c) 2002 by Andry Svirgunov (cool2@ngs.ru)
|
|
Copyright (c) 2002-2003 by Yuri Prokushev (prokushev@freemail.ru)
|
|
|
|
MCI drivers interface
|
|
|
|
This program is free software; you can redistribute it and/or modify it
|
|
under the terms of the GNU Library General Public License (LGPL) as
|
|
published by the Free Software Foundation; either version 2 of the
|
|
License, or (at your option) any later version. This program is
|
|
distributed in the hope that it will be useful, but WITHOUT ANY
|
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
See the GNU Library General Public License for more details. You should
|
|
have received a copy of the GNU Library General Public License along
|
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
|
|
**********************************************************************}
|
|
|
|
{
|
|
@abstract(MCI drivers interface)
|
|
@author(Andry Svirgunov (cool2@ngs.ru))
|
|
@author(Yuri Prokushev (prokushev@freemail.ru))
|
|
@created(01 Oct 2002)
|
|
@lastmod(19 Jan 2003)
|
|
MCI drivers interface
|
|
Warning: This code is alfa. Future versions of this unit will propably
|
|
not be compatible.
|
|
}
|
|
Unit mcidrv;
|
|
|
|
Interface
|
|
|
|
Type
|
|
GID=Integer;
|
|
|
|
///**************************************************************************/
|
|
// MCI Driver message identifiers */
|
|
///**************************************************************************/
|
|
const
|
|
MCIDRV_SAVE = 900;
|
|
MCIDRV_RESTORE = 901;
|
|
MCIDRV_SYNC = 902;
|
|
MCIDRV_CHANGERESOURCE = 903;
|
|
MCIDRV_CONNECT = 904;
|
|
MCIDRV_ASSOCIATE = 905;
|
|
MCIDRV_DISCONNECT = 906;
|
|
MCIDRV_TEST_CONNECTION = 907;
|
|
MCIDRV_START = 908;
|
|
MCIDRV_SEEK = 909;
|
|
MCIDRV_STOP = 910;
|
|
MCIDRV_MODIFY_CONNECTION = 911;
|
|
MCIDRV_INIT_CONNECTION = 912;
|
|
MCIDRV_DEINIT_CONNECTION = 913;
|
|
MCIDRV_ENABLE_EVENT = 915;
|
|
MCIDRV_GETTIME = 917;
|
|
|
|
///*******************************************************************/
|
|
// The following messages are used by the MCIDRV_CONNECT message */
|
|
///*******************************************************************/
|
|
|
|
MCIDRV_CONNECT_TARGET = $00010000;
|
|
MCIDRV_CONNECT_SOURCE = $00020000;
|
|
MCIDRV_SET_CONNNECTOR_TYPE = $00040000;
|
|
MCIDRV_CHANGE_SEM = $00080000;
|
|
|
|
///*******************************************************************/
|
|
// The following messages are used by MCIDRV_MODIFY_CONNECTION */
|
|
///*******************************************************************/
|
|
|
|
|
|
MCIDRV_MODIFY_10 =$00100000; // back level MCI driver.
|
|
MCIDRV_MIX_STANDALONE =$00200000;
|
|
|
|
|
|
///*******************************************************************/
|
|
// The following messages are used by MCIDRV_START */
|
|
///*******************************************************************/
|
|
|
|
MCIDRV_CUE_PLAYBACK = $00010000;
|
|
MCIDRV_CUE_RECORD = $00020000;
|
|
MCIDRV_START_PLAYBACK = $00040000;
|
|
MCIDRV_START_RECORD = $00080000;
|
|
MCIDRV_START_PREROLL = $00100000;
|
|
|
|
///*******************************************************************/
|
|
// The following messages are used by MCIDRV_ASSOCIATE */
|
|
///*******************************************************************/
|
|
|
|
MCIDRV_OUTPUT = $00010000;
|
|
MCIDRV_INPUT = $00020000;
|
|
|
|
///*******************************************************************/
|
|
// The following messages are used by MCIDRV_STOP */
|
|
///*******************************************************************/
|
|
|
|
MCIDRV_PAUSE_STREAM_NETWORK = $00010000;
|
|
MCIDRV_FLUSH_STREAM_NETWORK = $00020000;
|
|
MCIDRV_DISCARD_STREAM_NETWORK = $00040000;
|
|
|
|
///*******************************************************************/
|
|
// The following messages are used by MCIDRV_DEINIT_CONNECTION */
|
|
///*******************************************************************/
|
|
|
|
MCIDRV_MODIFY_HANDLER =$00010000;
|
|
|
|
|
|
|
|
///*******************************************************************/
|
|
// The following range of message ID's are reserved for internal use */
|
|
// by MCI drivers */
|
|
///*******************************************************************/
|
|
MCI_INTERNAL_MESSAGES_START = 1000;
|
|
MCI_INTERNAL_MESSAGES_END = 1999;
|
|
|
|
///*******************************************************************/
|
|
// Flags used by the string parser for command tables */
|
|
// NOTE: All flags must have an "L" suffix in order to be parsed as */
|
|
// DWORDs by the resource compiler */
|
|
///*******************************************************************/
|
|
MCI_COMMAND_HEAD = $00000001;
|
|
MCI_END_COMMAND = $00000002;
|
|
MCI_END_COMMAND_LIST = $00000003;
|
|
MCI_RETURN = $00000004;
|
|
MCI_STRING = $00000005;
|
|
MCI_FLAG = $00000006;
|
|
MCI_INTEGER = $00000007;
|
|
MCI_CONSTANT = $00000008;
|
|
MCI_CONSTANT_INTEGER = $00000009;
|
|
MCI_CONSTANT_STRING = $0000000A;
|
|
MCI_END_CONSTANT = $0000000B;
|
|
MCI_DEFAULT_STRING = $0000000C;
|
|
MCI_DEFAULT_INTEGER = $0000000D;
|
|
MCI_RETURN_TYPE = $0000000E;
|
|
MCI_RETURN_TYPE_STRING = $0000000F;
|
|
MCI_END_RETURN_TYPE = $00000010;
|
|
MCI_CONSTANT_2 = $00000011;
|
|
MCI_END_CONSTANT_2 = $00000012;
|
|
MCI_CONSTANT_PAIR = $00000013;
|
|
MCI_END_CONSTANT_PAIR = $00000014;
|
|
MCI_CONSTANT_INTEGER_PAIR = $00000015;
|
|
MCI_CONSTANT_STRING_PAIR = $00000016;
|
|
MCI_RECTL = $00000017;
|
|
MCI_CONSTANT_4 = $00000018;
|
|
MCI_END_CONSTANT_4 = $00000019;
|
|
MCI_FOURCC = $0000001A;
|
|
MCI_OR = $0000001B;
|
|
MCI_END_OR = $0000001C;
|
|
MCI_STRING_LIST = $0000001D;
|
|
|
|
///*******************************************************************/
|
|
// Return types supported by mciSendString */
|
|
// Values 0x0000 -> 0xFF00 are reserved by MMPM2 */
|
|
// Values 0xFF01 -> 0xFFFF are user definable */
|
|
///*******************************************************************/
|
|
MCI_INTEGER_RETURNED = $1000;
|
|
MCI_COLONIZED2_RETURN = $2000;
|
|
MCI_COLONIZED3_RETURN = $3000;
|
|
MCI_COLONIZED4_RETURN = $4000;
|
|
MCI_TRUE_FALSE_RETURN = $5000;
|
|
MCI_ON_OFF_RETURN = $6000;
|
|
MCI_DEVICENAME_RETURN = $7000;
|
|
MCI_TIME_FORMAT_RETURN = $8000;
|
|
MCI_SPEED_FORMAT_RETURN = $9000;
|
|
MCI_MODE_RETURN = $A000;
|
|
MCI_MEDIA_TYPE_RETURN = $B000;
|
|
MCI_TRACK_TYPE_RETURN = $C000;
|
|
MCI_CONNECTOR_TYPE_RETURN = $D000;
|
|
MCI_CDXA_CHANNEL_DESTINATION_RETURN = $E000;
|
|
MCI_PREROLL_TYPE_RETURN = $F000;
|
|
MCI_FORMAT_TAG_RETURN = $F100;
|
|
MCI_SEQ_SYNCHRONIZATION_RETURN = $F200;
|
|
MCI_VIDEO_QUALITY_RETURN = $F300;
|
|
MCI_AUDIO_QUALITY_RETURN = $F400;
|
|
MCI_IMAGE_QUALITY_RETURN = $F500;
|
|
MCI_VIDEO_COMPRESSION_RETURN = $F600;
|
|
MCI_AUDIO_COMPRESSION_RETURN = $F700;
|
|
MCI_IMAGE_COMPRESSION_RETURN = $F800;
|
|
MCI_RECTL_RETURN = $F900;
|
|
MCI_FOURCC_RETURN = $FA00;
|
|
MCI_IMAGE_PELFORMAT_RETURN = $FB00;
|
|
MCI_DIRECTION_RETURN = $FC00;
|
|
MCI_SIGNED_INTEGER_RETURN = $FD00;
|
|
|
|
MCI_USER_RETURN = $FF01;
|
|
///*******************************************************************/
|
|
// End of msg text used by mciGetErrorString */
|
|
///*******************************************************************/
|
|
MCIERR_BASE = 5000;
|
|
MCIERR_MSG_TABLE_END = MCIERR_BASE + 7000;
|
|
|
|
///*******************************************************************/
|
|
// */
|
|
// MCI DEVICE shareability categories */
|
|
// */
|
|
///*******************************************************************/
|
|
FIXEDSINGLECONTEXT = $0001;
|
|
DYNAMICSINGLECONTEXT = $0002;
|
|
LIMITEDMULTIPLECONTEXT = $0003;
|
|
UNLIMITEDMULTIPLECONTEXT = $0004;
|
|
|
|
///*******************************************************************/
|
|
// MCI driver flag for close during exit list processing */
|
|
///*******************************************************************/
|
|
MCI_CLOSE_EXIT = $10000000;
|
|
|
|
///*******************************************************************/
|
|
// MCI driver specific error table resource number base */
|
|
///*******************************************************************/
|
|
MMERROR_TABLE_BASE = 500;
|
|
|
|
///*******************************************************************/
|
|
// */
|
|
// MCIDRV_CHANGERESOURCE message flags */
|
|
// */
|
|
///*******************************************************************/
|
|
|
|
Type
|
|
mciDrv_ChangeResource_Parms = record
|
|
pInstance : Pointer; // pointer to device instance
|
|
usResourceUnits : Integer; // required resource units
|
|
usResourceClass : Integer; // resource class
|
|
usResourcePriority : Integer; // resource priority
|
|
end;
|
|
pmciDrv_ChangeResource_Parms = ^mciDrv_ChangeResource_Parms;
|
|
|
|
///*******************************************************************/
|
|
// */
|
|
// MCIDRV_ENABLE_EVENT message flags */
|
|
// */
|
|
///*******************************************************************/
|
|
|
|
Type
|
|
HSTREAM=LongInt;
|
|
hID=LongInt;
|
|
hEvent = LongInt; // Event Handle
|
|
phEvent = ^hEvent; // Pointer to Event Handle
|
|
HWND = LongInt;
|
|
MMTIME = LongInt;
|
|
Type
|
|
evcb = record
|
|
ulType : LongInt; // Event type (input)
|
|
ulSubType : LongInt; // Event SubType (input)
|
|
ulFlags : LongInt; // 0 (Input), status (Output)
|
|
hstream : HSTREAM; // handle to stream for this event
|
|
hid : hID; // handler Id (input/output)
|
|
ulStatus : LongInt; // Event status (output)
|
|
ulEventParm1 : LongInt; // Event parameters (input), hID if implicit event
|
|
ulEventParm2 : LongInt; // Event parameters (input)
|
|
ulEventParm3 : LongInt; // Event parameters (input)
|
|
end;
|
|
pevcb = ^evcb;
|
|
|
|
Type
|
|
MCIDRV_EVENT_PARMS = record
|
|
ulLength:LongInt; // Length of event parms */
|
|
pevcb:PEVCB; // pointer to event control block */
|
|
phevent:PHEVENT; // pointer to the event to enable in network */
|
|
end;
|
|
PMCIDRV_EVENT_PARMS=^MCIDRV_EVENT_PARMS;
|
|
|
|
///*******************************************************************/
|
|
// */
|
|
// MCIDRV_SYNC message flags */
|
|
// */
|
|
///*******************************************************************/
|
|
Const
|
|
MCIDRV_SYNC_ENABLE = $00000100;
|
|
MCIDRV_SYNC_DISABLE = $00000200;
|
|
MCIDRV_SYNC_REC_PULSE = $00000400;
|
|
MCIDRV_SYNC_MASTER = $00000800;
|
|
MCIDRV_SYNC_SET_MASTER = $00001000;
|
|
|
|
Type
|
|
sync_evcb = record
|
|
ulType : LongInt; // Event_SYNC
|
|
ulSubType : LongInt; // Not used
|
|
ulSyncFlags : LongInt; // 0 (input),status (output)
|
|
hstream : HStream; // handle to stream for this event
|
|
hid : hID; // Handler id
|
|
ulStatus : LongInt; // Event status (output)
|
|
mmtimeStart : mmTime; // Filled in by Sync/Stream manager
|
|
// at SpiEnableSync time. (input)
|
|
mmtimeMaster : mmTime; // Filled in by Master SH (input)
|
|
mmtimeSlave : mmTime; // Filled in by slave SH. (output)
|
|
end;
|
|
pSync_evcb = ^sync_Evcb;
|
|
|
|
Type
|
|
mciDrv_Sync_Parms = record
|
|
hStreams : ^hStream; // Pointer to list of stream IDs
|
|
ulNumStreams : LongInt; // number of stream IDs
|
|
mmTime : mmTime; // Sync Pulse Time
|
|
NonStreamMaster : Boolean; // TRUE if this device can be master
|
|
pevcbSyncPulse : pSync_evcb; // pointer to EVCB address (output)
|
|
hidMaster : hID; // Master NULL sh ID (valid only on
|
|
// MCIDRV_SYNC_MASTER
|
|
ulReserved1 : LongInt; // Reserved field
|
|
ulReserved2 : LongInt; // Reserved field
|
|
end;
|
|
pmciDrv_Sync_Parms = ^mciDrv_Sync_Parms;
|
|
|
|
|
|
//*******************************************************************/
|
|
// contains information for open message for MCI drivers */
|
|
//*******************************************************************/
|
|
Type
|
|
mmDrv_Open_Parms = record
|
|
hwndCallback : hwnd; // call back handle
|
|
usDeviceID : Integer; // The device ID assigned to this instance
|
|
usDeviceType : Integer; // The device type number
|
|
usDeviceOrd : Integer; // The device ordinal number
|
|
pInstance : Pointer; // pointer to the instance structure allocated
|
|
// initialized by the driver. The MCI driver
|
|
// will fill in this parameter.
|
|
szDevDLLName : Array[0..259] of Char; // Character string containing the device
|
|
// specific DLL name to call for the open.
|
|
// (ie. ACPA.DLL)
|
|
pszElementName : pChar; // typically a file name or NULL
|
|
usDevParmLen : Integer; // Device parameters data block length.
|
|
pDevParm : Pointer; // Device parameters data block. This data
|
|
// block is unique to each type of device.
|
|
// (ie. LVD "COM1 9600 N 7 1").
|
|
Reserved0 : Pointer;
|
|
usResourceUnitsRequired : Integer; // number of resource units this instance
|
|
// requires.
|
|
usResourceClass : Integer; // resource class this instance belongs to
|
|
usResourcePriority : Integer; // resource priority for this instance
|
|
ulParam2 : LongInt; // Pointer to MCI_OPEN structure
|
|
end;
|
|
pmmDrv_Open_Parms = ^mmDrv_Open_Parms;
|
|
|
|
|
|
///*******************************************************************/
|
|
// */
|
|
// MCIDRV_RESTORE message flags */
|
|
// */
|
|
///*******************************************************************/
|
|
|
|
Type
|
|
MCIDRV_RESTORE_PARMS = record
|
|
ulLength:longint; // Length of restore parms */
|
|
ulMasterVolume:longint; // Master volume value */
|
|
end;
|
|
PMCIDRV_RESTORE_PARMS=^MCIDRV_RESTORE_PARMS;
|
|
|
|
function mdmDriverNotify( usDeviceID: Integer; wnd: Hwnd; usMsgType: Integer;
|
|
usUserParm: Integer; ulMsgParm: LongInt): LongInt; cdecl;
|
|
|
|
Implementation
|
|
|
|
function mdmDriverNotify( usDeviceID: Integer; wnd: Hwnd; usMsgType: Integer;
|
|
usUserParm: Integer; ulMsgParm: LongInt): LongInt; cdecl; external 'MDM' index 17;
|
|
|
|
End.
|
|
|
|
{
|
|
$Log$
|
|
Revision 1.3 2003-02-15 18:44:55 hajny
|
|
* mmtk directory corrected to lowercase
|
|
|
|
Revision 1.1 2003/02/15 16:59:09 hajny
|
|
* mmtk directory corrected to lowercase
|
|
|
|
Revision 1.1 2003/02/09 13:49:06 hajny
|
|
+ mmtk added
|
|
|
|
}
|