На этой странице описаны режимы 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_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):
- В режиме ВЫКЛ каждый из отдельных режимов автофокусировки (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 для предварительной и неподвижной съемки. Используйте вспышку в конце предварительной съемки, чтобы уменьшить эффект «красных глаз» на конечном изображении. Пользовательское управление вспышкой отключено. |
AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY | Low Light Boost автоматически регулирует яркость потока предварительного просмотра в условиях низкой освещенности. Это может привести к усилению размытия изображения при движении и шума в условиях низкой освещенности. Производители устройств должны гарантировать, что частота кадров не опускается ниже 10 кадров в секунду. |
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 | перечисление | ВЫКЛ означает ручное управление балансом белого. |