| Index: webrtc/api/java/android/org/webrtc/SurfaceTextureHelper.java
|
| diff --git a/webrtc/api/java/android/org/webrtc/SurfaceTextureHelper.java b/webrtc/api/java/android/org/webrtc/SurfaceTextureHelper.java
|
| index 5a54e904ad5062e7a699174fcefba1b4a04e86f0..09f78a58f4c23b583dcee1f1b34dc8a907a06566 100644
|
| --- a/webrtc/api/java/android/org/webrtc/SurfaceTextureHelper.java
|
| +++ b/webrtc/api/java/android/org/webrtc/SurfaceTextureHelper.java
|
| @@ -50,7 +50,8 @@ class SurfaceTextureHelper {
|
|
|
| /**
|
| * Construct a new SurfaceTextureHelper sharing OpenGL resources with |sharedContext|. A dedicated
|
| - * thread and handler is created for handling the SurfaceTexture.
|
| + * thread and handler is created for handling the SurfaceTexture. May return null if EGL fails to
|
| + * initialize a pixel buffer surface and make it current.
|
| */
|
| public static SurfaceTextureHelper create(
|
| final String threadName, final EglBase.Context sharedContext) {
|
| @@ -65,7 +66,12 @@ class SurfaceTextureHelper {
|
| return ThreadUtils.invokeUninterruptibly(handler, new Callable<SurfaceTextureHelper>() {
|
| @Override
|
| public SurfaceTextureHelper call() {
|
| - return new SurfaceTextureHelper(sharedContext, handler);
|
| + try {
|
| + return new SurfaceTextureHelper(sharedContext, handler);
|
| + } catch (RuntimeException e) {
|
| + Logging.e(TAG, threadName + " create failure", e);
|
| + return null;
|
| + }
|
| }
|
| });
|
| }
|
| @@ -315,8 +321,16 @@ class SurfaceTextureHelper {
|
| this.handler = handler;
|
|
|
| eglBase = EglBase.create(sharedContext, EglBase.CONFIG_PIXEL_BUFFER);
|
| - eglBase.createDummyPbufferSurface();
|
| - eglBase.makeCurrent();
|
| + try {
|
| + // Both these statements have been observed to fail on rare occasions, see BUG=webrtc:5682.
|
| + eglBase.createDummyPbufferSurface();
|
| + eglBase.makeCurrent();
|
| + } catch (RuntimeException e) {
|
| + // Clean up before rethrowing the exception.
|
| + eglBase.release();
|
| + handler.getLooper().quit();
|
| + throw e;
|
| + }
|
|
|
| oesTextureId = GlUtil.generateTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES);
|
| surfaceTexture = new SurfaceTexture(oesTextureId);
|
|
|