diff --git a/app/src/main/java/com/limelight/Game.java b/app/src/main/java/com/limelight/Game.java index 905cca58..649ee680 100644 --- a/app/src/main/java/com/limelight/Game.java +++ b/app/src/main/java/com/limelight/Game.java @@ -944,6 +944,16 @@ public class Game extends Activity implements SurfaceHolder.Callback, displayedFailureDialog = true; LimeLog.severe(stage+" failed: "+errorCode); + // If video initialization failed and the surface is still valid, display extra information for the user + if (stage.contains("video") && streamView.getHolder().getSurface().isValid()) { + runOnUiThread(new Runnable() { + @Override + public void run() { + Toast.makeText(Game.this, "Video decoder failed to initialize. Your device may not support the selected resolution.", Toast.LENGTH_LONG).show(); + } + }); + } + Dialog.displayDialog(this, getResources().getString(R.string.conn_error_title), getResources().getString(R.string.conn_error_msg)+" "+stage, true); } 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 7c02bd07..dc372743 100644 --- a/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java +++ b/app/src/main/java/com/limelight/binding/video/MediaCodecDecoderRenderer.java @@ -440,12 +440,15 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer { startSpinnerThreads(); } + // !!! May be called even if setup()/start() fails !!! public void prepareForStop() { // Let the decoding code know to ignore codec exceptions now stopping = true; // Halt the rendering thread - rendererThread.interrupt(); + if (rendererThread != null) { + rendererThread.interrupt(); + } } @Override