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;
}
@Override
public ParametersBuilder setPreferredTextRoleFlags(@C.RoleFlags int preferredTextRoleFlags) {
super.setPreferredTextRoleFlags(preferredTextRoleFlags);
return this;
}
@Override
public ParametersBuilder setSelectUndeterminedTextLanguage(
boolean selectUndeterminedTextLanguage) {
@ -701,6 +707,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
allowAudioMixedChannelCountAdaptiveness,
// Text
preferredTextLanguage,
preferredTextRoleFlags,
selectUndeterminedTextLanguage,
disabledTextTrackSelectionFlags,
// General
@ -891,6 +898,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
/* allowAudioMixedChannelCountAdaptiveness= */ false,
// Text
TrackSelectionParameters.DEFAULT.preferredTextLanguage,
TrackSelectionParameters.DEFAULT.preferredTextRoleFlags,
TrackSelectionParameters.DEFAULT.selectUndeterminedTextLanguage,
TrackSelectionParameters.DEFAULT.disabledTextTrackSelectionFlags,
// General
@ -924,6 +932,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
boolean allowAudioMixedChannelCountAdaptiveness,
// Text
@Nullable String preferredTextLanguage,
@C.RoleFlags int preferredTextRoleFlags,
boolean selectUndeterminedTextLanguage,
@C.SelectionFlags int disabledTextTrackSelectionFlags,
// General
@ -937,6 +946,7 @@ public class DefaultTrackSelector extends MappingTrackSelector {
super(
preferredAudioLanguage,
preferredTextLanguage,
preferredTextRoleFlags,
selectUndeterminedTextLanguage,
disabledTextTrackSelectionFlags);
// Video
@ -2640,7 +2650,9 @@ 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;
private final boolean hasCaptionRoleFlags;
public TextTrackScore(
Format format,
@ -2656,6 +2668,10 @@ public class DefaultTrackSelector extends MappingTrackSelector {
preferredLanguageScore =
getFormatLanguageScore(
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
// provided the non-forced track will usually contain the forced subtitles as a subset.
// Otherwise, prefer a forced track.
@ -2666,7 +2682,10 @@ public class DefaultTrackSelector extends MappingTrackSelector {
selectedAudioLanguageScore =
getFormatLanguageScore(format, selectedAudioLanguage, selectedAudioLanguageUndetermined);
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) {
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;
}
if (this.hasPreferredIsForcedFlag != other.hasPreferredIsForcedFlag) {
return this.hasPreferredIsForcedFlag ? 1 : -1;
}
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;
// Text
@Nullable /* package */ String preferredTextLanguage;
@C.RoleFlags /* package */ int preferredTextRoleFlags;
/* package */ boolean selectUndeterminedTextLanguage;
@C.SelectionFlags /* package */ int disabledTextTrackSelectionFlags;
@ -52,6 +53,7 @@ public class TrackSelectionParameters implements Parcelable {
preferredAudioLanguage = initialValues.preferredAudioLanguage;
// Text
preferredTextLanguage = initialValues.preferredTextLanguage;
preferredTextRoleFlags = initialValues.preferredTextRoleFlags;
selectUndeterminedTextLanguage = initialValues.selectUndeterminedTextLanguage;
disabledTextTrackSelectionFlags = initialValues.disabledTextTrackSelectionFlags;
}
@ -82,6 +84,17 @@ public class TrackSelectionParameters implements Parcelable {
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
* {@link #setPreferredTextLanguage(String)} is available, or if the preferred language is
@ -116,6 +129,7 @@ public class TrackSelectionParameters implements Parcelable {
preferredAudioLanguage,
// Text
preferredTextLanguage,
preferredTextRoleFlags,
selectUndeterminedTextLanguage,
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}.
*/
@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
* #preferredTextLanguage} is available, or if {@link #preferredTextLanguage} is unset. The
@ -153,6 +172,7 @@ public class TrackSelectionParameters implements Parcelable {
/* preferredAudioLanguage= */ null,
// Text
/* preferredTextLanguage= */ null,
/* preferredTextRoleFlags= */ 0,
/* selectUndeterminedTextLanguage= */ false,
/* disabledTextTrackSelectionFlags= */ 0);
}
@ -160,12 +180,14 @@ public class TrackSelectionParameters implements Parcelable {
/* package */ TrackSelectionParameters(
@Nullable String preferredAudioLanguage,
@Nullable String preferredTextLanguage,
@C.RoleFlags int preferredTextRoleFlags,
boolean selectUndeterminedTextLanguage,
@C.SelectionFlags int disabledTextTrackSelectionFlags) {
// Audio
this.preferredAudioLanguage = Util.normalizeLanguageCode(preferredAudioLanguage);
// Text
this.preferredTextLanguage = Util.normalizeLanguageCode(preferredTextLanguage);
this.preferredTextRoleFlags = preferredTextRoleFlags;
this.selectUndeterminedTextLanguage = selectUndeterminedTextLanguage;
this.disabledTextTrackSelectionFlags = disabledTextTrackSelectionFlags;
}
@ -175,6 +197,7 @@ public class TrackSelectionParameters implements Parcelable {
this.preferredAudioLanguage = in.readString();
// Text
this.preferredTextLanguage = in.readString();
this.preferredTextRoleFlags = in.readInt();
this.selectUndeterminedTextLanguage = Util.readBoolean(in);
this.disabledTextTrackSelectionFlags = in.readInt();
}
@ -197,6 +220,7 @@ public class TrackSelectionParameters implements Parcelable {
return TextUtils.equals(preferredAudioLanguage, other.preferredAudioLanguage)
// Text
&& TextUtils.equals(preferredTextLanguage, other.preferredTextLanguage)
&& preferredTextRoleFlags == other.preferredTextRoleFlags
&& selectUndeterminedTextLanguage == other.selectUndeterminedTextLanguage
&& disabledTextTrackSelectionFlags == other.disabledTextTrackSelectionFlags;
}
@ -208,6 +232,7 @@ public class TrackSelectionParameters implements Parcelable {
result = 31 * result + (preferredAudioLanguage == null ? 0 : preferredAudioLanguage.hashCode());
// Text
result = 31 * result + (preferredTextLanguage == null ? 0 : preferredTextLanguage.hashCode());
result = 31 * result + preferredTextRoleFlags;
result = 31 * result + (selectUndeterminedTextLanguage ? 1 : 0);
result = 31 * result + disabledTextTrackSelectionFlags;
return result;
@ -226,6 +251,7 @@ public class TrackSelectionParameters implements Parcelable {
dest.writeString(preferredAudioLanguage);
// Text
dest.writeString(preferredTextLanguage);
dest.writeInt(preferredTextRoleFlags);
Util.writeBoolean(dest, selectUndeterminedTextLanguage);
dest.writeInt(disabledTextTrackSelectionFlags);
}

View File

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