diff options
| -rw-r--r-- | src/audio_core/sink/cubeb_sink.cpp | 20 |
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) { | |||
| 329 | u32 GetCubebLatency() { | 339 | u32 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; |