Module: wine Branch: master Commit: bf4665780cf067fe8a014cf00b1353a65f1e278d URL: http://source.winehq.org/git/wine.git/?a=commit;h=bf4665780cf067fe8a014cf00b...
Author: Jörg Höhle hoehle@users.sourceforge.net Date: Sat Oct 17 16:37:40 2009 +0200
mciwave: Pause/resume is not accepted from every state.
---
dlls/mciwave/mciwave.c | 42 ++++++++++++++++++++++++++++++------------ 1 files changed, 30 insertions(+), 12 deletions(-)
diff --git a/dlls/mciwave/mciwave.c b/dlls/mciwave/mciwave.c index 8eb6bad..a0415bd 100644 --- a/dlls/mciwave/mciwave.c +++ b/dlls/mciwave/mciwave.c @@ -1130,16 +1130,23 @@ static DWORD WAVE_mciPause(MCIDEVICEID wDevID, DWORD dwFlags, LPMCI_GENERIC_PARM
TRACE("(%u, %08X, %p);\n", wDevID, dwFlags, lpParms);
- if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK; if (wmw == NULL) return MCIERR_INVALID_DEVICE_ID;
- if (wmw->dwStatus == MCI_MODE_PLAY) { + switch (wmw->dwStatus) { + case MCI_MODE_PLAY: wmw->dwStatus = MCI_MODE_PAUSE; + dwRet = waveOutPause(wmw->hWave); + break; + case MCI_MODE_RECORD: + wmw->dwStatus = MCI_MODE_PAUSE; + dwRet = waveInStop(wmw->hWave); + break; + case MCI_MODE_PAUSE: + dwRet = MMSYSERR_NOERROR; + break; + default: + return MCIERR_NONAPPLICABLE_FUNCTION; } - - if (wmw->fInput) dwRet = waveInStop(wmw->hWave); - else dwRet = waveOutPause(wmw->hWave); - return (dwRet == MMSYSERR_NOERROR) ? 0 : MCIERR_INTERNAL; }
@@ -1149,18 +1156,29 @@ static DWORD WAVE_mciPause(MCIDEVICEID wDevID, DWORD dwFlags, LPMCI_GENERIC_PARM static DWORD WAVE_mciResume(MCIDEVICEID wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms) { WINE_MCIWAVE* wmw = WAVE_mciGetOpenDev(wDevID); - DWORD dwRet = 0; + DWORD dwRet;
TRACE("(%u, %08X, %p);\n", wDevID, dwFlags, lpParms);
if (wmw == NULL) return MCIERR_INVALID_DEVICE_ID;
- if (wmw->dwStatus == MCI_MODE_PAUSE) { - wmw->dwStatus = MCI_MODE_PLAY; + switch (wmw->dwStatus) { + case MCI_MODE_PAUSE: + if (wmw->fInput) { + wmw->dwStatus = MCI_MODE_RECORD; + dwRet = waveInStart(wmw->hWave); + } else { + wmw->dwStatus = MCI_MODE_PLAY; + dwRet = waveOutRestart(wmw->hWave); + } + break; + case MCI_MODE_PLAY: + case MCI_MODE_RECORD: + dwRet = MMSYSERR_NOERROR; + break; + default: + return MCIERR_NONAPPLICABLE_FUNCTION; } - - if (wmw->fInput) dwRet = waveInStart(wmw->hWave); - else dwRet = waveOutRestart(wmw->hWave); return (dwRet == MMSYSERR_NOERROR) ? 0 : MCIERR_INTERNAL; }