From 4a30dff5241c759934ca287fb0838c35df0ed5b3 Mon Sep 17 00:00:00 2001 From: olly Date: Fri, 18 Nov 2016 04:07:20 -0800 Subject: [PATCH] Fix NPE in TextTrackRenderer Issue: #2081 ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=139566990 --- .../android/exoplayer2/text/TextRenderer.java | 39 +++++++++---------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/library/src/main/java/com/google/android/exoplayer2/text/TextRenderer.java b/library/src/main/java/com/google/android/exoplayer2/text/TextRenderer.java index e28363f9e4..8dbde1be5e 100644 --- a/library/src/main/java/com/google/android/exoplayer2/text/TextRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer2/text/TextRenderer.java @@ -114,19 +114,11 @@ public final class TextRenderer extends BaseRenderer implements Callback { @Override protected void onPositionReset(long positionUs, boolean joining) { + clearOutput(); + resetBuffers(); + decoder.flush(); inputStreamEnded = false; outputStreamEnded = false; - if (subtitle != null) { - subtitle.release(); - subtitle = null; - } - if (nextSubtitle != null) { - nextSubtitle.release(); - nextSubtitle = null; - } - nextInputBuffer = null; - clearOutput(); - decoder.flush(); } @Override @@ -220,18 +212,10 @@ public final class TextRenderer extends BaseRenderer implements Callback { @Override protected void onDisabled() { - if (subtitle != null) { - subtitle.release(); - subtitle = null; - } - if (nextSubtitle != null) { - nextSubtitle.release(); - nextSubtitle = null; - } + clearOutput(); + resetBuffers(); decoder.release(); decoder = null; - nextInputBuffer = null; - clearOutput(); super.onDisabled(); } @@ -247,6 +231,19 @@ public final class TextRenderer extends BaseRenderer implements Callback { return true; } + private void resetBuffers() { + nextInputBuffer = null; + nextSubtitleEventIndex = C.INDEX_UNSET; + if (subtitle != null) { + subtitle.release(); + subtitle = null; + } + if (nextSubtitle != null) { + nextSubtitle.release(); + nextSubtitle = null; + } + } + private long getNextEventTime() { return ((nextSubtitleEventIndex == C.INDEX_UNSET) || (nextSubtitleEventIndex >= subtitle.getEventTimeCount())) ? Long.MAX_VALUE