mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
Move renderer state methods from release control to sink
PiperOrigin-RevId: 640515298
This commit is contained in:
parent
f3a9c74de2
commit
9716985272
4 changed files with 66 additions and 15 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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}.
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue