3A Режимы и переход состояний

В то время как фактические алгоритмы 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 означает ручное управление балансом белого.