Make Init and InitAudio return an error when no audio driver is

available.
Fix crash in InitAudio when releasing the dsound object.
This commit is contained in:
Christian Costa 2003-07-02 04:30:27 +00:00 committed by Alexandre Julliard
parent b15ff0725b
commit 2348e7a098

View file

@ -80,6 +80,15 @@ HRESULT WINAPI IDirectMusicPerformance8Impl_Init (LPDIRECTMUSICPERFORMANCE8 ifac
if (This->dmusic || This->dsound)
return DMUS_E_ALREADY_INITED;
if (NULL != pDirectSound) {
This->dsound = (IDirectSound*) pDirectSound;
IDirectSound_AddRef((LPDIRECTSOUND) This->dsound);
} else {
DirectSoundCreate8(&IID_IDirectSound8, (LPDIRECTSOUND8*) &This->dsound, NULL);
if (!This->dsound)
return DSERR_NODRIVER;
}
if (NULL != ppDirectMusic && NULL != *ppDirectMusic) {
/* app creates it's own dmusic object and gives it to performance */
This->dmusic = (IDirectMusic8*) *ppDirectMusic;
@ -94,12 +103,6 @@ HRESULT WINAPI IDirectMusicPerformance8Impl_Init (LPDIRECTMUSICPERFORMANCE8 ifac
}
}
if (NULL != pDirectSound) {
This->dsound = (IDirectSound*) pDirectSound;
IDirectSound_AddRef((LPDIRECTSOUND) This->dsound);
} else {
DirectSoundCreate8(&IID_IDirectSound8, (LPDIRECTSOUND8*) &This->dsound, NULL);
}
return S_OK;
}
@ -532,6 +535,8 @@ HRESULT WINAPI IDirectMusicPerformance8ImplInitAudio (LPDIRECTMUSICPERFORMANCE8
DWORD dwFlags,
DMUS_AUDIOPARAMS* pParams)
{
IDirectSound* dsound;
ICOM_THIS(IDirectMusicPerformance8Impl,iface);
FIXME("(%p, %p, %p, %p, %lx, %lu, %lx, %p): to check\n", This, ppDirectMusic, ppDirectSound, hWnd, dwDefaultPathType, dwPChannelCount, dwFlags, pParams);
@ -539,14 +544,16 @@ HRESULT WINAPI IDirectMusicPerformance8ImplInitAudio (LPDIRECTMUSICPERFORMANCE8
return DMUS_E_ALREADY_INITED;
if (NULL != ppDirectSound && NULL != *ppDirectSound) {
This->dsound = *ppDirectSound;
dsound = *ppDirectSound;
} else {
DirectSoundCreate8(&IID_IDirectSound8, (LPDIRECTSOUND8*) &This->dsound, NULL);
DirectSoundCreate8(&IID_IDirectSound8, (LPDIRECTSOUND8*) &dsound, NULL);
if (!dsound)
return DSERR_NODRIVER;
if (ppDirectSound)
*ppDirectSound = This->dsound;
*ppDirectSound = dsound;
}
IDirectMusicPerformance8Impl_Init(iface, ppDirectMusic, This->dsound, hWnd);
IDirectMusicPerformance8Impl_Init(iface, ppDirectMusic, dsound, hWnd);
/* Init increases the ref count of the dsound object. Decremente it if the app don't want a pointer to the object. */
if (!ppDirectSound)