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

时间:2017-02-09 02:58:38

标签: android android-camera2

我想在自定义相机找到焦点后锁定焦点。 首先它将AF模式设置为自动:

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在任何设备中都能正常工作。锁定AF适用于Nexus5和Nexus 5x。但至于三星S5和S6,它一直试图寻找焦点。

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

2 个答案:

答案 0 :(得分:17)

要锁定自动对焦,您必须使用AF_TRIGGER代替capture()来处理请求repeatingRequest()一次(如果不是,请在af请求循环中输入并保持总是试着集中注意力,但是有些nexus在其FW中解决了这个问题,所以有些设备Nexus 5很好地关注,即使它不应该

所以,正确的顺序是:

  • CONTROL_AF_MODE设置为CONTROL_AF_MODE_AUTO(通过session.setRepeatingRequest())和AF_REGIONS以及AE_REGIONS(如果需要)

  • 通过查看CONTROL_AF_MODE中的totalCaptureRequest,等到您检查CaptureCallback已经在自动状态。

  • 在构建器中设置AF_TRIGGER_STARTCONTROL_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(不取消)session.repeatingRequest()

答案 1 :(得分:4)

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

在自动对焦触发期间,您应将自动对焦模式设为CONTROL_AF_MODE_AUTO并等待FOCUSED_LOCKED状态。您可以在enter link description here

上查看Android焦点计算机的工作原理