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