From 2fbe1bbfb3c533c370c07a4f45068c00ea9c6efb Mon Sep 17 00:00:00 2001 From: yschimke Date: Thu, 4 Aug 2022 08:00:57 +0000 Subject: [PATCH] AudioOffload recovery. Avoids disabling Offload on a write error, and instead relies on this being disabled on the AudioTrack init. It will no longer recover by disabling offload. PiperOrigin-RevId: 465248917 --- .../android/exoplayer2/audio/DefaultAudioSink.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) 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 d12b5cef483..47fe55eafc5 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 @@ -1187,10 +1187,12 @@ private void writeBuffer(ByteBuffer buffer, long avSyncPresentationTimeUs) throw if (bytesWrittenOrError < 0) { int error = bytesWrittenOrError; - boolean isRecoverable = isAudioTrackDeadObject(error); - if (isRecoverable) { - maybeDisableOffload(); - } + + // Treat a write error on a previously successful offload channel as recoverable + // without disabling offload. Offload will be disabled when a new AudioTrack is created, + // if no longer supported. + boolean isRecoverable = isAudioTrackDeadObject(error) && writtenEncodedFrames > 0; + WriteException e = new WriteException(error, configuration.inputFormat, isRecoverable); if (listener != null) { listener.onAudioSinkError(e);