Vijay Kiran Kamuju : xactengine3_7: Implement IXACT3Engine::CreateStreamingWaveBank.

Alexandre Julliard julliard at winehq.org
Thu Aug 6 16:33:43 CDT 2020


Module: wine
Branch: master
Commit: 996e706ad346dc7fd61dc9856764167dc1592712
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=996e706ad346dc7fd61dc9856764167dc1592712

Author: Vijay Kiran Kamuju <infyquest at 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 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 | 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,




More information about the wine-cvs mailing list