Jörg Höhle : mciwave: Pause/ resume is not accepted from every state.
Alexandre Julliard
julliard at winehq.org
Mon Oct 26 10:08:37 CDT 2009
Module: wine
Branch: master
Commit: bf4665780cf067fe8a014cf00b1353a65f1e278d
URL: http://source.winehq.org/git/wine.git/?a=commit;h=bf4665780cf067fe8a014cf00b1353a65f1e278d
Author: Jörg Höhle <hoehle at 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;
}
More information about the wine-cvs
mailing list