From 5b56c57795429f5563235ad1f1ad2c29c98876ec Mon Sep 17 00:00:00 2001 From: Romain Vimont Date: Fri, 15 Mar 2019 20:23:30 +0100 Subject: [PATCH] Screen off PoC --- .../com/genymobile/scrcpy/ScreenEncoder.java | 2 ++ .../scrcpy/wrappers/SurfaceControl.java | 21 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/server/src/main/java/com/genymobile/scrcpy/ScreenEncoder.java b/server/src/main/java/com/genymobile/scrcpy/ScreenEncoder.java index 22eb6a54..97250d50 100644 --- a/server/src/main/java/com/genymobile/scrcpy/ScreenEncoder.java +++ b/server/src/main/java/com/genymobile/scrcpy/ScreenEncoder.java @@ -57,6 +57,8 @@ public class ScreenEncoder implements Device.RotationListener { public void streamScreen(Device device, FileDescriptor fd) throws IOException { MediaFormat format = createFormat(bitRate, frameRate, iFrameInterval); device.setRotationListener(this); + IBinder d = SurfaceControl.getBuiltInDisplay(0); + SurfaceControl.setDisplayPowerMode(d, SurfaceControl.POWER_MODE_OFF); boolean alive; try { do { diff --git a/server/src/main/java/com/genymobile/scrcpy/wrappers/SurfaceControl.java b/server/src/main/java/com/genymobile/scrcpy/wrappers/SurfaceControl.java index 85733867..7501c3a7 100644 --- a/server/src/main/java/com/genymobile/scrcpy/wrappers/SurfaceControl.java +++ b/server/src/main/java/com/genymobile/scrcpy/wrappers/SurfaceControl.java @@ -10,6 +10,11 @@ public final class SurfaceControl { private static final Class CLASS; + public static final int POWER_MODE_OFF = 0; + public static final int POWER_MODE_DOZE = 1; + public static final int POWER_MODE_NORMAL = 2; + public static final int POWER_MODE_DOZE_SUSPEND = 3; + static { try { CLASS = Class.forName("android.view.SurfaceControl"); @@ -71,6 +76,22 @@ public final class SurfaceControl { } } + public static IBinder getBuiltInDisplay(int builtInDisplayId) { + try { + return (IBinder) CLASS.getMethod("getBuiltInDisplay", int.class).invoke(null, builtInDisplayId); + } catch (Exception e) { + throw new AssertionError(e); + } + } + + public static void setDisplayPowerMode(IBinder displayToken, int mode) { + try { + CLASS.getMethod("setDisplayPowerMode", IBinder.class, int.class).invoke(null, displayToken, mode); + } catch (Exception e) { + throw new AssertionError(e); + } + } + public static void destroyDisplay(IBinder displayToken) { try { CLASS.getMethod("destroyDisplay", IBinder.class).invoke(null, displayToken);