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

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

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvem9vc2VucGlu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" />

图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

iPhone 和 Galaxy高速拍照原理具体分析的更多相关文章

  1. 2019-2020-1 20199303<Linux内核原理与分析>第二周作业

    2019-2020-1 20199303第二周作业 1.汇编与寄存器的学习 寄存器是中央处理器内的组成部份.寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令.数据和位址.在中央处理器的控制部件中 ...

  2. 20169212《Linux内核原理与分析》课程总结

    20169212<Linux内核原理与分析>课程总结 每周作业链接汇总 第一周作业:完成linux基础入门实验,了解一些基础的命令操作. 第二周作业:学习MOOC课程--计算机是如何工作的 ...

  3. 20169212《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 这一周学习了MOOCLinux内核分析的第一讲,计算机是如何工作的?由于本科对相关知识的不熟悉,所以感觉有的知识理解起来了有一定的难度,不过多查查资 ...

  4. AJAX练习(一):制作可以自动校验的表单(从原理上分析ajax的作用)

    继上文(AJAX(一)AJAX的简介和基础)作为联系. 传统网页在注册时检测用户名是否被占用,传统的校验显然缓慢笨拙. 当ajax出现后,这种体验有了很大的改观,因为在用户填写表单时,签名的表单项已经 ...

  5. 20169210《Linux内核原理与分析》第二周作业

    <Linux内核原理与分析>第二周作业 本周作业分为两部分:第一部分为观看学习视频并完成实验楼实验一:第二部分为看<Linux内核设计与实现>1.2.18章并安装配置内核. 第 ...

  6. wp7之换肤原理简单分析

    wp7之换肤原理简单分析 纠结很久...感觉勉强过得去啦.还望各位大牛指点江山 百度找到这篇参考文章http://www.cnblogs.com/sonyye/archive/2012/03/12/2 ...

  7. 2018-2019-1 20189221 《Linux内核原理与分析》第九周作业

    2018-2019-1 20189221 <Linux内核原理与分析>第九周作业 实验八 理理解进程调度时机跟踪分析进程调度与进程切换的过程 进程调度 进度调度时机: 1.中断处理过程(包 ...

  8. 2018-2019-1 20189221 《Linux内核原理与分析》第八周作业

    2018-2019-1 20189221 <Linux内核原理与分析>第八周作业 实验七 编译链接过程 gcc –e –o hello.cpp hello.c / gcc -x cpp-o ...

  9. 2018-2019-1 20189221 《Linux内核原理与分析》第七周作业

    2018-2019-1 20189221 <Linux内核原理与分析>第七周作业 实验六 分析Linux内核创建一个新进程的过程 代码分析 task_struct: struct task ...

随机推荐

  1. 全--教程API, gem 'rest-client'(用于发简单请求); 请求测试;

    安装:rest-client4400✨ gem install rest-client 一个简单的HTTP和REST client for Ruby. 可以用它来发HTTP请求 基本用法: requi ...

  2. centos 7网速监控脚本

    #!/bin/bashif [ $# -ne 1 ];thendev="eth0"elsedev=$1fi while :doRX1=`/sbin/ifconfig $dev |a ...

  3. react 子组件改变父组件状态

    class Father extends Component {     construtor(props){         super(props);         this.state={   ...

  4. Day16 Django深入讲解

    参考博客: http://www.cnblogs.com/yuanchenqi/articles/6083427.html http://www.cnblogs.com/yuanchenqi/arti ...

  5. linux下使用FreeRDP 连接 Windows 远程桌面

    linux下使用FreeRDP 连接 Windows 远程桌面   简介 FreeRDP 是一款开源的远程桌面系统,支持多种平台, 在 ubuntu 中使用 FreeRDP 可以很方便的登录到 win ...

  6. Post with HttpClient4

    转载:http://www.cnblogs.com/luxiaoxun/p/6165237.html 作者:阿凡卢 出处:http://www.cnblogs.com/luxiaoxun/ HttpC ...

  7. BZOJ2259 [Oibh]新型计算机

    话说hzwer你在坑爹?... 我按照你的建图交了上去,发现WA. 开始检查= =...过了好久,突然觉得画风不对...hzwer您建图错了啊!!! 后来看了看zky的终于知道了怎么回事>_&l ...

  8. CF991C

    题解: 很显然不会有那么多种肯能 所以都列出来即可 代码: #include<bits/stdc++.h> using namespace std; int main() { ]; sca ...

  9. 使用Unity创建塔防游戏(Part3)—— 项目总结

    之前我们完成了使用Unity创建塔防游戏这个小项目,在这篇文章里,我们对项目中学习到的知识进行一次总结. Part1的地址:http://www.cnblogs.com/lcxBlog/p/60759 ...

  10. iOS支付宝SDK回调那坑

    支付宝钱包支付接口开发包2.0标准版(iOS 2.2.1) ,回调不出来,demo给出的方法是: - (BOOL)application:(UIApplication *)application op ...