From 0a741cad367ba4f31a4d944a7e2ad446541bbe61 Mon Sep 17 00:00:00 2001 From: kimvde Date: Mon, 15 Apr 2024 06:44:44 -0700 Subject: [PATCH] Allow sink provider speed to be set at any time VideoSink.initialize will be added in a next CL and we want to allow setPlaybackSpeed to be called at any time. PiperOrigin-RevId: 624942845 --- .../exoplayer/video/CompositingVideoSinkProvider.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 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 17150ae13e..bd8d7eb38e 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 @@ -212,14 +212,16 @@ public final class CompositingVideoSinkProvider @Nullable private Pair currentSurfaceAndSize; private int pendingFlushCount; private @State int state; + private float playbackSpeed; private CompositingVideoSinkProvider(Builder builder) { - this.context = builder.context; + context = builder.context; videoEffects = ImmutableList.of(); previewingVideoGraphFactory = checkStateNotNull(builder.previewingVideoGraphFactory); listeners = new CopyOnWriteArraySet<>(); clock = Clock.DEFAULT; state = STATE_CREATED; + playbackSpeed = 1f; } /** @@ -248,6 +250,7 @@ public final class CompositingVideoSinkProvider this.videoFrameReleaseControl = videoFrameReleaseControl; videoFrameRenderControl = new VideoFrameRenderControl(/* frameRenderer= */ this, videoFrameReleaseControl); + videoFrameRenderControl.setPlaybackSpeed(playbackSpeed); } @Override @@ -524,7 +527,10 @@ public final class CompositingVideoSinkProvider } private void setPlaybackSpeed(float speed) { - checkStateNotNull(videoFrameRenderControl).setPlaybackSpeed(speed); + this.playbackSpeed = speed; + if (videoFrameRenderControl != null) { + videoFrameRenderControl.setPlaybackSpeed(speed); + } } private void onStreamOffsetChange(long bufferPresentationTimeUs, long streamOffsetUs) {