From 13d886022107965bdac7bd3680378a2bca45fc60 Mon Sep 17 00:00:00 2001 From: ibaker Date: Thu, 1 Oct 2020 11:08:36 +0100 Subject: [PATCH] Tweak null-checking in TextRenderer#getNextEventTime() `subtitle` is only guaranteed to be non-null if `nextSubtitleEventIndex != C.INDEX_UNSET`. The null check added in https://github.com/google/ExoPlayer/commit/0efec5f6c12a5d583f24c122fbcbc1b1eebbabc3 was too early. Issue: #8017 PiperOrigin-RevId: 334777742 --- RELEASENOTES.md | 2 ++ .../com/google/android/exoplayer2/text/TextRenderer.java | 9 ++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 53e4e257e7..cb279f5cd1 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -13,6 +13,8 @@ * Add support for `\h` SSA/ASS style override code (non-breaking space). * Fix WebVTT subtitles in MP4 containers in DASH streams ([#7985](https://github.com/google/ExoPlayer/issues/7985)). + * Fix NPE in `TextRenderer` when playing content with a single subtitle + buffer ([#8017](https://github.com/google/ExoPlayer/issues/8017)). * UI: * Do not require subtitleButton in custom layouts of StyledPlayerView ([#7962](https://github.com/google/ExoPlayer/issues/7962)). diff --git a/library/core/src/main/java/com/google/android/exoplayer2/text/TextRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/text/TextRenderer.java index 6c140c74d1..76c1360045 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/text/TextRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/text/TextRenderer.java @@ -325,10 +325,13 @@ public final class TextRenderer extends BaseRenderer implements Callback { } private long getNextEventTime() { + if (nextSubtitleEventIndex == C.INDEX_UNSET) { + return Long.MAX_VALUE; + } checkNotNull(subtitle); - return nextSubtitleEventIndex == C.INDEX_UNSET - || nextSubtitleEventIndex >= subtitle.getEventTimeCount() - ? Long.MAX_VALUE : subtitle.getEventTime(nextSubtitleEventIndex); + return nextSubtitleEventIndex >= subtitle.getEventTimeCount() + ? Long.MAX_VALUE + : subtitle.getEventTime(nextSubtitleEventIndex); } private void updateOutput(List cues) {