Android camera2 点击对焦
Android camera2 tap to focus
正在尝试使用 camera2api
实现对 focus
的点击。
CaptureRequest.Builder afBuilder = mPreviewBuilder;
Rect newRect=new Rect(0,0,200,200);
MeteringRectangle meteringRectangle=new MeteringRectangle(newRect,METERING_WEIGHT_DONT_CARE);
MeteringRectangle[] areas = afBuilder.get(CaptureRequest.CONTROL_AF_REGIONS);
mPreviewBuilder.set(CaptureRequest.CONTROL_AF_REGIONS,areas);
mPreviewBuilder.set(CaptureRequest.CONTROL_AF_MODE, CameraMetadata.CONTROL_AF_MODE_AUTO);
mPreviewBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_START);
mPreviewSession.setRepeatingRequest(mPreviewBuilder.build(), mCaptureCallback, mBackgroundHandler);
在我的回电中,我不断陷入 ACTIVE_SCAN
状态,偶尔会进入 FOCUS_NOT_LOCKED
状态。我似乎永远无法进入 FOCUS_LOCKED
状态,而且预览看起来永远不会聚焦。
使用三星 galaxy note 3。
一方面,您实际上并没有设置 AF 区域 - 您只是重复使用 mPreviewBuilder 中的默认区域。
其次,即使您将区域设置为[(0,0,200,200), METERING_WEIGHT_DONT_CARE],那也是图像的左上角,可能不是您想要的?
第三,也是最重要的一点,您要将 AF 触发器设置为重复。这意味着在每一帧上,您都要求相机重新启动对焦。所以它永远不会完成,因为你从不让它。
您需要将 AF_TRIGGER 设置为 START 以仅进行一次捕获;您仍然需要根据重复请求设置 AF_REGION 和 AF_MODE,以便在您开始的整个 AF 扫描中保持一致。
正在尝试使用 camera2api
实现对 focus
的点击。
CaptureRequest.Builder afBuilder = mPreviewBuilder;
Rect newRect=new Rect(0,0,200,200);
MeteringRectangle meteringRectangle=new MeteringRectangle(newRect,METERING_WEIGHT_DONT_CARE);
MeteringRectangle[] areas = afBuilder.get(CaptureRequest.CONTROL_AF_REGIONS);
mPreviewBuilder.set(CaptureRequest.CONTROL_AF_REGIONS,areas);
mPreviewBuilder.set(CaptureRequest.CONTROL_AF_MODE, CameraMetadata.CONTROL_AF_MODE_AUTO);
mPreviewBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_START);
mPreviewSession.setRepeatingRequest(mPreviewBuilder.build(), mCaptureCallback, mBackgroundHandler);
在我的回电中,我不断陷入 ACTIVE_SCAN
状态,偶尔会进入 FOCUS_NOT_LOCKED
状态。我似乎永远无法进入 FOCUS_LOCKED
状态,而且预览看起来永远不会聚焦。
使用三星 galaxy note 3。
一方面,您实际上并没有设置 AF 区域 - 您只是重复使用 mPreviewBuilder 中的默认区域。
其次,即使您将区域设置为[(0,0,200,200), METERING_WEIGHT_DONT_CARE],那也是图像的左上角,可能不是您想要的?
第三,也是最重要的一点,您要将 AF 触发器设置为重复。这意味着在每一帧上,您都要求相机重新启动对焦。所以它永远不会完成,因为你从不让它。
您需要将 AF_TRIGGER 设置为 START 以仅进行一次捕获;您仍然需要根据重复请求设置 AF_REGION 和 AF_MODE,以便在您开始的整个 AF 扫描中保持一致。