我试图从camera应用程序、camera框架和libcameraservice实现以及camera hal v3.2规范来理解android 5.0上的zsl特性/功能支持。
据我所知,zsl在android中的实现有两种方式:
框架实现的zsl
在kitkat中,只支持实现zsl的框架,而且非常简单。(对zsl使用双向流)
在棒棒糖中,他们已经非常清楚地记录了实现zsl的框架,
http://androidxref.com/5.0.0_r2/xref/hardware/libhardware/include/hardware/camera3.h#1076
应用程序实现的zsl
在棒棒糖中,他们引入了应用程序实现zsl的概念。根据可用的文档,zsl已经作为一种功能公开给应用程序
http://androidxref.com/5.0.0_r2/xref/system/media/camera/docs/docs.html
在android.request.availablecapabilities下,它说:
对于zsl,“raw_opaque支持作为输出/输入格式”
在棒棒糖中,使用camera1 api应用程序实现zsl的框架与kitkat的工作方式相同。
但是,我在camera2 api应用程序代码中找不到任何地方,如何启用应用程序/框架实现的zsl。
http://androidxref.com/5.0.0_r2/xref/packages/apps/Camera2/
因此,问题是:
是否可以在android l中使用camera2 api应用程序启用框架实现的zsl?
是否可以在android l中启用应用程序实现的zsl,而不需要原始的不透明支持,使用camera2 api应用程序?
如果1或2都是可能的,那么在android l中启用zsl需要camera hal做什么?
感谢任何帮助。

最佳答案

不,框架层zsl只适用于旧的camera api。
不,除非它足够使用输出缓冲区,而不将其发送回相机设备进行最终处理。
更长的答案是,zsl重新处理api必须从最初的camera2实现中删除,因此目前应用程序无法以任何格式(raw_opaque或其他格式)将缓冲区发送回相机设备。
相对于实际的框架实现,camera3.h中的一些文档具有误导性,而且框架只支持由实现定义的双向zsl,并且raw_opaque不在任何地方使用。
编辑:从android 6.0的marshmallow开始,reprocessing在camera2 api中,在支持它的设备(比如nexus 6p/5x)上可用。

09-30 11:15