mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2024-12-28 01:52:26 -06:00
101 lines
3.7 KiB
Java
101 lines
3.7 KiB
Java
|
package androidx.media3.extractor.ogg;
|
||
|
|
||
|
import androidx.media3.common.util.Assertions;
|
||
|
import androidx.media3.common.util.ParsableByteArray;
|
||
|
import androidx.media3.extractor.ExtractorInput;
|
||
|
import androidx.media3.extractor.ExtractorUtil;
|
||
|
import java.io.IOException;
|
||
|
import java.util.Arrays;
|
||
|
|
||
|
/* loaded from: classes2.dex */
|
||
|
final class OggPacket {
|
||
|
private boolean populated;
|
||
|
private int segmentCount;
|
||
|
private final OggPageHeader pageHeader = new OggPageHeader();
|
||
|
private final ParsableByteArray packetArray = new ParsableByteArray(new byte[65025], 0);
|
||
|
private int currentSegmentIndex = -1;
|
||
|
|
||
|
public OggPageHeader getPageHeader() {
|
||
|
return this.pageHeader;
|
||
|
}
|
||
|
|
||
|
public ParsableByteArray getPayload() {
|
||
|
return this.packetArray;
|
||
|
}
|
||
|
|
||
|
public void reset() {
|
||
|
this.pageHeader.reset();
|
||
|
this.packetArray.reset(0);
|
||
|
this.currentSegmentIndex = -1;
|
||
|
this.populated = false;
|
||
|
}
|
||
|
|
||
|
public boolean populate(ExtractorInput extractorInput) throws IOException {
|
||
|
int i;
|
||
|
Assertions.checkState(extractorInput != null);
|
||
|
if (this.populated) {
|
||
|
this.populated = false;
|
||
|
this.packetArray.reset(0);
|
||
|
}
|
||
|
while (!this.populated) {
|
||
|
if (this.currentSegmentIndex < 0) {
|
||
|
if (!this.pageHeader.skipToNextPage(extractorInput) || !this.pageHeader.populate(extractorInput, true)) {
|
||
|
return false;
|
||
|
}
|
||
|
int i2 = this.pageHeader.headerSize;
|
||
|
if ((this.pageHeader.type & 1) == 1 && this.packetArray.limit() == 0) {
|
||
|
i2 += calculatePacketSize(0);
|
||
|
i = this.segmentCount;
|
||
|
} else {
|
||
|
i = 0;
|
||
|
}
|
||
|
if (!ExtractorUtil.skipFullyQuietly(extractorInput, i2)) {
|
||
|
return false;
|
||
|
}
|
||
|
this.currentSegmentIndex = i;
|
||
|
}
|
||
|
int calculatePacketSize = calculatePacketSize(this.currentSegmentIndex);
|
||
|
int i3 = this.currentSegmentIndex + this.segmentCount;
|
||
|
if (calculatePacketSize > 0) {
|
||
|
ParsableByteArray parsableByteArray = this.packetArray;
|
||
|
parsableByteArray.ensureCapacity(parsableByteArray.limit() + calculatePacketSize);
|
||
|
if (!ExtractorUtil.readFullyQuietly(extractorInput, this.packetArray.getData(), this.packetArray.limit(), calculatePacketSize)) {
|
||
|
return false;
|
||
|
}
|
||
|
ParsableByteArray parsableByteArray2 = this.packetArray;
|
||
|
parsableByteArray2.setLimit(parsableByteArray2.limit() + calculatePacketSize);
|
||
|
this.populated = this.pageHeader.laces[i3 + (-1)] != 255;
|
||
|
}
|
||
|
if (i3 == this.pageHeader.pageSegmentCount) {
|
||
|
i3 = -1;
|
||
|
}
|
||
|
this.currentSegmentIndex = i3;
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
public void trimPayload() {
|
||
|
if (this.packetArray.getData().length == 65025) {
|
||
|
return;
|
||
|
}
|
||
|
ParsableByteArray parsableByteArray = this.packetArray;
|
||
|
parsableByteArray.reset(Arrays.copyOf(parsableByteArray.getData(), Math.max(65025, this.packetArray.limit())), this.packetArray.limit());
|
||
|
}
|
||
|
|
||
|
private int calculatePacketSize(int i) {
|
||
|
int i2 = 0;
|
||
|
this.segmentCount = 0;
|
||
|
while (this.segmentCount + i < this.pageHeader.pageSegmentCount) {
|
||
|
int[] iArr = this.pageHeader.laces;
|
||
|
int i3 = this.segmentCount;
|
||
|
this.segmentCount = i3 + 1;
|
||
|
int i4 = iArr[i3 + i];
|
||
|
i2 += i4;
|
||
|
if (i4 != 255) {
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
return i2;
|
||
|
}
|
||
|
}
|