Camera2 API - 为什么同一个表面需要指定两次?

Pet*_*ter 0 android android-camera2

查看Camera2 API,似乎需要指定一个表面两次。一旦在 期间完成createCaptureSession,就传入表面列表。稍后,我们再次为预览构建器的addTarget方法指定相同的表面。如果我们稍后要指定目标表面,为什么我们需要在调用过程中最初指定表面列表createCaptureSession?对于没有作用的addTarget表面到底有什么作用?createCaptureSession问候。

Edd*_*ala 6

对于捕获会话,您需要列出您可能想要用于请求的所有表面。这允许相机设备配置其硬件处理管道,以便能够以请求的大小和请求的目的地提供所有这些输出(例如 SurfaceView/TextureView 的 1080p 预览、ImageReaders 的全分辨率 JPEG、到 ImageReader 的 4K 视频录制缓冲区) MediaRecorder等)

然后,每个请求都包含这些 Surface 的子集(或全部)。通常,并非每个请求都希望包含每个已配置的 Surface;您通常只包含用于快照的全分辨率 JPEG ImageReader Surface,并且仅在主动录制视频时包含 MediaRecorder Surface。

如果 Surface 仅包含在捕获请求中,则当相机管道看到以前未使用过的新 Surface 时,必须动态重新配置自身。当相机硬件刷新其数据并重新配置自身时,这通常会导致 300-600 毫秒的暂停。

因此,为了确保顺利运行,camera2 API 要求应用程序预先指定当前会话的所有所需输出。