From 15ba3462c1a37b9c60f3d5527bf390be38662ed7 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 9 Jul 2018 22:05:59 +0200 Subject: [PATCH] fix too dark image preview on some devices --- .../camera/views/PreviewCameraTwo.kt | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/app/src/main/kotlin/com/simplemobiletools/camera/views/PreviewCameraTwo.kt b/app/src/main/kotlin/com/simplemobiletools/camera/views/PreviewCameraTwo.kt index 870a237c..c33879c2 100644 --- a/app/src/main/kotlin/com/simplemobiletools/camera/views/PreviewCameraTwo.kt +++ b/app/src/main/kotlin/com/simplemobiletools/camera/views/PreviewCameraTwo.kt @@ -18,6 +18,7 @@ import android.os.Build import android.os.Handler import android.os.HandlerThread import android.util.DisplayMetrics +import android.util.Range import android.util.Size import android.util.SparseIntArray import android.view.MotionEvent @@ -458,6 +459,7 @@ class PreviewCameraTwo : ViewGroup, TextureView.SurfaceTextureListener, MyPrevie } else { mPreviewRequestBuilder!!.apply { set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE) + set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, getFrameRange()) setFlashAndExposure(this) mPreviewRequest = build() } @@ -490,6 +492,23 @@ class PreviewCameraTwo : ViewGroup, TextureView.SurfaceTextureListener, MyPrevie } } + private fun getFrameRange(): Range { + val ranges = getCameraCharacteristics().get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES) + var currRangeSize = -1 + var currMinRange = 0 + var result: Range? = null + for (range in ranges) { + val diff = range.upper - range.lower + if (diff > currRangeSize || (diff == currRangeSize && range.lower > currMinRange)) { + currRangeSize = diff + currMinRange = range.lower + result = range + } + } + + return result!! + } + private fun updatePreview() { try { mPreviewRequestBuilder!!.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO) @@ -565,6 +584,7 @@ class PreviewCameraTwo : ViewGroup, TextureView.SurfaceTextureListener, MyPrevie set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE) set(CaptureRequest.JPEG_ORIENTATION, mSensorOrientation) set(CaptureRequest.CONTROL_CAPTURE_INTENT, CaptureRequest.CONTROL_CAPTURE_INTENT_STILL_CAPTURE) + set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, getFrameRange()) if (mZoomRect != null) { set(CaptureRequest.SCALER_CROP_REGION, mZoomRect) }