在Main.log中
12-19 18:43:54.430 30889 30889 D SensorHal: [getInstance][SensorHalImp] getInstance
12-19 18:43:54.430 30889 30889 D SensorHal: [createImp][createImp]: 0
12-19 18:43:54.430 30889 30889 D SeninfDrvImp: [getInstance][getInstance]
12-19 18:43:54.430 30889 30889 D SensorHal: [sendCommand] Sensor Dev: 1
12-19 18:43:54.430 30889 30889 D SeninfDrvImp: [sendCommand][sendCommand] cmd: 0x1000
12-19 18:43:54.430 30889 30889 D SensorHal: [init][init]: 0
12-19 18:43:54.430 30889 30889 D SeninfDrvImp: [init][init]: 3
12-19 18:43:54.431 30889 30889 D SeninfDrvImp: [init] Has inited
12-19 18:43:54.431 30889 30889 D SensorHal: [initSensor][initSensor]
12-19 18:43:54.431 30889 30889 D ImgSensorDrv: [init][init] mUsers = 3
12-19 18:43:54.431 30889 30889 D ImgSensorDrv: [init][init] m_fdSensor = 51
12-19 18:43:54.431 30889 30889 D ImgSensorDrv: [init][init]: m_LineTimeInus[0] = 31
12-19 18:43:54.431 30889 30889 D SensorHal: [initSensor] Main/ATV sensor resolution, Preview: 624/458, Full: 630/460
12-19 18:43:54.431 30889 30889 D SensorHal: [initSensor] Sub/MAIN_2 sensor resolution, Preview: 0/0, Full: 0/0
12-19 18:43:54.431 30889 30889 D ImgSensorDrv: [getCurrentSensorType][getCurrentSensorType]
hal层读取摄像头信息时,将前置摄像头的参数读取为主摄像头的参数,且传到kernel的参数也是错误的:
出现错误后,预览尺寸等都是用前摄数据填充的:
出现错误后kerne.log输出为:
[30929:Binder_5][[kd_sensorlist]] pDrvIndex:0x00010000/0x00000000
从问题的现象上,分为可重启恢复和不可重启恢复两种
由之前获取的log,得知问题是出现在AE曝光相关的代码中,且在出现问题前,有打开零延迟的功能
之后测试发现了一种必现路径:打开零延迟拍摄->重启手机->进入相机
而此种路径仅对701主供的机型有效,对700和701二供无效,导致无法连接的直接原因应该是mediaserver挂掉
对比了几种机型,发现主供机型在打开/关闭 零延迟功能时,会有重新测光的动作,而其他机型没有
因此怀疑是这个动作导致mediaserver挂掉。
由于lib3a.so是mtk binary release的,因此自己没有这一块代码,但从堆栈上层可以找到错误发生在AE初始化上:
#00 pc 0001282c /system/lib/lib3a.so (NS3A::AeAlgo::switchAELock(strAEOutput*)+679)
#01 pc 000169e3 /system/lib/lib3a.so (NS3A::AeAlgo::initAE(AE_INITIAL_INPUT_T const*, strAEOutput*, AE_STAT_PARAM_T*)+526)
#02 pc 00049b49 /system/lib/libfeatureio.so (NS3A::AeMgr::AEInit(NS3A::Param_T&)+504)
之后的分析需要MTK进行
由之前获取的log,得知问题是出现在AE曝光相关的代码中,且在出现问题前,有打开零延迟的功能
之后测试发现了一种必现路径:打开零延迟拍摄->重启手机->进入相机
而此种路径仅对701主供的机型有效,对700和701二供无效,导致无法连接的直接原因应该是mediaserver挂掉
对比了几种机型,发现主供机型在打开/关闭 零延迟功能时,会有重新测光的动作,而其他机型没有
因此怀疑是这个动作导致mediaserver挂掉。
由于lib3a.so是mtk binary release的,因此自己没有这一块代码,但从堆栈上层可以找到错误发生在AE初始化上:
#00 pc 0001282c /system/lib/lib3a.so (NS3A::AeAlgo::switchAELock(strAEOutput*)+679)
#01 pc 000169e3 /system/lib/lib3a.so (NS3A::AeAlgo::initAE(AE_INITIAL_INPUT_T const*, strAEOutput*, AE_STAT_PARAM_T*)+526)
#02 pc 00049b49 /system/lib/libfeatureio.so (NS3A::AeMgr::AEInit(NS3A::Param_T&)+504)
之后的分析需要MTK进行