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

В 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 Рекомендуемый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 поддерживает API для запроса комбинаций потоков. Реализация этого API позволяет клиентам камеры безопасно запрашивать комбинации потоков в любой момент после получения допустимого экземпляра CameraDevice , устраняя накладные расходы на инициализацию сеанса захвата камеры и возможность возникновения последующих исключений камеры, включая поломку камеры, а также позволяя выполнять более быстрые запросы.

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

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

Выполнение

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

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

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

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

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

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

Проверка

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

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

Камера СУДС:

VtsHalCameraProviderV2_4TargetTest.cpp