Module: wine Branch: master Commit: 0b0770c84f4702c84e98078c581c70a43ef48ae6 URL: http://source.winehq.org/git/wine.git/?a=commit;h=0b0770c84f4702c84e98078c58...
Author: Jörg Höhle hoehle@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); }