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 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; } }