From 59d98b9a4e2381647f3e4552b6935bcca1be6f89 Mon Sep 17 00:00:00 2001 From: ibaker Date: Mon, 6 Dec 2021 13:24:26 +0000 Subject: [PATCH] Add MediaItem.SubtitleConfiguration#id field Issue: google/ExoPlayer#9673 #minor-release PiperOrigin-RevId: 414413320 --- .../androidx/media3/common/MediaItem.java | 28 +++++++++++++++---- .../androidx/media3/common/MediaItemTest.java | 3 ++ .../source/DefaultMediaSourceFactory.java | 1 + .../source/SingleSampleMediaSource.java | 1 + 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/libraries/common/src/main/java/androidx/media3/common/MediaItem.java b/libraries/common/src/main/java/androidx/media3/common/MediaItem.java index da96894d28..1ec4578599 100644 --- a/libraries/common/src/main/java/androidx/media3/common/MediaItem.java +++ b/libraries/common/src/main/java/androidx/media3/common/MediaItem.java @@ -1268,6 +1268,7 @@ public final class MediaItem implements Bundleable { private @C.SelectionFlags int selectionFlags; private @C.RoleFlags int roleFlags; @Nullable private String label; + @Nullable private String id; /** * Constructs an instance. @@ -1285,6 +1286,7 @@ public final class MediaItem implements Bundleable { this.selectionFlags = subtitleConfiguration.selectionFlags; this.roleFlags = subtitleConfiguration.roleFlags; this.label = subtitleConfiguration.label; + this.id = subtitleConfiguration.id; } /** Sets the {@link Uri} to the subtitle file. */ @@ -1323,6 +1325,12 @@ public final class MediaItem implements Bundleable { return this; } + /** Sets the optional ID for this subtitle track. */ + public Builder setId(@Nullable String id) { + this.id = id; + return this; + } + /** Creates a {@link SubtitleConfiguration} from the values of this builder. */ public SubtitleConfiguration build() { return new SubtitleConfiguration(this); @@ -1345,20 +1353,27 @@ public final class MediaItem implements Bundleable { public final @C.RoleFlags int roleFlags; /** The label. */ @Nullable public final String label; + /** + * The ID of the subtitles. This will be propagated to the {@link Format#id} of the subtitle + * track created from this configuration. + */ + @Nullable public final String id; private SubtitleConfiguration( Uri uri, String mimeType, @Nullable String language, - @C.SelectionFlags int selectionFlags, - @C.RoleFlags int roleFlags, - @Nullable String label) { + int selectionFlags, + int roleFlags, + @Nullable String label, + @Nullable String id) { this.uri = uri; this.mimeType = mimeType; this.language = language; this.selectionFlags = selectionFlags; this.roleFlags = roleFlags; this.label = label; + this.id = id; } private SubtitleConfiguration(Builder builder) { @@ -1368,6 +1383,7 @@ public final class MediaItem implements Bundleable { this.selectionFlags = builder.selectionFlags; this.roleFlags = builder.roleFlags; this.label = builder.label; + this.id = builder.id; } /** Returns a {@link Builder} initialized with the values of this instance. */ @@ -1391,7 +1407,8 @@ public final class MediaItem implements Bundleable { && Util.areEqual(language, other.language) && selectionFlags == other.selectionFlags && roleFlags == other.roleFlags - && Util.areEqual(label, other.label); + && Util.areEqual(label, other.label) + && Util.areEqual(id, other.id); } @Override @@ -1402,6 +1419,7 @@ public final class MediaItem implements Bundleable { result = 31 * result + selectionFlags; result = 31 * result + roleFlags; result = 31 * result + (label == null ? 0 : label.hashCode()); + result = 31 * result + (id == null ? 0 : id.hashCode()); return result; } } @@ -1436,7 +1454,7 @@ public final class MediaItem implements Bundleable { @C.SelectionFlags int selectionFlags, @C.RoleFlags int roleFlags, @Nullable String label) { - super(uri, mimeType, language, selectionFlags, roleFlags, label); + super(uri, mimeType, language, selectionFlags, roleFlags, label, /* id= */ null); } private Subtitle(Builder builder) { diff --git a/libraries/common/src/test/java/androidx/media3/common/MediaItemTest.java b/libraries/common/src/test/java/androidx/media3/common/MediaItemTest.java index 7c6e7f9105..465ba1a5ff 100644 --- a/libraries/common/src/test/java/androidx/media3/common/MediaItemTest.java +++ b/libraries/common/src/test/java/androidx/media3/common/MediaItemTest.java @@ -276,6 +276,7 @@ public class MediaItemTest { .setSelectionFlags(C.SELECTION_FLAG_FORCED) .setRoleFlags(C.ROLE_FLAG_ALTERNATE) .setLabel("label") + .setId("id") .build()); MediaItem mediaItem = @@ -617,6 +618,7 @@ public class MediaItemTest { .setSelectionFlags(C.SELECTION_FLAG_FORCED) .setRoleFlags(C.ROLE_FLAG_ALTERNATE) .setLabel("label") + .setId("id") .build())) .setTag(new Object()) .build(); @@ -673,6 +675,7 @@ public class MediaItemTest { .setSelectionFlags(C.SELECTION_FLAG_FORCED) .setRoleFlags(C.ROLE_FLAG_ALTERNATE) .setLabel("label") + .setId("id") .build())) .setTag(new Object()) .build(); diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/DefaultMediaSourceFactory.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/DefaultMediaSourceFactory.java index 81d76edfc7..f42d2a0107 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/DefaultMediaSourceFactory.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/DefaultMediaSourceFactory.java @@ -406,6 +406,7 @@ public final class DefaultMediaSourceFactory implements MediaSourceFactory { .setSelectionFlags(subtitleConfigurations.get(i).selectionFlags) .setRoleFlags(subtitleConfigurations.get(i).roleFlags) .setLabel(subtitleConfigurations.get(i).label) + .setId(subtitleConfigurations.get(i).id) .build(); ExtractorsFactory extractorsFactory = () -> diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/SingleSampleMediaSource.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/SingleSampleMediaSource.java index 6376c70815..ace3d6971c 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/SingleSampleMediaSource.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/source/SingleSampleMediaSource.java @@ -172,6 +172,7 @@ public final class SingleSampleMediaSource extends BaseMediaSource { .setSelectionFlags(subtitleConfiguration.selectionFlags) .setRoleFlags(subtitleConfiguration.roleFlags) .setLabel(subtitleConfiguration.label) + .setId(subtitleConfiguration.id) .build(); dataSpec = new DataSpec.Builder()