From ad87c8e3421f2ff1836674a01cb86deb619cdc4e Mon Sep 17 00:00:00 2001 From: Joao Fidelis Date: Thu, 7 Jun 2018 17:04:32 -0300 Subject: [PATCH] fix(picture-size): create None default value --- .../google/android/cameraview/Camera1.java | 11 +++++++-- .../google/android/cameraview/Camera2.java | 9 ++++++- .../reactnative/camera/CameraViewManager.java | 2 +- .../org/reactnative/camera/RNCameraView.java | 24 ++++++++++++------- ios/RN/RNCamera.m | 3 +++ ios/RN/RNCameraManager.m | 3 ++- src/RNCamera.js | 2 +- 7 files changed, 40 insertions(+), 14 deletions(-) diff --git a/android/src/main/java/com/google/android/cameraview/Camera1.java b/android/src/main/java/com/google/android/cameraview/Camera1.java index fdbddee..055ad41 100644 --- a/android/src/main/java/com/google/android/cameraview/Camera1.java +++ b/android/src/main/java/com/google/android/cameraview/Camera1.java @@ -242,9 +242,16 @@ class Camera1 extends CameraViewImpl implements MediaRecorder.OnInfoListener, @Override void setPictureSize(Size size) { - mPictureSize = size; + if (size == null) { + if (mAspectRatio == null) { + return; + } + mPictureSize = mPictureSizes.sizes(mAspectRatio).last(); + } else { + mPictureSize = size; + } if (mCameraParameters != null && mCamera != null) { - mCameraParameters.setPictureSize(size.getWidth(), size.getHeight()); + mCameraParameters.setPictureSize(mPictureSize.getWidth(), mPictureSize.getHeight()); mCamera.setParameters(mCameraParameters); } } diff --git a/android/src/main/java/com/google/android/cameraview/Camera2.java b/android/src/main/java/com/google/android/cameraview/Camera2.java index 2b70478..910409a 100644 --- a/android/src/main/java/com/google/android/cameraview/Camera2.java +++ b/android/src/main/java/com/google/android/cameraview/Camera2.java @@ -366,7 +366,14 @@ class Camera2 extends CameraViewImpl implements MediaRecorder.OnInfoListener, Me if (mStillImageReader != null) { mStillImageReader.close(); } - mPictureSize = size; + if (size == null) { + if (mAspectRatio == null) { + return; + } + mPictureSizes.sizes(mAspectRatio).last(); + } else { + mPictureSize = size; + } prepareStillImageReader(); startCaptureSession(); } diff --git a/android/src/main/java/org/reactnative/camera/CameraViewManager.java b/android/src/main/java/org/reactnative/camera/CameraViewManager.java index 157678c..ed06016 100644 --- a/android/src/main/java/org/reactnative/camera/CameraViewManager.java +++ b/android/src/main/java/org/reactnative/camera/CameraViewManager.java @@ -103,7 +103,7 @@ public class CameraViewManager extends ViewGroupManager { @ReactProp(name = "pictureSize") public void setPictureSize(RNCameraView view, String size) { - view.setPictureSize(Size.parse(size)); + view.setPictureSize(size.equals("None") ? null : Size.parse(size)); } @ReactProp(name = "barCodeTypes") diff --git a/android/src/main/java/org/reactnative/camera/RNCameraView.java b/android/src/main/java/org/reactnative/camera/RNCameraView.java index 78d8bcb..a1f1301 100644 --- a/android/src/main/java/org/reactnative/camera/RNCameraView.java +++ b/android/src/main/java/org/reactnative/camera/RNCameraView.java @@ -127,30 +127,38 @@ public class RNCameraView extends CameraView implements LifecycleEventListener, int correctWidth = width; int correctHeight = height; byte[] correctData = data; - if (correctRotation == 90) { - correctWidth = height; - correctHeight = width; - correctData = rotateImage(data, correctHeight, correctWidth); + boolean willCallBarCodeTask = mShouldScanBarCodes && !barCodeScannerTaskLock && cameraView instanceof BarCodeScannerAsyncTaskDelegate; + boolean willCallFaceTask = mShouldDetectFaces && !faceDetectorTaskLock && cameraView instanceof FaceDetectorAsyncTaskDelegate; + boolean willCallGoogleBarcodeTask = mShouldGoogleDetectBarcodes && !googleBarcodeDetectorTaskLock && cameraView instanceof BarcodeDetectorAsyncTaskDelegate; + boolean willCallTextTask = mShouldRecognizeText && !textRecognizerTaskLock && cameraView instanceof TextRecognizerAsyncTaskDelegate; + if (!willCallBarCodeTask && !willCallFaceTask && !willCallGoogleBarcodeTask && !willCallTextTask) { + return; } - if (mShouldScanBarCodes && !barCodeScannerTaskLock && cameraView instanceof BarCodeScannerAsyncTaskDelegate) { + + if (correctRotation == 90) { + correctWidth = height; + correctHeight = width; + correctData = rotateImage(data, correctHeight, correctWidth); + } + if (willCallBarCodeTask) { barCodeScannerTaskLock = true; BarCodeScannerAsyncTaskDelegate delegate = (BarCodeScannerAsyncTaskDelegate) cameraView; new BarCodeScannerAsyncTask(delegate, mMultiFormatReader, correctData, correctWidth, correctHeight).execute(); } - if (mShouldDetectFaces && !faceDetectorTaskLock && cameraView instanceof FaceDetectorAsyncTaskDelegate) { + if (willCallFaceTask) { faceDetectorTaskLock = true; FaceDetectorAsyncTaskDelegate delegate = (FaceDetectorAsyncTaskDelegate) cameraView; new FaceDetectorAsyncTask(delegate, mFaceDetector, correctData, correctWidth, correctHeight, correctRotation).execute(); } - if (mShouldGoogleDetectBarcodes && !googleBarcodeDetectorTaskLock && cameraView instanceof BarcodeDetectorAsyncTaskDelegate) { + if (willCallGoogleBarcodeTask) { googleBarcodeDetectorTaskLock = true; BarcodeDetectorAsyncTaskDelegate delegate = (BarcodeDetectorAsyncTaskDelegate) cameraView; new BarcodeDetectorAsyncTask(delegate, mGoogleBarcodeDetector, correctData, correctWidth, correctHeight, correctRotation).execute(); } - if (mShouldRecognizeText && !textRecognizerTaskLock && cameraView instanceof TextRecognizerAsyncTaskDelegate) { + if (willCallTextTask) { textRecognizerTaskLock = true; TextRecognizerAsyncTaskDelegate delegate = (TextRecognizerAsyncTaskDelegate) cameraView; new TextRecognizerAsyncTask(delegate, mTextRecognizer, correctData, correctWidth, correctHeight, correctRotation).execute(); diff --git a/ios/RN/RNCamera.m b/ios/RN/RNCamera.m index 53068cb..f8fb822 100644 --- a/ios/RN/RNCamera.m +++ b/ios/RN/RNCamera.m @@ -616,6 +616,9 @@ static NSDictionary *defaultFaceDetectorOptions = nil; - (void)updateSessionPreset:(AVCaptureSessionPreset)preset { #if !(TARGET_IPHONE_SIMULATOR) + if ([preset integerValue] < 0) { + return; + } if (preset) { if (self.isDetectingFaces && [preset isEqual:AVCaptureSessionPresetPhoto]) { RCTLog(@"AVCaptureSessionPresetPhoto not supported during face detection. Falling back to AVCaptureSessionPresetHigh"); diff --git a/ios/RN/RNCameraManager.m b/ios/RN/RNCameraManager.m index d42a34f..e7ab891 100644 --- a/ios/RN/RNCameraManager.m +++ b/ios/RN/RNCameraManager.m @@ -134,7 +134,8 @@ RCT_EXPORT_VIEW_PROPERTY(onPictureSaved, RCTDirectEventBlock); @"Photo" : AVCaptureSessionPresetPhoto, @"High" : AVCaptureSessionPresetHigh, @"Medium" : AVCaptureSessionPresetMedium, - @"Low" : AVCaptureSessionPresetLow + @"Low" : AVCaptureSessionPresetLow, + @"None": @(-1), }; } diff --git a/src/RNCamera.js b/src/RNCamera.js index cec27d6..5fcc85e 100644 --- a/src/RNCamera.js +++ b/src/RNCamera.js @@ -234,7 +234,7 @@ export default class Camera extends React.Component { captureAudio: false, useCamera2Api: false, playSoundOnCapture: false, - pictureSize: '1920x1080', + pictureSize: 'None', videoStabilizationMode: 0, };