Spotted while working on 34753, its calling Activate with TRUE but then stops the sound buffer.
The documenation says that it should stop the playback when paramter is FALSE. https://docs.microsoft.com/en-us/previous-versions/ms808948%28v%3dmsdn.10%29
Signed-off-by: Alistair Leslie-Hughes leslie_alistair@hotmail.com --- dlls/dmime/audiopath.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-)
diff --git a/dlls/dmime/audiopath.c b/dlls/dmime/audiopath.c index 1aadba92ae..e300375eca 100644 --- a/dlls/dmime/audiopath.c +++ b/dlls/dmime/audiopath.c @@ -216,21 +216,23 @@ static HRESULT WINAPI IDirectMusicAudioPathImpl_GetObjectInPath (IDirectMusicAud return E_INVALIDARG; }
-static HRESULT WINAPI IDirectMusicAudioPathImpl_Activate (IDirectMusicAudioPath *iface, BOOL fActivate) +static HRESULT WINAPI IDirectMusicAudioPathImpl_Activate (IDirectMusicAudioPath *iface, BOOL activate) { - struct IDirectMusicAudioPathImpl *This = impl_from_IDirectMusicAudioPath(iface); - FIXME("(%p, %d): stub\n", This, fActivate); - if (!fActivate) { - if (!This->fActive) return S_OK; - This->fActive = FALSE; - } else { - if (This->fActive) return S_OK; - This->fActive = TRUE; - if (NULL != This->pDSBuffer) { - IDirectSoundBuffer_Stop(This->pDSBuffer); + struct IDirectMusicAudioPathImpl *This = impl_from_IDirectMusicAudioPath(iface); + + FIXME("(%p, %d): semi-stub\n", This, activate); + + if (activate == This->fActive) + return S_FALSE; + + if (!activate && This->pDSBuffer) { + /* Path is being deactivate */ + IDirectSoundBuffer_Stop(This->pDSBuffer); } - } - return S_OK; + + This->fActive = activate; + + return S_OK; }
static HRESULT WINAPI IDirectMusicAudioPathImpl_SetVolume (IDirectMusicAudioPath *iface, LONG lVolume, DWORD dwDuration)