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

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

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

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

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

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

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

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

Выполнение

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

Проверка

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