Android включает функции, позволяющие клиентам камеры выбирать оптимальные потоки камеры для конкретных случаев использования и гарантировать, что определенные комбинации потоков поддерживаются устройством камеры. Конфигурация потока относится к одному потоку камеры, настроенному на устройстве камеры, а комбинация потоков относится к одному или нескольким наборам потоков, настроенным на устройстве камеры. Подробнее об этих функциях см. в рекомендуемых конфигурациях потоков и API для запроса комбинаций функций .
Референтная реализация
Существует эталонная реализация на стороне поставщика рекомендуемых потоков конфигурации и API для запроса функций комбинирования потоков. Вы можете найти эту реализацию на QCamera3HWI.cpp
Рекомендуемые конфигурации потока
Поставщики камер могут рекламировать рекомендуемые конфигурации потоков для конкретных случаев использования для клиентов камер. Эти рекомендуемые конфигурации потоков, которые являются подмножествами StreamConfigurationMap , могут помочь клиентам камер выбирать оптимальные конфигурации.
Хотя StreamConfigurationMap предоставляет клиентам камеры исчерпывающую информацию о конфигурации потока, он не предоставляет никакой информации об эффективности, мощности или влиянии на производительность выбора одного потока вместо другого. Клиенты камеры могут свободно выбирать из всех возможных конфигураций потока, но во многих случаях это приводит к тому, что клиенты используют неоптимальные конфигурации камеры, а приложения выполняют трудоемкие исчерпывающие поиски.
Например, хотя некоторые обработанные форматы YUV требуются и должны поддерживаться, камера может не иметь собственной поддержки форматов. Это приводит к дополнительному проходу обработки для преобразования формата и снижает эффективность. Размер и соответствующее соотношение сторон также могут иметь аналогичное влияние, делая определенные размеры предпочтительными с точки зрения мощности и производительности.
Ваши рекомендуемые карты конфигурации потока не обязательно должны быть исчерпывающими по сравнению со StreamConfigurationMap . Предлагаемые карты конфигурации должны соответствовать требованиям в разделе реализации и могут включать любые доступные форматы, размеры или другие значения, найденные в StreamConfigurationMap . Скрытые форматы, размеры или другие значения, не найденные в StreamConfigurationMap , не могут быть включены в рекомендуемые карты конфигурации потока.
Все тесты остаются неизменными и не ослабляются в зависимости от рекомендуемых конфигураций потоков.
Рекомендуемые конфигурации потока, предоставляемые реализацией камеры, являются необязательными, и клиент камеры может их игнорировать.
Выполнение
Чтобы реализовать эту функцию, выполните следующие действия.
Записи метаданных
Для включения этой функции камера 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 | Видеоснимок должен включать конфигурации потока, которые по крайней мере такого же размера, как максимальные разрешения RECORD, и только с комбинацией формата/пространства данных BLOB + DATASPACE_JFIF (JPEG). Конфигурации не должны вызывать сбоев предварительного просмотра и должны работать со скоростью 30 кадров в секунду. |
SNAPSHOT | Конфигурации потока снимков должны включать по крайней мере один с размером, близким к android.sensor.info.activeArraySize с комбинацией формата/пространства данных BLOB + DATASPACE_JFIF (JPEG). Принимая во внимание ограничения по соотношению сторон, выравниванию и другие ограничения, специфичные для поставщика, область максимального предлагаемого размера не должна быть меньше 97% от области размера массива датчиков. |
ZSL (если поддерживается) | Если поддерживаемые камерой конфигурации входного потока должны быть объявлены только вместе с другими обработанными или задерживаемыми форматами выходного сигнала. |
RAW (если поддерживается) | Если камера поддерживает эту функцию, рекомендуемые конфигурации потока необработанных данных должны включать только выходные форматы на основе RAW. |
Другие варианты использования
Вы можете предоставить дополнительные рекомендуемые потоки конфигурации для вариантов использования, специфичных для вашей реализации.
Проверка
Чтобы проверить реализацию рекомендуемых потоков конфигурации, запустите следующие тесты CTS и VTS:
API для запроса комбинаций функций
Начиная с Android 15, платформа Android предоставляет API для запроса комбинаций функций. Этот API позволяет клиентам камеры запрашивать, может ли указанная комбинация функций поддерживаться устройством. Этот API необходим, поскольку API camera2 моделирует различные функции, такие как 4k, 60 кадров в секунду, HDR-видео, UltraHDR, сверхширокий зум и стабилизация, как ортогональные элементы управления.
Требования
Для поддержки API для запроса комбинаций функций HAL камеры должен реализовать версию 3 интерфейса ICameraDevice
. Подробности см. в разделе Реализация .
Если 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/tests/camera/src/android/hardware/camera2/cts/FeatureCombinationTest.java
- cts/tests/camera/src/android/hardware/camera2/cts/CameraDeviceSetupTest.java
Камера ИТС