From c17c23d1f1246dcee9e8e6b85942fbae3a2c5a08 Mon Sep 17 00:00:00 2001 From: andrewlewis Date: Tue, 13 Dec 2022 13:22:37 +0000 Subject: [PATCH] Generate complete silent audio frames `SilentAudioGenerator` could output a fractional audio frame, and this could cause downstream components to throw because of trying to read a complete audio frame but only seeing a partial one. Calculate the output buffer size based on the frame size (which is a no-op for stereo 16-bit audio) and calculate a total number of frames to output then multiple by the frame size. PiperOrigin-RevId: 494992941 --- .../exoplayer2/transformer/SilentAudioGenerator.java | 8 +++++--- .../transformerdumps/mp4/sample.mp4.silentaudio.dump | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/SilentAudioGenerator.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/SilentAudioGenerator.java index ad917b23d5..194d06fafa 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/SilentAudioGenerator.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/SilentAudioGenerator.java @@ -16,19 +16,21 @@ package com.google.android.exoplayer2.transformer; +import com.google.android.exoplayer2.C; import java.nio.ByteBuffer; import java.nio.ByteOrder; /* package */ final class SilentAudioGenerator { - private static final int DEFAULT_BUFFER_SIZE = 4096; + private static final int DEFAULT_BUFFER_SIZE_FRAMES = 1024; private final ByteBuffer internalBuffer; private long remainingBytesToOutput; public SilentAudioGenerator(long totalDurationUs, long sampleRate, int frameSize) { - remainingBytesToOutput = (sampleRate * frameSize * totalDurationUs) / 1_000_000L; - internalBuffer = ByteBuffer.allocate(DEFAULT_BUFFER_SIZE).order(ByteOrder.nativeOrder()); + remainingBytesToOutput = frameSize * ((sampleRate * totalDurationUs) / C.MICROS_PER_SECOND); + internalBuffer = + ByteBuffer.allocate(DEFAULT_BUFFER_SIZE_FRAMES * frameSize).order(ByteOrder.nativeOrder()); internalBuffer.flip(); } diff --git a/testdata/src/test/assets/transformerdumps/mp4/sample.mp4.silentaudio.dump b/testdata/src/test/assets/transformerdumps/mp4/sample.mp4.silentaudio.dump index f4685803b7..4e2ac6e637 100644 --- a/testdata/src/test/assets/transformerdumps/mp4/sample.mp4.silentaudio.dump +++ b/testdata/src/test/assets/transformerdumps/mp4/sample.mp4.silentaudio.dump @@ -370,8 +370,8 @@ sample: presentationTimeUs = 998459 sample: trackIndex = 1 - dataHashCode = -1029274849 - size = 409 + dataHashCode = -587391743 + size = 408 isKeyFrame = true presentationTimeUs = 1021679 sample: