From ffe7e2ad27fb73343c3a83a07d537323130fadde Mon Sep 17 00:00:00 2001 From: Vaibhav Bhandula Date: Thu, 17 Oct 2019 17:25:14 +0530 Subject: [PATCH] added support for higher frame rate --- .../cameraview/engine/Camera2Engine.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) 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 ac657b46..7387259c 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/engine/Camera2Engine.java @@ -20,6 +20,7 @@ import android.media.Image; import android.media.ImageReader; import android.os.Build; import android.util.Pair; +import android.util.Range; import android.util.Rational; import android.view.Surface; import android.view.SurfaceHolder; @@ -82,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 HIGHER_FRAME_RATE = 60; @VisibleForTesting static final long METER_TIMEOUT = 2500; private final CameraManager mManager; @@ -116,6 +118,9 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv private final List mActions = new CopyOnWriteArrayList<>(); private MeterAction mMeterAction; + // Frame rate + private boolean mIsHigherFrameRateSupported = false; + public Camera2Engine(Callback callback) { super(callback); mManager = (CameraManager) mCallback.getContext().getSystemService(Context.CAMERA_SERVICE); @@ -353,6 +358,15 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv int sensorOffset = readCharacteristic(characteristics, CameraCharacteristics.SENSOR_ORIENTATION, 0); getAngles().setSensorOffset(facing, sensorOffset); + Range[] range = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES); + if (range != null) { + for (Range fpsRange : range) { + if (fpsRange.getUpper() >= HIGHER_FRAME_RATE) { + mIsHigherFrameRateSupported = true; + break; + } + } + } return true; } } catch (CameraAccessException ignore) { @@ -775,6 +789,9 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv @Override protected void onTakeVideo(@NonNull VideoResult.Stub stub) { LOG.i("onTakeVideo", "called."); + if (mIsHigherFrameRateSupported) { + stub.videoFrameRate = HIGHER_FRAME_RATE; + } stub.rotation = getAngles().offset(Reference.SENSOR, Reference.OUTPUT, Axis.RELATIVE_TO_SENSOR); stub.size = getAngles().flip(Reference.SENSOR, Reference.OUTPUT) ? @@ -813,6 +830,9 @@ public class Camera2Engine extends CameraEngine implements ImageReader.OnImageAv if (!(mPreview instanceof GlCameraPreview)) { throw new IllegalStateException("Video snapshots are only supported with GL_SURFACE."); } + if (mIsHigherFrameRateSupported) { + stub.videoFrameRate = HIGHER_FRAME_RATE; + } GlCameraPreview glPreview = (GlCameraPreview) mPreview; Size outputSize = getUncroppedSnapshotSize(Reference.OUTPUT); if (outputSize == null) {