added support for higher frame rate

pull/653/head
Vaibhav Bhandula 6 years ago
parent a63cd84726
commit ffe7e2ad27
  1. 20
      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<Action> 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<Integer>[] range = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES);
if (range != null) {
for (Range<Integer> 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) {

Loading…
Cancel
Save