diff options
author | Kloen Lansfiel <kloen@outlawkiwi.com> | 2017-01-26 04:33:26 +0100 |
---|---|---|
committer | Sebastian Valle <subv2112@gmail.com> | 2017-01-26 04:33:26 +0100 |
commit | f8523699864b6000572affaa0e36d9a4d89ffce6 (patch) | |
tree | 952a96e11d4efe860272ea7a47ebbee896fb5d61 /src/audio_core/sdl2_sink.cpp | |
parent | Merge pull request #2434 from mailwl/nfc-amiibo (diff) | |
download | yuzu-f8523699864b6000572affaa0e36d9a4d89ffce6.tar yuzu-f8523699864b6000572affaa0e36d9a4d89ffce6.tar.gz yuzu-f8523699864b6000572affaa0e36d9a4d89ffce6.tar.bz2 yuzu-f8523699864b6000572affaa0e36d9a4d89ffce6.tar.lz yuzu-f8523699864b6000572affaa0e36d9a4d89ffce6.tar.xz yuzu-f8523699864b6000572affaa0e36d9a4d89ffce6.tar.zst yuzu-f8523699864b6000572affaa0e36d9a4d89ffce6.zip |
Diffstat (limited to 'src/audio_core/sdl2_sink.cpp')
-rw-r--r-- | src/audio_core/sdl2_sink.cpp | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/src/audio_core/sdl2_sink.cpp b/src/audio_core/sdl2_sink.cpp index 4b66cd826..933c5f16d 100644 --- a/src/audio_core/sdl2_sink.cpp +++ b/src/audio_core/sdl2_sink.cpp @@ -4,12 +4,12 @@ #include <list> #include <numeric> -#include <vector> #include <SDL.h> #include "audio_core/audio_core.h" #include "audio_core/sdl2_sink.h" #include "common/assert.h" #include "common/logging/log.h" +#include "core/settings.h" namespace AudioCore { @@ -42,10 +42,24 @@ SDL2Sink::SDL2Sink() : impl(std::make_unique<Impl>()) { SDL_AudioSpec obtained_audiospec; SDL_zero(obtained_audiospec); - impl->audio_device_id = - SDL_OpenAudioDevice(nullptr, false, &desired_audiospec, &obtained_audiospec, 0); + int device_count = SDL_GetNumAudioDevices(0); + device_list.clear(); + for (int i = 0; i < device_count; ++i) { + device_list.push_back(SDL_GetAudioDeviceName(i, 0)); + } + + const char* device = nullptr; + + if (device_count >= 1 && Settings::values.audio_device_id != "auto" && + !Settings::values.audio_device_id.empty()) { + device = Settings::values.audio_device_id.c_str(); + } + + impl->audio_device_id = SDL_OpenAudioDevice(device, false, &desired_audiospec, + &obtained_audiospec, SDL_AUDIO_ALLOW_ANY_CHANGE); if (impl->audio_device_id <= 0) { - LOG_CRITICAL(Audio_Sink, "SDL_OpenAudioDevice failed with: %s", SDL_GetError()); + LOG_CRITICAL(Audio_Sink, "SDL_OpenAudioDevice failed with code %d for device \"%s\"", + impl->audio_device_id, Settings::values.audio_device_id.c_str()); return; } @@ -69,6 +83,10 @@ unsigned int SDL2Sink::GetNativeSampleRate() const { return impl->sample_rate; } +std::vector<std::string> SDL2Sink::GetDeviceList() const { + return device_list; +} + void SDL2Sink::EnqueueSamples(const s16* samples, size_t sample_count) { if (impl->audio_device_id <= 0) return; @@ -96,6 +114,10 @@ size_t SDL2Sink::SamplesInQueue() const { return total_size; } +void SDL2Sink::SetDevice(int device_id) { + this->device_id = device_id; +} + void SDL2Sink::Impl::Callback(void* impl_, u8* buffer, int buffer_size_in_bytes) { Impl* impl = reinterpret_cast<Impl*>(impl_); |