From ec49d19384eedf894cf95ed9d72a149c1279cbfd Mon Sep 17 00:00:00 2001 From: kimvde Date: Mon, 10 Jun 2024 03:11:49 -0700 Subject: [PATCH] Call VideoFrameReleaseControl.setPlaybackSpeed from sink when enabled Do not call VideoFrameReleaseControl.setPlaybackSpeed directly from MCVR when the video sink is enabled. PiperOrigin-RevId: 641840894 --- .../media3/exoplayer/video/MediaCodecVideoRenderer.java | 4 +++- .../media3/exoplayer/video/VideoFrameReleaseControl.java | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) 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 aabaf43da6..7f1dbfc7ea 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 @@ -674,6 +674,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer // Pass a direct executor since the callback handling involves posting on the app looper // again, so there's no need to do two hops. directExecutor()); + videoSink.setPlaybackSpeed(getPlaybackSpeed()); videoSink.onRendererEnabled(mayRenderStartOfStream); } else { videoFrameReleaseControl.onEnabled(mayRenderStartOfStream); @@ -1004,9 +1005,10 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer public void setPlaybackSpeed(float currentPlaybackSpeed, float targetPlaybackSpeed) throws ExoPlaybackException { super.setPlaybackSpeed(currentPlaybackSpeed, targetPlaybackSpeed); - videoFrameReleaseControl.setPlaybackSpeed(currentPlaybackSpeed); if (shouldUseVideoSink) { videoSink.setPlaybackSpeed(currentPlaybackSpeed); + } else { + videoFrameReleaseControl.setPlaybackSpeed(currentPlaybackSpeed); } } diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/VideoFrameReleaseControl.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/VideoFrameReleaseControl.java index a9b08865e8..a4572ce774 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/VideoFrameReleaseControl.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/VideoFrameReleaseControl.java @@ -399,6 +399,9 @@ public final class VideoFrameReleaseControl { /** Sets the playback speed. Called when the renderer playback speed changes. */ public void setPlaybackSpeed(float speed) { + if (speed == playbackSpeed) { + return; + } this.playbackSpeed = speed; frameReleaseHelper.onPlaybackSpeed(speed); }