Android camera (12)---camera ap在特殊的应用场景下额外使用一套独立的camera tuning参数

本文介绍了一种在特定应用场景下为相机应用定制独立调优参数的方法。通过在软件层面增加接口并修改现有代码流程,实现了根据不同场景加载不同参数集的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

camera ap在特殊的应用场景下额外使用一套独立的camera tuning参数

解决方案:

1, nvram_drv.h core\featureio\drv\inc 中添加下面的interface

virtual void setCustomIndex(int idx=0) = 0;
virtual int getCustomIndex() = 0;

2, 在nvram_drv.cppcore\featureio\drv\nvram去实现上面的interface, custom index值default为0, 需要加载那组特殊tuning data时, 调用setCustomIndex(1)

NvramDrvBase* nvDrv;
nvDrv = NvramDrvBase::createInstance();

NvramDrvBase::createInstance() 是single instance, camera HAL检测到特殊的应用场景后(camera ap可以定义一个新的camera parameter传下来 ), 调用nvDrv-> setCustomIndex(1), 否则调用setCustomIndex(0)

3, 在nvram_drv.cpp (core\featureio\drv\nvram) 添加下面红色部分:

NvramDrv::readDefaultData(
CAMERA_DUAL_CAMERA_SENSOR_ENUM a_eSensorType,
unsigned long a_u4SensorID,
CAMERA_DATA_TYPE_ENUM a_eNvramDataType,
void *a_pNvramData
)

case CAMERA_NVRAM_DATA_ISP:
GetCameraDefaultPara(a_u4SensorID + getCustomIndex(), (PNVRAM_CAMERA_ISP_PARAM_STRUCT)a_pNvramData,NULL,NULL,NULL);
break;
case CAMERA_NVRAM_DATA_3A:
GetCameraDefaultPara(a_u4SensorID + getCustomIndex(), NULL,(PNVRAM_CAMERA_3A_STRUCT)a_pNvramData,NULL,NULL);
break;
case CAMERA_NVRAM_DATA_SHADING:
GetCameraDefaultPara(a_u4SensorID + getCustomIndex(), NULL,NULL,(PNVRAM_CAMERA_SHADING_STRUCT)a_pNvramData,NULL);
case CAMERA_DATA_AE_PLINETABLE:
GetCameraDefaultPara(a_u4SensorID + getCustomIndex(), NULL,NULL,NULL,(PAE_PLINETABLE_STRUCT)a_pNvramData);
break;
case CAMERA_DATA_TSF_TABLE:
if (0 != GetCameraTsfDefaultTbl(a_u4SensorID + getCustomIndex(), (PCAMERA_TSF_TBL_STRUCT)a_pNvramData))
{
return NVRAM_DEFAULT_DATA_READ_ERROR;
}
break;
case CAMERA_NVRAM_DATA_FEATURE:
//NVRAM_DRV_LOG("[readDefaultData] feature line=%d",__LINE__);
GetCameraFeatureDefault(a_u4SensorID + getCustomIndex(), (NVRAM_CAMERA_FEATURE_STRUCT*)a_pNvramData);
break;

4, 在sensorlist.cpp中添加一颗新的sensor, 其sensor ID是原sensor ID + 1
e.g. 实际sensor IMX135, 配置一颗IMX136和对应的tuning data

#if 1//defined(IMX135_MIPI_RAW_5MP)
RAW_INFO(IMX136_SENSOR_ID, SENSOR_DRVNAME_IMX136_MIPI_RAW_5MP,NULL),
#endif
/* ADD sensor driver before this line */
{0,{0},NULL, NULL, NULL}//end of list

[注意新配置的sensor放到sensorlist最后面, 避免search sensor时出错]

5, Middleware中所有加载tuning data的code, isForce这个值写成1, 否则读到是上一次cache起来的数据:
e.g.
err = NvBufUtil::getInstance().getBufAndRead(CAMERA_NVRAM_DATA_ISP, eSensorDev, (void*&)pNvram_Isp, 1);
NvBufUtil::getInstance().getBufAndRead(CAMERA_DATA_AE_PLINETABLE, i4SensorDev, (void*&)m_pAEPlineTable, 1/*isForce*/);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值