@Test public void testNoClipping() throws IOException { Timeline timeline = new SinglePeriodTimeline(TEST_PERIOD_DURATION_US, true, false); Timeline clippedTimeline = getClippedTimeline(timeline, 0, TEST_PERIOD_DURATION_US); assertThat(clippedTimeline.getWindowCount()).isEqualTo(1); assertThat(clippedTimeline.getPeriodCount()).isEqualTo(1); assertThat(clippedTimeline.getWindow(0, window).getDurationUs()) .isEqualTo(TEST_PERIOD_DURATION_US); assertThat(clippedTimeline.getPeriod(0, period).getDurationUs()) .isEqualTo(TEST_PERIOD_DURATION_US); }
@Test public void testClippingStartAndEnd() throws IOException { Timeline timeline = new SinglePeriodTimeline(TEST_PERIOD_DURATION_US, true, false); Timeline clippedTimeline = getClippedTimeline( timeline, TEST_CLIP_AMOUNT_US, TEST_PERIOD_DURATION_US - TEST_CLIP_AMOUNT_US * 2); assertThat(clippedTimeline.getWindow(0, window).getDurationUs()) .isEqualTo(TEST_PERIOD_DURATION_US - TEST_CLIP_AMOUNT_US * 3); assertThat(clippedTimeline.getPeriod(0, period).getDurationUs()) .isEqualTo(TEST_PERIOD_DURATION_US - TEST_CLIP_AMOUNT_US * 2); }
@Test public void testClippingEnd() throws IOException { Timeline timeline = new SinglePeriodTimeline(TEST_PERIOD_DURATION_US, true, false); Timeline clippedTimeline = getClippedTimeline(timeline, 0, TEST_PERIOD_DURATION_US - TEST_CLIP_AMOUNT_US); assertThat(clippedTimeline.getWindow(0, window).getDurationUs()) .isEqualTo(TEST_PERIOD_DURATION_US - TEST_CLIP_AMOUNT_US); assertThat(clippedTimeline.getPeriod(0, period).getDurationUs()) .isEqualTo(TEST_PERIOD_DURATION_US - TEST_CLIP_AMOUNT_US); }
timeline1, timeline2); assertThat(clippedTimelines[0].getWindow(0, window).getDurationUs()) .isEqualTo(TEST_PERIOD_DURATION_US - TEST_CLIP_AMOUNT_US); assertThat(clippedTimelines[0].getWindow(0, window).getDefaultPositionUs()).isEqualTo(0); assertThat(clippedTimelines[0].getPeriod(0, period).getDurationUs()) .isEqualTo(2 * TEST_PERIOD_DURATION_US); assertThat(clippedTimelines[1].getWindow(0, window).getDurationUs()) .isEqualTo(TEST_PERIOD_DURATION_US - TEST_CLIP_AMOUNT_US); assertThat(clippedTimelines[1].getWindow(0, window).getDefaultPositionUs()).isEqualTo(0);
timeline1, timeline2); assertThat(clippedTimelines[0].getWindow(0, window).getDurationUs()) .isEqualTo(TEST_PERIOD_DURATION_US - TEST_CLIP_AMOUNT_US); assertThat(clippedTimelines[0].getWindow(0, window).getDefaultPositionUs()).isEqualTo(0); assertThat(clippedTimelines[0].getPeriod(0, period).getDurationUs()) .isEqualTo(2 * TEST_PERIOD_DURATION_US); assertThat(clippedTimelines[1].getWindow(0, window).getDurationUs()) .isEqualTo(TEST_PERIOD_DURATION_US - TEST_CLIP_AMOUNT_US); assertThat(clippedTimelines[1].getWindow(0, window).getDefaultPositionUs()).isEqualTo(0);
timeline1, timeline2); assertThat(clippedTimelines[0].getWindow(0, window).getDurationUs()) .isEqualTo(TEST_PERIOD_DURATION_US - TEST_CLIP_AMOUNT_US); assertThat(clippedTimelines[0].getWindow(0, window).getDefaultPositionUs()).isEqualTo(0); assertThat(clippedTimelines[0].getPeriod(0, period).getDurationUs()) .isEqualTo(2 * TEST_PERIOD_DURATION_US); assertThat(clippedTimelines[1].getWindow(0, window).getDurationUs()) .isEqualTo(TEST_CLIP_AMOUNT_US); assertThat(clippedTimelines[1].getWindow(0, window).getDefaultPositionUs())
timeline1, timeline2); assertThat(clippedTimelines[0].getWindow(0, window).getDurationUs()) .isEqualTo(TEST_PERIOD_DURATION_US - TEST_CLIP_AMOUNT_US); assertThat(clippedTimelines[0].getWindow(0, window).getDefaultPositionUs()).isEqualTo(0); assertThat(clippedTimelines[0].getPeriod(0, period).getDurationUs()) .isEqualTo(2 * TEST_PERIOD_DURATION_US); assertThat(clippedTimelines[1].getWindow(0, window).getDurationUs()).isEqualTo(0); assertThat(clippedTimelines[1].getWindow(0, window).getDefaultPositionUs()).isEqualTo(0); assertThat(clippedTimelines[1].getWindow(0, window).isDynamic).isFalse();
@Test public void testClippingFromDefaultPosition() throws IOException { Timeline timeline = new SinglePeriodTimeline( /* periodDurationUs= */ 3 * TEST_PERIOD_DURATION_US, /* windowDurationUs= */ TEST_PERIOD_DURATION_US, /* windowPositionInPeriodUs= */ TEST_PERIOD_DURATION_US, /* windowDefaultStartPositionUs= */ TEST_CLIP_AMOUNT_US, /* isSeekable= */ true, /* isDynamic= */ true, /* tag= */ null); Timeline clippedTimeline = getClippedTimeline(timeline, /* durationUs= */ TEST_CLIP_AMOUNT_US); assertThat(clippedTimeline.getWindow(0, window).getDurationUs()).isEqualTo(TEST_CLIP_AMOUNT_US); assertThat(clippedTimeline.getWindow(0, window).getDefaultPositionUs()).isEqualTo(0); assertThat(clippedTimeline.getWindow(0, window).getPositionInFirstPeriodUs()) .isEqualTo(TEST_PERIOD_DURATION_US + TEST_CLIP_AMOUNT_US); assertThat(clippedTimeline.getPeriod(0, period).getDurationUs()) .isEqualTo(TEST_PERIOD_DURATION_US + 2 * TEST_CLIP_AMOUNT_US); }
@Test public void testClippingStartAndEndInitial() throws IOException { // Timeline that's dynamic and not seekable. A child source might report such a timeline prior // to it having loaded sufficient data to establish its duration and seekability. Such timelines // should not result in clipping failure. Timeline timeline = new SinglePeriodTimeline(C.TIME_UNSET, /* isSeekable= */ false, /* isDynamic= */ true); Timeline clippedTimeline = getClippedTimeline( timeline, TEST_CLIP_AMOUNT_US, TEST_PERIOD_DURATION_US - TEST_CLIP_AMOUNT_US * 2); assertThat(clippedTimeline.getWindow(0, window).getDurationUs()) .isEqualTo(TEST_PERIOD_DURATION_US - TEST_CLIP_AMOUNT_US * 3); assertThat(clippedTimeline.getPeriod(0, period).getDurationUs()) .isEqualTo(TEST_PERIOD_DURATION_US - TEST_CLIP_AMOUNT_US * 2); }
@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 testClippingStart() throws IOException { Timeline timeline = new SinglePeriodTimeline(TEST_PERIOD_DURATION_US, true, false); Timeline clippedTimeline = getClippedTimeline(timeline, TEST_CLIP_AMOUNT_US, TEST_PERIOD_DURATION_US); assertThat(clippedTimeline.getWindow(0, window).getDurationUs()) .isEqualTo(TEST_PERIOD_DURATION_US - TEST_CLIP_AMOUNT_US); assertThat(clippedTimeline.getPeriod(0, period).getDurationUs()) .isEqualTo(TEST_PERIOD_DURATION_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); }