- 28,932 files - Full Java source code - Smali files - Resources Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
342 lines
14 KiB
Java
342 lines
14 KiB
Java
package com.mbridge.msdk.playercommon.exoplayer2.audio;
|
|
|
|
import com.mbridge.msdk.playercommon.exoplayer2.Format;
|
|
import com.mbridge.msdk.playercommon.exoplayer2.drm.DrmInitData;
|
|
import com.mbridge.msdk.playercommon.exoplayer2.extractor.ts.PsExtractor;
|
|
import com.mbridge.msdk.playercommon.exoplayer2.util.MimeTypes;
|
|
import com.mbridge.msdk.playercommon.exoplayer2.util.ParsableBitArray;
|
|
import com.mbridge.msdk.playercommon.exoplayer2.util.ParsableByteArray;
|
|
import com.vungle.ads.internal.protos.Sdk;
|
|
import java.lang.annotation.Retention;
|
|
import java.lang.annotation.RetentionPolicy;
|
|
import java.nio.ByteBuffer;
|
|
import org.apache.http.HttpStatus;
|
|
|
|
/* loaded from: classes4.dex */
|
|
public final class Ac3Util {
|
|
private static final int AC3_SYNCFRAME_AUDIO_SAMPLE_COUNT = 1536;
|
|
private static final int AUDIO_SAMPLES_PER_AUDIO_BLOCK = 256;
|
|
public static final int TRUEHD_RECHUNK_SAMPLE_COUNT = 16;
|
|
public static final int TRUEHD_SYNCFRAME_PREFIX_LENGTH = 10;
|
|
private static final int[] BLOCKS_PER_SYNCFRAME_BY_NUMBLKSCOD = {1, 2, 3, 6};
|
|
private static final int[] SAMPLE_RATE_BY_FSCOD = {48000, 44100, 32000};
|
|
private static final int[] SAMPLE_RATE_BY_FSCOD2 = {24000, 22050, 16000};
|
|
private static final int[] CHANNEL_COUNT_BY_ACMOD = {2, 1, 2, 3, 3, 4, 4, 5};
|
|
private static final int[] BITRATE_BY_HALF_FRMSIZECOD = {32, 40, 48, 56, 64, 80, 96, 112, 128, 160, PsExtractor.AUDIO_STREAM, 224, 256, Sdk.SDKError.Reason.WEBVIEW_ERROR_VALUE, 384, 448, 512, 576, 640};
|
|
private static final int[] SYNCFRAME_SIZE_WORDS_BY_HALF_FRMSIZECOD_44_1 = {69, 87, 104, 121, 139, 174, 208, 243, 278, 348, HttpStatus.SC_EXPECTATION_FAILED, 487, 557, 696, 835, 975, 1114, 1253, 1393};
|
|
|
|
private Ac3Util() {
|
|
}
|
|
|
|
public static int getAc3SyncframeAudioSampleCount() {
|
|
return AC3_SYNCFRAME_AUDIO_SAMPLE_COUNT;
|
|
}
|
|
|
|
public static final class SyncFrameInfo {
|
|
public static final int STREAM_TYPE_TYPE0 = 0;
|
|
public static final int STREAM_TYPE_TYPE1 = 1;
|
|
public static final int STREAM_TYPE_TYPE2 = 2;
|
|
public static final int STREAM_TYPE_UNDEFINED = -1;
|
|
public final int channelCount;
|
|
public final int frameSize;
|
|
public final String mimeType;
|
|
public final int sampleCount;
|
|
public final int sampleRate;
|
|
public final int streamType;
|
|
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
public @interface StreamType {
|
|
}
|
|
|
|
private SyncFrameInfo(String str, int i, int i2, int i3, int i4, int i5) {
|
|
this.mimeType = str;
|
|
this.streamType = i;
|
|
this.channelCount = i2;
|
|
this.sampleRate = i3;
|
|
this.frameSize = i4;
|
|
this.sampleCount = i5;
|
|
}
|
|
}
|
|
|
|
public static Format parseAc3AnnexFFormat(ParsableByteArray parsableByteArray, String str, String str2, DrmInitData drmInitData) {
|
|
int i = SAMPLE_RATE_BY_FSCOD[(parsableByteArray.readUnsignedByte() & PsExtractor.AUDIO_STREAM) >> 6];
|
|
int readUnsignedByte = parsableByteArray.readUnsignedByte();
|
|
int i2 = CHANNEL_COUNT_BY_ACMOD[(readUnsignedByte & 56) >> 3];
|
|
if ((readUnsignedByte & 4) != 0) {
|
|
i2++;
|
|
}
|
|
return Format.createAudioSampleFormat(str, MimeTypes.AUDIO_AC3, null, -1, -1, i2, i, null, drmInitData, 0, str2);
|
|
}
|
|
|
|
public static Format parseEAc3AnnexFFormat(ParsableByteArray parsableByteArray, String str, String str2, DrmInitData drmInitData) {
|
|
parsableByteArray.skipBytes(2);
|
|
int i = SAMPLE_RATE_BY_FSCOD[(parsableByteArray.readUnsignedByte() & PsExtractor.AUDIO_STREAM) >> 6];
|
|
int readUnsignedByte = parsableByteArray.readUnsignedByte();
|
|
int i2 = CHANNEL_COUNT_BY_ACMOD[(readUnsignedByte & 14) >> 1];
|
|
if ((readUnsignedByte & 1) != 0) {
|
|
i2++;
|
|
}
|
|
if (((parsableByteArray.readUnsignedByte() & 30) >> 1) > 0 && (2 & parsableByteArray.readUnsignedByte()) != 0) {
|
|
i2 += 2;
|
|
}
|
|
return Format.createAudioSampleFormat(str, (parsableByteArray.bytesLeft() <= 0 || (parsableByteArray.readUnsignedByte() & 1) == 0) ? MimeTypes.AUDIO_E_AC3 : MimeTypes.AUDIO_E_AC3_JOC, null, -1, -1, i2, i, null, drmInitData, 0, str2);
|
|
}
|
|
|
|
public static SyncFrameInfo parseAc3SyncframeInfo(ParsableBitArray parsableBitArray) {
|
|
int ac3SyncframeSize;
|
|
int i;
|
|
int i2;
|
|
String str;
|
|
int i3;
|
|
int readBits;
|
|
int i4;
|
|
int i5;
|
|
int position = parsableBitArray.getPosition();
|
|
parsableBitArray.skipBits(40);
|
|
boolean z = parsableBitArray.readBits(5) == 16;
|
|
parsableBitArray.setPosition(position);
|
|
int i6 = -1;
|
|
if (z) {
|
|
parsableBitArray.skipBits(16);
|
|
int readBits2 = parsableBitArray.readBits(2);
|
|
if (readBits2 == 0) {
|
|
i6 = 0;
|
|
} else if (readBits2 == 1) {
|
|
i6 = 1;
|
|
} else if (readBits2 == 2) {
|
|
i6 = 2;
|
|
}
|
|
parsableBitArray.skipBits(3);
|
|
ac3SyncframeSize = (parsableBitArray.readBits(11) + 1) * 2;
|
|
int readBits3 = parsableBitArray.readBits(2);
|
|
if (readBits3 == 3) {
|
|
i4 = 6;
|
|
i = SAMPLE_RATE_BY_FSCOD2[parsableBitArray.readBits(2)];
|
|
readBits = 3;
|
|
} else {
|
|
readBits = parsableBitArray.readBits(2);
|
|
i4 = BLOCKS_PER_SYNCFRAME_BY_NUMBLKSCOD[readBits];
|
|
i = SAMPLE_RATE_BY_FSCOD[readBits3];
|
|
}
|
|
i3 = i4 * 256;
|
|
int readBits4 = parsableBitArray.readBits(3);
|
|
boolean readBit = parsableBitArray.readBit();
|
|
i2 = CHANNEL_COUNT_BY_ACMOD[readBits4] + (readBit ? 1 : 0);
|
|
parsableBitArray.skipBits(10);
|
|
if (parsableBitArray.readBit()) {
|
|
parsableBitArray.skipBits(8);
|
|
}
|
|
if (readBits4 == 0) {
|
|
parsableBitArray.skipBits(5);
|
|
if (parsableBitArray.readBit()) {
|
|
parsableBitArray.skipBits(8);
|
|
}
|
|
}
|
|
if (i6 == 1 && parsableBitArray.readBit()) {
|
|
parsableBitArray.skipBits(16);
|
|
}
|
|
if (parsableBitArray.readBit()) {
|
|
if (readBits4 > 2) {
|
|
parsableBitArray.skipBits(2);
|
|
}
|
|
if ((readBits4 & 1) != 0 && readBits4 > 2) {
|
|
parsableBitArray.skipBits(6);
|
|
}
|
|
if ((readBits4 & 4) != 0) {
|
|
parsableBitArray.skipBits(6);
|
|
}
|
|
if (readBit && parsableBitArray.readBit()) {
|
|
parsableBitArray.skipBits(5);
|
|
}
|
|
if (i6 == 0) {
|
|
if (parsableBitArray.readBit()) {
|
|
parsableBitArray.skipBits(6);
|
|
}
|
|
if (readBits4 == 0 && parsableBitArray.readBit()) {
|
|
parsableBitArray.skipBits(6);
|
|
}
|
|
if (parsableBitArray.readBit()) {
|
|
parsableBitArray.skipBits(6);
|
|
}
|
|
int readBits5 = parsableBitArray.readBits(2);
|
|
if (readBits5 == 1) {
|
|
parsableBitArray.skipBits(5);
|
|
} else if (readBits5 == 2) {
|
|
parsableBitArray.skipBits(12);
|
|
} else if (readBits5 == 3) {
|
|
int readBits6 = parsableBitArray.readBits(5);
|
|
if (parsableBitArray.readBit()) {
|
|
parsableBitArray.skipBits(5);
|
|
if (parsableBitArray.readBit()) {
|
|
parsableBitArray.skipBits(4);
|
|
}
|
|
if (parsableBitArray.readBit()) {
|
|
parsableBitArray.skipBits(4);
|
|
}
|
|
if (parsableBitArray.readBit()) {
|
|
parsableBitArray.skipBits(4);
|
|
}
|
|
if (parsableBitArray.readBit()) {
|
|
parsableBitArray.skipBits(4);
|
|
}
|
|
if (parsableBitArray.readBit()) {
|
|
parsableBitArray.skipBits(4);
|
|
}
|
|
if (parsableBitArray.readBit()) {
|
|
parsableBitArray.skipBits(4);
|
|
}
|
|
if (parsableBitArray.readBit()) {
|
|
parsableBitArray.skipBits(4);
|
|
}
|
|
if (parsableBitArray.readBit()) {
|
|
if (parsableBitArray.readBit()) {
|
|
parsableBitArray.skipBits(4);
|
|
}
|
|
if (parsableBitArray.readBit()) {
|
|
parsableBitArray.skipBits(4);
|
|
}
|
|
}
|
|
}
|
|
if (parsableBitArray.readBit()) {
|
|
parsableBitArray.skipBits(5);
|
|
if (parsableBitArray.readBit()) {
|
|
parsableBitArray.skipBits(7);
|
|
if (parsableBitArray.readBit()) {
|
|
parsableBitArray.skipBits(8);
|
|
}
|
|
}
|
|
}
|
|
parsableBitArray.skipBits((readBits6 + 2) * 8);
|
|
parsableBitArray.byteAlign();
|
|
}
|
|
if (readBits4 < 2) {
|
|
if (parsableBitArray.readBit()) {
|
|
parsableBitArray.skipBits(14);
|
|
}
|
|
if (readBits4 == 0 && parsableBitArray.readBit()) {
|
|
parsableBitArray.skipBits(14);
|
|
}
|
|
}
|
|
if (parsableBitArray.readBit()) {
|
|
if (readBits == 0) {
|
|
parsableBitArray.skipBits(5);
|
|
} else {
|
|
for (int i7 = 0; i7 < i4; i7++) {
|
|
if (parsableBitArray.readBit()) {
|
|
parsableBitArray.skipBits(5);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if (parsableBitArray.readBit()) {
|
|
parsableBitArray.skipBits(5);
|
|
if (readBits4 == 2) {
|
|
parsableBitArray.skipBits(4);
|
|
}
|
|
if (readBits4 >= 6) {
|
|
parsableBitArray.skipBits(2);
|
|
}
|
|
if (parsableBitArray.readBit()) {
|
|
parsableBitArray.skipBits(8);
|
|
}
|
|
if (readBits4 == 0 && parsableBitArray.readBit()) {
|
|
parsableBitArray.skipBits(8);
|
|
}
|
|
i5 = 3;
|
|
if (readBits3 < 3) {
|
|
parsableBitArray.skipBit();
|
|
}
|
|
} else {
|
|
i5 = 3;
|
|
}
|
|
if (i6 == 0 && readBits != i5) {
|
|
parsableBitArray.skipBit();
|
|
}
|
|
if (i6 == 2 && (readBits == i5 || parsableBitArray.readBit())) {
|
|
parsableBitArray.skipBits(6);
|
|
}
|
|
str = (parsableBitArray.readBit() && parsableBitArray.readBits(6) == 1 && parsableBitArray.readBits(8) == 1) ? MimeTypes.AUDIO_E_AC3_JOC : MimeTypes.AUDIO_E_AC3;
|
|
} else {
|
|
parsableBitArray.skipBits(32);
|
|
int readBits7 = parsableBitArray.readBits(2);
|
|
ac3SyncframeSize = getAc3SyncframeSize(readBits7, parsableBitArray.readBits(6));
|
|
parsableBitArray.skipBits(8);
|
|
int readBits8 = parsableBitArray.readBits(3);
|
|
if ((readBits8 & 1) != 0 && readBits8 != 1) {
|
|
parsableBitArray.skipBits(2);
|
|
}
|
|
if ((readBits8 & 4) != 0) {
|
|
parsableBitArray.skipBits(2);
|
|
}
|
|
if (readBits8 == 2) {
|
|
parsableBitArray.skipBits(2);
|
|
}
|
|
i = SAMPLE_RATE_BY_FSCOD[readBits7];
|
|
i2 = CHANNEL_COUNT_BY_ACMOD[readBits8] + (parsableBitArray.readBit() ? 1 : 0);
|
|
str = MimeTypes.AUDIO_AC3;
|
|
i3 = AC3_SYNCFRAME_AUDIO_SAMPLE_COUNT;
|
|
}
|
|
return new SyncFrameInfo(str, i6, i2, i, ac3SyncframeSize, i3);
|
|
}
|
|
|
|
public static int parseAc3SyncframeSize(byte[] bArr) {
|
|
if (bArr.length < 5) {
|
|
return -1;
|
|
}
|
|
byte b = bArr[4];
|
|
return getAc3SyncframeSize((b & 192) >> 6, b & 63);
|
|
}
|
|
|
|
public static int parseEAc3SyncframeAudioSampleCount(ByteBuffer byteBuffer) {
|
|
return (((byteBuffer.get(byteBuffer.position() + 4) & 192) >> 6) != 3 ? BLOCKS_PER_SYNCFRAME_BY_NUMBLKSCOD[(byteBuffer.get(byteBuffer.position() + 4) & 48) >> 4] : 6) * 256;
|
|
}
|
|
|
|
public static int findTrueHdSyncframeOffset(ByteBuffer byteBuffer) {
|
|
int position = byteBuffer.position();
|
|
int limit = byteBuffer.limit() - 10;
|
|
for (int i = position; i <= limit; i++) {
|
|
if ((byteBuffer.getInt(i + 4) & (-16777217)) == -1167101192) {
|
|
return i - position;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
public static int parseTrueHdSyncframeAudioSampleCount(byte[] bArr) {
|
|
if (bArr[4] == -8 && bArr[5] == 114 && bArr[6] == 111) {
|
|
byte b = bArr[7];
|
|
if ((b & 254) == 186) {
|
|
return 40 << ((bArr[(b & 255) == 187 ? '\t' : '\b'] >> 4) & 7);
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
public static int parseTrueHdSyncframeAudioSampleCount(ByteBuffer byteBuffer, int i) {
|
|
return 40 << ((byteBuffer.get((byteBuffer.position() + i) + ((byteBuffer.get((byteBuffer.position() + i) + 7) & 255) == 187 ? 9 : 8)) >> 4) & 7);
|
|
}
|
|
|
|
private static int getAc3SyncframeSize(int i, int i2) {
|
|
int i3 = i2 / 2;
|
|
if (i < 0) {
|
|
return -1;
|
|
}
|
|
int[] iArr = SAMPLE_RATE_BY_FSCOD;
|
|
if (i >= iArr.length || i2 < 0) {
|
|
return -1;
|
|
}
|
|
int[] iArr2 = SYNCFRAME_SIZE_WORDS_BY_HALF_FRMSIZECOD_44_1;
|
|
if (i3 >= iArr2.length) {
|
|
return -1;
|
|
}
|
|
int i4 = iArr[i];
|
|
if (i4 == 44100) {
|
|
return (iArr2[i3] + (i2 % 2)) * 2;
|
|
}
|
|
int i5 = BITRATE_BY_HALF_FRMSIZECOD[i3];
|
|
return i4 == 32000 ? i5 * 6 : i5 * 4;
|
|
}
|
|
}
|