From 10fac6847a52b4a21848237f023fc1dcb87bb47a 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 --- .../media3/common/audio/AudioProcessingPipeline.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libraries/common/src/main/java/androidx/media3/common/audio/AudioProcessingPipeline.java b/libraries/common/src/main/java/androidx/media3/common/audio/AudioProcessingPipeline.java index c8fbcf7dd9..735b263dbc 100644 --- a/libraries/common/src/main/java/androidx/media3/common/audio/AudioProcessingPipeline.java +++ b/libraries/common/src/main/java/androidx/media3/common/audio/AudioProcessingPipeline.java @@ -212,8 +212,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; } /**