Search in sources :

Example 6 with Clock

use of androidx.media3.common.util.Clock in project media by androidx.

the class PlayerMessageTest method setUp.

@Before
public void setUp() {
    initMocks(this);
    PlayerMessage.Sender sender = (message) -> {
    };
    PlayerMessage.Target target = (messageType, payload) -> {
    };
    handlerThread = new HandlerThread("TestHandler");
    handlerThread.start();
    message = new PlayerMessage(sender, target, Timeline.EMPTY, /* defaultWindowIndex= */
    0, clock, handlerThread.getLooper());
}
Also used : MockitoAnnotations.initMocks(org.mockito.MockitoAnnotations.initMocks) Mock(org.mockito.Mock) Assert.assertThrows(org.junit.Assert.assertThrows) Clock(androidx.media3.common.util.Clock) RunWith(org.junit.runner.RunWith) TimeoutException(java.util.concurrent.TimeoutException) Test(org.junit.Test) Mockito.when(org.mockito.Mockito.when) Truth.assertThat(com.google.common.truth.Truth.assertThat) AndroidJUnit4(androidx.test.ext.junit.runners.AndroidJUnit4) Executors(java.util.concurrent.Executors) Mockito.verify(org.mockito.Mockito.verify) CountDownLatch(java.util.concurrent.CountDownLatch) Mockito(org.mockito.Mockito) Future(java.util.concurrent.Future) HandlerThread(android.os.HandlerThread) Timeline(androidx.media3.common.Timeline) After(org.junit.After) SECONDS(java.util.concurrent.TimeUnit.SECONDS) ExecutorService(java.util.concurrent.ExecutorService) Before(org.junit.Before) HandlerThread(android.os.HandlerThread) Before(org.junit.Before)

Example 7 with Clock

use of androidx.media3.common.util.Clock in project media by androidx.

the class ExoPlayerTest method setPlaybackSpeed_withAdPlayback_onlyAppliesToContent.

@Test
public void setPlaybackSpeed_withAdPlayback_onlyAppliesToContent() throws Exception {
    // Create renderer with media clock to listen to playback parameter changes.
    ArrayList<PlaybackParameters> playbackParameters = new ArrayList<>();
    FakeMediaClockRenderer audioRenderer = new FakeMediaClockRenderer(C.TRACK_TYPE_AUDIO) {

        private long positionUs;

        @Override
        protected void onStreamChanged(Format[] formats, long startPositionUs, long offsetUs) {
            this.positionUs = offsetUs;
        }

        @Override
        public long getPositionUs() {
            // Continuously increase position to let playback progress.
            positionUs += 10_000;
            return positionUs;
        }

        @Override
        public void setPlaybackParameters(PlaybackParameters parameters) {
            playbackParameters.add(parameters);
        }

        @Override
        public PlaybackParameters getPlaybackParameters() {
            return playbackParameters.isEmpty() ? PlaybackParameters.DEFAULT : Iterables.getLast(playbackParameters);
        }
    };
    ExoPlayer player = new TestExoPlayerBuilder(context).setRenderers(audioRenderer).build();
    AdPlaybackState adPlaybackState = FakeTimeline.createAdPlaybackState(/* adsPerAdGroup= */
    1, /* adGroupTimesUs...= */
    0, 7 * C.MICROS_PER_SECOND, C.TIME_END_OF_SOURCE);
    TimelineWindowDefinition adTimelineDefinition = new TimelineWindowDefinition(/* periodCount= */
    1, /* id= */
    0, /* isSeekable= */
    true, /* isDynamic= */
    false, /* isLive= */
    false, /* isPlaceholder= */
    false, /* durationUs= */
    10 * C.MICROS_PER_SECOND, /* defaultPositionUs= */
    0, /* windowOffsetInFirstPeriodUs= */
    0, adPlaybackState);
    player.setMediaSource(new FakeMediaSource(new FakeTimeline(adTimelineDefinition), ExoPlayerTestRunner.AUDIO_FORMAT));
    Player.Listener mockListener = mock(Player.Listener.class);
    player.addListener(mockListener);
    player.setPlaybackSpeed(5f);
    player.prepare();
    player.play();
    runUntilPlaybackState(player, Player.STATE_ENDED);
    player.release();
    // Assert that the renderer received the playback speed updates at each ad/content boundary.
    assertThat(playbackParameters).containsExactly(/* preroll ad */
    new PlaybackParameters(1f), /* content after preroll */
    new PlaybackParameters(5f), /* midroll ad */
    new PlaybackParameters(1f), /* content after midroll */
    new PlaybackParameters(5f), /* postroll ad */
    new PlaybackParameters(1f), /* content after postroll */
    new PlaybackParameters(5f)).inOrder();
    // Assert that user-set speed was reported, but none of the ad overrides.
    verify(mockListener).onPlaybackParametersChanged(any());
    verify(mockListener).onPlaybackParametersChanged(new PlaybackParameters(5.0f));
}
Also used : Listener(androidx.media3.common.Player.Listener) Player(androidx.media3.common.Player) FakeMediaSource(androidx.media3.test.utils.FakeMediaSource) ServerSideAdInsertionUtil.addAdGroupToAdPlaybackState(androidx.media3.exoplayer.source.ads.ServerSideAdInsertionUtil.addAdGroupToAdPlaybackState) AdPlaybackState(androidx.media3.common.AdPlaybackState) FakeTimeline(androidx.media3.test.utils.FakeTimeline) ArrayList(java.util.ArrayList) TimelineWindowDefinition(androidx.media3.test.utils.FakeTimeline.TimelineWindowDefinition) FakeMediaClockRenderer(androidx.media3.test.utils.FakeMediaClockRenderer) TestExoPlayerBuilder(androidx.media3.test.utils.TestExoPlayerBuilder) PlaybackParameters(androidx.media3.common.PlaybackParameters) Test(org.junit.Test)

Example 8 with Clock

use of androidx.media3.common.util.Clock in project media by androidx.

the class RobolectricUtilTest method runMainLooperUntil_withConditionAlreadyTrue_returnsImmediately.

@Test
public void runMainLooperUntil_withConditionAlreadyTrue_returnsImmediately() throws Exception {
    Clock mockClock = mock(Clock.class);
    RobolectricUtil.runMainLooperUntil(() -> true, /* timeoutMs= */
    0, mockClock);
    verify(mockClock, atMost(1)).currentTimeMillis();
}
Also used : Clock(androidx.media3.common.util.Clock) Test(org.junit.Test)

Example 9 with Clock

use of androidx.media3.common.util.Clock in project media by androidx.

the class TestExoPlayerBuilder method build.

/**
 * Builds an {@link ExoPlayer} using the provided values or their defaults.
 */
public ExoPlayer build() {
    Assertions.checkNotNull(looper, "TestExoPlayer builder run on a thread without Looper and no Looper specified.");
    // Do not update renderersFactory and renderers here, otherwise their getters may
    // return different values before and after build() is called, making them confusing.
    RenderersFactory playerRenderersFactory = renderersFactory;
    if (playerRenderersFactory == null) {
        playerRenderersFactory = (eventHandler, videoRendererEventListener, audioRendererEventListener, textRendererOutput, metadataRendererOutput) -> renderers != null ? renderers : new Renderer[] { new FakeVideoRenderer(eventHandler, videoRendererEventListener), new FakeAudioRenderer(eventHandler, audioRendererEventListener) };
    }
    ExoPlayer.Builder builder = new ExoPlayer.Builder(context, playerRenderersFactory).setTrackSelector(trackSelector).setLoadControl(loadControl).setBandwidthMeter(bandwidthMeter).setAnalyticsCollector(new DefaultAnalyticsCollector(clock)).setClock(clock).setUseLazyPreparation(useLazyPreparation).setLooper(looper).setSeekBackIncrementMs(seekBackIncrementMs).setSeekForwardIncrementMs(seekForwardIncrementMs);
    if (mediaSourceFactory != null) {
        builder.setMediaSourceFactory(mediaSourceFactory);
    }
    return builder.build();
}
Also used : Renderer(androidx.media3.exoplayer.Renderer) RenderersFactory(androidx.media3.exoplayer.RenderersFactory) ExoPlayer(androidx.media3.exoplayer.ExoPlayer) DefaultAnalyticsCollector(androidx.media3.exoplayer.analytics.DefaultAnalyticsCollector)

Example 10 with Clock

use of androidx.media3.common.util.Clock in project media by androidx.

the class TransformerEndToEndTest method setUp.

@Before
public void setUp() throws Exception {
    context = ApplicationProvider.getApplicationContext();
    outputPath = Util.createTempFile(context, "TransformerTest").getPath();
    clock = new FakeClock(/* isAutoAdvancing= */
    true);
    progressHolder = new ProgressHolder();
    createEncodersAndDecoders();
}
Also used : FakeClock(androidx.media3.test.utils.FakeClock) Before(org.junit.Before)

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