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;
|
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;
|
||||||
}
|
}
|
||||||
|
if (this.selectedAudioLanguageScore != other.selectedAudioLanguageScore) {
|
||||||
return compareInts(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;
|
@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);
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user