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);
}
@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
public void drawOnSurface(Surface outputSurface) {
// postInvalidate();
// postInvalidateRecursive(this);
try {
final Canvas surfaceCanvas = outputSurface.lockCanvas(null);

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

Loading…
Cancel
Save