接上篇, sensor 端已经实现了长曝光功能了,剩下的就是 camera app 通过 hal 层设置iso (对应gain)和 shutter 了。

首先分成以下几种情况:

1 全手动模式:AE mode 是 off 的, app 会设置下来 iso 和 shutter。这里面存在一个问题, 就是正常的camera 

一般都是走 zsd 模式, 预览 和 拍照的 gain 和 shutter 基本一致。但是对于长曝光模式, 如果还是 zsd 模式就不行了,

比如设置 shutter 为1s , 那么 预览不可能 每秒1帧数据上来。目前的实现方法是当shutter 大于一个预设的值,比如

100ms (研究了某个参考手机,他们的预设值应该是 80ms),shutter 大于这个预设值, preview 的 shutter 值就不再

变了,这样可以保证预览的流畅性; 当拍照的时候需要把真正在 shutter 值设置下去。在 hal3 下提供了比较方便修改的方法。

但是存在一个问题(原创mojl),如果这个动作在camera hal 层实现的话,会导致 cts 测试fail,因为 cts 有测试项,测试

设置的shutter 和 实际得到的要一致,我们这样操作是不一致的,所以需要 camera app 配合修改。

2 半自动模式: shutter 优先 或者 iso 优先, 这个时候 AE mode 是 on 的,我称为 半自动模式。这个时候 shutter 优先的话,

同样存在上面的问题, 比如 shutter 设置为2s, 那么预览的 shutter 不可能是 2s 吧,所以还要用到预设值,比如 100ms, 大于

这个预设值(原创mojl),预览的shutter 就不再减小了,因为这种模式下AE 是打开的, 根据这个 shutter ,aec 会计算出对应

的gain值,在拍照的时候,要设置真正在 shutter ,那么 gain 值需要根据 预览的gain值计算出来。利用下面的公式:

pre_gain * pre_shutter = snap_gain * snap_shutter

这部分都是和 camera app 紧密相关,camera app 一般不了解这个过程,需要驱动指导 app 开发完成。

 

遇到的问题:

1 当设置为 5s 拍照时,拍照过程中,照片还没有上来,按 home 键退出了,再进入camera 无法进入了,请思考。

2 底层支持的最大曝光时间如果暴露出去30s, 那么 cts 就会测试, 如何规避。