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