AndroidCamera系统的结构简析及移植初探

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:hitsyl
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:目前对于各类Android系统设备,都要求具备照相拍摄功能。考虑到平台的多样性和设备型号的差异,需要开展相应的Camera系统的移植工作。在理解Android系统结构的基础上,分析了Camera在Android系统中各个层次结构上的实现方式,进而阐明了在进行Camera移植时所需完成的主要工作内容。
  关键词:Android系统;Camera组件;系统移植
  中图分类号:TP316 文献标识码:A 文章编号:1009-3044(2013)09-2100-02
  1 概述
  目前Android系统由于其系统的开放性、强大的多媒体能力、无需许可费用等等显著的特点,在各类移动设备与嵌入式设备中得到极为广泛的使用,得到业界各大开发团队,顶尖IT公司的广泛支持。具备照相和视频拍摄功能是这些移动设备、多媒体设备的一个基本要求,因此对原生Android系统,针对不同的开发平台、不同的厂商产品来进行有针对性的移植,是有着积极的实践意义的。
  2 Android结构分析
  目前在移动设备中广泛使用的Android系统,从逻辑结构上可以分为应用层、应用框架层、库层、内核层这个四个层次。
  应用层的应用程序通常是指用户界面这个层面的程序,使用Android提供的API进行开发,通常用java程序编写,再加上各种资源文件。Java源程序和资源文件共同编译生成APK包。当然Android系统本身也提供了一些最基本的核心应用。
  应用框架层为应用软件开发者提供上述提到的API,本质上,这是应用程序的框架。在这个框架内部,提供了UI界面所需要的各种控件,比如网格、列表等,为开发应用软件提供了必要的编程接口。另外在应用框架层中也需要按照统一的标准接入下一个层次库层中的内容。
  库层对于嵌入式系统来说,占据一个中间件层次的位置,是Android应用层与实际硬件进行相互通信的一个接口,把硬件的行为和功能封装起来,然后应用框架层再通过某种通信途径与库层进行通信。具体说来,该层次包含两个部分,一个是各种库,另外一个是Android的运行环境(RunTime),这些库通常是用C 语言实现的,包含C标准库、多媒体框架、图形引擎、嵌入式数据库等等部分。
  内核层又称之为操作系统层,使用标准的Linux2.6内核,是直接与硬件联系的一层。考虑到Android系统的主要应用范围,这个层次主要包含一些与移动设备相关设备驱动程序。
  3 Camera各层次的实现方式剖析
  在分析上述Android整体框架基础上,进一步分析Camera系统的具体实现方式。
  3.1 应用层实现
  Camera系统在应用层上是以一个APK包的直观形式表现出来的,当然在这个APK包的开发过程中调用了大量框架层中的API函数,能够实现Camera应用的业务逻辑和UI显示,路径在/android/packages/apps/Camera下,主要实现文件是Camera.java,对应的Java层次的类是android.hardware.Camera。这个类就是Android提供给上层调用的Camera类。这个类的具体作用是用来连接与断开下层中Camera服务,对拍摄的参数或者模式进行设置,打开关闭画面预览,开启拍照动作,实现自动对焦等。它也是Android Camera应用框架封装暴露出来的接口。不过需要注意的是如果要在一个实际的Android应用程序中使用Camera类,必须在源代码中声明Camera的权限与特性。
  3.2 应用框架层实现
  Camera框架层将应用与底层的实现隔离开来,实现了一套Android定义的对上对下接口规范,方便应用及底层硬件的开发和移植。这一层对上以Java类的形式包装出android.hardware.Camera,以便应用层软件进行调用;对下则在一个文件名为CameraHardwareInterface.h头文件中规定出Camera硬件抽象层的接口。注意这个接口类内定义了纯虚函数,虚函数必须被实现类继承以后才能使用。实际上这个实现类就是在上文所提到的Android框架里的库层,这个库层作用是继承CameraHardwareInterface接口,将处于最底层的硬件驱动加以实例化,生成libcamera.so让应用框架的libcameraservice.so进行调用。通过这种处理方式,使得让Camera的应用框架代码保持独立性,不会受到具体硬件型号和参数的影响,为在不同的平台上移植Android系统提供了极大的方便。
  在这个层次中,代码经历了从Java到JNI再到C 的多次转换。Camera.java源文件中的类作为Android SDK中有关Camera的一个组成部分提供给上层应用程序调用,并进一步通过本地调用方式(即JNI方式)调用本地C 代码。相关cpp文件名是android_hardware_Camera.cpp,这个文件是实现JAVA代码到C 代码的转换的基本路径,并且进一步编译为libandroid_runtime.so文件。
  在Android系统的/android/frameworks/base/libs/ui中包含多个cpp源文件,这些源文件会最终编译生成libui.so。这个文件在Camera占有极其重要的地位,是一个核心文件。基本作用体现为作为Camera应用框架的Client客户端,与作为服务端的libcameraservice.so通过Binder机制进行进程之间的通讯,即IPC通信。作为Camera服务载体libcameraservice.so是通过调用Camera hardware interface接口功能完成上述的客户端连接。
  在上述过程中,libandroid_runtime.so和libui.so是两个公用库,Android系统中的其他一些组件可能也会调用这两个文件。在Camera系统工作的时候,客户端与服务器端分别在两个进程中运行,借助于Binder机制实现进程之间通讯。不过需要指出的是这种进程之间的通讯对于上层应用程序来说是透明的,上层应用程序无需关心功能究竟是在客户端还是在服务端实现的。总而言之,当Camera 客户端通过Binder机制与服务端通讯,由服务端实现后传递到客户端。而服务端的实现又是调用camera硬件接口实现的。   3.3 库层实现
  在camera系统中,库层实际上就是硬件抽象层(HAL层),用户空间的驱动代码就是在这个层次中。在库层的上级层次框架层中,包含了 Camera硬件抽象层的接口,这些接口是包含纯虚函数的类。那么在库层或者硬件抽象层中将会依据Linux中V4L2标准规范对底层硬件驱动进行实例化,最终生成libcamera.so以便应用框架的libcameraservice.so服务进行调用。具体代码所在的目录根据开发板或者厂家的不同也稍显有些区别,通常是在/android/hardware/XXX/libcamera目录下。例如对于三星S3C平台,这里的XXX用s3c表示。
  3.4 内核层实现
  由于Android系统本身是架构在Linux内核上的开源操作系统,因此驱动层实质上就是Linux的内核,只不过针对移动设备的特点做了一些优化而已。对于Android中Camera系统,通常是依据V4L2驱动规范以ioctl的形式将Camera基本物理功能提供给硬件抽象层调用。主要功能包含图像视频数据的采集、格式转换、图片缩放、数据传输。其中V4L2是V4L的升级版,全称为视频设备的通用驱动接口,Android系统中的Camera功能实现的基础就是这套标准的驱动架构。当视频设备加载成功后,会相应的在/dev目录下面生成设备节点。
  4 Camera系统移植的主要内容
  由上所知,在camera系统中,Camera本地框架、Camera服务、Camera硬件接口都是采用标准化接口,代码相对独立,在移植过程中无需作出改变。因此对于Camera系统的移植,主要有两方面的内容:一是Camera硬件抽象层的修改,这个层次是直接和底层硬件驱动紧密相关的,是V4L2与Camera服务之间的一个接口,是一个C 的标准类,一个具体的实现者将会继承这个类。Camera的硬件抽象层需要具备提取景物、视频摄录、照片捕捉等功能。二是Camera驱动程序的修改。在Linux系统中,采用标准的Video for Linux 2作为标准的Camera驱动,并且定义了内核空间及用户空间中的数据类和控制类。在移植Android系统中的Camera系统的时候,仍然可以采用V4L2作为Camera的驱动程序。综上所述,如果Android系统中的Camera硬件发生变化了,对于相应的移植工作,主要的工作就是硬件抽象层到内核层这一部分,应用框架层以上的部分无需作出变动。当然在具体进行移植时,由于硬件平台、Camera硬件型号的差异,实际的代码修改,参数配置还会有所差异。
  参考文献:
  [1] 李骏.Android驱动开发与移植实战讲解[M].北京:人民邮电出版社,2012.
  [2] 扶松柏.安卓开发从入门到精通[M].北京:兵器工业出版社,2012.
其他文献
利用三天假期时间,我携手爱人决定去素有“小拉萨”之称的甘南藏族自治州逛逛。我约了蓝天白云、花儿草儿,一路有好心情、好景致相伴,感受被关心、被在乎的温暖,了解一些未知的事物,感受自然的魅力。我迫不及待地在心中默默呼唤:“美丽的大甘南,我要来啦!”  从兰州出发,途经临夏回族自治州,先去甘南州藏族自治州的首府合作市。甘南藏族自治州是中国10个藏族自治州之一,位于甘肃省西南部。合作市地处青藏高原的东南端
概述语篇分析的基本理论,分析目前高中英语阅读教学存在的问题。提出将语篇分析应用于高中英语阅读教学中,能够有效提高学生的阅读能力。以人教版高中《英语》必修2Unit1 Cul
过程教学法作为一种有效的教学手段,具有体现学生主体地位、评价体系完善、注重课堂互动等特点,将它应用于高中英语写作教学,不仅能够调动学生的写作热情,还能够发挥学生的主
儒家思想作为中国思想文化的主干,是中华文化的精髓,其思想内容极其丰富。儒家注重学习,十分重视探讨学习目的、学习内容、学习方法等问题,并最终归纳出颇具特色的"为己之学"
[摘要]临夏方言在语言接触的背景下,形成了与其他汉语方言截然不同的人称代词体系。本文试从语音、语法等角度对临夏方言第一人称代词“我”进行探究,并通过语言接触的视角探讨“我”的格范畴的来源。  [关键词]临夏 方言 人称代词 语言接触  一、基本概况  临夏古称枹罕、河州,自古就是少数民族聚居的地区。明·吴祯本《河州志》记载:“枹罕是罕羌地。罕,羌语也。”其后又有藏、回、保安、东乡、撒拉等民族在这里
目的探讨软组织高频焊接技术在犬肝脏切除术中的应用价值,为其临床应用提供依据。方法将24只雄性比格犬随机分为两组,观察组采用软组织高频焊接技术行肝脏部分切除术,对照组
编就先生的书稿,望着晨光熹微、树影摇曳的窗外,一时竟不知从何说起。我在先生膝下读书,又与先生一起做事,早晚相处已有24年了。这期间,我始得先生教诲,再承被先生露泽,继而
摘要:汉代许慎的《说文解字》中蕴含了大量的文化信息。《说文解字》“马”部一共收录了115个马部字,本文以其中与马的特征相关的50个字为研究对象,按照马的毛色、名字、优劣、年龄、性别和脾性、高矮进行了分类。其中与马的毛色相关汉字最多,一共25个,其次,是与马的优劣相关的9个字,与马的名字相关的6个字,与马的性别和脾性相关的5个字,与马的年龄相关的3个字,马的高矮相关的2字。本文将通过对马的特征进行分