Pass MediaPeriodId to TrackSelector.selectTracks()

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=214638939
This commit is contained in:
cblay 2018-09-26 11:31:44 -07:00 committed by Oliver Woodman
parent 776ad20a50
commit 3073d38a5a
7 changed files with 225 additions and 126 deletions

View File

@ -51,7 +51,7 @@ import java.util.concurrent.CopyOnWriteArraySet;
* This empty track selector result can only be used for {@link PlaybackInfo#trackSelectorResult} * This empty track selector result can only be used for {@link PlaybackInfo#trackSelectorResult}
* when the player does not have any track selection made (such as when player is reset, or when * when the player does not have any track selection made (such as when player is reset, or when
* player seeks to an unprepared period). It will not be used as result of any {@link * player seeks to an unprepared period). It will not be used as result of any {@link
* TrackSelector#selectTracks(RendererCapabilities[], TrackGroupArray)} operation. * TrackSelector#selectTracks(RendererCapabilities[], TrackGroupArray, MediaPeriodId)} operation.
*/ */
/* package */ final TrackSelectorResult emptyTrackSelectorResult; /* package */ final TrackSelectorResult emptyTrackSelectorResult;

View File

@ -162,7 +162,7 @@ import com.google.android.exoplayer2.util.Log;
public boolean selectTracks(float playbackSpeed) throws ExoPlaybackException { public boolean selectTracks(float playbackSpeed) throws ExoPlaybackException {
TrackSelectorResult selectorResult = TrackSelectorResult selectorResult =
trackSelector.selectTracks(rendererCapabilities, trackGroups); trackSelector.selectTracks(rendererCapabilities, trackGroups, info.id);
if (selectorResult.isEquivalent(periodTrackSelectorResult)) { if (selectorResult.isEquivalent(periodTrackSelectorResult)) {
return false; return false;
} }

View File

@ -23,6 +23,7 @@ import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.Renderer; import com.google.android.exoplayer2.Renderer;
import com.google.android.exoplayer2.RendererCapabilities; import com.google.android.exoplayer2.RendererCapabilities;
import com.google.android.exoplayer2.RendererConfiguration; import com.google.android.exoplayer2.RendererConfiguration;
import com.google.android.exoplayer2.source.MediaSource.MediaPeriodId;
import com.google.android.exoplayer2.source.TrackGroup; import com.google.android.exoplayer2.source.TrackGroup;
import com.google.android.exoplayer2.source.TrackGroupArray; import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.util.Util; import com.google.android.exoplayer2.util.Util;
@ -326,8 +327,11 @@ public abstract class MappingTrackSelector extends TrackSelector {
} }
@Override @Override
public final TrackSelectorResult selectTracks(RendererCapabilities[] rendererCapabilities, public final TrackSelectorResult selectTracks(
TrackGroupArray trackGroups) throws ExoPlaybackException { RendererCapabilities[] rendererCapabilities,
TrackGroupArray trackGroups,
MediaPeriodId periodId)
throws ExoPlaybackException {
// Structures into which data will be written during the selection. The extra item at the end // Structures into which data will be written during the selection. The extra item at the end
// of each array is to store data associated with track groups that cannot be associated with // of each array is to store data associated with track groups that cannot be associated with
// any renderer. // any renderer.

View File

@ -21,6 +21,7 @@ import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.Renderer; import com.google.android.exoplayer2.Renderer;
import com.google.android.exoplayer2.RendererCapabilities; import com.google.android.exoplayer2.RendererCapabilities;
import com.google.android.exoplayer2.RendererConfiguration; import com.google.android.exoplayer2.RendererConfiguration;
import com.google.android.exoplayer2.source.MediaSource.MediaPeriodId;
import com.google.android.exoplayer2.source.TrackGroupArray; import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.upstream.BandwidthMeter; import com.google.android.exoplayer2.upstream.BandwidthMeter;
import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Assertions;
@ -40,9 +41,9 @@ import com.google.android.exoplayer2.util.Assertions;
* <li>When the player is created it will initialize the track selector by calling {@link * <li>When the player is created it will initialize the track selector by calling {@link
* #init(InvalidationListener, BandwidthMeter)}. * #init(InvalidationListener, BandwidthMeter)}.
* <li>When the player needs to make a track selection it will call {@link * <li>When the player needs to make a track selection it will call {@link
* #selectTracks(RendererCapabilities[], TrackGroupArray)}. This typically occurs at the start * #selectTracks(RendererCapabilities[], TrackGroupArray, MediaPeriodId)}. This typically
* of playback, when the player starts to buffer a new period of the media being played, and * occurs at the start of playback, when the player starts to buffer a new period of the media
* when the track selector invalidates its previous selections. * being played, and when the track selector invalidates its previous selections.
* <li>The player may perform a track selection well in advance of the selected tracks becoming * <li>The player may perform a track selection well in advance of the selected tracks becoming
* active, where active is defined to mean that the renderers are actually consuming media * active, where active is defined to mean that the renderers are actually consuming media
* corresponding to the selection that was made. For example when playing media containing * corresponding to the selection that was made. For example when playing media containing
@ -66,14 +67,14 @@ import com.google.android.exoplayer2.util.Assertions;
* <h3>Renderer configuration</h3> * <h3>Renderer configuration</h3>
* *
* The {@link TrackSelectorResult} returned by {@link #selectTracks(RendererCapabilities[], * The {@link TrackSelectorResult} returned by {@link #selectTracks(RendererCapabilities[],
* TrackGroupArray)} contains not only {@link TrackSelection}s for each renderer, but also {@link * TrackGroupArray, MediaPeriodId)} contains not only {@link TrackSelection}s for each renderer, but
* RendererConfiguration}s defining configuration parameters that the renderers should apply when * also {@link RendererConfiguration}s defining configuration parameters that the renderers should
* consuming the corresponding media. Whilst it may seem counter-intuitive for a track selector to * apply when consuming the corresponding media. Whilst it may seem counter-intuitive for a track
* also specify renderer configuration information, in practice the two are tightly bound together. * selector to also specify renderer configuration information, in practice the two are tightly
* It may only be possible to play a certain combination tracks if the renderers are configured in a * bound together. It may only be possible to play a certain combination tracks if the renderers are
* particular way. Equally, it may only be possible to configure renderers in a particular way if * configured in a particular way. Equally, it may only be possible to configure renderers in a
* certain tracks are selected. Hence it makes sense to determined the track selection and * particular way if certain tracks are selected. Hence it makes sense to determined the track
* corresponding renderer configurations in a single step. * selection and corresponding renderer configurations in a single step.
* *
* <h3>Threading model</h3> * <h3>Threading model</h3>
* *
@ -117,15 +118,19 @@ public abstract class TrackSelector {
* @param rendererCapabilities The {@link RendererCapabilities} of the renderers for which tracks * @param rendererCapabilities The {@link RendererCapabilities} of the renderers for which tracks
* are to be selected. * are to be selected.
* @param trackGroups The available track groups. * @param trackGroups The available track groups.
* @param periodId The {@link MediaPeriodId} of the period for which tracks are to be selected.
* @return A {@link TrackSelectorResult} describing the track selections. * @return A {@link TrackSelectorResult} describing the track selections.
* @throws ExoPlaybackException If an error occurs selecting tracks. * @throws ExoPlaybackException If an error occurs selecting tracks.
*/ */
public abstract TrackSelectorResult selectTracks(RendererCapabilities[] rendererCapabilities, public abstract TrackSelectorResult selectTracks(
TrackGroupArray trackGroups) throws ExoPlaybackException; RendererCapabilities[] rendererCapabilities,
TrackGroupArray trackGroups,
MediaPeriodId periodId)
throws ExoPlaybackException;
/** /**
* Called by the player when a {@link TrackSelectorResult} previously generated by * Called by the player when a {@link TrackSelectorResult} previously generated by {@link
* {@link #selectTracks(RendererCapabilities[], TrackGroupArray)} is activated. * #selectTracks(RendererCapabilities[], TrackGroupArray, MediaPeriodId)} is activated.
* *
* @param info The value of {@link TrackSelectorResult#info} in the activated selection. * @param info The value of {@link TrackSelectorResult#info} in the activated selection.
*/ */

View File

@ -37,6 +37,7 @@ import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.RendererCapabilities; import com.google.android.exoplayer2.RendererCapabilities;
import com.google.android.exoplayer2.RendererConfiguration; import com.google.android.exoplayer2.RendererConfiguration;
import com.google.android.exoplayer2.source.MediaSource.MediaPeriodId;
import com.google.android.exoplayer2.source.TrackGroup; import com.google.android.exoplayer2.source.TrackGroup;
import com.google.android.exoplayer2.source.TrackGroupArray; import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters; import com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters;
@ -90,6 +91,7 @@ public final class DefaultTrackSelectorTest {
}; };
private static final TrackSelection[] TRACK_SELECTIONS_WITH_NO_SAMPLE_RENDERER = private static final TrackSelection[] TRACK_SELECTIONS_WITH_NO_SAMPLE_RENDERER =
new TrackSelection[] {new FixedTrackSelection(VIDEO_TRACK_GROUP, 0), null}; new TrackSelection[] {new FixedTrackSelection(VIDEO_TRACK_GROUP, 0), null};
private static final MediaPeriodId PERIOD_ID = new MediaPeriodId(/* periodUid= */ new Object());
@Mock @Mock
private InvalidationListener invalidationListener; private InvalidationListener invalidationListener;
@ -176,7 +178,8 @@ public final class DefaultTrackSelectorTest {
trackSelector trackSelector
.buildUponParameters() .buildUponParameters()
.setSelectionOverride(0, new TrackGroupArray(VIDEO_TRACK_GROUP), null)); .setSelectionOverride(0, new TrackGroupArray(VIDEO_TRACK_GROUP), null));
TrackSelectorResult result = trackSelector.selectTracks(RENDERER_CAPABILITIES, TRACK_GROUPS); TrackSelectorResult result =
trackSelector.selectTracks(RENDERER_CAPABILITIES, TRACK_GROUPS, PERIOD_ID);
assertTrackSelections(result, new TrackSelection[] {null, TRACK_SELECTIONS[1]}); assertTrackSelections(result, new TrackSelection[] {null, TRACK_SELECTIONS[1]});
assertThat(result.rendererConfigurations) assertThat(result.rendererConfigurations)
.isEqualTo(new RendererConfiguration[] {null, DEFAULT}); .isEqualTo(new RendererConfiguration[] {null, DEFAULT});
@ -192,7 +195,8 @@ public final class DefaultTrackSelectorTest {
.buildUponParameters() .buildUponParameters()
.setSelectionOverride(0, new TrackGroupArray(VIDEO_TRACK_GROUP), null) .setSelectionOverride(0, new TrackGroupArray(VIDEO_TRACK_GROUP), null)
.clearSelectionOverride(0, new TrackGroupArray(VIDEO_TRACK_GROUP))); .clearSelectionOverride(0, new TrackGroupArray(VIDEO_TRACK_GROUP)));
TrackSelectorResult result = trackSelector.selectTracks(RENDERER_CAPABILITIES, TRACK_GROUPS); TrackSelectorResult result =
trackSelector.selectTracks(RENDERER_CAPABILITIES, TRACK_GROUPS, PERIOD_ID);
assertTrackSelections(result, TRACK_SELECTIONS); assertTrackSelections(result, TRACK_SELECTIONS);
assertThat(result.rendererConfigurations) assertThat(result.rendererConfigurations)
.isEqualTo(new RendererConfiguration[] {DEFAULT, DEFAULT}); .isEqualTo(new RendererConfiguration[] {DEFAULT, DEFAULT});
@ -210,7 +214,8 @@ public final class DefaultTrackSelectorTest {
TrackSelectorResult result = TrackSelectorResult result =
trackSelector.selectTracks( trackSelector.selectTracks(
RENDERER_CAPABILITIES, RENDERER_CAPABILITIES,
new TrackGroupArray(VIDEO_TRACK_GROUP, AUDIO_TRACK_GROUP, VIDEO_TRACK_GROUP)); new TrackGroupArray(VIDEO_TRACK_GROUP, AUDIO_TRACK_GROUP, VIDEO_TRACK_GROUP),
PERIOD_ID);
assertTrackSelections(result, TRACK_SELECTIONS); assertTrackSelections(result, TRACK_SELECTIONS);
assertThat(result.rendererConfigurations) assertThat(result.rendererConfigurations)
.isEqualTo(new RendererConfiguration[] {DEFAULT, DEFAULT}); .isEqualTo(new RendererConfiguration[] {DEFAULT, DEFAULT});
@ -222,7 +227,8 @@ public final class DefaultTrackSelectorTest {
DefaultTrackSelector trackSelector = new DefaultTrackSelector(); DefaultTrackSelector trackSelector = new DefaultTrackSelector();
trackSelector.init(invalidationListener, bandwidthMeter); trackSelector.init(invalidationListener, bandwidthMeter);
trackSelector.setParameters(trackSelector.buildUponParameters().setRendererDisabled(1, true)); trackSelector.setParameters(trackSelector.buildUponParameters().setRendererDisabled(1, true));
TrackSelectorResult result = trackSelector.selectTracks(RENDERER_CAPABILITIES, TRACK_GROUPS); TrackSelectorResult result =
trackSelector.selectTracks(RENDERER_CAPABILITIES, TRACK_GROUPS, PERIOD_ID);
assertTrackSelections(result, new TrackSelection[] {TRACK_SELECTIONS[0], null}); assertTrackSelections(result, new TrackSelection[] {TRACK_SELECTIONS[0], null});
assertThat(new RendererConfiguration[] {DEFAULT, null}) assertThat(new RendererConfiguration[] {DEFAULT, null})
.isEqualTo(result.rendererConfigurations); .isEqualTo(result.rendererConfigurations);
@ -238,7 +244,8 @@ public final class DefaultTrackSelectorTest {
.buildUponParameters() .buildUponParameters()
.setRendererDisabled(1, true) .setRendererDisabled(1, true)
.setRendererDisabled(1, false)); .setRendererDisabled(1, false));
TrackSelectorResult result = trackSelector.selectTracks(RENDERER_CAPABILITIES, TRACK_GROUPS); TrackSelectorResult result =
trackSelector.selectTracks(RENDERER_CAPABILITIES, TRACK_GROUPS, PERIOD_ID);
assertTrackSelections(result, TRACK_SELECTIONS); assertTrackSelections(result, TRACK_SELECTIONS);
assertThat(new RendererConfiguration[] {DEFAULT, DEFAULT}) assertThat(new RendererConfiguration[] {DEFAULT, DEFAULT})
.isEqualTo(result.rendererConfigurations); .isEqualTo(result.rendererConfigurations);
@ -250,7 +257,8 @@ public final class DefaultTrackSelectorTest {
DefaultTrackSelector trackSelector = new DefaultTrackSelector(); DefaultTrackSelector trackSelector = new DefaultTrackSelector();
trackSelector.init(invalidationListener, bandwidthMeter); trackSelector.init(invalidationListener, bandwidthMeter);
TrackSelectorResult result = TrackSelectorResult result =
trackSelector.selectTracks(RENDERER_CAPABILITIES_WITH_NO_SAMPLE_RENDERER, TRACK_GROUPS); trackSelector.selectTracks(
RENDERER_CAPABILITIES_WITH_NO_SAMPLE_RENDERER, TRACK_GROUPS, PERIOD_ID);
assertTrackSelections(result, TRACK_SELECTIONS_WITH_NO_SAMPLE_RENDERER); assertTrackSelections(result, TRACK_SELECTIONS_WITH_NO_SAMPLE_RENDERER);
assertThat(new RendererConfiguration[] {DEFAULT, DEFAULT}) assertThat(new RendererConfiguration[] {DEFAULT, DEFAULT})
.isEqualTo(result.rendererConfigurations); .isEqualTo(result.rendererConfigurations);
@ -263,7 +271,8 @@ public final class DefaultTrackSelectorTest {
trackSelector.init(invalidationListener, bandwidthMeter); trackSelector.init(invalidationListener, bandwidthMeter);
trackSelector.setParameters(trackSelector.buildUponParameters().setRendererDisabled(1, true)); trackSelector.setParameters(trackSelector.buildUponParameters().setRendererDisabled(1, true));
TrackSelectorResult result = TrackSelectorResult result =
trackSelector.selectTracks(RENDERER_CAPABILITIES_WITH_NO_SAMPLE_RENDERER, TRACK_GROUPS); trackSelector.selectTracks(
RENDERER_CAPABILITIES_WITH_NO_SAMPLE_RENDERER, TRACK_GROUPS, PERIOD_ID);
assertTrackSelections(result, TRACK_SELECTIONS_WITH_NO_SAMPLE_RENDERER); assertTrackSelections(result, TRACK_SELECTIONS_WITH_NO_SAMPLE_RENDERER);
assertThat(new RendererConfiguration[] {DEFAULT, null}) assertThat(new RendererConfiguration[] {DEFAULT, null})
.isEqualTo(result.rendererConfigurations); .isEqualTo(result.rendererConfigurations);
@ -322,9 +331,11 @@ public final class DefaultTrackSelectorTest {
Format formatWithSelectionFlag = Format formatWithSelectionFlag =
buildAudioFormat("audio", /* language= */ null, C.SELECTION_FLAG_DEFAULT); buildAudioFormat("audio", /* language= */ null, C.SELECTION_FLAG_DEFAULT);
TrackSelectorResult result = trackSelector.selectTracks( TrackSelectorResult result =
new RendererCapabilities[] {ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES}, trackSelector.selectTracks(
singleTrackGroup(formatWithSelectionFlag, audioFormat)); new RendererCapabilities[] {ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES},
singleTrackGroup(formatWithSelectionFlag, audioFormat),
PERIOD_ID);
assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(formatWithSelectionFlag); assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(formatWithSelectionFlag);
} }
@ -347,7 +358,8 @@ public final class DefaultTrackSelectorTest {
TrackSelectorResult result = TrackSelectorResult result =
trackSelector.selectTracks( trackSelector.selectTracks(
new RendererCapabilities[] {ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES}, new RendererCapabilities[] {ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES},
wrapFormats(frAudioFormat, enAudioFormat)); wrapFormats(frAudioFormat, enAudioFormat),
PERIOD_ID);
assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(enAudioFormat); assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(enAudioFormat);
} }
@ -368,9 +380,11 @@ public final class DefaultTrackSelectorTest {
Format.createAudioSampleFormat("audio", MimeTypes.AUDIO_AAC, null, Format.NO_VALUE, Format.createAudioSampleFormat("audio", MimeTypes.AUDIO_AAC, null, Format.NO_VALUE,
Format.NO_VALUE, 2, 44100, null, null, 0, "eng"); Format.NO_VALUE, 2, 44100, null, null, 0, "eng");
TrackSelectorResult result = trackSelector.selectTracks( TrackSelectorResult result =
new RendererCapabilities[] {ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES}, trackSelector.selectTracks(
wrapFormats(frAudioFormat, enAudioFormat)); new RendererCapabilities[] {ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES},
wrapFormats(frAudioFormat, enAudioFormat),
PERIOD_ID);
assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(enAudioFormat); assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(enAudioFormat);
} }
@ -390,9 +404,11 @@ public final class DefaultTrackSelectorTest {
RendererCapabilities mappedAudioRendererCapabilities = RendererCapabilities mappedAudioRendererCapabilities =
new FakeMappedRendererCapabilities(C.TRACK_TYPE_AUDIO, mappedCapabilities); new FakeMappedRendererCapabilities(C.TRACK_TYPE_AUDIO, mappedCapabilities);
TrackSelectorResult result = trackSelector.selectTracks( TrackSelectorResult result =
new RendererCapabilities[] {mappedAudioRendererCapabilities}, trackSelector.selectTracks(
singleTrackGroup(exceededFormat, supportedFormat)); new RendererCapabilities[] {mappedAudioRendererCapabilities},
singleTrackGroup(exceededFormat, supportedFormat),
PERIOD_ID);
assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(supportedFormat); assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(supportedFormat);
} }
@ -407,9 +423,11 @@ public final class DefaultTrackSelectorTest {
Format audioFormat = Format audioFormat =
Format.createAudioSampleFormat("audio", MimeTypes.AUDIO_AAC, null, Format.NO_VALUE, Format.createAudioSampleFormat("audio", MimeTypes.AUDIO_AAC, null, Format.NO_VALUE,
Format.NO_VALUE, 2, 44100, null, null, 0, null); Format.NO_VALUE, 2, 44100, null, null, 0, null);
TrackSelectorResult result = trackSelector.selectTracks( TrackSelectorResult result =
new RendererCapabilities[] {ALL_AUDIO_FORMAT_EXCEEDED_RENDERER_CAPABILITIES}, trackSelector.selectTracks(
singleTrackGroup(audioFormat)); new RendererCapabilities[] {ALL_AUDIO_FORMAT_EXCEEDED_RENDERER_CAPABILITIES},
singleTrackGroup(audioFormat),
PERIOD_ID);
assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(audioFormat); assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(audioFormat);
} }
@ -428,9 +446,11 @@ public final class DefaultTrackSelectorTest {
Format audioFormat = Format audioFormat =
Format.createAudioSampleFormat("audio", MimeTypes.AUDIO_AAC, null, Format.NO_VALUE, Format.createAudioSampleFormat("audio", MimeTypes.AUDIO_AAC, null, Format.NO_VALUE,
Format.NO_VALUE, 2, 44100, null, null, 0, null); Format.NO_VALUE, 2, 44100, null, null, 0, null);
TrackSelectorResult result = trackSelector.selectTracks( TrackSelectorResult result =
new RendererCapabilities[] {ALL_AUDIO_FORMAT_EXCEEDED_RENDERER_CAPABILITIES}, trackSelector.selectTracks(
singleTrackGroup(audioFormat)); new RendererCapabilities[] {ALL_AUDIO_FORMAT_EXCEEDED_RENDERER_CAPABILITIES},
singleTrackGroup(audioFormat),
PERIOD_ID);
assertThat(result.selections.get(0)).isNull(); assertThat(result.selections.get(0)).isNull();
} }
@ -455,9 +475,11 @@ public final class DefaultTrackSelectorTest {
RendererCapabilities mappedAudioRendererCapabilities = RendererCapabilities mappedAudioRendererCapabilities =
new FakeMappedRendererCapabilities(C.TRACK_TYPE_AUDIO, mappedCapabilities); new FakeMappedRendererCapabilities(C.TRACK_TYPE_AUDIO, mappedCapabilities);
TrackSelectorResult result = trackSelector.selectTracks( TrackSelectorResult result =
new RendererCapabilities[] {mappedAudioRendererCapabilities}, trackSelector.selectTracks(
singleTrackGroup(exceededWithSelectionFlagFormat, supportedFormat)); new RendererCapabilities[] {mappedAudioRendererCapabilities},
singleTrackGroup(exceededWithSelectionFlagFormat, supportedFormat),
PERIOD_ID);
assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(supportedFormat); assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(supportedFormat);
} }
@ -485,9 +507,11 @@ public final class DefaultTrackSelectorTest {
RendererCapabilities mappedAudioRendererCapabilities = RendererCapabilities mappedAudioRendererCapabilities =
new FakeMappedRendererCapabilities(C.TRACK_TYPE_AUDIO, mappedCapabilities); new FakeMappedRendererCapabilities(C.TRACK_TYPE_AUDIO, mappedCapabilities);
TrackSelectorResult result = trackSelector.selectTracks( TrackSelectorResult result =
new RendererCapabilities[] {mappedAudioRendererCapabilities}, trackSelector.selectTracks(
singleTrackGroup(exceededEnFormat, supportedFrFormat)); new RendererCapabilities[] {mappedAudioRendererCapabilities},
singleTrackGroup(exceededEnFormat, supportedFrFormat),
PERIOD_ID);
assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(supportedFrFormat); assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(supportedFrFormat);
} }
@ -515,9 +539,11 @@ public final class DefaultTrackSelectorTest {
RendererCapabilities mappedAudioRendererCapabilities = RendererCapabilities mappedAudioRendererCapabilities =
new FakeMappedRendererCapabilities(C.TRACK_TYPE_AUDIO, mappedCapabilities); new FakeMappedRendererCapabilities(C.TRACK_TYPE_AUDIO, mappedCapabilities);
TrackSelectorResult result = trackSelector.selectTracks( TrackSelectorResult result =
new RendererCapabilities[] {mappedAudioRendererCapabilities}, trackSelector.selectTracks(
singleTrackGroup(exceededDefaultSelectionEnFormat, supportedFrFormat)); new RendererCapabilities[] {mappedAudioRendererCapabilities},
singleTrackGroup(exceededDefaultSelectionEnFormat, supportedFrFormat),
PERIOD_ID);
assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(supportedFrFormat); assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(supportedFrFormat);
} }
@ -536,9 +562,11 @@ public final class DefaultTrackSelectorTest {
Format.createAudioSampleFormat("audioFormat", MimeTypes.AUDIO_AAC, null, Format.NO_VALUE, Format.createAudioSampleFormat("audioFormat", MimeTypes.AUDIO_AAC, null, Format.NO_VALUE,
Format.NO_VALUE, 6, 44100, null, null, 0, null); Format.NO_VALUE, 6, 44100, null, null, 0, null);
TrackSelectorResult result = trackSelector.selectTracks( TrackSelectorResult result =
new RendererCapabilities[] {ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES}, trackSelector.selectTracks(
singleTrackGroup(higherChannelFormat, lowerChannelFormat)); new RendererCapabilities[] {ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES},
singleTrackGroup(higherChannelFormat, lowerChannelFormat),
PERIOD_ID);
assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(higherChannelFormat); assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(higherChannelFormat);
} }
@ -557,9 +585,11 @@ public final class DefaultTrackSelectorTest {
Format.createAudioSampleFormat("audioFormat", MimeTypes.AUDIO_AAC, null, Format.NO_VALUE, Format.createAudioSampleFormat("audioFormat", MimeTypes.AUDIO_AAC, null, Format.NO_VALUE,
Format.NO_VALUE, 2, 22050, null, null, 0, null); Format.NO_VALUE, 2, 22050, null, null, 0, null);
TrackSelectorResult result = trackSelector.selectTracks( TrackSelectorResult result =
new RendererCapabilities[] {ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES}, trackSelector.selectTracks(
singleTrackGroup(higherSampleRateFormat, lowerSampleRateFormat)); new RendererCapabilities[] {ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES},
singleTrackGroup(higherSampleRateFormat, lowerSampleRateFormat),
PERIOD_ID);
assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(higherSampleRateFormat); assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(higherSampleRateFormat);
} }
@ -578,9 +608,11 @@ public final class DefaultTrackSelectorTest {
Format.createAudioSampleFormat("audioFormat", MimeTypes.AUDIO_AAC, null, 30000, Format.createAudioSampleFormat("audioFormat", MimeTypes.AUDIO_AAC, null, 30000,
Format.NO_VALUE, 2, 44100, null, null, 0, null); Format.NO_VALUE, 2, 44100, null, null, 0, null);
TrackSelectorResult result = trackSelector.selectTracks( TrackSelectorResult result =
new RendererCapabilities[] {ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES}, trackSelector.selectTracks(
singleTrackGroup(lowerBitrateFormat, higherBitrateFormat)); new RendererCapabilities[] {ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES},
singleTrackGroup(lowerBitrateFormat, higherBitrateFormat),
PERIOD_ID);
assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(higherBitrateFormat); assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(higherBitrateFormat);
} }
@ -600,9 +632,12 @@ public final class DefaultTrackSelectorTest {
Format.createAudioSampleFormat("audioFormat", MimeTypes.AUDIO_AAC, null, Format.NO_VALUE, Format.createAudioSampleFormat("audioFormat", MimeTypes.AUDIO_AAC, null, Format.NO_VALUE,
Format.NO_VALUE, 6, 22050, null, null, 0, null); Format.NO_VALUE, 6, 22050, null, null, 0, null);
TrackSelectorResult result = trackSelector.selectTracks( TrackSelectorResult result =
new RendererCapabilities[] {ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES}, trackSelector.selectTracks(
singleTrackGroup(higherChannelLowerSampleRateFormat, lowerChannelHigherSampleRateFormat)); new RendererCapabilities[] {ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES},
singleTrackGroup(
higherChannelLowerSampleRateFormat, lowerChannelHigherSampleRateFormat),
PERIOD_ID);
assertThat(result.selections.get(0).getSelectedFormat()) assertThat(result.selections.get(0).getSelectedFormat())
.isEqualTo(higherChannelLowerSampleRateFormat); .isEqualTo(higherChannelLowerSampleRateFormat);
@ -623,9 +658,12 @@ public final class DefaultTrackSelectorTest {
Format.createAudioSampleFormat("audioFormat", MimeTypes.AUDIO_AAC, null, 30000, Format.createAudioSampleFormat("audioFormat", MimeTypes.AUDIO_AAC, null, 30000,
Format.NO_VALUE, 2, 22050, null, null, 0, null); Format.NO_VALUE, 2, 22050, null, null, 0, null);
TrackSelectorResult result = trackSelector.selectTracks( TrackSelectorResult result =
new RendererCapabilities[] {ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES}, trackSelector.selectTracks(
singleTrackGroup(higherSampleRateLowerBitrateFormat, lowerSampleRateHigherBitrateFormat)); new RendererCapabilities[] {ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES},
singleTrackGroup(
higherSampleRateLowerBitrateFormat, lowerSampleRateHigherBitrateFormat),
PERIOD_ID);
assertThat(result.selections.get(0).getSelectedFormat()) assertThat(result.selections.get(0).getSelectedFormat())
.isEqualTo(higherSampleRateLowerBitrateFormat); .isEqualTo(higherSampleRateLowerBitrateFormat);
@ -645,9 +683,11 @@ public final class DefaultTrackSelectorTest {
Format.createAudioSampleFormat("audioFormat", MimeTypes.AUDIO_AAC, null, Format.NO_VALUE, Format.createAudioSampleFormat("audioFormat", MimeTypes.AUDIO_AAC, null, Format.NO_VALUE,
Format.NO_VALUE, 6, 44100, null, null, 0, null); Format.NO_VALUE, 6, 44100, null, null, 0, null);
TrackSelectorResult result = trackSelector.selectTracks( TrackSelectorResult result =
new RendererCapabilities[] {ALL_AUDIO_FORMAT_EXCEEDED_RENDERER_CAPABILITIES}, trackSelector.selectTracks(
singleTrackGroup(higherChannelFormat, lowerChannelFormat)); new RendererCapabilities[] {ALL_AUDIO_FORMAT_EXCEEDED_RENDERER_CAPABILITIES},
singleTrackGroup(higherChannelFormat, lowerChannelFormat),
PERIOD_ID);
assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(lowerChannelFormat); assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(lowerChannelFormat);
} }
@ -666,9 +706,11 @@ public final class DefaultTrackSelectorTest {
Format.createAudioSampleFormat("audioFormat", MimeTypes.AUDIO_AAC, null, Format.NO_VALUE, Format.createAudioSampleFormat("audioFormat", MimeTypes.AUDIO_AAC, null, Format.NO_VALUE,
Format.NO_VALUE, 2, 44100, null, null, 0, null); Format.NO_VALUE, 2, 44100, null, null, 0, null);
TrackSelectorResult result = trackSelector.selectTracks( TrackSelectorResult result =
new RendererCapabilities[] {ALL_AUDIO_FORMAT_EXCEEDED_RENDERER_CAPABILITIES}, trackSelector.selectTracks(
singleTrackGroup(higherSampleRateFormat, lowerSampleRateFormat)); new RendererCapabilities[] {ALL_AUDIO_FORMAT_EXCEEDED_RENDERER_CAPABILITIES},
singleTrackGroup(higherSampleRateFormat, lowerSampleRateFormat),
PERIOD_ID);
assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(lowerSampleRateFormat); assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(lowerSampleRateFormat);
} }
@ -687,9 +729,11 @@ public final class DefaultTrackSelectorTest {
Format.createAudioSampleFormat("audioFormat", MimeTypes.AUDIO_AAC, null, 30000, Format.createAudioSampleFormat("audioFormat", MimeTypes.AUDIO_AAC, null, 30000,
Format.NO_VALUE, 2, 44100, null, null, 0, null); Format.NO_VALUE, 2, 44100, null, null, 0, null);
TrackSelectorResult result = trackSelector.selectTracks( TrackSelectorResult result =
new RendererCapabilities[] {ALL_AUDIO_FORMAT_EXCEEDED_RENDERER_CAPABILITIES}, trackSelector.selectTracks(
singleTrackGroup(lowerBitrateFormat, higherBitrateFormat)); new RendererCapabilities[] {ALL_AUDIO_FORMAT_EXCEEDED_RENDERER_CAPABILITIES},
singleTrackGroup(lowerBitrateFormat, higherBitrateFormat),
PERIOD_ID);
assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(lowerBitrateFormat); assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(lowerBitrateFormat);
} }
@ -709,9 +753,12 @@ public final class DefaultTrackSelectorTest {
Format.createAudioSampleFormat("audioFormat", MimeTypes.AUDIO_AAC, null, Format.NO_VALUE, Format.createAudioSampleFormat("audioFormat", MimeTypes.AUDIO_AAC, null, Format.NO_VALUE,
Format.NO_VALUE, 6, 22050, null, null, 0, null); Format.NO_VALUE, 6, 22050, null, null, 0, null);
TrackSelectorResult result = trackSelector.selectTracks( TrackSelectorResult result =
new RendererCapabilities[] {ALL_AUDIO_FORMAT_EXCEEDED_RENDERER_CAPABILITIES}, trackSelector.selectTracks(
singleTrackGroup(higherChannelLowerSampleRateFormat, lowerChannelHigherSampleRateFormat)); new RendererCapabilities[] {ALL_AUDIO_FORMAT_EXCEEDED_RENDERER_CAPABILITIES},
singleTrackGroup(
higherChannelLowerSampleRateFormat, lowerChannelHigherSampleRateFormat),
PERIOD_ID);
assertThat(result.selections.get(0).getSelectedFormat()) assertThat(result.selections.get(0).getSelectedFormat())
.isEqualTo(lowerChannelHigherSampleRateFormat); .isEqualTo(lowerChannelHigherSampleRateFormat);
@ -732,9 +779,12 @@ public final class DefaultTrackSelectorTest {
Format.createAudioSampleFormat("audioFormat", MimeTypes.AUDIO_AAC, null, 30000, Format.createAudioSampleFormat("audioFormat", MimeTypes.AUDIO_AAC, null, 30000,
Format.NO_VALUE, 2, 22050, null, null, 0, null); Format.NO_VALUE, 2, 22050, null, null, 0, null);
TrackSelectorResult result = trackSelector.selectTracks( TrackSelectorResult result =
new RendererCapabilities[] {ALL_AUDIO_FORMAT_EXCEEDED_RENDERER_CAPABILITIES}, trackSelector.selectTracks(
singleTrackGroup(higherSampleRateLowerBitrateFormat, lowerSampleRateHigherBitrateFormat)); new RendererCapabilities[] {ALL_AUDIO_FORMAT_EXCEEDED_RENDERER_CAPABILITIES},
singleTrackGroup(
higherSampleRateLowerBitrateFormat, lowerSampleRateHigherBitrateFormat),
PERIOD_ID);
assertThat(result.selections.get(0).getSelectedFormat()) assertThat(result.selections.get(0).getSelectedFormat())
.isEqualTo(lowerSampleRateHigherBitrateFormat); .isEqualTo(lowerSampleRateHigherBitrateFormat);
@ -756,18 +806,22 @@ public final class DefaultTrackSelectorTest {
// There is no text language preference, the first track flagged as default should be selected. // There is no text language preference, the first track flagged as default should be selected.
TrackSelectorResult result = TrackSelectorResult result =
trackSelector.selectTracks( trackSelector.selectTracks(
textRendererCapabilities, wrapFormats(forcedOnly, forcedDefault, defaultOnly, noFlag)); textRendererCapabilities,
wrapFormats(forcedOnly, forcedDefault, defaultOnly, noFlag),
PERIOD_ID);
assertThat(result.selections.get(0).getFormat(0)).isSameAs(forcedDefault); assertThat(result.selections.get(0).getFormat(0)).isSameAs(forcedDefault);
// Ditto. // Ditto.
result = result =
trackSelector.selectTracks( trackSelector.selectTracks(
textRendererCapabilities, wrapFormats(forcedOnly, noFlag, defaultOnly)); textRendererCapabilities, wrapFormats(forcedOnly, noFlag, defaultOnly), PERIOD_ID);
assertThat(result.selections.get(0).getFormat(0)).isSameAs(defaultOnly); assertThat(result.selections.get(0).getFormat(0)).isSameAs(defaultOnly);
// With no language preference and no text track flagged as default, the first forced should be // With no language preference and no text track flagged as default, the first forced should be
// selected. // selected.
result = trackSelector.selectTracks(textRendererCapabilities, wrapFormats(forcedOnly, noFlag)); result =
trackSelector.selectTracks(
textRendererCapabilities, wrapFormats(forcedOnly, noFlag), PERIOD_ID);
assertThat(result.selections.get(0).getFormat(0)).isSameAs(forcedOnly); assertThat(result.selections.get(0).getFormat(0)).isSameAs(forcedOnly);
trackSelector.setParameters( trackSelector.setParameters(
@ -779,7 +833,9 @@ public final class DefaultTrackSelectorTest {
// Default flags are disabled, so the first track flagged as forced should be selected. // Default flags are disabled, so the first track flagged as forced should be selected.
result = result =
trackSelector.selectTracks( trackSelector.selectTracks(
textRendererCapabilities, wrapFormats(defaultOnly, noFlag, forcedOnly, forcedDefault)); textRendererCapabilities,
wrapFormats(defaultOnly, noFlag, forcedOnly, forcedDefault),
PERIOD_ID);
assertThat(result.selections.get(0).getFormat(0)).isSameAs(forcedOnly); assertThat(result.selections.get(0).getFormat(0)).isSameAs(forcedOnly);
trackSelector.setParameters( trackSelector.setParameters(
@ -790,7 +846,8 @@ public final class DefaultTrackSelectorTest {
result = result =
trackSelector.selectTracks( trackSelector.selectTracks(
textRendererCapabilities, textRendererCapabilities,
wrapFormats(forcedDefault, forcedOnly, defaultOnly, noFlag, forcedOnlySpanish)); wrapFormats(forcedDefault, forcedOnly, defaultOnly, noFlag, forcedOnlySpanish),
PERIOD_ID);
assertThat(result.selections.get(0).getFormat(0)).isSameAs(forcedOnlySpanish); assertThat(result.selections.get(0).getFormat(0)).isSameAs(forcedOnlySpanish);
trackSelector.setParameters( trackSelector.setParameters(
@ -804,7 +861,9 @@ public final class DefaultTrackSelectorTest {
// selected. // selected.
result = result =
trackSelector.selectTracks( trackSelector.selectTracks(
textRendererCapabilities, wrapFormats(forcedOnly, forcedDefault, defaultOnly, noFlag)); textRendererCapabilities,
wrapFormats(forcedOnly, forcedDefault, defaultOnly, noFlag),
PERIOD_ID);
assertThat(result.selections.get(0)).isNull(); assertThat(result.selections.get(0)).isNull();
trackSelector.setParameters( trackSelector.setParameters(
@ -814,7 +873,9 @@ public final class DefaultTrackSelectorTest {
// be selected. // be selected.
result = result =
trackSelector.selectTracks( trackSelector.selectTracks(
textRendererCapabilities, wrapFormats(forcedOnly, forcedDefault, defaultOnly, noFlag)); textRendererCapabilities,
wrapFormats(forcedOnly, forcedDefault, defaultOnly, noFlag),
PERIOD_ID);
assertThat(result.selections.get(0).getFormat(0)).isSameAs(forcedDefault); assertThat(result.selections.get(0).getFormat(0)).isSameAs(forcedDefault);
trackSelector.setParameters( trackSelector.setParameters(
@ -829,7 +890,9 @@ public final class DefaultTrackSelectorTest {
// forced subtitles. // forced subtitles.
result = result =
trackSelector.selectTracks( trackSelector.selectTracks(
textRendererCapabilities, wrapFormats(noFlag, forcedOnly, forcedDefault, defaultOnly)); textRendererCapabilities,
wrapFormats(noFlag, forcedOnly, forcedDefault, defaultOnly),
PERIOD_ID);
assertThat(result.selections.get(0).getFormat(0)).isSameAs(noFlag); assertThat(result.selections.get(0).getFormat(0)).isSameAs(noFlag);
} }
@ -851,35 +914,49 @@ public final class DefaultTrackSelectorTest {
TrackSelectorResult result = TrackSelectorResult result =
trackSelector.selectTracks( trackSelector.selectTracks(
textRendererCapabilites, textRendererCapabilites,
wrapFormats(spanish, german, undeterminedUnd, undeterminedNull)); wrapFormats(spanish, german, undeterminedUnd, undeterminedNull),
PERIOD_ID);
assertThat(result.selections.get(0)).isNull(); assertThat(result.selections.get(0)).isNull();
trackSelector.setParameters( trackSelector.setParameters(
new ParametersBuilder().setSelectUndeterminedTextLanguage(true).build()); new ParametersBuilder().setSelectUndeterminedTextLanguage(true).build());
result = trackSelector.selectTracks(textRendererCapabilites, result =
wrapFormats(spanish, german, undeterminedUnd, undeterminedNull)); trackSelector.selectTracks(
textRendererCapabilites,
wrapFormats(spanish, german, undeterminedUnd, undeterminedNull),
PERIOD_ID);
assertThat(result.selections.get(0).getFormat(0)).isSameAs(undeterminedUnd); assertThat(result.selections.get(0).getFormat(0)).isSameAs(undeterminedUnd);
ParametersBuilder builder = new ParametersBuilder().setPreferredTextLanguage("spa"); ParametersBuilder builder = new ParametersBuilder().setPreferredTextLanguage("spa");
trackSelector.setParameters(builder.build()); trackSelector.setParameters(builder.build());
result = trackSelector.selectTracks(textRendererCapabilites, result =
wrapFormats(spanish, german, undeterminedUnd, undeterminedNull)); trackSelector.selectTracks(
textRendererCapabilites,
wrapFormats(spanish, german, undeterminedUnd, undeterminedNull),
PERIOD_ID);
assertThat(result.selections.get(0).getFormat(0)).isSameAs(spanish); assertThat(result.selections.get(0).getFormat(0)).isSameAs(spanish);
result = trackSelector.selectTracks(textRendererCapabilites, result =
wrapFormats(german, undeterminedUnd, undeterminedNull)); trackSelector.selectTracks(
textRendererCapabilites,
wrapFormats(german, undeterminedUnd, undeterminedNull),
PERIOD_ID);
assertThat(result.selections.get(0)).isNull(); assertThat(result.selections.get(0)).isNull();
trackSelector.setParameters(builder.setSelectUndeterminedTextLanguage(true).build()); trackSelector.setParameters(builder.setSelectUndeterminedTextLanguage(true).build());
result = trackSelector.selectTracks(textRendererCapabilites, result =
wrapFormats(german, undeterminedUnd, undeterminedNull)); trackSelector.selectTracks(
textRendererCapabilites,
wrapFormats(german, undeterminedUnd, undeterminedNull),
PERIOD_ID);
assertThat(result.selections.get(0).getFormat(0)).isSameAs(undeterminedUnd); assertThat(result.selections.get(0).getFormat(0)).isSameAs(undeterminedUnd);
result = trackSelector.selectTracks(textRendererCapabilites, result =
wrapFormats(german, undeterminedNull)); trackSelector.selectTracks(
textRendererCapabilites, wrapFormats(german, undeterminedNull), PERIOD_ID);
assertThat(result.selections.get(0).getFormat(0)).isSameAs(undeterminedNull); assertThat(result.selections.get(0).getFormat(0)).isSameAs(undeterminedNull);
result = trackSelector.selectTracks(textRendererCapabilites, wrapFormats(german)); result = trackSelector.selectTracks(textRendererCapabilites, wrapFormats(german), PERIOD_ID);
assertThat(result.selections.get(0)).isNull(); assertThat(result.selections.get(0)).isNull();
} }
@ -908,19 +985,21 @@ public final class DefaultTrackSelectorTest {
// Without an explicit language preference, nothing should be selected. // Without an explicit language preference, nothing should be selected.
TrackSelectorResult result = TrackSelectorResult result =
trackSelector.selectTracks(rendererCapabilities, wrapFormats(english, german)); trackSelector.selectTracks(rendererCapabilities, wrapFormats(english, german), PERIOD_ID);
assertThat(result.selections.get(0)).isNull(); assertThat(result.selections.get(0)).isNull();
assertThat(result.selections.get(1)).isNull(); assertThat(result.selections.get(1)).isNull();
// Explicit language preference for english. First renderer should be used. // Explicit language preference for english. First renderer should be used.
trackSelector.setParameters(trackSelector.buildUponParameters().setPreferredTextLanguage("en")); trackSelector.setParameters(trackSelector.buildUponParameters().setPreferredTextLanguage("en"));
result = trackSelector.selectTracks(rendererCapabilities, wrapFormats(english, german)); result =
trackSelector.selectTracks(rendererCapabilities, wrapFormats(english, german), PERIOD_ID);
assertThat(result.selections.get(0).getFormat(0)).isSameAs(english); assertThat(result.selections.get(0).getFormat(0)).isSameAs(english);
assertThat(result.selections.get(1)).isNull(); assertThat(result.selections.get(1)).isNull();
// Explicit language preference for German. Second renderer should be used. // Explicit language preference for German. Second renderer should be used.
trackSelector.setParameters(trackSelector.buildUponParameters().setPreferredTextLanguage("de")); trackSelector.setParameters(trackSelector.buildUponParameters().setPreferredTextLanguage("de"));
result = trackSelector.selectTracks(rendererCapabilities, wrapFormats(english, german)); result =
trackSelector.selectTracks(rendererCapabilities, wrapFormats(english, german), PERIOD_ID);
assertThat(result.selections.get(0)).isNull(); assertThat(result.selections.get(0)).isNull();
assertThat(result.selections.get(1).getFormat(0)).isSameAs(german); assertThat(result.selections.get(1).getFormat(0)).isSameAs(german);
} }
@ -941,9 +1020,11 @@ public final class DefaultTrackSelectorTest {
Format.createAudioSampleFormat("audioFormat", MimeTypes.AUDIO_AAC, null, 30000, Format.createAudioSampleFormat("audioFormat", MimeTypes.AUDIO_AAC, null, 30000,
Format.NO_VALUE, 2, 44100, null, null, 0, null); Format.NO_VALUE, 2, 44100, null, null, 0, null);
TrackSelectorResult result = trackSelector.selectTracks( TrackSelectorResult result =
new RendererCapabilities[] {ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES}, trackSelector.selectTracks(
singleTrackGroup(lowerBitrateFormat, higherBitrateFormat)); new RendererCapabilities[] {ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES},
singleTrackGroup(lowerBitrateFormat, higherBitrateFormat),
PERIOD_ID);
assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(lowerBitrateFormat); assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(lowerBitrateFormat);
} }
@ -962,7 +1043,7 @@ public final class DefaultTrackSelectorTest {
TrackGroupArray trackGroupArray = singleTrackGroup(AUDIO_FORMAT, AUDIO_FORMAT); TrackGroupArray trackGroupArray = singleTrackGroup(AUDIO_FORMAT, AUDIO_FORMAT);
TrackSelectorResult result = TrackSelectorResult result =
trackSelector.selectTracks( trackSelector.selectTracks(
new RendererCapabilities[] {AUDIO_CAPABILITIES}, trackGroupArray); new RendererCapabilities[] {AUDIO_CAPABILITIES}, trackGroupArray, PERIOD_ID);
assertThat(result.length).isEqualTo(1); assertThat(result.length).isEqualTo(1);
assertThat(result.selections.get(0)).isEqualTo(adaptiveTrackSelection); assertThat(result.selections.get(0)).isEqualTo(adaptiveTrackSelection);
@ -991,7 +1072,7 @@ public final class DefaultTrackSelectorTest {
new SelectionOverride(/* groupIndex= */ 0, /* tracks= */ 1, 2))); new SelectionOverride(/* groupIndex= */ 0, /* tracks= */ 1, 2)));
TrackSelectorResult result = TrackSelectorResult result =
trackSelector.selectTracks( trackSelector.selectTracks(
new RendererCapabilities[] {AUDIO_CAPABILITIES}, trackGroupArray); new RendererCapabilities[] {AUDIO_CAPABILITIES}, trackGroupArray, PERIOD_ID);
assertThat(result.length).isEqualTo(1); assertThat(result.length).isEqualTo(1);
assertThat(result.selections.get(0)).isEqualTo(adaptiveTrackSelection); assertThat(result.selections.get(0)).isEqualTo(adaptiveTrackSelection);
@ -1024,21 +1105,23 @@ public final class DefaultTrackSelectorTest {
// Without an explicit language preference, prefer the first renderer. // Without an explicit language preference, prefer the first renderer.
TrackSelectorResult result = TrackSelectorResult result =
trackSelector.selectTracks(rendererCapabilities, wrapFormats(english, german)); trackSelector.selectTracks(rendererCapabilities, wrapFormats(english, german), PERIOD_ID);
assertThat(result.selections.get(0).getFormat(0)).isSameAs(english); assertThat(result.selections.get(0).getFormat(0)).isSameAs(english);
assertThat(result.selections.get(1)).isNull(); assertThat(result.selections.get(1)).isNull();
// Explicit language preference for english. First renderer should be used. // Explicit language preference for english. First renderer should be used.
trackSelector.setParameters( trackSelector.setParameters(
trackSelector.buildUponParameters().setPreferredAudioLanguage("en")); trackSelector.buildUponParameters().setPreferredAudioLanguage("en"));
result = trackSelector.selectTracks(rendererCapabilities, wrapFormats(english, german)); result =
trackSelector.selectTracks(rendererCapabilities, wrapFormats(english, german), PERIOD_ID);
assertThat(result.selections.get(0).getFormat(0)).isSameAs(english); assertThat(result.selections.get(0).getFormat(0)).isSameAs(english);
assertThat(result.selections.get(1)).isNull(); assertThat(result.selections.get(1)).isNull();
// Explicit language preference for German. Second renderer should be used. // Explicit language preference for German. Second renderer should be used.
trackSelector.setParameters( trackSelector.setParameters(
trackSelector.buildUponParameters().setPreferredAudioLanguage("de")); trackSelector.buildUponParameters().setPreferredAudioLanguage("de"));
result = trackSelector.selectTracks(rendererCapabilities, wrapFormats(english, german)); result =
trackSelector.selectTracks(rendererCapabilities, wrapFormats(english, german), PERIOD_ID);
assertThat(result.selections.get(0)).isNull(); assertThat(result.selections.get(0)).isNull();
assertThat(result.selections.get(1).getFormat(0)).isSameAs(german); assertThat(result.selections.get(1).getFormat(0)).isSameAs(german);
} }
@ -1057,7 +1140,7 @@ public final class DefaultTrackSelectorTest {
TrackGroupArray trackGroupArray = singleTrackGroup(VIDEO_FORMAT, VIDEO_FORMAT); TrackGroupArray trackGroupArray = singleTrackGroup(VIDEO_FORMAT, VIDEO_FORMAT);
TrackSelectorResult result = TrackSelectorResult result =
trackSelector.selectTracks( trackSelector.selectTracks(
new RendererCapabilities[] {VIDEO_CAPABILITIES}, trackGroupArray); new RendererCapabilities[] {VIDEO_CAPABILITIES}, trackGroupArray, PERIOD_ID);
assertThat(result.length).isEqualTo(1); assertThat(result.length).isEqualTo(1);
assertThat(result.selections.get(0)).isEqualTo(adaptiveTrackSelection); assertThat(result.selections.get(0)).isEqualTo(adaptiveTrackSelection);
@ -1086,7 +1169,7 @@ public final class DefaultTrackSelectorTest {
new SelectionOverride(/* groupIndex= */ 0, /* tracks= */ 1, 2))); new SelectionOverride(/* groupIndex= */ 0, /* tracks= */ 1, 2)));
TrackSelectorResult result = TrackSelectorResult result =
trackSelector.selectTracks( trackSelector.selectTracks(
new RendererCapabilities[] {VIDEO_CAPABILITIES}, trackGroupArray); new RendererCapabilities[] {VIDEO_CAPABILITIES}, trackGroupArray, PERIOD_ID);
assertThat(result.length).isEqualTo(1); assertThat(result.length).isEqualTo(1);
assertThat(result.selections.get(0)).isEqualTo(adaptiveTrackSelection); assertThat(result.selections.get(0)).isEqualTo(adaptiveTrackSelection);

View File

@ -23,6 +23,7 @@ import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.Format; import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.RendererCapabilities; import com.google.android.exoplayer2.RendererCapabilities;
import com.google.android.exoplayer2.RendererConfiguration; import com.google.android.exoplayer2.RendererConfiguration;
import com.google.android.exoplayer2.source.MediaSource.MediaPeriodId;
import com.google.android.exoplayer2.source.TrackGroup; import com.google.android.exoplayer2.source.TrackGroup;
import com.google.android.exoplayer2.source.TrackGroupArray; import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.util.MimeTypes;
@ -51,6 +52,7 @@ public final class MappingTrackSelectorTest {
Format.NO_VALUE, 2, 44100, null, null, 0, null)); Format.NO_VALUE, 2, 44100, null, null, 0, null));
private static final TrackGroupArray TRACK_GROUPS = new TrackGroupArray( private static final TrackGroupArray TRACK_GROUPS = new TrackGroupArray(
VIDEO_TRACK_GROUP, AUDIO_TRACK_GROUP); VIDEO_TRACK_GROUP, AUDIO_TRACK_GROUP);
private static final MediaPeriodId PERIOD_ID = new MediaPeriodId(/* periodUid= */ new Object());
/** /**
* Tests that the video and audio track groups are mapped onto the correct renderers. * Tests that the video and audio track groups are mapped onto the correct renderers.
@ -58,7 +60,7 @@ public final class MappingTrackSelectorTest {
@Test @Test
public void testMapping() throws ExoPlaybackException { public void testMapping() throws ExoPlaybackException {
FakeMappingTrackSelector trackSelector = new FakeMappingTrackSelector(); FakeMappingTrackSelector trackSelector = new FakeMappingTrackSelector();
trackSelector.selectTracks(RENDERER_CAPABILITIES, TRACK_GROUPS); trackSelector.selectTracks(RENDERER_CAPABILITIES, TRACK_GROUPS, PERIOD_ID);
trackSelector.assertMappedTrackGroups(0, VIDEO_TRACK_GROUP); trackSelector.assertMappedTrackGroups(0, VIDEO_TRACK_GROUP);
trackSelector.assertMappedTrackGroups(1, AUDIO_TRACK_GROUP); trackSelector.assertMappedTrackGroups(1, AUDIO_TRACK_GROUP);
} }
@ -72,7 +74,7 @@ public final class MappingTrackSelectorTest {
FakeMappingTrackSelector trackSelector = new FakeMappingTrackSelector(); FakeMappingTrackSelector trackSelector = new FakeMappingTrackSelector();
RendererCapabilities[] reverseOrderRendererCapabilities = new RendererCapabilities[] { RendererCapabilities[] reverseOrderRendererCapabilities = new RendererCapabilities[] {
AUDIO_CAPABILITIES, VIDEO_CAPABILITIES}; AUDIO_CAPABILITIES, VIDEO_CAPABILITIES};
trackSelector.selectTracks(reverseOrderRendererCapabilities, TRACK_GROUPS); trackSelector.selectTracks(reverseOrderRendererCapabilities, TRACK_GROUPS, PERIOD_ID);
trackSelector.assertMappedTrackGroups(0, AUDIO_TRACK_GROUP); trackSelector.assertMappedTrackGroups(0, AUDIO_TRACK_GROUP);
trackSelector.assertMappedTrackGroups(1, VIDEO_TRACK_GROUP); trackSelector.assertMappedTrackGroups(1, VIDEO_TRACK_GROUP);
} }
@ -86,7 +88,7 @@ public final class MappingTrackSelectorTest {
FakeMappingTrackSelector trackSelector = new FakeMappingTrackSelector(); FakeMappingTrackSelector trackSelector = new FakeMappingTrackSelector();
TrackGroupArray multiTrackGroups = new TrackGroupArray(VIDEO_TRACK_GROUP, AUDIO_TRACK_GROUP, TrackGroupArray multiTrackGroups = new TrackGroupArray(VIDEO_TRACK_GROUP, AUDIO_TRACK_GROUP,
VIDEO_TRACK_GROUP); VIDEO_TRACK_GROUP);
trackSelector.selectTracks(RENDERER_CAPABILITIES, multiTrackGroups); trackSelector.selectTracks(RENDERER_CAPABILITIES, multiTrackGroups, PERIOD_ID);
trackSelector.assertMappedTrackGroups(0, VIDEO_TRACK_GROUP, VIDEO_TRACK_GROUP); trackSelector.assertMappedTrackGroups(0, VIDEO_TRACK_GROUP, VIDEO_TRACK_GROUP);
trackSelector.assertMappedTrackGroups(1, AUDIO_TRACK_GROUP); trackSelector.assertMappedTrackGroups(1, AUDIO_TRACK_GROUP);
} }

View File

@ -20,6 +20,7 @@ import static org.junit.Assert.fail;
import com.google.android.exoplayer2.ExoPlaybackException; import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.RendererCapabilities; import com.google.android.exoplayer2.RendererCapabilities;
import com.google.android.exoplayer2.source.MediaSource.MediaPeriodId;
import com.google.android.exoplayer2.source.TrackGroupArray; import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.trackselection.TrackSelector.InvalidationListener; import com.google.android.exoplayer2.trackselection.TrackSelector.InvalidationListener;
import com.google.android.exoplayer2.upstream.BandwidthMeter; import com.google.android.exoplayer2.upstream.BandwidthMeter;
@ -37,16 +38,20 @@ public class TrackSelectorTest {
@Before @Before
public void setUp() { public void setUp() {
trackSelector = new TrackSelector() { trackSelector =
@Override new TrackSelector() {
public TrackSelectorResult selectTracks(RendererCapabilities[] rendererCapabilities, @Override
TrackGroupArray trackGroups) throws ExoPlaybackException { public TrackSelectorResult selectTracks(
throw new UnsupportedOperationException(); RendererCapabilities[] rendererCapabilities,
} TrackGroupArray trackGroups,
MediaPeriodId periodId)
throws ExoPlaybackException {
throw new UnsupportedOperationException();
}
@Override @Override
public void onSelectionActivated(Object info) {} public void onSelectionActivated(Object info) {}
}; };
} }
@Test @Test