[PATCH 5/5] dmusic: Implement partially SetDirectSound.

Christian Costa titan.costa at gmail.com
Thu Mar 29 01:53:10 CDT 2012


---
 dlls/dmusic/dmusic.c         |   27 +++++++++++++++++++++------
 dlls/dmusic/dmusic_private.h |    2 ++
 2 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/dlls/dmusic/dmusic.c b/dlls/dmusic/dmusic.c
index 8f2edea..60d6b8a 100644
--- a/dlls/dmusic/dmusic.c
+++ b/dlls/dmusic/dmusic.c
@@ -52,19 +52,22 @@ static ULONG WINAPI IDirectMusic8Impl_AddRef (LPDIRECTMUSIC8 iface) {
 	return refCount;
 }
 
-static ULONG WINAPI IDirectMusic8Impl_Release (LPDIRECTMUSIC8 iface) {
+static ULONG WINAPI IDirectMusic8Impl_Release(LPDIRECTMUSIC8 iface)
+{
 	IDirectMusic8Impl *This = (IDirectMusic8Impl *)iface;
 	ULONG refCount = InterlockedDecrement(&This->ref);
 
 	TRACE("(%p)->(ref before=%u)\n", This, refCount + 1);
 
 	if (!refCount) {
+		if (This->dsound)
+			IDirectSound_Release(This->dsound);
 		HeapFree(GetProcessHeap(), 0, This->ppPorts);
 		HeapFree(GetProcessHeap(), 0, This);
 	}
 
 	DMUSIC_UnlockModule();
-	
+
 	return refCount;
 }
 
@@ -257,10 +260,22 @@ static HRESULT WINAPI IDirectMusic8Impl_GetDefaultPort (LPDIRECTMUSIC8 iface, LP
 	return S_OK;
 }
 
-static HRESULT WINAPI IDirectMusic8Impl_SetDirectSound (LPDIRECTMUSIC8 iface, LPDIRECTSOUND pDirectSound, HWND hWnd) {
-	IDirectMusic8Impl *This = (IDirectMusic8Impl *)iface;
-	FIXME("(%p, %p, %p): stub\n", This, pDirectSound, hWnd);
-	return S_OK;
+static HRESULT WINAPI IDirectMusic8Impl_SetDirectSound(LPDIRECTMUSIC8 iface, LPDIRECTSOUND dsound, HWND wnd)
+{
+    IDirectMusic8Impl *This = (IDirectMusic8Impl *)iface;
+
+    FIXME("(%p, %p, %p): partial implementation\n", This, dsound, wnd);
+
+    if (dsound)
+    {
+        This->dsound = dsound;
+        IDirectSound_AddRef(dsound);
+    }
+
+    /* If no direct sound object is given, native does not create one yet */
+    This->dsound_inited = TRUE;
+
+    return S_OK;
 }
 
 static HRESULT WINAPI IDirectMusic8Impl_SetExternalMasterClock (LPDIRECTMUSIC8 iface, IReferenceClock* pClock) {
diff --git a/dlls/dmusic/dmusic_private.h b/dlls/dmusic/dmusic_private.h
index c05adf0..b0655d6 100644
--- a/dlls/dmusic/dmusic_private.h
+++ b/dlls/dmusic/dmusic_private.h
@@ -96,6 +96,8 @@ struct IDirectMusic8Impl {
   IReferenceClockImpl* pMasterClock;
   IDirectMusicPort** ppPorts;
   int nrofports;
+  BOOL dsound_inited;
+  IDirectSound* dsound;
 };
 
 /*****************************************************************************




More information about the wine-patches mailing list