From 72ff957e9a593b7350d04328dd08344b90ec99b7 Mon Sep 17 00:00:00 2001 From: Romain Vimont Date: Sun, 24 Jul 2022 16:00:26 +0200 Subject: [PATCH] Extract conversion from fixed-point u16 to float So that it can be reused for other fields. PR #3369 --- .../com/genymobile/scrcpy/ControlMessageReader.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/server/src/main/java/com/genymobile/scrcpy/ControlMessageReader.java b/server/src/main/java/com/genymobile/scrcpy/ControlMessageReader.java index 24dc5e50..5b922bf1 100644 --- a/server/src/main/java/com/genymobile/scrcpy/ControlMessageReader.java +++ b/server/src/main/java/com/genymobile/scrcpy/ControlMessageReader.java @@ -139,10 +139,7 @@ public class ControlMessageReader { int action = toUnsigned(buffer.get()); long pointerId = buffer.getLong(); Position position = readPosition(buffer); - // 16 bits fixed-point - int pressureInt = toUnsigned(buffer.getShort()); - // convert it to a float between 0 and 1 (0x1p16f is 2^16 as float) - float pressure = pressureInt == 0xffff ? 1f : (pressureInt / 0x1p16f); + float pressure = fixedPointToFloat(buffer.getShort()); int buttons = buffer.getInt(); return ControlMessage.createInjectTouchEvent(action, pointerId, position, pressure, buttons); } @@ -210,4 +207,10 @@ public class ControlMessageReader { private static int toUnsigned(byte value) { return value & 0xff; } + + private static float fixedPointToFloat(short value) { + int unsignedShort = toUnsigned(value); + // convert 16 bits fixed-point to a float between 0 and 1 (0x1p16f is 2^16 as float) + return unsignedShort == 0xffff ? 1f : (unsignedShort / 0x1p16f); + } }