mirror of
https://github.com/samsonjs/media.git
synced 2026-03-26 09:35:47 +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_TRACKS = 1;
|
||||
|
||||
/** Constructs an instance to force all tracks in {@code trackGroup} to be selected. */
|
||||
public TrackSelectionOverride(TrackGroup trackGroup) {
|
||||
this.trackGroup = trackGroup;
|
||||
ImmutableList.Builder<Integer> 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<TrackSelectionOverride> 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));
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
Loading…
Reference in a new issue