Commit 58e60e1f by aquilescanta Committed by Oliver Woodman

Use the Builder pattern for DefaultTrackSelector#Parameters

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=177438430
parent ce8736c7
......@@ -2,6 +2,7 @@
### dev-v2 (not yet released) ###
* Replace `DefaultTrackSelector.Parameters` copy methods with a builder.
* Allow more flexible loading strategy when playing media containing multiple
sub-streams, by allowing injection of custom `CompositeSequenceableLoader`
factories through `DashMediaSource.Builder`, `HlsMediaSource.Builder`,
......
......@@ -75,10 +75,251 @@ import java.util.concurrent.atomic.AtomicReference;
public class DefaultTrackSelector extends MappingTrackSelector {
/**
* A builder for {@link Parameters}.
*/
public static final class ParametersBuilder {
private String preferredAudioLanguage;
private String preferredTextLanguage;
private boolean selectUndeterminedTextLanguage;
private boolean forceLowestBitrate;
private boolean allowMixedMimeAdaptiveness;
private boolean allowNonSeamlessAdaptiveness;
private int maxVideoWidth;
private int maxVideoHeight;
private int maxVideoBitrate;
private boolean exceedVideoConstraintsIfNecessary;
private boolean exceedRendererCapabilitiesIfNecessary;
private int viewportWidth;
private int viewportHeight;
private boolean viewportOrientationMayChange;
/**
* Creates a builder obtaining the initial values from {@link Parameters#DEFAULT}.
*/
public ParametersBuilder() {
this(Parameters.DEFAULT);
}
/**
* @param initialValues The {@link Parameters} from which the initial values of the builder are
* obtained.
*/
private ParametersBuilder(Parameters initialValues) {
preferredAudioLanguage = initialValues.preferredAudioLanguage;
preferredTextLanguage = initialValues.preferredTextLanguage;
selectUndeterminedTextLanguage = initialValues.selectUndeterminedTextLanguage;
forceLowestBitrate = initialValues.forceLowestBitrate;
allowMixedMimeAdaptiveness = initialValues.allowMixedMimeAdaptiveness;
allowNonSeamlessAdaptiveness = initialValues.allowNonSeamlessAdaptiveness;
maxVideoWidth = initialValues.maxVideoWidth;
maxVideoHeight = initialValues.maxVideoHeight;
maxVideoBitrate = initialValues.maxVideoBitrate;
exceedVideoConstraintsIfNecessary = initialValues.exceedVideoConstraintsIfNecessary;
exceedRendererCapabilitiesIfNecessary = initialValues.exceedRendererCapabilitiesIfNecessary;
viewportWidth = initialValues.viewportWidth;
viewportHeight = initialValues.viewportHeight;
viewportOrientationMayChange = initialValues.viewportOrientationMayChange;
}
/**
* See {@link Parameters#preferredAudioLanguage}.
*
* @return This builder.
*/
public ParametersBuilder setPreferredAudioLanguage(String preferredAudioLanguage) {
this.preferredAudioLanguage = preferredAudioLanguage;
return this;
}
/**
* See {@link Parameters#preferredTextLanguage}.
*
* @return This builder.
*/
public ParametersBuilder setPreferredTextLanguage(String preferredTextLanguage) {
this.preferredTextLanguage = preferredTextLanguage;
return this;
}
/**
* See {@link Parameters#selectUndeterminedTextLanguage}.
*
* @return This builder.
*/
public ParametersBuilder setSelectUndeterminedTextLanguage(
boolean selectUndeterminedTextLanguage) {
this.selectUndeterminedTextLanguage = selectUndeterminedTextLanguage;
return this;
}
/**
* See {@link Parameters#forceLowestBitrate}.
*
* @return This builder.
*/
public ParametersBuilder setForceLowestBitrate(boolean forceLowestBitrate) {
this.forceLowestBitrate = forceLowestBitrate;
return this;
}
/**
* See {@link Parameters#allowMixedMimeAdaptiveness}.
*
* @return This builder.
*/
public ParametersBuilder setAllowMixedMimeAdaptiveness(boolean allowMixedMimeAdaptiveness) {
this.allowMixedMimeAdaptiveness = allowMixedMimeAdaptiveness;
return this;
}
/**
* See {@link Parameters#allowNonSeamlessAdaptiveness}.
*
* @return This builder.
*/
public ParametersBuilder setAllowNonSeamlessAdaptiveness(boolean allowNonSeamlessAdaptiveness) {
this.allowNonSeamlessAdaptiveness = allowNonSeamlessAdaptiveness;
return this;
}
/**
* Equivalent to {@link #setMaxVideoSize setMaxVideoSize(1279, 719)}.
*
* @return This builder.
*/
public ParametersBuilder setMaxVideoSizeSd() {
return setMaxVideoSize(1279, 719);
}
/**
* Equivalent to {@link #setMaxVideoSize setMaxVideoSize(Integer.MAX_VALUE, Integer.MAX_VALUE)}.
*
* @return This builder.
*/
public ParametersBuilder clearVideoSizeConstraints() {
return setMaxVideoSize(Integer.MAX_VALUE, Integer.MAX_VALUE);
}
/**
* See {@link Parameters#maxVideoWidth} and {@link Parameters#maxVideoHeight}.
*
* @return This builder.
*/
public ParametersBuilder setMaxVideoSize(int maxVideoWidth, int maxVideoHeight) {
this.maxVideoWidth = maxVideoWidth;
this.maxVideoHeight = maxVideoHeight;
return this;
}
/**
* See {@link Parameters#maxVideoBitrate}.
*
* @return This builder.
*/
public ParametersBuilder setMaxVideoBitrate(int maxVideoBitrate) {
this.maxVideoBitrate = maxVideoBitrate;
return this;
}
/**
* See {@link Parameters#exceedVideoConstraintsIfNecessary}.
*
* @return This builder.
*/
public ParametersBuilder setExceedVideoConstraintsIfNecessary(
boolean exceedVideoConstraintsIfNecessary) {
this.exceedVideoConstraintsIfNecessary = exceedVideoConstraintsIfNecessary;
return this;
}
/**
* See {@link Parameters#exceedRendererCapabilitiesIfNecessary}.
*
* @return This builder.
*/
public ParametersBuilder setExceedRendererCapabilitiesIfNecessary(
boolean exceedRendererCapabilitiesIfNecessary) {
this.exceedRendererCapabilitiesIfNecessary = exceedRendererCapabilitiesIfNecessary;
return this;
}
/**
* Equivalent to invoking {@link #setViewportSize} with the viewport size values obtained from
* the provided {@link Context}.
*
* @param context The context to obtain the viewport size from.
* @param viewportOrientationMayChange See {@link #viewportOrientationMayChange}.
* @return This builder.
*/
public ParametersBuilder setViewportSizeFromContext(Context context,
boolean viewportOrientationMayChange) {
// Assume the viewport is fullscreen.
Point viewportSize = Util.getPhysicalDisplaySize(context);
return setViewportSize(viewportSize.x, viewportSize.y, viewportOrientationMayChange);
}
/**
* Equivalent to
* {@link #setViewportSize setViewportSize(Integer.MAX_VALUE, Integer.MAX_VALUE, true)}.
*
* @return This builder.
*/
public ParametersBuilder clearViewportSizeConstraints() {
return setViewportSize(Integer.MAX_VALUE, Integer.MAX_VALUE, true);
}
/**
* See {@link Parameters#viewportWidth}, {@link Parameters#maxVideoHeight} and
* {@link Parameters#viewportOrientationMayChange}.
*
* @return This builder.
*/
public ParametersBuilder setViewportSize(int viewportWidth, int viewportHeight,
boolean viewportOrientationMayChange) {
this.viewportWidth = viewportWidth;
this.viewportHeight = viewportHeight;
this.viewportOrientationMayChange = viewportOrientationMayChange;
return this;
}
/**
* Builds a {@link Parameters} instance with the selected values.
*/
public Parameters build() {
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
selectUndeterminedTextLanguage, forceLowestBitrate, allowMixedMimeAdaptiveness,
allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight, maxVideoBitrate,
exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary, viewportWidth,
viewportHeight, viewportOrientationMayChange);
}
}
/**
* Constraint parameters for {@link DefaultTrackSelector}.
*/
public static final class Parameters {
/**
* An instance with default values:
* <ul>
* <li>No preferred audio language.</li>
* <li>No preferred text language.</li>
* <li>Text tracks with undetermined language are not selected if no track with
* {@link #preferredTextLanguage} is available.</li>
* <li>Lowest bitrate track selections are not forced.</li>
* <li>Adaptation between different mime types is not allowed.</li>
* <li>Non seamless adaptation is allowed.</li>
* <li>No max limit for video width/height.</li>
* <li>No max video bitrate.</li>
* <li>Video constraints are exceeded if no supported selection can be made otherwise.</li>
* <li>Renderer capabilities are exceeded if no supported selection can be made.</li>
* <li>No viewport constraints.</li>
* </ul>
*/
public static final Parameters DEFAULT = new Parameters();
// Audio
/**
* The preferred language for audio, as well as for forced text tracks, as an ISO 639-2/T tag.
......@@ -150,52 +391,19 @@ public class DefaultTrackSelector extends MappingTrackSelector {
*/
public final boolean exceedRendererCapabilitiesIfNecessary;
/**
* Default parameters. The default values are:
* <ul>
* <li>No preferred audio language is set.</li>
* <li>No preferred text language is set.</li>
* <li>Text tracks with undetermined language are not selected if no track with
* {@link #preferredTextLanguage} is available.</li>
* <li>Lowest bitrate track selections are not forced.</li>
* <li>Adaptation between different mime types is not allowed.</li>
* <li>Non seamless adaptation is allowed.</li>
* <li>No max limit for video width/height.</li>
* <li>No max video bitrate.</li>
* <li>Video constraints are exceeded if no supported selection can be made otherwise.</li>
* <li>Renderer capabilities are exceeded if no supported selection can be made.</li>
* <li>No viewport constraints are set.</li>
* </ul>
*/
public Parameters() {
private Parameters() {
this(null, null, false, false, false, true, Integer.MAX_VALUE, Integer.MAX_VALUE,
Integer.MAX_VALUE, true, true, Integer.MAX_VALUE, Integer.MAX_VALUE, true);
}
/**
* @param preferredAudioLanguage See {@link #preferredAudioLanguage}
* @param preferredTextLanguage See {@link #preferredTextLanguage}
* @param selectUndeterminedTextLanguage See {@link #selectUndeterminedTextLanguage}.
* @param forceLowestBitrate See {@link #forceLowestBitrate}.
* @param allowMixedMimeAdaptiveness See {@link #allowMixedMimeAdaptiveness}
* @param allowNonSeamlessAdaptiveness See {@link #allowNonSeamlessAdaptiveness}
* @param maxVideoWidth See {@link #maxVideoWidth}
* @param maxVideoHeight See {@link #maxVideoHeight}
* @param maxVideoBitrate See {@link #maxVideoBitrate}
* @param exceedVideoConstraintsIfNecessary See {@link #exceedVideoConstraintsIfNecessary}
* @param exceedRendererCapabilitiesIfNecessary See {@link #preferredTextLanguage}
* @param viewportWidth See {@link #viewportWidth}
* @param viewportHeight See {@link #viewportHeight}
* @param viewportOrientationMayChange See {@link #viewportOrientationMayChange}
*/
public Parameters(String preferredAudioLanguage, String preferredTextLanguage,
private Parameters(String preferredAudioLanguage, String preferredTextLanguage,
boolean selectUndeterminedTextLanguage, boolean forceLowestBitrate,
boolean allowMixedMimeAdaptiveness, boolean allowNonSeamlessAdaptiveness, int maxVideoWidth,
int maxVideoHeight, int maxVideoBitrate, boolean exceedVideoConstraintsIfNecessary,
boolean exceedRendererCapabilitiesIfNecessary, int viewportWidth, int viewportHeight,
boolean viewportOrientationMayChange) {
this.preferredAudioLanguage = preferredAudioLanguage;
this.preferredTextLanguage = preferredTextLanguage;
this.preferredAudioLanguage = Util.normalizeLanguageCode(preferredAudioLanguage);
this.preferredTextLanguage = Util.normalizeLanguageCode(preferredTextLanguage);
this.selectUndeterminedTextLanguage = selectUndeterminedTextLanguage;
this.forceLowestBitrate = forceLowestBitrate;
this.allowMixedMimeAdaptiveness = allowMixedMimeAdaptiveness;
......@@ -211,205 +419,10 @@ public class DefaultTrackSelector extends MappingTrackSelector {
}
/**
* Returns an instance with the provided {@link #preferredAudioLanguage}.
*/
public Parameters withPreferredAudioLanguage(String preferredAudioLanguage) {
preferredAudioLanguage = Util.normalizeLanguageCode(preferredAudioLanguage);
if (TextUtils.equals(preferredAudioLanguage, this.preferredAudioLanguage)) {
return this;
}
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
selectUndeterminedTextLanguage, forceLowestBitrate, allowMixedMimeAdaptiveness,
allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight, maxVideoBitrate,
exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary, viewportWidth,
viewportHeight, viewportOrientationMayChange);
}
/**
* Returns an instance with the provided {@link #preferredTextLanguage}.
*/
public Parameters withPreferredTextLanguage(String preferredTextLanguage) {
preferredTextLanguage = Util.normalizeLanguageCode(preferredTextLanguage);
if (TextUtils.equals(preferredTextLanguage, this.preferredTextLanguage)) {
return this;
}
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
selectUndeterminedTextLanguage, forceLowestBitrate, allowMixedMimeAdaptiveness,
allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight, maxVideoBitrate,
exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary, viewportWidth,
viewportHeight, viewportOrientationMayChange);
}
/**
* Returns an instance with the provided {@link #selectUndeterminedTextLanguage}.
*/
public Parameters withSelectUndeterminedTextLanguage(boolean selectUndeterminedTextLanguage) {
if (selectUndeterminedTextLanguage == this.selectUndeterminedTextLanguage) {
return this;
}
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
selectUndeterminedTextLanguage, forceLowestBitrate, allowMixedMimeAdaptiveness,
allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight, maxVideoBitrate,
exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary, viewportWidth,
viewportHeight, viewportOrientationMayChange);
}
/**
* Returns an instance with the provided {@link #forceLowestBitrate}.
*/
public Parameters withForceLowestBitrate(boolean forceLowestBitrate) {
if (forceLowestBitrate == this.forceLowestBitrate) {
return this;
}
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
selectUndeterminedTextLanguage, forceLowestBitrate, allowMixedMimeAdaptiveness,
allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight, maxVideoBitrate,
exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary, viewportWidth,
viewportHeight, viewportOrientationMayChange);
}
/**
* Returns an instance with the provided {@link #allowMixedMimeAdaptiveness}.
*/
public Parameters withAllowMixedMimeAdaptiveness(boolean allowMixedMimeAdaptiveness) {
if (allowMixedMimeAdaptiveness == this.allowMixedMimeAdaptiveness) {
return this;
}
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
selectUndeterminedTextLanguage, forceLowestBitrate, allowMixedMimeAdaptiveness,
allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight, maxVideoBitrate,
exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary, viewportWidth,
viewportHeight, viewportOrientationMayChange);
}
/**
* Returns an instance with the provided {@link #allowNonSeamlessAdaptiveness}.
*/
public Parameters withAllowNonSeamlessAdaptiveness(boolean allowNonSeamlessAdaptiveness) {
if (allowNonSeamlessAdaptiveness == this.allowNonSeamlessAdaptiveness) {
return this;
}
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
selectUndeterminedTextLanguage, forceLowestBitrate, allowMixedMimeAdaptiveness,
allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight, maxVideoBitrate,
exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary, viewportWidth,
viewportHeight, viewportOrientationMayChange);
}
/**
* Returns an instance with the provided {@link #maxVideoWidth} and {@link #maxVideoHeight}.
*/
public Parameters withMaxVideoSize(int maxVideoWidth, int maxVideoHeight) {
if (maxVideoWidth == this.maxVideoWidth && maxVideoHeight == this.maxVideoHeight) {
return this;
}
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
selectUndeterminedTextLanguage, forceLowestBitrate, allowMixedMimeAdaptiveness,
allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight, maxVideoBitrate,
exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary, viewportWidth,
viewportHeight, viewportOrientationMayChange);
}
/**
* Returns an instance with the provided {@link #maxVideoBitrate}.
*/
public Parameters withMaxVideoBitrate(int maxVideoBitrate) {
if (maxVideoBitrate == this.maxVideoBitrate) {
return this;
}
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
selectUndeterminedTextLanguage, forceLowestBitrate, allowMixedMimeAdaptiveness,
allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight, maxVideoBitrate,
exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary, viewportWidth,
viewportHeight, viewportOrientationMayChange);
}
/**
* Equivalent to {@code withMaxVideoSize(1279, 719)}.
*
* @return An instance with maximum standard definition as maximum video size.
*/
public Parameters withMaxVideoSizeSd() {
return withMaxVideoSize(1279, 719);
}
/**
* Equivalent to {@code withMaxVideoSize(Integer.MAX_VALUE, Integer.MAX_VALUE)}.
*
* @return An instance without video size constraints.
*/
public Parameters withoutVideoSizeConstraints() {
return withMaxVideoSize(Integer.MAX_VALUE, Integer.MAX_VALUE);
}
/**
* Returns an instance with the provided {@link #exceedVideoConstraintsIfNecessary}.
*/
public Parameters withExceedVideoConstraintsIfNecessary(
boolean exceedVideoConstraintsIfNecessary) {
if (exceedVideoConstraintsIfNecessary == this.exceedVideoConstraintsIfNecessary) {
return this;
}
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
selectUndeterminedTextLanguage, forceLowestBitrate, allowMixedMimeAdaptiveness,
allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight, maxVideoBitrate,
exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary, viewportWidth,
viewportHeight, viewportOrientationMayChange);
}
/**
* Returns an instance with the provided {@link #exceedRendererCapabilitiesIfNecessary}.
*/
public Parameters withExceedRendererCapabilitiesIfNecessary(
boolean exceedRendererCapabilitiesIfNecessary) {
if (exceedRendererCapabilitiesIfNecessary == this.exceedRendererCapabilitiesIfNecessary) {
return this;
}
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
selectUndeterminedTextLanguage, forceLowestBitrate, allowMixedMimeAdaptiveness,
allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight, maxVideoBitrate,
exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary, viewportWidth,
viewportHeight, viewportOrientationMayChange);
}
/**
* Returns an instance with the provided {@link #viewportWidth}, {@link #viewportHeight} and
* {@link #viewportOrientationMayChange}.
*/
public Parameters withViewportSize(int viewportWidth, int viewportHeight,
boolean viewportOrientationMayChange) {
if (viewportWidth == this.viewportWidth && viewportHeight == this.viewportHeight
&& viewportOrientationMayChange == this.viewportOrientationMayChange) {
return this;
}
return new Parameters(preferredAudioLanguage, preferredTextLanguage,
selectUndeterminedTextLanguage, forceLowestBitrate, allowMixedMimeAdaptiveness,
allowNonSeamlessAdaptiveness, maxVideoWidth, maxVideoHeight, maxVideoBitrate,
exceedVideoConstraintsIfNecessary, exceedRendererCapabilitiesIfNecessary, viewportWidth,
viewportHeight, viewportOrientationMayChange);
}
/**
* Returns an instance where the viewport size is obtained from the provided {@link Context}.
*
* @param context The context to obtain the viewport size from.
* @param viewportOrientationMayChange See {@link #viewportOrientationMayChange}.
* @return An instance where the viewport size is obtained from the provided {@link Context}.
*/
public Parameters withViewportSizeFromContext(Context context,
boolean viewportOrientationMayChange) {
// Assume the viewport is fullscreen.
Point viewportSize = Util.getPhysicalDisplaySize(context);
return withViewportSize(viewportSize.x, viewportSize.y, viewportOrientationMayChange);
}
/**
* Equivalent to {@code withViewportSize(Integer.MAX_VALUE, Integer.MAX_VALUE, true)}.
*
* @return An instance without viewport size constraints.
* Creates a new {@link ParametersBuilder}, copying the initial values from this instance.
*/
public Parameters withoutViewportSizeConstraints() {
return withViewportSize(Integer.MAX_VALUE, Integer.MAX_VALUE, true);
public ParametersBuilder buildUpon() {
return new ParametersBuilder(this);
}
@Override
......@@ -492,7 +505,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
*/
public DefaultTrackSelector(TrackSelection.Factory adaptiveTrackSelectionFactory) {
this.adaptiveTrackSelectionFactory = adaptiveTrackSelectionFactory;
paramsReference = new AtomicReference<>(new Parameters());
paramsReference = new AtomicReference<>(Parameters.DEFAULT);
}
/**
......@@ -882,7 +895,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
return isSupported(formatSupport, false) && format.channelCount == configuration.channelCount
&& format.sampleRate == configuration.sampleRate
&& (configuration.mimeType == null
|| TextUtils.equals(configuration.mimeType, format.sampleMimeType));
|| TextUtils.equals(configuration.mimeType, format.sampleMimeType));
}
// Text track selection implementation.
......
......@@ -15,6 +15,7 @@ import com.google.android.exoplayer2.RendererCapabilities;
import com.google.android.exoplayer2.source.TrackGroup;
import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector.ParametersBuilder;
import com.google.android.exoplayer2.trackselection.TrackSelector.InvalidationListener;
import com.google.android.exoplayer2.util.MimeTypes;
import java.util.HashMap;
......@@ -33,7 +34,6 @@ import org.robolectric.annotation.Config;
@Config(sdk = Config.TARGET_SDK, manifest = Config.NONE)
public final class DefaultTrackSelectorTest {
private static final Parameters DEFAULT_PARAMETERS = new Parameters();
private static final RendererCapabilities ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES =
new FakeRendererCapabilities(C.TRACK_TYPE_AUDIO);
private static final RendererCapabilities ALL_TEXT_FORMAT_SUPPORTED_RENDERER_CAPABILITIES =
......@@ -61,7 +61,6 @@ public final class DefaultTrackSelectorTest {
public void testSetParameterWithDefaultParametersDoesNotNotifyInvalidationListener()
throws Exception {
trackSelector.init(invalidationListener);
trackSelector.setParameters(DEFAULT_PARAMETERS);
verify(invalidationListener, never()).onTrackSelectionsInvalidated();
}
......@@ -73,7 +72,7 @@ public final class DefaultTrackSelectorTest {
@Test
public void testSetParameterWithNonDefaultParameterNotifyInvalidationListener()
throws Exception {
Parameters parameters = DEFAULT_PARAMETERS.withPreferredAudioLanguage("en");
Parameters parameters = new ParametersBuilder().setPreferredAudioLanguage("eng").build();
trackSelector.init(invalidationListener);
trackSelector.setParameters(parameters);
......@@ -88,10 +87,10 @@ public final class DefaultTrackSelectorTest {
@Test
public void testSetParameterWithSameParametersDoesNotNotifyInvalidationListenerAgain()
throws Exception {
Parameters parameters = DEFAULT_PARAMETERS.withPreferredAudioLanguage("en");
ParametersBuilder builder = new ParametersBuilder().setPreferredAudioLanguage("eng");
trackSelector.init(invalidationListener);
trackSelector.setParameters(parameters);
trackSelector.setParameters(parameters);
trackSelector.setParameters(builder.build());
trackSelector.setParameters(builder.build());
verify(invalidationListener, times(1)).onTrackSelectionsInvalidated();
}
......@@ -122,15 +121,14 @@ public final class DefaultTrackSelectorTest {
@Test
public void testSelectTracksSelectPreferredAudioLanguage()
throws Exception {
Parameters parameters = DEFAULT_PARAMETERS.withPreferredAudioLanguage("en");
trackSelector.setParameters(parameters);
trackSelector.setParameters(new ParametersBuilder().setPreferredAudioLanguage("eng").build());
Format frAudioFormat =
Format.createAudioSampleFormat("audio", MimeTypes.AUDIO_AAC, null, Format.NO_VALUE,
Format.NO_VALUE, 2, 44100, null, null, 0, "fr");
Format.NO_VALUE, 2, 44100, null, null, 0, "fra");
Format enAudioFormat =
Format.createAudioSampleFormat("audio", MimeTypes.AUDIO_AAC, null, Format.NO_VALUE,
Format.NO_VALUE, 2, 44100, null, null, 0, "en");
Format.NO_VALUE, 2, 44100, null, null, 0, "eng");
TrackSelectorResult result = trackSelector.selectTracks(
new RendererCapabilities[] {ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES},
......@@ -146,19 +144,18 @@ public final class DefaultTrackSelectorTest {
@Test
public void testSelectTracksSelectPreferredAudioLanguageOverSelectionFlag()
throws Exception {
Parameters parameters = DEFAULT_PARAMETERS.withPreferredAudioLanguage("en");
trackSelector.setParameters(parameters);
trackSelector.setParameters(new ParametersBuilder().setPreferredAudioLanguage("eng").build());
Format frAudioFormat =
Format.createAudioSampleFormat("audio", MimeTypes.AUDIO_AAC, null, Format.NO_VALUE,
Format.NO_VALUE, 2, 44100, null, null, C.SELECTION_FLAG_DEFAULT, "fr");
Format.NO_VALUE, 2, 44100, null, null, C.SELECTION_FLAG_DEFAULT, "fra");
Format enAudioFormat =
Format.createAudioSampleFormat("audio", MimeTypes.AUDIO_AAC, null, Format.NO_VALUE,
Format.NO_VALUE, 2, 44100, null, null, 0, "en");
Format.NO_VALUE, 2, 44100, null, null, 0, "eng");
TrackSelectorResult result = trackSelector.selectTracks(
new RendererCapabilities[] {ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES},
singleTrackGroup(frAudioFormat, enAudioFormat));
wrapFormats(frAudioFormat, enAudioFormat));
assertThat(result.selections.get(0).getSelectedFormat()).isEqualTo(enAudioFormat);
}
......@@ -168,8 +165,7 @@ public final class DefaultTrackSelectorTest {
* track that exceed renderer's capabilities.
*/
@Test
public void testSelectTracksPreferTrackWithinCapabilities()
throws Exception {
public void testSelectTracksPreferTrackWithinCapabilities() throws Exception {
Format supportedFormat =
Format.createAudioSampleFormat("supportedFormat", MimeTypes.AUDIO_AAC, null,
Format.NO_VALUE, Format.NO_VALUE, 2, 44100, null, null, 0, null);
......@@ -197,7 +193,6 @@ public final class DefaultTrackSelectorTest {
@Test
public void testSelectTracksWithNoTrackWithinCapabilitiesSelectExceededCapabilityTrack()
throws Exception {
Format audioFormat =
Format.createAudioSampleFormat("audio", MimeTypes.AUDIO_AAC, null, Format.NO_VALUE,
Format.NO_VALUE, 2, 44100, null, null, 0, null);
......@@ -216,8 +211,8 @@ public final class DefaultTrackSelectorTest {
@Test
public void testSelectTracksWithNoTrackWithinCapabilitiesAndSetByParamsReturnNoSelection()
throws Exception {
Parameters parameters = DEFAULT_PARAMETERS.withExceedRendererCapabilitiesIfNecessary(false);
trackSelector.setParameters(parameters);
trackSelector.setParameters(
new ParametersBuilder().setExceedRendererCapabilitiesIfNecessary(false).build());
Format audioFormat =
Format.createAudioSampleFormat("audio", MimeTypes.AUDIO_AAC, null, Format.NO_VALUE,
......@@ -264,15 +259,14 @@ public final class DefaultTrackSelectorTest {
@Test
public void testSelectTracksPreferTrackWithinCapabilitiesOverPreferredLanguage()
throws Exception {
Parameters parameters = DEFAULT_PARAMETERS.withPreferredAudioLanguage("en");
trackSelector.setParameters(parameters);
trackSelector.setParameters(new ParametersBuilder().setPreferredAudioLanguage("eng").build());
Format supportedFrFormat =
Format.createAudioSampleFormat("supportedFormat", MimeTypes.AUDIO_AAC, null,
Format.NO_VALUE, Format.NO_VALUE, 2, 44100, null, null, 0, "fr");
Format.NO_VALUE, Format.NO_VALUE, 2, 44100, null, null, 0, "fra");
Format exceededEnFormat =
Format.createAudioSampleFormat("exceededFormat", MimeTypes.AUDIO_AAC, null,
Format.NO_VALUE, Format.NO_VALUE, 2, 44100, null, null, 0, "en");
Format.NO_VALUE, Format.NO_VALUE, 2, 44100, null, null, 0, "eng");
Map<String, Integer> mappedCapabilities = new HashMap<>();
mappedCapabilities.put(exceededEnFormat.id, FORMAT_EXCEEDS_CAPABILITIES);
......@@ -295,15 +289,14 @@ public final class DefaultTrackSelectorTest {
@Test
public void testSelectTracksPreferTrackWithinCapabilitiesOverSelectionFlagAndPreferredLanguage()
throws Exception {
Parameters parameters = DEFAULT_PARAMETERS.withPreferredAudioLanguage("en");
trackSelector.setParameters(parameters);
trackSelector.setParameters(new ParametersBuilder().setPreferredAudioLanguage("eng").build());
Format supportedFrFormat =
Format.createAudioSampleFormat("supportedFormat", MimeTypes.AUDIO_AAC, null,
Format.NO_VALUE, Format.NO_VALUE, 2, 44100, null, null, 0, "fr");
Format.NO_VALUE, Format.NO_VALUE, 2, 44100, null, null, 0, "fra");
Format exceededDefaultSelectionEnFormat =
Format.createAudioSampleFormat("exceededFormat", MimeTypes.AUDIO_AAC, null,
Format.NO_VALUE, Format.NO_VALUE, 2, 44100, null, null, C.SELECTION_FLAG_DEFAULT, "en");
Format.createAudioSampleFormat("exceededFormat", MimeTypes.AUDIO_AAC, null, Format.NO_VALUE,
Format.NO_VALUE, 2, 44100, null, null, C.SELECTION_FLAG_DEFAULT, "eng");
Map<String, Integer> mappedCapabilities = new HashMap<>();
mappedCapabilities.put(exceededDefaultSelectionEnFormat.id, FORMAT_EXCEEDS_CAPABILITIES);
......@@ -561,12 +554,14 @@ public final class DefaultTrackSelectorTest {
wrapFormats(spanish, german, undeterminedUnd, undeterminedNull));
assertThat(result.selections.get(0)).isNull();
trackSelector.setParameters(DEFAULT_PARAMETERS.withSelectUndeterminedTextLanguage(true));
trackSelector.setParameters(
new ParametersBuilder().setSelectUndeterminedTextLanguage(true).build());
result = trackSelector.selectTracks(textRendererCapabilites,
wrapFormats(spanish, german, undeterminedUnd, undeterminedNull));
assertThat(result.selections.get(0).getFormat(0)).isSameAs(undeterminedUnd);
trackSelector.setParameters(DEFAULT_PARAMETERS.withPreferredTextLanguage("spa"));
ParametersBuilder builder = new ParametersBuilder().setPreferredTextLanguage("spa");
trackSelector.setParameters(builder.build());
result = trackSelector.selectTracks(textRendererCapabilites,
wrapFormats(spanish, german, undeterminedUnd, undeterminedNull));
assertThat(result.selections.get(0).getFormat(0)).isSameAs(spanish);
......@@ -575,8 +570,7 @@ public final class DefaultTrackSelectorTest {
wrapFormats(german, undeterminedUnd, undeterminedNull));
assertThat(result.selections.get(0)).isNull();
trackSelector.setParameters(
trackSelector.getParameters().withSelectUndeterminedTextLanguage(true));
trackSelector.setParameters(builder.setSelectUndeterminedTextLanguage(true).build());
result = trackSelector.selectTracks(textRendererCapabilites,
wrapFormats(german, undeterminedUnd, undeterminedNull));
assertThat(result.selections.get(0).getFormat(0)).isSameAs(undeterminedUnd);
......@@ -596,8 +590,7 @@ public final class DefaultTrackSelectorTest {
@Test
public void testSelectTracksWithinCapabilitiesAndForceLowestBitrateSelectLowerBitrate()
throws Exception {
Parameters parameters = DEFAULT_PARAMETERS.withForceLowestBitrate(true);
trackSelector.setParameters(parameters);
trackSelector.setParameters(new ParametersBuilder().setForceLowestBitrate(true).build());
Format lowerBitrateFormat =
Format.createAudioSampleFormat("audioFormat", MimeTypes.AUDIO_AAC, null, 15000,
......
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