mirror of
https://github.com/samsonjs/media.git
synced 2026-03-28 09:55:48 +00:00
Automatically show closed captioning/hearing impaired text track
This commit is contained in:
parent
a9b93d7ec2
commit
73d6a0f2bd
2 changed files with 42 additions and 1 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue