| Index: webrtc/sdk/android/api/org/webrtc/SurfaceTextureHelper.java
|
| diff --git a/webrtc/sdk/android/api/org/webrtc/SurfaceTextureHelper.java b/webrtc/sdk/android/api/org/webrtc/SurfaceTextureHelper.java
|
| index bd3d545a180fe34290dcdd0f61c94bf7a39c7352..a3db84de8aa1c43c6d26fa7c85de7b445f39d5b1 100644
|
| --- a/webrtc/sdk/android/api/org/webrtc/SurfaceTextureHelper.java
|
| +++ b/webrtc/sdk/android/api/org/webrtc/SurfaceTextureHelper.java
|
| @@ -10,6 +10,7 @@
|
|
|
| package org.webrtc;
|
|
|
| +import android.graphics.Matrix;
|
| import android.graphics.SurfaceTexture;
|
| import android.opengl.GLES11Ext;
|
| import android.opengl.GLES20;
|
| @@ -288,86 +289,13 @@ public class SurfaceTextureHelper {
|
| * The returned TextureBuffer holds a reference to the SurfaceTextureHelper that created it. The
|
| * buffer calls returnTextureFrame() when it is released.
|
| */
|
| - public TextureBuffer createTextureBuffer(int width, int height, float[] transformMatrix) {
|
| - return new OesTextureBuffer(oesTextureId, width, height, transformMatrix, this);
|
| - }
|
| -
|
| - /**
|
| - * Android OES texture buffer backed by a SurfaceTextureHelper's texture. The buffer calls
|
| - * returnTextureFrame() when it is released.
|
| - */
|
| - private static class OesTextureBuffer implements TextureBuffer {
|
| - private final int id;
|
| - private final int width;
|
| - private final int height;
|
| - private final float[] transformMatrix;
|
| - private final SurfaceTextureHelper helper;
|
| - private int refCount;
|
| -
|
| - OesTextureBuffer(
|
| - int id, int width, int height, float[] transformMatrix, SurfaceTextureHelper helper) {
|
| - this.id = id;
|
| - this.width = width;
|
| - this.height = height;
|
| - this.transformMatrix = transformMatrix;
|
| - this.helper = helper;
|
| - this.refCount = 1; // Creator implicitly holds a reference.
|
| - }
|
| -
|
| - @Override
|
| - public TextureBuffer.Type getType() {
|
| - return TextureBuffer.Type.OES;
|
| - }
|
| -
|
| - @Override
|
| - public int getTextureId() {
|
| - return id;
|
| - }
|
| -
|
| - @Override
|
| - public int getWidth() {
|
| - return width;
|
| - }
|
| -
|
| - @Override
|
| - public int getHeight() {
|
| - return height;
|
| - }
|
| -
|
| - @Override
|
| - public I420Buffer toI420() {
|
| - // SurfaceTextureHelper requires a stride that is divisible by 8. Round width up.
|
| - // See SurfaceTextureHelper for details on the size and format.
|
| - int stride = ((width + 7) / 8) * 8;
|
| - int uvHeight = (height + 1) / 2;
|
| - // Due to the layout used by SurfaceTextureHelper, vPos + stride * uvHeight would overrun the
|
| - // buffer. Add one row at the bottom to compensate for this. There will never be data in the
|
| - // extra row, but now other code does not have to deal with v stride * v height exceeding the
|
| - // buffer's capacity.
|
| - int size = stride * (height + uvHeight + 1);
|
| - ByteBuffer buffer = ByteBuffer.allocateDirect(size);
|
| - helper.textureToYUV(buffer, width, height, stride, id, transformMatrix);
|
| -
|
| - int yPos = 0;
|
| - int uPos = yPos + stride * height;
|
| - // Rows of U and V alternate in the buffer, so V data starts after the first row of U.
|
| - int vPos = yPos + stride / 2;
|
| -
|
| - // SurfaceTextureHelper uses the same stride for Y, U, and V data.
|
| - return new I420BufferImpl(
|
| - buffer, width, height, yPos, stride, uPos, stride, vPos, stride, null);
|
| - }
|
| -
|
| - @Override
|
| - public void retain() {
|
| - ++refCount;
|
| - }
|
| -
|
| - @Override
|
| - public void release() {
|
| - if (--refCount == 0) {
|
| - helper.returnTextureFrame();
|
| - }
|
| - }
|
| + public TextureBuffer createTextureBuffer(int width, int height, Matrix transformMatrix) {
|
| + return new TextureBufferImpl(
|
| + width, height, TextureBuffer.Type.OES, oesTextureId, transformMatrix, this, new Runnable() {
|
| + @Override
|
| + public void run() {
|
| + returnTextureFrame();
|
| + }
|
| + });
|
| }
|
| }
|
|
|