From b7299a1164c5358fcc8a8a09f2b7fc7465e41881 Mon Sep 17 00:00:00 2001 From: aquilescanta Date: Thu, 21 Mar 2019 14:51:22 +0000 Subject: [PATCH] DefaultTrackSelector: make audio track selections before text PiperOrigin-RevId: 239594105 --- .../trackselection/DefaultTrackSelector.java | 46 ++++++++++--------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelector.java b/library/core/src/main/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelector.java index 7d488b93c6..df8b705de5 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelector.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelector.java @@ -1485,34 +1485,38 @@ public class DefaultTrackSelector extends MappingTrackSelector { AudioTrackScore selectedAudioTrackScore = null; int selectedAudioRendererIndex = C.INDEX_UNSET; + for (int i = 0; i < rendererCount; i++) { + if (C.TRACK_TYPE_AUDIO == mappedTrackInfo.getRendererType(i)) { + Pair audioSelection = + selectAudioTrack( + mappedTrackInfo.getTrackGroups(i), + rendererFormatSupports[i], + rendererMixedMimeTypeAdaptationSupports[i], + params, + !seenVideoRendererWithMappedTracks); + if (audioSelection != null + && (selectedAudioTrackScore == null + || audioSelection.second.compareTo(selectedAudioTrackScore) > 0)) { + if (selectedAudioRendererIndex != C.INDEX_UNSET) { + // We've already made a selection for another audio renderer, but it had a lower + // score. Clear the selection for that renderer. + definitions[selectedAudioRendererIndex] = null; + } + definitions[i] = audioSelection.first; + selectedAudioTrackScore = audioSelection.second; + selectedAudioRendererIndex = i; + } + } + } + int selectedTextTrackScore = Integer.MIN_VALUE; int selectedTextRendererIndex = C.INDEX_UNSET; for (int i = 0; i < rendererCount; i++) { int trackType = mappedTrackInfo.getRendererType(i); switch (trackType) { case C.TRACK_TYPE_VIDEO: - // Already done. Do nothing. - break; case C.TRACK_TYPE_AUDIO: - Pair audioSelection = - selectAudioTrack( - mappedTrackInfo.getTrackGroups(i), - rendererFormatSupports[i], - rendererMixedMimeTypeAdaptationSupports[i], - params, - !seenVideoRendererWithMappedTracks); - if (audioSelection != null - && (selectedAudioTrackScore == null - || audioSelection.second.compareTo(selectedAudioTrackScore) > 0)) { - if (selectedAudioRendererIndex != C.INDEX_UNSET) { - // We've already made a selection for another audio renderer, but it had a lower - // score. Clear the selection for that renderer. - definitions[selectedAudioRendererIndex] = null; - } - definitions[i] = audioSelection.first; - selectedAudioTrackScore = audioSelection.second; - selectedAudioRendererIndex = i; - } + // Already done. Do nothing. break; case C.TRACK_TYPE_TEXT: Pair textSelection =