高通Camera驱动(2)-- initialize

01/21 10:57
阅读数 903

前面回顾

简单介绍Camx架构,接下来看下initialize流程

一、initialize 流程

    1.1 原文解读


 * 1. Framework calls camera_module_t->common.open(), which returns a
 *    hardware_device_t structure.
 *
 * 2. Framework inspects the hardware_device_t->version field, and instantiates
 *    the appropriate handler for that version of the camera hardware device. In
 *    case the version is CAMERA_DEVICE_API_VERSION_3_0, the device is cast to
 *    a camera3_device_t.
 *
 * 3. Framework calls camera3_device_t->ops->initialize() with the framework
 *    callback function pointers. This will only be called this one time after
 *    open(), before any other functions in the ops structure are called.










1、打开相机:framework这块调用common结构体的方法,camera_module_t-> common.open(),在hw_module_methods_t这块的open你的方法来打开特定 Camera,返回一个的 hardware_device_t结构。
2、检查设备硬件版本,并为之实例化:framework检查hardware_device_t-> version字段,并为该版本的相机硬件设备实例化适当的处理程序。 如果版本为CAMERA_DEVICE_API_VERSION_3_0,则设备将投射到的camera3_device_t。
3、初始化:在open()之后,ops结构中的任何其他函数之前,只调用一次initialize。framework使用framework回调函数指针调用1camera3_device_t-> ops->camera3_device_ops的 initialize()。

    1.2  官网文档

           《80-pc212-1_a_chi_api_specifications_for_qualcomm_spectra_2xx_camera.pdf》简单介绍初始化驱动的过程

      

     1.3 代码分析

               Framework到HAL3的衔接在上一篇文章概述了  Framework和HAL3之间概述,还是简单顺一下framework这块的逻辑。

            hardware/interfaces/camera/provider/2.4/default/CameraProvider_2_4.cpp    中 (1)创建 CameraProvider对象 (2)获取ExternalCameraProviderImpl_2_4实例

            hardware/interfaces/camera/provider/2.4/default/ExternalCameraProviderImpl_2_4.cpp 中  (1)创建ExternalCameraDevice 对象

            hardware/interfaces/camera/device/3.4/default/ExternalCameraDevice.cpp 中 (1)open  

               代码分析这块直接从camxhal3entry.cpp 开始撸代码。

               注意camxhal3entry.cpp这块和Framework的映射关系

              

         1.3.1  open

int open(
    const struct hw_module_t*   pHwModuleAPI,
    const char*                 pCameraIdAPI,
    struct hw_device_t**        ppHwDeviceAPI)
{
    /// @todo (CAMX-43) - Reload Jumptable from settings
    JumpTableHAL3* pHAL3 = static_cast<JumpTableHAL3*>(g_dispatchHAL3.GetJumpTable());


    return pHAL3->open(pHwModuleAPI, pCameraIdAPI, ppHwDeviceAPI);
}

          1.3.2 initialize

      hardware/interfaces/camera/device/3.2/default/CameraDeviceSession.cpp

bool CameraDeviceSession::initialize() {
    /** Initialize device with callback functions */
    ATRACE_BEGIN("camera3->initialize");
    status_t res = mDevice->ops->initialize(mDevice, this);


    return false;
}

 

        //TODO:回家吃饭,小伙子明天再搞

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部