Android включает в себя функции, позволяющие клиентам камеры выбирать оптимальные потоки изображения для конкретных сценариев использования и обеспечивать поддержку определенных комбинаций потоков устройством камеры. Конфигурация потока относится к одному потоку изображения, настроенному в устройстве камеры, а комбинация потоков относится к одному или нескольким наборам потоков, настроенным в устройстве камеры. Для получения дополнительной информации об этих функциях см. рекомендуемые конфигурации потоков и API для запроса комбинаций функций .
Эталонная реализация
Существует эталонная реализация рекомендуемых потоков конфигурации и API для запроса параметров комбинирования потоков, разработанная производителем. Эту реализацию можно найти в файле QCamera3HWI.cpp.
Рекомендуемые конфигурации потока
Производители камер могут предлагать клиентам, использующим камеры, рекомендуемые конфигурации потоковой передачи для конкретных сценариев использования. Эти рекомендуемые конфигурации потоковой передачи, являющиеся подмножествами StreamConfigurationMap , могут помочь клиентам, использующим камеры, выбрать оптимальные конфигурации.
Хотя StreamConfigurationMap предоставляет клиентам камеры исчерпывающую информацию о конфигурации потока, он не предоставляет никакой информации об эффективности, энергопотреблении или влиянии на производительность выбора одного потока по сравнению с другим. Клиенты камеры могут свободно выбирать из всех возможных конфигураций потока, но во многих случаях это приводит к использованию клиентами неоптимальных конфигураций камеры и к трудоемким и исчерпывающим поискам в приложениях.
Например, хотя некоторые обработанные форматы YUV необходимы и должны поддерживаться, камера может не иметь встроенной поддержки этих форматов. Это приводит к дополнительному этапу обработки для преобразования формата и снижает эффективность. Размер и соответствующее соотношение сторон также могут оказывать аналогичное влияние, делая определенные размеры предпочтительными с точки зрения энергопотребления и производительности.
Рекомендуемые вами карты конфигурации потока не обязательно должны быть исчерпывающими по сравнению с StreamConfigurationMap . Предлагаемые карты конфигурации должны соответствовать требованиям раздела реализации и могут включать любые доступные форматы, размеры или другие значения, найденные в StreamConfigurationMap . Скрытые форматы, размеры или другие значения, не найденные в StreamConfigurationMap, не могут быть включены в рекомендуемые карты конфигурации потока.
Все тесты остаются без изменений и не смягчаются в зависимости от рекомендуемых конфигураций потоковой передачи.
Рекомендуемые конфигурации потока, предоставляемые реализацией камеры, являются необязательными, и клиент камеры может их игнорировать.
Выполнение
Для реализации этой функции выполните следующие шаги.
Метаданные записи
Для включения этой функции Camera HAL должен заполнить следующие статические записи метаданных:
android.scaler.availableRecommendedStreamConfigurations: Рекомендуемый набор конфигураций потоков для конкретных сценариев использования. В объявлении используются битовые карты, указывающие на предлагаемые сценарии использования в виде[1 << PREVIEW | 1 << RECORD..]. Сценарии использования расширяют обычный кортеж (формат, ширина, высота, ввод) одной дополнительной записью. Несуществующие общедоступные сценарии использования или любые другие биты, установленные в диапазоне[PUBLIC_END, VENDOR_START]запрещены.Эта информация хранится в метатеге
availableRecommendedStreamConfigurations.В следующем примере показан массив рекомендуемой конфигурации потока для камеры, которая поддерживает только 4K и 1080p, причем оба разрешения предпочтительны для видеозаписи, но для предварительного просмотра рекомендуется только 1080p.
[3840, 2160, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT), 1920, 1080, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PREVIEW | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT)]android.depth.availableRecommendedDepthStreamConfigurations(доступно только если поддерживается устройством): Рекомендуемые конфигурации потока данных глубины, предлагаемые для данного устройства камеры. Аналогично приведенной выше записи метаданных, дополнительная карта вариантов использования указывает на предлагаемые варианты использования.Эта информация хранится в метаданных
availableRecommendedInputOutputFormatsMap.android.scaler.availableRecommendedInputOutputFormatsMap(доступно только если поддерживается устройством): Сопоставление рекомендуемых форматов изображений, предлагаемых для данного устройства камеры для входных потоков, с соответствующими выходными форматами.Эта информация хранится в метаданных
availableRecommendedDepthStreamConfigurations.
Эта информация доступна клиентам камер через API RecommendedStreamConfigurationMap .
Необходимые варианты использования
Рекомендуемые конфигурации потоковой передачи должны быть предоставлены для следующих сценариев использования и соответствовать соответствующим требованиям:
| Вариант использования | Требование |
|---|---|
PREVIEW | Предварительный просмотр должен включать только конфигурации обработанного потока без зависаний с выходными форматами, такими как YUV_420_888 и IMPLEMENTATION_DEFINED . |
RECORD | Видеозапись должна содержать конфигурации потока, соответствующие заявленным поддерживаемым медиапрофилям в формате IMPLEMENTATION_DEFINED . |
VIDEO_SNAPSHOT | Видеоснимок должен включать конфигурации потока, размер которых как минимум равен максимальному разрешению записи, и только с использованием комбинации формата/пространства данных BLOB + DATASPACE_JFIF (JPEG). Конфигурации не должны вызывать сбои предварительного просмотра и должны обеспечивать воспроизведение со скоростью 30 кадров в секунду. |
SNAPSHOT | Конфигурации потока снимков должны включать как минимум один снимок размером, близким к android.sensor.info.activeArraySize , с комбинацией формата/пространства данных BLOB + DATASPACE_JFIF (JPEG). С учетом ограничений по соотношению сторон, выравниванию и другим ограничениям, специфичным для производителя, площадь максимального рекомендуемого размера не должна быть меньше 97% от площади массива датчиков. |
ZSL (если поддерживается) | Если камера поддерживает рекомендуемые конфигурации входного потока, их следует указывать только вместе с другими обработанными или зависшими выходными форматами. |
RAW (если поддерживается) | Если камера поддерживает эту функцию, рекомендуемые конфигурации потоковой передачи RAW должны включать только выходные форматы на основе RAW. |
Другие варианты использования
Вы можете указать дополнительные рекомендуемые потоки конфигурации для сценариев использования, специфичных для вашей реализации.
Валидация
Для проверки реализации рекомендуемых потоков конфигурации выполните следующие тесты CTS и VTS:
API для запроса комбинаций характеристик
Начиная с Android 15, платформа Android предоставляет API для запроса комбинаций функций. Этот API позволяет клиентам камеры запрашивать, поддерживается ли устройство определенной комбинацией функций. Этот API необходим, поскольку API camera2 моделирует различные функции, такие как 4K, 60 кадров в секунду, HDR-видео, UltraHDR, сверхширокоугольный зум и стабилизация, как ортогональные элементы управления.
Требования
Для поддержки API для запроса комбинаций функций HAL камеры должен реализовывать интерфейс ICameraDevice версии 3. Подробности см. в разделе «Реализация» .
Если API поддерживается, предварительная стабилизация должна быть ортогональна другим функциям. Это означает, что для камеры, поддерживающей предварительную стабилизацию, возвращаемое значение функции isStreamCombinationWithSettingsSupported для конкретной комбинации должно быть одинаковым как при включенной, так и при выключенной предварительной стабилизации. Это уменьшает пространство поиска для запросов, связанных с комбинациями функций.
Кроме того, для класса производительности воспроизведения медиаконтента 15 основная задняя камера должна поддерживать стабилизацию предварительного просмотра с 10-битным HLG10-превью для разрешений 1080p и 720p и максимальным размером JPEG-файлов. Более подробную информацию об этих требованиях см. в разделе 2.2.7.2. Камера CDD.
Выполнение
Для поддержки API для запроса комбинаций функций реализуйте следующие API для запросов комбинаций функций в версии 3 ICameraDevice :
constructDefaultRequestSettings: Создает настройки по умолчанию для указанного типаCaptureRequest. HAL может использовать реализациюICameraDeviceSession::constructDefaultRequestSettings.isStreamCombinationWithSettingsSupported: Проверяет поддержку устройством указанной комбинации потоков с камеры с параметрами сессии и дополнительными ключамиCaptureRequest. Должен возвращатьtrueдля поддерживаемых комбинаций иfalseдля неподдерживаемых комбинаций функций. HAL может использовать реализациюisStreamCombinationSupportedи добавить поддержку проверки параметровCaptureRequest, передаваемых вsessionParams.getSessionCharacteristics: Принимает поддерживаемую комбинацию потоков с параметрами сессии и возвращает характеристики, специфичные для сессии.INFO_SESSION_CONFIGURATION_QUERY_VERSION: Отображает все часто используемые конфигурации сессий. Эти конфигурации проверяются в ходе тестирования на соответствие стандартам.
Для версий интерфейса ICameraDevice ниже 3, HAL должен реализовывать метод isStreamCombinationSupported .
Для получения дополнительной информации о комбинациях функций, запрашиваемых API, см. документацию по параметру sessionConfigurationQueryVersion в system/media/camera/docs/metadata_definitions.xml .
Пример реализации этой функции можно найти в файле hardware/google/camera/devices/EmulatedCamera/hwl/ .
Общедоступные API
Приложения могут использовать следующие общедоступные API для запроса поддерживаемых комбинаций функций устройства:
CameraDevice.CameraDeviceSetup: Ограниченное представлениеCameraDevice, которое можно использовать для запроса комбинаций функций без необходимости наличия экземпляраCameraDevice.getCameraDeviceSetup: Получает объектCameraDeviceSetupдля заданного идентификатора камеры, еслиisCameraDeviceSetupSupportedвозвращаетtrue.INFO_SESSION_CONFIGURATION_QUERY_VERSION: Поддерживает запросы на комбинирование функций, если это значение равноVANILLA_ICE_CREAMили выше.OutputConfiguration: Класс, описывающий вывод изображения с камеры, который может содержать отложенную поверхность для целей запросов на комбинирование признаков с низкой задержкой.SessionConfiguration: Вспомогательный класс, описывающий конфигурацию сессии, включая комбинации потоков и параметры сессии, который можно использовать для запросов на объединение функций.
Валидация
Для проверки правильности реализации этой функции используйте следующие тесты VTS, CTS и Camera ITS (CTS Verifier):
ВТС
CTS
- cts/tests/camera/src/android/hardware/camera2/cts/FeatureCombinationTest.java
- cts/tests/camera/src/android/hardware/camera2/cts/CameraDeviceSetupTest.java
Камера ИТ