mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2025-01-09 13:43:22 +00:00
321 lines
11 KiB
Java
321 lines
11 KiB
Java
|
package com.google.zxing.aztec.encoder;
|
||
|
|
||
|
import com.google.zxing.common.BitArray;
|
||
|
import com.google.zxing.common.BitMatrix;
|
||
|
import com.google.zxing.common.reedsolomon.GenericGF;
|
||
|
import com.google.zxing.common.reedsolomon.ReedSolomonEncoder;
|
||
|
|
||
|
/* loaded from: classes3.dex */
|
||
|
public final class Encoder {
|
||
|
public static final int DEFAULT_AZTEC_LAYERS = 0;
|
||
|
public static final int DEFAULT_EC_PERCENT = 33;
|
||
|
private static final int MAX_NB_BITS = 32;
|
||
|
private static final int MAX_NB_BITS_COMPACT = 4;
|
||
|
private static final int[] WORD_SIZE = {4, 6, 6, 8, 8, 8, 8, 8, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12};
|
||
|
|
||
|
private static int totalBitsInLayer(int i, boolean z) {
|
||
|
return ((z ? 88 : 112) + (i << 4)) * i;
|
||
|
}
|
||
|
|
||
|
private Encoder() {
|
||
|
}
|
||
|
|
||
|
public static AztecCode encode(byte[] bArr) {
|
||
|
return encode(bArr, 33, 0);
|
||
|
}
|
||
|
|
||
|
/* JADX WARN: Multi-variable type inference failed */
|
||
|
public static AztecCode encode(byte[] bArr, int i, int i2) {
|
||
|
BitArray bitArray;
|
||
|
int i3;
|
||
|
boolean z;
|
||
|
int i4;
|
||
|
int i5;
|
||
|
int i6;
|
||
|
BitArray encode = new HighLevelEncoder(bArr).encode();
|
||
|
int size = ((encode.getSize() * i) / 100) + 11;
|
||
|
int size2 = encode.getSize() + size;
|
||
|
int i7 = 1;
|
||
|
if (i2 != 0) {
|
||
|
z = i2 < 0;
|
||
|
i4 = Math.abs(i2);
|
||
|
if (i4 > (z ? 4 : 32)) {
|
||
|
throw new IllegalArgumentException(String.format("Illegal value %s for layers", Integer.valueOf(i2)));
|
||
|
}
|
||
|
i5 = totalBitsInLayer(i4, z);
|
||
|
i3 = WORD_SIZE[i4];
|
||
|
int i8 = i5 - (i5 % i3);
|
||
|
bitArray = stuffBits(encode, i3);
|
||
|
if (bitArray.getSize() + size > i8) {
|
||
|
throw new IllegalArgumentException("Data to large for user specified layer");
|
||
|
}
|
||
|
if (z && bitArray.getSize() > (i3 << 6)) {
|
||
|
throw new IllegalArgumentException("Data to large for user specified layer");
|
||
|
}
|
||
|
} else {
|
||
|
BitArray bitArray2 = null;
|
||
|
int i9 = 0;
|
||
|
int i10 = 0;
|
||
|
while (i9 <= 32) {
|
||
|
boolean z2 = i9 <= 3 ? i7 : 0;
|
||
|
int i11 = z2 != 0 ? i9 + 1 : i9;
|
||
|
int i12 = totalBitsInLayer(i11, z2);
|
||
|
if (size2 <= i12) {
|
||
|
if (bitArray2 == null || i10 != WORD_SIZE[i11]) {
|
||
|
int i13 = WORD_SIZE[i11];
|
||
|
i10 = i13;
|
||
|
bitArray2 = stuffBits(encode, i13);
|
||
|
}
|
||
|
int i14 = i12 - (i12 % i10);
|
||
|
if ((z2 == 0 || bitArray2.getSize() <= (i10 << 6)) && bitArray2.getSize() + size <= i14) {
|
||
|
bitArray = bitArray2;
|
||
|
i3 = i10;
|
||
|
z = z2;
|
||
|
i4 = i11;
|
||
|
i5 = i12;
|
||
|
}
|
||
|
}
|
||
|
i9++;
|
||
|
i7 = i7;
|
||
|
}
|
||
|
throw new IllegalArgumentException("Data too large for an Aztec code");
|
||
|
}
|
||
|
BitArray generateCheckWords = generateCheckWords(bitArray, i5, i3);
|
||
|
int size3 = bitArray.getSize() / i3;
|
||
|
BitArray generateModeMessage = generateModeMessage(z, i4, size3);
|
||
|
int i15 = (z ? 11 : 14) + (i4 << 2);
|
||
|
int[] iArr = new int[i15];
|
||
|
int i16 = 2;
|
||
|
if (z) {
|
||
|
for (int i17 = 0; i17 < i15; i17++) {
|
||
|
iArr[i17] = i17;
|
||
|
}
|
||
|
i6 = i15;
|
||
|
} else {
|
||
|
int i18 = i15 / 2;
|
||
|
i6 = i15 + 1 + (((i18 - 1) / 15) * 2);
|
||
|
int i19 = i6 / 2;
|
||
|
for (int i20 = 0; i20 < i18; i20++) {
|
||
|
iArr[(i18 - i20) - i7] = (i19 - r14) - 1;
|
||
|
iArr[i18 + i20] = (i20 / 15) + i20 + i19 + i7;
|
||
|
}
|
||
|
}
|
||
|
BitMatrix bitMatrix = new BitMatrix(i6);
|
||
|
int i21 = 0;
|
||
|
int i22 = 0;
|
||
|
while (i21 < i4) {
|
||
|
int i23 = ((i4 - i21) << i16) + (z ? 9 : 12);
|
||
|
int i24 = 0;
|
||
|
while (i24 < i23) {
|
||
|
int i25 = i24 << 1;
|
||
|
int i26 = 0;
|
||
|
while (i26 < i16) {
|
||
|
if (generateCheckWords.get(i22 + i25 + i26)) {
|
||
|
int i27 = i21 << 1;
|
||
|
bitMatrix.set(iArr[i27 + i26], iArr[i27 + i24]);
|
||
|
}
|
||
|
if (generateCheckWords.get((i23 << 1) + i22 + i25 + i26)) {
|
||
|
int i28 = i21 << 1;
|
||
|
bitMatrix.set(iArr[i28 + i24], iArr[((i15 - 1) - i28) - i26]);
|
||
|
}
|
||
|
if (generateCheckWords.get((i23 << 2) + i22 + i25 + i26)) {
|
||
|
int i29 = (i15 - 1) - (i21 << 1);
|
||
|
bitMatrix.set(iArr[i29 - i26], iArr[i29 - i24]);
|
||
|
}
|
||
|
if (generateCheckWords.get((i23 * 6) + i22 + i25 + i26)) {
|
||
|
int i30 = i21 << 1;
|
||
|
bitMatrix.set(iArr[((i15 - 1) - i30) - i24], iArr[i30 + i26]);
|
||
|
}
|
||
|
i26++;
|
||
|
i16 = 2;
|
||
|
}
|
||
|
i24++;
|
||
|
i16 = 2;
|
||
|
}
|
||
|
i22 += i23 << 3;
|
||
|
i21++;
|
||
|
i16 = 2;
|
||
|
}
|
||
|
drawModeMessage(bitMatrix, z, i6, generateModeMessage);
|
||
|
if (z) {
|
||
|
drawBullsEye(bitMatrix, i6 / 2, 5);
|
||
|
} else {
|
||
|
int i31 = i6 / 2;
|
||
|
drawBullsEye(bitMatrix, i31, 7);
|
||
|
int i32 = 0;
|
||
|
int i33 = 0;
|
||
|
while (i33 < (i15 / 2) - 1) {
|
||
|
for (int i34 = i31 & 1; i34 < i6; i34 += 2) {
|
||
|
int i35 = i31 - i32;
|
||
|
bitMatrix.set(i35, i34);
|
||
|
int i36 = i31 + i32;
|
||
|
bitMatrix.set(i36, i34);
|
||
|
bitMatrix.set(i34, i35);
|
||
|
bitMatrix.set(i34, i36);
|
||
|
}
|
||
|
i33 += 15;
|
||
|
i32 += 16;
|
||
|
}
|
||
|
}
|
||
|
AztecCode aztecCode = new AztecCode();
|
||
|
aztecCode.setCompact(z);
|
||
|
aztecCode.setSize(i6);
|
||
|
aztecCode.setLayers(i4);
|
||
|
aztecCode.setCodeWords(size3);
|
||
|
aztecCode.setMatrix(bitMatrix);
|
||
|
return aztecCode;
|
||
|
}
|
||
|
|
||
|
private static void drawBullsEye(BitMatrix bitMatrix, int i, int i2) {
|
||
|
for (int i3 = 0; i3 < i2; i3 += 2) {
|
||
|
int i4 = i - i3;
|
||
|
int i5 = i4;
|
||
|
while (true) {
|
||
|
int i6 = i + i3;
|
||
|
if (i5 <= i6) {
|
||
|
bitMatrix.set(i5, i4);
|
||
|
bitMatrix.set(i5, i6);
|
||
|
bitMatrix.set(i4, i5);
|
||
|
bitMatrix.set(i6, i5);
|
||
|
i5++;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
int i7 = i - i2;
|
||
|
bitMatrix.set(i7, i7);
|
||
|
int i8 = i7 + 1;
|
||
|
bitMatrix.set(i8, i7);
|
||
|
bitMatrix.set(i7, i8);
|
||
|
int i9 = i + i2;
|
||
|
bitMatrix.set(i9, i7);
|
||
|
bitMatrix.set(i9, i8);
|
||
|
bitMatrix.set(i9, i9 - 1);
|
||
|
}
|
||
|
|
||
|
static BitArray generateModeMessage(boolean z, int i, int i2) {
|
||
|
BitArray bitArray = new BitArray();
|
||
|
if (z) {
|
||
|
bitArray.appendBits(i - 1, 2);
|
||
|
bitArray.appendBits(i2 - 1, 6);
|
||
|
return generateCheckWords(bitArray, 28, 4);
|
||
|
}
|
||
|
bitArray.appendBits(i - 1, 5);
|
||
|
bitArray.appendBits(i2 - 1, 11);
|
||
|
return generateCheckWords(bitArray, 40, 4);
|
||
|
}
|
||
|
|
||
|
private static void drawModeMessage(BitMatrix bitMatrix, boolean z, int i, BitArray bitArray) {
|
||
|
int i2 = i / 2;
|
||
|
int i3 = 0;
|
||
|
if (z) {
|
||
|
while (i3 < 7) {
|
||
|
int i4 = (i2 - 3) + i3;
|
||
|
if (bitArray.get(i3)) {
|
||
|
bitMatrix.set(i4, i2 - 5);
|
||
|
}
|
||
|
if (bitArray.get(i3 + 7)) {
|
||
|
bitMatrix.set(i2 + 5, i4);
|
||
|
}
|
||
|
if (bitArray.get(20 - i3)) {
|
||
|
bitMatrix.set(i4, i2 + 5);
|
||
|
}
|
||
|
if (bitArray.get(27 - i3)) {
|
||
|
bitMatrix.set(i2 - 5, i4);
|
||
|
}
|
||
|
i3++;
|
||
|
}
|
||
|
return;
|
||
|
}
|
||
|
while (i3 < 10) {
|
||
|
int i5 = (i2 - 5) + i3 + (i3 / 5);
|
||
|
if (bitArray.get(i3)) {
|
||
|
bitMatrix.set(i5, i2 - 7);
|
||
|
}
|
||
|
if (bitArray.get(i3 + 10)) {
|
||
|
bitMatrix.set(i2 + 7, i5);
|
||
|
}
|
||
|
if (bitArray.get(29 - i3)) {
|
||
|
bitMatrix.set(i5, i2 + 7);
|
||
|
}
|
||
|
if (bitArray.get(39 - i3)) {
|
||
|
bitMatrix.set(i2 - 7, i5);
|
||
|
}
|
||
|
i3++;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private static BitArray generateCheckWords(BitArray bitArray, int i, int i2) {
|
||
|
int size = bitArray.getSize() / i2;
|
||
|
ReedSolomonEncoder reedSolomonEncoder = new ReedSolomonEncoder(getGF(i2));
|
||
|
int i3 = i / i2;
|
||
|
int[] bitsToWords = bitsToWords(bitArray, i2, i3);
|
||
|
reedSolomonEncoder.encode(bitsToWords, i3 - size);
|
||
|
BitArray bitArray2 = new BitArray();
|
||
|
bitArray2.appendBits(0, i % i2);
|
||
|
for (int i4 : bitsToWords) {
|
||
|
bitArray2.appendBits(i4, i2);
|
||
|
}
|
||
|
return bitArray2;
|
||
|
}
|
||
|
|
||
|
private static int[] bitsToWords(BitArray bitArray, int i, int i2) {
|
||
|
int[] iArr = new int[i2];
|
||
|
int size = bitArray.getSize() / i;
|
||
|
for (int i3 = 0; i3 < size; i3++) {
|
||
|
int i4 = 0;
|
||
|
for (int i5 = 0; i5 < i; i5++) {
|
||
|
i4 |= bitArray.get((i3 * i) + i5) ? 1 << ((i - i5) - 1) : 0;
|
||
|
}
|
||
|
iArr[i3] = i4;
|
||
|
}
|
||
|
return iArr;
|
||
|
}
|
||
|
|
||
|
private static GenericGF getGF(int i) {
|
||
|
if (i == 4) {
|
||
|
return GenericGF.AZTEC_PARAM;
|
||
|
}
|
||
|
if (i == 6) {
|
||
|
return GenericGF.AZTEC_DATA_6;
|
||
|
}
|
||
|
if (i == 8) {
|
||
|
return GenericGF.AZTEC_DATA_8;
|
||
|
}
|
||
|
if (i == 10) {
|
||
|
return GenericGF.AZTEC_DATA_10;
|
||
|
}
|
||
|
if (i == 12) {
|
||
|
return GenericGF.AZTEC_DATA_12;
|
||
|
}
|
||
|
throw new IllegalArgumentException("Unsupported word size ".concat(String.valueOf(i)));
|
||
|
}
|
||
|
|
||
|
static BitArray stuffBits(BitArray bitArray, int i) {
|
||
|
BitArray bitArray2 = new BitArray();
|
||
|
int size = bitArray.getSize();
|
||
|
int i2 = (1 << i) - 2;
|
||
|
int i3 = 0;
|
||
|
while (i3 < size) {
|
||
|
int i4 = 0;
|
||
|
for (int i5 = 0; i5 < i; i5++) {
|
||
|
int i6 = i3 + i5;
|
||
|
if (i6 >= size || bitArray.get(i6)) {
|
||
|
i4 |= 1 << ((i - 1) - i5);
|
||
|
}
|
||
|
}
|
||
|
int i7 = i4 & i2;
|
||
|
if (i7 == i2) {
|
||
|
bitArray2.appendBits(i7, i);
|
||
|
} else if (i7 == 0) {
|
||
|
bitArray2.appendBits(i4 | 1, i);
|
||
|
} else {
|
||
|
bitArray2.appendBits(i4, i);
|
||
|
i3 += i;
|
||
|
}
|
||
|
i3--;
|
||
|
i3 += i;
|
||
|
}
|
||
|
return bitArray2;
|
||
|
}
|
||
|
}
|