上篇分析了打开Camera 在FW中SDK部分的流程,这篇分析在CameraService中的流程。
CameraService 分几个部分:
- CameraServer定义和初始化 —frameworks/av/camera/cameraserver
- libcamera_client 调用库 —frameworks/av/camera/
- libcameraservice 服务调用库 — frameworks/av/service/camera/libcameraservice
CameraService的启动
CameraService 是通过cameraserver.rc 启动的
service cameraserver /system/bin/cameraserver
class main
user cameraserver
group audio camera input drmrpc
ioprio rt 4
writepid /dev/cpuset/camera-daemon/tasks /dev/stune/foreground/tasks
rlimit rtprio 10 10
sp<ProcessState> proc(ProcessState::self());
sp<IServiceManager> sm = defaultServiceManager();
ALOGI("ServiceManager: %p", sm.get());
//实例化了一个CameraService
CameraService::instantiate();
CameraService 其实就是实例化了一个CameraService 的对象,看下CameraService 实例化过程中都做了哪些事情:
void CameraService::onFirstRef()
{
ALOGI("CameraService process starting");
BnCameraService::onFirstRef();
//枚举所有的Camera信息
res = enumerateProviders();
if (res == OK) {
mInitialized = true;
}
mUidPolicy = new UidPolicy(this);
mUidPolicy->registerSelf();
mSensorPrivacyPolicy = new SensorPrivacyPolicy(this);
mSensorPrivacyPolicy->registerSelf();
sp<HidlCameraService> hcs = HidlCameraService::getInstance(this);
if (hcs->registerAsService() != android::OK) {
ALOGE("%s: Failed to register default [email protected]",
__FUNCTION__);