A31S-camera流程

来源:互联网 发布:匿名函数php引用变量 编辑:程序博客网 时间:2024/06/05 12:39
open函数分析


Camera camera = Camera.open(int cameraId);
调用下面文件提供的接口
\\192.168.1.122\ygm\A31S-source\android\frameworks\base\core\java\android\hardware\Camera.java
该文件中会调用new Camera(i)
该构造函数中调用 native_setup(new WeakReference<Camera>(this), cameraId, packageName);






native字段可以确定native_setup调用的就是jni接口
\\192.168.1.122\ygm\A31S-source\android\frameworks\base\core\jni\android_hardware_Camera.cpp
static JNINativeMethod camMethods[] = {
  


    { "native_setup",
       "(Ljava/lang/Object;ILjava/lang/String;)V",
    
      (void*)android_hardware_Camera_native_setup }
    }
即调用该文件中的android_hardware_Camera_native_setup函数,该函数中调用Camera::connect即是client端的函数






可以参考:
\\192.168.1.122\ygm\A31S-source\android\frameworks\av
调用\camera下面的Camera.cpp中的-->CameraBase.cpp中的connect函数,该函数则调用const sp<ICameraService>& cs = getCameraService();
最终调用服务端的connect,来自文件\\192.168.1.122\ygm\A31S-source\android\frameworks\av\services\camera\libcameraservice\
CameraService.cpp






connect函数中则建立client对象并调用client->initialize(mModule);来自文件
\\192.168.1.122\ygm\A31S-source\android\frameworks\av\services\camera\libcameraservice\device1\
CameraHardwareInterface.h






接着就找找open函数,即来自文件
\\192.168.1.122\ygm\A31S-source\android\hardware\samsung_slsi\exynos5\libcamera
static hw_module_methods_t camera_module_methods = {
            open : HAL_camera_device_open
};
该函数中目的得到static camera_device_t *g_cam_device;再
g_cam_device->priv = new ExynosCameraHWInterface(cameraId, g_cam_device);
构造函数中
m_secCamera = ExynosCamera::createInstance();
m_secCamera->create(cameraId)
m_previewThread   = new PreviewThread(this);
m_videoThread     = new VideoThread(this);
m_autoFocusThread = new AutoFocusThread(this);
m_pictureThread   = new PictureThread(this);



0 0