mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
Fix comments
This commit is contained in:
parent
50582417cb
commit
7bfde6a5ea
5 changed files with 89 additions and 95 deletions
|
|
@ -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 {
|
||||||
}
|
}
|
||||||
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;
|
||||||
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 {
|
||||||
// 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 {
|
||||||
}
|
}
|
||||||
|
|
||||||
@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 {
|
||||||
viewportHeight,
|
viewportHeight,
|
||||||
viewportOrientationMayChange,
|
viewportOrientationMayChange,
|
||||||
// Audio
|
// Audio
|
||||||
preferredAudioLanguage,
|
preferredAudioLanguages,
|
||||||
maxAudioChannelCount,
|
maxAudioChannelCount,
|
||||||
maxAudioBitrate,
|
maxAudioBitrate,
|
||||||
exceedAudioConstraintsIfNecessary,
|
exceedAudioConstraintsIfNecessary,
|
||||||
|
|
@ -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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
: 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 {
|
||||||
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 {
|
||||||
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;
|
||||||
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 {
|
||||||
*/
|
*/
|
||||||
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 {
|
||||||
*/
|
*/
|
||||||
@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 {
|
||||||
* 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 {
|
||||||
/**
|
/**
|
||||||
* 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 {
|
||||||
/**
|
/**
|
||||||
* 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 {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
* {@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 {
|
||||||
@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 {
|
||||||
@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 {
|
||||||
|
|
||||||
/* 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 {
|
||||||
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 {
|
||||||
@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 {
|
||||||
|
|
||||||
@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 {
|
||||||
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 {
|
||||||
// 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 {
|
||||||
// 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 {
|
||||||
*/
|
*/
|
||||||
@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 {
|
||||||
*/
|
*/
|
||||||
@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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
|
|
||||||
// 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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
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);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue