From a58bffbe52fb5cbd6e6b9e485678f79d741a06a3 Mon Sep 17 00:00:00 2001 From: andrewlewis Date: Fri, 9 Mar 2018 03:43:45 -0800 Subject: [PATCH] Fix clipping to end of source Issue: #3966 ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=188465096 --- .../source/ClippingMediaSource.java | 2 +- .../source/ClippingMediaSourceTest.java | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/source/ClippingMediaSource.java b/library/core/src/main/java/com/google/android/exoplayer2/source/ClippingMediaSource.java index d6504c99b7..07ca919b6f 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/source/ClippingMediaSource.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/source/ClippingMediaSource.java @@ -226,7 +226,7 @@ public final class ClippingMediaSource extends CompositeMediaSource { } this.startUs = startUs; this.endUs = resolvedEndUs; - durationUs = endUs == C.TIME_UNSET ? C.TIME_UNSET : endUs - startUs; + durationUs = resolvedEndUs == C.TIME_UNSET ? C.TIME_UNSET : (resolvedEndUs - startUs); } @Override diff --git a/library/core/src/test/java/com/google/android/exoplayer2/source/ClippingMediaSourceTest.java b/library/core/src/test/java/com/google/android/exoplayer2/source/ClippingMediaSourceTest.java index a4aa3eb938..a39f0e47d7 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/source/ClippingMediaSourceTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/source/ClippingMediaSourceTest.java @@ -124,6 +124,36 @@ public final class ClippingMediaSourceTest { .isEqualTo(TEST_PERIOD_DURATION_US - TEST_CLIP_AMOUNT_US * 3); } + @Test + public void testClippingToEndOfSourceWithDurationSetsDuration() throws IOException { + // Create a child timeline that has a known duration. + Timeline timeline = + new SinglePeriodTimeline( + /* durationUs= */ TEST_PERIOD_DURATION_US, + /* isSeekable= */ true, + /* isDynamic= */ false); + + // When clipping to the end, the clipped timeline should also have a duration. + Timeline clippedTimeline = + getClippedTimeline(timeline, TEST_CLIP_AMOUNT_US, C.TIME_END_OF_SOURCE); + assertThat(clippedTimeline.getWindow(/* windowIndex= */ 0, window).getDurationUs()) + .isEqualTo(TEST_PERIOD_DURATION_US - TEST_CLIP_AMOUNT_US); + } + + @Test + public void testClippingToEndOfSourceWithUnsetDurationDoesNotSetDuration() throws IOException { + // Create a child timeline that has an unknown duration. + Timeline timeline = + new SinglePeriodTimeline( + /* durationUs= */ C.TIME_UNSET, /* isSeekable= */ true, /* isDynamic= */ false); + + // When clipping to the end, the clipped timeline should also have an unset duration. + Timeline clippedTimeline = + getClippedTimeline(timeline, TEST_CLIP_AMOUNT_US, C.TIME_END_OF_SOURCE); + assertThat(clippedTimeline.getWindow(/* windowIndex= */ 0, window).getDurationUs()) + .isEqualTo(C.TIME_UNSET); + } + @Test public void testClippingStartAndEnd() throws IOException { Timeline timeline = new SinglePeriodTimeline(C.msToUs(TEST_PERIOD_DURATION_US), true, false);