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
This commit is contained in:
kimvde 2024-04-15 06:44:44 -07:00 committed by Copybara-Service
parent 42335893da
commit 0a741cad36

View File

@ -212,14 +212,16 @@ public final class CompositingVideoSinkProvider
@Nullable private Pair<Surface, Size> currentSurfaceAndSize; @Nullable private Pair<Surface, Size> currentSurfaceAndSize;
private int pendingFlushCount; private int pendingFlushCount;
private @State int state; private @State int state;
private float playbackSpeed;
private CompositingVideoSinkProvider(Builder builder) { private CompositingVideoSinkProvider(Builder builder) {
this.context = builder.context; context = builder.context;
videoEffects = ImmutableList.of(); videoEffects = ImmutableList.of();
previewingVideoGraphFactory = checkStateNotNull(builder.previewingVideoGraphFactory); previewingVideoGraphFactory = checkStateNotNull(builder.previewingVideoGraphFactory);
listeners = new CopyOnWriteArraySet<>(); listeners = new CopyOnWriteArraySet<>();
clock = Clock.DEFAULT; clock = Clock.DEFAULT;
state = STATE_CREATED; state = STATE_CREATED;
playbackSpeed = 1f;
} }
/** /**
@ -248,6 +250,7 @@ public final class CompositingVideoSinkProvider
this.videoFrameReleaseControl = videoFrameReleaseControl; this.videoFrameReleaseControl = videoFrameReleaseControl;
videoFrameRenderControl = videoFrameRenderControl =
new VideoFrameRenderControl(/* frameRenderer= */ this, videoFrameReleaseControl); new VideoFrameRenderControl(/* frameRenderer= */ this, videoFrameReleaseControl);
videoFrameRenderControl.setPlaybackSpeed(playbackSpeed);
} }
@Override @Override
@ -524,7 +527,10 @@ public final class CompositingVideoSinkProvider
} }
private void setPlaybackSpeed(float speed) { 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) { private void onStreamOffsetChange(long bufferPresentationTimeUs, long streamOffsetUs) {