From a2ce75d83639ca89eedad86054382bc2c5cf52ce Mon Sep 17 00:00:00 2001 From: krocard Date: Wed, 6 May 2020 17:58:05 +0100 Subject: [PATCH] AudioSink buffers should be in LITTLE_ENDIAN Some part of the audio pipeline in the DefaultAudioSink (PCM processors) are expecting little endian buffers. As a result, in order to behave like MediaCodec, make sure the passthrough MediaCodec-bypass pipeline also processes little endian output buffers. PiperOrigin-RevId: 310172464 --- .../android/exoplayer2/mediacodec/MediaCodecRenderer.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java index 87b5ce398e..5818b51f7f 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecRenderer.java @@ -57,6 +57,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.nio.ByteBuffer; +import java.nio.ByteOrder; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.List; @@ -2169,6 +2170,10 @@ public abstract class MediaCodecRenderer extends BaseRenderer { return false; // The buffer could not be filled, there is nothing more to do. } batchBuffer.flip(); // Buffer at least partially full, it can now be processed. + // MediaCodec outputs buffers in native endian: + // https://developer.android.com/reference/android/media/MediaCodec#raw-audio-buffers + // and code called from processOutputBuffer expects this endianness. + batchBuffer.data.order(ByteOrder.nativeOrder()); return true; }