Jörg Höhle : mciseq: The native MCI sequencer cannot record.
Alexandre Julliard
julliard at winehq.org
Fri Nov 12 11:22:39 CST 2010
Module: wine
Branch: master
Commit: 0b0770c84f4702c84e98078c581c70a43ef48ae6
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0b0770c84f4702c84e98078c581c70a43ef48ae6
Author: Jörg Höhle <hoehle at users.sourceforge.net>
Date: Tue Jun 1 22:33:43 2010 +0200
mciseq: The native MCI sequencer cannot record.
---
dlls/mciseq/mcimidi.c | 77 ++++------------------------------------------
dlls/winmm/tests/midi.c | 6 ++++
2 files changed, 13 insertions(+), 70 deletions(-)
diff --git a/dlls/mciseq/mcimidi.c b/dlls/mciseq/mcimidi.c
index 5d15874..4ff68fe 100644
--- a/dlls/mciseq/mcimidi.c
+++ b/dlls/mciseq/mcimidi.c
@@ -21,9 +21,8 @@
/* TODO:
* + implement it correctly
- * + finish asynchronous commands (especially for reading/record)
+ * + finish asynchronous commands
* + better implement non waiting command (without the MCI_WAIT flag).
- * + implement the recording features
*/
#include <stdlib.h>
@@ -970,7 +969,6 @@ static DWORD MIDI_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)
}
dwRet = midiOutOpen((LPHMIDIOUT)&wmm->hMidi, wmm->wPort, 0L, 0L, CALLBACK_NULL);
- /* dwRet = midiInOpen(&wmm->hMidi, wmm->wPort, 0L, 0L, CALLBACK_NULL);*/
if (dwRet != MMSYSERR_NOERROR) {
return dwRet;
}
@@ -1187,64 +1185,6 @@ static DWORD MIDI_mciPlay(UINT wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms)
}
/**************************************************************************
- * MIDI_mciRecord [internal]
- */
-static DWORD MIDI_mciRecord(UINT wDevID, DWORD dwFlags, LPMCI_RECORD_PARMS lpParms)
-{
- int start, end;
- MIDIHDR midiHdr;
- WINE_MCIMIDI* wmm = MIDI_mciGetOpenDev(wDevID);
-
- TRACE("(%04X, %08X, %p);\n", wDevID, dwFlags, lpParms);
-
- if (wmm == 0) return MCIERR_INVALID_DEVICE_ID;
-
- if (wmm->hFile == 0) {
- WARN("Can't find file=%s!\n", debugstr_w(wmm->lpstrElementName));
- return MCIERR_FILE_NOT_FOUND;
- }
- start = 1; end = 99999;
- if (lpParms && (dwFlags & MCI_FROM)) {
- start = lpParms->dwFrom;
- TRACE("MCI_FROM=%d\n", start);
- }
- if (lpParms && (dwFlags & MCI_TO)) {
- end = lpParms->dwTo;
- TRACE("MCI_TO=%d\n", end);
- }
- midiHdr.lpData = HeapAlloc(GetProcessHeap(), 0, 1200);
- if (!midiHdr.lpData)
- return MCIERR_OUT_OF_MEMORY;
- midiHdr.dwBufferLength = 1024;
- midiHdr.dwUser = 0L;
- midiHdr.dwFlags = 0L;
- midiInPrepareHeader((HMIDIIN)wmm->hMidi, &midiHdr, sizeof(MIDIHDR));
- TRACE("After MIDM_PREPARE\n");
- wmm->dwStatus = MCI_MODE_RECORD;
- /* FIXME: there is no buffer added */
- while (wmm->dwStatus != MCI_MODE_STOP) {
- TRACE("wmm->dwStatus=%p %d\n",
- &wmm->dwStatus, wmm->dwStatus);
- midiHdr.dwBytesRecorded = 0;
- midiInStart((HMIDIIN)wmm->hMidi);
- TRACE("midiInStart => dwBytesRecorded=%u\n", midiHdr.dwBytesRecorded);
- if (midiHdr.dwBytesRecorded == 0) break;
- }
- TRACE("Before MIDM_UNPREPARE\n");
- midiInUnprepareHeader((HMIDIIN)wmm->hMidi, &midiHdr, sizeof(MIDIHDR));
- TRACE("After MIDM_UNPREPARE\n");
- 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);
- mciDriverNotify(HWND_32(LOWORD(lpParms->dwCallback)),
- wmm->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);
- }
- return 0;
-}
-
-/**************************************************************************
* MIDI_mciPause [internal]
*/
static DWORD MIDI_mciPause(UINT wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms)
@@ -1554,7 +1494,7 @@ static DWORD MIDI_mciGetDevCaps(UINT wDevID, DWORD dwFlags,
break;
case MCI_GETDEVCAPS_CAN_RECORD:
TRACE("MCI_GETDEVCAPS_CAN_RECORD !\n");
- lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);
+ lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE);
ret = MCI_RESOURCE_RETURNED;
break;
case MCI_GETDEVCAPS_CAN_SAVE:
@@ -1679,7 +1619,6 @@ LRESULT CALLBACK MCIMIDI_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg,
case MCI_OPEN_DRIVER: return MIDI_mciOpen (dwDevID, dwParam1, (LPMCI_OPEN_PARMSW) dwParam2);
case MCI_CLOSE_DRIVER: return MIDI_mciClose (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2);
case MCI_PLAY: return MIDI_mciPlay (dwDevID, dwParam1, (LPMCI_PLAY_PARMS) dwParam2);
- case MCI_RECORD: return MIDI_mciRecord (dwDevID, dwParam1, (LPMCI_RECORD_PARMS) dwParam2);
case MCI_STOP: return MIDI_mciStop (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2);
case MCI_SET: return MIDI_mciSet (dwDevID, dwParam1, (LPMCI_SEQ_SET_PARMS) dwParam2);
case MCI_PAUSE: return MIDI_mciPause (dwDevID, dwParam1, (LPMCI_GENERIC_PARMS) dwParam2);
@@ -1688,11 +1627,13 @@ LRESULT CALLBACK MCIMIDI_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg,
case MCI_GETDEVCAPS: return MIDI_mciGetDevCaps(dwDevID, dwParam1, (LPMCI_GETDEVCAPS_PARMS)dwParam2);
case MCI_INFO: return MIDI_mciInfo (dwDevID, dwParam1, (LPMCI_INFO_PARMSW) dwParam2);
case MCI_SEEK: return MIDI_mciSeek (dwDevID, dwParam1, (LPMCI_SEEK_PARMS) dwParam2);
- /* commands that should be supported */
+ /* commands that should report an error */
+ case MCI_RECORD:
case MCI_LOAD:
case MCI_SAVE:
case MCI_FREEZE:
case MCI_PUT:
+ case MCI_WINDOW:
case MCI_REALIZE:
case MCI_UNFREEZE:
case MCI_UPDATE:
@@ -1704,11 +1645,7 @@ LRESULT CALLBACK MCIMIDI_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg,
case MCI_CUT:
case MCI_DELETE:
case MCI_PASTE:
- WARN("Unsupported command [%u]\n", wMsg);
- break;
- /* commands that should report an error */
- case MCI_WINDOW:
- TRACE("Unsupported command [%u]\n", wMsg);
+ TRACE("Unsupported command [0x%x]\n", wMsg);
break;
case MCI_OPEN:
case MCI_CLOSE:
@@ -1718,5 +1655,5 @@ LRESULT CALLBACK MCIMIDI_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg,
TRACE("Sending msg [%u] to default driver proc\n", wMsg);
return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
}
- return MCIERR_UNRECOGNIZED_COMMAND;
+ return MCIERR_UNSUPPORTED_FUNCTION;
}
diff --git a/dlls/winmm/tests/midi.c b/dlls/winmm/tests/midi.c
index 455bcd0..01055e3 100644
--- a/dlls/winmm/tests/midi.c
+++ b/dlls/winmm/tests/midi.c
@@ -198,6 +198,12 @@ static void test_midi_mci(HWND hwnd)
err = mciSendString("sysinfo sequencer quantity", buf, sizeof(buf), hwnd);
ok(!err, "mci sysinfo sequencer quantity returned %d\n", err);
if (!err) trace("Found %s MCI sequencer devices\n", buf);
+
+ if (!strcmp(buf, "0")) return;
+
+ err = mciSendString("capability sequencer can record", buf, sizeof(buf), hwnd);
+ ok(!err, "mci sysinfo sequencer quantity returned %d\n", err);
+ if(!err) ok(!strcmp(buf, "false"), "capability can record is %s\n", buf);
}
More information about the wine-cvs
mailing list