[PATCH 06/16] [Winmm, MMSystem]: move the 16bit management of midi stream (for midi out driver type) to the new 16=>32 thunking scheme
Eric Pouech
eric.pouech at orange.fr
Thu Oct 22 15:10:12 CDT 2009
A+
---
0 files changed, 0 insertions(+), 0 deletions(-)
diff --git a/dlls/winmm/message16.c b/dlls/winmm/message16.c
index fc455b4..f2c32e6 100644
--- a/dlls/winmm/message16.c
+++ b/dlls/winmm/message16.c
@@ -762,6 +762,11 @@ static void MMSYSTDRV_MidiOut_MapCB(UINT uMsg, DWORD_PTR* dwUser, DWORD_PTR* dw
mh16->dwOffset = mh32->dwOffset;
}
break;
+ case MOM_POSITIONCB:
+ FIXME("NIY\n");
+ /* FIXME: would require to recreate a 16bit MIDIHDR here */
+ *dwParam1 = *dwParam2 = 0;
+ break;
default:
ERR("Unknown msg %u\n", uMsg);
}
diff --git a/dlls/winmm/mmsystem.c b/dlls/winmm/mmsystem.c
index 00a1859..9fd6a84 100644
--- a/dlls/winmm/mmsystem.c
+++ b/dlls/winmm/mmsystem.c
@@ -946,7 +946,10 @@ DWORD WINAPI midiInMessage16(HMIDIIN16 hMidiIn, UINT16 uMessage,
*/
MMRESULT16 WINAPI midiStreamClose16(HMIDISTRM16 hMidiStrm)
{
- return midiStreamClose(HMIDISTRM_32(hMidiStrm));
+ UINT ret = midiStreamClose(HMIDISTRM_32(hMidiStrm));
+ if (ret == MMSYSERR_NOERROR)
+ MMSYSTDRV_CloseHandle((void*)HMIDISTRM_32(hMidiStrm));
+ return ret;
}
/**************************************************************************
@@ -956,17 +959,31 @@ MMRESULT16 WINAPI midiStreamOpen16(HMIDISTRM16* phMidiStrm, LPUINT16 devid,
DWORD cMidi, DWORD dwCallback,
DWORD dwInstance, DWORD fdwOpen)
{
- HMIDISTRM hMidiStrm32;
- MMRESULT ret;
- UINT devid32;
+ HMIDISTRM hMidiStrm32;
+ MMRESULT ret;
+ UINT devid32;
+ struct mmsystdrv_thunk* thunk;
if (!phMidiStrm || !devid)
return MMSYSERR_INVALPARAM;
devid32 = *devid;
- ret = MIDI_StreamOpen(&hMidiStrm32, &devid32, cMidi, dwCallback,
- dwInstance, fdwOpen, FALSE);
- *phMidiStrm = HMIDISTRM_16(hMidiStrm32);
- *devid = devid32;
+
+ if (!(thunk = MMSYSTDRV_AddThunk(dwCallback, MMSYSTDRV_MIDIOUT)))
+ {
+ return MMSYSERR_NOMEM;
+ }
+ if ((fdwOpen & CALLBACK_TYPEMASK) == CALLBACK_FUNCTION)
+ {
+ dwCallback = (DWORD)thunk;
+ }
+ ret = midiStreamOpen(&hMidiStrm32, &devid32, cMidi, dwCallback, dwInstance, fdwOpen);
+ if (ret == MMSYSERR_NOERROR)
+ {
+ *phMidiStrm = HMIDISTRM_16(hMidiStrm32);
+ *devid = devid32;
+ MMSYSTDRV_SetHandle(thunk, hMidiStrm32);
+ }
+ else MMSYSTDRV_DeleteThunk(thunk);
return ret;
}
diff --git a/dlls/winmm/winemm.h b/dlls/winmm/winemm.h
index 82139c5..4b9621f 100644
--- a/dlls/winmm/winemm.h
+++ b/dlls/winmm/winemm.h
@@ -203,9 +203,6 @@ LPSTR MCI_strdupWtoA(LPCWSTR str);
BOOL WINMM_CheckForMMSystem(void);
const char* WINMM_ErrorToString(MMRESULT error);
-MMRESULT MIDI_StreamOpen(HMIDISTRM* lphMidiStrm, LPUINT lpuDeviceID,
- DWORD cMidi, DWORD_PTR dwCallback,
- DWORD_PTR dwInstance, DWORD fdwOpen, BOOL bFrom32);
UINT WAVE_Open(HANDLE* lphndl, UINT uDeviceID, UINT uType,
LPCWAVEFORMATEX lpFormat, DWORD_PTR dwCallback,
DWORD_PTR dwInstance, DWORD dwFlags, BOOL bFrom32);
diff --git a/dlls/winmm/winmm.c b/dlls/winmm/winmm.c
index 00d25b6..26d0807 100644
--- a/dlls/winmm/winmm.c
+++ b/dlls/winmm/winmm.c
@@ -1780,11 +1780,11 @@ MMRESULT WINAPI midiStreamClose(HMIDISTRM hMidiStrm)
}
/**************************************************************************
- * MMSYSTEM_MidiStream_Open [internal]
+ * midiStreamOpen [WINMM.@]
*/
-MMRESULT MIDI_StreamOpen(HMIDISTRM* lphMidiStrm, LPUINT lpuDeviceID, DWORD cMidi,
- DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen,
- BOOL bFrom32)
+MMRESULT WINAPI midiStreamOpen(HMIDISTRM* lphMidiStrm, LPUINT lpuDeviceID,
+ DWORD cMidi, DWORD_PTR dwCallback,
+ DWORD_PTR dwInstance, DWORD fdwOpen)
{
WINE_MIDIStream* lpMidiStrm;
MMRESULT ret;
@@ -1809,7 +1809,7 @@ MMRESULT MIDI_StreamOpen(HMIDISTRM* lphMidiStrm, LPUINT lpuDeviceID, DWORD cMidi
mosm.dwStreamID = (DWORD)lpMidiStrm;
/* FIXME: the correct value is not allocated yet for MAPPER */
mosm.wDeviceID = *lpuDeviceID;
- lpwm = MIDI_OutAlloc(&hMidiOut, &dwCallback, &dwInstance, &fdwOpen, 1, &mosm, bFrom32);
+ lpwm = MIDI_OutAlloc(&hMidiOut, &dwCallback, &dwInstance, &fdwOpen, 1, &mosm, TRUE);
lpMidiStrm->hDevice = hMidiOut;
if (lphMidiStrm)
*lphMidiStrm = (HMIDISTRM)hMidiOut;
@@ -1848,17 +1848,6 @@ MMRESULT MIDI_StreamOpen(HMIDISTRM* lphMidiStrm, LPUINT lpuDeviceID, DWORD cMidi
}
/**************************************************************************
- * midiStreamOpen [WINMM.@]
- */
-MMRESULT WINAPI midiStreamOpen(HMIDISTRM* lphMidiStrm, LPUINT lpuDeviceID,
- DWORD cMidi, DWORD_PTR dwCallback,
- DWORD_PTR dwInstance, DWORD fdwOpen)
-{
- return MIDI_StreamOpen(lphMidiStrm, lpuDeviceID, cMidi, dwCallback,
- dwInstance, fdwOpen, TRUE);
-}
-
-/**************************************************************************
* midiStreamOut [WINMM.@]
*/
MMRESULT WINAPI midiStreamOut(HMIDISTRM hMidiStrm, LPMIDIHDR lpMidiHdr,
More information about the wine-patches
mailing list