Commit 6dc6f79f by olly Committed by Oliver Woodman

Remove redundant state from TrackSelectorResult

A renderer configuration being null is equivalent to the
renderer being disabled. Remove the redundant state.

Issue: #3915

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=192126015
parent c54b195a
...@@ -92,10 +92,9 @@ import java.util.concurrent.CopyOnWriteArraySet; ...@@ -92,10 +92,9 @@ import java.util.concurrent.CopyOnWriteArraySet;
this.listeners = new CopyOnWriteArraySet<>(); this.listeners = new CopyOnWriteArraySet<>();
emptyTrackSelectorResult = emptyTrackSelectorResult =
new TrackSelectorResult( new TrackSelectorResult(
new boolean[renderers.length], new RendererConfiguration[renderers.length],
new TrackSelectionArray(new TrackSelection[renderers.length]), new TrackSelection[renderers.length],
null, null);
new RendererConfiguration[renderers.length]);
window = new Timeline.Window(); window = new Timeline.Window();
period = new Timeline.Period(); period = new Timeline.Period();
playbackParameters = PlaybackParameters.DEFAULT; playbackParameters = PlaybackParameters.DEFAULT;
......
...@@ -1438,7 +1438,7 @@ import java.util.Collections; ...@@ -1438,7 +1438,7 @@ import java.util.Collections;
readingPeriodHolder.mediaPeriod.readDiscontinuity() != C.TIME_UNSET; readingPeriodHolder.mediaPeriod.readDiscontinuity() != C.TIME_UNSET;
for (int i = 0; i < renderers.length; i++) { for (int i = 0; i < renderers.length; i++) {
Renderer renderer = renderers[i]; Renderer renderer = renderers[i];
boolean rendererWasEnabled = oldTrackSelectorResult.renderersEnabled[i]; boolean rendererWasEnabled = oldTrackSelectorResult.isRendererEnabled(i);
if (!rendererWasEnabled) { if (!rendererWasEnabled) {
// The renderer was disabled and will be enabled when we play the next period. // The renderer was disabled and will be enabled when we play the next period.
} else if (initialDiscontinuity) { } else if (initialDiscontinuity) {
...@@ -1447,7 +1447,7 @@ import java.util.Collections; ...@@ -1447,7 +1447,7 @@ import java.util.Collections;
renderer.setCurrentStreamFinal(); renderer.setCurrentStreamFinal();
} else if (!renderer.isCurrentStreamFinal()) { } else if (!renderer.isCurrentStreamFinal()) {
TrackSelection newSelection = newTrackSelectorResult.selections.get(i); TrackSelection newSelection = newTrackSelectorResult.selections.get(i);
boolean newRendererEnabled = newTrackSelectorResult.renderersEnabled[i]; boolean newRendererEnabled = newTrackSelectorResult.isRendererEnabled(i);
boolean isNoSampleRenderer = rendererCapabilities[i].getTrackType() == C.TRACK_TYPE_NONE; boolean isNoSampleRenderer = rendererCapabilities[i].getTrackType() == C.TRACK_TYPE_NONE;
RendererConfiguration oldConfig = oldTrackSelectorResult.rendererConfigurations[i]; RendererConfiguration oldConfig = oldTrackSelectorResult.rendererConfigurations[i];
RendererConfiguration newConfig = newTrackSelectorResult.rendererConfigurations[i]; RendererConfiguration newConfig = newTrackSelectorResult.rendererConfigurations[i];
...@@ -1551,11 +1551,11 @@ import java.util.Collections; ...@@ -1551,11 +1551,11 @@ import java.util.Collections;
for (int i = 0; i < renderers.length; i++) { for (int i = 0; i < renderers.length; i++) {
Renderer renderer = renderers[i]; Renderer renderer = renderers[i];
rendererWasEnabledFlags[i] = renderer.getState() != Renderer.STATE_DISABLED; rendererWasEnabledFlags[i] = renderer.getState() != Renderer.STATE_DISABLED;
if (newPlayingPeriodHolder.trackSelectorResult.renderersEnabled[i]) { if (newPlayingPeriodHolder.trackSelectorResult.isRendererEnabled(i)) {
enabledRendererCount++; enabledRendererCount++;
} }
if (rendererWasEnabledFlags[i] if (rendererWasEnabledFlags[i]
&& (!newPlayingPeriodHolder.trackSelectorResult.renderersEnabled[i] && (!newPlayingPeriodHolder.trackSelectorResult.isRendererEnabled(i)
|| (renderer.isCurrentStreamFinal() || (renderer.isCurrentStreamFinal()
&& renderer.getStream() == oldPlayingPeriodHolder.sampleStreams[i]))) { && renderer.getStream() == oldPlayingPeriodHolder.sampleStreams[i]))) {
// The renderer should be disabled before playing the next period, either because it's not // The renderer should be disabled before playing the next period, either because it's not
...@@ -1576,7 +1576,7 @@ import java.util.Collections; ...@@ -1576,7 +1576,7 @@ import java.util.Collections;
int enabledRendererCount = 0; int enabledRendererCount = 0;
MediaPeriodHolder playingPeriodHolder = queue.getPlayingPeriod(); MediaPeriodHolder playingPeriodHolder = queue.getPlayingPeriod();
for (int i = 0; i < renderers.length; i++) { for (int i = 0; i < renderers.length; i++) {
if (playingPeriodHolder.trackSelectorResult.renderersEnabled[i]) { if (playingPeriodHolder.trackSelectorResult.isRendererEnabled(i)) {
enableRenderer(i, rendererWasEnabledFlags[i], enabledRendererCount++); enableRenderer(i, rendererWasEnabledFlags[i], enabledRendererCount++);
} }
} }
......
...@@ -179,8 +179,7 @@ import com.google.android.exoplayer2.util.Assertions; ...@@ -179,8 +179,7 @@ import com.google.android.exoplayer2.util.Assertions;
public long applyTrackSelection( public long applyTrackSelection(
long positionUs, boolean forceRecreateStreams, boolean[] streamResetFlags) { long positionUs, boolean forceRecreateStreams, boolean[] streamResetFlags) {
TrackSelectionArray trackSelections = trackSelectorResult.selections; for (int i = 0; i < trackSelectorResult.length; i++) {
for (int i = 0; i < trackSelections.length; i++) {
mayRetainStreamFlags[i] = mayRetainStreamFlags[i] =
!forceRecreateStreams && trackSelectorResult.isEquivalent(periodTrackSelectorResult, i); !forceRecreateStreams && trackSelectorResult.isEquivalent(periodTrackSelectorResult, i);
} }
...@@ -190,6 +189,7 @@ import com.google.android.exoplayer2.util.Assertions; ...@@ -190,6 +189,7 @@ import com.google.android.exoplayer2.util.Assertions;
disassociateNoSampleRenderersWithEmptySampleStream(sampleStreams); disassociateNoSampleRenderersWithEmptySampleStream(sampleStreams);
updatePeriodTrackSelectorResult(trackSelectorResult); updatePeriodTrackSelectorResult(trackSelectorResult);
// Disable streams on the period and get new streams for updated/newly-enabled tracks. // Disable streams on the period and get new streams for updated/newly-enabled tracks.
TrackSelectionArray trackSelections = trackSelectorResult.selections;
positionUs = positionUs =
mediaPeriod.selectTracks( mediaPeriod.selectTracks(
trackSelections.getAll(), trackSelections.getAll(),
...@@ -203,7 +203,7 @@ import com.google.android.exoplayer2.util.Assertions; ...@@ -203,7 +203,7 @@ import com.google.android.exoplayer2.util.Assertions;
hasEnabledTracks = false; hasEnabledTracks = false;
for (int i = 0; i < sampleStreams.length; i++) { for (int i = 0; i < sampleStreams.length; i++) {
if (sampleStreams[i] != null) { if (sampleStreams[i] != null) {
Assertions.checkState(trackSelectorResult.renderersEnabled[i]); Assertions.checkState(trackSelectorResult.isRendererEnabled(i));
// hasEnabledTracks should be true only when non-empty streams exists. // hasEnabledTracks should be true only when non-empty streams exists.
if (rendererCapabilities[i].getTrackType() != C.TRACK_TYPE_NONE) { if (rendererCapabilities[i].getTrackType() != C.TRACK_TYPE_NONE) {
hasEnabledTracks = true; hasEnabledTracks = true;
...@@ -240,8 +240,8 @@ import com.google.android.exoplayer2.util.Assertions; ...@@ -240,8 +240,8 @@ import com.google.android.exoplayer2.util.Assertions;
} }
private void enableTrackSelectionsInResult(TrackSelectorResult trackSelectorResult) { private void enableTrackSelectionsInResult(TrackSelectorResult trackSelectorResult) {
for (int i = 0; i < trackSelectorResult.renderersEnabled.length; i++) { for (int i = 0; i < trackSelectorResult.length; i++) {
boolean rendererEnabled = trackSelectorResult.renderersEnabled[i]; boolean rendererEnabled = trackSelectorResult.isRendererEnabled(i);
TrackSelection trackSelection = trackSelectorResult.selections.get(i); TrackSelection trackSelection = trackSelectorResult.selections.get(i);
if (rendererEnabled && trackSelection != null) { if (rendererEnabled && trackSelection != null) {
trackSelection.enable(); trackSelection.enable();
...@@ -250,8 +250,8 @@ import com.google.android.exoplayer2.util.Assertions; ...@@ -250,8 +250,8 @@ import com.google.android.exoplayer2.util.Assertions;
} }
private void disableTrackSelectionsInResult(TrackSelectorResult trackSelectorResult) { private void disableTrackSelectionsInResult(TrackSelectorResult trackSelectorResult) {
for (int i = 0; i < trackSelectorResult.renderersEnabled.length; i++) { for (int i = 0; i < trackSelectorResult.length; i++) {
boolean rendererEnabled = trackSelectorResult.renderersEnabled[i]; boolean rendererEnabled = trackSelectorResult.isRendererEnabled(i);
TrackSelection trackSelection = trackSelectorResult.selections.get(i); TrackSelection trackSelection = trackSelectorResult.selections.get(i);
if (rendererEnabled && trackSelection != null) { if (rendererEnabled && trackSelection != null) {
trackSelection.disable(); trackSelection.disable();
...@@ -278,7 +278,7 @@ import com.google.android.exoplayer2.util.Assertions; ...@@ -278,7 +278,7 @@ import com.google.android.exoplayer2.util.Assertions;
private void associateNoSampleRenderersWithEmptySampleStream(SampleStream[] sampleStreams) { private void associateNoSampleRenderersWithEmptySampleStream(SampleStream[] sampleStreams) {
for (int i = 0; i < rendererCapabilities.length; i++) { for (int i = 0; i < rendererCapabilities.length; i++) {
if (rendererCapabilities[i].getTrackType() == C.TRACK_TYPE_NONE if (rendererCapabilities[i].getTrackType() == C.TRACK_TYPE_NONE
&& trackSelectorResult.renderersEnabled[i]) { && trackSelectorResult.isRendererEnabled(i)) {
sampleStreams[i] = new EmptySampleStream(); sampleStreams[i] = new EmptySampleStream();
} }
} }
......
...@@ -597,11 +597,7 @@ public abstract class MappingTrackSelector extends TrackSelector { ...@@ -597,11 +597,7 @@ public abstract class MappingTrackSelector extends TrackSelector {
maybeConfigureRenderersForTunneling(rendererCapabilities, rendererTrackGroupArrays, maybeConfigureRenderersForTunneling(rendererCapabilities, rendererTrackGroupArrays,
rendererFormatSupports, rendererConfigurations, trackSelections, tunnelingAudioSessionId); rendererFormatSupports, rendererConfigurations, trackSelections, tunnelingAudioSessionId);
return new TrackSelectorResult( return new TrackSelectorResult(rendererConfigurations, trackSelections, mappedTrackInfo);
rendererEnabled,
new TrackSelectionArray(trackSelections),
mappedTrackInfo,
rendererConfigurations);
} }
private boolean[] determineEnabledRenderers(RendererCapabilities[] rendererCapabilities, private boolean[] determineEnabledRenderers(RendererCapabilities[] rendererCapabilities,
......
...@@ -17,14 +17,10 @@ package com.google.android.exoplayer2.trackselection; ...@@ -17,14 +17,10 @@ package com.google.android.exoplayer2.trackselection;
import java.util.Arrays; import java.util.Arrays;
/** /** An array of {@link TrackSelection}s. */
* The result of a {@link TrackSelector} operation.
*/
public final class TrackSelectionArray { public final class TrackSelectionArray {
/** /** The length of this array. */
* The number of selections in the result. Greater than or equal to zero.
*/
public final int length; public final int length;
private final TrackSelection[] trackSelections; private final TrackSelection[] trackSelections;
......
...@@ -23,10 +23,13 @@ import com.google.android.exoplayer2.util.Util; ...@@ -23,10 +23,13 @@ import com.google.android.exoplayer2.util.Util;
*/ */
public final class TrackSelectorResult { public final class TrackSelectorResult {
/** The number of selections in the result. Greater than or equal to zero. */
public final int length;
/** /**
* An array containing whether each renderer is enabled after the track selection operation. * A {@link RendererConfiguration} for each renderer. A null entry indicates the corresponding
* renderer should be disabled.
*/ */
public final boolean[] renderersEnabled; public final RendererConfiguration[] rendererConfigurations;
/** /**
* A {@link TrackSelectionArray} containing the track selection for each renderer. * A {@link TrackSelectionArray} containing the track selection for each renderer.
*/ */
...@@ -36,29 +39,25 @@ public final class TrackSelectorResult { ...@@ -36,29 +39,25 @@ public final class TrackSelectorResult {
* should the selections be activated. * should the selections be activated.
*/ */
public final Object info; public final Object info;
/**
* A {@link RendererConfiguration} for each enabled renderer, to be used with the selections.
*/
public final RendererConfiguration[] rendererConfigurations;
/** /**
* @param renderersEnabled An array containing whether each renderer is enabled after the track * @param rendererConfigurations A {@link RendererConfiguration} for each renderer. A null entry
* selection operation. * indicates the corresponding renderer should be disabled.
* @param selections A {@link TrackSelectionArray} containing the selection for each renderer. * @param selections A {@link TrackSelectionArray} containing the selection for each renderer.
* @param info An opaque object that will be returned to {@link * @param info An opaque object that will be returned to {@link
* TrackSelector#onSelectionActivated(Object)} should the selection be activated. * TrackSelector#onSelectionActivated(Object)} should the selection be activated.
* @param rendererConfigurations A {@link RendererConfiguration} for each enabled renderer, to be
* used with the selections.
*/ */
public TrackSelectorResult( public TrackSelectorResult(
boolean[] renderersEnabled, RendererConfiguration[] rendererConfigurations, TrackSelection[] selections, Object info) {
TrackSelectionArray selections,
Object info,
RendererConfiguration[] rendererConfigurations) {
this.renderersEnabled = renderersEnabled;
this.selections = selections;
this.info = info;
this.rendererConfigurations = rendererConfigurations; this.rendererConfigurations = rendererConfigurations;
this.selections = new TrackSelectionArray(selections);
this.info = info;
length = rendererConfigurations.length;
}
/** Returns whether the renderer at the specified index is enabled. */
public boolean isRendererEnabled(int index) {
return rendererConfigurations[index] != null;
} }
/** /**
...@@ -95,9 +94,8 @@ public final class TrackSelectorResult { ...@@ -95,9 +94,8 @@ public final class TrackSelectorResult {
if (other == null) { if (other == null) {
return false; return false;
} }
return renderersEnabled[index] == other.renderersEnabled[index] return Util.areEqual(rendererConfigurations[index], other.rendererConfigurations[index])
&& Util.areEqual(selections.get(index), other.selections.get(index)) && Util.areEqual(selections.get(index), other.selections.get(index));
&& Util.areEqual(rendererConfigurations[index], other.rendererConfigurations[index]);
} }
} }
...@@ -121,11 +121,9 @@ public final class MappingTrackSelectorTest { ...@@ -121,11 +121,9 @@ public final class MappingTrackSelectorTest {
FakeMappingTrackSelector trackSelector = new FakeMappingTrackSelector( FakeMappingTrackSelector trackSelector = new FakeMappingTrackSelector(
TRACK_SELECTIONS); TRACK_SELECTIONS);
TrackSelectorResult result = trackSelector.selectTracks(RENDERER_CAPABILITIES, TRACK_GROUPS); TrackSelectorResult result = trackSelector.selectTracks(RENDERER_CAPABILITIES, TRACK_GROUPS);
assertThat(result.selections.get(0)).isEqualTo(TRACK_SELECTIONS[0]); assertTrackSelections(result, TRACK_SELECTIONS);
assertThat(result.selections.get(1)).isEqualTo(TRACK_SELECTIONS[1]); assertThat(result.rendererConfigurations)
assertThat(new boolean[] {true, true}).isEqualTo(result.renderersEnabled); .isEqualTo(new RendererConfiguration[] {DEFAULT, DEFAULT});
assertThat(new RendererConfiguration[] {DEFAULT, DEFAULT})
.isEqualTo(result.rendererConfigurations);
} }
/** /**
...@@ -137,11 +135,9 @@ public final class MappingTrackSelectorTest { ...@@ -137,11 +135,9 @@ public final class MappingTrackSelectorTest {
TRACK_SELECTIONS); TRACK_SELECTIONS);
trackSelector.setSelectionOverride(0, new TrackGroupArray(VIDEO_TRACK_GROUP), null); trackSelector.setSelectionOverride(0, new TrackGroupArray(VIDEO_TRACK_GROUP), null);
TrackSelectorResult result = trackSelector.selectTracks(RENDERER_CAPABILITIES, TRACK_GROUPS); TrackSelectorResult result = trackSelector.selectTracks(RENDERER_CAPABILITIES, TRACK_GROUPS);
assertThat(result.selections.get(0)).isNull(); assertTrackSelections(result, new TrackSelection[] {null, TRACK_SELECTIONS[1]});
assertThat(result.selections.get(1)).isEqualTo(TRACK_SELECTIONS[1]); assertThat(result.rendererConfigurations)
assertThat(new boolean[] {false, true}).isEqualTo(result.renderersEnabled); .isEqualTo(new RendererConfiguration[] {null, DEFAULT});
assertThat(new RendererConfiguration[] {null, DEFAULT})
.isEqualTo(result.rendererConfigurations);
} }
/** /**
...@@ -154,11 +150,9 @@ public final class MappingTrackSelectorTest { ...@@ -154,11 +150,9 @@ public final class MappingTrackSelectorTest {
trackSelector.setSelectionOverride(0, new TrackGroupArray(VIDEO_TRACK_GROUP), null); trackSelector.setSelectionOverride(0, new TrackGroupArray(VIDEO_TRACK_GROUP), null);
trackSelector.clearSelectionOverride(0, new TrackGroupArray(VIDEO_TRACK_GROUP)); trackSelector.clearSelectionOverride(0, new TrackGroupArray(VIDEO_TRACK_GROUP));
TrackSelectorResult result = trackSelector.selectTracks(RENDERER_CAPABILITIES, TRACK_GROUPS); TrackSelectorResult result = trackSelector.selectTracks(RENDERER_CAPABILITIES, TRACK_GROUPS);
assertThat(result.selections.get(0)).isEqualTo(TRACK_SELECTIONS[0]); assertTrackSelections(result, TRACK_SELECTIONS);
assertThat(result.selections.get(1)).isEqualTo(TRACK_SELECTIONS[1]); assertThat(result.rendererConfigurations)
assertThat(new boolean[] {true, true}).isEqualTo(result.renderersEnabled); .isEqualTo(new RendererConfiguration[] {DEFAULT, DEFAULT});
assertThat(new RendererConfiguration[] {DEFAULT, DEFAULT})
.isEqualTo(result.rendererConfigurations);
} }
/** /**
...@@ -171,11 +165,9 @@ public final class MappingTrackSelectorTest { ...@@ -171,11 +165,9 @@ public final class MappingTrackSelectorTest {
trackSelector.setSelectionOverride(0, new TrackGroupArray(VIDEO_TRACK_GROUP), null); trackSelector.setSelectionOverride(0, new TrackGroupArray(VIDEO_TRACK_GROUP), null);
TrackSelectorResult result = trackSelector.selectTracks(RENDERER_CAPABILITIES, TrackSelectorResult result = trackSelector.selectTracks(RENDERER_CAPABILITIES,
new TrackGroupArray(VIDEO_TRACK_GROUP, AUDIO_TRACK_GROUP, VIDEO_TRACK_GROUP)); new TrackGroupArray(VIDEO_TRACK_GROUP, AUDIO_TRACK_GROUP, VIDEO_TRACK_GROUP));
assertThat(result.selections.get(0)).isEqualTo(TRACK_SELECTIONS[0]); assertTrackSelections(result, TRACK_SELECTIONS);
assertThat(result.selections.get(1)).isEqualTo(TRACK_SELECTIONS[1]); assertThat(result.rendererConfigurations)
assertThat(new boolean[] {true, true}).isEqualTo(result.renderersEnabled); .isEqualTo(new RendererConfiguration[] {DEFAULT, DEFAULT});
assertThat(new RendererConfiguration[] {DEFAULT, DEFAULT})
.isEqualTo(result.rendererConfigurations);
} }
/** /**
...@@ -186,16 +178,13 @@ public final class MappingTrackSelectorTest { ...@@ -186,16 +178,13 @@ public final class MappingTrackSelectorTest {
*/ */
@Test @Test
public void testSelectTracksWithNoSampleRenderer() throws ExoPlaybackException { public void testSelectTracksWithNoSampleRenderer() throws ExoPlaybackException {
TrackSelection[] expectedTrackSelection = TRACK_SELECTIONS_WITH_NO_SAMPLE_RENDERER; FakeMappingTrackSelector trackSelector =
FakeMappingTrackSelector trackSelector = new FakeMappingTrackSelector(expectedTrackSelection); new FakeMappingTrackSelector(TRACK_SELECTIONS_WITH_NO_SAMPLE_RENDERER);
TrackSelectorResult result = trackSelector.selectTracks( TrackSelectorResult result = trackSelector.selectTracks(
RENDERER_CAPABILITIES_WITH_NO_SAMPLE_RENDERER, TRACK_GROUPS); RENDERER_CAPABILITIES_WITH_NO_SAMPLE_RENDERER, TRACK_GROUPS);
assertThat(result.selections.get(0)).isEqualTo(expectedTrackSelection[0]); assertTrackSelections(result, TRACK_SELECTIONS_WITH_NO_SAMPLE_RENDERER);
assertThat(result.selections.get(1)).isEqualTo(expectedTrackSelection[1]); assertThat(result.rendererConfigurations)
assertThat(result.selections.get(2)).isNull(); .isEqualTo(new RendererConfiguration[] {DEFAULT, DEFAULT, DEFAULT});
assertThat(new boolean[] {true, true, true}).isEqualTo(result.renderersEnabled);
assertThat(new RendererConfiguration[] {DEFAULT, DEFAULT, DEFAULT})
.isEqualTo(result.rendererConfigurations);
} }
/** /**
...@@ -211,9 +200,8 @@ public final class MappingTrackSelectorTest { ...@@ -211,9 +200,8 @@ public final class MappingTrackSelectorTest {
assertThat(result.selections.get(0)).isNull(); assertThat(result.selections.get(0)).isNull();
assertThat(result.selections.get(1)).isEqualTo(expectedTrackSelection[1]); assertThat(result.selections.get(1)).isEqualTo(expectedTrackSelection[1]);
assertThat(result.selections.get(2)).isNull(); assertThat(result.selections.get(2)).isNull();
assertThat(new boolean[] {false, true, true}).isEqualTo(result.renderersEnabled); assertThat(result.rendererConfigurations)
assertThat(new RendererConfiguration[] {null, DEFAULT, DEFAULT}) .isEqualTo(new RendererConfiguration[] {null, DEFAULT, DEFAULT});
.isEqualTo(result.rendererConfigurations);
} }
/** /**
...@@ -222,18 +210,15 @@ public final class MappingTrackSelectorTest { ...@@ -222,18 +210,15 @@ public final class MappingTrackSelectorTest {
@Test @Test
public void testSelectTracksWithNoSampleRendererWithClearedNullOverride() public void testSelectTracksWithNoSampleRendererWithClearedNullOverride()
throws ExoPlaybackException { throws ExoPlaybackException {
TrackSelection[] expectedTrackSelection = TRACK_SELECTIONS_WITH_NO_SAMPLE_RENDERER; FakeMappingTrackSelector trackSelector =
FakeMappingTrackSelector trackSelector = new FakeMappingTrackSelector(expectedTrackSelection); new FakeMappingTrackSelector(TRACK_SELECTIONS_WITH_NO_SAMPLE_RENDERER);
trackSelector.setSelectionOverride(0, new TrackGroupArray(VIDEO_TRACK_GROUP), null); trackSelector.setSelectionOverride(0, new TrackGroupArray(VIDEO_TRACK_GROUP), null);
trackSelector.clearSelectionOverride(0, new TrackGroupArray(VIDEO_TRACK_GROUP)); trackSelector.clearSelectionOverride(0, new TrackGroupArray(VIDEO_TRACK_GROUP));
TrackSelectorResult result = trackSelector.selectTracks( TrackSelectorResult result = trackSelector.selectTracks(
RENDERER_CAPABILITIES_WITH_NO_SAMPLE_RENDERER, TRACK_GROUPS); RENDERER_CAPABILITIES_WITH_NO_SAMPLE_RENDERER, TRACK_GROUPS);
assertThat(result.selections.get(0)).isEqualTo(expectedTrackSelection[0]); assertTrackSelections(result, TRACK_SELECTIONS_WITH_NO_SAMPLE_RENDERER);
assertThat(result.selections.get(1)).isEqualTo(expectedTrackSelection[1]); assertThat(result.rendererConfigurations)
assertThat(result.selections.get(2)).isNull(); .isEqualTo(new RendererConfiguration[] {DEFAULT, DEFAULT, DEFAULT});
assertThat(new boolean[] {true, true, true}).isEqualTo(result.renderersEnabled);
assertThat(new RendererConfiguration[] {DEFAULT, DEFAULT, DEFAULT})
.isEqualTo(result.rendererConfigurations);
} }
/** /**
...@@ -249,12 +234,9 @@ public final class MappingTrackSelectorTest { ...@@ -249,12 +234,9 @@ public final class MappingTrackSelectorTest {
TrackSelectorResult result = trackSelector.selectTracks( TrackSelectorResult result = trackSelector.selectTracks(
RENDERER_CAPABILITIES_WITH_NO_SAMPLE_RENDERER, RENDERER_CAPABILITIES_WITH_NO_SAMPLE_RENDERER,
new TrackGroupArray(VIDEO_TRACK_GROUP, AUDIO_TRACK_GROUP, VIDEO_TRACK_GROUP)); new TrackGroupArray(VIDEO_TRACK_GROUP, AUDIO_TRACK_GROUP, VIDEO_TRACK_GROUP));
assertThat(result.selections.get(0)).isEqualTo(expectedTrackSelection[0]); assertTrackSelections(result, TRACK_SELECTIONS_WITH_NO_SAMPLE_RENDERER);
assertThat(result.selections.get(1)).isEqualTo(expectedTrackSelection[1]); assertThat(result.rendererConfigurations)
assertThat(result.selections.get(2)).isNull(); .isEqualTo(new RendererConfiguration[] {DEFAULT, DEFAULT, DEFAULT});
assertThat(new boolean[] {true, true, true}).isEqualTo(result.renderersEnabled);
assertThat(new RendererConfiguration[] {DEFAULT, DEFAULT, DEFAULT})
.isEqualTo(result.rendererConfigurations);
} }
/** /**
...@@ -263,15 +245,13 @@ public final class MappingTrackSelectorTest { ...@@ -263,15 +245,13 @@ public final class MappingTrackSelectorTest {
@Test @Test
public void testSelectTracksDisablingNormalRendererWithNoSampleRenderer() public void testSelectTracksDisablingNormalRendererWithNoSampleRenderer()
throws ExoPlaybackException { throws ExoPlaybackException {
TrackSelection[] expectedTrackSelection = TRACK_SELECTIONS_WITH_NO_SAMPLE_RENDERER; FakeMappingTrackSelector trackSelector =
FakeMappingTrackSelector trackSelector = new FakeMappingTrackSelector(expectedTrackSelection); new FakeMappingTrackSelector(TRACK_SELECTIONS_WITH_NO_SAMPLE_RENDERER);
trackSelector.setRendererDisabled(0, true); trackSelector.setRendererDisabled(0, true);
TrackSelectorResult result = trackSelector.selectTracks( TrackSelectorResult result = trackSelector.selectTracks(
RENDERER_CAPABILITIES_WITH_NO_SAMPLE_RENDERER, TRACK_GROUPS); RENDERER_CAPABILITIES_WITH_NO_SAMPLE_RENDERER, TRACK_GROUPS);
assertThat(result.selections.get(0)).isNull(); assertTrackSelections(
assertThat(result.selections.get(1)).isEqualTo(expectedTrackSelection[1]); result, new TrackSelection[] {null, TRACK_SELECTIONS_WITH_NO_SAMPLE_RENDERER[1], null});
assertThat(result.selections.get(2)).isNull();
assertThat(new boolean[] {false, true, true}).isEqualTo(result.renderersEnabled);
assertThat(new RendererConfiguration[] {null, DEFAULT, DEFAULT}) assertThat(new RendererConfiguration[] {null, DEFAULT, DEFAULT})
.isEqualTo(result.rendererConfigurations); .isEqualTo(result.rendererConfigurations);
} }
...@@ -290,11 +270,17 @@ public final class MappingTrackSelectorTest { ...@@ -290,11 +270,17 @@ public final class MappingTrackSelectorTest {
assertThat(result.selections.get(0)).isEqualTo(expectedTrackSelection[0]); assertThat(result.selections.get(0)).isEqualTo(expectedTrackSelection[0]);
assertThat(result.selections.get(1)).isEqualTo(expectedTrackSelection[1]); assertThat(result.selections.get(1)).isEqualTo(expectedTrackSelection[1]);
assertThat(result.selections.get(2)).isNull(); assertThat(result.selections.get(2)).isNull();
assertThat(new boolean[] {true, true, false}).isEqualTo(result.renderersEnabled);
assertThat(new RendererConfiguration[] {DEFAULT, DEFAULT, null}) assertThat(new RendererConfiguration[] {DEFAULT, DEFAULT, null})
.isEqualTo(result.rendererConfigurations); .isEqualTo(result.rendererConfigurations);
} }
private static void assertTrackSelections(TrackSelectorResult result, TrackSelection[] expected) {
assertThat(result.length).isEqualTo(expected.length);
for (int i = 0; i < expected.length; i++) {
assertThat(result.selections.get(i)).isEqualTo(expected[i]);
}
}
/** /**
* A {@link MappingTrackSelector} that returns a fixed result from * A {@link MappingTrackSelector} that returns a fixed result from
* {@link #selectTracks(RendererCapabilities[], TrackGroupArray[], int[][][])}. * {@link #selectTracks(RendererCapabilities[], TrackGroupArray[], int[][][])}.
......
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