mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +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;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ParametersBuilder setPreferredRoleFlags(int preferredRoleFlags) {
|
||||||
|
super.setPreferredRoleFlags(preferredRoleFlags);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ParametersBuilder setSelectUndeterminedTextLanguage(
|
public ParametersBuilder setSelectUndeterminedTextLanguage(
|
||||||
boolean selectUndeterminedTextLanguage) {
|
boolean selectUndeterminedTextLanguage) {
|
||||||
|
|
@ -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 {
|
||||||
/* 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 {
|
||||||
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 {
|
||||||
super(
|
super(
|
||||||
preferredAudioLanguage,
|
preferredAudioLanguage,
|
||||||
preferredTextLanguage,
|
preferredTextLanguage,
|
||||||
|
preferredRoleFlags,
|
||||||
selectUndeterminedTextLanguage,
|
selectUndeterminedTextLanguage,
|
||||||
disabledTextTrackSelectionFlags);
|
disabledTextTrackSelectionFlags);
|
||||||
// Video
|
// Video
|
||||||
|
|
@ -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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
|
|
||||||
@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 {
|
||||||
/* 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;
|
||||||
}
|
}
|
||||||
|
|
@ -74,6 +76,17 @@ public class TrackSelectionParameters implements Parcelable {
|
||||||
return this;
|
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}.
|
* See {@link TrackSelectionParameters#selectUndeterminedTextLanguage}.
|
||||||
*
|
*
|
||||||
|
|
@ -102,6 +115,7 @@ public class TrackSelectionParameters implements Parcelable {
|
||||||
preferredAudioLanguage,
|
preferredAudioLanguage,
|
||||||
// Text
|
// Text
|
||||||
preferredTextLanguage,
|
preferredTextLanguage,
|
||||||
|
preferredRoleFlags,
|
||||||
selectUndeterminedTextLanguage,
|
selectUndeterminedTextLanguage,
|
||||||
disabledTextTrackSelectionFlags);
|
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}.
|
* the default track if there is one, or no track otherwise. The default value is {@code null}.
|
||||||
*/
|
*/
|
||||||
@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
|
||||||
|
|
@ -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 {
|
||||||
/* 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 {
|
||||||
/* 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 {
|
||||||
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 {
|
||||||
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 {
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue