Automatically show closed captioning/hearing impaired text track

This commit is contained in:
Yannick RUI 2019-08-08 09:17:55 +02:00
parent a9b93d7ec2
commit 73d6a0f2bd
2 changed files with 42 additions and 1 deletions

View file

@ -432,6 +432,12 @@ public class DefaultTrackSelector extends MappingTrackSelector {
return this;
}
@Override
public ParametersBuilder setPreferredRoleFlags(int preferredRoleFlags) {
super.setPreferredRoleFlags(preferredRoleFlags);
return this;
}
@Override
public ParametersBuilder setSelectUndeterminedTextLanguage(
boolean selectUndeterminedTextLanguage) {
@ -642,6 +648,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
allowAudioMixedSampleRateAdaptiveness,
// Text
preferredTextLanguage,
preferredRoleFlags,
selectUndeterminedTextLanguage,
disabledTextTrackSelectionFlags,
// General
@ -837,6 +844,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
/* allowAudioMixedSampleRateAdaptiveness= */ false,
// Text
TrackSelectionParameters.DEFAULT.preferredTextLanguage,
TrackSelectionParameters.DEFAULT.preferredRoleFlags,
TrackSelectionParameters.DEFAULT.selectUndeterminedTextLanguage,
TrackSelectionParameters.DEFAULT.disabledTextTrackSelectionFlags,
// General
@ -869,6 +877,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
boolean allowAudioMixedSampleRateAdaptiveness,
// Text
@Nullable String preferredTextLanguage,
int preferredRoleFlags,
boolean selectUndeterminedTextLanguage,
@C.SelectionFlags int disabledTextTrackSelectionFlags,
// General
@ -882,6 +891,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
super(
preferredAudioLanguage,
preferredTextLanguage,
preferredRoleFlags,
selectUndeterminedTextLanguage,
disabledTextTrackSelectionFlags);
// Video
@ -2590,6 +2600,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
private final boolean isDefault;
private final boolean hasPreferredIsForcedFlag;
private final int preferredLanguageScore;
private final int preferredRoleFlagsScore;
private final int selectedAudioLanguageScore;
public TextTrackScore(
@ -2606,6 +2617,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
preferredLanguageScore =
getFormatLanguageScore(
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
// provided the non-forced track will usually contain the forced subtitles as a subset.
// Otherwise, prefer a forced track.
@ -2616,7 +2628,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
selectedAudioLanguageScore =
getFormatLanguageScore(format, selectedAudioLanguage, selectedAudioLanguageUndetermined);
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 {
if (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) {
return this.isDefault ? 1 : -1;
}

View file

@ -33,6 +33,7 @@ public class TrackSelectionParameters implements Parcelable {
@Nullable /* package */ String preferredAudioLanguage;
@Nullable /* package */ String preferredTextLanguage;
@C.RoleFlags /* package */ int preferredRoleFlags;
/* package */ boolean selectUndeterminedTextLanguage;
@C.SelectionFlags /* package */ int disabledTextTrackSelectionFlags;
@ -48,6 +49,7 @@ public class TrackSelectionParameters implements Parcelable {
/* package */ Builder(TrackSelectionParameters initialValues) {
preferredAudioLanguage = initialValues.preferredAudioLanguage;
preferredTextLanguage = initialValues.preferredTextLanguage;
preferredRoleFlags = initialValues.preferredRoleFlags;
selectUndeterminedTextLanguage = initialValues.selectUndeterminedTextLanguage;
disabledTextTrackSelectionFlags = initialValues.disabledTextTrackSelectionFlags;
}
@ -74,6 +76,17 @@ public class TrackSelectionParameters implements Parcelable {
return this;
}
/**
* 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}.
*
@ -102,6 +115,7 @@ public class TrackSelectionParameters implements Parcelable {
preferredAudioLanguage,
// Text
preferredTextLanguage,
preferredRoleFlags,
selectUndeterminedTextLanguage,
disabledTextTrackSelectionFlags);
}
@ -121,6 +135,11 @@ public class TrackSelectionParameters implements Parcelable {
* the default track if there is one, or no track otherwise. The default value is {@code null}.
*/
@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
* #preferredTextLanguage} is available, or if {@link #preferredTextLanguage} is unset. The
@ -138,6 +157,7 @@ public class TrackSelectionParameters implements Parcelable {
/* preferredAudioLanguage= */ null,
// Text
/* preferredTextLanguage= */ null,
/* preferredRoleFlags= */ 0,
/* selectUndeterminedTextLanguage= */ false,
/* disabledTextTrackSelectionFlags= */ 0);
}
@ -145,12 +165,14 @@ public class TrackSelectionParameters implements Parcelable {
/* package */ TrackSelectionParameters(
@Nullable String preferredAudioLanguage,
@Nullable String preferredTextLanguage,
int preferredRoleFlags,
boolean selectUndeterminedTextLanguage,
@C.SelectionFlags int disabledTextTrackSelectionFlags) {
// Audio
this.preferredAudioLanguage = Util.normalizeLanguageCode(preferredAudioLanguage);
// Text
this.preferredTextLanguage = Util.normalizeLanguageCode(preferredTextLanguage);
this.preferredRoleFlags = preferredRoleFlags;
this.selectUndeterminedTextLanguage = selectUndeterminedTextLanguage;
this.disabledTextTrackSelectionFlags = disabledTextTrackSelectionFlags;
}
@ -158,6 +180,7 @@ public class TrackSelectionParameters implements Parcelable {
/* package */ TrackSelectionParameters(Parcel in) {
this.preferredAudioLanguage = in.readString();
this.preferredTextLanguage = in.readString();
this.preferredRoleFlags = in.readInt();
this.selectUndeterminedTextLanguage = Util.readBoolean(in);
this.disabledTextTrackSelectionFlags = in.readInt();
}
@ -179,6 +202,7 @@ public class TrackSelectionParameters implements Parcelable {
TrackSelectionParameters other = (TrackSelectionParameters) obj;
return TextUtils.equals(preferredAudioLanguage, other.preferredAudioLanguage)
&& TextUtils.equals(preferredTextLanguage, other.preferredTextLanguage)
&& preferredRoleFlags == other.preferredRoleFlags
&& selectUndeterminedTextLanguage == other.selectUndeterminedTextLanguage
&& disabledTextTrackSelectionFlags == other.disabledTextTrackSelectionFlags;
}
@ -188,6 +212,7 @@ public class TrackSelectionParameters implements Parcelable {
int result = 1;
result = 31 * result + (preferredAudioLanguage == null ? 0 : preferredAudioLanguage.hashCode());
result = 31 * result + (preferredTextLanguage == null ? 0 : preferredTextLanguage.hashCode());
result = 31 * result + (preferredRoleFlags);
result = 31 * result + (selectUndeterminedTextLanguage ? 1 : 0);
result = 31 * result + disabledTextTrackSelectionFlags;
return result;
@ -204,6 +229,7 @@ public class TrackSelectionParameters implements Parcelable {
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(preferredAudioLanguage);
dest.writeString(preferredTextLanguage);
dest.writeInt(preferredRoleFlags);
Util.writeBoolean(dest, selectUndeterminedTextLanguage);
dest.writeInt(disabledTextTrackSelectionFlags);
}