77范文网 - 专业文章范例文档资料分享平台

Android 5.0 Camera系统源码分析(5):Camera预览3A流程(3)

来源:网络收集 时间:2020-04-17 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

return S_3A_OK; }

包含了AWB、AE、AF在内的ISP相关的初始化,相关的初始化完成之后会调用m_pStateMgr->transitState函数将当前状态切换到CameraPreview状态。

代码太多,这里只关注AF的初始化

MRESULT AfMgr::init(MINT32 i4SensorIdx, MINT32 isInitMCU) {

......

// --- init MCU ---

SensorStaticInfo rSensorStaticInfo; if (m_i4EnableAF == -1) {

IHalSensorList* const pIHalSensorList = IHalSensorList::get();

IHalSensor* pIHalSensor = pIHalSensorList->createSensor(\ SensorDynamicInfo rSensorDynamicInfo;

switch(m_i4CurrSensorDev) {

case ESensorDev_Main:

pIHalSensorList->querySensorStaticInfo(NSCam::SENSOR_DEV_MAIN, &rSensorStaticInfo);

pIHalSensor->querySensorDynamicInfo(NSCam::SENSOR_DEV_MAIN, &rSensorDynamicInfo); break;

case ESensorDev_Sub: ...... default:

MY_ERR(\ }

if(pIHalSensor) pIHalSensor->destroyInstance(\

......

m_i4CurrSensorId=rSensorStaticInfo.sensorDevID;

MCUDrv::lensSearch(m_i4CurrSensorDev, m_i4CurrSensorId); m_i4CurrLensId = MCUDrv::getCurrLensID(m_i4CurrSensorDev); ...... }

if(isInitMCU) {

m_pMcuDrv = MCUDrv::createInstance(m_i4CurrLensId);

if (m_pMcuDrv->init(m_i4CurrSensorDev) < 0) {

MY_ERR(\ m_i4EnableAF = 0; } else {

m_pMcuDrv->moveMCU( 0, m_i4CurrSensorDev); m_MoveLensTimeStamp = getTimeStamp(); } }

// --- init ISP Drv/Reg --- ......

// --- checking PDAF is supported or not --- ......

// --- init af algo --- ......

// --- NVRAM --- int err; err = NvBufUtil::getInstance().getBufAndRead(CAMERA_NVRAM_DATA_LENS, m_i4CurrSensorDev, (void*&)g_pNVRAM_LENS); if(err!=0)

MY_ERR(\

m_NVRAM_LENS.rFocusRange = g_pNVRAM_LENS->rFocusRange; m_NVRAM_LENS.rAFNVRAM= g_pNVRAM_LENS->rAFNVRAM; m_NVRAM_LENS.rPDNVRAM = g_pNVRAM_LENS->rPDNVRAM;

// --- Param ---

m_sAFParam = getAFParam(); m_sAFConfig = getAFConfig();

m_pIAfAlgo->setAFParam(m_sAFParam, m_sAFConfig, m_NVRAM_LENS.rAFNVRAM);

m_pIAfAlgo->initAF(m_sAFInput, m_sAFOutput); ......

m_pIAfAlgo->setAFMode(m_eLIB3A_AFMode);

//init pd mgr ......

return S_AF_OK; }

第30行,调用lensSearch函数匹配镜头驱动 第35-49行,将镜头移动到起始位置 第60-67行,获取af tuning参数 第69-73行,设置af tuning参数

3.3 匹配镜头驱动

MTK为多个镜头做了兼容,所以AF初始化的第一步就是找到当前对应镜头的型号。lensSearch函数实现了lens的匹配过程 int

MCUDrv::lensSearch( unsigned int a_u4CurrSensorDev, unsigned int a_u4CurrSensorId) {

INT32 i;

LensCustomInit(a_u4CurrSensorDev);

if (a_u4CurrSensorDev == MCU_DEV_MAIN ) {

LensCustomGetInitFunc(&MCUDrv::m_LensInitFunc_main[0]); MCUDrv::m_u4CurrLensIdx_main = 0;

for (i=0; i

if ((MCUDrv::m_LensInitFunc_main[i].LensId == DUMMY_LENS_ID) ||

(MCUDrv::m_LensInitFunc_main[i].LensId == SENSOR_DRIVE_LENS_ID) /*||

(MCUDrv::m_LensInitFunc_main[i].LensId == FM50AF_LENS_ID)*/ ) {

MCUDrv::m_u4CurrLensIdx_main = i; } }

// force assign LensIdx if SensorId != DUMMY_SENSOR_ID (to support backup lens/new lens driver)

for (i=0; i

if ((MCUDrv::m_LensInitFunc_main[i].SensorId == a_u4CurrSensorId) && (a_u4CurrSensorId!=0xFFFF) && (a_u4CurrSensorId!=0x0)) {

MCUDrv::m_u4CurrLensIdx_main = i; MCU_DRV_DBG(\[CurrSensorId]0xx,[CurrLensIdx]0xx\\n\i, a_u4CurrSensorId, MCUDrv::m_u4CurrLensIdx_main); break; } }

LensCustomSetIndex(MCUDrv::m_u4CurrLensIdx_main);

MCU_DRV_DBG(\

}

else if( a_u4CurrSensorDev == MCU_DEV_SUB) {

...... } else

return MCU_INVALID_DRIVER;

return MCU_NO_ERROR; }

先看LensCustomInit函数,由它来获取拷贝整个lens列表

MUINT32 LensCustomInit(unsigned int a_u4CurrSensorDev) {

GetLensInitFuncList(&LensInitFunc[0], a_u4CurrSensorDev); return 0; }

UINT32 GetLensInitFuncList(PMSDK_LENS_INIT_FUNCTION_STRUCT pLensList, unsigned int a_u4CurrSensorDev) {

if(a_u4CurrSensorDev==2) //sub memcpy(pLensList, &LensList_sub[0], sizeof(MSDK_LENS_INIT_FUNCTION_STRUCT)* MAX_NUM_OF_SUPPORT_LENS); else if(a_u4CurrSensorDev==4) //main 2 memcpy(pLensList, &LensList_main2[0], sizeof(MSDK_LENS_INIT_FUNCTION_STRUCT)* MAX_NUM_OF_SUPPORT_LENS); else // main or others memcpy(pLensList, &LensList_main[0], sizeof(MSDK_LENS_INIT_FUNCTION_STRUCT)* MAX_NUM_OF_SUPPORT_LENS);

return MHAL_NO_ERROR; }

根据前后摄像头拷贝不同的LensList,这里只看其中的LensList_main

MSDK_LENS_INIT_FUNCTION_STRUCT

LensList_main[MAX_NUM_OF_SUPPORT_LENS] = {

{DUMMY_SENSOR_ID, DUMMY_LENS_ID, \ #if defined(SENSORDRIVE) {OV3640_SENSOR_ID, SENSOR_DRIVE_LENS_ID, \pSensorDrive_getDefaultData}, #endif

#if defined(FM50AF)

{DUMMY_SENSOR_ID, FM50AF_LENS_ID, \pFM50AF_getDefaultData}, #endif

#if defined(DW9714AF)

{IMX135_SENSOR_ID, DW9714AF_LENS_ID, \pDW9714AF_getDefaultData}, #endif ...... };

LensList_main包含了后摄所有可用的lens,如果要新增一个lens驱动,就需要往这个数组添加相关的信息,看下MSDK_LENS_INIT_FUNCTION_STRUCT结构体的定义

typedef struct {

UINT32 SensorId; UINT32 LensId;

UINT8 LensDrvName[32];

UINT32 (*getLensDefault)(VOID *pDataBuf, UINT32 size);

} MSDK_LENS_INIT_FUNCTION_STRUCT, *PMSDK_LENS_INIT_FUNCTION_STRUCT;

SensorId:表示这个lens driver配置给对应的sensor使用,如果配置成DUMMY_SENSOR_ID则表示这个lens driver适合所有sensor使用 LensId:Lens driver的唯一标识

LensDrvName:是实现AF功能的驱动对应的设备驱动节点名。例如FM20AF,实现AF功能的是内核驱动里面的fm20af.c,这个驱动会生成一个驱动节点”/dev/fm20af” getLensDefault:这个函数指针指向了获取AF tuning参数表的一个函数

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库Android 5.0 Camera系统源码分析(5):Camera预览3A流程(3)在线全文阅读。

Android 5.0 Camera系统源码分析(5):Camera预览3A流程(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/984277.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: