看看Camera2 API,似乎需要指定两次表面。在createCaptureSession
期间完成后,传入曲面列表。稍后,我们再次为预览构建器的addTarget
方法指定相同的表面。如果我们稍后要指定目标曲面,为什么我们需要在createCaptureSession
调用期间最初指定曲面列表? addTarget
对createCaptureSession
没有做的表面真正做了什么?问候。
答案 0 :(得分:3)
对于捕获会话,您需要列出可能要用于请求的所有Surface。这允许摄像机设备配置其硬件处理流水线,以便能够以所请求的大小和所请求的目的地提供所有这些输出(例如1080p预览到SurfaceView / TextureView,全分辨率JPEG到ImageReader,4K视频记录缓冲区到MediaRecorder,等等)
然后每个请求都包含这些Surface的子集(或全部)。并非每个请求通常都要包含每个已配置的Surface;您通常只包含用于快照的全分辨率JPEG ImageReader曲面,并且在主动录制视频时仅包含MediaRecorder曲面。
如果Surfaces仅包含在捕获请求中,则摄像机管道必须在看到之前未使用过的新Surface时动态重新配置。这通常会导致300-600 ms暂停,因为相机硬件会刷新其数据并重新配置。
因此,为确保平稳运行,camera2 API要求应用程序预先指定当前会话的所有所需输出。