summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar liamwhite2023-02-09 22:14:33 -0500
committerGravatar GitHub2023-02-09 22:14:33 -0500
commitc0b36c2d268f9fb25e88e1356530b95fbbc7656f (patch)
tree5d0f35f4bf0978168cfb6c17c0c05673d09330e2
parentMerge pull request #9749 from ameerj/pr9559-partial-revert (diff)
parentaudio: cubeb: Fix yuzu crashing when it test for latency (diff)
downloadyuzu-c0b36c2d268f9fb25e88e1356530b95fbbc7656f.tar.gz
yuzu-c0b36c2d268f9fb25e88e1356530b95fbbc7656f.tar.xz
yuzu-c0b36c2d268f9fb25e88e1356530b95fbbc7656f.zip
Merge pull request #9758 from german77/multi_audio
audio: cubeb: Fix yuzu crashing when it test for latency
-rw-r--r--src/audio_core/sink/cubeb_sink.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/audio_core/sink/cubeb_sink.cpp b/src/audio_core/sink/cubeb_sink.cpp
index 32c1b1cb3..9133f5388 100644
--- a/src/audio_core/sink/cubeb_sink.cpp
+++ b/src/audio_core/sink/cubeb_sink.cpp
@@ -302,11 +302,21 @@ std::vector<std::string> ListCubebSinkDevices(bool capture) {
302 std::vector<std::string> device_list; 302 std::vector<std::string> device_list;
303 cubeb* ctx; 303 cubeb* ctx;
304 304
305#ifdef _WIN32
306 auto com_init_result = CoInitializeEx(nullptr, COINIT_MULTITHREADED);
307#endif
308
305 if (cubeb_init(&ctx, "yuzu Device Enumerator", nullptr) != CUBEB_OK) { 309 if (cubeb_init(&ctx, "yuzu Device Enumerator", nullptr) != CUBEB_OK) {
306 LOG_CRITICAL(Audio_Sink, "cubeb_init failed"); 310 LOG_CRITICAL(Audio_Sink, "cubeb_init failed");
307 return {}; 311 return {};
308 } 312 }
309 313
314#ifdef _WIN32
315 if (SUCCEEDED(com_init_result)) {
316 CoUninitialize();
317 }
318#endif
319
310 auto type{capture ? CUBEB_DEVICE_TYPE_INPUT : CUBEB_DEVICE_TYPE_OUTPUT}; 320 auto type{capture ? CUBEB_DEVICE_TYPE_INPUT : CUBEB_DEVICE_TYPE_OUTPUT};
311 cubeb_device_collection collection; 321 cubeb_device_collection collection;
312 if (cubeb_enumerate_devices(ctx, type, &collection) != CUBEB_OK) { 322 if (cubeb_enumerate_devices(ctx, type, &collection) != CUBEB_OK) {
@@ -329,12 +339,22 @@ std::vector<std::string> ListCubebSinkDevices(bool capture) {
329u32 GetCubebLatency() { 339u32 GetCubebLatency() {
330 cubeb* ctx; 340 cubeb* ctx;
331 341
342#ifdef _WIN32
343 auto com_init_result = CoInitializeEx(nullptr, COINIT_MULTITHREADED);
344#endif
345
332 if (cubeb_init(&ctx, "yuzu Latency Getter", nullptr) != CUBEB_OK) { 346 if (cubeb_init(&ctx, "yuzu Latency Getter", nullptr) != CUBEB_OK) {
333 LOG_CRITICAL(Audio_Sink, "cubeb_init failed"); 347 LOG_CRITICAL(Audio_Sink, "cubeb_init failed");
334 // Return a large latency so we choose SDL instead. 348 // Return a large latency so we choose SDL instead.
335 return 10000u; 349 return 10000u;
336 } 350 }
337 351
352#ifdef _WIN32
353 if (SUCCEEDED(com_init_result)) {
354 CoUninitialize();
355 }
356#endif
357
338 cubeb_stream_params params{}; 358 cubeb_stream_params params{};
339 params.rate = TargetSampleRate; 359 params.rate = TargetSampleRate;
340 params.channels = 2; 360 params.channels = 2;