Add Discord community version (64-bit only)

- Added realracing3-community.apk (71.57 MB)
- Removed 32-bit support (armeabi-v7a)
- Only includes arm64-v8a libraries
- Decompiled source code included
- Added README-community.md with analysis
This commit is contained in:
2026-02-18 15:48:36 -08:00
parent c19eb3d7ff
commit c080f0d97f
26930 changed files with 2529574 additions and 0 deletions

View File

@@ -0,0 +1,232 @@
package com.mbridge.msdk.playercommon.exoplayer2.text.pgs;
import android.graphics.Bitmap;
import androidx.work.WorkInfo;
import com.mbridge.msdk.playercommon.exoplayer2.text.Cue;
import com.mbridge.msdk.playercommon.exoplayer2.text.SimpleSubtitleDecoder;
import com.mbridge.msdk.playercommon.exoplayer2.text.Subtitle;
import com.mbridge.msdk.playercommon.exoplayer2.text.SubtitleDecoderException;
import com.mbridge.msdk.playercommon.exoplayer2.util.ParsableByteArray;
import com.mbridge.msdk.playercommon.exoplayer2.util.Util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.zip.DataFormatException;
import java.util.zip.Inflater;
/* loaded from: classes4.dex */
public final class PgsDecoder extends SimpleSubtitleDecoder {
private static final byte INFLATE_HEADER = 120;
private static final int SECTION_TYPE_BITMAP_PICTURE = 21;
private static final int SECTION_TYPE_END = 128;
private static final int SECTION_TYPE_IDENTIFIER = 22;
private static final int SECTION_TYPE_PALETTE = 20;
private final ParsableByteArray buffer;
private final CueBuilder cueBuilder;
private byte[] inflatedData;
private int inflatedDataSize;
private Inflater inflater;
public PgsDecoder() {
super("PgsDecoder");
this.buffer = new ParsableByteArray();
this.cueBuilder = new CueBuilder();
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.text.SimpleSubtitleDecoder
public final Subtitle decode(byte[] bArr, int i, boolean z) throws SubtitleDecoderException {
if (maybeInflateData(bArr, i)) {
this.buffer.reset(this.inflatedData, this.inflatedDataSize);
} else {
this.buffer.reset(bArr, i);
}
this.cueBuilder.reset();
ArrayList arrayList = new ArrayList();
while (this.buffer.bytesLeft() >= 3) {
Cue readNextSection = readNextSection(this.buffer, this.cueBuilder);
if (readNextSection != null) {
arrayList.add(readNextSection);
}
}
return new PgsSubtitle(Collections.unmodifiableList(arrayList));
}
private boolean maybeInflateData(byte[] bArr, int i) {
if (i != 0 && bArr[0] == 120) {
if (this.inflater == null) {
this.inflater = new Inflater();
this.inflatedData = new byte[i];
}
this.inflatedDataSize = 0;
this.inflater.setInput(bArr, 0, i);
while (!this.inflater.finished() && !this.inflater.needsDictionary() && !this.inflater.needsInput()) {
try {
int i2 = this.inflatedDataSize;
byte[] bArr2 = this.inflatedData;
if (i2 == bArr2.length) {
this.inflatedData = Arrays.copyOf(bArr2, bArr2.length * 2);
}
int i3 = this.inflatedDataSize;
Inflater inflater = this.inflater;
byte[] bArr3 = this.inflatedData;
this.inflatedDataSize = i3 + inflater.inflate(bArr3, i3, bArr3.length - i3);
} catch (DataFormatException unused) {
this.inflater.reset();
} catch (Throwable th) {
this.inflater.reset();
throw th;
}
}
boolean finished = this.inflater.finished();
this.inflater.reset();
return finished;
}
return false;
}
private static Cue readNextSection(ParsableByteArray parsableByteArray, CueBuilder cueBuilder) {
int limit = parsableByteArray.limit();
int readUnsignedByte = parsableByteArray.readUnsignedByte();
int readUnsignedShort = parsableByteArray.readUnsignedShort();
int position = parsableByteArray.getPosition() + readUnsignedShort;
Cue cue = null;
if (position > limit) {
parsableByteArray.setPosition(limit);
return null;
}
if (readUnsignedByte == 128) {
cue = cueBuilder.build();
cueBuilder.reset();
} else {
switch (readUnsignedByte) {
case 20:
cueBuilder.parsePaletteSection(parsableByteArray, readUnsignedShort);
break;
case 21:
cueBuilder.parseBitmapSection(parsableByteArray, readUnsignedShort);
break;
case 22:
cueBuilder.parseIdentifierSection(parsableByteArray, readUnsignedShort);
break;
}
}
parsableByteArray.setPosition(position);
return cue;
}
public static final class CueBuilder {
private int bitmapHeight;
private int bitmapWidth;
private int bitmapX;
private int bitmapY;
private boolean colorsSet;
private int planeHeight;
private int planeWidth;
private final ParsableByteArray bitmapData = new ParsableByteArray();
private final int[] colors = new int[256];
/* JADX INFO: Access modifiers changed from: private */
public void parsePaletteSection(ParsableByteArray parsableByteArray, int i) {
if (i % 5 != 2) {
return;
}
parsableByteArray.skipBytes(2);
Arrays.fill(this.colors, 0);
int i2 = i / 5;
for (int i3 = 0; i3 < i2; i3++) {
int readUnsignedByte = parsableByteArray.readUnsignedByte();
int readUnsignedByte2 = parsableByteArray.readUnsignedByte();
int readUnsignedByte3 = parsableByteArray.readUnsignedByte();
int readUnsignedByte4 = parsableByteArray.readUnsignedByte();
int readUnsignedByte5 = parsableByteArray.readUnsignedByte();
double d = readUnsignedByte2;
double d2 = readUnsignedByte3 + WorkInfo.STOP_REASON_FOREGROUND_SERVICE_TIMEOUT;
double d3 = readUnsignedByte4 + WorkInfo.STOP_REASON_FOREGROUND_SERVICE_TIMEOUT;
this.colors[readUnsignedByte] = (Util.constrainValue((int) ((d - (0.34414d * d3)) - (d2 * 0.71414d)), 0, 255) << 8) | (readUnsignedByte5 << 24) | (Util.constrainValue((int) ((1.402d * d2) + d), 0, 255) << 16) | Util.constrainValue((int) (d + (d3 * 1.772d)), 0, 255);
}
this.colorsSet = true;
}
/* JADX INFO: Access modifiers changed from: private */
public void parseBitmapSection(ParsableByteArray parsableByteArray, int i) {
int readUnsignedInt24;
if (i < 4) {
return;
}
parsableByteArray.skipBytes(3);
int i2 = i - 4;
if ((parsableByteArray.readUnsignedByte() & 128) != 0) {
if (i2 < 7 || (readUnsignedInt24 = parsableByteArray.readUnsignedInt24()) < 4) {
return;
}
this.bitmapWidth = parsableByteArray.readUnsignedShort();
this.bitmapHeight = parsableByteArray.readUnsignedShort();
this.bitmapData.reset(readUnsignedInt24 - 4);
i2 = i - 11;
}
int position = this.bitmapData.getPosition();
int limit = this.bitmapData.limit();
if (position >= limit || i2 <= 0) {
return;
}
int min = Math.min(i2, limit - position);
parsableByteArray.readBytes(this.bitmapData.data, position, min);
this.bitmapData.setPosition(position + min);
}
/* JADX INFO: Access modifiers changed from: private */
public void parseIdentifierSection(ParsableByteArray parsableByteArray, int i) {
if (i < 19) {
return;
}
this.planeWidth = parsableByteArray.readUnsignedShort();
this.planeHeight = parsableByteArray.readUnsignedShort();
parsableByteArray.skipBytes(11);
this.bitmapX = parsableByteArray.readUnsignedShort();
this.bitmapY = parsableByteArray.readUnsignedShort();
}
public final Cue build() {
int i;
if (this.planeWidth == 0 || this.planeHeight == 0 || this.bitmapWidth == 0 || this.bitmapHeight == 0 || this.bitmapData.limit() == 0 || this.bitmapData.getPosition() != this.bitmapData.limit() || !this.colorsSet) {
return null;
}
this.bitmapData.setPosition(0);
int i2 = this.bitmapWidth * this.bitmapHeight;
int[] iArr = new int[i2];
int i3 = 0;
while (i3 < i2) {
int readUnsignedByte = this.bitmapData.readUnsignedByte();
if (readUnsignedByte != 0) {
i = i3 + 1;
iArr[i3] = this.colors[readUnsignedByte];
} else {
int readUnsignedByte2 = this.bitmapData.readUnsignedByte();
if (readUnsignedByte2 != 0) {
i = ((readUnsignedByte2 & 64) == 0 ? readUnsignedByte2 & 63 : ((readUnsignedByte2 & 63) << 8) | this.bitmapData.readUnsignedByte()) + i3;
Arrays.fill(iArr, i3, i, (readUnsignedByte2 & 128) == 0 ? 0 : this.colors[this.bitmapData.readUnsignedByte()]);
}
}
i3 = i;
}
Bitmap createBitmap = Bitmap.createBitmap(iArr, this.bitmapWidth, this.bitmapHeight, Bitmap.Config.ARGB_8888);
float f = this.bitmapX;
int i4 = this.planeWidth;
float f2 = f / i4;
float f3 = this.bitmapY;
int i5 = this.planeHeight;
return new Cue(createBitmap, f2, 0, f3 / i5, 0, this.bitmapWidth / i4, this.bitmapHeight / i5);
}
public final void reset() {
this.planeWidth = 0;
this.planeHeight = 0;
this.bitmapX = 0;
this.bitmapY = 0;
this.bitmapWidth = 0;
this.bitmapHeight = 0;
this.bitmapData.reset(0);
this.colorsSet = false;
}
}
}

View File

@@ -0,0 +1,34 @@
package com.mbridge.msdk.playercommon.exoplayer2.text.pgs;
import com.mbridge.msdk.playercommon.exoplayer2.text.Cue;
import com.mbridge.msdk.playercommon.exoplayer2.text.Subtitle;
import java.util.List;
/* loaded from: classes4.dex */
final class PgsSubtitle implements Subtitle {
private final List<Cue> cues;
@Override // com.mbridge.msdk.playercommon.exoplayer2.text.Subtitle
public final List<Cue> getCues(long j) {
return this.cues;
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.text.Subtitle
public final long getEventTime(int i) {
return 0L;
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.text.Subtitle
public final int getEventTimeCount() {
return 1;
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.text.Subtitle
public final int getNextEventTimeIndex(long j) {
return -1;
}
public PgsSubtitle(List<Cue> list) {
this.cues = list;
}
}