mirror of
https://github.com/androidx/media.git
synced 2025-05-10 09:12:16 +08:00
Merge pull request #6158 from xirac:dev-v2
PiperOrigin-RevId: 268240722
This commit is contained in:
parent
560c8c8760
commit
26e293070e
@ -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;
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -146,6 +146,7 @@ public final class DefaultTrackSelectorTest {
|
||||
/* allowAudioMixedChannelCountAdaptiveness= */ true,
|
||||
// Text
|
||||
/* preferredTextLanguage= */ "de",
|
||||
/* preferredTextRoleFlags= */ C.ROLE_FLAG_CAPTION,
|
||||
/* selectUndeterminedTextLanguage= */ true,
|
||||
/* disabledTextTrackSelectionFlags= */ 8,
|
||||
// General
|
||||
|
Loading…
x
Reference in New Issue
Block a user