From d2002b6a62e18fcb89885961d6314c3b4ecbd837 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 9 Feb 2019 20:37:11 -0800 Subject: [PATCH] Fix SOPS issues causing 720p60 settings on non-standard resolutions and FPS values --- app/backend/nvhttp.cpp | 5 ++++- app/streaming/session.cpp | 17 ++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/app/backend/nvhttp.cpp b/app/backend/nvhttp.cpp index 6a7078eb..29fe5f08 100644 --- a/app/backend/nvhttp.cpp +++ b/app/backend/nvhttp.cpp @@ -172,7 +172,10 @@ NvHTTP::launchApp(int appId, "appid="+QString::number(appId)+ "&mode="+QString::number(streamConfig->width)+"x"+ QString::number(streamConfig->height)+"x"+ - QString::number(streamConfig->fps)+ + // Using an FPS value over 60 causes SOPS to default to 720p60, + // so force it to 60 when starting. This won't impact our ability + // to get > 60 FPS while actually streaming though. + QString::number(streamConfig->fps > 60 ? 60 : streamConfig->fps)+ "&additionalStates=1&sops="+QString::number(sops ? 1 : 0)+ "&rikey="+QByteArray(streamConfig->remoteInputAesKey, sizeof(streamConfig->remoteInputAesKey)).toHex()+ "&rikeyid="+QString::number(riKeyId)+ diff --git a/app/streaming/session.cpp b/app/streaming/session.cpp index 1d8a4f91..185b8c9f 100644 --- a/app/streaming/session.cpp +++ b/app/streaming/session.cpp @@ -815,6 +815,21 @@ void Session::exec(int displayOriginX, int displayOriginY) Q_ASSERT(m_Computer->currentGameId == 0 || m_Computer->currentGameId == m_App.id); + // SOPS will set all settings to 720p60 if it doesn't recognize + // the chosen resolution. Avoid that by disabling SOPS when it + // is not streaming a supported resolution. + bool enableGameOptimizations = false; + for (const NvDisplayMode &mode : m_Computer->displayModes) { + if (mode.width == m_StreamConfig.width && + mode.height == m_StreamConfig.height) { + SDL_LogInfo(SDL_LOG_CATEGORY_APPLICATION, + "Found host supported resolution: %dx%d", + mode.width, mode.height); + enableGameOptimizations = prefs.gameOptimizations; + break; + } + } + try { NvHTTP http(m_Computer->activeAddress, m_Computer->serverCert); if (m_Computer->currentGameId != 0) { @@ -822,7 +837,7 @@ void Session::exec(int displayOriginX, int displayOriginY) } else { http.launchApp(m_App.id, &m_StreamConfig, - prefs.gameOptimizations, + enableGameOptimizations, prefs.playAudioOnHost, inputHandler.getAttachedGamepadMask()); }