Skip to content
Snippets Groups Projects
Unverified Commit 532dda04 authored by bunnei's avatar bunnei Committed by GitHub
Browse files

Merge pull request #2176 from lioncash/com

audio_core/cubeb_sink: Ensure COM is initialized on Windows prior to calling cubeb_init
parents 42f7c110 1068c1b0
No related branches found
No related tags found
No related merge requests found
...@@ -12,6 +12,10 @@ ...@@ -12,6 +12,10 @@
#include "common/ring_buffer.h" #include "common/ring_buffer.h"
#include "core/settings.h" #include "core/settings.h"
#ifdef _MSC_VER
#include <objbase.h>
#endif
namespace AudioCore { namespace AudioCore {
class CubebSinkStream final : public SinkStream { class CubebSinkStream final : public SinkStream {
...@@ -108,6 +112,11 @@ private: ...@@ -108,6 +112,11 @@ private:
}; };
CubebSink::CubebSink(std::string_view target_device_name) { CubebSink::CubebSink(std::string_view target_device_name) {
// Cubeb requires COM to be initialized on the thread calling cubeb_init on Windows
#ifdef _MSC_VER
com_init_result = CoInitializeEx(nullptr, COINIT_MULTITHREADED);
#endif
if (cubeb_init(&ctx, "yuzu", nullptr) != CUBEB_OK) { if (cubeb_init(&ctx, "yuzu", nullptr) != CUBEB_OK) {
LOG_CRITICAL(Audio_Sink, "cubeb_init failed"); LOG_CRITICAL(Audio_Sink, "cubeb_init failed");
return; return;
...@@ -142,6 +151,12 @@ CubebSink::~CubebSink() { ...@@ -142,6 +151,12 @@ CubebSink::~CubebSink() {
} }
cubeb_destroy(ctx); cubeb_destroy(ctx);
#ifdef _MSC_VER
if (SUCCEEDED(com_init_result)) {
CoUninitialize();
}
#endif
} }
SinkStream& CubebSink::AcquireSinkStream(u32 sample_rate, u32 num_channels, SinkStream& CubebSink::AcquireSinkStream(u32 sample_rate, u32 num_channels,
......
...@@ -25,6 +25,10 @@ private: ...@@ -25,6 +25,10 @@ private:
cubeb* ctx{}; cubeb* ctx{};
cubeb_devid output_device{}; cubeb_devid output_device{};
std::vector<SinkStreamPtr> sink_streams; std::vector<SinkStreamPtr> sink_streams;
#ifdef _MSC_VER
u32 com_init_result = 0;
#endif
}; };
std::vector<std::string> ListCubebSinkDevices(); std::vector<std::string> ListCubebSinkDevices();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment