From 4a9ff7b094473df1586fdffee2c14069a0514b59 Mon Sep 17 00:00:00 2001 From: Oliver Woodman Date: Tue, 1 Sep 2015 14:16:36 +0100 Subject: [PATCH] Correctly propagate END_OF_STREAM through Opus decoder. --- .../android/exoplayer/ext/opus/OpusDecoderWrapper.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/extensions/opus/src/main/java/com/google/android/exoplayer/ext/opus/OpusDecoderWrapper.java b/extensions/opus/src/main/java/com/google/android/exoplayer/ext/opus/OpusDecoderWrapper.java index 074fc43f7d..3c18fb3712 100644 --- a/extensions/opus/src/main/java/com/google/android/exoplayer/ext/opus/OpusDecoderWrapper.java +++ b/extensions/opus/src/main/java/com/google/android/exoplayer/ext/opus/OpusDecoderWrapper.java @@ -203,6 +203,7 @@ import java.util.LinkedList; } // Decode. + boolean skipBuffer = false; if (inputBuffer.getFlag(FLAG_END_OF_STREAM)) { outputBuffer.setFlag(FLAG_END_OF_STREAM); } else { @@ -221,13 +222,14 @@ import java.util.LinkedList; if (skipSamples > 0) { int bytesPerSample = opusHeader.channelCount * 2; int skipBytes = skipSamples * bytesPerSample; - if (outputBuffer.size < skipBytes) { + if (outputBuffer.size <= skipBytes) { skipSamples -= outputBuffer.size / bytesPerSample; outputBuffer.size = 0; + skipBuffer = true; } else { skipSamples = 0; - outputBuffer.data.position(skipBytes); outputBuffer.size -= skipBytes; + outputBuffer.data.position(skipBytes); } } } @@ -235,7 +237,7 @@ import java.util.LinkedList; synchronized (lock) { if (flushDecodedOutputBuffer || inputBuffer.sampleHolder.isDecodeOnly() - || outputBuffer.size == 0) { + || skipBuffer) { // In the following cases, we make the output buffer available again rather than queuing it // to be consumed: // 1) A flush occured whilst we were decoding.