Files
rr3-apk/decompiled-community/sources/com/mbridge/msdk/playercommon/exoplayer2/source/SingleSampleMediaPeriod.java
Daniel Elliott c080f0d97f 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
2026-02-18 15:48:36 -08:00

290 lines
12 KiB
Java

package com.mbridge.msdk.playercommon.exoplayer2.source;
import com.mbridge.msdk.playercommon.exoplayer2.C;
import com.mbridge.msdk.playercommon.exoplayer2.Format;
import com.mbridge.msdk.playercommon.exoplayer2.FormatHolder;
import com.mbridge.msdk.playercommon.exoplayer2.SeekParameters;
import com.mbridge.msdk.playercommon.exoplayer2.decoder.DecoderInputBuffer;
import com.mbridge.msdk.playercommon.exoplayer2.source.MediaPeriod;
import com.mbridge.msdk.playercommon.exoplayer2.source.MediaSourceEventListener;
import com.mbridge.msdk.playercommon.exoplayer2.trackselection.TrackSelection;
import com.mbridge.msdk.playercommon.exoplayer2.upstream.DataSource;
import com.mbridge.msdk.playercommon.exoplayer2.upstream.DataSpec;
import com.mbridge.msdk.playercommon.exoplayer2.upstream.Loader;
import com.mbridge.msdk.playercommon.exoplayer2.util.MimeTypes;
import com.mbridge.msdk.playercommon.exoplayer2.util.Util;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
/* loaded from: classes4.dex */
final class SingleSampleMediaPeriod implements MediaPeriod, Loader.Callback<SourceLoadable> {
private static final int INITIAL_SAMPLE_SIZE = 1024;
private final DataSource.Factory dataSourceFactory;
private final DataSpec dataSpec;
private final long durationUs;
private int errorCount;
private final MediaSourceEventListener.EventDispatcher eventDispatcher;
final Format format;
boolean loadingFinished;
boolean loadingSucceeded;
private final int minLoadableRetryCount;
boolean notifiedReadingStarted;
byte[] sampleData;
int sampleSize;
private final TrackGroupArray tracks;
final boolean treatLoadErrorsAsEndOfStream;
private final ArrayList<SampleStreamImpl> sampleStreams = new ArrayList<>();
final Loader loader = new Loader("Loader:SingleSampleMediaPeriod");
@Override // com.mbridge.msdk.playercommon.exoplayer2.source.MediaPeriod
public final void discardBuffer(long j, boolean z) {
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.source.MediaPeriod
public final long getAdjustedSeekPositionUs(long j, SeekParameters seekParameters) {
return j;
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.source.MediaPeriod, com.mbridge.msdk.playercommon.exoplayer2.source.SequenceableLoader
public final long getBufferedPositionUs() {
return this.loadingFinished ? Long.MIN_VALUE : 0L;
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.source.MediaPeriod
public final TrackGroupArray getTrackGroups() {
return this.tracks;
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.source.MediaPeriod
public final void maybeThrowPrepareError() throws IOException {
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.source.MediaPeriod, com.mbridge.msdk.playercommon.exoplayer2.source.SequenceableLoader
public final void reevaluateBuffer(long j) {
}
public SingleSampleMediaPeriod(DataSpec dataSpec, DataSource.Factory factory, Format format, long j, int i, MediaSourceEventListener.EventDispatcher eventDispatcher, boolean z) {
this.dataSpec = dataSpec;
this.dataSourceFactory = factory;
this.format = format;
this.durationUs = j;
this.minLoadableRetryCount = i;
this.eventDispatcher = eventDispatcher;
this.treatLoadErrorsAsEndOfStream = z;
this.tracks = new TrackGroupArray(new TrackGroup(format));
eventDispatcher.mediaPeriodCreated();
}
public final void release() {
this.loader.release();
this.eventDispatcher.mediaPeriodReleased();
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.source.MediaPeriod
public final void prepare(MediaPeriod.Callback callback, long j) {
callback.onPrepared(this);
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.source.MediaPeriod
public final long selectTracks(TrackSelection[] trackSelectionArr, boolean[] zArr, SampleStream[] sampleStreamArr, boolean[] zArr2, long j) {
for (int i = 0; i < trackSelectionArr.length; i++) {
SampleStream sampleStream = sampleStreamArr[i];
if (sampleStream != null && (trackSelectionArr[i] == null || !zArr[i])) {
this.sampleStreams.remove(sampleStream);
sampleStreamArr[i] = null;
}
if (sampleStreamArr[i] == null && trackSelectionArr[i] != null) {
SampleStreamImpl sampleStreamImpl = new SampleStreamImpl();
this.sampleStreams.add(sampleStreamImpl);
sampleStreamArr[i] = sampleStreamImpl;
zArr2[i] = true;
}
}
return j;
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.source.MediaPeriod, com.mbridge.msdk.playercommon.exoplayer2.source.SequenceableLoader
public final boolean continueLoading(long j) {
if (this.loadingFinished || this.loader.isLoading()) {
return false;
}
this.eventDispatcher.loadStarted(this.dataSpec, 1, -1, this.format, 0, null, 0L, this.durationUs, this.loader.startLoading(new SourceLoadable(this.dataSpec, this.dataSourceFactory.createDataSource()), this, this.minLoadableRetryCount));
return true;
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.source.MediaPeriod
public final long readDiscontinuity() {
if (this.notifiedReadingStarted) {
return C.TIME_UNSET;
}
this.eventDispatcher.readingStarted();
this.notifiedReadingStarted = true;
return C.TIME_UNSET;
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.source.MediaPeriod, com.mbridge.msdk.playercommon.exoplayer2.source.SequenceableLoader
public final long getNextLoadPositionUs() {
return (this.loadingFinished || this.loader.isLoading()) ? Long.MIN_VALUE : 0L;
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.source.MediaPeriod
public final long seekToUs(long j) {
for (int i = 0; i < this.sampleStreams.size(); i++) {
this.sampleStreams.get(i).reset();
}
return j;
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.upstream.Loader.Callback
public final void onLoadCompleted(SourceLoadable sourceLoadable, long j, long j2) {
this.eventDispatcher.loadCompleted(sourceLoadable.dataSpec, 1, -1, this.format, 0, null, 0L, this.durationUs, j, j2, sourceLoadable.sampleSize);
this.sampleSize = sourceLoadable.sampleSize;
this.sampleData = sourceLoadable.sampleData;
this.loadingFinished = true;
this.loadingSucceeded = true;
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.upstream.Loader.Callback
public final void onLoadCanceled(SourceLoadable sourceLoadable, long j, long j2, boolean z) {
this.eventDispatcher.loadCanceled(sourceLoadable.dataSpec, 1, -1, null, 0, null, 0L, this.durationUs, j, j2, sourceLoadable.sampleSize);
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.upstream.Loader.Callback
public final int onLoadError(SourceLoadable sourceLoadable, long j, long j2, IOException iOException) {
int i = this.errorCount + 1;
this.errorCount = i;
boolean z = this.treatLoadErrorsAsEndOfStream && i >= this.minLoadableRetryCount;
this.eventDispatcher.loadError(sourceLoadable.dataSpec, 1, -1, this.format, 0, null, 0L, this.durationUs, j, j2, sourceLoadable.sampleSize, iOException, z);
if (!z) {
return 0;
}
this.loadingFinished = true;
return 2;
}
public final class SampleStreamImpl implements SampleStream {
private static final int STREAM_STATE_END_OF_STREAM = 2;
private static final int STREAM_STATE_SEND_FORMAT = 0;
private static final int STREAM_STATE_SEND_SAMPLE = 1;
private boolean formatSent;
private int streamState;
public final void reset() {
if (this.streamState == 2) {
this.streamState = 1;
}
}
private SampleStreamImpl() {
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.source.SampleStream
public final boolean isReady() {
return SingleSampleMediaPeriod.this.loadingFinished;
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.source.SampleStream
public final void maybeThrowError() throws IOException {
SingleSampleMediaPeriod singleSampleMediaPeriod = SingleSampleMediaPeriod.this;
if (singleSampleMediaPeriod.treatLoadErrorsAsEndOfStream) {
return;
}
singleSampleMediaPeriod.loader.maybeThrowError();
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.source.SampleStream
public final int readData(FormatHolder formatHolder, DecoderInputBuffer decoderInputBuffer, boolean z) {
int i = this.streamState;
if (i == 2) {
decoderInputBuffer.addFlag(4);
return -4;
}
if (z || i == 0) {
formatHolder.format = SingleSampleMediaPeriod.this.format;
this.streamState = 1;
return -5;
}
SingleSampleMediaPeriod singleSampleMediaPeriod = SingleSampleMediaPeriod.this;
if (!singleSampleMediaPeriod.loadingFinished) {
return -3;
}
if (singleSampleMediaPeriod.loadingSucceeded) {
decoderInputBuffer.timeUs = 0L;
decoderInputBuffer.addFlag(1);
decoderInputBuffer.ensureSpaceForWrite(SingleSampleMediaPeriod.this.sampleSize);
ByteBuffer byteBuffer = decoderInputBuffer.data;
SingleSampleMediaPeriod singleSampleMediaPeriod2 = SingleSampleMediaPeriod.this;
byteBuffer.put(singleSampleMediaPeriod2.sampleData, 0, singleSampleMediaPeriod2.sampleSize);
sendFormat();
} else {
decoderInputBuffer.addFlag(4);
}
this.streamState = 2;
return -4;
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.source.SampleStream
public final int skipData(long j) {
if (j <= 0 || this.streamState == 2) {
return 0;
}
this.streamState = 2;
sendFormat();
return 1;
}
private void sendFormat() {
if (this.formatSent) {
return;
}
SingleSampleMediaPeriod.this.eventDispatcher.downstreamFormatChanged(MimeTypes.getTrackType(SingleSampleMediaPeriod.this.format.sampleMimeType), SingleSampleMediaPeriod.this.format, 0, null, 0L);
this.formatSent = true;
}
}
public static final class SourceLoadable implements Loader.Loadable {
private final DataSource dataSource;
public final DataSpec dataSpec;
private byte[] sampleData;
private int sampleSize;
@Override // com.mbridge.msdk.playercommon.exoplayer2.upstream.Loader.Loadable
public final void cancelLoad() {
}
public SourceLoadable(DataSpec dataSpec, DataSource dataSource) {
this.dataSpec = dataSpec;
this.dataSource = dataSource;
}
@Override // com.mbridge.msdk.playercommon.exoplayer2.upstream.Loader.Loadable
public final void load() throws IOException, InterruptedException {
int i = 0;
this.sampleSize = 0;
try {
this.dataSource.open(this.dataSpec);
while (i != -1) {
int i2 = this.sampleSize + i;
this.sampleSize = i2;
byte[] bArr = this.sampleData;
if (bArr == null) {
this.sampleData = new byte[1024];
} else if (i2 == bArr.length) {
this.sampleData = Arrays.copyOf(bArr, bArr.length * 2);
}
DataSource dataSource = this.dataSource;
byte[] bArr2 = this.sampleData;
int i3 = this.sampleSize;
i = dataSource.read(bArr2, i3, bArr2.length - i3);
}
Util.closeQuietly(this.dataSource);
} catch (Throwable th) {
Util.closeQuietly(this.dataSource);
throw th;
}
}
}
}