Commit 6c6e256c by olly Committed by Ian Baker

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
parent 273d80c4
...@@ -60,14 +60,14 @@ public final class TrackSelectionOverride implements Bundleable { ...@@ -60,14 +60,14 @@ public final class TrackSelectionOverride implements Bundleable {
private static final int FIELD_TRACK_GROUP = 0; private static final int FIELD_TRACK_GROUP = 0;
private static final int FIELD_TRACKS = 1; private static final int FIELD_TRACKS = 1;
/** Constructs an instance to force all tracks in {@code trackGroup} to be selected. */ /**
public TrackSelectionOverride(TrackGroup trackGroup) { * Constructs an instance to force {@code trackIndex} in {@code trackGroup} to be selected.
this.trackGroup = trackGroup; *
ImmutableList.Builder<Integer> builder = new ImmutableList.Builder<>(); * @param trackGroup The {@link TrackGroup} for which to override the track selection.
for (int i = 0; i < trackGroup.length; i++) { * @param trackIndex The index of the track in the {@link TrackGroup} to select.
builder.add(i); */
} public TrackSelectionOverride(TrackGroup trackGroup, int trackIndex) {
this.trackIndices = builder.build(); this(trackGroup, ImmutableList.of(trackIndex));
} }
/** /**
...@@ -123,13 +123,9 @@ public final class TrackSelectionOverride implements Bundleable { ...@@ -123,13 +123,9 @@ public final class TrackSelectionOverride implements Bundleable {
@UnstableApi @UnstableApi
public static final Creator<TrackSelectionOverride> CREATOR = public static final Creator<TrackSelectionOverride> CREATOR =
bundle -> { bundle -> {
@Nullable Bundle trackGroupBundle = bundle.getBundle(keyForField(FIELD_TRACK_GROUP)); Bundle trackGroupBundle = checkNotNull(bundle.getBundle(keyForField(FIELD_TRACK_GROUP)));
checkNotNull(trackGroupBundle); // Mandatory as there are no reasonable defaults.
TrackGroup trackGroup = TrackGroup.CREATOR.fromBundle(trackGroupBundle); TrackGroup trackGroup = TrackGroup.CREATOR.fromBundle(trackGroupBundle);
@Nullable int[] tracks = bundle.getIntArray(keyForField(FIELD_TRACKS)); int[] tracks = checkNotNull(bundle.getIntArray(keyForField(FIELD_TRACKS)));
if (tracks == null) {
return new TrackSelectionOverride(trackGroup);
}
return new TrackSelectionOverride(trackGroup, Ints.asList(tracks)); return new TrackSelectionOverride(trackGroup, Ints.asList(tracks));
}; };
......
...@@ -29,12 +29,12 @@ import org.junit.runner.RunWith; ...@@ -29,12 +29,12 @@ import org.junit.runner.RunWith;
public final class TrackSelectionOverrideTest { public final class TrackSelectionOverrideTest {
@Test @Test
public void newTrackSelectionOverride_withJustTrackGroup_selectsAllTracks() { public void newTrackSelectionOverride_withOneTrack_selectsOneTrack() {
TrackSelectionOverride trackSelectionOverride = TrackSelectionOverride trackSelectionOverride =
new TrackSelectionOverride(newTrackGroupWithIds(1, 2)); new TrackSelectionOverride(newTrackGroupWithIds(1, 2), /* trackIndex= */ 1);
assertThat(trackSelectionOverride.trackGroup).isEqualTo(newTrackGroupWithIds(1, 2)); assertThat(trackSelectionOverride.trackGroup).isEqualTo(newTrackGroupWithIds(1, 2));
assertThat(trackSelectionOverride.trackIndices).containsExactly(0, 1).inOrder(); assertThat(trackSelectionOverride.trackIndices).containsExactly(1).inOrder();
} }
@Test @Test
......
...@@ -67,7 +67,8 @@ public final class TrackSelectionParametersTest { ...@@ -67,7 +67,8 @@ public final class TrackSelectionParametersTest {
@Test @Test
public void parametersSet_fromDefault_isAsExpected() { public void parametersSet_fromDefault_isAsExpected() {
TrackSelectionOverride override1 = TrackSelectionOverride override1 =
new TrackSelectionOverride(new TrackGroup(new Format.Builder().build())); new TrackSelectionOverride(
new TrackGroup(new Format.Builder().build()), /* trackIndex= */ 0);
TrackSelectionOverride override2 = TrackSelectionOverride override2 =
new TrackSelectionOverride( new TrackSelectionOverride(
new TrackGroup( new TrackGroup(
...@@ -101,7 +102,9 @@ public final class TrackSelectionParametersTest { ...@@ -101,7 +102,9 @@ public final class TrackSelectionParametersTest {
// General // General
.setForceLowestBitrate(false) .setForceLowestBitrate(false)
.setForceHighestSupportedBitrate(true) .setForceHighestSupportedBitrate(true)
.addOverride(new TrackSelectionOverride(new TrackGroup(new Format.Builder().build()))) .addOverride(
new TrackSelectionOverride(
new TrackGroup(new Format.Builder().build()), /* trackIndex= */ 0))
.addOverride( .addOverride(
new TrackSelectionOverride( new TrackSelectionOverride(
new TrackGroup( new TrackGroup(
...@@ -202,8 +205,10 @@ public final class TrackSelectionParametersTest { ...@@ -202,8 +205,10 @@ public final class TrackSelectionParametersTest {
@Test @Test
public void addOverride_onDifferentGroups_addsOverride() { public void addOverride_onDifferentGroups_addsOverride() {
TrackSelectionOverride override1 = new TrackSelectionOverride(newTrackGroupWithIds(1)); TrackSelectionOverride override1 =
TrackSelectionOverride override2 = new TrackSelectionOverride(newTrackGroupWithIds(2)); new TrackSelectionOverride(newTrackGroupWithIds(1), /* trackIndex= */ 0);
TrackSelectionOverride override2 =
new TrackSelectionOverride(newTrackGroupWithIds(2), /* trackIndex= */ 0);
TrackSelectionParameters trackSelectionParameters = TrackSelectionParameters trackSelectionParameters =
new TrackSelectionParameters.Builder(getApplicationContext()) new TrackSelectionParameters.Builder(getApplicationContext())
...@@ -234,8 +239,10 @@ public final class TrackSelectionParametersTest { ...@@ -234,8 +239,10 @@ public final class TrackSelectionParametersTest {
@Test @Test
public void setOverrideForType_onSameType_replacesOverride() { public void setOverrideForType_onSameType_replacesOverride() {
TrackSelectionOverride override1 = new TrackSelectionOverride(newTrackGroupWithIds(1)); TrackSelectionOverride override1 =
TrackSelectionOverride override2 = new TrackSelectionOverride(newTrackGroupWithIds(2)); new TrackSelectionOverride(newTrackGroupWithIds(1), /* trackIndex= */ 0);
TrackSelectionOverride override2 =
new TrackSelectionOverride(newTrackGroupWithIds(2), /* trackIndex= */ 0);
TrackSelectionParameters trackSelectionParameters = TrackSelectionParameters trackSelectionParameters =
new TrackSelectionParameters.Builder(getApplicationContext()) new TrackSelectionParameters.Builder(getApplicationContext())
...@@ -248,8 +255,10 @@ public final class TrackSelectionParametersTest { ...@@ -248,8 +255,10 @@ public final class TrackSelectionParametersTest {
@Test @Test
public void clearOverridesOfType_ofTypeAudio_removesAudioOverride() { public void clearOverridesOfType_ofTypeAudio_removesAudioOverride() {
TrackSelectionOverride override1 = new TrackSelectionOverride(AAC_TRACK_GROUP); TrackSelectionOverride override1 =
TrackSelectionOverride override2 = new TrackSelectionOverride(newTrackGroupWithIds(1)); new TrackSelectionOverride(AAC_TRACK_GROUP, /* trackIndex= */ 0);
TrackSelectionOverride override2 =
new TrackSelectionOverride(newTrackGroupWithIds(1), /* trackIndex= */ 0);
TrackSelectionParameters trackSelectionParameters = TrackSelectionParameters trackSelectionParameters =
new TrackSelectionParameters.Builder(getApplicationContext()) new TrackSelectionParameters.Builder(getApplicationContext())
.addOverride(override1) .addOverride(override1)
...@@ -262,8 +271,10 @@ public final class TrackSelectionParametersTest { ...@@ -262,8 +271,10 @@ public final class TrackSelectionParametersTest {
@Test @Test
public void clearOverride_ofTypeGroup_removesOverride() { public void clearOverride_ofTypeGroup_removesOverride() {
TrackSelectionOverride override1 = new TrackSelectionOverride(AAC_TRACK_GROUP); TrackSelectionOverride override1 =
TrackSelectionOverride override2 = new TrackSelectionOverride(newTrackGroupWithIds(1)); new TrackSelectionOverride(AAC_TRACK_GROUP, /* trackIndex= */ 0);
TrackSelectionOverride override2 =
new TrackSelectionOverride(newTrackGroupWithIds(1), /* trackIndex= */ 0);
TrackSelectionParameters trackSelectionParameters = TrackSelectionParameters trackSelectionParameters =
new TrackSelectionParameters.Builder(getApplicationContext()) new TrackSelectionParameters.Builder(getApplicationContext())
.addOverride(override1) .addOverride(override1)
......
...@@ -302,7 +302,7 @@ public final class DefaultTrackSelectorTest { ...@@ -302,7 +302,7 @@ public final class DefaultTrackSelectorTest {
trackSelector.setParameters( trackSelector.setParameters(
trackSelector trackSelector
.buildUponParameters() .buildUponParameters()
.setOverrideForType(new TrackSelectionOverride(videoGroupH264)) .setOverrideForType(new TrackSelectionOverride(videoGroupH264, /* trackIndex= */ 0))
.build()); .build());
TrackSelectorResult result = TrackSelectorResult result =
trackSelector.selectTracks( trackSelector.selectTracks(
...@@ -319,7 +319,7 @@ public final class DefaultTrackSelectorTest { ...@@ -319,7 +319,7 @@ public final class DefaultTrackSelectorTest {
trackSelector.setParameters( trackSelector.setParameters(
trackSelector trackSelector
.buildUponParameters() .buildUponParameters()
.setOverrideForType(new TrackSelectionOverride(videoGroupAv1)) .setOverrideForType(new TrackSelectionOverride(videoGroupAv1, /* trackIndex= */ 0))
.build()); .build());
result = result =
trackSelector.selectTracks( trackSelector.selectTracks(
...@@ -350,7 +350,8 @@ public final class DefaultTrackSelectorTest { ...@@ -350,7 +350,8 @@ public final class DefaultTrackSelectorTest {
trackSelector.setParameters( trackSelector.setParameters(
trackSelector trackSelector
.buildUponParameters() .buildUponParameters()
.setOverrideForType(new TrackSelectionOverride(audioGroupUnsupported)) .setOverrideForType(
new TrackSelectionOverride(audioGroupUnsupported, /* trackIndex= */ 0))
.build()); .build());
TrackSelectorResult result = TrackSelectorResult result =
trackSelector.selectTracks( trackSelector.selectTracks(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment