[PATCH] dsound: Select the nth effect matching the given CLSID in GetObjectInPath().

Zebediah Figura z.figura12 at gmail.com
Tue Jul 28 16:33:32 CDT 2020


Instead of selecting the nth effect overall and checking whether it matches.

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 dlls/dsound/buffer.c        | 32 +++++++++++++++-----------------
 dlls/dsound/tests/dsound8.c | 22 +++++++++-------------
 2 files changed, 24 insertions(+), 30 deletions(-)

diff --git a/dlls/dsound/buffer.c b/dlls/dsound/buffer.c
index ea428c08166..bc30a8a5448 100644
--- a/dlls/dsound/buffer.c
+++ b/dlls/dsound/buffer.c
@@ -845,27 +845,25 @@ static HRESULT WINAPI IDirectSoundBufferImpl_AcquireResources(IDirectSoundBuffer
 }
 
 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)
-		return DSERR_CONTROLUNAVAIL;
-
-	if (!ppObject)
-		return E_INVALIDARG;
+    if (!out)
+        return E_INVALIDARG;
 
-	if (IsEqualGUID(rguidObject, &This->filters[dwIndex].guid) || IsEqualGUID(rguidObject, &GUID_All_Objects)) {
-		if (SUCCEEDED(IMediaObject_QueryInterface(This->filters[dwIndex].obj, rguidInterface, ppObject)))
-			return DS_OK;
-		else
-			return E_NOINTERFACE;
-	} else {
-		WARN("control unavailable\n");
-		return DSERR_OBJECTNOTFOUND;
-	}
+    for (i = 0; i < This->num_filters; i++)
+    {
+        if (IsEqualGUID(clsid, &This->filters[i].guid) || IsEqualGUID(clsid, &GUID_All_Objects))
+        {
+            if (count++ == index)
+                return IMediaObject_QueryInterface(This->filters[i].obj, iid, out);
+        }
+    }
+    return DSERR_OBJECTNOTFOUND;
 }
 
 static HRESULT WINAPI IDirectSoundBufferImpl_Initialize(IDirectSoundBuffer8 *iface,
diff --git a/dlls/dsound/tests/dsound8.c b/dlls/dsound/tests/dsound8.c
index fcac31ba637..468b460468b 100644
--- a/dlls/dsound/tests/dsound8.c
+++ b/dlls/dsound/tests/dsound8.c
@@ -1678,7 +1678,7 @@ static void test_effects(void)
 
     dmo = (IMediaObject *)0xdeadbeef;
     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);
 
     effects[0].guidDSFXClass = GUID_DSFX_STANDARD_PARAMEQ;
@@ -1705,9 +1705,8 @@ static void test_effects(void)
     echo = dmo;
     hr = IDirectSoundBuffer8_GetObjectInPath(buffer8,
             &GUID_DSFX_STANDARD_I3DL2REVERB, 0, &IID_IMediaObject, (void **)&dmo);
-    todo_wine ok(hr == DS_OK, "Got hr %#x.\n", hr);
-    if (hr == DS_OK)
-        reverb = dmo;
+    ok(hr == DS_OK, "Got hr %#x.\n", hr);
+    reverb = dmo;
 
     hr = IDirectSoundBuffer8_GetObjectInPath(buffer8, &GUID_All_Objects, 0, &IID_IMediaObject, (void **)&dmo);
     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);
     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);
 
     hr = IDirectSoundBuffer8_GetObjectInPath(buffer8,
             &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);
     ok(hr == DS_OK, "Got hr %#x.\n", hr);
@@ -1743,14 +1742,11 @@ static void test_effects(void)
 
     hr = IDirectSoundBuffer8_GetObjectInPath(buffer8,
             &GUID_DSFX_STANDARD_I3DL2REVERB, 0, &IID_IDirectSoundFXI3DL2Reverb, (void **)&unk);
-    todo_wine ok(hr == DS_OK, "Got hr %#x.\n", hr);
-    if (hr == DS_OK)
-        IUnknown_Release(unk);
+    ok(hr == DS_OK, "Got hr %#x.\n", hr);
+    IUnknown_Release(unk);
 
-    if (echo)
-        IMediaObject_Release(echo);
-    if (reverb)
-        IMediaObject_Release(reverb);
+    IMediaObject_Release(echo);
+    IMediaObject_Release(reverb);
 
     got_Process = CreateEventA(NULL, TRUE, FALSE, NULL);
 
-- 
2.27.0




More information about the wine-devel mailing list