mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
Change all the conditions and scores that are currently in the constructor of TextTrackScore to comparisons in TextTrackScore.compareTo
This commit is contained in:
parent
af98883a7b
commit
1909987dc8
1 changed files with 41 additions and 32 deletions
|
|
@ -2508,49 +2508,30 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
||||||
/** Represents how well an text track matches the selection {@link Parameters}. */
|
/** Represents how well an text track matches the selection {@link Parameters}. */
|
||||||
protected static final class TextTrackScore implements Comparable<TextTrackScore> {
|
protected static final class TextTrackScore implements Comparable<TextTrackScore> {
|
||||||
|
|
||||||
|
private final boolean isWithinRendererCapabilities;
|
||||||
private final boolean isDefault;
|
private final boolean isDefault;
|
||||||
private final boolean isForced;
|
private final boolean isForced;
|
||||||
private final int languageScore;
|
private final int preferredLanguageScore;
|
||||||
|
private final int selectedAudioLanguageScore;
|
||||||
private final boolean trackHasNoLanguage;
|
private final boolean trackHasNoLanguage;
|
||||||
private int bestMatchScore = 0;
|
private final boolean selectUndeterminedTextLanguage;
|
||||||
|
private final boolean stringDefinesNoLang;
|
||||||
|
|
||||||
public TextTrackScore(
|
public TextTrackScore(
|
||||||
Format format,
|
Format format,
|
||||||
Parameters parameters,
|
Parameters parameters,
|
||||||
int trackFormatSupport,
|
int trackFormatSupport,
|
||||||
@Nullable String selectedAudioLanguage) {
|
@Nullable String selectedAudioLanguage) {
|
||||||
languageScore = getFormatLanguageScore(format, parameters.preferredTextLanguage);
|
isWithinRendererCapabilities = isSupported(trackFormatSupport, false);
|
||||||
int maskedSelectionFlags =
|
int maskedSelectionFlags =
|
||||||
format.selectionFlags & ~parameters.disabledTextTrackSelectionFlags;
|
format.selectionFlags & ~parameters.disabledTextTrackSelectionFlags;
|
||||||
isDefault = (format.selectionFlags & C.SELECTION_FLAG_DEFAULT) != 0;
|
isDefault = (format.selectionFlags & C.SELECTION_FLAG_DEFAULT) != 0;
|
||||||
isForced = (maskedSelectionFlags & C.SELECTION_FLAG_FORCED) != 0;
|
isForced = (maskedSelectionFlags & C.SELECTION_FLAG_FORCED) != 0;
|
||||||
|
preferredLanguageScore = getFormatLanguageScore(format, parameters.preferredTextLanguage);
|
||||||
|
selectedAudioLanguageScore = getFormatLanguageScore(format, selectedAudioLanguage);
|
||||||
trackHasNoLanguage = formatHasNoLanguage(format);
|
trackHasNoLanguage = formatHasNoLanguage(format);
|
||||||
|
selectUndeterminedTextLanguage = parameters.selectUndeterminedTextLanguage;
|
||||||
if (languageScore > 0 || (parameters.selectUndeterminedTextLanguage && trackHasNoLanguage)) {
|
stringDefinesNoLang = stringDefinesNoLanguage(selectedAudioLanguage);
|
||||||
if (isDefault) {
|
|
||||||
bestMatchScore = 11;
|
|
||||||
} else if (!isForced) {
|
|
||||||
// Prefer non-forced to forced if a preferred text language has been specified. Where
|
|
||||||
// both are provided the non-forced track will usually contain the forced subtitles as
|
|
||||||
// a subset.
|
|
||||||
bestMatchScore = 7;
|
|
||||||
} else {
|
|
||||||
bestMatchScore = 3;
|
|
||||||
}
|
|
||||||
bestMatchScore += languageScore;
|
|
||||||
} else if (isDefault) {
|
|
||||||
bestMatchScore = 2;
|
|
||||||
} else if (isForced
|
|
||||||
&& (languageScore > 0
|
|
||||||
|| (trackHasNoLanguage && stringDefinesNoLanguage(selectedAudioLanguage)))) {
|
|
||||||
bestMatchScore = 1;
|
|
||||||
} else {
|
|
||||||
// Track should not be selected.
|
|
||||||
bestMatchScore = -1;
|
|
||||||
}
|
|
||||||
if (isSupported(trackFormatSupport, false)) {
|
|
||||||
bestMatchScore += WITHIN_RENDERER_CAPABILITIES_BONUS;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -2562,10 +2543,38 @@ public class DefaultTrackSelector extends MappingTrackSelector {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public int compareTo(@NonNull TextTrackScore other) {
|
public int compareTo(@NonNull TextTrackScore other) {
|
||||||
if (this.bestMatchScore != other.bestMatchScore) {
|
if (this.isWithinRendererCapabilities != other.isWithinRendererCapabilities) {
|
||||||
return compareInts(this.bestMatchScore, other.bestMatchScore);
|
return this.isWithinRendererCapabilities ? 1 : -1;
|
||||||
|
}
|
||||||
|
if ((this.preferredLanguageScore > 0 || (this.selectUndeterminedTextLanguage && this.trackHasNoLanguage)) ==
|
||||||
|
(other.preferredLanguageScore > 0 || (other.selectUndeterminedTextLanguage && other.trackHasNoLanguage))) {
|
||||||
|
if (this.preferredLanguageScore > 0 || (this.selectUndeterminedTextLanguage
|
||||||
|
&& this.trackHasNoLanguage)) {
|
||||||
|
if (this.isDefault != other.isDefault) {
|
||||||
|
return this.isDefault ? 1 : -1;
|
||||||
|
}
|
||||||
|
if (this.isForced != other.isForced) {
|
||||||
|
// Prefer non-forced to forced if a preferred text language has been specified. Where
|
||||||
|
// both are provided the non-forced track will usually contain the forced subtitles as
|
||||||
|
// a subset.
|
||||||
|
return !this.isForced ? 1 : -1;
|
||||||
|
}
|
||||||
|
return (this.preferredLanguageScore > other.preferredLanguageScore) ? 1 : -1;
|
||||||
|
} else {
|
||||||
|
if (this.isDefault != other.isDefault) {
|
||||||
|
return this.isDefault ? 1 : -1;
|
||||||
|
}
|
||||||
|
if ((this.isForced && (this.selectedAudioLanguageScore > 0 || (this.trackHasNoLanguage && this.stringDefinesNoLang))) !=
|
||||||
|
(other.isForced && (other.selectedAudioLanguageScore > 0 || (other.trackHasNoLanguage && other.stringDefinesNoLang)))) {
|
||||||
|
return (this.isForced && (this.selectedAudioLanguageScore > 0
|
||||||
|
|| (this.trackHasNoLanguage && this.stringDefinesNoLang))) ? 1 : -1;
|
||||||
|
}
|
||||||
|
// Track should not be selected.
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return (this.preferredLanguageScore > 0 || (this.selectUndeterminedTextLanguage && this.trackHasNoLanguage)) ? 1 : -1;
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue