From 193306f2f30c59f2a8a139787e59894ee9600b34 Mon Sep 17 00:00:00 2001 From: samrobinson Date: Wed, 22 Jul 2020 10:30:58 +0100 Subject: [PATCH] Ensure audio renderer exceptions report the correct format. PiperOrigin-RevId: 322534950 --- .../audio/DecoderAudioRenderer.java | 21 +++++++++++-------- .../audio/MediaCodecAudioRenderer.java | 7 +++---- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/audio/DecoderAudioRenderer.java b/library/core/src/main/java/com/google/android/exoplayer2/audio/DecoderAudioRenderer.java index c428ae480c..f1e3710e2d 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/audio/DecoderAudioRenderer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/audio/DecoderAudioRenderer.java @@ -255,7 +255,11 @@ public abstract class DecoderAudioRenderer extends BaseRenderer implements Media // End of stream read having not read a format. Assertions.checkState(flagsOnlyBuffer.isEndOfStream()); inputStreamEnded = true; - processEndOfStream(); + try { + processEndOfStream(); + } catch (AudioSink.WriteException e) { + throw createRendererException(e, /* format= */ null); + } return; } else { // We still don't have a format and can't make progress without one. @@ -356,7 +360,11 @@ public abstract class DecoderAudioRenderer extends BaseRenderer implements Media } else { outputBuffer.release(); outputBuffer = null; - processEndOfStream(); + try { + processEndOfStream(); + } catch (AudioSink.WriteException e) { + throw createRendererException(e, getOutputFormat()); + } } return false; } @@ -431,14 +439,9 @@ public abstract class DecoderAudioRenderer extends BaseRenderer implements Media } } - private void processEndOfStream() throws ExoPlaybackException { + private void processEndOfStream() throws AudioSink.WriteException { outputStreamEnded = true; - try { - audioSink.playToEndOfStream(); - } catch (AudioSink.WriteException e) { - // TODO(internal: b/145658993) Use outputFormat for the call from drainOutputBuffer. - throw createRendererException(e, inputFormat); - } + audioSink.playToEndOfStream(); } private void flushDecoder() throws ExoPlaybackException { 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 b07e50e0c7..9e3fbe58f1 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 @@ -634,8 +634,7 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media try { fullyConsumed = audioSink.handleBuffer(buffer, bufferPresentationTimeUs, sampleCount); } catch (AudioSink.InitializationException | AudioSink.WriteException e) { - // TODO(internal: b/145658993) Use outputFormat instead. - throw createRendererException(e, inputFormat); + throw createRendererException(e, format); } if (fullyConsumed) { @@ -654,8 +653,8 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media try { audioSink.playToEndOfStream(); } catch (AudioSink.WriteException e) { - // TODO(internal: b/145658993) Use outputFormat instead. - throw createRendererException(e, inputFormat); + Format outputFormat = getCurrentOutputFormat(); + throw createRendererException(e, outputFormat != null ? outputFormat : inputFormat); } }