mirror of
https://github.com/Genymobile/scrcpy.git
synced 2025-07-30 04:38:51 +00:00
Add conversion from float to fixed-point i16
To encode float values between -1 and 1. PR #3369 <https://github.com/Genymobile/scrcpy/pull/3369>
This commit is contained in:
parent
1ab6c19486
commit
1f138aef41
4 changed files with 68 additions and 0 deletions
|
@ -24,4 +24,15 @@ public final class Binary {
|
|||
// 0x1p16f is 2^16 as float
|
||||
return unsignedShort == 0xffff ? 1f : (unsignedShort / 0x1p16f);
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert signed 16-bit fixed-point to a float between -1 and 1
|
||||
*
|
||||
* @param value encoded value
|
||||
* @return Float value between -1 and 1
|
||||
*/
|
||||
public static float i16FixedPointToFloat(short value) {
|
||||
// 0x1p15f is 2^15 as float
|
||||
return value == 0x7fff ? 1f : (value / 0x1p15f);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,4 +17,26 @@ public class BinaryTest {
|
|||
Assert.assertEquals(0.75f, Binary.u16FixedPointToFloat((short) 0xc000), delta);
|
||||
Assert.assertEquals(1.0f, Binary.u16FixedPointToFloat((short) 0xffff), delta);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testI16FixedPointToFloat() {
|
||||
final float delta = 0.0f; // on these values, there MUST be no rounding error
|
||||
|
||||
Assert.assertEquals(0.0f, Binary.i16FixedPointToFloat((short) 0), delta);
|
||||
Assert.assertEquals(0.03125f, Binary.i16FixedPointToFloat((short) 0x400), delta);
|
||||
Assert.assertEquals(0.0625f, Binary.i16FixedPointToFloat((short) 0x800), delta);
|
||||
Assert.assertEquals(0.125f, Binary.i16FixedPointToFloat((short) 0x1000), delta);
|
||||
Assert.assertEquals(0.25f, Binary.i16FixedPointToFloat((short) 0x2000), delta);
|
||||
Assert.assertEquals(0.5f, Binary.i16FixedPointToFloat((short) 0x4000), delta);
|
||||
Assert.assertEquals(0.75f, Binary.i16FixedPointToFloat((short) 0x6000), delta);
|
||||
Assert.assertEquals(1.0f, Binary.i16FixedPointToFloat((short) 0x7fff), delta);
|
||||
|
||||
Assert.assertEquals(-0.03125f, Binary.i16FixedPointToFloat((short) -0x400), delta);
|
||||
Assert.assertEquals(-0.0625f, Binary.i16FixedPointToFloat((short) -0x800), delta);
|
||||
Assert.assertEquals(-0.125f, Binary.i16FixedPointToFloat((short) -0x1000), delta);
|
||||
Assert.assertEquals(-0.25f, Binary.i16FixedPointToFloat((short) -0x2000), delta);
|
||||
Assert.assertEquals(-0.5f, Binary.i16FixedPointToFloat((short) -0x4000), delta);
|
||||
Assert.assertEquals(-0.75f, Binary.i16FixedPointToFloat((short) -0x6000), delta);
|
||||
Assert.assertEquals(-1.0f, Binary.i16FixedPointToFloat((short) -0x8000), delta);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue