以下介绍的是camera api1,camera hal1的流程
1.java调用
frameworks/base/core/java/android/hardware/Camera.java
+open(int cameraId)
+Camera(int cameraId) //new Camera()调用构造
+native_setup(new WeakReference<Camera>(this), cameraId, packageName); //调用native方法,传递Camera.java对象,id,调用的app包名称
2.jni调用(libandroid_runtime.so)
frameworks/base/core/jni/android_hardware_Camera.cpp
+android_hardware_Camera_native_setup(...) //调用此方法
frameworks/av/include/camera/Camera.h //camera头文件,方法实现在libcamera_client.so
+Camera::connect()
注:之所以能调用上述方法,是通过AndroidRuntime::registerNativeMethods(...) 注册了native_setup参数和方法android_hardware_Camera_native_setup的对应关系
{ "native_setup",
"(Ljava/lang/Object;ILjava/lang/String;)V",
(void*)android_hardware_Camera_native_setup },
第二行参数引用参数类型表示(L包名),I表示 jint,V表示void,即参数类型为:(Object,int,String)void
libandroid_runtime.so 将目录文件 frameworks/av/include编译进去了,所以Camera.h位于frameworks/av/include/camera/Camera.h
3