[PATCH 1/4] xaudio2_2: Add compatibility implementation and forward to xaudio2_7
Andrew Eikum
aeikum at codeweavers.com
Mon Oct 5 11:33:03 CDT 2015
Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
---
configure.ac | 1 +
dlls/xaudio2_2/Makefile.in | 7 ++
dlls/xaudio2_2/xaudio2_2.spec | 4 +
dlls/xaudio2_2/xaudio_classes.idl | 28 +++++
dlls/xaudio2_2/xaudio_dll.c | 52 ++++++++
dlls/xaudio2_7/compat.c | 252 ++++++++++++++++++++++++++++++++++++++
dlls/xaudio2_7/xaudio_classes.idl | 7 ++
dlls/xaudio2_7/xaudio_dll.c | 17 ++-
dlls/xaudio2_7/xaudio_private.h | 3 +
include/xaudio2.idl | 85 +++++++++++++
10 files changed, 452 insertions(+), 4 deletions(-)
create mode 100644 dlls/xaudio2_2/Makefile.in
create mode 100644 dlls/xaudio2_2/xaudio2_2.spec
create mode 100644 dlls/xaudio2_2/xaudio_classes.idl
create mode 100644 dlls/xaudio2_2/xaudio_dll.c
diff --git a/configure.ac b/configure.ac
index bd98b6c..51574db 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3460,6 +3460,7 @@ WINE_CONFIG_DLL(xapofx1_1)
WINE_CONFIG_DLL(xapofx1_3)
WINE_CONFIG_DLL(xapofx1_4)
WINE_CONFIG_DLL(xapofx1_5)
+WINE_CONFIG_DLL(xaudio2_2,,[clean])
WINE_CONFIG_DLL(xaudio2_3,,[clean])
WINE_CONFIG_DLL(xaudio2_4,,[clean])
WINE_CONFIG_DLL(xaudio2_5,,[clean])
diff --git a/dlls/xaudio2_2/Makefile.in b/dlls/xaudio2_2/Makefile.in
new file mode 100644
index 0000000..9470199
--- /dev/null
+++ b/dlls/xaudio2_2/Makefile.in
@@ -0,0 +1,7 @@
+MODULE = xaudio2_2.dll
+IMPORTS = ole32
+
+C_SRCS = \
+ xaudio_dll.c
+
+IDL_SRCS = xaudio_classes.idl
diff --git a/dlls/xaudio2_2/xaudio2_2.spec b/dlls/xaudio2_2/xaudio2_2.spec
new file mode 100644
index 0000000..cb263d4
--- /dev/null
+++ b/dlls/xaudio2_2/xaudio2_2.spec
@@ -0,0 +1,4 @@
+@ stdcall -private DllCanUnloadNow()
+@ stdcall -private DllGetClassObject(ptr ptr ptr) xaudio2_7.DllGetClassObject
+@ stdcall -private DllRegisterServer()
+@ stdcall -private DllUnregisterServer()
diff --git a/dlls/xaudio2_2/xaudio_classes.idl b/dlls/xaudio2_2/xaudio_classes.idl
new file mode 100644
index 0000000..6ff0a00
--- /dev/null
+++ b/dlls/xaudio2_2/xaudio_classes.idl
@@ -0,0 +1,28 @@
+/*
+ * COM Classes for xaudio
+ *
+ * Copyright 2015 Andrew Eikum for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#pragma makedep register
+
+[
+ helpstring("XAudio2.2 Class"),
+ threading(both),
+ uuid(b802058a-464a-42db-bc10-b650d6f2586a)
+]
+coclass XAudio22 { interface IXAudio22; }
diff --git a/dlls/xaudio2_2/xaudio_dll.c b/dlls/xaudio2_2/xaudio_dll.c
new file mode 100644
index 0000000..7c95c28
--- /dev/null
+++ b/dlls/xaudio2_2/xaudio_dll.c
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2015 Andrew Eikum for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <stdarg.h>
+#include "windef.h"
+#include "winbase.h"
+#include "objbase.h"
+#include "rpcproxy.h"
+
+static HINSTANCE instance;
+
+BOOL WINAPI DllMain(HINSTANCE hinstance, DWORD reason, LPVOID reserved)
+{
+ switch (reason)
+ {
+ case DLL_PROCESS_ATTACH:
+ instance = hinstance;
+ DisableThreadLibraryCalls(hinstance);
+ break;
+ }
+ return TRUE;
+}
+
+HRESULT WINAPI DllCanUnloadNow(void)
+{
+ return S_FALSE;
+}
+
+HRESULT WINAPI DllRegisterServer(void)
+{
+ return __wine_register_resources(instance);
+}
+
+HRESULT WINAPI DllUnregisterServer(void)
+{
+ return __wine_unregister_resources(instance);
+}
diff --git a/dlls/xaudio2_7/compat.c b/dlls/xaudio2_7/compat.c
index 114463a..bee57c6 100644
--- a/dlls/xaudio2_7/compat.c
+++ b/dlls/xaudio2_7/compat.c
@@ -1183,3 +1183,255 @@ const IXAudio23MasteringVoiceVtbl XAudio23MasteringVoice_Vtbl = {
XA23M_GetOutputMatrix,
XA23M_DestroyVoice
};
+
+static inline IXAudio2Impl *impl_from_IXAudio22(IXAudio22 *iface)
+{
+ return CONTAINING_RECORD(iface, IXAudio2Impl, IXAudio22_iface);
+}
+
+static HRESULT WINAPI XA22_QueryInterface(IXAudio22 *iface, REFIID riid,
+ void **ppvObject)
+{
+ IXAudio2Impl *This = impl_from_IXAudio22(iface);
+ return IXAudio2_QueryInterface(&This->IXAudio2_iface, riid, ppvObject);
+}
+
+static ULONG WINAPI XA22_AddRef(IXAudio22 *iface)
+{
+ IXAudio2Impl *This = impl_from_IXAudio22(iface);
+ return IXAudio2_AddRef(&This->IXAudio2_iface);
+}
+
+static ULONG WINAPI XA22_Release(IXAudio22 *iface)
+{
+ IXAudio2Impl *This = impl_from_IXAudio22(iface);
+ return IXAudio2_Release(&This->IXAudio2_iface);
+}
+
+static HRESULT WINAPI XA22_GetDeviceCount(IXAudio22 *iface, UINT32 *pCount)
+{
+ IXAudio2Impl *This = impl_from_IXAudio22(iface);
+
+ TRACE("%p, %p\n", This, pCount);
+
+ *pCount = This->ndevs;
+
+ return S_OK;
+}
+
+static HRESULT WINAPI XA22_GetDeviceDetails(IXAudio22 *iface, UINT32 index,
+ XAUDIO2_DEVICE_DETAILS *pDeviceDetails)
+{
+ IXAudio2Impl *This = impl_from_IXAudio22(iface);
+ HRESULT hr;
+ IMMDevice *dev;
+ IAudioClient *client;
+ IPropertyStore *ps;
+ WAVEFORMATEX *wfx;
+ PROPVARIANT var;
+
+ TRACE("%p, %u, %p\n", This, index, pDeviceDetails);
+
+ if(index >= This->ndevs)
+ return E_INVALIDARG;
+
+ hr = IMMDeviceEnumerator_GetDevice(This->devenum, This->devids[index], &dev);
+ if(FAILED(hr)){
+ WARN("GetDevice failed: %08x\n", hr);
+ return hr;
+ }
+
+ hr = IMMDevice_Activate(dev, &IID_IAudioClient, CLSCTX_INPROC_SERVER,
+ NULL, (void**)&client);
+ if(FAILED(hr)){
+ WARN("Activate failed: %08x\n", hr);
+ IMMDevice_Release(dev);
+ return hr;
+ }
+
+ hr = IMMDevice_OpenPropertyStore(dev, STGM_READ, &ps);
+ if(FAILED(hr)){
+ WARN("OpenPropertyStore failed: %08x\n", hr);
+ IAudioClient_Release(client);
+ IMMDevice_Release(dev);
+ return hr;
+ }
+
+ PropVariantInit(&var);
+
+ hr = IPropertyStore_GetValue(ps, (PROPERTYKEY*)&DEVPKEY_Device_FriendlyName, &var);
+ if(FAILED(hr)){
+ WARN("GetValue failed: %08x\n", hr);
+ goto done;
+ }
+
+ lstrcpynW(pDeviceDetails->DisplayName, var.u.pwszVal, sizeof(pDeviceDetails->DisplayName)/sizeof(WCHAR));
+
+ PropVariantClear(&var);
+
+ hr = IAudioClient_GetMixFormat(client, &wfx);
+ if(FAILED(hr)){
+ WARN("GetMixFormat failed: %08x\n", hr);
+ goto done;
+ }
+
+ lstrcpyW(pDeviceDetails->DeviceID, This->devids[index]);
+
+ if(index == 0)
+ pDeviceDetails->Role = GlobalDefaultDevice;
+ else
+ pDeviceDetails->Role = NotDefaultDevice;
+
+ if(sizeof(WAVEFORMATEX) + wfx->cbSize > sizeof(pDeviceDetails->OutputFormat)){
+ FIXME("AudioClient format is too large to fit into WAVEFORMATEXTENSIBLE!\n");
+ CoTaskMemFree(wfx);
+ hr = E_FAIL;
+ goto done;
+ }
+ memcpy(&pDeviceDetails->OutputFormat, wfx, sizeof(WAVEFORMATEX) + wfx->cbSize);
+
+ CoTaskMemFree(wfx);
+
+done:
+ IPropertyStore_Release(ps);
+ IAudioClient_Release(client);
+ IMMDevice_Release(dev);
+
+ return hr;
+}
+
+static HRESULT WINAPI XA22_Initialize(IXAudio22 *iface, UINT32 flags,
+ XAUDIO2_PROCESSOR processor)
+{
+ IXAudio2Impl *This = impl_from_IXAudio22(iface);
+ TRACE("(%p)->(0x%x, 0x%x)\n", This, flags, processor);
+ return S_OK;
+}
+
+static HRESULT WINAPI XA22_RegisterForCallbacks(IXAudio22 *iface,
+ IXAudio2EngineCallback *pCallback)
+{
+ IXAudio2Impl *This = impl_from_IXAudio22(iface);
+ return IXAudio2_RegisterForCallbacks(&This->IXAudio2_iface, pCallback);
+}
+
+static void WINAPI XA22_UnregisterForCallbacks(IXAudio22 *iface,
+ IXAudio2EngineCallback *pCallback)
+{
+ IXAudio2Impl *This = impl_from_IXAudio22(iface);
+ IXAudio2_UnregisterForCallbacks(&This->IXAudio2_iface, pCallback);
+}
+
+static HRESULT WINAPI XA22_CreateSourceVoice(IXAudio22 *iface,
+ IXAudio2SourceVoice **ppSourceVoice, const WAVEFORMATEX *pSourceFormat,
+ UINT32 flags, float maxFrequencyRatio,
+ IXAudio2VoiceCallback *pCallback, const XAUDIO2_VOICE_SENDS *pSendList,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain)
+{
+ IXAudio2Impl *This = impl_from_IXAudio22(iface);
+ return IXAudio2_CreateSourceVoice(&This->IXAudio2_iface, ppSourceVoice,
+ pSourceFormat, flags, maxFrequencyRatio, pCallback, pSendList,
+ pEffectChain);
+}
+
+static HRESULT WINAPI XA22_CreateSubmixVoice(IXAudio22 *iface,
+ IXAudio2SubmixVoice **ppSubmixVoice, UINT32 inputChannels,
+ UINT32 inputSampleRate, UINT32 flags, UINT32 processingStage,
+ const XAUDIO2_VOICE_SENDS *pSendList,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain)
+{
+ IXAudio2Impl *This = impl_from_IXAudio22(iface);
+ return IXAudio2_CreateSubmixVoice(&This->IXAudio2_iface, ppSubmixVoice,
+ inputChannels, inputSampleRate, flags, processingStage, pSendList,
+ pEffectChain);
+}
+
+static HRESULT WINAPI XA22_CreateMasteringVoice(IXAudio22 *iface,
+ IXAudio2MasteringVoice **ppMasteringVoice, UINT32 inputChannels,
+ UINT32 inputSampleRate, UINT32 flags, UINT32 deviceIndex,
+ const XAUDIO2_EFFECT_CHAIN *pEffectChain)
+{
+ IXAudio2Impl *This = impl_from_IXAudio22(iface);
+
+ TRACE("(%p)->(%p, %u, %u, 0x%x, %u, %p)\n", This, ppMasteringVoice,
+ inputChannels, inputSampleRate, flags, deviceIndex,
+ pEffectChain);
+
+ if(deviceIndex >= This->ndevs)
+ return E_INVALIDARG;
+
+ return IXAudio2_CreateMasteringVoice(&This->IXAudio2_iface, ppMasteringVoice,
+ inputChannels, inputSampleRate, flags, This->devids[deviceIndex],
+ pEffectChain, AudioCategory_GameEffects);
+}
+
+static HRESULT WINAPI XA22_StartEngine(IXAudio22 *iface)
+{
+ IXAudio2Impl *This = impl_from_IXAudio22(iface);
+ return IXAudio2_StartEngine(&This->IXAudio2_iface);
+}
+
+static void WINAPI XA22_StopEngine(IXAudio22 *iface)
+{
+ IXAudio2Impl *This = impl_from_IXAudio22(iface);
+ return IXAudio2_StopEngine(&This->IXAudio2_iface);
+}
+
+static HRESULT WINAPI XA22_CommitChanges(IXAudio22 *iface, UINT32 operationSet)
+{
+ IXAudio2Impl *This = impl_from_IXAudio22(iface);
+ return IXAudio2_CommitChanges(&This->IXAudio2_iface, operationSet);
+}
+
+static void WINAPI XA22_GetPerformanceData(IXAudio22 *iface,
+ XAUDIO22_PERFORMANCE_DATA *pPerfData)
+{
+ IXAudio2Impl *This = impl_from_IXAudio22(iface);
+ XAUDIO2_PERFORMANCE_DATA data;
+
+ IXAudio2_GetPerformanceData(&This->IXAudio2_iface, &data);
+
+ pPerfData->AudioCyclesSinceLastQuery = data.AudioCyclesSinceLastQuery;
+ pPerfData->TotalCyclesSinceLastQuery = data.TotalCyclesSinceLastQuery;
+ pPerfData->MinimumCyclesPerQuantum = data.MinimumCyclesPerQuantum;
+ pPerfData->MaximumCyclesPerQuantum = data.MaximumCyclesPerQuantum;
+ pPerfData->MemoryUsageInBytes = data.MemoryUsageInBytes;
+ pPerfData->CurrentLatencyInSamples = data.CurrentLatencyInSamples;
+ pPerfData->GlitchesSinceEngineStarted = data.GlitchesSinceEngineStarted;
+ pPerfData->ActiveSourceVoiceCount = data.ActiveSourceVoiceCount;
+ pPerfData->TotalSourceVoiceCount = data.TotalSourceVoiceCount;
+
+ pPerfData->ActiveSubmixVoiceCount = data.ActiveSubmixVoiceCount;
+ pPerfData->TotalSubmixVoiceCount = data.ActiveSubmixVoiceCount;
+
+ pPerfData->ActiveXmaSourceVoices = data.ActiveXmaSourceVoices;
+ pPerfData->ActiveXmaStreams = data.ActiveXmaStreams;
+}
+
+static void WINAPI XA22_SetDebugConfiguration(IXAudio22 *iface,
+ const XAUDIO2_DEBUG_CONFIGURATION *pDebugConfiguration,
+ void *pReserved)
+{
+ IXAudio2Impl *This = impl_from_IXAudio22(iface);
+ return IXAudio2_SetDebugConfiguration(&This->IXAudio2_iface,
+ pDebugConfiguration, pReserved);
+}
+
+const IXAudio22Vtbl XAudio22_Vtbl = {
+ XA22_QueryInterface,
+ XA22_AddRef,
+ XA22_Release,
+ XA22_GetDeviceCount,
+ XA22_GetDeviceDetails,
+ XA22_Initialize,
+ XA22_RegisterForCallbacks,
+ XA22_UnregisterForCallbacks,
+ XA22_CreateSourceVoice,
+ XA22_CreateSubmixVoice,
+ XA22_CreateMasteringVoice,
+ XA22_StartEngine,
+ XA22_StopEngine,
+ XA22_CommitChanges,
+ XA22_GetPerformanceData,
+ XA22_SetDebugConfiguration
+};
diff --git a/dlls/xaudio2_7/xaudio_classes.idl b/dlls/xaudio2_7/xaudio_classes.idl
index a1ed611..7be37fd 100644
--- a/dlls/xaudio2_7/xaudio_classes.idl
+++ b/dlls/xaudio2_7/xaudio_classes.idl
@@ -40,3 +40,10 @@ coclass AudioVolumeMeter { interface IUnknown; }
uuid(6a93130e-1d53-41d1-a9cf-e758800bb179)
]
coclass AudioReverb { interface IUnknown; }
+
+[
+ helpstring("XACT 31 Class"),
+ threading(both),
+ uuid(962f5027-99be-4692-a468-85802cf8de61)
+]
+coclass XACT31 { interface IUnknown; }
diff --git a/dlls/xaudio2_7/xaudio_dll.c b/dlls/xaudio2_7/xaudio_dll.c
index 5453d25..68fe955 100644
--- a/dlls/xaudio2_7/xaudio_dll.c
+++ b/dlls/xaudio2_7/xaudio_dll.c
@@ -1175,9 +1175,13 @@ static HRESULT WINAPI IXAudio2Impl_QueryInterface(IXAudio2 *iface, REFIID riid,
if(IsEqualGUID(riid, &IID_IUnknown) ||
IsEqualGUID(riid, &IID_IXAudio2))
*ppvObject = &This->IXAudio2_iface;
- else if(IsEqualGUID(riid, &IID_IXAudio27))
- *ppvObject = &This->IXAudio27_iface;
- else
+ else if(IsEqualGUID(riid, &IID_IXAudio27)){
+ /* all xaudio versions before 28 share an IID */
+ if(This->version == 21 || This->version == 22)
+ *ppvObject = &This->IXAudio22_iface;
+ else
+ *ppvObject = &This->IXAudio27_iface;
+ }else
*ppvObject = NULL;
if(*ppvObject){
@@ -2304,6 +2308,7 @@ static HRESULT WINAPI XAudio2CF_CreateInstance(IClassFactory *iface, IUnknown *p
if(!object)
return E_OUTOFMEMORY;
+ object->IXAudio22_iface.lpVtbl = &XAudio22_Vtbl;
object->IXAudio27_iface.lpVtbl = &XAudio27_Vtbl;
object->IXAudio2_iface.lpVtbl = &XAudio2_Vtbl;
object->IXAudio23MasteringVoice_iface.lpVtbl = &XAudio23MasteringVoice_Vtbl;
@@ -2460,7 +2465,11 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, void **ppv)
TRACE("(%s, %s, %p)\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
- if IsEqualGUID(rclsid, &CLSID_XAudio23){
+ if IsEqualGUID(rclsid, &CLSID_XAudio21){
+ factory = make_xaudio2_factory(21);
+ }else if IsEqualGUID(rclsid, &CLSID_XAudio22){
+ factory = make_xaudio2_factory(22);
+ }else if IsEqualGUID(rclsid, &CLSID_XAudio23){
factory = make_xaudio2_factory(23);
}else if(IsEqualGUID(rclsid, &CLSID_XAudio24)){
factory = make_xaudio2_factory(24);
diff --git a/dlls/xaudio2_7/xaudio_private.h b/dlls/xaudio2_7/xaudio_private.h
index 5a0fcdf..91966ca 100644
--- a/dlls/xaudio2_7/xaudio_private.h
+++ b/dlls/xaudio2_7/xaudio_private.h
@@ -92,6 +92,7 @@ typedef struct _XA2SubmixImpl {
} XA2SubmixImpl;
struct _IXAudio2Impl {
+ IXAudio22 IXAudio22_iface;
IXAudio27 IXAudio27_iface;
IXAudio2 IXAudio2_iface;
IXAudio23MasteringVoice IXAudio23MasteringVoice_iface;
@@ -136,3 +137,5 @@ extern const IXAudio27Vtbl XAudio27_Vtbl DECLSPEC_HIDDEN;
extern const IXAudio23SourceVoiceVtbl XAudio23SourceVoice_Vtbl DECLSPEC_HIDDEN;
extern const IXAudio23SubmixVoiceVtbl XAudio23SubmixVoice_Vtbl DECLSPEC_HIDDEN;
extern const IXAudio23MasteringVoiceVtbl XAudio23MasteringVoice_Vtbl DECLSPEC_HIDDEN;
+
+extern const IXAudio22Vtbl XAudio22_Vtbl DECLSPEC_HIDDEN;
diff --git a/include/xaudio2.idl b/include/xaudio2.idl
index 5de6622..bd79718 100644
--- a/include/xaudio2.idl
+++ b/include/xaudio2.idl
@@ -31,6 +31,13 @@ coclass XAudio2 {
}
[
+ uuid(b802058a-464a-42db-bc10-b650d6f2586a)
+]
+coclass XAudio22 {
+ interface IUnknown;
+}
+
+[
uuid(4c5e637a-16c7-4de3-9c46-5ed22181962d)
]
coclass XAudio23 {
@@ -149,6 +156,23 @@ typedef struct XAUDIO2_PERFORMANCE_DATA
UINT32 ActiveXmaStreams;
} XAUDIO2_PERFORMANCE_DATA;
+typedef struct XAUDIO22_PERFORMANCE_DATA
+{
+ UINT64 AudioCyclesSinceLastQuery;
+ UINT64 TotalCyclesSinceLastQuery;
+ UINT32 MinimumCyclesPerQuantum;
+ UINT32 MaximumCyclesPerQuantum;
+ UINT32 MemoryUsageInBytes;
+ UINT32 CurrentLatencyInSamples;
+ UINT32 GlitchesSinceEngineStarted;
+ UINT32 ActiveSourceVoiceCount;
+ UINT32 TotalSourceVoiceCount;
+ UINT32 ActiveSubmixVoiceCount;
+ UINT32 TotalSubmixVoiceCount;
+ UINT32 ActiveXmaSourceVoices;
+ UINT32 ActiveXmaStreams;
+} XAUDIO22_PERFORMANCE_DATA;
+
typedef enum XAUDIO2_DEVICE_ROLE
{
NotDefaultDevice = 0x0,
@@ -612,6 +636,67 @@ typedef struct XAUDIO2_DEBUG_CONFIGURATION
[
object,
+ uuid(8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb), /* all versions before 28 share IID_IXAudio */
+]
+/* XAudio2 2.2's IXAudio2 interface. Actually called IXAudio2 in the Jun 2010
+ * DX SDK */
+interface IXAudio22 : IUnknown
+{
+ HRESULT GetDeviceCount([out] UINT32* pCount);
+
+ HRESULT GetDeviceDetails(
+ [in] UINT32 Index,
+ [out] XAUDIO2_DEVICE_DETAILS* pDeviceDetails);
+
+ HRESULT Initialize(
+ [in, defaultvalue(0)] UINT32 Flags,
+ [in, defaultvalue(XAUDIO2_DEFAULT_PROCESSOR)] XAUDIO2_PROCESSOR XAudio2Processor);
+
+ HRESULT RegisterForCallbacks([in] IXAudio2EngineCallback* pCallback);
+
+ void UnregisterForCallbacks([in] IXAudio2EngineCallback* pCallback);
+
+ HRESULT CreateSourceVoice(
+ [out] IXAudio2SourceVoice** ppSourceVoice,
+ [in] const WAVEFORMATEX* pSourceFormat,
+ [in, defaultvalue(0)] UINT32 Flags,
+ [in, defaultvalue(XAUDIO2_DEFAULT_FREQ_RATIO)] float MaxFrequencyRatio,
+ [in, defaultvalue(NULL)] IXAudio2VoiceCallback* pCallback,
+ [in, defaultvalue(NULL)] const XAUDIO2_VOICE_SENDS* pSendList,
+ [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain);
+
+ HRESULT CreateSubmixVoice(
+ [out] IXAudio2SubmixVoice** ppSubmixVoice,
+ [in] UINT32 InputChannels,
+ [in] UINT32 InputSampleRate,
+ [in, defaultvalue(0)] UINT32 Flags,
+ [in, defaultvalue(0)] UINT32 ProcessingStage,
+ [in, defaultvalue(NULL)] const XAUDIO2_VOICE_SENDS* pSendList,
+ [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain);
+
+ HRESULT CreateMasteringVoice(
+ [out] IXAudio2MasteringVoice** ppMasteringVoice,
+ [in, defaultvalue(XAUDIO2_DEFAULT_CHANNELS)] UINT32 InputChannels,
+ [in, defaultvalue(XAUDIO2_DEFAULT_SAMPLERATE)] UINT32 InputSampleRate,
+ [in, defaultvalue(0)] UINT32 Flags,
+ [in, defaultvalue(0)] UINT32 DeviceIndex,
+ [in, defaultvalue(NULL)] const XAUDIO2_EFFECT_CHAIN* pEffectChain);
+
+ HRESULT StartEngine();
+
+ void StopEngine();
+
+ HRESULT CommitChanges([in] UINT32 OperationSet);
+
+ void GetPerformanceData([out] XAUDIO22_PERFORMANCE_DATA* pPerfData);
+
+ [local] void SetDebugConfiguration(
+ [in] const XAUDIO2_DEBUG_CONFIGURATION* pDebugConfiguration,
+ [in, defaultvalue(NULL)] void* pReserved);
+}
+
+[
+ object,
uuid(8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb),
]
/* XAudio2 2.7's IXAudio2 interface. Actually called IXAudio2 in the Jun 2010
--
2.6.0
More information about the wine-patches
mailing list