Skip to content

Commit cd139fa

Browse files
committed
Camera preview size new implementation.
1 parent 487c820 commit cd139fa

11 files changed

+241
-124
lines changed

CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## [0.1.2] - 2018-12-16
2+
3+
* Camera preview size implementation. Important!! FlutterMobileVision.start()
4+
5+
16
## [0.1.1] - 2018-07-08
27

38
* Bug fixed - Crash when the permission is not granted on Android #7

README.md

+31-2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ Liked? :star: Star the repo to support the project!
1515
* [x] Android
1616
* [x] Barcode Scan
1717
* [x] Front or Back camera.
18+
* [x] Select preview sizes.
1819
* [x] Simple scan.
1920
* [x] Toggle torch.
2021
* [x] Toggle auto focus.
@@ -27,7 +28,7 @@ Liked? :star: Star the repo to support the project!
2728
* [x] Standard code.
2829
* [x] Recognize Text
2930
* [x] Front or Back camera.
30-
* [x] One of three preview sizes.
31+
* [x] Select preview sizes.
3132
* [x] Simple OCR.
3233
* [x] Toggle torch.
3334
* [x] Toggle auto focus.
@@ -38,6 +39,7 @@ Liked? :star: Star the repo to support the project!
3839
* [x] Standard code.
3940
* [x] Detect Faces
4041
* [x] Front or Back camera.
42+
* [x] Select preview sizes.
4143
* [x] Simple detection.
4244
* [x] Toggle torch.
4345
* [x] Toggle auto focus.
@@ -74,7 +76,31 @@ To use this plugin :
7476
dependencies:
7577
flutter:
7678
sdk: flutter
77-
flutter_mobile_vision: ^0.1.1
79+
flutter_mobile_vision: ^0.1.4
80+
```
81+
82+
* add FlutterMobileVision.start() to initState():
83+
84+
```dart
85+
@override
86+
void initState() {
87+
super.initState();
88+
FlutterMobileVision.start().then((x) => setState(() {}));
89+
}
90+
```
91+
92+
or for a better implementation:
93+
94+
```dart
95+
@override
96+
void initState() {
97+
super.initState();
98+
FlutterMobileVision.start().then((previewSizes) => setState(() {
99+
_previewBarcode = previewSizes[_cameraBarcode].first;
100+
_previewOcr = previewSizes[_cameraOcr].first;
101+
_previewFace = previewSizes[_cameraFace].first;
102+
}));
103+
}
78104
```
79105

80106
-----
@@ -92,6 +118,7 @@ try {
92118
multiple: _multipleBarcode,
93119
waitTap: _waitTapBarcode,
94120
showText: _showTextBarcode,
121+
preview: _previewBarcode,
95122
camera: _cameraBarcode,
96123
fps: 15.0,
97124
);
@@ -133,6 +160,7 @@ try {
133160
multiple: _multipleOcr,
134161
showText: _showTextOcr,
135162
previewSize: _previewOcr,
163+
preview: _previewOcr,
136164
camera: _cameraOcr,
137165
fps: 2.0,
138166
);
@@ -173,6 +201,7 @@ try {
173201
autoFocus: _autoFocusFace,
174202
multiple: _multipleFace,
175203
showText: _showTextFace,
204+
preview: _previewFace,
176205
camera: _cameraFace,
177206
fps: 15.0,
178207
);

android/src/main/java/io/github/edufolly/fluttermobilevision/FlutterMobileVisionPlugin.java

+32-14
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.github.edufolly.fluttermobilevision;
22

33
import android.Manifest;
4+
import android.annotation.SuppressLint;
45
import android.app.Activity;
56
import android.content.Intent;
67
import android.content.pm.PackageManager;
@@ -52,7 +53,7 @@ public class FlutterMobileVisionPlugin implements MethodCallHandler,
5253
private boolean showText = false;
5354
private int previewWidth = 640;
5455
private int previewHeight = 480;
55-
private int facing = CameraSource.CAMERA_FACING_BACK;
56+
private int camera = CameraSource.CAMERA_FACING_BACK;
5657
private float fps = 15.0f;
5758

5859
/**
@@ -76,10 +77,14 @@ private FlutterMobileVisionPlugin(Activity activity) {
7677
@Override
7778
public void onMethodCall(MethodCall call, Result result) {
7879

79-
final Map<String, Object> arguments = call.arguments();
80-
8180
this.result = result;
8281

82+
Map<String, Object> arguments = new HashMap<>();
83+
84+
if (call.arguments() != null) {
85+
arguments = call.arguments();
86+
}
87+
8388
if (arguments.containsKey("flash")) {
8489
useFlash = (boolean) arguments.get("flash");
8590
}
@@ -117,7 +122,7 @@ public void onMethodCall(MethodCall call, Result result) {
117122
}
118123

119124
if (arguments.containsKey("camera")) {
120-
facing = (int) arguments.get("camera");
125+
camera = (int) arguments.get("camera");
121126
}
122127

123128
if (arguments.containsKey("fps")) {
@@ -139,16 +144,29 @@ public void onMethodCall(MethodCall call, Result result) {
139144
Intent intent;
140145
int res;
141146

142-
if ("cameraSizes".equals(call.method)) {
143-
List<Size> sizeList = CameraSource.getSizesForCameraFacing(facing);
144-
List<Map<String, Object>> list = new ArrayList<>();
145-
for(Size size : sizeList) {
146-
Map<String, Object> ret = new HashMap<>();
147-
ret.put("width", size.getWidth());
148-
ret.put("height", size.getHeight());
149-
list.add(ret);
147+
if ("start".equals(call.method)) {
148+
149+
@SuppressLint("UseSparseArrays")
150+
Map<Integer, List> map = new HashMap<>();
151+
152+
int[] cameras = new int[]{CameraSource.CAMERA_FACING_BACK, CameraSource.CAMERA_FACING_FRONT};
153+
154+
for (int facing : cameras) {
155+
156+
List<Size> sizeList = CameraSource.getSizesForCameraFacing(facing);
157+
158+
List<Map<String, Object>> list = new ArrayList<>();
159+
for (Size size : sizeList) {
160+
Map<String, Object> ret = new HashMap<>();
161+
ret.put("width", size.getWidth());
162+
ret.put("height", size.getHeight());
163+
list.add(ret);
164+
}
165+
166+
map.put(facing, list);
150167
}
151-
result.success(list);
168+
169+
result.success(map);
152170
return;
153171
} else if ("scan".equals(call.method)) {
154172
intent = new Intent(activity, BarcodeCaptureActivity.class);
@@ -172,7 +190,7 @@ public void onMethodCall(MethodCall call, Result result) {
172190
intent.putExtra(AbstractCaptureActivity.SHOW_TEXT, showText);
173191
intent.putExtra(AbstractCaptureActivity.PREVIEW_WIDTH, previewWidth);
174192
intent.putExtra(AbstractCaptureActivity.PREVIEW_HEIGHT, previewHeight);
175-
intent.putExtra(AbstractCaptureActivity.CAMERA, facing);
193+
intent.putExtra(AbstractCaptureActivity.CAMERA, camera);
176194
intent.putExtra(AbstractCaptureActivity.FPS, fps);
177195
activity.startActivityForResult(intent, res);
178196
}

android/src/main/java/io/github/edufolly/fluttermobilevision/barcode/BarcodeCaptureActivity.java

+1-5
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import android.content.Intent;
66
import android.content.IntentFilter;
77
import android.hardware.Camera;
8-
import android.util.DisplayMetrics;
98

109
import com.google.android.gms.common.api.CommonStatusCodes;
1110
import com.google.android.gms.vision.MultiProcessor;
@@ -44,13 +43,10 @@ protected void createCameraSource() throws MobileVisionException {
4443
}
4544
}
4645

47-
DisplayMetrics metrics = new DisplayMetrics();
48-
getWindowManager().getDefaultDisplay().getMetrics(metrics);
49-
5046
cameraSource = new CameraSource
5147
.Builder(getApplicationContext(), barcodeDetector)
5248
.setFacing(camera)
53-
.setRequestedPreviewSize(metrics.heightPixels, metrics.widthPixels)
49+
.setRequestedPreviewSize(previewWidth, previewHeight)
5450
.setFocusMode(autoFocus ? Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE : null)
5551
.setFlashMode(useFlash ? Camera.Parameters.FLASH_MODE_TORCH : null)
5652
.setRequestedFps(fps)

android/src/main/java/io/github/edufolly/fluttermobilevision/face/FaceCaptureActivity.java

+1-4
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,10 @@ protected void createCameraSource() throws MobileVisionException {
4343
}
4444
}
4545

46-
DisplayMetrics metrics = new DisplayMetrics();
47-
getWindowManager().getDefaultDisplay().getMetrics(metrics);
48-
4946
cameraSource = new CameraSource
5047
.Builder(getApplicationContext(), faceDetector)
5148
.setFacing(camera)
52-
.setRequestedPreviewSize(metrics.heightPixels, metrics.widthPixels)
49+
.setRequestedPreviewSize(previewWidth, previewHeight)
5350
.setFocusMode(autoFocus ? Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE : null)
5451
.setFlashMode(useFlash ? Camera.Parameters.FLASH_MODE_TORCH : null)
5552
.setRequestedFps(fps)

android/src/main/java/io/github/edufolly/fluttermobilevision/ocr/OcrCaptureActivity.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import android.content.Intent;
66
import android.content.IntentFilter;
77
import android.hardware.Camera;
8-
import android.util.DisplayMetrics;
98

109
import com.google.android.gms.common.api.CommonStatusCodes;
1110
import com.google.android.gms.vision.MultiProcessor;
@@ -43,7 +42,7 @@ protected void createCameraSource() throws MobileVisionException {
4342
cameraSource = new CameraSource
4443
.Builder(getApplicationContext(), textRecognizer)
4544
.setFacing(camera)
46-
.setRequestedPreviewSize(previewHeight, previewWidth)
45+
.setRequestedPreviewSize(previewWidth, previewHeight)
4746
.setFocusMode(autoFocus ? Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE : null)
4847
.setFlashMode(useFlash ? Camera.Parameters.FLASH_MODE_TORCH : null)
4948
.setRequestedFps(fps)

android/src/main/java/io/github/edufolly/fluttermobilevision/ui/CameraSource.java

+9-2
Original file line numberDiff line numberDiff line change
@@ -848,15 +848,22 @@ private static int getIdForRequestedCamera(int facing) {
848848

849849
public static List<Size> getSizesForCameraFacing(int facing) {
850850
List<Size> sizeList = new ArrayList<>();
851+
851852
int cameraId = CameraSource.getIdForRequestedCamera(facing);
852-
if(cameraId == -1) return sizeList;
853+
854+
if (cameraId == -1) {
855+
return sizeList;
856+
}
853857

854858
// Briefly open the camera to obtain valid sizes
855859
Camera camera = Camera.open(cameraId);
856-
List<SizePair> sizePairList= CameraSource.generateValidPreviewSizeList(camera);
860+
861+
List<SizePair> sizePairList = CameraSource.generateValidPreviewSizeList(camera);
862+
857863
for (SizePair sizePair : sizePairList) {
858864
sizeList.add(sizePair.previewSize());
859865
}
866+
860867
camera.release();
861868

862869
return sizeList;

0 commit comments

Comments
 (0)