From 192c1a18f7a57bcc0c7ff1157a4f3439dfe3f611 Mon Sep 17 00:00:00 2001 From: tonihei Date: Tue, 30 Mar 2021 14:15:00 +0100 Subject: [PATCH] Don't include video tracks without bitrate in adaptive selection. This is generally not supported by our classes. A similar change for audio was made in https://github.com/google/ExoPlayer/commit/aa2beb080c6f621264527a6147a258bdd7f0fa27. PiperOrigin-RevId: 365795371 --- .../trackselection/DefaultTrackSelector.java | 5 +++-- .../trackselection/DefaultTrackSelectorTest.java | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 2 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 03e295460b..57af0f2f85 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 @@ -2125,8 +2125,9 @@ public class DefaultTrackSelector extends MappingTrackSelector { || (minVideoHeight <= format.height && format.height <= maxVideoHeight)) && (format.frameRate == Format.NO_VALUE || (minVideoFrameRate <= format.frameRate && format.frameRate <= maxVideoFrameRate)) - && (format.bitrate == Format.NO_VALUE - || (minVideoBitrate <= format.bitrate && format.bitrate <= maxVideoBitrate)); + && format.bitrate != Format.NO_VALUE + && minVideoBitrate <= format.bitrate + && format.bitrate <= maxVideoBitrate; } @Nullable diff --git a/library/core/src/test/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelectorTest.java b/library/core/src/test/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelectorTest.java index 9aebfb7718..29f3e69001 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelectorTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelectorTest.java @@ -88,6 +88,7 @@ public final class DefaultTrackSelectorTest { .setSampleMimeType(MimeTypes.VIDEO_H264) .setWidth(1024) .setHeight(768) + .setAverageBitrate(450000) .build(); private static final Format AUDIO_FORMAT = new Format.Builder() @@ -1496,6 +1497,21 @@ public final class DefaultTrackSelectorTest { assertAdaptiveSelection(result.selections[0], trackGroups.get(0), 1, 2); } + @Test + public void selectTracks_multipleVideoTracksWithoutBitrate_onlySelectsSingleTrack() + throws Exception { + TrackGroupArray trackGroups = + singleTrackGroup( + VIDEO_FORMAT.buildUpon().setId("0").setAverageBitrate(Format.NO_VALUE).build(), + VIDEO_FORMAT.buildUpon().setId("1").setAverageBitrate(Format.NO_VALUE).build()); + TrackSelectorResult result = + trackSelector.selectTracks( + new RendererCapabilities[] {VIDEO_CAPABILITIES}, trackGroups, periodId, TIMELINE); + + assertThat(result.length).isEqualTo(1); + assertFixedSelection(result.selections[0], trackGroups.get(0), /* expectedTrack= */ 0); + } + @Test public void selectTracks_multipleVideoAndAudioTracks() throws Exception { Format videoFormat1 = VIDEO_FORMAT.buildUpon().setAverageBitrate(1000).build();