Функция параметров сеанса сокращает задержки, позволяя клиентам камеры активно настраивать подмножество дорогостоящих параметров запроса, то есть параметры сеанса, как часть фазы инициализации сеанса захвата. С помощью этой функции ваши реализации HAL получают параметры клиента на этапе настройки потока вместо первого запроса на захват и могут, в зависимости от их значений, более эффективно подготавливать и создавать внутренний конвейер.
В Android 10 вы можете повысить производительность, используя дополнительную функцию запросов на перенастройку сеанса, чтобы лучше контролировать внутреннюю логику перенастройки параметров сеанса. Дополнительные сведения см. в разделе Запрос на перенастройку сеанса .
Примеры и источник
Реализация эталонного параметра сеанса уже является частью CameraHal . Этот HAL использует устаревший API Hal. Связанный CameraHal , который реализует API HIDL камеры, должен использовать соответствующую запись 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
.