Функция параметров сеанса сокращает задержки, позволяя клиентам камеры активно настраивать подмножество дорогостоящих параметров запроса, то есть параметров сеанса, в рамках фазы инициализации сеанса захвата. Благодаря этой функции ваши реализации HAL получают параметры клиента на этапе настройки потока вместо первого запроса захвата и могут, в зависимости от их значений, более эффективно подготовить и построить внутренний конвейер.
В Android 10 вы можете повысить производительность, используя дополнительную функцию запроса реконфигурации сеанса для большего контроля над внутренней логикой реконфигурации параметров сеанса. Дополнительные сведения см. в разделе Запрос на реконфигурацию сеанса .
Примеры и источник
Реализация эталонного параметра сеанса уже является частью CameraHal . Этот HAL использует устаревший API Hal. CameraHal с привязкой , реализующий HIDL API камеры, должен использовать соответствующую запись HIDL sessionParams для доступа к любым новым параметрам входящего сеанса во время настройки потока.
Клиенты камеры могут запрашивать ключи всех поддерживаемых параметров сеанса, вызывая getAvailableSessionKeys()
и в конечном итоге устанавливать их начальные значения с помощью setSessionParameters()
.
Выполнение
Ваша реализация CameraHal должна заполнить ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
в соответствующих статических метаданных камеры и предоставить подмножество ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS
, которое содержит список ключей, которые трудно применять для каждого кадра и которые могут привести к неожиданным задержкам при изменении во время сеанса захвата.
Типичные примеры включают параметры, требующие трудоемкой реконфигурации оборудования или изменения внутреннего конвейера камеры. Контроль над параметрами сеанса по-прежнему можно осуществлять в запросах на захват, но клиенты должны знать и ожидать задержек в своем приложении.
Платформа отслеживает все входящие запросы и, если обнаруживает изменение значения параметра сеанса, внутренне перенастраивает камеру. Новая конфигурация потока, передаваемая в CameraHal, затем включает обновленные значения параметров сеанса, которые используются для более эффективной настройки конвейера камеры.
Кастомизация
Вы можете определить теги в списке доступных параметров сеанса, который заполняется на стороне CameraHal. Эта функция неактивна, если CameraHal оставляет список доступных параметров сеанса пустым.
Валидация
CTS включает следующие новые варианты тестирования параметров сеанса:
-
CameraDeviceTest#testSessionConfiguration
-
CameraDeviceTest#testCreateSessionWithParameters
-
CameraDeviceTest#testSessionParametersStateLeak
-
NativeCameraDeviceTest#testCameraDevicePreviewWithSessionParameters
Обычно после того, как определенный параметр становится частью списка ключей сеанса, его текущее значение включается как часть параметров сеанса, передаваемых во время настройки потока на уровне HAL.
Параметры сеанса должны быть тщательно выбраны. Значения не должны часто меняться (если вообще должны меняться) между конфигурациями потока. Параметры, которые часто меняются, например намерение захвата, не подходят, и добавление их в список параметров сеанса может привести к сбоям CTS из-за чрезмерной внутренней реконфигурации.
Запрос на реконфигурацию сеанса
В Android 10 представлена дополнительная функция запроса на реконфигурацию сеанса для повышения производительности, поскольку реконфигурация внутреннего потока в результате изменения значений параметров сеанса может снизить производительность. Чтобы решить эту проблему, HIDL ICameraDeviceSession
версии 3.5 и выше поддерживает метод isReconfigurationRequired
, который обеспечивает детальный контроль над логикой реконфигурации внутренних параметров сеанса. Используя этот метод, реконфигурация потока может происходить именно тогда, когда это необходимо.
Аргументы isReconfigurationRequired
предоставляют необходимую информацию о каждом ожидающем изменении параметра сеанса, позволяя выполнять различные виды настроек для конкретного устройства.
Эта функция реализована только в сервисе камеры и HAL камеры. Общедоступных API-интерфейсов нет. Если эта функция реализована, клиенты камеры должны увидеть улучшение производительности при работе с параметрами сеанса.
Выполнение
Для поддержки запросов реконфигурации сеанса необходимо реализовать метод isReconfigurationRequired
чтобы проверить, требуется ли полная реконфигурация потока для новых значений параметров сеанса.
Если клиент меняет значение любого объявленного параметра сеанса, платформа камеры вызывает метод isReconfigurationRequired
. В зависимости от конкретных значений HAL решает, требуется ли полная реконфигурация потока. Если HAL возвращает false
, платформа камеры пропускает внутреннюю реконфигурацию. Если HAL возвращает true
, платформа перенастраивает потоки и соответствующим образом передает новые значения параметров сеанса.
Метод isReconfigurationRequired
может быть вызван платформой за некоторое время до того, как запрос с новыми параметрами будет отправлен в HAL, и запрос может быть отменен до его отправки. Следовательно, HAL не должен использовать этот вызов метода для какого-либо изменения своего поведения.
Реализация HAL должна отвечать следующим требованиям:
- Платформа должна иметь возможность вызывать метод
isReconfigurationRequired
в любое время после настройки активного сеанса. - Ожидаемые запросы камеры не должны влиять на производительность. В частности, не должно быть никаких сбоев или задержек во время обычной потоковой передачи с камеры.
Устройство и реализация HAL должны соответствовать следующим требованиям к производительности:
- Настройки аппаратного и программного обеспечения камеры изменять нельзя.
- Не должно быть заметного для пользователя влияния на работу камеры.
Метод isReconfigurationRequired
принимает следующие аргументы:
-
oldSessionParams
: параметры предыдущего сеанса. Обычно существующие параметры сеанса. -
newSessionParams
: новые параметры сеанса, заданные клиентом.
Ожидаемые коды состояния возврата:
-
OK
: требуется успешная реконфигурация запроса. -
METHOD_NOT_SUPPORTED
: устройство камеры не поддерживает запрос на реконфигурацию. -
INTERNAL_ERROR
: запрос на реконфигурацию не может быть выполнен из-за внутренней ошибки.
Возвращаемые значения:
-
true
: требуется реконфигурация потока. -
false
: реконфигурация потока не требуется.
Чтобы игнорировать запрос на реконфигурацию сеанса, HAL возвращает METHOD_NOT_SUPPORTED
или false
. Это приводит к поведению службы камеры по умолчанию, при котором реконфигурация потока запускается при каждом изменении параметров сеанса.
Валидация
Функцию запроса на реконфигурацию сеанса можно проверить с помощью тестового примера VTS в CameraHidlTest#configureStreamsWithSessionParameters
.