dsound: Select the nth effect matching the given CLSID in GetObjectInPath().
Instead of selecting the nth effect overall and checking whether it matches. Signed-off-by: Zebediah Figura <z.figura12@gmail.com> Signed-off-by: Andrew Eikum <aeikum@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
1c843d3997
commit
91625e43f4
|
@ -845,27 +845,25 @@ static HRESULT WINAPI IDirectSoundBufferImpl_AcquireResources(IDirectSoundBuffer
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI IDirectSoundBufferImpl_GetObjectInPath(IDirectSoundBuffer8 *iface,
|
static HRESULT WINAPI IDirectSoundBufferImpl_GetObjectInPath(IDirectSoundBuffer8 *iface,
|
||||||
REFGUID rguidObject, DWORD dwIndex, REFGUID rguidInterface, void **ppObject)
|
REFGUID clsid, DWORD index, REFGUID iid, void **out)
|
||||||
{
|
{
|
||||||
IDirectSoundBufferImpl *This = impl_from_IDirectSoundBuffer8(iface);
|
IDirectSoundBufferImpl *This = impl_from_IDirectSoundBuffer8(iface);
|
||||||
|
DWORD i, count = 0;
|
||||||
|
|
||||||
TRACE("(%p,%s,%u,%s,%p)\n",This,debugstr_guid(rguidObject),dwIndex,debugstr_guid(rguidInterface),ppObject);
|
TRACE("(%p,%s,%u,%s,%p)\n", This, debugstr_guid(clsid), index, debugstr_guid(iid), out);
|
||||||
|
|
||||||
if (dwIndex >= This->num_filters)
|
if (!out)
|
||||||
return DSERR_CONTROLUNAVAIL;
|
return E_INVALIDARG;
|
||||||
|
|
||||||
if (!ppObject)
|
for (i = 0; i < This->num_filters; i++)
|
||||||
return E_INVALIDARG;
|
{
|
||||||
|
if (IsEqualGUID(clsid, &This->filters[i].guid) || IsEqualGUID(clsid, &GUID_All_Objects))
|
||||||
if (IsEqualGUID(rguidObject, &This->filters[dwIndex].guid) || IsEqualGUID(rguidObject, &GUID_All_Objects)) {
|
{
|
||||||
if (SUCCEEDED(IMediaObject_QueryInterface(This->filters[dwIndex].obj, rguidInterface, ppObject)))
|
if (count++ == index)
|
||||||
return DS_OK;
|
return IMediaObject_QueryInterface(This->filters[i].obj, iid, out);
|
||||||
else
|
}
|
||||||
return E_NOINTERFACE;
|
}
|
||||||
} else {
|
return DSERR_OBJECTNOTFOUND;
|
||||||
WARN("control unavailable\n");
|
|
||||||
return DSERR_OBJECTNOTFOUND;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI IDirectSoundBufferImpl_Initialize(IDirectSoundBuffer8 *iface,
|
static HRESULT WINAPI IDirectSoundBufferImpl_Initialize(IDirectSoundBuffer8 *iface,
|
||||||
|
|
|
@ -1678,7 +1678,7 @@ static void test_effects(void)
|
||||||
|
|
||||||
dmo = (IMediaObject *)0xdeadbeef;
|
dmo = (IMediaObject *)0xdeadbeef;
|
||||||
hr = IDirectSoundBuffer8_GetObjectInPath(buffer8, &GUID_All_Objects, 1, &IID_IMediaObject, (void **)&dmo);
|
hr = IDirectSoundBuffer8_GetObjectInPath(buffer8, &GUID_All_Objects, 1, &IID_IMediaObject, (void **)&dmo);
|
||||||
todo_wine ok(hr == DSERR_OBJECTNOTFOUND, "Got hr %#x.\n", hr);
|
ok(hr == DSERR_OBJECTNOTFOUND, "Got hr %#x.\n", hr);
|
||||||
ok(dmo == (IMediaObject *)0xdeadbeef, "Got object %p.\n", dmo);
|
ok(dmo == (IMediaObject *)0xdeadbeef, "Got object %p.\n", dmo);
|
||||||
|
|
||||||
effects[0].guidDSFXClass = GUID_DSFX_STANDARD_PARAMEQ;
|
effects[0].guidDSFXClass = GUID_DSFX_STANDARD_PARAMEQ;
|
||||||
|
@ -1705,9 +1705,8 @@ static void test_effects(void)
|
||||||
echo = dmo;
|
echo = dmo;
|
||||||
hr = IDirectSoundBuffer8_GetObjectInPath(buffer8,
|
hr = IDirectSoundBuffer8_GetObjectInPath(buffer8,
|
||||||
&GUID_DSFX_STANDARD_I3DL2REVERB, 0, &IID_IMediaObject, (void **)&dmo);
|
&GUID_DSFX_STANDARD_I3DL2REVERB, 0, &IID_IMediaObject, (void **)&dmo);
|
||||||
todo_wine ok(hr == DS_OK, "Got hr %#x.\n", hr);
|
ok(hr == DS_OK, "Got hr %#x.\n", hr);
|
||||||
if (hr == DS_OK)
|
reverb = dmo;
|
||||||
reverb = dmo;
|
|
||||||
|
|
||||||
hr = IDirectSoundBuffer8_GetObjectInPath(buffer8, &GUID_All_Objects, 0, &IID_IMediaObject, (void **)&dmo);
|
hr = IDirectSoundBuffer8_GetObjectInPath(buffer8, &GUID_All_Objects, 0, &IID_IMediaObject, (void **)&dmo);
|
||||||
ok(hr == DS_OK, "Got hr %#x.\n", hr);
|
ok(hr == DS_OK, "Got hr %#x.\n", hr);
|
||||||
|
@ -1716,12 +1715,12 @@ static void test_effects(void)
|
||||||
|
|
||||||
hr = IDirectSoundBuffer8_GetObjectInPath(buffer8, &GUID_All_Objects, 1, &IID_IMediaObject, (void **)&dmo);
|
hr = IDirectSoundBuffer8_GetObjectInPath(buffer8, &GUID_All_Objects, 1, &IID_IMediaObject, (void **)&dmo);
|
||||||
ok(hr == DS_OK, "Got hr %#x.\n", hr);
|
ok(hr == DS_OK, "Got hr %#x.\n", hr);
|
||||||
todo_wine ok(dmo == reverb, "Expected %p, got %p.\n", reverb, dmo);
|
ok(dmo == reverb, "Expected %p, got %p.\n", reverb, dmo);
|
||||||
IMediaObject_Release(dmo);
|
IMediaObject_Release(dmo);
|
||||||
|
|
||||||
hr = IDirectSoundBuffer8_GetObjectInPath(buffer8,
|
hr = IDirectSoundBuffer8_GetObjectInPath(buffer8,
|
||||||
&GUID_DSFX_STANDARD_I3DL2REVERB, 1, &IID_IMediaObject, (void **)&dmo);
|
&GUID_DSFX_STANDARD_I3DL2REVERB, 1, &IID_IMediaObject, (void **)&dmo);
|
||||||
todo_wine ok(hr == DSERR_OBJECTNOTFOUND, "Got hr %#x.\n", hr);
|
ok(hr == DSERR_OBJECTNOTFOUND, "Got hr %#x.\n", hr);
|
||||||
|
|
||||||
hr = IDirectSoundBuffer8_GetObjectInPath(buffer8, &GUID_All_Objects, 0, &IID_IDirectSoundFXParamEq, (void **)&unk);
|
hr = IDirectSoundBuffer8_GetObjectInPath(buffer8, &GUID_All_Objects, 0, &IID_IDirectSoundFXParamEq, (void **)&unk);
|
||||||
ok(hr == DS_OK, "Got hr %#x.\n", hr);
|
ok(hr == DS_OK, "Got hr %#x.\n", hr);
|
||||||
|
@ -1743,14 +1742,11 @@ static void test_effects(void)
|
||||||
|
|
||||||
hr = IDirectSoundBuffer8_GetObjectInPath(buffer8,
|
hr = IDirectSoundBuffer8_GetObjectInPath(buffer8,
|
||||||
&GUID_DSFX_STANDARD_I3DL2REVERB, 0, &IID_IDirectSoundFXI3DL2Reverb, (void **)&unk);
|
&GUID_DSFX_STANDARD_I3DL2REVERB, 0, &IID_IDirectSoundFXI3DL2Reverb, (void **)&unk);
|
||||||
todo_wine ok(hr == DS_OK, "Got hr %#x.\n", hr);
|
ok(hr == DS_OK, "Got hr %#x.\n", hr);
|
||||||
if (hr == DS_OK)
|
IUnknown_Release(unk);
|
||||||
IUnknown_Release(unk);
|
|
||||||
|
|
||||||
if (echo)
|
IMediaObject_Release(echo);
|
||||||
IMediaObject_Release(echo);
|
IMediaObject_Release(reverb);
|
||||||
if (reverb)
|
|
||||||
IMediaObject_Release(reverb);
|
|
||||||
|
|
||||||
got_Process = CreateEventA(NULL, TRUE, FALSE, NULL);
|
got_Process = CreateEventA(NULL, TRUE, FALSE, NULL);
|
||||||
|
|
||||||
|
@ -1786,7 +1782,7 @@ static void test_effects(void)
|
||||||
ok(hr == DS_OK, "Got hr %#x.\n", hr);
|
ok(hr == DS_OK, "Got hr %#x.\n", hr);
|
||||||
|
|
||||||
hr = IDirectSoundBuffer8_GetObjectInPath(buffer8, &GUID_All_Objects, 0, &IID_IMediaObject, (void **)&dmo);
|
hr = IDirectSoundBuffer8_GetObjectInPath(buffer8, &GUID_All_Objects, 0, &IID_IMediaObject, (void **)&dmo);
|
||||||
todo_wine ok(hr == DSERR_OBJECTNOTFOUND, "Got hr %#x.\n", hr);
|
ok(hr == DSERR_OBJECTNOTFOUND, "Got hr %#x.\n", hr);
|
||||||
|
|
||||||
CloseHandle(got_Process);
|
CloseHandle(got_Process);
|
||||||
IDirectSoundBuffer8_Release(buffer8);
|
IDirectSoundBuffer8_Release(buffer8);
|
||||||
|
|
Loading…
Reference in New Issue