Камера 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 в зависимости от структуры кода.

Проверить камеру 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).