Android Camera 架构总结
刚转行做手机,决定开个博客,用于写学习总结,因为刚入职接手的就是Camera模块,所以,处女作就写下Camera模块吧,如果有什么地方不对的,请各位大侠纠正下。
Camera目录结构介绍
..\packages\apps\Camera\
src/
gen/
res/
Android.mk
AndroidManifest.xml
src/:代码的存放目录;
gen/:自动生成的目录,存放着所有资源相关的信息;
res/: 资源文件的存放目录,所有原始的资源文件:图片、文字,布局文件,menu等等。在
编译时Android产生一个名为R的类,它包含了程序中所有资源的资源标识符, 可以在代码中使用它们来加载资源: R.Resource_type.Resource_name, 如R.drawable.button_background。
res下有很多子目录,比如:
anim/: 存放一些animiations相关的XML文件;
layout/:存放着界面的布局信息,指定界面中各个控件的位置、颜色等;
values/:存放着界面布局相关的原始数据,如界面显示的字符串,指定颜色的定义等;
drawable/:Bitmap文件,及将被编译成drawable resource subtypes 的XML文件;
xml/: 任意的可以使用Resources.getXML()
实时读取的xml文件,一些configuration
有关的xml文件需放在这里。
AndroidManifest.xml:此文件是重要的配置文件,android系统通过此文件来识别当前App具有哪些组件,以及指定当前的app的入口activity等。当前app的所有组件必须要在此文件中登记,如果没有登记在android平台上是不能被执行的。另外,所有Android application都使用这一特定名称:AndroidManifest.xml.
Android.mk: 该模块的makefile文件。
在Android系统中, Camera和VideoCamera集成在一起,都放在..\packages\apps\Camera文件夹下。
1.2Camera系统架构
Android Camera 是C/S架构,Client和Service是通过Binder进行通信的,如图1.2.1。
模块调用顺序如图1.2.2。其中Java层通过JNI调用C++层。
图1.2.1
图1.2.2
camera主要类如下:
<!--[if !supportLists]-->Ø <!--[endif]-->Java类
com.android.camera.Camera
com.android.camera.CameraHolder
android.hardware.Camera
<!--[if !supportLists]-->Ø <!--[endif]-->C++类
android_hardware_Camera.cpp层 //android::JNICameraContext
android::Camera (Camera.cpp)
android:: CameraService
QualcommCameraHardware