总结调试camera sensor的代码流程。简单的基本的代码框架
Sprd_Sensor_Porting_Guide_For_SL8521E.pdf

Open 部分:
.open = SprdCamera3Factory::camera_device_open
    return gSprdCamera3Factory.cameraDeviceOpen(atoi(id), hw_device)
        rc = hw->openCamera(hw_device)
            ret = openCamera()
                int SprdCamera3OEMIf::openCamera()    
                    mHalOem->ops->camera_set_largest_picture_size(mCameraId, mLargestPictureWidth, mLargestPictureHeight)
                    ZSLMode_monitor_thread_init()
                    startCameraIfNecessary()
                        mHalOem->ops->camera_init(mCameraId, camera_cb, this, 0,&mCameraHandle, (void *)Callback_Malloc,(void *)Callback_Free))
                            camera_cb
                                obj->HandleStartPreview(cb, parm4);
                                obj->HandleStopPreview(cb, parm4);
                                obj->HandleCancelPicture(cb, parm4);
                                obj->HandleTakePicture(cb, parm4);
                                obj->HandleEncode(cb, parm4);
                                obj->HandleFocus(cb, parm4);
                                obj->HandleAutoExposure(cb, parm4);
                                obj->HandleStartCamera(cb, parm4);
                                obj->HandleStopCamera(cb, parm4);
                        mHalOem->ops->camera_get_zsl_capability(mCameraHandle, &is_support_zsl, &max_width, &max_height);
                        mHalOem->ops->camera_ioctrl(mCameraHandle, CAMERA_IOCTRL_GET_GRAB_CAPABILITY, &grab_capability);
                        mHalOem->ops->camera_get_sensor_exif_info(mCameraHandle, &exif_info);
                        mHalOem->ops->camera_get_sensor_otp_info(mCameraHandle, &otp_info);
                        mHalOem->ops->camera_get_sensor_info_for_raw(mCameraHandle, mode_info);
vendor/sprd/modules/libcamera/oem2v1/src/SprdOEMCamera.c
mHalOem->ops->camera_init(mCameraId, camera_cb, this, 0,&mCameraHandle, (void *)Callback_Malloc,(void *)Callback_Free))    
    ret = camera_local_int(camera_id, callback, client_data, is_autotest, camera_handle, cb_of_malloc, cb_of_free);
        cxt->camera_cb = callback;
        ret = camera_init_internal((cmr_handle)cxt, is_autotest);
            ret = camera_grab_init(oem_handle);
            ret = camera_res_init(oem_handle);
            ret = camera_isp_init(oem_handle);
            ret = camera_res_init_done(oem_handle);
            ret = camera_sensor_init(oem_handle, is_autotest);
                ret = cmr_sensor_init(&init_param, &sensor_handle);
                    ret = cmr_sns_create_thread(handle);
                        ret = cmr_thread_create(&handle->thread_cxt.thread_handle, SENSOR_MSG_QUEUE_SIZE, cmr_sns_thread_proc, (void *)handle);
                            cmr_int cmr_sns_thread_proc(struct cmr_msg *message, void *p_data)
                                #define CMR_SENSOR_EVT_BASE (CMR_EVT_SENSOR_BASE + 0x100)
                                #define CMR_SENSOR_EVT_INIT (CMR_SENSOR_EVT_BASE + 0x0)
                                #define CMR_SENSOR_EVT_EXIT (CMR_SENSOR_EVT_BASE + 0x1)
                                #define CMR_SENSOR_EVT_OPEN (CMR_SENSOR_EVT_BASE + 0x2)
                                #define CMR_SENSOR_EVT_CLOSE (CMR_SENSOR_EVT_BASE + 0x3)
                                #define CMR_SENSOR_EVT_IOCTL (CMR_SENSOR_EVT_BASE + 0x4)
                                #define CMR_SENSOR_EVT_SETMODE (CMR_SENSOR_EVT_BASE + 0x5)
                                #define CMR_SENSOR_EVT_SETMODONE (CMR_SENSOR_EVT_BASE + 0x6)
                                #define CMR_SENSOR_EVT_AFINIT (CMR_SENSOR_EVT_BASE + 0x7)
                                #define CMR_SENSOR_EVT_STREAM (CMR_SENSOR_EVT_BASE + 0x8)
                                #define CMR_SENSOR_EVT_SETEXIF (CMR_SENSOR_EVT_BASE + 0x9)
                                #define CMR_SENSOR_EVT_ISPARAM_FROM_FILE (CMR_SENSOR_EVT_BASE + 0xa)
                ret = cmr_sensor_open(sensor_handle, camera_id_bits);
                    message.msg_type = CMR_SENSOR_EVT_OPEN;
                    ret = cmr_thread_msg_send(handle->thread_cxt.thread_handle, &message);
                            ret = cmr_sns_open(handle, ops_param);
                                ret = sensor_open_common(&handle->sensor_cxt[cameraId], cameraId, handle->is_autotest);    
                                    ret_val = sensor_create_ctrl_thread(sensor_cxt);
                                                ret = cmr_thread_create(&sensor_cxt->ctrl_thread_cxt.thread_handle, SENSOR_CTRL_MSG_QUEUE_SIZE, sensor_ctrl_thread_proc, (void *)sensor_cxt);
                                                    LOCAL cmr_int sensor_ctrl_thread_proc(struct cmr_msg *message, void *p_data)
                                                        #define SENSOR_CTRL_EVT_BASE (CMR_EVT_SENSOR_BASE + 0x800)
                                                        #define SENSOR_CTRL_EVT_INIT (SENSOR_CTRL_EVT_BASE + 0x0)
                                                        #define SENSOR_CTRL_EVT_EXIT (SENSOR_CTRL_EVT_BASE + 0x1)
                                                        #define SENSOR_CTRL_EVT_SETMODE (SENSOR_CTRL_EVT_BASE + 0x2)
                                                        #define SENSOR_CTRL_EVT_SETMODONE (SENSOR_CTRL_EVT_BASE + 0x3)
                                                        #define SENSOR_CTRL_EVT_CFGOTP (SENSOR_CTRL_EVT_BASE + 0x4)
                                                        #define SENSOR_CTRL_EVT_STREAM_CTRL (SENSOR_CTRL_EVT_BASE + 0x5)
                                    fd_sensor = hw_sensor_drv_create(&input_ptr, &hw_drv_handle);
                                        ret = _hw_sensor_dev_init(*hw_drv_handle, input_ptr->sensor_id);
                                            hw_drv_cxt->fd_sensor = open(HW_SENSOR_DEV_NAME, O_RDWR, 0);
kernel\drivers\misc\sprd_camera\sensor\sprd_sensor_core.c
                                                static int sprd_sensor_file_open(struct inode *node, struct file *file)
                                                    ......
                                    if (sensor_identify(sensor_cxt, SENSOR_MAIN))
                                        ret = sensor_get_match_info(sensor_cxt, sensor_id);
                                            module_tab = sensor_get_module_tab(0, sensor_id);
                                                sensor_infor_tab_ptr = (SENSOR_MATCH_T *)&back_sensor_infor_tab;
                                                    {MODULE_SUNNY, "gc0310", &g_GC0310_MIPI_yuv_info, {NULL, 0}, NULL},
                                        ret = sensor_ic_identify(sensor_cxt, sensor_id);
                                            ret = sensor_get_module_cfg_info(sensor_cxt, sensor_id, &mod_cfg_info);
                                                *cfg_info = &mod_cfg_tab[i].module_info;
                                            sensor_cxt->i2c_addr = mod_cfg_info->major_i2c_addr;
                                            ret = sensor_ic_create(sensor_cxt, sensor_id);
                                                sns_init_para.ops_cb.set_mode = sensor_set_mode_common;
                                                sns_init_para.ops_cb.get_mode = sensor_get_mode_common;
                                                sns_init_para.ops_cb.set_exif_info = sensor_set_exif_common;
                                                sns_init_para.ops_cb.get_exif_info = sensor_get_exif_common;
                                                sns_init_para.ops_cb.set_mode_wait_done = sensor_set_mode_done_common;
                                                ret = sns_ops->create_handle(&sns_init_para, &sensor_cxt->sns_ic_drv_handle);
                                                    static cmr_int gc0310_drv_handle_create
                                                        sensor_ic_set_match_module_info(sns_drv_cxt, ARRAY_SIZE(s_GC0310_module_info_tab), s_GC0310_module_info_tab);
                                                        sensor_ic_set_match_resolution_info(sns_drv_cxt, ARRAY_SIZE(s_gc0310_resolution_tab_yuv), s_gc0310_resolution_tab_yuv);
                                                        sensor_ic_set_match_trim_info(sns_drv_cxt, ARRAY_SIZE(s_gc0310_resolution_trim_tab), s_gc0310_resolution_trim_tab);
                                            sensor_i2c_init(sensor_cxt, sensor_id);
                                                if (hw_sensor_i2c_init(sensor_cxt->hw_drv_handle, sensor_id)) 
                                                    ret = ioctl(hw_drv_cxt->fd_sensor, SENSOR_IO_SET_ID, &sensor_id);
                                            sensor_power_on(sensor_cxt, SCI_TRUE); /*power on*/
                                                sns_ops->power(sensor_cxt->sns_ic_drv_handle, power_on);
                                                    static cmr_int gc0310_drv_power_on(cmr_handle handle, cmr_uint power_on)
                                                        hw_sensor_power_down(sns_drv_cxt->hw_handle, !power_down);
                                                            ret = ioctl(hw_drv_cxt->fd_sensor, SENSOR_IO_PD, &power_level);
                                                                static long sprd_sensor_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                                                                    ret = sprd_sensor_io_set_pd(p_file, arg);
                                                                        ret = sprd_sensor_set_pd_level(p_file->sensor_id, power_level);
                                                                            ret = gpio_direction_output(pwn_gpio_id, 0);
                                                        hw_sensor_set_iovdd_val(sns_drv_cxt->hw_handle, iovdd_val);
                                                            ret = sprd_sensor_io_set_iovdd(p_file, arg);
                                                        hw_sensor_set_avdd_val(sns_drv_cxt->hw_handle, avdd_val);
                                                            ret = sprd_sensor_io_set_avdd(p_file, arg);
                                                        hw_sensor_set_mclk(sns_drv_cxt->hw_handle, SENSOR_DEFALUT_MCLK);
                                                            ret = sprd_sensor_io_set_mclk(p_file, arg);
                                            ret = sns_ops->identify(sensor_cxt->sns_ic_drv_handle, SENSOR_ZERO_I2C);
                                                static cmr_int gc0310_drv_identify(cmr_handle handle, cmr_uint param)
                                                    sensor_id = hw_sensor_read_reg
                                    ret_val = sensor_open(sensor_cxt, sensor_id);    
                                        if (SENSOR_SUCCESS != sensor_set_mode_msg(sensor_cxt, SENSOR_MODE_COMMON_INIT,is_inited))
                                                ret = cmr_thread_msg_send(sensor_cxt->ctrl_thread_cxt.thread_handle, &message);
                                                    sensor_set_mode(sensor_cxt, mode, is_inited);
                                                        mod_cfg_info = sensor_ic_get_data(sensor_cxt, SENSOR_CMD_GET_MODULE_CFG);
                                                            sns_ops->get_data
                                                                static cmr_int gc0310_drv_get_private_data
                                                                     ret = sensor_ic_get_private_data(handle,cmd, param);
                                                                        *param = sns_drv_cxt->trim_tab_info;
                                                                        *param = sns_drv_cxt->res_tab_info;
                                                                        *param = sns_drv_cxt->module_info;
                                                        res_trim_ptr = sensor_ic_get_data(sensor_cxt, SENSOR_CMD_GET_TRIM_TAB);
                                                        res_info_ptr = sensor_ic_get_data(sensor_cxt, SENSOR_CMD_GET_RESOLUTION);
                                                        hw_Sensor_SendRegTabToSensor(sensor_cxt->hw_drv_handle, &res_info_ptr[mode]);
                                                            ret = _hw_sensor_dev_WriteRegTab(hw_handle, &regTab);
                                                                s_gc0310_resolution_tab_yuv
                                        sensor_af_init(sensor_cxt);
                                        sensor_otp_module_init(sensor_cxt);
                                        sensor_write_dualcam_otpdata(sensor_cxt, sensor_id);
                                        sensor_otp_rw_ctrl(sensor_cxt, OTP_READ_PARSE_DATA, 0, NULL);
                                        otp_ops->sensor_otp_ioctl(sensor_cxt->otp_drv_handle, CMD_SNS_OTP_GET_VENDOR_ID, (void *)&vendor_id);
                                        sensor_set_raw_infor(sensor_cxt, vendor_id);
                                        sensor_cxt->stream_on = 1;
                                        sensor_stream_off(sensor_cxt);
                                        SENSOR_LOGI("open success");
至此,Camera的Open基本流程已经完成

SPRD Camera sensor相关推荐

  1. [SPRD CAMERA] 4 HAL Camera open流程一

    前言 最近在搞8581的camera问题,作为一个新手从没有做过camera部分,希望通过这一系列的文章记录自己学习过程.     大量参考大神的文章:[Camera专题]你应该熟悉的Camera驱动 ...

  2. 【SPRD CAMERA】1 HAL层初始化流程

    一.前言 根据我的理解以前android在启动camera service 会直接去操作hal层,这样hal层和framework就耦合在一起了.现在 Android O 中,加入了Camera Pr ...

  3. 展锐平台的camera sensor驱动代码设计解析(2)

    展锐平台的camera sensor驱动代码设计解析(1) 展锐平台的camera sensor驱动代码设计解析(2) 展锐平台的camera sensor驱动代码设计解析(3) Camera驱动的基 ...

  4. Camera Sensor

    camera sensor分为YUV sensor和Bayer sensor. YUV Sensor YUV Sensor输出的格式是YUV,图像的处理效果使用sensor内部的ISP,BB端接收到的 ...

  5. Camera sensor 基本原理

    1 Camera 工作原理介绍 1.1 结构 . 一般来说,camera 主要是由 lens 和 sensor IC 两部分组成,其中有的 sensor IC 集成 了 DSP,有的没有集成,但也需要 ...

  6. 【高通SDM660平台 Android 10.0】(10) --- Camera Sensor lib 与 Kernel Camera Probe 代码分析

    [高通SDM660平台 Android 10.0]Camera Sensor lib 与 Kernel Camera Probe 代码分析 一.libmmcamera_imx258.so 代码分析 1 ...

  7. Camera Sensor Binning skipping 模式介绍

    通常Camera Sensor 在不同的分辨率下会对应不同的帧率.想要提高帧率就要考虑是否需要缩小视野(FOV).若不希望视野缩小,又需要减少resolution, 常用的两种方式是Binning 和 ...

  8. 摄像头 - Camera sensor 基本知识

    Camera sensor 基本知识(1) https://www.ccm99.com/thread-115494-1-1.html (出处: 摄像头模组论坛技术研发网-camera摄像头ccm论坛) ...

  9. Camera Sensor 的工频闪烁

                                       Camera Sensor 的工频闪烁 目录 Camera Sensor 的工频闪烁 一.工频干扰闪烁现象 二.工频干扰闪烁的原因 ...

最新文章

  1. epoll监听文件_epoll详解——从功能到内核
  2. 训练神经网络最应该注意什么才能让显卡最大限度的发挥性能
  3. some of the strides of a given numpy array are negative
  4. Puppet exec资源介绍(二十六)
  5. 一组匹配中国大陆手机号的正则表达式
  6. 大型翻车现场?人人车官博辟谣破产传闻 却被群嘲官博怕是还蒙在鼓里
  7. 自动化测试——unittest生成HTML测试报告
  8. 全自动抠图换背景软件下载_智能抠图换背景软件-手挥自动背景更换软件
  9. SQL Server 2000/2005/2008 系列产品下载地址
  10. 网络七层协议,一张图片告诉你
  11. 浅谈大型互联网的企业入/侵及防护策略
  12. 华为云牛客网之学生华为云服务器体验之路_1云服务器的购买篇
  13. Alexnet网络结构详解
  14. 使用代码操作WLAN
  15. 用批处理文件实现文件夹加密
  16. day18-面向对象作业
  17. 2022-2028全球及中国触摸屏人机界面(HMI)行业研究及十四五规划分析报告
  18. Linux 目录与文件
  19. 物联网通信-末端监控点环网组网设计
  20. mysql rollback如何使用_MYSQL的COMMIT和ROLLBACK使用讲解

热门文章

  1. fiddler抓包以及连接不上网解决方案
  2. HBuilder X 无法启动微信开发者工具问题解决方法
  3. 浏览器的两种设置方法:本地的设置方法与静默设置
  4. Pitfall of OO Programming
  5. 【转】国家集训队论文分类
  6. 如何提升w ndows10系统网速,Win10专业版系统网速慢的解决方法
  7. Forcing close of thread
  8. Android涂鸦简单制作
  9. 实战演练 | Navicat Premium 轻松连接阿里云云数据库
  10. php小卖铺源码,PHP自动化售货发卡网源码-小酒资源