
和你一起终身学习,这里是程序员Android
经典好文推荐,通过阅读本文,您将收获以下知识点:
一、Camera 框架介绍:
二、Camera 启动流程
三、kernel 启动流程
1、set clock 设置时钟
2、set driver
3、上电相关
四、总结
1、ID读取不到,I2C不通
2、Camera 启动时间过长
3、preview 阶段耗时
4、低电流、功耗相关问题
一、Camera 框架介绍:
Camera的框架分为Kernel部分和hal部分,其中kernel部分主要有两块:
image sensor driver,负责具体型号的sensor的id检测,上电,以及在preview、capture、初始化、3A等等功能设定时的寄存器配置;isp driver,通过DMA将sensor数据流上传;
HAL层部分主要有三部分组成:
imageio,主要负责数据buffer上传的pipe;drv,包含imgsensor和isp的hal层控制;feature io,包含各种3A等性能配置;
这篇内容主要介绍开机过程中search sensor以及上电流程等内容。
二、Camera 启动流程
1、CameraService是在开机时启动的,启动后进行searchSensor的操作,会search系统有多少camera,开机时的search操作,只进行camera支持数量的遍历,以及sensor ID的读取操作,如下是hal部分的ASTAH绘制调用流程图,对应的接口的文件路径:
HalSensorList:
vendor/mediatek/proprietary/hardware/mtkcam/drv/src/sensor/common/v1/HalSensorList.enumList.cppvendor/mediatek/proprietary/hardware/mtkcam/drv/src/sensor/common/v1/HalSensorList.cppSeninfDrv:
vendor/mediatek/proprietary/hardware/mtkcam/drv/src/sensor/mt6765/seninf_drv.cppSensorDrv:
vendor/mediatek/proprietary/hardware/mtkcam/drv/src/sensor/common/v1/imgsensor_drv.cpp
(1) 这里先看enumerateSensor_Locked完成的工作,直接看代码:
MUINT HalSensorList::searchSensors()
{
Mutex::Autolock _l(mEnumSensorMutex);
MY_LOGD("searchSensors");
return enumerateSensor_Locked();
}
MUINT HalSensorList::enumerateSensor_Locked()
{
SensorDrv *const pSensorDrv = SensorDrv::get();
SeninfDrv *const pSeninfDrv = SeninfDrv::createInstance();
//初始化seninf,配置ISP相关内容
pSeninfDrv->init();
//将所有的clk全部打开
pSeninfDrv->setAllMclkOnOff(ISP_DRIVING_8MA, TRUE);
pSensorDrv->init();
for (MUINT i = IMGSENSOR_SENSOR_IDX_MIN_NUM; i <= max_index_of_camera; i++) {
if((ret = pSensorDrv->searchSensor((IMGSENSOR_SENSOR_IDX)i)) == SENSOR_NO_ERROR){
//query sensorinfo
queryS

最低0.47元/天 解锁文章
2870

被折叠的 条评论
为什么被折叠?



