В то время как фактические алгоритмы 3A зависят от реализации HAL, высокоуровневое описание конечного автомата определяется интерфейсом HAL, чтобы позволить устройству 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 режимы AF, AE и AWB используют свои собственные независимые алгоритмы и имеют свои собственные записи метаданных режима, состояния и триггера, как указано в следующем разделе.
- В 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 | Динамические метаданные, описывающие текущее состояние алгоритма AF, сообщаемые 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. Эффект зависит от режима и состояния. |
AF_TRIGGER_CANCEL | Отмените текущее сканирование AF, если оно есть, и сбросьте алгоритм по умолчанию. |
Дополнительные записи метаданных | |
---|---|
ANDROID_CONTROL_AF_REGIONS | Элемент управления для выбора областей поля зрения (FOV), которые следует использовать для определения хорошей фокусировки. Это относится ко всем режимам автофокусировки, которые сканируют фокус. Задается фреймворком в настройках запроса. |
Настройки автоэкспозиции и записи результатов
Основные записи метаданных | |
---|---|
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 для предварительного и неподвижного захвата. Используйте вспышку в конце последовательности предварительного захвата, чтобы уменьшить эффект красных глаз на конечном изображении. Пользовательское управление вспышкой отключено. |
ANDROID_CONTROL_AE_STATE | Динамические метаданные, описывающие текущее состояние алгоритма AE, сообщаемые HAL в метаданных результата. |
AE_STATE_INACTIVE | Исходное состояние АЭ после переключения режима. Когда устройство открыто, оно должно запускаться в этом состоянии. |
AE_STATE_SEARCHING | AE не сводится к хорошему значению и корректирует параметры экспозиции. |
AE_STATE_CONVERGED | AE нашел хорошие значения экспозиции для текущей сцены, и параметры экспозиции не меняются. 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 | Элемент управления для блокировки элементов управления автоэкспозицией до их текущих значений. |
ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION | Элемент управления для настройки целевой точки яркости алгоритма AE. |
ANDROID_CONTROL_AE_TARGET_FPS_RANGE | Элемент управления для выбора целевого диапазона частоты кадров для алгоритма AE. Подпрограмма AE не может изменить частоту кадров, чтобы выйти за эти пределы. |
ANDROID_CONTROL_AE_REGIONS | Элемент управления для выбора областей FOV, которые следует использовать для определения хороших уровней экспозиции. Это относится ко всем режимам AE, кроме OFF. |
Настройки автоматического баланса белого и записи результатов
Основные записи метаданных | |
---|---|
ANDROID_CONTROL_AWB_MODE | Элемент управления для выбора текущего режима баланса белого. |
AWB_MODE_OFF | Автоматический баланс белого отключен. Пользователь управляет цветовой матрицей. |
AWB_MODE_AUTO | Автоматический баланс белого включен; 3A управляет преобразованием цвета, возможно, с использованием более сложных преобразований, чем простая матрица. |
AWB_MODE_INCANDESCENT | Фиксированные настройки баланса белого, подходящие для освещения лампами накаливания (вольфрамовыми) в помещении, примерно 2700K. |
AWB_MODE_FLUORESCENT | Фиксированные настройки баланса белого, подходящие для флуоресцентного освещения, примерно 5000K. |
AWB_MODE_WARM_FLUORESCENT | Фиксированные настройки баланса белого, подходящие для флуоресцентного освещения, примерно 3000K. |
AWB_MODE_DAYLIGHT | Фиксированные настройки баланса белого, подходящие для дневного света, примерно 5500K. |
AWB_MODE_CLOUDY_DAYLIGHT | Исправлены настройки баланса белого, подходящие для облачного дневного света, примерно 6500K. |
AWB_MODE_СУМЕРКИ | Фиксированные настройки баланса белого, подходящие для заката/восхода солнца, примерно 15000K. |
AWB_MODE_SHADE | Фиксированные настройки баланса белого подходят для областей, непрямо освещенных солнцем, примерно 7500K. |
ANDROID_CONTROL_AWB_STATE | Динамические метаданные, описывающие текущее состояние алгоритма AWB, сообщаемые HAL в метаданных результата. |
AWB_STATE_INACTIVE | Исходное состояние AWB после переключения режима. Когда устройство открыто, оно должно запускаться в этом состоянии. |
AWB_STATE_SEARCHING | AWB не сводится к хорошему значению и меняет параметры настройки цвета. |
AWB_STATE_CONVERGED | AWB нашел хорошие значения регулировки цвета для текущей сцены, и параметры не меняются. HAL может самопроизвольно выйти из этого состояния для поиска лучшего решения. |
AWB_STATE_LOCKED | AWB заблокирован с помощью элемента управления AWB_LOCK. Значения регулировки цвета не меняются. |
Дополнительные записи метаданных | |
---|---|
ANDROID_CONTROL_AWB_LOCK | Элемент управления для блокировки настроек цвета AWB с их текущими значениями. |
ANDROID_CONTROL_AWB_REGIONS | Элемент управления для выбора областей FOV, которые следует использовать для определения хорошего цветового баланса. Это относится только к режиму автоматического баланса белого. |
Общие примечания по переходу конечного автомата
Переключение между режимами AF, AE или AWB всегда сбрасывает состояние алгоритма на НЕАКТИВНО. Точно так же переключение между CONTROL_MODE или CONTROL_SCENE_MODE, если CONTROL_MODE == USE_SCENE_MODE, сбрасывает все состояния алгоритма в INACTIVE.
Приведенные ниже таблицы относятся к каждому режиму.
Конечные автоматы AF
режим = AF_MODE_OFF или AF_MODE_EDOF | |||
---|---|---|---|
Состояние | Причина трансформации | Новое состояние | Заметки |
НЕАКТИВНЫЙ | АФ отключен |
режим = AF_MODE_AUTO или AF_MODE_MACRO | |||
---|---|---|---|
Состояние | Причина трансформации | Новое состояние | Заметки |
НЕАКТИВНЫЙ | AF_TRIGGER | ACTIVE_SCAN | Начать развертку АФ Объектив движется |
ACTIVE_SCAN | Развертка автофокуса выполнена | 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 | Начать новую развертку Объектив движется |
Все штаты | Изменение режима | НЕАКТИВНЫЙ |
режим = AF_MODE_CONTINUOUS_VIDEO | |||
---|---|---|---|
Состояние | Причина трансформации | Новое состояние | Заметки |
НЕАКТИВНЫЙ | HAL инициирует новое сканирование | ПАССИВНОЕ_СКАНИРОВАНИЕ | Начать развертку АФ Объектив движется |
НЕАКТИВНЫЙ | AF_TRIGGER | NOT_FOCUSED_LOCKED | Запрос состояния AF Объектив заблокирован |
ПАССИВНОЕ_СКАНИРОВАНИЕ | HAL завершает текущее сканирование | PASSIVE_FOCUSED | Завершить сканирование АФ Объектив заблокирован |
ПАССИВНОЕ_СКАНИРОВАНИЕ | AF_TRIGGER | FOCUSED_LOCKED | Немедленная трансформация, если фокус хороший Объектив заблокирован |
ПАССИВНОЕ_СКАНИРОВАНИЕ | AF_TRIGGER | NOT_FOCUSED_LOCKED | Немедленная трансформация, если фокус плохой Объектив заблокирован |
ПАССИВНОЕ_СКАНИРОВАНИЕ | AF_CANCEL | НЕАКТИВНЫЙ | Сбросить положение объектива Объектив заблокирован |
PASSIVE_FOCUSED | HAL инициирует новое сканирование | ПАССИВНОЕ_СКАНИРОВАНИЕ | Начать сканирование АФ Объектив движется |
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 |
режим = AF_MODE_CONTINUOUS_PICTURE | |||
---|---|---|---|
Состояние | Причина трансформации | Новое состояние | Заметки |
НЕАКТИВНЫЙ | HAL инициирует новое сканирование | ПАССИВНОЕ_СКАНИРОВАНИЕ | Начать сканирование АФ Объектив движется |
НЕАКТИВНЫЙ | AF_TRIGGER | NOT_FOCUSED_LOCKED | Запрос состояния AF Объектив заблокирован |
ПАССИВНОЕ_СКАНИРОВАНИЕ | HAL завершает текущее сканирование | PASSIVE_FOCUSED | Завершить сканирование АФ Объектив заблокирован |
ПАССИВНОЕ_СКАНИРОВАНИЕ | AF_TRIGGER | FOCUSED_LOCKED | Возможная трансформация после хорошего фокуса Объектив заблокирован |
ПАССИВНОЕ_СКАНИРОВАНИЕ | AF_TRIGGER | NOT_FOCUSED_LOCKED | Возможная трансформация, если не удается сфокусироваться Объектив заблокирован |
ПАССИВНОЕ_СКАНИРОВАНИЕ | AF_CANCEL | НЕАКТИВНЫЙ | Сбросить положение объектива Объектив заблокирован |
PASSIVE_FOCUSED | HAL инициирует новое сканирование | ПАССИВНОЕ_СКАНИРОВАНИЕ | Начать сканирование АФ Объектив движется |
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 и AWB в основном идентичны. AE имеет дополнительные состояния FLASH_REQUIRED и PRECAPTURE. Таким образом, строки ниже, которые относятся к этим двум состояниям, следует игнорировать для конечного автомата AWB.
режим = AE_MODE_OFF / режим AWB не AUTO | |||
---|---|---|---|
Состояние | Причина трансформации | Новое состояние | Заметки |
НЕАКТИВНЫЙ | Автоэкспозиция/автоматический баланс отключены |
режим = AE_MODE_ON_* / AWB_MODE_AUTO | |||
---|---|---|---|
Состояние | Причина трансформации | Новое состояние | Заметки |
НЕАКТИВНЫЙ | HAL инициирует сканирование AE/AWB | ИДЕТ ПОИСК | |
НЕАКТИВНЫЙ | AE/AWB_LOCK вкл. | ЗАКРЫТО | Значения заблокированы |
ИДЕТ ПОИСК | HAL завершает сканирование AE/AWB | СХОДИЛСЯ | Хорошие значения, не меняющиеся |
ИДЕТ ПОИСК | HAL завершает сканирование AE | FLASH_REQUIRED | Сошлись, но слишком темно без вспышки |
ИДЕТ ПОИСК | AE/AWB_LOCK вкл. | ЗАКРЫТО | Значения заблокированы |
СХОДИЛСЯ | HAL инициирует сканирование AE/AWB | ИДЕТ ПОИСК | Значения заблокированы |
СХОДИЛСЯ | AE/AWB_LOCK вкл. | ЗАКРЫТО | Значения заблокированы |
FLASH_REQUIRED | HAL инициирует сканирование AE/AWB | ИДЕТ ПОИСК | Значения заблокированы |
FLASH_REQUIRED | AE/AWB_LOCK вкл. | ЗАКРЫТО | Значения заблокированы |
ЗАКРЫТО | AE/AWB_LOCK выкл. | ИДЕТ ПОИСК | Нехорошие значения после разблокировки |
ЗАКРЫТО | AE/AWB_LOCK выкл. | СХОДИЛСЯ | Значения хорошие после разблокировки |
ЗАКРЫТО | AE_LOCK выкл. | FLASH_REQUIRED | Экспозиция хорошая, но слишком темная |
Все состояния AE | PRECAPTURE_START | ПРЕДВАРИТЕЛЬНЫЙ ЗАХВАТ | Начать последовательность предварительного захвата |
ПРЕДВАРИТЕЛЬНЫЙ ЗАХВАТ | Последовательность выполнена, AE_LOCK выключен | СХОДИЛСЯ | Готов к высококачественной съемке |
ПРЕДВАРИТЕЛЬНЫЙ ЗАХВАТ | Последовательность выполнена, AE_LOCK включен | ЗАКРЫТО | Готов к высококачественной съемке |
Включение ручного управления
Несколько элементов управления также участвуют в настройке блоков устройства 3A, чтобы обеспечить возможность прямого управления приложениями.
Модель HAL для управления 3A заключается в том, что для каждого запроса HAL проверяет состояние полей управления 3A. Если включена какая-либо подпрограмма 3A, то эта подпрограмма переопределяет управляющие переменные, относящиеся к этой подпрограмме, и эти переопределяющие значения затем доступны в метаданных результата для этого захвата. Так, например, если в запросе включена автоматическая экспозиция, HAL должен перезаписать поля экспозиции, усиления и длительности кадра (и, возможно, поля флэш-памяти, в зависимости от режима AE) запроса. Список соответствующих элементов управления:
Имя элемента управления | Ед. изм | Заметки |
---|---|---|
android.control.mode | перечисление: ВЫКЛ, АВТО, USE_SCENE_MODE | Высокоуровневое управление 3А. Если установлено значение OFF, все управление 3A с помощью HAL отключено. Приложение должно само установить поля для параметров захвата. Если установлено значение AUTO, действуют отдельные элементы управления алгоритмом в android.control.*, например android.control.afMode. Если установлено значение USE_SCENE_MODE, отдельные элементы управления в android.control.* в основном отключены, а HAL реализует одну из настроек режима сцены (например, ACTION, SUNSET или PARTY) по своему усмотрению. |
android.control.afMode | перечисление | OFF означает ручное управление фокусировкой объектива через android.lens.focusDistance. |
android.control.aeMode | перечисление | ВЫКЛ означает ручное управление экспозицией/усилением/длительностью кадра через android.sensor.exposureTime/.sensitivity/.frameDuration. |
android.control.awbMode | перечисление | OFF означает ручное управление балансом белого. |