| Index: talk/app/webrtc/java/android/org/webrtc/SurfaceViewRenderer.java
|
| diff --git a/talk/app/webrtc/java/android/org/webrtc/SurfaceViewRenderer.java b/talk/app/webrtc/java/android/org/webrtc/SurfaceViewRenderer.java
|
| index 3a5cca958f003c8906c279fb47c5d6531c35eedb..d8e7171a31f9a699df16147691f92d981ff07bf0 100644
|
| --- a/talk/app/webrtc/java/android/org/webrtc/SurfaceViewRenderer.java
|
| +++ b/talk/app/webrtc/java/android/org/webrtc/SurfaceViewRenderer.java
|
| @@ -66,7 +66,8 @@ public class SurfaceViewRenderer extends SurfaceView
|
| // EGL and GL resources for drawing YUV/OES textures. After initilization, these are only accessed
|
| // from the render thread.
|
| private EglBase eglBase;
|
| - private GlRectDrawer drawer;
|
| + private final RendererCommon.YuvUploader yuvUploader = new RendererCommon.YuvUploader();
|
| + private RendererCommon.GlDrawer drawer;
|
| // Texture ids for YUV frames. Allocated on first arrival of a YUV frame.
|
| private int[] yuvTextures = null;
|
|
|
| @@ -154,16 +155,27 @@ public class SurfaceViewRenderer extends SurfaceView
|
| */
|
| public void init(
|
| EglBase.Context sharedContext, RendererCommon.RendererEvents rendererEvents) {
|
| + init(sharedContext, rendererEvents, EglBase.CONFIG_PLAIN, new GlRectDrawer());
|
| + }
|
| +
|
| + /**
|
| + * Initialize this class, sharing resources with |sharedContext|. The custom |drawer| will be used
|
| + * for drawing frames on the EGLSurface. This class is responsible for calling release() on
|
| + * |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) {
|
| synchronized (handlerLock) {
|
| if (renderThreadHandler != null) {
|
| throw new IllegalStateException(getResourceName() + "Already initialized");
|
| }
|
| Logging.d(TAG, getResourceName() + "Initializing.");
|
| this.rendererEvents = rendererEvents;
|
| + this.drawer = drawer;
|
| renderThread = new HandlerThread(TAG);
|
| renderThread.start();
|
| - drawer = new GlRectDrawer();
|
| - eglBase = EglBase.create(sharedContext, EglBase.CONFIG_PLAIN);
|
| + eglBase = EglBase.create(sharedContext, configAttributes);
|
| renderThreadHandler = new Handler(renderThread.getLooper());
|
| }
|
| tryCreateEglSurface();
|
| @@ -488,7 +500,6 @@ public class SurfaceViewRenderer extends SurfaceView
|
| texMatrix = RendererCommon.multiplyMatrices(rotatedSamplingMatrix, layoutMatrix);
|
| }
|
|
|
| - GLES20.glViewport(0, 0, surfaceSize.x, surfaceSize.y);
|
| // TODO(magjed): glClear() shouldn't be necessary since every pixel is covered anyway, but it's
|
| // a workaround for bug 5147. Performance will be slightly worse.
|
| GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
|
| @@ -500,11 +511,11 @@ public class SurfaceViewRenderer extends SurfaceView
|
| yuvTextures[i] = GlUtil.generateTexture(GLES20.GL_TEXTURE_2D);
|
| }
|
| }
|
| - drawer.uploadYuvData(
|
| + yuvUploader.uploadYuvData(
|
| yuvTextures, frame.width, frame.height, frame.yuvStrides, frame.yuvPlanes);
|
| - drawer.drawYuv(yuvTextures, texMatrix);
|
| + drawer.drawYuv(yuvTextures, texMatrix, 0, 0, surfaceSize.x, surfaceSize.y);
|
| } else {
|
| - drawer.drawOes(frame.textureId, texMatrix);
|
| + drawer.drawOes(frame.textureId, texMatrix, 0, 0, surfaceSize.x, surfaceSize.y);
|
| }
|
|
|
| eglBase.swapBuffers();
|
|
|