Add tests for DefaultTrackSelector handling of forced & default tracks

Issue: google/ExoPlayer#9797
PiperOrigin-RevId: 420707176
This commit is contained in:
ibaker 2022-01-10 10:22:24 +00:00 committed by bachinger
parent e854be69e4
commit 055df87c8b

View File

@ -1169,16 +1169,30 @@ public final class DefaultTrackSelectorTest {
} }
/** /**
* Tests that the default track selector will select a forced text track matching the selected * Tests that the default track selector will select:
* audio language when no text language preferences match. *
* <ul>
* <li>A forced text track with unknown language if the selected audio language is also unknown.
* <li>A forced text track matching the selected audio language.
* <li>A default text track matching the selected audio language when a default text track in
* another language is present.
* <li>A default text track that doesn't match the selected audio language when a default text
* track in the selected audio language is not present (but other text tracks in this
* language are present).
* </ul>
*/ */
@Test @Test
public void selectingForcedTextTrackMatchesAudioLanguage() throws ExoPlaybackException { public void forcedAndDefaultTextTracksInteractWithSelectedAudioLanguageAsExpected()
Format.Builder formatBuilder = throws ExoPlaybackException {
Format.Builder forcedTextBuilder =
TEXT_FORMAT.buildUpon().setSelectionFlags(C.SELECTION_FLAG_FORCED); TEXT_FORMAT.buildUpon().setSelectionFlags(C.SELECTION_FLAG_FORCED);
Format forcedEnglish = formatBuilder.setLanguage("eng").build(); Format.Builder defaultTextBuilder =
Format forcedGerman = formatBuilder.setLanguage("deu").build(); TEXT_FORMAT.buildUpon().setSelectionFlags(C.SELECTION_FLAG_DEFAULT);
Format forcedNoLanguage = formatBuilder.setLanguage(C.LANGUAGE_UNDETERMINED).build(); Format forcedEnglish = forcedTextBuilder.setLanguage("eng").build();
Format defaultEnglish = defaultTextBuilder.setLanguage("eng").build();
Format forcedGerman = forcedTextBuilder.setLanguage("deu").build();
Format defaultGerman = defaultTextBuilder.setLanguage("deu").build();
Format forcedNoLanguage = forcedTextBuilder.setLanguage(C.LANGUAGE_UNDETERMINED).build();
Format noLanguageAudio = AUDIO_FORMAT.buildUpon().setLanguage(null).build(); Format noLanguageAudio = AUDIO_FORMAT.buildUpon().setLanguage(null).build();
Format germanAudio = AUDIO_FORMAT.buildUpon().setLanguage("deu").build(); Format germanAudio = AUDIO_FORMAT.buildUpon().setLanguage("deu").build();
@ -1211,6 +1225,19 @@ public final class DefaultTrackSelectorTest {
trackGroups = wrapFormats(germanAudio, forcedEnglish, forcedGerman); trackGroups = wrapFormats(germanAudio, forcedEnglish, forcedGerman);
result = trackSelector.selectTracks(rendererCapabilities, trackGroups, periodId, TIMELINE); result = trackSelector.selectTracks(rendererCapabilities, trackGroups, periodId, TIMELINE);
assertFixedSelection(result.selections[1], trackGroups, forcedGerman); assertFixedSelection(result.selections[1], trackGroups, forcedGerman);
// The audio declares german. The default german track should be selected (in favour of the
// default english track and forced german track).
trackGroups =
wrapFormats(germanAudio, forcedGerman, defaultGerman, forcedEnglish, defaultEnglish);
result = trackSelector.selectTracks(rendererCapabilities, trackGroups, periodId, TIMELINE);
assertFixedSelection(result.selections[1], trackGroups, defaultGerman);
// The audio declares german. The default english track should be selected because there's no
// default german track.
trackGroups = wrapFormats(germanAudio, forcedGerman, forcedEnglish, defaultEnglish);
result = trackSelector.selectTracks(rendererCapabilities, trackGroups, periodId, TIMELINE);
assertFixedSelection(result.selections[1], trackGroups, defaultEnglish);
} }
/** /**