Android50Camera系统源码分析Camera打开流程.doc

Android50Camera系统源码分析Camera打开流程.doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android50Camera系统源码分析Camera打开流程

Android 5.0 Camera系统源码分析(2):Camera打开流程 1. 前言 本文将分析Android系统源码,从frameworks层到hal层,暂不涉及app层和kernel层。由于某些函数比较复杂,在贴出代码时会适当对其进行简化。本文属于自己对源码的总结,仅仅是贯穿代码流程,不会深入分析各个细节。欢迎联系讨论,QQ:1026656828 2. app层 从apk开始,简单列出各个入口函数 [cpp] view plain copy private void initCamera() { Camera mCamera = Camera.open(); Camera.Parameters mParameters = mCamera.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层的实现,代码路径为: frameworks/base/core/java/android/hardware/Camera.java [cpp] view plain copy public static Camera open() { if (!isPermissionGranted()) { return null; } int numberOfCameras = getNumberOfCameras(); CameraInfo cameraInfo = new CameraInfo(); for (int i = 0; i numberOfCameras; i++) { getCameraInfo(i, cameraInfo); if (cameraInfo.facing == CameraInfo.CAMERA_FACING_BACK) { return new Camera(i); } } return null; } 第5行, 通过getNumberOfCameras函数来获取Camera的个数。从上一篇博文CameraService的启动流程可以看出,这个信息保存在CameraService中。 第10行,需重点关注,构造一个Camera对象,并将它返回给app层。 3.1 getNumberOfCameras函数分析 getNumberOfCameras函数进入到CameraService获取Camera个数的流程如下: Camera.Java调用的getNumberOfCameras函数是一个JNI接口,对应的函数是android_hardware_Camera.cpp里的android_hardware_Camera_getNumberOfCameras函数 [cpp] view plain copy static jint android_hardware_Camera_getNumberOfCameras(JNIEnv *env, jobject thiz) { return Camera::getNumberOfCameras(); } 这里只是简单调用了Camera.cpp的getNumberOfCameras函数,Camera继承了CameraBase,该函数由它实现 [cpp] view plain copy template typename TCam, typename TCamTraits int CameraBaseTCam, TCamTraits::getNumberOfCameras() { const spICameraService cs = getCameraService(); return cs-getNumberOfCameras(); } 第3行, getCam

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档