From 72d1aedcaa47c91b43b65a51a73ad19e3809e0f2 Mon Sep 17 00:00:00 2001 From: Romain Vimont Date: Fri, 20 Mar 2026 17:51:02 +0100 Subject: [PATCH] Set priority and latency only for API level >= 23 The KEY_PRIORITY and KEY_LATENCY constants were introduced in Android API level 23. --- .../com/genymobile/scrcpy/video/SurfaceEncoder.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/server/src/main/java/com/genymobile/scrcpy/video/SurfaceEncoder.java b/server/src/main/java/com/genymobile/scrcpy/video/SurfaceEncoder.java index 0f7e9a21..2fdce5e3 100644 --- a/server/src/main/java/com/genymobile/scrcpy/video/SurfaceEncoder.java +++ b/server/src/main/java/com/genymobile/scrcpy/video/SurfaceEncoder.java @@ -264,10 +264,12 @@ public class SurfaceEncoder implements AsyncProcessor { format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, DEFAULT_I_FRAME_INTERVAL); // display the very first frame, and recover from bad quality when no new frames format.setLong(MediaFormat.KEY_REPEAT_PREVIOUS_FRAME_AFTER, REPEAT_FRAME_DELAY_US); // µs - // real-time priority - format.setInteger(MediaFormat.KEY_PRIORITY, 0); - // output 1 frame as soon as 1 frame is queued - format.setInteger(MediaFormat.KEY_LATENCY, 1); + if (Build.VERSION.SDK_INT >= AndroidVersions.API_23_ANDROID_6_0) { + // real-time priority + format.setInteger(MediaFormat.KEY_PRIORITY, 0); + // output 1 frame as soon as 1 frame is queued + format.setInteger(MediaFormat.KEY_LATENCY, 1); + } if (maxFps > 0) { // The key existed privately before Android 10: //