From 412c98e230e4f5eb8eba0e6cb8e1f8ddf2fff24c Mon Sep 17 00:00:00 2001 From: samrobinson Date: Wed, 23 Nov 2022 14:07:17 +0000 Subject: [PATCH] Return output immediately if available from AudioProcessingPipeline. If there is output data available (outputBuffer.hasRemaining()), then there is no need to move other data between the underlying processors. It will not change the buffer being returned by that call to getOutput. If there is no output data readily available, it's necessary to go to the AudioProcessors and pass buffers between them, as this may produce data for output. PiperOrigin-RevId: 490482653 --- .../android/exoplayer2/audio/AudioProcessingPipeline.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/library/common/src/main/java/com/google/android/exoplayer2/audio/AudioProcessingPipeline.java b/library/common/src/main/java/com/google/android/exoplayer2/audio/AudioProcessingPipeline.java index 62e0c1135b..f4d4621524 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/audio/AudioProcessingPipeline.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/audio/AudioProcessingPipeline.java @@ -210,8 +210,11 @@ public final class AudioProcessingPipeline { if (!isOperational()) { return EMPTY_BUFFER; } - processData(EMPTY_BUFFER); - return outputBuffers[getFinalOutputBufferIndex()]; + ByteBuffer outputBuffer = outputBuffers[getFinalOutputBufferIndex()]; + if (!outputBuffer.hasRemaining()) { + processData(EMPTY_BUFFER); + } + return outputBuffer; } /**