Commit 7bfde6a5 by Corentin Zuber

Fix comments

parent 50582417
...@@ -654,7 +654,7 @@ public final class DownloadHelper { ...@@ -654,7 +654,7 @@ public final class DownloadHelper {
} }
} }
for (String language : languages) { for (String language : languages) {
parametersBuilder.setPreferredAudioLanguage(language); parametersBuilder.setPreferredAudioLanguages(language);
addTrackSelection(periodIndex, parametersBuilder.build()); addTrackSelection(periodIndex, parametersBuilder.build());
} }
} }
...@@ -685,7 +685,7 @@ public final class DownloadHelper { ...@@ -685,7 +685,7 @@ public final class DownloadHelper {
} }
parametersBuilder.setSelectUndeterminedTextLanguage(selectUndeterminedTextLanguage); parametersBuilder.setSelectUndeterminedTextLanguage(selectUndeterminedTextLanguage);
for (String language : languages) { for (String language : languages) {
parametersBuilder.setPreferredTextLanguage(language); parametersBuilder.setPreferredTextLanguages(language);
addTrackSelection(periodIndex, parametersBuilder.build()); addTrackSelection(periodIndex, parametersBuilder.build());
} }
} }
......
...@@ -39,6 +39,7 @@ import com.google.android.exoplayer2.source.TrackGroupArray; ...@@ -39,6 +39,7 @@ import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Assertions;
import com.google.android.exoplayer2.util.Util; import com.google.android.exoplayer2.util.Util;
import com.google.common.collect.ComparisonChain; import com.google.common.collect.ComparisonChain;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Ordering; import com.google.common.collect.Ordering;
import com.google.common.primitives.Ints; import com.google.common.primitives.Ints;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -445,14 +446,8 @@ public class DefaultTrackSelector extends MappingTrackSelector { ...@@ -445,14 +446,8 @@ public class DefaultTrackSelector extends MappingTrackSelector {
// Audio // Audio
@Override @Override
public ParametersBuilder setPreferredAudioLanguage(@Nullable String preferredAudioLanguage) { public ParametersBuilder setPreferredAudioLanguages(@Nullable String... preferredAudioLanguages) {
super.setPreferredAudioLanguage(preferredAudioLanguage); super.setPreferredAudioLanguages(preferredAudioLanguages);
return this;
}
@Override
public ParametersBuilder setPreferredAudioLanguage(String[] preferredAudioLanguage) {
super.setPreferredAudioLanguage(preferredAudioLanguage);
return this; return this;
} }
...@@ -547,8 +542,8 @@ public class DefaultTrackSelector extends MappingTrackSelector { ...@@ -547,8 +542,8 @@ public class DefaultTrackSelector extends MappingTrackSelector {
} }
@Override @Override
public ParametersBuilder setPreferredTextLanguage(@Nullable String preferredTextLanguage) { public ParametersBuilder setPreferredTextLanguages(@Nullable String... preferredTextLanguages) {
super.setPreferredTextLanguage(preferredTextLanguage); super.setPreferredTextLanguages(preferredTextLanguages);
return this; return this;
} }
...@@ -773,7 +768,7 @@ public class DefaultTrackSelector extends MappingTrackSelector { ...@@ -773,7 +768,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
viewportHeight, viewportHeight,
viewportOrientationMayChange, viewportOrientationMayChange,
// Audio // Audio
preferredAudioLanguage, preferredAudioLanguages,
maxAudioChannelCount, maxAudioChannelCount,
maxAudioBitrate, maxAudioBitrate,
exceedAudioConstraintsIfNecessary, exceedAudioConstraintsIfNecessary,
...@@ -781,7 +776,7 @@ public class DefaultTrackSelector extends MappingTrackSelector { ...@@ -781,7 +776,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
allowAudioMixedSampleRateAdaptiveness, allowAudioMixedSampleRateAdaptiveness,
allowAudioMixedChannelCountAdaptiveness, allowAudioMixedChannelCountAdaptiveness,
// Text // Text
preferredTextLanguage, preferredTextLanguages,
preferredTextRoleFlags, preferredTextRoleFlags,
selectUndeterminedTextLanguage, selectUndeterminedTextLanguage,
disabledTextTrackSelectionFlags, disabledTextTrackSelectionFlags,
...@@ -1021,7 +1016,7 @@ public class DefaultTrackSelector extends MappingTrackSelector { ...@@ -1021,7 +1016,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
int viewportHeight, int viewportHeight,
boolean viewportOrientationMayChange, boolean viewportOrientationMayChange,
// Audio // Audio
String[] preferredAudioLanguage, ImmutableList<String> preferredAudioLanguage,
int maxAudioChannelCount, int maxAudioChannelCount,
int maxAudioBitrate, int maxAudioBitrate,
boolean exceedAudioConstraintsIfNecessary, boolean exceedAudioConstraintsIfNecessary,
...@@ -1029,7 +1024,7 @@ public class DefaultTrackSelector extends MappingTrackSelector { ...@@ -1029,7 +1024,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
boolean allowAudioMixedSampleRateAdaptiveness, boolean allowAudioMixedSampleRateAdaptiveness,
boolean allowAudioMixedChannelCountAdaptiveness, boolean allowAudioMixedChannelCountAdaptiveness,
// Text // Text
String[] preferredTextLanguage, ImmutableList<String> preferredTextLanguage,
@C.RoleFlags int preferredTextRoleFlags, @C.RoleFlags int preferredTextRoleFlags,
boolean selectUndeterminedTextLanguage, boolean selectUndeterminedTextLanguage,
@C.SelectionFlags int disabledTextTrackSelectionFlags, @C.SelectionFlags int disabledTextTrackSelectionFlags,
...@@ -2613,6 +2608,7 @@ public class DefaultTrackSelector extends MappingTrackSelector { ...@@ -2613,6 +2608,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
private final Parameters parameters; private final Parameters parameters;
private final boolean isWithinRendererCapabilities; private final boolean isWithinRendererCapabilities;
private final int preferredLanguageScore; private final int preferredLanguageScore;
private final int preferredLanguageIndex;
private final int localeLanguageMatchIndex; private final int localeLanguageMatchIndex;
private final int localeLanguageScore; private final int localeLanguageScore;
private final boolean isDefaultSelectionFlag; private final boolean isDefaultSelectionFlag;
...@@ -2626,14 +2622,18 @@ public class DefaultTrackSelector extends MappingTrackSelector { ...@@ -2626,14 +2622,18 @@ public class DefaultTrackSelector extends MappingTrackSelector {
isWithinRendererCapabilities = isWithinRendererCapabilities =
isSupported(formatSupport, /* allowExceedsCapabilities= */ false); isSupported(formatSupport, /* allowExceedsCapabilities= */ false);
int bestLanguageScore = 0; int bestLanguageScore = 0;
for (int i = 0; i < parameters.preferredAudioLanguage.length; i++) { int bestLanguageIndex = 0;
for (int i = 0; i < parameters.preferredAudioLanguages.size(); i++) {
int score = getFormatLanguageScore( int score = getFormatLanguageScore(
format, format,
parameters.preferredAudioLanguage[i], parameters.preferredAudioLanguages.get(i),
/* allowUndeterminedFormatLanguage= */ false); /* allowUndeterminedFormatLanguage= */ false);
score = 1000 * score + parameters.preferredAudioLanguage.length - i; // Priorise the first items in array if (score > 0) {
bestLanguageScore = Math.max(bestLanguageScore, score); bestLanguageIndex = i;
bestLanguageScore = score;
}
} }
preferredLanguageIndex = bestLanguageIndex;
preferredLanguageScore = bestLanguageScore; preferredLanguageScore = bestLanguageScore;
isDefaultSelectionFlag = (format.selectionFlags & C.SELECTION_FLAG_DEFAULT) != 0; isDefaultSelectionFlag = (format.selectionFlags & C.SELECTION_FLAG_DEFAULT) != 0;
channelCount = format.channelCount; channelCount = format.channelCount;
...@@ -2677,6 +2677,10 @@ public class DefaultTrackSelector extends MappingTrackSelector { ...@@ -2677,6 +2677,10 @@ public class DefaultTrackSelector extends MappingTrackSelector {
: FORMAT_VALUE_ORDERING.reverse(); : FORMAT_VALUE_ORDERING.reverse();
return ComparisonChain.start() return ComparisonChain.start()
.compareFalseFirst(this.isWithinRendererCapabilities, other.isWithinRendererCapabilities) .compareFalseFirst(this.isWithinRendererCapabilities, other.isWithinRendererCapabilities)
.compare(
this.preferredLanguageIndex,
other.preferredLanguageIndex,
Ordering.natural().reverse())
.compare(this.preferredLanguageScore, other.preferredLanguageScore) .compare(this.preferredLanguageScore, other.preferredLanguageScore)
.compareFalseFirst(this.isWithinConstraints, other.isWithinConstraints) .compareFalseFirst(this.isWithinConstraints, other.isWithinConstraints)
.compare( .compare(
...@@ -2729,10 +2733,10 @@ public class DefaultTrackSelector extends MappingTrackSelector { ...@@ -2729,10 +2733,10 @@ public class DefaultTrackSelector extends MappingTrackSelector {
isDefault = (maskedSelectionFlags & C.SELECTION_FLAG_DEFAULT) != 0; isDefault = (maskedSelectionFlags & C.SELECTION_FLAG_DEFAULT) != 0;
isForced = (maskedSelectionFlags & C.SELECTION_FLAG_FORCED) != 0; isForced = (maskedSelectionFlags & C.SELECTION_FLAG_FORCED) != 0;
int bestLanguageScore = 0; int bestLanguageScore = 0;
for (int i = 0; i < parameters.preferredTextLanguage.length; i++) { for (int i = 0; i < parameters.preferredTextLanguages.size(); i++) {
int score = getFormatLanguageScore( int score = getFormatLanguageScore(
format, parameters.preferredTextLanguage[i], parameters.selectUndeterminedTextLanguage); format, parameters.preferredTextLanguages.get(i), parameters.selectUndeterminedTextLanguage);
score = 1000 * score + parameters.preferredTextLanguage.length - i; // Priorise the first items in array score = 1000 * score + parameters.preferredTextLanguages.size() - i; // Priorise the first items in array
bestLanguageScore = Math.max(bestLanguageScore, score); bestLanguageScore = Math.max(bestLanguageScore, score);
} }
preferredLanguageScore = bestLanguageScore; preferredLanguageScore = bestLanguageScore;
...@@ -2746,7 +2750,7 @@ public class DefaultTrackSelector extends MappingTrackSelector { ...@@ -2746,7 +2750,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
getFormatLanguageScore(format, selectedAudioLanguage, selectedAudioLanguageUndetermined); getFormatLanguageScore(format, selectedAudioLanguage, selectedAudioLanguageUndetermined);
isWithinConstraints = isWithinConstraints =
preferredLanguageScore > 0 preferredLanguageScore > 0
|| (parameters.preferredTextLanguage.length == 0 && preferredRoleFlagsScore > 0) || (parameters.preferredTextLanguages.size() == 0 && preferredRoleFlagsScore > 0)
|| isDefault || isDefault
|| (isForced && selectedAudioLanguageScore > 0); || (isForced && selectedAudioLanguageScore > 0);
} }
......
...@@ -24,6 +24,8 @@ import androidx.annotation.Nullable; ...@@ -24,6 +24,8 @@ import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi; import androidx.annotation.RequiresApi;
import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.util.Util; import com.google.android.exoplayer2.util.Util;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import java.util.Arrays; import java.util.Arrays;
import java.util.Locale; import java.util.Locale;
...@@ -36,8 +38,8 @@ public class TrackSelectionParameters implements Parcelable { ...@@ -36,8 +38,8 @@ public class TrackSelectionParameters implements Parcelable {
*/ */
public static class Builder { public static class Builder {
/* package */ String[] preferredAudioLanguage; /* package */ ImmutableList<String> preferredAudioLanguages;
/* package */ String[] preferredTextLanguage; /* package */ ImmutableList<String> preferredTextLanguages;
@C.RoleFlags /* package */ int preferredTextRoleFlags; @C.RoleFlags /* package */ int preferredTextRoleFlags;
/* package */ boolean selectUndeterminedTextLanguage; /* package */ boolean selectUndeterminedTextLanguage;
@C.SelectionFlags /* package */ int disabledTextTrackSelectionFlags; @C.SelectionFlags /* package */ int disabledTextTrackSelectionFlags;
...@@ -59,8 +61,8 @@ public class TrackSelectionParameters implements Parcelable { ...@@ -59,8 +61,8 @@ public class TrackSelectionParameters implements Parcelable {
*/ */
@Deprecated @Deprecated
public Builder() { public Builder() {
preferredAudioLanguage = new String[0]; preferredAudioLanguages = ImmutableList.of();
preferredTextLanguage = new String[0]; preferredTextLanguages = ImmutableList.of();
preferredTextRoleFlags = 0; preferredTextRoleFlags = 0;
selectUndeterminedTextLanguage = false; selectUndeterminedTextLanguage = false;
disabledTextTrackSelectionFlags = 0; disabledTextTrackSelectionFlags = 0;
...@@ -71,8 +73,8 @@ public class TrackSelectionParameters implements Parcelable { ...@@ -71,8 +73,8 @@ public class TrackSelectionParameters implements Parcelable {
* the builder are obtained. * the builder are obtained.
*/ */
/* package */ Builder(TrackSelectionParameters initialValues) { /* package */ Builder(TrackSelectionParameters initialValues) {
preferredAudioLanguage = initialValues.preferredAudioLanguage; preferredAudioLanguages = initialValues.preferredAudioLanguages;
preferredTextLanguage = initialValues.preferredTextLanguage; preferredTextLanguages = initialValues.preferredTextLanguages;
preferredTextRoleFlags = initialValues.preferredTextRoleFlags; preferredTextRoleFlags = initialValues.preferredTextRoleFlags;
selectUndeterminedTextLanguage = initialValues.selectUndeterminedTextLanguage; selectUndeterminedTextLanguage = initialValues.selectUndeterminedTextLanguage;
disabledTextTrackSelectionFlags = initialValues.disabledTextTrackSelectionFlags; disabledTextTrackSelectionFlags = initialValues.disabledTextTrackSelectionFlags;
...@@ -81,20 +83,16 @@ public class TrackSelectionParameters implements Parcelable { ...@@ -81,20 +83,16 @@ public class TrackSelectionParameters implements Parcelable {
/** /**
* Sets the preferred language for audio and forced text tracks. * Sets the preferred language for audio and forced text tracks.
* *
* @param preferredAudioLanguage Preferred audio language as an IETF BCP 47 conformant tag, or * @param preferredAudioLanguages Preferred audio language as an IETF BCP 47 conformant tag, or
* {@code null} to select the default track, or the first track if there's no default. * {@code null} to select the default track, or the first track if there's no default.
* @return This builder. * @return This builder.
*/ */
public Builder setPreferredAudioLanguage(@Nullable String preferredAudioLanguage) { public Builder setPreferredAudioLanguages(@Nullable String... preferredAudioLanguages) {
if (preferredAudioLanguage == null) { if (preferredAudioLanguages == null) {
return setPreferredAudioLanguage(new String[0]); this.preferredAudioLanguages = ImmutableList.of();
} else { } else {
return setPreferredAudioLanguage(new String[] { preferredAudioLanguage }); this.preferredAudioLanguages = ImmutableList.copyOf(preferredAudioLanguages);
} }
}
public Builder setPreferredAudioLanguage(String[] preferredAudioLanguage) {
this.preferredAudioLanguage = preferredAudioLanguage;
return this; return this;
} }
...@@ -118,20 +116,16 @@ public class TrackSelectionParameters implements Parcelable { ...@@ -118,20 +116,16 @@ public class TrackSelectionParameters implements Parcelable {
/** /**
* Sets the preferred language for text tracks. * Sets the preferred language for text tracks.
* *
* @param preferredTextLanguage Preferred text language as an IETF BCP 47 conformant tag, or * @param preferredTextLanguages Preferred text language as an IETF BCP 47 conformant tag, or
* {@code null} to select the default track if there is one, or no track otherwise. * {@code null} to select the default track if there is one, or no track otherwise.
* @return This builder. * @return This builder.
*/ */
public Builder setPreferredTextLanguage(@Nullable String preferredTextLanguage) { public Builder setPreferredTextLanguages(@Nullable String... preferredTextLanguages) {
if (preferredTextLanguage == null) { if (preferredTextLanguages == null) {
return setPreferredTextLanguage(new String[0]); this.preferredTextLanguages = ImmutableList.of();
} else { } else {
return setPreferredTextLanguage(new String[]{preferredTextLanguage}); this.preferredTextLanguages = ImmutableList.copyOf(preferredTextLanguages);
} }
}
public Builder setPreferredTextLanguage(String[] preferredTextLanguage) {
this.preferredTextLanguage = preferredTextLanguage;
return this; return this;
} }
...@@ -148,7 +142,7 @@ public class TrackSelectionParameters implements Parcelable { ...@@ -148,7 +142,7 @@ public class TrackSelectionParameters implements Parcelable {
/** /**
* Sets whether a text track with undetermined language should be selected if no track with * Sets whether a text track with undetermined language should be selected if no track with
* {@link #setPreferredTextLanguage(String)} is available, or if the preferred language is * {@link #setPreferredTextLanguages(String...)} is available, or if the preferred language is
* unset. * unset.
* *
* @param selectUndeterminedTextLanguage Whether a text track with undetermined language should * @param selectUndeterminedTextLanguage Whether a text track with undetermined language should
...@@ -177,9 +171,9 @@ public class TrackSelectionParameters implements Parcelable { ...@@ -177,9 +171,9 @@ public class TrackSelectionParameters implements Parcelable {
public TrackSelectionParameters build() { public TrackSelectionParameters build() {
return new TrackSelectionParameters( return new TrackSelectionParameters(
// Audio // Audio
preferredAudioLanguage, preferredAudioLanguages,
// Text // Text
preferredTextLanguage, preferredTextLanguages,
preferredTextRoleFlags, preferredTextRoleFlags,
selectUndeterminedTextLanguage, selectUndeterminedTextLanguage,
disabledTextTrackSelectionFlags); disabledTextTrackSelectionFlags);
...@@ -201,7 +195,7 @@ public class TrackSelectionParameters implements Parcelable { ...@@ -201,7 +195,7 @@ public class TrackSelectionParameters implements Parcelable {
preferredTextRoleFlags = C.ROLE_FLAG_CAPTION | C.ROLE_FLAG_DESCRIBES_MUSIC_AND_SOUND; preferredTextRoleFlags = C.ROLE_FLAG_CAPTION | C.ROLE_FLAG_DESCRIBES_MUSIC_AND_SOUND;
Locale preferredLocale = captioningManager.getLocale(); Locale preferredLocale = captioningManager.getLocale();
if (preferredLocale != null) { if (preferredLocale != null) {
preferredTextLanguage = new String[] { Util.getLocaleLanguageTag(preferredLocale) }; preferredTextLanguages = ImmutableList.of(Util.getLocaleLanguageTag(preferredLocale));
} }
} }
} }
...@@ -238,13 +232,13 @@ public class TrackSelectionParameters implements Parcelable { ...@@ -238,13 +232,13 @@ public class TrackSelectionParameters implements Parcelable {
* {@code null} selects the default track, or the first track if there's no default. The default * {@code null} selects the default track, or the first track if there's no default. The default
* value is {@code null}. * value is {@code null}.
*/ */
public final String[] preferredAudioLanguage; public final ImmutableList<String> preferredAudioLanguages;
/** /**
* The preferred language for text tracks as an IETF BCP 47 conformant tag. {@code null} selects * The preferred language for text tracks as an IETF BCP 47 conformant tag. {@code null} selects
* the default track if there is one, or no track otherwise. The default value is {@code null}, or * the default track if there is one, or no track otherwise. The default value is {@code null}, or
* the language of the accessibility {@link CaptioningManager} if enabled. * the language of the accessibility {@link CaptioningManager} if enabled.
*/ */
public final String[] preferredTextLanguage; public final ImmutableList<String> preferredTextLanguages;
/** /**
* The preferred {@link C.RoleFlags} for text tracks. {@code 0} selects the default track if there * The preferred {@link C.RoleFlags} for text tracks. {@code 0} selects the default track if there
* is one, or no track otherwise. The default value is {@code 0}, or {@link C#ROLE_FLAG_SUBTITLE} * is one, or no track otherwise. The default value is {@code 0}, or {@link C#ROLE_FLAG_SUBTITLE}
...@@ -254,7 +248,7 @@ public class TrackSelectionParameters implements Parcelable { ...@@ -254,7 +248,7 @@ public class TrackSelectionParameters implements Parcelable {
@C.RoleFlags public final int preferredTextRoleFlags; @C.RoleFlags public final int preferredTextRoleFlags;
/** /**
* Whether a text track with undetermined language should be selected if no track with {@link * Whether a text track with undetermined language should be selected if no track with {@link
* #preferredTextLanguage} is available, or if {@link #preferredTextLanguage} is unset. The * #preferredTextLanguages} is available, or if {@link #preferredTextLanguages} is unset. The
* default value is {@code false}. * default value is {@code false}.
*/ */
public final boolean selectUndeterminedTextLanguage; public final boolean selectUndeterminedTextLanguage;
...@@ -265,21 +259,15 @@ public class TrackSelectionParameters implements Parcelable { ...@@ -265,21 +259,15 @@ public class TrackSelectionParameters implements Parcelable {
@C.SelectionFlags public final int disabledTextTrackSelectionFlags; @C.SelectionFlags public final int disabledTextTrackSelectionFlags;
/* package */ TrackSelectionParameters( /* package */ TrackSelectionParameters(
String[] preferredAudioLanguage, ImmutableList<String> preferredAudioLanguages,
String[] preferredTextLanguage, ImmutableList<String> preferredTextLanguages,
@C.RoleFlags int preferredTextRoleFlags, @C.RoleFlags int preferredTextRoleFlags,
boolean selectUndeterminedTextLanguage, boolean selectUndeterminedTextLanguage,
@C.SelectionFlags int disabledTextTrackSelectionFlags) { @C.SelectionFlags int disabledTextTrackSelectionFlags) {
// Audio // Audio
this.preferredAudioLanguage = new String[preferredAudioLanguage.length]; this.preferredAudioLanguages = preferredAudioLanguages;
for (int i = 0; i < preferredAudioLanguage.length; i++) {
this.preferredAudioLanguage[i] = Util.normalizeLanguageCode(preferredAudioLanguage[i]);
}
// Text // Text
this.preferredTextLanguage = new String[preferredAudioLanguage.length]; this.preferredTextLanguages = preferredTextLanguages;
for (int i = 0; i < preferredTextLanguage.length; i++) {
this.preferredTextLanguage[i] = Util.normalizeLanguageCode(preferredTextLanguage[i]);
}
this.preferredTextRoleFlags = preferredTextRoleFlags; this.preferredTextRoleFlags = preferredTextRoleFlags;
this.selectUndeterminedTextLanguage = selectUndeterminedTextLanguage; this.selectUndeterminedTextLanguage = selectUndeterminedTextLanguage;
this.disabledTextTrackSelectionFlags = disabledTextTrackSelectionFlags; this.disabledTextTrackSelectionFlags = disabledTextTrackSelectionFlags;
...@@ -287,15 +275,17 @@ public class TrackSelectionParameters implements Parcelable { ...@@ -287,15 +275,17 @@ public class TrackSelectionParameters implements Parcelable {
/* package */ TrackSelectionParameters(Parcel in) { /* package */ TrackSelectionParameters(Parcel in) {
int preferredAudioLanguageSize = in.readInt(); int preferredAudioLanguageSize = in.readInt();
this.preferredAudioLanguage = new String[preferredAudioLanguageSize]; String[] preferredAudioLanguages = new String[preferredAudioLanguageSize];
for (int i = 0; i < preferredAudioLanguageSize; i++) { for (int i = 0; i < preferredAudioLanguageSize; i++) {
preferredAudioLanguage[i] = in.readString(); preferredAudioLanguages[i] = in.readString();
} }
this.preferredAudioLanguages = ImmutableList.copyOf(preferredAudioLanguages);
int preferredTextLanguageSize = in.readInt(); int preferredTextLanguageSize = in.readInt();
this.preferredTextLanguage = new String[preferredTextLanguageSize]; String[] preferredTextLanguages = new String[preferredTextLanguageSize];
for (int i = 0; i < preferredTextLanguageSize; i++) { for (int i = 0; i < preferredTextLanguageSize; i++) {
preferredTextLanguage[i] = in.readString(); preferredTextLanguages[i] = in.readString();
} }
this.preferredTextLanguages = ImmutableList.copyOf(preferredTextLanguages);
this.preferredTextRoleFlags = in.readInt(); this.preferredTextRoleFlags = in.readInt();
this.selectUndeterminedTextLanguage = Util.readBoolean(in); this.selectUndeterminedTextLanguage = Util.readBoolean(in);
this.disabledTextTrackSelectionFlags = in.readInt(); this.disabledTextTrackSelectionFlags = in.readInt();
...@@ -316,8 +306,8 @@ public class TrackSelectionParameters implements Parcelable { ...@@ -316,8 +306,8 @@ public class TrackSelectionParameters implements Parcelable {
return false; return false;
} }
TrackSelectionParameters other = (TrackSelectionParameters) obj; TrackSelectionParameters other = (TrackSelectionParameters) obj;
return Arrays.equals(preferredAudioLanguage, other.preferredAudioLanguage) return preferredAudioLanguages.equals(other.preferredAudioLanguages)
&& Arrays.equals(preferredTextLanguage, other.preferredTextLanguage) && preferredTextLanguages.equals(other.preferredTextLanguages)
&& preferredTextRoleFlags == other.preferredTextRoleFlags && preferredTextRoleFlags == other.preferredTextRoleFlags
&& selectUndeterminedTextLanguage == other.selectUndeterminedTextLanguage && selectUndeterminedTextLanguage == other.selectUndeterminedTextLanguage
&& disabledTextTrackSelectionFlags == other.disabledTextTrackSelectionFlags; && disabledTextTrackSelectionFlags == other.disabledTextTrackSelectionFlags;
...@@ -326,8 +316,8 @@ public class TrackSelectionParameters implements Parcelable { ...@@ -326,8 +316,8 @@ public class TrackSelectionParameters implements Parcelable {
@Override @Override
public int hashCode() { public int hashCode() {
int result = 1; int result = 1;
result = 31 * result + Arrays.hashCode(preferredAudioLanguage); result = 31 * result + preferredAudioLanguages.hashCode();
result = 31 * result + Arrays.hashCode(preferredTextLanguage); result = 31 * result + preferredTextLanguages.hashCode();
result = 31 * result + preferredTextRoleFlags; result = 31 * result + preferredTextRoleFlags;
result = 31 * result + (selectUndeterminedTextLanguage ? 1 : 0); result = 31 * result + (selectUndeterminedTextLanguage ? 1 : 0);
result = 31 * result + disabledTextTrackSelectionFlags; result = 31 * result + disabledTextTrackSelectionFlags;
...@@ -343,12 +333,12 @@ public class TrackSelectionParameters implements Parcelable { ...@@ -343,12 +333,12 @@ public class TrackSelectionParameters implements Parcelable {
@Override @Override
public void writeToParcel(Parcel dest, int flags) { public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(preferredAudioLanguage.length); dest.writeInt(preferredAudioLanguages.size());
for (String s : preferredAudioLanguage) { for (String s : preferredAudioLanguages) {
dest.writeString(s); dest.writeString(s);
} }
dest.writeInt(preferredTextLanguage.length); dest.writeInt(preferredTextLanguages.size());
for (String s : preferredTextLanguage) { for (String s : preferredTextLanguages) {
dest.writeString(s); dest.writeString(s);
} }
dest.writeInt(preferredTextRoleFlags); dest.writeInt(preferredTextRoleFlags);
......
...@@ -251,8 +251,8 @@ public class DownloadHelperTest { ...@@ -251,8 +251,8 @@ public class DownloadHelperTest {
prepareDownloadHelper(downloadHelper); prepareDownloadHelper(downloadHelper);
DefaultTrackSelector.Parameters parameters = DefaultTrackSelector.Parameters parameters =
new DefaultTrackSelector.ParametersBuilder(ApplicationProvider.getApplicationContext()) new DefaultTrackSelector.ParametersBuilder(ApplicationProvider.getApplicationContext())
.setPreferredAudioLanguage("ZH") .setPreferredAudioLanguages("ZH")
.setPreferredTextLanguage("ZH") .setPreferredTextLanguages("ZH")
.setRendererDisabled(/* rendererIndex= */ 2, true) .setRendererDisabled(/* rendererIndex= */ 2, true)
.build(); .build();
...@@ -288,8 +288,8 @@ public class DownloadHelperTest { ...@@ -288,8 +288,8 @@ public class DownloadHelperTest {
// all video tracks to initial video single track selection. // all video tracks to initial video single track selection.
DefaultTrackSelector.Parameters parameters = DefaultTrackSelector.Parameters parameters =
new DefaultTrackSelector.ParametersBuilder(ApplicationProvider.getApplicationContext()) new DefaultTrackSelector.ParametersBuilder(ApplicationProvider.getApplicationContext())
.setPreferredAudioLanguage("ZH") .setPreferredAudioLanguages("ZH")
.setPreferredTextLanguage("US") .setPreferredTextLanguages("US")
.build(); .build();
// Add only to one period selection to verify second period selection is untouched. // Add only to one period selection to verify second period selection is untouched.
...@@ -392,8 +392,8 @@ public class DownloadHelperTest { ...@@ -392,8 +392,8 @@ public class DownloadHelperTest {
// also renderers without any track groups. // also renderers without any track groups.
DefaultTrackSelector.Parameters parameters = DefaultTrackSelector.Parameters parameters =
new DefaultTrackSelector.ParametersBuilder(ApplicationProvider.getApplicationContext()) new DefaultTrackSelector.ParametersBuilder(ApplicationProvider.getApplicationContext())
.setPreferredAudioLanguage("ZH") .setPreferredAudioLanguages("ZH")
.setPreferredTextLanguage("US") .setPreferredTextLanguages("US")
.build(); .build();
downloadHelper.addTrackSelection(/* periodIndex= */ 0, parameters); downloadHelper.addTrackSelection(/* periodIndex= */ 0, parameters);
byte[] data = new byte[10]; byte[] data = new byte[10];
......
...@@ -283,7 +283,7 @@ public final class DefaultTrackSelectorTest { ...@@ -283,7 +283,7 @@ public final class DefaultTrackSelectorTest {
*/ */
@Test @Test
public void setParameterWithNonDefaultParameterNotifyInvalidationListener() { public void setParameterWithNonDefaultParameterNotifyInvalidationListener() {
ParametersBuilder builder = defaultParameters.buildUpon().setPreferredAudioLanguage("eng"); ParametersBuilder builder = defaultParameters.buildUpon().setPreferredAudioLanguages("eng");
trackSelector.setParameters(builder); trackSelector.setParameters(builder);
verify(invalidationListener).onTrackSelectionsInvalidated(); verify(invalidationListener).onTrackSelectionsInvalidated();
} }
...@@ -295,7 +295,7 @@ public final class DefaultTrackSelectorTest { ...@@ -295,7 +295,7 @@ public final class DefaultTrackSelectorTest {
*/ */
@Test @Test
public void setParameterWithSameParametersDoesNotNotifyInvalidationListenerAgain() { public void setParameterWithSameParametersDoesNotNotifyInvalidationListenerAgain() {
ParametersBuilder builder = defaultParameters.buildUpon().setPreferredAudioLanguage("eng"); ParametersBuilder builder = defaultParameters.buildUpon().setPreferredAudioLanguages("eng");
trackSelector.setParameters(builder); trackSelector.setParameters(builder);
trackSelector.setParameters(builder); trackSelector.setParameters(builder);
verify(invalidationListener, times(1)).onTrackSelectionsInvalidated(); verify(invalidationListener, times(1)).onTrackSelectionsInvalidated();
...@@ -369,7 +369,7 @@ public final class DefaultTrackSelectorTest { ...@@ -369,7 +369,7 @@ public final class DefaultTrackSelectorTest {
Format enAudioFormat = formatBuilder.setLanguage("eng").build(); Format enAudioFormat = formatBuilder.setLanguage("eng").build();
TrackGroupArray trackGroups = wrapFormats(frAudioFormat, enAudioFormat); TrackGroupArray trackGroups = wrapFormats(frAudioFormat, enAudioFormat);
trackSelector.setParameters(defaultParameters.buildUpon().setPreferredAudioLanguage("eng")); trackSelector.setParameters(defaultParameters.buildUpon().setPreferredAudioLanguages("eng"));
TrackSelectorResult result = TrackSelectorResult result =
trackSelector.selectTracks( trackSelector.selectTracks(
new RendererCapabilities[] {ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES}, new RendererCapabilities[] {ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES},
...@@ -391,7 +391,7 @@ public final class DefaultTrackSelectorTest { ...@@ -391,7 +391,7 @@ public final class DefaultTrackSelectorTest {
Format enNonDefaultFormat = formatBuilder.setLanguage("eng").setSelectionFlags(0).build(); Format enNonDefaultFormat = formatBuilder.setLanguage("eng").setSelectionFlags(0).build();
TrackGroupArray trackGroups = wrapFormats(frDefaultFormat, enNonDefaultFormat); TrackGroupArray trackGroups = wrapFormats(frDefaultFormat, enNonDefaultFormat);
trackSelector.setParameters(defaultParameters.buildUpon().setPreferredAudioLanguage("eng")); trackSelector.setParameters(defaultParameters.buildUpon().setPreferredAudioLanguages("eng"));
TrackSelectorResult result = TrackSelectorResult result =
trackSelector.selectTracks( trackSelector.selectTracks(
new RendererCapabilities[] {ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES}, new RendererCapabilities[] {ALL_AUDIO_FORMAT_SUPPORTED_RENDERER_CAPABILITIES},
...@@ -511,7 +511,7 @@ public final class DefaultTrackSelectorTest { ...@@ -511,7 +511,7 @@ public final class DefaultTrackSelectorTest {
RendererCapabilities mappedAudioRendererCapabilities = RendererCapabilities mappedAudioRendererCapabilities =
new FakeMappedRendererCapabilities(C.TRACK_TYPE_AUDIO, mappedCapabilities); new FakeMappedRendererCapabilities(C.TRACK_TYPE_AUDIO, mappedCapabilities);
trackSelector.setParameters(defaultParameters.buildUpon().setPreferredAudioLanguage("eng")); trackSelector.setParameters(defaultParameters.buildUpon().setPreferredAudioLanguages("eng"));
TrackSelectorResult result = TrackSelectorResult result =
trackSelector.selectTracks( trackSelector.selectTracks(
new RendererCapabilities[] {mappedAudioRendererCapabilities}, new RendererCapabilities[] {mappedAudioRendererCapabilities},
...@@ -546,7 +546,7 @@ public final class DefaultTrackSelectorTest { ...@@ -546,7 +546,7 @@ public final class DefaultTrackSelectorTest {
RendererCapabilities mappedAudioRendererCapabilities = RendererCapabilities mappedAudioRendererCapabilities =
new FakeMappedRendererCapabilities(C.TRACK_TYPE_AUDIO, mappedCapabilities); new FakeMappedRendererCapabilities(C.TRACK_TYPE_AUDIO, mappedCapabilities);
trackSelector.setParameters(defaultParameters.buildUpon().setPreferredAudioLanguage("eng")); trackSelector.setParameters(defaultParameters.buildUpon().setPreferredAudioLanguages("eng"));
TrackSelectorResult result = TrackSelectorResult result =
trackSelector.selectTracks( trackSelector.selectTracks(
new RendererCapabilities[] {mappedAudioRendererCapabilities}, new RendererCapabilities[] {mappedAudioRendererCapabilities},
...@@ -841,7 +841,7 @@ public final class DefaultTrackSelectorTest { ...@@ -841,7 +841,7 @@ public final class DefaultTrackSelectorTest {
// There is a preferred language, so a language-matching track flagged as default should // There is a preferred language, so a language-matching track flagged as default should
// be selected, and the one without forced flag should be preferred. // be selected, and the one without forced flag should be preferred.
trackSelector.setParameters(defaultParameters.buildUpon().setPreferredTextLanguage("eng")); trackSelector.setParameters(defaultParameters.buildUpon().setPreferredTextLanguages("eng"));
result = trackSelector.selectTracks(textRendererCapabilities, trackGroups, periodId, TIMELINE); result = trackSelector.selectTracks(textRendererCapabilities, trackGroups, periodId, TIMELINE);
assertFixedSelection(result.selections.get(0), trackGroups, defaultOnly); assertFixedSelection(result.selections.get(0), trackGroups, defaultOnly);
...@@ -929,7 +929,7 @@ public final class DefaultTrackSelectorTest { ...@@ -929,7 +929,7 @@ public final class DefaultTrackSelectorTest {
result = trackSelector.selectTracks(textRendererCapabilites, trackGroups, periodId, TIMELINE); result = trackSelector.selectTracks(textRendererCapabilites, trackGroups, periodId, TIMELINE);
assertFixedSelection(result.selections.get(0), trackGroups, undeterminedUnd); assertFixedSelection(result.selections.get(0), trackGroups, undeterminedUnd);
ParametersBuilder builder = defaultParameters.buildUpon().setPreferredTextLanguage("spa"); ParametersBuilder builder = defaultParameters.buildUpon().setPreferredTextLanguages("spa");
trackSelector.setParameters(builder); trackSelector.setParameters(builder);
result = trackSelector.selectTracks(textRendererCapabilites, trackGroups, periodId, TIMELINE); result = trackSelector.selectTracks(textRendererCapabilites, trackGroups, periodId, TIMELINE);
assertFixedSelection(result.selections.get(0), trackGroups, spanish); assertFixedSelection(result.selections.get(0), trackGroups, spanish);
...@@ -984,13 +984,13 @@ public final class DefaultTrackSelectorTest { ...@@ -984,13 +984,13 @@ public final class DefaultTrackSelectorTest {
assertNoSelection(result.selections.get(1)); assertNoSelection(result.selections.get(1));
// Explicit language preference for english. First renderer should be used. // Explicit language preference for english. First renderer should be used.
trackSelector.setParameters(defaultParameters.buildUpon().setPreferredTextLanguage("en")); trackSelector.setParameters(defaultParameters.buildUpon().setPreferredTextLanguages("en"));
result = trackSelector.selectTracks(rendererCapabilities, trackGroups, periodId, TIMELINE); result = trackSelector.selectTracks(rendererCapabilities, trackGroups, periodId, TIMELINE);
assertFixedSelection(result.selections.get(0), trackGroups, english); assertFixedSelection(result.selections.get(0), trackGroups, english);
assertNoSelection(result.selections.get(1)); assertNoSelection(result.selections.get(1));
// Explicit language preference for German. Second renderer should be used. // Explicit language preference for German. Second renderer should be used.
trackSelector.setParameters(defaultParameters.buildUpon().setPreferredTextLanguage("de")); trackSelector.setParameters(defaultParameters.buildUpon().setPreferredTextLanguages("de"));
result = trackSelector.selectTracks(rendererCapabilities, trackGroups, periodId, TIMELINE); result = trackSelector.selectTracks(rendererCapabilities, trackGroups, periodId, TIMELINE);
assertNoSelection(result.selections.get(0)); assertNoSelection(result.selections.get(0));
assertFixedSelection(result.selections.get(1), trackGroups, german); assertFixedSelection(result.selections.get(1), trackGroups, german);
...@@ -1290,13 +1290,13 @@ public final class DefaultTrackSelectorTest { ...@@ -1290,13 +1290,13 @@ public final class DefaultTrackSelectorTest {
assertNoSelection(result.selections.get(1)); assertNoSelection(result.selections.get(1));
// Explicit language preference for english. First renderer should be used. // Explicit language preference for english. First renderer should be used.
trackSelector.setParameters(defaultParameters.buildUpon().setPreferredAudioLanguage("en")); trackSelector.setParameters(defaultParameters.buildUpon().setPreferredAudioLanguages("en"));
result = trackSelector.selectTracks(rendererCapabilities, trackGroups, periodId, TIMELINE); result = trackSelector.selectTracks(rendererCapabilities, trackGroups, periodId, TIMELINE);
assertFixedSelection(result.selections.get(0), trackGroups, english); assertFixedSelection(result.selections.get(0), trackGroups, english);
assertNoSelection(result.selections.get(1)); assertNoSelection(result.selections.get(1));
// Explicit language preference for German. Second renderer should be used. // Explicit language preference for German. Second renderer should be used.
trackSelector.setParameters(defaultParameters.buildUpon().setPreferredAudioLanguage("de")); trackSelector.setParameters(defaultParameters.buildUpon().setPreferredAudioLanguages("de"));
result = trackSelector.selectTracks(rendererCapabilities, trackGroups, periodId, TIMELINE); result = trackSelector.selectTracks(rendererCapabilities, trackGroups, periodId, TIMELINE);
assertNoSelection(result.selections.get(0)); assertNoSelection(result.selections.get(0));
assertFixedSelection(result.selections.get(1), trackGroups, german); assertFixedSelection(result.selections.get(1), trackGroups, german);
......
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