Added correct implementation of GetCaps, changed Play and Stop handling
of positions indexes, suppressed warnings.
This commit is contained in:
parent
c57974d1c8
commit
690d37967e
|
@ -208,7 +208,7 @@ static HRESULT WINAPI IDirectSoundBuffer_Play(
|
||||||
TRACE(dsound,"(%p,%08lx,%08lx,%08lx)\n",
|
TRACE(dsound,"(%p,%08lx,%08lx,%08lx)\n",
|
||||||
this,reserved1,reserved2,flags
|
this,reserved1,reserved2,flags
|
||||||
);
|
);
|
||||||
this->playpos = 0;
|
/* this->playpos = 0; */
|
||||||
this->playflags = flags;
|
this->playflags = flags;
|
||||||
this->playing = 1;
|
this->playing = 1;
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -217,27 +217,29 @@ static HRESULT WINAPI IDirectSoundBuffer_Play(
|
||||||
static HRESULT WINAPI IDirectSoundBuffer_Stop(LPDIRECTSOUNDBUFFER this) {
|
static HRESULT WINAPI IDirectSoundBuffer_Stop(LPDIRECTSOUNDBUFFER this) {
|
||||||
TRACE(dsound,"(%p)\n",this);
|
TRACE(dsound,"(%p)\n",this);
|
||||||
this->playing = 0;
|
this->playing = 0;
|
||||||
this->writepos = 0; /* hmm */
|
/* this->writepos = 0; hmm */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static DWORD WINAPI IDirectSoundBuffer_AddRef(LPDIRECTSOUNDBUFFER this) {
|
static DWORD WINAPI IDirectSoundBuffer_AddRef(LPDIRECTSOUNDBUFFER this) {
|
||||||
|
TRACE(dsound,"(%p) ref was %ld\n",this, this->ref);
|
||||||
|
|
||||||
return ++(this->ref);
|
return ++(this->ref);
|
||||||
}
|
}
|
||||||
static DWORD WINAPI IDirectSoundBuffer_Release(LPDIRECTSOUNDBUFFER this) {
|
static DWORD WINAPI IDirectSoundBuffer_Release(LPDIRECTSOUNDBUFFER this) {
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
TRACE(dsound,"(%p) ref was %ld\n",this, this->ref);
|
||||||
|
|
||||||
if (--this->ref)
|
if (--this->ref)
|
||||||
return this->ref;
|
return this->ref;
|
||||||
for (i=0;i<this->dsound->nrofbuffers;i++)
|
for (i=0;i<this->dsound->nrofbuffers;i++)
|
||||||
if (this->dsound->buffers[i] == this)
|
if (this->dsound->buffers[i] == this)
|
||||||
break;
|
break;
|
||||||
if (i < this->dsound->nrofbuffers) {
|
if (i < this->dsound->nrofbuffers) {
|
||||||
memcpy(
|
/* Put the last buffer of the list in the (now empty) position */
|
||||||
this->dsound->buffers+i,
|
this->dsound->buffers[i] = this->dsound->buffers[this->dsound->nrofbuffers - 1];
|
||||||
this->dsound->buffers+i+1,
|
|
||||||
sizeof(LPDIRECTSOUNDBUFFER)*(this->dsound->nrofbuffers-i-1)
|
|
||||||
);
|
|
||||||
this->dsound->buffers = HeapReAlloc(GetProcessHeap(),0,this->dsound->buffers,sizeof(LPDIRECTSOUNDBUFFER)*this->dsound->nrofbuffers);
|
this->dsound->buffers = HeapReAlloc(GetProcessHeap(),0,this->dsound->buffers,sizeof(LPDIRECTSOUNDBUFFER)*this->dsound->nrofbuffers);
|
||||||
this->dsound->nrofbuffers--;
|
this->dsound->nrofbuffers--;
|
||||||
this->dsound->lpvtbl->fnRelease(this->dsound);
|
this->dsound->lpvtbl->fnRelease(this->dsound);
|
||||||
|
@ -367,11 +369,17 @@ static HRESULT WINAPI IDirectSoundBuffer_Initialize(
|
||||||
static HRESULT WINAPI IDirectSoundBuffer_GetCaps(
|
static HRESULT WINAPI IDirectSoundBuffer_GetCaps(
|
||||||
LPDIRECTSOUNDBUFFER this,LPDSBCAPS caps
|
LPDIRECTSOUNDBUFFER this,LPDSBCAPS caps
|
||||||
) {
|
) {
|
||||||
|
TRACE(dsound,"(%p)->(%p)\n",this,caps);
|
||||||
|
|
||||||
caps->dwSize = sizeof(*caps);
|
caps->dwSize = sizeof(*caps);
|
||||||
caps->dwFlags = DSBCAPS_PRIMARYBUFFER|DSBCAPS_STATIC|DSBCAPS_CTRLALL|DSBCAPS_LOCSOFTWARE;
|
caps->dwFlags = this->dsbd.dwFlags | DSBCAPS_LOCSOFTWARE;
|
||||||
caps->dwBufferBytes = 65536;
|
caps->dwBufferBytes = this->dsbd.dwBufferBytes;
|
||||||
caps->dwUnlockTransferRate = 0;
|
/* This value represents the speed of the "unlock" command.
|
||||||
|
As unlock is quite fast (it does not do anything), I put
|
||||||
|
4096 ko/s = 4 Mo / s */
|
||||||
|
caps->dwUnlockTransferRate = 4096;
|
||||||
caps->dwPlayCpuOverhead = 0;
|
caps->dwPlayCpuOverhead = 0;
|
||||||
|
|
||||||
return DS_OK;
|
return DS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -380,6 +388,7 @@ static HRESULT WINAPI IDirectSoundBuffer_QueryInterface(
|
||||||
) {
|
) {
|
||||||
char xbuf[50];
|
char xbuf[50];
|
||||||
|
|
||||||
|
TRACE(dsound,"(%p,%s,%p)\n",this,xbuf,ppobj);
|
||||||
if (!memcmp(&IID_IDirectSoundNotify,riid,sizeof(*riid))) {
|
if (!memcmp(&IID_IDirectSoundNotify,riid,sizeof(*riid))) {
|
||||||
IDirectSoundNotify *dsn;
|
IDirectSoundNotify *dsn;
|
||||||
|
|
||||||
|
@ -392,7 +401,6 @@ static HRESULT WINAPI IDirectSoundBuffer_QueryInterface(
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
WINE_StringFromCLSID(riid,xbuf);
|
WINE_StringFromCLSID(riid,xbuf);
|
||||||
TRACE(dsound,"(%p,%s,%p)\n",this,xbuf,ppobj);
|
|
||||||
return E_FAIL;
|
return E_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -443,6 +451,7 @@ static HRESULT WINAPI IDirectSound_CreateSoundBuffer(
|
||||||
TRACE(dsound,"(lpwfxFormat=%p)\n",dsbd->lpwfxFormat);
|
TRACE(dsound,"(lpwfxFormat=%p)\n",dsbd->lpwfxFormat);
|
||||||
}
|
}
|
||||||
*ppdsb = (LPDIRECTSOUNDBUFFER)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectSoundBuffer));
|
*ppdsb = (LPDIRECTSOUNDBUFFER)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectSoundBuffer));
|
||||||
|
|
||||||
(*ppdsb)->ref =1;
|
(*ppdsb)->ref =1;
|
||||||
(*ppdsb)->buffer = (LPBYTE)HeapAlloc(GetProcessHeap(),0,dsbd->dwBufferBytes);
|
(*ppdsb)->buffer = (LPBYTE)HeapAlloc(GetProcessHeap(),0,dsbd->dwBufferBytes);
|
||||||
(*ppdsb)->buflen = dsbd->dwBufferBytes;
|
(*ppdsb)->buflen = dsbd->dwBufferBytes;
|
||||||
|
@ -503,12 +512,12 @@ static HRESULT WINAPI IDirectSound_GetCaps(LPDIRECTSOUND this,LPDSCAPS caps) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI IDirectSound_AddRef(LPDIRECTSOUND this) {
|
static ULONG WINAPI IDirectSound_AddRef(LPDIRECTSOUND this) {
|
||||||
TRACE(dsound,"(%p), ref was %d\n",this,this->ref);
|
TRACE(dsound,"(%p), ref was %ld\n",this,this->ref);
|
||||||
return ++(this->ref);
|
return ++(this->ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI IDirectSound_Release(LPDIRECTSOUND this) {
|
static ULONG WINAPI IDirectSound_Release(LPDIRECTSOUND this) {
|
||||||
TRACE(dsound,"(%p), ref was %d\n",this,this->ref);
|
TRACE(dsound,"(%p), ref was %ld\n",this,this->ref);
|
||||||
if (!--(this->ref)) {
|
if (!--(this->ref)) {
|
||||||
HeapFree(GetProcessHeap(),0,this);
|
HeapFree(GetProcessHeap(),0,this);
|
||||||
dsound = NULL;
|
dsound = NULL;
|
||||||
|
|
Loading…
Reference in New Issue