android - 如何在 camera2 api,android 中锁定焦点?

标签 android android-camera2

我正在尝试在我的自定义相机找到焦点后锁定焦点。 首先将自动对焦模式设置为自动:

builder.set(CaptureRequest.CONTROL_AF_MODE,
                    CaptureRequest.CONTROL_AF_MODE_AUTO);

触摸预览后它会找到焦距,我必须使用以下代码锁定 AF 和 AE:

builder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);
builder.set(CaptureRequest.CONTROL_AE_LOCK, true);

锁定 AE 在任何设备上都能正常工作。锁定自动对焦适用于 Nexus5 和 Nexus 5x。但是对于三星S5和S6,它一直在尝试搜索焦点。

锁定焦点的最佳方式是什么?

最佳答案

为了锁定 AF,您必须注意使用 capture() 而不是 repeatingRequest() 仅请求一次 AF_TRIGGER >(如果不是,它会进入 af 请求循环并始终尝试聚焦,但一些 nexus 在其 FW 中修复了此问题,因此某些设备如 Nexus 5 聚焦良好,即使它不应该聚焦)

所以,正确的顺序是:

  • CONTROL_AF_MODE 设置为 CONTROL_AF_MODE_AUTO(通过 session.setRepeatingRequest())和 AF_REGIONSAE_REGIONS 如果你想要的话

  • 等到您通过检查 CaptureCallback 中的 totalCaptureRequest 来检查 CONTROL_AF_MODE 是否已处于自动状态。

  • 在构建器中设置 AF_TRIGGER_START 以及 CONTROL_AF_MODE_AUTO 但这次不使用 session.setRepeatingRequest() 使用 session.capture().

  • 紧接着,设置 AF_TRIGGER 以设置 AF_TRIGGER_IDLE(不是取消!)再次使用 session.setRepeatingRequest() 以及 CONTROL_AF_MODE_AUTO

  • 等待它聚焦,您将收到 FOCUSED_LOCKEDNOT_FOCUSED_LOCKED

PASSIVE_FOCUSED 状态仅在 CONTROL_AF_MODE 处于连续图片而非自动时!

在执行触发之前注意真正处于自动对焦模式。

您应该始终对所有触发器使用 session.capture()(也使用 CONTROL_AE_PRECAPTURE_TRIGGER),但在此之后始终记得将触发器置于 IDLEsession.repeatingRequest()

中的(不取消)

关于android - 如何在 camera2 api,android 中锁定焦点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42127464/

相关文章:

android - 简单的ListActivity崩溃

android - 如何使用 Paging3 库在 recyclerview 内的每个 n 位置添加分隔符?

android - Salesforce 移动 sdk 抛出错误 com.android.volley.servererror,基本网络执行请求 201

android - 我在 Android 中得到 "OutOfMemoryError thrown while trying to throw OutOfMemoryError; no stack available"

android - 为什么 camera2 支持的预览尺寸宽度总是大于高度?

Android:枚举原始资源的任何方式

java - Camera2 api 将相机切换为正常和黑白

android - 如何正确接收来自onImageAvailable 的摄像头图像?

android - 在附加的堆栈跟踪中获取了资源但从未释放 - kotlin

android - 相机 2 适用于较旧的 API?是否可以?