mirror of
https://github.com/androidx/media.git
synced 2025-04-29 22:36:54 +08:00
Improvements to VideoSink.Listener
- Remove unused VideoSink parameter - Make methods default so that implementations don't have to override them all PiperOrigin-RevId: 740715000
This commit is contained in:
parent
d4ea3ad932
commit
3d5e650980
@ -276,14 +276,14 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||
.setHeight(videoSize.height)
|
||||
.setSampleMimeType(MimeTypes.VIDEO_RAW)
|
||||
.build();
|
||||
listenerExecutor.execute(() -> listener.onVideoSizeChanged(DefaultVideoSink.this, videoSize));
|
||||
listenerExecutor.execute(() -> listener.onVideoSizeChanged(videoSize));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void renderFrame(
|
||||
long renderTimeNs, long bufferPresentationTimeUs, boolean isFirstFrame) {
|
||||
if (isFirstFrame && outputSurface != null) {
|
||||
listenerExecutor.execute(() -> listener.onFirstFrameRendered(DefaultVideoSink.this));
|
||||
listenerExecutor.execute(() -> listener.onFirstFrameRendered());
|
||||
}
|
||||
// TODO - b/292111083: outputFormat is initialized after the first frame is rendered because
|
||||
// onVideoSizeChanged is announced after the first frame is available for rendering.
|
||||
@ -298,7 +298,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
|
||||
|
||||
@Override
|
||||
public void dropFrame() {
|
||||
listenerExecutor.execute(() -> listener.onFrameDropped(DefaultVideoSink.this));
|
||||
listenerExecutor.execute(() -> listener.onFrameDropped());
|
||||
videoFrameHandlers.remove().skip();
|
||||
}
|
||||
}
|
||||
|
@ -884,14 +884,14 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer
|
||||
videoSink.setListener(
|
||||
new VideoSink.Listener() {
|
||||
@Override
|
||||
public void onFirstFrameRendered(VideoSink videoSink) {
|
||||
public void onFirstFrameRendered() {
|
||||
if (displaySurface != null) {
|
||||
notifyRenderedFirstFrame();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFrameDropped(VideoSink videoSink) {
|
||||
public void onFrameDropped() {
|
||||
if (displaySurface != null) {
|
||||
updateDroppedBufferCounters(
|
||||
/* droppedInputBufferCount= */ 0, /* droppedDecoderBufferCount= */ 1);
|
||||
@ -899,15 +899,14 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVideoSizeChanged(VideoSink videoSink, VideoSize videoSize) {
|
||||
public void onVideoSizeChanged(VideoSize videoSize) {
|
||||
// TODO: b/292111083 - Report video size change to app. Video size reporting is
|
||||
// removed at the moment to ensure the first frame is rendered, and the video is
|
||||
// rendered after switching on/off the screen.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(
|
||||
VideoSink videoSink, VideoSink.VideoSinkException videoSinkException) {
|
||||
public void onError(VideoSink.VideoSinkException videoSinkException) {
|
||||
setPendingPlaybackException(
|
||||
createRendererException(
|
||||
videoSinkException,
|
||||
|
@ -969,21 +969,19 @@ public final class PlaybackVideoGraphWrapper implements VideoSinkProvider, Video
|
||||
@Override
|
||||
public void onFirstFrameRendered() {
|
||||
VideoSink.Listener currentListener = listener;
|
||||
listenerExecutor.execute(() -> currentListener.onFirstFrameRendered(/* videoSink= */ this));
|
||||
listenerExecutor.execute(currentListener::onFirstFrameRendered);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFrameDropped() {
|
||||
VideoSink.Listener currentListener = listener;
|
||||
listenerExecutor.execute(
|
||||
() -> currentListener.onFrameDropped(checkStateNotNull(/* reference= */ this)));
|
||||
listenerExecutor.execute(currentListener::onFrameDropped);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVideoSizeChanged(VideoSize videoSize) {
|
||||
VideoSink.Listener currentListener = listener;
|
||||
listenerExecutor.execute(
|
||||
() -> currentListener.onVideoSizeChanged(/* videoSink= */ this, videoSize));
|
||||
listenerExecutor.execute(() -> currentListener.onVideoSizeChanged(videoSize));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -992,7 +990,6 @@ public final class PlaybackVideoGraphWrapper implements VideoSinkProvider, Video
|
||||
listenerExecutor.execute(
|
||||
() ->
|
||||
currentListener.onError(
|
||||
/* videoSink= */ this,
|
||||
new VideoSinkException(
|
||||
videoFrameProcessingException, checkStateNotNull(this.inputFormat))));
|
||||
}
|
||||
@ -1040,28 +1037,28 @@ public final class PlaybackVideoGraphWrapper implements VideoSinkProvider, Video
|
||||
private final class DefaultVideoSinkListener implements VideoSink.Listener {
|
||||
|
||||
@Override
|
||||
public void onFirstFrameRendered(VideoSink videoSink) {
|
||||
public void onFirstFrameRendered() {
|
||||
for (PlaybackVideoGraphWrapper.Listener listener : listeners) {
|
||||
listener.onFirstFrameRendered();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFrameDropped(VideoSink videoSink) {
|
||||
public void onFrameDropped() {
|
||||
for (PlaybackVideoGraphWrapper.Listener listener : listeners) {
|
||||
listener.onFrameDropped();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVideoSizeChanged(VideoSink videoSink, VideoSize videoSize) {
|
||||
public void onVideoSizeChanged(VideoSize videoSize) {
|
||||
for (PlaybackVideoGraphWrapper.Listener listener : listeners) {
|
||||
listener.onVideoSizeChanged(videoSize);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(VideoSink videoSink, VideoSink.VideoSinkException videoSinkException) {
|
||||
public void onError(VideoSink.VideoSinkException videoSinkException) {
|
||||
for (PlaybackVideoGraphWrapper.Listener listener : listeners) {
|
||||
listener.onError(VideoFrameProcessingException.from(videoSinkException));
|
||||
}
|
||||
|
@ -57,36 +57,23 @@ public interface VideoSink {
|
||||
/** Listener for {@link VideoSink} events. */
|
||||
interface Listener {
|
||||
/** Called when the sink renders the first frame on the output surface. */
|
||||
void onFirstFrameRendered(VideoSink videoSink);
|
||||
default void onFirstFrameRendered() {}
|
||||
|
||||
/** Called when the sink dropped a frame. */
|
||||
void onFrameDropped(VideoSink videoSink);
|
||||
default void onFrameDropped() {}
|
||||
|
||||
/**
|
||||
* Called before a frame is rendered for the first time after setting the output surface, and
|
||||
* each time there's a change in the size, rotation or pixel aspect ratio of the video being
|
||||
* rendered.
|
||||
*/
|
||||
void onVideoSizeChanged(VideoSink videoSink, VideoSize videoSize);
|
||||
default void onVideoSizeChanged(VideoSize videoSize) {}
|
||||
|
||||
/** Called when the {@link VideoSink} encountered an error. */
|
||||
void onError(VideoSink videoSink, VideoSinkException videoSinkException);
|
||||
default void onError(VideoSinkException videoSinkException) {}
|
||||
|
||||
/** A no-op listener implementation. */
|
||||
Listener NO_OP =
|
||||
new Listener() {
|
||||
@Override
|
||||
public void onFirstFrameRendered(VideoSink videoSink) {}
|
||||
|
||||
@Override
|
||||
public void onFrameDropped(VideoSink videoSink) {}
|
||||
|
||||
@Override
|
||||
public void onVideoSizeChanged(VideoSink videoSink, VideoSize videoSize) {}
|
||||
|
||||
@Override
|
||||
public void onError(VideoSink videoSink, VideoSinkException videoSinkException) {}
|
||||
};
|
||||
Listener NO_OP = new Listener() {};
|
||||
}
|
||||
|
||||
/** Handler for a video frame. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user