From 6edb687aef8bda14ad70e1defb792b15fe0af9dc Mon Sep 17 00:00:00 2001 From: tianyifeng Date: Thu, 13 Mar 2025 07:16:55 -0700 Subject: [PATCH] Do not dump buffers not fully consumed repeatedly in CapturingAudioSink #cherrypick PiperOrigin-RevId: 736495022 --- .../media3/test/utils/CapturingAudioSink.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/libraries/test_utils/src/main/java/androidx/media3/test/utils/CapturingAudioSink.java b/libraries/test_utils/src/main/java/androidx/media3/test/utils/CapturingAudioSink.java index 2de8f39306..8f1a35fe27 100644 --- a/libraries/test_utils/src/main/java/androidx/media3/test/utils/CapturingAudioSink.java +++ b/libraries/test_utils/src/main/java/androidx/media3/test/utils/CapturingAudioSink.java @@ -43,6 +43,7 @@ public final class CapturingAudioSink extends ForwardingAudioSink implements Dum private int bufferCount; private long lastPresentationTimeUs; + @Nullable private ByteBuffer currentBuffer; /** Creates the capturing audio sink. */ public static CapturingAudioSink create() { @@ -86,12 +87,19 @@ public final class CapturingAudioSink extends ForwardingAudioSink implements Dum ByteBuffer buffer, long presentationTimeUs, int encodedAccessUnitCount) throws InitializationException, WriteException { lastPresentationTimeUs = presentationTimeUs; - if (!buffer.hasRemaining()) { + // The handleBuffer is called repeatedly with the same buffer until it's been fully consumed by + // the sink. We only want to dump each buffer once. + if (buffer != currentBuffer && !buffer.hasRemaining()) { // Empty buffers are not processed any further and need to be intercepted here. // TODO: b/174737370 - Output audio bytes in Robolectric to avoid this situation. interceptedData.add(new DumpableBuffer(bufferCount++, buffer, lastPresentationTimeUs)); + currentBuffer = buffer; } - return super.handleBuffer(buffer, presentationTimeUs, encodedAccessUnitCount); + boolean fullyBuffered = super.handleBuffer(buffer, presentationTimeUs, encodedAccessUnitCount); + if (fullyBuffered) { + currentBuffer = null; + } + return fullyBuffered; } @Override