记录自己的学习过程。。。。。。。
注: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_E

本文详述了Android系统中调用相机的流程,从硬件/camera.java开始,经由libs/camera.camera.cpp、ICamera.cpp,直至CameraHal.cpp,涉及setParameters和startPreview的过程。在MX53平台上,通过V4L2接口与摄像头驱动进行交互,包括VIDIOC_G_CTRL和VIDIOC_S_CTRL操作来获取和设置camera control状态。
最低0.47元/天 解锁文章
895

被折叠的 条评论
为什么被折叠?



