dsound: Don't make the capture buffer object address public until it is prepared.
This commit is contained in:
parent
c60583ab8b
commit
6a7c2f66e0
|
@ -680,6 +680,7 @@ static HRESULT IDirectSoundCaptureBufferImpl_Create(
|
||||||
LPCDSCBUFFERDESC lpcDSCBufferDesc)
|
LPCDSCBUFFERDESC lpcDSCBufferDesc)
|
||||||
{
|
{
|
||||||
LPWAVEFORMATEX wfex;
|
LPWAVEFORMATEX wfex;
|
||||||
|
IDirectSoundCaptureBufferImpl *This;
|
||||||
TRACE( "(%p,%p,%p)\n", device, ppobj, lpcDSCBufferDesc);
|
TRACE( "(%p,%p,%p)\n", device, ppobj, lpcDSCBufferDesc);
|
||||||
|
|
||||||
if (ppobj == NULL) {
|
if (ppobj == NULL) {
|
||||||
|
@ -687,15 +688,15 @@ static HRESULT IDirectSoundCaptureBufferImpl_Create(
|
||||||
return DSERR_INVALIDPARAM;
|
return DSERR_INVALIDPARAM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*ppobj = NULL;
|
||||||
|
|
||||||
if (!device) {
|
if (!device) {
|
||||||
WARN("not initialized\n");
|
WARN("not initialized\n");
|
||||||
*ppobj = NULL;
|
|
||||||
return DSERR_UNINITIALIZED;
|
return DSERR_UNINITIALIZED;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lpcDSCBufferDesc == NULL) {
|
if (lpcDSCBufferDesc == NULL) {
|
||||||
WARN("invalid parameter: lpcDSCBufferDesc == NULL\n");
|
WARN("invalid parameter: lpcDSCBufferDesc == NULL\n");
|
||||||
*ppobj = NULL;
|
|
||||||
return DSERR_INVALIDPARAM;
|
return DSERR_INVALIDPARAM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -704,7 +705,6 @@ static HRESULT IDirectSoundCaptureBufferImpl_Create(
|
||||||
(lpcDSCBufferDesc->dwBufferBytes == 0) ||
|
(lpcDSCBufferDesc->dwBufferBytes == 0) ||
|
||||||
(lpcDSCBufferDesc->lpwfxFormat == NULL) ) { /* FIXME: DSERR_BADFORMAT ? */
|
(lpcDSCBufferDesc->lpwfxFormat == NULL) ) { /* FIXME: DSERR_BADFORMAT ? */
|
||||||
WARN("invalid lpcDSCBufferDesc\n");
|
WARN("invalid lpcDSCBufferDesc\n");
|
||||||
*ppobj = NULL;
|
|
||||||
return DSERR_INVALIDPARAM;
|
return DSERR_INVALIDPARAM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -717,23 +717,19 @@ static HRESULT IDirectSoundCaptureBufferImpl_Create(
|
||||||
wfex->wBitsPerSample, wfex->cbSize);
|
wfex->wBitsPerSample, wfex->cbSize);
|
||||||
|
|
||||||
device->pwfx = DSOUND_CopyFormat(wfex);
|
device->pwfx = DSOUND_CopyFormat(wfex);
|
||||||
if ( device->pwfx == NULL ) {
|
if ( device->pwfx == NULL )
|
||||||
*ppobj = NULL;
|
|
||||||
return DSERR_OUTOFMEMORY;
|
return DSERR_OUTOFMEMORY;
|
||||||
}
|
|
||||||
|
|
||||||
*ppobj = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,
|
This = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,
|
||||||
sizeof(IDirectSoundCaptureBufferImpl));
|
sizeof(IDirectSoundCaptureBufferImpl));
|
||||||
|
|
||||||
if ( *ppobj == NULL ) {
|
if ( This == NULL ) {
|
||||||
WARN("out of memory\n");
|
WARN("out of memory\n");
|
||||||
*ppobj = NULL;
|
|
||||||
return DSERR_OUTOFMEMORY;
|
return DSERR_OUTOFMEMORY;
|
||||||
} else {
|
} else {
|
||||||
HRESULT err = DS_OK;
|
HRESULT err = DS_OK;
|
||||||
LPBYTE newbuf;
|
LPBYTE newbuf;
|
||||||
DWORD buflen;
|
DWORD buflen;
|
||||||
IDirectSoundCaptureBufferImpl *This = *ppobj;
|
|
||||||
|
|
||||||
This->ref = 1;
|
This->ref = 1;
|
||||||
This->device = device;
|
This->device = device;
|
||||||
|
@ -749,7 +745,6 @@ static HRESULT IDirectSoundCaptureBufferImpl_Create(
|
||||||
WARN("no memory\n");
|
WARN("no memory\n");
|
||||||
This->device->capture_buffer = 0;
|
This->device->capture_buffer = 0;
|
||||||
HeapFree( GetProcessHeap(), 0, This );
|
HeapFree( GetProcessHeap(), 0, This );
|
||||||
*ppobj = NULL;
|
|
||||||
return DSERR_OUTOFMEMORY;
|
return DSERR_OUTOFMEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -762,7 +757,6 @@ static HRESULT IDirectSoundCaptureBufferImpl_Create(
|
||||||
HeapFree(GetProcessHeap(), 0, This->pdscbd);
|
HeapFree(GetProcessHeap(), 0, This->pdscbd);
|
||||||
This->device->capture_buffer = 0;
|
This->device->capture_buffer = 0;
|
||||||
HeapFree( GetProcessHeap(), 0, This );
|
HeapFree( GetProcessHeap(), 0, This );
|
||||||
*ppobj = NULL;
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -776,7 +770,6 @@ static HRESULT IDirectSoundCaptureBufferImpl_Create(
|
||||||
HeapFree(GetProcessHeap(), 0, This->pdscbd);
|
HeapFree(GetProcessHeap(), 0, This->pdscbd);
|
||||||
This->device->capture_buffer = 0;
|
This->device->capture_buffer = 0;
|
||||||
HeapFree( GetProcessHeap(), 0, This );
|
HeapFree( GetProcessHeap(), 0, This );
|
||||||
*ppobj = NULL;
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -789,7 +782,6 @@ static HRESULT IDirectSoundCaptureBufferImpl_Create(
|
||||||
HeapFree(GetProcessHeap(), 0, This->pdscbd);
|
HeapFree(GetProcessHeap(), 0, This->pdscbd);
|
||||||
This->device->capture_buffer = 0;
|
This->device->capture_buffer = 0;
|
||||||
HeapFree( GetProcessHeap(), 0, This );
|
HeapFree( GetProcessHeap(), 0, This );
|
||||||
*ppobj = NULL;
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -807,13 +799,14 @@ static HRESULT IDirectSoundCaptureBufferImpl_Create(
|
||||||
HeapFree(GetProcessHeap(), 0, This->pdscbd);
|
HeapFree(GetProcessHeap(), 0, This->pdscbd);
|
||||||
This->device->capture_buffer = 0;
|
This->device->capture_buffer = 0;
|
||||||
HeapFree( GetProcessHeap(), 0, This );
|
HeapFree( GetProcessHeap(), 0, This );
|
||||||
*ppobj = NULL;
|
|
||||||
return DSERR_OUTOFMEMORY;
|
return DSERR_OUTOFMEMORY;
|
||||||
}
|
}
|
||||||
device->buffer = newbuf;
|
device->buffer = newbuf;
|
||||||
device->buflen = buflen;
|
device->buflen = buflen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*ppobj = This;
|
||||||
|
|
||||||
TRACE("returning DS_OK\n");
|
TRACE("returning DS_OK\n");
|
||||||
return DS_OK;
|
return DS_OK;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue