diff options
| author | bunnei <bunneidev@gmail.com> | 2018-07-30 20:29:17 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-07-30 20:29:17 -0700 |
| commit | bf9c62bc76a2296c1a81cfc1b83aaf4028578901 (patch) | |
| tree | dad8906c597af3f579d4f72f4c9f493503c40665 /src/audio_core/sink_details.cpp | |
| parent | 420f8fb29e99cdef3c7338048e31723dc31bac55 (diff) | |
| parent | f437c11caf2c1afc0b7d0fdb808be10d7b1adfcf (diff) | |
Merge pull request #855 from bunnei/cubeb
Audio output backend based on cubeb
Diffstat (limited to 'src/audio_core/sink_details.cpp')
| -rw-r--r-- | src/audio_core/sink_details.cpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/audio_core/sink_details.cpp b/src/audio_core/sink_details.cpp new file mode 100644 index 000000000..955ba20fb --- /dev/null +++ b/src/audio_core/sink_details.cpp @@ -0,0 +1,44 @@ +// Copyright 2018 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include <algorithm> +#include <memory> +#include <string> +#include <vector> +#include "audio_core/null_sink.h" +#include "audio_core/sink_details.h" +#ifdef HAVE_CUBEB +#include "audio_core/cubeb_sink.h" +#endif +#include "common/logging/log.h" + +namespace AudioCore { + +// g_sink_details is ordered in terms of desirability, with the best choice at the top. +const std::vector<SinkDetails> g_sink_details = { +#ifdef HAVE_CUBEB + SinkDetails{"cubeb", &std::make_unique<CubebSink, std::string>, &ListCubebSinkDevices}, +#endif + SinkDetails{"null", &std::make_unique<NullSink, std::string>, + [] { return std::vector<std::string>{"null"}; }}, +}; + +const SinkDetails& GetSinkDetails(std::string sink_id) { + auto iter = + std::find_if(g_sink_details.begin(), g_sink_details.end(), + [sink_id](const auto& sink_detail) { return sink_detail.id == sink_id; }); + + if (sink_id == "auto" || iter == g_sink_details.end()) { + if (sink_id != "auto") { + LOG_ERROR(Audio, "AudioCore::SelectSink given invalid sink_id {}", sink_id); + } + // Auto-select. + // g_sink_details is ordered in terms of desirability, with the best choice at the front. + iter = g_sink_details.begin(); + } + + return *iter; +} + +} // namespace AudioCore |
