Andrew Eikum : xaudio2: Add stub for AudioReverb class.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Sep 9 09:57:36 CDT 2015
Module: wine
Branch: master
Commit: b3cb1e4d407dd5564846d989d356326bddc73b70
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b3cb1e4d407dd5564846d989d356326bddc73b70
Author: Andrew Eikum <aeikum at codeweavers.com>
Date: Tue Sep 8 09:33:47 2015 -0500
xaudio2: Add stub for AudioReverb class.
---
dlls/xaudio2_7/xaudio_classes.idl | 7 ++
dlls/xaudio2_7/xaudio_dll.c | 241 ++++++++++++++++++++++++++++++++++++++
dlls/xaudio2_8/xaudio_dll.c | 6 +
include/xaudio2fx.idl | 7 ++
4 files changed, 261 insertions(+)
diff --git a/dlls/xaudio2_7/xaudio_classes.idl b/dlls/xaudio2_7/xaudio_classes.idl
index a39d082..a1ed611 100644
--- a/dlls/xaudio2_7/xaudio_classes.idl
+++ b/dlls/xaudio2_7/xaudio_classes.idl
@@ -33,3 +33,10 @@ coclass XAudio2 { interface IXAudio2; }
uuid(cac1105f-619b-4d04-831a-44e1cbf12d57)
]
coclass AudioVolumeMeter { interface IUnknown; }
+
+[
+ helpstring("XAudio2 Reverb Class"),
+ threading(both),
+ uuid(6a93130e-1d53-41d1-a9cf-e758800bb179)
+]
+coclass AudioReverb { interface IUnknown; }
diff --git a/dlls/xaudio2_7/xaudio_dll.c b/dlls/xaudio2_7/xaudio_dll.c
index 7a5f45b..739c919 100644
--- a/dlls/xaudio2_7/xaudio_dll.c
+++ b/dlls/xaudio2_7/xaudio_dll.c
@@ -2435,6 +2435,206 @@ static const IXAPOParametersVtbl VUMXAPOParameters_Vtbl = {
VUMXAPOParams_GetParameters
};
+typedef struct _ReverbImpl {
+ IXAPO IXAPO_iface;
+ IXAPOParameters IXAPOParameters_iface;
+
+ LONG ref;
+} ReverbImpl;
+
+static ReverbImpl *ReverbImpl_from_IXAPO(IXAPO *iface)
+{
+ return CONTAINING_RECORD(iface, ReverbImpl, IXAPO_iface);
+}
+
+static ReverbImpl *ReverbImpl_from_IXAPOParameters(IXAPOParameters *iface)
+{
+ return CONTAINING_RECORD(iface, ReverbImpl, IXAPOParameters_iface);
+}
+
+static HRESULT WINAPI RVBXAPO_QueryInterface(IXAPO *iface, REFIID riid, void **ppvObject)
+{
+ ReverbImpl *This = ReverbImpl_from_IXAPO(iface);
+
+ TRACE("%p, %s, %p\n", This, wine_dbgstr_guid(riid), ppvObject);
+
+ if(IsEqualGUID(riid, &IID_IUnknown) ||
+ IsEqualGUID(riid, &IID_IXAPO) ||
+ IsEqualGUID(riid, &IID_IXAPO27))
+ *ppvObject = &This->IXAPO_iface;
+ else if(IsEqualGUID(riid, &IID_IXAPOParameters))
+ *ppvObject = &This->IXAPOParameters_iface;
+ else
+ *ppvObject = NULL;
+
+ if(*ppvObject){
+ IUnknown_AddRef((IUnknown*)*ppvObject);
+ return S_OK;
+ }
+
+ return E_NOINTERFACE;
+}
+
+static ULONG WINAPI RVBXAPO_AddRef(IXAPO *iface)
+{
+ ReverbImpl *This = ReverbImpl_from_IXAPO(iface);
+ ULONG ref = InterlockedIncrement(&This->ref);
+ TRACE("(%p)->(): Refcount now %u\n", This, ref);
+ return ref;
+}
+
+static ULONG WINAPI RVBXAPO_Release(IXAPO *iface)
+{
+ ReverbImpl *This = ReverbImpl_from_IXAPO(iface);
+ ULONG ref = InterlockedDecrement(&This->ref);
+
+ TRACE("(%p)->(): Refcount now %u\n", This, ref);
+
+ if(!ref)
+ HeapFree(GetProcessHeap(), 0, This);
+
+ return ref;
+}
+
+static HRESULT WINAPI RVBXAPO_GetRegistrationProperties(IXAPO *iface,
+ XAPO_REGISTRATION_PROPERTIES **props)
+{
+ ReverbImpl *This = ReverbImpl_from_IXAPO(iface);
+ TRACE("%p, %p\n", This, props);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI RVBXAPO_IsInputFormatSupported(IXAPO *iface,
+ const WAVEFORMATEX *output_fmt, const WAVEFORMATEX *input_fmt,
+ WAVEFORMATEX **supported_fmt)
+{
+ ReverbImpl *This = ReverbImpl_from_IXAPO(iface);
+ TRACE("%p, %p, %p, %p\n", This, output_fmt, input_fmt, supported_fmt);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI RVBXAPO_IsOutputFormatSupported(IXAPO *iface,
+ const WAVEFORMATEX *input_fmt, const WAVEFORMATEX *output_fmt,
+ WAVEFORMATEX **supported_fmt)
+{
+ ReverbImpl *This = ReverbImpl_from_IXAPO(iface);
+ TRACE("%p, %p, %p, %p\n", This, input_fmt, output_fmt, supported_fmt);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI RVBXAPO_Initialize(IXAPO *iface, const void *data,
+ UINT32 data_len)
+{
+ ReverbImpl *This = ReverbImpl_from_IXAPO(iface);
+ TRACE("%p, %p, %u\n", This, data, data_len);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI RVBXAPO_Reset(IXAPO *iface)
+{
+ ReverbImpl *This = ReverbImpl_from_IXAPO(iface);
+ TRACE("%p\n", This);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI RVBXAPO_LockForProcess(IXAPO *iface, UINT32 in_params_count,
+ const XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS *in_params,
+ UINT32 out_params_count,
+ const XAPO_LOCKFORPROCESS_BUFFER_PARAMETERS *out_params)
+{
+ ReverbImpl *This = ReverbImpl_from_IXAPO(iface);
+ TRACE("%p, %u, %p, %u, %p\n", This, in_params_count, in_params,
+ out_params_count, out_params);
+ return E_NOTIMPL;
+}
+
+static void WINAPI RVBXAPO_UnlockForProcess(IXAPO *iface)
+{
+ ReverbImpl *This = ReverbImpl_from_IXAPO(iface);
+ TRACE("%p\n", This);
+}
+
+static void WINAPI RVBXAPO_Process(IXAPO *iface, UINT32 in_params_count,
+ const XAPO_PROCESS_BUFFER_PARAMETERS *in_params,
+ UINT32 out_params_count,
+ const XAPO_PROCESS_BUFFER_PARAMETERS *out_params, BOOL enabled)
+{
+ ReverbImpl *This = ReverbImpl_from_IXAPO(iface);
+ TRACE("%p, %u, %p, %u, %p, %u\n", This, in_params_count, in_params,
+ out_params_count, out_params, enabled);
+}
+
+static UINT32 WINAPI RVBXAPO_CalcInputFrames(IXAPO *iface, UINT32 output_frames)
+{
+ ReverbImpl *This = ReverbImpl_from_IXAPO(iface);
+ TRACE("%p, %u\n", This, output_frames);
+ return 0;
+}
+
+static UINT32 WINAPI RVBXAPO_CalcOutputFrames(IXAPO *iface, UINT32 input_frames)
+{
+ ReverbImpl *This = ReverbImpl_from_IXAPO(iface);
+ TRACE("%p, %u\n", This, input_frames);
+ return 0;
+}
+
+static const IXAPOVtbl RVBXAPO_Vtbl = {
+ RVBXAPO_QueryInterface,
+ RVBXAPO_AddRef,
+ RVBXAPO_Release,
+ RVBXAPO_GetRegistrationProperties,
+ RVBXAPO_IsInputFormatSupported,
+ RVBXAPO_IsOutputFormatSupported,
+ RVBXAPO_Initialize,
+ RVBXAPO_Reset,
+ RVBXAPO_LockForProcess,
+ RVBXAPO_UnlockForProcess,
+ RVBXAPO_Process,
+ RVBXAPO_CalcInputFrames,
+ RVBXAPO_CalcOutputFrames
+};
+
+static HRESULT WINAPI RVBXAPOParams_QueryInterface(IXAPOParameters *iface,
+ REFIID riid, void **ppvObject)
+{
+ ReverbImpl *This = ReverbImpl_from_IXAPOParameters(iface);
+ return RVBXAPO_QueryInterface(&This->IXAPO_iface, riid, ppvObject);
+}
+
+static ULONG WINAPI RVBXAPOParams_AddRef(IXAPOParameters *iface)
+{
+ ReverbImpl *This = ReverbImpl_from_IXAPOParameters(iface);
+ return RVBXAPO_AddRef(&This->IXAPO_iface);
+}
+
+static ULONG WINAPI RVBXAPOParams_Release(IXAPOParameters *iface)
+{
+ ReverbImpl *This = ReverbImpl_from_IXAPOParameters(iface);
+ return RVBXAPO_Release(&This->IXAPO_iface);
+}
+
+static void WINAPI RVBXAPOParams_SetParameters(IXAPOParameters *iface,
+ const void *params, UINT32 params_len)
+{
+ ReverbImpl *This = ReverbImpl_from_IXAPOParameters(iface);
+ TRACE("%p, %p, %u\n", This, params, params_len);
+}
+
+static void WINAPI RVBXAPOParams_GetParameters(IXAPOParameters *iface, void *params,
+ UINT32 params_len)
+{
+ ReverbImpl *This = ReverbImpl_from_IXAPOParameters(iface);
+ TRACE("%p, %p, %u\n", This, params, params_len);
+}
+
+static const IXAPOParametersVtbl RVBXAPOParameters_Vtbl = {
+ RVBXAPOParams_QueryInterface,
+ RVBXAPOParams_AddRef,
+ RVBXAPOParams_Release,
+ RVBXAPOParams_SetParameters,
+ RVBXAPOParams_GetParameters
+};
+
static HRESULT WINAPI XAudio2CF_QueryInterface(IClassFactory *iface, REFIID riid, void **ppobj)
{
if(IsEqualGUID(riid, &IID_IUnknown)
@@ -2615,6 +2815,35 @@ static HRESULT WINAPI VUMeterCF_CreateInstance(IClassFactory *iface, IUnknown *p
return S_OK;
}
+static HRESULT WINAPI ReverbCF_CreateInstance(IClassFactory *iface, IUnknown *pOuter,
+ REFIID riid, void **ppobj)
+{
+ HRESULT hr;
+ ReverbImpl *object;
+
+ TRACE("(static)->(%p,%s,%p)\n", pOuter, debugstr_guid(riid), ppobj);
+
+ *ppobj = NULL;
+
+ if(pOuter)
+ return CLASS_E_NOAGGREGATION;
+
+ object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object));
+ if(!object)
+ return E_OUTOFMEMORY;
+
+ object->IXAPO_iface.lpVtbl = &RVBXAPO_Vtbl;
+ object->IXAPOParameters_iface.lpVtbl = &RVBXAPOParameters_Vtbl;
+
+ hr = IXAPO_QueryInterface(&object->IXAPO_iface, riid, ppobj);
+ if(FAILED(hr)){
+ HeapFree(GetProcessHeap(), 0, object);
+ return hr;
+ }
+
+ return S_OK;
+}
+
static HRESULT WINAPI XAudio2CF_LockServer(IClassFactory *iface, BOOL dolock)
{
FIXME("(static)->(%d): stub!\n", dolock);
@@ -2639,8 +2868,18 @@ static const IClassFactoryVtbl VUMeterCF_Vtbl =
XAudio2CF_LockServer
};
+static const IClassFactoryVtbl ReverbCF_Vtbl =
+{
+ XAudio2CF_QueryInterface,
+ XAudio2CF_AddRef,
+ XAudio2CF_Release,
+ ReverbCF_CreateInstance,
+ XAudio2CF_LockServer
+};
+
static IClassFactory xaudio2_cf = { &XAudio2CF_Vtbl };
static IClassFactory vumeter_cf = { &VUMeterCF_Vtbl };
+static IClassFactory reverb_cf = { &ReverbCF_Vtbl };
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv)
{
@@ -2652,6 +2891,8 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv)
factory = &xaudio2_cf;
}else if(IsEqualGUID(rclsid, &CLSID_AudioVolumeMeter)) {
factory = &vumeter_cf;
+ }else if(IsEqualGUID(rclsid, &CLSID_AudioReverb)) {
+ factory = &reverb_cf;
}
if(!factory) return CLASS_E_CLASSNOTAVAILABLE;
diff --git a/dlls/xaudio2_8/xaudio_dll.c b/dlls/xaudio2_8/xaudio_dll.c
index 521cc29..4a73783 100644
--- a/dlls/xaudio2_8/xaudio_dll.c
+++ b/dlls/xaudio2_8/xaudio_dll.c
@@ -79,3 +79,9 @@ HRESULT WINAPI CreateAudioVolumeMeter(IUnknown **out)
return CoCreateInstance(&CLSID_AudioVolumeMeter, NULL, CLSCTX_INPROC_SERVER,
&IID_IUnknown, (void**)out);
}
+
+HRESULT WINAPI CreateAudioReverb(IUnknown **out)
+{
+ return CoCreateInstance(&CLSID_AudioReverb, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IUnknown, (void**)out);
+}
diff --git a/include/xaudio2fx.idl b/include/xaudio2fx.idl
index 8d74264..a83b2f6 100644
--- a/include/xaudio2fx.idl
+++ b/include/xaudio2fx.idl
@@ -24,3 +24,10 @@ import "unknwn.idl";
coclass AudioVolumeMeter {
interface IUnknown;
}
+
+[
+ uuid(6a93130e-1d53-41d1-a9cf-e758800bb179)
+]
+coclass AudioReverb {
+ interface IUnknown;
+}
More information about the wine-cvs
mailing list