From 7d289f1134058df9106eb0e36f2adb281af9d80b Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Tue, 5 Dec 2017 17:28:04 -0800 Subject: [PATCH] Fix race conditions when frames are submitted after stop() has been called --- .../video/MediaCodecDecoderRenderer.java | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 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 86a54946..cdbf0357 100644 --- a/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java +++ b/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java @@ -573,25 +573,11 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer { // May be called already, but we'll call it now to be safe prepareForStop(); - try { - // Invalidate pending decode buffers - videoDecoder.flush(); - } catch (Exception e) { - e.printStackTrace(); - } - // Wait for the renderer thread to shut down try { rendererThread.join(); } catch (InterruptedException ignored) { } - try { - // Stop the video decoder - videoDecoder.stop(); - } catch (Exception e) { - e.printStackTrace(); - } - // Halt the spinner threads stopSpinnerThreads(); } @@ -657,6 +643,11 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer { @Override public int submitDecodeUnit(byte[] decodeUnitData, int decodeUnitLength, int decodeUnitType, int frameNumber, long receiveTimeMs) { + if (stopping) { + // Don't bother if we're stopping + return MoonBridge.DR_OK; + } + totalFramesReceived++; // We can receive the same "frame" multiple times if it's an IDR frame.