Skip to content

Commit

Permalink
Extract conversion from u16 fixed-point to float
Browse files Browse the repository at this point in the history
  • Loading branch information
rom1v committed Aug 28, 2022
1 parent 5b8e9aa commit 3848ce8
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 4 deletions.
12 changes: 12 additions & 0 deletions server/src/main/java/com/genymobile/scrcpy/Binary.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,16 @@ public static int toUnsigned(short value) {
public static int toUnsigned(byte value) {
return value & 0xff;
}

/**
* Convert unsigned 16-bit fixed-point to a float between 0 and 1
*
* @param value encoded value
* @return Float value between 0 and 1
*/
public static float u16FixedPointToFloat(short value) {
int unsignedShort = Binary.toUnsigned(value);
// 0x1p16f is 2^16 as float
return unsignedShort == 0xffff ? 1f : (unsignedShort / 0x1p16f);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -139,10 +139,7 @@ private ControlMessage parseInjectTouchEvent() {
int action = Binary.toUnsigned(buffer.get());
long pointerId = buffer.getLong();
Position position = readPosition(buffer);
// 16 bits fixed-point
int pressureInt = Binary.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 = Binary.u16FixedPointToFloat(buffer.getShort());
int buttons = buffer.getInt();
return ControlMessage.createInjectTouchEvent(action, pointerId, position, pressure, buttons);
}
Expand Down

0 comments on commit 3848ce8

Please sign in to comment.