xaudio2_2: Add compatibility implementation and forward to xaudio2_7.
Signed-off-by: Andrew Eikum <aeikum@codeweavers.com>
This commit is contained in:
parent
d25737b381
commit
831095ed93
|
@ -1374,6 +1374,7 @@ enable_xapofx1_1
|
||||||
enable_xapofx1_3
|
enable_xapofx1_3
|
||||||
enable_xapofx1_4
|
enable_xapofx1_4
|
||||||
enable_xapofx1_5
|
enable_xapofx1_5
|
||||||
|
enable_xaudio2_2
|
||||||
enable_xaudio2_3
|
enable_xaudio2_3
|
||||||
enable_xaudio2_4
|
enable_xaudio2_4
|
||||||
enable_xaudio2_5
|
enable_xaudio2_5
|
||||||
|
@ -17915,6 +17916,7 @@ wine_fn_config_dll xapofx1_1 enable_xapofx1_1
|
||||||
wine_fn_config_dll xapofx1_3 enable_xapofx1_3
|
wine_fn_config_dll xapofx1_3 enable_xapofx1_3
|
||||||
wine_fn_config_dll xapofx1_4 enable_xapofx1_4
|
wine_fn_config_dll xapofx1_4 enable_xapofx1_4
|
||||||
wine_fn_config_dll xapofx1_5 enable_xapofx1_5
|
wine_fn_config_dll xapofx1_5 enable_xapofx1_5
|
||||||
|
wine_fn_config_dll xaudio2_2 enable_xaudio2_2 clean
|
||||||
wine_fn_config_dll xaudio2_3 enable_xaudio2_3 clean
|
wine_fn_config_dll xaudio2_3 enable_xaudio2_3 clean
|
||||||
wine_fn_config_dll xaudio2_4 enable_xaudio2_4 clean
|
wine_fn_config_dll xaudio2_4 enable_xaudio2_4 clean
|
||||||
wine_fn_config_dll xaudio2_5 enable_xaudio2_5 clean
|
wine_fn_config_dll xaudio2_5 enable_xaudio2_5 clean
|
||||||
|
|
|
@ -3460,6 +3460,7 @@ WINE_CONFIG_DLL(xapofx1_1)
|
||||||
WINE_CONFIG_DLL(xapofx1_3)
|
WINE_CONFIG_DLL(xapofx1_3)
|
||||||
WINE_CONFIG_DLL(xapofx1_4)
|
WINE_CONFIG_DLL(xapofx1_4)
|
||||||
WINE_CONFIG_DLL(xapofx1_5)
|
WINE_CONFIG_DLL(xapofx1_5)
|
||||||
|
WINE_CONFIG_DLL(xaudio2_2,,[clean])
|
||||||
WINE_CONFIG_DLL(xaudio2_3,,[clean])
|
WINE_CONFIG_DLL(xaudio2_3,,[clean])
|
||||||
WINE_CONFIG_DLL(xaudio2_4,,[clean])
|
WINE_CONFIG_DLL(xaudio2_4,,[clean])
|
||||||
WINE_CONFIG_DLL(xaudio2_5,,[clean])
|
WINE_CONFIG_DLL(xaudio2_5,,[clean])
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
MODULE = xaudio2_2.dll
|
||||||
|
IMPORTS = ole32
|
||||||
|
|
||||||
|
C_SRCS = \
|
||||||
|
xaudio_dll.c
|
||||||
|
|
||||||
|
IDL_SRCS = xaudio_classes.idl
|
|
@ -0,0 +1,4 @@
|
||||||
|
@ stdcall -private DllCanUnloadNow()
|
||||||
|
@ stdcall -private DllGetClassObject(ptr ptr ptr) xaudio2_7.DllGetClassObject
|
||||||
|
@ stdcall -private DllRegisterServer()
|
||||||
|
@ stdcall -private DllUnregisterServer()
|
|
@ -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; }
|
|
@ -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);
|
||||||
|
}
|
|
@ -1183,3 +1183,255 @@ const IXAudio23MasteringVoiceVtbl XAudio23MasteringVoice_Vtbl = {
|
||||||
XA23M_GetOutputMatrix,
|
XA23M_GetOutputMatrix,
|
||||||
XA23M_DestroyVoice
|
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
|
||||||
|
};
|
||||||
|
|
|
@ -40,3 +40,10 @@ coclass AudioVolumeMeter { interface IUnknown; }
|
||||||
uuid(6a93130e-1d53-41d1-a9cf-e758800bb179)
|
uuid(6a93130e-1d53-41d1-a9cf-e758800bb179)
|
||||||
]
|
]
|
||||||
coclass AudioReverb { interface IUnknown; }
|
coclass AudioReverb { interface IUnknown; }
|
||||||
|
|
||||||
|
[
|
||||||
|
helpstring("XACT 31 Class"),
|
||||||
|
threading(both),
|
||||||
|
uuid(962f5027-99be-4692-a468-85802cf8de61)
|
||||||
|
]
|
||||||
|
coclass XACT31 { interface IUnknown; }
|
||||||
|
|
|
@ -1175,9 +1175,13 @@ static HRESULT WINAPI IXAudio2Impl_QueryInterface(IXAudio2 *iface, REFIID riid,
|
||||||
if(IsEqualGUID(riid, &IID_IUnknown) ||
|
if(IsEqualGUID(riid, &IID_IUnknown) ||
|
||||||
IsEqualGUID(riid, &IID_IXAudio2))
|
IsEqualGUID(riid, &IID_IXAudio2))
|
||||||
*ppvObject = &This->IXAudio2_iface;
|
*ppvObject = &This->IXAudio2_iface;
|
||||||
else if(IsEqualGUID(riid, &IID_IXAudio27))
|
else if(IsEqualGUID(riid, &IID_IXAudio27)){
|
||||||
*ppvObject = &This->IXAudio27_iface;
|
/* all xaudio versions before 28 share an IID */
|
||||||
else
|
if(This->version == 21 || This->version == 22)
|
||||||
|
*ppvObject = &This->IXAudio22_iface;
|
||||||
|
else
|
||||||
|
*ppvObject = &This->IXAudio27_iface;
|
||||||
|
}else
|
||||||
*ppvObject = NULL;
|
*ppvObject = NULL;
|
||||||
|
|
||||||
if(*ppvObject){
|
if(*ppvObject){
|
||||||
|
@ -2304,6 +2308,7 @@ static HRESULT WINAPI XAudio2CF_CreateInstance(IClassFactory *iface, IUnknown *p
|
||||||
if(!object)
|
if(!object)
|
||||||
return E_OUTOFMEMORY;
|
return E_OUTOFMEMORY;
|
||||||
|
|
||||||
|
object->IXAudio22_iface.lpVtbl = &XAudio22_Vtbl;
|
||||||
object->IXAudio27_iface.lpVtbl = &XAudio27_Vtbl;
|
object->IXAudio27_iface.lpVtbl = &XAudio27_Vtbl;
|
||||||
object->IXAudio2_iface.lpVtbl = &XAudio2_Vtbl;
|
object->IXAudio2_iface.lpVtbl = &XAudio2_Vtbl;
|
||||||
object->IXAudio23MasteringVoice_iface.lpVtbl = &XAudio23MasteringVoice_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);
|
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);
|
factory = make_xaudio2_factory(23);
|
||||||
}else if(IsEqualGUID(rclsid, &CLSID_XAudio24)){
|
}else if(IsEqualGUID(rclsid, &CLSID_XAudio24)){
|
||||||
factory = make_xaudio2_factory(24);
|
factory = make_xaudio2_factory(24);
|
||||||
|
|
|
@ -92,6 +92,7 @@ typedef struct _XA2SubmixImpl {
|
||||||
} XA2SubmixImpl;
|
} XA2SubmixImpl;
|
||||||
|
|
||||||
struct _IXAudio2Impl {
|
struct _IXAudio2Impl {
|
||||||
|
IXAudio22 IXAudio22_iface;
|
||||||
IXAudio27 IXAudio27_iface;
|
IXAudio27 IXAudio27_iface;
|
||||||
IXAudio2 IXAudio2_iface;
|
IXAudio2 IXAudio2_iface;
|
||||||
IXAudio23MasteringVoice IXAudio23MasteringVoice_iface;
|
IXAudio23MasteringVoice IXAudio23MasteringVoice_iface;
|
||||||
|
@ -136,3 +137,5 @@ extern const IXAudio27Vtbl XAudio27_Vtbl DECLSPEC_HIDDEN;
|
||||||
extern const IXAudio23SourceVoiceVtbl XAudio23SourceVoice_Vtbl DECLSPEC_HIDDEN;
|
extern const IXAudio23SourceVoiceVtbl XAudio23SourceVoice_Vtbl DECLSPEC_HIDDEN;
|
||||||
extern const IXAudio23SubmixVoiceVtbl XAudio23SubmixVoice_Vtbl DECLSPEC_HIDDEN;
|
extern const IXAudio23SubmixVoiceVtbl XAudio23SubmixVoice_Vtbl DECLSPEC_HIDDEN;
|
||||||
extern const IXAudio23MasteringVoiceVtbl XAudio23MasteringVoice_Vtbl DECLSPEC_HIDDEN;
|
extern const IXAudio23MasteringVoiceVtbl XAudio23MasteringVoice_Vtbl DECLSPEC_HIDDEN;
|
||||||
|
|
||||||
|
extern const IXAudio22Vtbl XAudio22_Vtbl DECLSPEC_HIDDEN;
|
||||||
|
|
|
@ -30,6 +30,13 @@ coclass XAudio2 {
|
||||||
interface IUnknown;
|
interface IUnknown;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[
|
||||||
|
uuid(b802058a-464a-42db-bc10-b650d6f2586a)
|
||||||
|
]
|
||||||
|
coclass XAudio22 {
|
||||||
|
interface IUnknown;
|
||||||
|
}
|
||||||
|
|
||||||
[
|
[
|
||||||
uuid(4c5e637a-16c7-4de3-9c46-5ed22181962d)
|
uuid(4c5e637a-16c7-4de3-9c46-5ed22181962d)
|
||||||
]
|
]
|
||||||
|
@ -149,6 +156,23 @@ typedef struct XAUDIO2_PERFORMANCE_DATA
|
||||||
UINT32 ActiveXmaStreams;
|
UINT32 ActiveXmaStreams;
|
||||||
} XAUDIO2_PERFORMANCE_DATA;
|
} 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
|
typedef enum XAUDIO2_DEVICE_ROLE
|
||||||
{
|
{
|
||||||
NotDefaultDevice = 0x0,
|
NotDefaultDevice = 0x0,
|
||||||
|
@ -610,6 +634,67 @@ typedef struct XAUDIO2_DEBUG_CONFIGURATION
|
||||||
BOOL LogTiming;
|
BOOL LogTiming;
|
||||||
} XAUDIO2_DEBUG_CONFIGURATION;
|
} 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,
|
object,
|
||||||
uuid(8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb),
|
uuid(8bcf1f58-9fe7-4583-8ac6-e2adc465c8bb),
|
||||||
|
|
Loading…
Reference in New Issue