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

How to lock focus in camera2 api, android?

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

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,一直在尝试搜索焦点。

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

您无法将焦点放在 CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE 上。

您应该将自动对焦模式设置为 CONTROL_AF_MODE_AUTO 并在自动对焦触发期间等待 FOCUSED_LOCKED 状态。您可以查看 Android 对焦机如何在 enter link description here

上工作

为了锁定 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),但在此之后始终记得将触发器置于 IDLE(而不是取消)[=37] =]