[PATCH v2] dsound: IDirectSoundBuffer8 GetStatus return DSBSTATUS_LOCSOFTWARE for deferred buffers
Andrew Eikum
aeikum at codeweavers.com
Mon Jan 18 10:12:46 CST 2021
Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
On Fri, Jan 15, 2021 at 06:22:18PM +1100, Alistair Leslie-Hughes wrote:
> Wine-bug: https://bugs.winehq.org/show_bug.cgi?id=21014
>
> Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
> ---
> dlls/dsound/buffer.c | 2 +
> dlls/dsound/tests/dsound8.c | 74 +++++++++++++++++++++++++++++++++++++
> 2 files changed, 76 insertions(+)
>
> diff --git a/dlls/dsound/buffer.c b/dlls/dsound/buffer.c
> index bc30a8a5448..fafa6fc6015 100644
> --- a/dlls/dsound/buffer.c
> +++ b/dlls/dsound/buffer.c
> @@ -420,6 +420,8 @@ static HRESULT WINAPI IDirectSoundBufferImpl_GetStatus(IDirectSoundBuffer8 *ifac
> if (This->playflags & DSBPLAY_LOOPING)
> *status |= DSBSTATUS_LOOPING;
> }
> + if (This->dsbd.dwFlags & DSBCAPS_LOCDEFER)
> + *status |= DSBSTATUS_LOCSOFTWARE;
> ReleaseSRWLockShared(&This->lock);
>
> TRACE("status=%x\n", *status);
> diff --git a/dlls/dsound/tests/dsound8.c b/dlls/dsound/tests/dsound8.c
> index 81c5710dbaf..85272dd9b55 100644
> --- a/dlls/dsound/tests/dsound8.c
> +++ b/dlls/dsound/tests/dsound8.c
> @@ -1809,6 +1809,79 @@ static void test_effects(void)
> ok(!ref, "Got outstanding refcount %u.\n", ref);
> }
>
> +static void test_AcquireResources(void)
> +{
> + IDirectSound8 *dsound;
> + IDirectSoundBuffer *primary, *secondary;
> + DSBUFFERDESC bufdesc;
> + WAVEFORMATEX fmt;
> + HRESULT hr;
> +
> + hr = DirectSoundCreate8(NULL, &dsound, NULL);
> + ok(hr == DS_OK || hr == DSERR_NODRIVER, "Got hr %#x.\n", hr);
> + if (FAILED(hr))
> + return;
> +
> + hr = IDirectSound8_SetCooperativeLevel(dsound, get_hwnd(), DSSCL_PRIORITY);
> + ok(hr == DS_OK, "Got hr %#x.\n", hr);
> +
> + bufdesc.dwSize = sizeof(bufdesc);
> + bufdesc.dwFlags = DSBCAPS_GETCURRENTPOSITION2 | DSBCAPS_PRIMARYBUFFER;
> + bufdesc.dwBufferBytes = 0;
> + bufdesc.dwReserved = 0;
> + bufdesc.lpwfxFormat = NULL;
> + bufdesc.guid3DAlgorithm = GUID_NULL;
> +
> + hr = IDirectSound8_CreateSoundBuffer(dsound, &bufdesc, &primary, NULL);
> + ok(hr == S_OK, "CreateSoundBuffer failed: %08x\n", hr);
> + if(hr != S_OK) {
> + IDirectSound_Release(dsound);
> + return;
> + }
> +
> + fmt.wFormatTag = WAVE_FORMAT_PCM;
> + fmt.nChannels = 2;
> + fmt.nSamplesPerSec = 48000;
> + fmt.wBitsPerSample = 16;
> + fmt.nBlockAlign = fmt.nChannels * fmt.wBitsPerSample / 8;
> + fmt.nAvgBytesPerSec = fmt.nBlockAlign * fmt.nSamplesPerSec;
> + fmt.cbSize = 0;
> +
> + bufdesc.lpwfxFormat = &fmt;
> + bufdesc.dwBufferBytes = fmt.nSamplesPerSec * fmt.nBlockAlign / 10;
> + bufdesc.dwFlags = DSBCAPS_LOCDEFER | DSBCAPS_CTRLVOLUME;
> +
> + /* see if we can create one more */
> + hr = IDirectSound8_CreateSoundBuffer(dsound, &bufdesc, &secondary, NULL);
> + ok(hr == S_OK, "CreateSoundBuffer gave wrong error: %08x\n", hr);
> + if(hr == S_OK) {
> + DWORD status;
> + IDirectSoundBuffer8 *buffer8;
> +
> + hr = IDirectSoundBuffer_QueryInterface(secondary, &IID_IDirectSoundBuffer8, (void **)&buffer8);
> + ok(hr == S_OK, "got: %08x\n", hr);
> +
> + status = 0xFFFF;
> + hr = IDirectSoundBuffer8_GetStatus(buffer8, &status);
> + ok(hr == S_OK, "got: %08x\n", hr);
> + todo_wine ok(status == 0, "got: %08x\n", status);
> +
> + hr = IDirectSoundBuffer8_AcquireResources(buffer8, 0, 0, NULL);
> + ok(hr == S_OK, "got: %08x\n", hr);
> +
> + status = 0xFFFF;
> + hr = IDirectSoundBuffer8_GetStatus(buffer8, &status);
> + ok(hr == S_OK, "got: %08x\n", hr);
> + ok(status == DSBSTATUS_LOCSOFTWARE, "got: %08x\n", status);
> +
> + IDirectSoundBuffer8_Release(buffer8);
> + IDirectSoundBuffer_Release(secondary);
> + }
> +
> + IDirectSoundBuffer_Release(primary);
> + IDirectSound_Release(dsound);
> +}
> +
> START_TEST(dsound8)
> {
> DWORD cookie;
> @@ -1822,6 +1895,7 @@ START_TEST(dsound8)
> test_hw_buffers();
> test_first_device();
> test_primary_flags();
> + test_AcquireResources();
>
> hr = CoRegisterClassObject(&testdmo_clsid, (IUnknown *)&testdmo_cf,
> CLSCTX_INPROC_SERVER, REGCLS_MULTIPLEUSE, &cookie);
> --
> 2.29.2
>
>
More information about the wine-devel
mailing list