首页 > 代码库 > Android 4.4KitKat AudioFlinger 流程分析

Android 4.4KitKat AudioFlinger 流程分析

AudioFlinger(AF)是一个服务,具体的代码在av\media\mediaserver\Main_mediaserver.cpp中:

int main(int argc, char** argv){    signal(SIGPIPE, SIG_IGN);    char value[PROPERTY_VALUE_MAX];    bool doLog = (property_get("ro.test_harness", value, "0") > 0) && (atoi(value) == 1);    pid_t childPid;    // FIXME The advantage of making the process containing media.log service the parent process of    // the process that contains all the other real services, is that it allows us to collect more    // detailed information such as signal numbers, stop and continue, resource usage, etc.    // But it is also more complex.  Consider replacing this by independent processes, and using    // binder on death notification instead.    if (doLog && (childPid = fork()) != 0) {        // media.log service        //prctl(PR_SET_NAME, (unsigned long) "media.log", 0, 0, 0);        // unfortunately ps ignores PR_SET_NAME for the main thread, so use this ugly hack        strcpy(argv[0], "media.log");        sp<ProcessState> proc(ProcessState::self());        MediaLogService::instantiate();        ProcessState::self()->startThreadPool();        ……
        sp<ProcessState> proc(ProcessState::self());        sp<IServiceManager> sm = defaultServiceManager();        ALOGI("ServiceManager: %p", sm.get());        AudioFlinger::instantiate();        MediaPlayerService::instantiate();        CameraService::instantiate();        AudioPolicyService::instantiate();        registerExtensions();        ProcessState::self()->startThreadPool();        IPCThreadState::self()->joinThreadPool();    }}

Android 4.4KitKat AudioFlinger 流程分析