diff options
author | bunnei <bunneidev@gmail.com> | 2019-02-27 23:12:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-27 23:12:06 +0100 |
commit | 532dda0499a24750fbbe3da66085297b5dc4a9a7 (patch) | |
tree | 3e1acda7950a0713268a709068c8e5c9ab4f9b06 | |
parent | Merge pull request #2169 from lioncash/naming (diff) | |
parent | audio_core/cubeb_sink: Ensure COM is initialized on Windows prior to calling cubeb_init (diff) | |
download | yuzu-532dda0499a24750fbbe3da66085297b5dc4a9a7.tar yuzu-532dda0499a24750fbbe3da66085297b5dc4a9a7.tar.gz yuzu-532dda0499a24750fbbe3da66085297b5dc4a9a7.tar.bz2 yuzu-532dda0499a24750fbbe3da66085297b5dc4a9a7.tar.lz yuzu-532dda0499a24750fbbe3da66085297b5dc4a9a7.tar.xz yuzu-532dda0499a24750fbbe3da66085297b5dc4a9a7.tar.zst yuzu-532dda0499a24750fbbe3da66085297b5dc4a9a7.zip |
-rw-r--r-- | src/audio_core/cubeb_sink.cpp | 15 | ||||
-rw-r--r-- | src/audio_core/cubeb_sink.h | 4 |
2 files changed, 19 insertions, 0 deletions
diff --git a/src/audio_core/cubeb_sink.cpp b/src/audio_core/cubeb_sink.cpp index dc45dedd3..1da0b9f2a 100644 --- a/src/audio_core/cubeb_sink.cpp +++ b/src/audio_core/cubeb_sink.cpp @@ -12,6 +12,10 @@ #include "common/ring_buffer.h" #include "core/settings.h" +#ifdef _MSC_VER +#include <objbase.h> +#endif + namespace AudioCore { class CubebSinkStream final : public SinkStream { @@ -108,6 +112,11 @@ private: }; 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) { LOG_CRITICAL(Audio_Sink, "cubeb_init failed"); return; @@ -142,6 +151,12 @@ CubebSink::~CubebSink() { } cubeb_destroy(ctx); + +#ifdef _MSC_VER + if (SUCCEEDED(com_init_result)) { + CoUninitialize(); + } +#endif } SinkStream& CubebSink::AcquireSinkStream(u32 sample_rate, u32 num_channels, diff --git a/src/audio_core/cubeb_sink.h b/src/audio_core/cubeb_sink.h index efb9d1634..511df7bb1 100644 --- a/src/audio_core/cubeb_sink.h +++ b/src/audio_core/cubeb_sink.h @@ -25,6 +25,10 @@ private: cubeb* ctx{}; cubeb_devid output_device{}; std::vector<SinkStreamPtr> sink_streams; + +#ifdef _MSC_VER + u32 com_init_result = 0; +#endif }; std::vector<std::string> ListCubebSinkDevices(); |