home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / cset21v6.zip / MMPM2TK / TK / ADMCT / AUDIOMCD.H < prev    next >
C/C++ Source or Header  |  1993-04-12  |  15KB  |  289 lines

  1. /***************************************************************************
  2. *
  3. * Module Name: AUDIOMCD.H
  4. *
  5. * OS/2 2.0 Multimedia Extensions Audio MCI Driver Instance Data
  6. * Block defintions.
  7. *
  8. * Copyright (c) International Business Machines Corporation 1991,1993
  9. *                         All Rights Reserved
  10. *
  11. \***************************************************************************/
  12.  
  13. /*
  14. #ifdef _TORONTO
  15.     typedef  ULONG   NULL;
  16. #endif
  17. */
  18. /*************************************/
  19.   // Definitons of sizes
  20. /************************************/
  21. #define  MAX_ERROR_LENGTH         128
  22. #define  MAX_MODULE_NAME          10
  23. #define  MAX_FILE_NAME            16
  24. #define  HANDLER_NAMES_BUFLEN     128
  25. #define  NOTIFY_THREAD_STACKSIZE  32768
  26. #define  HEAP_SIZE                8192
  27. #define  INDEFNITE_PERIOD          -1
  28. #define  ONE_MINUTE               60000
  29. #define  MAX_CUEPOINTS            20
  30. #define  DEFAULT_CLIP_SIZE        1000000
  31. #define  NUM_TAPS                 2
  32. #define  DELAY_LINE_LENGTH        2
  33.  
  34. /************************************************
  35. * Default Wave attributes
  36. ************************************************/
  37. #define DEFAULT_SOURCE_HANDLER_NAME         "FSSH"
  38. #define MEM_PLAYLIST_SH                     "MEMSH"
  39. #define DEFAULT_SOURCE_PDD_NAME             " "
  40. #define DEFAULT_TARGET_HANDLER_NAME         "AUDIOSH$"
  41. #define DEFAULT_DEVDLL_NAME                 "AUDIOIF"
  42. #define DEFAULT_BLOCK_ALIGN                  1
  43.  
  44. /* IO Procedure capabilities */
  45.  
  46. #define CAN_INSERT     0x00000001
  47. #define CAN_DELETE     0x00000002
  48. #define CAN_UNDOREDO   0x00000004
  49. #define CAN_RECORD     0x00000008
  50. #define CAN_SAVE       0x00000010
  51.  
  52. #define TEN_SECONDS    10000
  53.  
  54. /* Undo List */
  55.  
  56. typedef struct _UNDO_LIST {
  57.    ULONG                ulNumLogicalActions;
  58.    struct _UNDO_LIST    *pNextList;
  59.    } UNDOLIST;
  60.  
  61. typedef UNDOLIST  *PUNDOLIST;
  62.  
  63. /*********************************************************************
  64. *   Modified EVCB just has an Implicit Evcb and MCD Instance
  65. *   in a Single Block.
  66. *********************************************************************/
  67. typedef struct MEVCB {
  68.       IMPL_EVCB           evcb;                /* Implicit EVCB           */
  69.       ULONG               ulpInstance;         /* Instance Ptr            */
  70.       USHORT              usUserParm;          /* Returned on Cue Points  */
  71.       } MEVCB; /* Modified EVCB */
  72.  
  73. /********************************************************************
  74. *   Modified Time EVCB Block Contains a Time EVCB with MCD Instance,
  75. *   and other useful Parameters
  76. ********************************************************************/
  77. typedef struct MTIMEEVCB {
  78.     TIME_EVCB            evcb;                /* Time EVCB                */
  79.     USHORT               usDeviceID;           /* Cue Point Notifications  */
  80.     HWND                 hwndCallback;          /* Cue Point Call back Hndl */
  81.     ULONG                ulpInstance;         /* Instance Ptr             */
  82.     USHORT               usCueUsrParm;        /* CuePt User Parm          */
  83.     MMTIME               mmCuePt;             /* CuePt in MMTIME          */
  84.     struct MTIMEEVCB     *pNextEVCB;          /* Pointer to next evcb    */
  85.     HEVENT               HCuePtHndl;          /* Array of CuePt Event hndls*/
  86.  
  87.     } MTIME_EVCB;  /* Modified Event Control Block */
  88.  
  89. /*****************************************************************
  90. *   Streaming Instance is a MCI Driver Layer Data Block
  91. *   defining information needed to Use SSM SPIs. This structure
  92. *   is Instance based. This Structure defines Streaming Info only.
  93. *****************************************************************/
  94. typedef struct _strInstance {
  95.     HID         hidASource;                    /* Source Handler ID         */
  96.     HID         hidATarget;                    /* STarget Handler ID        */
  97.     HID         hidBSource;                    /* Target as Source ID       */
  98.     HID         hidBTarget;                    /* Target as Target ID       */
  99.     char        pszAHandlerName[15];           /* Source Handler Name       */
  100.     char        pszBHandlerName[15];           /* Target Handler Name       */
  101.     HEVENT      hEvent;                        /* Implicit Event Handle     */
  102.     HEVENT      hPosEvent;                     /* Position Event Handle     */
  103.     HEVENT      hPlayToEvent;                  /* Cue Point Event handle    */
  104.     MMTIME      mmStreamTime;                  /* Stream Time               */
  105.     ULONG       ulState;                       /* Stream Pause,Play etc     */
  106.     HSTREAM     hStream;                       /* Address of stream handle  */
  107.     MEVCB       Evcb;                          /* Pointer to ECB            */
  108.     MTIME_EVCB  TimeEvcb;                      /* Cue Point Time EVCB       */
  109.     MTIME_EVCB  PosAdvEvcb;                    /* Time Events for PosAdvisue */
  110.     MTIME_EVCB  *pMCuePtEVCB;
  111.     PVOID       EventRtn;                      /* Event handler entry point */
  112.     SPCBKEY     SpcbKey;                       /* SPCB key with Datatype    */
  113.     ACB_MMIO    acbmmio;                       /* Associate Control Block   */
  114.     ACB_MEM_PLAYL acbPlayList;                 /* Associate Control Block   */
  115.     DCB_AUDIOSH AudioDCB;                      /* AudioSH Device Control Bl */
  116.     SPCB        spcb;                          /* SPCB for networking info  */
  117.     } STRINSTANCE;                             /* Streaming Instance Struct */
  118.  
  119. /********************************************************************
  120. *   This Structure defines the data items that are needed to be
  121. *   maintained per MCI Device instance. The Instance structure
  122. *   has a pointer to the Streaming Information Structure defined
  123. *   above. Memory For This data structure is allocated dynamically
  124. *   off a Global heap.
  125. ********************************************************************/
  126.  
  127. typedef struct _Instance {
  128.     USHORT              usAmpDeviceID;             /* Amp Mixer Device ID  */
  129.     USHORT              usWaveDeviceID;            /* Wave Device ID       */
  130.     HEV                 hEventSem;                 /* Event Sem  Handle    */
  131.     HEV                 hThreadSem;                /* Thread Control Sem   */
  132.     HMTX                hmtxDataAccess;            /* Instance Data Access */
  133.     HMTX                hmtxNotifyAccess;          /* Notify status access */
  134.     HMTX                hmtxCloseAccess;           /* Control close access */
  135.     HMTX                hmtxSaveAccess;            /* Control drv_save     */
  136.     HMODULE             hModHandle;                /* Handle of above      */
  137.     HMODULE             hModIOProc;                /* Custom IO Proc Hndl  */
  138.     HMMIO               hmmio;                     /* MMIO file ID         */
  139.     HFILE               hTempFile;                 /* Temp File Handle     */
  140.     ULONG               ulDataSize;                /* size of audio file   */
  141.     CHAR                pszAudioFile[CCHMAXPATH];  /* WAV File Name        */
  142.     CHAR                szAudioDevName[9];         /* Audio Device Name    */
  143.     ULONG               ulNotifyAborted;
  144.     ULONG               ulTimeUnits;               /* Current Time Units   */
  145.     ULONG               ulSyncOffset;              /* Synchronizatn offst  */
  146.     ULONG               ulCreateFlag;              /* Flag for Strm Crtn   */
  147.     ULONG               ulCreatedName;             /* Indicates we created name */
  148.     BOOL                fFileExists;               /* Flag for file load   */
  149.     ULONG               StreamEvent;               /* Stream Event         */
  150.     BOOL                usNotifyPending;           /* Notify Pending Flag  */
  151.     USHORT              usNotPendingMsg;           /* Msg for above        */
  152.     HWND                hwndCallBack;              /* Call Back Handle     */
  153.     HWND                hwndOldCallBack;           /* Temp callback handle */
  154.     HWND                hwndOpenCallBack;          /* Call Back handle for open */
  155.     BOOL                fToEvent;                  /* Play/Record to point */
  156.     USHORT              usUserParm;                /* User Parameter       */
  157.     BOOL                usSaveFlag;                /* Drv Save             */
  158.     STRINSTANCE         StreamInfo;                /* Streaming Info       */
  159.     MCI_AMP_INSTANCE    AmpInstance;               /* VSDI driver Struct   */
  160.     PVOID               pPlayList;                 /* Pointer to Play List */
  161.     BOOL                usPlayLstStrm;             /* Flag for stream Crtn */
  162.     BOOL                usPosAdvise;               /* Position Advise Flag */
  163.     BOOL                usCuePt;                   /* CuePoint On Flag     */
  164.     MMAUDIOHEADER       mmAudioHeader;             /* Audio format info    */
  165.     USHORT              usPosUserParm;             /* User Parm Returned   */
  166.     BOOL                fOpenMMIO;                 /* OPEN_MMIO used to load */
  167.     BOOL                fRecdInsert;               /* Record Insert Flag   */
  168.     BOOL                usWaitPending;             /* Pending Wait Flag    */
  169.     BOOL                fFakeNotify;               /* Asynchronous notify  */
  170.     USHORT              usWaitMsg;                 /* Pending Wait Msg     */
  171.     ULONG               ulAbortedNotify;           /* indicates notify aborted */
  172.     ULONG               ulCapabilities;            /* Capabilities of the io proc */
  173.     ULONG               ulUsingTemp;               /* Using temp files     */
  174.     ULONG               ulOpenTemp;                /* Open with temp files */
  175.     ULONG               ulBlockAlignment;          /* Blk Algnment for wave*/
  176.     ULONG               ulAverageBytesPerSec;      /* Holds average bps    */
  177.     ULONG               ulOldStreamPos;            /* holds destroyed pos  */
  178.     LONG (* APIENTRY pfnVSD) (PMCI_AMP_INSTANCE, LONG, LONG, LONG, LONG);
  179. //    HAB                 hab;
  180. //    HMQ                 hmq;
  181. //    QMSG                qmsg;
  182. //    HWND                hwndClipWin;               /* Clipboard win handle */
  183.     ULONG               ulBytes;           /* Scaled for Time Calcs    */
  184.     ULONG               ulMMTime;          /* Scaled for Time Calcs    */
  185.     LONG                lDefaultFormat;             /* Default value from INI file */
  186.     LONG                lDefaultSRate;              /* Default value from INI file */
  187.     LONG                lDefaultBPS;                /* Default value from INI file */
  188.     LONG                lDefaultChannels;           /* Default value from INI file */
  189.     LONG                lDefaultOperation;
  190.     LONG                lQosValue;                  /* Network quality of service var */
  191.     LONG                lQOSReporting;              /* Network error reporting flag */
  192.     ULONG               ulHoldState;
  193. //#ifdef PTRFIX
  194. //   ULONG               ulRealTimeTranslation;
  195. //#endif
  196.     ULONG               ulNumUndo;
  197.     ULONG               ulNumRedo;
  198.     PUNDOLIST           pUndoList;
  199.     PUNDOLIST           pRedoList;
  200.     } INSTANCE;         /* Audio MCD MCI Instance Block */
  201.  
  202.  
  203. /*********************************************************************
  204. * Function Parameter Block defines the parameters needed by each MCI
  205. * Message processing function to process the message.
  206. **********************************************************************/
  207. typedef struct {
  208.     PVOID       ulpInstance;       /*  Pointer to Instance               */
  209.     USHORT      usMessage;         /*  The Message                       */
  210.     ULONG       ulParam1;          /*  Flags for the Message             */
  211.     ULONG       ulParam2;          /*  Data for The Message              */
  212.     USHORT      usUserParm;        /*  User Parameter Returned on Notify */
  213.     ULONG       ulNotify;          /*  Notification flag                 */
  214.     INSTANCE    *pInstance;        /*  Shall be Modified later           */
  215.     HWND        hwndCallBack;      /*  Window Handle                     */
  216.     }FUNCTION_PARM_BLOCK;          /*  Audio MCD Function Paramter Block */
  217.  
  218.  
  219. /*********************************************************************
  220. * Function Parameter Block defines the parameters needed by each MCI
  221. * Message processing function to process the message.
  222. **********************************************************************/
  223.  
  224.  
  225. typedef struct {
  226.     QOSInfo     QOSParms;
  227.     QOS         QOSItem[ 6 ];
  228.     } CUSTOM_QOS;
  229.  
  230.  
  231.  
  232.  
  233. /************************************************/
  234.         // MASKS for MCI_WAIT and MCI_NOTIFY
  235. /************************************************/
  236. #define NOTIFY_MASK     ~(MCI_NOTIFY | MCI_WAIT)
  237. #define WAIT_MASK       0xffffff00L
  238. #define   VSDI          "AUDIOIFDriverEntry"
  239.  
  240. /************************************
  241. * Streaming STATE defines
  242. *************************************/
  243. #define CREATE_STATE        0x080
  244. #define PREROLL_STATE       0x081
  245. #define SAVED_STATE         0x082
  246. #define RESTOR_STATE        0x083
  247. #define ACTIVE              0x084
  248. #define UNUSED              0x085
  249. #define STREAM_STOPPED      0x086
  250. #define PLAY_STREAM         0x087
  251. #define RECORD_STREAM       0x088
  252. #define DESTROYED_STATE     0x089
  253. #define CUEPLAY_STATE       0x090
  254. #define CUERECD_STATE       0x091
  255. #define SAVEPAUS_STATE      0x09a
  256. #define OPEN_FATAL          0x09b
  257. #define EVENT_ENABLED       0x09c
  258. #define ASYNCH_MESSAGE      0x09d
  259. #define STREAM_SET_STATE    0x09e
  260. #define STOP_PAUSED         0x09f
  261. #define NO_STATE            0x100
  262. #define NOT_INTIALIZED      -1
  263. #define FILE_LENGTH         -1
  264. #define WAVE_IO_PROC        01
  265. #define AVC_IO_PROC         02
  266.  
  267. /************************************
  268. * Current Time Unit TAGS
  269. ************************************/
  270. #define lMMTIME         01
  271. #define lMILLISECONDS   02
  272. #define lBYTES          03
  273. #define lSAMPLES        04
  274.  
  275. /************************************
  276. *  Internal Error States
  277. ************************************/
  278. #define MCI_WAVEERR_BASE        6000
  279. #define NULLPOINTER             (MCI_WAVEERR_BASE +51)
  280. #define NUM_DATATYPES           42
  281. #define SCALE_FACTOR            100
  282.  
  283. #define XWAVHDR      (ulpInstance->mmAudioHeader.mmXWAVHeader.XWAVHeaderInfo)
  284. #define WAVEHDR      (ulpInstance->mmAudioHeader.mmXWAVHeader.WAVEHeader)
  285. #define CUEPOINT     (ulpInstance->StreamInfo.pMCuePtEVCB)
  286. #define STRMSTATE    (ulpInstance->StreamInfo.ulState)
  287. #define STREAM       (ulpInstance->StreamInfo)
  288. #define AMPMIX       (ulpInstance->AmpInstance)
  289.