From 8da69387821ef7a312e51feffc8c8db28eac47ce Mon Sep 17 00:00:00 2001 From: kimvde Date: Tue, 23 Apr 2024 02:17:58 -0700 Subject: [PATCH] Always initialize VideoSink in renderer Instead of initializing the video sink outside the renderer with an empty format for composition preview, we initialize it in the renderer with the input format for video. PiperOrigin-RevId: 627313708 --- .../media3/exoplayer/image/ImageRenderer.java | 3 ++- .../media3/transformer/PlayerTestListener.java | 12 +++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/image/ImageRenderer.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/image/ImageRenderer.java index 878902be10..b05da06548 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/image/ImageRenderer.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/image/ImageRenderer.java @@ -200,7 +200,8 @@ public class ImageRenderer extends BaseRenderer { } @Override - protected void onEnabled(boolean joining, boolean mayRenderStartOfStream) { + protected void onEnabled(boolean joining, boolean mayRenderStartOfStream) + throws ExoPlaybackException { firstFrameState = mayRenderStartOfStream ? C.FIRST_FRAME_NOT_RENDERED diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/PlayerTestListener.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/PlayerTestListener.java index 619e7df839..12111f0895 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/PlayerTestListener.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/PlayerTestListener.java @@ -29,6 +29,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; /** Utility {@link Player.Listener} for testing. */ public final class PlayerTestListener implements Player.Listener, AnalyticsListener { + private final ConditionVariable playerIdle; private final ConditionVariable playerReady; private final ConditionVariable playerEnded; private final ConditionVariable firstFrameRendered; @@ -43,6 +44,7 @@ public final class PlayerTestListener implements Player.Listener, AnalyticsListe * #waitUntilPlayerReady()} and {@link #waitUntilPlayerEnded()} waits. */ public PlayerTestListener(long testTimeoutMs) { + playerIdle = new ConditionVariable(); playerReady = new ConditionVariable(); playerEnded = new ConditionVariable(); firstFrameRendered = new ConditionVariable(); @@ -50,6 +52,11 @@ public final class PlayerTestListener implements Player.Listener, AnalyticsListe this.testTimeoutMs = testTimeoutMs; } + /** Waits until the {@link Player player} is {@linkplain Player#STATE_IDLE idle}. */ + public void waitUntilPlayerIdle() throws PlaybackException, TimeoutException { + waitOrThrow(playerIdle); + } + /** Waits until the {@link Player player} is {@linkplain Player#STATE_READY ready}. */ public void waitUntilPlayerReady() throws TimeoutException, PlaybackException { waitOrThrow(playerReady); @@ -81,7 +88,9 @@ public final class PlayerTestListener implements Player.Listener, AnalyticsListe @Override public void onPlaybackStateChanged(int playbackState) { - if (playbackState == Player.STATE_READY) { + if (playbackState == Player.STATE_IDLE) { + playerIdle.open(); + } else if (playbackState == Player.STATE_READY) { playerReady.open(); } else if (playbackState == Player.STATE_ENDED) { playerEnded.open(); @@ -96,6 +105,7 @@ public final class PlayerTestListener implements Player.Listener, AnalyticsListe @Override public void onPlayerError(PlaybackException error) { playbackException.set(error); + playerIdle.open(); playerReady.open(); playerEnded.open(); firstFrameRendered.open();