Android Camera 架构介绍
2010-03-18 16:22:00 来源:WEB开发网{"native_getParameters", "()Ljava/lang/String;",(void *)android_hardware_Camera_getParameters }
};
JNINativeMethod的第一个成员是一个字符串,表示了JAVA本地调用方法的名称,这个名称是在JAVA程序中调用的名称;第二个成员也是一个字符串,表示JAVA本地调用方法的参数和返回值;第三个成员是JAVA本地调用方法对应的C语言函数。
register_android_hardware_Camera 函数将gMethods注册为的类"android/media/Camera",其主要的实现如下所示。
int register_android_hardware_Camera(JNIEnv *env)
{
// Register native functions
return AndroidRuntime::registerNativeMethods(env, "android/hardware/Camera",
camMethods, NELEM(camMethods));
}
3.3 Camera本地库libui.so
frameworks/base/libs/ui/中的Camera.cpp文件用于实现 Camera.h提供的接口,其中一个重要的片段如下所示:
const sp
{
Mutex::Autolock _l(mLock);
if (mCameraService.get() == 0) {
sp
sp
do {
binder = sm->getService(String16("media.camera"));
if (binder != 0)
break;
LOGW("CameraService not published, waiting...");
usleep(500000); // 0.5 s
} while(true);
if (mDeathNotifier == NULL) {
mDeathNotifier = new DeathNotifier();
}
binder->linkToDeath(mDeathNotifier);
mCameraService = interface_cast
}
LOGE_IF(mCameraService==0, "no CameraService!?");
return mCameraService;
}
其中最重要的一点是binder = sm->getService(String16("media.camera"));;这个调用用来得到一个名称为"media.camera" 的服务,这个调用返回值的类型为IBinder,根据实现将其转换成类型ICameraService使用。
更多精彩
赞助商链接