Fix crashes caused by rendering to a surface on teardown

This commit is contained in:
Cameron Gutman 2013-11-20 00:32:37 -05:00
parent 16d629f5cf
commit 34905dd01e
4 changed files with 15 additions and 7 deletions

View File

@ -86,16 +86,11 @@ public class Game extends Activity implements OnGenericMotionListener, OnTouchLi
@Override @Override
public void onPause() { public void onPause() {
conn.stop();
finish(); finish();
super.onPause(); super.onPause();
} }
@Override
public void onDestroy() {
conn.stop();
super.onDestroy();
}
@Override @Override
public void onTrimMemory(int trimLevel) { public void onTrimMemory(int trimLevel) {
if (trimLevel >= ComponentCallbacks2.TRIM_MEMORY_RUNNING_LOW) if (trimLevel >= ComponentCallbacks2.TRIM_MEMORY_RUNNING_LOW)

View File

@ -37,6 +37,7 @@ public class NvVideoStream {
private AvVideoDepacketizer depacketizer = new AvVideoDepacketizer(); private AvVideoDepacketizer depacketizer = new AvVideoDepacketizer();
private DecoderRenderer decrend; private DecoderRenderer decrend;
private boolean startedRendering;
private boolean aborting = false; private boolean aborting = false;
@ -70,6 +71,10 @@ public class NvVideoStream {
} catch (InterruptedException e) { } } catch (InterruptedException e) { }
} }
if (startedRendering) {
decrend.stop();
}
if (decrend != null) { if (decrend != null) {
decrend.release(); decrend.release();
} }
@ -187,6 +192,7 @@ public class NvVideoStream {
// Start the renderer // Start the renderer
decrend.start(); decrend.start();
startedRendering = true;
} }
}; };
threads.add(t); threads.add(t);

View File

@ -2,7 +2,6 @@ package com.limelight.nvstream.av.video;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import android.graphics.Bitmap;
import android.graphics.Canvas; import android.graphics.Canvas;
import android.view.Surface; import android.view.Surface;
@ -66,6 +65,10 @@ public class CpuDecoderRenderer implements DecoderRenderer {
@Override @Override
public void stop() { public void stop() {
rendererThread.interrupt(); rendererThread.interrupt();
try {
rendererThread.join();
} catch (InterruptedException e) { }
} }
@Override @Override

View File

@ -105,6 +105,10 @@ public class MediaCodecDecoderRenderer implements DecoderRenderer {
@Override @Override
public void stop() { public void stop() {
rendererThread.interrupt(); rendererThread.interrupt();
try {
rendererThread.join();
} catch (InterruptedException e) { }
} }
@Override @Override