From dbe0e602ef76f8491e8da41635be3fef2e7b7c50 Mon Sep 17 00:00:00 2001 From: tonihei Date: Fri, 3 Nov 2017 07:46:47 -0700 Subject: [PATCH] Use Timeline.getPeriodPosition to resolve period index in ExoPlayerImpl.seekTo ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=174460558 --- .../android/exoplayer2/ExoPlayerImpl.java | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java index 8ee8af5980..d28f72e739 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/ExoPlayerImpl.java @@ -21,6 +21,7 @@ import android.os.Looper; import android.os.Message; import android.support.annotation.Nullable; import android.util.Log; +import android.util.Pair; import com.google.android.exoplayer2.source.MediaSource; import com.google.android.exoplayer2.source.MediaSource.MediaPeriodId; import com.google.android.exoplayer2.source.TrackGroupArray; @@ -254,19 +255,12 @@ import java.util.concurrent.CopyOnWriteArraySet; maskingWindowPositionMs = positionMs == C.TIME_UNSET ? 0 : positionMs; maskingPeriodIndex = 0; } else { - timeline.getWindow(windowIndex, window); - long windowPositionUs = positionMs == C.TIME_UNSET ? window.getDefaultPositionUs() - : C.msToUs(positionMs); - int periodIndex = window.firstPeriodIndex; - long periodPositionUs = window.getPositionInFirstPeriodUs() + windowPositionUs; - long periodDurationUs = timeline.getPeriod(periodIndex, period).getDurationUs(); - while (periodDurationUs != C.TIME_UNSET && periodPositionUs >= periodDurationUs - && periodIndex < window.lastPeriodIndex) { - periodPositionUs -= periodDurationUs; - periodDurationUs = timeline.getPeriod(++periodIndex, period).getDurationUs(); - } + long windowPositionUs = positionMs == C.TIME_UNSET + ? timeline.getWindow(windowIndex, window).getDefaultPositionUs() : C.msToUs(positionMs); + Pair periodIndexAndPositon = + timeline.getPeriodPosition(window, period, windowIndex, windowPositionUs); maskingWindowPositionMs = C.usToMs(windowPositionUs); - maskingPeriodIndex = periodIndex; + maskingPeriodIndex = periodIndexAndPositon.first; } internalPlayer.seekTo(timeline, windowIndex, C.msToUs(positionMs)); for (Player.EventListener listener : listeners) {