From 8a0e76ba32145b90e33fcf0c80f3c7e05a2a2b9d Mon Sep 17 00:00:00 2001 From: Oliver Woodman Date: Thu, 5 Jan 2017 14:58:13 +0000 Subject: [PATCH] Make sure we don't read ahead of deferred enable/disable operations Issue: #2290 --- .../android/exoplayer2/ExoPlayerImplInternal.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java b/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java index 21f3a425a2..d82ef7e14b 100644 --- a/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java +++ b/library/src/main/java/com/google/android/exoplayer2/ExoPlayerImplInternal.java @@ -1138,18 +1138,24 @@ import java.io.IOException; } if (readingPeriodHolder.isLast) { - for (Renderer renderer : enabledRenderers) { + for (int i = 0; i < renderers.length; i++) { + Renderer renderer = renderers[i]; + SampleStream sampleStream = readingPeriodHolder.sampleStreams[i]; // Defer setting the stream as final until the renderer has actually consumed the whole // stream in case of playlist changes that cause the stream to be no longer final. - if (renderer.hasReadStreamToEnd()) { + if (sampleStream != null && renderer.getStream() == sampleStream + && renderer.hasReadStreamToEnd()) { renderer.setCurrentStreamFinal(); } } return; } - for (Renderer renderer : enabledRenderers) { - if (!renderer.hasReadStreamToEnd()) { + for (int i = 0; i < renderers.length; i++) { + Renderer renderer = renderers[i]; + SampleStream sampleStream = readingPeriodHolder.sampleStreams[i]; + if (renderer.getStream() != sampleStream + || (sampleStream != null && !renderer.hasReadStreamToEnd())) { return; } }