记录自己的学习过程。。。。。。。
注:1. surfaceflinger暂时不完全懂,后续研究
2. 平台mx53
android 中文件调用流程: hardware/camera.java -----> libs/camera.camera.cpp ------> cameraservice.cpp ------> CameraHal.cpp
hardware/camera.java -----> libs/camera.camera.cpp ------> ICamera.cpp ------> cameraservice.cpp ------> CameraHal.cpp
android 中打开摄像头驱动的基本流程:
- 打开camera, 函数调用流程:
public static Camera open() {
int numberOfCameras = getNumberOfCameras(); //获取camera数量
CameraInfo cameraInfo = new CameraInfo();
for (int i = 0; i < numberOfCameras; i++) {
getCameraInfo(i, cameraInfo);
if (cameraInfo.facing == CameraInfo.CAMERA_FACING_BACK) { //看注释,好像是判断是前置摄像头,还是后置摄像头
return new Camera(i);
}
}
return null;
}
Camera(int cameraId) {
mShutterCallback = null;
mRawImageCallback = null;
mJpegCallback = null;
mPreviewCallback = null;
mPostviewCallback = null;
mZoomListener = null;
Looper looper;
if ((looper = Looper.myLooper()) != null) {
mEventHandler = new EventHandler(this, looper);
} else if ((looper = Looper.getMainLooper()) != null) {
mEventHandler = new EventHandler(this, looper);
} else {
mEventHandler = null;
}
native_setup(new WeakReference<Camera>(this), cameraId); //connect to camera service
}
b) native_setup会调用到android_hardware_camera.cpp文件中的android_hardware_camera_native_setup()函数
static void android_hardware_Camera_native_setup(JNIEnv *env, jobject thiz,
jobject weak_this, jint cameraId)
{
sp<Camera> camera = Camera::connect(cameraId); //framework/base/libs/camera/camera.cpp中的connect函数,如下
if (camera == NULL) {
jniThrowException(env, "java/lang/RuntimeException",
"Fail to connect to camera service");
return;
}
// make sure camera hardware is alive
if (camera->getStatus() != NO_ERROR) { //判断可用
jniThrowException(env, "java/lang/RuntimeException", "Camera initialization failed");
return;
}
jclass clazz