| 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();
|
| }
|
|
|