您当前的位置: 首页 >  Java

暂无认证

  • 4浏览

    0关注

    95481博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Android Multimedia框架总结(十八)Camera2框架从Java层到C++层类关系

发布时间:2016-11-12 11:43:04 ,浏览量:4

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_SERVICE WindowManager 管理打开的窗口程序 LAYOUT_INFLATER_SERVICE LayoutInflater 取得xml里定义的view ACTIVITY_SERVICE ActivityManager 管理应用程序的系统状态 POWER_SERVICE PowerManger 电源的服务 ALARM_SERVICE AlarmManager 闹钟的服务 NOTIFICATION_SERVICE NotificationManager 状态栏的服务 KEYGUARD_SERVICE KeyguardManager 键盘锁的服务 LOCATION_SERVICE LocationManager 位置的服务,如GPS SEARCH_SERVICE SearchManager 搜索的服务 VEBRATOR_SERVICE Vebrator 手机震动的服务 CONNECTIVITY_SERVICE Connectivity 网络连接的服务 WIFI_SERVICE WifiManager Wi-Fi服务 TELEPHONY_SERVICE TeleponyManager 电话服务

当通过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++中进行。后面继续分析。

关注
打赏
1655516835
查看更多评论
立即登录/注册

微信扫码登录

0.4227s