private MediaPeriodInfo getMediaPeriodInfoForContent( Object periodUid, long startPositionUs, long windowSequenceNumber) { int nextAdGroupIndex = period.getAdGroupIndexAfterPositionUs(startPositionUs); long endPositionUs = nextAdGroupIndex == C.INDEX_UNSET ? C.TIME_END_OF_SOURCE : period.getAdGroupTimeUs(nextAdGroupIndex); MediaPeriodId id = new MediaPeriodId(periodUid, windowSequenceNumber, endPositionUs); timeline.getPeriodByUid(id.periodUid, period); boolean isLastInPeriod = isLastInPeriod(id); boolean isLastInTimeline = isLastInTimeline(id, isLastInPeriod); long durationUs = endPositionUs == C.TIME_END_OF_SOURCE ? period.getDurationUs() : endPositionUs; return new MediaPeriodInfo( id, startPositionUs, C.TIME_UNSET, durationUs, isLastInPeriod, isLastInTimeline); }
/** * Returns new media period info based on specified {@code mediaPeriodInfo} but taking into * account the current timeline. This method must only be called if the period is still part of * the current timeline. * * @param info Media period info for a media period based on an old timeline. * @return The updated media period info for the current timeline. */ public MediaPeriodInfo getUpdatedMediaPeriodInfo(MediaPeriodInfo info) { boolean isLastInPeriod = isLastInPeriod(info.id); boolean isLastInTimeline = isLastInTimeline(info.id, isLastInPeriod); timeline.getPeriodByUid(info.id.periodUid, period); long durationUs = info.id.isAd() ? period.getAdDurationUs(info.id.adGroupIndex, info.id.adIndexInAdGroup) : (info.id.endPositionUs == C.TIME_END_OF_SOURCE ? period.getDurationUs() : info.id.endPositionUs); return new MediaPeriodInfo( info.id, info.startPositionUs, info.contentPositionUs, durationUs, isLastInPeriod, isLastInTimeline); }
private MediaPeriodInfo getMediaPeriodInfoForAd( Object periodUid, int adGroupIndex, int adIndexInAdGroup, long contentPositionUs, long windowSequenceNumber) { MediaPeriodId id = new MediaPeriodId(periodUid, adGroupIndex, adIndexInAdGroup, windowSequenceNumber); boolean isLastInPeriod = isLastInPeriod(id); boolean isLastInTimeline = isLastInTimeline(id, isLastInPeriod); long durationUs = timeline .getPeriodByUid(id.periodUid, period) .getAdDurationUs(id.adGroupIndex, id.adIndexInAdGroup); long startPositionUs = adIndexInAdGroup == period.getFirstAdIndexToPlay(adGroupIndex) ? period.getAdResumePositionUs() : 0; return new MediaPeriodInfo( id, startPositionUs, contentPositionUs, durationUs, isLastInPeriod, isLastInTimeline); }