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

Подробности этой страницы версия различия в ГАЛС камеры, API, и связанных с ними Совместимость 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 с помощью нового интерфейса поставщика.
HIDL
Язык определения интерфейса HAL введен с Treble и используется для определения интерфейса между HAL и его пользователями.
СУДС
Тест Vendor люкс введен вместе с Treble.

API камеры

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

API камеры1

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

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

API камеры2

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

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

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

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

Поддерживаемый аппаратный уровень устройства, а также определенные возможности Camera API2, которые оно поддерживает, доступны в виде следующих флагов функций, позволяющих фильтровать приложения камеры Camera 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 режиме (в котором API2 камеры вызовы концептуально отображенные API1 камер вызовов) так что любая камера API2 CTS тесты , связанные с функциями или возможностей за пределами API1 камеры автоматически пропускаются.

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

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

Устройства , работающие Android 8.0 и выше с binderized реализации HAL должны пройти камеры испытания VTS .

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

Чтобы усилить безопасность среды передачи данных и камеры, Android 7.0 перемещает службу камеры из mediaserver. Начиная с 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 не влияет на cameraservice ход, а не обновление поставщика не требуется.
  • HAL3 влияет, но не обновление поставщика не требуется:

    Камера и мультимедийный стек Android 7.0 в API2 на HAL3

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

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

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

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

Проверка

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

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

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

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

Android 10

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

API камеры

  • Улучшения работы с несколькими камерами, которые позволяют использовать физические камеры по отдельности или через соответствующие логические камеры, скрывая идентификаторы физических камер. См Multi-Camera Support .
  • Возможность проверить, поддерживается ли конкретная конфигурация сеанса, без дополнительных затрат производительности на создание нового сеанса. См CameraDevice .
  • Возможность получения рекомендуемых конфигураций потоков для конкретного варианта использования, чтобы сделать клиента более энергоэффективным и производительным. См getRecommendedStreamConfigurationMap .
  • Поддержка для глубины формата изображения JPEG . Для получения более подробной информации см спецификация динамической глубины .
  • Поддержка для формата HEIC изображения . См HEIF визуализации .
  • Улучшения конфиденциальности. Некоторые ключи необходимы для клиента , чтобы иметь CAMERA разрешения , прежде чем они могут быть извлечены из CameraCharacteristics . См getKeysNeedingPermission .

Камера HAL

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

3.5

ICameraDevice

  • getPhysicalCameraCharacteristics : статическая информация камеры для физической камеры ID каркасной логического устройства камеры. См Multi-Camera Support .
  • isStreamCombinationSupported : Этот метод поддерживает публичный API , который помогает клиентам запросу , если конфигурация сеанса поддерживается. См API для комбинаций потоков запросов .

ICameraDeviceSession

  • isReconfigurationNeeded Метод который говорит рамку камеры ли необходима полный поток реконфигурация возможных новых значений параметров сеанса. Это помогает избежать ненужных задержек при перенастройке камеры. См Session реконфигурации запрос .
  • HAL API для управления буфером : Это 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 .

Android 9

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

API камеры

  • Представляет многокамерный API для лучшей поддержки устройств с несколькими камерами, обращенными в одном направлении, включая такие функции, как боке и плавное масштабирование. Это позволяет приложениям просматривать несколько камер на устройстве как одну логическую единицу (логическую камеру). Запросы на захват также могут быть отправлены на отдельные устройства камеры, объединенные одной логической камерой. См Multi-Camera Support .
  • Вводит параметры сеанса. Параметры сеанса - это подмножество доступных параметров захвата, которые могут вызвать серьезные задержки обработки при изменении. Эти затраты можно снизить, если клиенты передают свои начальные значения во время инициализации сеанса захвата. См Session параметров .
  • Добавляет ключи данных оптической стабилизации (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

Android 8.0

В выпуске Android 8.0 представлены Treble. С высокими частотами, поставщик реализация камеры HAL должна быть binderized . 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 поля к более гибкой определению, используя определение кодировки DataSpace версии 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.
  • Переработаны интерфейсы запросов ввода и очереди потоков: Framework вызывает HAL со следующим запросом и буферами потоков, уже удаленными из очереди. Включена поддержка инфраструктуры синхронизации, необходимая для эффективной реализации.
  • Триггеры перемещены в запросы, большинство уведомлений - в результаты.
  • Сводное все обратных вызовов в рамочный в одну структуру, и все методы установки в один initialize() вызов.
  • Сделал настройку потока одним вызовом, чтобы упростить управление потоками. Двунаправленные потоки заменить STREAM_FROM_STREAM конструкцию.
  • Семантика ограниченного режима для старых / ограниченных аппаратных устройств.

2.0

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

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

1.0

Исходный HAL камеры Android (Android 4.0) [camera.h]:

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

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

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

2,4

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

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

2.3

В этой версии модуля камеры добавлена ​​поддержка устройств HAL с открытой устаревшей камерой. Платформа может использовать его, чтобы открыть устройство камеры как устройство 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 не действительны. Только android.hardware.Camera API может поддерживаться этим модулем и его устройствами.