From cdb706bac80058ec5ca866cb74da2f2fface2656 Mon Sep 17 00:00:00 2001 From: andrewlewis Date: Tue, 9 Aug 2016 07:56:06 -0700 Subject: [PATCH] Fix period durations for single period and concatenated timelines. ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=129748865 --- .../android/exoplayer2/ExoPlayerImplInternal.java | 2 +- .../exoplayer2/source/ConcatenatingMediaSource.java | 3 ++- .../exoplayer2/source/SinglePeriodTimeline.java | 12 ++++++------ 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java b/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java index aa59325860..4d236cc35d 100644 --- a/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java +++ b/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java @@ -554,6 +554,7 @@ import java.util.ArrayList; stopRenderers(); rebuffering = false; + setState(ExoPlayer.STATE_BUFFERING); if (positionUs == C.UNSET_TIME_US) { // We don't know where to seek to yet, so clear the whole timeline. @@ -606,7 +607,6 @@ import java.util.ArrayList; } } updatePlaybackPositions(); - setState(ExoPlayer.STATE_BUFFERING); handler.sendEmptyMessage(MSG_DO_SOME_WORK); } diff --git a/library/src/main/java/com/google/android/exoplayer2/source/ConcatenatingMediaSource.java b/library/src/main/java/com/google/android/exoplayer2/source/ConcatenatingMediaSource.java index 9521267154..1207bdc0c7 100644 --- a/library/src/main/java/com/google/android/exoplayer2/source/ConcatenatingMediaSource.java +++ b/library/src/main/java/com/google/android/exoplayer2/source/ConcatenatingMediaSource.java @@ -154,7 +154,8 @@ public final class ConcatenatingMediaSource implements MediaSource { @Override public long getPeriodDuration(int index) { int sourceIndex = getSourceIndexForPeriod(index); - return timelines[sourceIndex].getPeriodDuration(sourceIndex); + int firstPeriodIndexInSource = getFirstPeriodIndexInSource(sourceIndex); + return timelines[sourceIndex].getPeriodDuration(index - firstPeriodIndexInSource); } @Override diff --git a/library/src/main/java/com/google/android/exoplayer2/source/SinglePeriodTimeline.java b/library/src/main/java/com/google/android/exoplayer2/source/SinglePeriodTimeline.java index d1a368ccb9..37b12c3a03 100644 --- a/library/src/main/java/com/google/android/exoplayer2/source/SinglePeriodTimeline.java +++ b/library/src/main/java/com/google/android/exoplayer2/source/SinglePeriodTimeline.java @@ -41,7 +41,7 @@ public final class SinglePeriodTimeline implements Timeline { * @return A new, unseekable, final timeline with one period. */ public static Timeline createUnseekableFinalTimeline(Object id, long durationUs) { - return new SinglePeriodTimeline(id, true, durationUs, SeekWindow.UNSEEKABLE); + return new SinglePeriodTimeline(id, true, durationUs / 1000, SeekWindow.UNSEEKABLE); } /** @@ -53,19 +53,19 @@ public final class SinglePeriodTimeline implements Timeline { * @return A new, seekable, final timeline with one period. */ public static Timeline createSeekableFinalTimeline(Object id, long durationUs) { - return new SinglePeriodTimeline(id, true, durationUs, new SeekWindow(durationUs)); + return new SinglePeriodTimeline(id, true, durationUs / 1000, new SeekWindow(durationUs)); } private final Object id; private final boolean isFinal; - private final long duration; + private final long durationMs; private final SeekWindow[] seekWindows; - private SinglePeriodTimeline(Object id, boolean isFinal, long duration, + private SinglePeriodTimeline(Object id, boolean isFinal, long durationMs, SeekWindow... seekWindows) { this.id = Assertions.checkNotNull(id); this.isFinal = isFinal; - this.duration = duration; + this.durationMs = durationMs; this.seekWindows = seekWindows; } @@ -84,7 +84,7 @@ public final class SinglePeriodTimeline implements Timeline { if (index != 0) { throw new IndexOutOfBoundsException("Index " + index + " out of bounds"); } - return duration; + return durationMs; } @Override