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/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..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 @@ -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; @@ -289,6 +290,7 @@ private class Camera { private Size videoSize; private MediaRecorder mediaRecorder; private boolean recordingVideo; + private Range aeFPSRange; Camera(final String cameraName, final String resolutionPreset, @NonNull final Result result) { @@ -322,6 +324,8 @@ private class Camera { isFrontFacing = characteristics.get(CameraCharacteristics.LENS_FACING) == CameraMetadata.LENS_FACING_FRONT; + + setBestAERange(characteristics); computeBestCaptureSize(streamConfigurationMap); computeBestPreviewAndRecordingSize(streamConfigurationMap, minPreviewSize, captureSize); @@ -395,6 +399,29 @@ private boolean hasAudioPermission() { == PackageManager.PERMISSION_GRANTED; } + private void setBestAERange(CameraCharacteristics characteristics) { + 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++) { + Integer currentDifference = fpsRanges[i].getUpper() - fpsRanges[i].getLower(); + + if (currentDifference > biggestDiference) { + idx = i; + biggestDiference = currentDifference; + } + } + + aeFPSRange = fpsRanges[idx]; + } + private void computeBestPreviewAndRecordingSize( StreamConfigurationMap streamConfigurationMap, Size minPreviewSize, Size captureSize) { Size[] sizes = streamConfigurationMap.getOutputSizes(SurfaceTexture.class); @@ -738,8 +765,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()); 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