[RK3399][Android7.1] Camera HAL初始化流程
2018-02-02 11:30
2176 查看
Platform: rk3399
OS: Android 7.1
Kernel: v4.4.83
rk3399对HAL的处理基本上和rk3288一样没什么变化,详细可参考
[RK3288][Android6.0] Camera HAL流程小结
OS: Android 7.1
Kernel: v4.4.83
rk3399对HAL的处理基本上和rk3288一样没什么变化,详细可参考
[RK3288][Android6.0] Camera HAL流程小结
camera_get_number_of_cameras -> //camera service会在开机的时候从HAL层获取camera number. camera_board_profiles::getInstance -> //解析camera board文件 createInstance -> new camera_board_profiles //创建一个对象用于保存文件中的参数 fopen(RK_BOARD_XML_PATH, "r"); //板子上是/system/etc/cam_board.xml,代码中是hardware/rockchip/camera/Config/cam_board_rk3399.xml fread //读取xml XML_SetElementHandler -> //核心解析在于StartElementHandler()这函数回调 new rk_cam_total_info //每创建一个代表一个device,后面会看到代表sensor的结构体:rk_sensor_info,不要弄混淆 nCamDev2 = profiles->mDevieVector.size //表示当前xml中一共配置了几个sensor nDVnum2 = profiles->mCurDevice->mSoftInfo.mDV_vector.size //当前device支持的dv config总数 camera_board_profiles::LoadSensor(profiles); -> fopen(dst_file, "r"); //刷机后第一次起来/data/media_profiles_tmp.xml是不存在的,需要创建,因此会注册所有board xml中配置的sensor OpenAndRegistALLSensor -> OpenAndRegistOneSensor -> //依次注册 dlopen //尝试打开system/lib/hw/下有没有libisp_isi_drv_XXX.so,XXX为sensor name,比如这里是OV13850 dlsym //加载so中对应的symbol,名为"IsiCamDrvConfig",定义在OV13850_MIPI.c,结构为struct IsiCamDrvConfig_s,如果要自己添加sensor,结构一定要按照它这样写。 pIsiCamDrvConfig->pfIsiGetSensorIss -> OV13850_IsiGetSensorIss OV13850_MIPI.c //填充isi sensor描述符结构体 pIsiCamDrvConfig->pfIsiGetSensorI2cInfo -> OV13850_IsiGetSensorI2cInfo //获取sensor对应的i2c信息 RegisterSensorDevice //尝试注册sensor为i2c设备,这里正式要和kernel driver通信了。 open //mCamsysDevPath是从board xml文件中的SensorHostDevID解析出来的,表示isp设备"/dev/camsys_marvin",而且用isp0还是isp1由phyIndex属性值决定 ioctl(camsys_fd, CAMSYS_VERCHK, &(pCamInfo->mCamsysVersion)); //检查版本 ioctl(camsys_fd, CAMSYS_REGISTER_DEVIO, &extdev); //注册dev到kernel中 rk_sensor_pwrseq //上电 ioctl(camsys_fd, CAMSYS_I2CWR, &i2cinfo); //执行reset操作 access(pLoadSensorInfo->mSensorXmlFile, R_OK) //如果raw格式的sensor,那么还要找到对应的calibration文件 pcalidb->CreateCalibDb //创建Calibration数据库 if(cam_cnt<CAMERAS_SUPPORT_MAX) //这个判断表示系统支持两个mipi csi口,如果前面已经有两个了csi sensor识别到了,那么下面的流程就不走了,因为csi不走v4l2,目前只看到uvc走v4l2,cif驱动没编译进去。 open(cam_path, O_RDONLY); //这里开始操作v4l2设备 "/dev/video" ioctl //查询sensor能力,cmd: VIDIOC_QUERYCAP camera_board_profiles::ProduceNewXml //根据已经注册的sensor信息创建对应的profile文件,位于/data/camera/media_profiles.xml
相关文章推荐
- [RK3399][Android7.1] Camera HAL打开流程
- [RK3399][Android7.1] Camera中的不同api版本介绍
- [RK3399][Android7.1] Display中的edp驱动调用流程
- [RK3399][Android7.1] Camera各个层源文件路径记录
- [RK3399][Android7.1] Display中的DRM和Framebuffer注册流程
- [RK3399][Android7.1] 调试笔记 --- camera中的cam_board.xml
- [RK3399][Android7.1] 调试笔记 --- 模块编译32位动态库【转】
- [RK3399][Android7.1] 系统boot code 的boot procedure
- [RK3399][Android7.1] Uboot重要文件及目录
- [RK3399][Android7.1] 调试笔记 --- DDR工作频率的获取和设置
- android7.1的SnapdragonCamera之CameraActivity逻辑流程分析整体
- Android之Camera拍照插值算法 &&Android4.2之Camera系统HAL调用流程
- [RK3399][Android7.1] 调试笔记 --- 模块编译32位动态库
- [RK3399][Android7.1] 调试笔记 --- 提高DDR频率到933MHz
- [RK3399][Android7.1] Uboot启动过程小结
- [RK3399][Android7.1] 调试笔记 --- DDR中clock相关配置
- [RK3399][Android7.1] 调试笔记 --- 确定用32还是64库
- [RK3399][Android7.1] Display中的screen type定义
- [RK3399][Android7.1] Ubuntu编译环境OpenJDK 8安装
- [RK3399][Android7.1] Audio中的Ducking模式