private void startRenderers() throws ExoPlaybackException { rebuffering = false; mediaClock.start(); for (Renderer renderer : enabledRenderers) { renderer.start(); } }
@Test public void standaloneStartAndStop_shouldNotTriggerCallback() throws Exception { mediaClock.start(); mediaClock.stop(); verifyNoMoreInteractions(listener); }
@Test public void standaloneStart_shouldStartClock() throws Exception { mediaClock.start(); assertClockIsRunning(); }
@Test public void standaloneSetPlaybackParameters_shouldApplyNewPlaybackSpeed() { mediaClock.setPlaybackParameters(TEST_PLAYBACK_PARAMETERS); mediaClock.start(); // Asserts that clock is running with speed declared in getPlaybackParameters(). assertClockIsRunning(); }
@Test public void standaloneStartAndStop_shouldStopClock() throws Exception { mediaClock.start(); mediaClock.stop(); assertClockIsStopped(); }
@Test public void rendererEnded_shouldFallbackToStandaloneClock() throws ExoPlaybackException { MediaClockRenderer mediaClockRenderer = new MediaClockRenderer(/* isReady= */ true, /* isEnded= */ true, /* hasReadStreamToEnd= */ true); mediaClock.start(); mediaClock.onRendererEnabled(mediaClockRenderer); assertClockIsRunning(); }
@Test public void rendererNotReady_shouldStillUseRendererClock() throws ExoPlaybackException { MediaClockRenderer mediaClockRenderer = new MediaClockRenderer(/* isReady= */ false, /* isEnded= */ false, /* hasReadStreamToEnd= */ false); mediaClock.start(); mediaClock.onRendererEnabled(mediaClockRenderer); // We're not advancing the renderer media clock. Thus, the clock should appear to be stopped. assertClockIsStopped(); }
@Test public void rendererNotReadyAndReadStreamToEnd_shouldFallbackToStandaloneClock() throws ExoPlaybackException { MediaClockRenderer mediaClockRenderer = new MediaClockRenderer(/* isReady= */ false, /* isEnded= */ false, /* hasReadStreamToEnd= */ true); mediaClock.start(); mediaClock.onRendererEnabled(mediaClockRenderer); assertClockIsRunning(); }
@Test public void enableRendererMediaClock_usesRendererClockPosition() throws ExoPlaybackException { MediaClockRenderer mediaClockRenderer = new MediaClockRenderer(); mediaClock.start(); mediaClock.onRendererEnabled(mediaClockRenderer); mediaClockRenderer.positionUs = TEST_POSITION_US; assertThat(mediaClock.syncAndGetPositionUs()).isEqualTo(TEST_POSITION_US); // We're not advancing the renderer media clock. Thus, the clock should appear to be stopped. assertClockIsStopped(); }
@Test public void resetPositionWhileUsingRendererMediaClock_shouldHaveNoEffect() throws ExoPlaybackException { MediaClockRenderer mediaClockRenderer = new MediaClockRenderer(); mediaClock.start(); mediaClock.onRendererEnabled(mediaClockRenderer); mediaClockRenderer.positionUs = TEST_POSITION_US; assertThat(mediaClock.syncAndGetPositionUs()).isEqualTo(TEST_POSITION_US); mediaClock.resetPosition(0); assertThat(mediaClock.syncAndGetPositionUs()).isEqualTo(TEST_POSITION_US); }
@Test public void disableRendererMediaClock_standaloneShouldBeSynced() throws ExoPlaybackException { MediaClockRenderer mediaClockRenderer = new MediaClockRenderer(); mediaClock.start(); mediaClock.onRendererEnabled(mediaClockRenderer); mediaClockRenderer.positionUs = TEST_POSITION_US; mediaClock.syncAndGetPositionUs(); mediaClock.onRendererDisabled(mediaClockRenderer); fakeClock.advanceTime(SLEEP_TIME_MS); assertThat(mediaClock.syncAndGetPositionUs()) .isEqualTo(TEST_POSITION_US + C.msToUs(SLEEP_TIME_MS)); assertClockIsRunning(); }