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