mirror of
https://github.com/revanced/ARSCLib.git
synced 2025-04-29 22:04:25 +02:00
fix dimension encode/decode error
This commit is contained in:
parent
1037986e95
commit
db3a18b039
@ -20,9 +20,10 @@ public class ComplexUtil {
|
||||
public static String decodeComplex(boolean fraction, int complex_value){
|
||||
int radixFlag = (complex_value >> COMPLEX_RADIX_SHIFT) & COMPLEX_RADIX_MASK;
|
||||
Radix radix = Radix.forFlag(radixFlag);
|
||||
int mantissa = (complex_value >> COMPLEX_MANTISSA_SHIFT) & COMPLEX_MANTISSA_MASK;
|
||||
mantissa = mantissa << radix.getShift();
|
||||
float value = mantissa * MANTISSA_MULTIPLIER;
|
||||
|
||||
int mantissa = (complex_value & ( COMPLEX_MANTISSA_MASK <<COMPLEX_MANTISSA_SHIFT));
|
||||
float value = mantissa * radix.getMultiplier();
|
||||
|
||||
int unit_type = (complex_value >> COMPLEX_UNIT_SHIFT) & COMPLEX_UNIT_MASK;
|
||||
Unit unit = Unit.fromFlag(fraction, unit_type);
|
||||
return radix.formatFloat(fraction, value) + unit.getSymbol();
|
||||
@ -132,16 +133,18 @@ public class ComplexUtil {
|
||||
};
|
||||
}
|
||||
public enum Radix{
|
||||
RADIX_23p0(0, 23),
|
||||
RADIX_16p7(1, 16),
|
||||
RADIX_8p15(2, 8),
|
||||
RADIX_0p23(3, 0);
|
||||
RADIX_23p0(0, 23, MANTISSA_MULT),
|
||||
RADIX_16p7(1, 16, 1.0f/(1<<7) * MANTISSA_MULT),
|
||||
RADIX_8p15(2, 8, 1.0f/(1<<15) * MANTISSA_MULT),
|
||||
RADIX_0p23(3, 0, 1.0f/(1<<23) * MANTISSA_MULT);
|
||||
|
||||
private final int flag;
|
||||
private final int shift;
|
||||
Radix(int flag, int shift) {
|
||||
private final float multiplier;
|
||||
Radix(int flag, int shift, float multiplier) {
|
||||
this.flag = flag;
|
||||
this.shift = shift;
|
||||
this.multiplier = multiplier;
|
||||
}
|
||||
public String formatFloat(boolean scale, float value){
|
||||
if(this.flag == 0){
|
||||
@ -195,12 +198,15 @@ public class ComplexUtil {
|
||||
public int getShift() {
|
||||
return shift;
|
||||
}
|
||||
public float getMultiplier() {
|
||||
return multiplier;
|
||||
}
|
||||
}
|
||||
private static final int COMPLEX_RADIX_SHIFT = 4;
|
||||
private static final int COMPLEX_RADIX_MASK = 0x3;
|
||||
private static final int COMPLEX_MANTISSA_SHIFT = 8;
|
||||
private static final int COMPLEX_MANTISSA_MASK = 0xffffff;
|
||||
private static final float MANTISSA_MULTIPLIER = (1.0f / (1 << 23));
|
||||
private static final int COMPLEX_MANTISSA_MASK = 0x00ffffff;
|
||||
private static final float MANTISSA_MULT = (1.0f / (1 << 8));
|
||||
private static final int COMPLEX_UNIT_SHIFT = 0;
|
||||
private static final int COMPLEX_UNIT_MASK = 0xf;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user