From dcb7be3acdbd032a582e7d469a0261d147c90d18 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 22 Feb 2020 01:18:11 -0800 Subject: [PATCH] Use the original FPS value for KEY_FRAME_RATE --- app/src/main/java/com/limelight/Game.java | 7 ++++--- .../limelight/binding/video/MediaCodecDecoderRenderer.java | 5 ++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/limelight/Game.java b/app/src/main/java/com/limelight/Game.java index 0f893dca..c920269f 100644 --- a/app/src/main/java/com/limelight/Game.java +++ b/app/src/main/java/com/limelight/Game.java @@ -399,6 +399,7 @@ public class Game extends Activity implements SurfaceHolder.Callback, // Hopefully, we can get rid of this once someone comes up with a better way // to track the state of the pipeline and time frames. int roundedRefreshRate = Math.round(displayRefreshRate); + int chosenFrameRate = prefConfig.fps; if (!prefConfig.disableFrameDrop || prefConfig.unlockFps) { if (Build.DEVICE.equals("coral") || Build.DEVICE.equals("flame")) { // HACK: Pixel 4 (XL) ignores the preferred display mode and lowers refresh rate, @@ -424,8 +425,8 @@ public class Game extends Activity implements SurfaceHolder.Callback, // Use the old rendering strategy on these broken devices decoderRenderer.enableLegacyFrameDropRendering(); } else { - prefConfig.fps = roundedRefreshRate - 1; - LimeLog.info("Adjusting FPS target for screen to " + prefConfig.fps); + chosenFrameRate = roundedRefreshRate - 1; + LimeLog.info("Adjusting FPS target for screen to " + chosenFrameRate); } } } @@ -437,7 +438,7 @@ public class Game extends Activity implements SurfaceHolder.Callback, StreamConfiguration config = new StreamConfiguration.Builder() .setResolution(prefConfig.width, prefConfig.height) - .setRefreshRate(prefConfig.fps) + .setRefreshRate(chosenFrameRate) .setApp(new NvApp(appName != null ? appName : "app", appId, willStreamHdr)) .setBitrate(prefConfig.bitrate) .setEnableSops(prefConfig.enableSops) diff --git a/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java b/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java index 2b8ba2a0..e8ac320d 100644 --- a/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java +++ b/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java @@ -303,7 +303,10 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer { MediaFormat videoFormat = MediaFormat.createVideoFormat(mimeType, width, height); - videoFormat.setInteger(MediaFormat.KEY_FRAME_RATE, redrawRate); + // We use prefs.fps instead of redrawRate here because the low latency hack in Game.java + // may leave us with an odd redrawRate value like 59 or 49 which might cause the decoder + // to puke. To be safe, we'll use the unmodified value. + videoFormat.setInteger(MediaFormat.KEY_FRAME_RATE, prefs.fps); // Adaptive playback can also be enabled by the whitelist on pre-KitKat devices // so we don't fill these pre-KitKat