Камера HAL

Уровень абстракции оборудования камеры Android (HAL) соединяет API-интерфейсы платформы камеры более высокого уровня в android.hardware.camera2 с базовым драйвером камеры и оборудованием. Начиная с Android 13, при разработке интерфейса HAL камеры используется AIDL . В Android 8.0 появился Treble , переключивший API камеры HAL на стабильный интерфейс, определяемый языком описания интерфейса HAL (HIDL). Если вы ранее разработали модуль HAL камеры и драйвер для Android 7.0 и более ранних версий, имейте в виду значительные изменения в конвейере камеры.

Камера AIDL HAL

Для устройств под управлением Android 13 или более поздней версии платформа камеры включает поддержку HAL камеры AIDL. Платформа камеры также поддерживает HAL камеры HIDL, однако функции камеры, добавленные в Android 13 или более поздней версии, доступны только через интерфейсы HAL камеры AIDL. Чтобы реализовать такие функции на устройствах, обновляющихся до Android 13 или более поздней версии, производители устройств должны перенести свой процесс HAL с использования интерфейсов камеры HIDL на интерфейсы камеры AIDL.

Чтобы узнать о преимуществах AIDL, см. AIDL для HAL .

Внедрить камеру AIDL HAL

Эталонную реализацию HAL камеры AIDL см. в hardware/google/camera/common/hal/aidl_service/ .

Спецификации HAL камеры AIDL находятся в следующих местах:

Для устройств, переходящих на AIDL, производителям устройств может потребоваться изменить политику Android SELinux (sepolicy) и файлы RC в зависимости от структуры кода.

Проверка HAL камеры AIDL

Чтобы протестировать реализацию HAL камеры AIDL, убедитесь, что устройство прошло все тесты CTS и VTS. В Android 13 представлен тест AIDL VTS, VtsAidlHalCameraProvider_TargetTest.cpp .

Возможности камеры HAL3

Целью редизайна API камеры Android является существенное расширение возможностей приложений по управлению подсистемой камеры на устройствах Android, а также реорганизация API, чтобы сделать его более эффективным и удобным в обслуживании. Дополнительный контроль упрощает создание высококачественных приложений для камер на устройствах Android, которые могут надежно работать с несколькими продуктами, при этом по возможности используя алгоритмы, специфичные для устройства, для максимизации качества и производительности.

Версия 3 подсистемы камеры структурирует режимы работы в единое унифицированное представление, с помощью которого можно реализовать любой из предыдущих режимов, а также несколько других, например серийный режим. Это приводит к лучшему пользовательскому контролю над фокусировкой и экспозицией, а также к большему количеству постобработки, такой как шумоподавление, контрастность и резкость. Кроме того, такое упрощенное представление облегчает разработчикам приложений использование различных функций камеры.

API моделирует подсистему камеры как конвейер, который преобразует входящие запросы на захват кадров в кадры в соотношении 1:1. Запросы инкапсулируют всю информацию о конфигурации захвата и обработки кадра. Сюда входят разрешение и формат пикселей; ручной сенсор, управление объективом и вспышкой; режимы работы 3А; Управление обработкой RAW->YUV; формирование статистики; и так далее.

Проще говоря, платформа приложения запрашивает кадр у подсистемы камеры, а подсистема камеры возвращает результаты в выходной поток. Кроме того, для каждого набора результатов генерируются метаданные, содержащие такую ​​информацию, как цветовые пространства и затенение линз. Вы можете думать о камере версии 3 как о конвейере для одностороннего потока камеры версии 1. Он преобразует каждый запрос захвата в одно изображение, снятое датчиком, которое обрабатывается в:

  • Объект результата с метаданными о захвате.
  • От одного до N буферов данных изображения, каждый на своей целевой поверхности.

Набор возможных выходных поверхностей предварительно настроен:

  • Каждая поверхность является местом назначения для потока буферов изображений фиксированного разрешения.
  • Только небольшое количество поверхностей можно настроить как выходы одновременно (~3).

Запрос содержит все желаемые настройки захвата и список поверхностей вывода, в которые можно помещать буферы изображений для этого запроса (из общего сконфигурированного набора). Запрос может быть однократным (с помощью capture() ) или повторяться бесконечно (с помощью setRepeatingRequest() ). Захваты имеют приоритет над повторяющимися запросами.

Модель данных камеры

Рисунок 1. Модель работы ядра камеры

Обзор камеры HAL1

Версия 1 подсистемы камеры была спроектирована как «черный ящик» с высокоуровневым управлением и следующими тремя режимами работы:

  • Предварительный просмотр
  • Видеозапись
  • Все еще снимать

Каждый режим имеет немного разные и частично совпадающие возможности. Это затрудняло реализацию новых функций, таких как пакетный режим, который находится между двумя режимами работы.

Блок-схема камеры

Рисунок 2. Компоненты камеры

Android 7.0 продолжает поддерживать камеру HAL1, поскольку многие устройства по-прежнему используют ее. Кроме того, служба камеры Android поддерживает реализацию обоих HAL (1 и 3), что полезно, если вы хотите поддерживать менее функциональную фронтальную камеру с камерой HAL1 и более совершенную заднюю камеру с камерой HAL3.

Существует модуль HAL для одной камеры (с собственным номером версии ), в котором перечислены несколько независимых устройств камеры, каждое из которых имеет свой номер версии. Для поддержки устройств 2 или новее требуется модуль камеры 2 или новее, и такие модули камеры могут иметь разные версии устройств камеры (это то, что мы имеем в виду, когда говорим, что Android поддерживает реализацию обоих HAL).