Android Camera2,禁用自动对焦
我的应用程序使用Camera2 API尽可能快地拍摄帧。我们有一个开始/停止按钮来开始/停止捕获帧。焦点设置为“自动”,或在捕获之前完成。如果在捕获之前已完成对焦,则在捕获期间必须禁用对焦 我用这个来聚焦:Android Camera2,禁用自动对焦,android,focus,camera2,Android,Focus,Camera2,我的应用程序使用Camera2 API尽可能快地拍摄帧。我们有一个开始/停止按钮来开始/停止捕获帧。焦点设置为“自动”,或在捕获之前完成。如果在捕获之前已完成对焦,则在捕获期间必须禁用对焦 我用这个来聚焦: public void focusAt(Point point) { if(mCanAe || mCanAf) { int areaSize = 200; int ll = ((point.x * mActiveArraySize.right)
public void focusAt(Point point) {
if(mCanAe || mCanAf) {
int areaSize = 200;
int ll = ((point.x * mActiveArraySize.right) - areaSize) / mTextureView.getWidth();
int rr = ((point.y * mActiveArraySize.bottom) - areaSize) / mTextureView.getHeight();
int focusLeft = clamp(ll, 0, mActiveArraySize.right);
int focusBottom = clamp(rr, 0, mActiveArraySize.bottom);
Rect newRect = new Rect(focusLeft, focusBottom, focusLeft + areaSize, focusBottom + areaSize);
MeteringRectangle meteringRectangle = new MeteringRectangle(newRect, 1);
final MeteringRectangle[] meteringRectangleArr = { meteringRectangle };
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_CANCEL);
try {
mCaptureSession.capture(mPreviewRequestBuilder.build(), new CameraCaptureSession.CaptureCallback() {
@Override
public void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, @NonNull TotalCaptureResult result) {
if (mCanAe) {
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_REGIONS, meteringRectangleArr );
}
if (mCanAf) {
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_REGIONS, meteringRectangleArr );
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_AUTO);
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_START);
}
try {
mCaptureSession.setRepeatingRequest(mPreviewRequestBuilder.build(), null, mBackgroundHandler);
}
catch (CameraAccessException e) {
e.printStackTrace();
}
}
}, mBackgroundHandler);
}
catch (CameraAccessException e) { e.printStackTrace(); }
}
}
捕获期间无法调用此函数。我认为这就足够了,但有时在拍摄过程中,Camera2会试图聚焦
有没有办法禁用焦点
另一个问题,在捕获之前是否必须锁定焦点?不这样做似乎很好,但我想确定一下
编辑:要捕获,我正在执行以下操作:
private void capture() {
try {
final CaptureRequest.Builder captureBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG);
captureBuilder.addTarget(mImageReader.getSurface());
// Orientation
int rotation = getActivity().getWindowManager().getDefaultDisplay().getRotation();
captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, getOrientation(rotation));
mCaptureSession.capture(captureBuilder.build(), null, mTakeImageBackgroundHandler);
}
catch (CameraAccessException e) {
e.printStackTrace();
}
保存帧后,我立即调用capture()方法