|
|
|
@ -37,10 +37,11 @@ public:
|
|
|
|
|
spec.callback = nullptr;
|
|
|
|
|
|
|
|
|
|
SDL_AudioSpec obtained;
|
|
|
|
|
if (output_device.empty())
|
|
|
|
|
if (output_device.empty()) {
|
|
|
|
|
dev = SDL_OpenAudioDevice(nullptr, 0, &spec, &obtained, 0);
|
|
|
|
|
else
|
|
|
|
|
} else {
|
|
|
|
|
dev = SDL_OpenAudioDevice(output_device.c_str(), 0, &spec, &obtained, 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (dev == 0) {
|
|
|
|
|
LOG_CRITICAL(Audio_Sink, "Error opening sdl audio device: {}", SDL_GetError());
|
|
|
|
@ -55,7 +56,6 @@ public:
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SDL_PauseAudioDevice(dev, 1);
|
|
|
|
|
SDL_CloseAudioDevice(dev);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -134,11 +134,7 @@ SDLSink::SDLSink(std::string_view target_device_name) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SDLSink::~SDLSink() {
|
|
|
|
|
for (auto& sink_stream : sink_streams) {
|
|
|
|
|
sink_stream.reset();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
SDLSink::~SDLSink() = default;
|
|
|
|
|
|
|
|
|
|
SinkStream& SDLSink::AcquireSinkStream(u32 sample_rate, u32 num_channels, const std::string&) {
|
|
|
|
|
sink_streams.push_back(
|
|
|
|
@ -152,11 +148,11 @@ std::vector<std::string> ListSDLSinkDevices() {
|
|
|
|
|
if (!SDL_WasInit(SDL_INIT_AUDIO)) {
|
|
|
|
|
if (SDL_InitSubSystem(SDL_INIT_AUDIO) < 0) {
|
|
|
|
|
LOG_CRITICAL(Audio_Sink, "SDL_InitSubSystem audio failed: {}", SDL_GetError());
|
|
|
|
|
return std::vector<std::string>();
|
|
|
|
|
return {};
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int device_count = SDL_GetNumAudioDevices(0);
|
|
|
|
|
const int device_count = SDL_GetNumAudioDevices(0);
|
|
|
|
|
for (int i = 0; i < device_count; ++i) {
|
|
|
|
|
device_list.emplace_back(SDL_GetAudioDeviceName(i, 0));
|
|
|
|
|
}
|
|
|
|
|