Michael Stefaniuc : dsound: Support IKsPropertySet in the primary buffer too.
Alexandre Julliard
julliard at winehq.org
Tue Jan 17 13:45:24 CST 2012
Module: wine
Branch: master
Commit: 3ec0b056d58109bd732f887d05adcceec87be376
URL: http://source.winehq.org/git/wine.git/?a=commit;h=3ec0b056d58109bd732f887d05adcceec87be376
Author: Michael Stefaniuc <mstefani at redhat.de>
Date: Tue Jan 17 01:54:53 2012 +0100
dsound: Support IKsPropertySet in the primary buffer too.
---
dlls/dsound/buffer.c | 8 ++++++--
dlls/dsound/primary.c | 7 +++++--
dlls/dsound/tests/ds3d.c | 31 +++++++++++++------------------
3 files changed, 24 insertions(+), 22 deletions(-)
diff --git a/dlls/dsound/buffer.c b/dlls/dsound/buffer.c
index a1546aa..690d104 100644
--- a/dlls/dsound/buffer.c
+++ b/dlls/dsound/buffer.c
@@ -1159,8 +1159,12 @@ static ULONG WINAPI IKsPropertySetImpl_Release(IKsPropertySet *iface)
TRACE("(%p) ref was %d\n", This, ref + 1);
- if (!ref && !InterlockedDecrement(&This->numIfaces))
- secondarybuffer_destroy(This);
+ if (!ref && !InterlockedDecrement(&This->numIfaces)) {
+ if (is_primary_buffer(This))
+ primarybuffer_destroy(This);
+ else
+ secondarybuffer_destroy(This);
+ }
return ref;
}
diff --git a/dlls/dsound/primary.c b/dlls/dsound/primary.c
index 9363a31..5c74353 100644
--- a/dlls/dsound/primary.c
+++ b/dlls/dsound/primary.c
@@ -1165,8 +1165,9 @@ static HRESULT WINAPI PrimaryBufferImpl_QueryInterface(IDirectSoundBuffer *iface
}
if ( IsEqualGUID( &IID_IKsPropertySet, riid ) ) {
- FIXME("app requested IKsPropertySet on primary buffer\n");
- return E_NOINTERFACE;
+ *ppobj = &This->IKsPropertySet_iface;
+ IKsPropertySet_AddRef(&This->IKsPropertySet_iface);
+ return S_OK;
}
FIXME( "Unknown IID %s\n", debugstr_guid( riid ) );
@@ -1220,10 +1221,12 @@ HRESULT primarybuffer_create(DirectSoundDevice *device, IDirectSoundBufferImpl *
dsb->ref = 0;
dsb->ref3D = 0;
+ dsb->refiks = 0;
dsb->numIfaces = 0;
dsb->device = device;
dsb->IDirectSoundBuffer8_iface.lpVtbl = (IDirectSoundBuffer8Vtbl *)&dspbvt;
dsb->IDirectSound3DListener_iface.lpVtbl = &ds3dlvt;
+ dsb->IKsPropertySet_iface.lpVtbl = &iksbvt;
dsb->dsbd = *dsbd;
/* IDirectSound3DListener */
diff --git a/dlls/dsound/tests/ds3d.c b/dlls/dsound/tests/ds3d.c
index 3e56c8a..0fbbfe8 100644
--- a/dlls/dsound/tests/ds3d.c
+++ b/dlls/dsound/tests/ds3d.c
@@ -1213,15 +1213,13 @@ static HRESULT test_primary_3d_with_listener(LPGUID lpGuid)
!(dscaps.dwFlags & DSCAPS_EMULDRIVER),1.0,0,
listener,0,0,FALSE,0);
- todo_wine {
- temp_buffer = NULL;
- rc=IDirectSound3DListener_QueryInterface(listener,
- &IID_IKsPropertySet,(LPVOID *)&temp_buffer);
- ok(rc==DS_OK && temp_buffer!=NULL,
- "IDirectSound3DListener_QueryInterface didn't handle IKsPropertySet: ret = %08x\n", rc);
- if(temp_buffer)
- IKsPropertySet_Release(temp_buffer);
- }
+ temp_buffer = NULL;
+ rc = IDirectSound3DListener_QueryInterface(listener, &IID_IKsPropertySet,
+ (void **)&temp_buffer);
+ ok(rc==DS_OK && temp_buffer!=NULL,
+ "IDirectSound3DListener_QueryInterface didn't handle IKsPropertySet: ret = %08x\n", rc);
+ if(temp_buffer)
+ IKsPropertySet_Release(temp_buffer);
}
/* Testing the reference counting */
@@ -1230,15 +1228,12 @@ static HRESULT test_primary_3d_with_listener(LPGUID lpGuid)
"references, should have 0\n",ref);
}
- todo_wine {
- temp_buffer = NULL;
- rc=IDirectSoundBuffer_QueryInterface(primary,
- &IID_IKsPropertySet,(LPVOID *)&temp_buffer);
- ok(rc==DS_OK && temp_buffer!=NULL,
- "IDirectSoundBuffer_QueryInterface didn't handle IKsPropertySet on primary buffer: ret = %08x\n", rc);
- if(temp_buffer)
- IKsPropertySet_Release(temp_buffer);
- }
+ temp_buffer = NULL;
+ rc = IDirectSoundBuffer_QueryInterface(primary, &IID_IKsPropertySet, (void **)&temp_buffer);
+ ok(rc==DS_OK && temp_buffer!=NULL,
+ "IDirectSoundBuffer_QueryInterface didn't handle IKsPropertySet on primary buffer: ret = %08x\n", rc);
+ if(temp_buffer)
+ IKsPropertySet_Release(temp_buffer);
/* Testing the reference counting */
ref=IDirectSoundBuffer_Release(primary);
More information about the wine-cvs
mailing list