FAQ05047:在进入camera或者在camera中切换场景时,出现“很抱歉,相机已停止运行”
描述:进入camera或者切换场景时,出现“很抱歉,相机已停止运行”,LOG中出现:
11-15 09:37:57.222: E/MtkCam/MCamHw(102): Error count of area!(parseCamAreas){#1952:mediatek/source/external/camera/mt6575/CamAdapter/mHal/mHalCamParameters.cpp}
11-15 09:37:57.222: E/MtkCam/MCamHw(102): [setParameters]ERROR: metering areas = (0,0,0,0,0) (setParameters){#1402:mediatek/source/external/camera/mt6575/CamAdapter/mHal/mHalCamParameters.cpp}
分析:YUV sensor在进入camera或者在camera中切换场景模式时,会从底层driver中query支持touch AE/AF区域的个数(1表示支持touch AE/AF,0表示不支持),若在sensor driver中没有返回该值的时候,则默认返回一个随机值,当该随机值为1时,认为支持touch AE/AF,当随机值不为1时,认为不支持touch AE/AF。而当连续两次query回来的值不一样时,就会报出上述错误,进而导致相机停止运行,因此该问题会概率性复现,且复现概率并不高。
解决:根据如上分析,只需在sensor driver里面固定返回是否支持touch AE/AF,该问题就得到解决。
具体方法:
在sensor driver的XXXXXFeatureControl 加入以下两个case:
case SENSOR_FEATURE_GET_AF_MAX_NUM_FOCUS_AREAS:
XXXXXGetAFMaxNumFocusAreas(pFeatureReturnPara32);
*pFeatureParaLen=4;
break;
case SENSOR_FEATURE_GET_AE_MAX_NUM_METERING_AREAS:
XXXXXGetAFMaxNumMeteringAreas(pFeatureReturnPara32);
*pFeatureParaLen=4;
break;
并实现这两个函数:
void XXXXXGetAFMaxNumFocusAreas(UINT32 *pFeatureReturnPara32)
{
*pFeatureReturnPara32=0; //若支持,则填1
}
Void XXXXXGetAFMaxNumMeteringAreas(UINT32 *pFeatureReturnPara32)
{
*pFeatureReturnPara32=0; //若支持,则填1
}
