From 53b2e19d96dfacb48963e0fcd75884feed634cc8 Mon Sep 17 00:00:00 2001 From: raven02 Date: Mon, 25 Jul 2016 08:25:02 +0800 Subject: [PATCH] Audio : allow XAudio2 to run its own thread (#1980) --- rpcs3/Emu/Audio/XAudio2/XAudio27Thread.cpp | 3 +++ rpcs3/Emu/Audio/XAudio2/XAudio28Thread.cpp | 11 +++++++++++ 2 files changed, 14 insertions(+) diff --git a/rpcs3/Emu/Audio/XAudio2/XAudio27Thread.cpp b/rpcs3/Emu/Audio/XAudio2/XAudio27Thread.cpp index 2f16e00233..4c161788ec 100644 --- a/rpcs3/Emu/Audio/XAudio2/XAudio27Thread.cpp +++ b/rpcs3/Emu/Audio/XAudio2/XAudio27Thread.cpp @@ -62,6 +62,7 @@ void XAudio2Thread::xa27_destroy() { s_tls_xaudio2_instance->StopEngine(); s_tls_xaudio2_instance->Release(); + CoUninitialize(); } CoUninitialize(); @@ -117,6 +118,8 @@ void XAudio2Thread::xa27_open() if (FAILED(hr)) { LOG_ERROR(GENERAL, "XAudio2Thread : CreateSourceVoice() failed(0x%08x)", (u32)hr); + s_tls_xaudio2_instance->Release(); + CoUninitialize(); Emu.Pause(); return; } diff --git a/rpcs3/Emu/Audio/XAudio2/XAudio28Thread.cpp b/rpcs3/Emu/Audio/XAudio2/XAudio28Thread.cpp index a279a0d552..7ad53533e4 100644 --- a/rpcs3/Emu/Audio/XAudio2/XAudio28Thread.cpp +++ b/rpcs3/Emu/Audio/XAudio2/XAudio28Thread.cpp @@ -20,6 +20,14 @@ void XAudio2Thread::xa28_init(void* module) HRESULT hr = S_OK; + hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED); // allow Xaudio2 run in its own thread + if (FAILED(hr)) + { + LOG_ERROR(GENERAL, "XAudio2Thread : CoInitializeEx() failed(0x%08x)", (u32)hr); + Emu.Pause(); + return; + } + hr = create(&s_tls_xaudio2_instance, 0, XAUDIO2_DEFAULT_PROCESSOR); if (FAILED(hr)) { @@ -56,6 +64,7 @@ void XAudio2Thread::xa28_destroy() { s_tls_xaudio2_instance->StopEngine(); s_tls_xaudio2_instance->Release(); + CoUninitialize(); } } @@ -109,6 +118,8 @@ void XAudio2Thread::xa28_open() if (FAILED(hr)) { LOG_ERROR(GENERAL, "XAudio2Thread : CreateSourceVoice() failed(0x%08x)", (u32)hr); + s_tls_xaudio2_instance->Release(); + CoUninitialize(); Emu.Pause(); return; }