Функция параметров сеанса позволяет уменьшить задержки, поскольку клиенты камеры могут активно настраивать подмножество дорогостоящих параметров запроса, то есть параметры сеанса, в рамках этапа инициализации сеанса съемки. Благодаря этой функции реализации HAL получают параметры клиента на этапе настройки потока, а не в первом запросе на захват. В зависимости от значений параметров они могут более эффективно подготавливать и создавать внутренний конвейер.
В Android 10 можно повысить производительность, используя функцию запроса на перенастройку сеанса, чтобы лучше контролировать логику перенастройки внутреннего параметра сеанса. Подробнее о запросе на перенастройку сеанса…
Примеры и источник
Реализация параметра сеанса уже входит в состав CameraHal. Этот HAL использует устаревший Hal API. Связанный CameraHal, который реализует HIDL API камеры, должен использовать соответствующую запись sessionParams HIDL, чтобы получать доступ к новым параметрам сеанса во время настройки потока.
Клиенты камеры могут запрашивать ключи всех поддерживаемых параметров сеанса, вызывая функцию
getAvailableSessionKeys()
и в конечном итоге задавать их начальные значения с помощью функции
setSessionParameters().
Реализация
Реализация CameraHal должна заполнять поле ANDROID_REQUEST_AVAILABLE_SESSION_KEYS в соответствующих статических метаданных камеры и предоставлять подмножество ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS, которое содержит список ключей, которые сложно применять для каждого кадра и которые могут привести к неожиданным задержкам при изменении во время сеанса съемки.
Типичные примеры включают параметры, требующие трудоемкой аппаратной реконфигурации или изменения внутреннего конвейера камеры. Управлять параметрами сеанса по-прежнему можно в запросах на съемку, но клиенты должны знать о возможных задержках в работе приложения.
Фреймворк отслеживает все входящие запросы и, если обнаруживает изменение значения параметра сеанса, внутренне перенастраивает камеру. Новая конфигурация потока, переданная в CameraHal, включает обновленные значения параметров сеанса, которые используются для более эффективной настройки конвейера камеры.
Настройка канала
Вы можете задать теги в списке доступных параметров сеанса, который заполняется на стороне CameraHal. Эта функция неактивна, если CameraHal оставляет список доступных параметров сеанса пустым.
Проверка
В CTS добавлены следующие новые тестовые сценарии для параметров сеанса:
CameraDeviceTest#testSessionConfigurationCameraDeviceTest#testCreateSessionWithParametersCameraDeviceTest#testSessionParametersStateLeakNativeCameraDeviceTest#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.