From 7d544c1ce4882da3b9c953f819cf340c02d3162d Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 25 Oct 2025 19:17:38 -0500 Subject: [PATCH] Move audio capabilities out of the renderer classes Since the removal of libsoundio, all renderers support arbitrary audio duration, so we can avoid having to start an audio session just to query capabilities. --- app/streaming/audio/audio.cpp | 20 +++++++------------- app/streaming/audio/renderers/renderer.h | 2 -- app/streaming/audio/renderers/sdl.h | 2 -- app/streaming/audio/renderers/sdlaud.cpp | 6 ------ app/streaming/audio/renderers/slaud.cpp | 5 ----- app/streaming/audio/renderers/slaud.h | 2 -- 6 files changed, 7 insertions(+), 30 deletions(-) diff --git a/app/streaming/audio/audio.cpp b/app/streaming/audio/audio.cpp index 6d26f9b2..4fd3d71d 100644 --- a/app/streaming/audio/audio.cpp +++ b/app/streaming/audio/audio.cpp @@ -95,21 +95,15 @@ bool Session::initializeAudioRenderer() int Session::getAudioRendererCapabilities(int audioConfiguration) { - // Build a fake OPUS_MULTISTREAM_CONFIGURATION to give - // the renderer the channel count and sample rate. - OPUS_MULTISTREAM_CONFIGURATION opusConfig = {}; - opusConfig.sampleRate = 48000; - opusConfig.samplesPerFrame = 240; - opusConfig.channelCount = CHANNEL_COUNT_FROM_AUDIO_CONFIGURATION(audioConfiguration); + int caps = 0; - IAudioRenderer* audioRenderer = createAudioRenderer(&opusConfig); - if (audioRenderer == nullptr) { - return 0; - } + // All audio renderers support arbitrary audio duration + caps |= CAPABILITY_SUPPORTS_ARBITRARY_AUDIO_DURATION; - int caps = audioRenderer->getCapabilities(); - - delete audioRenderer; +#ifdef STEAM_LINK + // Steam Link devices have slow Opus decoders + caps |= CAPABILITY_SLOW_OPUS_DECODER; +#endif return caps; } diff --git a/app/streaming/audio/renderers/renderer.h b/app/streaming/audio/renderers/renderer.h index acda076f..0e103cf3 100644 --- a/app/streaming/audio/renderers/renderer.h +++ b/app/streaming/audio/renderers/renderer.h @@ -15,8 +15,6 @@ public: // Return false if an unrecoverable error has occurred and the renderer must be reinitialized virtual bool submitAudio(int bytesWritten) = 0; - virtual int getCapabilities() = 0; - virtual void remapChannels(POPUS_MULTISTREAM_CONFIGURATION) { // Use default channel mapping: // 0 - Front Left diff --git a/app/streaming/audio/renderers/sdl.h b/app/streaming/audio/renderers/sdl.h index f35d1f94..cbcf6631 100644 --- a/app/streaming/audio/renderers/sdl.h +++ b/app/streaming/audio/renderers/sdl.h @@ -16,8 +16,6 @@ public: virtual bool submitAudio(int bytesWritten); - virtual int getCapabilities(); - virtual AudioFormat getAudioBufferFormat(); private: diff --git a/app/streaming/audio/renderers/sdlaud.cpp b/app/streaming/audio/renderers/sdlaud.cpp index b8a61bb9..cb4b9ead 100644 --- a/app/streaming/audio/renderers/sdlaud.cpp +++ b/app/streaming/audio/renderers/sdlaud.cpp @@ -132,12 +132,6 @@ bool SdlAudioRenderer::submitAudio(int bytesWritten) return true; } -int SdlAudioRenderer::getCapabilities() -{ - // Direct submit can't be used because we use LiGetPendingAudioDuration() - return CAPABILITY_SUPPORTS_ARBITRARY_AUDIO_DURATION; -} - IAudioRenderer::AudioFormat SdlAudioRenderer::getAudioBufferFormat() { return AudioFormat::Float32NE; diff --git a/app/streaming/audio/renderers/slaud.cpp b/app/streaming/audio/renderers/slaud.cpp index fba7a434..794192da 100644 --- a/app/streaming/audio/renderers/slaud.cpp +++ b/app/streaming/audio/renderers/slaud.cpp @@ -114,11 +114,6 @@ bool SLAudioRenderer::submitAudio(int bytesWritten) return true; } -int SLAudioRenderer::getCapabilities() -{ - return CAPABILITY_SLOW_OPUS_DECODER | CAPABILITY_SUPPORTS_ARBITRARY_AUDIO_DURATION; -} - IAudioRenderer::AudioFormat SLAudioRenderer::getAudioBufferFormat() { return AudioFormat::Sint16NE; diff --git a/app/streaming/audio/renderers/slaud.h b/app/streaming/audio/renderers/slaud.h index 679fb763..722aa145 100644 --- a/app/streaming/audio/renderers/slaud.h +++ b/app/streaming/audio/renderers/slaud.h @@ -16,8 +16,6 @@ public: virtual bool submitAudio(int bytesWritten); - virtual int getCapabilities(); - virtual AudioFormat getAudioBufferFormat(); virtual void remapChannels(POPUS_MULTISTREAM_CONFIGURATION opusConfig);