Use single EglViewport

pull/421/head
Giacomo Randazzo 7 years ago
parent 3939f84d8f
commit a15be094c9
  1. 27
      cameraview/src/main/java/com/otaliastudios/cameraview/OverlayLayout.java
  2. 11
      cameraview/src/main/java/com/otaliastudios/cameraview/SnapshotPictureRecorder.java

@ -25,35 +25,8 @@ public class OverlayLayout extends FrameLayout implements SurfaceDrawer {
setWillNotDraw(false); setWillNotDraw(false);
} }
@Override
public void draw(Canvas canvas) {
// if (outputSurface != null ) {
// // Requires a try/catch for .lockCanvas( null )
// try {
// final Canvas surfaceCanvas = outputSurface.lockCanvas(null);
//
// float xScale = surfaceCanvas.getWidth() / (float) canvas.getWidth();
// float yScale = surfaceCanvas.getHeight() / (float) canvas.getHeight();
// surfaceCanvas.scale(xScale, yScale);
// surfaceCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
// super.draw(surfaceCanvas);
//
// outputSurface.unlockCanvasAndPost(surfaceCanvas);
// } catch (Surface.OutOfResourcesException e) {
// e.printStackTrace();
// }
// }
// draw the view as always, since we are already drawing on the preview this step can be
// skipped
super.draw(canvas);
}
@Override @Override
public void drawOnSurface(Surface outputSurface) { public void drawOnSurface(Surface outputSurface) {
// postInvalidate();
// postInvalidateRecursive(this);
try { try {
final Canvas surfaceCanvas = outputSurface.lockCanvas(null); final Canvas surfaceCanvas = outputSurface.lockCanvas(null);

@ -70,14 +70,14 @@ class SnapshotPictureRecorder extends PictureRecorder {
SurfaceTexture mOverlaySurfaceTexture; SurfaceTexture mOverlaySurfaceTexture;
float[] mTransform; float[] mTransform;
float[] mOverlayTransform; float[] mOverlayTransform;
EglViewport overlayViewport; EglViewport viewport;
@RendererThread @RendererThread
public void onRendererTextureCreated(int textureId) { public void onRendererTextureCreated(int textureId) {
mTextureId = textureId; mTextureId = textureId;
overlayViewport = new EglViewport(); viewport = new EglViewport();
if (mWithOverlay) { if (mWithOverlay) {
mOverlayTextureId = overlayViewport.createTexture(); mOverlayTextureId = viewport.createTexture();
} }
mSurfaceTexture = new SurfaceTexture(mTextureId, true); mSurfaceTexture = new SurfaceTexture(mTextureId, true);
if (mOverlayTextureId != 0) { if (mOverlayTextureId != 0) {
@ -127,7 +127,7 @@ class SnapshotPictureRecorder extends PictureRecorder {
public void run() { public void run() {
EglWindowSurface surface = new EglWindowSurface(core, mSurfaceTexture); EglWindowSurface surface = new EglWindowSurface(core, mSurfaceTexture);
surface.makeCurrent(); surface.makeCurrent();
EglViewport viewport = new EglViewport(); // EglViewport viewport = new EglViewport();
mSurfaceTexture.updateTexImage(); mSurfaceTexture.updateTexImage();
mSurfaceTexture.getTransformMatrix(mTransform); mSurfaceTexture.getTransformMatrix(mTransform);
Surface drawOnto = new Surface(mOverlaySurfaceTexture); Surface drawOnto = new Surface(mOverlaySurfaceTexture);
@ -195,7 +195,7 @@ class SnapshotPictureRecorder extends PictureRecorder {
// They are simply realScaleX and realScaleY. // They are simply realScaleX and realScaleY.
viewport.drawFrame(mTextureId, mTransform); viewport.drawFrame(mTextureId, mTransform);
if (mOverlayTransform != null) { if (mOverlayTransform != null) {
overlayViewport.drawFrame(mOverlayTextureId, mOverlayTransform); viewport.drawFrame(mOverlayTextureId, mOverlayTransform);
} }
// don't - surface.swapBuffers(); // don't - surface.swapBuffers();
mResult.data = surface.saveFrameTo(Bitmap.CompressFormat.JPEG); mResult.data = surface.saveFrameTo(Bitmap.CompressFormat.JPEG);
@ -205,7 +205,6 @@ class SnapshotPictureRecorder extends PictureRecorder {
// EGL14.eglMakeCurrent(oldDisplay, oldSurface, oldSurface, eglContext); // EGL14.eglMakeCurrent(oldDisplay, oldSurface, oldSurface, eglContext);
surface.release(); surface.release();
viewport.release(); viewport.release();
overlayViewport.release();
drawOnto.release(); drawOnto.release();
mSurfaceTexture.release(); mSurfaceTexture.release();
if (mOverlaySurfaceTexture != null) { if (mOverlaySurfaceTexture != null) {

Loading…
Cancel
Save