Android Camera2 Basics API

时间:2015-08-20 01:50:49

标签: android android-camera

我正在从这里阅读有关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

预览请求构建器仅将表面(即要显示的TextureView)添加为目标。但是以下行实际上将两者都添加为目标。据我了解,这不应该在预览期间触发“OnImageAvailable”Lisenter,不是吗?那么为什么要在这里添加图像阅读器的表面呢?

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

SOOO CONFUSING !!!

1 个答案:

答案 0 :(得分:10)

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

每当您创建CaptureRequest时,都会添加(列表)目标输出Surface(s)。这是来自捕获的帧的图像数据可能是SurfaceTextureView关联以进行显示,或ImageReader用于保存,或{{1}处理等等(A Allocation实际上只是一个缓冲区,可以通过摄像机输出数据。缓冲区关联的对象类型决定了如何访问/处理数据。)

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