diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java index cddc5277..2cee5011 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java @@ -83,6 +83,7 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv private static final int FRAME_PROCESSING_FORMAT = ImageFormat.NV21; private static final int FRAME_PROCESSING_INPUT_FORMAT = ImageFormat.YUV_420_888; + private static final int DEFAULT_FRAME_RATE = 30; @VisibleForTesting static final long METER_TIMEOUT = 2500; private final CameraManager mManager; @@ -1274,9 +1275,21 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv @SuppressWarnings("WeakerAccess") protected boolean applyPreviewFrameRate(@NonNull CaptureRequest.Builder builder, float oldPreviewFrameRate) { Range range = new Range<>((int) mCameraOptions.getFpsRangeMinValue(), (int) mCameraOptions.getFpsRangeMaxValue()); - if (range.contains((int) mPreviewFrameRate) || mPreviewFrameRate == 0f) { - builder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, range); - return true; + if (mPreviewFrameRate != 0f) { + if (range.contains((int) mPreviewFrameRate)) { + builder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, range); + return true; + } + } else { + Range[] fpsRanges = mCameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES); + if (fpsRanges != null) { + for (Range fpsRange : fpsRanges) { + if (range.contains(DEFAULT_FRAME_RATE)) { + builder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, fpsRange); + return true; + } + } + } } mPreviewFrameRate = oldPreviewFrameRate; return false;