Конфигурации потоков

В 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 ReferralStreamConfigurationMap .

Требуемые варианты использования

Рекомендуемые конфигурации потоков должны быть предусмотрены для следующих вариантов использования и отвечать соответствующим требованиям:

Вариант использования Требование
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):

СДС

КТС

Камера ИТС