高通Camera驱动(2)-- initialize

前面回顾

简单介绍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》简单介绍初始化驱动的过程

      高通Camera驱动(2)-- initialize_第1张图片

     1.3 代码分析

               代码分析这块直接从camxhal3entry.cpp 开始撸代码。Framework到HAL3的衔接在上一篇文章概述了  Framework和HAL3之间概述

                  

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(g_dispatchHAL3.GetJumpTable());

    CAMX_ASSERT(pHAL3);
    CAMX_ASSERT(pHAL3->open);

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

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

你可能感兴趣的:(高通,Cam,Hal,3,android,c++)