Android Camera2 基础知识 API

Android Camera2 Basics API

我正在阅读有关 Android Camera2 API 的代码: https://github.com/googlesamples/android-Camera2Basic

这几行令人困惑: https://github.com/googlesamples/android-Camera2Basic/blob/master/Application/src/main/java/com/example/android/camera2basic/Camera2BasicFragment.java#L570-L574

previewRequest 构建器仅添加表面,即要显示的 TextureView,作为目标。但下面一行实际上将两者都添加为目标。据我了解,这不应该在预览期间触发 "OnImageAvailable" 监听器,不是吗?那么为什么要在此处添加图像阅读器的表面?

我试图在这里删除这个图像阅读器的表面,但是当我真的想捕捉图像时出现错误......

太混乱了!!!

您需要声明在您创建 CameraCaptureSession 时可能将图像数据发送到的所有输出 Surface。这就是框架的设计方式。

每当您创建 CaptureRequest 时,您都会添加一个(列表)目标输出 Surface(s)。这是来自捕获帧的图像数据的位置 - 它可能是 SurfaceTextureView 相关联用于显示,或与 ImageReader 用于保存,或与 [=17] =] 用于处理等(Surface 实际上只是一个缓冲区,可以获取相机输出的数据。缓冲区关联的对象类型决定了你如何 access/work 处理数据.)

您不必将每一帧的数据发送到所有已注册的 Surface,但必须将其发送到其中的一个子集。如果 Surface 在创建时未在 CameraCaptureSession 中注册,则无法将 Surface 作为目标添加到 CaptureRequest。好吧,你可以,但是将它传递给会话会导致崩溃,所以不要。