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

Agenda:

  • getSystemService(Context.CAMERA_SERVICE)
  • CameraManager.getCameraIdList()
  • ICameraService.aidl
  • ICameraService.cpp

[置顶] Android Multimedia框架总结(十八)Camera2框架从Java层到C++层类关系_第1张图片

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()方法,获取到可用的摄像头列表。

[置顶] Android Multimedia框架总结(十八)Camera2框架从Java层到C++层类关系_第2张图片

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

[置顶] Android Multimedia框架总结(十八)Camera2框架从Java层到C++层类关系_第3张图片

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

[置顶] Android Multimedia框架总结(十八)Camera2框架从Java层到C++层类关系_第4张图片

下面开始连接Camera相关服务

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

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

[置顶] Android Multimedia框架总结(十八)Camera2框架从Java层到C++层类关系_第5张图片
[置顶] Android Multimedia框架总结(十八)Camera2框架从Java层到C++层类关系_第6张图片
[置顶] Android Multimedia框架总结(十八)Camera2框架从Java层到C++层类关系_第7张图片

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

你可能感兴趣的:(camera2,camera框架)