diff options
Diffstat (limited to 'src/audio_core')
| -rw-r--r-- | src/audio_core/audio_renderer.h | 14 | ||||
| -rw-r--r-- | src/audio_core/cubeb_sink.cpp | 15 | ||||
| -rw-r--r-- | src/audio_core/cubeb_sink.h | 4 |
3 files changed, 27 insertions, 6 deletions
diff --git a/src/audio_core/audio_renderer.h b/src/audio_core/audio_renderer.h index 201ec7a3c..b2e5d336c 100644 --- a/src/audio_core/audio_renderer.h +++ b/src/audio_core/audio_renderer.h | |||
| @@ -46,16 +46,18 @@ struct AudioRendererParameter { | |||
| 46 | u32_le sample_rate; | 46 | u32_le sample_rate; |
| 47 | u32_le sample_count; | 47 | u32_le sample_count; |
| 48 | u32_le mix_buffer_count; | 48 | u32_le mix_buffer_count; |
| 49 | u32_le unknown_c; | 49 | u32_le submix_count; |
| 50 | u32_le voice_count; | 50 | u32_le voice_count; |
| 51 | u32_le sink_count; | 51 | u32_le sink_count; |
| 52 | u32_le effect_count; | 52 | u32_le effect_count; |
| 53 | u32_le unknown_1c; | 53 | u32_le performance_frame_count; |
| 54 | u8 unknown_20; | 54 | u8 is_voice_drop_enabled; |
| 55 | INSERT_PADDING_BYTES(3); | 55 | u8 unknown_21; |
| 56 | u8 unknown_22; | ||
| 57 | u8 execution_mode; | ||
| 56 | u32_le splitter_count; | 58 | u32_le splitter_count; |
| 57 | u32_le unknown_2c; | 59 | u32_le num_splitter_send_channels; |
| 58 | INSERT_PADDING_WORDS(1); | 60 | u32_le unknown_30; |
| 59 | u32_le revision; | 61 | u32_le revision; |
| 60 | }; | 62 | }; |
| 61 | static_assert(sizeof(AudioRendererParameter) == 52, "AudioRendererParameter is an invalid size"); | 63 | static_assert(sizeof(AudioRendererParameter) == 52, "AudioRendererParameter is an invalid size"); |
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 @@ | |||
| 12 | #include "common/ring_buffer.h" | 12 | #include "common/ring_buffer.h" |
| 13 | #include "core/settings.h" | 13 | #include "core/settings.h" |
| 14 | 14 | ||
| 15 | #ifdef _MSC_VER | ||
| 16 | #include <objbase.h> | ||
| 17 | #endif | ||
| 18 | |||
| 15 | namespace AudioCore { | 19 | namespace AudioCore { |
| 16 | 20 | ||
| 17 | class CubebSinkStream final : public SinkStream { | 21 | class CubebSinkStream final : public SinkStream { |
| @@ -108,6 +112,11 @@ private: | |||
| 108 | }; | 112 | }; |
| 109 | 113 | ||
| 110 | CubebSink::CubebSink(std::string_view target_device_name) { | 114 | CubebSink::CubebSink(std::string_view target_device_name) { |
| 115 | // Cubeb requires COM to be initialized on the thread calling cubeb_init on Windows | ||
| 116 | #ifdef _MSC_VER | ||
| 117 | com_init_result = CoInitializeEx(nullptr, COINIT_MULTITHREADED); | ||
| 118 | #endif | ||
| 119 | |||
| 111 | if (cubeb_init(&ctx, "yuzu", nullptr) != CUBEB_OK) { | 120 | if (cubeb_init(&ctx, "yuzu", nullptr) != CUBEB_OK) { |
| 112 | LOG_CRITICAL(Audio_Sink, "cubeb_init failed"); | 121 | LOG_CRITICAL(Audio_Sink, "cubeb_init failed"); |
| 113 | return; | 122 | return; |
| @@ -142,6 +151,12 @@ CubebSink::~CubebSink() { | |||
| 142 | } | 151 | } |
| 143 | 152 | ||
| 144 | cubeb_destroy(ctx); | 153 | cubeb_destroy(ctx); |
| 154 | |||
| 155 | #ifdef _MSC_VER | ||
| 156 | if (SUCCEEDED(com_init_result)) { | ||
| 157 | CoUninitialize(); | ||
| 158 | } | ||
| 159 | #endif | ||
| 145 | } | 160 | } |
| 146 | 161 | ||
| 147 | SinkStream& CubebSink::AcquireSinkStream(u32 sample_rate, u32 num_channels, | 162 | 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: | |||
| 25 | cubeb* ctx{}; | 25 | cubeb* ctx{}; |
| 26 | cubeb_devid output_device{}; | 26 | cubeb_devid output_device{}; |
| 27 | std::vector<SinkStreamPtr> sink_streams; | 27 | std::vector<SinkStreamPtr> sink_streams; |
| 28 | |||
| 29 | #ifdef _MSC_VER | ||
| 30 | u32 com_init_result = 0; | ||
| 31 | #endif | ||
| 28 | }; | 32 | }; |
| 29 | 33 | ||
| 30 | std::vector<std::string> ListCubebSinkDevices(); | 34 | std::vector<std::string> ListCubebSinkDevices(); |