From 9785c1fd92aecd70883098a3ff80eb380297653a Mon Sep 17 00:00:00 2001 From: claincly Date: Thu, 3 Apr 2025 10:11:00 -0700 Subject: [PATCH] Allow setting VideoFrameMetadataListener on CompositionPlayer PiperOrigin-RevId: 743607386 --- .../media3/transformer/CompositionPlayer.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/CompositionPlayer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/CompositionPlayer.java index 35f5445e83..0c2a192858 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/CompositionPlayer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/CompositionPlayer.java @@ -77,6 +77,7 @@ import androidx.media3.exoplayer.trackselection.ExoTrackSelection; import androidx.media3.exoplayer.upstream.Allocator; import androidx.media3.exoplayer.util.EventLogger; import androidx.media3.exoplayer.video.PlaybackVideoGraphWrapper; +import androidx.media3.exoplayer.video.VideoFrameMetadataListener; import androidx.media3.exoplayer.video.VideoFrameReleaseControl; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; @@ -320,6 +321,7 @@ public final class CompositionPlayer extends SimpleBasePlayer private @MonotonicNonNull Composition composition; private @MonotonicNonNull Size videoOutputSize; private @MonotonicNonNull PlaybackVideoGraphWrapper playbackVideoGraphWrapper; + private @MonotonicNonNull VideoFrameMetadataListener pendingVideoFrameMetadatListener; private long compositionDurationUs; private boolean playWhenReady; @@ -606,6 +608,15 @@ public final class CompositionPlayer extends SimpleBasePlayer return Futures.immediateVoidFuture(); } + /** Sets the {@link VideoFrameMetadataListener}. */ + public void setVideoFrameMetadataListener(VideoFrameMetadataListener videoFrameMetadataListener) { + if (players.isEmpty()) { + pendingVideoFrameMetadatListener = videoFrameMetadataListener; + return; + } + players.get(0).setVideoFrameMetadataListener(videoFrameMetadataListener); + } + // CompositionPlayerInternal.Listener methods @Override @@ -770,6 +781,9 @@ public final class CompositionPlayer extends SimpleBasePlayer if (i == 0) { setPrimaryPlayerSequence(player, editedMediaItemSequence); + if (pendingVideoFrameMetadatListener != null) { + player.setVideoFrameMetadataListener(pendingVideoFrameMetadatListener); + } } else { setSecondaryPlayerSequence(player, editedMediaItemSequence, primarySequenceDurationUs); }