diff --git a/app/src/main/java/com/limelight/Game.java b/app/src/main/java/com/limelight/Game.java
index d463baa2..264d4e84 100644
--- a/app/src/main/java/com/limelight/Game.java
+++ b/app/src/main/java/com/limelight/Game.java
@@ -630,6 +630,7 @@ public class Game extends Activity implements SurfaceHolder.Callback,
// On M, we can explicitly set the optimal display mode
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Display.Mode bestMode = display.getMode();
+ boolean isNativeResolutionStream = PreferenceConfiguration.isNativeResolution(prefConfig.width, prefConfig.height);
boolean refreshRateIsGood = isRefreshRateGoodMatch(bestMode.getRefreshRate());
for (Display.Mode candidate : display.getSupportedModes()) {
boolean refreshRateReduced = candidate.getRefreshRate() < bestMode.getRefreshRate();
@@ -641,14 +642,15 @@ public class Game extends Activity implements SurfaceHolder.Callback,
LimeLog.info("Examining display mode: "+candidate.getPhysicalWidth()+"x"+
candidate.getPhysicalHeight()+"x"+candidate.getRefreshRate());
- if (candidate.getPhysicalWidth() > 4096) {
+ if (candidate.getPhysicalWidth() > 4096 && prefConfig.width <= 4096) {
// Avoid resolutions options above 4K to be safe
continue;
}
// On non-4K streams, we force the resolution to never change unless it's above
- // 60 FPS, which may require a resolution reduction due to HDMI bandwidth limitations.
- if (prefConfig.width < 3840 && prefConfig.fps <= 60) {
+ // 60 FPS, which may require a resolution reduction due to HDMI bandwidth limitations,
+ // or it's a native resolution stream.
+ if (prefConfig.width < 3840 && prefConfig.fps <= 60 && !isNativeResolutionStream) {
if (display.getMode().getPhysicalWidth() != candidate.getPhysicalWidth() ||
display.getMode().getPhysicalHeight() != candidate.getPhysicalHeight()) {
continue;
diff --git a/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java b/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java
index 98dff8f6..87b96ce0 100644
--- a/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java
+++ b/app/src/main/java/com/limelight/preferences/PreferenceConfiguration.java
@@ -109,6 +109,30 @@ public class PreferenceConfiguration {
public boolean touchscreenTrackpad;
public MoonBridge.AudioConfiguration audioConfiguration;
+ public static boolean isNativeResolution(int width, int height) {
+ // It's not a native resolution if it matches an existing resolution option
+ if (width == 640 && height == 360) {
+ return false;
+ }
+ else if (width == 854 && height == 480) {
+ return false;
+ }
+ else if (width == 1280 && height == 720) {
+ return false;
+ }
+ else if (width == 1920 && height == 1080) {
+ return false;
+ }
+ else if (width == 2560 && height == 1440) {
+ return false;
+ }
+ else if (width == 3840 && height == 2160) {
+ return false;
+ }
+
+ return true;
+ }
+
private static String convertFromLegacyResolutionString(String resString) {
if (resString.equalsIgnoreCase("360p")) {
return RES_360P;
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index 2d0a4697..96c5565b 100644
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -8,6 +8,8 @@
- 1440p
- 4K
+
+
- 640x360
- 854x480