From 00e3753d625b9782e8ee697dbbf5d61cb8fcb5af Mon Sep 17 00:00:00 2001 From: kimvde Date: Mon, 15 Apr 2024 06:46:47 -0700 Subject: [PATCH] Fix buffer lost when flushing AudioGraphInput Before this CL, currentInputBufferBeingOutput was set to null without adding the buffer to the queue of available buffers, which was making this buffer unusable. After multiple seeks, playback was stuck because the AudioGraphInput had no input buffer left. PiperOrigin-RevId: 624943271 --- .../java/androidx/media3/transformer/AudioGraphInput.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/AudioGraphInput.java b/libraries/transformer/src/main/java/androidx/media3/transformer/AudioGraphInput.java index 6e2442b3a1..5250d39d8d 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/AudioGraphInput.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/AudioGraphInput.java @@ -235,12 +235,16 @@ import java.util.concurrent.atomic.AtomicReference; // queueing it. clearAndAddToAvailableBuffers(availableInputBuffers.remove()); } + if (currentInputBufferBeingOutput != null) { + clearAndAddToAvailableBuffers(currentInputBufferBeingOutput); + currentInputBufferBeingOutput = null; + } while (!pendingInputBuffers.isEmpty()) { clearAndAddToAvailableBuffers(pendingInputBuffers.remove()); } + checkState(availableInputBuffers.size() == MAX_INPUT_BUFFER_COUNT); silentAudioGenerator.flush(); audioProcessingPipeline.flush(); - currentInputBufferBeingOutput = null; receivedEndOfStreamFromInput = false; queueEndOfStreamAfterSilence = false; startTimeUs = C.TIME_UNSET;