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

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

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

Общий доступ к буферу обмена

Рисунок 1. Общий доступ к буферу обмена

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

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

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

Реализация

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

Проверка

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