Search in sources :

Example 11 with Clock

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();
}
Also used : FakeMediaClockRenderer(androidx.media3.test.utils.FakeMediaClockRenderer) Test(org.junit.Test)

Example 12 with Clock

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();
}
Also used : FakeMediaClockRenderer(androidx.media3.test.utils.FakeMediaClockRenderer) Test(org.junit.Test)

Example 13 with Clock

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);
}
Also used : FakeMediaClockRenderer(androidx.media3.test.utils.FakeMediaClockRenderer) Test(org.junit.Test)

Example 14 with Clock

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);
    }
}
Also used : PlaybackParameters(androidx.media3.common.PlaybackParameters)

Example 15 with Clock

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;
}
Also used : Random(java.util.Random) FakeDataSource(androidx.media3.test.utils.FakeDataSource) DataSpec(androidx.media3.datasource.DataSpec) FakeDataSource(androidx.media3.test.utils.FakeDataSource) DataSource(androidx.media3.datasource.DataSource)

Aggregations

Test (org.junit.Test)17 MediaItem (androidx.media3.common.MediaItem)6 TrackGroupArray (androidx.media3.common.TrackGroupArray)6 ExoPlayer (androidx.media3.exoplayer.ExoPlayer)5 Clock (androidx.media3.common.util.Clock)4 FakeClock (androidx.media3.test.utils.FakeClock)4 FakeMediaClockRenderer (androidx.media3.test.utils.FakeMediaClockRenderer)4 Listener (androidx.media3.common.Player.Listener)3 Before (org.junit.Before)3 PlaybackParameters (androidx.media3.common.PlaybackParameters)2 Player (androidx.media3.common.Player)2 MediaSource (androidx.media3.exoplayer.source.MediaSource)2 FakeMediaSource (androidx.media3.test.utils.FakeMediaSource)2 TestExoPlayerBuilder (androidx.media3.test.utils.TestExoPlayerBuilder)2 ArrayList (java.util.ArrayList)2 HandlerThread (android.os.HandlerThread)1 VisibleForTesting (androidx.annotation.VisibleForTesting)1 AdPlaybackState (androidx.media3.common.AdPlaybackState)1 Format (androidx.media3.common.Format)1 PlaybackException (androidx.media3.common.PlaybackException)1