Move renderer state methods from release control to sink

PiperOrigin-RevId: 640515298
This commit is contained in:
kimvde 2024-06-05 07:13:48 -07:00 committed by Copybara-Service
parent f3a9c74de2
commit 9716985272
4 changed files with 66 additions and 15 deletions

View file

@ -500,6 +500,32 @@ public final class CompositingVideoSinkProvider implements VideoSinkProvider, Vi
// VideoSink impl
@Override
public void onRendererEnabled(boolean releaseFirstFrameBeforeStarted) {
videoFrameReleaseControl.onEnabled(releaseFirstFrameBeforeStarted);
}
@Override
public void onRendererDisabled() {
videoFrameReleaseControl.onDisabled();
}
@Override
public void onRendererStarted() {
videoFrameReleaseControl.onStarted();
}
@Override
public void onRendererStopped() {
videoFrameReleaseControl.onStopped();
}
@Override
public void setListener(Listener listener, Executor executor) {
this.listener = listener;
listenerExecutor = executor;
}
@Override
public void initialize(Format sourceFormat, Clock clock) throws VideoSinkException {
checkState(!isInitialized());
@ -581,12 +607,6 @@ public final class CompositingVideoSinkProvider implements VideoSinkProvider, Vi
}
}
@Override
public void setListener(Listener listener, Executor executor) {
this.listener = listener;
listenerExecutor = executor;
}
@Override
public boolean isFrameDropAllowedOnInput() {
return Util.isFrameDropAllowedOnSurfaceInput(context);

View file

@ -639,7 +639,11 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer
shouldUseVideoSink = hasEffects || !ownsVideoSink;
hasSetShouldUseVideoSink = true;
}
videoFrameReleaseControl.onEnabled(mayRenderStartOfStream);
if (shouldUseVideoSink) {
videoSink.onRendererEnabled(mayRenderStartOfStream);
} else {
videoFrameReleaseControl.onEnabled(mayRenderStartOfStream);
}
}
@Override
@ -693,21 +697,33 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer
droppedFrameAccumulationStartTimeMs = elapsedRealtimeMs;
totalVideoFrameProcessingOffsetUs = 0;
videoFrameProcessingOffsetCount = 0;
videoFrameReleaseControl.onStarted();
if (shouldUseVideoSink) {
videoSink.onRendererStarted();
} else {
videoFrameReleaseControl.onStarted();
}
}
@Override
protected void onStopped() {
maybeNotifyDroppedFrames();
maybeNotifyVideoFrameProcessingOffset();
videoFrameReleaseControl.onStopped();
if (shouldUseVideoSink) {
videoSink.onRendererStopped();
} else {
videoFrameReleaseControl.onStopped();
}
super.onStopped();
}
@Override
protected void onDisabled() {
reportedVideoSize = null;
videoFrameReleaseControl.onDisabled();
if (shouldUseVideoSink) {
videoSink.onRendererDisabled();
} else {
videoFrameReleaseControl.onDisabled();
}
maybeSetupTunnelingForFirstFrame();
haveReportedFirstFrameRenderedForCurrentSurface = false;
tunnelingOnFrameRenderedListener = null;

View file

@ -36,7 +36,10 @@ import java.lang.annotation.Target;
import java.util.List;
import java.util.concurrent.Executor;
/** A sink that consumes decoded video frames. */
/**
* A sink that consumes decoded video frames from a video {@link
* androidx.media3.exoplayer.Renderer}.
*/
@UnstableApi
public interface VideoSink {
@ -104,6 +107,18 @@ public interface VideoSink {
/** Input frames come from a {@link Bitmap}. */
int INPUT_TYPE_BITMAP = 2;
/** Called when the renderer is enabled. */
void onRendererEnabled(boolean releaseFirstFrameBeforeStarted);
/** Called when the renderer is disabled. */
void onRendererDisabled();
/** Called when the renderer is started. */
void onRendererStarted();
/** Called when the renderer is stopped. */
void onRendererStopped();
/**
* Sets a {@link Listener} on this sink. Callbacks are triggered on the supplied {@link Executor}.
*

View file

@ -319,7 +319,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
throws ExoPlaybackException {
super.onEnabled(joining, mayRenderStartOfStream);
this.mayRenderStartOfStream = mayRenderStartOfStream;
videoFrameReleaseControl.onEnabled(mayRenderStartOfStream);
videoSink.onRendererEnabled(mayRenderStartOfStream);
if (joining) {
videoFrameReleaseControl.join(/* renderNextFrameImmediately= */ false);
}
@ -340,7 +340,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
@Override
protected void onDisabled() {
super.onDisabled();
videoFrameReleaseControl.onDisabled();
videoSink.onRendererDisabled();
}
@Override
@ -376,13 +376,13 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
@Override
protected void onStarted() throws ExoPlaybackException {
super.onStarted();
videoFrameReleaseControl.onStarted();
videoSink.onRendererStarted();
}
@Override
protected void onStopped() {
super.onStopped();
videoFrameReleaseControl.onStopped();
videoSink.onRendererStopped();
}
@Override