refactored code for camera2 zoom

pull/488/head
Suneet Agrawal 6 years ago
parent 820d9dd5ab
commit 58a6aa05f5
  1. 16
      cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java

@ -906,10 +906,10 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv
mHandler.run(new Runnable() { mHandler.run(new Runnable() {
@Override @Override
public void run() { public void run() {
if (!mCameraOptions.isZoomSupported()) return;
Rect newRect = getZoomRect(zoom); if (getEngineState() == STATE_STARTED && mCameraOptions.isZoomSupported()) {
if(newRect != null){ Rect newRect = getZoomRect(zoom * mCameraOptions.getMaxZoomValue());
mRepeatingRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, newRect); mRepeatingRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, newRect);
applyRepeatingRequestBuilder(); applyRepeatingRequestBuilder();
mZoomValue = zoom; mZoomValue = zoom;
@ -917,14 +917,17 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv
if (notify) { if (notify) {
mCallback.dispatchOnZoomChanged(zoom, points); mCallback.dispatchOnZoomChanged(zoom, points);
} }
} }
mZoomOp.end(null);
} }
}); });
} }
@NonNull
private Rect getZoomRect(float zoomLevel) { private Rect getZoomRect(float zoomLevel) {
float maxZoom = mCameraOptions.getMaxZoomValue() * 10; float maxZoom = mCameraOptions.getMaxZoomValue();
Rect activeRect = mCameraCharacteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE); Rect activeRect = mCameraCharacteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE);
if ((zoomLevel <= maxZoom) && (zoomLevel > 1) && activeRect != null) { if ((zoomLevel <= maxZoom) && (zoomLevel > 1) && activeRect != null) {
int minW = (int) (activeRect.width() / maxZoom); int minW = (int) (activeRect.width() / maxZoom);
@ -936,10 +939,9 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv
cropW -= cropW & 3; cropW -= cropW & 3;
cropH -= cropH & 3; cropH -= cropH & 3;
return new Rect(cropW, cropH, activeRect.width() - cropW, activeRect.height() - cropH); return new Rect(cropW, cropH, activeRect.width() - cropW, activeRect.height() - cropH);
} else if (zoomLevel == 0) {
return new Rect(0, 0, activeRect.width(), activeRect.height());
} }
return null;
return new Rect(0, 0, activeRect.width(), activeRect.height());
} }
@Override @Override

Loading…
Cancel
Save