Agenda:

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

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

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 Multimedia框架总结(十八)Camera2框架从Java层到C++层类关系-LMLPHP

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

android的后台运行在很多service,它们在系统启动时被SystemServer开启,支持系统的正常工作,相应的名字会注册到SystemServer中,当外部须要用到这些服务时,就会通过getSystemService(xxx.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()方法,获取到可用的摄像头列表。

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

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

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

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

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

下面开始连接Camera相关服务

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

以上代码总结为当把mCameraService返回到getCameraService,这样就建立了C/S模型,Service是实际背后操作者,他们通信就是binder,这样整个过程就清楚了。

接下来看下这个ICameraService.aidl,位于frameworks\base\core\java\android\hardware下

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

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

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

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

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

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

05-06 21:25