From 6234a8bede2390d71575c26fbdea5bedf6fa6bcf Mon Sep 17 00:00:00 2001 From: kimvde Date: Wed, 12 Jun 2024 07:37:05 -0700 Subject: [PATCH] Move usages of allowReleaseFirstFrameBeforeStarted inside sink PiperOrigin-RevId: 642611061 --- .../exoplayer/video/CompositingVideoSinkProvider.java | 9 +++++++-- .../exoplayer/video/MediaCodecVideoRenderer.java | 6 +++++- .../androidx/media3/exoplayer/video/VideoSink.java | 11 ++++++++++- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/CompositingVideoSinkProvider.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/CompositingVideoSinkProvider.java index 3eb71edc9e..27fc7e6a0d 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/CompositingVideoSinkProvider.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/CompositingVideoSinkProvider.java @@ -529,8 +529,8 @@ public final class CompositingVideoSinkProvider implements VideoSinkProvider, Vi // VideoSink impl @Override - public void onRendererEnabled(boolean releaseFirstFrameBeforeStarted) { - videoFrameReleaseControl.onEnabled(releaseFirstFrameBeforeStarted); + public void onRendererEnabled(boolean mayRenderStartOfStream) { + videoFrameReleaseControl.onEnabled(mayRenderStartOfStream); } @Override @@ -694,6 +694,11 @@ public final class CompositingVideoSinkProvider implements VideoSinkProvider, Vi CompositingVideoSinkProvider.this.clearOutputSurfaceInfo(); } + @Override + public void enableMayRenderStartOfStream() { + videoFrameReleaseControl.allowReleaseFirstFrameBeforeStarted(); + } + @Override public long registerInputFrame(long framePresentationTimeUs, boolean isLastFrame) { checkState(isInitialized()); diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java index 6227127b5d..1bd55d3b00 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java @@ -704,7 +704,11 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer @Override public void enableMayRenderStartOfStream() { - videoFrameReleaseControl.allowReleaseFirstFrameBeforeStarted(); + if (videoSink != null) { + videoSink.enableMayRenderStartOfStream(); + } else { + videoFrameReleaseControl.allowReleaseFirstFrameBeforeStarted(); + } } @Override diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/VideoSink.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/VideoSink.java index d84c9c548c..58dc285848 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/VideoSink.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/VideoSink.java @@ -107,7 +107,7 @@ public interface VideoSink { int INPUT_TYPE_BITMAP = 2; /** Called when the renderer is enabled. */ - void onRendererEnabled(boolean releaseFirstFrameBeforeStarted); + void onRendererEnabled(boolean mayRenderStartOfStream); /** Called when the renderer is disabled. */ void onRendererDisabled(); @@ -199,6 +199,15 @@ public interface VideoSink { /** Clears the set output surface info. */ void clearOutputSurfaceInfo(); + /** + * Enables this video sink to render the start of the stream even if the renderer is not + * {@linkplain #onRendererStarted() started} yet. + * + *

This is used to update the value of {@code mayRenderStartOfStream} passed to {@link + * #onRendererEnabled(boolean)}. + */ + void enableMayRenderStartOfStream(); + /** * Informs the video sink that a new input stream will be queued. *