Vijay Kiran Kamuju : xactengine3_7: Implement IXACT3WaveBank Interface.
Alexandre Julliard
julliard at winehq.org
Thu Aug 6 16:33:43 CDT 2020
Module: wine
Branch: master
Commit: da2efd545b276b438e4318476a91549a843cb809
URL: https://source.winehq.org/git/wine.git/?a=commit;h=da2efd545b276b438e4318476a91549a843cb809
Author: Vijay Kiran Kamuju <infyquest at gmail.com>
Date: Sat Jul 18 22:36:55 2020 +0200
xactengine3_7: Implement IXACT3WaveBank Interface.
Based on patch from Ethan Lee.
Signed-off-by: Vijay Kiran Kamuju <infyquest at gmail.com>
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/xactengine3_7/xact_dll.c | 137 +++++++++++++++++++++++++++++++++++++++++-
1 file changed, 135 insertions(+), 2 deletions(-)
diff --git a/dlls/xactengine3_7/xact_dll.c b/dlls/xactengine3_7/xact_dll.c
index 52bf9e5210..43d2833cd7 100644
--- a/dlls/xactengine3_7/xact_dll.c
+++ b/dlls/xactengine3_7/xact_dll.c
@@ -318,6 +318,112 @@ static const IXACT3SoundBankVtbl XACT3SoundBank_Vtbl =
IXACT3SoundBankImpl_GetState
};
+typedef struct _XACT3WaveBankImpl {
+ IXACT3WaveBank IXACT3WaveBank_iface;
+
+ FACTWaveBank *fact_wavebank;
+} XACT3WaveBankImpl;
+
+static inline XACT3WaveBankImpl *impl_from_IXACT3WaveBank(IXACT3WaveBank *iface)
+{
+ return CONTAINING_RECORD(iface, XACT3WaveBankImpl, IXACT3WaveBank_iface);
+}
+
+static HRESULT WINAPI IXACT3WaveBankImpl_Destroy(IXACT3WaveBank *iface)
+{
+ XACT3WaveBankImpl *This = impl_from_IXACT3WaveBank(iface);
+ HRESULT hr;
+
+ TRACE("(%p)\n", This);
+
+ hr = FACTWaveBank_Destroy(This->fact_wavebank);
+ HeapFree(GetProcessHeap(), 0, This);
+ return hr;
+}
+
+static HRESULT WINAPI IXACT3WaveBankImpl_GetNumWaves(IXACT3WaveBank *iface,
+ XACTINDEX *pnNumWaves)
+{
+ XACT3WaveBankImpl *This = impl_from_IXACT3WaveBank(iface);
+
+ TRACE("(%p)->(%p)\n", This, pnNumWaves);
+
+ return FACTWaveBank_GetNumWaves(This->fact_wavebank, pnNumWaves);
+}
+
+static XACTINDEX WINAPI IXACT3WaveBankImpl_GetWaveIndex(IXACT3WaveBank *iface,
+ PCSTR szFriendlyName)
+{
+ XACT3WaveBankImpl *This = impl_from_IXACT3WaveBank(iface);
+
+ TRACE("(%p)->(%s)\n", This, szFriendlyName);
+
+ return FACTWaveBank_GetWaveIndex(This->fact_wavebank, szFriendlyName);
+}
+
+static HRESULT WINAPI IXACT3WaveBankImpl_GetWaveProperties(IXACT3WaveBank *iface,
+ XACTINDEX nWaveIndex, XACT_WAVE_PROPERTIES *pWaveProperties)
+{
+ XACT3WaveBankImpl *This = impl_from_IXACT3WaveBank(iface);
+
+ TRACE("(%p)->(%u, %p)\n", This, nWaveIndex, pWaveProperties);
+
+ return FACTWaveBank_GetWaveProperties(This->fact_wavebank, nWaveIndex,
+ (FACTWaveProperties*) pWaveProperties);
+}
+
+static HRESULT WINAPI IXACT3WaveBankImpl_Prepare(IXACT3WaveBank *iface,
+ XACTINDEX nWaveIndex, DWORD dwFlags, DWORD dwPlayOffset,
+ XACTLOOPCOUNT nLoopCount, IXACT3Wave** ppWave)
+{
+ XACT3WaveBankImpl *This = impl_from_IXACT3WaveBank(iface);
+ FIXME("(%p)->(0x%x, %u, 0x%x, %u, %p): stub!\n", This, nWaveIndex, dwFlags,
+ dwPlayOffset, nLoopCount, ppWave);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IXACT3WaveBankImpl_Play(IXACT3WaveBank *iface,
+ XACTINDEX nWaveIndex, DWORD dwFlags, DWORD dwPlayOffset,
+ XACTLOOPCOUNT nLoopCount, IXACT3Wave** ppWave)
+{
+ XACT3WaveBankImpl *This = impl_from_IXACT3WaveBank(iface);
+ FIXME("(%p)->(0x%x, %u, 0x%x, %u, %p): stub!\n", This, nWaveIndex, dwFlags, dwPlayOffset,
+ nLoopCount, ppWave);
+ return E_NOTIMPL;
+}
+
+static HRESULT WINAPI IXACT3WaveBankImpl_Stop(IXACT3WaveBank *iface,
+ XACTINDEX nWaveIndex, DWORD dwFlags)
+{
+ XACT3WaveBankImpl *This = impl_from_IXACT3WaveBank(iface);
+
+ TRACE("(%p)->(%u, %u)\n", This, nWaveIndex, dwFlags);
+
+ return FACTWaveBank_Stop(This->fact_wavebank, nWaveIndex, dwFlags);
+}
+
+static HRESULT WINAPI IXACT3WaveBankImpl_GetState(IXACT3WaveBank *iface,
+ DWORD *pdwState)
+{
+ XACT3WaveBankImpl *This = impl_from_IXACT3WaveBank(iface);
+
+ TRACE("(%p)->(%p)\n", This, pdwState);
+
+ return FACTWaveBank_GetState(This->fact_wavebank, pdwState);
+}
+
+static const IXACT3WaveBankVtbl XACT3WaveBank_Vtbl =
+{
+ IXACT3WaveBankImpl_Destroy,
+ IXACT3WaveBankImpl_GetNumWaves,
+ IXACT3WaveBankImpl_GetWaveIndex,
+ IXACT3WaveBankImpl_GetWaveProperties,
+ IXACT3WaveBankImpl_Prepare,
+ IXACT3WaveBankImpl_Play,
+ IXACT3WaveBankImpl_Stop,
+ IXACT3WaveBankImpl_GetState
+};
+
typedef struct _XACT3EngineImpl {
IXACT3Engine IXACT3Engine_iface;
@@ -547,9 +653,36 @@ static HRESULT WINAPI IXACT3EngineImpl_CreateInMemoryWaveBank(IXACT3Engine *ifac
DWORD dwAllocAttributes, IXACT3WaveBank **ppWaveBank)
{
XACT3EngineImpl *This = impl_from_IXACT3Engine(iface);
- FIXME("(%p)->(%p, %u, 0x%x, 0x%x, %p): stub!\n", This, pvBuffer, dwSize, dwFlags,
+ XACT3WaveBankImpl *wb;
+ FACTWaveBank *fwb;
+ UINT ret;
+
+ TRACE("(%p)->(%p, %u, 0x%x, 0x%x, %p)\n", This, pvBuffer, dwSize, dwFlags,
dwAllocAttributes, ppWaveBank);
- return E_NOTIMPL;
+
+ ret = FACTAudioEngine_CreateInMemoryWaveBank(This->fact_engine, pvBuffer,
+ dwSize, dwFlags, dwAllocAttributes, &fwb);
+ if(ret != 0)
+ {
+ ERR("Failed to CreateWaveBank: %d\n", ret);
+ return E_FAIL;
+ }
+
+ wb = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*wb));
+ if (!wb)
+ {
+ FACTWaveBank_Destroy(fwb);
+ ERR("Failed to allocate XACT3WaveBankImpl!");
+ return E_OUTOFMEMORY;
+ }
+
+ wb->IXACT3WaveBank_iface.lpVtbl = &XACT3WaveBank_Vtbl;
+ wb->fact_wavebank = fwb;
+ *ppWaveBank = (IXACT3WaveBank*)wb;
+
+ TRACE("Created in-memory WaveBank: %p\n", wb);
+
+ return S_OK;
}
static HRESULT WINAPI IXACT3EngineImpl_CreateStreamingWaveBank(IXACT3Engine *iface,
More information about the wine-cvs
mailing list