На этой странице описаны режимы 3A и конечные автоматы для устройств Android. Интерфейс HAL камеры, который определяет конечные автоматы на высоком уровне, позволяет реализации HAL и фреймворку Android передавать текущие состояния 3A и запускать события 3A. Реализация HAL отвечает за алгоритмы 3A, которые управляют настройками режима 3A и переходами между состояниями.
При открытии устройства все отдельные состояния 3A должны быть STATE_INACTIVE.
Конфигурация потока не сбрасывает 3A. Например, заблокированный фокус должен сохраняться при вызове метода configure().
Чтобы запустить действие 3A, достаточно задать соответствующую запись триггера в настройках следующего запроса. Например, чтобы запустить сканирование с автофокусом, нужно задать для записи ANDROID_CONTROL_AF_TRIGGER значение ANDROID_CONTROL_AF_TRIGGER_START в одном запросе, а чтобы отменить сканирование с автофокусом, нужно задать для записи ANDROID_CONTROL_AF_TRIGGER значение ANDROID_CONTRL_AF_TRIGGER_CANCEL. В противном случае запись не будет существовать или будет иметь значение ANDROID_CONTROL_AF_TRIGGER_IDLE. Каждый запрос с записью триггера, для которой задано значение, отличное от IDLE, будет рассматриваться как отдельное событие-триггер.
На верхнем уровне 3A управляется настройкой ANDROID_CONTROL_MODE. Он выбирает между отсутствием 3A (ANDROID_CONTROL_MODE_OFF), обычным режимом AUTO (ANDROID_CONTROL_MODE_AUTO) и использованием настройки сюжетного режима (ANDROID_CONTROL_USE_SCENE_MODE):
- В режиме OFF (Выкл.) все отдельные режимы автофокуса (AF), автоэкспозиции (AE) и автоматического баланса белого (AWB) фактически отключены, и ни один из элементов управления съемкой не может быть переопределен процедурами 3A.
- В режиме AUTO алгоритмы автофокусировки, автоэкспозиции и автоматического баланса белого работают независимо друг от друга и имеют собственные метаданные режима, состояния и триггера, как указано в следующем разделе.
- В режиме USE_SCENE_MODE значение записи ANDROID_CONTROL_SCENE_MODE должно использоваться для определения поведения подпрограмм 3A. В режимах SCENE_MODE, отличных от FACE_PRIORITY, HAL должен переопределять значения ANDROID_CONTROL_AE/AWB/AF_MODE, чтобы использовать режим, который он предпочитает для выбранного SCENE_MODE. Например, HAL может предпочесть SCENE_MODE_NIGHT для использования режима автофокусировки CONTINUOUS_FOCUS. При выборе режима AE/AWB/AF_MODE для этих режимов сцены необходимо игнорировать любые настройки пользователя.
- Для SCENE_MODE_FACE_PRIORITY элементы управления AE/AWB/AFMODE работают так же, как в ANDROID_CONTROL_MODE_AUTO, но подпрограммы 3A должны смещаться в сторону замера и фокусировки на любых обнаруженных лицах в сцене.
Настройки автофокуса и результаты
| Основные записи метаданных | |
|---|---|
| ANDROID_CONTROL_AF_MODE | Элемент управления для выбора текущего режима автофокусировки. Задается фреймворком в настройках запроса. |
| AF_MODE_OFF | Автофокус отключен. Фреймворк или приложение напрямую управляет положением линзы. |
| AF_MODE_AUTO | Однократная автофокусировка. Объектив не двигается, пока не сработает автофокус. |
| AF_MODE_MACRO | Автофокусировка при съемке крупным планом. Линза не двигается, если не активирована автофокусировка |
| AF_MODE_CONTINUOUS_VIDEO | Плавная непрерывная фокусировка для записи видео. При срабатывании фокус сразу же блокируется в текущем положении. При отмене фокусировка возобновляется. |
| AF_MODE_CONTINUOUS_PICTURE | Быстрая непрерывная фокусировка для съемки без задержки. После завершения текущей проверки фокус будет заблокирован. Отмена возобновляет непрерывную фокусировку. |
| AF_MODE_EDOF | Расширенная глубина резкости. Сканирование с автофокусом не выполняется, поэтому его запуск или отмена не имеют эффекта. Фокусировка изображений выполняется автоматически с помощью HAL. |
| ANDROID_CONTROL_AF_STATE | Динамические метаданные, описывающие текущее состояние алгоритма автофокусировки, передаются HAL в метаданных результата. |
| AF_STATE_INACTIVE | Фокусировка не выполнялась или алгоритм был сброшен. Объектив не двигается. Всегда состояние для MODE_OFF или MODE_EDOF. Когда устройство открывается, оно должно быть в этом состоянии. |
| AF_STATE_PASSIVE_SCAN | Алгоритм непрерывной фокусировки сейчас сканирует изображение, чтобы найти оптимальную фокусировку. Объектив движется. |
| AF_STATE_PASSIVE_FOCUSED | Алгоритм непрерывной фокусировки считает, что фокус настроен правильно. Объектив не двигается. HAL может спонтанно выйти из этого состояния. |
| AF_STATE_PASSIVE_UNFOCUSED | Алгоритм непрерывной фокусировки считает, что фокус установлен неверно. Объектив не двигается. HAL может спонтанно выйти из этого состояния. |
| AF_STATE_ACTIVE_SCAN | Выполняется сканирование, запущенное пользователем. |
| AF_STATE_FOCUSED_LOCKED | Алгоритм AF считает, что фокус установлен. Объектив не двигается. |
| AF_STATE_NOT_FOCUSED_LOCKED | Алгоритму автофокусировки не удалось сфокусироваться. Объектив не двигается. |
| ANDROID_CONTROL_AF_TRIGGER | Элемент управления для запуска сканирования с автофокусом, значение которого зависит от режима и состояния. Устанавливается фреймворком в настройках запроса. |
| AF_TRIGGER_IDLE | Нет текущего триггера. |
| AF_TRIGGER_START | Запустить автофокусировку. Эффект зависит от режима и состояния. |
| AF_TRIGGER_CANCEL | Отменить текущее сканирование AF, если оно выполняется, и сбросить алгоритм до настроек по умолчанию. |
| Дополнительные записи метаданных | |
|---|---|
| ANDROID_CONTROL_AF_REGIONS | Параметр, позволяющий выбрать области поля зрения, которые будут использоваться для определения хорошей фокусировки. Это относится ко всем режимам автофокусировки, в которых выполняется сканирование. Устанавливается фреймворком в настройках запроса. |
Настройки автоэкспозиции и записи результатов
| Основные метаданные | |
|---|---|
| ANDROID_CONTROL_AE_MODE | Элемент управления для выбора текущего режима автоматической экспозиции. Задается фреймворком в настройках запроса. |
| AE_MODE_OFF | Автоэкспозиция отключена. Пользователь управляет экспозицией, усилением, длительностью кадра и вспышкой. |
| AE_MODE_ON | Стандартная автоэкспозиция с отключенным управлением вспышкой. Пользователь может настроить вспышку на срабатывание или режим фонарика. |
| AE_MODE_ON_AUTO_FLASH | Стандартная автоэкспозиция со вспышкой, которая включается на усмотрение HAL для предварительной и обычной съемки. Пользовательское управление вспышкой отключено. |
| AE_MODE_ON_ALWAYS_FLASH | Стандартная автоэкспозиция, при которой вспышка всегда срабатывает при съемке и по усмотрению HAL при предварительной съемке. Пользовательское управление вспышкой отключено. |
| AE_MODE_ON_AUTO_FLASH_REDEYE | Стандартная автоэкспозиция со вспышкой, которая включается по усмотрению HAL перед съемкой и во время нее. Используйте вспышку в конце последовательности предварительной съемки, чтобы уменьшить эффект красных глаз на конечном изображении. Пользовательское управление вспышкой отключено. |
| AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY | Функция "Усиление при слабом освещении" автоматически регулирует яркость предварительного просмотра при слабом освещении. Это может привести к размытию в движении и шуму при слабом освещении. Производители устройств должны обеспечить частоту кадров не ниже 10 кадров/с. |
| ANDROID_CONTROL_AE_STATE | Динамические метаданные, описывающие текущее состояние алгоритма автоматической экспозиции, которые HAL передает в метаданных результата. |
| AE_STATE_INACTIVE | Начальное состояние AE после переключения режима. Когда устройство открывается, оно должно быть в этом состоянии. |
| AE_STATE_SEARCHING | Автоэкспозиция не сходится к хорошему значению и корректирует параметры экспозиции. |
| AE_STATE_CONVERGED | Автоматическая экспозиция нашла подходящие значения для текущей сцены, и параметры экспозиции не меняются. HAL может спонтанно покинуть это состояние, чтобы найти лучшее решение. |
| AE_STATE_LOCKED | AE заблокирован с помощью элемента управления AE_LOCK. Значения экспозиции не меняются. |
| AE_STATE_FLASH_REQUIRED | HAL определил, что экспозиция сходится, но считает, что для достаточно яркого изображения требуется вспышка. Используется для определения того, можно ли использовать кадр с нулевой задержкой затвора. |
| AE_STATE_PRECAPTURE | HAL находится в середине последовательности предварительной съемки. В зависимости от режима автоматической экспозиции в этом режиме может использоваться вспышка для замера экспозиции или серия импульсов вспышки для уменьшения эффекта красных глаз. |
| ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER | Элемент управления для запуска последовательности измерений перед съемкой изображения высокого качества. Задается фреймворком в настройках запроса. |
| PRECAPTURE_TRIGGER_IDLE | Нет текущего триггера. |
| PRECAPTURE_TRIGGER_START | Запустите последовательность предварительной съемки. HAL должен использовать последующие запросы, чтобы определить оптимальную экспозицию и баланс белого для предстоящей съемки с высоким разрешением. |
| Дополнительные записи метаданных | |
|---|---|
| ANDROID_CONTROL_AE_LOCK | Настройка, позволяющая заблокировать текущие значения элементов управления AE. |
| ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION | Элемент управления для настройки целевой точки яркости алгоритма AE. |
| ANDROID_CONTROL_AE_TARGET_FPS_RANGE | Элемент управления для выбора целевого диапазона частоты кадров для алгоритма автоматического экспонирования. Программа автоэкспозиции не может установить частоту кадров за пределами этих границ. |
| ANDROID_CONTROL_AE_REGIONS | Параметр, позволяющий выбрать области поля зрения, которые будут использоваться для определения хорошего уровня экспозиции. Это относится ко всем режимам автоматической экспозиции, кроме режима "Выкл.". |
Настройки автобаланса белого и записи результатов
| Основные записи метаданных | |
|---|---|
| ANDROID_CONTROL_AWB_MODE | Элемент управления для выбора текущего режима баланса белого. |
| AWB_MODE_OFF | Автоматический баланс белого отключен. Пользователь управляет матрицей преобразования цвета. |
| AWB_MODE_AUTO | Автоматический баланс белого включен. 3A управляет преобразованием цвета, возможно, используя более сложные преобразования, чем простая матрица. |
| AWB_MODE_INCANDESCENT | Фиксированные настройки баланса белого, подходящие для освещения лампами накаливания (вольфрамовыми) в помещении, примерно 2700 K. |
| AWB_MODE_FLUORESCENT | Фиксированные настройки баланса белого, подходящие для флуоресцентного освещения, примерно 5000 K. |
| AWB_MODE_WARM_FLUORESCENT | Фиксированные настройки баланса белого, подходящие для флуоресцентного освещения (примерно 3000 К). |
| AWB_MODE_DAYLIGHT | Фиксированные настройки баланса белого, подходящие для дневного света (примерно 5500 K). |
| AWB_MODE_CLOUDY_DAYLIGHT | Фиксированные настройки баланса белого, подходящие для облачного дня, примерно 6500 K. |
| AWB_MODE_TWILIGHT | Фиксированные настройки баланса белого, подходящие для съемки на рассвете или закате (примерно 15 000 K). |
| AWB_MODE_SHADE | Фиксированные настройки баланса белого, подходящие для областей, освещенных непрямым солнечным светом, примерно 7500 К. |
| ANDROID_CONTROL_AWB_STATE | Динамические метаданные, описывающие текущее состояние алгоритма AWB, сообщаемые HAL в метаданных результата. |
| AWB_STATE_INACTIVE | Начальное состояние баланса белого после переключения режима. Когда устройство открывается, оно должно быть в этом состоянии. |
| AWB_STATE_SEARCHING | Автоматический баланс белого не настроен на оптимальное значение и меняет параметры цветокоррекции. |
| AWB_STATE_CONVERGED | AWB подобрал подходящие значения цветокоррекции для текущей сцены, и параметры не меняются. HAL может спонтанно выйти из этого состояния, чтобы найти лучшее решение. |
| AWB_STATE_LOCKED | Автоматический баланс белого заблокирован с помощью элемента управления AWB_LOCK. Значения цветокоррекции не меняются. |
| Дополнительные записи метаданных | |
|---|---|
| ANDROID_CONTROL_AWB_LOCK | Блокировка текущих значений цветокоррекции AWB. |
| ANDROID_CONTROL_AWB_REGIONS | Элемент управления для выбора областей поля зрения, которые должны использоваться для определения баланса белого. Это относится только к режиму автоматического баланса белого. |
Общие примечания к переходам между состояниями
Переключение между режимами AF, AE или AWB всегда сбрасывает состояние алгоритма на INACTIVE. Аналогично, при переключении между CONTROL_MODE и CONTROL_SCENE_MODE, если CONTROL_MODE == USE_SCENE_MODE, все состояния алгоритма сбрасываются на INACTIVE.
В таблицах ниже приведены данные для каждого режима.
Конечные автоматы автофокусировки
| mode = AF_MODE_OFF или AF_MODE_EDOF | |||
|---|---|---|---|
| Штат | Причина преобразования | Новое состояние | Примечания |
| НЕАКТИВНО | Функция AF отключена | ||
| mode = AF_MODE_AUTO или AF_MODE_MACRO | |||
|---|---|---|---|
| Штат | Причина преобразования | Новое состояние | Примечания |
| НЕАКТИВНО | AF_TRIGGER | ACTIVE_SCAN | Начать сканирование AF Объектив перемещается |
| ACTIVE_SCAN | Сканирование AF завершено | FOCUSED_LOCKED | Если фибрилляция предсердий обнаружена Объектив заблокирован |
| ACTIVE_SCAN | Завершено сканирование альтернативных частот | NOT_FOCUSED_LOCKED | Если автофокус сработал Объектив заблокирован |
| ACTIVE_SCAN | AF_CANCEL | НЕАКТИВНО | Отмена/сброс автофокуса Объектив заблокирован |
| FOCUSED_LOCKED | AF_CANCEL | НЕАКТИВНО | Отмена/сброс автофокуса |
| FOCUSED_LOCKED | AF_TRIGGER | ACTIVE_SCAN | Начать новую проверку Объектив перемещается |
| NOT_FOCUSED_LOCKED | AF_CANCEL | НЕАКТИВНО | Отмена/сброс автофокуса |
| NOT_FOCUSED_LOCKED | AF_TRIGGER | ACTIVE_SCAN | Начать новую проверку Объектив перемещается |
| Все штаты | Сменить режим | НЕАКТИВНО | |
| mode = AF_MODE_CONTINUOUS_VIDEO | |||
|---|---|---|---|
| Штат | Причина преобразования | Новое состояние | Примечания |
| НЕАКТИВНО | HAL инициирует новое сканирование | PASSIVE_SCAN | Начать сканирование AF Объектив перемещается |
| НЕАКТИВНО | AF_TRIGGER | NOT_FOCUSED_LOCKED | Запрос состояния автофокуса Объектив заблокирован |
| PASSIVE_SCAN | HAL завершает текущее сканирование | PASSIVE_FOCUSED | Завершить сканирование AF Объектив заблокирован |
| PASSIVE_SCAN | AF_TRIGGER | FOCUSED_LOCKED | Мгновенное преобразование, если фокус хороший Объектив заблокирован |
| PASSIVE_SCAN | AF_TRIGGER | NOT_FOCUSED_LOCKED | Немедленное преобразование, если фокус плохой Объектив заблокирован |
| PASSIVE_SCAN | AF_CANCEL | НЕАКТИВНО | Как сбросить положение линзы Объектив заблокирован |
| PASSIVE_FOCUSED | HAL инициирует новое сканирование | PASSIVE_SCAN | Начать сканирование AF Объектив перемещается |
| PASSIVE_FOCUSED | AF_TRIGGER | FOCUSED_LOCKED | Мгновенное преобразование, если фокус хороший Объектив заблокирован |
| PASSIVE_FOCUSED | AF_TRIGGER | NOT_FOCUSED_LOCKED | Немедленное преобразование, если фокус плохой
Объектив заблокирован |
| FOCUSED_LOCKED | AF_TRIGGER | FOCUSED_LOCKED | Без эффектов |
| FOCUSED_LOCKED | AF_CANCEL | НЕАКТИВНО | Перезапустить сканирование AF |
| NOT_FOCUSED_LOCKED | AF_TRIGGER | NOT_FOCUSED_LOCKED | Без эффектов |
| NOT_FOCUSED_LOCKED | AF_CANCEL | НЕАКТИВНО | Перезапустить сканирование AF |
| mode = AF_MODE_CONTINUOUS_PICTURE | |||
|---|---|---|---|
| Штат | Причина преобразования | Новое состояние | Примечания |
| НЕАКТИВНО | HAL инициирует новое сканирование | PASSIVE_SCAN | Начать сканирование AF Объектив перемещается |
| НЕАКТИВНО | AF_TRIGGER | NOT_FOCUSED_LOCKED | Запрос состояния автофокуса Объектив заблокирован |
| PASSIVE_SCAN | HAL завершает текущее сканирование | PASSIVE_FOCUSED | Завершить сканирование AF
Объектив заблокирован |
| PASSIVE_SCAN | AF_TRIGGER | FOCUSED_LOCKED | Постепенное преобразование, когда фокус будет хорошим Объектив заблокирован |
| PASSIVE_SCAN | AF_TRIGGER | NOT_FOCUSED_LOCKED | Если не удается сосредоточиться, в конечном итоге происходит трансформация Объектив заблокирован |
| PASSIVE_SCAN | AF_CANCEL | НЕАКТИВНО | Как сбросить положение линзы Объектив заблокирован |
| PASSIVE_FOCUSED | HAL инициирует новое сканирование | PASSIVE_SCAN | Начать сканирование AF Объектив перемещается |
| PASSIVE_FOCUSED | AF_TRIGGER | FOCUSED_LOCKED | Мгновенное преобразование при хорошей фокусировке. Объектив заблокирован |
| PASSIVE_FOCUSED | AF_TRIGGER | NOT_FOCUSED_LOCKED | Мгновенное преобразование при плохой фокусировке Объектив заблокирован |
| FOCUSED_LOCKED | AF_TRIGGER | FOCUSED_LOCKED | Без эффектов |
| FOCUSED_LOCKED | AF_CANCEL | НЕАКТИВНО | Перезапустить сканирование AF |
| NOT_FOCUSED_LOCKED | AF_TRIGGER | NOT_FOCUSED_LOCKED | Без эффектов |
| NOT_FOCUSED_LOCKED | AF_CANCEL | НЕАКТИВНО | Перезапустить сканирование AF |
Конечные автоматы AE и AWB
Автоматическая экспозиция и автоматический баланс белого работают практически одинаково. У AE есть дополнительные состояния FLASH_REQUIRED и PRECAPTURE. Поэтому строки ниже, которые ссылаются на эти два состояния, следует игнорировать для конечного автомата AWB.
| mode = AE_MODE_OFF / режим AWB не AUTO | |||
|---|---|---|---|
| Штат | Причина преобразования | Новое состояние | Примечания |
| НЕАКТИВНО | Автоэкспозиция и автоматический баланс белого отключены | ||
| mode = AE_MODE_ON_* / AWB_MODE_AUTO | |||
|---|---|---|---|
| Штат | Причина преобразования | Новое состояние | Примечания |
| НЕАКТИВНО | HAL инициирует сканирование AE/AWB | ПОИСК... | |
| НЕАКТИВНО | AE/AWB_LOCK включен | ЗАБЛОКИРОВАНО | Значения заблокированы |
| ПОИСК... | HAL завершает сканирование AE/AWB | ОБЪЕДИНЕННЫЙ | Хорошие значения, не меняются |
| ПОИСК... | HAL завершает сканирование AE | FLASH_REQUIRED | Снимки, сделанные без вспышки, получаются слишком темными. |
| ПОИСК... | AE/AWB_LOCK включен | ЗАБЛОКИРОВАНО | Значения заблокированы |
| CONVERGED | HAL инициирует сканирование AE/AWB | ПОИСК... | Значения заблокированы |
| ОБЪЕДИНЕННЫЙ | AE/AWB_LOCK включен | ЗАБЛОКИРОВАНО | Значения заблокированы |
| FLASH_REQUIRED | HAL инициирует сканирование AE/AWB | ПОИСК... | Значения заблокированы |
| FLASH_REQUIRED | AE/AWB_LOCK включен | ЗАБЛОКИРОВАНО | Значения заблокированы |
| ЗАБЛОКИРОВАНО | AE/AWB_LOCK off | ПОИСК... | Значения не подходят после разблокировки |
| ЗАБЛОКИРОВАНО | Блокировка автоэкспозиции и автоматического баланса белого отключена | ОБЪЕДИНЕННЫЙ | Значения действительны после разблокировки |
| ЗАБЛОКИРОВАНО | Блокировка автоэкспозиции отключена. | FLASH_REQUIRED | Экспозиция хорошая, но слишком темно |
| Все штаты ОАЭ | PRECAPTURE_START | PRECAPTURE | Начать предварительную съемку |
| ДО ЗАПИСИ | Последовательность завершена, блокировка автоэкспозиции отключена | ОБЪЕДИНЕННЫЙ | Готовность к высококачественной записи |
| ПРЕДВАРИТЕЛЬНАЯ ЗАПИСЬ | Последовательность завершена, AE_LOCK включен | ЗАБЛОКИРОВАНО | Готовность к высококачественной записи |
Как включить ручное управление
Некоторые элементы управления также участвуют в настройке блоков 3A устройства, чтобы обеспечить прямое управление приложением.
Модель HAL для управления 3A предполагает, что для каждого запроса HAL проверяет состояние полей управления 3A. Если включена какая-либо программа 3A, она переопределяет переменные управления, относящиеся к этой программе, и эти переопределенные значения становятся доступны в метаданных результата для этой съемки. Например, если в запросе включена автоэкспозиция, HAL должен перезаписать поля экспозиции, усиления и длительности кадра (и, возможно, поля вспышки, в зависимости от режима автоэкспозиции) запроса. Список подходящих элементов управления:
| Название элемента управления | Единица измерения | Примечания |
|---|---|---|
| android.control.mode | enum: OFF, AUTO, USE_SCENE_MODE | Управление 3A высокого уровня. Если задано значение OFF, все функции 3A, управляемые HAL, будут отключены. Приложение должно самостоятельно задавать поля для параметров захвата. Если задано значение AUTO, действуют отдельные алгоритмы управления в android.control.*, например android.control.afMode. Если задано значение USE_SCENE_MODE, отдельные элементы управления в android.control.* в основном отключены, а HAL реализует один из режимов съемки (например, "Действие", "Закат" или "Вечеринка") по своему усмотрению. |
| android.control.afMode | enum : перечисление | OFF – ручное управление фокусировкой объектива с помощью android.lens.focusDistance. |
| android.control.aeMode | enum : перечисление | Если задано значение OFF, экспозиция, усиление и длительность кадра регулируются вручную с помощью android.sensor.exposureTime / .sensitivity / .frameDuration. |
| android.control.awbMode | enum : перечисление | Если выбрано значение "Выкл.", баланс белого настраивается вручную. |