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

В Android 10 представлены функции, позволяющие клиентам камеры выбирать оптимальные потоки камеры для конкретных случаев использования и обеспечивать поддержку определенных комбинаций потоков устройством камеры. Конфигурация потока относится к одному потоку камеры, настроенному в устройстве камеры, а комбинация потоков относится к одному или нескольким наборам потоков, настроенным в устройстве камеры. Дополнительные сведения об этих функциях см. в разделе рекомендуемые конфигурации потоков и 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, и только с комбинацией формата/пространства данных (JPEG) BLOB + DATASPACE_JFIF. Конфигурации не должны вызывать сбоев предварительного просмотра и должны работать со скоростью 30 кадров в секунду.
SNAPSHOT Конфигурации потока моментальных снимков должны включать хотя бы один с размером, близким к android.sensor.info.activeArraySize , с комбинацией формата BLOB + DATASPACE_JFIF/пространства данных (JPEG). Принимая во внимание ограничения по соотношению сторон, выравниванию и другие ограничения производителя, область максимального рекомендуемого размера должна быть не менее 97% от площади матрицы датчиков.
ZSL (если поддерживается) Если поддерживается устройством камеры, рекомендуемые конфигурации входного потока должны объявляться только вместе с другими обработанными или зависающими выходными форматами.
RAW (если поддерживается) Рекомендуемые конфигурации необработанных потоков, если они поддерживаются устройством камеры, должны включать только форматы вывода на основе RAW.

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

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

Проверка

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

API для запроса комбинаций потоков

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

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

Вы можете поддержать эту функцию, реализовав один дополнительный вызов HIDL API в Camera HAL.

Реализация

Чтобы поддерживать API для запроса комбинаций потоков, HAL камеры должен предоставить реализацию интерфейса API isStreamCombinationSupported HIDL. Этот интерфейс проверяет, поддерживает ли камера указанную комбинацию потоков с камеры.

При вызове API должен возвращать один из следующих кодов состояния:

  • OK : запрос на объединение потоков выполнен успешно.
  • METHOD_NOT_SUPPORTED : устройство камеры не поддерживает запрос объединения потоков.
  • INTERNAL_ERROR : запрос объединения потоков не может быть выполнен из-за внутренней ошибки.

API возвращает true, если комбинация потоков поддерживается. В противном случае возвращается ложь.

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

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

Проверка

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

Модули камеры CTS:

Камера ВТС:

VtsHalCameraProviderV2_4TargetTest.cpp