dsound: Merge the DirectSoundCapture create functions.

This commit is contained in:
Michael Stefaniuc 2012-08-16 01:20:01 +02:00 committed by Alexandre Julliard
parent 4cebe9e27e
commit b8ffb4930f
4 changed files with 29 additions and 70 deletions

View File

@ -1000,6 +1000,7 @@ struct IDirectSoundCaptureImpl
IDirectSoundCapture IDirectSoundCapture_iface;
LONG ref;
DirectSoundCaptureDevice *device;
BOOL has_dsc8;
};
static inline struct IDirectSoundCaptureImpl *impl_from_IDirectSoundCapture(IDirectSoundCapture *iface)
@ -1161,83 +1162,41 @@ static const IDirectSoundCaptureVtbl dscvt =
IDirectSoundCaptureImpl_Initialize
};
static HRESULT IDirectSoundCaptureImpl_Create(
LPDIRECTSOUNDCAPTURE8 * ppDSC)
static HRESULT IDirectSoundCaptureImpl_Create(REFIID riid, void **ppv, BOOL has_dsc8)
{
IDirectSoundCaptureImpl *pDSC;
TRACE("(%p)\n", ppDSC);
IDirectSoundCaptureImpl *obj;
HRESULT hr;
/* Allocate memory */
pDSC = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirectSoundCaptureImpl));
if (pDSC == NULL) {
TRACE("(%s, %p)\n", debugstr_guid(riid), ppv);
*ppv = NULL;
obj = HeapAlloc(GetProcessHeap(), 0, sizeof(*obj));
if (obj == NULL) {
WARN("out of memory\n");
*ppDSC = NULL;
return DSERR_OUTOFMEMORY;
}
pDSC->IDirectSoundCapture_iface.lpVtbl = &dscvt;
pDSC->ref = 0;
pDSC->device = NULL;
*ppDSC = (LPDIRECTSOUNDCAPTURE8)pDSC;
return DS_OK;
}
HRESULT DSOUND_CaptureCreate(REFIID riid, IDirectSoundCapture **ppDSC)
{
IDirectSoundCapture *pDSC;
HRESULT hr;
TRACE("(%s, %p)\n", debugstr_guid(riid), ppDSC);
if (!IsEqualIID(riid, &IID_IUnknown) &&
!IsEqualIID(riid, &IID_IDirectSoundCapture)) {
*ppDSC = 0;
return E_NOINTERFACE;
}
/* Get dsound configuration */
setup_dsound_options();
hr = IDirectSoundCaptureImpl_Create(&pDSC);
if (hr == DS_OK) {
IDirectSoundCapture_AddRef(pDSC);
*ppDSC = pDSC;
} else {
WARN("IDirectSoundCaptureImpl_Create failed\n");
*ppDSC = 0;
}
obj->IDirectSoundCapture_iface.lpVtbl = &dscvt;
obj->ref = 1;
obj->device = NULL;
obj->has_dsc8 = has_dsc8;
hr = IDirectSoundCapture_QueryInterface(&obj->IDirectSoundCapture_iface, riid, ppv);
IDirectSoundCapture_Release(&obj->IDirectSoundCapture_iface);
return hr;
}
HRESULT DSOUND_CaptureCreate8(
REFIID riid,
LPDIRECTSOUNDCAPTURE8 *ppDSC8)
HRESULT DSOUND_CaptureCreate(REFIID riid, void **ppv)
{
LPDIRECTSOUNDCAPTURE8 pDSC8;
HRESULT hr;
TRACE("(%s, %p)\n", debugstr_guid(riid), ppDSC8);
if (!IsEqualIID(riid, &IID_IUnknown) &&
!IsEqualIID(riid, &IID_IDirectSoundCapture8)) {
*ppDSC8 = 0;
return E_NOINTERFACE;
return IDirectSoundCaptureImpl_Create(riid, ppv, FALSE);
}
/* Get dsound configuration */
setup_dsound_options();
hr = IDirectSoundCaptureImpl_Create(&pDSC8);
if (hr == DS_OK) {
IDirectSoundCapture_AddRef(pDSC8);
*ppDSC8 = pDSC8;
} else {
WARN("IDirectSoundCaptureImpl_Create failed\n");
*ppDSC8 = 0;
}
return hr;
HRESULT DSOUND_CaptureCreate8(REFIID riid, void **ppv)
{
return IDirectSoundCaptureImpl_Create(riid, ppv, TRUE);
}
/***************************************************************************
@ -1280,7 +1239,7 @@ HRESULT WINAPI DirectSoundCaptureCreate(LPCGUID lpcGUID, IDirectSoundCapture **p
return DSERR_NOAGGREGATION;
}
hr = DSOUND_CaptureCreate(&IID_IDirectSoundCapture, &pDSC);
hr = DSOUND_CaptureCreate(&IID_IDirectSoundCapture, (void**)&pDSC);
if (hr == DS_OK) {
hr = IDirectSoundCapture_Initialize(pDSC, lpcGUID);
if (hr != DS_OK) {
@ -1336,7 +1295,7 @@ HRESULT WINAPI DirectSoundCaptureCreate8(
return DSERR_NOAGGREGATION;
}
hr = DSOUND_CaptureCreate8(&IID_IDirectSoundCapture8, &pDSC8);
hr = DSOUND_CaptureCreate8(&IID_IDirectSoundCapture8, (void**)&pDSC8);
if (hr == DS_OK) {
hr = IDirectSoundCapture_Initialize(pDSC8, lpcGUID);
if (hr != DS_OK) {

View File

@ -721,8 +721,8 @@ static const IClassFactoryVtbl DSCF_Vtbl = {
static IClassFactoryImpl DSOUND_CF[] = {
{ { &DSCF_Vtbl }, &CLSID_DirectSound, DSOUND_Create },
{ { &DSCF_Vtbl }, &CLSID_DirectSound8, DSOUND_Create8 },
{ { &DSCF_Vtbl }, &CLSID_DirectSoundCapture, (FnCreateInstance)DSOUND_CaptureCreate },
{ { &DSCF_Vtbl }, &CLSID_DirectSoundCapture8, (FnCreateInstance)DSOUND_CaptureCreate8 },
{ { &DSCF_Vtbl }, &CLSID_DirectSoundCapture, DSOUND_CaptureCreate },
{ { &DSCF_Vtbl }, &CLSID_DirectSoundCapture8, DSOUND_CaptureCreate8 },
{ { &DSCF_Vtbl }, &CLSID_DirectSoundFullDuplex, (FnCreateInstance)DSOUND_FullDuplexCreate },
{ { &DSCF_Vtbl }, &CLSID_DirectSoundPrivate, (FnCreateInstance)IKsPrivatePropertySetImpl_Create },
{ { NULL }, NULL, NULL }

View File

@ -299,8 +299,8 @@ void DSOUND_Calc3DBuffer(IDirectSoundBufferImpl *dsb) DECLSPEC_HIDDEN;
/* capture.c */
HRESULT DSOUND_CaptureCreate(REFIID riid, LPDIRECTSOUNDCAPTURE *ppDSC) DECLSPEC_HIDDEN;
HRESULT DSOUND_CaptureCreate8(REFIID riid, LPDIRECTSOUNDCAPTURE8 *ppDSC8) DECLSPEC_HIDDEN;
HRESULT DSOUND_CaptureCreate(REFIID riid, void **ppv) DECLSPEC_HIDDEN;
HRESULT DSOUND_CaptureCreate8(REFIID riid, void **ppv) DECLSPEC_HIDDEN;
#define STATE_STOPPED 0
#define STATE_STARTING 1

View File

@ -578,7 +578,7 @@ IDirectSoundFullDuplexImpl_Initialize(
return hr;
}
hr = DSOUND_CaptureCreate8(&IID_IDirectSoundCapture8, &This->capture_device);
hr = DSOUND_CaptureCreate8(&IID_IDirectSoundCapture8, (void**)&This->capture_device);
if (SUCCEEDED(hr))
hr = IDirectSoundCapture_Initialize(This->capture_device, pCaptureGuid);
if (hr != DS_OK) {