mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2024-12-27 09:32:27 -06:00
93 lines
3.2 KiB
Java
93 lines
3.2 KiB
Java
|
package androidx.media3.extractor;
|
||
|
|
||
|
import com.google.common.base.Ascii;
|
||
|
import java.nio.ByteBuffer;
|
||
|
import java.nio.ByteOrder;
|
||
|
import java.util.ArrayList;
|
||
|
import java.util.List;
|
||
|
import okio.Utf8;
|
||
|
|
||
|
/* loaded from: classes2.dex */
|
||
|
public class OpusUtil {
|
||
|
private static final int DEFAULT_SEEK_PRE_ROLL_SAMPLES = 3840;
|
||
|
private static final int FULL_CODEC_INITIALIZATION_DATA_BUFFER_COUNT = 3;
|
||
|
public static final int MAX_BYTES_PER_SECOND = 63750;
|
||
|
public static final int SAMPLE_RATE = 48000;
|
||
|
|
||
|
private static long getPacketDurationUs(byte b, byte b2) {
|
||
|
int i;
|
||
|
int i2 = b & 255;
|
||
|
int i3 = b & 3;
|
||
|
if (i3 != 0) {
|
||
|
i = 2;
|
||
|
if (i3 != 1 && i3 != 2) {
|
||
|
i = b2 & Utf8.REPLACEMENT_BYTE;
|
||
|
}
|
||
|
} else {
|
||
|
i = 1;
|
||
|
}
|
||
|
int i4 = i2 >> 3;
|
||
|
return i * (i4 >= 16 ? 2500 << r6 : i4 >= 12 ? 10000 << (i4 & 1) : (i4 & 3) == 3 ? 60000 : 10000 << r6);
|
||
|
}
|
||
|
|
||
|
private OpusUtil() {
|
||
|
}
|
||
|
|
||
|
public static int getChannelCount(byte[] bArr) {
|
||
|
return bArr[9] & 255;
|
||
|
}
|
||
|
|
||
|
public static List<byte[]> buildInitializationData(byte[] bArr) {
|
||
|
long sampleCountToNanoseconds = sampleCountToNanoseconds(getPreSkipSamples(bArr));
|
||
|
long sampleCountToNanoseconds2 = sampleCountToNanoseconds(3840L);
|
||
|
ArrayList arrayList = new ArrayList(3);
|
||
|
arrayList.add(bArr);
|
||
|
arrayList.add(buildNativeOrderByteArray(sampleCountToNanoseconds));
|
||
|
arrayList.add(buildNativeOrderByteArray(sampleCountToNanoseconds2));
|
||
|
return arrayList;
|
||
|
}
|
||
|
|
||
|
public static int parseOggPacketAudioSampleCount(ByteBuffer byteBuffer) {
|
||
|
int parseOggPacketForPreAudioSampleByteCount = parseOggPacketForPreAudioSampleByteCount(byteBuffer);
|
||
|
int i = byteBuffer.get(parseOggPacketForPreAudioSampleByteCount + 26) + Ascii.ESC + parseOggPacketForPreAudioSampleByteCount;
|
||
|
return (int) ((getPacketDurationUs(byteBuffer.get(i), byteBuffer.limit() - i > 1 ? byteBuffer.get(i + 1) : (byte) 0) * 48000) / 1000000);
|
||
|
}
|
||
|
|
||
|
public static int parseOggPacketForPreAudioSampleByteCount(ByteBuffer byteBuffer) {
|
||
|
if ((byteBuffer.get(5) & 2) == 0) {
|
||
|
return 0;
|
||
|
}
|
||
|
byte b = byteBuffer.get(26);
|
||
|
int i = 28;
|
||
|
int i2 = 28;
|
||
|
for (int i3 = 0; i3 < b; i3++) {
|
||
|
i2 += byteBuffer.get(i3 + 27);
|
||
|
}
|
||
|
byte b2 = byteBuffer.get(i2 + 26);
|
||
|
for (int i4 = 0; i4 < b2; i4++) {
|
||
|
i += byteBuffer.get(i2 + 27 + i4);
|
||
|
}
|
||
|
return i2 + i;
|
||
|
}
|
||
|
|
||
|
public static int parsePacketAudioSampleCount(ByteBuffer byteBuffer) {
|
||
|
return (int) ((getPacketDurationUs(byteBuffer.get(0), byteBuffer.limit() > 1 ? byteBuffer.get(1) : (byte) 0) * 48000) / 1000000);
|
||
|
}
|
||
|
|
||
|
public static long getPacketDurationUs(byte[] bArr) {
|
||
|
return getPacketDurationUs(bArr[0], bArr.length > 1 ? bArr[1] : (byte) 0);
|
||
|
}
|
||
|
|
||
|
private static int getPreSkipSamples(byte[] bArr) {
|
||
|
return (bArr[10] & 255) | ((bArr[11] & 255) << 8);
|
||
|
}
|
||
|
|
||
|
private static byte[] buildNativeOrderByteArray(long j) {
|
||
|
return ByteBuffer.allocate(8).order(ByteOrder.nativeOrder()).putLong(j).array();
|
||
|
}
|
||
|
|
||
|
private static long sampleCountToNanoseconds(long j) {
|
||
|
return (j * 1000000000) / 48000;
|
||
|
}
|
||
|
}
|