Буферный транспорт камер одного производителя и нескольких потребителей

Эта функция представляет набор методов, позволяющих клиентам камеры динамически добавлять и удалять выходные поверхности во время сеанса захвата и потоковой передачи данных с камеры. Новый выход может быть сопоставлен с выбранным пользователем общим потоком камеры . После добавления поверхности её можно удалить в любой момент.

Основная идея заключается в совместном использовании буферов, связанных с конкретным потоком камеры, между несколькими выходными поверхностями. Внутренний счётчик ссылок отслеживает готовность буферов к дальнейшей обработке на стороне потребителя. После того, как все потребители завершат свои задачи, буфер удаляется из очереди и становится доступен для камеры.

Совместное использование буфера

Рисунок 1. Совместное использование буфера

На рисунке 1 показан один из примеров сценария, в котором буферы, обрабатываемые потоком камеры 2, динамически присоединяются и отсоединяются, подсчитываются ссылки и управляются компонентом разделителя потока внутри выделенного общего выходного потока в службе камеры.

Примеры и источники

Базовую реализацию этой функции можно найти в модуле Camera3StreamSplitter . Документацию по этой функции можно найти в справочнике разработчика:

Выполнение

Реализация на стороне HAL камеры не требуется, поскольку эта функция реализована на стороне фреймворка.

Проверка

Ваша реализация должна соответствовать требованиям CTS, которые охватывают эту функцию из модуля MultiViewTest и собственной библиотеки JNI для собственного API.