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 РекомендуемыйStreamConfigurationMap .
Обязательные варианты использования
Рекомендуемые конфигурации потока должны быть предоставлены для следующих случаев использования и соответствовать соответствующим требованиям:
Вариант использования | Требование |
---|---|
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. |
Другие варианты использования
Вы можете предоставить дополнительные рекомендуемые потоки конфигурации для вариантов использования, специфичных для вашей реализации.
Валидация
Чтобы протестировать реализацию рекомендуемых потоков конфигурации, запустите следующие тесты CTS и VTS:
API для запроса комбинаций функций
Начиная с Android 15, платформа Android предоставляет API для запроса комбинаций функций. Этот API позволяет клиентам камеры запрашивать, может ли устройство поддерживать указанную комбинацию функций. Этот API необходим, поскольку API камеры2 моделирует различные функции, такие как 4K, 60 кадров в секунду, HDR-видео, UltraHDR, сверхширокий зум и стабилизацию, как ортогональные элементы управления.
Требования
Чтобы поддерживать API для запроса комбинаций функций, HAL камеры должен реализовывать версию 3 интерфейса ICameraDevice
. Подробности смотрите в разделе Реализация .
Если API поддерживается, стабилизация предварительного просмотра должна быть ортогональна другим функциям. Это означает, что для устройства камеры, поддерживающего стабилизацию предварительного просмотра, возвращаемое значение isStreamCombinationWithSettingsSupported
для конкретной комбинации должно быть тем же значением, когда стабилизация предварительного просмотра включена или выключена. Это уменьшает пространство поиска для запросов на комбинацию функций.
Кроме того, для класса производительности мультимедиа 15 основная задняя камера должна поддерживать стабилизацию предварительного просмотра с 10-битным предварительным просмотром HLG10 для предварительного просмотра 1080p и 720p и файлов JPEG максимального размера. Более подробную информацию об этих требованиях см. в разделе 2.2.7.2. Камера ЦДД.
Выполнение
Для поддержки 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
Камера ИТС