- 1、本文档共16页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- 2016浙江事业单位考试马哲模块.docx
- 2016版高中政治第二单元第三课文化的多样性与文化传播课时跟踪检测新人教版必修3.doc
- 2016省考县级申论真题及解释doc.doc
- 2016达州二诊生物试题及答案.doc
- 2016高考历史二轮复习古代中华文明的奠基形成和发展先秦秦汉的政治经济思想文化课时冲关练(一).doc
- 2016高考生物一轮复习412细胞增殖规范训练(含解析).doc
- 2016高考生物一轮复习935生态系统的信息传递和稳定性规范训练(含解析).doc
- 2016高考复习第一次月考试题.doc
- 2016高三生物第一轮总复习第一编考点过关练考点13细胞增殖.doc
- 2016年七年级历史复习学案A4版.doc
文档评论(0)