From 7066cbff9686642adfc6d3e1504eaa851a07df27 Mon Sep 17 00:00:00 2001 From: Nick Cullen Date: Fri, 4 Jan 2019 22:52:08 +0000 Subject: [PATCH 1/5] Picked slowest AE for camera preview --- .../flutter/plugins/camera/CameraPlugin.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java b/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java index 709c2f379bb0..267ef50fa583 100644 --- a/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java +++ b/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java @@ -38,6 +38,8 @@ import io.flutter.plugin.common.PluginRegistry; import io.flutter.plugin.common.PluginRegistry.Registrar; import io.flutter.view.FlutterView; + +import java.awt.font.NumericShaper.Range; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -49,6 +51,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; public class CameraPlugin implements MethodCallHandler { @@ -289,6 +293,7 @@ private class Camera { private Size videoSize; private MediaRecorder mediaRecorder; private boolean recordingVideo; + private android.util.Range aeFPSRange; Camera(final String cameraName, final String resolutionPreset, @NonNull final Result result) { @@ -322,6 +327,8 @@ private class Camera { isFrontFacing = characteristics.get(CameraCharacteristics.LENS_FACING) == CameraMetadata.LENS_FACING_FRONT; + + setBestAERange(characteristics); computeBestCaptureSize(streamConfigurationMap); computeBestPreviewAndRecordingSize(streamConfigurationMap, minPreviewSize, captureSize); @@ -395,6 +402,14 @@ private boolean hasAudioPermission() { == PackageManager.PERMISSION_GRANTED; } + private void setBestAERange(CameraCharacteristics characteristics) { + android.util.Range[] fpsRanges = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES); + + if(fpsRanges.length > 0) { + aeFPSRange = fpsRanges[0]; + } + } + private void computeBestPreviewAndRecordingSize( StreamConfigurationMap streamConfigurationMap, Size minPreviewSize, Size captureSize) { Size[] sizes = streamConfigurationMap.getOutputSizes(SurfaceTexture.class); @@ -738,8 +753,15 @@ public void onConfigured(@NonNull CameraCaptureSession session) { } try { cameraCaptureSession = session; + captureRequestBuilder.set( CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO); + + if(Camera.this.aeFPSRange != null) { + captureRequestBuilder.set( + CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, Camera.this.aeFPSRange); + } + cameraCaptureSession.setRepeatingRequest(captureRequestBuilder.build(), null, null); } catch (CameraAccessException e) { sendErrorEvent(e.getMessage()); From 7be53854f0f521a22feccfc7f614560be97865bb Mon Sep 17 00:00:00 2001 From: Nick Cullen Date: Fri, 4 Jan 2019 23:29:37 +0000 Subject: [PATCH 2/5] removed unused auto-included imports --- .../main/java/io/flutter/plugins/camera/CameraPlugin.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java b/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java index 267ef50fa583..ad64e30ca852 100644 --- a/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java +++ b/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java @@ -26,6 +26,7 @@ import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.util.Range; import android.util.Size; import android.view.Display; import android.view.OrientationEventListener; @@ -39,7 +40,6 @@ import io.flutter.plugin.common.PluginRegistry.Registrar; import io.flutter.view.FlutterView; -import java.awt.font.NumericShaper.Range; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -51,8 +51,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.logging.Level; -import java.util.logging.Logger; public class CameraPlugin implements MethodCallHandler { @@ -293,7 +291,7 @@ private class Camera { private Size videoSize; private MediaRecorder mediaRecorder; private boolean recordingVideo; - private android.util.Range aeFPSRange; + private Range aeFPSRange; Camera(final String cameraName, final String resolutionPreset, @NonNull final Result result) { @@ -403,7 +401,7 @@ private boolean hasAudioPermission() { } private void setBestAERange(CameraCharacteristics characteristics) { - android.util.Range[] fpsRanges = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES); + Range[] fpsRanges = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES); if(fpsRanges.length > 0) { aeFPSRange = fpsRanges[0]; From e6dcac1b986d0572038782ef8265d376177e347b Mon Sep 17 00:00:00 2001 From: Nick Date: Sat, 5 Jan 2019 16:25:06 +0000 Subject: [PATCH 3/5] Added to authors as per the contribute instructions --- AUTHORS | 1 + packages/camera/pubspec.yaml | 1 + 2 files changed, 2 insertions(+) diff --git a/AUTHORS b/AUTHORS index ba65f73098d9..d4d7141e2a66 100644 --- a/AUTHORS +++ b/AUTHORS @@ -22,3 +22,4 @@ Thomas Danner Diego Velásquez Hajime Nakamura Tuyển Vũ Xuân +Nicholas Cullen \ No newline at end of file diff --git a/packages/camera/pubspec.yaml b/packages/camera/pubspec.yaml index bd029dd59b47..ffebe4a63613 100644 --- a/packages/camera/pubspec.yaml +++ b/packages/camera/pubspec.yaml @@ -8,6 +8,7 @@ authors: - Quentin Le Guennec - Koushik Ravikumar - Nissim Dsilva + - Nicholas Cullen homepage: https://github.com/flutter/plugins/tree/master/packages/camera From 8cfa2708ace81878815e96b9a3f052d291c24e93 Mon Sep 17 00:00:00 2001 From: Nick Date: Sat, 5 Jan 2019 16:48:43 +0000 Subject: [PATCH 4/5] Checked for biggest range FPS from available AE ranges --- .../flutter/plugins/camera/CameraPlugin.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java b/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java index ad64e30ca852..06176e8c2347 100644 --- a/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java +++ b/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java @@ -403,9 +403,24 @@ private boolean hasAudioPermission() { private void setBestAERange(CameraCharacteristics characteristics) { Range[] fpsRanges = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES); - if(fpsRanges.length > 0) { - aeFPSRange = fpsRanges[0]; + if(fpsRanges.length <= 0) { + return; + } + + Integer idx = 0; + Integer biggestDiference = 0; + + for(Integer i = 0; i < fpsRanges.length; i++) { + Integer currentDifference = fpsRanges[i].getUpper() - fpsRanges[i].getLower(); + + if(currentDifference > biggestDiference) { + idx = i; + biggestDiference = currentDifference; + } + } + + aeFPSRange = fpsRanges[idx]; } private void computeBestPreviewAndRecordingSize( From c4de2b114703782f35016be5a92d042c47a478fc Mon Sep 17 00:00:00 2001 From: Nick Date: Sat, 5 Jan 2019 16:50:34 +0000 Subject: [PATCH 5/5] Java format and flutter plugin tools run --- .../io/flutter/plugins/camera/CameraPlugin.java | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java b/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java index 06176e8c2347..cd0e008cb1d0 100644 --- a/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java +++ b/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java @@ -39,7 +39,6 @@ import io.flutter.plugin.common.PluginRegistry; import io.flutter.plugin.common.PluginRegistry.Registrar; import io.flutter.view.FlutterView; - import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -401,23 +400,23 @@ private boolean hasAudioPermission() { } private void setBestAERange(CameraCharacteristics characteristics) { - Range[] fpsRanges = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES); - - if(fpsRanges.length <= 0) { + Range[] fpsRanges = + characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES); + + if (fpsRanges.length <= 0) { return; } Integer idx = 0; Integer biggestDiference = 0; - for(Integer i = 0; i < fpsRanges.length; i++) { + for (Integer i = 0; i < fpsRanges.length; i++) { Integer currentDifference = fpsRanges[i].getUpper() - fpsRanges[i].getLower(); - if(currentDifference > biggestDiference) { + if (currentDifference > biggestDiference) { idx = i; biggestDiference = currentDifference; } - } aeFPSRange = fpsRanges[idx]; @@ -770,9 +769,9 @@ public void onConfigured(@NonNull CameraCaptureSession session) { captureRequestBuilder.set( CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO); - if(Camera.this.aeFPSRange != null) { + if (Camera.this.aeFPSRange != null) { captureRequestBuilder.set( - CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, Camera.this.aeFPSRange); + CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, Camera.this.aeFPSRange); } cameraCaptureSession.setRepeatingRequest(captureRequestBuilder.build(), null, null);