[PATCH v2 2/2] dmime: Reimplement IDirectMusicAudioPath Activate
From: Alistair Leslie-Hughes <leslie_alistair(a)hotmail.com> 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(a)hotmail.com> Signed-off-by: Michael Stefaniuc <mstefani(a)winehq.org> --- v2: Normalize the application provided BOOL input. 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..078d843d46 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 deactivated */ + IDirectSoundBuffer_Stop(This->pDSBuffer); } - } - return S_OK; + + This->fActive = !!activate; + + return S_OK; } static HRESULT WINAPI IDirectMusicAudioPathImpl_SetVolume (IDirectMusicAudioPath *iface, LONG lVolume, DWORD dwDuration) -- 2.25.1
participants (1)
-
Michael Stefaniuc