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

Andrew Eikum aeikum at codeweavers.com
Thu Mar 29 08:04:00 CDT 2012


It would be nice to see some tests for this. For example, how does
this IDirectSound reference relate to the one created by
IDirectMusicPerformance::InitAudio()?

On Thu, Mar 29, 2012 at 08:53:10AM +0200, Christian Costa wrote:
> 
> ---
>  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-devel mailing list