Merge pull request #6158 from xirac:dev-v2

PiperOrigin-RevId: 268240722
This commit is contained in:
Oliver Woodman 2019-09-10 17:43:21 +01:00
parent 560c8c8760
commit 26e293070e
3 changed files with 57 additions and 2 deletions

View File

@ -468,6 +468,12 @@ public class DefaultTrackSelector extends MappingTrackSelector {
return this; return this;
} }
@Override
public ParametersBuilder setPreferredTextRoleFlags(@C.RoleFlags int preferredTextRoleFlags) {
super.setPreferredTextRoleFlags(preferredTextRoleFlags);
return this;
}
@Override @Override
public ParametersBuilder setSelectUndeterminedTextLanguage( public ParametersBuilder setSelectUndeterminedTextLanguage(
boolean selectUndeterminedTextLanguage) { boolean selectUndeterminedTextLanguage) {
@ -701,6 +707,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
allowAudioMixedChannelCountAdaptiveness, allowAudioMixedChannelCountAdaptiveness,
// Text // Text
preferredTextLanguage, preferredTextLanguage,
preferredTextRoleFlags,
selectUndeterminedTextLanguage, selectUndeterminedTextLanguage,
disabledTextTrackSelectionFlags, disabledTextTrackSelectionFlags,
// General // General
@ -891,6 +898,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
/* allowAudioMixedChannelCountAdaptiveness= */ false, /* allowAudioMixedChannelCountAdaptiveness= */ false,
// Text // Text
TrackSelectionParameters.DEFAULT.preferredTextLanguage, TrackSelectionParameters.DEFAULT.preferredTextLanguage,
TrackSelectionParameters.DEFAULT.preferredTextRoleFlags,
TrackSelectionParameters.DEFAULT.selectUndeterminedTextLanguage, TrackSelectionParameters.DEFAULT.selectUndeterminedTextLanguage,
TrackSelectionParameters.DEFAULT.disabledTextTrackSelectionFlags, TrackSelectionParameters.DEFAULT.disabledTextTrackSelectionFlags,
// General // General
@ -924,6 +932,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
boolean allowAudioMixedChannelCountAdaptiveness, boolean allowAudioMixedChannelCountAdaptiveness,
// Text // Text
@Nullable String preferredTextLanguage, @Nullable String preferredTextLanguage,
@C.RoleFlags int preferredTextRoleFlags,
boolean selectUndeterminedTextLanguage, boolean selectUndeterminedTextLanguage,
@C.SelectionFlags int disabledTextTrackSelectionFlags, @C.SelectionFlags int disabledTextTrackSelectionFlags,
// General // General
@ -937,6 +946,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
super( super(
preferredAudioLanguage, preferredAudioLanguage,
preferredTextLanguage, preferredTextLanguage,
preferredTextRoleFlags,
selectUndeterminedTextLanguage, selectUndeterminedTextLanguage,
disabledTextTrackSelectionFlags); disabledTextTrackSelectionFlags);
// Video // Video
@ -2640,7 +2650,9 @@ 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;
private final boolean hasCaptionRoleFlags;
public TextTrackScore( public TextTrackScore(
Format format, Format format,
@ -2656,6 +2668,10 @@ public class DefaultTrackSelector extends MappingTrackSelector {
preferredLanguageScore = preferredLanguageScore =
getFormatLanguageScore( getFormatLanguageScore(
format, parameters.preferredTextLanguage, parameters.selectUndeterminedTextLanguage); format, parameters.preferredTextLanguage, parameters.selectUndeterminedTextLanguage);
preferredRoleFlagsScore =
Integer.bitCount(format.roleFlags & parameters.preferredTextRoleFlags);
hasCaptionRoleFlags =
(format.roleFlags & (C.ROLE_FLAG_CAPTION | C.ROLE_FLAG_DESCRIBES_MUSIC_AND_SOUND)) != 0;
// 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.
@ -2666,7 +2682,10 @@ 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 && preferredRoleFlagsScore > 0)
|| isDefault
|| (isForced && selectedAudioLanguageScore > 0);
} }
/** /**
@ -2684,13 +2703,22 @@ 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;
} }
if (this.hasPreferredIsForcedFlag != other.hasPreferredIsForcedFlag) { if (this.hasPreferredIsForcedFlag != other.hasPreferredIsForcedFlag) {
return this.hasPreferredIsForcedFlag ? 1 : -1; return this.hasPreferredIsForcedFlag ? 1 : -1;
} }
return compareInts(this.selectedAudioLanguageScore, other.selectedAudioLanguageScore); if (this.selectedAudioLanguageScore != other.selectedAudioLanguageScore) {
return compareInts(this.selectedAudioLanguageScore, other.selectedAudioLanguageScore);
}
if (preferredRoleFlagsScore == 0 && this.hasCaptionRoleFlags != other.hasCaptionRoleFlags) {
return this.hasCaptionRoleFlags ? -1 : 1;
}
return 0;
} }
} }
} }

View File

@ -35,6 +35,7 @@ public class TrackSelectionParameters implements Parcelable {
@Nullable /* package */ String preferredAudioLanguage; @Nullable /* package */ String preferredAudioLanguage;
// Text // Text
@Nullable /* package */ String preferredTextLanguage; @Nullable /* package */ String preferredTextLanguage;
@C.RoleFlags /* package */ int preferredTextRoleFlags;
/* package */ boolean selectUndeterminedTextLanguage; /* package */ boolean selectUndeterminedTextLanguage;
@C.SelectionFlags /* package */ int disabledTextTrackSelectionFlags; @C.SelectionFlags /* package */ int disabledTextTrackSelectionFlags;
@ -52,6 +53,7 @@ public class TrackSelectionParameters implements Parcelable {
preferredAudioLanguage = initialValues.preferredAudioLanguage; preferredAudioLanguage = initialValues.preferredAudioLanguage;
// Text // Text
preferredTextLanguage = initialValues.preferredTextLanguage; preferredTextLanguage = initialValues.preferredTextLanguage;
preferredTextRoleFlags = initialValues.preferredTextRoleFlags;
selectUndeterminedTextLanguage = initialValues.selectUndeterminedTextLanguage; selectUndeterminedTextLanguage = initialValues.selectUndeterminedTextLanguage;
disabledTextTrackSelectionFlags = initialValues.disabledTextTrackSelectionFlags; disabledTextTrackSelectionFlags = initialValues.disabledTextTrackSelectionFlags;
} }
@ -82,6 +84,17 @@ public class TrackSelectionParameters implements Parcelable {
return this; return this;
} }
/**
* Sets the preferred {@link C.RoleFlags} for text tracks.
*
* @param preferredTextRoleFlags Preferred text role flags.
* @return This builder.
*/
public Builder setPreferredTextRoleFlags(@C.RoleFlags int preferredTextRoleFlags) {
this.preferredTextRoleFlags = preferredTextRoleFlags;
return this;
}
/** /**
* 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 #setPreferredTextLanguage(String)} is available, or if the preferred language is
@ -116,6 +129,7 @@ public class TrackSelectionParameters implements Parcelable {
preferredAudioLanguage, preferredAudioLanguage,
// Text // Text
preferredTextLanguage, preferredTextLanguage,
preferredTextRoleFlags,
selectUndeterminedTextLanguage, selectUndeterminedTextLanguage,
disabledTextTrackSelectionFlags); disabledTextTrackSelectionFlags);
} }
@ -136,6 +150,11 @@ public class TrackSelectionParameters implements Parcelable {
* track if there is one, or no track otherwise. The default value is {@code null}. * 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 {@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}.
*/
@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 * #preferredTextLanguage} is available, or if {@link #preferredTextLanguage} is unset. The
@ -153,6 +172,7 @@ public class TrackSelectionParameters implements Parcelable {
/* preferredAudioLanguage= */ null, /* preferredAudioLanguage= */ null,
// Text // Text
/* preferredTextLanguage= */ null, /* preferredTextLanguage= */ null,
/* preferredTextRoleFlags= */ 0,
/* selectUndeterminedTextLanguage= */ false, /* selectUndeterminedTextLanguage= */ false,
/* disabledTextTrackSelectionFlags= */ 0); /* disabledTextTrackSelectionFlags= */ 0);
} }
@ -160,12 +180,14 @@ public class TrackSelectionParameters implements Parcelable {
/* package */ TrackSelectionParameters( /* package */ TrackSelectionParameters(
@Nullable String preferredAudioLanguage, @Nullable String preferredAudioLanguage,
@Nullable String preferredTextLanguage, @Nullable String preferredTextLanguage,
@C.RoleFlags int preferredTextRoleFlags,
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.preferredTextRoleFlags = preferredTextRoleFlags;
this.selectUndeterminedTextLanguage = selectUndeterminedTextLanguage; this.selectUndeterminedTextLanguage = selectUndeterminedTextLanguage;
this.disabledTextTrackSelectionFlags = disabledTextTrackSelectionFlags; this.disabledTextTrackSelectionFlags = disabledTextTrackSelectionFlags;
} }
@ -175,6 +197,7 @@ public class TrackSelectionParameters implements Parcelable {
this.preferredAudioLanguage = in.readString(); this.preferredAudioLanguage = in.readString();
// Text // Text
this.preferredTextLanguage = in.readString(); this.preferredTextLanguage = in.readString();
this.preferredTextRoleFlags = in.readInt();
this.selectUndeterminedTextLanguage = Util.readBoolean(in); this.selectUndeterminedTextLanguage = Util.readBoolean(in);
this.disabledTextTrackSelectionFlags = in.readInt(); this.disabledTextTrackSelectionFlags = in.readInt();
} }
@ -197,6 +220,7 @@ public class TrackSelectionParameters implements Parcelable {
return TextUtils.equals(preferredAudioLanguage, other.preferredAudioLanguage) return TextUtils.equals(preferredAudioLanguage, other.preferredAudioLanguage)
// Text // Text
&& TextUtils.equals(preferredTextLanguage, other.preferredTextLanguage) && TextUtils.equals(preferredTextLanguage, other.preferredTextLanguage)
&& preferredTextRoleFlags == other.preferredTextRoleFlags
&& selectUndeterminedTextLanguage == other.selectUndeterminedTextLanguage && selectUndeterminedTextLanguage == other.selectUndeterminedTextLanguage
&& disabledTextTrackSelectionFlags == other.disabledTextTrackSelectionFlags; && disabledTextTrackSelectionFlags == other.disabledTextTrackSelectionFlags;
} }
@ -208,6 +232,7 @@ public class TrackSelectionParameters implements Parcelable {
result = 31 * result + (preferredAudioLanguage == null ? 0 : preferredAudioLanguage.hashCode()); result = 31 * result + (preferredAudioLanguage == null ? 0 : preferredAudioLanguage.hashCode());
// Text // Text
result = 31 * result + (preferredTextLanguage == null ? 0 : preferredTextLanguage.hashCode()); result = 31 * result + (preferredTextLanguage == null ? 0 : preferredTextLanguage.hashCode());
result = 31 * result + preferredTextRoleFlags;
result = 31 * result + (selectUndeterminedTextLanguage ? 1 : 0); result = 31 * result + (selectUndeterminedTextLanguage ? 1 : 0);
result = 31 * result + disabledTextTrackSelectionFlags; result = 31 * result + disabledTextTrackSelectionFlags;
return result; return result;
@ -226,6 +251,7 @@ public class TrackSelectionParameters implements Parcelable {
dest.writeString(preferredAudioLanguage); dest.writeString(preferredAudioLanguage);
// Text // Text
dest.writeString(preferredTextLanguage); dest.writeString(preferredTextLanguage);
dest.writeInt(preferredTextRoleFlags);
Util.writeBoolean(dest, selectUndeterminedTextLanguage); Util.writeBoolean(dest, selectUndeterminedTextLanguage);
dest.writeInt(disabledTextTrackSelectionFlags); dest.writeInt(disabledTextTrackSelectionFlags);
} }

View File

@ -146,6 +146,7 @@ public final class DefaultTrackSelectorTest {
/* allowAudioMixedChannelCountAdaptiveness= */ true, /* allowAudioMixedChannelCountAdaptiveness= */ true,
// Text // Text
/* preferredTextLanguage= */ "de", /* preferredTextLanguage= */ "de",
/* preferredTextRoleFlags= */ C.ROLE_FLAG_CAPTION,
/* selectUndeterminedTextLanguage= */ true, /* selectUndeterminedTextLanguage= */ true,
/* disabledTextTrackSelectionFlags= */ 8, /* disabledTextTrackSelectionFlags= */ 8,
// General // General