From 579386ff27dab623c80f60cb66683394f3facaa8 Mon Sep 17 00:00:00 2001 From: kimvde Date: Wed, 24 Apr 2024 02:01:46 -0700 Subject: [PATCH] Set VideoFrameMetadataListener on VideoSink PiperOrigin-RevId: 627652670 --- .../video/CompositingVideoSinkProvider.java | 16 +++++++++++----- .../exoplayer/video/MediaCodecVideoRenderer.java | 7 ++++++- .../media3/exoplayer/video/VideoSink.java | 3 +++ .../exoplayer/video/VideoSinkProvider.java | 3 --- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/CompositingVideoSinkProvider.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/CompositingVideoSinkProvider.java index acd032b32c..7d9840f586 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/CompositingVideoSinkProvider.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/CompositingVideoSinkProvider.java @@ -306,11 +306,6 @@ public final class CompositingVideoSinkProvider currentSurfaceAndSize = null; } - @Override - public void setVideoFrameMetadataListener(VideoFrameMetadataListener videoFrameMetadataListener) { - this.videoFrameMetadataListener = videoFrameMetadataListener; - } - @Override public void release() { if (state == STATE_RELEASED) { @@ -516,6 +511,11 @@ public final class CompositingVideoSinkProvider checkStateNotNull(videoFrameRenderControl).flush(); } + private void setVideoFrameMetadataListener( + VideoFrameMetadataListener videoFrameMetadataListener) { + this.videoFrameMetadataListener = videoFrameMetadataListener; + } + private void setPlaybackSpeed(float speed) { this.playbackSpeed = speed; if (videoFrameRenderControl != null) { @@ -758,6 +758,12 @@ public final class CompositingVideoSinkProvider } } + @Override + public void setVideoFrameMetadataListener( + VideoFrameMetadataListener videoFrameMetadataListener) { + CompositingVideoSinkProvider.this.setVideoFrameMetadataListener(videoFrameMetadataListener); + } + @Override public void setPlaybackSpeed(@FloatRange(from = 0, fromInclusive = false) float speed) { CompositingVideoSinkProvider.this.setPlaybackSpeed(speed); diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java index a779687946..cd853fe463 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java @@ -756,7 +756,9 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer break; case MSG_SET_VIDEO_FRAME_METADATA_LISTENER: frameMetadataListener = (VideoFrameMetadataListener) checkNotNull(message); - videoSinkProvider.setVideoFrameMetadataListener(frameMetadataListener); + if (videoSink != null) { + videoSink.setVideoFrameMetadataListener(frameMetadataListener); + } break; case MSG_SET_AUDIO_SESSION_ID: int tunnelingAudioSessionId = (int) checkNotNull(message); @@ -1112,6 +1114,9 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer // Pass a direct executor since the callback handling involves posting on the app looper // again, so there's no need to do two hops. directExecutor()); + if (frameMetadataListener != null) { + videoSink.setVideoFrameMetadataListener(frameMetadataListener); + } if (enableEffectsForOwnSinkProvider) { if (displaySurface != null && outputResolution != null) { videoSinkProvider.setOutputSurfaceInfo(displaySurface, outputResolution); diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/VideoSink.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/VideoSink.java index 26fb682916..59360b904d 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/VideoSink.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/VideoSink.java @@ -150,6 +150,9 @@ public interface VideoSink { */ Surface getInputSurface(); + /** Sets the {@link VideoFrameMetadataListener}. */ + void setVideoFrameMetadataListener(VideoFrameMetadataListener videoFrameMetadataListener); + /** Sets the playback speed. */ void setPlaybackSpeed(@FloatRange(from = 0, fromInclusive = false) float speed); diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/VideoSinkProvider.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/VideoSinkProvider.java index a597c06d04..fe97e60bfc 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/VideoSinkProvider.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/VideoSinkProvider.java @@ -79,9 +79,6 @@ public interface VideoSinkProvider { /** Clears the set output surface info. */ void clearOutputSurfaceInfo(); - /** Sets a {@link VideoFrameMetadataListener} which is used in the returned {@link VideoSink}. */ - void setVideoFrameMetadataListener(VideoFrameMetadataListener videoFrameMetadataListener); - /** Releases the sink provider. */ void release(); }