diff --git a/dlls/dsound/buffer.c b/dlls/dsound/buffer.c index 2ba8def076a..7399015d12d 100644 --- a/dlls/dsound/buffer.c +++ b/dlls/dsound/buffer.c @@ -37,8 +37,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(dsound); -static HRESULT SecondaryBufferImpl_Destroy(SecondaryBufferImpl *pdsb); - /******************************************************************************* * IDirectSoundNotify */ @@ -865,15 +863,9 @@ static HRESULT WINAPI IDirectSoundBufferImpl_QueryInterface(IDirectSoundBuffer8 if ( IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirectSoundBuffer) || IsEqualGUID(riid, &IID_IDirectSoundBuffer8) ) { - if (!This->secondary) - SecondaryBufferImpl_Create(This, &(This->secondary)); - if (This->secondary) { - IDirectSoundBuffer8_AddRef((LPDIRECTSOUNDBUFFER8)This->secondary); - *ppobj = This->secondary; - return S_OK; - } - WARN("IID_IDirectSoundBuffer\n"); - return E_NOINTERFACE; + IDirectSoundBuffer8_AddRef(iface); + *ppobj = iface; + return S_OK; } if ( IsEqualGUID( &IID_IDirectSoundNotify, riid ) ) { @@ -978,8 +970,7 @@ HRESULT IDirectSoundBufferImpl_Create( TRACE("Created buffer at %p\n", dsb); - dsb->ref = 0; - dsb->secondary = 0; + dsb->ref = 1; dsb->device = device; dsb->IDirectSoundBuffer8_iface.lpVtbl = &dsbvt; dsb->iks = NULL; @@ -1159,12 +1150,6 @@ HRESULT IDirectSoundBufferImpl_Destroy( pdsb->notify = NULL; } - if (pdsb->secondary) { - WARN("dsb not NULL\n"); - SecondaryBufferImpl_Destroy(pdsb->secondary); - pdsb->secondary = NULL; - } - while (IDirectSoundBuffer8_Release(&pdsb->IDirectSoundBuffer8_iface) > 0); return S_OK; @@ -1210,7 +1195,7 @@ HRESULT IDirectSoundBufferImpl_Duplicate( dsb->buffer->ref++; list_add_head(&dsb->buffer->buffers, &dsb->entry); - dsb->ref = 0; + dsb->ref = 1; dsb->state = STATE_STOPPED; dsb->buf_mixpos = dsb->sec_mixpos = 0; dsb->notify = NULL; @@ -1219,7 +1204,6 @@ HRESULT IDirectSoundBufferImpl_Duplicate( dsb->device = device; dsb->ds3db = NULL; dsb->iks = NULL; /* FIXME? */ - dsb->secondary = NULL; dsb->tmp_buffer = NULL; DSOUND_RecalcFormat(dsb); DSOUND_MixToTemporary(dsb, 0, dsb->buflen, FALSE); @@ -1242,308 +1226,6 @@ HRESULT IDirectSoundBufferImpl_Duplicate( return hres; } -/******************************************************************************* - * SecondaryBuffer - */ - -static HRESULT WINAPI SecondaryBufferImpl_QueryInterface( - LPDIRECTSOUNDBUFFER8 iface,REFIID riid,LPVOID *ppobj) -{ - SecondaryBufferImpl *This = (SecondaryBufferImpl *)iface; - TRACE("(%p,%s,%p)\n",This,debugstr_guid(riid),ppobj); - - return IDirectSoundBufferImpl_QueryInterface((LPDIRECTSOUNDBUFFER8)This->dsb,riid,ppobj); -} - -static ULONG WINAPI SecondaryBufferImpl_AddRef(LPDIRECTSOUNDBUFFER8 iface) -{ - SecondaryBufferImpl *This = (SecondaryBufferImpl *)iface; - ULONG ref = InterlockedIncrement(&(This->ref)); - TRACE("(%p) ref was %d\n", This, ref - 1); - return ref; -} - -static ULONG WINAPI SecondaryBufferImpl_Release(LPDIRECTSOUNDBUFFER8 iface) -{ - SecondaryBufferImpl *This = (SecondaryBufferImpl *)iface; - ULONG ref; - TRACE("(%p)\n", This); - ref = InterlockedDecrement(&(This->ref)); - TRACE("ref was %d\n", ref + 1); - - if (!ref) { - This->dsb->secondary = NULL; - IDirectSoundBuffer_Release((LPDIRECTSOUNDBUFFER8)This->dsb); - HeapFree(GetProcessHeap(), 0, This); - TRACE("(%p) released\n", This); - } - return ref; -} - -static HRESULT WINAPI SecondaryBufferImpl_GetCaps( - LPDIRECTSOUNDBUFFER8 iface,LPDSBCAPS caps) -{ - SecondaryBufferImpl *This = (SecondaryBufferImpl *)iface; - TRACE("(%p)->(%p)\n",This,caps); - - return IDirectSoundBufferImpl_GetCaps((LPDIRECTSOUNDBUFFER8)This->dsb,caps); -} - -static HRESULT WINAPI SecondaryBufferImpl_GetCurrentPosition( - LPDIRECTSOUNDBUFFER8 iface,LPDWORD playpos,LPDWORD writepos) -{ - SecondaryBufferImpl *This = (SecondaryBufferImpl *)iface; - TRACE("(%p,%p,%p)\n",This,playpos,writepos); - - return IDirectSoundBufferImpl_GetCurrentPosition((LPDIRECTSOUNDBUFFER8)This->dsb,playpos,writepos); -} - -static HRESULT WINAPI SecondaryBufferImpl_GetFormat( - LPDIRECTSOUNDBUFFER8 iface,LPWAVEFORMATEX lpwf,DWORD wfsize,LPDWORD wfwritten) -{ - SecondaryBufferImpl *This = (SecondaryBufferImpl *)iface; - TRACE("(%p,%p,%d,%p)\n",This,lpwf,wfsize,wfwritten); - - return IDirectSoundBufferImpl_GetFormat((LPDIRECTSOUNDBUFFER8)This->dsb,lpwf,wfsize,wfwritten); -} - -static HRESULT WINAPI SecondaryBufferImpl_GetVolume( - LPDIRECTSOUNDBUFFER8 iface,LPLONG vol) -{ - SecondaryBufferImpl *This = (SecondaryBufferImpl *)iface; - TRACE("(%p,%p)\n",This,vol); - - return IDirectSoundBufferImpl_GetVolume((LPDIRECTSOUNDBUFFER8)This->dsb,vol); -} - -static HRESULT WINAPI SecondaryBufferImpl_GetPan( - LPDIRECTSOUNDBUFFER8 iface,LPLONG pan) -{ - SecondaryBufferImpl *This = (SecondaryBufferImpl *)iface; - TRACE("(%p,%p)\n",This,pan); - - return IDirectSoundBufferImpl_GetPan((LPDIRECTSOUNDBUFFER8)This->dsb,pan); -} - -static HRESULT WINAPI SecondaryBufferImpl_GetFrequency( - LPDIRECTSOUNDBUFFER8 iface,LPDWORD freq) -{ - SecondaryBufferImpl *This = (SecondaryBufferImpl *)iface; - TRACE("(%p,%p)\n",This,freq); - - return IDirectSoundBufferImpl_GetFrequency((LPDIRECTSOUNDBUFFER8)This->dsb,freq); -} - -static HRESULT WINAPI SecondaryBufferImpl_GetStatus( - LPDIRECTSOUNDBUFFER8 iface,LPDWORD status) -{ - SecondaryBufferImpl *This = (SecondaryBufferImpl *)iface; - TRACE("(%p,%p)\n",This,status); - - return IDirectSoundBufferImpl_GetStatus((LPDIRECTSOUNDBUFFER8)This->dsb,status); -} - -static HRESULT WINAPI SecondaryBufferImpl_Initialize( - LPDIRECTSOUNDBUFFER8 iface,LPDIRECTSOUND dsound,LPCDSBUFFERDESC dbsd) -{ - SecondaryBufferImpl *This = (SecondaryBufferImpl *)iface; - TRACE("(%p,%p,%p)\n",This,dsound,dbsd); - - return IDirectSoundBufferImpl_Initialize((LPDIRECTSOUNDBUFFER8)This->dsb,dsound,dbsd); -} - -static HRESULT WINAPI SecondaryBufferImpl_Lock( - LPDIRECTSOUNDBUFFER8 iface, - DWORD writecursor, - DWORD writebytes, - LPVOID *lplpaudioptr1, - LPDWORD audiobytes1, - LPVOID *lplpaudioptr2, - LPDWORD audiobytes2, - DWORD dwFlags) -{ - SecondaryBufferImpl *This = (SecondaryBufferImpl *)iface; - TRACE("(%p,%d,%d,%p,%p,%p,%p,0x%08x)\n", - This,writecursor,writebytes,lplpaudioptr1,audiobytes1,lplpaudioptr2,audiobytes2,dwFlags); - - return IDirectSoundBufferImpl_Lock((LPDIRECTSOUNDBUFFER8)This->dsb, - writecursor,writebytes,lplpaudioptr1,audiobytes1,lplpaudioptr2,audiobytes2,dwFlags); -} - -static HRESULT WINAPI SecondaryBufferImpl_Play( - LPDIRECTSOUNDBUFFER8 iface,DWORD reserved1,DWORD reserved2,DWORD flags) -{ - SecondaryBufferImpl *This = (SecondaryBufferImpl *)iface; - TRACE("(%p,%08x,%08x,%08x)\n",This,reserved1,reserved2,flags); - - return IDirectSoundBufferImpl_Play((LPDIRECTSOUNDBUFFER8)This->dsb,reserved1,reserved2,flags); -} - -static HRESULT WINAPI SecondaryBufferImpl_SetCurrentPosition( - LPDIRECTSOUNDBUFFER8 iface,DWORD newpos) -{ - SecondaryBufferImpl *This = (SecondaryBufferImpl *)iface; - TRACE("(%p,%d)\n",This,newpos); - - return IDirectSoundBufferImpl_SetCurrentPosition((LPDIRECTSOUNDBUFFER8)This->dsb,newpos); -} - -static HRESULT WINAPI SecondaryBufferImpl_SetFormat( - LPDIRECTSOUNDBUFFER8 iface,LPCWAVEFORMATEX wfex) -{ - SecondaryBufferImpl *This = (SecondaryBufferImpl *)iface; - TRACE("(%p,%p)\n",This,wfex); - - return IDirectSoundBufferImpl_SetFormat((LPDIRECTSOUNDBUFFER8)This->dsb,wfex); -} - -static HRESULT WINAPI SecondaryBufferImpl_SetVolume( - LPDIRECTSOUNDBUFFER8 iface,LONG vol) -{ - SecondaryBufferImpl *This = (SecondaryBufferImpl *)iface; - TRACE("(%p,%d)\n",This,vol); - - return IDirectSoundBufferImpl_SetVolume((LPDIRECTSOUNDBUFFER8)This->dsb,vol); -} - -static HRESULT WINAPI SecondaryBufferImpl_SetPan( - LPDIRECTSOUNDBUFFER8 iface,LONG pan) -{ - SecondaryBufferImpl *This = (SecondaryBufferImpl *)iface; - TRACE("(%p,%d)\n",This,pan); - - return IDirectSoundBufferImpl_SetPan((LPDIRECTSOUNDBUFFER8)This->dsb,pan); -} - -static HRESULT WINAPI SecondaryBufferImpl_SetFrequency( - LPDIRECTSOUNDBUFFER8 iface,DWORD freq) -{ - SecondaryBufferImpl *This = (SecondaryBufferImpl *)iface; - TRACE("(%p,%d)\n",This,freq); - - return IDirectSoundBufferImpl_SetFrequency((LPDIRECTSOUNDBUFFER8)This->dsb,freq); -} - -static HRESULT WINAPI SecondaryBufferImpl_Stop(LPDIRECTSOUNDBUFFER8 iface) -{ - SecondaryBufferImpl *This = (SecondaryBufferImpl *)iface; - TRACE("(%p)\n",This); - - return IDirectSoundBufferImpl_Stop((LPDIRECTSOUNDBUFFER8)This->dsb); -} - -static HRESULT WINAPI SecondaryBufferImpl_Unlock( - LPDIRECTSOUNDBUFFER8 iface, - LPVOID lpvAudioPtr1, - DWORD dwAudioBytes1, - LPVOID lpvAudioPtr2, - DWORD dwAudioBytes2) -{ - SecondaryBufferImpl *This = (SecondaryBufferImpl *)iface; - TRACE("(%p,%p,%d,%p,%d)\n", - This, lpvAudioPtr1, dwAudioBytes1, lpvAudioPtr2, dwAudioBytes2); - - return IDirectSoundBufferImpl_Unlock((LPDIRECTSOUNDBUFFER8)This->dsb, - lpvAudioPtr1,dwAudioBytes1,lpvAudioPtr2,dwAudioBytes2); -} - -static HRESULT WINAPI SecondaryBufferImpl_Restore( - LPDIRECTSOUNDBUFFER8 iface) -{ - SecondaryBufferImpl *This = (SecondaryBufferImpl *)iface; - TRACE("(%p)\n",This); - - return IDirectSoundBufferImpl_Restore((LPDIRECTSOUNDBUFFER8)This->dsb); -} - -static HRESULT WINAPI SecondaryBufferImpl_SetFX( - LPDIRECTSOUNDBUFFER8 iface,DWORD dwEffectsCount,LPDSEFFECTDESC pDSFXDesc,LPDWORD pdwResultCodes) -{ - SecondaryBufferImpl *This = (SecondaryBufferImpl *)iface; - TRACE("(%p,%u,%p,%p)\n",This,dwEffectsCount,pDSFXDesc,pdwResultCodes); - - return IDirectSoundBufferImpl_SetFX((LPDIRECTSOUNDBUFFER8)This->dsb,dwEffectsCount,pDSFXDesc,pdwResultCodes); -} - -static HRESULT WINAPI SecondaryBufferImpl_AcquireResources( - LPDIRECTSOUNDBUFFER8 iface,DWORD dwFlags,DWORD dwEffectsCount,LPDWORD pdwResultCodes) -{ - SecondaryBufferImpl *This = (SecondaryBufferImpl *)iface; - TRACE("(%p,%08u,%u,%p)\n",This,dwFlags,dwEffectsCount,pdwResultCodes); - - return IDirectSoundBufferImpl_AcquireResources((LPDIRECTSOUNDBUFFER8)This->dsb,dwFlags,dwEffectsCount,pdwResultCodes); -} - -static HRESULT WINAPI SecondaryBufferImpl_GetObjectInPath( - LPDIRECTSOUNDBUFFER8 iface,REFGUID rguidObject,DWORD dwIndex,REFGUID rguidInterface,LPVOID* ppObject) -{ - SecondaryBufferImpl *This = (SecondaryBufferImpl *)iface; - TRACE("(%p,%s,%u,%s,%p)\n",This,debugstr_guid(rguidObject),dwIndex,debugstr_guid(rguidInterface),ppObject); - - return IDirectSoundBufferImpl_GetObjectInPath((LPDIRECTSOUNDBUFFER8)This->dsb,rguidObject,dwIndex,rguidInterface,ppObject); -} - -static const IDirectSoundBuffer8Vtbl sbvt = -{ - SecondaryBufferImpl_QueryInterface, - SecondaryBufferImpl_AddRef, - SecondaryBufferImpl_Release, - SecondaryBufferImpl_GetCaps, - SecondaryBufferImpl_GetCurrentPosition, - SecondaryBufferImpl_GetFormat, - SecondaryBufferImpl_GetVolume, - SecondaryBufferImpl_GetPan, - SecondaryBufferImpl_GetFrequency, - SecondaryBufferImpl_GetStatus, - SecondaryBufferImpl_Initialize, - SecondaryBufferImpl_Lock, - SecondaryBufferImpl_Play, - SecondaryBufferImpl_SetCurrentPosition, - SecondaryBufferImpl_SetFormat, - SecondaryBufferImpl_SetVolume, - SecondaryBufferImpl_SetPan, - SecondaryBufferImpl_SetFrequency, - SecondaryBufferImpl_Stop, - SecondaryBufferImpl_Unlock, - SecondaryBufferImpl_Restore, - SecondaryBufferImpl_SetFX, - SecondaryBufferImpl_AcquireResources, - SecondaryBufferImpl_GetObjectInPath -}; - -HRESULT SecondaryBufferImpl_Create( - IDirectSoundBufferImpl *dsb, - SecondaryBufferImpl **psb) -{ - SecondaryBufferImpl *sb; - TRACE("(%p,%p)\n",dsb,psb); - - sb = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(*sb)); - - if (sb == 0) { - WARN("out of memory\n"); - *psb = NULL; - return DSERR_OUTOFMEMORY; - } - sb->ref = 0; - sb->dsb = dsb; - sb->lpVtbl = &sbvt; - - IDirectSoundBuffer8_AddRef((LPDIRECTSOUNDBUFFER8)dsb); - *psb = sb; - return S_OK; -} - -static HRESULT SecondaryBufferImpl_Destroy( - SecondaryBufferImpl *pdsb) -{ - TRACE("(%p)\n",pdsb); - - while (SecondaryBufferImpl_Release((LPDIRECTSOUNDBUFFER8)pdsb) > 0); - - return S_OK; -} - /******************************************************************************* * IKsBufferPropertySet */ diff --git a/dlls/dsound/dsound.c b/dlls/dsound/dsound.c index c565d985b4e..1c80ee3858a 100644 --- a/dlls/dsound/dsound.c +++ b/dlls/dsound/dsound.c @@ -1630,15 +1630,10 @@ HRESULT DirectSoundDevice_CreateSoundBuffer( } hres = IDirectSoundBufferImpl_Create(device, &dsb, dsbd); - if (dsb) { - hres = SecondaryBufferImpl_Create(dsb, (SecondaryBufferImpl**)ppdsb); - if (*ppdsb) { - dsb->secondary = (SecondaryBufferImpl*)*ppdsb; - IDirectSoundBuffer_AddRef(*ppdsb); - } else - WARN("SecondaryBufferImpl_Create failed\n"); - } else - WARN("IDirectSoundBufferImpl_Create failed\n"); + if (dsb) + *ppdsb = (IDirectSoundBuffer*)&dsb->IDirectSoundBuffer8_iface; + else + WARN("IDirectSoundBufferImpl_Create failed\n"); } return hres; @@ -1676,18 +1671,11 @@ HRESULT DirectSoundDevice_DuplicateSoundBuffer( } /* duplicate the actual buffer implementation */ - hres = IDirectSoundBufferImpl_Duplicate(device, &dsb, - ((SecondaryBufferImpl *)psb)->dsb); - - if (hres == DS_OK) { - /* create a new secondary buffer using the new implementation */ - hres = SecondaryBufferImpl_Create(dsb, (SecondaryBufferImpl**)ppdsb); - if (*ppdsb) { - dsb->secondary = (SecondaryBufferImpl*)*ppdsb; - IDirectSoundBuffer_AddRef((LPDIRECTSOUNDBUFFER8)*ppdsb); - } else - WARN("SecondaryBufferImpl_Create failed\n"); - } + hres = IDirectSoundBufferImpl_Duplicate(device, &dsb, (IDirectSoundBufferImpl*)psb); + if (hres == DS_OK) + *ppdsb = (IDirectSoundBuffer*)&dsb->IDirectSoundBuffer8_iface; + else + WARN("IDirectSoundBufferImpl_Duplicate failed\n"); return hres; } diff --git a/dlls/dsound/dsound_private.h b/dlls/dsound/dsound_private.h index b552b1af221..fb02495234a 100644 --- a/dlls/dsound/dsound_private.h +++ b/dlls/dsound/dsound_private.h @@ -58,7 +58,6 @@ typedef struct IDirectSound3DListenerImpl IDirectSound3DListenerImpl; typedef struct IDirectSound3DBufferImpl IDirectSound3DBufferImpl; typedef struct IKsBufferPropertySetImpl IKsBufferPropertySetImpl; typedef struct PrimaryBufferImpl PrimaryBufferImpl; -typedef struct SecondaryBufferImpl SecondaryBufferImpl; typedef struct DirectSoundDevice DirectSoundDevice; typedef struct DirectSoundCaptureDevice DirectSoundCaptureDevice; @@ -162,7 +161,6 @@ struct IDirectSoundBufferImpl IDirectSoundBuffer8 IDirectSoundBuffer8_iface; LONG ref; /* IDirectSoundBufferImpl fields */ - SecondaryBufferImpl* secondary; DirectSoundDevice* device; RTL_RWLOCK lock; PIDSDRIVERBUFFER hwbuf; @@ -209,20 +207,6 @@ HRESULT IDirectSoundBufferImpl_Duplicate( IDirectSoundBufferImpl **ppdsb, IDirectSoundBufferImpl *pdsb) DECLSPEC_HIDDEN; -/***************************************************************************** - * SecondaryBuffer implementation structure - */ -struct SecondaryBufferImpl -{ - const IDirectSoundBuffer8Vtbl *lpVtbl; - LONG ref; - IDirectSoundBufferImpl* dsb; -}; - -HRESULT SecondaryBufferImpl_Create( - IDirectSoundBufferImpl *dsb, - SecondaryBufferImpl **pdsb) DECLSPEC_HIDDEN; - /***************************************************************************** * PrimaryBuffer implementation structure */ diff --git a/dlls/dsound/sound3d.c b/dlls/dsound/sound3d.c index 5a0befd12d4..956013d5713 100644 --- a/dlls/dsound/sound3d.c +++ b/dlls/dsound/sound3d.c @@ -710,8 +710,6 @@ HRESULT IDirectSound3DBufferImpl_Create( ds3db->dsb->ds3db_need_recalc = TRUE; - IDirectSoundBuffer_AddRef((LPDIRECTSOUNDBUFFER8)dsb); - *pds3db = ds3db; return S_OK; }