From c6bf380d50d4601ce6ec567ebd56ccf5e36fa8cf Mon Sep 17 00:00:00 2001 From: tonihei Date: Mon, 22 Jan 2024 09:17:51 -0800 Subject: [PATCH] Fix cleared metadata when repeating the same item Issue: androidx/media#1007 #minor-release PiperOrigin-RevId: 600477540 --- RELEASENOTES.md | 2 ++ .../media3/exoplayer/ExoPlayerImpl.java | 3 ++- .../media3/exoplayer/ExoPlayerTest.java | 27 +++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index c6490742d4..04fa2a68c3 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -10,6 +10,8 @@ by wrapping an instance using the [decorator pattern](https://en.wikipedia.org/wiki/Decorator_pattern) and implementing a custom `CompositeSequenceableLoaderFactory`. + * Fix issue where repeating the same time causes metadata from this item + to be cleared ([#1007](https://github.com/androidx/media/issues/1007)). * Transformer: * Track Selection: * Extractors: diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java index 2e304b4684..de0301b149 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/ExoPlayerImpl.java @@ -2019,7 +2019,8 @@ import java.util.concurrent.TimeoutException; } staticAndDynamicMediaMetadata = MediaMetadata.EMPTY; } - if (!previousPlaybackInfo.staticMetadata.equals(newPlaybackInfo.staticMetadata)) { + if (mediaItemTransitioned + || !previousPlaybackInfo.staticMetadata.equals(newPlaybackInfo.staticMetadata)) { staticAndDynamicMediaMetadata = staticAndDynamicMediaMetadata .buildUpon() diff --git a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/ExoPlayerTest.java b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/ExoPlayerTest.java index 9a7e38dfd8..d30d26ca3a 100644 --- a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/ExoPlayerTest.java +++ b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/ExoPlayerTest.java @@ -14227,6 +14227,33 @@ public final class ExoPlayerTest { assertThat(positionAfterSeek).isEqualTo(0); } + @Test + public void repeatingItemWithSameStaticMetadata_keepsMetadata() throws Exception { + Format formatWithStaticMetadata = + new Format.Builder() + .setSampleMimeType(MimeTypes.VIDEO_H264) + .setMetadata( + new Metadata( + new BinaryFrame(/* id= */ "", /* data= */ new byte[0]), + new TextInformationFrame( + /* id= */ "TT2", + /* description= */ null, + /* values= */ ImmutableList.of("title")))) + .build(); + ExoPlayer player = new TestExoPlayerBuilder(context).build(); + player.setMediaSource(new FakeMediaSource(new FakeTimeline(), formatWithStaticMetadata)); + player.prepare(); + player.setRepeatMode(Player.REPEAT_MODE_ONE); + player.play(); + + // Wait until item repeats. + runUntilPositionDiscontinuity(player, Player.DISCONTINUITY_REASON_AUTO_TRANSITION); + MediaMetadata metadataAfterTransition = player.getMediaMetadata(); + player.release(); + + assertThat(metadataAfterTransition.title).isEqualTo("title"); + } + // Internal methods. private void addWatchAsSystemFeature() {