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

В Android есть функции, позволяющие клиентам камеры выбирать оптимальные потоки камеры для определенных вариантов использования и проверять, поддерживаются ли определенные комбинации потоков устройством камеры. Конфигурация потока – это один поток видео с камеры, настроенный на камере, а комбинация потоков – один или несколько наборов потоков, настроенных на камере. Подробнее об этих функциях рассказывается в статьях Рекомендуемые конфигурации потоков и API для запроса комбинаций функций.

Пример реализации

У поставщика есть эталонная реализация рекомендуемых конфигураций потоков и API для запроса функций сочетания потоков. Реализацию можно найти в файле QCamera3HWI.cpp.

Поставщики камер могут рекламировать клиентам рекомендуемые конфигурации потоков для конкретных вариантов использования. Эти рекомендуемые конфигурации потока, которые являются подмножествами StreamConfigurationMap, помогают клиентам камеры выбирать оптимальные конфигурации.

Хотя StreamConfigurationMap предоставляет клиентам камеры исчерпывающую информацию о конфигурации потока, он не предоставляет никакой информации об эффективности, мощности или влиянии на производительность выбора одного потока по сравнению с другим. Клиенты камеры могут свободно выбирать любые конфигурации потоков, но во многих случаях это приводит к тому, что клиенты используют неоптимальные конфигурации камеры, а приложения выполняют длительные исчерпывающие поиски.

Например, хотя некоторые обработанные форматы YUV являются обязательными и должны поддерживаться, камера может не иметь встроенной поддержки этих форматов. Это приводит к дополнительной обработке для преобразования формата и снижает эффективность. Размер и соотношение сторон также могут влиять на энергопотребление и производительность.

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

Все тесты остаются без изменений и не ослабляются в зависимости от рекомендуемых конфигураций потока.

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

Реализация

Чтобы реализовать эту функцию, выполните следующие действия:

Записи метаданных

Чтобы включить эту функцию, Camera HAL должен заполнить следующие статические записи метаданных:

  • android.scaler.availableRecommendedStreamConfigurations – рекомендуемый набор конфигураций потоков для определенных случаев использования. В декларации используются битовые маски, указывающие на рекомендуемые варианты использования в форме [1 << PREVIEW | 1 << RECORD..]. В этих случаях к стандартному кортежу (формат, ширина, высота, входные данные) добавляется ещё один элемент. Запрещено использовать несуществующие общедоступные варианты использования или любые другие биты, заданные в диапазоне 0x0A–[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 должны включать только выходные форматы на основе RAW.

Другие варианты использования

Вы можете добавить рекомендуемые потоки конфигурации для случаев использования, характерных для вашей реализации.

Проверка

Чтобы проверить реализацию рекомендуемых потоков конфигурации, выполните следующие тесты CTS и VTS:

API для запросов к сочетаниям функций

Начиная с Android 15, платформа Android предоставляет API для запроса комбинаций функций. Этот API позволяет клиентам камеры запрашивать, поддерживается ли устройством определенная комбинация функций. Этот API необходим, поскольку в API camera2 разные функции, такие как 4K, 60 кадров в секунду, HDR-видео, UltraHDR, сверхширокоугольный зум и стабилизация, представлены как ортогональные элементы управления.

Требования

Чтобы API мог запрашивать комбинации функций, аппаратно-зависимый уровень камеры должен реализовать интерфейс ICameraDevice версии 3. Подробные сведения приведены в разделе Реализация.

Если API поддерживается, стабилизация предпросмотра должна быть ортогональна другим функциям. Это означает, что для камеры, поддерживающей стабилизацию предварительного просмотра, возвращаемое значение isStreamCombinationWithSettingsSupported для определенной комбинации должно быть одинаковым независимо от того, включена ли стабилизация предварительного просмотра. Это сокращает пространство поиска для запросов комбинаций функций.

Кроме того, для устройств с классом производительности мультимедиа 15 основная задняя камера должна поддерживать стабилизацию предпросмотра с 10-битным предпросмотром HLG10 для 1080p и 720p, а также JPEG максимального размера. Подробнее об этих требованиях рассказывается в разделе 2.2.7.2. Камера CDD.

Реализация

Чтобы API мог запрашивать сочетания функций, реализуйте в версии 3 ICameraDevice следующие API для запросов сочетаний функций:

  • constructDefaultRequestSettings: Создает настройки по умолчанию для указанного типа CaptureRequest. HAL может использовать реализацию ICameraDeviceSession::constructDefaultRequestSettings.

  • isStreamCombinationWithSettingsSupported: Проверяет, поддерживает ли устройство указанную комбинацию трансляций с камеры с параметрами сеанса и дополнительными ключами CaptureRequest. Должен возвращать значение true для поддерживаемых сочетаний и false для неподдерживаемых. Уровень абстрагирования от оборудования может использовать реализацию isStreamCombinationSupported и добавить поддержку для проверки настроек CaptureRequest, передаваемых в sessionParams.

  • getSessionCharacteristics: принимает поддерживаемую комбинацию потоков с параметрами сеанса и возвращает характеристики, относящиеся к сеансу.

  • INFO_SESSION_CONFIGURATION_QUERY_VERSION: Список всех часто используемых конфигураций сеансов. Эти конфигурации проверяются на соответствие требованиям.

В версиях интерфейса ICameraDevice ниже третьей 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):

VTS

CTS

Camera ITS