use of androidx.media3.common.util.Clock in project media by androidx.
the class DefaultMediaClockTest method rendererNotReady_shouldStillUseRendererClock.
@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();
}
use of androidx.media3.common.util.Clock in project media by androidx.
the class DefaultMediaClockTest method enableRendererMediaClock_usesRendererClockPosition.
@Test
public void enableRendererMediaClock_usesRendererClockPosition() throws ExoPlaybackException {
MediaClockRenderer mediaClockRenderer = new MediaClockRenderer();
mediaClock.start();
mediaClock.onRendererEnabled(mediaClockRenderer);
mediaClockRenderer.positionUs = TEST_POSITION_US;
assertThat(mediaClock.syncAndGetPositionUs(/* isReadingAhead= */
false)).isEqualTo(TEST_POSITION_US);
// We're not advancing the renderer media clock. Thus, the clock should appear to be stopped.
assertClockIsStopped();
}
use of androidx.media3.common.util.Clock in project media by androidx.
the class DefaultMediaClockTest method getPositionWithPlaybackSpeedChange_shouldTriggerCallback.
@Test
public void getPositionWithPlaybackSpeedChange_shouldTriggerCallback() throws ExoPlaybackException {
MediaClockRenderer mediaClockRenderer = new MediaClockRenderer(PlaybackParameters.DEFAULT, /* playbackParametersAreMutable= */
true);
mediaClock.onRendererEnabled(mediaClockRenderer);
// Silently change playback speed of renderer clock.
mediaClockRenderer.playbackParameters = TEST_PLAYBACK_PARAMETERS;
mediaClock.syncAndGetPositionUs(/* isReadingAhead= */
false);
verify(listener).onPlaybackParametersChanged(TEST_PLAYBACK_PARAMETERS);
}
use of androidx.media3.common.util.Clock in project media by androidx.
the class DefaultMediaClock method syncClocks.
private void syncClocks(boolean isReadingAhead) {
if (shouldUseStandaloneClock(isReadingAhead)) {
isUsingStandaloneClock = true;
if (standaloneClockIsStarted) {
standaloneClock.start();
}
return;
}
// We are either already using the renderer clock or switching from the standalone to the
// renderer clock, so it must be non-null.
MediaClock rendererClock = Assertions.checkNotNull(this.rendererClock);
long rendererClockPositionUs = rendererClock.getPositionUs();
if (isUsingStandaloneClock) {
// Ensure enabling the renderer clock doesn't jump backwards in time.
if (rendererClockPositionUs < standaloneClock.getPositionUs()) {
standaloneClock.stop();
return;
}
isUsingStandaloneClock = false;
if (standaloneClockIsStarted) {
standaloneClock.start();
}
}
// Continuously sync stand-alone clock to renderer clock so that it can take over if needed.
standaloneClock.resetPosition(rendererClockPositionUs);
PlaybackParameters playbackParameters = rendererClock.getPlaybackParameters();
if (!playbackParameters.equals(standaloneClock.getPlaybackParameters())) {
standaloneClock.setPlaybackParameters(playbackParameters);
listener.onPlaybackParametersChanged(playbackParameters);
}
}
use of androidx.media3.common.util.Clock in project media by androidx.
the class DefaultBandwidthMeterTest method simulateTransfers.
private static long[] simulateTransfers(DefaultBandwidthMeter bandwidthMeter, FakeClock clock) {
long[] bitrateEstimates = new long[SIMULATED_TRANSFER_COUNT];
Random random = new Random(/* seed= */
0);
DataSource dataSource = new FakeDataSource();
DataSpec dataSpec = new DataSpec(Uri.parse("https://test.com"));
for (int i = 0; i < SIMULATED_TRANSFER_COUNT; i++) {
bandwidthMeter.onTransferStart(dataSource, dataSpec, /* isNetwork= */
true);
clock.advanceTime(random.nextInt(/* bound= */
5000));
bandwidthMeter.onBytesTransferred(dataSource, dataSpec, /* isNetwork= */
true, /* bytes= */
random.nextInt(5 * 1024 * 1024));
bandwidthMeter.onTransferEnd(dataSource, dataSpec, /* isNetwork= */
true);
bitrateEstimates[i] = bandwidthMeter.getBitrateEstimate();
}
return bitrateEstimates;
}
Aggregations