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

Android Camera 架构介绍

 2010-03-18 16:22:00 来源:WEB开发网   
核心提示:startPreview、stopPreview 和takePicture等接口就是通过JAVA本地调用(JNI)来实现的,frameworks/base/core/java/android/hardware/目录中的 Camera.java文件提供了一个JAVA类:Camera,Android Camera 架构介

startPreview、stopPreview 和takePicture等接口就是通过JAVA本地调用(JNI)来实现的。

frameworks/base/core/java/android/hardware/目录中的 Camera.java文件提供了一个JAVA类:Camera。

public class Camera {

}

在这个类当中,大部分代码使用JNI调用下层得到,例如:

public void setParameters(Parameters params) {

Log.e(TAG, "setParameters()");

//params.dump();

native_setParameters(params.flatten());

}

再者,例如以下代码:

public final void setPreviewDisplay(SurfaceHolder holder) {

setPreviewDisplay(holder.getSurface());

}

private native final void setPreviewDisplay(Surface surface);

两个setPreviewDisplay参数不同,后一个是本地方法,参数为Surface类型,前一个通过调用后一个实现,但自己的参数以SurfaceHolder为类型。

3.2 Camera的JAVA本地调用部分

Camera的JAVA本地调用(JNI)部分在frameworks/base/core/jni/目录的 android_hardware_Camera.cpp中的文件中实现。

android_hardware_Camera.cpp之中定义了一个 JNINativeMethod(JAVA本地调用方法)类型的数组gMethods,如下所示:

static JNINativeMethod camMethods[] = {

{"native_setup","(Ljava/lang/Object;)V",(void*)android_hardware_Camera_native_setup },

{"native_release","()V",(void*)android_hardware_Camera_release },

{"setPreviewDisplay","(Landroid/view/Surface;)V",(void *)android_hardware_Camera_setPreviewDisplay },

{"startPreview","()V",(void *)android_hardware_Camera_startPreview },

{"stopPreview", "()V", (void *)android_hardware_Camera_stopPreview },

{"setHasPreviewCallback","(Z)V",(void *)android_hardware_Camera_setHasPreviewCallback },

{"native_autoFocus","()V",(void *)android_hardware_Camera_autoFocus },

{"native_takePicture", "()V", (void *)android_hardware_Camera_takePicture },

{"native_setParameters","(Ljava/lang/String;)V",(void

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

Tags:Android Camera 架构

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