Android 5.0 Camera系统源码分析(2):Camera打开流程.pdf

Android 5.0 Camera系统源码分析(2):Camera打开流程.pdf

ID:48011846

大小:217.74 KB

页数:20页

时间:2020-01-14

Android 5.0 Camera系统源码分析(2):Camera打开流程.pdf_第1页
Android 5.0 Camera系统源码分析(2):Camera打开流程.pdf_第2页
Android 5.0 Camera系统源码分析(2):Camera打开流程.pdf_第3页
Android 5.0 Camera系统源码分析(2):Camera打开流程.pdf_第4页
Android 5.0 Camera系统源码分析(2):Camera打开流程.pdf_第5页
资源描述:

《Android 5.0 Camera系统源码分析(2):Camera打开流程.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Android5.0Camera系统源码分析(2):Camera打开流程1.前言本文将分析Android系统源码,从frameworks层到hal层,暂不涉及app层和kernel层。由于某些函数比较复杂,在贴出代码时会适当对其进行简化。本文属于自己对源码的总结,仅仅是贯穿代码流程,不会深入分析各个细节。欢迎联系讨论,QQ:10266568282.app层从apk开始,简单列出各个入口函数[cpp]viewplaincopyprivatevoidinitCamera(){CameramCamera=Camera.open();Camera.ParametersmParameters=mCam

2、era.getParameters();mParameters.setPictureFormat(PixelFormat.JPEG);mCamera.setParameters(mParameters);mCamera.setPreviewDisplay(mSurfaceHolder);mCamera.startPreview();mCamera.takePicture(null,null,mJpegCallback);}3.frameworks层这里将重点介绍Camera.open函数,其余函数将在后续博文分析。先来看看Camera.open函数在frameworks层的实现,代码路径为:

3、frameworks/base/core/java/android/hardware/Camera.java[cpp]viewplaincopypublicstaticCameraopen(){if(!isPermissionGranted()){returnnull;}intnumberOfCameras=getNumberOfCameras();CameraInfocameraInfo=newCameraInfo();for(inti=0;i

4、meraInfo.CAMERA_FACING_BACK){returnnewCamera(i);}}returnnull;}第5行,通过getNumberOfCameras函数来获取Camera的个数。从上一篇博文CameraService的启动流程可以看出,这个信息保存在CameraService中。第10行,需重点关注,构造一个Camera对象,并将它返回给app层。3.1getNumberOfCameras函数分析getNumberOfCameras函数进入到CameraService获取Camera个数的流程如下:Camera.Java调用的getNumberOfCameras函数是

5、一个JNI接口,对应的函数是android_hardware_Camera.cpp里的android_hardware_Camera_getNumberOfCameras函数[cpp]viewplaincopystaticjintandroid_hardware_Camera_getNumberOfCameras(JNIEnv*env,jobjectthiz){returnCamera::getNumberOfCameras();}这里只是简单调用了Camera.cpp的getNumberOfCameras函数,Camera继承了CameraBase,该函数由它实现[cpp]viewplai

6、ncopytemplateintCameraBase::getNumberOfCameras(){constspcs=getCameraService();returncs->getNumberOfCameras();}第3行,getCameraService函数用来获取ICameraService的Bp端,代码实现如下[cpp]viewplaincopyconstchar*kCameraServiceName="media.camera";template

7、ypenameTCam,typenameTCamTraits>constsp&CameraBase::getCameraService(){if(gCameraService.get()==0){spsm=defaultServiceManager();spbinder;binder=sm->

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。