您的位置:首页 > 其它

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

2017-08-10 16:21 316 查看
平台: 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因为更大的数据量而更重。

收集的知识点:

NON-ZSL模式,在拍照之前sensor一般输出四分之一尺寸的图片用于预览,按下快门键后sensor会停止输出帧,然后切换到全尺寸模式下,从而进行拍照。而ZSL模式下sensor始终输出全尺寸图片,图片经过VFE处理后被分成两路,一路用于显示,一路用于拍照。在按下快门键时程序会从拍照的帧里面取出一帧,然后编码,所以,ZSL模式下sensor会一直输出帧,拍照比NON-ZSL快。

2.ZSL和录制video没有关系。

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的值来组合以及左移得到值的



是否开ZSL, preview size不会变化,只是因为sensor是full size,所以对应的preview fps也会下降。

如果原始的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: