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

Хотя фактические алгоритмы 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_CONTROL_AF_TRIGGER_CANCEL. В противном случае запись не будет существовать или ей будет присвоено значение ANDROID_CONTROL_AF_TRIGGER_IDLE. Каждый запрос с записью триггера, для которой установлено значение, отличное от IDLE, будет рассматриваться как независимое событие триггера.

На верхнем уровне 3A контролируется настройкой ANDROID_CONTROL_MODE. Он выбирает между режимом «нет 3A» (ANDROID_CONTROL_MODE_OFF), обычным автоматическим режимом (ANDROID_CONTROL_MODE_AUTO) и использованием настройки режима сцены (ANDROID_CONTROL_USE_SCENE_MODE):

  • В режиме OFF каждый из отдельных режимов автофокусировки (AF), автоматической экспозиции (AE) и автоматического баланса белого (AWB) фактически выключен, и ни один из элементов управления захватом не может быть отменен процедурами 3A.
  • В режиме АВТО режимы 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 AF. Любой выбор пользователя 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 Нет текущего триггера.
PRECAPTUR_TRIGGER_START Запустите последовательность предварительного захвата. HAL должен использовать последующие запросы для измерения хорошей экспозиции/баланса белого для предстоящего захвата с высоким разрешением.
Дополнительные записи метаданных
ANDROID_CONTROL_AE_LOCK Элемент управления для блокировки элементов управления AE к их текущим значениям.
ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION Управление регулировкой целевой точки яркости алгоритма AE.
ANDROID_CONTROL_AE_TARGET_FPS_RANGE Управление выбором целевого диапазона частоты кадров для алгоритма AE. Процедура AE не может изменить частоту кадров так, чтобы она вышла за эти пределы.
ANDROID_CONTROL_AE_REGIONS Управление выбором областей поля зрения, которые следует использовать для определения хороших уровней экспозиции. Это относится ко всем режимам автоэкспозиции, кроме ВЫКЛ.

Настройки автоматического баланса белого и записи результатов

Основные записи метаданных
ANDROID_CONTROL_AWB_MODE Управление выбором текущего режима баланса белого.
AWB_MODE_OFF Автоматический баланс белого отключен. Пользователь управляет цветовой матрицей.
AWB_MODE_AUTO Автоматический баланс белого включен; 3A управляет преобразованием цвета, возможно, используя более сложные преобразования, чем простая матрица.
AWB_MODE_INCANDESCENT Фиксированные настройки баланса белого, подходящие для внутреннего освещения лампами накаливания (вольфрамовые лампы), примерно 2700К.
AWB_MODE_FLUORESCENT Фиксированные настройки баланса белого, подходящие для флуоресцентного освещения, примерно 5000К.
AWB_MODE_WARM_FLUORESCENT Фиксированные настройки баланса белого, подходящие для флуоресцентного освещения, примерно 3000К.
AWB_MODE_DAYLIGHT Фиксированные настройки баланса белого, подходящие для дневного света, примерно 5500К.
AWB_MODE_CLOUDY_DAYLIGHT Фиксированные настройки баланса белого, подходящие для пасмурного дневного света, примерно 6500K.
AWB_MODE_TWILIGHT Фиксированные настройки баланса белого, подходящие для заката/восхода солнца, примерно 15 000K.
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 Управление выбором областей поля зрения, которые следует использовать для определения хорошего цветового баланса. Это относится только к режиму автоматического баланса белого.

Общие замечания по переходу к конечному автомату

Переключение между режимами AF, AE или AWB всегда сбрасывает состояние алгоритма на НЕАКТИВНОЕ. Аналогично, переключение между CONTROL_MODE или CONTROL_SCENE_MODE, если CONTROL_MODE == USE_SCENE_MODE, сбрасывает все состояния алгоритма в НЕАКТИВНОЕ.

Таблицы ниже приведены для каждого режима.

Конечные автоматы AF

режим = AF_MODE_OFF или AF_MODE_EDOF
Состояние Причина трансформации Новое состояние Примечания
НЕАКТИВНЫЙ АФ отключен
режим = AF_MODE_AUTO или AF_MODE_MACRO
Состояние Причина трансформации Новое состояние Примечания
НЕАКТИВНЫЙ AF_TRIGGER АКТИВ_СКАН

Запустить развертку автофокусировки

Объектив теперь движется

АКТИВ_СКАН Развертка АФ завершена FOCUSED_LOCKED

Если АФ успешен

Объектив теперь заблокирован

АКТИВ_СКАН Развертка АФ завершена NOT_FOCUSED_LOCKED

Если АФ успешен

Объектив теперь заблокирован

АКТИВ_СКАН AF_CANCEL НЕАКТИВНЫЙ

Отменить/сбросить автофокусировку

Объектив теперь заблокирован

FOCUSED_LOCKED AF_CANCEL НЕАКТИВНЫЙ Отменить/сбросить автофокусировку
FOCUSED_LOCKED AF_TRIGGER АКТИВ_СКАН

Начать новую очистку

Объектив теперь движется

NOT_FOCUSED_LOCKED AF_CANCEL НЕАКТИВНЫЙ Отменить/сбросить автофокусировку
NOT_FOCUSED_LOCKED AF_TRIGGER АКТИВ_СКАН

Начать новую очистку

Объектив теперь движется

Все штаты Изменение режима НЕАКТИВНЫЙ
режим = AF_MODE_CONTINUOUS_VIDEO
Состояние Причина трансформации Новое состояние Примечания
НЕАКТИВНЫЙ HAL инициирует новое сканирование ПАССИВНОЕ_СКАНИРОВАНИЕ

Запустить развертку автофокусировки

Объектив теперь движется

НЕАКТИВНЫЙ AF_TRIGGER NOT_FOCUSED_LOCKED

Запрос состояния AF

Объектив теперь заблокирован

ПАССИВНОЕ_СКАНИРОВАНИЕ HAL завершает текущее сканирование ПАССИВНЫЙ_ФОКУСИРОВАННЫЙ

Завершить сканирование AF

Объектив теперь заблокирован

ПАССИВНОЕ_СКАНИРОВАНИЕ AF_TRIGGER FOCUSED_LOCKED

Немедленная трансформация, если фокус хороший

Объектив теперь заблокирован

ПАССИВНОЕ_СКАНИРОВАНИЕ AF_TRIGGER NOT_FOCUSED_LOCKED

Немедленная трансформация, если фокус плохой

Объектив теперь заблокирован

ПАССИВНОЕ_СКАНИРОВАНИЕ AF_CANCEL НЕАКТИВНЫЙ

Сбросить положение объектива

Объектив теперь заблокирован

ПАССИВНЫЙ_ФОКУСИРОВАННЫЙ HAL инициирует новое сканирование ПАССИВНОЕ_СКАНИРОВАНИЕ

Запустить сканирование АФ

Объектив теперь движется

ПАССИВНЫЙ_ФОКУСИРОВАННЫЙ AF_TRIGGER FOCUSED_LOCKED

Немедленная трансформация, если фокус хороший

Объектив теперь заблокирован

ПАССИВНЫЙ_ФОКУСИРОВАННЫЙ 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 завершает текущее сканирование ПАССИВНЫЙ_ФОКУСИРОВАННЫЙ Завершить сканирование AF

Объектив теперь заблокирован

ПАССИВНОЕ_СКАНИРОВАНИЕ AF_TRIGGER FOCUSED_LOCKED

Окончательная трансформация после хорошего фокуса

Объектив теперь заблокирован

ПАССИВНОЕ_СКАНИРОВАНИЕ AF_TRIGGER NOT_FOCUSED_LOCKED

Возможная трансформация, если не можете сосредоточиться

Объектив теперь заблокирован

ПАССИВНОЕ_СКАНИРОВАНИЕ AF_CANCEL НЕАКТИВНЫЙ

Сбросить положение объектива

Объектив теперь заблокирован

ПАССИВНЫЙ_ФОКУСИРОВАННЫЙ HAL инициирует новое сканирование ПАССИВНОЕ_СКАНИРОВАНИЕ

Запустить сканирование АФ

Объектив теперь движется

ПАССИВНЫЙ_ФОКУСИРОВАННЫЙ AF_TRIGGER FOCUSED_LOCKED

Немедленная трансформация, если фокус хороший

Объектив теперь заблокирован

ПАССИВНЫЙ_ФОКУСИРОВАННЫЙ 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 не АВТО
Состояние Причина трансформации Новое состояние Примечания
НЕАКТИВНЫЙ AE/AWB отключены
режим = 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 PRECAPTUR_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 перечисление OFF означает ручное управление экспозицией/усилением/длительностью кадра через android.sensor.exposureTime/.sensitivity/.frameDuration.
android.control.awbMode перечисление ВЫКЛ означает ручное управление балансом белого.