Функция параметров сеанса сокращает задержки, позволяя клиентам камеры активно настраивать подмножество дорогостоящих параметров запроса, то есть параметры сеанса, на этапе инициализации сеанса захвата. Благодаря этой функции ваши реализации 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
.