Eric Pouech : winmm: Move the 16bit management of mixer driver type to the new 16=> 32 thunking scheme.

Alexandre Julliard julliard at winehq.org
Fri Oct 23 10:19:02 CDT 2009


Module: wine
Branch: master
Commit: 8aa64672de41dfb4703901bf7a7ba8149289ddbc
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=8aa64672de41dfb4703901bf7a7ba8149289ddbc

Author: Eric Pouech <eric.pouech at orange.fr>
Date:   Thu Oct 22 22:09:52 2009 +0200

winmm: Move the 16bit management of mixer driver type to the new 16=>32 thunking scheme.

---

 dlls/winmm/message16.c |   33 +++++++++++++++++++++++++++------
 dlls/winmm/mmsystem.c  |   29 ++++++++++++++++++++++++-----
 dlls/winmm/winemm.h    |    2 --
 dlls/winmm/winmm.c     |   18 ++++++------------
 4 files changed, 57 insertions(+), 25 deletions(-)

diff --git a/dlls/winmm/message16.c b/dlls/winmm/message16.c
index fe9e3b6..4bba708 100644
--- a/dlls/winmm/message16.c
+++ b/dlls/winmm/message16.c
@@ -123,17 +123,17 @@ static  void	CALLBACK MMDRV_Aux_Callback(HDRVR hDev, UINT uMsg, DWORD_PTR dwInst
  * ================================= */
 
 /**************************************************************************
- * 				xMMDRV_Mixer_Map16To32W		[internal]
+ * 				MMSYSTDRV_Mixer_Map16To32W		[internal]
  */
-static  WINMM_MapType	MMDRV_Mixer_Map16To32W  (UINT wMsg, DWORD_PTR *lpdwUser, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2)
+static  MMSYSTEM_MapType	MMSYSTDRV_Mixer_Map16To32W  (UINT wMsg, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2)
 {
-    return WINMM_MAP_MSGERROR;
+    return MMSYSTEM_MAP_MSGERROR;
 }
 
 /**************************************************************************
- * 				MMDRV_Mixer_UnMap16To32W	[internal]
+ * 				MMSYSTDRV_Mixer_UnMap16To32W	[internal]
  */
-static  WINMM_MapType	MMDRV_Mixer_UnMap16To32W(UINT wMsg, DWORD_PTR *lpdwUser, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2, MMRESULT fn_ret)
+static  MMSYSTEM_MapType	MMSYSTDRV_Mixer_UnMap16To32W(UINT wMsg, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2, MMRESULT fn_ret)
 {
 #if 0
     MIXERCAPSA	micA;
@@ -149,7 +149,7 @@ static  WINMM_MapType	MMDRV_Mixer_UnMap16To32W(UINT wMsg, DWORD_PTR *lpdwUser, D
     }
     return ret;
 #endif
-    return WINMM_MAP_MSGERROR;
+    return MMSYSTEM_MAP_MSGERROR;
 }
 
 /**************************************************************************
@@ -179,6 +179,14 @@ static  void	CALLBACK MMDRV_Mixer_Callback(HDRVR hDev, UINT uMsg, DWORD_PTR dwIn
     MMDRV_Callback(mld, hDev, uMsg, dwParam1, dwParam2);
 }
 
+/**************************************************************************
+ * 				MMSYSTDRV_Mixer_MapCB
+ */
+static  void	                MMSYSTDRV_Mixer_MapCB(DWORD uMsg, DWORD_PTR* dwUser, DWORD_PTR* dwParam1, DWORD_PTR* dwParam2)
+{
+    FIXME("NIY\n");
+}
+
 /* =================================
  *   M I D I  I N    M A P P E R S
  * ================================= */
@@ -2525,6 +2533,18 @@ static  WINMM_MapType	MCI_UnMapMsg32WTo16(WORD uDevType, WORD wMsg, DWORD dwFlag
     return MCI_MsgMapper32WTo16_Destroy((void*)lParam, size, map, kept);
 }
 
+/* temporary hack */
+static  WINMM_MapType	MMDRV_Map16To32W  (UINT wMsg, DWORD_PTR *lpdwUser, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2)
+{
+    return WINMM_MAP_MSGERROR;
+}
+static  WINMM_MapType	MMDRV_UnMap16To32W(UINT wMsg, DWORD_PTR *lpdwUser, DWORD_PTR* lpParam1, DWORD_PTR* lpParam2, MMRESULT fn_ret)
+{
+    return WINMM_MAP_MSGERROR;
+}
+#define MMDRV_Mixer_Map16To32W          MMDRV_Map16To32W
+#define MMDRV_Mixer_UnMap16To32W        MMDRV_UnMap16To32W
+
 void    MMDRV_Init16(void)
 {
 #define A(_x,_y) MMDRV_InstallMap(_x, \
@@ -2579,6 +2599,7 @@ static struct MMSYSTDRV_Type
     MMSYSTDRV_MAPCB     mapcb;
 } MMSYSTEM_DriversType[MMSYSTDRV_MAX] =
 {
+    {MMSYSTDRV_Mixer_Map16To32W,   MMSYSTDRV_Mixer_UnMap16To32W,   MMSYSTDRV_Mixer_MapCB},
 };
 
 /******************************************************************
diff --git a/dlls/winmm/mmsystem.c b/dlls/winmm/mmsystem.c
index 1549553..5c58065 100644
--- a/dlls/winmm/mmsystem.c
+++ b/dlls/winmm/mmsystem.c
@@ -248,11 +248,26 @@ UINT16 WINAPI mixerGetDevCaps16(UINT16 uDeviceID, LPMIXERCAPS16 lpCaps,
 UINT16 WINAPI mixerOpen16(LPHMIXER16 lphmix, UINT16 uDeviceID, DWORD dwCallback,
 			  DWORD dwInstance, DWORD fdwOpen)
 {
-    HMIXER	hmix;
-    UINT	ret;
+    HMIXER	                hmix;
+    UINT	                ret;
+    struct mmsystdrv_thunk*     thunk;
+
+    if (!(thunk = MMSYSTDRV_AddThunk(dwCallback, MMSYSTDRV_MIXER)))
+    {
+        return MMSYSERR_NOMEM;
+    }
+    if ((fdwOpen & CALLBACK_TYPEMASK) == CALLBACK_FUNCTION)
+    {
+        dwCallback = (DWORD)thunk;
+    }
 
-    ret = MIXER_Open(&hmix, uDeviceID, dwCallback, dwInstance, fdwOpen, FALSE);
-    if (lphmix) *lphmix = HMIXER_16(hmix);
+    ret = mixerOpen(&hmix, uDeviceID, dwCallback, dwInstance, fdwOpen);
+    if (ret == MMSYSERR_NOERROR)
+    {
+        if (lphmix) *lphmix = HMIXER_16(hmix);
+        if (thunk) MMSYSTDRV_SetHandle(thunk, hmix);
+    }
+    else MMSYSTDRV_DeleteThunk(thunk);
     return ret;
 }
 
@@ -261,7 +276,11 @@ UINT16 WINAPI mixerOpen16(LPHMIXER16 lphmix, UINT16 uDeviceID, DWORD dwCallback,
  */
 UINT16 WINAPI mixerClose16(HMIXER16 hMix)
 {
-    return mixerClose(HMIXER_32(hMix));
+    UINT        ret = mixerClose(HMIXER_32(hMix));
+
+    if (ret == MMSYSERR_NOERROR)
+        MMSYSTDRV_CloseHandle((void*)HMIXER_32(hMix));
+    return ret;
 }
 
 /**************************************************************************
diff --git a/dlls/winmm/winemm.h b/dlls/winmm/winemm.h
index 6af5f01..985c03b 100644
--- a/dlls/winmm/winemm.h
+++ b/dlls/winmm/winemm.h
@@ -203,8 +203,6 @@ LPSTR           MCI_strdupWtoA(LPCWSTR str);
 BOOL            WINMM_CheckForMMSystem(void);
 const char*     WINMM_ErrorToString(MMRESULT error);
 
-UINT            MIXER_Open(LPHMIXER lphMix, UINT uDeviceID, DWORD_PTR dwCallback,
-                           DWORD_PTR dwInstance, DWORD fdwOpen, BOOL bFrom32);
 UINT            MIDI_OutOpen(HMIDIOUT* lphMidiOut, UINT uDeviceID, DWORD_PTR dwCallback,
                              DWORD_PTR dwInstance, DWORD dwFlags, BOOL bFrom32);
 UINT            MIDI_InOpen(HMIDIIN* lphMidiIn, UINT uDeviceID, DWORD_PTR dwCallback,
diff --git a/dlls/winmm/winmm.c b/dlls/winmm/winmm.c
index 0e42df7..f481941 100644
--- a/dlls/winmm/winmm.c
+++ b/dlls/winmm/winmm.c
@@ -325,8 +325,11 @@ static void CALLBACK MIXER_WCallback(HMIXEROBJ hmx, UINT uMsg, DWORD_PTR dwInsta
     PostMessageW(hWnd, uMsg, (WPARAM)hmx, (LPARAM)dwParam);
 }
 
-UINT  MIXER_Open(LPHMIXER lphMix, UINT uDeviceID, DWORD_PTR dwCallback,
-                 DWORD_PTR dwInstance, DWORD fdwOpen, BOOL bFrom32)
+/**************************************************************************
+ * 				mixerOpen			[WINMM.@]
+ */
+UINT WINAPI mixerOpen(LPHMIXER lphMix, UINT uDeviceID, DWORD_PTR dwCallback,
+                      DWORD_PTR dwInstance, DWORD fdwOpen)
 {
     HANDLE		hMix;
     LPWINE_MLD		wmld;
@@ -361,7 +364,7 @@ UINT  MIXER_Open(LPHMIXER lphMix, UINT uDeviceID, DWORD_PTR dwCallback,
     }
 
     wmld = MMDRV_Alloc(sizeof(WINE_MIXER), MMDRV_MIXER, &hMix, &fdwOpen,
-		       &dwCallback, &dwInstance, bFrom32);
+		       &dwCallback, &dwInstance, TRUE);
     wmld->uDeviceID = uDeviceID;
     mod.hmx = hMix;
 
@@ -378,15 +381,6 @@ UINT  MIXER_Open(LPHMIXER lphMix, UINT uDeviceID, DWORD_PTR dwCallback,
 }
 
 /**************************************************************************
- * 				mixerOpen			[WINMM.@]
- */
-UINT WINAPI mixerOpen(LPHMIXER lphMix, UINT uDeviceID, DWORD_PTR dwCallback,
-                     DWORD_PTR dwInstance, DWORD fdwOpen)
-{
-    return MIXER_Open(lphMix, uDeviceID, dwCallback, dwInstance, fdwOpen, TRUE);
-}
-
-/**************************************************************************
  * 				mixerClose			[WINMM.@]
  */
 UINT WINAPI mixerClose(HMIXER hMix)




More information about the wine-cvs mailing list