1 CameraService启动流程
android framework中多媒体相关的都在,frameworks/av/media/mediaserver/main_mediaserver.cpp注册
// from LOCAL_C_INCLUDES,这个宏是在Android.mk中定义的,包含下面几个头文件的位置
#include "AudioFlinger.h"
#include "CameraService.h"
#include "MediaLogService.h"
#include "MediaPlayerService.h"
#include "AudioPolicyService.h"
#include "SoundTriggerHwService.h"
...
int main(int argc __unused, char** argv)
{
...
sp<ProcessState> proc(ProcessState::self());
sp<IServiceManager> sm = defaultServiceManager();
ALOGI("ServiceManager: %p", sm.get());
AudioFlinger::instantiate();
MediaPlayerService::instantiate();
CameraService::instantiate(); // CameraService实例化
AudioPolicyService::instantiate();
SoundTriggerHwService::instantiate();
registerExtensions();
ProcessState::self()->startThreadPool();
IPCThreadState::self()->joinThreadPool();
...
}
在main_mediasever.cpp同目录的Android.mk中有下面代码,可知CameraService.h文件在framewoks/av/services/camera/libcameraservice目录下,两个重要文件CameraService.cpp和CameraService.h
LOCAL_C_INCLUDES := \
frameworks/av/media/libmediaplayerservice \
frameworks/av/services/medialog \
frameworks/av/services/audioflinger \
frameworks/av/services/audiopolicy \
frameworks/av/services/camera/libcameraservice \
$(call include-path-for, audio-utils) \
frameworks/av/services/soundtrigger
CameraService.cpp中并没有实现instantiate( )方法,而是由其父类BinderService来实现
//CameraService.h
class CameraService : public BinderService<CameraService>, public BnCameraService, public IBinder::DeathRecipient,
public camera_module_callbacks_t
{
friend class BinderService<CameraService>;
public:
class Client;
class BasicClient;
...
}
//./native/include/binder/BinderService.h
template<typename SERVICE>
class BinderService
{
public:
static status_t publish(bool allowIsolated = false) {
sp<IServiceManager> sm(defaultServiceManager());
return sm->addService(
String16(SERVICE::getServiceName()),
new SERVICE(), allowIsolated);
}
static void instantiate() { publish(); }