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

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. mac下csv乱码解决办法

    到csv目录下, 用终端执行以下命令: iconv -f UTF8 -t GB18030 a.csv >b.csv

  2. lspci能看到ifconfig -a看不到网卡

    随着宽带技术的快速发展,服务器使用万兆网卡的概率越来越高.最近装了几台服务器都用的万兆网卡,为了图便宜,网卡和模块都是淘宝上买的,这部还真遇到不少问题. 我的服务器都是centos6.4 64位的,网 ...

  3. Markdown - 让网络书写变得简单

    概述 宗旨 Markdown 的目标是实现「易读易写」. 可读性,无论如何,都是最重要的.一份使用 Markdown 格式撰写的文件应该可以直接以纯文本发布,并且看起来不会像是由许多标签或是格式指令所 ...

  4. LeetCode OJ:Word Pattern(单词模式)

    Given a pattern and a string str, find if str follows the same pattern. Here follow means a full mat ...

  5. 【css】CSS3 Media Queries 详解【转】

    说起CSS3的新特性,就不得不提到 Media Queries .最近 Max Design 更新的一个泛读列表里,赫然就有关于 Media Queries 的文章.同时位列其中的也有前天我刚刚翻译的 ...

  6. linux系统挂载NTFS移动硬盘

    有时候做大数据量迁移时,为了快速迁移大数据,有可能在Linux服务器上临时挂载NTFS格式的移动硬盘, 一般情况下,Linux是识别不了NTFS格式移动硬盘的(需要重编译Linux核心才能,加挂NTF ...

  7. C++面向对象高级编程(二)基础篇

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. 概要 知识点1.重载成员函数 知识点2 . return by value, return by reference 知识点3 重载非成员函数 ...

  8. MySQL之联合索引

    以 index(a, b, c) 为例: 语句 发挥作用的索引 记忆方法(以三块板子过河记忆, 顺序很重要) WHERE a=3 只用到了a列 只走了a板子 WHERE a=3 AND b=5 使用了 ...

  9. ubuntu16 jdk7 install&config

    1,下载jdk文件 http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521 ...

  10. DBSCAN聚类︱scikit-learn中一种基于密度的聚类方式

    一.DBSCAN聚类概述 基于密度的方法的特点是不依赖于距离,而是依赖于密度,从而克服基于距离的算法只能发现"球形"聚簇的缺点. DBSCAN的核心思想是从某个核心点出发,不断向密 ...