- 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
433 lines
21 KiB
Java
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;
|
|
}
|
|
}
|