Suppress crashes if the surface has become invalid

This commit is contained in:
Cameron Gutman 2017-06-10 17:25:23 -07:00
parent 6340ec6c6d
commit 1b3322b5ee

View File

@ -45,7 +45,7 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer {
private boolean refFrameInvalidationActive; private boolean refFrameInvalidationActive;
private int initialWidth, initialHeight; private int initialWidth, initialHeight;
private int videoFormat; private int videoFormat;
private Object renderTarget; private SurfaceHolder renderTarget;
private volatile boolean stopping; private volatile boolean stopping;
private boolean needsBaselineSpsHack; private boolean needsBaselineSpsHack;
@ -101,7 +101,7 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer {
return decoderInfo; return decoderInfo;
} }
public void setRenderTarget(Object renderTarget) { public void setRenderTarget(SurfaceHolder renderTarget) {
this.renderTarget = renderTarget; this.renderTarget = renderTarget;
} }
@ -246,7 +246,7 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer {
} }
try { try {
videoDecoder.configure(videoFormat, ((SurfaceHolder)renderTarget).getSurface(), null, 0); videoDecoder.configure(videoFormat, renderTarget.getSurface(), null, 0);
videoDecoder.setVideoScalingMode(MediaCodec.VIDEO_SCALING_MODE_SCALE_TO_FIT); videoDecoder.setVideoScalingMode(MediaCodec.VIDEO_SCALING_MODE_SCALE_TO_FIT);
if (USE_FRAME_RENDER_TIME && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (USE_FRAME_RENDER_TIME && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
@ -294,9 +294,8 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer {
} }
} }
// Only throw if this happens at the beginning of a stream // Only throw if the surface is still around and we're not stopping
// but not if we're stopping if (!stopping && renderTarget.getSurface().isValid()) {
if (totalFrames > 0 && !stopping) {
if (buf != null || codecFlags != 0) { if (buf != null || codecFlags != 0) {
throw new RendererException(this, e, buf, codecFlags); throw new RendererException(this, e, buf, codecFlags);
} }