自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 深入理解Android相机体系结构

序言Android系统自2007年底被Google推出问世以来,已经走过13个春夏秋冬,历经多次的大大小小的迭代重构、架构调整,虽然时代年轮依旧滚滚,虽然每年技术依然在不断地推陈出新,但是到目前为止,依然可以窥见其接口与实现相分离的核心设计理念,所以其架构设计的优越性可见一斑,另外,随着智能手机的快速普及,面对这一庞大终端市场,作为系统中最重要的几个组件之一的相机系统也必定会作为主要战场在手机市场中与其它厂商展开竞争。近几年,谷歌针对相机框架体系进行了多次迭代优化,就而今的相机框架而言,整体架构设计十分优

2020-07-15 11:06:31 41513 12

原创 深入理解Android相机体系结构之十一

手机相机的未来与发展Android相机发展至今,通过开发者对框架的不断优化,算法人员对图像处理算法的不断提升,硬件工程师对硬件性能地不断调教,换来了在某些领域完全可以媲美专业相机的成像效果,这些成绩是有目共睹的,但是我们不能仅仅着眼于过去,试着将眼光放得长远些,如何将Android相机推向更高的维度,使其成为手机相机的王者,想必这是每一个热衷于技术的开发者都需要反复思考的问题,当然就我个人而言,对于它的未来,有着我自己的思考。Android相机,首先是基于Android系统,所以对于系统端的优化,我相信

2020-07-15 11:09:22 4777 1

原创 深入理解Android相机体系结构之十

安卓相机架构总结Android 相机体系庞大且复杂,在我刚开始接触到该框架的时候,如盲人摸象一般,一点一点地在代码的世界中探索,在很长的一段时间内,都只能局限于某一个特定的区域,而且在解决问题的过程中,虽然通过对代码的深入梳理,最终都会顺利解决难题,但是到最后依然缺乏一个对于整个框架的理解,正如管中窥豹一般,只见细节而无法把握全貌。但是进入现在的公司之后,通过与相机前辈的沟通,我发现框架思维能力尤为重要,针对整个框架结构需要做到掌控全局,这样在遇到问题的时候便可以迅速定位,此时再进行代码层面的深入研究,发

2020-07-15 11:09:11 6857 9

原创 深入理解Android相机体系结构之九

Camera Hardware相机的硬件层,作为整个框架的最底层,通过硬件模块接收来自客观世界的真实光影效果,将其转换为计算机所熟知的数字信号,并按照一定的数据格式向上源源不断提供成稳定并成像效果优秀的图像数据,整个部分复杂且高效,可以说是,一个优秀的硬件基础,就好比为整个相机框架的地基,拥有一个好的地基,便使得建造一座摩天大厦成为可能,接下来我们来详细介绍下,这部分各个组件的基本情况。基本硬件结构而今的相机硬件系统纷繁复杂,但是如果仔细深入研究的话,你会发现,其实核心组件无外乎镜头、感光器、图像处理

2020-07-15 11:09:00 11069 2

原创 深入理解Android相机体系结构之八

高通KMD框架详解概览利用了V4L2可扩展这一特性,高通在相机驱动部分实现了自有的一套KMD框架,该框架通过V4L2标准方法在系统中创建设备节点,将控制接口直接暴露给UMD CSL进行访问,而其内部主要定义了一系列核心模块,包括CRM(Camera Request Manager),用于管理整个KMD的Session/Link的创建销毁以及Request的在子设备间的流转,该模块创建video0设备节点暴露关键接口给UMD,此外还包括了Sync模块,主要负责了UMD/KMD之间的数据同步与传输,创建vi

2020-07-15 11:08:47 15997 18

原创 深入理解Android相机体系结构之七

Camera Driver相机驱动层位于HAL Moudle与硬件层之间,借助linux内核驱动框架,以文件节点的方式暴露接口给用户空间,让HAL Module通过标准的文件访问接口,从而能够将请求顺利地下发到内核中,而在内核中,为了更好的支持视频流的操作,早先提出了v4l视频处理框架,但是由于操作复杂,并且代码无法进行较好的重构,难以维护等原因,之后便衍生出了v4l2框架。按照v4l2标准,它将一个数据流设备抽象成一个videoX节点,从属的子设备都对应着各自的v4l2_subdev实现,并且通过me

2020-07-15 11:08:33 10856 5

原创 深入理解Android相机体系结构之六

CamX-CHI 框架结构概览回顾高通平台Camera HAL历史,其实不难发现之前高通采用的是QCamera & MM-Camera架构,但是为了更精细化控制底层硬件(Sensor/ISP等关键硬件),同时方便手机厂商自定义一些功能,现在提出了CamX-CHI架构,由于在CamX-CHI中完全看不到之前老架构的影子,所以它完全是一个全新的架构,它将一些高度统一的功能性接口抽离出来放到CamX中,将可定制化的部分放在CHI中供不同厂商进行修改,实现各自独有的特色功能,这样设计的好处显而易见,那便

2020-07-15 11:08:19 36286 29

原创 深入理解Android相机体系结构之五

Camera Provider始于谷歌的Treble开源项目,基于接口与实现的分离的设计原则,谷歌加入了Camera Provider这一抽象层,该层作为一个独立进程存在于整个系统中,并且通过HIDL这一自定义语言成功地将Camera Hal Module从Camera Service中解耦出来,承担起了对Camera HAL的封装工作,纵观整个Android系统,对于Camera Provider而言,对上是通过HIDL接口负责与Camera Service的跨进程通信,对下通过标准的HAL3接口下发针

2020-07-15 11:08:04 16857 8

原创 深入理解Android相机体系结构之四

Camera ServiceCamera Service被设计成一个独立进程,作为一个服务端,处理来自Camera Framework 客户端的跨进程请求,并在内部进行一定的操作,随后作为客户端将请求再一次发送至作为服务端的Camera Provider,整个流程涉及到了两个跨进程操作,前者通过AIDL机制实现,后者通过HIDL机制实现,由于在于Camera Provider通信的过程中,Service是作为客户端存在的,所以此处我们重点关注AIDL以及Camera Service 主程序的实现。Ca

2020-07-15 11:07:48 12346 3

原创 深入理解Android相机体系结构之三

Camera App相机应用处于整个框架的上层,在现实生活中,为了满足各式各样的应用场景,会加入很多业务处理逻辑,但是一旦当我们拨开繁杂的业务逻辑,便会发现其核心部分依然是通过调用谷歌制订的一系列Camera Api接口来完成的,而所有的相机行为都包含在该接口中。起初,相机系统采用的是Camera Api v1接口,它通过一个Camera 类以及该类中的几个标准方法来实现整个相机系统的预览、拍照以及录像功能,控制逻辑比较简单,同时也比较容易理解,但也正是这种简单,导致了它无法逐帧控制底层硬件,无法通过元

2020-07-15 11:07:34 14889 5

原创 深入理解Android相机体系结构之二

安卓相机架构概览Android系统利用分层思想,将各层的接口定义与实现分离开来,以接口作为各层的脉络连接整体框架,将具体实现的主导权交由各自有具体实现需求的平台厂商或者Android 开发者,这样既做到把控全局,也给予了众多开发者足够大的创作空间,这体现出了一个优秀的开源系统应有的胸怀和远见。其中,谷歌根据职能的不同将Camera框架一共划分成了五层,分别是App、Service、Provider、Driver以及Hardware,下面的Camera的整体架构图很清晰地显示出了其五层架构以及相互的关联接口

2020-07-15 11:07:20 19978 7

原创 深入理解Android相机体系结构之一

相机简史几千年来,人类主要通过文字以及绘画的方式记录着对于客观世界的认知,为了更直观地呈现客观世界的图景,摄影技术应运而生。摄影是一门光与影的艺术,通过透镜将光线导入并依靠其折射特性,将光线最终导向到感光器件中,而感光器件在收到光线刺激之后进行一定的转换,进而形成影像,而这一系列的硬件设备的组合统一被称之为相机系统,同时由于现代计算机科学的迅猛发展,该系统依托其强大的传播力,彻底改变和提升了人类感知客观世界的方式和速度。与现在相比,早期的相机系统十分简陋,同时成像效果也一直是灰白色调为主,但随着技术的不

2020-07-15 11:06:55 10142

原创 Understanding the Linux Kernel,3rd Chapter 1

第一章 绪论操作系统的基本概念任何计算机系统都包含一个名为操作系统的而基本程序集合,在这个集合里,最重要的程序称为内核。当操作系统启动时,内核被装入到RAM中,内核中包含了系统运行所必不可少的很多核心过程。操作系统必须完成两个主要目标:1. 与硬件部分交互,为包含在硬件平台上的所有底层可编程不见提供服务2. 为运行在计算机系统上的应用程序(即所谓用户程序)提供执行环境类Unix操作...

2020-02-17 19:54:03 749

原创 Android Camera基本架构介绍

之前一直接触的是老的camera架构,这里介绍下最新的架构:首先看下最新的架构图:Android 相机架构应用框架:应用代码位于应用框架级别,它使用 Camera 2 API 与相机硬件进行交互。在内部,这些代码会调用相应的 Binder 接口,以访问与相机互动的原生代码。AIDL:与 CameraService 关联的 Binder 接口可在 frameworks/av/camer...

2020-02-16 14:33:38 3472

原创 Linux Device Driver 3rd 下

第十一章 内核的数据类型坚持使用严格的数据类型,并且使用-Wall -Wstrict-prototypes选项编译可以防止大多数的代码缺陷内核使用的数据类型主要分为三大类:① 标准C语言类型,类似int② 类似u32这样有确定大小的类型③ 类似pid_t这样用于特定内核对象的类型 使用标准C语言类型在不同的体系架构上,普通C语言的数据类型所占空间的大小并不相同。Li...

2020-02-15 21:47:58 1029

原创 Linux Device Driver 3rd 中

第六章 高级字符驱动程序操作ioctl方法:为了保证ioctl命令的唯一性,对于命令的定义使用了4个位字段,其含义如下:① type 幻数,选择一个的号码(参考ioctl-number.txt),并在整个驱动程序中使用这个号码,这个字段有8位宽(_IOC_TYPEBITS)② number 序数(顺序编号),它也是8位宽(_IOC_NRBITS)③ direct...

2020-02-15 21:41:02 702

原创 Linux Device Driver 3rd 上

第一章 设备驱动程序的简介处于上层应用与底层硬件设备的软件层区分机制和策略是Linux最好的思想之一,机制指的是需要提供什么功能,策略指的是如何使用这个功能!通常不同的环境需要不同的方式来使用硬件,则驱动应当尽可能地不实现策略.驱动程序设计需要考虑一下几个方面的因素:① 提供给用户尽量多的选项② 编写驱动程序所占用的时间,驱动程序的操作耗时需要尽量缩减.③ 尽量保持程序简单内...

2020-02-15 21:38:45 1815

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除