Режимы 3A и переход между ними

На этой странице описаны режимы 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 : перечисление Если выбрано значение "Выкл.", баланс белого настраивается вручную.