Updated to new MM header organization.
Cleaned-up internal structures (now 32 bit only).
Now using the MMSYSTEM entry points rather than the low level driver
ones directly.
diff --git a/multimedia/mcimidi.c b/multimedia/mcimidi.c
index 2923e7b..b56a43e 100644
--- a/multimedia/mcimidi.c
+++ b/multimedia/mcimidi.c
@@ -3,7 +3,8 @@
/*
* Sample MIDI Wine Driver for Linux
*
- * Copyright 1994 Martin Ayotte
+ * Copyright 1994 Martin Ayotte
+ * 1999 Eric Pouech
*/
/*
@@ -16,15 +17,15 @@
#include <stdlib.h>
#include "winuser.h"
-#include "multimedia.h"
-#include "user.h"
+#include "mmddk.h"
#include "driver.h"
#include "heap.h"
#include "debugtools.h"
DEFAULT_DEBUG_CHANNEL(mcimidi)
-#ifdef SNDCTL_MIDI_INFO
+#define MIDI_NOTEOFF 0x80
+#define MIDI_NOTEON 0x90
typedef struct {
DWORD dwFirst; /* offset in file of track */
@@ -40,14 +41,13 @@
} MCI_MIDITRACK;
typedef struct tagWINE_MCIMIDI {
- UINT16 wDevID;
- UINT16 wMidiID;
+ UINT wDevID;
+ HMIDI hMidi;
int nUseCount; /* Incremented for each shared open */
WORD wNotifyDeviceID; /* MCI device ID with a pending notification */
- HANDLE16 hCallback; /* Callback handle for pending notification */
+ HANDLE hCallback; /* Callback handle for pending notification */
HMMIO hFile; /* mmio file handle open as Element */
LPCSTR lpstrElementName; /* Name of file */
- HLOCAL16 hMidiHdr;
WORD dwStatus; /* one from MCI_MODE_xxxx */
DWORD dwMciTimeFormat; /* One of the supported MCI_FORMAT_xxxx */
WORD wFormat; /* Format of MIDI hFile (0, 1 or 2) */
@@ -61,16 +61,11 @@
DWORD dwStartTicks;
} WINE_MCIMIDI;
-
-#endif /* defined(SNDCTL_MIDI_INFO) */
-
/*======================================================================*
* MCI MIDI implemantation *
*======================================================================*/
-#ifdef SNDCTL_MIDI_INFO
-
-static DWORD MIDI_mciResume(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms);
+static DWORD MIDI_mciResume(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms);
/**************************************************************************
* MIDI_drvOpen [internal]
@@ -107,7 +102,7 @@
/**************************************************************************
* MIDI_mciGetOpenDev [internal]
*/
-static WINE_MCIMIDI* MIDI_mciGetOpenDev(UINT16 wDevID)
+static WINE_MCIMIDI* MIDI_mciGetOpenDev(UINT wDevID)
{
WINE_MCIMIDI* wmm = (WINE_MCIMIDI*)mciGetDriverData(wDevID);
@@ -126,7 +121,7 @@
DWORD ret = 0;
if (lpbyt == NULL ||
- mmioRead(wmm->hFile, (HPSTR)lpbyt, (long)sizeof(BYTE)) != (long)sizeof(BYTE)) {
+ mmioRead(wmm->hFile, (HPSTR)lpbyt, sizeof(BYTE)) != (long)sizeof(BYTE)) {
WARN("Error reading wmm=%p\n", wmm);
ret = MCIERR_INVALID_FILE;
}
@@ -575,7 +570,7 @@
/**************************************************************************
* MIDI_mciOpen [internal]
*/
-static DWORD MIDI_mciOpen(UINT16 wDevID, DWORD dwFlags, LPMCI_OPEN_PARMSA lpParms)
+static DWORD MIDI_mciOpen(UINT wDevID, DWORD dwFlags, LPMCI_OPEN_PARMSA lpParms)
{
DWORD dwRet = 0;
DWORD dwDeviceID;
@@ -597,7 +592,7 @@
wmm->nUseCount++;
wmm->hFile = 0;
- wmm->wMidiID = 0;
+ wmm->hMidi = 0;
dwDeviceID = lpParms->wDeviceID;
TRACE("wDevID=%04X (lpParams->wDeviceID=%08lX)\n", wDevID, dwDeviceID);
@@ -671,7 +666,6 @@
} else {
wmm->dwPositionMS = 0;
wmm->dwStatus = MCI_MODE_STOP;
- wmm->hMidiHdr = USER_HEAP_ALLOC(sizeof(MIDIHDR16));
}
return dwRet;
}
@@ -679,7 +673,7 @@
/**************************************************************************
* MIDI_mciStop [internal]
*/
-static DWORD MIDI_mciStop(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
+static DWORD MIDI_mciStop(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
{
WINE_MCIMIDI* wmm = MIDI_mciGetOpenDev(wDevID);
@@ -689,14 +683,14 @@
if (wmm->dwStatus != MCI_MODE_STOP) {
wmm->dwStatus = MCI_MODE_STOP;
- modMessage(wmm->wMidiID, MODM_CLOSE, 0, 0L, 0L);
+ midiOutClose(wmm->hMidi);
}
TRACE("wmm->dwStatus=%d\n", wmm->dwStatus);
if (lpParms && (dwFlags & MCI_NOTIFY)) {
TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
- mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback),
- wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+ mciDriverNotify((HWND)LOWORD(lpParms->dwCallback),
+ wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
}
return 0;
}
@@ -704,7 +698,7 @@
/**************************************************************************
* MIDI_mciClose [internal]
*/
-static DWORD MIDI_mciClose(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
+static DWORD MIDI_mciClose(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
{
WINE_MCIMIDI* wmm = MIDI_mciGetOpenDev(wDevID);
@@ -724,7 +718,6 @@
wmm->hFile = 0;
TRACE("hFile closed !\n");
}
- USER_HEAP_FREE(wmm->hMidiHdr);
HeapFree(GetProcessHeap(), 0, wmm->tracks);
} else {
TRACE("Shouldn't happen... nUseCount=%d\n", wmm->nUseCount);
@@ -733,8 +726,8 @@
if (lpParms && (dwFlags & MCI_NOTIFY)) {
TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
- mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback),
- wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+ mciDriverNotify((HWND)LOWORD(lpParms->dwCallback),
+ wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
}
return 0;
}
@@ -766,14 +759,13 @@
/**************************************************************************
* MIDI_mciPlay [internal]
*/
-static DWORD MIDI_mciPlay(UINT16 wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)
+static DWORD MIDI_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)
{
DWORD dwStartMS, dwEndMS, dwRet;
WORD doPlay, nt;
MCI_MIDITRACK* mmt;
DWORD hiPulse;
WINE_MCIMIDI* wmm = MIDI_mciGetOpenDev(wDevID);
- MIDIOPENDESC midiOpenDesc;
TRACE("(%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms);
@@ -832,9 +824,8 @@
wmm->dwPositionMS = 0;
wmm->wStartedPlaying = FALSE;
- midiOpenDesc.hMidi = 0;
- dwRet = modMessage(wmm->wMidiID, MODM_OPEN, 0, (DWORD)&midiOpenDesc, CALLBACK_NULL);
- /* dwRet = midMessage(wmm->wMidiID, MIDM_OPEN, 0, (DWORD)&midiOpenDesc, CALLBACK_NULL);*/
+ dwRet = midiOutOpen(&wmm->hMidi, 0, 0L, 0L, CALLBACK_NULL);
+ /* dwRet = midiInOpen(&wmm->hMidi, 0, 0L, 0L, CALLBACK_NULL);*/
while (wmm->dwStatus != MCI_MODE_STOP) {
/* it seems that in case of multi-threading, gcc is optimizing just a little bit
@@ -1004,7 +995,7 @@
break;
default:
if (doPlay) {
- dwRet = modMessage(wmm->wMidiID, MODM_DATA, 0, mmt->dwEventData, 0);
+ dwRet = midiOutShortMsg(wmm->hMidi, mmt->dwEventData);
} else {
switch (LOBYTE(LOWORD(mmt->dwEventData)) & 0xF0) {
case MIDI_NOTEON:
@@ -1012,7 +1003,7 @@
dwRet = 0;
break;
default:
- dwRet = modMessage(wmm->wMidiID, MODM_DATA, 0, mmt->dwEventData, 0);
+ dwRet = midiOutShortMsg(wmm->hMidi, mmt->dwEventData);
}
}
}
@@ -1036,10 +1027,10 @@
{
unsigned chn;
for (chn = 0; chn < 16; chn++)
- modMessage(wmm->wMidiID, MODM_DATA, 0, 0x78B0 | chn, 0);
+ midiOutShortMsg(wmm->hMidi, 0x78B0 | chn);
}
- dwRet = modMessage(wmm->wMidiID, MODM_CLOSE, 0, 0L, 0L);
+ dwRet = midiOutClose(wmm->hMidi);
wmm->dwStatus = MCI_MODE_STOP;
/* to restart playing at beginning when it's over */
@@ -1047,8 +1038,8 @@
if (lpParms && (dwFlags & MCI_NOTIFY)) {
TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
- mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback),
- wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+ mciDriverNotify((HWND)LOWORD(lpParms->dwCallback),
+ wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
}
return 0;
}
@@ -1056,10 +1047,10 @@
/**************************************************************************
* MIDI_mciRecord [internal]
*/
-static DWORD MIDI_mciRecord(UINT16 wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpParms)
+static DWORD MIDI_mciRecord(UINT wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpParms)
{
int start, end;
- LPMIDIHDR16 lpMidiHdr;
+ MIDIHDR midiHdr;
DWORD dwRet;
WINE_MCIMIDI* wmm = MIDI_mciGetOpenDev(wDevID);
@@ -1080,37 +1071,35 @@
end = lpParms->dwTo;
TRACE("MCI_TO=%d \n", end);
}
- lpMidiHdr = USER_HEAP_LIN_ADDR(wmm->hMidiHdr);
- lpMidiHdr->lpData = (LPSTR) HeapAlloc(GetProcessHeap(), 0, 1200);
- if (!lpMidiHdr)
+ midiHdr.lpData = (LPSTR) HeapAlloc(GetProcessHeap(), 0, 1200);
+ if (!midiHdr.lpData)
return MCIERR_OUT_OF_MEMORY;
- lpMidiHdr->dwBufferLength = 1024;
- lpMidiHdr->dwUser = 0L;
- lpMidiHdr->dwFlags = 0L;
- dwRet = midMessage(wmm->wMidiID, MIDM_PREPARE, 0, (DWORD)lpMidiHdr, sizeof(MIDIHDR16));
+ midiHdr.dwBufferLength = 1024;
+ midiHdr.dwUser = 0L;
+ midiHdr.dwFlags = 0L;
+ dwRet = midiInPrepareHeader(wmm->hMidi, &midiHdr, sizeof(MIDIHDR));
TRACE("After MIDM_PREPARE \n");
wmm->dwStatus = MCI_MODE_RECORD;
while (wmm->dwStatus != MCI_MODE_STOP) {
TRACE("wmm->dwStatus=%p %d\n",
&wmm->dwStatus, wmm->dwStatus);
- lpMidiHdr->dwBytesRecorded = 0;
- dwRet = midMessage(wmm->wMidiID, MIDM_START, 0, 0L, 0L);
- TRACE("After MIDM_START lpMidiHdr=%p dwBytesRecorded=%lu\n",
- lpMidiHdr, lpMidiHdr->dwBytesRecorded);
- if (lpMidiHdr->dwBytesRecorded == 0) break;
+ midiHdr.dwBytesRecorded = 0;
+ dwRet = midiInStart(wmm->hMidi);
+ TRACE("midiInStart => dwBytesRecorded=%lu\n", midiHdr.dwBytesRecorded);
+ if (midiHdr.dwBytesRecorded == 0) break;
}
TRACE("Before MIDM_UNPREPARE \n");
- dwRet = midMessage(wmm->wMidiID, MIDM_UNPREPARE, 0, (DWORD)lpMidiHdr, sizeof(MIDIHDR16));
+ dwRet = midiInUnprepareHeader(wmm->hMidi, &midiHdr, sizeof(MIDIHDR));
TRACE("After MIDM_UNPREPARE \n");
- if (lpMidiHdr->lpData != NULL) {
- HeapFree(GetProcessHeap(), 0, lpMidiHdr->lpData);
- lpMidiHdr->lpData = NULL;
+ if (midiHdr.lpData != NULL) {
+ HeapFree(GetProcessHeap(), 0, midiHdr.lpData);
+ midiHdr.lpData = NULL;
}
wmm->dwStatus = MCI_MODE_STOP;
if (lpParms && (dwFlags & MCI_NOTIFY)) {
TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
- mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback),
- wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+ mciDriverNotify((HWND)LOWORD(lpParms->dwCallback),
+ wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
}
return 0;
}
@@ -1118,7 +1107,7 @@
/**************************************************************************
* MIDI_mciPause [internal]
*/
-static DWORD MIDI_mciPause(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
+static DWORD MIDI_mciPause(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
{
WINE_MCIMIDI* wmm = MIDI_mciGetOpenDev(wDevID);
@@ -1131,13 +1120,13 @@
/* see note in MIDI_mciPlay */
unsigned chn;
for (chn = 0; chn < 16; chn++)
- modMessage(wmm->wMidiID, MODM_DATA, 0, 0x78B0 | chn, 0);
+ midiOutShortMsg(wmm->hMidi, 0x78B0 | chn);
wmm->dwStatus = MCI_MODE_PAUSE;
}
if (lpParms && (dwFlags & MCI_NOTIFY)) {
TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
- mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback),
- wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+ mciDriverNotify((HWND)LOWORD(lpParms->dwCallback),
+ wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
}
return 0;
@@ -1146,7 +1135,7 @@
/**************************************************************************
* MIDI_mciResume [internal]
*/
-static DWORD MIDI_mciResume(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
+static DWORD MIDI_mciResume(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
{
WINE_MCIMIDI* wmm = MIDI_mciGetOpenDev(wDevID);
@@ -1160,8 +1149,8 @@
}
if (lpParms && (dwFlags & MCI_NOTIFY)) {
TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
- mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback),
- wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+ mciDriverNotify((HWND)LOWORD(lpParms->dwCallback),
+ wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
}
return 0;
}
@@ -1169,7 +1158,7 @@
/**************************************************************************
* MIDI_mciSet [internal]
*/
-static DWORD MIDI_mciSet(UINT16 wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms)
+static DWORD MIDI_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms)
{
WINE_MCIMIDI* wmm = MIDI_mciGetOpenDev(wDevID);
@@ -1247,7 +1236,7 @@
/**************************************************************************
* MIDI_mciStatus [internal]
*/
-static DWORD MIDI_mciStatus(UINT16 wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms)
+static DWORD MIDI_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms)
{
WINE_MCIMIDI* wmm = MIDI_mciGetOpenDev(wDevID);
DWORD ret = 0;
@@ -1337,8 +1326,8 @@
lpParms->dwReturn = 0;
break;
case MCI_SEQ_STATUS_PORT:
- TRACE("MCI_SEQ_STATUS_PORT !\n");
- lpParms->dwReturn = 0;
+ TRACE("MCI_SEQ_STATUS_PORT (%u)!\n", wmm->wDevID);
+ lpParms->dwReturn = wmm->wDevID;
break;
case MCI_SEQ_STATUS_TEMPO:
TRACE("MCI_SEQ_STATUS_TEMPO !\n");
@@ -1354,8 +1343,8 @@
}
if (dwFlags & MCI_NOTIFY) {
TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
- mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback),
- wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+ mciDriverNotify((HWND)LOWORD(lpParms->dwCallback),
+ wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
}
return ret;
}
@@ -1363,7 +1352,7 @@
/**************************************************************************
* MIDI_mciGetDevCaps [internal]
*/
-static DWORD MIDI_mciGetDevCaps(UINT16 wDevID, DWORD dwFlags,
+static DWORD MIDI_mciGetDevCaps(UINT wDevID, DWORD dwFlags,
LPMCI_GETDEVCAPS_PARMS lpParms)
{
WINE_MCIMIDI* wmm = MIDI_mciGetOpenDev(wDevID);
@@ -1435,7 +1424,7 @@
/**************************************************************************
* MIDI_mciInfo [internal]
*/
-static DWORD MIDI_mciInfo(UINT16 wDevID, DWORD dwFlags, LPMCI_INFO_PARMSA lpParms)
+static DWORD MIDI_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMSA lpParms)
{
LPCSTR str = 0;
WINE_MCIMIDI* wmm = MIDI_mciGetOpenDev(wDevID);
@@ -1472,7 +1461,7 @@
/**************************************************************************
* MIDI_mciSeek [internal]
*/
-static DWORD MIDI_mciSeek(UINT16 wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms)
+static DWORD MIDI_mciSeek(UINT wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms)
{
DWORD ret = 0;
WINE_MCIMIDI* wmm = MIDI_mciGetOpenDev(wDevID);
@@ -1501,13 +1490,12 @@
if (dwFlags & MCI_NOTIFY) {
TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
- mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback),
+ mciDriverNotify((HWND)LOWORD(lpParms->dwCallback),
wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
}
}
return ret;
}
-#endif
/*======================================================================*
* MIDI entry points *
@@ -1528,7 +1516,6 @@
case DRV_CONFIGURE: MessageBoxA(0, "Sample Midi Driver !", "OSS Driver", MB_OK); return 1;
case DRV_INSTALL: return DRVCNF_RESTART;
case DRV_REMOVE: return DRVCNF_RESTART;
-#ifdef SNDCTL_MIDI_INFO
case DRV_OPEN: return MIDI_drvOpen((LPSTR)dwParam1, (LPMCI_OPEN_DRIVER_PARMSA)dwParam2);
case DRV_CLOSE: return MIDI_drvClose(dwDevID);
case MCI_OPEN_DRIVER: return MIDI_mciOpen (dwDevID, dwParam1, (LPMCI_OPEN_PARMSA) dwParam2);
@@ -1543,22 +1530,6 @@
case MCI_GETDEVCAPS: return MIDI_mciGetDevCaps(dwDevID, dwParam1, (LPMCI_GETDEVCAPS_PARMS)dwParam2);
case MCI_INFO: return MIDI_mciInfo (dwDevID, dwParam1, (LPMCI_INFO_PARMSA) dwParam2);
case MCI_SEEK: return MIDI_mciSeek (dwDevID, dwParam1, (LPMCI_SEEK_PARMS) dwParam2);
-#else
- case DRV_OPEN: return 1;
- case DRV_CLOSE: return 1;
- case MCI_OPEN_DRIVER:
- case MCI_CLOSE_DRIVER:
- case MCI_PLAY:
- case MCI_RECORD:
- case MCI_STOP:
- case MCI_SET:
- case MCI_PAUSE:
- case MCI_RESUME:
- case MCI_STATUS:
- case MCI_GETDEVCAPS:
- case MCI_INFO:
- case MCI_SEEK:
-#endif
/* commands that should be supported */
case MCI_LOAD:
case MCI_SAVE:
diff --git a/multimedia/mciwave.c b/multimedia/mciwave.c
index 408aa8e..9e503eb 100644
--- a/multimedia/mciwave.c
+++ b/multimedia/mciwave.c
@@ -1,8 +1,9 @@
/* -*- tab-width: 8; c-basic-offset: 4 -*- */
/*
- * Sample Wine Driver for Open Sound System (featured in Linux and FreeBSD)
+ * Sample Wine Driver for MCI wave forms
*
- * Copyright 1994 Martin Ayotte
+ * Copyright 1994 Martin Ayotte
+ * 1999 Eric Pouech
*/
/*
* FIXME:
@@ -10,31 +11,27 @@
* - segmented/linear pointer problems (lpData in waveheaders,W*_DONE cbs)
*/
-#define EMULATE_SB16
-
-#define DEBUG_MCIWAVE
-
#include "winuser.h"
#include "driver.h"
-#include "multimedia.h"
+#include "mmddk.h"
#include "heap.h"
#include "debugtools.h"
DEFAULT_DEBUG_CHANNEL(mciwave)
typedef struct {
- UINT16 wDevID;
- UINT16 wWavID;
+ UINT wDevID;
+ HANDLE hWave;
int nUseCount; /* Incremented for each shared open */
- BOOL16 fShareable; /* TRUE if first open was shareable */
+ BOOL fShareable; /* TRUE if first open was shareable */
WORD wNotifyDeviceID;/* MCI device ID with a pending notification */
- HANDLE16 hCallback; /* Callback handle for pending notification */
+ HANDLE hCallback; /* Callback handle for pending notification */
HMMIO hFile; /* mmio file handle open as Element */
MCI_WAVE_OPEN_PARMSA openParms;
WAVEOPENDESC waveDesc;
PCMWAVEFORMAT WaveFormat;
WAVEHDR WaveHdr;
- BOOL16 fInput; /* FALSE = Output, TRUE = Input */
+ BOOL fInput; /* FALSE = Output, TRUE = Input */
WORD dwStatus; /* one from MCI_MODE_xxxx */
DWORD dwMciTimeFormat;/* One of the supported MCI_FORMAT_xxxx */
DWORD dwFileOffset; /* Offset of chunk in mmio file */
@@ -46,7 +43,7 @@
* MCI WAVE implemantation *
*======================================================================*/
-static DWORD WAVE_mciResume(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms);
+static DWORD WAVE_mciResume(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms);
/**************************************************************************
* MCIWAVE_drvOpen [internal]
@@ -83,7 +80,7 @@
/**************************************************************************
* WAVE_mciGetOpenDev [internal]
*/
-static WINE_MCIWAVE* WAVE_mciGetOpenDev(UINT16 wDevID)
+static WINE_MCIWAVE* WAVE_mciGetOpenDev(UINT wDevID)
{
WINE_MCIWAVE* wmw = (WINE_MCIWAVE*)mciGetDriverData(wDevID);
@@ -184,7 +181,7 @@
/**************************************************************************
* WAVE_mciOpen [internal]
*/
-static DWORD WAVE_mciOpen(UINT16 wDevID, DWORD dwFlags, LPMCI_WAVE_OPEN_PARMSA lpOpenParms)
+static DWORD WAVE_mciOpen(UINT wDevID, DWORD dwFlags, LPMCI_WAVE_OPEN_PARMSA lpOpenParms)
{
DWORD dwRet = 0;
DWORD dwDeviceID;
@@ -208,7 +205,7 @@
dwDeviceID = lpOpenParms->wDeviceID;
wmw->fInput = FALSE;
- wmw->wWavID = 0;
+ wmw->hWave = 0;
TRACE("wDevID=%04X (lpParams->wDeviceID=%08lX)\n", wDevID, dwDeviceID);
@@ -280,7 +277,7 @@
/**************************************************************************
* WAVE_mciCue [internal]
*/
-static DWORD WAVE_mciCue(UINT16 wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms)
+static DWORD WAVE_mciCue(UINT wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms)
{
/*
FIXME
@@ -296,7 +293,7 @@
DWORD dwRet;
WINE_MCIWAVE* wmw = WAVE_mciGetOpenDev(wDevID);
- TRACE("(%u, %08lX, %p);\n", wDevID, dwParam, lpParms);
+ FIXME("(%u, %08lX, %p); likely to fail\n", wDevID, dwParam, lpParms);
if (wmw == NULL) return MCIERR_INVALID_DEVICE_ID;
@@ -309,23 +306,22 @@
dwRet = MMSYSERR_NOERROR; /* assume success */
if ((dwParam & MCI_WAVE_INPUT) && !wmw->fInput) {
- dwRet = wodMessage(wmw->wWavID, WODM_CLOSE, 0, 0L, 0L);
+ dwRet = waveOutClose(wmw->hWave);
if (dwRet != MMSYSERR_NOERROR) return MCIERR_INTERNAL;
- dwRet = widMessage(wmw->wWavID, WIDM_OPEN, 0, (DWORD)&wmw->waveDesc, CALLBACK_NULL);
wmw->fInput = TRUE;
} else if (wmw->fInput) {
- dwRet = widMessage(wmw->wWavID, WIDM_CLOSE, 0, 0L, 0L);
+ dwRet = waveInClose(wmw->hWave);
if (dwRet != MMSYSERR_NOERROR) return MCIERR_INTERNAL;
- dwRet = wodMessage(wmw->wWavID, WODM_OPEN, 0, (DWORD)&wmw->waveDesc, CALLBACK_NULL);
wmw->fInput = FALSE;
}
+ wmw->hWave = 0;
return (dwRet == MMSYSERR_NOERROR) ? 0 : MCIERR_INTERNAL;
}
/**************************************************************************
* WAVE_mciStop [internal]
*/
-static DWORD WAVE_mciStop(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
+static DWORD WAVE_mciStop(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
{
DWORD dwRet;
WINE_MCIWAVE* wmw = WAVE_mciGetOpenDev(wDevID);
@@ -340,14 +336,14 @@
TRACE("wmw->dwStatus=%d\n", wmw->dwStatus);
if (wmw->fInput)
- dwRet = widMessage(wmw->wWavID, WIDM_RESET, 0, dwFlags, (DWORD)lpParms);
+ dwRet = waveInReset(wmw->hWave);
else
- dwRet = wodMessage(wmw->wWavID, WODM_RESET, 0, dwFlags, (DWORD)lpParms);
+ dwRet = waveOutReset(wmw->hWave);
if (dwFlags & MCI_NOTIFY) {
TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
- mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback),
- wmw->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+ mciDriverNotify((HWND)LOWORD(lpParms->dwCallback),
+ wmw->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
}
return (dwRet == MMSYSERR_NOERROR) ? 0 : MCIERR_INTERNAL;
@@ -356,7 +352,7 @@
/**************************************************************************
* WAVE_mciClose [internal]
*/
-static DWORD WAVE_mciClose(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
+static DWORD WAVE_mciClose(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
{
DWORD dwRet = 0;
WINE_MCIWAVE* wmw = WAVE_mciGetOpenDev(wDevID);
@@ -377,17 +373,16 @@
mmioClose(wmw->hFile, 0);
wmw->hFile = 0;
}
- mmRet = (wmw->fInput) ? widMessage(wmw->wWavID, WIDM_CLOSE, 0, 0L, 0L) :
- wodMessage(wmw->wWavID, WODM_CLOSE, 0, 0L, 0L);
+ mmRet = (wmw->fInput) ? waveInClose(wmw->hWave) : waveOutClose(wmw->hWave);
if (mmRet != MMSYSERR_NOERROR) dwRet = MCIERR_INTERNAL;
}
if ((dwFlags & MCI_NOTIFY) && lpParms) {
TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
- mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback),
- wmw->wNotifyDeviceID,
- (dwRet == 0) ? MCI_NOTIFY_SUCCESSFUL : MCI_NOTIFY_FAILURE);
+ mciDriverNotify((HWND)LOWORD(lpParms->dwCallback),
+ wmw->wNotifyDeviceID,
+ (dwRet == 0) ? MCI_NOTIFY_SUCCESSFUL : MCI_NOTIFY_FAILURE);
}
return 0;
}
@@ -395,7 +390,7 @@
/**************************************************************************
* WAVE_mciPlay [internal]
*/
-static DWORD WAVE_mciPlay(UINT16 wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)
+static DWORD WAVE_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)
{
DWORD end;
LONG bufsize, count;
@@ -448,7 +443,8 @@
* change from output to input and back
*/
/* FIXME: how to choose between several output channels ? here 0 is forced */
- dwRet = wodMessage(0, WODM_OPEN, 0, (DWORD)&wmw->waveDesc, CALLBACK_NULL);
+ /* I shall rather use WAVE_MAPPER */
+ dwRet = waveOutOpen(&wmw->hWave, 0, (LPWAVEFORMATEX)&wmw->WaveFormat, 0L, 0L, CALLBACK_NULL);
if (dwRet != 0) {
TRACE("Can't open low level audio device %ld\n", dwRet);
return MCIERR_DEVICE_OPEN;
@@ -472,14 +468,12 @@
TRACE("mmioRead bufsize=%ld count=%ld\n", bufsize, count);
if (count < 1)
break;
- dwRet = wodMessage(wmw->wWavID, WODM_PREPARE, 0, (DWORD)&wmw->WaveHdr, sizeof(WAVEHDR));
+ dwRet = waveOutPrepareHeader(wmw->hWave, &wmw->WaveHdr, sizeof(WAVEHDR));
wmw->WaveHdr.dwBufferLength = count;
wmw->WaveHdr.dwBytesRecorded = 0;
- /* FIXME */
- wmw->WaveHdr.reserved = (DWORD)&wmw->WaveHdr;
TRACE("before WODM_WRITE lpWaveHdr=%p dwBufferLength=%lu dwBytesRecorded=%lu\n",
&wmw->WaveHdr, wmw->WaveHdr.dwBufferLength, wmw->WaveHdr.dwBytesRecorded);
- dwRet = wodMessage(wmw->wWavID, WODM_WRITE, 0, (DWORD)&wmw->WaveHdr, sizeof(WAVEHDR));
+ dwRet = waveOutWrite(wmw->hWave, &wmw->WaveHdr, sizeof(WAVEHDR));
/* FIXME: should use callback mechanisms from audio driver */
#if 1
while (!(wmw->WaveHdr.dwFlags & WHDR_DONE))
@@ -487,7 +481,7 @@
#endif
wmw->dwPosition += count;
TRACE("after WODM_WRITE dwPosition=%lu\n", wmw->dwPosition);
- dwRet = wodMessage(wmw->wWavID, WODM_UNPREPARE, 0, (DWORD)&wmw->WaveHdr, sizeof(WAVEHDR));
+ dwRet = waveOutUnprepareHeader(wmw->hWave, &wmw->WaveHdr, sizeof(WAVEHDR));
}
if (wmw->WaveHdr.lpData != NULL) {
@@ -496,14 +490,14 @@
wmw->WaveHdr.lpData = NULL;
}
- wodMessage(wmw->wWavID, WODM_RESET, 0, 0L, 0L);
- wodMessage(wmw->wWavID, WODM_CLOSE, 0, 0L, 0L);
+ waveOutReset(wmw->hWave);
+ waveOutClose(wmw->hWave);
wmw->dwStatus = MCI_MODE_STOP;
if (lpParms && (dwFlags & MCI_NOTIFY)) {
TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
- mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback),
- wmw->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+ mciDriverNotify((HWND)LOWORD(lpParms->dwCallback),
+ wmw->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
}
return 0;
}
@@ -511,7 +505,7 @@
/**************************************************************************
* WAVE_mciRecord [internal]
*/
-static DWORD WAVE_mciRecord(UINT16 wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpParms)
+static DWORD WAVE_mciRecord(UINT wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpParms)
{
int start, end;
LONG bufsize;
@@ -552,18 +546,15 @@
lpWaveHdr->dwUser = 0L;
lpWaveHdr->dwFlags = 0L;
lpWaveHdr->dwLoops = 0L;
- dwRet = widMessage(wmw->wWavID, WIDM_PREPARE, 0, (DWORD)lpWaveHdr, sizeof(WAVEHDR));
- TRACE("after WIDM_PREPARE \n");
- while (TRUE) {
+ dwRet = waveInPrepareHeader(wmw->hWave, lpWaveHdr, sizeof(WAVEHDR));
+ while (TRUE) { /* FIXME: I don't see any waveInAddBuffer ? */
lpWaveHdr->dwBytesRecorded = 0;
- dwRet = widMessage(wmw->wWavID, WIDM_START, 0, 0L, 0L);
+ dwRet = waveInStart(wmw->hWave);
TRACE("after WIDM_START lpWaveHdr=%p dwBytesRecorded=%lu\n",
lpWaveHdr, lpWaveHdr->dwBytesRecorded);
if (lpWaveHdr->dwBytesRecorded == 0) break;
}
- TRACE("before WIDM_UNPREPARE \n");
- dwRet = widMessage(wmw->wWavID, WIDM_UNPREPARE, 0, (DWORD)lpWaveHdr, sizeof(WAVEHDR));
- TRACE("after WIDM_UNPREPARE \n");
+ dwRet = waveInUnprepareHeader(wmw->hWave, lpWaveHdr, sizeof(WAVEHDR));
if (lpWaveHdr->lpData != NULL) {
GlobalUnlock16(hData);
GlobalFree16(hData);
@@ -571,8 +562,8 @@
}
if (dwFlags & MCI_NOTIFY) {
TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
- mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback),
- wmw->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+ mciDriverNotify((HWND)LOWORD(lpParms->dwCallback),
+ wmw->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
}
return 0;
}
@@ -580,7 +571,7 @@
/**************************************************************************
* WAVE_mciPause [internal]
*/
-static DWORD WAVE_mciPause(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
+static DWORD WAVE_mciPause(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
{
DWORD dwRet;
WINE_MCIWAVE* wmw = WAVE_mciGetOpenDev(wDevID);
@@ -594,8 +585,8 @@
wmw->dwStatus = MCI_MODE_PAUSE;
}
- if (wmw->fInput) dwRet = widMessage(wmw->wWavID, WIDM_PAUSE, 0, 0L, 0L);
- else dwRet = wodMessage(wmw->wWavID, WODM_PAUSE, 0, 0L, 0L);
+ if (wmw->fInput) dwRet = waveInStop(wmw->hWave);
+ else dwRet = waveOutPause(wmw->hWave);
return (dwRet == MMSYSERR_NOERROR) ? 0 : MCIERR_INTERNAL;
}
@@ -603,7 +594,7 @@
/**************************************************************************
* WAVE_mciResume [internal]
*/
-static DWORD WAVE_mciResume(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
+static DWORD WAVE_mciResume(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
{
WINE_MCIWAVE* wmw = WAVE_mciGetOpenDev(wDevID);
DWORD dwRet = 0;
@@ -618,15 +609,15 @@
}
/* FIXME: I doubt WIDM_START is correct */
- if (wmw->fInput) dwRet = widMessage(wmw->wWavID, WIDM_START, 0, 0L, 0L);
- else dwRet = wodMessage(wmw->wWavID, WODM_RESTART, 0, 0L, 0L);
+ if (wmw->fInput) dwRet = waveInStart(wmw->hWave);
+ else dwRet = waveOutRestart(wmw->hWave);
return (dwRet == MMSYSERR_NOERROR) ? 0 : MCIERR_INTERNAL;
}
/**************************************************************************
* WAVE_mciSeek [internal]
*/
-static DWORD WAVE_mciSeek(UINT16 wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms)
+static DWORD WAVE_mciSeek(UINT wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms)
{
DWORD ret = 0;
WINE_MCIWAVE* wmw = WAVE_mciGetOpenDev(wDevID);
@@ -655,8 +646,8 @@
if (dwFlags & MCI_NOTIFY) {
TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
- mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback),
- wmw->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+ mciDriverNotify((HWND)LOWORD(lpParms->dwCallback),
+ wmw->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
}
}
return ret;
@@ -665,7 +656,7 @@
/**************************************************************************
* WAVE_mciSet [internal]
*/
-static DWORD WAVE_mciSet(UINT16 wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms)
+static DWORD WAVE_mciSet(UINT wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms)
{
WINE_MCIWAVE* wmw = WAVE_mciGetOpenDev(wDevID);
@@ -748,7 +739,7 @@
/**************************************************************************
* WAVE_mciStatus [internal]
*/
-static DWORD WAVE_mciStatus(UINT16 wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms)
+static DWORD WAVE_mciStatus(UINT wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms)
{
WINE_MCIWAVE* wmw = WAVE_mciGetOpenDev(wDevID);
DWORD ret;
@@ -758,7 +749,7 @@
if (wmw == NULL) return MCIERR_INVALID_DEVICE_ID;
if (dwFlags & MCI_STATUS_ITEM) {
- switch(lpParms->dwItem) {
+ switch (lpParms->dwItem) {
case MCI_STATUS_CURRENT_TRACK:
lpParms->dwReturn = 1;
TRACE("MCI_STATUS_CURRENT_TRACK => %lu\n", lpParms->dwReturn);
@@ -845,8 +836,8 @@
}
if (dwFlags & MCI_NOTIFY) {
TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);
- mciDriverNotify16((HWND16)LOWORD(lpParms->dwCallback),
- wmw->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
+ mciDriverNotify((HWND)LOWORD(lpParms->dwCallback),
+ wmw->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
}
return ret;
}
@@ -854,7 +845,7 @@
/**************************************************************************
* WAVE_mciGetDevCaps [internal]
*/
-static DWORD WAVE_mciGetDevCaps(UINT16 wDevID, DWORD dwFlags,
+static DWORD WAVE_mciGetDevCaps(UINT wDevID, DWORD dwFlags,
LPMCI_GETDEVCAPS_PARMS lpParms)
{
WINE_MCIWAVE* wmw = WAVE_mciGetOpenDev(wDevID);
@@ -923,7 +914,7 @@
/**************************************************************************
* WAVE_mciInfo [internal]
*/
-static DWORD WAVE_mciInfo(UINT16 wDevID, DWORD dwFlags, LPMCI_INFO_PARMS16 lpParms)
+static DWORD WAVE_mciInfo(UINT wDevID, DWORD dwFlags, LPMCI_INFO_PARMSA lpParms)
{
DWORD ret = 0;
LPCSTR str = 0;
@@ -1000,7 +991,7 @@
case MCI_RESUME: return WAVE_mciResume (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2);
case MCI_STATUS: return WAVE_mciStatus (dwDevID, dwParam1, (LPMCI_STATUS_PARMS) dwParam2);
case MCI_GETDEVCAPS: return WAVE_mciGetDevCaps(dwDevID, dwParam1, (LPMCI_GETDEVCAPS_PARMS) dwParam2);
- case MCI_INFO: return WAVE_mciInfo (dwDevID, dwParam1, (LPMCI_INFO_PARMS16) dwParam2);
+ case MCI_INFO: return WAVE_mciInfo (dwDevID, dwParam1, (LPMCI_INFO_PARMSA) dwParam2);
case MCI_SEEK: return WAVE_mciSeek (dwDevID, dwParam1, (LPMCI_SEEK_PARMS) dwParam2);
/* commands that should be supported */
case MCI_LOAD: