Loading core/java/android/hardware/camera2/legacy/GLThreadManager.java +3 −2 Original line number Diff line number Diff line Loading @@ -121,9 +121,10 @@ public class GLThreadManager { * Create a new GL thread and renderer. * * @param cameraId the camera id for this thread. * @param facing direction the camera is facing. */ public GLThreadManager(int cameraId) { mTextureRenderer = new SurfaceTextureRenderer(); public GLThreadManager(int cameraId, int facing) { mTextureRenderer = new SurfaceTextureRenderer(facing); TAG = String.format("CameraDeviceGLThread-%d", cameraId); mGLHandlerThread = new RequestHandlerThread(TAG, mGLHandlerCb); } Loading core/java/android/hardware/camera2/legacy/RequestThreadManager.java +1 −1 Original line number Diff line number Diff line Loading @@ -399,7 +399,7 @@ public class RequestThreadManager { // TODO: Detect and optimize single-output paths here to skip stream teeing. if (mGLThreadManager == null) { mGLThreadManager = new GLThreadManager(mCameraId); mGLThreadManager = new GLThreadManager(mCameraId, facing); mGLThreadManager.start(); } mGLThreadManager.waitUntilStarted(); Loading core/java/android/hardware/camera2/legacy/SurfaceTextureRenderer.java +23 −5 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package android.hardware.camera2.legacy; import android.graphics.ImageFormat; import android.graphics.RectF; import android.graphics.SurfaceTexture; import android.hardware.camera2.CameraCharacteristics; import android.os.Environment; import android.opengl.EGL14; import android.opengl.EGLConfig; Loading Loading @@ -80,7 +81,18 @@ public class SurfaceTextureRenderer { private static final int TRIANGLE_VERTICES_DATA_STRIDE_BYTES = 5 * FLOAT_SIZE_BYTES; private static final int TRIANGLE_VERTICES_DATA_POS_OFFSET = 0; private static final int TRIANGLE_VERTICES_DATA_UV_OFFSET = 3; private final float[] mTriangleVerticesData = { // Sampling is mirrored across the vertical axis to undo horizontal flip from the front camera private static final float[] sFrontCameraTriangleVertices = { // X, Y, Z, U, V -1.0f, -1.0f, 0, 1.f, 0.f, 1.0f, -1.0f, 0, 0.f, 0.f, -1.0f, 1.0f, 0, 1.f, 1.f, 1.0f, 1.0f, 0, 0.f, 1.f, }; // Sampling is 1:1 for a straight copy for the back camera private static final float[] sBackCameraTriangleVertices = { // X, Y, Z, U, V -1.0f, -1.0f, 0, 0.f, 0.f, 1.0f, -1.0f, 0, 1.f, 0.f, Loading Loading @@ -135,10 +147,16 @@ public class SurfaceTextureRenderer { private PerfMeasurement mPerfMeasurer = null; private static final String LEGACY_PERF_PROPERTY = "persist.camera.legacy_perf"; public SurfaceTextureRenderer() { mTriangleVertices = ByteBuffer.allocateDirect(mTriangleVerticesData.length * public SurfaceTextureRenderer(int facing) { if (facing == CameraCharacteristics.LENS_FACING_BACK) { mTriangleVertices = ByteBuffer.allocateDirect(sBackCameraTriangleVertices.length * FLOAT_SIZE_BYTES).order(ByteOrder.nativeOrder()).asFloatBuffer(); mTriangleVertices.put(mTriangleVerticesData).position(0); mTriangleVertices.put(sBackCameraTriangleVertices).position(0); } else { mTriangleVertices = ByteBuffer.allocateDirect(sFrontCameraTriangleVertices.length * FLOAT_SIZE_BYTES).order(ByteOrder.nativeOrder()).asFloatBuffer(); mTriangleVertices.put(sFrontCameraTriangleVertices).position(0); } Matrix.setIdentityM(mSTMatrix, 0); } Loading Loading
core/java/android/hardware/camera2/legacy/GLThreadManager.java +3 −2 Original line number Diff line number Diff line Loading @@ -121,9 +121,10 @@ public class GLThreadManager { * Create a new GL thread and renderer. * * @param cameraId the camera id for this thread. * @param facing direction the camera is facing. */ public GLThreadManager(int cameraId) { mTextureRenderer = new SurfaceTextureRenderer(); public GLThreadManager(int cameraId, int facing) { mTextureRenderer = new SurfaceTextureRenderer(facing); TAG = String.format("CameraDeviceGLThread-%d", cameraId); mGLHandlerThread = new RequestHandlerThread(TAG, mGLHandlerCb); } Loading
core/java/android/hardware/camera2/legacy/RequestThreadManager.java +1 −1 Original line number Diff line number Diff line Loading @@ -399,7 +399,7 @@ public class RequestThreadManager { // TODO: Detect and optimize single-output paths here to skip stream teeing. if (mGLThreadManager == null) { mGLThreadManager = new GLThreadManager(mCameraId); mGLThreadManager = new GLThreadManager(mCameraId, facing); mGLThreadManager.start(); } mGLThreadManager.waitUntilStarted(); Loading
core/java/android/hardware/camera2/legacy/SurfaceTextureRenderer.java +23 −5 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package android.hardware.camera2.legacy; import android.graphics.ImageFormat; import android.graphics.RectF; import android.graphics.SurfaceTexture; import android.hardware.camera2.CameraCharacteristics; import android.os.Environment; import android.opengl.EGL14; import android.opengl.EGLConfig; Loading Loading @@ -80,7 +81,18 @@ public class SurfaceTextureRenderer { private static final int TRIANGLE_VERTICES_DATA_STRIDE_BYTES = 5 * FLOAT_SIZE_BYTES; private static final int TRIANGLE_VERTICES_DATA_POS_OFFSET = 0; private static final int TRIANGLE_VERTICES_DATA_UV_OFFSET = 3; private final float[] mTriangleVerticesData = { // Sampling is mirrored across the vertical axis to undo horizontal flip from the front camera private static final float[] sFrontCameraTriangleVertices = { // X, Y, Z, U, V -1.0f, -1.0f, 0, 1.f, 0.f, 1.0f, -1.0f, 0, 0.f, 0.f, -1.0f, 1.0f, 0, 1.f, 1.f, 1.0f, 1.0f, 0, 0.f, 1.f, }; // Sampling is 1:1 for a straight copy for the back camera private static final float[] sBackCameraTriangleVertices = { // X, Y, Z, U, V -1.0f, -1.0f, 0, 0.f, 0.f, 1.0f, -1.0f, 0, 1.f, 0.f, Loading Loading @@ -135,10 +147,16 @@ public class SurfaceTextureRenderer { private PerfMeasurement mPerfMeasurer = null; private static final String LEGACY_PERF_PROPERTY = "persist.camera.legacy_perf"; public SurfaceTextureRenderer() { mTriangleVertices = ByteBuffer.allocateDirect(mTriangleVerticesData.length * public SurfaceTextureRenderer(int facing) { if (facing == CameraCharacteristics.LENS_FACING_BACK) { mTriangleVertices = ByteBuffer.allocateDirect(sBackCameraTriangleVertices.length * FLOAT_SIZE_BYTES).order(ByteOrder.nativeOrder()).asFloatBuffer(); mTriangleVertices.put(mTriangleVerticesData).position(0); mTriangleVertices.put(sBackCameraTriangleVertices).position(0); } else { mTriangleVertices = ByteBuffer.allocateDirect(sFrontCameraTriangleVertices.length * FLOAT_SIZE_BYTES).order(ByteOrder.nativeOrder()).asFloatBuffer(); mTriangleVertices.put(sFrontCameraTriangleVertices).position(0); } Matrix.setIdentityM(mSTMatrix, 0); } Loading