From fad2846d1c4e98e1a782ccaa42f03b85ef74d46c Mon Sep 17 00:00:00 2001 From: krocard Date: Thu, 24 Sep 2020 15:51:28 +0100 Subject: [PATCH] Workaround AudioTrack incorrect error code #exo-offload PiperOrigin-RevId: 333513385 --- .../exoplayer2/audio/DefaultAudioSink.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/audio/DefaultAudioSink.java b/library/core/src/main/java/com/google/android/exoplayer2/audio/DefaultAudioSink.java index 78a62ed8b3..ee6dba839c 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/audio/DefaultAudioSink.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/audio/DefaultAudioSink.java @@ -234,6 +234,18 @@ public final class DefaultAudioSink implements AudioSink { /** To avoid underruns on some devices (e.g., Broadcom 7271), scale up the AC3 buffer duration. */ private static final int AC3_BUFFER_MULTIPLICATION_FACTOR = 2; + /** + * Native error code equivalent of {@link AudioTrack#ERROR_DEAD_OBJECT} to workaround missing + * error code translation on some devices. + * + *

On some devices, AudioTrack native error codes are not always converted to their SDK + * equivalent. + * + *

For example: {@link AudioTrack#write(byte[], int, int)} can return -32 instead of {@link + * AudioTrack#ERROR_DEAD_OBJECT}. + */ + private static final int ERROR_NATIVE_DEAD_OBJECT = -32; + private static final String TAG = "AudioTrack"; /** @@ -966,7 +978,8 @@ public final class DefaultAudioSink implements AudioSink { } private static boolean isAudioTrackDeadObject(int status) { - return Util.SDK_INT >= 24 && status == AudioTrack.ERROR_DEAD_OBJECT; + return (Util.SDK_INT >= 24 && status == AudioTrack.ERROR_DEAD_OBJECT) + || status == ERROR_NATIVE_DEAD_OBJECT; } private boolean drainToEndOfStream() throws WriteException {