第7讲 cameraserver进程启动流程概述 - Android Camera Native Framew

2024年11月01日 第7讲 cameraserver进程启动流程概述 极客笔记

本讲是Android Camera Native Framework专题的第7讲,我们介绍cameraserver进程启动流程概述。

更多资源:

资源 描述
在线课程 极客笔记在线课程
知识星球 星球名称:深入浅出Android Camera
星球ID: 17296815
Wechat 极客笔记圈

CameraServer Main函数流程

SIGPIPE信号

在TCP通信中,当通信的双方中的一方close一个连接时,若另一方接着发数据,根据TCP协议的规定,会收到一个RST响应报文,若再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程,告诉进程这个连接已经断开了,不能再写入数据。

该信号的缺省行为是终止进程,因此进程必须捕获它以免不情愿的被终止。

若不想退出可以把 SIGPIPE设为SIG_IGN。

配置5个线程来处理HIDL调用

执行:

ps -T -p 11657

输出:

CameraService 实例化流程

注册media.camera服务

onFirstRef流程

New CameraService后赋值给SP指针:

因此,调用完CameraService构造函数后,会继续调用CameraService::onFirstRef。

onFirstRef会完成7件事情:

void CameraService::onFirstRef()
{

    ALOGI("CameraService process starting");

    BnCameraService::onFirstRef();

    // Update battery life tracking if service is restarting
    BatteryNotifier& notifier(BatteryNotifier::getInstance());
    notifier.noteResetCamera();
    notifier.noteResetFlashlight();

    status_t res = INVALID_OPERATION;

    res = enumerateProviders();
    if (res == OK) {
        mInitialized = true;
    }

    mUidPolicy = new UidPolicy(this);
    mUidPolicy->registerSelf();
    mSensorPrivacyPolicy = new SensorPrivacyPolicy(this);
    mSensorPrivacyPolicy->registerSelf();
    mInjectionStatusListener = new InjectionStatusListener(this);
    mAppOps.setCameraAudioRestriction(mAudioRestriction);
    sp hcs = HidlCameraService::getInstance(this);
    if (hcs->registerAsService() != android::OK) {
        ALOGE("%s: Failed to register default android.frameworks.cameraservice.service@1.0",
              __FUNCTION__);
    }

    // This needs to be last call in this function, so that it's as close to
    // ServiceManager::addService() as possible.
    CameraServiceProxyWrapper::pingCameraServiceProxy();
    ALOGI("CameraService pinged cameraservice proxy");
}

流程如下:

本文链接:http://so.lmcjl.com/news/16746/

展开阅读全文