创建mediaserver,以及mediaserver中运行的几个service。
1.文件frameworks/base/media/mediaserver/main_mediaserver.cpp
int main(int argc, char** argv) { sp<ProcessState> proc(ProcessState::self()); sp<IServiceManager> sm = defaultServiceManager(); LOGI("ServiceManager: %p", sm.get()); AudioFlinger::instantiate(); // 创建AudioFlinger对象, 服务名为"media.audio_flinger" MediaPlayerService::instantiate(); // 创建MediaPlayerService对象,服务名为"media.player" CameraService::instantiate(); // 创建CameraService对象, 服务名为"media.camera" AudioPolicyService::instantiate(); // 创建AudioPolicyService对象,服务名为"media.audio_policy" ProcessState::self()->startThreadPool(); // 创建线程,线程名为"Binder Thread #%d"格式,d为数字编码,例如"Binder Thread #1" IPCThreadState::self()->joinThreadPool(); // 把上面的线程加入Binder管理,用于IPC进程间通信。 }PoolThread继承自Thread,是一个线程类。
#if defined(HAVE_ANDROID_OS) size_t maxThreads = 15; result = ioctl(fd, BINDER_SET_MAX_THREADS, &maxThreads); if (result == -1) { LOGE("Binder ioctl to set max threads failed: %s", strerror(errno)); } #endif2.以下是生成mediaserver对应的mk文件,编译生成可执行文件mediaserver