Camera2 API - Почему одну и ту же поверхность нужно указывать дважды? - PullRequest
0 голосов
/ 11 июня 2018

Глядя на Camera2 API, кажется, что поверхность нужно указывать дважды.После того, как это сделано в течение createCaptureSession, передается список поверхностей.Позже мы снова указываем ту же поверхность для метода addTarget создателя предварительного просмотра.Если мы собираемся указать целевые поверхности позже, зачем нам нужно указывать список поверхностей изначально во время вызова createCaptureSession?Что на самом деле делает addTarget с поверхностью, которую не делает createCaptureSession?С уважением.

1 Ответ

0 голосов
/ 12 июня 2018

Для сеанса захвата вам нужно перечислить все поверхности, которые вы можете использовать для своих запросов.Это позволяет устройству камеры конфигурировать свои конвейеры аппаратной обработки, чтобы иметь возможность предоставлять все эти выходные данные в запрошенных размерах и для запрошенных мест назначения (таких как предварительный просмотр 1080p для SurfaceView / TextureView, JPEG с полным разрешением для ImageReaders, буферы видеозаписи 4K дляMediaRecorder и т. Д.)

Затем каждый запрос включает подмножество (или все) этих поверхностей.Не каждый запрос, как правило, требует включения каждой настроенной поверхности;вы обычно включаете только JPEG ImageReader Surface с полным разрешением для снимков и только MediaRecorder Surface для активной записи видео.

Если поверхности были включены только в запросы захвата, то конвейер камеры будет иметьпереконфигурировать себя на лету, когда он видит новую поверхность, которая ранее не использовалась.Обычно это вызывает паузу в 300-600 мс, поскольку аппаратное обеспечение камеры сбрасывает свои данные и переконфигурирует себя.

Таким образом, для обеспечения бесперебойной работы API-интерфейс camera2 требует, чтобы приложение заранее указало все желаемые выходные данные для текущего сеанса.

...