如何在 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_REGIONS
和AE_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_LOCKED
或NOT_FOCUSED_LOCKED
。
PASSIVE_FOCUSED
状态只有在CONTROL_AF_MODE
连拍时才有,不是自动!
在执行触发之前注意真正处于自动对焦模式。
您应该始终对所有触发器使用 session.capture()
(也使用 CONTROL_AE_PRECAPTURE_TRIGGER
),但在此之后始终记得将触发器置于 IDLE
(而不是取消)[=37] =]
我正在尝试在我的自定义相机找到焦点后锁定焦点。 首先将自动对焦模式设置为自动:
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_REGIONS
和AE_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_LOCKED
或NOT_FOCUSED_LOCKED
。
PASSIVE_FOCUSED
状态只有在CONTROL_AF_MODE
连拍时才有,不是自动!
在执行触发之前注意真正处于自动对焦模式。
您应该始终对所有触发器使用 session.capture()
(也使用 CONTROL_AE_PRECAPTURE_TRIGGER
),但在此之后始终记得将触发器置于 IDLE
(而不是取消)[=37] =]