[笔记分享] [Camera] msm8926的ZSL功能小结

[笔记分享] [Camera] msm8926的ZSL功能小结平台:msm8926OS:Android4.4术语:ZSL:ZeroShutterLag.ubiFocus:高通对照片后期的一种处理技术,可以利用多张照片来实现拍照不对焦,拍好之后随便选择对焦点的功能。ZSL出现背景:拍照的延时主要分两个方面:1.从按下拍照键到照片拍好放到内存里。2.APK的后期处理。对于BSP这边,能优化的主要是第一条,因此ZSL的出现正

平台: msm8926
OS: Android 4.4

术语:

ZSL:
Zero Shutter Lag.
ubiFocus:
高通对照片后期的一种处理技术,可以利用多张照片来实现拍照不对焦,拍好之后随便选择对焦点的功能。


ZSL出现背景:

拍照的延时主要分两个方面:
1. 从按下拍照键到照片拍好放到内存里。
2. APK的后期处理。

对于BSP这边,能优化的主要是第一条,因此ZSL的出现正如其名Zero Shutter Lag一样,是为了减少拍照时间的。


拍照流程:

来对比下Normal snapshot和ZSL的工作框图。
Normal flow:
这里写图片描述
此模式下,只有preview通道在工作,当做snapshot的时候,preveiw停止,snapshot通道被创建,然后拍照,再编码为JPEG。 接着preview通道又被重新打开工作。

ZSL flow:
这里写图片描述
此模式下,preview和snapshot通道一起工作,当拍照的时候,直接从snapshot通道获取数据并编码为JPEG,省去了创建snapshot通道的过程。


Code调用流程:

Non-ZSL preview/snapshot:
这里写图片描述
Preview的时候只创建Meta, Preview stream.
Snapshot时先stop preview channel, 然后创建capture channel(包含Meta, Postveiw, Snapshot stream),再start.
ZSL preview/snapshot:
这里写图片描述

Preview时,除了Meta和Preview stream之外还创建了Snapshot stream。
Snapshot时,直接从snapshot stream里获取图片,而不用创建capture channel了


Single Shot/Burst mode:

在ZSL模式下,snapshot通道前后几帧数据会被保存到buffer里,在拍照的时候我们可以取一帧数据作普通拍照用,也可以取多帧数来作后期处理,例如ubiFocus.

因此snapshot又分为两种mode: Single Shot 和 Burst mode.
Single Shot:
这里写图片描述
当你按下拍照键之后,系统会根据延迟时间来计算出应该使用之前的哪一帧。
Burst mode:
这里写图片描述
当你按下拍照键之后,系统会根据取出多帧数据。(是否可以间隔取还不确定)


Mode获取和设置:

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述


限制:

Lens rolloff configuration: (未确认)
在Non-ZSL模式时,rolloff在preview的时候被配置一次,在snapshot的时候会根据AWB重新配置。
在ZSL模式下,由于preview和snapshot不会切换,所以没办法重新配置rolloff。为了解决此问题,rolloff会在ZSL stream start的时候在每个SOF_ACK后动态更新。
Zoom: (未确认)
常规preview下,zoom通过VFE来缩放sensor的output来达到想要的FOV和preview dimensions。Snapshot时,VFE输出full FOV。由JPEG来完成裁剪和缩放图片 。
ZSL模式下,VFE连续输出preview和full size的snapshot output而无法做缩放,此时由MDP完成。Snapshot时,还是由JPEG来完成裁剪和缩放。
Lower FPS:
由于开启了ZSL, preview FPS也因为受带宽的限制无法达到很高。
Power:
耗电增加的原因是:
1. Sensor一直以full size输出。
2. AF一直在运行。(未确认)
3. Bus loading因为更大的数据量而更重。


收集的知识点:

  1. NON-ZSL模式,在拍照之前sensor一般输出四分之一尺寸的图片用于预览,按下快门键后sensor会停止输出帧,然后切换到全尺寸模式下,从而进行拍照。而ZSL模式下sensor始终输出全尺寸图片,图片经过VFE处理后被分成两路,一路用于显示,一路用于拍照。在按下快门键时程序会从拍照的帧里面取出一帧,然后编码,所以,ZSL模式下sensor会一直输出帧,拍照比NON-ZSL快。
    2.ZSL和录制video没有关系。
  2. preview/capture/zsl mode下的size setting都走modules_sensor_set_new_resolution()函数,设置哪种模式的size说明如下:
    mask 2 means preview mode.
    mask c means capture mode
    mask a means zsl mode.
    通过enum cam_stream_type_t的值来组合以及左移得到值的
    这里写图片描述
  3. 是否开ZSL, preview size不会变化,只是因为sensor是full size,所以对应的preview fps也会下降。
  4. 如果原始的picture size 是10M, full size是13M,那么开启ZSL之后,无论picture size设置多少,sensor output size都会被设置成13M。

Reference:

  • 80-N5970-1_B_Camera_ZSL.pdf
  • 80-NF499-2_C_Cam_FE_Code_Walkthrough_Linux_SW.pdf

                                                            Kris Fei
                                                            2014/10/20

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/37592.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注