made dsound a bit more robust against wave function failure
Eric Pouech
eric.pouech at wanadoo.fr
Mon Apr 22 15:36:39 CDT 2002
changelog & title says it all
A+
-------------- next part --------------
Name: dsound_err
ChangeLog: a bit more robust against wave???Open failures
License: X11
GenDate: 2002/04/22 19:14:11 UTC
ModifiedFiles: dlls/dsound/dsound_main.c
AddedFiles:
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/dlls/dsound/dsound_main.c,v
retrieving revision 1.53
diff -u -u -r1.53 dsound_main.c
--- dlls/dsound/dsound_main.c 25 Mar 2002 20:52:17 -0000 1.53
+++ dlls/dsound/dsound_main.c 21 Apr 2002 15:29:11 -0000
@@ -1186,12 +1186,13 @@
IDsDriverBuffer_Release(primarybuf->hwbuf);
waveOutClose(dsb->dsound->hwo);
dsb->dsound->hwo = 0;
- waveOutOpen(&(dsb->dsound->hwo), dsb->dsound->drvdesc.dnDevNode,
- &(primarybuf->wfx), (DWORD)DSOUND_callback, (DWORD)dsb->dsound,
- CALLBACK_FUNCTION | WAVE_DIRECTSOUND);
- err = IDsDriver_CreateSoundBuffer(dsb->dsound->driver,&(dsb->wfx),dsb->dsbd.dwFlags,0,
- &(dsb->buflen),&(dsb->buffer),
- (LPVOID)&(dsb->hwbuf));
+ err = mmErr(waveOutOpen(&(dsb->dsound->hwo), dsb->dsound->drvdesc.dnDevNode,
+ &(primarybuf->wfx), (DWORD)DSOUND_callback, (DWORD)dsb->dsound,
+ CALLBACK_FUNCTION | WAVE_DIRECTSOUND));
+ if (err == DS_OK)
+ err = IDsDriver_CreateSoundBuffer(dsb->dsound->driver,&(dsb->wfx),dsb->dsbd.dwFlags,0,
+ &(dsb->buflen),&(dsb->buffer),
+ (LPVOID)&(dsb->hwbuf));
}
}
else
@@ -1253,10 +1254,11 @@
DSOUND_PrimaryClose(primarybuf);
waveOutClose(This->dsound->hwo);
This->dsound->hwo = 0;
- waveOutOpen(&(This->dsound->hwo), This->dsound->drvdesc.dnDevNode,
- &(primarybuf->wfx), (DWORD)DSOUND_callback, (DWORD)This->dsound,
- CALLBACK_FUNCTION | WAVE_DIRECTSOUND);
- DSOUND_PrimaryOpen(primarybuf);
+ err = mmErr(waveOutOpen(&(This->dsound->hwo), This->dsound->drvdesc.dnDevNode,
+ &(primarybuf->wfx), (DWORD)DSOUND_callback, (DWORD)This->dsound,
+ CALLBACK_FUNCTION | WAVE_DIRECTSOUND));
+ if (err == DS_OK)
+ DSOUND_PrimaryOpen(primarybuf);
}
if (primarybuf->hwbuf) {
err = IDsDriverBuffer_SetFormat(primarybuf->hwbuf, &(primarybuf->wfx));
@@ -1269,13 +1271,14 @@
if (primarybuf->state == STATE_PLAYING) primarybuf->state = STATE_STARTING;
else if (primarybuf->state == STATE_STOPPING) primarybuf->state = STATE_STOPPED;
}
+ /* FIXME: should we set err back to DS_OK in all cases ? */
}
DSOUND_RecalcFormat(primarybuf);
LeaveCriticalSection(&(This->dsound->lock));
/* **** */
- return DS_OK;
+ return err;
}
static HRESULT WINAPI IDirectSoundBufferImpl_SetVolume(
More information about the wine-patches
mailing list