Module: wine Branch: master Commit: 8aa64672de41dfb4703901bf7a7ba8149289ddbc URL: http://source.winehq.org/git/wine.git/?a=commit;h=8aa64672de41dfb4703901bf7a...
Author: Eric Pouech eric.pouech@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)