From 0a2117241f0f862482f09e4ad2b6090ea7561cac Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 22 May 2022 14:32:03 -0500 Subject: [PATCH] Wrap Choreographer calls to releaseOutputBuffer() in try/catch --- .../video/MediaCodecDecoderRenderer.java | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java b/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java index d424e980..a4ec184f 100644 --- a/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java +++ b/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java @@ -432,15 +432,20 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer implements C // frame of buffer to smooth over network/rendering jitter. Integer nextOutputBuffer = outputBufferQueue.poll(); if (nextOutputBuffer != null) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - videoDecoder.releaseOutputBuffer(nextOutputBuffer, frameTimeNanos); - } - else { - videoDecoder.releaseOutputBuffer(nextOutputBuffer, true); - } + try { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + videoDecoder.releaseOutputBuffer(nextOutputBuffer, frameTimeNanos); + } + else { + videoDecoder.releaseOutputBuffer(nextOutputBuffer, true); + } - lastRenderedFrameTimeNanos = frameTimeNanos; - activeWindowVideoStats.totalFramesRendered++; + lastRenderedFrameTimeNanos = frameTimeNanos; + activeWindowVideoStats.totalFramesRendered++; + } catch (Exception e) { + // This will leak nextOutputBuffer, but there's really nothing else we can do + handleDecoderException(e, null, 0, false); + } } }