Android Multimedia 框架总结(十八)Camera2 框架(文中有彩蛋)

原创
2016-11-15
逆流的鱼yuiop
何俊林
何俊林
何俊林
《Android Multimedia 框架总结(十八)Camera2 框架(文中有彩蛋)》

微信号 DriodDeveloper

功能介绍 个人原创 android 技术干货,问题深度总结,FrameWork源码解析,插件化研究,最新开源项目推荐

彩蛋来了,这是两位朋友公司的招聘,腾讯Qzone的MagiLu,步步高张总(张明云),玩知乎对两位肯定不会陌生,两位都是知乎下优秀回答者,有想去深圳和东莞工作的筒子们,机会来了,和大牛面试沟通,肯定会有收获,下面是具体要求,(PS:不要被招聘信息的某些要求吓到了,招聘要求,一般是期待的,你懂的,工作就是主要看眼缘,大家都聊得来,恭喜你,肯定有戏!)

腾讯Qzone团队招聘Android工程师

1. Android开发工程师(深圳):

工作职责:

  • 负责手机Qzone android终端应用的架构设计;

  • 负责手机Qzone android版本现有功能的维护及新功能模块的开发;

  • 负责定位并解决现有模块存在的问题;

  • 负责承担版本的系统设计、性能及内存调优工作。

基本要求:

  • 本科及以上学历,计算机或相关专业;

  • 2年以上相关工作经验;

  • 熟悉android手机平台开发,有1年以上的应用程序开发经验;

  • 精通C/C++、JAVA或Objective C;

  • 基础扎实,精通常用数据结构与算法;

  • 熟悉TCP/IP协议和网络编程相关知识者优先。

岗位投递:

如果您对上述岗位有兴趣,可以私信我,一定第一时间给您答复。

可发送简历至:magilu325@gmail.com

关于Qzone :

Qzone 是中国最大的社交网络,是腾讯集团的核心平台之一,目前Qzone的月活跃账户数达到6.68亿,Qzone智能终端月活跃账户数达到5.68亿。从2005年至今,Qzone见证了国内互联网的蓬勃发展,期间行业风云变幻,但我们的业务仍不断向前发展。希望更多的朋友能够加入我们,因为我们希望:

让你的梦想,与亿万用户相连


步步高教育电子社招Android应用开发工程师

需要找工作的小伙伴们看过来,只要你足够优秀,下面的要求都可以对你不做要求。

简历投递地址:zmywly8866@gmail.com,投递格式如下:

  • 标题:应聘Android应用开发工程师+姓名+工作年限+联系方式,比如“应聘Android应用开发工程师+张明云+5年+138**”;

  • 邮件内容:简历的附件。

一、招聘信息:

招聘岗位:

  • Android应用开发工程师

岗位职责:

  • 负责Android平台应用软件的研发、测试、维护。

  • 基于需求完成软件设计文档。

岗位要求:

  • 具备扎实的Java编程基础,良好的编程习惯。

  • 熟悉Android开发平台的框架原理和Android SDK及底层API调用,熟悉主流开源项目的原理和使用方法。

  • 熟练掌握Android的基本类库、界面设计、数据存储等基础知识,以及主流设备的适配。

  • 对终端产品的UI/UE有独到的见解与认识,追求良好的用户体验。

  • 有独立开发过Android APP的优先考虑。

  • 积极、沟通顺畅、对新技术感兴趣。

  • 对应用开发有追求,注重细节和体验,有志于开发优秀用户体验的产品。

二、其它信息:

1、关于公司:

2、关于产品:

3、工作地点:

4、简历投递邮箱:

zmywly8866@gmail.com,投递格式如下:

  • 标题:应聘Android应用开发工程师+姓名+工作年限+联系方式,比如“应聘Android应用开发工程师+张明云+5年+138**”;

  • 邮件内容:简历附件。

5、工作体验:

6、其它:

  • 招聘人数不限;

  • 招聘截止时间11月30日;

  • 工作年限没有限制,只看实力;

  • 有意愿从事Android开发相关岗位都可以投递,投递时注明求职意向;

  • 关于职业发展:只要你足够优秀,你可以在公司进一步从事系统应用开发、SystemUI、FrameWork层的开发。

好,正文开始,Camera2框架,是对Camera更灵活,在很多命名上,Google都用Camera2,如Camera2Client,说明,这是一次大的改动。否则可以在原来CameraClient上改动。

Agenda:

  • getSystemService(Context.CAMERA_SERVICE)

  • CameraManager.getCameraIdList()

  • ICameraService.aidl

  • ICameraService.cpp

查看图片

camera2中从Java层到C++层,以获取摄像头数目为例。 
1.当我们获取摄像头时,会调用 CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE); 而在最早的Camera类中,是通过openCamera,传到jni中android_hardware_Camera.cpp的openCamera,再向下到达Camera.cpp中,而在Camera2中,换了一种形式,通过getSystemService方法,根据传入的NAME来取得对应的Object,然后转换成相应的服务对象。这里传入的是Context.CAMERA_SERVICE

查看图片

查看图片

Android的后台运行在很多service,它们在系统启动时被SystemServer开启,支持系统的正常工作,相应的名字会注册到SystemServer中,当外部须要用到这些服务时,就会通过getSystemService(xxx.name)获取对应的服务。

传入的Name返回的对象说明
WINDOW_SERVICEWindowManager管理打开的窗口程序
LAYOUT_INFLATER_SERVICELayoutInflater取得xml里定义的view
ACTIVITY_SERVICEActivityManager管理应用程序的系统状态
POWER_SERVICEPowerManger电源的服务
ALARM_SERVICEAlarmManager闹钟的服务
NOTIFICATION_SERVICENotificationManager状态栏的服务
KEYGUARD_SERVICEKeyguardManager键盘锁的服务
LOCATION_SERVICELocationManager位置的服务,如GPS
SEARCH_SERVICESearchManager搜索的服务
VEBRATOR_SERVICEVebrator手机震动的服务
CONNECTIVITY_SERVICEConnectivity网络连接的服务
WIFI_SERVICEWifiManagerWi-Fi服务
TELEPHONY_SERVICETeleponyManager电话服务

当通过getSystemService(Context.CAMERA_SERVICE)获取到CameraManager后,通过调用anager.getCameraIdList()方法,获取到可用的摄像头列表。

查看图片

再看下getOrCreateDeviceIdListLocked方法,返加的是list

查看图片

看下CameraManagerGlobal.get().getCameraService()方法,

查看图片

下面开始连接Camera相关服务

查看图片

以上代码总结为当把mCameraService返回到getCameraService,这样就建立了C/S模型,Service是实际背后操作者,他们通信就是binder,这样整个过程就清楚了。 
接下来看下这个ICameraService.aidl,位于frameworks\base\core\java\android\hardware下

查看图片

以上就有一个getNumberOfCameras,获取对应的摄像头是多少个。通过onTransact,最后来到ICameraService.cpp中,位于\frameworks\av\camera包下

查看图片 
查看图片 
查看图片

这样一个从java到c++层过程就完成了,后面的过程就是c++中进行。后面继续分析。


第一时间获得博客更新提醒,以及更多android干货,源码分析,欢迎关注我的微信公众号,扫一扫下方二维码或者长按识别二维码,即可关注。

查看图片

赞赏

人赞赏

阅读


投诉

    原文作者:Android源码分析
    原文地址: https://juejin.im/entry/582a7fb0128fe100693fb3f3
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞