Commit 73d6a0f2 by Yannick RUI

Automatically show closed captioning/hearing impaired text track

parent a9b93d7e
...@@ -433,6 +433,12 @@ public class DefaultTrackSelector extends MappingTrackSelector { ...@@ -433,6 +433,12 @@ public class DefaultTrackSelector extends MappingTrackSelector {
} }
@Override @Override
public ParametersBuilder setPreferredRoleFlags(int preferredRoleFlags) {
super.setPreferredRoleFlags(preferredRoleFlags);
return this;
}
@Override
public ParametersBuilder setSelectUndeterminedTextLanguage( public ParametersBuilder setSelectUndeterminedTextLanguage(
boolean selectUndeterminedTextLanguage) { boolean selectUndeterminedTextLanguage) {
super.setSelectUndeterminedTextLanguage(selectUndeterminedTextLanguage); super.setSelectUndeterminedTextLanguage(selectUndeterminedTextLanguage);
...@@ -642,6 +648,7 @@ public class DefaultTrackSelector extends MappingTrackSelector { ...@@ -642,6 +648,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
allowAudioMixedSampleRateAdaptiveness, allowAudioMixedSampleRateAdaptiveness,
// Text // Text
preferredTextLanguage, preferredTextLanguage,
preferredRoleFlags,
selectUndeterminedTextLanguage, selectUndeterminedTextLanguage,
disabledTextTrackSelectionFlags, disabledTextTrackSelectionFlags,
// General // General
...@@ -837,6 +844,7 @@ public class DefaultTrackSelector extends MappingTrackSelector { ...@@ -837,6 +844,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
/* allowAudioMixedSampleRateAdaptiveness= */ false, /* allowAudioMixedSampleRateAdaptiveness= */ false,
// Text // Text
TrackSelectionParameters.DEFAULT.preferredTextLanguage, TrackSelectionParameters.DEFAULT.preferredTextLanguage,
TrackSelectionParameters.DEFAULT.preferredRoleFlags,
TrackSelectionParameters.DEFAULT.selectUndeterminedTextLanguage, TrackSelectionParameters.DEFAULT.selectUndeterminedTextLanguage,
TrackSelectionParameters.DEFAULT.disabledTextTrackSelectionFlags, TrackSelectionParameters.DEFAULT.disabledTextTrackSelectionFlags,
// General // General
...@@ -869,6 +877,7 @@ public class DefaultTrackSelector extends MappingTrackSelector { ...@@ -869,6 +877,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
boolean allowAudioMixedSampleRateAdaptiveness, boolean allowAudioMixedSampleRateAdaptiveness,
// Text // Text
@Nullable String preferredTextLanguage, @Nullable String preferredTextLanguage,
int preferredRoleFlags,
boolean selectUndeterminedTextLanguage, boolean selectUndeterminedTextLanguage,
@C.SelectionFlags int disabledTextTrackSelectionFlags, @C.SelectionFlags int disabledTextTrackSelectionFlags,
// General // General
...@@ -882,6 +891,7 @@ public class DefaultTrackSelector extends MappingTrackSelector { ...@@ -882,6 +891,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
super( super(
preferredAudioLanguage, preferredAudioLanguage,
preferredTextLanguage, preferredTextLanguage,
preferredRoleFlags,
selectUndeterminedTextLanguage, selectUndeterminedTextLanguage,
disabledTextTrackSelectionFlags); disabledTextTrackSelectionFlags);
// Video // Video
...@@ -2590,6 +2600,7 @@ public class DefaultTrackSelector extends MappingTrackSelector { ...@@ -2590,6 +2600,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
private final boolean isDefault; private final boolean isDefault;
private final boolean hasPreferredIsForcedFlag; private final boolean hasPreferredIsForcedFlag;
private final int preferredLanguageScore; private final int preferredLanguageScore;
private final int preferredRoleFlagsScore;
private final int selectedAudioLanguageScore; private final int selectedAudioLanguageScore;
public TextTrackScore( public TextTrackScore(
...@@ -2606,6 +2617,7 @@ public class DefaultTrackSelector extends MappingTrackSelector { ...@@ -2606,6 +2617,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
preferredLanguageScore = preferredLanguageScore =
getFormatLanguageScore( getFormatLanguageScore(
format, parameters.preferredTextLanguage, parameters.selectUndeterminedTextLanguage); format, parameters.preferredTextLanguage, parameters.selectUndeterminedTextLanguage);
preferredRoleFlagsScore = format.roleFlags & parameters.preferredRoleFlags;
// Prefer non-forced to forced if a preferred text language has been matched. Where both are // Prefer non-forced to forced if a preferred text language has been matched. Where both are
// provided the non-forced track will usually contain the forced subtitles as a subset. // provided the non-forced track will usually contain the forced subtitles as a subset.
// Otherwise, prefer a forced track. // Otherwise, prefer a forced track.
...@@ -2616,7 +2628,7 @@ public class DefaultTrackSelector extends MappingTrackSelector { ...@@ -2616,7 +2628,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
selectedAudioLanguageScore = selectedAudioLanguageScore =
getFormatLanguageScore(format, selectedAudioLanguage, selectedAudioLanguageUndetermined); getFormatLanguageScore(format, selectedAudioLanguage, selectedAudioLanguageUndetermined);
isWithinConstraints = isWithinConstraints =
preferredLanguageScore > 0 || isDefault || (isForced && selectedAudioLanguageScore > 0); (preferredLanguageScore > 0 || (parameters.preferredTextLanguage == null && selectedAudioLanguageScore > 0 && preferredRoleFlagsScore > 0)) || isDefault || (isForced && selectedAudioLanguageScore > 0);
} }
/** /**
...@@ -2634,6 +2646,9 @@ public class DefaultTrackSelector extends MappingTrackSelector { ...@@ -2634,6 +2646,9 @@ public class DefaultTrackSelector extends MappingTrackSelector {
if (this.preferredLanguageScore != other.preferredLanguageScore) { if (this.preferredLanguageScore != other.preferredLanguageScore) {
return compareInts(this.preferredLanguageScore, other.preferredLanguageScore); return compareInts(this.preferredLanguageScore, other.preferredLanguageScore);
} }
if (this.preferredRoleFlagsScore != other.preferredRoleFlagsScore) {
return compareInts(this.preferredRoleFlagsScore, other.preferredRoleFlagsScore);
}
if (this.isDefault != other.isDefault) { if (this.isDefault != other.isDefault) {
return this.isDefault ? 1 : -1; return this.isDefault ? 1 : -1;
} }
......
...@@ -33,6 +33,7 @@ public class TrackSelectionParameters implements Parcelable { ...@@ -33,6 +33,7 @@ public class TrackSelectionParameters implements Parcelable {
@Nullable /* package */ String preferredAudioLanguage; @Nullable /* package */ String preferredAudioLanguage;
@Nullable /* package */ String preferredTextLanguage; @Nullable /* package */ String preferredTextLanguage;
@C.RoleFlags /* package */ int preferredRoleFlags;
/* package */ boolean selectUndeterminedTextLanguage; /* package */ boolean selectUndeterminedTextLanguage;
@C.SelectionFlags /* package */ int disabledTextTrackSelectionFlags; @C.SelectionFlags /* package */ int disabledTextTrackSelectionFlags;
...@@ -48,6 +49,7 @@ public class TrackSelectionParameters implements Parcelable { ...@@ -48,6 +49,7 @@ public class TrackSelectionParameters implements Parcelable {
/* package */ Builder(TrackSelectionParameters initialValues) { /* package */ Builder(TrackSelectionParameters initialValues) {
preferredAudioLanguage = initialValues.preferredAudioLanguage; preferredAudioLanguage = initialValues.preferredAudioLanguage;
preferredTextLanguage = initialValues.preferredTextLanguage; preferredTextLanguage = initialValues.preferredTextLanguage;
preferredRoleFlags = initialValues.preferredRoleFlags;
selectUndeterminedTextLanguage = initialValues.selectUndeterminedTextLanguage; selectUndeterminedTextLanguage = initialValues.selectUndeterminedTextLanguage;
disabledTextTrackSelectionFlags = initialValues.disabledTextTrackSelectionFlags; disabledTextTrackSelectionFlags = initialValues.disabledTextTrackSelectionFlags;
} }
...@@ -75,6 +77,17 @@ public class TrackSelectionParameters implements Parcelable { ...@@ -75,6 +77,17 @@ public class TrackSelectionParameters implements Parcelable {
} }
/** /**
* See {@link TrackSelectionParameters#preferredRoleFlags}.
*
* @param preferredRoleFlags Preferred role flags.
* @return This builder.
*/
public Builder setPreferredRoleFlags(int preferredRoleFlags) {
this.preferredRoleFlags = preferredRoleFlags;
return this;
}
/**
* See {@link TrackSelectionParameters#selectUndeterminedTextLanguage}. * See {@link TrackSelectionParameters#selectUndeterminedTextLanguage}.
* *
* @return This builder. * @return This builder.
...@@ -102,6 +115,7 @@ public class TrackSelectionParameters implements Parcelable { ...@@ -102,6 +115,7 @@ public class TrackSelectionParameters implements Parcelable {
preferredAudioLanguage, preferredAudioLanguage,
// Text // Text
preferredTextLanguage, preferredTextLanguage,
preferredRoleFlags,
selectUndeterminedTextLanguage, selectUndeterminedTextLanguage,
disabledTextTrackSelectionFlags); disabledTextTrackSelectionFlags);
} }
...@@ -122,6 +136,11 @@ public class TrackSelectionParameters implements Parcelable { ...@@ -122,6 +136,11 @@ public class TrackSelectionParameters implements Parcelable {
*/ */
@Nullable public final String preferredTextLanguage; @Nullable public final String preferredTextLanguage;
/** /**
* The preferred role flags for text tracks. {@code 0} selects
* the default track if there is one, or no track otherwise. The default value is {@code 0}.
*/
@Nullable public final int preferredRoleFlags;
/**
* 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 * #preferredTextLanguage} is available, or if {@link #preferredTextLanguage} is unset. The
* default value is {@code false}. * default value is {@code false}.
...@@ -138,6 +157,7 @@ public class TrackSelectionParameters implements Parcelable { ...@@ -138,6 +157,7 @@ public class TrackSelectionParameters implements Parcelable {
/* preferredAudioLanguage= */ null, /* preferredAudioLanguage= */ null,
// Text // Text
/* preferredTextLanguage= */ null, /* preferredTextLanguage= */ null,
/* preferredRoleFlags= */ 0,
/* selectUndeterminedTextLanguage= */ false, /* selectUndeterminedTextLanguage= */ false,
/* disabledTextTrackSelectionFlags= */ 0); /* disabledTextTrackSelectionFlags= */ 0);
} }
...@@ -145,12 +165,14 @@ public class TrackSelectionParameters implements Parcelable { ...@@ -145,12 +165,14 @@ public class TrackSelectionParameters implements Parcelable {
/* package */ TrackSelectionParameters( /* package */ TrackSelectionParameters(
@Nullable String preferredAudioLanguage, @Nullable String preferredAudioLanguage,
@Nullable String preferredTextLanguage, @Nullable String preferredTextLanguage,
int preferredRoleFlags,
boolean selectUndeterminedTextLanguage, boolean selectUndeterminedTextLanguage,
@C.SelectionFlags int disabledTextTrackSelectionFlags) { @C.SelectionFlags int disabledTextTrackSelectionFlags) {
// Audio // Audio
this.preferredAudioLanguage = Util.normalizeLanguageCode(preferredAudioLanguage); this.preferredAudioLanguage = Util.normalizeLanguageCode(preferredAudioLanguage);
// Text // Text
this.preferredTextLanguage = Util.normalizeLanguageCode(preferredTextLanguage); this.preferredTextLanguage = Util.normalizeLanguageCode(preferredTextLanguage);
this.preferredRoleFlags = preferredRoleFlags;
this.selectUndeterminedTextLanguage = selectUndeterminedTextLanguage; this.selectUndeterminedTextLanguage = selectUndeterminedTextLanguage;
this.disabledTextTrackSelectionFlags = disabledTextTrackSelectionFlags; this.disabledTextTrackSelectionFlags = disabledTextTrackSelectionFlags;
} }
...@@ -158,6 +180,7 @@ public class TrackSelectionParameters implements Parcelable { ...@@ -158,6 +180,7 @@ public class TrackSelectionParameters implements Parcelable {
/* package */ TrackSelectionParameters(Parcel in) { /* package */ TrackSelectionParameters(Parcel in) {
this.preferredAudioLanguage = in.readString(); this.preferredAudioLanguage = in.readString();
this.preferredTextLanguage = in.readString(); this.preferredTextLanguage = in.readString();
this.preferredRoleFlags = in.readInt();
this.selectUndeterminedTextLanguage = Util.readBoolean(in); this.selectUndeterminedTextLanguage = Util.readBoolean(in);
this.disabledTextTrackSelectionFlags = in.readInt(); this.disabledTextTrackSelectionFlags = in.readInt();
} }
...@@ -179,6 +202,7 @@ public class TrackSelectionParameters implements Parcelable { ...@@ -179,6 +202,7 @@ public class TrackSelectionParameters implements Parcelable {
TrackSelectionParameters other = (TrackSelectionParameters) obj; TrackSelectionParameters other = (TrackSelectionParameters) obj;
return TextUtils.equals(preferredAudioLanguage, other.preferredAudioLanguage) return TextUtils.equals(preferredAudioLanguage, other.preferredAudioLanguage)
&& TextUtils.equals(preferredTextLanguage, other.preferredTextLanguage) && TextUtils.equals(preferredTextLanguage, other.preferredTextLanguage)
&& preferredRoleFlags == other.preferredRoleFlags
&& selectUndeterminedTextLanguage == other.selectUndeterminedTextLanguage && selectUndeterminedTextLanguage == other.selectUndeterminedTextLanguage
&& disabledTextTrackSelectionFlags == other.disabledTextTrackSelectionFlags; && disabledTextTrackSelectionFlags == other.disabledTextTrackSelectionFlags;
} }
...@@ -188,6 +212,7 @@ public class TrackSelectionParameters implements Parcelable { ...@@ -188,6 +212,7 @@ public class TrackSelectionParameters implements Parcelable {
int result = 1; int result = 1;
result = 31 * result + (preferredAudioLanguage == null ? 0 : preferredAudioLanguage.hashCode()); result = 31 * result + (preferredAudioLanguage == null ? 0 : preferredAudioLanguage.hashCode());
result = 31 * result + (preferredTextLanguage == null ? 0 : preferredTextLanguage.hashCode()); result = 31 * result + (preferredTextLanguage == null ? 0 : preferredTextLanguage.hashCode());
result = 31 * result + (preferredRoleFlags);
result = 31 * result + (selectUndeterminedTextLanguage ? 1 : 0); result = 31 * result + (selectUndeterminedTextLanguage ? 1 : 0);
result = 31 * result + disabledTextTrackSelectionFlags; result = 31 * result + disabledTextTrackSelectionFlags;
return result; return result;
...@@ -204,6 +229,7 @@ public class TrackSelectionParameters implements Parcelable { ...@@ -204,6 +229,7 @@ public class TrackSelectionParameters implements Parcelable {
public void writeToParcel(Parcel dest, int flags) { public void writeToParcel(Parcel dest, int flags) {
dest.writeString(preferredAudioLanguage); dest.writeString(preferredAudioLanguage);
dest.writeString(preferredTextLanguage); dest.writeString(preferredTextLanguage);
dest.writeInt(preferredRoleFlags);
Util.writeBoolean(dest, selectUndeterminedTextLanguage); Util.writeBoolean(dest, selectUndeterminedTextLanguage);
dest.writeInt(disabledTextTrackSelectionFlags); dest.writeInt(disabledTextTrackSelectionFlags);
} }
......
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