From 8aa64672de41dfb4703901bf7a7ba8149289ddbc Mon Sep 17 00:00:00 2001 From: Eric Pouech Date: Thu, 22 Oct 2009 22:09:52 +0200 Subject: [PATCH] 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 fe9e3b62723..4bba7086fd5 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 154955391d0..5c580657d75 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; - ret = MIXER_Open(&hmix, uDeviceID, dwCallback, dwInstance, fdwOpen, FALSE); - if (lphmix) *lphmix = HMIXER_16(hmix); + if (!(thunk = MMSYSTDRV_AddThunk(dwCallback, MMSYSTDRV_MIXER))) + { + return MMSYSERR_NOMEM; + } + if ((fdwOpen & CALLBACK_TYPEMASK) == CALLBACK_FUNCTION) + { + dwCallback = (DWORD)thunk; + } + + 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 6af5f01be90..985c03bbde7 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 0e42df71e7d..f481941b55e 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; @@ -377,15 +380,6 @@ UINT MIXER_Open(LPHMIXER lphMix, UINT uDeviceID, DWORD_PTR dwCallback, return dwRet; } -/************************************************************************** - * 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.@] */