diff --git a/RELEASENOTES.md b/RELEASENOTES.md index b832026c74..fdc3db7f3b 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -23,6 +23,9 @@ ([#8106](https://github.com/google/ExoPlayer/issues/8106)). * Suppress ProGuard warnings caused by Guava's compile-only dependencies ([#8103](https://github.com/google/ExoPlayer/issues/8103)). + * Fix issue that could cause playback to freeze when selecting tracks, if + extension audio renderers are being used + ([#8203](https://github.com/google/ExoPlayer/issues/8203)). * Track selection: * Add option to specify multiple preferred audio or text languages. * Forward `Timeline` and `MediaPeriodId` to `TrackSelection.Factory`. diff --git a/library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java index 19988cd54b..5825af56a6 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/audio/MediaCodecAudioRenderer.java @@ -102,6 +102,7 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media private long currentPositionUs; private boolean allowFirstBufferPositionDiscontinuity; private boolean allowPositionDiscontinuity; + private boolean audioSinkNeedsReset; private boolean experimentalKeepAudioTrackOnSeek; @@ -500,6 +501,7 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media @Override protected void onDisabled() { + audioSinkNeedsReset = true; try { audioSink.flush(); } finally { @@ -516,7 +518,10 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media try { super.onReset(); } finally { - audioSink.reset(); + if (audioSinkNeedsReset) { + audioSinkNeedsReset = false; + audioSink.reset(); + } } }