iPhone 和 Galaxy高速拍照原理具体分析

版权声明:本文为博主原创文章,未经博主同意不得转载。

https://blog.csdn.net/zoosenpin/article/details/30027263

1 原理分析
首先我们看一下Android系统默认拍照流程是怎么样子的,先上两幅图:

图1 

图2
从上面两副图大概描写叙述一下Android是怎样拍照的:
1) 首先停止摄像头的预览功能,然后给摄像头发命令。进入拍照模式;
2) 假设摄像头自带ISP的。那么从摄像头出来的数据就是JPEG了。假设摄像头不带ISP。那么摄像头出来的数据是原始的。这样将原始数据再送给SOC的ISP编码处理并保存为文件;
3) 又一次启动Camera的预览。

为了弄清楚高速拍照的原理,以下我上一个Camera预览原理图:

图3
Camera预览是将摄像头输出图像数据不断的送往Overlay模块处理并叠加到LCD屏幕上,这里我就想了,既然预览是摄像头不断的输出数据。那么我就能够从预览帧中取一帧图像数据并编码保存为照片了,这不就能够了嘛!

但有一个问题是预览的分辨率可能非常小。而拍照的分辨率非常大。须要用软件把预览的图像进行放大。这样用户看到的照片就会造成图像失真。有马赛克的感脚。那怎么解决问题呢?事实上你能够变通一下,将预览的图像设置为最大分辨率进行预览,而拍照仅仅把最大分辨率预览的图像进行缩小,这样问题就好解多了。

从上面分析,修正后的快拍原理图例如以下:

图4
1) 摄像头进行最大分辨率预览;
2) 摄像头出来的图像数据流向一是送给Overlay模块缩小到适合屏幕显示。
3) 摄像头出来的图像数据流向二是送给2D GPU,2D GPU依照用户设置的拍照分辨率进行缩小,然后再送给ISP编码并保存为文件。

综上。我们仅仅要改动Android Camera Service和HAL就能够实现真正的高速拍照。

2 Abbreviations
ZSL:Zero Shutter Lag

猜你喜欢

转载自www.cnblogs.com/xfgnongmin/p/10658512.html