Remove the decoder stop hack and try to workaround the issue differently

This commit is contained in:
Cameron Gutman 2017-06-06 22:48:28 -07:00
parent d1e41e41a1
commit 4b9c6b149a
2 changed files with 8 additions and 8 deletions

View File

@ -993,14 +993,6 @@ public class Game extends Activity implements SurfaceHolder.Callback,
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if (connected) {
// HACK: Android is supposed to let you return from this function
// before throwing a fit if you access the surface again. Unfortunately,
// MediaCodec often tries to access the destroyed surface and triggers
// an IllegalStateException. To workaround this, we will invoke
// the DecoderRenderer's stop function ourselves, so it will hopefully
// happen early enough to not trigger the bug
decoderRenderer.stop();
stopConnection();
}
}

View File

@ -416,10 +416,18 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer {
// Halt the rendering thread
rendererThread.interrupt();
// Invalidate pending decode buffers
videoDecoder.flush();
// Wait for the renderer thread to shut down
try {
rendererThread.join();
} catch (InterruptedException ignored) { }
// Stop the video decoder
videoDecoder.stop();
// Halt the spinner threads
for (Thread t : spinnerThreads) {
t.interrupt();