Как заблокировать фокус в camera2 api, android?
Я пытаюсь заблокировать Фокус после того, как моя пользовательская камера найдет фокус. Сначала режим AF установлен в auto:
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. Но что касается Samsung S5 и S6, он продолжает пытаться найти фокус.
каков наилучший способ блокировки фокуса?
2 ответов
для того, чтобы заблокировать AF, вы должны позаботиться о запросе AF_TRIGGER
только один раз с помощью capture()
вместо repeatingRequest()
(если он не входит в цикл запроса af и всегда пытается сосредоточиться, но некоторые nexus исправляют это в своем FW, поэтому некоторые устройства как Nexus 5
фокус хорошо даже это не должно)
Итак, правильный порядок будет таким:
Set
CONTROL_AF_MODE
доCONTROL_AF_MODE_AUTO
(viasession.setRepeatingRequest()
) иAF_REGIONS
иAE_REGIONS
если вы хочу!--28-->подождите, пока вы не убедитесь, что
CONTROL_AF_MODE
уже находится в авто, проверивtotalCaptureRequest
СCaptureCallback
.установить
AF_TRIGGER_START
в Строителе вместе сCONTROL_AF_MODE_AUTO
но на этот раз вместо того, чтобы использоватьsession.setRepeatingRequest()
использоватьsession.capture()
.немедленно после этого установите
AF_TRIGGER
установитьAF_TRIGGER_IDLE
(не отменить!) использование снова сессия.setRepeatingRequest ()along with the
CONTROL_AF_MODE_AUTO`.подождите, пока он не сфокусируется, вы получите
FOCUSED_LOCKED
илиNOT_FOCUSED_LOCKED
.
на PASSIVE_FOCUSED
состояние только тогда, когда CONTROL_AF_MODE
находится в непрерывном изображении не в авто!
позаботьтесь о том, чтобы быть действительно в режиме автоматической фокусировки перед выполнением триггера.
вы должны всегда использовать session.capture()
со всеми триггерами (с CONTROL_AE_PRECAPTURE_TRIGGER
тоже), но всегда после этого не забудьте поставить триггеры IDLE
(не отменить) в session.repeatingRequest()
вы не можете локализовать фокус на CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE
.
вы должны включить режим AF CONTROL_AF_MODE_AUTO
ждать вопог FOCUSED_LOCKED
состояние во время триггера AF. Вы можете проверить, как работает Android focus machine на Введите описание ссылки здесь