From 0fdcb3347c3cec744c145489ad827f921a08c738 Mon Sep 17 00:00:00 2001 From: Oliver Woodman Date: Wed, 25 Feb 2015 11:48:55 +0000 Subject: [PATCH] continueBuffering should return true when ended. This issue didn't have any material impact on playbacks, but fixing it anyway to be technically correct. --- .../android/exoplayer/chunk/ChunkSampleSource.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/library/src/main/java/com/google/android/exoplayer/chunk/ChunkSampleSource.java b/library/src/main/java/com/google/android/exoplayer/chunk/ChunkSampleSource.java index c51be31c5c..78bb18f2b6 100644 --- a/library/src/main/java/com/google/android/exoplayer/chunk/ChunkSampleSource.java +++ b/library/src/main/java/com/google/android/exoplayer/chunk/ChunkSampleSource.java @@ -276,13 +276,14 @@ public class ChunkSampleSource implements SampleSource, Loader.Callback { boolean haveSamples = false; if (isPendingReset() || mediaChunks.isEmpty()) { // No sample available. - } else if (mediaChunks.getFirst().sampleAvailable()) { + } else if (sampleAvailableOrFinishedLastChunk(mediaChunks.getFirst())) { // There's a sample available to be read from the current chunk. haveSamples = true; } else { // It may be the case that the current chunk has been fully read but not yet discarded and // that the next chunk has an available sample. Return true if so, otherwise false. - haveSamples = mediaChunks.size() > 1 && mediaChunks.get(1).sampleAvailable(); + haveSamples = mediaChunks.size() > 1 + && sampleAvailableOrFinishedLastChunk(mediaChunks.get(1)); } if (!haveSamples) { @@ -716,6 +717,10 @@ public class ChunkSampleSource implements SampleSource, Loader.Callback { return true; } + private boolean sampleAvailableOrFinishedLastChunk(MediaChunk chunk) throws IOException { + return chunk.sampleAvailable() || (chunk.isLastChunk() && chunk.isReadFinished()); + } + private boolean isMediaChunk(Chunk chunk) { return chunk instanceof MediaChunk; }