我正在从这里阅读有关Android Camera2 API的代码: https://github.com/googlesamples/android-Camera2Basic
预览请求构建器仅将表面(即要显示的TextureView)添加为目标。但是以下行实际上将两者都添加为目标。据我了解,这不应该在预览期间触发“OnImageAvailable”Lisenter,不是吗?那么为什么要在这里添加图像阅读器的表面呢?
我试图在这里删除这个图像阅读器的表面,但是当我真的想拍摄图像时出错...
SOOO CONFUSING !!!
答案 0 :(得分:10)
您需要声明在创建Surface
时可能会将图像数据发送到的所有输出CameraCaptureSession
。这就是框架的设计方式。
每当您创建CaptureRequest
时,都会添加(列表)目标输出Surface
(s)。这是来自捕获的帧的图像数据可能是Surface
与TextureView
关联以进行显示,或ImageReader
用于保存,或{{1}处理等等(A Allocation
实际上只是一个缓冲区,可以通过摄像机输出数据。缓冲区关联的对象类型决定了如何访问/处理数据。)
您不必将每个帧的数据发送到所有已注册的Surface
,但必须将其发送到其中的一部分。如果Surface
在创建时未Surface
注册,则无法将CaptureRequest
添加为CameraCaptureSession
。好吧,你可以,但是把它传递到会话会导致崩溃,所以不要。