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,569 @@
package com.mbridge.msdk.playercommon.exoplayer2.text.cea;
import android.text.Layout;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.style.ForegroundColorSpan;
import android.text.style.StyleSpan;
import android.text.style.UnderlineSpan;
import androidx.core.internal.view.SupportMenu;
import com.applovin.exoplayer2.common.base.Ascii;
import com.mbridge.msdk.playercommon.exoplayer2.extractor.ts.PsExtractor;
import com.mbridge.msdk.playercommon.exoplayer2.text.Cue;
import com.mbridge.msdk.playercommon.exoplayer2.text.Subtitle;
import com.mbridge.msdk.playercommon.exoplayer2.text.SubtitleDecoderException;
import com.mbridge.msdk.playercommon.exoplayer2.text.SubtitleInputBuffer;
import com.mbridge.msdk.playercommon.exoplayer2.text.SubtitleOutputBuffer;
import com.mbridge.msdk.playercommon.exoplayer2.util.MimeTypes;
import com.mbridge.msdk.playercommon.exoplayer2.util.ParsableByteArray;
import com.vungle.ads.internal.protos.Sdk;
import com.vungle.ads.internal.signals.SignalKey;
import java.util.ArrayList;
import java.util.List;
/* loaded from: classes4.dex */
public final class Cea608Decoder extends CeaDecoder {
private static final int CC_FIELD_FLAG = 1;
private static final byte CC_IMPLICIT_DATA_HEADER = -4;
private static final int CC_MODE_PAINT_ON = 3;
private static final int CC_MODE_POP_ON = 2;
private static final int CC_MODE_ROLL_UP = 1;
private static final int CC_MODE_UNKNOWN = 0;
private static final int CC_TYPE_FLAG = 2;
private static final int CC_VALID_608_ID = 4;
private static final int CC_VALID_FLAG = 4;
private static final byte CTRL_BACKSPACE = 33;
private static final byte CTRL_CARRIAGE_RETURN = 45;
private static final byte CTRL_DELETE_TO_END_OF_ROW = 36;
private static final byte CTRL_END_OF_CAPTION = 47;
private static final byte CTRL_ERASE_DISPLAYED_MEMORY = 44;
private static final byte CTRL_ERASE_NON_DISPLAYED_MEMORY = 46;
private static final byte CTRL_RESUME_CAPTION_LOADING = 32;
private static final byte CTRL_RESUME_DIRECT_CAPTIONING = 41;
private static final byte CTRL_ROLL_UP_CAPTIONS_2_ROWS = 37;
private static final byte CTRL_ROLL_UP_CAPTIONS_3_ROWS = 38;
private static final byte CTRL_ROLL_UP_CAPTIONS_4_ROWS = 39;
private static final int DEFAULT_CAPTIONS_ROW_COUNT = 4;
private static final int NTSC_CC_FIELD_1 = 0;
private static final int NTSC_CC_FIELD_2 = 1;
private static final int STYLE_ITALICS = 7;
private static final int STYLE_UNCHANGED = 8;
private int captionMode;
private int captionRowCount;
private List<Cue> cues;
private List<Cue> lastCues;
private final int packetLength;
private byte repeatableControlCc1;
private byte repeatableControlCc2;
private boolean repeatableControlSet;
private final int selectedField;
private static final int[] ROW_INDICES = {11, 1, 3, 12, 14, 5, 7, 9};
private static final int[] COLUMN_INDICES = {0, 4, 8, 12, 16, 20, 24, 28};
private static final int[] STYLE_COLORS = {-1, -16711936, -16776961, -16711681, SupportMenu.CATEGORY_MASK, -256, -65281};
private static final int[] BASIC_CHARACTER_SET = {32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 225, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 233, 93, 237, 243, 250, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, SignalKey.EVENT_ID, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 231, 247, 209, 241, 9632};
private static final int[] SPECIAL_CHARACTER_SET = {174, 176, PsExtractor.PRIVATE_STREAM_1, 191, 8482, 162, 163, 9834, 224, 32, 232, 226, 234, 238, 244, 251};
private static final int[] SPECIAL_ES_FR_CHARACTER_SET = {193, 201, 211, 218, 220, 252, 8216, 161, 42, 39, 8212, 169, 8480, 8226, 8220, 8221, PsExtractor.AUDIO_STREAM, 194, 199, 200, 202, 203, 235, 206, 207, 239, 212, 217, 249, 219, 171, 187};
private static final int[] SPECIAL_PT_DE_CHARACTER_SET = {195, 227, 205, 204, 236, 210, 242, 213, 245, 123, 125, 92, 94, 95, 124, 126, 196, 228, 214, 246, Sdk.SDKError.Reason.STALE_CACHED_RESPONSE_VALUE, 165, 164, 9474, 197, 229, 216, 248, 9484, 9488, 9492, 9496};
private final ParsableByteArray ccData = new ParsableByteArray();
private final ArrayList<CueBuilder> cueBuilders = new ArrayList<>();
private CueBuilder currentCueBuilder = new CueBuilder(0, 4);
private static boolean isMidrowCtrlCode(byte b, byte b2) {
return (b & 247) == 17 && (b2 & 240) == 32;
}
private static boolean isMiscCode(byte b, byte b2) {
return (b & 247) == 20 && (b2 & 240) == 32;
}
private static boolean isPreambleAddressCode(byte b, byte b2) {
return (b & 240) == 16 && (b2 & 192) == 64;
}
private static boolean isRepeatable(byte b) {
return (b & 240) == 16;
}
private static boolean isTabCtrlCode(byte b, byte b2) {
return (b & 247) == 23 && b2 >= 33 && b2 <= 35;
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.text.cea.CeaDecoder, com.mbridge.msdk.playercommon.exoplayer2.decoder.Decoder
public final String getName() {
return "Cea608Decoder";
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.text.cea.CeaDecoder
public final boolean isNewSubtitleDataAvailable() {
return this.cues != this.lastCues;
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.text.cea.CeaDecoder, com.mbridge.msdk.playercommon.exoplayer2.decoder.Decoder
public final void release() {
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.text.cea.CeaDecoder, com.mbridge.msdk.playercommon.exoplayer2.decoder.Decoder
public final /* bridge */ /* synthetic */ SubtitleInputBuffer dequeueInputBuffer() throws SubtitleDecoderException {
return super.dequeueInputBuffer();
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.text.cea.CeaDecoder, com.mbridge.msdk.playercommon.exoplayer2.decoder.Decoder
public final /* bridge */ /* synthetic */ SubtitleOutputBuffer dequeueOutputBuffer() throws SubtitleDecoderException {
return super.dequeueOutputBuffer();
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.text.cea.CeaDecoder
public final /* bridge */ /* synthetic */ void queueInputBuffer(SubtitleInputBuffer subtitleInputBuffer) throws SubtitleDecoderException {
super.queueInputBuffer(subtitleInputBuffer);
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.text.cea.CeaDecoder, com.mbridge.msdk.playercommon.exoplayer2.text.SubtitleDecoder
public final /* bridge */ /* synthetic */ void setPositionUs(long j) {
super.setPositionUs(j);
}
public Cea608Decoder(String str, int i) {
this.packetLength = MimeTypes.APPLICATION_MP4CEA608.equals(str) ? 2 : 3;
if (i == 3 || i == 4) {
this.selectedField = 2;
} else {
this.selectedField = 1;
}
setCaptionMode(0);
resetCueBuilders();
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.text.cea.CeaDecoder, com.mbridge.msdk.playercommon.exoplayer2.decoder.Decoder
public final void flush() {
super.flush();
this.cues = null;
this.lastCues = null;
setCaptionMode(0);
setCaptionRowCount(4);
resetCueBuilders();
this.repeatableControlSet = false;
this.repeatableControlCc1 = (byte) 0;
this.repeatableControlCc2 = (byte) 0;
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.text.cea.CeaDecoder
public final Subtitle createSubtitle() {
List<Cue> list = this.cues;
this.lastCues = list;
return new CeaSubtitle(list);
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.text.cea.CeaDecoder
public final void decode(SubtitleInputBuffer subtitleInputBuffer) {
int i;
this.ccData.reset(subtitleInputBuffer.data.array(), subtitleInputBuffer.data.limit());
boolean z = false;
boolean z2 = false;
while (true) {
int bytesLeft = this.ccData.bytesLeft();
int i2 = this.packetLength;
if (bytesLeft < i2) {
break;
}
byte readUnsignedByte = i2 == 2 ? CC_IMPLICIT_DATA_HEADER : (byte) this.ccData.readUnsignedByte();
byte readUnsignedByte2 = (byte) (this.ccData.readUnsignedByte() & 127);
byte readUnsignedByte3 = (byte) (this.ccData.readUnsignedByte() & 127);
if ((readUnsignedByte & 6) == 4 && ((i = this.selectedField) != 1 || (readUnsignedByte & 1) == 0)) {
if (i != 2 || (readUnsignedByte & 1) == 1) {
if (readUnsignedByte2 != 0 || readUnsignedByte3 != 0) {
if ((readUnsignedByte2 & 247) == 17 && (readUnsignedByte3 & 240) == 48) {
this.currentCueBuilder.append(getSpecialChar(readUnsignedByte3));
} else if ((readUnsignedByte2 & 246) == 18 && (readUnsignedByte3 & 224) == 32) {
this.currentCueBuilder.backspace();
if ((readUnsignedByte2 & 1) == 0) {
this.currentCueBuilder.append(getExtendedEsFrChar(readUnsignedByte3));
} else {
this.currentCueBuilder.append(getExtendedPtDeChar(readUnsignedByte3));
}
} else if ((readUnsignedByte2 & 224) == 0) {
z2 = handleCtrl(readUnsignedByte2, readUnsignedByte3);
} else {
this.currentCueBuilder.append(getChar(readUnsignedByte2));
if ((readUnsignedByte3 & 224) != 0) {
this.currentCueBuilder.append(getChar(readUnsignedByte3));
}
}
z = true;
}
}
}
}
if (z) {
if (!z2) {
this.repeatableControlSet = false;
}
int i3 = this.captionMode;
if (i3 == 1 || i3 == 3) {
this.cues = getDisplayCues();
}
}
}
private boolean handleCtrl(byte b, byte b2) {
boolean isRepeatable = isRepeatable(b);
if (isRepeatable) {
if (this.repeatableControlSet && this.repeatableControlCc1 == b && this.repeatableControlCc2 == b2) {
this.repeatableControlSet = false;
return true;
}
this.repeatableControlSet = true;
this.repeatableControlCc1 = b;
this.repeatableControlCc2 = b2;
}
if (isMidrowCtrlCode(b, b2)) {
handleMidrowCtrl(b2);
} else if (isPreambleAddressCode(b, b2)) {
handlePreambleAddressCode(b, b2);
} else if (isTabCtrlCode(b, b2)) {
this.currentCueBuilder.setTab(b2 - 32);
} else if (isMiscCode(b, b2)) {
handleMiscCode(b2);
}
return isRepeatable;
}
private void handleMidrowCtrl(byte b) {
this.currentCueBuilder.append(' ');
this.currentCueBuilder.setStyle((b >> 1) & 7, (b & 1) == 1);
}
private void handlePreambleAddressCode(byte b, byte b2) {
int i = ROW_INDICES[b & 7];
if ((b2 & 32) != 0) {
i++;
}
if (i != this.currentCueBuilder.getRow()) {
if (this.captionMode != 1 && !this.currentCueBuilder.isEmpty()) {
CueBuilder cueBuilder = new CueBuilder(this.captionMode, this.captionRowCount);
this.currentCueBuilder = cueBuilder;
this.cueBuilders.add(cueBuilder);
}
this.currentCueBuilder.setRow(i);
}
boolean z = (b2 & Ascii.DLE) == 16;
boolean z2 = (b2 & 1) == 1;
int i2 = (b2 >> 1) & 7;
this.currentCueBuilder.setStyle(z ? 8 : i2, z2);
if (z) {
this.currentCueBuilder.setIndent(COLUMN_INDICES[i2]);
}
}
private void handleMiscCode(byte b) {
if (b == 32) {
setCaptionMode(2);
return;
}
if (b != 41) {
switch (b) {
case 37:
setCaptionMode(1);
setCaptionRowCount(2);
break;
case 38:
setCaptionMode(1);
setCaptionRowCount(3);
break;
case 39:
setCaptionMode(1);
setCaptionRowCount(4);
break;
default:
int i = this.captionMode;
if (i != 0) {
if (b != 33) {
switch (b) {
case 44:
this.cues = null;
if (i == 1 || i == 3) {
resetCueBuilders();
break;
}
case 45:
if (i == 1 && !this.currentCueBuilder.isEmpty()) {
this.currentCueBuilder.rollUp();
break;
}
break;
case 46:
resetCueBuilders();
break;
case 47:
this.cues = getDisplayCues();
resetCueBuilders();
break;
}
} else {
this.currentCueBuilder.backspace();
break;
}
}
break;
}
return;
}
setCaptionMode(3);
}
private List<Cue> getDisplayCues() {
ArrayList arrayList = new ArrayList();
for (int i = 0; i < this.cueBuilders.size(); i++) {
Cue build = this.cueBuilders.get(i).build();
if (build != null) {
arrayList.add(build);
}
}
return arrayList;
}
private void setCaptionMode(int i) {
int i2 = this.captionMode;
if (i2 == i) {
return;
}
this.captionMode = i;
resetCueBuilders();
if (i2 == 3 || i == 1 || i == 0) {
this.cues = null;
}
}
private void setCaptionRowCount(int i) {
this.captionRowCount = i;
this.currentCueBuilder.setCaptionRowCount(i);
}
private void resetCueBuilders() {
this.currentCueBuilder.reset(this.captionMode);
this.cueBuilders.clear();
this.cueBuilders.add(this.currentCueBuilder);
}
private static char getChar(byte b) {
return (char) BASIC_CHARACTER_SET[(b & Byte.MAX_VALUE) - 32];
}
private static char getSpecialChar(byte b) {
return (char) SPECIAL_CHARACTER_SET[b & Ascii.SI];
}
private static char getExtendedEsFrChar(byte b) {
return (char) SPECIAL_ES_FR_CHARACTER_SET[b & Ascii.US];
}
private static char getExtendedPtDeChar(byte b) {
return (char) SPECIAL_PT_DE_CHARACTER_SET[b & Ascii.US];
}
public static class CueBuilder {
private static final int BASE_ROW = 15;
private static final int SCREEN_CHARWIDTH = 32;
private int captionMode;
private int captionRowCount;
private int indent;
private int row;
private int tabOffset;
private final List<CueStyle> cueStyles = new ArrayList();
private final List<SpannableString> rolledUpCaptions = new ArrayList();
private final StringBuilder captionStringBuilder = new StringBuilder();
public int getRow() {
return this.row;
}
public void setCaptionRowCount(int i) {
this.captionRowCount = i;
}
public void setIndent(int i) {
this.indent = i;
}
public void setRow(int i) {
this.row = i;
}
public void setTab(int i) {
this.tabOffset = i;
}
public CueBuilder(int i, int i2) {
reset(i);
setCaptionRowCount(i2);
}
public void reset(int i) {
this.captionMode = i;
this.cueStyles.clear();
this.rolledUpCaptions.clear();
this.captionStringBuilder.setLength(0);
this.row = 15;
this.indent = 0;
this.tabOffset = 0;
}
public boolean isEmpty() {
return this.cueStyles.isEmpty() && this.rolledUpCaptions.isEmpty() && this.captionStringBuilder.length() == 0;
}
public void backspace() {
int length = this.captionStringBuilder.length();
if (length > 0) {
this.captionStringBuilder.delete(length - 1, length);
for (int size = this.cueStyles.size() - 1; size >= 0; size--) {
CueStyle cueStyle = this.cueStyles.get(size);
int i = cueStyle.start;
if (i != length) {
return;
}
cueStyle.start = i - 1;
}
}
}
public void rollUp() {
this.rolledUpCaptions.add(buildSpannableString());
this.captionStringBuilder.setLength(0);
this.cueStyles.clear();
int min = Math.min(this.captionRowCount, this.row);
while (this.rolledUpCaptions.size() >= min) {
this.rolledUpCaptions.remove(0);
}
}
public void setStyle(int i, boolean z) {
this.cueStyles.add(new CueStyle(i, z, this.captionStringBuilder.length()));
}
public void append(char c) {
this.captionStringBuilder.append(c);
}
public SpannableString buildSpannableString() {
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(this.captionStringBuilder);
int length = spannableStringBuilder.length();
int i = -1;
int i2 = -1;
int i3 = -1;
int i4 = -1;
int i5 = 0;
int i6 = 0;
boolean z = false;
while (i5 < this.cueStyles.size()) {
CueStyle cueStyle = this.cueStyles.get(i5);
boolean z2 = cueStyle.underline;
int i7 = cueStyle.style;
if (i7 != 8) {
boolean z3 = i7 == 7;
if (i7 != 7) {
i4 = Cea608Decoder.STYLE_COLORS[i7];
}
z = z3;
}
int i8 = cueStyle.start;
i5++;
if (i8 != (i5 < this.cueStyles.size() ? this.cueStyles.get(i5).start : length)) {
if (i != -1 && !z2) {
setUnderlineSpan(spannableStringBuilder, i, i8);
i = -1;
} else if (i == -1 && z2) {
i = i8;
}
if (i2 != -1 && !z) {
setItalicSpan(spannableStringBuilder, i2, i8);
i2 = -1;
} else if (i2 == -1 && z) {
i2 = i8;
}
if (i4 != i3) {
setColorSpan(spannableStringBuilder, i6, i8, i3);
i3 = i4;
i6 = i8;
}
}
}
if (i != -1 && i != length) {
setUnderlineSpan(spannableStringBuilder, i, length);
}
if (i2 != -1 && i2 != length) {
setItalicSpan(spannableStringBuilder, i2, length);
}
if (i6 != length) {
setColorSpan(spannableStringBuilder, i6, length, i3);
}
return new SpannableString(spannableStringBuilder);
}
public Cue build() {
int i;
float f;
int i2;
int i3;
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
for (int i4 = 0; i4 < this.rolledUpCaptions.size(); i4++) {
spannableStringBuilder.append((CharSequence) this.rolledUpCaptions.get(i4));
spannableStringBuilder.append('\n');
}
spannableStringBuilder.append((CharSequence) buildSpannableString());
if (spannableStringBuilder.length() == 0) {
return null;
}
int i5 = this.indent + this.tabOffset;
int length = (32 - i5) - spannableStringBuilder.length();
int i6 = i5 - length;
if (this.captionMode == 2 && (Math.abs(i6) < 3 || length < 0)) {
f = 0.5f;
i = 1;
} else if (this.captionMode != 2 || i6 <= 0) {
i = 0;
f = ((i5 / 32.0f) * 0.8f) + 0.1f;
} else {
f = (((32 - length) / 32.0f) * 0.8f) + 0.1f;
i = 2;
}
if (this.captionMode == 1 || (i2 = this.row) > 7) {
i2 = this.row - 17;
i3 = 2;
} else {
i3 = 0;
}
return new Cue(spannableStringBuilder, Layout.Alignment.ALIGN_NORMAL, i2, 1, i3, f, i, Float.MIN_VALUE);
}
public String toString() {
return this.captionStringBuilder.toString();
}
private static void setUnderlineSpan(SpannableStringBuilder spannableStringBuilder, int i, int i2) {
spannableStringBuilder.setSpan(new UnderlineSpan(), i, i2, 33);
}
private static void setItalicSpan(SpannableStringBuilder spannableStringBuilder, int i, int i2) {
spannableStringBuilder.setSpan(new StyleSpan(2), i, i2, 33);
}
private static void setColorSpan(SpannableStringBuilder spannableStringBuilder, int i, int i2, int i3) {
if (i3 == -1) {
return;
}
spannableStringBuilder.setSpan(new ForegroundColorSpan(i3), i, i2, 33);
}
public static class CueStyle {
public int start;
public final int style;
public final boolean underline;
public CueStyle(int i, boolean z, int i2) {
this.style = i;
this.underline = z;
this.start = i2;
}
}
}
}

View File

@@ -0,0 +1,26 @@
package com.mbridge.msdk.playercommon.exoplayer2.text.cea;
import android.text.Layout;
import androidx.annotation.NonNull;
import com.mbridge.msdk.playercommon.exoplayer2.text.Cue;
/* loaded from: classes4.dex */
final class Cea708Cue extends Cue implements Comparable<Cea708Cue> {
public static final int PRIORITY_UNSET = -1;
public final int priority;
public Cea708Cue(CharSequence charSequence, Layout.Alignment alignment, float f, int i, int i2, float f2, int i3, float f3, boolean z, int i4, int i5) {
super(charSequence, alignment, f, i, i2, f2, i3, f3, z, i4);
this.priority = i5;
}
@Override // java.lang.Comparable
public final int compareTo(@NonNull Cea708Cue cea708Cue) {
int i = cea708Cue.priority;
int i2 = this.priority;
if (i < i2) {
return -1;
}
return i > i2 ? 1 : 0;
}
}

View File

@@ -0,0 +1,170 @@
package com.mbridge.msdk.playercommon.exoplayer2.text.cea;
import androidx.annotation.NonNull;
import com.mbridge.msdk.playercommon.exoplayer2.text.Subtitle;
import com.mbridge.msdk.playercommon.exoplayer2.text.SubtitleDecoder;
import com.mbridge.msdk.playercommon.exoplayer2.text.SubtitleDecoderException;
import com.mbridge.msdk.playercommon.exoplayer2.text.SubtitleInputBuffer;
import com.mbridge.msdk.playercommon.exoplayer2.text.SubtitleOutputBuffer;
import com.mbridge.msdk.playercommon.exoplayer2.util.Assertions;
import java.util.ArrayDeque;
import java.util.PriorityQueue;
/* loaded from: classes4.dex */
abstract class CeaDecoder implements SubtitleDecoder {
private static final int NUM_INPUT_BUFFERS = 10;
private static final int NUM_OUTPUT_BUFFERS = 2;
private final ArrayDeque<CeaInputBuffer> availableInputBuffers = new ArrayDeque<>();
private final ArrayDeque<SubtitleOutputBuffer> availableOutputBuffers;
private CeaInputBuffer dequeuedInputBuffer;
private long playbackPositionUs;
private long queuedInputBufferCount;
private final PriorityQueue<CeaInputBuffer> queuedInputBuffers;
public abstract Subtitle createSubtitle();
public abstract void decode(SubtitleInputBuffer subtitleInputBuffer);
@Override // com.mbridge.msdk.playercommon.exoplayer2.decoder.Decoder
public abstract String getName();
public abstract boolean isNewSubtitleDataAvailable();
@Override // com.mbridge.msdk.playercommon.exoplayer2.decoder.Decoder
public void release() {
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.text.SubtitleDecoder
public void setPositionUs(long j) {
this.playbackPositionUs = j;
}
public CeaDecoder() {
int i = 0;
while (true) {
if (i >= 10) {
break;
}
this.availableInputBuffers.add(new CeaInputBuffer());
i++;
}
this.availableOutputBuffers = new ArrayDeque<>();
for (int i2 = 0; i2 < 2; i2++) {
this.availableOutputBuffers.add(new CeaOutputBuffer());
}
this.queuedInputBuffers = new PriorityQueue<>();
}
/* JADX WARN: Can't rename method to resolve collision */
@Override // com.mbridge.msdk.playercommon.exoplayer2.decoder.Decoder
public SubtitleInputBuffer dequeueInputBuffer() throws SubtitleDecoderException {
Assertions.checkState(this.dequeuedInputBuffer == null);
if (this.availableInputBuffers.isEmpty()) {
return null;
}
CeaInputBuffer pollFirst = this.availableInputBuffers.pollFirst();
this.dequeuedInputBuffer = pollFirst;
return pollFirst;
}
/* JADX WARN: Can't rename method to resolve collision */
@Override // com.mbridge.msdk.playercommon.exoplayer2.decoder.Decoder
public void queueInputBuffer(SubtitleInputBuffer subtitleInputBuffer) throws SubtitleDecoderException {
Assertions.checkArgument(subtitleInputBuffer == this.dequeuedInputBuffer);
if (subtitleInputBuffer.isDecodeOnly()) {
releaseInputBuffer(this.dequeuedInputBuffer);
} else {
CeaInputBuffer ceaInputBuffer = this.dequeuedInputBuffer;
long j = this.queuedInputBufferCount;
this.queuedInputBufferCount = 1 + j;
ceaInputBuffer.queuedInputBufferCount = j;
this.queuedInputBuffers.add(this.dequeuedInputBuffer);
}
this.dequeuedInputBuffer = null;
}
/* JADX WARN: Can't rename method to resolve collision */
@Override // com.mbridge.msdk.playercommon.exoplayer2.decoder.Decoder
public SubtitleOutputBuffer dequeueOutputBuffer() throws SubtitleDecoderException {
if (this.availableOutputBuffers.isEmpty()) {
return null;
}
while (!this.queuedInputBuffers.isEmpty() && this.queuedInputBuffers.peek().timeUs <= this.playbackPositionUs) {
CeaInputBuffer poll = this.queuedInputBuffers.poll();
if (poll.isEndOfStream()) {
SubtitleOutputBuffer pollFirst = this.availableOutputBuffers.pollFirst();
pollFirst.addFlag(4);
releaseInputBuffer(poll);
return pollFirst;
}
decode(poll);
if (isNewSubtitleDataAvailable()) {
Subtitle createSubtitle = createSubtitle();
if (!poll.isDecodeOnly()) {
SubtitleOutputBuffer pollFirst2 = this.availableOutputBuffers.pollFirst();
pollFirst2.setContent(poll.timeUs, createSubtitle, Long.MAX_VALUE);
releaseInputBuffer(poll);
return pollFirst2;
}
}
releaseInputBuffer(poll);
}
return null;
}
private void releaseInputBuffer(CeaInputBuffer ceaInputBuffer) {
ceaInputBuffer.clear();
this.availableInputBuffers.add(ceaInputBuffer);
}
public void releaseOutputBuffer(SubtitleOutputBuffer subtitleOutputBuffer) {
subtitleOutputBuffer.clear();
this.availableOutputBuffers.add(subtitleOutputBuffer);
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.decoder.Decoder
public void flush() {
this.queuedInputBufferCount = 0L;
this.playbackPositionUs = 0L;
while (!this.queuedInputBuffers.isEmpty()) {
releaseInputBuffer(this.queuedInputBuffers.poll());
}
CeaInputBuffer ceaInputBuffer = this.dequeuedInputBuffer;
if (ceaInputBuffer != null) {
releaseInputBuffer(ceaInputBuffer);
this.dequeuedInputBuffer = null;
}
}
public static final class CeaInputBuffer extends SubtitleInputBuffer implements Comparable<CeaInputBuffer> {
private long queuedInputBufferCount;
private CeaInputBuffer() {
}
@Override // java.lang.Comparable
public final int compareTo(@NonNull CeaInputBuffer ceaInputBuffer) {
if (isEndOfStream() != ceaInputBuffer.isEndOfStream()) {
return isEndOfStream() ? 1 : -1;
}
long j = this.timeUs - ceaInputBuffer.timeUs;
if (j == 0) {
j = this.queuedInputBufferCount - ceaInputBuffer.queuedInputBufferCount;
if (j == 0) {
return 0;
}
}
return j > 0 ? 1 : -1;
}
}
public final class CeaOutputBuffer extends SubtitleOutputBuffer {
private CeaOutputBuffer() {
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.text.SubtitleOutputBuffer, com.mbridge.msdk.playercommon.exoplayer2.decoder.OutputBuffer
public final void release() {
CeaDecoder.this.releaseOutputBuffer(this);
}
}
}

View File

@@ -0,0 +1,37 @@
package com.mbridge.msdk.playercommon.exoplayer2.text.cea;
import com.mbridge.msdk.playercommon.exoplayer2.text.Cue;
import com.mbridge.msdk.playercommon.exoplayer2.text.Subtitle;
import com.mbridge.msdk.playercommon.exoplayer2.util.Assertions;
import java.util.Collections;
import java.util.List;
/* loaded from: classes4.dex */
final class CeaSubtitle implements Subtitle {
private final List<Cue> cues;
@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 j < 0 ? 0 : -1;
}
public CeaSubtitle(List<Cue> list) {
this.cues = list;
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.text.Subtitle
public final long getEventTime(int i) {
Assertions.checkArgument(i == 0);
return 0L;
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.text.Subtitle
public final List<Cue> getCues(long j) {
return j >= 0 ? this.cues : Collections.emptyList();
}
}

View File

@@ -0,0 +1,69 @@
package com.mbridge.msdk.playercommon.exoplayer2.text.cea;
import android.util.Log;
import com.mbridge.msdk.playercommon.exoplayer2.extractor.TrackOutput;
import com.mbridge.msdk.playercommon.exoplayer2.util.ParsableByteArray;
import com.mbridge.msdk.playercommon.exoplayer2.util.Util;
/* loaded from: classes4.dex */
public final class CeaUtil {
private static final int COUNTRY_CODE = 181;
private static final int PAYLOAD_TYPE_CC = 4;
private static final int PROVIDER_CODE_ATSC = 49;
private static final int PROVIDER_CODE_DIRECTV = 47;
private static final String TAG = "CeaUtil";
private static final int USER_DATA_TYPE_CODE = 3;
private static final int USER_ID_GA94 = Util.getIntegerCodeForString("GA94");
private static final int USER_ID_DTG1 = Util.getIntegerCodeForString("DTG1");
private CeaUtil() {
}
public static void consume(long j, ParsableByteArray parsableByteArray, TrackOutput[] trackOutputArr) {
while (parsableByteArray.bytesLeft() > 1) {
int readNon255TerminatedValue = readNon255TerminatedValue(parsableByteArray);
int readNon255TerminatedValue2 = readNon255TerminatedValue(parsableByteArray);
int position = parsableByteArray.getPosition() + readNon255TerminatedValue2;
if (readNon255TerminatedValue2 == -1 || readNon255TerminatedValue2 > parsableByteArray.bytesLeft()) {
Log.w(TAG, "Skipping remainder of malformed SEI NAL unit.");
position = parsableByteArray.limit();
} else if (readNon255TerminatedValue == 4 && readNon255TerminatedValue2 >= 8) {
int readUnsignedByte = parsableByteArray.readUnsignedByte();
int readUnsignedShort = parsableByteArray.readUnsignedShort();
int readInt = readUnsignedShort == 49 ? parsableByteArray.readInt() : 0;
int readUnsignedByte2 = parsableByteArray.readUnsignedByte();
if (readUnsignedShort == 47) {
parsableByteArray.skipBytes(1);
}
boolean z = readUnsignedByte == COUNTRY_CODE && (readUnsignedShort == 49 || readUnsignedShort == 47) && readUnsignedByte2 == 3;
if (readUnsignedShort == 49) {
z &= readInt == USER_ID_GA94 || readInt == USER_ID_DTG1;
}
if (z) {
int readUnsignedByte3 = parsableByteArray.readUnsignedByte() & 31;
parsableByteArray.skipBytes(1);
int i = readUnsignedByte3 * 3;
int position2 = parsableByteArray.getPosition();
for (TrackOutput trackOutput : trackOutputArr) {
parsableByteArray.setPosition(position2);
trackOutput.sampleData(parsableByteArray, i);
trackOutput.sampleMetadata(j, 1, i, 0, null);
}
}
}
parsableByteArray.setPosition(position);
}
}
private static int readNon255TerminatedValue(ParsableByteArray parsableByteArray) {
int i = 0;
while (parsableByteArray.bytesLeft() != 0) {
int readUnsignedByte = parsableByteArray.readUnsignedByte();
i += readUnsignedByte;
if (readUnsignedByte != 255) {
return i;
}
}
return -1;
}
}