Files
rr3-apk/decompiled/sources/com/mbridge/msdk/playercommon/exoplayer2/MediaPeriodQueue.java
Daniel Elliott f9d20bb3fc Add decompiled APK source code (JADX)
- 28,932 files
- Full Java source code
- Smali files
- Resources

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-18 14:52:23 -08:00

433 lines
21 KiB
Java

package com.mbridge.msdk.playercommon.exoplayer2;
import android.util.Pair;
import androidx.annotation.Nullable;
import com.mbridge.msdk.playercommon.exoplayer2.Timeline;
import com.mbridge.msdk.playercommon.exoplayer2.source.MediaPeriod;
import com.mbridge.msdk.playercommon.exoplayer2.source.MediaSource;
import com.mbridge.msdk.playercommon.exoplayer2.trackselection.TrackSelector;
import com.mbridge.msdk.playercommon.exoplayer2.upstream.Allocator;
import com.mbridge.msdk.playercommon.exoplayer2.util.Assertions;
/* loaded from: classes4.dex */
final class MediaPeriodQueue {
private static final int MAXIMUM_BUFFER_AHEAD_PERIODS = 100;
private int length;
private MediaPeriodHolder loading;
private long nextWindowSequenceNumber;
private Object oldFrontPeriodUid;
private long oldFrontPeriodWindowSequenceNumber;
private MediaPeriodHolder playing;
private MediaPeriodHolder reading;
private int repeatMode;
private boolean shuffleModeEnabled;
private Timeline timeline;
private final Timeline.Period period = new Timeline.Period();
private final Timeline.Window window = new Timeline.Window();
public final MediaPeriodHolder getLoadingPeriod() {
return this.loading;
}
public final MediaPeriodHolder getPlayingPeriod() {
return this.playing;
}
public final MediaPeriodHolder getReadingPeriod() {
return this.reading;
}
public final boolean hasPlayingPeriod() {
return this.playing != null;
}
public final void setTimeline(Timeline timeline) {
this.timeline = timeline;
}
public final boolean updateRepeatMode(int i) {
this.repeatMode = i;
return updateForPlaybackModeChange();
}
public final boolean updateShuffleModeEnabled(boolean z) {
this.shuffleModeEnabled = z;
return updateForPlaybackModeChange();
}
public final boolean isLoading(MediaPeriod mediaPeriod) {
MediaPeriodHolder mediaPeriodHolder = this.loading;
return mediaPeriodHolder != null && mediaPeriodHolder.mediaPeriod == mediaPeriod;
}
public final void reevaluateBuffer(long j) {
MediaPeriodHolder mediaPeriodHolder = this.loading;
if (mediaPeriodHolder != null) {
mediaPeriodHolder.reevaluateBuffer(j);
}
}
public final boolean shouldLoadNextMediaPeriod() {
MediaPeriodHolder mediaPeriodHolder = this.loading;
return mediaPeriodHolder == null || (!mediaPeriodHolder.info.isFinal && mediaPeriodHolder.isFullyBuffered() && this.loading.info.durationUs != C.TIME_UNSET && this.length < 100);
}
@Nullable
public final MediaPeriodInfo getNextMediaPeriodInfo(long j, PlaybackInfo playbackInfo) {
MediaPeriodHolder mediaPeriodHolder = this.loading;
if (mediaPeriodHolder == null) {
return getFirstMediaPeriodInfo(playbackInfo);
}
return getFollowingMediaPeriodInfo(mediaPeriodHolder, j);
}
public final MediaPeriod enqueueNextMediaPeriod(RendererCapabilities[] rendererCapabilitiesArr, TrackSelector trackSelector, Allocator allocator, MediaSource mediaSource, Object obj, MediaPeriodInfo mediaPeriodInfo) {
long rendererOffset;
MediaPeriodHolder mediaPeriodHolder = this.loading;
if (mediaPeriodHolder == null) {
rendererOffset = mediaPeriodInfo.startPositionUs;
} else {
rendererOffset = mediaPeriodHolder.getRendererOffset() + this.loading.info.durationUs;
}
MediaPeriodHolder mediaPeriodHolder2 = new MediaPeriodHolder(rendererCapabilitiesArr, rendererOffset, trackSelector, allocator, mediaSource, obj, mediaPeriodInfo);
if (this.loading != null) {
Assertions.checkState(hasPlayingPeriod());
this.loading.next = mediaPeriodHolder2;
}
this.oldFrontPeriodUid = null;
this.loading = mediaPeriodHolder2;
this.length++;
return mediaPeriodHolder2.mediaPeriod;
}
public final MediaPeriodHolder getFrontPeriod() {
return hasPlayingPeriod() ? this.playing : this.loading;
}
public final MediaPeriodHolder advanceReadingPeriod() {
MediaPeriodHolder mediaPeriodHolder = this.reading;
Assertions.checkState((mediaPeriodHolder == null || mediaPeriodHolder.next == null) ? false : true);
MediaPeriodHolder mediaPeriodHolder2 = this.reading.next;
this.reading = mediaPeriodHolder2;
return mediaPeriodHolder2;
}
public final MediaPeriodHolder advancePlayingPeriod() {
MediaPeriodHolder mediaPeriodHolder = this.playing;
if (mediaPeriodHolder != null) {
if (mediaPeriodHolder == this.reading) {
this.reading = mediaPeriodHolder.next;
}
mediaPeriodHolder.release();
int i = this.length - 1;
this.length = i;
if (i == 0) {
this.loading = null;
MediaPeriodHolder mediaPeriodHolder2 = this.playing;
this.oldFrontPeriodUid = mediaPeriodHolder2.uid;
this.oldFrontPeriodWindowSequenceNumber = mediaPeriodHolder2.info.id.windowSequenceNumber;
}
this.playing = this.playing.next;
} else {
MediaPeriodHolder mediaPeriodHolder3 = this.loading;
this.playing = mediaPeriodHolder3;
this.reading = mediaPeriodHolder3;
}
return this.playing;
}
public final boolean removeAfter(MediaPeriodHolder mediaPeriodHolder) {
boolean z = false;
Assertions.checkState(mediaPeriodHolder != null);
this.loading = mediaPeriodHolder;
while (true) {
mediaPeriodHolder = mediaPeriodHolder.next;
if (mediaPeriodHolder != null) {
if (mediaPeriodHolder == this.reading) {
this.reading = this.playing;
z = true;
}
mediaPeriodHolder.release();
this.length--;
} else {
this.loading.next = null;
return z;
}
}
}
public final void clear(boolean z) {
MediaPeriodHolder frontPeriod = getFrontPeriod();
if (frontPeriod != null) {
this.oldFrontPeriodUid = z ? frontPeriod.uid : null;
this.oldFrontPeriodWindowSequenceNumber = frontPeriod.info.id.windowSequenceNumber;
frontPeriod.release();
removeAfter(frontPeriod);
} else if (!z) {
this.oldFrontPeriodUid = null;
}
this.playing = null;
this.loading = null;
this.reading = null;
this.length = 0;
}
public final boolean updateQueuedPeriods(MediaSource.MediaPeriodId mediaPeriodId, long j) {
int i = mediaPeriodId.periodIndex;
MediaPeriodHolder mediaPeriodHolder = null;
int i2 = i;
for (MediaPeriodHolder frontPeriod = getFrontPeriod(); frontPeriod != null; frontPeriod = frontPeriod.next) {
if (mediaPeriodHolder == null) {
frontPeriod.info = getUpdatedMediaPeriodInfo(frontPeriod.info, i2);
} else {
if (i2 == -1 || !frontPeriod.uid.equals(this.timeline.getPeriod(i2, this.period, true).uid)) {
return true ^ removeAfter(mediaPeriodHolder);
}
MediaPeriodInfo followingMediaPeriodInfo = getFollowingMediaPeriodInfo(mediaPeriodHolder, j);
if (followingMediaPeriodInfo == null) {
return true ^ removeAfter(mediaPeriodHolder);
}
frontPeriod.info = getUpdatedMediaPeriodInfo(frontPeriod.info, i2);
if (!canKeepMediaPeriodHolder(frontPeriod, followingMediaPeriodInfo)) {
return true ^ removeAfter(mediaPeriodHolder);
}
}
if (frontPeriod.info.isLastInTimelinePeriod) {
i2 = this.timeline.getNextPeriodIndex(i2, this.period, this.window, this.repeatMode, this.shuffleModeEnabled);
}
mediaPeriodHolder = frontPeriod;
}
return true;
}
public final MediaPeriodInfo getUpdatedMediaPeriodInfo(MediaPeriodInfo mediaPeriodInfo, int i) {
return getUpdatedMediaPeriodInfo(mediaPeriodInfo, mediaPeriodInfo.id.copyWithPeriodIndex(i));
}
public final MediaSource.MediaPeriodId resolveMediaPeriodIdForAds(int i, long j) {
return resolveMediaPeriodIdForAds(i, j, resolvePeriodIndexToWindowSequenceNumber(i));
}
private MediaSource.MediaPeriodId resolveMediaPeriodIdForAds(int i, long j, long j2) {
this.timeline.getPeriod(i, this.period);
int adGroupIndexForPositionUs = this.period.getAdGroupIndexForPositionUs(j);
if (adGroupIndexForPositionUs == -1) {
return new MediaSource.MediaPeriodId(i, j2);
}
return new MediaSource.MediaPeriodId(i, adGroupIndexForPositionUs, this.period.getFirstAdIndexToPlay(adGroupIndexForPositionUs), j2);
}
private long resolvePeriodIndexToWindowSequenceNumber(int i) {
int indexOfPeriod;
Object obj = this.timeline.getPeriod(i, this.period, true).uid;
int i2 = this.period.windowIndex;
Object obj2 = this.oldFrontPeriodUid;
if (obj2 != null && (indexOfPeriod = this.timeline.getIndexOfPeriod(obj2)) != -1 && this.timeline.getPeriod(indexOfPeriod, this.period).windowIndex == i2) {
return this.oldFrontPeriodWindowSequenceNumber;
}
for (MediaPeriodHolder frontPeriod = getFrontPeriod(); frontPeriod != null; frontPeriod = frontPeriod.next) {
if (frontPeriod.uid.equals(obj)) {
return frontPeriod.info.id.windowSequenceNumber;
}
}
for (MediaPeriodHolder frontPeriod2 = getFrontPeriod(); frontPeriod2 != null; frontPeriod2 = frontPeriod2.next) {
int indexOfPeriod2 = this.timeline.getIndexOfPeriod(frontPeriod2.uid);
if (indexOfPeriod2 != -1 && this.timeline.getPeriod(indexOfPeriod2, this.period).windowIndex == i2) {
return frontPeriod2.info.id.windowSequenceNumber;
}
}
long j = this.nextWindowSequenceNumber;
this.nextWindowSequenceNumber = 1 + j;
return j;
}
private boolean canKeepMediaPeriodHolder(MediaPeriodHolder mediaPeriodHolder, MediaPeriodInfo mediaPeriodInfo) {
MediaPeriodInfo mediaPeriodInfo2 = mediaPeriodHolder.info;
return mediaPeriodInfo2.startPositionUs == mediaPeriodInfo.startPositionUs && mediaPeriodInfo2.endPositionUs == mediaPeriodInfo.endPositionUs && mediaPeriodInfo2.id.equals(mediaPeriodInfo.id);
}
private boolean updateForPlaybackModeChange() {
MediaPeriodHolder mediaPeriodHolder;
MediaPeriodHolder frontPeriod = getFrontPeriod();
if (frontPeriod == null) {
return true;
}
while (true) {
int nextPeriodIndex = this.timeline.getNextPeriodIndex(frontPeriod.info.id.periodIndex, this.period, this.window, this.repeatMode, this.shuffleModeEnabled);
while (true) {
mediaPeriodHolder = frontPeriod.next;
if (mediaPeriodHolder == null || frontPeriod.info.isLastInTimelinePeriod) {
break;
}
frontPeriod = mediaPeriodHolder;
}
if (nextPeriodIndex == -1 || mediaPeriodHolder == null || mediaPeriodHolder.info.id.periodIndex != nextPeriodIndex) {
break;
}
frontPeriod = mediaPeriodHolder;
}
boolean removeAfter = removeAfter(frontPeriod);
MediaPeriodInfo mediaPeriodInfo = frontPeriod.info;
frontPeriod.info = getUpdatedMediaPeriodInfo(mediaPeriodInfo, mediaPeriodInfo.id);
return (removeAfter && hasPlayingPeriod()) ? false : true;
}
private MediaPeriodInfo getFirstMediaPeriodInfo(PlaybackInfo playbackInfo) {
return getMediaPeriodInfo(playbackInfo.periodId, playbackInfo.contentPositionUs, playbackInfo.startPositionUs);
}
@Nullable
private MediaPeriodInfo getFollowingMediaPeriodInfo(MediaPeriodHolder mediaPeriodHolder, long j) {
int i;
long j2;
long j3;
MediaPeriodInfo mediaPeriodInfo = mediaPeriodHolder.info;
if (mediaPeriodInfo.isLastInTimelinePeriod) {
int nextPeriodIndex = this.timeline.getNextPeriodIndex(mediaPeriodInfo.id.periodIndex, this.period, this.window, this.repeatMode, this.shuffleModeEnabled);
if (nextPeriodIndex == -1) {
return null;
}
int i2 = this.timeline.getPeriod(nextPeriodIndex, this.period, true).windowIndex;
Object obj = this.period.uid;
long j4 = mediaPeriodInfo.id.windowSequenceNumber;
long j5 = 0;
if (this.timeline.getWindow(i2, this.window).firstPeriodIndex == nextPeriodIndex) {
Pair<Integer, Long> periodPosition = this.timeline.getPeriodPosition(this.window, this.period, i2, C.TIME_UNSET, Math.max(0L, (mediaPeriodHolder.getRendererOffset() + mediaPeriodInfo.durationUs) - j));
if (periodPosition == null) {
return null;
}
int intValue = ((Integer) periodPosition.first).intValue();
long longValue = ((Long) periodPosition.second).longValue();
MediaPeriodHolder mediaPeriodHolder2 = mediaPeriodHolder.next;
if (mediaPeriodHolder2 == null || !mediaPeriodHolder2.uid.equals(obj)) {
j3 = this.nextWindowSequenceNumber;
this.nextWindowSequenceNumber = 1 + j3;
} else {
j3 = mediaPeriodHolder.next.info.id.windowSequenceNumber;
}
j5 = longValue;
j2 = j3;
i = intValue;
} else {
i = nextPeriodIndex;
j2 = j4;
}
long j6 = j5;
return getMediaPeriodInfo(resolveMediaPeriodIdForAds(i, j6, j2), j6, j5);
}
MediaSource.MediaPeriodId mediaPeriodId = mediaPeriodInfo.id;
this.timeline.getPeriod(mediaPeriodId.periodIndex, this.period);
if (mediaPeriodId.isAd()) {
int i3 = mediaPeriodId.adGroupIndex;
int adCountInAdGroup = this.period.getAdCountInAdGroup(i3);
if (adCountInAdGroup == -1) {
return null;
}
int nextAdIndexToPlay = this.period.getNextAdIndexToPlay(i3, mediaPeriodId.adIndexInAdGroup);
if (nextAdIndexToPlay < adCountInAdGroup) {
if (this.period.isAdAvailable(i3, nextAdIndexToPlay)) {
return getMediaPeriodInfoForAd(mediaPeriodId.periodIndex, i3, nextAdIndexToPlay, mediaPeriodInfo.contentPositionUs, mediaPeriodId.windowSequenceNumber);
}
return null;
}
return getMediaPeriodInfoForContent(mediaPeriodId.periodIndex, mediaPeriodInfo.contentPositionUs, mediaPeriodId.windowSequenceNumber);
}
long j7 = mediaPeriodInfo.endPositionUs;
if (j7 != Long.MIN_VALUE) {
int adGroupIndexForPositionUs = this.period.getAdGroupIndexForPositionUs(j7);
if (adGroupIndexForPositionUs == -1) {
return getMediaPeriodInfoForContent(mediaPeriodId.periodIndex, mediaPeriodInfo.endPositionUs, mediaPeriodId.windowSequenceNumber);
}
int firstAdIndexToPlay = this.period.getFirstAdIndexToPlay(adGroupIndexForPositionUs);
if (this.period.isAdAvailable(adGroupIndexForPositionUs, firstAdIndexToPlay)) {
return getMediaPeriodInfoForAd(mediaPeriodId.periodIndex, adGroupIndexForPositionUs, firstAdIndexToPlay, mediaPeriodInfo.endPositionUs, mediaPeriodId.windowSequenceNumber);
}
return null;
}
int adGroupCount = this.period.getAdGroupCount();
if (adGroupCount == 0) {
return null;
}
int i4 = adGroupCount - 1;
if (this.period.getAdGroupTimeUs(i4) != Long.MIN_VALUE || this.period.hasPlayedAdGroup(i4)) {
return null;
}
int firstAdIndexToPlay2 = this.period.getFirstAdIndexToPlay(i4);
if (!this.period.isAdAvailable(i4, firstAdIndexToPlay2)) {
return null;
}
return getMediaPeriodInfoForAd(mediaPeriodId.periodIndex, i4, firstAdIndexToPlay2, this.period.getDurationUs(), mediaPeriodId.windowSequenceNumber);
}
private MediaPeriodInfo getUpdatedMediaPeriodInfo(MediaPeriodInfo mediaPeriodInfo, MediaSource.MediaPeriodId mediaPeriodId) {
long j;
long durationUs;
long j2 = mediaPeriodInfo.startPositionUs;
long j3 = mediaPeriodInfo.endPositionUs;
boolean isLastInPeriod = isLastInPeriod(mediaPeriodId, j3);
boolean isLastInTimeline = isLastInTimeline(mediaPeriodId, isLastInPeriod);
this.timeline.getPeriod(mediaPeriodId.periodIndex, this.period);
if (mediaPeriodId.isAd()) {
durationUs = this.period.getAdDurationUs(mediaPeriodId.adGroupIndex, mediaPeriodId.adIndexInAdGroup);
} else if (j3 == Long.MIN_VALUE) {
durationUs = this.period.getDurationUs();
} else {
j = j3;
return new MediaPeriodInfo(mediaPeriodId, j2, j3, mediaPeriodInfo.contentPositionUs, j, isLastInPeriod, isLastInTimeline);
}
j = durationUs;
return new MediaPeriodInfo(mediaPeriodId, j2, j3, mediaPeriodInfo.contentPositionUs, j, isLastInPeriod, isLastInTimeline);
}
private MediaPeriodInfo getMediaPeriodInfo(MediaSource.MediaPeriodId mediaPeriodId, long j, long j2) {
this.timeline.getPeriod(mediaPeriodId.periodIndex, this.period);
if (mediaPeriodId.isAd()) {
if (this.period.isAdAvailable(mediaPeriodId.adGroupIndex, mediaPeriodId.adIndexInAdGroup)) {
return getMediaPeriodInfoForAd(mediaPeriodId.periodIndex, mediaPeriodId.adGroupIndex, mediaPeriodId.adIndexInAdGroup, j, mediaPeriodId.windowSequenceNumber);
}
return null;
}
return getMediaPeriodInfoForContent(mediaPeriodId.periodIndex, j2, mediaPeriodId.windowSequenceNumber);
}
private MediaPeriodInfo getMediaPeriodInfoForAd(int i, int i2, int i3, long j, long j2) {
MediaSource.MediaPeriodId mediaPeriodId = new MediaSource.MediaPeriodId(i, i2, i3, j2);
boolean isLastInPeriod = isLastInPeriod(mediaPeriodId, Long.MIN_VALUE);
boolean isLastInTimeline = isLastInTimeline(mediaPeriodId, isLastInPeriod);
return new MediaPeriodInfo(mediaPeriodId, i3 == this.period.getFirstAdIndexToPlay(i2) ? this.period.getAdResumePositionUs() : 0L, Long.MIN_VALUE, j, this.timeline.getPeriod(mediaPeriodId.periodIndex, this.period).getAdDurationUs(mediaPeriodId.adGroupIndex, mediaPeriodId.adIndexInAdGroup), isLastInPeriod, isLastInTimeline);
}
private MediaPeriodInfo getMediaPeriodInfoForContent(int i, long j, long j2) {
MediaSource.MediaPeriodId mediaPeriodId = new MediaSource.MediaPeriodId(i, j2);
this.timeline.getPeriod(mediaPeriodId.periodIndex, this.period);
int adGroupIndexAfterPositionUs = this.period.getAdGroupIndexAfterPositionUs(j);
long adGroupTimeUs = adGroupIndexAfterPositionUs == -1 ? Long.MIN_VALUE : this.period.getAdGroupTimeUs(adGroupIndexAfterPositionUs);
boolean isLastInPeriod = isLastInPeriod(mediaPeriodId, adGroupTimeUs);
return new MediaPeriodInfo(mediaPeriodId, j, adGroupTimeUs, C.TIME_UNSET, adGroupTimeUs == Long.MIN_VALUE ? this.period.getDurationUs() : adGroupTimeUs, isLastInPeriod, isLastInTimeline(mediaPeriodId, isLastInPeriod));
}
private boolean isLastInPeriod(MediaSource.MediaPeriodId mediaPeriodId, long j) {
int adGroupCount = this.timeline.getPeriod(mediaPeriodId.periodIndex, this.period).getAdGroupCount();
if (adGroupCount == 0) {
return true;
}
int i = adGroupCount - 1;
boolean isAd = mediaPeriodId.isAd();
if (this.period.getAdGroupTimeUs(i) != Long.MIN_VALUE) {
return !isAd && j == Long.MIN_VALUE;
}
int adCountInAdGroup = this.period.getAdCountInAdGroup(i);
if (adCountInAdGroup == -1) {
return false;
}
if (isAd && mediaPeriodId.adGroupIndex == i && mediaPeriodId.adIndexInAdGroup == adCountInAdGroup - 1) {
return true;
}
return !isAd && this.period.getFirstAdIndexToPlay(i) == adCountInAdGroup;
}
private boolean isLastInTimeline(MediaSource.MediaPeriodId mediaPeriodId, boolean z) {
return !this.timeline.getWindow(this.timeline.getPeriod(mediaPeriodId.periodIndex, this.period).windowIndex, this.window).isDynamic && this.timeline.isLastPeriod(mediaPeriodId.periodIndex, this.period, this.window, this.repeatMode, this.shuffleModeEnabled) && z;
}
}