mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
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
This commit is contained in:
parent
273d80c4a0
commit
6c6e256cfb
4 changed files with 38 additions and 30 deletions
|
|
@ -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 {
|
||||||
@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;
|
||||||
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 {
|
||||||
@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 {
|
||||||
// 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 {
|
||||||
|
|
||||||
@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 {
|
||||||
|
|
||||||
@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 {
|
||||||
|
|
||||||
@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 {
|
||||||
|
|
||||||
@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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
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(
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue