[PATCH v2] dsound: IDirectSoundNotify is only available when DSBCAPS_CTRLPOSITIONNOTIFY is specified.

Andrew Eikum aeikum at codeweavers.com
Wed Feb 13 13:50:59 CST 2019


Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>

On Wed, Feb 13, 2019 at 01:56:16AM +0000, Alistair Leslie-Hughes wrote:
> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45473
> Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
> ---
>  dlls/dsound/buffer.c       |  9 +++++++--
>  dlls/dsound/tests/dsound.c | 13 +++++++++++++
>  2 files changed, 20 insertions(+), 2 deletions(-)
> 
> diff --git a/dlls/dsound/buffer.c b/dlls/dsound/buffer.c
> index 5262628528..2a328ed32a 100644
> --- a/dlls/dsound/buffer.c
> +++ b/dlls/dsound/buffer.c
> @@ -923,11 +923,16 @@ static HRESULT WINAPI IDirectSoundBufferImpl_QueryInterface(IDirectSoundBuffer8
>                  return S_OK;
>  	}
>  
> -	if ( IsEqualGUID( &IID_IDirectSoundNotify, riid ) ) {
> +        if ( IsEqualGUID( &IID_IDirectSoundNotify, riid ) ) {
> +            if(This->dsbd.dwFlags & DSBCAPS_CTRLPOSITIONNOTIFY) {
>                  IDirectSoundNotify_AddRef(&This->IDirectSoundNotify_iface);
>                  *ppobj = &This->IDirectSoundNotify_iface;
>                  return S_OK;
> -	}
> +            }
> +
> +            TRACE( "App requested IDirectSoundNotify without DSBCAPS_CTRLPOSITIONNOTIFY flag.\n");
> +            return E_NOINTERFACE;
> +        }
>  
>  	if ( IsEqualGUID( &IID_IDirectSound3DBuffer, riid ) ) {
>              if(This->dsbd.dwFlags & DSBCAPS_CTRL3D){
> diff --git a/dlls/dsound/tests/dsound.c b/dlls/dsound/tests/dsound.c
> index 89f0aa03ff..41818deb17 100644
> --- a/dlls/dsound/tests/dsound.c
> +++ b/dlls/dsound/tests/dsound.c
> @@ -1561,6 +1561,19 @@ static void test_notifications(LPGUID lpGuid)
>      wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign;
>      wfx.cbSize = 0;
>  
> +    ZeroMemory(&bufdesc, sizeof(bufdesc));
> +    bufdesc.dwSize = sizeof(bufdesc);
> +    bufdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2;
> +    bufdesc.dwBufferBytes = wfx.nSamplesPerSec * wfx.nBlockAlign / 2; /* 0.5s */
> +    bufdesc.lpwfxFormat = &wfx;
> +    rc = IDirectSound_CreateSoundBuffer(dso, &bufdesc, &buf, NULL);
> +    ok(rc == DS_OK && buf != NULL, "IDirectSound_CreateSoundBuffer() failed "
> +           "to create a buffer %08x\n", rc);
> +
> +    rc = IDirectSoundBuffer_QueryInterface(buf, &IID_IDirectSoundNotify, (void**)&buf_notif);
> +    ok(rc == E_NOINTERFACE, "QueryInterface(IID_IDirectSoundNotify): %08x\n", rc);
> +    IDirectSoundBuffer_Release(buf);
> +
>      ZeroMemory(&bufdesc, sizeof(bufdesc));
>      bufdesc.dwSize = sizeof(bufdesc);
>      bufdesc.dwFlags = DSBCAPS_CTRLPOSITIONNOTIFY;
> -- 
> 2.20.1
> 
> 
> 



More information about the wine-devel mailing list