Commit 72b67916 by olly Committed by Oliver Woodman

Use resolved position for masking when seeking to C.TIME_UNSET

Also fire onPositionDiscontinuity in this case

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=174039483
parent 37d33f58
...@@ -251,33 +251,28 @@ import java.util.concurrent.CopyOnWriteArraySet; ...@@ -251,33 +251,28 @@ import java.util.concurrent.CopyOnWriteArraySet;
pendingSeekAcks++; pendingSeekAcks++;
maskingWindowIndex = windowIndex; maskingWindowIndex = windowIndex;
if (timeline.isEmpty()) { if (timeline.isEmpty()) {
maskingWindowPositionMs = positionMs == C.TIME_UNSET ? 0 : positionMs;
maskingPeriodIndex = 0; maskingPeriodIndex = 0;
} else { } else {
timeline.getWindow(windowIndex, window); timeline.getWindow(windowIndex, window);
long resolvedPositionUs = long windowPositionUs = positionMs == C.TIME_UNSET ? window.getDefaultPositionUs()
positionMs == C.TIME_UNSET ? window.getDefaultPositionUs() : C.msToUs(positionMs); : C.msToUs(positionMs);
int periodIndex = window.firstPeriodIndex; int periodIndex = window.firstPeriodIndex;
long periodPositionUs = window.getPositionInFirstPeriodUs() + resolvedPositionUs; long periodPositionUs = window.getPositionInFirstPeriodUs() + windowPositionUs;
long periodDurationUs = timeline.getPeriod(periodIndex, period).getDurationUs(); long periodDurationUs = timeline.getPeriod(periodIndex, period).getDurationUs();
while (periodDurationUs != C.TIME_UNSET && periodPositionUs >= periodDurationUs while (periodDurationUs != C.TIME_UNSET && periodPositionUs >= periodDurationUs
&& periodIndex < window.lastPeriodIndex) { && periodIndex < window.lastPeriodIndex) {
periodPositionUs -= periodDurationUs; periodPositionUs -= periodDurationUs;
periodDurationUs = timeline.getPeriod(++periodIndex, period).getDurationUs(); periodDurationUs = timeline.getPeriod(++periodIndex, period).getDurationUs();
} }
maskingWindowPositionMs = C.usToMs(windowPositionUs);
maskingPeriodIndex = periodIndex; maskingPeriodIndex = periodIndex;
} }
if (positionMs == C.TIME_UNSET) {
// TODO: Work out when to call onPositionDiscontinuity on listeners for this case.
maskingWindowPositionMs = 0;
internalPlayer.seekTo(timeline, windowIndex, C.TIME_UNSET);
} else {
maskingWindowPositionMs = positionMs;
internalPlayer.seekTo(timeline, windowIndex, C.msToUs(positionMs)); internalPlayer.seekTo(timeline, windowIndex, C.msToUs(positionMs));
for (Player.EventListener listener : listeners) { for (Player.EventListener listener : listeners) {
listener.onPositionDiscontinuity(DISCONTINUITY_REASON_SEEK); listener.onPositionDiscontinuity(DISCONTINUITY_REASON_SEEK);
} }
} }
}
@Override @Override
public void setPlaybackParameters(@Nullable PlaybackParameters playbackParameters) { public void setPlaybackParameters(@Nullable PlaybackParameters playbackParameters) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment