From a10af8ecda584ea0d2bbb2616296b60aace8d638 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 --- .../media3/exoplayer/audio/DefaultAudioSink.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioSink.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioSink.java index ccfe4ffc97..9431639668 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioSink.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioSink.java @@ -1196,10 +1196,12 @@ public final class DefaultAudioSink implements AudioSink { 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);