Камера HAL

Уровень абстракции оборудования камеры (HAL) Android связывает высокоуровневые 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 в зависимости от структуры кода.

Проверить камеру AIDL HAL

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

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

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

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

API моделирует подсистему камеры как конвейер, преобразующий входящие запросы на захват кадров в кадры в соотношении 1:1. Запросы содержат всю информацию о конфигурации захвата и обработки кадра. Сюда входят разрешение и формат пикселей, ручное управление сенсором, объективом и вспышкой, режимы работы 3A, управление обработкой 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).