- 28,932 files - Full Java source code - Smali files - Resources Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
235 lines
9.6 KiB
Java
235 lines
9.6 KiB
Java
package com.mbridge.msdk.playercommon.exoplayer2;
|
|
|
|
import android.util.Log;
|
|
import com.mbridge.msdk.playercommon.exoplayer2.source.ClippingMediaPeriod;
|
|
import com.mbridge.msdk.playercommon.exoplayer2.source.EmptySampleStream;
|
|
import com.mbridge.msdk.playercommon.exoplayer2.source.MediaPeriod;
|
|
import com.mbridge.msdk.playercommon.exoplayer2.source.MediaSource;
|
|
import com.mbridge.msdk.playercommon.exoplayer2.source.SampleStream;
|
|
import com.mbridge.msdk.playercommon.exoplayer2.source.TrackGroupArray;
|
|
import com.mbridge.msdk.playercommon.exoplayer2.trackselection.TrackSelection;
|
|
import com.mbridge.msdk.playercommon.exoplayer2.trackselection.TrackSelectionArray;
|
|
import com.mbridge.msdk.playercommon.exoplayer2.trackselection.TrackSelector;
|
|
import com.mbridge.msdk.playercommon.exoplayer2.trackselection.TrackSelectorResult;
|
|
import com.mbridge.msdk.playercommon.exoplayer2.upstream.Allocator;
|
|
import com.mbridge.msdk.playercommon.exoplayer2.util.Assertions;
|
|
|
|
/* loaded from: classes4.dex */
|
|
final class MediaPeriodHolder {
|
|
private static final String TAG = "MediaPeriodHolder";
|
|
public boolean hasEnabledTracks;
|
|
public MediaPeriodInfo info;
|
|
public final boolean[] mayRetainStreamFlags;
|
|
public final MediaPeriod mediaPeriod;
|
|
private final MediaSource mediaSource;
|
|
public MediaPeriodHolder next;
|
|
private TrackSelectorResult periodTrackSelectorResult;
|
|
public boolean prepared;
|
|
private final RendererCapabilities[] rendererCapabilities;
|
|
public long rendererPositionOffsetUs;
|
|
public final SampleStream[] sampleStreams;
|
|
public TrackGroupArray trackGroups;
|
|
private final TrackSelector trackSelector;
|
|
public TrackSelectorResult trackSelectorResult;
|
|
public final Object uid;
|
|
|
|
public final long getRendererOffset() {
|
|
return this.rendererPositionOffsetUs;
|
|
}
|
|
|
|
public MediaPeriodHolder(RendererCapabilities[] rendererCapabilitiesArr, long j, TrackSelector trackSelector, Allocator allocator, MediaSource mediaSource, Object obj, MediaPeriodInfo mediaPeriodInfo) {
|
|
this.rendererCapabilities = rendererCapabilitiesArr;
|
|
this.rendererPositionOffsetUs = j - mediaPeriodInfo.startPositionUs;
|
|
this.trackSelector = trackSelector;
|
|
this.mediaSource = mediaSource;
|
|
this.uid = Assertions.checkNotNull(obj);
|
|
this.info = mediaPeriodInfo;
|
|
this.sampleStreams = new SampleStream[rendererCapabilitiesArr.length];
|
|
this.mayRetainStreamFlags = new boolean[rendererCapabilitiesArr.length];
|
|
MediaPeriod createPeriod = mediaSource.createPeriod(mediaPeriodInfo.id, allocator);
|
|
long j2 = mediaPeriodInfo.endPositionUs;
|
|
this.mediaPeriod = j2 != Long.MIN_VALUE ? new ClippingMediaPeriod(createPeriod, true, 0L, j2) : createPeriod;
|
|
}
|
|
|
|
public final long toRendererTime(long j) {
|
|
return j + getRendererOffset();
|
|
}
|
|
|
|
public final long toPeriodTime(long j) {
|
|
return j - getRendererOffset();
|
|
}
|
|
|
|
public final boolean isFullyBuffered() {
|
|
return this.prepared && (!this.hasEnabledTracks || this.mediaPeriod.getBufferedPositionUs() == Long.MIN_VALUE);
|
|
}
|
|
|
|
public final long getDurationUs() {
|
|
return this.info.durationUs;
|
|
}
|
|
|
|
public final long getBufferedPositionUs(boolean z) {
|
|
if (!this.prepared) {
|
|
return this.info.startPositionUs;
|
|
}
|
|
long bufferedPositionUs = this.mediaPeriod.getBufferedPositionUs();
|
|
return (bufferedPositionUs == Long.MIN_VALUE && z) ? this.info.durationUs : bufferedPositionUs;
|
|
}
|
|
|
|
public final long getNextLoadPositionUs() {
|
|
if (this.prepared) {
|
|
return this.mediaPeriod.getNextLoadPositionUs();
|
|
}
|
|
return 0L;
|
|
}
|
|
|
|
public final void handlePrepared(float f) throws ExoPlaybackException {
|
|
this.prepared = true;
|
|
this.trackGroups = this.mediaPeriod.getTrackGroups();
|
|
selectTracks(f);
|
|
long applyTrackSelection = applyTrackSelection(this.info.startPositionUs, false);
|
|
long j = this.rendererPositionOffsetUs;
|
|
MediaPeriodInfo mediaPeriodInfo = this.info;
|
|
this.rendererPositionOffsetUs = j + (mediaPeriodInfo.startPositionUs - applyTrackSelection);
|
|
this.info = mediaPeriodInfo.copyWithStartPositionUs(applyTrackSelection);
|
|
}
|
|
|
|
public final void reevaluateBuffer(long j) {
|
|
if (this.prepared) {
|
|
this.mediaPeriod.reevaluateBuffer(toPeriodTime(j));
|
|
}
|
|
}
|
|
|
|
public final void continueLoading(long j) {
|
|
this.mediaPeriod.continueLoading(toPeriodTime(j));
|
|
}
|
|
|
|
public final boolean selectTracks(float f) throws ExoPlaybackException {
|
|
TrackSelectorResult selectTracks = this.trackSelector.selectTracks(this.rendererCapabilities, this.trackGroups);
|
|
if (selectTracks.isEquivalent(this.periodTrackSelectorResult)) {
|
|
return false;
|
|
}
|
|
this.trackSelectorResult = selectTracks;
|
|
for (TrackSelection trackSelection : selectTracks.selections.getAll()) {
|
|
if (trackSelection != null) {
|
|
trackSelection.onPlaybackSpeed(f);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public final long applyTrackSelection(long j, boolean z) {
|
|
return applyTrackSelection(j, z, new boolean[this.rendererCapabilities.length]);
|
|
}
|
|
|
|
public final long applyTrackSelection(long j, boolean z, boolean[] zArr) {
|
|
int i = 0;
|
|
while (true) {
|
|
TrackSelectorResult trackSelectorResult = this.trackSelectorResult;
|
|
boolean z2 = true;
|
|
if (i >= trackSelectorResult.length) {
|
|
break;
|
|
}
|
|
boolean[] zArr2 = this.mayRetainStreamFlags;
|
|
if (z || !trackSelectorResult.isEquivalent(this.periodTrackSelectorResult, i)) {
|
|
z2 = false;
|
|
}
|
|
zArr2[i] = z2;
|
|
i++;
|
|
}
|
|
disassociateNoSampleRenderersWithEmptySampleStream(this.sampleStreams);
|
|
updatePeriodTrackSelectorResult(this.trackSelectorResult);
|
|
TrackSelectionArray trackSelectionArray = this.trackSelectorResult.selections;
|
|
long selectTracks = this.mediaPeriod.selectTracks(trackSelectionArray.getAll(), this.mayRetainStreamFlags, this.sampleStreams, zArr, j);
|
|
associateNoSampleRenderersWithEmptySampleStream(this.sampleStreams);
|
|
this.hasEnabledTracks = false;
|
|
int i2 = 0;
|
|
while (true) {
|
|
SampleStream[] sampleStreamArr = this.sampleStreams;
|
|
if (i2 >= sampleStreamArr.length) {
|
|
return selectTracks;
|
|
}
|
|
if (sampleStreamArr[i2] != null) {
|
|
Assertions.checkState(this.trackSelectorResult.isRendererEnabled(i2));
|
|
if (this.rendererCapabilities[i2].getTrackType() != 5) {
|
|
this.hasEnabledTracks = true;
|
|
}
|
|
} else {
|
|
Assertions.checkState(trackSelectionArray.get(i2) == null);
|
|
}
|
|
i2++;
|
|
}
|
|
}
|
|
|
|
public final void release() {
|
|
updatePeriodTrackSelectorResult(null);
|
|
try {
|
|
if (this.info.endPositionUs != Long.MIN_VALUE) {
|
|
this.mediaSource.releasePeriod(((ClippingMediaPeriod) this.mediaPeriod).mediaPeriod);
|
|
} else {
|
|
this.mediaSource.releasePeriod(this.mediaPeriod);
|
|
}
|
|
} catch (RuntimeException e) {
|
|
Log.e(TAG, "Period release failed.", e);
|
|
}
|
|
}
|
|
|
|
private void updatePeriodTrackSelectorResult(TrackSelectorResult trackSelectorResult) {
|
|
TrackSelectorResult trackSelectorResult2 = this.periodTrackSelectorResult;
|
|
if (trackSelectorResult2 != null) {
|
|
disableTrackSelectionsInResult(trackSelectorResult2);
|
|
}
|
|
this.periodTrackSelectorResult = trackSelectorResult;
|
|
if (trackSelectorResult != null) {
|
|
enableTrackSelectionsInResult(trackSelectorResult);
|
|
}
|
|
}
|
|
|
|
private void enableTrackSelectionsInResult(TrackSelectorResult trackSelectorResult) {
|
|
for (int i = 0; i < trackSelectorResult.length; i++) {
|
|
boolean isRendererEnabled = trackSelectorResult.isRendererEnabled(i);
|
|
TrackSelection trackSelection = trackSelectorResult.selections.get(i);
|
|
if (isRendererEnabled && trackSelection != null) {
|
|
trackSelection.enable();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void disableTrackSelectionsInResult(TrackSelectorResult trackSelectorResult) {
|
|
for (int i = 0; i < trackSelectorResult.length; i++) {
|
|
boolean isRendererEnabled = trackSelectorResult.isRendererEnabled(i);
|
|
TrackSelection trackSelection = trackSelectorResult.selections.get(i);
|
|
if (isRendererEnabled && trackSelection != null) {
|
|
trackSelection.disable();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void disassociateNoSampleRenderersWithEmptySampleStream(SampleStream[] sampleStreamArr) {
|
|
int i = 0;
|
|
while (true) {
|
|
RendererCapabilities[] rendererCapabilitiesArr = this.rendererCapabilities;
|
|
if (i >= rendererCapabilitiesArr.length) {
|
|
return;
|
|
}
|
|
if (rendererCapabilitiesArr[i].getTrackType() == 5) {
|
|
sampleStreamArr[i] = null;
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
|
|
private void associateNoSampleRenderersWithEmptySampleStream(SampleStream[] sampleStreamArr) {
|
|
int i = 0;
|
|
while (true) {
|
|
RendererCapabilities[] rendererCapabilitiesArr = this.rendererCapabilities;
|
|
if (i >= rendererCapabilitiesArr.length) {
|
|
return;
|
|
}
|
|
if (rendererCapabilitiesArr[i].getTrackType() == 5 && this.trackSelectorResult.isRendererEnabled(i)) {
|
|
sampleStreamArr[i] = new EmptySampleStream();
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
}
|