From 732311c2a4d044958e70b8cf745e435fdca1ce9d Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 15 May 2017 21:41:41 -0700 Subject: [PATCH] Fix codec display after streaming and restore polling behavior of non-direct submit decoders --- app/src/main/java/com/limelight/Game.java | 2 +- .../binding/video/MediaCodecDecoderRenderer.java | 12 ++++++++++-- moonlight-common | 2 +- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/limelight/Game.java b/app/src/main/java/com/limelight/Game.java index 6d87c8dc..b68d040e 100644 --- a/app/src/main/java/com/limelight/Game.java +++ b/app/src/main/java/com/limelight/Game.java @@ -424,7 +424,7 @@ public class Game extends Activity implements SurfaceHolder.Callback, } if (conn != null) { - int videoFormat = conn.getActiveVideoFormat(); + int videoFormat = decoderRenderer.getActiveVideoFormat(); displayedFailureDialog = true; stopConnection(); 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 65847ad7..f1b8c797 100644 --- a/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java +++ b/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java @@ -133,6 +133,10 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer { return avcDecoder != null; } + public int getActiveVideoFormat() { + return this.videoFormat; + } + @Override public boolean setup(int format, int width, int height, int redrawRate) { this.initialWidth = width; @@ -274,7 +278,8 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer { while (!isInterrupted()) { try { // Try to output a frame - int outIndex = videoDecoder.dequeueOutputBuffer(info, 50000); + int outIndex = videoDecoder.dequeueOutputBuffer(info, + directSubmit ? 50000 : 0); if (outIndex >= 0) { long presentationTimeUs = info.presentationTimeUs; int lastIndex = outIndex; @@ -301,6 +306,9 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer { } else { switch (outIndex) { case MediaCodec.INFO_TRY_AGAIN_LATER: + if (!directSubmit) { + Thread.yield(); + } break; case MediaCodec.INFO_OUTPUT_FORMAT_CHANGED: LimeLog.info("Output format changed"); @@ -328,7 +336,7 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer { startTime = MediaCodecHelper.getMonotonicMillis(); while (rendererThread.isAlive() && index < 0) { - index = videoDecoder.dequeueInputBuffer(500); + index = videoDecoder.dequeueInputBuffer(10000); } if (index < 0) { diff --git a/moonlight-common b/moonlight-common index e9b406c5..bda8e3b8 160000 --- a/moonlight-common +++ b/moonlight-common @@ -1 +1 @@ -Subproject commit e9b406c52e552dca6e3ad98771f5ea1b94363248 +Subproject commit bda8e3b84ddb633d47b00ffc7ec4d5f20c7eecae