Поддержка версий камеры

На этой странице подробно описаны различия между версиями HAL-файлов камер, API и связанных тестов Compatibility Test Suite (CTS) . Здесь также рассматриваются несколько архитектурных изменений, внесенных для повышения надежности и безопасности платформы камеры в Android 7.0, переход на Treble в Android 8.0 и обновления, которые должны быть внесены поставщиками для поддержки этих изменений в своих реализациях камер.

Терминология

На этой странице используются следующие термины:

API камеры1
Фреймворк камеры на уровне приложения на устройствах Android 4.4 и ниже, доступный через класс android.hardware.Camera .
API камеры2
Платформа камеры на уровне приложения на устройствах Android 5.0 и более поздних версиях, доступная через пакет android.hardware.camera2 .
Камера HAL
Уровень модуля камеры, реализуемый поставщиками SoC. Публичные фреймворки уровня приложения построены поверх HAL-уровня камеры.
Камера HAL3.1
Версия камеры устройства HAL выпущена с Android 4.4.
Камера HAL3.2
Версия камеры устройства HAL выпущена с Android 5.0.
Камера API1 CTS
Набор тестов CTS камеры, работающих поверх Camera API1.
Камера API2 CTS
Дополнительный набор тестов CTS камеры, которые работают поверх Camera API2.
Высокие частоты
Отделяет реализацию поставщика (специфическое для устройств низкоуровневое программное обеспечение, написанное производителями кремниевых чипов) от платформы ОС Android с помощью нового интерфейса поставщика.
ХИДЛ
Язык определения интерфейса HAL , представленный в Treble и используемый для указания интерфейса между HAL и его пользователями.
СДС
Вместе с Treble представлен тестовый набор для поставщиков .

API камеры

Android включает в себя следующие API камеры.

API камеры1

В Android 5.0 поддержка Camera API1 прекращена, и её постепенное прекращение продолжается, поскольку разработка новых платформ сосредоточена на Camera API2. Однако период постепенного прекращения поддержки будет длительным, и версии Android ещё некоторое время будут поддерживать приложения Camera API1. В частности, сохраняется поддержка:

  • Интерфейсы Camera API1 для приложений. Приложения Camera, созданные на основе Camera API1, должны работать так же, как и на устройствах с более ранними версиями Android.
  • Версии Camera HAL. Включает поддержку Camera HAL1.0.

API камеры2

Фреймворк Camera API2 предоставляет приложению низкоуровневое управление камерой, включая эффективные потоковые и пакетные потоки без копирования, а также покадровое управление экспозицией, усилением, усилением баланса белого, преобразованием цветов, шумоподавлением, повышением резкости и другими функциями. Подробнее см. в видеообзоре Google I/O .

В Android 5.0 и более поздних версиях есть Camera API2; однако устройства под управлением Android 5.0 и более поздних версий могут поддерживать не все функции Camera API2. Свойство android.info.supportedHardwareLevel , к которому приложения могут обращаться через интерфейсы Camera API2, сообщает об одном из следующих уровней поддержки:

  • LEGACY : Эти устройства предоставляют приложениям через интерфейсы Camera API2 возможности, примерно те же, что и через интерфейсы Camera API1. Код устаревших фреймворков концептуально преобразует вызовы Camera API2 в вызовы Camera API1; устаревшие устройства не поддерживают функции Camera API2, такие как покадровое управление.
  • LIMITED : эти устройства поддерживают некоторые возможности Camera API2 (но не все) и должны использовать Camera HAL 3.2 или выше.
  • FULL : Эти устройства поддерживают все основные возможности Camera API2 и должны использовать Camera HAL 3.2 или выше и Android 5.0 или выше.
  • LEVEL_3 : Эти устройства поддерживают повторную обработку YUV и захват изображений RAW, а также дополнительные конфигурации выходного потока.
  • EXTERNAL : Эти устройства аналогичны устройствам LIMITED , за некоторыми исключениями; например, некоторые данные с сенсора или объектива могут не передаваться или частота кадров может быть менее стабильной. Этот уровень используется для внешних камер, таких как USB-веб-камеры.

Отдельные возможности предоставляются через свойство android.request.availableCapabilities в интерфейсах Camera API2. Для устройств FULL требуются, помимо прочего, возможности MANUAL_SENSOR и MANUAL_POST_PROCESSING . Возможность RAW необязательна даже для устройств FULL . Устройства LIMITED могут предоставлять любой набор этих возможностей, включая отсутствие таковых. Однако возможность BACKWARD_COMPATIBLE должна быть всегда определена.

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

  • android.hardware.camera.hardware_level.full
  • android.hardware.camera.capability.raw
  • android.hardware.camera.capability.manual_sensor
  • android.hardware.camera.capability.manual_post_processing

Требования CTS

Устройства под управлением Android 5.0 и выше должны пройти тесты камеры Camera API1 CTS, Camera API2 CTS и CTS Verifier.

Устройства, не поддерживающие реализацию Camera HAL3.2 и не поддерживающие все интерфейсы Camera API2, всё равно должны пройти тесты Camera API2 CTS. Однако устройство работает в режиме Camera API2 LEGACY (в котором вызовы Camera API2 концептуально сопоставлены с вызовами Camera API1), поэтому любые тесты Camera API2 CTS, связанные с функциями или возможностями, выходящими за рамки Camera API1, автоматически пропускаются.

На устаревших устройствах тесты Camera API2 CTS используют существующие общедоступные интерфейсы и возможности Camera API1 без каких-либо новых требований. Выявленные ошибки (и вызывающие сбой Camera API2 CTS) уже присутствуют в существующем HAL-уровне камеры устройства и, следовательно, будут обнаружены существующими приложениями Camera API1. Мы не ожидаем большого количества подобных ошибок (однако для успешного прохождения тестов Camera API2 CTS любые такие ошибки должны быть исправлены).

Требования СУДС

Устройства под управлением Android 8.0 и выше с привязанными реализациями HAL должны пройти тесты Camera VTS .

Укрепление каркаса камеры

Для повышения безопасности медиа- и фреймворка камеры в Android 7.0 служба камеры вынесена за пределы медиасервера. Начиная с Android 8.0, каждый привязанный HAL-компонент камеры выполняется в отдельном процессе от службы камеры. Поставщикам может потребоваться внести изменения в HAL-компонент камеры в зависимости от используемых версий API и HAL. В следующих разделах подробно описаны архитектурные изменения в AP1 и AP2 для HAL1 и HAL3, а также общие требования.

Архитектурные изменения для API1

При записи видео через API1 может предполагаться, что камера и видеокодер находятся в одном процессе. При использовании API1:

  • HAL3, где служба камеры использует BufferQueue для передачи буферов между процессами, обновление поставщика не требуется.

    Камера и медиа-стек Android 7.0 в API1 на HAL3

    Рисунок 1. Камера Android 7.0 и медиа-стек в API1 на HAL3

  • HAL1, который поддерживает передачу метаданных в видеобуферах, поставщикам необходимо обновить HAL для использования kMetadataBufferTypeNativeHandleSource . ( kMetadataBufferTypeCameraSource больше не поддерживается в Android 7.0.)

    Камера и медиа-стек Android 7.0 в API1 на HAL1

    Рисунок 2. Камера Android 7.0 и медиа-стек в API1 на HAL1

Архитектурные изменения для API2

Для API2 на HAL1 или HAL3 BufferQueue передаёт буферы, чтобы эти пути продолжали работать. Архитектура Android 7.0 для API2 на:

  • HAL1 не затронут переносом сервиса камеры, и обновление поставщика не требуется.
  • HAL3 затронут , но обновление поставщика не требуется:

    Камера Android 7.0 и медиа-стек в API2 на HAL3

    Рисунок 3. Камера Android 7.0 и медиа-стек в API2 на HAL3

Дополнительные требования

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

  • Общие сведения. Устройствам требуется дополнительная пропускная способность из-за IPC, что может повлиять на сценарии использования камеры, требующие определённого времени, например, при высокоскоростной видеозаписи. Поставщики могут оценить фактическое влияние, запустив android.hardware.camera2.cts.PerformanceTest и приложение Google Camera для высокоскоростной видеозаписи 120/240 кадров в секунду. Устройствам также требуется небольшой объём дополнительной оперативной памяти для реализации нового процесса.
  • Передача метаданных в видеобуферах ( только HAL1 ). Если HAL1 хранит метаданные вместо реальных данных кадров YUV в видеобуферах, HAL должен использовать kMetadataBufferTypeNativeHandleSource в качестве типа буфера метаданных и передавать VideoNativeHandleMetadata в видеобуферах. ( kMetadataBufferTypeCameraSource больше не поддерживается в Android 7.0.) Благодаря VideoNativeHandleMetadata фреймворки камеры и мультимедиа могут передавать видеобуферы между процессами, корректно сериализуя и десериализуя собственные дескрипторы.
  • Адрес дескриптора буфера не всегда хранит один и тот же буфер ( только HAL3 ). Для каждого запроса захвата HAL3 получает адреса дескрипторов буферов. HAL не может использовать адреса для идентификации буферов, поскольку адреса могут содержать другой дескриптор буфера после того, как HAL вернёт буфер. Необходимо обновить HAL, чтобы использовать дескрипторы буферов для идентификации буферов. Например, HAL получает адрес дескриптора буфера A, в котором хранится дескриптор буфера A. После того, как HAL вернёт дескриптор буфера A, адрес дескриптора буфера A может содержать дескриптор буфера B при следующем его получении HAL.
  • Обновите политики SELinux для cameraserver. Если политики SELinux, специфичные для устройства, предоставляют mediaserver разрешения на запуск камеры, необходимо обновить политики SELinux, предоставив cameraserver соответствующие разрешения. Мы не рекомендуем дублировать политики SELinux mediaserver для cameraserver (поскольку mediaserver и cameraserver, как правило, требуют разных ресурсов в системе). Cameraserver должен иметь только те разрешения, которые необходимы для работы с камерой, а все ненужные разрешения, связанные с камерой, в mediaserver следует удалить.
  • Разделение между Camera HAL и cameraserver. В Android 8.0 и более поздних версиях дополнительно разделяется привязанный Camera HAL в процессе, отличном от cameraserver. IPC проходит через интерфейсы , определяемые HIDL .

Проверка

Для всех устройств с камерой под управлением Android 7.0 проверьте реализацию, запустив Android 7.0 CTS. Хотя в Android 7.0 нет новых тестов CTS, проверяющих изменения в работе сервиса камеры, существующие тесты CTS не пройдут, если не установлены указанные выше обновления.

Для всех устройств, оснащенных камерой и работающих под управлением Android 8.0 и выше, проверьте реализацию поставщика, запустив VTS.

История версий камеры HAL

Список тестов, доступных для оценки HAL камеры Android, см. в Контрольном списке тестирования HAL камеры .

Андроид 10

В Android 10 представлены следующие обновления.

API камеры

Камера HAL

В Android 10 обновлены следующие версии Camera HAL.

3.5

ICameraDevice

  • getPhysicalCameraCharacteristics : Статическая информация о камере для идентификатора физической камеры, соответствующего логическому устройству камеры. См. раздел Поддержка нескольких камер .
  • isStreamCombinationSupported : этот метод поддерживает общедоступный API, который помогает клиентам запрашивать информацию о поддержке конфигурации сеанса. См. раздел API для запроса комбинаций потоков .

ICameraDeviceSession

  • isReconfigurationNeeded : метод, сообщающий фреймворку камеры, требуется ли полная перенастройка потока для возможных новых значений параметров сеанса. Это помогает избежать ненужных задержек перенастройки камеры. См. раздел Запрос на перенастройку сеанса .
  • API управления буферами HAL : эти API позволяют HAL камеры запрашивать буферы из фреймворка камеры только при необходимости вместо того, чтобы связывать каждый запрос захвата с соответствующими буферами по всему конвейеру камеры, что приводит к потенциально значительной экономии памяти.
    • signalStreamFlush : подает сигнал HAL о том, что служба камеры собирается выполнить configureStreams_3_5 и что HAL должен вернуть все буферы назначенных потоков.
    • configureStreams_3_5 : аналогично ICameraDevice3.4.configureStreams , но дополнительно предусмотрен счетчик streamConfigCounter для проверки наличия состояния гонки между вызовами configureStreams_3_5 и signalStreamFlush .

Обновления ICameraDeviceCallback :

  • requestStreamBuffers : синхронный обратный вызов, который HAL камеры вызывает для запроса буферов у сервера камеры. См. requestStreamBuffers .
  • returnStreamBuffers : синхронный обратный вызов HAL камеры для возврата выходных буферов на сервер камеры. См. returnStreamBuffers .

3.4

В метаданные камеры в Android 10 добавлены следующие ключи.

  • Форматы изображений
    • ANDROID_SCALER_AVAILABLE_FORMATS_RAW10
    • ANDROID_SCALER_AVAILABLE_FORMATS_RAW12
    • ANDROID_SCALER_AVAILABLE_FORMATS_Y8
  • Теги метаданных камеры
    • ANDROID_REQUEST_CHARACTERISTIC_KEYS_NEEDING_PERMISSION
    • ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS
    • ANDROID_SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAP
    • ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION
    • ANDROID_DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONS
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS
    • ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
    • ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS
    • ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS
    • ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS
    • ANDROID_HEIC_INFO_SUPPORTED
    • ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
  • Возможности
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
  • Значения ключа ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
    • ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO
    • ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR
  • Доступные конфигурации динамического потока глубины
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_OUTPUT
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_INPUT
  • Доступные конфигурации потока HEIC
    • ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_OUTPUT
    • ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_INPUT

Модуль камеры

В Android 10 обновлены следующие версии модулей камеры.

2.5

  • Добавляет метод notifyDeviceStateChange для устройств, чтобы уведомлять HAL камеры, когда физические изменения, такие как складывание, влияют на камеру и маршрутизацию.

2.4

  • Устройства, запускаемые с API уровня 29 или выше, ДОЛЖНЫ сообщать true для isTorchModeSupported .

Андроид 9

В версии Android 9 представлены следующие обновления API2 и интерфейса HAL камеры.

API камеры

  • Представляет API для работы с несколькими камерами для лучшей поддержки устройств с несколькими камерами, направленными в одном направлении, что позволяет использовать такие функции, как эффект боке и плавное масштабирование. Это позволяет приложениям просматривать изображения с нескольких камер на устройстве как единое логическое устройство (логическую камеру). Запросы на съёмку также можно отправлять на отдельные камеры, входящие в одну логическую камеру. См. раздел «Поддержка нескольких камер» .
  • Вводит параметры сеанса. Параметры сеанса — это подмножество доступных параметров захвата, изменение которых может привести к значительным задержкам обработки. Эти затраты можно снизить, если клиенты будут передавать свои начальные значения во время инициализации сеанса захвата. См. Параметры сеанса .
  • Добавляет ключи данных оптической стабилизации (OIS) для стабилизации и эффектов на уровне приложения. См. STATISTICS_OIS_SAMPLES .
  • Добавляет поддержку внешней вспышки. См. CONTROL_AE_MODE_ON_EXTERNAL_FLASH .
  • Добавляет намерение отслеживания движения в CAPTURE_INTENT . См. CONTROL_CAPTURE_INTENT_MOTION_TRACKING .
  • Отменяет поддержку LENS_RADIAL_DISTORTION и добавляет вместо него LENS_DISTORTION .
  • Добавляет режимы коррекции искажений в CaptureRequest . См. DISTORTION_CORRECTION_MODE .
  • Добавляет поддержку внешних USB/UVC-камер на поддерживаемых устройствах. См. INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL .

Камера HAL

3.4

Обновления ICameraDeviceSession

  • configureStreams_3_4 : добавляет поддержку sessionParameters и логических камер.
  • processCaptureRequest_3_4 : Добавляет поддержку включения идентификаторов физических камер в структуру потока.

Обновления ICameraDeviceCallback

  • processCaptureResult_3_4 : Добавляет метаданные физической камеры в результаты захвата.

3.3

В метаданные камеры в Android 9 добавлены следующие ключи.

  • Возможности
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME
  • Теги метаданных камеры
    • ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
    • ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
    • ANDROID_DISTORTION_CORRECTION_AVAILABLE_MODES
    • ANDROID_LENS_POSE_REFERENCE
    • ANDROID_LENS_DISTORTION
    • ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
    • ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
    • ANDROID_STATISTICS_OIS_DATA_MODE
    • ANDROID_STATISTICS_OIS_TIMESTAMPS
    • ANDROID_STATISTICS_OIS_X_SHIFTS
    • ANDROID_STATISTICS_OIS_Y_SHIFTS

Андроид 8.0

В версии Android 8.0 представлен Treble. Для использования Treble необходимо интегрировать реализации HAL-камеры от поставщика. В Android 8.0 также реализованы следующие ключевые улучшения сервиса «Камера»:

  • Общие поверхности: разрешить нескольким поверхностям использовать одну и ту же OutputConfiguration
  • Системный API для пользовательских режимов камеры
  • onCaptureQueueEmpty

Более подробную информацию об этих функциях смотрите в разделах ниже.

Общие поверхности

Эта функция позволяет использовать только один набор буферов для управления двумя выходами, такими как предварительный просмотр и кодирование видео, что снижает энергопотребление и потребление памяти. Для поддержки этой функции производители устройств должны гарантировать, что их реализации HAL для камер и gralloc HAL могут создавать буферы gralloc, используемые несколькими различными потребителями (например, аппаратным компоновщиком/графическим процессором и видеокодером), а не только одним потребителем. Служба камеры передаёт флаги использования потребителям в HAL для камер и HAL для gralloc; им необходимо либо выделить правильные типы буферов, либо HAL для камер должен возвращать ошибку о том, что данная комбинация потребителей не поддерживается.

Дополнительные сведения см. в документации разработчика enableSurfaceSharing .

Системный API для пользовательских режимов камеры

API общедоступной камеры определяет два режима работы: обычный и ограниченный высокоскоростной режим записи. Они имеют довольно разную семантику; например, высокоскоростной режим ограничен максимум двумя определёнными выходами одновременно. Различные OEM-производители выразили заинтересованность в определении других пользовательских режимов для аппаратно-зависимых функций. На самом деле режим — это просто целое число, передаваемое в configure_streams . См.: hardware/camera/device/3.2/ICameraDeviceSession#configurestreams .

Эта функция включает вызов системного API, который приложения OEM-камер могут использовать для включения настраиваемого режима. Эти режимы должны начинаться с целого значения 0x8000, чтобы избежать конфликтов с будущими режимами, добавленными в общедоступный API.

Чтобы поддержать эту функцию, OEM-производителям достаточно просто добавить новый режим в свой HAL, который будет запускаться этим целым числом, передаваемым в HAL в configure_streams, а затем настроить свое пользовательское приложение камеры на использование системного API.

Имя метода — android.hardware.camera2.CameraDevice#createCustomCaptureSession . См.: frameworks/base/core/java/android/hardware/camera2/CameraDevice .

onCaptureQueueEmpty

Цель этого API — сократить задержку изменений элементов управления, таких как масштабирование, поддерживая очередь запросов максимально пустой. onCaptureQueueEmpty не требует работы HAL; это исключительно дополнение на стороне фреймворка. Приложениям, которые хотят воспользоваться этим, необходимо добавить прослушиватель этого обратного вызова и соответствующим образом отреагировать. Обычно это осуществляется путём отправки ещё одного запроса на захват изображения на камеру.

Интерфейс камеры HIDL

Интерфейс Camera HIDL представляет собой полностью переработанный интерфейс Camera HAL, использующий стабильные API, определённые в HIDL. Все функции и возможности камеры, представленные в последних устаревших версиях 3.4 и 2.4 (для модуля камеры), также являются частью определений HIDL.

3.4

Незначительные дополнения к поддерживаемым метаданным и изменения в поддержке data_space:

  • Добавьте статические метаданные ANDROID_SENSOR_OPAQUE_RAW_SIZE как обязательные, если поддерживается формат RAW_OPAQUE .
  • Добавьте статические метаданные ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE как обязательные, если поддерживается какой-либо формат RAW.
  • Измените определение поля camera3_stream_t data_space на более гибкое, используя определение версии 0 кодирования пространства данных.
  • Общие дополнения к метаданным, доступные для использования в HALv3.2 или более поздних версиях:
    • ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_3
    • ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST
    • ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
    • ANDROID_SENSOR_DYNAMIC_BLACK_LEVEL
    • ANDROID_SENSOR_DYNAMIC_WHITE_LEVEL
    • ANDROID_SENSOR_OPAQUE_RAW_SIZE
    • ANDROID_SENSOR_OPTICAL_BLACK_REGIONS

3.3

Небольшая доработка HAL с расширенными возможностями:

  • Обновления API повторной обработки OPAQUE и YUV.
  • Базовая поддержка выходных буферов глубины.
  • Добавление поля data_space в camera3_stream_t .
  • Добавление поля вращения в camera3_stream_t .
  • Добавление режима работы конфигурации потока camera3 в camera3_stream_configuration_t .

3.2

Небольшая доработка HAL с расширенными возможностями:

  • Устаревание get_metadata_vendor_tag_ops . Вместо этого используйте get_vendor_tag_ops в camera_common.h .
  • Устаревание register_stream_buffers . Все буферы gralloc, предоставляемые фреймворком для HAL в process_capture_request , могут быть обновлены в любой момент.
  • Добавить поддержку частичных результатов. process_capture_result может вызываться несколько раз с подмножеством доступных результатов, прежде чем станет доступен полный результат.
  • Добавьте шаблон вручную в camera3_request_template . Приложения могут использовать этот шаблон для непосредственного управления настройками съёмки.
  • Переработайте спецификации двунаправленного и входного потока.
  • Измените путь возврата входного буфера. Буфер возвращается в process_capture_result вместо process_capture_request .

3.1

Небольшая доработка HAL с расширенными возможностями:

  • configure_streams передает флаги использования потребителями в HAL.
  • вызов flush для максимально быстрой отмены всех текущих запросов/буферов.

3.0

Первая версия HAL с расширенными возможностями:

  • Значительное изменение версии, поскольку ABI полностью изменился. Требования к аппаратным возможностям и операционной модели по сравнению с версией 2.0 остались без изменений.
  • Переработанные интерфейсы входных запросов и очереди потоков: фреймворк вызывает HAL, когда буферы следующего запроса и потока уже извлечены из очереди. Включена поддержка фреймворка синхронизации, необходимая для эффективной реализации.
  • Триггеры перенесены в запросы, большинство уведомлений — в результаты.
  • Объединил все обратные вызовы фреймворка в одну структуру, а все методы настройки — в один вызов initialize() .
  • Конфигурация потока преобразована в один вызов для упрощения управления потоками. Двунаправленные потоки заменяют конструкцию STREAM_FROM_STREAM .
  • Семантика ограниченного режима для старых/ограниченных аппаратных устройств.

2.0

Первоначальный выпуск HAL с расширенными возможностями (Android 4.2) [camera2.h]:

  • Достаточно для реализации существующего API android.hardware.Camera .
  • Позволяет использовать очередь ZSL на уровне обслуживания камеры.
  • Не тестировалось на наличие новых функций, таких как ручное управление захватом, захват RAW по алгоритму Bayer, повторная обработка данных RAW и т. д.

1.0

Первоначальный HAL камеры Android (Android 4.0) [camera.h]:

  • Конвертировано из слоя абстракции C++ CameraHardwareInterface.
  • Поддерживает API android.hardware.Camera .

История версий модуля камеры

В этом разделе содержится информация о версии аппаратного модуля камеры на основе camera_module_t.common.module_api_version . Две старшие шестнадцатеричные цифры обозначают основную версию, а две младшие — дополнительную.

2.4

В этой версии модуля камеры реализованы следующие изменения API:

  1. Поддержка режима Torch. Фреймворк может включить режим Torch для любой камеры со вспышкой, не открывая её. Камера имеет более высокий приоритет доступа к вспышке, чем модуль камеры; открытие камеры выключает Torch, если он был включён через интерфейс модуля. При возникновении конфликтов ресурсов, например, при вызове функции open() для открытия камеры, модуль HAL камеры должен уведомить фреймворк через обратный вызов состояния режима Torch о том, что режим Torch выключен.
  2. Поддержка внешних камер (например, USB-камер с возможностью горячего подключения). В обновлениях API указано, что статическая информация о камере доступна только при подключении и готовности к использованию внешних камер с возможностью горячего подключения. Вызовы для получения статической информации недействительны, если состояние камеры не равно CAMERA_DEVICE_STATUS_PRESENT . Для управления списком доступных внешних камер фреймворк использует исключительно обратные вызовы изменения состояния устройства.
  3. Подсказки по арбитражу камер. Добавляет поддержку явного указания количества камер, которые могут быть открыты и использованы одновременно. Для указания допустимых комбинаций устройств поля resource_cost и conflicting_devices всегда должны быть заданы в структуре camera_info , возвращаемой вызовом get_camera_info .
  4. Метод инициализации модуля. Вызывается службой камеры после загрузки модуля HAL для однократной инициализации HAL. Вызывается до вызова любых других методов модуля.

2.3

В этой версии модуля камеры добавлена ​​поддержка открытых устаревших устройств HAL. Фреймворк может использовать её для открытия устройства камеры как устройства HAL более низкой версии, если одно и то же устройство поддерживает несколько версий API. Стандартный вызов открытия аппаратного модуля ( common.methods->open ) продолжает открывать устройство камеры с последней поддерживаемой версией, которая также указана в camera_info_t.device_version .

2.2

В этой версии модуля камеры добавлена ​​поддержка тегов поставщика из модуля и отменены старые функции vendor_tag_query_ops , которые ранее были доступны только при открытом устройстве.

2.1

Эта версия модуля камеры добавляет поддержку асинхронных обратных вызовов из модуля HAL камеры, который используется для уведомления фреймворка об изменениях состояния модуля камеры. Модули, предоставляющие допустимый метод set_callbacks() должны сообщать как минимум этот номер версии.

2.0

Модули камер, сообщающие этот номер версии, реализуют вторую версию интерфейса HAL для модулей камер. Устройства камер, открываемые через этот модуль, могут поддерживать интерфейс HAL как версии 1.0, так и версии 2.0. Поле device_version в camera_info всегда действительно; поле static_camera_characteristics в camera_info действительно, если поле device_version имеет значение 2.0 или выше.

1.0

Модули камеры, сообщающие эти номера версий, реализуют исходный интерфейс HAL для модуля камеры. Все устройства камеры, открываемые через этот модуль, поддерживают только версию 1 HAL для устройства камеры. Поля device_version и static_camera_characteristics в camera_info недействительны. Этот модуль и его устройства поддерживают только API android.hardware.Camera .