From 6c6e256cfbeeca04d567925338f8742dc8a93df6 Mon Sep 17 00:00:00 2001 From: olly Date: Tue, 1 Mar 2022 14:41:49 +0000 Subject: [PATCH] TrackSelectionOverride: Remove select-all-tracks constructor This constructor always does the wrong thing for non-adaptive groups containing more than 1 track, because it'll incorrectly generate an adaptive selection. Replace it with a constructor for specifying a single track within the group instead. PiperOrigin-RevId: 431673458 --- .../media3/common/TrackSelectionOverride.java | 24 ++++++-------- .../common/TrackSelectionOverrideTest.java | 6 ++-- .../common/TrackSelectionParametersTest.java | 31 +++++++++++++------ .../DefaultTrackSelectorTest.java | 7 +++-- 4 files changed, 38 insertions(+), 30 deletions(-) diff --git a/libraries/common/src/main/java/androidx/media3/common/TrackSelectionOverride.java b/libraries/common/src/main/java/androidx/media3/common/TrackSelectionOverride.java index 791f4f7082..7bc7b0cd18 100644 --- a/libraries/common/src/main/java/androidx/media3/common/TrackSelectionOverride.java +++ b/libraries/common/src/main/java/androidx/media3/common/TrackSelectionOverride.java @@ -60,14 +60,14 @@ public final class TrackSelectionOverride implements Bundleable { private static final int FIELD_TRACK_GROUP = 0; private static final int FIELD_TRACKS = 1; - /** Constructs an instance to force all tracks in {@code trackGroup} to be selected. */ - public TrackSelectionOverride(TrackGroup trackGroup) { - this.trackGroup = trackGroup; - ImmutableList.Builder builder = new ImmutableList.Builder<>(); - for (int i = 0; i < trackGroup.length; i++) { - builder.add(i); - } - this.trackIndices = builder.build(); + /** + * Constructs an instance to force {@code trackIndex} in {@code trackGroup} to be selected. + * + * @param trackGroup The {@link TrackGroup} for which to override the track selection. + * @param trackIndex The index of the track in the {@link TrackGroup} to select. + */ + public TrackSelectionOverride(TrackGroup trackGroup, int trackIndex) { + this(trackGroup, ImmutableList.of(trackIndex)); } /** @@ -123,13 +123,9 @@ public final class TrackSelectionOverride implements Bundleable { @UnstableApi public static final Creator CREATOR = bundle -> { - @Nullable Bundle trackGroupBundle = bundle.getBundle(keyForField(FIELD_TRACK_GROUP)); - checkNotNull(trackGroupBundle); // Mandatory as there are no reasonable defaults. + Bundle trackGroupBundle = checkNotNull(bundle.getBundle(keyForField(FIELD_TRACK_GROUP))); TrackGroup trackGroup = TrackGroup.CREATOR.fromBundle(trackGroupBundle); - @Nullable int[] tracks = bundle.getIntArray(keyForField(FIELD_TRACKS)); - if (tracks == null) { - return new TrackSelectionOverride(trackGroup); - } + int[] tracks = checkNotNull(bundle.getIntArray(keyForField(FIELD_TRACKS))); return new TrackSelectionOverride(trackGroup, Ints.asList(tracks)); }; diff --git a/libraries/common/src/test/java/androidx/media3/common/TrackSelectionOverrideTest.java b/libraries/common/src/test/java/androidx/media3/common/TrackSelectionOverrideTest.java index 1de9157adb..a65ff4572f 100644 --- a/libraries/common/src/test/java/androidx/media3/common/TrackSelectionOverrideTest.java +++ b/libraries/common/src/test/java/androidx/media3/common/TrackSelectionOverrideTest.java @@ -29,12 +29,12 @@ import org.junit.runner.RunWith; public final class TrackSelectionOverrideTest { @Test - public void newTrackSelectionOverride_withJustTrackGroup_selectsAllTracks() { + public void newTrackSelectionOverride_withOneTrack_selectsOneTrack() { TrackSelectionOverride trackSelectionOverride = - new TrackSelectionOverride(newTrackGroupWithIds(1, 2)); + new TrackSelectionOverride(newTrackGroupWithIds(1, 2), /* trackIndex= */ 1); assertThat(trackSelectionOverride.trackGroup).isEqualTo(newTrackGroupWithIds(1, 2)); - assertThat(trackSelectionOverride.trackIndices).containsExactly(0, 1).inOrder(); + assertThat(trackSelectionOverride.trackIndices).containsExactly(1).inOrder(); } @Test diff --git a/libraries/common/src/test/java/androidx/media3/common/TrackSelectionParametersTest.java b/libraries/common/src/test/java/androidx/media3/common/TrackSelectionParametersTest.java index 21b90e6253..fa43334cbf 100644 --- a/libraries/common/src/test/java/androidx/media3/common/TrackSelectionParametersTest.java +++ b/libraries/common/src/test/java/androidx/media3/common/TrackSelectionParametersTest.java @@ -67,7 +67,8 @@ public final class TrackSelectionParametersTest { @Test public void parametersSet_fromDefault_isAsExpected() { TrackSelectionOverride override1 = - new TrackSelectionOverride(new TrackGroup(new Format.Builder().build())); + new TrackSelectionOverride( + new TrackGroup(new Format.Builder().build()), /* trackIndex= */ 0); TrackSelectionOverride override2 = new TrackSelectionOverride( new TrackGroup( @@ -101,7 +102,9 @@ public final class TrackSelectionParametersTest { // General .setForceLowestBitrate(false) .setForceHighestSupportedBitrate(true) - .addOverride(new TrackSelectionOverride(new TrackGroup(new Format.Builder().build()))) + .addOverride( + new TrackSelectionOverride( + new TrackGroup(new Format.Builder().build()), /* trackIndex= */ 0)) .addOverride( new TrackSelectionOverride( new TrackGroup( @@ -202,8 +205,10 @@ public final class TrackSelectionParametersTest { @Test public void addOverride_onDifferentGroups_addsOverride() { - TrackSelectionOverride override1 = new TrackSelectionOverride(newTrackGroupWithIds(1)); - TrackSelectionOverride override2 = new TrackSelectionOverride(newTrackGroupWithIds(2)); + TrackSelectionOverride override1 = + new TrackSelectionOverride(newTrackGroupWithIds(1), /* trackIndex= */ 0); + TrackSelectionOverride override2 = + new TrackSelectionOverride(newTrackGroupWithIds(2), /* trackIndex= */ 0); TrackSelectionParameters trackSelectionParameters = new TrackSelectionParameters.Builder(getApplicationContext()) @@ -234,8 +239,10 @@ public final class TrackSelectionParametersTest { @Test public void setOverrideForType_onSameType_replacesOverride() { - TrackSelectionOverride override1 = new TrackSelectionOverride(newTrackGroupWithIds(1)); - TrackSelectionOverride override2 = new TrackSelectionOverride(newTrackGroupWithIds(2)); + TrackSelectionOverride override1 = + new TrackSelectionOverride(newTrackGroupWithIds(1), /* trackIndex= */ 0); + TrackSelectionOverride override2 = + new TrackSelectionOverride(newTrackGroupWithIds(2), /* trackIndex= */ 0); TrackSelectionParameters trackSelectionParameters = new TrackSelectionParameters.Builder(getApplicationContext()) @@ -248,8 +255,10 @@ public final class TrackSelectionParametersTest { @Test public void clearOverridesOfType_ofTypeAudio_removesAudioOverride() { - TrackSelectionOverride override1 = new TrackSelectionOverride(AAC_TRACK_GROUP); - TrackSelectionOverride override2 = new TrackSelectionOverride(newTrackGroupWithIds(1)); + TrackSelectionOverride override1 = + new TrackSelectionOverride(AAC_TRACK_GROUP, /* trackIndex= */ 0); + TrackSelectionOverride override2 = + new TrackSelectionOverride(newTrackGroupWithIds(1), /* trackIndex= */ 0); TrackSelectionParameters trackSelectionParameters = new TrackSelectionParameters.Builder(getApplicationContext()) .addOverride(override1) @@ -262,8 +271,10 @@ public final class TrackSelectionParametersTest { @Test public void clearOverride_ofTypeGroup_removesOverride() { - TrackSelectionOverride override1 = new TrackSelectionOverride(AAC_TRACK_GROUP); - TrackSelectionOverride override2 = new TrackSelectionOverride(newTrackGroupWithIds(1)); + TrackSelectionOverride override1 = + new TrackSelectionOverride(AAC_TRACK_GROUP, /* trackIndex= */ 0); + TrackSelectionOverride override2 = + new TrackSelectionOverride(newTrackGroupWithIds(1), /* trackIndex= */ 0); TrackSelectionParameters trackSelectionParameters = new TrackSelectionParameters.Builder(getApplicationContext()) .addOverride(override1) diff --git a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelectorTest.java b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelectorTest.java index 504a724cc4..47fa09fba9 100644 --- a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelectorTest.java +++ b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelectorTest.java @@ -302,7 +302,7 @@ public final class DefaultTrackSelectorTest { trackSelector.setParameters( trackSelector .buildUponParameters() - .setOverrideForType(new TrackSelectionOverride(videoGroupH264)) + .setOverrideForType(new TrackSelectionOverride(videoGroupH264, /* trackIndex= */ 0)) .build()); TrackSelectorResult result = trackSelector.selectTracks( @@ -319,7 +319,7 @@ public final class DefaultTrackSelectorTest { trackSelector.setParameters( trackSelector .buildUponParameters() - .setOverrideForType(new TrackSelectionOverride(videoGroupAv1)) + .setOverrideForType(new TrackSelectionOverride(videoGroupAv1, /* trackIndex= */ 0)) .build()); result = trackSelector.selectTracks( @@ -350,7 +350,8 @@ public final class DefaultTrackSelectorTest { trackSelector.setParameters( trackSelector .buildUponParameters() - .setOverrideForType(new TrackSelectionOverride(audioGroupUnsupported)) + .setOverrideForType( + new TrackSelectionOverride(audioGroupUnsupported, /* trackIndex= */ 0)) .build()); TrackSelectorResult result = trackSelector.selectTracks(