WEB开发网
开发学院手机开发Android 开发 Android Camera 架构介绍 阅读

Android Camera 架构介绍

 2010-03-18 16:22:00 来源:WEB开发网   
核心提示:*)android_hardware_Camera_setParameters },{"native_getParameters", "()Ljava/lang/String;",(void *)android_hardware_Camera_getParameters }};J
*)android_hardware_Camera_setParameters },

{"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& Camera::getCameraService()

{

Mutex::Autolock _l(mLock);

if (mCameraService.get() == 0) {

sp sm = defaultServiceManager();

sp binder;

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(binder);

}

LOGE_IF(mCameraService==0, "no CameraService!?");

return mCameraService;

}

其中最重要的一点是binder = sm->getService(String16("media.camera"));;这个调用用来得到一个名称为"media.camera" 的服务,这个调用返回值的类型为IBinder,根据实现将其转换成类型ICameraService使用。

上一页  3 4 5 6 7 8 9 10 11  下一页

Tags:Android Camera 架构

编辑录入:coldstar [复制链接] [打 印]
赞助商链接