cameraserver.rc
路径 frameworks/av/camera/cameraserver/cameraserver.rc
CameraService是由这个.rc文件启动的关于rc文件参见流程1
service cameraserver /system/bin/cameraserver
class main
user cameraserver
group audio camera input drmrpc readproc
ioprio rt 4
writepid /dev/cpuset/camera-daemon/tasks /dev/stune/top-app/tasks
rlimit rtprio 10 10
main_cameraserver.cpp
路径 frameworks/av/camera/cameraserver/main_cameraserver.cpp
CameraService::instantiate() 接口定义在 BinderService 中,CameraService继承它,instantiate() 函数定义在
路径 android/frameworks/native/libs/binder/include/binder/BinderService.h
创建一个new CameraService,名为media.camera并将其加入到 ServiceManager 中。
getServiceName() = "media.camera"
因为SP指针的原因下一步调用到的是CameraService::onFirstRef()
int main(int argc __unused, char** argv __unused)
{
signal(SIGPIPE, SIG_IGN);
// Set 3 threads for HIDL calls
hardware::configureRpcThreadpool(3, /*willjoin*/ false);
sp<ProcessState> proc(ProcessState::self());
sp<IServiceManager> sm = defaultServiceManager();
ALOGI("ServiceManager: %p", sm.get());
CameraService::instantiate();
ProcessState::self()->startThreadPool();
IPCThreadState::self()->joinThreadPool();
}
//路径 android/frameworks/native/libs/binder/include/binder/BinderService.h
static void instantiate() { publish(); }
static status_t publish(bool allowIsolated = false,
int dumpFlags = IServiceManager::DUMP_FLAG_PRIORITY_DEFAULT) {
sp<IServiceManager> sm(defaultServiceManager());
return sm->addService(String16(SERVICE::getServiceName()), new SERVICE(), allowIsolated,
dumpFlags);
}
//路径 frameworks/av/services/camera/libcameraservice/CameraService.h
static char const* getServiceName() { return "media.camera"; }
onFirstRef
路径 frameworks/av/services/camera/libcameraservice/CameraService.cpp
在 CameraService::onFirstRef() 函数中,主要是调用 enumerateProviders() 函数获取CameraProvider信息
new CameraProviderManager() 之后调用 initialize(), 并将CameraService作为 CameraProviderManager 的成员变量传递进去
void CameraService::onFirstRef()
{
res = enumerateProviders();
...
}
status_t CameraService::enumerat

本文解析了Android Camera Service的启动过程,从cameraserver.rc配置文件开始,详细跟踪了CameraService的创建、CameraProvider的初始化及服务注册,展示了关键函数如instantiate()和onFirstRef()的作用。
最低0.47元/天 解锁文章
9983

被折叠的 条评论
为什么被折叠?



