[PATCH] dsound: Primary buffer doesn't support flag DSBCAPS_CTRLFX.
Andrew Eikum
aeikum at codeweavers.com
Thu Sep 26 07:13:39 CDT 2019
Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
On Sat, Sep 21, 2019 at 09:25:02AM +0000, Alistair Leslie-Hughes wrote:
> Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=40740
> Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
> ---
> dlls/dsound/dsound.c | 6 +++++
> dlls/dsound/tests/dsound8.c | 54 +++++++++++++++++++++++++++++++++++++
> 2 files changed, 60 insertions(+)
>
> diff --git a/dlls/dsound/dsound.c b/dlls/dsound/dsound.c
> index a74a9c69283..4dcea9e29e9 100644
> --- a/dlls/dsound/dsound.c
> +++ b/dlls/dsound/dsound.c
> @@ -455,6 +455,12 @@ static HRESULT DirectSoundDevice_CreateSoundBuffer(
> return DSERR_INVALIDPARAM;
> }
>
> + if (dsbd->dwFlags & DSBCAPS_CTRLFX)
> + {
> + WARN("Invalid parameter DSBCAPS_CTRLFX\n");
> + return DSERR_INVALIDPARAM;
> + }
> +
> if (device->primary) {
> WARN("Primary Buffer already created\n");
> IDirectSoundBuffer8_AddRef(&device->primary->IDirectSoundBuffer8_iface);
> diff --git a/dlls/dsound/tests/dsound8.c b/dlls/dsound/tests/dsound8.c
> index 88ed4d9d4c6..fb49b8b7db4 100644
> --- a/dlls/dsound/tests/dsound8.c
> +++ b/dlls/dsound/tests/dsound8.c
> @@ -1173,6 +1173,59 @@ static void test_COM(void)
> while (IUnknown_Release(unk));
> }
>
> +static void test_primary_flags(void)
> +{
> + HRESULT rc;
> + IDirectSound8 *dso;
> + IDirectSoundBuffer *primary = NULL, *secondary;
> + IDirectSoundBuffer8 *secondary8;
> + IDirectSoundFXI3DL2Reverb *reverb;
> + DSBUFFERDESC bufdesc;
> + DSCAPS dscaps;
> + WAVEFORMATEX wfx;
> + DSEFFECTDESC effects[2];
> + DWORD resultcodes[2];
> +
> + /* Create a DirectSound8 object */
> + rc = pDirectSoundCreate8(NULL, &dso, NULL);
> + ok(rc == DS_OK || rc==DSERR_NODRIVER, "Failed: %08x\n",rc);
> +
> + if (rc!=DS_OK)
> + return;
> +
> + rc = IDirectSound8_SetCooperativeLevel(dso, get_hwnd(), DSSCL_PRIORITY);
> + ok(rc == DS_OK,"Failed: %08x\n", rc);
> + if (rc != DS_OK) {
> + IDirectSound8_Release(dso);
> + return;
> + }
> +
> + dscaps.dwSize = sizeof(dscaps);
> + rc = IDirectSound8_GetCaps(dso, &dscaps);
> + ok(rc == DS_OK,"Failed: %08x\n", rc);
> + trace("0x%x\n", dscaps.dwFlags);
> +
> + ZeroMemory(&bufdesc, sizeof(bufdesc));
> + bufdesc.dwSize = sizeof(bufdesc);
> + bufdesc.dwFlags = DSBCAPS_PRIMARYBUFFER | DSBCAPS_CTRLFX;
> + rc = IDirectSound8_CreateSoundBuffer(dso, &bufdesc, &primary, NULL);
> + ok(rc == E_INVALIDARG, "got %08x\n", rc);
> +
> + ZeroMemory(&bufdesc, sizeof(bufdesc));
> + bufdesc.dwSize = sizeof(bufdesc);
> + bufdesc.dwFlags = DSBCAPS_PRIMARYBUFFER | DSBCAPS_CTRL3D;
> + rc = IDirectSound8_CreateSoundBuffer(dso, &bufdesc, &primary, NULL);
> + ok((rc == DS_OK && primary != NULL), "Failed to create a primary buffer: %08x\n", rc);
> + if (rc == DS_OK) {
> + rc = IDirectSoundBuffer_QueryInterface(primary, &IID_IDirectSoundFXI3DL2Reverb, (LPVOID*)&reverb);
> + ok(rc==E_NOINTERFACE,"Failed: %08x\n", rc);
> +
> + IDirectSoundBuffer_Release(primary);
> + }
> +
> + IDirectSound8_Release(dso);
> +}
> +
> static void test_effects(void)
> {
> HRESULT rc;
> @@ -1948,6 +2001,7 @@ START_TEST(dsound8)
> dsound8_tests();
> test_hw_buffers();
> test_first_device();
> + test_primary_flags();
> test_effects();
> test_effects_parameters();
> }
> --
> 2.23.0
>
>
More information about the wine-devel
mailing list