Как заблокировать фокус в 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(via- session.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 theCONTROL_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 на  Введите описание ссылки здесь
