// framework包含: java & native
java跑在app进程
native跑在cameraserver
cameraserver bin进程路径
framework/av/camera/cameraServer
cameraserver mk
framework/av/camera/cameraServer/android.bp
// cameraserver rc(run configure)
cameraserver进程是一个system进程,也是通过init.rc启动
进程启动时的配置文件
文件路径 system/etc/init
ps -A 显示的是进程名
rc文件中为服务名(dmesg | grep camera)
service cameraserver /system/bin/cameraserver
class main 用于描述在哪个阶段启动
user cameraserver
group audio camera input drmrpc
ioprio rt 4
task_profiles CameraServiceCapacity MaxPerformance
rlimit rtprio 10 10
// cameraserver manifest
vintf(system与vendor之间的通信接口)
cameraserver manifest 用于定义vendor interface接口 供hwservicemanager使用
framework/av/camera/cameraServer/manifest
// cameraserver进程启动流程
framework/av/camera/cameraServer/main.cameraServer.cpp
main函数流程
1. sigpipe信号
signal(sigpipe,sig_ign)
tcp通信中,比如 a与b通信,如果b关闭了通信,系统会发出一个sigpipe信号给a,告诉a连接已经断开
同时a进程会被终止,若不想退出设置为sig_ign
2. 配置了5个线程来处理hidl调用 (ps -T -p pid 查看某个进程中的线程)
// cameraservice实例化流程
1. cameraservice::initialize
BinderService::initialize (frameworks/native/libs/binder/include/binder/BinderService.h)
BinderService::publish
getServiceName:media.camera
new cameraservice对象
并将以上两个参数add到 servicemanager,这时cameraservice就已经成功注册到servicemanager中了,查看命令:service list | grep -i “media.camera”
(binder::Status addService(const std::string& ServiceName, const sp<IBinder>& binder,
bool allowIsolated, int32_t dumpPriority) override;)
此时new出来的 cameraservice 会赋值给sp(调用完cameraservice构造函数后,继续调用CameraService::onfirstRef)
RefBase sp参考:https://www.cnblogs.com/Jackwen/p/4332120.html
2. onfirstRef
3. enumerateProviders
创建cameraprovidersManager并完成初始化
1. hidl cameraprovider的初始化
2. aidl cameraprovider的初始化
初始化vendortags
setupvendortags
初始化flashlight
针对主前后摄为SPerfClass过滤cameracharacteristics