Index: webrtc/api/android/java/src/org/webrtc/SurfaceViewRenderer.java |
diff --git a/webrtc/api/android/java/src/org/webrtc/SurfaceViewRenderer.java b/webrtc/api/android/java/src/org/webrtc/SurfaceViewRenderer.java |
index fd02fd583af83d8d7fcc1c5d81b910d92662c6a8..eec6add9324e4b3ec848730993e2d04466ca10e4 100644 |
--- a/webrtc/api/android/java/src/org/webrtc/SurfaceViewRenderer.java |
+++ b/webrtc/api/android/java/src/org/webrtc/SurfaceViewRenderer.java |
@@ -145,8 +145,9 @@ public class SurfaceViewRenderer extends SurfaceView |
* |drawer|. It is allowed to call init() to reinitialize the renderer after a previous |
* init()/release() cycle. |
*/ |
- public void init(EglBase.Context sharedContext, RendererCommon.RendererEvents rendererEvents, |
- int[] configAttributes, RendererCommon.GlDrawer drawer) { |
+ public void init( |
+ final EglBase.Context sharedContext, RendererCommon.RendererEvents rendererEvents, |
+ final int[] configAttributes, RendererCommon.GlDrawer drawer) { |
synchronized (handlerLock) { |
if (renderThreadHandler != null) { |
throw new IllegalStateException(getResourceName() + "Already initialized"); |
@@ -156,8 +157,16 @@ public class SurfaceViewRenderer extends SurfaceView |
this.drawer = drawer; |
renderThread = new HandlerThread(TAG); |
renderThread.start(); |
- eglBase = EglBase.create(sharedContext, configAttributes); |
renderThreadHandler = new Handler(renderThread.getLooper()); |
+ // Create EGL context on the newly created render thread. It should be possibly to create the |
+ // context on this thread and make it current on the render thread, but this causes failure on |
+ // some Marvel based JB devices. https://bugs.chromium.org/p/webrtc/issues/detail?id=6350. |
+ ThreadUtils.invokeAtFrontUninterruptibly(renderThreadHandler, new Runnable() { |
+ @Override |
+ public void run() { |
+ eglBase = EglBase.create(sharedContext, configAttributes); |
+ } |
+ }); |
} |
tryCreateEglSurface(); |
} |