Module: wine Branch: master Commit: 996e706ad346dc7fd61dc9856764167dc1592712 URL: https://source.winehq.org/git/wine.git/?a=commit;h=996e706ad346dc7fd61dc9856...
Author: Vijay Kiran Kamuju infyquest@gmail.com Date: Sat Jul 18 22:44:31 2020 +0200
xactengine3_7: Implement IXACT3Engine::CreateStreamingWaveBank.
Based on patch from Ethan Lee.
Signed-off-by: Vijay Kiran Kamuju infyquest@gmail.com Signed-off-by: Alistair Leslie-Hughes leslie_alistair@hotmail.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/xactengine3_7/xact_dll.c | 43 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 2 deletions(-)
diff --git a/dlls/xactengine3_7/xact_dll.c b/dlls/xactengine3_7/xact_dll.c index 43d2833cd7..dc4d9c01ac 100644 --- a/dlls/xactengine3_7/xact_dll.c +++ b/dlls/xactengine3_7/xact_dll.c @@ -690,8 +690,47 @@ static HRESULT WINAPI IXACT3EngineImpl_CreateStreamingWaveBank(IXACT3Engine *ifa IXACT3WaveBank **ppWaveBank) { XACT3EngineImpl *This = impl_from_IXACT3Engine(iface); - FIXME("(%p)->(%p, %p): stub!\n", This, pParms, ppWaveBank); - return E_NOTIMPL; + FACTStreamingParameters fakeParms; + wrap_readfile_struct *fake; + XACT3WaveBankImpl *wb; + FACTWaveBank *fwb; + UINT ret; + + TRACE("(%p)->(%p, %p)\n", This, pParms, ppWaveBank); + + /* We have to wrap the file to fix up the callbacks! */ + fake = (wrap_readfile_struct*) CoTaskMemAlloc( + sizeof(wrap_readfile_struct)); + fake->engine = This; + fake->file = pParms->file; + fakeParms.file = fake; + fakeParms.flags = pParms->flags; + fakeParms.offset = pParms->offset; + fakeParms.packetSize = pParms->packetSize; + + ret = FACTAudioEngine_CreateStreamingWaveBank(This->fact_engine, &fakeParms, + &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 streaming WaveBank: %p\n", wb); + + return S_OK; }
static HRESULT WINAPI IXACT3EngineImpl_PrepareInMemoryWave(IXACT3Engine *iface,