diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/alsa/audio_driver_alsa.cpp | 12 | ||||
| -rw-r--r-- | drivers/pulseaudio/audio_driver_pulseaudio.cpp | 12 | ||||
| -rw-r--r-- | drivers/wasapi/audio_driver_wasapi.cpp | 7 |
3 files changed, 27 insertions, 4 deletions
diff --git a/drivers/alsa/audio_driver_alsa.cpp b/drivers/alsa/audio_driver_alsa.cpp index 689f76389b..6095fef035 100644 --- a/drivers/alsa/audio_driver_alsa.cpp +++ b/drivers/alsa/audio_driver_alsa.cpp @@ -169,6 +169,18 @@ Error AudioDriverALSA::init() { return ERR_CANT_OPEN; } #endif + bool ver_ok = false; + String version = String::utf8(snd_asoundlib_version()); + Vector<String> ver_parts = version.split("."); + if (ver_parts.size() >= 2) { + ver_ok = ((ver_parts[0].to_int() == 1 && ver_parts[1].to_int() >= 1)) || (ver_parts[0].to_int() > 1); // 1.1.0 + } + print_verbose(vformat("ALSA %s detected.", version)); + if (!ver_ok) { + print_verbose("Unsupported ALSA library version!"); + return ERR_CANT_OPEN; + } + active.clear(); exit_thread.clear(); diff --git a/drivers/pulseaudio/audio_driver_pulseaudio.cpp b/drivers/pulseaudio/audio_driver_pulseaudio.cpp index 797ffd67fe..9ae74a8906 100644 --- a/drivers/pulseaudio/audio_driver_pulseaudio.cpp +++ b/drivers/pulseaudio/audio_driver_pulseaudio.cpp @@ -290,6 +290,18 @@ Error AudioDriverPulseAudio::init() { return ERR_CANT_OPEN; } #endif + bool ver_ok = false; + String version = String::utf8(pa_get_library_version()); + Vector<String> ver_parts = version.split("."); + if (ver_parts.size() >= 2) { + ver_ok = (ver_parts[0].to_int() >= 8); // 8.0.0 + } + print_verbose(vformat("PulseAudio %s detected.", version)); + if (!ver_ok) { + print_verbose("Unsupported PulseAudio library version!"); + return ERR_CANT_OPEN; + } + active.clear(); exit_thread.clear(); diff --git a/drivers/wasapi/audio_driver_wasapi.cpp b/drivers/wasapi/audio_driver_wasapi.cpp index 72ec0c19ab..805528b8c7 100644 --- a/drivers/wasapi/audio_driver_wasapi.cpp +++ b/drivers/wasapi/audio_driver_wasapi.cpp @@ -206,8 +206,6 @@ Error AudioDriverWASAPI::audio_device_init(AudioDeviceWASAPI *p_device, bool p_i IMMDeviceEnumerator *enumerator = nullptr; IMMDevice *output_device = nullptr; - CoInitialize(nullptr); - HRESULT hr = CoCreateInstance(CLSID_MMDeviceEnumerator, nullptr, CLSCTX_ALL, IID_IMMDeviceEnumerator, (void **)&enumerator); ERR_FAIL_COND_V(hr != S_OK, ERR_CANT_OPEN); @@ -582,8 +580,6 @@ PackedStringArray AudioDriverWASAPI::audio_device_get_list(bool p_input) { list.push_back(String("Default")); - CoInitialize(nullptr); - HRESULT hr = CoCreateInstance(CLSID_MMDeviceEnumerator, nullptr, CLSCTX_ALL, IID_IMMDeviceEnumerator, (void **)&enumerator); ERR_FAIL_COND_V(hr != S_OK, PackedStringArray()); @@ -702,6 +698,8 @@ void AudioDriverWASAPI::write_sample(WORD format_tag, int bits_per_sample, BYTE } void AudioDriverWASAPI::thread_func(void *p_udata) { + CoInitializeEx(nullptr, COINIT_MULTITHREADED); + AudioDriverWASAPI *ad = static_cast<AudioDriverWASAPI *>(p_udata); uint32_t avail_frames = 0; uint32_t write_ofs = 0; @@ -908,6 +906,7 @@ void AudioDriverWASAPI::thread_func(void *p_udata) { OS::get_singleton()->delay_usec(1000); } } + CoUninitialize(); } void AudioDriverWASAPI::start() { |
