Камера 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 и выше, производители устройств должны перейти от использования интерфейсов камеры HIDL к интерфейсам камеры AIDL.

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

Реализация AIDL-камеры HAL

Пример реализации AIDL-совместимого интерфейса для камер можно найти в файле hardware/google/camera/common/hal/aidl_service/ .

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

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

Проверка работоспособности HAL-камеры AIDL

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

Функции камеры HAL3

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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