适当释放用于 Camera2 重复请求的目标 Surface

Properly release target Surface used for Camera2 repeating request

假设我有 CameraCaptureSession session1Surface s1 作为重复 CaptureRequest 的目标。现在我想更改输出大小。为此,我可以创建另一个具有适当大小的 Surface s2 并创建另一个 CameraCaptureSession session2。 现在我将使用 s2 作为未来 CaptureRequests 的目标,因此我不再需要 s1。而且,我想在 s1 释放后才创建 s2,这样我可以节省资源。

具体 s1 什么时候可以发布?我可以在 session1.close() 之后立即释放 s1 还是应该等到 onClosed(Session) 被触发然后才释放 s1


第二种方法对我来说听起来是正确的,但我对我发现的 optimization replaceSessionClose() 有点困惑。

最好等待 onClosed,但在最坏的情况下,您会错过发送到旧会话的一两个帧,并且 logcat 中会出现一些错误记录,如果您尽早释放表面。

但不会导致新session创建失败