Skip to content

Commit 21c959a

Browse files
authored
Merge pull request #28 from Apparence-io/fix/android_zoom
Fix/android zoom
2 parents 5c343bd + 27a7ad3 commit 21c959a

File tree

6 files changed

+21
-4
lines changed

6 files changed

+21
-4
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
- stability between rebuilds improved on Flutter side
44
- [android] check size is correctly set before starting camera
55
- CameraPreview try 3 times to start if camera is locked (each try are 1s ellapsed)
6-
-
6+
- Fix android zoom when taking picture
77
## 0.1.0
88
- image stream available to use MLkit or other image live processing (Only android)
99
## 0.0.2+3

android/src/main/java/com/apparence/camerawesome/CameraPicture.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ private void captureStillPicture() throws CameraAccessException {
167167
takePhotoRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON);
168168
break;
169169
}
170+
takePhotoRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, mCameraSession.getZoomArea());
170171
takePhotoRequestBuilder.set(CaptureRequest.JPEG_ORIENTATION, orientation);
171172
mCameraSession.getCaptureSession().stopRepeating();
172173
mCameraSession.getCaptureSession().capture(takePhotoRequestBuilder.build(), mCaptureCallback, null);

android/src/main/java/com/apparence/camerawesome/CameraPreview.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ void createCameraPreviewSession(final CameraDevice cameraDevice) throws CameraAc
112112
mPreviewRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
113113
// save initial region for zoom management
114114
mInitialCropRegion = mPreviewRequestBuilder.get(CaptureRequest.SCALER_CROP_REGION);
115+
mCameraSession.setZoomArea(mInitialCropRegion);
115116
initPreviewRequest();
116117
// only start preview ImageReader if asked for it
117118
if(streamPreviewImages) {
@@ -270,8 +271,10 @@ private void updateZoom() {
270271
// ¯\_(ツ)_/¯ for some devices calculating the Rect for zoom=1 results in a bit different
271272
// Rect that device claims as its no-zoom crop region and the preview freezes
272273
if (scaledZoom != 1.0f) {
274+
mCameraSession.setZoomArea(zoomPreviewArea);
273275
mPreviewRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, zoomPreviewArea);
274276
} else {
277+
mCameraSession.setZoomArea(mInitialCropRegion);
275278
mPreviewRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, mInitialCropRegion);
276279
}
277280
}

android/src/main/java/com/apparence/camerawesome/CameraSession.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.apparence.camerawesome;
22

3+
import android.graphics.Rect;
34
import android.hardware.camera2.CameraAccessException;
45
import android.hardware.camera2.CameraCaptureSession;
56
import android.hardware.camera2.CameraDevice;
@@ -38,6 +39,8 @@ public class CameraSession {
3839

3940
private CameraDevice cameraDevice;
4041

42+
private Rect zoomArea;
43+
4144
void createCameraCaptureSession(final CameraDevice cameraDevice) throws CameraAccessException {
4245
this.cameraDevice = cameraDevice;
4346
cameraDevice.createCaptureSession(new ArrayList<>(surfaces.values()), new CameraCaptureSession.StateCallback() {
@@ -126,6 +129,14 @@ public void setCaptureSession(CameraCaptureSession mCaptureSession) {
126129
this.mCaptureSession = mCaptureSession;
127130
}
128131

132+
public Rect getZoomArea() {
133+
return zoomArea;
134+
}
135+
136+
public void setZoomArea(Rect zoomArea) {
137+
this.zoomArea = zoomArea;
138+
}
139+
129140
/**
130141
* Used to signal that session is ready to all class using CameraSession
131142
*/

example/pubspec.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ packages:
4949
path: ".."
5050
relative: true
5151
source: path
52-
version: "0.1.0"
52+
version: "0.1.1"
5353
characters:
5454
dependency: transitive
5555
description:

example/test_driver/app.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,12 @@ void main() {
6565
var takePhotoBtnFinder = find.byKey(ValueKey("takePhotoButton"));
6666
// change photo size preset
6767
var previousResolution = (find.byKey(ValueKey("resolutionTxt")).evaluate().first.widget as Text).data;
68-
await tester.tap(find.byKey(ValueKey("resolutionButton")));
68+
var resolButtonFinder = find.byKey(ValueKey("resolutionButton"));
69+
(resolButtonFinder.evaluate().first.widget as FlatButton).onPressed();
6970
await tester.pump(Duration(milliseconds: 1000));
7071
await tester.pumpAndSettle(Duration(milliseconds: 1000));
71-
await tester.tap(find.byKey(ValueKey("resOption")).at(1));
72+
var optionsFinder = find.byKey(ValueKey("resOption"));
73+
await tester.tap(optionsFinder.last);
7274
await tester.pump(Duration(milliseconds: 500));
7375
var currentResolution = (find.byKey(ValueKey("resolutionTxt")).evaluate().first.widget as Text).data;
7476
expect(previousResolution, isNot(equals(currentResolution)));

0 commit comments

Comments
 (0)