diff --git a/app/backend/nvhttp.cpp b/app/backend/nvhttp.cpp index 29591f1f..2af36bb5 100644 --- a/app/backend/nvhttp.cpp +++ b/app/backend/nvhttp.cpp @@ -145,30 +145,6 @@ NvHTTP::getServerInfo(NvLogLevel logLevel, bool fastFail) return serverInfo; } -static QString -getSurroundAudioInfoString(int audioConfig) -{ - int channelMask; - int channelCount; - - switch (audioConfig) - { - case AUDIO_CONFIGURATION_STEREO: - channelCount = 2; - channelMask = 0x3; - break; - case AUDIO_CONFIGURATION_51_SURROUND: - channelCount = 6; - channelMask = 0xFC; - break; - default: - Q_ASSERT(false); - return 0; - } - - return QString::number(channelMask << 16 | channelCount); -} - void NvHTTP::launchApp(int appId, PSTREAM_CONFIGURATION streamConfig, @@ -198,7 +174,8 @@ NvHTTP::launchApp(int appId, "&hdrMode=1&clientHdrCapVersion=0&clientHdrCapSupportedFlagsInUint32=0&clientHdrCapMetaDataId=NV_STATIC_METADATA_TYPE_1&clientHdrCapDisplayData=0x0x0x0x0x0x0x0x0x0x0" : "")+ "&localAudioPlayMode="+QString::number(localAudio ? 1 : 0)+ - "&surroundAudioInfo="+getSurroundAudioInfoString(streamConfig->audioConfiguration)+ + "&surroundAudioInfo="+QString::number(CHANNEL_MASK_FROM_AUDIO_CONFIGURATION(streamConfig->audioConfiguration) << 16 | + CHANNEL_COUNT_FROM_AUDIO_CONFIGURATION(streamConfig->audioConfiguration))+ "&remoteControllersBitmap="+QString::number(gamepadMask)+ "&gcmap="+QString::number(gamepadMask), LAUNCH_TIMEOUT_MS); @@ -220,7 +197,8 @@ NvHTTP::resumeApp(PSTREAM_CONFIGURATION streamConfig) "resume", "rikey="+QString(QByteArray(streamConfig->remoteInputAesKey, sizeof(streamConfig->remoteInputAesKey)).toHex())+ "&rikeyid="+QString::number(riKeyId)+ - "&surroundAudioInfo="+getSurroundAudioInfoString(streamConfig->audioConfiguration), + "&surroundAudioInfo="+QString::number(CHANNEL_MASK_FROM_AUDIO_CONFIGURATION(streamConfig->audioConfiguration) << 16 | + CHANNEL_COUNT_FROM_AUDIO_CONFIGURATION(streamConfig->audioConfiguration)), RESUME_TIMEOUT_MS); // Throws if the request failed diff --git a/app/streaming/audio/audio.cpp b/app/streaming/audio/audio.cpp index e3b360c1..29588296 100644 --- a/app/streaming/audio/audio.cpp +++ b/app/streaming/audio/audio.cpp @@ -80,19 +80,7 @@ int Session::getAudioRendererCapabilities(int audioConfiguration) OPUS_MULTISTREAM_CONFIGURATION opusConfig = {}; opusConfig.sampleRate = 48000; opusConfig.samplesPerFrame = 240; - - switch (audioConfiguration) - { - case AUDIO_CONFIGURATION_STEREO: - opusConfig.channelCount = 2; - break; - case AUDIO_CONFIGURATION_51_SURROUND: - opusConfig.channelCount = 6; - break; - default: - SDL_assert(false); - return 0; - } + opusConfig.channelCount = CHANNEL_COUNT_FROM_AUDIO_CONFIGURATION(audioConfiguration); IAudioRenderer* audioRenderer = createAudioRenderer(&opusConfig); if (audioRenderer == nullptr) { @@ -113,19 +101,7 @@ bool Session::testAudio(int audioConfiguration) OPUS_MULTISTREAM_CONFIGURATION opusConfig = {}; opusConfig.sampleRate = 48000; opusConfig.samplesPerFrame = 240; - - switch (audioConfiguration) - { - case AUDIO_CONFIGURATION_STEREO: - opusConfig.channelCount = 2; - break; - case AUDIO_CONFIGURATION_51_SURROUND: - opusConfig.channelCount = 6; - break; - default: - SDL_assert(false); - return false; - } + opusConfig.channelCount = CHANNEL_COUNT_FROM_AUDIO_CONFIGURATION(audioConfiguration); IAudioRenderer* audioRenderer = createAudioRenderer(&opusConfig); if (audioRenderer == nullptr) { diff --git a/app/streaming/session.cpp b/app/streaming/session.cpp index 79333e71..f6b48e92 100644 --- a/app/streaming/session.cpp +++ b/app/streaming/session.cpp @@ -389,10 +389,10 @@ bool Session::initialize() switch (m_Preferences->audioConfig) { case StreamingPreferences::AC_STEREO: - m_StreamConfig.audioConfiguration = AUDIO_CONFIGURATION_STEREO; + m_StreamConfig.audioConfiguration = MAKE_AUDIO_CONFIGURATION(2, 0x3); break; case StreamingPreferences::AC_51_SURROUND: - m_StreamConfig.audioConfiguration = AUDIO_CONFIGURATION_51_SURROUND; + m_StreamConfig.audioConfiguration = MAKE_AUDIO_CONFIGURATION(6, 0xFC); break; } @@ -605,12 +605,14 @@ bool Session::validateLaunch(SDL_Window* testWindow) // Test if audio works at the specified audio configuration bool audioTestPassed = testAudio(m_StreamConfig.audioConfiguration); - // Gracefully degrade to stereo if 5.1 doesn't work - if (!audioTestPassed && m_StreamConfig.audioConfiguration == AUDIO_CONFIGURATION_51_SURROUND) { - audioTestPassed = testAudio(AUDIO_CONFIGURATION_STEREO); + // Gracefully degrade to stereo if surround sound doesn't work + if (!audioTestPassed && CHANNEL_COUNT_FROM_AUDIO_CONFIGURATION(m_StreamConfig.audioConfiguration) > 2) { + int fallbackAudioConfig = MAKE_AUDIO_CONFIGURATION(2, 0x3); + + audioTestPassed = testAudio(fallbackAudioConfig); if (audioTestPassed) { - m_StreamConfig.audioConfiguration = AUDIO_CONFIGURATION_STEREO; - emitLaunchWarning("5.1 surround sound is not supported by the current audio device."); + m_StreamConfig.audioConfiguration = fallbackAudioConfig; + emitLaunchWarning("Your selected surround sound setting is not supported by the current audio device."); } } diff --git a/moonlight-common-c/moonlight-common-c b/moonlight-common-c/moonlight-common-c index f489c9d7..607aaca9 160000 --- a/moonlight-common-c/moonlight-common-c +++ b/moonlight-common-c/moonlight-common-c @@ -1 +1 @@ -Subproject commit f489c9d725d22517d3b3a017f6bbb0a22ed43707 +Subproject commit 607aaca93f550f516682d1266faa94786c9a240a