Rebase against 1113f42aa748d9e0a27c4663b9d8de1237f95e73.

This commit is contained in:
Alistair Leslie-Hughes
2022-07-19 13:15:49 +10:00
parent cd8ca4d7d6
commit 7a2920aa2a
7 changed files with 19 additions and 139 deletions

View File

@@ -1,77 +0,0 @@
From 36d84a848bcffc5e3a2d0ab4c96fe0eaac68bbbc Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Fri, 22 Jan 2021 18:22:41 +1100
Subject: [PATCH 1/2] xactengine3.7: Delay Notication for WAVEBANKPREPARED
---
dlls/xactengine3_7/xact_dll.c | 40 +++++++++++++++++++++++++++++++++++
1 file changed, 40 insertions(+)
diff --git a/dlls/xactengine3_7/xact_dll.c b/dlls/xactengine3_7/xact_dll.c
index 281aecc154b..e3b6e32cd5a 100644
--- a/dlls/xactengine3_7/xact_dll.c
+++ b/dlls/xactengine3_7/xact_dll.c
@@ -883,6 +883,42 @@ static HRESULT WINAPI IXACT3EngineImpl_CreateSoundBank(IXACT3Engine *iface,
return S_OK;
}
+struct thread_data
+{
+ XACT3EngineImpl *engine;
+ XACT_NOTIFICATION note;
+};
+
+static DWORD WINAPI thread_notications(LPVOID data)
+{
+ struct thread_data *tdata = data;
+
+ Sleep(1000);
+
+ FIXME("Callback XACTNOTIFICATIONTYPE_WAVEBANKPREPARED (%p)\n", tdata->engine);
+
+ tdata->engine->notification_callback(&tdata->note);
+
+ CoTaskMemFree(data);
+ return 0;
+}
+
+static void send_wavebank_notification(XACT3EngineImpl *This, IXACT3WaveBank *wavebank)
+{
+ if (This->notification_callback)
+ {
+ HANDLE thread;
+ struct thread_data *tdata = CoTaskMemAlloc(sizeof(struct thread_data));
+
+ tdata->engine = This;
+ tdata->note.type = XACTNOTIFICATIONTYPE_WAVEBANKPREPARED;
+ tdata->note.wave.pWaveBank = wavebank;
+
+ thread = CreateThread(NULL, 0, thread_notications, tdata, 0, NULL);
+ CloseHandle(thread);
+ }
+}
+
static HRESULT WINAPI IXACT3EngineImpl_CreateInMemoryWaveBank(IXACT3Engine *iface,
const void* pvBuffer, DWORD dwSize, DWORD dwFlags,
DWORD dwAllocAttributes, IXACT3WaveBank **ppWaveBank)
@@ -915,6 +951,8 @@ static HRESULT WINAPI IXACT3EngineImpl_CreateInMemoryWaveBank(IXACT3Engine *ifac
wb->fact_wavebank = fwb;
*ppWaveBank = &wb->IXACT3WaveBank_iface;
+ send_wavebank_notification(This, &wb->IXACT3WaveBank_iface);
+
TRACE("Created in-memory WaveBank: %p\n", wb);
return S_OK;
@@ -963,6 +1001,8 @@ static HRESULT WINAPI IXACT3EngineImpl_CreateStreamingWaveBank(IXACT3Engine *ifa
wb->fact_wavebank = fwb;
*ppWaveBank = &wb->IXACT3WaveBank_iface;
+ send_wavebank_notification(This, &wb->IXACT3WaveBank_iface);
+
TRACE("Created streaming WaveBank: %p\n", wb);
return S_OK;
--
2.29.2

View File

@@ -1,3 +1,3 @@
# The actual fix will involve FAudio and wine changes.
Fixes: [50546] xactengine3_7: Send Notification after the Wavebank is created.
Disabled: True