Эта функция представляет набор методов, которые позволяют клиентам камеры динамически добавлять и удалять выходные поверхности, пока активен сеанс захвата и идет потоковая передача с камеры. Новый выход может сопоставляться с определенным, выбранным пользователем общим потоком камеры . После добавления поверхности ее можно удалить в любой момент.
Общая идея состоит в том, чтобы разделить буферы, связанные с конкретным потоком камеры, на нескольких выходных поверхностях. Внутренний счетчик ссылок отслеживает состояние буферов по мере их готовности к дальнейшей обработке на стороне потребителя. Когда все потребители завершат свои задачи, буфер удаляется из очереди и становится доступным для камеры.
Рисунок 1. Совместное использование буфера
На рис. 1 показан пример сценария, в котором буферы, обрабатываемые потоком камеры 2, динамически присоединяются и отсоединяются, подсчитываются ссылки и управляются компонентом разделения потока внутри выделенного общего выходного потока в службе камеры.
Примеры и источник
Базовую реализацию этой функции можно найти в модуле Camera3StreamSplitter
. Документацию по этой функции можно найти в справочнике для разработчиков:
Реализация
На стороне камеры HAL реализация не требуется, так как эта функция реализована на стороне платформы.
Проверка
Ваша реализация должна пройти кейсы CTS, охватывающие эту функцию, из модуля MultiViewTest и собственной библиотеки JNI для собственного API.