[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