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