From 363b85226e822128815fee268358f93d5259a33e Mon Sep 17 00:00:00 2001 From: samrobinson Date: Mon, 20 Feb 2023 11:43:09 +0000 Subject: [PATCH] Pass AudioFormat to ASP#computeNextEncoderInputBufferTimeUs. This method uses sampleRate, channelCount and pcmEncoding, so passing AudioFormat is easier. This will lead into a future change that builds the encoderInputAudioFormat from encoder.getConfigurationFormat() PiperOrigin-RevId: 510956177 --- .../exoplayer2/transformer/AudioSamplePipeline.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/AudioSamplePipeline.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/AudioSamplePipeline.java index f598421fb4..fe4937129e 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/AudioSamplePipeline.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/AudioSamplePipeline.java @@ -326,9 +326,7 @@ import org.checkerframework.dataflow.qual.Pure; encoderInputBufferData.put(inputBuffer); encoderInputBuffer.timeUs = nextEncoderInputBufferTimeUs; computeNextEncoderInputBufferTimeUs( - /* bytesWritten= */ encoderInputBufferData.position(), - encoderInputAudioFormat.bytesPerFrame, - encoderInputAudioFormat.sampleRate); + /* bytesWritten= */ encoderInputBufferData.position(), encoderInputAudioFormat); encoderInputBuffer.setFlags(0); encoderInputBuffer.flip(); inputBuffer.limit(bufferLimit); @@ -355,15 +353,14 @@ import org.checkerframework.dataflow.qual.Pure; return transformationRequest.buildUpon().setAudioMimeType(actualFormat.sampleMimeType).build(); } - private void computeNextEncoderInputBufferTimeUs( - long bytesWritten, int bytesPerFrame, int sampleRate) { + private void computeNextEncoderInputBufferTimeUs(long bytesWritten, AudioFormat audioFormat) { // The calculation below accounts for remainders and rounding. Without that it corresponds to // the following: // bufferDurationUs = numberOfFramesInBuffer * sampleDurationUs // where numberOfFramesInBuffer = bytesWritten / bytesPerFrame // and sampleDurationUs = C.MICROS_PER_SECOND / sampleRate long numerator = bytesWritten * C.MICROS_PER_SECOND + encoderBufferDurationRemainder; - long denominator = (long) bytesPerFrame * sampleRate; + long denominator = (long) audioFormat.bytesPerFrame * audioFormat.sampleRate; long bufferDurationUs = numerator / denominator; encoderBufferDurationRemainder = numerator - bufferDurationUs * denominator; if (encoderBufferDurationRemainder > 0) { // Ceil division result.