Module: wine Branch: master Commit: 2d235de320f8a42a7756f371eccdc5bca614d3d5 URL: http://source.winehq.org/git/wine.git/?a=commit;h=2d235de320f8a42a7756f371ec...
Author: Eric Pouech eric.pouech@orange.fr Date: Thu Oct 22 22:10:12 2009 +0200
winmm: Move the 16bit management of midi stream (for midi out driver type) to the new 16=>32 thunking scheme.
---
dlls/winmm/message16.c | 5 +++++ dlls/winmm/mmsystem.c | 33 +++++++++++++++++++++++++-------- dlls/winmm/winemm.h | 3 --- dlls/winmm/winmm.c | 21 +++++---------------- 4 files changed, 35 insertions(+), 27 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,