@Test public void disableRendererMediaClock_shouldKeepPlaybackParameters() throws ExoPlaybackException { FakeMediaClockRenderer mediaClockRenderer = new MediaClockRenderer(TEST_PLAYBACK_PARAMETERS, /* playbackParametersAreMutable= */ false); mediaClock.onRendererEnabled(mediaClockRenderer); mediaClock.onRendererDisabled(mediaClockRenderer); assertThat(mediaClock.getPlaybackParameters()).isEqualTo(TEST_PLAYBACK_PARAMETERS); }
@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 standaloneSetOtherPlaybackParameters_getPlaybackParametersShouldReturnSameValue() { mediaClock.setPlaybackParameters(TEST_PLAYBACK_PARAMETERS); PlaybackParameters parameters = mediaClock.setPlaybackParameters(PlaybackParameters.DEFAULT); assertThat(parameters).isEqualTo(PlaybackParameters.DEFAULT); assertThat(mediaClock.getPlaybackParameters()).isEqualTo(PlaybackParameters.DEFAULT); }
/** * Syncs internal clock if needed and returns current clock position in microseconds. */ public long syncAndGetPositionUs() { if (isUsingRendererClock()) { ensureSynced(); return rendererClock.getPositionUs(); } else { return standaloneMediaClock.getPositionUs(); } }
@Test public void standaloneGetAndResetPosition_shouldNotTriggerCallback() throws Exception { mediaClock.resetPosition(TEST_POSITION_US); mediaClock.syncAndGetPositionUs(); verifyNoMoreInteractions(listener); }
@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(); }
@Test public void rendererClockSetPlaybackParametersOverwrite_getParametersShouldReturnSameValue() throws ExoPlaybackException { FakeMediaClockRenderer mediaClockRenderer = new MediaClockRenderer(PlaybackParameters.DEFAULT, /* playbackParametersAreMutable= */ false); mediaClock.onRendererEnabled(mediaClockRenderer); PlaybackParameters parameters = mediaClock.setPlaybackParameters(TEST_PLAYBACK_PARAMETERS); assertThat(parameters).isEqualTo(PlaybackParameters.DEFAULT); assertThat(mediaClock.getPlaybackParameters()).isEqualTo(PlaybackParameters.DEFAULT); }
@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 rendererEnded_shouldFallbackToStandaloneClock() throws ExoPlaybackException { MediaClockRenderer mediaClockRenderer = new MediaClockRenderer(/* isReady= */ true, /* isEnded= */ true, /* hasReadStreamToEnd= */ true); mediaClock.start(); mediaClock.onRendererEnabled(mediaClockRenderer); assertClockIsRunning(); }
@Test public void enableSameRendererClockTwice_shouldNotThrow() throws ExoPlaybackException { MediaClockRenderer mediaClockRenderer = new MediaClockRenderer(); mediaClock.onRendererEnabled(mediaClockRenderer); mediaClock.onRendererEnabled(mediaClockRenderer); mediaClockRenderer.positionUs = TEST_POSITION_US; assertThat(mediaClock.syncAndGetPositionUs()).isEqualTo(TEST_POSITION_US); }
@Test public void enableRendererMediaClock_shouldOverwriteRendererPlaybackParametersIfPossible() throws ExoPlaybackException { FakeMediaClockRenderer mediaClockRenderer = new MediaClockRenderer(TEST_PLAYBACK_PARAMETERS, /* playbackParametersAreMutable= */ true); mediaClock.onRendererEnabled(mediaClockRenderer); assertThat(mediaClock.getPlaybackParameters()).isEqualTo(PlaybackParameters.DEFAULT); verifyNoMoreInteractions(listener); }
@Test public void rendererClockSetPlaybackParametersOverwrite_shouldTriggerCallback() throws ExoPlaybackException { FakeMediaClockRenderer mediaClockRenderer = new MediaClockRenderer(PlaybackParameters.DEFAULT, /* playbackParametersAreMutable= */ false); mediaClock.onRendererEnabled(mediaClockRenderer); mediaClock.setPlaybackParameters(TEST_PLAYBACK_PARAMETERS); verify(listener).onPlaybackParametersChanged(PlaybackParameters.DEFAULT); }
@Test public void standaloneSetPlaybackParameters_shouldApplyNewPlaybackSpeed() { mediaClock.setPlaybackParameters(TEST_PLAYBACK_PARAMETERS); mediaClock.start(); // Asserts that clock is running with speed declared in getPlaybackParameters(). assertClockIsRunning(); }
private void assertClockIsRunning() { long clockStartUs = mediaClock.syncAndGetPositionUs(); fakeClock.advanceTime(SLEEP_TIME_MS); assertThat(mediaClock.syncAndGetPositionUs()).isEqualTo(clockStartUs + mediaClock.getPlaybackParameters().getMediaTimeUsForPlayoutTimeMs(SLEEP_TIME_MS)); }
@Test public void staleDisableRendererClock_shouldNotThrow() throws ExoPlaybackException { MediaClockRenderer mediaClockRenderer = new MediaClockRenderer(); mediaClockRenderer.positionUs = TEST_POSITION_US; mediaClock.onRendererDisabled(mediaClockRenderer); assertThat(mediaClock.syncAndGetPositionUs()).isEqualTo(C.msToUs(fakeClock.elapsedRealtime())); }
@Test public void standaloneGetPlaybackParameters_initializedWithDefaultPlaybackParameters() { assertThat(mediaClock.getPlaybackParameters()).isEqualTo(PlaybackParameters.DEFAULT); }
private void setPlaybackParametersInternal(PlaybackParameters playbackParameters) { mediaClock.setPlaybackParameters(playbackParameters); }
private void stopRenderers() throws ExoPlaybackException { mediaClock.stop(); for (Renderer renderer : enabledRenderers) { ensureStopped(renderer); } }
@Test public void enableRendererMediaClockWithFixedButSamePlaybackParameters_shouldNotTriggerCallback() throws ExoPlaybackException { FakeMediaClockRenderer mediaClockRenderer = new MediaClockRenderer(PlaybackParameters.DEFAULT, /* playbackParametersAreMutable= */ false); mediaClock.onRendererEnabled(mediaClockRenderer); verifyNoMoreInteractions(listener); }